From db445644790011994437e5833374dbb43d1f0bf2 Mon Sep 17 00:00:00 2001 From: Valentin Serra Date: Fri, 5 Jan 2024 15:19:23 +0100 Subject: [PATCH 1/2] fix: revert debounce functionality on number fields Related to #958 --- .../render/components/form-fields/Number.js | 32 ++++++------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/packages/form-js-viewer/src/render/components/form-fields/Number.js b/packages/form-js-viewer/src/render/components/form-fields/Number.js index e5d656095..01f9c50d0 100644 --- a/packages/form-js-viewer/src/render/components/form-fields/Number.js +++ b/packages/form-js-viewer/src/render/components/form-fields/Number.js @@ -1,8 +1,6 @@ import Big from 'big.js'; import classNames from 'classnames'; - import { useCallback, useMemo, useRef, useState } from 'preact/hooks'; -import useFlushDebounce from '../../hooks/useFlushDebounce'; import Description from '../Description'; import Errors from '../Errors'; @@ -34,7 +32,8 @@ export default function Numberfield(props) { onFocus, field, value, - readonly + readonly, + onChange } = props; const { @@ -58,19 +57,6 @@ export default function Numberfield(props) { const [ stringValueCache, setStringValueCache ] = useState(''); - const [ onChangeDebounced, flushOnChange ] = useFlushDebounce((params) => { - props.onChange(params); - }, [ props.onChange ]); - - const onInputBlur = () => { - flushOnChange && flushOnChange(); - onBlur && onBlur(); - }; - - const onInputFocus = () => { - onFocus && onFocus(); - }; - // checks whether the value currently in the form data is practically different from the one in the input field cache // this allows us to guarantee the field always displays valid form data, but without auto-simplifying values like 1.000 to 1 const cacheValueMatchesState = useMemo(() => Numberfield.config.sanitizeValue({ value, formField: field }) === Numberfield.config.sanitizeValue({ value: stringValueCache, formField: field }), [ stringValueCache, value, field ]); @@ -96,7 +82,7 @@ export default function Numberfield(props) { if (isNullEquivalentValue(stringValue)) { setStringValueCache(''); - onChangeDebounced({ field, value: null }); + onChange({ field, value: null }); return; } @@ -110,14 +96,14 @@ export default function Numberfield(props) { if (isNaN(Number(stringValue))) { setStringValueCache('NaN'); - onChangeDebounced({ field, value: 'NaN' }); + onChange({ field, value: 'NaN' }); return; } setStringValueCache(stringValue); - onChangeDebounced({ field, value: serializeToString ? stringValue : Number(stringValue) }); + onChange({ field, value: serializeToString ? stringValue : Number(stringValue) }); - }, [ field, onChangeDebounced, serializeToString ]); + }, [ field, onChange, serializeToString ]); const increment = () => { if (readonly) { @@ -201,8 +187,8 @@ export default function Numberfield(props) { id={ domId } onKeyDown={ onKeyDown } onKeyPress={ onKeyPress } - onBlur={ onInputBlur } - onFocus={ onInputFocus } + onBlur={ () => onBlur && onBlur() } + onFocus={ () => onFocus && onFocus() } // @ts-ignore onInput={ (e) => setValue(e.target.value) } @@ -251,4 +237,4 @@ Numberfield.config = { create: (options = {}) => ({ ...options }) -}; +}; \ No newline at end of file From 47ee09301447cfd7a1fb2e0fd635bdfdd9bc736e Mon Sep 17 00:00:00 2001 From: Vinicius Goulart Date: Fri, 5 Jan 2024 11:45:34 -0300 Subject: [PATCH 2/2] chore: Remove unnecessary check --- .../src/render/components/form-fields/Number.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/form-js-viewer/src/render/components/form-fields/Number.js b/packages/form-js-viewer/src/render/components/form-fields/Number.js index 01f9c50d0..31f06a955 100644 --- a/packages/form-js-viewer/src/render/components/form-fields/Number.js +++ b/packages/form-js-viewer/src/render/components/form-fields/Number.js @@ -187,8 +187,8 @@ export default function Numberfield(props) { id={ domId } onKeyDown={ onKeyDown } onKeyPress={ onKeyPress } - onBlur={ () => onBlur && onBlur() } - onFocus={ () => onFocus && onFocus() } + onBlur={ onBlur } + onFocus={ onFocus } // @ts-ignore onInput={ (e) => setValue(e.target.value) }