@os-design/form 1.0.84 → 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 +6 -4
- package/dist/cjs/index.js +32 -9
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/index.js +32 -21
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/types/index.d.ts +4 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types.d.ts +1 -0
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/index.tsx +39 -15
- package/src/types.ts +6 -0
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
|
|
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
|
|
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
|
-
|
|
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 ${
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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(
|
|
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
|
-
}, [
|
|
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
|
|
205
|
-
|
|
206
|
-
modifiedFields =
|
|
207
|
-
setModifiedFields =
|
|
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;
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -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":";;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAQA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEA,IAAAG,eAAA,GAAAC,uBAAA,CAAAJ,OAAA;AASAK,MAAA,CAAAC,IAAA,CAAAH,eAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,eAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAb,eAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AARA,IAAAS,QAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,KAAA,GAAAlB,OAAA;AACA,IAAAmB,iBAAA,GAAAjB,sBAAA,CAAAF,OAAA;AAEA,IAAAoB,yBAAA,GAAApB,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAc,yBAAA,EAAAb,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAY,yBAAA,CAAAZ,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAI,yBAAA,CAAAZ,GAAA;IAAA;EAAA;AAAA;AACA,IAAAa,qBAAA,GAAArB,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAe,qBAAA,EAAAd,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAa,qBAAA,CAAAb,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAK,qBAAA,CAAAb,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAc,MAAA,GAAAtB,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAgB,MAAA,EAAAf,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAc,MAAA,CAAAd,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAM,MAAA,CAAAd,GAAA;IAAA;EAAA;AAAA;AAAwB,SAAAe,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,yBAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAApB,wBAAAoB,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,gBAAAK,OAAA,CAAAL,CAAA,0BAAAA,CAAA,sBAAAA,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAX,GAAA,CAAAQ,CAAA,OAAAO,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAA5B,MAAA,CAAAS,cAAA,IAAAT,MAAA,CAAA6B,wBAAA,WAAAC,CAAA,IAAAX,CAAA,oBAAAW,CAAA,OAAAzB,cAAA,CAAAC,IAAA,CAAAa,CAAA,EAAAW,CAAA,SAAAC,CAAA,GAAAH,CAAA,GAAA5B,MAAA,CAAA6B,wBAAA,CAAAV,CAAA,EAAAW,CAAA,UAAAC,CAAA,KAAAA,CAAA,CAAApB,GAAA,IAAAoB,CAAA,CAAAC,GAAA,IAAAhC,MAAA,CAAAS,cAAA,CAAAiB,CAAA,EAAAI,CAAA,EAAAC,CAAA,IAAAL,CAAA,CAAAI,CAAA,IAAAX,CAAA,CAAAW,CAAA,YAAAJ,CAAA,cAAAP,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAU,GAAA,CAAAb,CAAA,EAAAO,CAAA,GAAAA,CAAA;AAAA,SAAA7B,uBAAAoC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAV,UAAA,GAAAU,GAAA,gBAAAA,GAAA;AAAA,SAAAC,mBAAAC,GAAA,WAAAC,kBAAA,CAAAD,GAAA,KAAAE,gBAAA,CAAAF,GAAA,KAAAG,2BAAA,CAAAH,GAAA,KAAAI,kBAAA;AAAA,SAAAA,mBAAA,cAAAC,SAAA;AAAA,SAAAH,iBAAAI,IAAA,eAAAC,MAAA,oBAAAD,IAAA,CAAAC,MAAA,CAAAC,QAAA,aAAAF,IAAA,+BAAAG,KAAA,CAAAC,IAAA,CAAAJ,IAAA;AAAA,SAAAL,mBAAAD,GAAA,QAAAS,KAAA,CAAAE,OAAA,CAAAX,GAAA,UAAAY,iBAAA,CAAAZ,GAAA;AAAA,SAAAa,eAAAb,GAAA,EAAAJ,CAAA,WAAAkB,eAAA,CAAAd,GAAA,KAAAe,qBAAA,CAAAf,GAAA,EAAAJ,CAAA,KAAAO,2BAAA,CAAAH,GAAA,EAAAJ,CAAA,KAAAoB,gBAAA;AAAA,SAAAA,iBAAA,cAAAX,SAAA;AAAA,SAAAF,4BAAAc,CAAA,EAAAC,MAAA,SAAAD,CAAA,qBAAAA,CAAA,sBAAAL,iBAAA,CAAAK,CAAA,EAAAC,MAAA,OAAA3B,CAAA,GAAA1B,MAAA,CAAAI,SAAA,CAAAkD,QAAA,CAAAhD,IAAA,CAAA8C,CAAA,EAAAG,KAAA,aAAA7B,CAAA,iBAAA0B,CAAA,CAAAI,WAAA,EAAA9B,CAAA,GAAA0B,CAAA,CAAAI,WAAA,CAAAC,IAAA,MAAA/B,CAAA,cAAAA,CAAA,mBAAAkB,KAAA,CAAAC,IAAA,CAAAO,CAAA,OAAA1B,CAAA,+DAAAgC,IAAA,CAAAhC,CAAA,UAAAqB,iBAAA,CAAAK,CAAA,EAAAC,MAAA;AAAA,SAAAN,kBAAAZ,GAAA,EAAAwB,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAxB,GAAA,CAAAyB,MAAA,EAAAD,GAAA,GAAAxB,GAAA,CAAAyB,MAAA,WAAA7B,CAAA,MAAA8B,IAAA,OAAAjB,KAAA,CAAAe,GAAA,GAAA5B,CAAA,GAAA4B,GAAA,EAAA5B,CAAA,IAAA8B,IAAA,CAAA9B,CAAA,IAAAI,GAAA,CAAAJ,CAAA,UAAA8B,IAAA;AAAA,SAAAX,sBAAA7B,CAAA,EAAAyC,CAAA,QAAAxC,CAAA,WAAAD,CAAA,gCAAAqB,MAAA,IAAArB,CAAA,CAAAqB,MAAA,CAAAC,QAAA,KAAAtB,CAAA,4BAAAC,CAAA,QAAAH,CAAA,EAAAO,CAAA,EAAAK,CAAA,EAAAD,CAAA,EAAAF,CAAA,OAAAmC,CAAA,OAAAX,CAAA,iBAAArB,CAAA,IAAAT,CAAA,GAAAA,CAAA,CAAAhB,IAAA,CAAAe,CAAA,GAAA2C,IAAA,QAAAF,CAAA,QAAA9D,MAAA,CAAAsB,CAAA,MAAAA,CAAA,UAAAyC,CAAA,uBAAAA,CAAA,IAAA5C,CAAA,GAAAY,CAAA,CAAAzB,IAAA,CAAAgB,CAAA,GAAA2C,IAAA,MAAArC,CAAA,CAAAsC,IAAA,CAAA/C,CAAA,CAAAgD,KAAA,GAAAvC,CAAA,CAAAgC,MAAA,KAAAE,CAAA,GAAAC,CAAA,iBAAA1C,CAAA,IAAA+B,CAAA,OAAA1B,CAAA,GAAAL,CAAA,yBAAA0C,CAAA,YAAAzC,CAAA,eAAAQ,CAAA,GAAAR,CAAA,cAAAtB,MAAA,CAAA8B,CAAA,MAAAA,CAAA,2BAAAsB,CAAA,QAAA1B,CAAA,aAAAE,CAAA;AAAA,SAAAqB,gBAAAd,GAAA,QAAAS,KAAA,CAAAE,OAAA,CAAAX,GAAA,UAAAA,GAAA;AAGxB,IAAMiC,kBAAkB,GACtB,SADIA,kBAAkBA,CACGC,IAAmB;EAAA,OAC5C,UAA8BZ,IAAW,EAAK;IAC5C,IAAAa,SAAA,GAA0B,IAAAC,eAAQ,EAChCF,IAAI,CAACG,MAAM,CAAC7D,GAAG,CAAC8C,IAAI,CACtB,CAAC;MAAAgB,UAAA,GAAAzB,cAAA,CAAAsB,SAAA;MAFMH,KAAK,GAAAM,UAAA;MAAEC,QAAQ,GAAAD,UAAA;IAItB,IAAAE,gBAAS,EAAC,YAAM;MACd,IAAMC,YAAY,GAAGP,IAAI,CAACG,MAAM,CAACK,SAAS,CAACpB,IAAI,EAAE,UAACqB,CAAC,EAAK;QACtDJ,QAAQ,CAACI,CAAC,CAAC;MACb,CAAC,CAAC;MACF,OAAO;QAAA,OAAMF,YAAY,CAACG,WAAW,CAAC,CAAC;MAAA;IACzC,CAAC,EAAE,CAACtB,IAAI,CAAC,CAAC;IAEV,OAAOU,KAAK;EACd,CAAC;AAAA;AAEH,IAAMa,kBAAkB,GACtB,SADIA,kBAAkBA,CACGX,IAAmB;EAAA,OAC5C,UAA8BZ,IAAW,EAAK;IAC5C,IAAAwB,UAAA,GAA0B,IAAAV,eAAQ,EAChCF,IAAI,CAACa,MAAM,CAACvE,GAAG,CAAC8C,IAAI,CACtB,CAAC;MAAA0B,UAAA,GAAAnC,cAAA,CAAAiC,UAAA;MAFMd,KAAK,GAAAgB,UAAA;MAAET,QAAQ,GAAAS,UAAA;IAItB,IAAAR,gBAAS,EAAC,YAAM;MACd,IAAMC,YAAY,GAAGP,IAAI,CAACa,MAAM,CAACL,SAAS,CAACpB,IAAI,EAAE,UAACqB,CAAC,EAAK;QACtDJ,QAAQ,CAACI,CAAC,CAAC;MACb,CAAC,CAAC;MACF,OAAO;QAAA,OAAMF,YAAY,CAACG,WAAW,CAAC,CAAC;MAAA;IACzC,CAAC,EAAE,CAACtB,IAAI,CAAC,CAAC;IAEV,OAAOU,KAAK;EACd,CAAC;AAAA;AASH,IAAMiB,wBAAwB,GAC5B,SADIA,wBAAwBA,CACHf,IAAmB;EAAA,OAC5C,UACEgB,KAAa,EACbC,WAAyC,EACtC;IACH,IAAAC,UAAA,GAA4B,IAAAhB,eAAQ,EAClC3B,KAAK,CAACyC,KAAK,CAACzB,MAAM,CAAC,CAChB4B,IAAI,CAACC,SAAS,CAAC,CACfC,GAAG,CAAC,UAACC,CAAC,EAAEC,KAAK;QAAA,OAAKvB,IAAI,CAACG,MAAM,CAAC7D,GAAG,CAAC0E,KAAK,CAACO,KAAK,CAAC,CAAC;MAAA,EAIpD,CAAC;MAAAC,UAAA,GAAA7C,cAAA,CAAAuC,UAAA;MAPMf,MAAM,GAAAqB,UAAA;MAAEC,SAAS,GAAAD,UAAA;IASxB,IAAAlB,gBAAS,EAAC,YAAM;MACd,IAAMoB,aAAa,GAAGV,KAAK,CAACK,GAAG,CAAC,UAACvF,GAAG,EAAEyF,KAAK;QAAA,OACzCvB,IAAI,CAACG,MAAM,CAACK,SAAS,CAAC1E,GAAG,EAAE,UAACgE,KAAK;UAAA;YAC/B;YACA2B,SAAS,CAAC,UAACE,IAAS,EAAK;cACvB,IAAMhC,IAAI,GAAGgC,IAAI,CAACzC,KAAK,CAAC,CAAC;cACzBS,IAAI,CAAC4B,KAAK,CAAC,GAAGzB,KAAK;cACnB,OAAOH,IAAI;YACb,CAAC;UAAC;QAAA,CACJ,CAAC;MAAA,CACH,CAAC;MACD,OAAO,YAAM;QACX+B,aAAa,CAAC7F,OAAO,CAAC,UAAC+F,WAAW,EAAK;UACrCA,WAAW,CAAClB,WAAW,CAAC,CAAC;QAC3B,CAAC,CAAC;MACJ,CAAC;IACH,CAAC,EAAE,CAACM,KAAK,CAAC,CAAC;IAEX,IAAMa,kBAAkB,GAAG,IAAAC,aAAM,EAAC,KAAK,CAAC;IAExC,IAAMC,cAAc,GAAG,IAAAD,aAAM,EAACb,WAAW,CAAC;IAC1C,IAAAX,gBAAS,EAAC,YAAM;MACdyB,cAAc,CAACC,OAAO,GAAGf,WAAW;IACtC,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;IAEjB,IAAAX,gBAAS,EAAC,YAAM;MACd,IAAIuB,kBAAkB,CAACG,OAAO,EAAE;QAC9B,IAAMC,aAAa,GAAGF,cAAc,CAACC,OAAO,CAAC7B,MAAM,CAAC;QACpDxE,MAAM,CAACuG,OAAO,CAACD,aAAa,CAAC,CAACpG,OAAO,CAAC,UAAAsG,IAAA,EAAY;UAAA,IAAAC,KAAA,GAAAzD,cAAA,CAAAwD,IAAA;YAAV9E,CAAC,GAAA+E,KAAA;YAAE3B,CAAC,GAAA2B,KAAA;UAC1C;UACApC,IAAI,CAACG,MAAM,CAACxC,GAAG,CAACN,CAAC,EAAmBoD,CAAQ,CAAC;QAC/C,CAAC,CAAC;MACJ,CAAC,MAAM;QACLoB,kBAAkB,CAACG,OAAO,GAAG,IAAI;MACnC;IACF,CAAC,EAAE,CAAC7B,MAAM,CAAC,CAAC;EACd,CAAC;AAAA;AAsBH,IAAMkC,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAA4BrC,IAAmB,EAAK;EAC5E,IAAMsC,QAAQ,GAAGvC,kBAAkB,CAACC,IAAI,CAAC;EACzC,IAAMuC,QAAQ,GAAG5B,kBAAkB,CAACX,IAAI,CAAC;EACzC,OAAO,UACLwC,KAA2D,EACxD;IACH,IAAQpD,IAAI,GAA2CoD,KAAK,CAApDpD,IAAI;MAAEqD,IAAI,GAAqCD,KAAK,CAA9CC,IAAI;MAAAC,kBAAA,GAAqCF,KAAK,CAAxCvB,WAAW;MAAXA,WAAW,GAAAyB,kBAAA,cAAG,UAACjC,CAAC;QAAA,OAAKA,CAAC;MAAA,IAAAiC,kBAAA;MAAEC,MAAM,GAAKH,KAAK,CAAhBG,MAAM;IAElD,IAAM7C,KAAK,GAAGwC,QAAQ,CAAClD,IAAI,CAAC;IAC5B,IAAMwD,KAAK,GAAGL,QAAQ,CAACnD,IAAI,CAAC;IAE5B,IAAMyD,SAAS,GAAG,IAAAC,cAAO,EAAC;MAAA,OAAM,IAAAxG,SAAG,EAAC0D,IAAI,CAAC+C,UAAU,EAAE3D,IAAI,CAAC;IAAA,GAAE,CAACA,IAAI,CAAC,CAAC;IACnE,IAAM4D,QAAQ,GAAG,IAAAF,cAAO,EACtB;MAAA,OAAM,CAAC,IAAAG,mBAAO,EAACnD,KAAK,EAAE+C,SAAS,CAAC;IAAA,GAChC,CAACA,SAAS,EAAE/C,KAAK,CACnB,CAAC;IACD,IAAMoD,KAAK,GAAG,IAAAC,kBAAW,EACvB;MAAA,OAAMnD,IAAI,CAACG,MAAM,CAACxC,GAAG,CAACyB,IAAI,EAAEyD,SAAS,CAAC;IAAA,GACtC,CAACA,SAAS,EAAEzD,IAAI,CAClB,CAAC;IAED,IAAM2C,cAAc,GAAG,IAAAD,aAAM,EAACb,WAAW,CAAC;IAC1C,IAAAX,gBAAS,EAAC,YAAM;MACdyB,cAAc,CAACC,OAAO,GAAGf,WAAW;IACtC,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;IAEjB,IAAMmC,QAAQ,GAAG,IAAAD,kBAAW,EAC1B,UAAC1C,CAA6B,EAAK;MACjCT,IAAI,CAACG,MAAM,CAACxC,GAAG,CAACyB,IAAI,EAAE2C,cAAc,CAACC,OAAO,CAACvB,CAAC,CAAC,CAAC;IAClD,CAAC,EACD,CAACrB,IAAI,CACP,CAAC;;IAED;IACA,IAAAkB,gBAAS,EAAC,YAAM;MACdN,IAAI,CAACa,MAAM,CAAClD,GAAG,CAACyB,IAAI,EAAEgC,SAAS,CAAC;IAClC,CAAC,EAAE,CAAChC,IAAI,EAAEU,KAAK,CAAC,CAAC;IAEjB,IAAMuD,SAAS,GAAG,IAAAvB,aAAM,EAACa,MAAM,CAAC;IAChC,IAAArC,gBAAS,EAAC,YAAM;MACd+C,SAAS,CAACrB,OAAO,GAAGW,MAAM;IAC5B,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;IAEZ,IAAMW,UAAU,GAAG,IAAAR,cAAO,EAAC;MAAA,OAAO;QAAEhD,KAAK,EAALA,KAAK;QAAEsD,QAAQ,EAARA;MAAS,CAAC;IAAA,CAAC,EAAE,CAACA,QAAQ,EAAEtD,KAAK,CAAC,CAAC;IAC1E,IAAMyD,UAAU,GAAG,IAAAT,cAAO,EACxB;MAAA,OAAO;QAAEF,KAAK,EAALA,KAAK;QAAEI,QAAQ,EAARA,QAAQ;QAAEE,KAAK,EAALA;MAAM,CAAC;IAAA,CAAC,EAClC,CAACN,KAAK,EAAEI,QAAQ,EAAEE,KAAK,CACzB,CAAC;IAED,IAAMM,YAAY,GAAG,IAAAC,4BAAgB,EAAC;MAAA,OAAMhB,IAAI;IAAA,CAAS,EAAE,CAACA,IAAI,CAAC,CAAC;IAElE,OAAO,IAAAK,cAAO,EACZ;MAAA,OAAMO,SAAS,CAACrB,OAAO,CAACsB,UAAU,EAAEC,UAAU,EAAEC,YAAY,CAAC;IAAA,GAC7D,CAACD,UAAU,EAAED,UAAU,EAAEE,YAAY,CACvC,CAAC;EACH,CAAC;AACH,CAAC;AAED,IAAME,iBAAiB,GAAG,SAApBA,iBAAiBA,CAA4B1D,IAAmB,EAAK;EACzE,IAAA2D,UAAA,GAA4C,IAAAzD,eAAQ,EAClD,EACF,CAAC;IAAA0D,UAAA,GAAAjF,cAAA,CAAAgF,UAAA;IAFME,cAAc,GAAAD,UAAA;IAAEE,iBAAiB,GAAAF,UAAA;EAIxC,IAAMG,iBAAiB,GAAG,IAAAjC,aAAM,EAAC+B,cAAc,CAAC;EAChD,IAAAvD,gBAAS,EAAC,YAAM;IACdyD,iBAAiB,CAAC/B,OAAO,GAAG6B,cAAc;EAC5C,CAAC,EAAE,CAACA,cAAc,CAAC,CAAC;EAEpB,IAAMG,aAAa,GAAG,IAAAlC,aAAM,EAAC9B,IAAI,CAAC+C,UAAU,CAAC;EAC7C,IAAAzC,gBAAS,EAAC,YAAM;IACd0D,aAAa,CAAChC,OAAO,GAAGhC,IAAI,CAAC+C,UAAU;EACzC,CAAC,EAAE,CAAC/C,IAAI,CAAC+C,UAAU,CAAC,CAAC;EAErB,IAAAzC,gBAAS,EAAC,YAAM;IACd,IAAMC,YAAY,GAAGP,IAAI,CAACG,MAAM,CAAC8D,cAAc,CAAC,UAAC7E,IAAI,EAAEU,KAAK,EAAK;MAC/D,IAAMoE,WAAW,GAAG,IAAAjB,mBAAO,EAACnD,KAAK,EAAE,IAAAxD,SAAG,EAAC0H,aAAa,CAAChC,OAAO,EAAE5C,IAAI,CAAC,CAAC;MACpE,IAAM+E,MAAM,GAAGJ,iBAAiB,CAAC/B,OAAO;MAExC,IAAImC,MAAM,CAACC,QAAQ,CAAChF,IAAI,CAAC,EAAE;QACzB,IAAI8E,WAAW,EAAE;UACfJ,iBAAiB,CAACK,MAAM,CAACE,MAAM,CAAC,UAACC,KAAK;YAAA,OAAKA,KAAK,KAAKlF,IAAI;UAAA,EAAC,CAAC;QAC7D;MACF,CAAC,MAAM,IAAI,CAAC8E,WAAW,EAAE;QACvBJ,iBAAiB,IAAAS,MAAA,CAAA1G,kBAAA,CAAKsG,MAAM,IAAE/E,IAAI,EAAC,CAAC;MACtC;IACF,CAAC,CAAC;IACF,OAAO;MAAA,OAAMmB,YAAY,CAACG,WAAW,CAAC,CAAC;IAAA;EACzC,CAAC,EAAE,CAACV,IAAI,CAACG,MAAM,CAAC,CAAC;EAEjB,OAAO0D,cAAc;AACvB,CAAC;AAED,IAAMW,eAAe,GAAG,SAAlBA,eAAeA,CAA4BxE,IAAmB,EAAK;EACvE,IAAMyE,KAAK,GAAG,IAAA3B,cAAO,EAAC;IAAA,OAAMT,oBAAoB,CAACrC,IAAI,CAAC;EAAA,GAAE,CAACA,IAAI,CAAC,CAAC;EAC/D,IAAMsC,QAAQ,GAAG,IAAAQ,cAAO,EAAC;IAAA,OAAM/C,kBAAkB,CAACC,IAAI,CAAC;EAAA,GAAE,CAACA,IAAI,CAAC,CAAC;EAChE,IAAMuC,QAAQ,GAAG,IAAAO,cAAO,EAAC;IAAA,OAAMnC,kBAAkB,CAACX,IAAI,CAAC;EAAA,GAAE,CAACA,IAAI,CAAC,CAAC;EAChE,IAAM0E,cAAc,GAAG,IAAA5B,cAAO,EAAC;IAAA,OAAM/B,wBAAwB,CAACf,IAAI,CAAC;EAAA,GAAE,CAACA,IAAI,CAAC,CAAC;EAE5E,IAAM6D,cAAc,GAAGH,iBAAiB,CAAC1D,IAAI,CAAC;EAC9C,IAAMgD,QAAQ,GAAG,IAAAF,cAAO,EACtB;IAAA,OAAMe,cAAc,CAACtE,MAAM,GAAG,CAAC;EAAA,GAC/B,CAACsE,cAAc,CAACtE,MAAM,CACxB,CAAC;EAED,OAAO,IAAAuD,cAAO,EACZ;IAAA,OAAO;MACL9C,IAAI,EAAJA,IAAI;MACJyE,KAAK,EAALA,KAAK;MACLnC,QAAQ,EAARA,QAAQ;MACRC,QAAQ,EAARA,QAAQ;MACRmC,cAAc,EAAdA,cAAc;MACdb,cAAc,EAAdA,cAAc;MACdb,QAAQ,EAARA;IACF,CAAC;EAAA,CAAC,EACF,CAACyB,KAAK,EAAEzE,IAAI,EAAEgD,QAAQ,EAAEa,cAAc,EAAEtB,QAAQ,EAAEmC,cAAc,EAAEpC,QAAQ,CAC5E,CAAC;AACH,CAAC;AAEM,IAAMqC,OAAO,GAAAxI,OAAA,CAAAwI,OAAA,GAAG,SAAVA,OAAOA,CAClB5B,UAAmB,EAChB;EACH,IAAM6B,kBAAkB,GAAG,IAAAnB,4BAAgB,EACzC;IAAA,OAAMV,UAAU;EAAA,GAChB,CAACA,UAAU,CACb,CAAC;EAED,IAAM8B,OAAO,GAAG,IAAA/C,aAAM,EAAC,IAAIgD,gBAAI,CAAUF,kBAAkB,CAAC,CAAC;EAC7D,IAAAtE,gBAAS,EAAC,YAAM;IACduE,OAAO,CAAC7C,OAAO,CAACe,UAAU,GAAG6B,kBAAkB;IAC/CC,OAAO,CAAC7C,OAAO,CAACkB,KAAK,CAAC,CAAC;EACzB,CAAC,EAAE,CAAC0B,kBAAkB,CAAC,CAAC;EAExB,OAAOJ,eAAe,CAACK,OAAO,CAAC7C,OAAO,CAAC;AACzC,CAAC;AAEM,IAAM+C,eAAe,GAAA5I,OAAA,CAAA4I,eAAA,GAAG,SAAlBA,eAAeA,CAAA,EAA0C;EACpE,IAAM/E,IAAI,GAAG,IAAAgF,0BAAc,EAAuB,CAAC;EACnD,IAAI,CAAChF,IAAI,EAAE,MAAM,IAAIiF,KAAK,CAAC,kCAAkC,CAAC;EAC9D,OAAOT,eAAe,CAACxE,IAAI,CAAC;AAC9B,CAAC","ignoreList":[]}
|
package/dist/cjs/types.js.map
CHANGED
|
@@ -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
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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);
|
package/dist/esm/index.js.map
CHANGED
|
@@ -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":[]}
|
package/dist/esm/types.js.map
CHANGED
|
@@ -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/types/index.d.ts
CHANGED
|
@@ -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,
|
|
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: <
|
|
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: <
|
|
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;
|
|
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"}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -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.
|
|
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",
|
|
@@ -36,5 +36,5 @@
|
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"react": ">=18"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
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<
|
|
57
|
-
|
|
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 =
|
|
63
|
-
form: Form<TValues>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
|
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(
|
|
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
|
-
}, [
|
|
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
|
|