fix: allow float to be typed in float input (#7275)
Added local state for (.) to be allowed when inserting Float input
This commit is contained in:
parent
6c4828b72e
commit
9e480026b3
1 changed files with 19 additions and 5 deletions
|
|
@ -23,6 +23,9 @@ export default function FloatComponent({
|
||||||
const min = rangeSpec?.min ?? -2;
|
const min = rangeSpec?.min ?? -2;
|
||||||
const max = rangeSpec?.max ?? 2;
|
const max = rangeSpec?.max ?? 2;
|
||||||
|
|
||||||
|
// Local state for input value
|
||||||
|
const [localValue, setLocalValue] = useState<string>(value.toString());
|
||||||
|
|
||||||
// Clear component state
|
// Clear component state
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (disabled && value !== 0) {
|
if (disabled && value !== 0) {
|
||||||
|
|
@ -30,20 +33,29 @@ export default function FloatComponent({
|
||||||
}
|
}
|
||||||
}, [disabled, handleOnNewValue]);
|
}, [disabled, handleOnNewValue]);
|
||||||
|
|
||||||
|
// Update local value when prop changes
|
||||||
|
useEffect(() => {
|
||||||
|
setLocalValue(value.toString());
|
||||||
|
}, [value]);
|
||||||
|
|
||||||
const [cursor, setCursor] = useState<number | null>(null);
|
const [cursor, setCursor] = useState<number | null>(null);
|
||||||
const ref = useRef<HTMLInputElement>(null);
|
const ref = useRef<HTMLInputElement>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
ref.current?.setSelectionRange(cursor, cursor);
|
ref.current?.setSelectionRange(cursor, cursor);
|
||||||
}, [ref, cursor, value]);
|
}, [ref, cursor, localValue]);
|
||||||
|
|
||||||
const handleChangeInput = (e: React.ChangeEvent<HTMLInputElement>) => {
|
const handleChangeInput = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
setCursor(e.target.selectionStart);
|
setCursor(e.target.selectionStart);
|
||||||
handleOnNewValue({ value: Number(e.target.value) });
|
setLocalValue(e.target.value);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleBlur = () => {
|
||||||
|
handleOnNewValue({ value: Number(localValue) });
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleNumberChange = (newValue) => {
|
const handleNumberChange = (newValue) => {
|
||||||
handleOnNewValue({ value: Number(newValue) });
|
setLocalValue(newValue);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleInputChange = (event) => {
|
const handleInputChange = (event) => {
|
||||||
|
|
@ -79,17 +91,19 @@ export default function FloatComponent({
|
||||||
min={min}
|
min={min}
|
||||||
max={max}
|
max={max}
|
||||||
onChange={handleNumberChange}
|
onChange={handleNumberChange}
|
||||||
value={value ?? ""}
|
value={localValue ?? ""}
|
||||||
|
onBlur={handleBlur}
|
||||||
>
|
>
|
||||||
<NumberInputField
|
<NumberInputField
|
||||||
className={getInputClassName()}
|
className={getInputClassName()}
|
||||||
onChange={handleChangeInput}
|
onChange={handleChangeInput}
|
||||||
onKeyDown={(event) => handleKeyDown(event, value, "")}
|
onKeyDown={(event) => handleKeyDown(event, localValue, "")}
|
||||||
onInput={handleInputChange}
|
onInput={handleInputChange}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
placeholder={editNode ? "Float number" : "Type a float number"}
|
placeholder={editNode ? "Float number" : "Type a float number"}
|
||||||
data-testid={id}
|
data-testid={id}
|
||||||
ref={inputRef}
|
ref={inputRef}
|
||||||
|
onBlur={handleBlur}
|
||||||
/>
|
/>
|
||||||
<NumberInputStepper className={stepperClassName}>
|
<NumberInputStepper className={stepperClassName}>
|
||||||
<NumberIncrementStepper className={incrementStepperClassName}>
|
<NumberIncrementStepper className={incrementStepperClassName}>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue