@mantine/form 4.2.3 → 5.0.0-alpha.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/cjs/use-form.js CHANGED
@@ -8,8 +8,6 @@ var validateValues = require('./validate-values/validate-values.js');
8
8
  var filterErrors = require('./filter-errors/filter-errors.js');
9
9
  var getInputOnChange = require('./get-input-on-change/get-input-on-change.js');
10
10
  var getErrorPath = require('./get-error-path/get-error-path.js');
11
- var useStateRef = require('./use-state-ref/use-state-ref.js');
12
- var usePropRef = require('./use-prop-ref/use-prop-ref.js');
13
11
 
14
12
  var __defProp = Object.defineProperty;
15
13
  var __defProps = Object.defineProperties;
@@ -36,44 +34,41 @@ function useForm({
36
34
  validate: rules,
37
35
  schema
38
36
  }) {
39
- const [errors, setErrors, errorsRef] = useStateRef.useStateRef(filterErrors.filterErrors(initialErrors));
40
- const [values, setValues, valuesRef] = useStateRef.useStateRef(initialValues);
41
- const initialValuesRef = usePropRef.usePropRef(initialValues);
42
- const rulesRef = usePropRef.usePropRef(rules);
43
- const schemaRef = usePropRef.usePropRef(schema);
44
- const clearErrors = react.useCallback(() => setErrors({}), []);
45
- const setFieldError = react.useCallback((field, error) => setErrors((current) => __spreadProps(__spreadValues({}, current), { [field]: error })), []);
46
- const clearFieldError = react.useCallback((field) => setErrors((current) => {
37
+ const [errors, setErrors] = react.useState(filterErrors.filterErrors(initialErrors));
38
+ const [values, setValues] = react.useState(initialValues);
39
+ const clearErrors = () => setErrors({});
40
+ const setFieldError = (field, error) => setErrors((current) => __spreadProps(__spreadValues({}, current), { [field]: error }));
41
+ const clearFieldError = (field) => setErrors((current) => {
47
42
  const clone = __spreadValues({}, current);
48
43
  delete clone[field];
49
44
  return clone;
50
- }), []);
51
- const setFieldValue = react.useCallback((field, value) => {
45
+ });
46
+ const setFieldValue = (field, value, errorPath) => {
52
47
  setValues((currentValues) => __spreadProps(__spreadValues({}, currentValues), { [field]: value }));
53
- clearFieldError(field);
54
- }, []);
55
- const setListItem = react.useCallback((field, index, value) => {
56
- const list = valuesRef.current[field];
48
+ clearFieldError(errorPath);
49
+ };
50
+ const setListItem = (field, index, value, errorPath) => {
51
+ const list = values[field];
57
52
  if (formList.isFormList(list) && list[index] !== void 0) {
58
53
  const cloned = [...list];
59
54
  cloned[index] = value;
60
- setFieldValue(field, formList.formList(cloned));
55
+ setFieldValue(field, formList.formList(cloned), errorPath);
61
56
  }
62
- }, []);
63
- const removeListItem = react.useCallback((field, indices) => {
64
- const list = valuesRef.current[field];
57
+ };
58
+ const removeListItem = (field, indices) => {
59
+ const list = values[field];
65
60
  if (formList.isFormList(list)) {
66
61
  setFieldValue(field, formList.formList(list.filter((_, index) => Array.isArray(indices) ? !indices.includes(index) : indices !== index)));
67
62
  }
68
- }, []);
69
- const addListItem = react.useCallback((field, payload) => {
70
- const list = valuesRef.current[field];
63
+ };
64
+ const addListItem = (field, payload) => {
65
+ const list = values[field];
71
66
  if (formList.isFormList(list)) {
72
67
  setFieldValue(field, formList.formList([...list, payload]));
73
68
  }
74
- }, []);
75
- const reorderListItem = react.useCallback((field, { from, to }) => {
76
- const list = valuesRef.current[field];
69
+ };
70
+ const reorderListItem = (field, { from, to }) => {
71
+ const list = values[field];
77
72
  if (formList.isFormList(list) && list[from] !== void 0 && list[to] !== void 0) {
78
73
  const cloned = [...list];
79
74
  const item = list[from];
@@ -81,50 +76,51 @@ function useForm({
81
76
  cloned.splice(to, 0, item);
82
77
  setFieldValue(field, formList.formList(cloned));
83
78
  }
84
- }, []);
85
- const validate = react.useCallback(() => {
86
- const results = validateValues.validateValues(schemaRef.current || rulesRef.current, valuesRef.current);
79
+ };
80
+ const validate = () => {
81
+ const results = validateValues.validateValues(schema || rules, values);
87
82
  setErrors(results.errors);
88
83
  return results;
89
- }, []);
90
- const validateField = react.useCallback((field) => {
91
- const results = validateValues.validateFieldValue(field, schemaRef.current || rulesRef.current, valuesRef.current);
84
+ };
85
+ const validateField = (field) => {
86
+ const results = validateValues.validateFieldValue(field, schema || rules, values);
92
87
  results.hasError ? setFieldError(field, results.error) : clearFieldError(field);
93
88
  return results;
94
- }, []);
95
- const onSubmit = react.useCallback((handleSubmit) => (event) => {
89
+ };
90
+ const onSubmit = (handleSubmit) => (event) => {
96
91
  event.preventDefault();
97
92
  const results = validate();
98
- !results.hasErrors && handleSubmit(valuesRef.current, event);
99
- }, []);
100
- const reset = react.useCallback(() => {
101
- setValues(initialValuesRef.current);
93
+ !results.hasErrors && handleSubmit(values, event);
94
+ };
95
+ const reset = () => {
96
+ setValues(initialValues);
102
97
  clearErrors();
103
- }, []);
104
- const getInputProps = react.useCallback((field, { type, withError = true } = {}) => {
105
- const value = valuesRef.current[field];
98
+ };
99
+ const getInputProps = (field, { type, withError = true } = {}) => {
100
+ const value = values[field];
106
101
  const onChange = getInputOnChange.getInputOnChange((val) => setFieldValue(field, val));
107
102
  const payload = type === "checkbox" ? { checked: value, onChange } : { value, onChange };
108
- if (withError && errorsRef.current[field]) {
109
- payload.error = errorsRef.current[field];
103
+ if (withError && errors[field]) {
104
+ payload.error = errors[field];
110
105
  }
111
106
  return payload;
112
- }, []);
113
- const getListInputProps = react.useCallback((field, index, listField, { type, withError = true } = {}) => {
114
- const list = valuesRef.current[field];
107
+ };
108
+ const getListInputProps = (field, index, listField, { type, withError = true } = {}) => {
109
+ const list = values[field];
115
110
  if (formList.isFormList(list) && list[index] && listField in list[index]) {
116
111
  const listValue = list[index];
117
112
  const value = listValue[listField];
118
- const onChange = getInputOnChange.getInputOnChange((val) => setListItem(field, index, __spreadProps(__spreadValues({}, listValue), { [listField]: val })));
113
+ const listItemErrorPath = getErrorPath.getErrorPath([field, index, listField]);
114
+ const onChange = getInputOnChange.getInputOnChange((val) => setListItem(field, index, __spreadProps(__spreadValues({}, listValue), { [listField]: val }), listItemErrorPath));
119
115
  const payload = type === "checkbox" ? { checked: value, onChange } : { value, onChange };
120
- const error = errorsRef.current[getErrorPath.getErrorPath([field, index, listField])];
116
+ const error = errors[getErrorPath.getErrorPath([field, index, listField])];
121
117
  if (withError && error) {
122
118
  payload.error = error;
123
119
  }
124
120
  return payload;
125
121
  }
126
122
  return {};
127
- }, []);
123
+ };
128
124
  return {
129
125
  values,
130
126
  setValues,
@@ -1 +1 @@
1
- {"version":3,"file":"use-form.js","sources":["../src/use-form.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { formList, isFormList, FormList } from './form-list/form-list';\nimport { validateValues, validateFieldValue } from './validate-values/validate-values';\nimport { filterErrors } from './filter-errors/filter-errors';\nimport { getInputOnChange } from './get-input-on-change/get-input-on-change';\nimport { getErrorPath } from './get-error-path/get-error-path';\nimport { useStateRef } from './use-state-ref/use-state-ref';\nimport { usePropRef } from './use-prop-ref/use-prop-ref';\nimport type {\n FormErrors,\n FormRules,\n FormValidationResult,\n FormFieldValidationResult,\n GetInputProps,\n GetInputPropsFieldType,\n} from './types';\n\nexport interface UseFormInput<T> {\n initialValues: T;\n initialErrors?: FormErrors;\n validate?: FormRules<T>;\n schema?: (values: Record<string, any>) => FormErrors;\n}\n\nexport interface UseFormReturnType<T> {\n values: T;\n setValues: React.Dispatch<React.SetStateAction<T>>;\n setFieldValue: <K extends keyof T, V extends T[K]>(field: K, value: V) => void;\n errors: FormErrors;\n setErrors: React.Dispatch<React.SetStateAction<FormErrors>>;\n setFieldError: <K extends keyof T>(field: K, error: React.ReactNode) => void;\n clearFieldError: <K extends keyof T>(field: K) => void;\n clearErrors(): void;\n setListItem: <K extends keyof T, V extends T[K]>(\n field: K,\n index: number,\n value: V extends FormList<infer U> ? U : never\n ) => void;\n addListItem: <K extends keyof T, V extends T[K]>(\n field: K,\n payload: V extends FormList<infer U> ? U : never\n ) => void;\n removeListItem: <K extends keyof T>(field: K, indices: number[] | number) => void;\n reorderListItem: <K extends keyof T>(field: K, payload: { from: number; to: number }) => void;\n validate(): FormValidationResult;\n validateField: (field: string) => FormFieldValidationResult;\n onSubmit(\n handleSubmit: (values: T, event: React.FormEvent) => void\n ): (event?: React.FormEvent) => void;\n reset(): void;\n getInputProps: <K extends keyof T, L extends GetInputPropsFieldType = 'input'>(\n field: K,\n options?: { type?: L; withError?: boolean }\n ) => GetInputProps<L>;\n\n getListInputProps: <\n K extends keyof T,\n U extends T[K],\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n index: number,\n listField: U extends FormList<infer V> ? keyof V : never,\n options?: { type?: L; withError?: boolean }\n ) => GetInputProps<L>;\n}\n\nexport function useForm<T extends { [key: string]: any }>({\n initialValues,\n initialErrors,\n validate: rules,\n schema,\n}: UseFormInput<T>): UseFormReturnType<T> {\n const [errors, setErrors, errorsRef] = useStateRef(filterErrors(initialErrors));\n const [values, setValues, valuesRef] = useStateRef(initialValues);\n const initialValuesRef = usePropRef(initialValues);\n const rulesRef = usePropRef(rules);\n const schemaRef = usePropRef(schema);\n\n const clearErrors = useCallback(() => setErrors({}), []);\n const setFieldError = useCallback(\n (field: keyof T, error: React.ReactNode) =>\n setErrors((current) => ({ ...current, [field]: error })),\n []\n );\n\n const clearFieldError = useCallback(\n (field: keyof T) =>\n setErrors((current) => {\n const clone: any = { ...current };\n delete clone[field];\n return clone;\n }),\n []\n );\n\n const setFieldValue = useCallback(<K extends keyof T, V extends T[K]>(field: K, value: V) => {\n setValues((currentValues) => ({ ...currentValues, [field]: value }));\n clearFieldError(field);\n }, []);\n\n const setListItem = useCallback(\n <K extends keyof T, V extends T[K]>(field: K, index: number, value: V[K][number]) => {\n const list = valuesRef.current[field];\n if (isFormList(list) && list[index] !== undefined) {\n const cloned = [...list];\n cloned[index] = value;\n setFieldValue(field, formList(cloned) as any);\n }\n },\n []\n );\n\n const removeListItem = useCallback(<K extends keyof T>(field: K, indices: number[] | number) => {\n const list = valuesRef.current[field];\n\n if (isFormList(list)) {\n setFieldValue(\n field,\n formList(\n list.filter((_: any, index: number) =>\n Array.isArray(indices) ? !indices.includes(index) : indices !== index\n )\n ) as any\n );\n }\n }, []);\n\n const addListItem = useCallback(\n <K extends keyof T, V extends T[K]>(field: K, payload: V[number]) => {\n const list = valuesRef.current[field];\n\n if (isFormList(list)) {\n setFieldValue(field, formList([...list, payload]) as any);\n }\n },\n []\n );\n\n const reorderListItem = useCallback(\n <K extends keyof T>(field: K, { from, to }: { from: number; to: number }) => {\n const list = valuesRef.current[field];\n\n if (isFormList(list) && list[from] !== undefined && list[to] !== undefined) {\n const cloned = [...list];\n const item = list[from];\n\n cloned.splice(from, 1);\n cloned.splice(to, 0, item);\n setFieldValue(field, formList(cloned) as any);\n }\n },\n []\n );\n\n const validate = useCallback(() => {\n const results = validateValues(schemaRef.current || rulesRef.current, valuesRef.current);\n setErrors(results.errors);\n return results;\n }, []);\n\n const validateField = useCallback((field: string) => {\n const results = validateFieldValue(\n field,\n schemaRef.current || rulesRef.current,\n valuesRef.current\n );\n results.hasError ? setFieldError(field, results.error) : clearFieldError(field);\n return results;\n }, []);\n\n const onSubmit = useCallback(\n (handleSubmit: (values: T, event: React.FormEvent) => void) => (event: React.FormEvent) => {\n event.preventDefault();\n const results = validate();\n !results.hasErrors && handleSubmit(valuesRef.current, event);\n },\n []\n );\n\n const reset = useCallback(() => {\n setValues(initialValuesRef.current);\n clearErrors();\n }, []);\n\n const getInputProps = useCallback(\n <K extends keyof T, U extends T[K], L extends GetInputPropsFieldType = 'input'>(\n field: K,\n { type, withError = true }: { type?: L; withError?: boolean } = {}\n ): GetInputProps<L> => {\n const value = valuesRef.current[field];\n const onChange = getInputOnChange<U>((val: U) => setFieldValue(field, val)) as any;\n\n const payload: any = type === 'checkbox' ? { checked: value, onChange } : { value, onChange };\n\n if (withError && errorsRef.current[field as any]) {\n payload.error = errorsRef.current[field as any];\n }\n\n return payload as any;\n },\n []\n );\n\n const getListInputProps = useCallback(\n <\n K extends keyof T,\n U extends T[K][number],\n LK extends keyof U,\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n index: number,\n listField: LK,\n { type, withError = true }: { type?: L; withError?: boolean } = {}\n ): GetInputProps<L> => {\n const list = valuesRef.current[field];\n\n if (isFormList(list) && list[index] && listField in list[index]) {\n const listValue = list[index];\n const value = listValue[listField];\n const onChange = getInputOnChange<U[LK]>((val: U[LK]) =>\n setListItem(field, index, { ...listValue, [listField]: val })\n ) as any;\n const payload: any =\n type === 'checkbox' ? { checked: value, onChange } : { value, onChange };\n const error = errorsRef.current[getErrorPath([field, index, listField])];\n\n if (withError && error) {\n payload.error = error;\n }\n\n return payload;\n }\n\n return {} as any;\n },\n []\n );\n\n return {\n values,\n setValues,\n setFieldValue,\n errors,\n setErrors,\n clearErrors,\n clearFieldError,\n setFieldError,\n setListItem,\n removeListItem,\n addListItem,\n reorderListItem,\n validate,\n validateField,\n onSubmit,\n reset,\n getInputProps,\n getListInputProps,\n };\n}\n"],"names":["useStateRef","filterErrors","usePropRef","useCallback","isFormList","formList","validateValues","validateFieldValue","getInputOnChange","getErrorPath"],"mappings":"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"}
1
+ {"version":3,"file":"use-form.js","sources":["../src/use-form.ts"],"sourcesContent":["import { useState } from 'react';\nimport { formList, isFormList, FormList } from './form-list/form-list';\nimport { validateValues, validateFieldValue } from './validate-values/validate-values';\nimport { filterErrors } from './filter-errors/filter-errors';\nimport { getInputOnChange } from './get-input-on-change/get-input-on-change';\nimport { getErrorPath } from './get-error-path/get-error-path';\nimport type {\n FormErrors,\n FormRules,\n FormValidationResult,\n FormFieldValidationResult,\n GetInputProps,\n GetInputPropsFieldType,\n} from './types';\n\nexport interface UseFormInput<T> {\n initialValues: T;\n initialErrors?: FormErrors;\n validate?: FormRules<T>;\n schema?: (values: Record<string, any>) => FormErrors;\n}\n\nexport interface UseFormReturnType<T> {\n values: T;\n setValues: React.Dispatch<React.SetStateAction<T>>;\n setFieldValue: <K extends keyof T, V extends T[K]>(field: K, value: V) => void;\n errors: FormErrors;\n setErrors: React.Dispatch<React.SetStateAction<FormErrors>>;\n setFieldError: <K extends keyof T>(field: K, error: React.ReactNode) => void;\n clearFieldError: <K extends keyof T>(field: K) => void;\n clearErrors(): void;\n setListItem: <K extends keyof T, V extends T[K]>(\n field: K,\n index: number,\n value: V extends FormList<infer U> ? U : never\n ) => void;\n addListItem: <K extends keyof T, V extends T[K]>(\n field: K,\n payload: V extends FormList<infer U> ? U : never\n ) => void;\n removeListItem: <K extends keyof T>(field: K, indices: number[] | number) => void;\n reorderListItem: <K extends keyof T>(field: K, payload: { from: number; to: number }) => void;\n validate(): FormValidationResult;\n validateField: (field: string) => FormFieldValidationResult;\n onSubmit(\n handleSubmit: (values: T, event: React.FormEvent) => void\n ): (event?: React.FormEvent) => void;\n reset(): void;\n getInputProps: <K extends keyof T, L extends GetInputPropsFieldType = 'input'>(\n field: K,\n options?: { type?: L; withError?: boolean }\n ) => GetInputProps<L>;\n\n getListInputProps: <\n K extends keyof T,\n U extends T[K],\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n index: number,\n listField: U extends FormList<infer V> ? keyof V : never,\n options?: { type?: L; withError?: boolean }\n ) => GetInputProps<L>;\n}\n\nexport function useForm<T extends { [key: string]: any }>({\n initialValues,\n initialErrors,\n validate: rules,\n schema,\n}: UseFormInput<T>): UseFormReturnType<T> {\n const [errors, setErrors] = useState(filterErrors(initialErrors));\n const [values, setValues] = useState(initialValues);\n\n const clearErrors = () => setErrors({});\n const setFieldError = (field: keyof T, error: React.ReactNode) =>\n setErrors((current) => ({ ...current, [field]: error }));\n\n const clearFieldError = (field: keyof T) =>\n setErrors((current) => {\n const clone: any = { ...current };\n delete clone[field];\n return clone;\n });\n\n const setFieldValue = <K extends keyof T, V extends T[K]>(\n field: K,\n value: V,\n errorPath?: string\n ) => {\n setValues((currentValues) => ({ ...currentValues, [field]: value }));\n clearFieldError(errorPath);\n };\n\n const setListItem = <K extends keyof T, V extends T[K]>(\n field: K,\n index: number,\n value: V[K][number],\n errorPath?: string\n ) => {\n const list = values[field];\n if (isFormList(list) && list[index] !== undefined) {\n const cloned = [...list];\n cloned[index] = value;\n setFieldValue(field, formList(cloned) as any, errorPath);\n }\n };\n\n const removeListItem = <K extends keyof T>(field: K, indices: number[] | number) => {\n const list = values[field];\n\n if (isFormList(list)) {\n setFieldValue(\n field,\n formList(\n list.filter((_: any, index: number) =>\n Array.isArray(indices) ? !indices.includes(index) : indices !== index\n )\n ) as any\n );\n }\n };\n\n const addListItem = <K extends keyof T, V extends T[K]>(field: K, payload: V[number]) => {\n const list = values[field];\n\n if (isFormList(list)) {\n setFieldValue(field, formList([...list, payload]) as any);\n }\n };\n\n const reorderListItem = <K extends keyof T>(\n field: K,\n { from, to }: { from: number; to: number }\n ) => {\n const list = values[field];\n\n if (isFormList(list) && list[from] !== undefined && list[to] !== undefined) {\n const cloned = [...list];\n const item = list[from];\n\n cloned.splice(from, 1);\n cloned.splice(to, 0, item);\n setFieldValue(field, formList(cloned) as any);\n }\n };\n\n const validate = () => {\n const results = validateValues(schema || rules, values);\n setErrors(results.errors);\n return results;\n };\n\n const validateField = (field: string) => {\n const results = validateFieldValue(field, schema || rules, values);\n results.hasError ? setFieldError(field, results.error) : clearFieldError(field);\n return results;\n };\n\n const onSubmit =\n (handleSubmit: (values: T, event: React.FormEvent) => void) => (event: React.FormEvent) => {\n event.preventDefault();\n const results = validate();\n !results.hasErrors && handleSubmit(values, event);\n };\n\n const reset = () => {\n setValues(initialValues);\n clearErrors();\n };\n\n const getInputProps = <\n K extends keyof T,\n U extends T[K],\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n { type, withError = true }: { type?: L; withError?: boolean } = {}\n ): GetInputProps<L> => {\n const value = values[field];\n const onChange = getInputOnChange<U>((val: U) => setFieldValue(field, val)) as any;\n\n const payload: any = type === 'checkbox' ? { checked: value, onChange } : { value, onChange };\n\n if (withError && errors[field as any]) {\n payload.error = errors[field as any];\n }\n\n return payload as any;\n };\n\n const getListInputProps = <\n K extends keyof T,\n U extends T[K][number],\n LK extends keyof U,\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n index: number,\n listField: LK,\n { type, withError = true }: { type?: L; withError?: boolean } = {}\n ): GetInputProps<L> => {\n const list = values[field];\n\n if (isFormList(list) && list[index] && listField in list[index]) {\n const listValue = list[index];\n const value = listValue[listField];\n const listItemErrorPath = getErrorPath([field, index, listField]);\n const onChange = getInputOnChange<U[LK]>((val: U[LK]) =>\n setListItem(field, index, { ...listValue, [listField]: val }, listItemErrorPath)\n ) as any;\n const payload: any = type === 'checkbox' ? { checked: value, onChange } : { value, onChange };\n const error = errors[getErrorPath([field, index, listField])];\n\n if (withError && error) {\n payload.error = error;\n }\n\n return payload;\n }\n\n return {} as any;\n };\n\n return {\n values,\n setValues,\n setFieldValue,\n errors,\n setErrors,\n clearErrors,\n clearFieldError,\n setFieldError,\n setListItem,\n removeListItem,\n addListItem,\n reorderListItem,\n validate,\n validateField,\n onSubmit,\n reset,\n getInputProps,\n getListInputProps,\n };\n}\n"],"names":["useState","filterErrors","isFormList","formList","validateValues","validateFieldValue","getInputOnChange","getErrorPath"],"mappings":"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"}
package/esm/use-form.js CHANGED
@@ -1,11 +1,9 @@
1
- import { useCallback } from 'react';
1
+ import { useState } from 'react';
2
2
  import { isFormList, formList } from './form-list/form-list.js';
3
3
  import { validateValues, validateFieldValue } from './validate-values/validate-values.js';
4
4
  import { filterErrors } from './filter-errors/filter-errors.js';
5
5
  import { getInputOnChange } from './get-input-on-change/get-input-on-change.js';
6
6
  import { getErrorPath } from './get-error-path/get-error-path.js';
7
- import { useStateRef } from './use-state-ref/use-state-ref.js';
8
- import { usePropRef } from './use-prop-ref/use-prop-ref.js';
9
7
 
10
8
  var __defProp = Object.defineProperty;
11
9
  var __defProps = Object.defineProperties;
@@ -32,44 +30,41 @@ function useForm({
32
30
  validate: rules,
33
31
  schema
34
32
  }) {
35
- const [errors, setErrors, errorsRef] = useStateRef(filterErrors(initialErrors));
36
- const [values, setValues, valuesRef] = useStateRef(initialValues);
37
- const initialValuesRef = usePropRef(initialValues);
38
- const rulesRef = usePropRef(rules);
39
- const schemaRef = usePropRef(schema);
40
- const clearErrors = useCallback(() => setErrors({}), []);
41
- const setFieldError = useCallback((field, error) => setErrors((current) => __spreadProps(__spreadValues({}, current), { [field]: error })), []);
42
- const clearFieldError = useCallback((field) => setErrors((current) => {
33
+ const [errors, setErrors] = useState(filterErrors(initialErrors));
34
+ const [values, setValues] = useState(initialValues);
35
+ const clearErrors = () => setErrors({});
36
+ const setFieldError = (field, error) => setErrors((current) => __spreadProps(__spreadValues({}, current), { [field]: error }));
37
+ const clearFieldError = (field) => setErrors((current) => {
43
38
  const clone = __spreadValues({}, current);
44
39
  delete clone[field];
45
40
  return clone;
46
- }), []);
47
- const setFieldValue = useCallback((field, value) => {
41
+ });
42
+ const setFieldValue = (field, value, errorPath) => {
48
43
  setValues((currentValues) => __spreadProps(__spreadValues({}, currentValues), { [field]: value }));
49
- clearFieldError(field);
50
- }, []);
51
- const setListItem = useCallback((field, index, value) => {
52
- const list = valuesRef.current[field];
44
+ clearFieldError(errorPath);
45
+ };
46
+ const setListItem = (field, index, value, errorPath) => {
47
+ const list = values[field];
53
48
  if (isFormList(list) && list[index] !== void 0) {
54
49
  const cloned = [...list];
55
50
  cloned[index] = value;
56
- setFieldValue(field, formList(cloned));
51
+ setFieldValue(field, formList(cloned), errorPath);
57
52
  }
58
- }, []);
59
- const removeListItem = useCallback((field, indices) => {
60
- const list = valuesRef.current[field];
53
+ };
54
+ const removeListItem = (field, indices) => {
55
+ const list = values[field];
61
56
  if (isFormList(list)) {
62
57
  setFieldValue(field, formList(list.filter((_, index) => Array.isArray(indices) ? !indices.includes(index) : indices !== index)));
63
58
  }
64
- }, []);
65
- const addListItem = useCallback((field, payload) => {
66
- const list = valuesRef.current[field];
59
+ };
60
+ const addListItem = (field, payload) => {
61
+ const list = values[field];
67
62
  if (isFormList(list)) {
68
63
  setFieldValue(field, formList([...list, payload]));
69
64
  }
70
- }, []);
71
- const reorderListItem = useCallback((field, { from, to }) => {
72
- const list = valuesRef.current[field];
65
+ };
66
+ const reorderListItem = (field, { from, to }) => {
67
+ const list = values[field];
73
68
  if (isFormList(list) && list[from] !== void 0 && list[to] !== void 0) {
74
69
  const cloned = [...list];
75
70
  const item = list[from];
@@ -77,50 +72,51 @@ function useForm({
77
72
  cloned.splice(to, 0, item);
78
73
  setFieldValue(field, formList(cloned));
79
74
  }
80
- }, []);
81
- const validate = useCallback(() => {
82
- const results = validateValues(schemaRef.current || rulesRef.current, valuesRef.current);
75
+ };
76
+ const validate = () => {
77
+ const results = validateValues(schema || rules, values);
83
78
  setErrors(results.errors);
84
79
  return results;
85
- }, []);
86
- const validateField = useCallback((field) => {
87
- const results = validateFieldValue(field, schemaRef.current || rulesRef.current, valuesRef.current);
80
+ };
81
+ const validateField = (field) => {
82
+ const results = validateFieldValue(field, schema || rules, values);
88
83
  results.hasError ? setFieldError(field, results.error) : clearFieldError(field);
89
84
  return results;
90
- }, []);
91
- const onSubmit = useCallback((handleSubmit) => (event) => {
85
+ };
86
+ const onSubmit = (handleSubmit) => (event) => {
92
87
  event.preventDefault();
93
88
  const results = validate();
94
- !results.hasErrors && handleSubmit(valuesRef.current, event);
95
- }, []);
96
- const reset = useCallback(() => {
97
- setValues(initialValuesRef.current);
89
+ !results.hasErrors && handleSubmit(values, event);
90
+ };
91
+ const reset = () => {
92
+ setValues(initialValues);
98
93
  clearErrors();
99
- }, []);
100
- const getInputProps = useCallback((field, { type, withError = true } = {}) => {
101
- const value = valuesRef.current[field];
94
+ };
95
+ const getInputProps = (field, { type, withError = true } = {}) => {
96
+ const value = values[field];
102
97
  const onChange = getInputOnChange((val) => setFieldValue(field, val));
103
98
  const payload = type === "checkbox" ? { checked: value, onChange } : { value, onChange };
104
- if (withError && errorsRef.current[field]) {
105
- payload.error = errorsRef.current[field];
99
+ if (withError && errors[field]) {
100
+ payload.error = errors[field];
106
101
  }
107
102
  return payload;
108
- }, []);
109
- const getListInputProps = useCallback((field, index, listField, { type, withError = true } = {}) => {
110
- const list = valuesRef.current[field];
103
+ };
104
+ const getListInputProps = (field, index, listField, { type, withError = true } = {}) => {
105
+ const list = values[field];
111
106
  if (isFormList(list) && list[index] && listField in list[index]) {
112
107
  const listValue = list[index];
113
108
  const value = listValue[listField];
114
- const onChange = getInputOnChange((val) => setListItem(field, index, __spreadProps(__spreadValues({}, listValue), { [listField]: val })));
109
+ const listItemErrorPath = getErrorPath([field, index, listField]);
110
+ const onChange = getInputOnChange((val) => setListItem(field, index, __spreadProps(__spreadValues({}, listValue), { [listField]: val }), listItemErrorPath));
115
111
  const payload = type === "checkbox" ? { checked: value, onChange } : { value, onChange };
116
- const error = errorsRef.current[getErrorPath([field, index, listField])];
112
+ const error = errors[getErrorPath([field, index, listField])];
117
113
  if (withError && error) {
118
114
  payload.error = error;
119
115
  }
120
116
  return payload;
121
117
  }
122
118
  return {};
123
- }, []);
119
+ };
124
120
  return {
125
121
  values,
126
122
  setValues,
@@ -1 +1 @@
1
- {"version":3,"file":"use-form.js","sources":["../src/use-form.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { formList, isFormList, FormList } from './form-list/form-list';\nimport { validateValues, validateFieldValue } from './validate-values/validate-values';\nimport { filterErrors } from './filter-errors/filter-errors';\nimport { getInputOnChange } from './get-input-on-change/get-input-on-change';\nimport { getErrorPath } from './get-error-path/get-error-path';\nimport { useStateRef } from './use-state-ref/use-state-ref';\nimport { usePropRef } from './use-prop-ref/use-prop-ref';\nimport type {\n FormErrors,\n FormRules,\n FormValidationResult,\n FormFieldValidationResult,\n GetInputProps,\n GetInputPropsFieldType,\n} from './types';\n\nexport interface UseFormInput<T> {\n initialValues: T;\n initialErrors?: FormErrors;\n validate?: FormRules<T>;\n schema?: (values: Record<string, any>) => FormErrors;\n}\n\nexport interface UseFormReturnType<T> {\n values: T;\n setValues: React.Dispatch<React.SetStateAction<T>>;\n setFieldValue: <K extends keyof T, V extends T[K]>(field: K, value: V) => void;\n errors: FormErrors;\n setErrors: React.Dispatch<React.SetStateAction<FormErrors>>;\n setFieldError: <K extends keyof T>(field: K, error: React.ReactNode) => void;\n clearFieldError: <K extends keyof T>(field: K) => void;\n clearErrors(): void;\n setListItem: <K extends keyof T, V extends T[K]>(\n field: K,\n index: number,\n value: V extends FormList<infer U> ? U : never\n ) => void;\n addListItem: <K extends keyof T, V extends T[K]>(\n field: K,\n payload: V extends FormList<infer U> ? U : never\n ) => void;\n removeListItem: <K extends keyof T>(field: K, indices: number[] | number) => void;\n reorderListItem: <K extends keyof T>(field: K, payload: { from: number; to: number }) => void;\n validate(): FormValidationResult;\n validateField: (field: string) => FormFieldValidationResult;\n onSubmit(\n handleSubmit: (values: T, event: React.FormEvent) => void\n ): (event?: React.FormEvent) => void;\n reset(): void;\n getInputProps: <K extends keyof T, L extends GetInputPropsFieldType = 'input'>(\n field: K,\n options?: { type?: L; withError?: boolean }\n ) => GetInputProps<L>;\n\n getListInputProps: <\n K extends keyof T,\n U extends T[K],\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n index: number,\n listField: U extends FormList<infer V> ? keyof V : never,\n options?: { type?: L; withError?: boolean }\n ) => GetInputProps<L>;\n}\n\nexport function useForm<T extends { [key: string]: any }>({\n initialValues,\n initialErrors,\n validate: rules,\n schema,\n}: UseFormInput<T>): UseFormReturnType<T> {\n const [errors, setErrors, errorsRef] = useStateRef(filterErrors(initialErrors));\n const [values, setValues, valuesRef] = useStateRef(initialValues);\n const initialValuesRef = usePropRef(initialValues);\n const rulesRef = usePropRef(rules);\n const schemaRef = usePropRef(schema);\n\n const clearErrors = useCallback(() => setErrors({}), []);\n const setFieldError = useCallback(\n (field: keyof T, error: React.ReactNode) =>\n setErrors((current) => ({ ...current, [field]: error })),\n []\n );\n\n const clearFieldError = useCallback(\n (field: keyof T) =>\n setErrors((current) => {\n const clone: any = { ...current };\n delete clone[field];\n return clone;\n }),\n []\n );\n\n const setFieldValue = useCallback(<K extends keyof T, V extends T[K]>(field: K, value: V) => {\n setValues((currentValues) => ({ ...currentValues, [field]: value }));\n clearFieldError(field);\n }, []);\n\n const setListItem = useCallback(\n <K extends keyof T, V extends T[K]>(field: K, index: number, value: V[K][number]) => {\n const list = valuesRef.current[field];\n if (isFormList(list) && list[index] !== undefined) {\n const cloned = [...list];\n cloned[index] = value;\n setFieldValue(field, formList(cloned) as any);\n }\n },\n []\n );\n\n const removeListItem = useCallback(<K extends keyof T>(field: K, indices: number[] | number) => {\n const list = valuesRef.current[field];\n\n if (isFormList(list)) {\n setFieldValue(\n field,\n formList(\n list.filter((_: any, index: number) =>\n Array.isArray(indices) ? !indices.includes(index) : indices !== index\n )\n ) as any\n );\n }\n }, []);\n\n const addListItem = useCallback(\n <K extends keyof T, V extends T[K]>(field: K, payload: V[number]) => {\n const list = valuesRef.current[field];\n\n if (isFormList(list)) {\n setFieldValue(field, formList([...list, payload]) as any);\n }\n },\n []\n );\n\n const reorderListItem = useCallback(\n <K extends keyof T>(field: K, { from, to }: { from: number; to: number }) => {\n const list = valuesRef.current[field];\n\n if (isFormList(list) && list[from] !== undefined && list[to] !== undefined) {\n const cloned = [...list];\n const item = list[from];\n\n cloned.splice(from, 1);\n cloned.splice(to, 0, item);\n setFieldValue(field, formList(cloned) as any);\n }\n },\n []\n );\n\n const validate = useCallback(() => {\n const results = validateValues(schemaRef.current || rulesRef.current, valuesRef.current);\n setErrors(results.errors);\n return results;\n }, []);\n\n const validateField = useCallback((field: string) => {\n const results = validateFieldValue(\n field,\n schemaRef.current || rulesRef.current,\n valuesRef.current\n );\n results.hasError ? setFieldError(field, results.error) : clearFieldError(field);\n return results;\n }, []);\n\n const onSubmit = useCallback(\n (handleSubmit: (values: T, event: React.FormEvent) => void) => (event: React.FormEvent) => {\n event.preventDefault();\n const results = validate();\n !results.hasErrors && handleSubmit(valuesRef.current, event);\n },\n []\n );\n\n const reset = useCallback(() => {\n setValues(initialValuesRef.current);\n clearErrors();\n }, []);\n\n const getInputProps = useCallback(\n <K extends keyof T, U extends T[K], L extends GetInputPropsFieldType = 'input'>(\n field: K,\n { type, withError = true }: { type?: L; withError?: boolean } = {}\n ): GetInputProps<L> => {\n const value = valuesRef.current[field];\n const onChange = getInputOnChange<U>((val: U) => setFieldValue(field, val)) as any;\n\n const payload: any = type === 'checkbox' ? { checked: value, onChange } : { value, onChange };\n\n if (withError && errorsRef.current[field as any]) {\n payload.error = errorsRef.current[field as any];\n }\n\n return payload as any;\n },\n []\n );\n\n const getListInputProps = useCallback(\n <\n K extends keyof T,\n U extends T[K][number],\n LK extends keyof U,\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n index: number,\n listField: LK,\n { type, withError = true }: { type?: L; withError?: boolean } = {}\n ): GetInputProps<L> => {\n const list = valuesRef.current[field];\n\n if (isFormList(list) && list[index] && listField in list[index]) {\n const listValue = list[index];\n const value = listValue[listField];\n const onChange = getInputOnChange<U[LK]>((val: U[LK]) =>\n setListItem(field, index, { ...listValue, [listField]: val })\n ) as any;\n const payload: any =\n type === 'checkbox' ? { checked: value, onChange } : { value, onChange };\n const error = errorsRef.current[getErrorPath([field, index, listField])];\n\n if (withError && error) {\n payload.error = error;\n }\n\n return payload;\n }\n\n return {} as any;\n },\n []\n );\n\n return {\n values,\n setValues,\n setFieldValue,\n errors,\n setErrors,\n clearErrors,\n clearFieldError,\n setFieldError,\n setListItem,\n removeListItem,\n addListItem,\n reorderListItem,\n validate,\n validateField,\n onSubmit,\n reset,\n getInputProps,\n getListInputProps,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-form.js","sources":["../src/use-form.ts"],"sourcesContent":["import { useState } from 'react';\nimport { formList, isFormList, FormList } from './form-list/form-list';\nimport { validateValues, validateFieldValue } from './validate-values/validate-values';\nimport { filterErrors } from './filter-errors/filter-errors';\nimport { getInputOnChange } from './get-input-on-change/get-input-on-change';\nimport { getErrorPath } from './get-error-path/get-error-path';\nimport type {\n FormErrors,\n FormRules,\n FormValidationResult,\n FormFieldValidationResult,\n GetInputProps,\n GetInputPropsFieldType,\n} from './types';\n\nexport interface UseFormInput<T> {\n initialValues: T;\n initialErrors?: FormErrors;\n validate?: FormRules<T>;\n schema?: (values: Record<string, any>) => FormErrors;\n}\n\nexport interface UseFormReturnType<T> {\n values: T;\n setValues: React.Dispatch<React.SetStateAction<T>>;\n setFieldValue: <K extends keyof T, V extends T[K]>(field: K, value: V) => void;\n errors: FormErrors;\n setErrors: React.Dispatch<React.SetStateAction<FormErrors>>;\n setFieldError: <K extends keyof T>(field: K, error: React.ReactNode) => void;\n clearFieldError: <K extends keyof T>(field: K) => void;\n clearErrors(): void;\n setListItem: <K extends keyof T, V extends T[K]>(\n field: K,\n index: number,\n value: V extends FormList<infer U> ? U : never\n ) => void;\n addListItem: <K extends keyof T, V extends T[K]>(\n field: K,\n payload: V extends FormList<infer U> ? U : never\n ) => void;\n removeListItem: <K extends keyof T>(field: K, indices: number[] | number) => void;\n reorderListItem: <K extends keyof T>(field: K, payload: { from: number; to: number }) => void;\n validate(): FormValidationResult;\n validateField: (field: string) => FormFieldValidationResult;\n onSubmit(\n handleSubmit: (values: T, event: React.FormEvent) => void\n ): (event?: React.FormEvent) => void;\n reset(): void;\n getInputProps: <K extends keyof T, L extends GetInputPropsFieldType = 'input'>(\n field: K,\n options?: { type?: L; withError?: boolean }\n ) => GetInputProps<L>;\n\n getListInputProps: <\n K extends keyof T,\n U extends T[K],\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n index: number,\n listField: U extends FormList<infer V> ? keyof V : never,\n options?: { type?: L; withError?: boolean }\n ) => GetInputProps<L>;\n}\n\nexport function useForm<T extends { [key: string]: any }>({\n initialValues,\n initialErrors,\n validate: rules,\n schema,\n}: UseFormInput<T>): UseFormReturnType<T> {\n const [errors, setErrors] = useState(filterErrors(initialErrors));\n const [values, setValues] = useState(initialValues);\n\n const clearErrors = () => setErrors({});\n const setFieldError = (field: keyof T, error: React.ReactNode) =>\n setErrors((current) => ({ ...current, [field]: error }));\n\n const clearFieldError = (field: keyof T) =>\n setErrors((current) => {\n const clone: any = { ...current };\n delete clone[field];\n return clone;\n });\n\n const setFieldValue = <K extends keyof T, V extends T[K]>(\n field: K,\n value: V,\n errorPath?: string\n ) => {\n setValues((currentValues) => ({ ...currentValues, [field]: value }));\n clearFieldError(errorPath);\n };\n\n const setListItem = <K extends keyof T, V extends T[K]>(\n field: K,\n index: number,\n value: V[K][number],\n errorPath?: string\n ) => {\n const list = values[field];\n if (isFormList(list) && list[index] !== undefined) {\n const cloned = [...list];\n cloned[index] = value;\n setFieldValue(field, formList(cloned) as any, errorPath);\n }\n };\n\n const removeListItem = <K extends keyof T>(field: K, indices: number[] | number) => {\n const list = values[field];\n\n if (isFormList(list)) {\n setFieldValue(\n field,\n formList(\n list.filter((_: any, index: number) =>\n Array.isArray(indices) ? !indices.includes(index) : indices !== index\n )\n ) as any\n );\n }\n };\n\n const addListItem = <K extends keyof T, V extends T[K]>(field: K, payload: V[number]) => {\n const list = values[field];\n\n if (isFormList(list)) {\n setFieldValue(field, formList([...list, payload]) as any);\n }\n };\n\n const reorderListItem = <K extends keyof T>(\n field: K,\n { from, to }: { from: number; to: number }\n ) => {\n const list = values[field];\n\n if (isFormList(list) && list[from] !== undefined && list[to] !== undefined) {\n const cloned = [...list];\n const item = list[from];\n\n cloned.splice(from, 1);\n cloned.splice(to, 0, item);\n setFieldValue(field, formList(cloned) as any);\n }\n };\n\n const validate = () => {\n const results = validateValues(schema || rules, values);\n setErrors(results.errors);\n return results;\n };\n\n const validateField = (field: string) => {\n const results = validateFieldValue(field, schema || rules, values);\n results.hasError ? setFieldError(field, results.error) : clearFieldError(field);\n return results;\n };\n\n const onSubmit =\n (handleSubmit: (values: T, event: React.FormEvent) => void) => (event: React.FormEvent) => {\n event.preventDefault();\n const results = validate();\n !results.hasErrors && handleSubmit(values, event);\n };\n\n const reset = () => {\n setValues(initialValues);\n clearErrors();\n };\n\n const getInputProps = <\n K extends keyof T,\n U extends T[K],\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n { type, withError = true }: { type?: L; withError?: boolean } = {}\n ): GetInputProps<L> => {\n const value = values[field];\n const onChange = getInputOnChange<U>((val: U) => setFieldValue(field, val)) as any;\n\n const payload: any = type === 'checkbox' ? { checked: value, onChange } : { value, onChange };\n\n if (withError && errors[field as any]) {\n payload.error = errors[field as any];\n }\n\n return payload as any;\n };\n\n const getListInputProps = <\n K extends keyof T,\n U extends T[K][number],\n LK extends keyof U,\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n index: number,\n listField: LK,\n { type, withError = true }: { type?: L; withError?: boolean } = {}\n ): GetInputProps<L> => {\n const list = values[field];\n\n if (isFormList(list) && list[index] && listField in list[index]) {\n const listValue = list[index];\n const value = listValue[listField];\n const listItemErrorPath = getErrorPath([field, index, listField]);\n const onChange = getInputOnChange<U[LK]>((val: U[LK]) =>\n setListItem(field, index, { ...listValue, [listField]: val }, listItemErrorPath)\n ) as any;\n const payload: any = type === 'checkbox' ? { checked: value, onChange } : { value, onChange };\n const error = errors[getErrorPath([field, index, listField])];\n\n if (withError && error) {\n payload.error = error;\n }\n\n return payload;\n }\n\n return {} as any;\n };\n\n return {\n values,\n setValues,\n setFieldValue,\n errors,\n setErrors,\n clearErrors,\n clearFieldError,\n setFieldError,\n setListItem,\n removeListItem,\n addListItem,\n reorderListItem,\n validate,\n validateField,\n onSubmit,\n reset,\n getInputProps,\n getListInputProps,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function getInputOnChange<T>(setValue: (value: null | undefined | T | ((current: T) => T)) => void): (val: T | import("react").ChangeEvent<any> | ((current: T) => T)) => void;
2
+ //# sourceMappingURL=____get-input-on-change.internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"____get-input-on-change.internal.d.ts","sourceRoot":"","sources":["../src/____get-input-on-change.internal.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,2DAEG,CAAC,KAAK,CAAC,WAiBhF"}
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ export declare type ValidationRule<T> = {
3
+ readonly [P in keyof T]?: (value: T[P], values?: T) => boolean;
4
+ };
5
+ export declare type UseFormErrors<T> = {
6
+ readonly [P in keyof T]?: React.ReactNode | null;
7
+ };
8
+ interface UseFormInput<T> {
9
+ validationRules?: ValidationRule<T>;
10
+ errorMessages?: UseFormErrors<T>;
11
+ initialValues: T;
12
+ }
13
+ export interface UseForm<T> {
14
+ values: T;
15
+ errors: Record<keyof T, React.ReactNode>;
16
+ validate: () => boolean;
17
+ reset: () => void;
18
+ setErrors: React.Dispatch<React.SetStateAction<Record<keyof T, React.ReactNode>>>;
19
+ setValues: React.Dispatch<React.SetStateAction<T>>;
20
+ setFieldValue: <K extends keyof T, U extends T[K]>(field: K, value: U) => void;
21
+ setFieldError: (field: keyof T, error: React.ReactNode) => void;
22
+ validateField: (field: keyof T) => void;
23
+ resetErrors: () => void;
24
+ onSubmit: (handleSubmit: (values: T) => any) => (event?: React.FormEvent) => void;
25
+ getInputProps: <K extends keyof T>(field: K, options?: {
26
+ type?: 'checkbox' | 'default';
27
+ }) => {
28
+ [x: string]: any;
29
+ onChange: any;
30
+ error: Record<keyof T, React.ReactNode>[K];
31
+ };
32
+ }
33
+ export declare function useForm<T extends {
34
+ [key: string]: any;
35
+ }>({ initialValues, validationRules, errorMessages, }: UseFormInput<T>): UseForm<T>;
36
+ export {};
37
+ //# sourceMappingURL=____use-form.internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"____use-form.internal.d.ts","sourceRoot":"","sources":["../src/____use-form.internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,oBAAY,cAAc,CAAC,CAAC,IAAI;IAC9B,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,OAAO;CAC/D,CAAC;AAEF,oBAAY,aAAa,CAAC,CAAC,IAAI;IAC7B,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;CACjD,CAAC;AAEF,UAAU,YAAY,CAAC,CAAC;IACtB,eAAe,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACjC,aAAa,EAAE,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC;IACV,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzC,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAClF,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,aAAa,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/E,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAChE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IACxC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAClF,aAAa,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAC/B,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;KAC/B,KACE;QACH,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;QACjB,QAAQ,EAAE,GAAG,CAAC;QACd,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KAC5C,CAAC;CACH;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAAE,EACxD,aAAa,EACb,eAAoB,EACpB,aAAkB,GACnB,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAuF9B"}
@@ -1,2 +1,2 @@
1
- export declare function getInputOnChange<T>(setValue: (value: null | undefined | T | ((current: T) => T)) => void): (val: T | import("react").ChangeEvent<any> | ((current: T) => T)) => void;
1
+ export declare function getInputOnChange<T>(setValue: (value: null | undefined | T | ((current: T) => T)) => void): (val: import("react").ChangeEvent<any> | T | ((current: T) => T)) => void;
2
2
  //# sourceMappingURL=get-input-on-change.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["../src/use-form.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["../src/use-form.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mantine/form",
3
3
  "description": "Mantine form management library",
4
- "version": "4.2.3",
4
+ "version": "5.0.0-alpha.0",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -1,16 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var react = require('react');
6
-
7
- function usePropRef(value) {
8
- const ref = react.useRef(value);
9
- react.useEffect(() => {
10
- ref.current = value;
11
- }, [value]);
12
- return ref;
13
- }
14
-
15
- exports.usePropRef = usePropRef;
16
- //# sourceMappingURL=use-prop-ref.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-prop-ref.js","sources":["../../src/use-prop-ref/use-prop-ref.ts"],"sourcesContent":["import React, { useRef, useEffect } from 'react';\n\nexport function usePropRef<T>(value: T): React.MutableRefObject<T> {\n const ref = useRef(value);\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref;\n}\n"],"names":["useRef","useEffect"],"mappings":";;;;;;AACO,SAAS,UAAU,CAAC,KAAK,EAAE;AAClC,EAAE,MAAM,GAAG,GAAGA,YAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,EAAEC,eAAS,CAAC,MAAM;AAClB,IAAI,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;AACxB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACd,EAAE,OAAO,GAAG,CAAC;AACb;;;;"}
@@ -1,17 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var react = require('react');
6
-
7
- function useStateRef(value) {
8
- const [state, setState] = react.useState(value);
9
- const ref = react.useRef(state);
10
- react.useEffect(() => {
11
- ref.current = state;
12
- }, [state]);
13
- return [state, setState, ref];
14
- }
15
-
16
- exports.useStateRef = useStateRef;
17
- //# sourceMappingURL=use-state-ref.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-state-ref.js","sources":["../../src/use-state-ref/use-state-ref.ts"],"sourcesContent":["import React, { useRef, useState, useEffect } from 'react';\n\nexport function useStateRef<T>(\n value: T\n): [T, React.Dispatch<React.SetStateAction<T>>, React.MutableRefObject<T>] {\n const [state, setState] = useState(value);\n const ref = useRef(state);\n\n useEffect(() => {\n ref.current = state;\n }, [state]);\n\n return [state, setState, ref];\n}\n"],"names":["useState","useRef","useEffect"],"mappings":";;;;;;AACO,SAAS,WAAW,CAAC,KAAK,EAAE;AACnC,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,EAAE,MAAM,GAAG,GAAGC,YAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,EAAEC,eAAS,CAAC,MAAM;AAClB,IAAI,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;AACxB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACd,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;AAChC;;;;"}
@@ -1,12 +0,0 @@
1
- import { useRef, useEffect } from 'react';
2
-
3
- function usePropRef(value) {
4
- const ref = useRef(value);
5
- useEffect(() => {
6
- ref.current = value;
7
- }, [value]);
8
- return ref;
9
- }
10
-
11
- export { usePropRef };
12
- //# sourceMappingURL=use-prop-ref.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-prop-ref.js","sources":["../../src/use-prop-ref/use-prop-ref.ts"],"sourcesContent":["import React, { useRef, useEffect } from 'react';\n\nexport function usePropRef<T>(value: T): React.MutableRefObject<T> {\n const ref = useRef(value);\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref;\n}\n"],"names":[],"mappings":";;AACO,SAAS,UAAU,CAAC,KAAK,EAAE;AAClC,EAAE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;AACxB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACd,EAAE,OAAO,GAAG,CAAC;AACb;;;;"}
@@ -1,13 +0,0 @@
1
- import { useState, useRef, useEffect } from 'react';
2
-
3
- function useStateRef(value) {
4
- const [state, setState] = useState(value);
5
- const ref = useRef(state);
6
- useEffect(() => {
7
- ref.current = state;
8
- }, [state]);
9
- return [state, setState, ref];
10
- }
11
-
12
- export { useStateRef };
13
- //# sourceMappingURL=use-state-ref.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-state-ref.js","sources":["../../src/use-state-ref/use-state-ref.ts"],"sourcesContent":["import React, { useRef, useState, useEffect } from 'react';\n\nexport function useStateRef<T>(\n value: T\n): [T, React.Dispatch<React.SetStateAction<T>>, React.MutableRefObject<T>] {\n const [state, setState] = useState(value);\n const ref = useRef(state);\n\n useEffect(() => {\n ref.current = state;\n }, [state]);\n\n return [state, setState, ref];\n}\n"],"names":[],"mappings":";;AACO,SAAS,WAAW,CAAC,KAAK,EAAE;AACnC,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,EAAE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;AACxB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACd,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;AAChC;;;;"}
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- export declare function usePropRef<T>(value: T): React.MutableRefObject<T>;
3
- //# sourceMappingURL=use-prop-ref.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-prop-ref.d.ts","sourceRoot":"","sources":["../../src/use-prop-ref/use-prop-ref.ts"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAQjE"}
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- export declare function useStateRef<T>(value: T): [T, React.Dispatch<React.SetStateAction<T>>, React.MutableRefObject<T>];
3
- //# sourceMappingURL=use-state-ref.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-state-ref.d.ts","sourceRoot":"","sources":["../../src/use-state-ref/use-state-ref.ts"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,wBAAgB,WAAW,CAAC,CAAC,EAC3B,KAAK,EAAE,CAAC,GACP,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CASzE"}