@os-design/form 1.0.83 → 1.0.85

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/README.md CHANGED
@@ -544,10 +544,11 @@ const Form: React.FC = () => {
544
544
 
545
545
  ## 🎛️ Changing another fields
546
546
 
547
- In my practice, this came in handy in 2 cases:
547
+ In my practice, this came in handy in the following cases:
548
548
 
549
549
  1. To generate a field value by specific field. For example, to generate a meta title of a blog post by its title.
550
- 2. To reset some field values if a specific field is changed.
550
+ 2. To aggregate multiple field values. For example, to sum them up.
551
+ 3. To reset some field values if a specific field is changed.
551
552
 
552
553
  Let's consider the first case. To implement it, use the `useTransformer` hook.
553
554
 
@@ -567,10 +568,11 @@ const Form: React.FC = () => {
567
568
  console.log(form.values.getAll());
568
569
  }, []);
569
570
 
570
- useTransformer('title', (value) => ({
571
+ // Note the first argument is a tuple
572
+ useTransformer(['title'] as const, ([title]) => ({
571
573
  // Update any number of fields, not just one.
572
574
  // You can use a path (e.g. `'options.min': 0`).
573
- metaTitle: `The length of the title is ${value.length}`,
575
+ metaTitle: `The length of the title is ${title.length}`,
574
576
  }));
575
577
 
576
578
  return (
package/dist/cjs/index.js CHANGED
@@ -117,9 +117,32 @@ var createUseErrorHook = function createUseErrorHook(form) {
117
117
  };
118
118
  };
119
119
  var createUseTransformerHook = function createUseTransformerHook(form) {
120
- var useValue = createUseValueHook(form);
121
- return function (name, transformer) {
122
- var value = useValue(name);
120
+ return function (names, transformer) {
121
+ var _useState5 = (0, _react.useState)(Array(names.length).fill(undefined).map(function (_, index) {
122
+ return form.values.get(names[index]);
123
+ })),
124
+ _useState6 = _slicedToArray(_useState5, 2),
125
+ values = _useState6[0],
126
+ setValues = _useState6[1];
127
+ (0, _react.useEffect)(function () {
128
+ var subscriptions = names.map(function (key, index) {
129
+ return form.values.subscribe(key, function (value) {
130
+ return (
131
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
132
+ setValues(function (prev) {
133
+ var next = prev.slice();
134
+ next[index] = value;
135
+ return next;
136
+ })
137
+ );
138
+ });
139
+ });
140
+ return function () {
141
+ subscriptions.forEach(function (subcription) {
142
+ subcription.unsubscribe();
143
+ });
144
+ };
145
+ }, [names]);
123
146
  var shouldTransformRef = (0, _react.useRef)(false);
124
147
  var transformerRef = (0, _react.useRef)(transformer);
125
148
  (0, _react.useEffect)(function () {
@@ -127,7 +150,7 @@ var createUseTransformerHook = function createUseTransformerHook(form) {
127
150
  }, [transformer]);
128
151
  (0, _react.useEffect)(function () {
129
152
  if (shouldTransformRef.current) {
130
- var partialValues = transformerRef.current(value);
153
+ var partialValues = transformerRef.current(values);
131
154
  Object.entries(partialValues).forEach(function (_ref) {
132
155
  var _ref2 = _slicedToArray(_ref, 2),
133
156
  n = _ref2[0],
@@ -138,7 +161,7 @@ var createUseTransformerHook = function createUseTransformerHook(form) {
138
161
  } else {
139
162
  shouldTransformRef.current = true;
140
163
  }
141
- }, [value]);
164
+ }, [values]);
142
165
  };
143
166
  };
144
167
  var createFieldComponent = function createFieldComponent(form) {
@@ -201,10 +224,10 @@ var createFieldComponent = function createFieldComponent(form) {
201
224
  };
202
225
  };
203
226
  var useModifiedFields = function useModifiedFields(form) {
204
- var _useState5 = (0, _react.useState)([]),
205
- _useState6 = _slicedToArray(_useState5, 2),
206
- modifiedFields = _useState6[0],
207
- setModifiedFields = _useState6[1];
227
+ var _useState7 = (0, _react.useState)([]),
228
+ _useState8 = _slicedToArray(_useState7, 2),
229
+ modifiedFields = _useState8[0],
230
+ setModifiedFields = _useState8[1];
208
231
  var modifiedFieldsRef = (0, _react.useRef)(modifiedFields);
209
232
  (0, _react.useEffect)(function () {
210
233
  modifiedFieldsRef.current = modifiedFields;
@@ -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","e","WeakMap","r","t","__esModule","_typeof","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","obj","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","iter","Symbol","iterator","Array","from","isArray","_arrayLikeToArray","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","o","minLen","toString","slice","constructor","name","test","len","length","arr2","l","f","next","done","push","value","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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","ignoreList":[]}
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","e","WeakMap","r","t","__esModule","_typeof","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","obj","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","iter","Symbol","iterator","Array","from","isArray","_arrayLikeToArray","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","o","minLen","toString","slice","constructor","name","test","len","length","arr2","l","f","next","done","push","value","createUseValueHook","form","_useState","useState","values","_useState2","setValue","useEffect","subscription","subscribe","v","unsubscribe","createUseErrorHook","_useState3","errors","_useState4","createUseTransformerHook","names","transformer","_useState5","fill","undefined","map","_","index","_useState6","setValues","subscriptions","prev","subcription","shouldTransformRef","useRef","transformerRef","current","partialValues","entries","_ref","_ref2","createFieldComponent","useValue","useError","props","data","_props$transformer","render","error","initValue","useMemo","initValues","modified","isEqual","reset","useCallback","onChange","renderRef","inputProps","fieldState","memoizedData","useDeepEqualMemo","useModifiedFields","_useState7","_useState8","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, PathArrayReturn, 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<\n TValues extends Values,\n TNames extends Path<TValues>[],\n> = (values: PathArrayReturn<TValues, TNames>) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TNames extends Path<TValues>[]>(\n names: TNames,\n transformer: Transformer<TValues, TNames>\n ) => {\n const [values, setValues] = useState(\n Array(names.length)\n .fill(undefined)\n .map((_, index) => form.values.get(names[index])) as PathArrayReturn<\n TValues,\n TNames\n >\n );\n\n useEffect(() => {\n const subscriptions = names.map((key, index) =>\n form.values.subscribe(key, (value) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setValues((prev: any) => {\n const next = prev.slice();\n next[index] = value;\n return next;\n })\n )\n );\n return () => {\n subscriptions.forEach((subcription) => {\n subcription.unsubscribe();\n });\n };\n }, [names]);\n\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(values);\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 }, [values]);\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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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\n\ntype OwnKeyOf<T> = Exclude<keyof T, keyof any[]> & string;\ntype IsAny<T> = unknown extends T & string ? true : false;\n\nexport type Path<T, K = OwnKeyOf<T>> =\n IsAny<T> extends true\n ? string\n : T extends object\n ?\n | K\n | (K extends keyof T\n ? T[K] extends object\n ? KeysWithSeparator<K, Path<T[K]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\nexport type Values<T = any> = Record<string, T>;\nexport type Errors<T = any> = Record<Path<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\n\ntype OwnKeyOf<T> = Exclude<keyof T, keyof any[]> & string;\ntype IsAny<T> = unknown extends T & string ? true : false;\n\nexport type Path<T, K = OwnKeyOf<T>> =\n IsAny<T> extends true\n ? string\n : T extends object\n ?\n | K\n | (K extends keyof T\n ? T[K] extends object\n ? KeysWithSeparator<K, Path<T[K]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\nexport type PathArrayReturn<T, K> = K extends []\n ? []\n : K extends [infer U, ...infer R]\n ? [PathReturn<T, U>, ...PathArrayReturn<T, R>]\n : never;\n\nexport type Values<T = any> = Record<string, T>;\nexport type Errors<T = any> = Record<Path<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":"","ignoreList":[]}
package/dist/esm/index.js CHANGED
@@ -29,27 +29,38 @@ const createUseErrorHook = form => name => {
29
29
  }, [name]);
30
30
  return value;
31
31
  };
32
- const createUseTransformerHook = form => {
33
- const useValue = createUseValueHook(form);
34
- return (name, transformer) => {
35
- const value = useValue(name);
36
- const shouldTransformRef = useRef(false);
37
- const transformerRef = useRef(transformer);
38
- useEffect(() => {
39
- transformerRef.current = transformer;
40
- }, [transformer]);
41
- useEffect(() => {
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
- }
51
- }, [value]);
52
- };
32
+ const createUseTransformerHook = form => (names, transformer) => {
33
+ const [values, setValues] = useState(Array(names.length).fill(undefined).map((_, index) => form.values.get(names[index])));
34
+ useEffect(() => {
35
+ const subscriptions = names.map((key, index) => form.values.subscribe(key, value =>
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ setValues(prev => {
38
+ const next = prev.slice();
39
+ next[index] = value;
40
+ return next;
41
+ })));
42
+ return () => {
43
+ subscriptions.forEach(subcription => {
44
+ subcription.unsubscribe();
45
+ });
46
+ };
47
+ }, [names]);
48
+ const shouldTransformRef = useRef(false);
49
+ const transformerRef = useRef(transformer);
50
+ useEffect(() => {
51
+ transformerRef.current = transformer;
52
+ }, [transformer]);
53
+ useEffect(() => {
54
+ if (shouldTransformRef.current) {
55
+ const partialValues = transformerRef.current(values);
56
+ Object.entries(partialValues).forEach(([n, v]) => {
57
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
+ form.values.set(n, v);
59
+ });
60
+ } else {
61
+ shouldTransformRef.current = true;
62
+ }
63
+ }, [values]);
53
64
  };
54
65
  const createFieldComponent = form => {
55
66
  const useValue = createUseValueHook(form);
@@ -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","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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","ignoreList":[]}
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","names","transformer","setValues","Array","length","fill","undefined","map","_","index","subscriptions","key","prev","next","slice","forEach","subcription","shouldTransformRef","transformerRef","current","partialValues","Object","entries","n","set","createFieldComponent","useValue","useError","props","data","render","error","initValue","initValues","modified","reset","onChange","renderRef","inputProps","fieldState","memoizedData","useModifiedFields","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","useFormResponse","Field","useTransformer","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, PathArrayReturn, 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<\n TValues extends Values,\n TNames extends Path<TValues>[],\n> = (values: PathArrayReturn<TValues, TNames>) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TNames extends Path<TValues>[]>(\n names: TNames,\n transformer: Transformer<TValues, TNames>\n ) => {\n const [values, setValues] = useState(\n Array(names.length)\n .fill(undefined)\n .map((_, index) => form.values.get(names[index])) as PathArrayReturn<\n TValues,\n TNames\n >\n );\n\n useEffect(() => {\n const subscriptions = names.map((key, index) =>\n form.values.subscribe(key, (value) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setValues((prev: any) => {\n const next = prev.slice();\n next[index] = value;\n return next;\n })\n )\n );\n return () => {\n subscriptions.forEach((subcription) => {\n subcription.unsubscribe();\n });\n };\n }, [names]);\n\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(values);\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 }, [values]);\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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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\n\ntype OwnKeyOf<T> = Exclude<keyof T, keyof any[]> & string;\ntype IsAny<T> = unknown extends T & string ? true : false;\n\nexport type Path<T, K = OwnKeyOf<T>> =\n IsAny<T> extends true\n ? string\n : T extends object\n ?\n | K\n | (K extends keyof T\n ? T[K] extends object\n ? KeysWithSeparator<K, Path<T[K]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\nexport type Values<T = any> = Record<string, T>;\nexport type Errors<T = any> = Record<Path<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\n\ntype OwnKeyOf<T> = Exclude<keyof T, keyof any[]> & string;\ntype IsAny<T> = unknown extends T & string ? true : false;\n\nexport type Path<T, K = OwnKeyOf<T>> =\n IsAny<T> extends true\n ? string\n : T extends object\n ?\n | K\n | (K extends keyof T\n ? T[K] extends object\n ? KeysWithSeparator<K, Path<T[K]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\nexport type PathArrayReturn<T, K> = K extends []\n ? []\n : K extends [infer U, ...infer R]\n ? [PathReturn<T, U>, ...PathArrayReturn<T, R>]\n : never;\n\nexport type Values<T = any> = Record<string, T>;\nexport type Errors<T = any> = Record<Path<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1,12 +1,12 @@
1
1
  import { ReactElement } from 'react';
2
2
  import Form from './Form';
3
- import { Path, PathReturn, Values } from './types';
3
+ import { Path, PathArrayReturn, PathReturn, Values } from './types';
4
4
  export * from './BroadcastObserverManager';
5
5
  export * from './ErrorObserverManager';
6
6
  export { default as Form } from './Form';
7
7
  export * from './types';
8
8
  export * from './useFormContext';
9
- export type Transformer<TValues extends Values, TName extends Path<TValues>> = (value: PathReturn<TValues, TName>) => {
9
+ export type Transformer<TValues extends Values, TNames extends Path<TValues>[]> = (values: PathArrayReturn<TValues, TNames>) => {
10
10
  [K in Path<TValues>]?: PathReturn<TValues, K>;
11
11
  };
12
12
  interface InputProps<TValue> {
@@ -29,7 +29,7 @@ export declare const useForm: <TValues extends Values = Values>(initValues: TVal
29
29
  Field: <TName extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>, TData>(props: FieldProps<TName, PathReturn<TValues, TName>, TData>) => ReactElement<any, string | import("react").JSXElementConstructor<any>> | null;
30
30
  useValue: <TName_1 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_1) => PathReturn<TValues, TName_1>;
31
31
  useError: <TName_2 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_2) => string | undefined;
32
- useTransformer: <TName_3 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_3, transformer: Transformer<TValues, TName_3>) => void;
32
+ useTransformer: <TNames extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>[]>(names: TNames, transformer: Transformer<TValues, TNames>) => void;
33
33
  modifiedFields: Path<TValues, Exclude<keyof TValues, keyof any[]> & string>[];
34
34
  modified: boolean;
35
35
  };
@@ -38,7 +38,7 @@ export declare const useExistingForm: <TValues extends Values = Values>() => {
38
38
  Field: <TName extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>, TData>(props: FieldProps<TName, PathReturn<TValues, TName>, TData>) => ReactElement<any, string | import("react").JSXElementConstructor<any>> | null;
39
39
  useValue: <TName_1 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_1) => PathReturn<TValues, TName_1>;
40
40
  useError: <TName_2 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_2) => string | undefined;
41
- useTransformer: <TName_3 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_3, transformer: Transformer<TValues, TName_3>) => void;
41
+ useTransformer: <TNames extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>[]>(names: TNames, transformer: Transformer<TValues, TNames>) => void;
42
42
  modifiedFields: Path<TValues, Exclude<keyof TValues, keyof any[]> & string>[];
43
43
  modified: boolean;
44
44
  };
@@ -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;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,gDACN,OAAO;;;;;;;;CAcpB,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,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAMpE,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,CACrB,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,EAAE,IAC5B,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK;KAC/C,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;CAC9C,CAAC;AAuDF,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,gDACN,OAAO;;;;;;;;CAcpB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;CAI3B,CAAC"}
@@ -4,6 +4,7 @@ type OwnKeyOf<T> = Exclude<keyof T, keyof any[]> & string;
4
4
  type IsAny<T> = unknown extends T & string ? true : false;
5
5
  export type Path<T, K = OwnKeyOf<T>> = IsAny<T> extends true ? string : T extends object ? K | (K extends keyof T ? T[K] extends object ? KeysWithSeparator<K, Path<T[K]>> : never : never) : never;
6
6
  export type PathReturn<T, K> = K extends keyof T ? T[K] : K extends `${infer U}${Separator}${infer R}` ? U extends keyof T ? PathReturn<T[U], R> : never : never;
7
+ export type PathArrayReturn<T, K> = K extends [] ? [] : K extends [infer U, ...infer R] ? [PathReturn<T, U>, ...PathArrayReturn<T, R>] : never;
7
8
  export type Values<T = any> = Record<string, T>;
8
9
  export type Errors<T = any> = Record<Path<T>, string | undefined>;
9
10
  export type Observer<V = any> = (value: V) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAEA,KAAK,SAAS,GAAG,GAAG,CAAC;AACrB,KAAK,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;AAE5E,KAAK,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC;AAC1D,KAAK,KAAK,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;AAE1D,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IACjC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,GACjB,MAAM,GACN,CAAC,SAAS,MAAM,GAEV,CAAC,GACD,CAAC,CAAC,SAAS,MAAM,CAAC,GACd,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAChC,KAAK,GACP,KAAK,CAAC,GACd,KAAK,CAAC;AAEd,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAC5C,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,EAAE,GAC1C,CAAC,SAAS,MAAM,CAAC,GACf,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB,KAAK,GACP,KAAK,CAAC;AAEZ,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAChD,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAElE,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AACnD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAEA,KAAK,SAAS,GAAG,GAAG,CAAC;AACrB,KAAK,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;AAE5E,KAAK,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC;AAC1D,KAAK,KAAK,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;AAE1D,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IACjC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,GACjB,MAAM,GACN,CAAC,SAAS,MAAM,GAEV,CAAC,GACD,CAAC,CAAC,SAAS,MAAM,CAAC,GACd,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAChC,KAAK,GACP,KAAK,CAAC,GACd,KAAK,CAAC;AAEd,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAC5C,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,EAAE,GAC1C,CAAC,SAAS,MAAM,CAAC,GACf,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB,KAAK,GACP,KAAK,CAAC;AAEZ,MAAM,MAAM,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAC5C,EAAE,GACF,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,GAC7B,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC5C,KAAK,CAAC;AAEZ,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAChD,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAElE,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AACnD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@os-design/form",
3
- "version": "1.0.83",
3
+ "version": "1.0.85",
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.250",
33
+ "@os-design/core": "^1.0.251",
34
34
  "@os-design/icons": "^1.0.59"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "react": ">=18"
38
38
  },
39
- "gitHead": "4c6a4f5eea1df71286f3a70f89e207c5eb6cb469"
39
+ "gitHead": "a64ba37aaaab0b6b9b4ed522c166635391437a90"
40
40
  }
package/src/index.tsx CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  useState,
8
8
  } from 'react';
9
9
  import Form from './Form';
10
- import { Path, PathReturn, Values } from './types';
10
+ import { Path, PathArrayReturn, PathReturn, Values } from './types';
11
11
  import useFormContext from './useFormContext';
12
12
  import isEqual from './utils/isEqual';
13
13
  import { get } from './utils/path';
@@ -53,21 +53,46 @@ const createUseErrorHook =
53
53
  return value;
54
54
  };
55
55
 
56
- export type Transformer<TValues extends Values, TName extends Path<TValues>> = (
57
- value: PathReturn<TValues, TName>
58
- ) => {
56
+ export type Transformer<
57
+ TValues extends Values,
58
+ TNames extends Path<TValues>[],
59
+ > = (values: PathArrayReturn<TValues, TNames>) => {
59
60
  [K in Path<TValues>]?: PathReturn<TValues, K>;
60
61
  };
61
62
 
62
- const createUseTransformerHook = <TValues extends Values>(
63
- form: Form<TValues>
64
- ) => {
65
- const useValue = createUseValueHook(form);
66
- return <TName extends Path<TValues>>(
67
- name: TName,
68
- transformer: Transformer<TValues, TName>
63
+ const createUseTransformerHook =
64
+ <TValues extends Values>(form: Form<TValues>) =>
65
+ <TNames extends Path<TValues>[]>(
66
+ names: TNames,
67
+ transformer: Transformer<TValues, TNames>
69
68
  ) => {
70
- const value = useValue(name);
69
+ const [values, setValues] = useState(
70
+ Array(names.length)
71
+ .fill(undefined)
72
+ .map((_, index) => form.values.get(names[index])) as PathArrayReturn<
73
+ TValues,
74
+ TNames
75
+ >
76
+ );
77
+
78
+ useEffect(() => {
79
+ const subscriptions = names.map((key, index) =>
80
+ form.values.subscribe(key, (value) =>
81
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
+ setValues((prev: any) => {
83
+ const next = prev.slice();
84
+ next[index] = value;
85
+ return next;
86
+ })
87
+ )
88
+ );
89
+ return () => {
90
+ subscriptions.forEach((subcription) => {
91
+ subcription.unsubscribe();
92
+ });
93
+ };
94
+ }, [names]);
95
+
71
96
  const shouldTransformRef = useRef(false);
72
97
 
73
98
  const transformerRef = useRef(transformer);
@@ -77,7 +102,7 @@ const createUseTransformerHook = <TValues extends Values>(
77
102
 
78
103
  useEffect(() => {
79
104
  if (shouldTransformRef.current) {
80
- const partialValues = transformerRef.current(value);
105
+ const partialValues = transformerRef.current(values);
81
106
  Object.entries(partialValues).forEach(([n, v]) => {
82
107
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
108
  form.values.set(n as Path<TValues>, v as any);
@@ -85,9 +110,8 @@ const createUseTransformerHook = <TValues extends Values>(
85
110
  } else {
86
111
  shouldTransformRef.current = true;
87
112
  }
88
- }, [value]);
113
+ }, [values]);
89
114
  };
90
- };
91
115
 
92
116
  interface InputProps<TValue> {
93
117
  value: TValue;
package/src/types.ts CHANGED
@@ -27,6 +27,12 @@ export type PathReturn<T, K> = K extends keyof T
27
27
  : never
28
28
  : never;
29
29
 
30
+ export type PathArrayReturn<T, K> = K extends []
31
+ ? []
32
+ : K extends [infer U, ...infer R]
33
+ ? [PathReturn<T, U>, ...PathArrayReturn<T, R>]
34
+ : never;
35
+
30
36
  export type Values<T = any> = Record<string, T>;
31
37
  export type Errors<T = any> = Record<Path<T>, string | undefined>;
32
38