@os-design/form 1.0.85 → 1.0.87
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 +4 -6
- package/dist/cjs/index.js +9 -32
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/index.js +21 -32
- 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 +0 -1
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/index.tsx +15 -39
- package/src/types.ts +0 -6
package/README.md
CHANGED
|
@@ -544,11 +544,10 @@ 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 2 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
|
|
551
|
-
3. To reset some field values if a specific field is changed.
|
|
550
|
+
2. To reset some field values if a specific field is changed.
|
|
552
551
|
|
|
553
552
|
Let's consider the first case. To implement it, use the `useTransformer` hook.
|
|
554
553
|
|
|
@@ -568,11 +567,10 @@ const Form: React.FC = () => {
|
|
|
568
567
|
console.log(form.values.getAll());
|
|
569
568
|
}, []);
|
|
570
569
|
|
|
571
|
-
|
|
572
|
-
useTransformer(['title'] as const, ([title]) => ({
|
|
570
|
+
useTransformer('title', (value) => ({
|
|
573
571
|
// Update any number of fields, not just one.
|
|
574
572
|
// You can use a path (e.g. `'options.min': 0`).
|
|
575
|
-
metaTitle: `The length of the title is ${
|
|
573
|
+
metaTitle: `The length of the title is ${value.length}`,
|
|
576
574
|
}));
|
|
577
575
|
|
|
578
576
|
return (
|
package/dist/cjs/index.js
CHANGED
|
@@ -117,32 +117,9 @@ var createUseErrorHook = function createUseErrorHook(form) {
|
|
|
117
117
|
};
|
|
118
118
|
};
|
|
119
119
|
var createUseTransformerHook = function createUseTransformerHook(form) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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]);
|
|
120
|
+
var useValue = createUseValueHook(form);
|
|
121
|
+
return function (name, transformer) {
|
|
122
|
+
var value = useValue(name);
|
|
146
123
|
var shouldTransformRef = (0, _react.useRef)(false);
|
|
147
124
|
var transformerRef = (0, _react.useRef)(transformer);
|
|
148
125
|
(0, _react.useEffect)(function () {
|
|
@@ -150,7 +127,7 @@ var createUseTransformerHook = function createUseTransformerHook(form) {
|
|
|
150
127
|
}, [transformer]);
|
|
151
128
|
(0, _react.useEffect)(function () {
|
|
152
129
|
if (shouldTransformRef.current) {
|
|
153
|
-
var partialValues = transformerRef.current(
|
|
130
|
+
var partialValues = transformerRef.current(value);
|
|
154
131
|
Object.entries(partialValues).forEach(function (_ref) {
|
|
155
132
|
var _ref2 = _slicedToArray(_ref, 2),
|
|
156
133
|
n = _ref2[0],
|
|
@@ -161,7 +138,7 @@ var createUseTransformerHook = function createUseTransformerHook(form) {
|
|
|
161
138
|
} else {
|
|
162
139
|
shouldTransformRef.current = true;
|
|
163
140
|
}
|
|
164
|
-
}, [
|
|
141
|
+
}, [value]);
|
|
165
142
|
};
|
|
166
143
|
};
|
|
167
144
|
var createFieldComponent = function createFieldComponent(form) {
|
|
@@ -224,10 +201,10 @@ var createFieldComponent = function createFieldComponent(form) {
|
|
|
224
201
|
};
|
|
225
202
|
};
|
|
226
203
|
var useModifiedFields = function useModifiedFields(form) {
|
|
227
|
-
var
|
|
228
|
-
|
|
229
|
-
modifiedFields =
|
|
230
|
-
setModifiedFields =
|
|
204
|
+
var _useState5 = (0, _react.useState)([]),
|
|
205
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
206
|
+
modifiedFields = _useState6[0],
|
|
207
|
+
setModifiedFields = _useState6[1];
|
|
231
208
|
var modifiedFieldsRef = (0, _react.useRef)(modifiedFields);
|
|
232
209
|
(0, _react.useEffect)(function () {
|
|
233
210
|
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","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
|
+
{"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":[]}
|
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
|
|
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":[]}
|
package/dist/esm/index.js
CHANGED
|
@@ -29,38 +29,27 @@ 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
|
-
}
|
|
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]);
|
|
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
|
+
};
|
|
64
53
|
};
|
|
65
54
|
const createFieldComponent = form => {
|
|
66
55
|
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","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
|
+
{"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":[]}
|
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
|
|
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":[]}
|
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,
|
|
3
|
+
import { Path, 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, TName extends Path<TValues>> = (value: PathReturn<TValues, TName>) => {
|
|
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: <TName_3 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_3, transformer: Transformer<TValues, TName_3>) => 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: <TName_3 extends Path<TValues, Exclude<keyof TValues, keyof any[]> & string>>(name: TName_3, transformer: Transformer<TValues, TName_3>) => 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,
|
|
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"}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -4,7 +4,6 @@ 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;
|
|
8
7
|
export type Values<T = any> = Record<string, T>;
|
|
9
8
|
export type Errors<T = any> = Record<Path<T>, string | undefined>;
|
|
10
9
|
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,
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@os-design/form",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.87",
|
|
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.
|
|
33
|
+
"@os-design/core": "^1.0.252",
|
|
34
34
|
"@os-design/icons": "^1.0.59"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"react": ">=18"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "61aeade8e93442219e06e7bbf6a63e5fd06e887d"
|
|
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,
|
|
10
|
+
import { Path, 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,46 +53,21 @@ const createUseErrorHook =
|
|
|
53
53
|
return value;
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
-
export type Transformer<
|
|
57
|
-
TValues
|
|
58
|
-
|
|
59
|
-
> = (values: PathArrayReturn<TValues, TNames>) => {
|
|
56
|
+
export type Transformer<TValues extends Values, TName extends Path<TValues>> = (
|
|
57
|
+
value: PathReturn<TValues, TName>
|
|
58
|
+
) => {
|
|
60
59
|
[K in Path<TValues>]?: PathReturn<TValues, K>;
|
|
61
60
|
};
|
|
62
61
|
|
|
63
|
-
const createUseTransformerHook =
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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>
|
|
68
69
|
) => {
|
|
69
|
-
const
|
|
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
|
-
|
|
70
|
+
const value = useValue(name);
|
|
96
71
|
const shouldTransformRef = useRef(false);
|
|
97
72
|
|
|
98
73
|
const transformerRef = useRef(transformer);
|
|
@@ -102,7 +77,7 @@ const createUseTransformerHook =
|
|
|
102
77
|
|
|
103
78
|
useEffect(() => {
|
|
104
79
|
if (shouldTransformRef.current) {
|
|
105
|
-
const partialValues = transformerRef.current(
|
|
80
|
+
const partialValues = transformerRef.current(value);
|
|
106
81
|
Object.entries(partialValues).forEach(([n, v]) => {
|
|
107
82
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
108
83
|
form.values.set(n as Path<TValues>, v as any);
|
|
@@ -110,8 +85,9 @@ const createUseTransformerHook =
|
|
|
110
85
|
} else {
|
|
111
86
|
shouldTransformRef.current = true;
|
|
112
87
|
}
|
|
113
|
-
}, [
|
|
88
|
+
}, [value]);
|
|
114
89
|
};
|
|
90
|
+
};
|
|
115
91
|
|
|
116
92
|
interface InputProps<TValue> {
|
|
117
93
|
value: TValue;
|
package/src/types.ts
CHANGED
|
@@ -27,12 +27,6 @@ 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
|
-
|
|
36
30
|
export type Values<T = any> = Record<string, T>;
|
|
37
31
|
export type Errors<T = any> = Record<Path<T>, string | undefined>;
|
|
38
32
|
|