@os-design/form 1.0.0
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/LICENCE.md +1 -0
- package/README.md +458 -0
- package/dist/cjs/SubscribableData.js +52 -0
- package/dist/cjs/SubscribableData.js.map +1 -0
- package/dist/cjs/SubscriptionManager.js +83 -0
- package/dist/cjs/SubscriptionManager.js.map +1 -0
- package/dist/cjs/index.js +242 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/utils/clone.js +36 -0
- package/dist/cjs/utils/clone.js.map +1 -0
- package/dist/cjs/utils/isEqual.js +44 -0
- package/dist/cjs/utils/isEqual.js.map +1 -0
- package/dist/cjs/utils/useDeepEqualMemo.js +25 -0
- package/dist/cjs/utils/useDeepEqualMemo.js.map +1 -0
- package/dist/esm/SubscribableData.js +23 -0
- package/dist/esm/SubscribableData.js.map +1 -0
- package/dist/esm/SubscriptionManager.js +46 -0
- package/dist/esm/SubscriptionManager.js.map +1 -0
- package/dist/esm/index.js +157 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/utils/clone.js +17 -0
- package/dist/esm/utils/clone.js.map +1 -0
- package/dist/esm/utils/isEqual.js +27 -0
- package/dist/esm/utils/isEqual.js.map +1 -0
- package/dist/esm/utils/useDeepEqualMemo.js +15 -0
- package/dist/esm/utils/useDeepEqualMemo.js.map +1 -0
- package/dist/types/SubscribableData.d.ts +11 -0
- package/dist/types/SubscribableData.d.ts.map +1 -0
- package/dist/types/SubscriptionManager.d.ts +19 -0
- package/dist/types/SubscriptionManager.d.ts.map +1 -0
- package/dist/types/index.d.ts +57 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/utils/clone.d.ts +3 -0
- package/dist/types/utils/clone.d.ts.map +1 -0
- package/dist/types/utils/isEqual.d.ts +3 -0
- package/dist/types/utils/isEqual.d.ts.map +1 -0
- package/dist/types/utils/useDeepEqualMemo.d.ts +4 -0
- package/dist/types/utils/useDeepEqualMemo.d.ts.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","SubscribableData","clone","isEqual","useDeepEqualMemo","Form","constructor","initValues","values","errors","FormContext","FormProvider","form","children","createUseValueHook","name","value","setValue","get","subscription","subscribeToField","v","unsubscribe","useError","currentForm","Error","createUseTransformerHook","useValue","transformer","transformerRef","current","partialValues","Object","entries","forEach","n","set","createFieldComponent","props","toValue","fromValue","render","transformedValue","error","modified","reset","fromValueRef","onChange","undefined","renderRef","inputProps","fieldState","useModifiedFields","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAllFields","isInitValue","fields","includes","filter","field","useFormResponse","useTransformer","Field","length","useForm","memoizedInitValues","useExistingForm"],"sources":["../../src/index.tsx"],"sourcesContent":["import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport SubscribableData from './SubscribableData';\nimport clone from './utils/clone';\nimport isEqual from './utils/isEqual';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './SubscriptionManager';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Values = Record<string, any>;\ntype Errors<TValues extends Values> = Record<keyof TValues, string | undefined>;\n\nclass Form<\n TValues extends Values,\n TErrors extends Errors<TValues> = Errors<TValues>\n> {\n public readonly initValues: TValues;\n\n public readonly values: SubscribableData<TValues>;\n\n public readonly errors: SubscribableData<TErrors>;\n\n public constructor(initValues: TValues) {\n this.initValues = initValues;\n this.values = new SubscribableData(clone(initValues));\n this.errors = new SubscribableData({} as TErrors);\n }\n}\n\nconst FormContext = createContext<any>(null);\n\ninterface FormProviderProps<TValues extends Values> {\n form: Form<TValues>;\n children?: ReactNode;\n}\n\n// eslint-disable-next-line react/function-component-definition\nexport function FormProvider<TValues extends Values>({\n form,\n children,\n}: FormProviderProps<TValues>) {\n return <FormContext.Provider value={form}>{children}</FormContext.Provider>;\n}\n\nconst createUseValueHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends keyof TValues>(name: TName) => {\n const [value, setValue] = useState<TValues[TName]>(form.values.get(name));\n\n useEffect(() => {\n const subscription = form.values.subscribeToField(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport const useError = <\n TValues extends Values = Values,\n TName extends keyof TValues = keyof TValues\n>(\n name: TName,\n form?: Form<TValues>\n) => {\n const currentForm = useContext(FormContext) || form;\n if (!currentForm) throw new Error('Specify the form');\n const [value, setValue] = useState<string | undefined>(\n currentForm.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = currentForm.errors.subscribeToField(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [currentForm.errors, name]);\n\n return value;\n};\n\nexport type Transformer<TValues extends Values, TName extends keyof TValues> = (\n value: TValues[TName]\n) => Partial<TValues>;\n\nconst createUseTransformerHook = <TValues extends Values>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n return <TName extends keyof TValues>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n form.values.set(n, v);\n });\n }, [value]);\n };\n};\n\ninterface InputProps<T> {\n value: T;\n onChange: (value: T) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldPropsWithoutTransformers<TName, TStateValue> {\n name: TName;\n toValue?: never;\n fromValue?: never;\n render: (\n inputProps: InputProps<TStateValue>,\n fieldState: FieldState\n ) => React.ReactElement;\n}\ninterface FieldPropsWithTransformers<TName, TStateValue, TInputValue> {\n name: TName;\n toValue: (value: TStateValue) => TInputValue;\n fromValue?: (value: TInputValue) => TStateValue;\n render: (\n inputProps: InputProps<TInputValue>,\n fieldState: FieldState\n ) => React.ReactElement;\n}\ntype FieldProps<TName, TStateValue, TInputValue> =\n | FieldPropsWithoutTransformers<TName, TStateValue>\n | FieldPropsWithTransformers<TName, TStateValue, TInputValue>;\n\nconst createFieldComponent = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = createUseValueHook(form);\n return <TName extends keyof TValues>(\n props: FieldProps<TName, TValues[TName], any>\n ) => {\n const { name, toValue, fromValue, render } = props;\n\n const value = useValue(name);\n const transformedValue = useMemo<any>(\n () => (toValue ? toValue(value) : value),\n [toValue, value]\n );\n const error = useError<TValues>(name, form);\n\n const modified = useMemo(\n () => !isEqual(value, form.initValues[name]),\n [name, value]\n );\n const reset = useCallback(\n () => form.values.set(name, form.initValues[name]),\n [name]\n );\n\n const fromValueRef = useRef(fromValue);\n useEffect(() => {\n fromValueRef.current = fromValue;\n }, [fromValue]);\n\n const onChange = useCallback(\n (v: any) => {\n form.values.set(\n name,\n fromValueRef.current ? fromValueRef.current(v) : (v as TValues[TName])\n );\n form.errors.set(name, undefined);\n },\n [name]\n );\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(\n () => ({ value: transformedValue, onChange }),\n [onChange, transformedValue]\n );\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState),\n [fieldState, inputProps]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends Values>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<keyof 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.subscribeToAllFields((name, value) => {\n const isInitValue = isEqual(value, 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 useValue = useMemo(() => createUseValueHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n const Field = useMemo(() => createFieldComponent(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 useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, 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 const form = useMemo(\n () => new Form<TValues>(memoizedInitValues),\n [memoizedInitValues]\n );\n return useFormResponse(form);\n};\n\nexport const useExistingForm = <TValues extends Values = Values>() => {\n const form = useContext<Form<TValues> | null>(FormContext);\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const clone = value => {
|
|
2
|
+
if (typeof value === 'object') {
|
|
3
|
+
if (Array.isArray(value)) {
|
|
4
|
+
return value.map(item => clone(item));
|
|
5
|
+
}
|
|
6
|
+
if (value !== null) {
|
|
7
|
+
const clonedObj = {};
|
|
8
|
+
Object.entries(value).forEach(([objKey, objValue]) => {
|
|
9
|
+
clonedObj[objKey] = clone(objValue);
|
|
10
|
+
});
|
|
11
|
+
return clonedObj;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
};
|
|
16
|
+
export default clone;
|
|
17
|
+
//# sourceMappingURL=clone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.js","names":["clone","value","Array","isArray","map","item","clonedObj","Object","entries","forEach","objKey","objValue"],"sources":["../../../src/utils/clone.ts"],"sourcesContent":["const clone = <T>(value: T): T => {\n if (typeof value === 'object') {\n if (Array.isArray(value)) {\n return value.map((item) => clone(item)) as T;\n }\n\n if (value !== null) {\n const clonedObj = {};\n Object.entries(value).forEach(([objKey, objValue]) => {\n clonedObj[objKey] = clone(objValue);\n });\n return clonedObj as T;\n }\n }\n\n return value;\n};\n\nexport default clone;\n"],"mappings":"AAAA,MAAMA,KAAK,GAAOC,KAAQ,IAAQ;EAChC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,IAAIC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,EAAE;MACxB,OAAOA,KAAK,CAACG,GAAG,CAAEC,IAAI,IAAKL,KAAK,CAACK,IAAI,CAAC,CAAC;IACzC;IAEA,IAAIJ,KAAK,KAAK,IAAI,EAAE;MAClB,MAAMK,SAAS,GAAG,CAAC,CAAC;MACpBC,MAAM,CAACC,OAAO,CAACP,KAAK,CAAC,CAACQ,OAAO,CAAC,CAAC,CAACC,MAAM,EAAEC,QAAQ,CAAC,KAAK;QACpDL,SAAS,CAACI,MAAM,CAAC,GAAGV,KAAK,CAACW,QAAQ,CAAC;MACrC,CAAC,CAAC;MACF,OAAOL,SAAS;IAClB;EACF;EAEA,OAAOL,KAAK;AACd,CAAC;AAED,eAAeD,KAAK"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2
|
+
const isEqual = (value1, value2) => {
|
|
3
|
+
if (typeof value1 !== typeof value2) return false;
|
|
4
|
+
if (typeof value1 === 'object') {
|
|
5
|
+
if (Array.isArray(value1) !== Array.isArray(value2)) return false;
|
|
6
|
+
if (Array.isArray(value1)) {
|
|
7
|
+
if (value1.length !== value2.length) return false;
|
|
8
|
+
return value1.every((item1, index) => {
|
|
9
|
+
const item2 = value2[index];
|
|
10
|
+
return isEqual(item1, item2);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
if (value1 !== null && value2 !== null) {
|
|
14
|
+
if (Object.keys(value1).length !== Object.keys(value2).length) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
return Object.entries(value1).every(([objKey, objValue1]) => {
|
|
18
|
+
if (!Object.hasOwn(value2, objKey)) return false;
|
|
19
|
+
const objValue2 = value2[objKey];
|
|
20
|
+
return isEqual(objValue1, objValue2);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return Object.is(value1, value2);
|
|
25
|
+
};
|
|
26
|
+
export default isEqual;
|
|
27
|
+
//# sourceMappingURL=isEqual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isEqual.js","names":["isEqual","value1","value2","Array","isArray","length","every","item1","index","item2","Object","keys","entries","objKey","objValue1","hasOwn","objValue2","is"],"sources":["../../../src/utils/isEqual.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isEqual = (value1: any, value2: any): boolean => {\n if (typeof value1 !== typeof value2) return false;\n\n if (typeof value1 === 'object') {\n if (Array.isArray(value1) !== Array.isArray(value2)) return false;\n\n if (Array.isArray(value1)) {\n if (value1.length !== value2.length) return false;\n\n return value1.every((item1, index) => {\n const item2 = value2[index];\n return isEqual(item1, item2);\n });\n }\n\n if (value1 !== null && value2 !== null) {\n if (Object.keys(value1).length !== Object.keys(value2).length) {\n return false;\n }\n\n return Object.entries(value1).every(([objKey, objValue1]) => {\n if (!Object.hasOwn(value2, objKey)) return false;\n const objValue2 = value2[objKey];\n return isEqual(objValue1, objValue2);\n });\n }\n }\n\n return Object.is(value1, value2);\n};\n\nexport default isEqual;\n"],"mappings":"AAAA;AACA,MAAMA,OAAO,GAAG,CAACC,MAAW,EAAEC,MAAW,KAAc;EACrD,IAAI,OAAOD,MAAM,KAAK,OAAOC,MAAM,EAAE,OAAO,KAAK;EAEjD,IAAI,OAAOD,MAAM,KAAK,QAAQ,EAAE;IAC9B,IAAIE,KAAK,CAACC,OAAO,CAACH,MAAM,CAAC,KAAKE,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,EAAE,OAAO,KAAK;IAEjE,IAAIC,KAAK,CAACC,OAAO,CAACH,MAAM,CAAC,EAAE;MACzB,IAAIA,MAAM,CAACI,MAAM,KAAKH,MAAM,CAACG,MAAM,EAAE,OAAO,KAAK;MAEjD,OAAOJ,MAAM,CAACK,KAAK,CAAC,CAACC,KAAK,EAAEC,KAAK,KAAK;QACpC,MAAMC,KAAK,GAAGP,MAAM,CAACM,KAAK,CAAC;QAC3B,OAAOR,OAAO,CAACO,KAAK,EAAEE,KAAK,CAAC;MAC9B,CAAC,CAAC;IACJ;IAEA,IAAIR,MAAM,KAAK,IAAI,IAAIC,MAAM,KAAK,IAAI,EAAE;MACtC,IAAIQ,MAAM,CAACC,IAAI,CAACV,MAAM,CAAC,CAACI,MAAM,KAAKK,MAAM,CAACC,IAAI,CAACT,MAAM,CAAC,CAACG,MAAM,EAAE;QAC7D,OAAO,KAAK;MACd;MAEA,OAAOK,MAAM,CAACE,OAAO,CAACX,MAAM,CAAC,CAACK,KAAK,CAAC,CAAC,CAACO,MAAM,EAAEC,SAAS,CAAC,KAAK;QAC3D,IAAI,CAACJ,MAAM,CAACK,MAAM,CAACb,MAAM,EAAEW,MAAM,CAAC,EAAE,OAAO,KAAK;QAChD,MAAMG,SAAS,GAAGd,MAAM,CAACW,MAAM,CAAC;QAChC,OAAOb,OAAO,CAACc,SAAS,EAAEE,SAAS,CAAC;MACtC,CAAC,CAAC;IACJ;EACF;EAEA,OAAON,MAAM,CAACO,EAAE,CAAChB,MAAM,EAAEC,MAAM,CAAC;AAClC,CAAC;AAED,eAAeF,OAAO"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useMemo, useRef } from 'react';
|
|
2
|
+
import clone from './clone';
|
|
3
|
+
import isEqual from './isEqual';
|
|
4
|
+
const useDeepEqualMemoize = value => {
|
|
5
|
+
const ref = useRef(undefined);
|
|
6
|
+
if (!isEqual(ref.current, value)) {
|
|
7
|
+
ref.current = clone(value);
|
|
8
|
+
}
|
|
9
|
+
return ref.current;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
13
|
+
const useDeepEqualMemo = (factory, deps) => useMemo(factory, deps ? deps.map(useDeepEqualMemoize) : undefined);
|
|
14
|
+
export default useDeepEqualMemo;
|
|
15
|
+
//# sourceMappingURL=useDeepEqualMemo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDeepEqualMemo.js","names":["useMemo","useRef","clone","isEqual","useDeepEqualMemoize","value","ref","undefined","current","useDeepEqualMemo","factory","deps","map"],"sources":["../../../src/utils/useDeepEqualMemo.ts"],"sourcesContent":["import { DependencyList, useMemo, useRef } from 'react';\nimport clone from './clone';\nimport isEqual from './isEqual';\n\nconst useDeepEqualMemoize = <T>(value: T) => {\n const ref = useRef<T | undefined>(undefined);\n if (!isEqual(ref.current, value)) {\n ref.current = clone(value);\n }\n return ref.current;\n};\n\n/* eslint-disable react-hooks/exhaustive-deps */\nconst useDeepEqualMemo = <T>(\n factory: () => T,\n deps: DependencyList | undefined\n): T => useMemo(factory, deps ? deps.map(useDeepEqualMemoize) : undefined);\n\nexport default useDeepEqualMemo;\n"],"mappings":"AAAA,SAAyBA,OAAO,EAAEC,MAAM,QAAQ,OAAO;AACvD,OAAOC,KAAK,MAAM,SAAS;AAC3B,OAAOC,OAAO,MAAM,WAAW;AAE/B,MAAMC,mBAAmB,GAAOC,KAAQ,IAAK;EAC3C,MAAMC,GAAG,GAAGL,MAAM,CAAgBM,SAAS,CAAC;EAC5C,IAAI,CAACJ,OAAO,CAACG,GAAG,CAACE,OAAO,EAAEH,KAAK,CAAC,EAAE;IAChCC,GAAG,CAACE,OAAO,GAAGN,KAAK,CAACG,KAAK,CAAC;EAC5B;EACA,OAAOC,GAAG,CAACE,OAAO;AACpB,CAAC;;AAED;AACA,MAAMC,gBAAgB,GAAG,CACvBC,OAAgB,EAChBC,IAAgC,KAC1BX,OAAO,CAACU,OAAO,EAAEC,IAAI,GAAGA,IAAI,CAACC,GAAG,CAACR,mBAAmB,CAAC,GAAGG,SAAS,CAAC;AAE1E,eAAeE,gBAAgB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import SubscriptionManager from './SubscriptionManager';
|
|
2
|
+
type Data = Record<string, any>;
|
|
3
|
+
declare class SubscribableData<TData extends Data, TDataName extends keyof TData = keyof TData> extends SubscriptionManager<TData> {
|
|
4
|
+
private data;
|
|
5
|
+
constructor(data: TData);
|
|
6
|
+
get<TName extends TDataName>(name: TName): TData[TName];
|
|
7
|
+
getAll(): TData;
|
|
8
|
+
set<TName extends TDataName>(name: TName, value: TData[TName]): void;
|
|
9
|
+
}
|
|
10
|
+
export default SubscribableData;
|
|
11
|
+
//# sourceMappingURL=SubscribableData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscribableData.d.ts","sourceRoot":"","sources":["../../src/SubscribableData.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AAGxD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhC,cAAM,gBAAgB,CACpB,KAAK,SAAS,IAAI,EAClB,SAAS,SAAS,MAAM,KAAK,GAAG,MAAM,KAAK,CAC3C,SAAQ,mBAAmB,CAAC,KAAK,CAAC;IAClC,OAAO,CAAC,IAAI,CAAQ;gBAED,IAAI,EAAE,KAAK;IAKvB,GAAG,CAAC,KAAK,SAAS,SAAS,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAIvD,MAAM,IAAI,KAAK;IAIf,GAAG,CAAC,KAAK,SAAS,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;CAI5E;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type Observer<K, V> = (name: K, value: V) => void;
|
|
2
|
+
export type FieldObserver<V> = (value: V) => void;
|
|
3
|
+
export interface Subscription {
|
|
4
|
+
unsubscribe: () => void;
|
|
5
|
+
}
|
|
6
|
+
type Data = Record<string, any>;
|
|
7
|
+
declare class SubscriptionManager<TData extends Data, TDataName extends keyof TData = keyof TData> {
|
|
8
|
+
private observers;
|
|
9
|
+
private fieldObservers;
|
|
10
|
+
constructor();
|
|
11
|
+
private getFieldObservers;
|
|
12
|
+
subscribeToAllFields(observer: Observer<TDataName, TData[TDataName]>): Subscription;
|
|
13
|
+
private unsubscribeFromAllFields;
|
|
14
|
+
subscribeToField<TName extends TDataName>(name: TName, observer: FieldObserver<TData[TName]>): Subscription;
|
|
15
|
+
private unsubscribeFromField;
|
|
16
|
+
protected call<TName extends TDataName>(name: TName, value: TData[TName]): void;
|
|
17
|
+
}
|
|
18
|
+
export default SubscriptionManager;
|
|
19
|
+
//# sourceMappingURL=SubscriptionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriptionManager.d.ts","sourceRoot":"","sources":["../../src/SubscriptionManager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AACzD,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAGD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAShC,cAAM,mBAAmB,CACvB,KAAK,SAAS,IAAI,EAClB,SAAS,SAAS,MAAM,KAAK,GAAG,MAAM,KAAK;IAE3C,OAAO,CAAC,SAAS,CAA+C;IAEhE,OAAO,CAAC,cAAc,CAEpB;;IAOF,OAAO,CAAC,iBAAiB;IASlB,oBAAoB,CACzB,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAC9C,YAAY;IAKf,OAAO,CAAC,wBAAwB;IAMzB,gBAAgB,CAAC,KAAK,SAAS,SAAS,EAC7C,IAAI,EAAE,KAAK,EACX,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GACpC,YAAY;IAKf,OAAO,CAAC,oBAAoB;IAO5B,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,SAAS,EACpC,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAClB,IAAI;CAIR;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
|
+
import SubscribableData from './SubscribableData';
|
|
3
|
+
export * from './SubscriptionManager';
|
|
4
|
+
type Values = Record<string, any>;
|
|
5
|
+
type Errors<TValues extends Values> = Record<keyof TValues, string | undefined>;
|
|
6
|
+
declare class Form<TValues extends Values, TErrors extends Errors<TValues> = Errors<TValues>> {
|
|
7
|
+
readonly initValues: TValues;
|
|
8
|
+
readonly values: SubscribableData<TValues>;
|
|
9
|
+
readonly errors: SubscribableData<TErrors>;
|
|
10
|
+
constructor(initValues: TValues);
|
|
11
|
+
}
|
|
12
|
+
interface FormProviderProps<TValues extends Values> {
|
|
13
|
+
form: Form<TValues>;
|
|
14
|
+
children?: ReactNode;
|
|
15
|
+
}
|
|
16
|
+
export declare function FormProvider<TValues extends Values>({ form, children, }: FormProviderProps<TValues>): JSX.Element;
|
|
17
|
+
export declare const useError: <TValues extends Values = Values, TName extends keyof TValues = keyof TValues>(name: TName, form?: Form<TValues, Errors<TValues>> | undefined) => string | undefined;
|
|
18
|
+
export type Transformer<TValues extends Values, TName extends keyof TValues> = (value: TValues[TName]) => Partial<TValues>;
|
|
19
|
+
interface InputProps<T> {
|
|
20
|
+
value: T;
|
|
21
|
+
onChange: (value: T) => void;
|
|
22
|
+
}
|
|
23
|
+
interface FieldState {
|
|
24
|
+
error?: string;
|
|
25
|
+
modified: boolean;
|
|
26
|
+
reset: () => void;
|
|
27
|
+
}
|
|
28
|
+
interface FieldPropsWithoutTransformers<TName, TStateValue> {
|
|
29
|
+
name: TName;
|
|
30
|
+
toValue?: never;
|
|
31
|
+
fromValue?: never;
|
|
32
|
+
render: (inputProps: InputProps<TStateValue>, fieldState: FieldState) => React.ReactElement;
|
|
33
|
+
}
|
|
34
|
+
interface FieldPropsWithTransformers<TName, TStateValue, TInputValue> {
|
|
35
|
+
name: TName;
|
|
36
|
+
toValue: (value: TStateValue) => TInputValue;
|
|
37
|
+
fromValue?: (value: TInputValue) => TStateValue;
|
|
38
|
+
render: (inputProps: InputProps<TInputValue>, fieldState: FieldState) => React.ReactElement;
|
|
39
|
+
}
|
|
40
|
+
type FieldProps<TName, TStateValue, TInputValue> = FieldPropsWithoutTransformers<TName, TStateValue> | FieldPropsWithTransformers<TName, TStateValue, TInputValue>;
|
|
41
|
+
export declare const useForm: <TValues extends Values = Values>(initValues: TValues) => {
|
|
42
|
+
form: Form<TValues, Errors<TValues>>;
|
|
43
|
+
Field: <TName extends keyof TValues>(props: FieldProps<TName, TValues[TName], any>) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
44
|
+
useValue: <TName_1 extends keyof TValues>(name: TName_1) => TValues[TName_1];
|
|
45
|
+
useTransformer: <TName_2 extends keyof TValues>(name: TName_2, transformer: Transformer<TValues, TName_2>) => void;
|
|
46
|
+
modifiedFields: (keyof TValues)[];
|
|
47
|
+
modified: boolean;
|
|
48
|
+
};
|
|
49
|
+
export declare const useExistingForm: <TValues extends Values = Values>() => {
|
|
50
|
+
form: Form<TValues, Errors<TValues>>;
|
|
51
|
+
Field: <TName extends keyof TValues>(props: FieldProps<TName, TValues[TName], any>) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
52
|
+
useValue: <TName_1 extends keyof TValues>(name: TName_1) => TValues[TName_1];
|
|
53
|
+
useTransformer: <TName_2 extends keyof TValues>(name: TName_2, transformer: Transformer<TValues, TName_2>) => void;
|
|
54
|
+
modifiedFields: (keyof TValues)[];
|
|
55
|
+
modified: boolean;
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAEZ,SAAS,EAOV,MAAM,OAAO,CAAC;AACf,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAKlD,cAAc,uBAAuB,CAAC;AAItC,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClC,KAAK,MAAM,CAAC,OAAO,SAAS,MAAM,IAAI,MAAM,CAAC,MAAM,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAEhF,cAAM,IAAI,CACR,OAAO,SAAS,MAAM,EACtB,OAAO,SAAS,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IAEjD,SAAgB,UAAU,EAAE,OAAO,CAAC;IAEpC,SAAgB,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAElD,SAAgB,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAE/B,UAAU,EAAE,OAAO;CAKvC;AAID,UAAU,iBAAiB,CAAC,OAAO,SAAS,MAAM;IAChD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAGD,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,EAAE,EACnD,IAAI,EACJ,QAAQ,GACT,EAAE,iBAAiB,CAAC,OAAO,CAAC,eAE5B;AAiBD,eAAO,MAAM,QAAQ,sKAqBpB,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,OAAO,IAAI,CAC7E,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAClB,OAAO,CAAC,OAAO,CAAC,CAAC;AA0BtB,UAAU,UAAU,CAAC,CAAC;IACpB,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC9B;AACD,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AACD,UAAU,6BAA6B,CAAC,KAAK,EAAE,WAAW;IACxD,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,MAAM,EAAE,CACN,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,EACnC,UAAU,EAAE,UAAU,KACnB,KAAK,CAAC,YAAY,CAAC;CACzB;AACD,UAAU,0BAA0B,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW;IAClE,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,WAAW,CAAC;IAC7C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,WAAW,CAAC;IAChD,MAAM,EAAE,CACN,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,EACnC,UAAU,EAAE,UAAU,KACnB,KAAK,CAAC,YAAY,CAAC;CACzB;AACD,KAAK,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,IAC3C,6BAA6B,CAAC,KAAK,EAAE,WAAW,CAAC,GACjD,0BAA0B,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAwHhE,eAAO,MAAM,OAAO;;;;;;;CAYnB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;CAI3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../../src/utils/clone.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,KAAK,oBAgBV,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isEqual.d.ts","sourceRoot":"","sources":["../../../src/utils/isEqual.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,OAAO,WAAY,GAAG,UAAU,GAAG,KAAG,OA6B3C,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDeepEqualMemo.d.ts","sourceRoot":"","sources":["../../../src/utils/useDeepEqualMemo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAmB,MAAM,OAAO,CAAC;AAaxD,QAAA,MAAM,gBAAgB,8BAEd,cAAc,GAAG,SAAS,MACwC,CAAC;AAE3E,eAAe,gBAAgB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@os-design/form",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"license": "UNLICENSED",
|
|
5
|
+
"repository": "git@gitlab.com:os-team/libs/os-design.git",
|
|
6
|
+
"main": "dist/cjs/index.js",
|
|
7
|
+
"module": "dist/esm/index.js",
|
|
8
|
+
"types": "dist/types/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"require": "./dist/cjs/index.js",
|
|
12
|
+
"default": "./dist/esm/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./package.json": "./package.json"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"clean": "rimraf dist",
|
|
21
|
+
"build:esm": "cross-env BABEL_ENV=esm babel src --root-mode upward --extensions .ts,.tsx --out-dir dist/esm --source-maps",
|
|
22
|
+
"build:cjs": "cross-env BABEL_ENV=cjs babel src --root-mode upward --extensions .ts,.tsx --out-dir dist/cjs --source-maps",
|
|
23
|
+
"build:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types",
|
|
24
|
+
"build": "yarn clean && npm-run-all build:*",
|
|
25
|
+
"ncu": "ncu -u"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@os-design/core": "^1.0.185",
|
|
32
|
+
"@os-design/icons": "^1.0.44"
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"react": ">=18"
|
|
36
|
+
},
|
|
37
|
+
"gitHead": "a325c58ef4a1b6af0b275db9b392f7fe9a856fde"
|
|
38
|
+
}
|