@os-design/form 1.0.35 → 1.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -120,19 +120,24 @@ var createUseTransformerHook = function createUseTransformerHook(form) {
120
120
  var useValue = createUseValueHook(form);
121
121
  return function (name, transformer) {
122
122
  var value = useValue(name);
123
+ var shouldTransformRef = (0, _react.useRef)(false);
123
124
  var transformerRef = (0, _react.useRef)(transformer);
124
125
  (0, _react.useEffect)(function () {
125
126
  transformerRef.current = transformer;
126
127
  }, [transformer]);
127
128
  (0, _react.useEffect)(function () {
128
- var partialValues = transformerRef.current(value);
129
- Object.entries(partialValues).forEach(function (_ref) {
130
- var _ref2 = _slicedToArray(_ref, 2),
131
- n = _ref2[0],
132
- v = _ref2[1];
133
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
134
- form.values.set(n, v);
135
- });
129
+ if (shouldTransformRef.current) {
130
+ var partialValues = transformerRef.current(value);
131
+ Object.entries(partialValues).forEach(function (_ref) {
132
+ var _ref2 = _slicedToArray(_ref, 2),
133
+ n = _ref2[0],
134
+ v = _ref2[1];
135
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
136
+ form.values.set(n, v);
137
+ });
138
+ } else {
139
+ shouldTransformRef.current = true;
140
+ }
136
141
  }, [value]);
137
142
  };
138
143
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_react","require","_Form","_interopRequireDefault","_useFormContext","_interopRequireWildcard","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_isEqual","_path","_useDeepEqualMemo","_BroadcastObserverManager","_ErrorObserverManager","_types","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","desc","set","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","iter","Symbol","iterator","Array","from","isArray","_arrayLikeToArray","_slicedToArray","i","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","o","minLen","n","toString","slice","constructor","name","test","len","length","arr2","_i","_s","_e","_x","_r","_arr","_n","_d","next","done","push","value","err","createUseValueHook","form","_useState","useState","values","_useState2","setValue","useEffect","subscription","subscribe","v","unsubscribe","createUseErrorHook","_useState3","errors","_useState4","createUseTransformerHook","useValue","transformer","transformerRef","useRef","current","partialValues","entries","_ref","_ref2","createFieldComponent","useError","props","data","_props$transformer","render","error","initValue","useMemo","initValues","modified","isEqual","reset","useCallback","onChange","undefined","renderRef","inputProps","fieldState","memoizedData","useDeepEqualMemo","useModifiedFields","_useState5","_useState6","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","concat","useFormResponse","Field","useTransformer","useForm","memoizedInitValues","formRef","Form","useExistingForm","useFormContext","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { Path, PathReturn, Values } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<TValues extends Values, TName extends Path<TValues>> = (\n value: PathReturn<TValues, TName>\n) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook = <TValues extends Values>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n return <TName extends Path<TValues>>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as Path<TValues>, v as any);\n });\n }, [value]);\n };\n};\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue, TData> {\n name: TName;\n data?: TData;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState,\n data: TData\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends Path<TValues>, TData>(\n props: FieldProps<TName, PathReturn<TValues, TName>, TData>\n ) => {\n const { name, data, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n },\n [name]\n );\n\n // Reset the error when the value was changed\n useEffect(() => {\n form.errors.set(name, undefined);\n }, [name, value]);\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n const memoizedData = useDeepEqualMemo(() => data as TData, [data]);\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState, memoizedData),\n [fieldState, inputProps, memoizedData]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends Values>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<Path<TValues>>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends Values>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends Values = Values>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends Values = Values>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_react","require","_Form","_interopRequireDefault","_useFormContext","_interopRequireWildcard","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_isEqual","_path","_useDeepEqualMemo","_BroadcastObserverManager","_ErrorObserverManager","_types","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","desc","set","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","iter","Symbol","iterator","Array","from","isArray","_arrayLikeToArray","_slicedToArray","i","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","o","minLen","n","toString","slice","constructor","name","test","len","length","arr2","_i","_s","_e","_x","_r","_arr","_n","_d","next","done","push","value","err","createUseValueHook","form","_useState","useState","values","_useState2","setValue","useEffect","subscription","subscribe","v","unsubscribe","createUseErrorHook","_useState3","errors","_useState4","createUseTransformerHook","useValue","transformer","shouldTransformRef","useRef","transformerRef","current","partialValues","entries","_ref","_ref2","createFieldComponent","useError","props","data","_props$transformer","render","error","initValue","useMemo","initValues","modified","isEqual","reset","useCallback","onChange","undefined","renderRef","inputProps","fieldState","memoizedData","useDeepEqualMemo","useModifiedFields","_useState5","_useState6","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","concat","useFormResponse","Field","useTransformer","useForm","memoizedInitValues","formRef","Form","useExistingForm","useFormContext","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { Path, PathReturn, Values } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<TValues extends Values, TName extends Path<TValues>> = (\n value: PathReturn<TValues, TName>\n) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook = <TValues extends Values>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n return <TName extends Path<TValues>>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n const shouldTransformRef = useRef(false);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n if (shouldTransformRef.current) {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as Path<TValues>, v as any);\n });\n } else {\n shouldTransformRef.current = true;\n }\n }, [value]);\n };\n};\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue, TData> {\n name: TName;\n data?: TData;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState,\n data: TData\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends Path<TValues>, TData>(\n props: FieldProps<TName, PathReturn<TValues, TName>, TData>\n ) => {\n const { name, data, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n },\n [name]\n );\n\n // Reset the error when the value was changed\n useEffect(() => {\n form.errors.set(name, undefined);\n }, [name, value]);\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n const memoizedData = useDeepEqualMemo(() => data as TData, [data]);\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState, memoizedData),\n [fieldState, inputProps, memoizedData]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends Values>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<Path<TValues>>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends Values>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends Values = Values>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends Values = Values>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -33,16 +33,21 @@ const createUseTransformerHook = form => {
33
33
  const useValue = createUseValueHook(form);
34
34
  return (name, transformer) => {
35
35
  const value = useValue(name);
36
+ const shouldTransformRef = useRef(false);
36
37
  const transformerRef = useRef(transformer);
37
38
  useEffect(() => {
38
39
  transformerRef.current = transformer;
39
40
  }, [transformer]);
40
41
  useEffect(() => {
41
- const partialValues = transformerRef.current(value);
42
- Object.entries(partialValues).forEach(([n, v]) => {
43
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
- form.values.set(n, v);
45
- });
42
+ if (shouldTransformRef.current) {
43
+ const partialValues = transformerRef.current(value);
44
+ Object.entries(partialValues).forEach(([n, v]) => {
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+ form.values.set(n, v);
47
+ });
48
+ } else {
49
+ shouldTransformRef.current = true;
50
+ }
46
51
  }, [value]);
47
52
  };
48
53
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","Form","useFormContext","isEqual","get","useDeepEqualMemo","default","createUseValueHook","form","name","value","setValue","values","subscription","subscribe","v","unsubscribe","createUseErrorHook","errors","createUseTransformerHook","useValue","transformer","transformerRef","current","partialValues","Object","entries","forEach","n","set","createFieldComponent","useError","props","data","render","error","initValue","initValues","modified","reset","onChange","undefined","renderRef","inputProps","fieldState","memoizedData","useModifiedFields","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","useFormResponse","Field","useTransformer","length","useForm","memoizedInitValues","formRef","useExistingForm","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { Path, PathReturn, Values } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<TValues extends Values, TName extends Path<TValues>> = (\n value: PathReturn<TValues, TName>\n) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook = <TValues extends Values>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n return <TName extends Path<TValues>>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as Path<TValues>, v as any);\n });\n }, [value]);\n };\n};\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue, TData> {\n name: TName;\n data?: TData;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState,\n data: TData\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends Path<TValues>, TData>(\n props: FieldProps<TName, PathReturn<TValues, TName>, TData>\n ) => {\n const { name, data, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n },\n [name]\n );\n\n // Reset the error when the value was changed\n useEffect(() => {\n form.errors.set(name, undefined);\n }, [name, value]);\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n const memoizedData = useDeepEqualMemo(() => data as TData, [data]);\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState, memoizedData),\n [fieldState, inputProps, memoizedData]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends Values>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<Path<TValues>>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends Values>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends Values = Values>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends Values = Values>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","Form","useFormContext","isEqual","get","useDeepEqualMemo","default","createUseValueHook","form","name","value","setValue","values","subscription","subscribe","v","unsubscribe","createUseErrorHook","errors","createUseTransformerHook","useValue","transformer","shouldTransformRef","transformerRef","current","partialValues","Object","entries","forEach","n","set","createFieldComponent","useError","props","data","render","error","initValue","initValues","modified","reset","onChange","undefined","renderRef","inputProps","fieldState","memoizedData","useModifiedFields","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","useFormResponse","Field","useTransformer","length","useForm","memoizedInitValues","formRef","useExistingForm","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { Path, PathReturn, Values } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<TValues extends Values, TName extends Path<TValues>> = (\n value: PathReturn<TValues, TName>\n) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook = <TValues extends Values>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n return <TName extends Path<TValues>>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n const shouldTransformRef = useRef(false);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n if (shouldTransformRef.current) {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as Path<TValues>, v as any);\n });\n } else {\n shouldTransformRef.current = true;\n }\n }, [value]);\n };\n};\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue, TData> {\n name: TName;\n data?: TData;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState,\n data: TData\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends Path<TValues>, TData>(\n props: FieldProps<TName, PathReturn<TValues, TName>, TData>\n ) => {\n const { name, data, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n },\n [name]\n );\n\n // Reset the error when the value was changed\n useEffect(() => {\n form.errors.set(name, undefined);\n }, [name, value]);\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n const memoizedData = useDeepEqualMemo(() => data as TData, [data]);\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState, memoizedData),\n [fieldState, inputProps, memoizedData]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends Values>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<Path<TValues>>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends Values>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends Values = Values>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends Values = Values>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAMb,MAAM,OAAO,CAAC;AACf,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAMnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AAoCjC,MAAM,MAAM,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAC7E,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,KAC9B;KACF,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;CAC9C,CAAC;AA2BF,UAAU,UAAU,CAAC,MAAM;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AACD,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AACD,UAAU,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK;IACvC,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,MAAM,EAAE,CACN,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,EAC9B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,KAAK,KACR,YAAY,GAAG,IAAI,CAAC;CAC1B;AAwHD,eAAO,MAAM,OAAO;;;;;;;;CAenB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;CAI3B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAMb,MAAM,OAAO,CAAC;AACf,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAMnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AAoCjC,MAAM,MAAM,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAC7E,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,KAC9B;KACF,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;CAC9C,CAAC;AAgCF,UAAU,UAAU,CAAC,MAAM;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AACD,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AACD,UAAU,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK;IACvC,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,MAAM,EAAE,CACN,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,EAC9B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,KAAK,KACR,YAAY,GAAG,IAAI,CAAC;CAC1B;AAwHD,eAAO,MAAM,OAAO;;;;;;;;CAenB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;CAI3B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@os-design/form",
3
- "version": "1.0.35",
3
+ "version": "1.0.37",
4
4
  "license": "UNLICENSED",
5
5
  "repository": "git@gitlab.com:os-team/libs/os-design.git",
6
6
  "main": "dist/cjs/index.js",
@@ -30,11 +30,11 @@
30
30
  "access": "public"
31
31
  },
