Skip to content

Commit 2046f47

Browse files
author
Alberto Iannaccone
committed
let the user edit the stepper input with keyboard
1 parent bc264d1 commit 2046f47

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

Diff for: arduino-ide-extension/src/browser/dialogs/settings/settings-step-input.tsx

+18-8
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ const SettingsStepInput: React.FC<SettingsStepInputProps> = (
2424
classNames,
2525
} = props;
2626

27+
const [tempValue, setTempValue] = React.useState<string>(String(value));
28+
2729
const clamp = (value: number, min: number, max: number): number => {
2830
return Math.min(Math.max(value, min), max);
2931
};
@@ -52,17 +54,24 @@ const SettingsStepInput: React.FC<SettingsStepInputProps> = (
5254

5355
const onUserInput = (event: React.ChangeEvent<HTMLInputElement>): void => {
5456
const { value: eventValue } = event.target;
57+
setTempValue(eventValue);
58+
};
5559

56-
if (eventValue === '') {
57-
setSettingsStateValue(0);
58-
}
59-
60-
const number = Number(eventValue);
60+
/* Prevent the user from entering invalid values */
61+
const onBlur = (): void => {
62+
const tempValueAsNumber = Number(tempValue);
6163

62-
if (!isNaN(number) && number !== value) {
63-
const newValue = clamp(number, minValue, maxValue);
64+
/* If the user input is not a number, reset the input to the previous value */
65+
if (isNaN(tempValueAsNumber) || tempValue === '') {
66+
setTempValue(String(value));
67+
return;
68+
}
69+
if (tempValueAsNumber !== value) {
70+
/* If the user input is a number, clamp it to the min and max values */
71+
const newValue = clamp(tempValueAsNumber, minValue, maxValue);
6472

6573
setSettingsStateValue(newValue);
74+
setTempValue(String(newValue));
6675
}
6776
};
6877

@@ -73,8 +82,9 @@ const SettingsStepInput: React.FC<SettingsStepInputProps> = (
7382
<div className="settings-step-input-container">
7483
<input
7584
className={classnames('settings-step-input-element', classNames?.input)}
76-
value={value.toString()}
85+
value={tempValue.toString()}
7786
onChange={onUserInput}
87+
onBlur={onBlur}
7888
type="number"
7989
pattern="[0-9]+"
8090
/>

0 commit comments

Comments
 (0)