@mantine/form 7.8.1 → 7.9.1
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/Form/Form.cjs +4 -7
- package/cjs/Form/Form.cjs.map +1 -1
- package/cjs/FormProvider/FormProvider.cjs +5 -8
- package/cjs/FormProvider/FormProvider.cjs.map +1 -1
- package/cjs/actions/actions.cjs +2 -2
- package/cjs/hooks/use-form-errors/use-form-errors.cjs +6 -6
- package/cjs/hooks/use-form-list/use-form-list.cjs +4 -4
- package/cjs/hooks/use-form-status/use-form-status.cjs +15 -15
- package/cjs/hooks/use-form-values/use-form-values.cjs +11 -11
- package/cjs/hooks/use-form-watch/use-form-watch.cjs +5 -5
- package/cjs/index.cjs +2 -0
- package/cjs/index.cjs.map +1 -1
- package/cjs/use-field.cjs +130 -0
- package/cjs/use-field.cjs.map +1 -0
- package/cjs/use-form.cjs +11 -11
- package/cjs/validators/has-length/has-length.cjs.map +1 -1
- package/cjs/validators/is-email/is-email.cjs.map +1 -1
- package/cjs/validators/is-in-range/is-in-range.cjs.map +1 -1
- package/cjs/validators/is-not-empty/is-not-empty.cjs.map +1 -1
- package/cjs/validators/matches/matches.cjs.map +1 -1
- package/cjs/validators/matches-field/matches-field.cjs.map +1 -1
- package/esm/Form/Form.mjs +3 -2
- package/esm/Form/Form.mjs.map +1 -1
- package/esm/FormProvider/FormProvider.mjs +3 -2
- package/esm/FormProvider/FormProvider.mjs.map +1 -1
- package/esm/index.mjs +1 -0
- package/esm/index.mjs.map +1 -1
- package/esm/use-field.mjs +128 -0
- package/esm/use-field.mjs.map +1 -0
- package/esm/validators/has-length/has-length.mjs.map +1 -1
- package/esm/validators/is-email/is-email.mjs.map +1 -1
- package/esm/validators/is-in-range/is-in-range.mjs.map +1 -1
- package/esm/validators/is-not-empty/is-not-empty.mjs.map +1 -1
- package/esm/validators/matches/matches.mjs.map +1 -1
- package/esm/validators/matches-field/matches-field.mjs.map +1 -1
- package/lib/Form/Form.d.ts +0 -1
- package/lib/FormProvider/FormProvider.d.ts +1 -2
- package/lib/index.d.mts +2 -0
- package/lib/index.d.ts +2 -0
- package/lib/use-field.d.ts +74 -0
- package/lib/validators/has-length/has-length.d.ts +1 -2
- package/lib/validators/is-email/is-email.d.ts +1 -2
- package/lib/validators/is-in-range/is-in-range.d.ts +1 -2
- package/lib/validators/is-not-empty/is-not-empty.d.ts +1 -2
- package/lib/validators/matches/matches.d.ts +1 -2
- package/lib/validators/matches-field/matches-field.d.ts +1 -2
- package/package.json +1 -1
package/cjs/Form/Form.cjs
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var react = require('react');
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
9
|
-
|
|
10
|
-
const Form = React.forwardRef(
|
|
11
|
-
({ form, onSubmit, onReset, ...others }, ref) => /* @__PURE__ */ React__default.default.createElement(
|
|
7
|
+
const Form = react.forwardRef(
|
|
8
|
+
({ form, onSubmit, onReset, ...others }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
12
9
|
"form",
|
|
13
10
|
{
|
|
14
11
|
...others,
|
package/cjs/Form/Form.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Form.cjs","sources":["../../src/Form/Form.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Form.cjs","sources":["../../src/Form/Form.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { TransformedValues, UseFormReturnType } from '../types';\n\nexport interface FormProps<Form extends UseFormReturnType<any>>\n extends React.ComponentPropsWithRef<'form'> {\n form: Form;\n onSubmit?: (values: TransformedValues<Form>) => void;\n}\n\nexport type FormComponent = <Form extends UseFormReturnType<any>>(\n props: FormProps<Form>\n) => JSX.Element | React.ReactNode;\n\nexport const Form: FormComponent = forwardRef(\n <Form extends UseFormReturnType<any>>(\n { form, onSubmit, onReset, ...others }: FormProps<Form>,\n ref: React.ForwardedRef<HTMLFormElement>\n ) => (\n <form\n {...others}\n onSubmit={form.onSubmit(typeof onSubmit === 'function' ? onSubmit : () => {})}\n onReset={(event) => {\n onReset?.(event);\n form.onReset(event);\n }}\n ref={ref}\n />\n )\n);\n"],"names":["forwardRef","jsx"],"mappings":";;;;;;AAGY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAGA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC9B,CAAA,CAAE,CAAC,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,QAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAE,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAE,CAAA,CAAA,CAAA,CAAG,qBAAqBC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACtE,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACV,CAAI,CAAA,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAChF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA;AACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAC;AAC5B,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA;AACT,CAAK,CAAA,CAAA,CAAA,CAAA;AACL,CAAG,CAAA,CAAA;AACH,CAAA,CAAA;;"}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var react = require('react');
|
|
5
6
|
var useForm = require('../use-form.cjs');
|
|
6
7
|
|
|
7
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
-
|
|
9
|
-
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
10
|
-
|
|
11
8
|
function createFormContext() {
|
|
12
|
-
const FormContext =
|
|
9
|
+
const FormContext = react.createContext(null);
|
|
13
10
|
function FormProvider({ form, children }) {
|
|
14
|
-
return /* @__PURE__ */
|
|
11
|
+
return /* @__PURE__ */ jsxRuntime.jsx(FormContext.Provider, { value: form, children });
|
|
15
12
|
}
|
|
16
13
|
function useFormContext() {
|
|
17
|
-
const ctx =
|
|
14
|
+
const ctx = react.useContext(FormContext);
|
|
18
15
|
if (!ctx) {
|
|
19
16
|
throw new Error("useFormContext was called outside of FormProvider context");
|
|
20
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormProvider.cjs","sources":["../../src/FormProvider/FormProvider.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"FormProvider.cjs","sources":["../../src/FormProvider/FormProvider.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport { _TransformValues, UseForm, UseFormReturnType } from '../types';\nimport { useForm } from '../use-form';\n\nexport interface FormProviderProps<Form> {\n form: Form;\n children: React.ReactNode;\n}\n\nexport function createFormContext<\n Values,\n TransformValues extends _TransformValues<Values> = (values: Values) => Values,\n>() {\n type Form = UseFormReturnType<Values, TransformValues>;\n\n const FormContext = createContext<Form | null>(null);\n\n function FormProvider({ form, children }: FormProviderProps<Form>) {\n return <FormContext.Provider value={form}>{children}</FormContext.Provider>;\n }\n\n function useFormContext() {\n const ctx = useContext(FormContext);\n if (!ctx) {\n throw new Error('useFormContext was called outside of FormProvider context');\n }\n\n return ctx;\n }\n\n return [FormProvider, useFormContext, useForm] as [\n React.FC<FormProviderProps<Form>>,\n () => Form,\n UseForm<Values, TransformValues>,\n ];\n}\n"],"names":["createContext","jsx","useContext","useForm"],"mappings":";;;;;;;AAIO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,iBAAiB,CAAG,CAAA,CAAA,CAAA;AACpC,CAAA,CAAE,MAAM,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAGA,mBAAa,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC;AAC1C,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,YAAY,CAAC,CAAA,CAAE,IAAI,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAE,CAAE,CAAA,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAI,CAAuBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAC;AAChF,CAAG,CAAA,CAAA;AACH,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,cAAc,CAAG,CAAA,CAAA,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAI,MAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAGC,gBAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAC;AACxC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,MAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA2D,CAAC,CAAC;AACnF,CAAK,CAAA,CAAA,CAAA,CAAA;AACL,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAG,CAAC;AACf,CAAG,CAAA,CAAA;AACH,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,cAAc,CAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,CAAC,CAAC;AACjD,CAAA;;"}
|
package/cjs/actions/actions.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var react = require('react');
|
|
5
5
|
|
|
6
6
|
function dispatchEvent(type, detail) {
|
|
7
7
|
window.dispatchEvent(new CustomEvent(type, { detail }));
|
|
@@ -13,7 +13,7 @@ function validateFormName(name) {
|
|
|
13
13
|
);
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
const useIsomorphicEffect = typeof window !== "undefined" ?
|
|
16
|
+
const useIsomorphicEffect = typeof window !== "undefined" ? react.useLayoutEffect : react.useEffect;
|
|
17
17
|
function createFormActions(name) {
|
|
18
18
|
validateFormName(name);
|
|
19
19
|
const setFieldValue = (path, value) => dispatchEvent(`mantine-form:${name}:set-field-value`, { path, value });
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var react = require('react');
|
|
5
5
|
var filterErrors = require('./filter-errors/filter-errors.cjs');
|
|
6
6
|
|
|
7
7
|
function useFormErrors(initialErrors) {
|
|
8
|
-
const [errorsState, setErrorsState] =
|
|
9
|
-
const setErrors =
|
|
8
|
+
const [errorsState, setErrorsState] = react.useState(filterErrors.filterErrors(initialErrors));
|
|
9
|
+
const setErrors = react.useCallback((errors) => {
|
|
10
10
|
setErrorsState(
|
|
11
11
|
(current) => filterErrors.filterErrors(typeof errors === "function" ? errors(current) : errors)
|
|
12
12
|
);
|
|
13
13
|
}, []);
|
|
14
|
-
const clearErrors =
|
|
15
|
-
const clearFieldError =
|
|
14
|
+
const clearErrors = react.useCallback(() => setErrorsState({}), []);
|
|
15
|
+
const clearFieldError = react.useCallback(
|
|
16
16
|
(path) => {
|
|
17
17
|
if (errorsState[path] === void 0) {
|
|
18
18
|
return;
|
|
@@ -25,7 +25,7 @@ function useFormErrors(initialErrors) {
|
|
|
25
25
|
},
|
|
26
26
|
[errorsState]
|
|
27
27
|
);
|
|
28
|
-
const setFieldError =
|
|
28
|
+
const setFieldError = react.useCallback(
|
|
29
29
|
(path, error) => {
|
|
30
30
|
if (error == null || error === false) {
|
|
31
31
|
clearFieldError(path);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var react = require('react');
|
|
5
5
|
var changeErrorIndices = require('../../lists/change-error-indices.cjs');
|
|
6
6
|
var reorderErrors = require('../../lists/reorder-errors.cjs');
|
|
7
7
|
require('klona/full');
|
|
@@ -14,7 +14,7 @@ function useFormList({
|
|
|
14
14
|
$errors,
|
|
15
15
|
$status
|
|
16
16
|
}) {
|
|
17
|
-
const reorderListItem =
|
|
17
|
+
const reorderListItem = react.useCallback((path, payload) => {
|
|
18
18
|
$status.clearFieldDirty(path);
|
|
19
19
|
$errors.setErrors((errs) => reorderErrors.reorderErrors(path, payload, errs));
|
|
20
20
|
$values.setValues({
|
|
@@ -22,7 +22,7 @@ function useFormList({
|
|
|
22
22
|
updateState: true
|
|
23
23
|
});
|
|
24
24
|
}, []);
|
|
25
|
-
const removeListItem =
|
|
25
|
+
const removeListItem = react.useCallback((path, index) => {
|
|
26
26
|
$status.clearFieldDirty(path);
|
|
27
27
|
$errors.setErrors((errs) => changeErrorIndices.changeErrorIndices(path, index, errs, -1));
|
|
28
28
|
$values.setValues({
|
|
@@ -30,7 +30,7 @@ function useFormList({
|
|
|
30
30
|
updateState: true
|
|
31
31
|
});
|
|
32
32
|
}, []);
|
|
33
|
-
const insertListItem =
|
|
33
|
+
const insertListItem = react.useCallback((path, item, index) => {
|
|
34
34
|
$status.clearFieldDirty(path);
|
|
35
35
|
$errors.setErrors((errs) => changeErrorIndices.changeErrorIndices(path, index, errs, 1));
|
|
36
36
|
$values.setValues({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var react = require('react');
|
|
5
5
|
var isEqual = require('fast-deep-equal');
|
|
6
6
|
var getStatus = require('../../get-status/get-status.cjs');
|
|
7
7
|
var clearListState = require('../../lists/clear-list-state.cjs');
|
|
@@ -18,31 +18,31 @@ function useFormStatus({
|
|
|
18
18
|
mode,
|
|
19
19
|
$values
|
|
20
20
|
}) {
|
|
21
|
-
const [touchedState, setTouchedState] =
|
|
22
|
-
const [dirtyState, setDirtyState] =
|
|
23
|
-
const touchedRef =
|
|
24
|
-
const dirtyRef =
|
|
25
|
-
const setTouched =
|
|
21
|
+
const [touchedState, setTouchedState] = react.useState(initialTouched);
|
|
22
|
+
const [dirtyState, setDirtyState] = react.useState(initialDirty);
|
|
23
|
+
const touchedRef = react.useRef(initialTouched);
|
|
24
|
+
const dirtyRef = react.useRef(initialDirty);
|
|
25
|
+
const setTouched = react.useCallback((values) => {
|
|
26
26
|
const resolvedValues = typeof values === "function" ? values(touchedRef.current) : values;
|
|
27
27
|
touchedRef.current = resolvedValues;
|
|
28
28
|
if (mode === "controlled") {
|
|
29
29
|
setTouchedState(resolvedValues);
|
|
30
30
|
}
|
|
31
31
|
}, []);
|
|
32
|
-
const setDirty =
|
|
32
|
+
const setDirty = react.useCallback((values) => {
|
|
33
33
|
const resolvedValues = typeof values === "function" ? values(dirtyRef.current) : values;
|
|
34
34
|
dirtyRef.current = resolvedValues;
|
|
35
35
|
if (mode === "controlled") {
|
|
36
36
|
setDirtyState(resolvedValues);
|
|
37
37
|
}
|
|
38
38
|
}, []);
|
|
39
|
-
const resetTouched =
|
|
39
|
+
const resetTouched = react.useCallback(() => setTouched({}), []);
|
|
40
40
|
const resetDirty = (values) => {
|
|
41
41
|
const newSnapshot = values ? { ...values, ...$values.refValues.current } : $values.refValues.current;
|
|
42
42
|
$values.setValuesSnapshot(newSnapshot);
|
|
43
43
|
setDirty({});
|
|
44
44
|
};
|
|
45
|
-
const setFieldTouched =
|
|
45
|
+
const setFieldTouched = react.useCallback((path, touched) => {
|
|
46
46
|
setTouched((currentTouched) => {
|
|
47
47
|
if (getStatus.getStatus(currentTouched, path) === touched) {
|
|
48
48
|
return currentTouched;
|
|
@@ -50,7 +50,7 @@ function useFormStatus({
|
|
|
50
50
|
return { ...currentTouched, [path]: touched };
|
|
51
51
|
});
|
|
52
52
|
}, []);
|
|
53
|
-
const setFieldDirty =
|
|
53
|
+
const setFieldDirty = react.useCallback((path, dirty) => {
|
|
54
54
|
setDirty((currentDirty) => {
|
|
55
55
|
if (getStatus.getStatus(currentDirty, path) === dirty) {
|
|
56
56
|
return currentDirty;
|
|
@@ -58,11 +58,11 @@ function useFormStatus({
|
|
|
58
58
|
return { ...currentDirty, [path]: dirty };
|
|
59
59
|
});
|
|
60
60
|
}, []);
|
|
61
|
-
const isTouched =
|
|
61
|
+
const isTouched = react.useCallback(
|
|
62
62
|
(path) => getStatus.getStatus(touchedRef.current, path),
|
|
63
63
|
[]
|
|
64
64
|
);
|
|
65
|
-
const clearFieldDirty =
|
|
65
|
+
const clearFieldDirty = react.useCallback(
|
|
66
66
|
(path) => setDirty((current) => {
|
|
67
67
|
if (typeof path !== "string") {
|
|
68
68
|
return current;
|
|
@@ -76,7 +76,7 @@ function useFormStatus({
|
|
|
76
76
|
}),
|
|
77
77
|
[]
|
|
78
78
|
);
|
|
79
|
-
const isDirty =
|
|
79
|
+
const isDirty = react.useCallback((path) => {
|
|
80
80
|
if (path) {
|
|
81
81
|
const overriddenValue = getPath.getPath(path, dirtyRef.current);
|
|
82
82
|
if (typeof overriddenValue === "boolean") {
|
|
@@ -92,8 +92,8 @@ function useFormStatus({
|
|
|
92
92
|
}
|
|
93
93
|
return !isEqual__default.default($values.refValues.current, $values.valuesSnapshot.current);
|
|
94
94
|
}, []);
|
|
95
|
-
const getDirty =
|
|
96
|
-
const getTouched =
|
|
95
|
+
const getDirty = react.useCallback(() => dirtyRef.current, []);
|
|
96
|
+
const getTouched = react.useCallback(() => touchedRef.current, []);
|
|
97
97
|
return {
|
|
98
98
|
touchedState,
|
|
99
99
|
dirtyState,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var react = require('react');
|
|
5
5
|
var getPath = require('../../paths/get-path.cjs');
|
|
6
6
|
var setPath = require('../../paths/set-path.cjs');
|
|
7
7
|
|
|
@@ -10,11 +10,11 @@ function useFormValues({
|
|
|
10
10
|
onValuesChange,
|
|
11
11
|
mode
|
|
12
12
|
}) {
|
|
13
|
-
const initialized =
|
|
14
|
-
const [stateValues, setStateValues] =
|
|
15
|
-
const refValues =
|
|
16
|
-
const valuesSnapshot =
|
|
17
|
-
const setValues =
|
|
13
|
+
const initialized = react.useRef(false);
|
|
14
|
+
const [stateValues, setStateValues] = react.useState(initialValues || {});
|
|
15
|
+
const refValues = react.useRef(stateValues);
|
|
16
|
+
const valuesSnapshot = react.useRef(stateValues);
|
|
17
|
+
const setValues = react.useCallback(
|
|
18
18
|
({
|
|
19
19
|
values,
|
|
20
20
|
subscribers,
|
|
@@ -31,7 +31,7 @@ function useFormValues({
|
|
|
31
31
|
},
|
|
32
32
|
[onValuesChange]
|
|
33
33
|
);
|
|
34
|
-
const setFieldValue =
|
|
34
|
+
const setFieldValue = react.useCallback((payload) => {
|
|
35
35
|
const currentValue = getPath.getPath(payload.path, refValues.current);
|
|
36
36
|
const updatedValue = payload.value instanceof Function ? payload.value(currentValue) : payload.value;
|
|
37
37
|
if (currentValue !== updatedValue) {
|
|
@@ -43,10 +43,10 @@ function useFormValues({
|
|
|
43
43
|
);
|
|
44
44
|
}
|
|
45
45
|
}, []);
|
|
46
|
-
const setValuesSnapshot =
|
|
46
|
+
const setValuesSnapshot = react.useCallback((payload) => {
|
|
47
47
|
valuesSnapshot.current = payload;
|
|
48
48
|
}, []);
|
|
49
|
-
const initialize =
|
|
49
|
+
const initialize = react.useCallback((values, onInitialize) => {
|
|
50
50
|
if (!initialized.current) {
|
|
51
51
|
initialized.current = true;
|
|
52
52
|
setValues({ values, updateState: mode === "controlled" });
|
|
@@ -54,14 +54,14 @@ function useFormValues({
|
|
|
54
54
|
onInitialize();
|
|
55
55
|
}
|
|
56
56
|
}, []);
|
|
57
|
-
const resetValues =
|
|
57
|
+
const resetValues = react.useCallback(() => {
|
|
58
58
|
setValues({
|
|
59
59
|
values: valuesSnapshot.current,
|
|
60
60
|
updateState: true,
|
|
61
61
|
mergeWithPreviousValues: false
|
|
62
62
|
});
|
|
63
63
|
}, []);
|
|
64
|
-
const getValues =
|
|
64
|
+
const getValues = react.useCallback(() => refValues.current, []);
|
|
65
65
|
return {
|
|
66
66
|
initialized,
|
|
67
67
|
stateValues,
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var react = require('react');
|
|
5
5
|
var getPath = require('../../paths/get-path.cjs');
|
|
6
6
|
require('klona/full');
|
|
7
7
|
|
|
8
8
|
function useFormWatch({
|
|
9
9
|
$status
|
|
10
10
|
}) {
|
|
11
|
-
const subscribers =
|
|
11
|
+
const subscribers = react.useRef(
|
|
12
12
|
{}
|
|
13
13
|
);
|
|
14
|
-
const watch =
|
|
15
|
-
|
|
14
|
+
const watch = react.useCallback((path, callback) => {
|
|
15
|
+
react.useEffect(() => {
|
|
16
16
|
subscribers.current[path] = subscribers.current[path] || [];
|
|
17
17
|
subscribers.current[path].push(callback);
|
|
18
18
|
return () => {
|
|
@@ -20,7 +20,7 @@ function useFormWatch({
|
|
|
20
20
|
};
|
|
21
21
|
}, [callback]);
|
|
22
22
|
}, []);
|
|
23
|
-
const getFieldSubscribers =
|
|
23
|
+
const getFieldSubscribers = react.useCallback((path) => {
|
|
24
24
|
if (!subscribers.current[path]) {
|
|
25
25
|
return [];
|
|
26
26
|
}
|
package/cjs/index.cjs
CHANGED
|
@@ -11,6 +11,7 @@ var isEmail = require('./validators/is-email/is-email.cjs');
|
|
|
11
11
|
var hasLength = require('./validators/has-length/has-length.cjs');
|
|
12
12
|
var isInRange = require('./validators/is-in-range/is-in-range.cjs');
|
|
13
13
|
var matchesField = require('./validators/matches-field/matches-field.cjs');
|
|
14
|
+
var useField = require('./use-field.cjs');
|
|
14
15
|
var zodResolver = require('./resolvers/zod-resolver/zod-resolver.cjs');
|
|
15
16
|
var superstructResolver = require('./resolvers/superstruct-resolver/superstruct-resolver.cjs');
|
|
16
17
|
var yupResolver = require('./resolvers/yup-resolver/yup-resolver.cjs');
|
|
@@ -29,6 +30,7 @@ exports.isEmail = isEmail.isEmail;
|
|
|
29
30
|
exports.hasLength = hasLength.hasLength;
|
|
30
31
|
exports.isInRange = isInRange.isInRange;
|
|
31
32
|
exports.matchesField = matchesField.matchesField;
|
|
33
|
+
exports.useField = useField.useField;
|
|
32
34
|
exports.zodResolver = zodResolver.zodResolver;
|
|
33
35
|
exports.superstructResolver = superstructResolver.superstructResolver;
|
|
34
36
|
exports.yupResolver = yupResolver.yupResolver;
|
package/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var getInputOnChange = require('./get-input-on-change/get-input-on-change.cjs');
|
|
6
|
+
require('klona/full');
|
|
7
|
+
var shouldValidateOnChange = require('./validate/should-validate-on-change.cjs');
|
|
8
|
+
|
|
9
|
+
function useField({
|
|
10
|
+
mode = "controlled",
|
|
11
|
+
clearErrorOnChange = true,
|
|
12
|
+
initialValue,
|
|
13
|
+
initialError = null,
|
|
14
|
+
initialTouched = false,
|
|
15
|
+
onValueChange,
|
|
16
|
+
validateOnChange = false,
|
|
17
|
+
validateOnBlur = false,
|
|
18
|
+
validate,
|
|
19
|
+
resolveValidationError,
|
|
20
|
+
type = "input"
|
|
21
|
+
}) {
|
|
22
|
+
const [valueState, setValueState] = react.useState(initialValue);
|
|
23
|
+
const valueRef = react.useRef(valueState);
|
|
24
|
+
const [key, setKey] = react.useState(0);
|
|
25
|
+
const [error, setError] = react.useState(initialError || null);
|
|
26
|
+
const touchedRef = react.useRef(initialTouched || false);
|
|
27
|
+
const [, setTouchedState] = react.useState(touchedRef.current);
|
|
28
|
+
const [isValidating, setIsValidating] = react.useState(false);
|
|
29
|
+
const errorResolver = react.useMemo(
|
|
30
|
+
() => resolveValidationError || ((err) => err),
|
|
31
|
+
[resolveValidationError]
|
|
32
|
+
);
|
|
33
|
+
const setTouched = react.useCallback((val, { updateState = mode === "controlled" } = {}) => {
|
|
34
|
+
touchedRef.current = val;
|
|
35
|
+
updateState && setTouchedState(val);
|
|
36
|
+
}, []);
|
|
37
|
+
const setValue = react.useCallback(
|
|
38
|
+
async (value, {
|
|
39
|
+
updateKey = mode === "uncontrolled",
|
|
40
|
+
updateState = mode === "controlled"
|
|
41
|
+
} = {}) => {
|
|
42
|
+
if (valueRef.current === value) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
valueRef.current = value;
|
|
46
|
+
onValueChange?.(value);
|
|
47
|
+
if (clearErrorOnChange && error !== null) {
|
|
48
|
+
setError(null);
|
|
49
|
+
}
|
|
50
|
+
if (updateState) {
|
|
51
|
+
setValueState(value);
|
|
52
|
+
}
|
|
53
|
+
if (updateKey) {
|
|
54
|
+
setKey((currentKey) => currentKey + 1);
|
|
55
|
+
}
|
|
56
|
+
if (validateOnChange) {
|
|
57
|
+
_validate();
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
[error, clearErrorOnChange]
|
|
61
|
+
);
|
|
62
|
+
const reset = react.useCallback(() => {
|
|
63
|
+
setValue(initialValue);
|
|
64
|
+
setError(null);
|
|
65
|
+
setTouched(false);
|
|
66
|
+
}, [initialValue]);
|
|
67
|
+
const getValue = react.useCallback(() => valueRef.current, []);
|
|
68
|
+
const isTouched = react.useCallback(() => touchedRef.current, []);
|
|
69
|
+
const isDirty = react.useCallback(() => valueRef.current !== initialValue, [initialValue]);
|
|
70
|
+
const _validate = react.useCallback(async () => {
|
|
71
|
+
const validationResult = validate?.(valueRef.current);
|
|
72
|
+
if (validationResult instanceof Promise) {
|
|
73
|
+
setIsValidating(true);
|
|
74
|
+
try {
|
|
75
|
+
const result = await validationResult;
|
|
76
|
+
setIsValidating(false);
|
|
77
|
+
setError(result);
|
|
78
|
+
} catch (err) {
|
|
79
|
+
setIsValidating(false);
|
|
80
|
+
const resolvedError = errorResolver(err);
|
|
81
|
+
setError(resolvedError);
|
|
82
|
+
return resolvedError;
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
setError(validationResult);
|
|
86
|
+
return validationResult;
|
|
87
|
+
}
|
|
88
|
+
}, []);
|
|
89
|
+
const getInputProps = ({ withError = true, withFocus = true } = {}) => {
|
|
90
|
+
const onChange = getInputOnChange.getInputOnChange((val) => setValue(val, { updateKey: false }));
|
|
91
|
+
const payload = { onChange };
|
|
92
|
+
if (withError) {
|
|
93
|
+
payload.error = error;
|
|
94
|
+
}
|
|
95
|
+
if (type === "checkbox") {
|
|
96
|
+
payload[mode === "controlled" ? "checked" : "defaultChecked"] = valueRef.current;
|
|
97
|
+
} else {
|
|
98
|
+
payload[mode === "controlled" ? "value" : "defaultValue"] = valueRef.current;
|
|
99
|
+
}
|
|
100
|
+
if (withFocus) {
|
|
101
|
+
payload.onFocus = () => {
|
|
102
|
+
setTouched(true);
|
|
103
|
+
};
|
|
104
|
+
payload.onBlur = () => {
|
|
105
|
+
if (shouldValidateOnChange.shouldValidateOnChange("", !!validateOnBlur)) {
|
|
106
|
+
_validate();
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return payload;
|
|
111
|
+
};
|
|
112
|
+
const resetTouched = react.useCallback(() => setTouched(false), []);
|
|
113
|
+
return {
|
|
114
|
+
key,
|
|
115
|
+
getValue,
|
|
116
|
+
setValue,
|
|
117
|
+
reset,
|
|
118
|
+
getInputProps,
|
|
119
|
+
isValidating,
|
|
120
|
+
validate: _validate,
|
|
121
|
+
error,
|
|
122
|
+
setError,
|
|
123
|
+
isTouched,
|
|
124
|
+
isDirty,
|
|
125
|
+
resetTouched
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
exports.useField = useField;
|
|
130
|
+
//# sourceMappingURL=use-field.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-field.cjs","sources":["../src/use-field.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { getInputOnChange } from './get-input-on-change';\nimport { FormMode, GetInputPropsType } from './types';\nimport { shouldValidateOnChange } from './validate';\n\ntype UseFieldErrorResolver = (error: unknown) => React.ReactNode;\n\nexport interface UseFieldInput<\n T,\n FieldType extends GetInputPropsType = 'input',\n Mode extends FormMode = 'controlled',\n> {\n /** Field mode, controlled by default */\n mode?: Mode;\n\n /** Initial field value */\n initialValue: T;\n\n /** Initial touched value */\n initialTouched?: boolean;\n\n /** Initial field error message */\n initialError?: React.ReactNode;\n\n /** Called with updated value when the field value changes */\n onValueChange?: (value: T) => void;\n\n /** Determines whether the field should be validated when value changes, false by default */\n validateOnChange?: boolean;\n\n /** Determines whether the field should be validated when it loses focus, false by default */\n validateOnBlur?: boolean;\n\n /** Determines whether the field should clear error message when value changes, true by default */\n clearErrorOnChange?: boolean;\n\n /** A function to validate field value, can be sync or async */\n validate?: (value: T) => React.ReactNode | Promise<React.ReactNode>;\n\n /** Field type, input by default */\n type?: FieldType;\n\n /** A function to resolve validation error from the result returned from validate function, should return react node */\n resolveValidationError?: UseFieldErrorResolver;\n}\n\ninterface SetValueOptions {\n updateState?: boolean;\n updateKey?: boolean;\n}\n\ninterface GetInputPropsOptions {\n withError?: boolean;\n withFocus?: boolean;\n}\n\ninterface GetInputPropsSharedReturn {\n error?: React.ReactNode;\n onFocus?: () => void;\n onBlur: () => void;\n onChange: (value: any) => void;\n}\n\ntype GetInputPropsTypeValue<\n T,\n FieldType extends GetInputPropsType,\n Mode extends FormMode,\n> = FieldType extends 'checkbox'\n ? Mode extends 'controlled'\n ? { checked: boolean }\n : { defaultChecked: boolean }\n : Mode extends 'controlled'\n ? { value: T }\n : { defaultValue: T };\n\ntype GetInputPropsReturnType<\n T,\n FieldType extends GetInputPropsType,\n Mode extends FormMode,\n> = GetInputPropsSharedReturn & GetInputPropsTypeValue<T, FieldType, Mode>;\n\nexport interface UseFieldReturnType<\n T,\n FieldType extends GetInputPropsType = 'input',\n Mode extends FormMode = 'controlled',\n> {\n /** Returns props to pass to the input element */\n getInputProps: (options?: GetInputPropsOptions) => GetInputPropsReturnType<T, FieldType, Mode>;\n\n /** Returns current input value */\n getValue: () => T;\n\n /** Sets input value to the given value */\n setValue: (value: T) => void;\n\n /** Resets field value to initial state, sets touched state to false, sets error to null */\n reset: () => void;\n\n /** Validates current input value when called */\n validate: () => Promise<React.ReactNode | void>;\n\n /** Set to true when async validate function is called, stays true until the returned promise resolves */\n isValidating: boolean;\n\n /** Current error message */\n error: React.ReactNode;\n\n /** Sets error message to the given react node */\n setError: (error: React.ReactNode) => void;\n\n /** Returns true if the input has been focused at least once */\n isTouched: () => boolean;\n\n /** Returns true if input value is different from the initial value */\n isDirty: () => boolean;\n\n /** Resets touched state to false */\n resetTouched: () => void;\n\n /** key that should be added to the input when mode is uncontrolled */\n key: number;\n}\n\nexport function useField<\n T,\n Mode extends FormMode = 'controlled',\n FieldType extends GetInputPropsType = 'input',\n>({\n mode = 'controlled' as Mode,\n clearErrorOnChange = true,\n initialValue,\n initialError = null,\n initialTouched = false,\n onValueChange,\n validateOnChange = false,\n validateOnBlur = false,\n validate,\n resolveValidationError,\n type = 'input' as FieldType,\n}: UseFieldInput<T, FieldType, Mode>): UseFieldReturnType<T, FieldType, Mode> {\n const [valueState, setValueState] = useState(initialValue);\n const valueRef = useRef(valueState);\n const [key, setKey] = useState(0);\n const [error, setError] = useState<React.ReactNode>(initialError || null);\n const touchedRef = useRef(initialTouched || false);\n const [, setTouchedState] = useState(touchedRef.current);\n const [isValidating, setIsValidating] = useState(false);\n const errorResolver: UseFieldErrorResolver = useMemo(\n () => resolveValidationError || ((err) => err as React.ReactNode),\n [resolveValidationError]\n );\n\n const setTouched = useCallback((val: boolean, { updateState = mode === 'controlled' } = {}) => {\n touchedRef.current = val;\n updateState && setTouchedState(val);\n }, []);\n\n const setValue = useCallback(\n async (\n value: T,\n {\n updateKey = mode === 'uncontrolled',\n updateState = mode === 'controlled',\n }: SetValueOptions = {}\n ) => {\n if (valueRef.current === value) {\n return;\n }\n\n valueRef.current = value;\n\n onValueChange?.(value);\n\n if (clearErrorOnChange && error !== null) {\n setError(null);\n }\n\n if (updateState) {\n setValueState(value);\n }\n\n if (updateKey) {\n setKey((currentKey) => currentKey + 1);\n }\n\n if (validateOnChange) {\n _validate();\n }\n },\n [error, clearErrorOnChange]\n );\n\n const reset = useCallback(() => {\n setValue(initialValue);\n setError(null);\n setTouched(false);\n }, [initialValue]);\n\n const getValue = useCallback(() => valueRef.current, []);\n\n const isTouched = useCallback(() => touchedRef.current, []);\n\n const isDirty = useCallback(() => valueRef.current !== initialValue, [initialValue]);\n\n const _validate = useCallback(async () => {\n const validationResult = validate?.(valueRef.current);\n\n if (validationResult instanceof Promise) {\n setIsValidating(true);\n try {\n const result = await validationResult;\n setIsValidating(false);\n setError(result);\n } catch (err) {\n setIsValidating(false);\n const resolvedError = errorResolver(err);\n setError(resolvedError);\n return resolvedError;\n }\n } else {\n setError(validationResult);\n return validationResult;\n }\n }, []);\n\n const getInputProps = ({ withError = true, withFocus = true } = {}) => {\n const onChange = getInputOnChange<T>((val) => setValue(val as any, { updateKey: false }));\n\n const payload: any = { onChange };\n\n if (withError) {\n payload.error = error;\n }\n\n if (type === 'checkbox') {\n payload[mode === 'controlled' ? 'checked' : 'defaultChecked'] = valueRef.current;\n } else {\n payload[mode === 'controlled' ? 'value' : 'defaultValue'] = valueRef.current;\n }\n\n if (withFocus) {\n payload.onFocus = () => {\n setTouched(true);\n };\n\n payload.onBlur = () => {\n if (shouldValidateOnChange('', !!validateOnBlur)) {\n _validate();\n }\n };\n }\n\n return payload;\n };\n\n const resetTouched = useCallback(() => setTouched(false), []);\n\n return {\n key,\n getValue,\n setValue,\n reset,\n getInputProps,\n\n isValidating,\n validate: _validate,\n\n error,\n setError,\n\n isTouched,\n isDirty,\n resetTouched,\n };\n}\n"],"names":["useState","useRef","useMemo","useCallback","getInputOnChange","shouldValidateOnChange"],"mappings":"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"}
|
package/cjs/use-form.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var react = require('react');
|
|
5
5
|
var actions = require('./actions/actions.cjs');
|
|
6
6
|
var getInputOnChange = require('./get-input-on-change/get-input-on-change.cjs');
|
|
7
7
|
var useFormErrors = require('./hooks/use-form-errors/use-form-errors.cjs');
|
|
@@ -35,19 +35,19 @@ function useForm({
|
|
|
35
35
|
const $status = useFormStatus.useFormStatus({ initialDirty, initialTouched, $values, mode });
|
|
36
36
|
const $list = useFormList.useFormList({ $values, $errors, $status });
|
|
37
37
|
const $watch = useFormWatch.useFormWatch({ $status });
|
|
38
|
-
const [formKey, setFormKey] =
|
|
39
|
-
const [fieldKeys, setFieldKeys] =
|
|
40
|
-
const reset =
|
|
38
|
+
const [formKey, setFormKey] = react.useState(0);
|
|
39
|
+
const [fieldKeys, setFieldKeys] = react.useState({});
|
|
40
|
+
const reset = react.useCallback(() => {
|
|
41
41
|
$values.resetValues();
|
|
42
42
|
$errors.clearErrors();
|
|
43
43
|
$status.resetDirty();
|
|
44
44
|
$status.resetTouched();
|
|
45
45
|
mode === "uncontrolled" && setFormKey((key2) => key2 + 1);
|
|
46
46
|
}, []);
|
|
47
|
-
const initialize =
|
|
47
|
+
const initialize = react.useCallback((values) => {
|
|
48
48
|
$values.initialize(values, () => mode === "uncontrolled" && setFormKey((key2) => key2 + 1));
|
|
49
49
|
}, []);
|
|
50
|
-
const setFieldValue =
|
|
50
|
+
const setFieldValue = react.useCallback(
|
|
51
51
|
(path, value, options) => {
|
|
52
52
|
const shouldValidate = shouldValidateOnChange.shouldValidateOnChange(path, validateInputOnChange);
|
|
53
53
|
$status.clearFieldDirty(path);
|
|
@@ -72,7 +72,7 @@ function useForm({
|
|
|
72
72
|
},
|
|
73
73
|
[onValuesChange, rules]
|
|
74
74
|
);
|
|
75
|
-
const setValues =
|
|
75
|
+
const setValues = react.useCallback(
|
|
76
76
|
(values) => {
|
|
77
77
|
const previousValues = $values.refValues.current;
|
|
78
78
|
$values.setValues({ values, updateState: mode === "controlled" });
|
|
@@ -88,12 +88,12 @@ function useForm({
|
|
|
88
88
|
},
|
|
89
89
|
[onValuesChange, clearInputErrorOnChange]
|
|
90
90
|
);
|
|
91
|
-
const validate =
|
|
91
|
+
const validate = react.useCallback(() => {
|
|
92
92
|
const results = validateValues.validateValues(rules, $values.refValues.current);
|
|
93
93
|
$errors.setErrors(results.errors);
|
|
94
94
|
return results;
|
|
95
95
|
}, [rules]);
|
|
96
|
-
const validateField =
|
|
96
|
+
const validateField = react.useCallback(
|
|
97
97
|
(path) => {
|
|
98
98
|
const results = validateFieldValue.validateFieldValue(path, rules, $values.refValues.current);
|
|
99
99
|
results.hasError ? $errors.setFieldError(path, results.error) : $errors.clearFieldError(path);
|
|
@@ -149,11 +149,11 @@ function useForm({
|
|
|
149
149
|
}
|
|
150
150
|
};
|
|
151
151
|
const getTransformedValues = (input) => transformValues(input || $values.refValues.current);
|
|
152
|
-
const onReset =
|
|
152
|
+
const onReset = react.useCallback((event) => {
|
|
153
153
|
event.preventDefault();
|
|
154
154
|
reset();
|
|
155
155
|
}, []);
|
|
156
|
-
const isValid =
|
|
156
|
+
const isValid = react.useCallback(
|
|
157
157
|
(path) => path ? !validateFieldValue.validateFieldValue(path, rules, $values.refValues.current).hasError : !validateValues.validateValues(rules, $values.refValues.current).hasErrors,
|
|
158
158
|
[rules]
|
|
159
159
|
);
|