32
32
  "devDependencies": {
33
- "@os-design/core": "^1.0.204",
33
+ "@os-design/core": "^1.0.205",
34
34
  "@os-design/icons": "^1.0.52"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "react": ">=18"
38
38
  },
39
- "gitHead": "b17670408f318b1060ffafdbe47234446a076d04"
39
+ "gitHead": "4f905e38d078d355257c7555ce3b4c86b388b9f3"
40
40
  }
package/src/index.tsx CHANGED
@@ -68,6 +68,7 @@ const createUseTransformerHook = <TValues extends Values>(
68
68
  transformer: Transformer<TValues, TName>
69
69
  ) => {
70
70
  const value = useValue(name);
71
+ const shouldTransformRef = useRef(false);
71
72
 
72
73
  const transformerRef = useRef(transformer);
73
74
  useEffect(() => {
@@ -75,11 +76,15 @@ const createUseTransformerHook = <TValues extends Values>(
75
76
  }, [transformer]);
76
77
 
77
78
  useEffect(() => {
78
- const partialValues = transformerRef.current(value);
79
- Object.entries(partialValues).forEach(([n, v]) => {
80
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
81
- form.values.set(n as Path<TValues>, v as any);
82
- });
79
+ if (shouldTransformRef.current) {
80
+ const partialValues = transformerRef.current(value);
81
+ Object.entries(partialValues).forEach(([n, v]) => {
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ form.values.set(n as Path<TValues>, v as any);
84
+ });
85
+ } else {
86
+ shouldTransformRef.current = true;
87
+ }
83
88
  }, [value]);
84
89
  };
85
90
  };