@paragrav/rhf-utils 0.0.67 → 0.0.68
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/dist/esm/client/index.mjs +1 -1
- package/dist/esm/errors/context/provider.mjs +5 -5
- package/dist/esm/errors/flat/filterFlatFieldErrors.mjs +10 -0
- package/dist/esm/errors/flat/useFormFlatFieldErrorsMemo.mjs +6 -0
- package/dist/esm/errors/isFieldErrorRefd.mjs +4 -0
- package/dist/esm/errors/nonfield/FormNonFieldErrorMarker.utils.mjs +2 -2
- package/dist/esm/errors/orphan/getIsOrphanFormErrorWithParentElement.mjs +5 -0
- package/dist/esm/errors/orphan/getOrphansFromFieldErrors.mjs +3 -6
- package/dist/esm/errors/orphan/getOrphansFromFlatFieldErrors.mjs +6 -7
- package/dist/esm/errors/orphan/isOrphanFormError.mjs +6 -6
- package/dist/esm/errors/orphan/useFormHasOnlyOrphanFieldErrorsMemo.mjs +10 -0
- package/dist/esm/errors/orphan/useOrphanFormErrorsMemo.mjs +6 -6
- package/dist/esm/errors/root/getRootsFromFieldErrors.mjs +3 -6
- package/dist/esm/errors/root/getRootsFromFlatFieldErrors.mjs +5 -4
- package/dist/esm/errors/root/isFlatFieldErrorEntryPathRoot.mjs +5 -0
- package/dist/esm/errors/root/useRootFormFieldErrorsMemo.mjs +1 -1
- package/dist/esm/errors/{useFormErrorsMemo.mjs → useFormErrorsTransformMemo.mjs} +4 -1
- package/dist/esm/exports.mjs +16 -16
- package/dist/esm/form/_Form.mjs +47 -46
- package/dist/esm/form/useForm.mjs +11 -9
- package/dist/types/client/config.d.ts +18 -0
- package/dist/types/client/index.d.ts +0 -1
- package/dist/types/errors/flat/filterFlatFieldErrors.d.ts +9 -0
- package/dist/types/errors/flat/types.d.ts +4 -0
- package/dist/types/errors/flat/useFormFlatFieldErrorsMemo.d.ts +3 -1
- package/dist/types/errors/flat/useRefdFieldErrorsMemo.d.ts +1 -1
- package/dist/types/errors/isFieldErrorRefd.d.ts +7 -0
- package/dist/types/errors/isFlatFieldErrorEntryRefd.d.ts +7 -0
- package/dist/types/errors/nonfield/FormNonFieldErrorMarker.utils.d.ts +1 -1
- package/dist/types/errors/orphan/getIsOrphanFormErrorWithParentElement.d.ts +7 -0
- package/dist/types/errors/orphan/useFormHasOnlyOrphanFieldErrorsMemo.d.ts +6 -0
- package/dist/types/errors/root/getRootsFromFlatFieldErrors.d.ts +1 -3
- package/dist/types/errors/root/isFlatFieldErrorEntryPathRoot.d.ts +7 -0
- package/dist/types/errors/root/isFormErrorPathRoot.d.ts +1 -0
- package/dist/types/errors/useFormErrorsTransformMemo.d.ts +7 -0
- package/dist/types/exports.d.ts +2 -2
- package/dist/types/form/_Form.d.ts +2 -2
- package/dist/types/form/useForm.d.ts +3 -1
- package/dist/types/form/useFormOptions.d.ts +0 -14
- package/package.json +8 -9
- package/dist/esm/errors/flat/useRefdFieldErrorsMemo.mjs +0 -13
- package/dist/esm/errors/isFieldError.mjs +0 -4
- package/dist/esm/errors/orphan/useFormHasOrphanAndNoFieldErrors.mjs +0 -10
|
@@ -7,7 +7,6 @@ const p = (t) => (r) => {
|
|
|
7
7
|
r
|
|
8
8
|
);
|
|
9
9
|
return {
|
|
10
|
-
config: r,
|
|
11
10
|
useForm: (o, s) => F(
|
|
12
11
|
e(o, s)
|
|
13
12
|
),
|
|
@@ -30,6 +29,7 @@ const p = (t) => (r) => {
|
|
|
30
29
|
var s, m, i, n, f, a, h;
|
|
31
30
|
return {
|
|
32
31
|
...o,
|
|
32
|
+
config: r,
|
|
33
33
|
rhf: {
|
|
34
34
|
...(s = r.defaultOptions) == null ? void 0 : s.rhf,
|
|
35
35
|
...o.rhf,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as F } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import p from "../
|
|
2
|
+
import a from "../flat/getFlatFieldErrors.mjs";
|
|
3
|
+
import i from "../orphan/getOrphansFromFlatFieldErrors.mjs";
|
|
4
|
+
import l from "../root/getRootsFromFlatFieldErrors.mjs";
|
|
5
|
+
import p from "../useFormErrorsTransformMemo.mjs";
|
|
6
6
|
import { _FormErrorsFlatContextProvider as c } from "./index.mjs";
|
|
7
7
|
const u = ({
|
|
8
8
|
formRef: o,
|
|
@@ -11,7 +11,7 @@ const u = ({
|
|
|
11
11
|
const e = p((s) => {
|
|
12
12
|
if (!o.current)
|
|
13
13
|
return;
|
|
14
|
-
const r =
|
|
14
|
+
const r = a(s), m = l(r), n = i(r, o.current);
|
|
15
15
|
return { all: r, roots: m, orphans: n };
|
|
16
16
|
});
|
|
17
17
|
return /* @__PURE__ */ F(c, { value: e, children: t });
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import o from "./FormNonFieldErrorMarkerHtmlAttribute.mjs";
|
|
2
|
-
const t = (r) => `[role="alert"][${o}="${r}"]`,
|
|
2
|
+
const t = (r) => `[role="alert"][${o}="${r}"]`, i = (r, e) => !!e.querySelector(t(r));
|
|
3
3
|
export {
|
|
4
4
|
t as getFormNonFieldErrorMarkerQuerySelector,
|
|
5
|
-
|
|
5
|
+
i as isNonFieldErrorMarkerInDOM
|
|
6
6
|
};
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
const a = (r, o) =>
|
|
4
|
-
const t = e(r);
|
|
5
|
-
return s(t, o);
|
|
6
|
-
};
|
|
1
|
+
import t from "../flat/getFlatFieldErrors.mjs";
|
|
2
|
+
import e from "./getOrphansFromFlatFieldErrors.mjs";
|
|
3
|
+
const a = (r, o) => e(t(r), o);
|
|
7
4
|
export {
|
|
8
5
|
a as default
|
|
9
6
|
};
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
);
|
|
1
|
+
import e from "../flat/filterFlatFieldErrors.mjs";
|
|
2
|
+
import o from "./getIsOrphanFormErrorWithParentElement.mjs";
|
|
3
|
+
const F = (r, t) => e(
|
|
4
|
+
o(t)
|
|
5
|
+
)(r);
|
|
7
6
|
export {
|
|
8
|
-
|
|
7
|
+
F as default
|
|
9
8
|
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import m from "../
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
const
|
|
1
|
+
import m from "../isFieldErrorRefd.mjs";
|
|
2
|
+
import { isNonFieldErrorMarkerInDOM as t } from "../nonfield/FormNonFieldErrorMarker.utils.mjs";
|
|
3
|
+
import e from "../root/isFormErrorPathRoot.mjs";
|
|
4
|
+
const d = (r, o, i) => (
|
|
5
5
|
// not root path
|
|
6
|
-
!
|
|
6
|
+
!e(r) && // non-field
|
|
7
7
|
!m(o) && // does not have marker
|
|
8
8
|
!t(r, i)
|
|
9
9
|
);
|
|
10
10
|
export {
|
|
11
|
-
|
|
11
|
+
d as default
|
|
12
12
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import s from "../../utils/isEmptyObject.mjs";
|
|
2
|
+
import t from "../flat/useFormFlatFieldErrorsMemo.mjs";
|
|
3
|
+
import m from "./useOrphanFormErrorsMemo.mjs";
|
|
4
|
+
const n = (o) => {
|
|
5
|
+
const e = t(), r = m(o);
|
|
6
|
+
return s(r) ? !1 : Object.keys(e).length !== Object.keys(r).length;
|
|
7
|
+
}, i = n;
|
|
8
|
+
export {
|
|
9
|
+
i as default
|
|
10
|
+
};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import "react";
|
|
2
2
|
import t from "../../utils/isEmptyObject.mjs";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
const s = (r) =>
|
|
3
|
+
import m from "../useFormErrorsTransformMemo.mjs";
|
|
4
|
+
import e from "./getOrphansFromFieldErrors.mjs";
|
|
5
|
+
const s = (r) => m((o) => {
|
|
6
6
|
if (t(o))
|
|
7
7
|
return {};
|
|
8
8
|
if (!r.current)
|
|
9
9
|
throw new Error();
|
|
10
|
-
return
|
|
11
|
-
}),
|
|
10
|
+
return e(o, r.current);
|
|
11
|
+
}), a = s;
|
|
12
12
|
export {
|
|
13
|
-
|
|
13
|
+
a as default
|
|
14
14
|
};
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
const F = (r) =>
|
|
4
|
-
const o = t(r);
|
|
5
|
-
return e(o);
|
|
6
|
-
};
|
|
1
|
+
import o from "../flat/getFlatFieldErrors.mjs";
|
|
2
|
+
import t from "./getRootsFromFlatFieldErrors.mjs";
|
|
3
|
+
const F = (r) => t(o(r));
|
|
7
4
|
export {
|
|
8
5
|
F as default
|
|
9
6
|
};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import r from "../flat/filterFlatFieldErrors.mjs";
|
|
2
|
+
import o from "./isFlatFieldErrorEntryPathRoot.mjs";
|
|
3
|
+
const l = r(
|
|
4
|
+
o
|
|
4
5
|
);
|
|
5
6
|
export {
|
|
6
|
-
|
|
7
|
+
l as default
|
|
7
8
|
};
|
package/dist/esm/exports.mjs
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { createZodRhfUtilsClient as e } from "./client/zod/index.mjs";
|
|
2
2
|
import { default as s } from "./client/zod/context/index.mjs";
|
|
3
3
|
import { default as u } from "./client/zod/context/provider.mjs";
|
|
4
|
-
import { default as
|
|
4
|
+
import { default as f } from "./devtool/LazyDevTool.mjs";
|
|
5
5
|
import { default as d } from "./errors/context/index.mjs";
|
|
6
6
|
import { default as x } from "./errors/context/provider.mjs";
|
|
7
7
|
import { default as n } from "./errors/message/FormErrorMessage.mjs";
|
|
8
8
|
import { default as E } from "./errors/message/FormErrorMessageByPath.mjs";
|
|
9
9
|
import { default as c } from "./errors/nonfield/FormNonFieldErrorMarker.mjs";
|
|
10
10
|
import { default as S } from "./errors/nonfield/FormNonFieldErrorMarkerHtmlAttribute.mjs";
|
|
11
|
-
import { default as y } from "./errors/orphan/
|
|
12
|
-
import { default as
|
|
11
|
+
import { default as y } from "./errors/orphan/useFormHasOnlyOrphanFieldErrorsMemo.mjs";
|
|
12
|
+
import { default as O } from "./errors/orphan/useOrphanFormErrorsMemo.mjs";
|
|
13
13
|
import { default as P } from "./errors/orphan/useOrphanFormErrorsToConsole.mjs";
|
|
14
14
|
import { default as I } from "./errors/root/useRootFormFieldErrorsMemo.mjs";
|
|
15
|
-
import { default as
|
|
15
|
+
import { default as g } from "./errors/useFormErrorConsoleDebug.mjs";
|
|
16
16
|
import { default as B } from "./errors/useFormErrorsEffect.mjs";
|
|
17
|
-
import { default as
|
|
18
|
-
import { default as D } from "./errors/
|
|
19
|
-
import { default as
|
|
17
|
+
import { default as A } from "./errors/useFormErrorsIfAny.mjs";
|
|
18
|
+
import { default as D } from "./errors/useFormErrorsTransformMemo.mjs";
|
|
19
|
+
import { default as H } from "./errors/useFormRequestSubmit.mjs";
|
|
20
20
|
import { default as q } from "./form/useForm.mjs";
|
|
21
21
|
import { default as L } from "./form/context/utils/FormUtilsContextProvider.mjs";
|
|
22
22
|
import { default as w } from "./form/context/utils/useFormUtilsContext.mjs";
|
|
@@ -28,7 +28,7 @@ import { default as rr } from "./form/context/group/useFormGroupIsAnyBusy.mjs";
|
|
|
28
28
|
import { default as er } from "./form/context/group/useFormGroupIsChildBusy.mjs";
|
|
29
29
|
import { default as sr } from "./form/context/group/useFormGroupIsParentBusy.mjs";
|
|
30
30
|
import { default as ur } from "./form/context/group/useFormGroupParentTracker.mjs";
|
|
31
|
-
import { default as
|
|
31
|
+
import { default as fr } from "./form/context/group/useFormOrParentIsBusy.mjs";
|
|
32
32
|
import { default as dr } from "./form/utils/getSubmitterButtonData.mjs";
|
|
33
33
|
import { FormSubmitError as xr } from "./submit/error/FormSubmitError.mjs";
|
|
34
34
|
import { default as nr } from "./submit/useFormOnSubmitSuccessful.mjs";
|
|
@@ -45,16 +45,16 @@ export {
|
|
|
45
45
|
S as FormNonFieldErrorMarkerHtmlAttribute,
|
|
46
46
|
xr as FormSubmitError,
|
|
47
47
|
L as FormUtilsContextProvider,
|
|
48
|
-
|
|
48
|
+
f as LazyDevTool,
|
|
49
49
|
u as RhfUtilsZodContextProvider,
|
|
50
50
|
e as createZodRhfUtilsClient,
|
|
51
51
|
dr as getSubmitterButtonData,
|
|
52
52
|
q as useForm,
|
|
53
|
-
|
|
53
|
+
g as useFormErrorConsoleDebug,
|
|
54
54
|
B as useFormErrorsEffect,
|
|
55
55
|
d as useFormErrorsFlatContext,
|
|
56
|
-
|
|
57
|
-
D as
|
|
56
|
+
A as useFormErrorsIfAny,
|
|
57
|
+
D as useFormErrorsTransformMemo,
|
|
58
58
|
V as useFormGroupChildIsMountedTracker,
|
|
59
59
|
X as useFormGroupChildIsSubmittingTracker,
|
|
60
60
|
_ as useFormGroupChildTracker,
|
|
@@ -62,13 +62,13 @@ export {
|
|
|
62
62
|
er as useFormGroupIsChildBusy,
|
|
63
63
|
sr as useFormGroupIsParentBusy,
|
|
64
64
|
ur as useFormGroupParentTracker,
|
|
65
|
-
y as
|
|
65
|
+
y as useFormHasOnlyOrphanFieldErrorsMemo,
|
|
66
66
|
nr as useFormOnSubmitSuccessful,
|
|
67
67
|
Er as useFormOnSubmitSuccessfulAndReset,
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
fr as useFormOrParentIsBusy,
|
|
69
|
+
H as useFormRequestSubmit,
|
|
70
70
|
w as useFormUtilsContext,
|
|
71
|
-
|
|
71
|
+
O as useOrphanFormErrorsMemo,
|
|
72
72
|
P as useOrphanFormErrorsToConsole,
|
|
73
73
|
Sr as useResetFormAfterSubmitSuccessful,
|
|
74
74
|
cr as useResetFormOnSubmitError,
|
package/dist/esm/form/_Form.mjs
CHANGED
|
@@ -1,89 +1,90 @@
|
|
|
1
|
-
import { jsxs as
|
|
1
|
+
import { jsxs as B, jsx as p } from "react/jsx-runtime";
|
|
2
2
|
import "react";
|
|
3
|
-
import { useFormContext as
|
|
4
|
-
import
|
|
5
|
-
import { FormSubmitError as
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
function
|
|
10
|
-
formId:
|
|
3
|
+
import { useFormContext as N } from "react-hook-form";
|
|
4
|
+
import P from "../devtool/LazyDevTool.mjs";
|
|
5
|
+
import { FormSubmitError as T } from "../submit/error/FormSubmitError.mjs";
|
|
6
|
+
import V from "../submit/error/setCtxErrorsByFormSubmitError.mjs";
|
|
7
|
+
import _ from "../submit/useResetFormOnSubmitError.mjs";
|
|
8
|
+
import O from "./_FormBase.mjs";
|
|
9
|
+
function G({
|
|
10
|
+
formId: c,
|
|
11
11
|
formRef: l,
|
|
12
12
|
form: t,
|
|
13
|
-
|
|
13
|
+
config: n,
|
|
14
|
+
children: o
|
|
14
15
|
}) {
|
|
15
|
-
var
|
|
16
|
-
const a =
|
|
17
|
-
|
|
18
|
-
disabled: !((
|
|
16
|
+
var b, S, h, E, F;
|
|
17
|
+
const a = N();
|
|
18
|
+
_({
|
|
19
|
+
disabled: !((b = t == null ? void 0 : t.options) != null && b.resetValuesOnSubmitError)
|
|
19
20
|
});
|
|
20
|
-
const
|
|
21
|
-
var
|
|
22
|
-
(
|
|
21
|
+
const y = async (s) => {
|
|
22
|
+
var e;
|
|
23
|
+
(e = t == null ? void 0 : t.options) != null && e.stopSubmitPropagation && s.stopPropagation();
|
|
23
24
|
try {
|
|
24
25
|
await a.handleSubmit(
|
|
25
|
-
|
|
26
|
+
j,
|
|
26
27
|
t == null ? void 0 : t.onSubmitInvalid
|
|
27
|
-
)(
|
|
28
|
-
} catch (
|
|
29
|
-
|
|
28
|
+
)(s);
|
|
29
|
+
} catch (i) {
|
|
30
|
+
v(i, s);
|
|
30
31
|
}
|
|
31
|
-
},
|
|
32
|
-
var
|
|
33
|
-
return (
|
|
32
|
+
}, j = (s, e) => {
|
|
33
|
+
var i;
|
|
34
|
+
return (i = t == null ? void 0 : t.onSubmit) == null ? void 0 : i.call(
|
|
34
35
|
t,
|
|
35
|
-
|
|
36
|
+
s,
|
|
36
37
|
a,
|
|
37
|
-
|
|
38
|
+
e
|
|
38
39
|
);
|
|
39
|
-
},
|
|
40
|
-
var
|
|
41
|
-
const
|
|
40
|
+
}, v = (s, e) => {
|
|
41
|
+
var x, C;
|
|
42
|
+
const i = s instanceof T ? (
|
|
42
43
|
// consumer can manually throw FormSubmitError (e.g., manual validation)
|
|
43
|
-
|
|
44
|
+
s
|
|
44
45
|
) : (
|
|
45
46
|
// if error is not FormSubmitError, consumer can provide global handler
|
|
46
|
-
(
|
|
47
|
+
(x = n == null ? void 0 : n.onSubmitError) == null ? void 0 : x.call(n, s)
|
|
47
48
|
);
|
|
48
|
-
|
|
49
|
+
i && V(a, i), (C = t == null ? void 0 : t.onSubmitError) == null || C.call(
|
|
49
50
|
t,
|
|
50
|
-
|
|
51
|
+
s,
|
|
51
52
|
a,
|
|
52
|
-
|
|
53
|
+
e
|
|
53
54
|
);
|
|
54
55
|
}, u = {
|
|
55
|
-
formId:
|
|
56
|
+
formId: c,
|
|
56
57
|
formRef: l,
|
|
57
58
|
ctx: a,
|
|
58
59
|
options: t == null ? void 0 : t.options
|
|
59
|
-
}, d = (
|
|
60
|
-
var
|
|
61
|
-
const
|
|
62
|
-
return
|
|
60
|
+
}, d = (s) => {
|
|
61
|
+
var i;
|
|
62
|
+
const e = (i = n == null ? void 0 : n.Children) == null ? void 0 : i[s];
|
|
63
|
+
return e && /* @__PURE__ */ p(e, { ...u });
|
|
63
64
|
};
|
|
64
|
-
return /* @__PURE__ */
|
|
65
|
-
|
|
65
|
+
return /* @__PURE__ */ B(
|
|
66
|
+
O,
|
|
66
67
|
{
|
|
67
68
|
noValidate: !0,
|
|
68
69
|
style: {
|
|
69
70
|
position: "relative"
|
|
70
71
|
},
|
|
71
72
|
...t == null ? void 0 : t.props,
|
|
72
|
-
className: [(
|
|
73
|
+
className: [(S = t == null ? void 0 : t.options) == null ? void 0 : S.classNames, ((h = t == null ? void 0 : t.props) == null ? void 0 : h.className) ?? ""].join(
|
|
73
74
|
" "
|
|
74
75
|
),
|
|
75
|
-
onSubmit:
|
|
76
|
+
onSubmit: y,
|
|
76
77
|
formRef: l,
|
|
77
78
|
children: [
|
|
78
79
|
d("top"),
|
|
79
|
-
((
|
|
80
|
+
((E = t == null ? void 0 : t.options) == null ? void 0 : E.devTool) !== "disabled" && /* @__PURE__ */ p(P, { placement: "top-right", ...(F = t == null ? void 0 : t.options) == null ? void 0 : F.devTool }),
|
|
80
81
|
(t == null ? void 0 : t.Fields) && /* @__PURE__ */ p(t.Fields, { ...u }),
|
|
81
|
-
|
|
82
|
+
o,
|
|
82
83
|
d("bottom")
|
|
83
84
|
]
|
|
84
85
|
}
|
|
85
86
|
);
|
|
86
87
|
}
|
|
87
88
|
export {
|
|
88
|
-
|
|
89
|
+
G as default
|
|
89
90
|
};
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import n from "react";
|
|
2
|
-
import { useForm as
|
|
3
|
-
import
|
|
4
|
-
const
|
|
5
|
-
|
|
2
|
+
import { useForm as i } from "react-hook-form";
|
|
3
|
+
import c from "../submit/useSubmitFormOnChange.mjs";
|
|
4
|
+
const P = ({
|
|
5
|
+
config: m,
|
|
6
|
+
rhf: p,
|
|
6
7
|
form: o,
|
|
7
|
-
utils:
|
|
8
|
+
utils: u
|
|
8
9
|
}) => {
|
|
9
10
|
var t;
|
|
10
|
-
const s = n.useId(), e =
|
|
11
|
-
return
|
|
11
|
+
const s = n.useId(), e = i(p), r = n.useRef(null);
|
|
12
|
+
return c(r, {
|
|
12
13
|
disabled: !((t = o == null ? void 0 : o.options) != null && t.submitOnChange)
|
|
13
14
|
}), {
|
|
14
15
|
id: s,
|
|
@@ -18,15 +19,16 @@ const l = ({
|
|
|
18
19
|
formId: s,
|
|
19
20
|
formRef: r,
|
|
20
21
|
rhfForm: e,
|
|
21
|
-
utils:
|
|
22
|
+
utils: u
|
|
22
23
|
},
|
|
23
24
|
formProps: {
|
|
24
25
|
formId: s,
|
|
25
26
|
formRef: r,
|
|
27
|
+
config: m,
|
|
26
28
|
form: o
|
|
27
29
|
}
|
|
28
30
|
};
|
|
29
31
|
};
|
|
30
32
|
export {
|
|
31
|
-
|
|
33
|
+
P as default
|
|
32
34
|
};
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
import { FormSubmitError } from '../submit/error/FormSubmitError';
|
|
1
2
|
import { UseFormOptions } from '../form/useFormOptions';
|
|
3
|
+
import { UseFormFieldsProps } from '../form/useForm';
|
|
4
|
+
import { _FormSlots } from '../form/_Form';
|
|
2
5
|
import { UseFormProps } from 'react-hook-form';
|
|
3
6
|
|
|
4
7
|
export type ClientConfig = {
|
|
8
|
+
/**
|
|
9
|
+
* Default options for all forms. (Are overridden by form-specific options.)
|
|
10
|
+
*/
|
|
5
11
|
defaultOptions?: {
|
|
6
12
|
/**
|
|
7
13
|
* Default RHF `useForm` settings.
|
|
@@ -16,4 +22,16 @@ export type ClientConfig = {
|
|
|
16
22
|
*/
|
|
17
23
|
form?: UseFormOptions;
|
|
18
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* Components injected by slot across all forms.
|
|
27
|
+
* (Per-form injection can be done via Fields prop.)
|
|
28
|
+
*
|
|
29
|
+
* top: e.g., block navigation on dirty form.
|
|
30
|
+
* bottom: e.g., root errors list.
|
|
31
|
+
*/
|
|
32
|
+
Children?: Partial<Record<_FormSlots, React.FC<UseFormFieldsProps>>>;
|
|
33
|
+
/**
|
|
34
|
+
* Handle non-{@link FormSubmitError} errors. Optionally, return {@link FormSubmitError} to merge into context errors.
|
|
35
|
+
*/
|
|
36
|
+
onSubmitError?: (error: unknown) => FormSubmitError | undefined;
|
|
19
37
|
};
|
|
@@ -13,7 +13,6 @@ export type ObjectSchema<TInputKey extends string, TOutputKey extends string> =
|
|
|
13
13
|
[key in TOutputKey]: SafeFieldValues;
|
|
14
14
|
};
|
|
15
15
|
export type CreateRhfUtilsClient<TObjectSchema extends ObjectSchema<TObjectSchemaInputKey, TObjectSchemaOutputKey>, TObjectSchemaInputKey extends string, TObjectSchemaOutputKey extends string> = {
|
|
16
|
-
config: ClientConfig;
|
|
17
16
|
useForm: <TSchema extends TObjectSchema, TSchemaInput extends SafeFieldValues = TSchema[TObjectSchemaInputKey], TSchemaOutput extends SafeFieldValues = TSchema[TObjectSchemaOutputKey]>(schema: TSchema, props: UseFormProps<TSchemaInput, TSchemaOutput>) => UseFormReturn<TSchemaInput, TSchemaOutput>;
|
|
18
17
|
FormWithProviders: <TSchema extends TObjectSchema, TSchemaInput extends SafeFieldValues = TSchema[TObjectSchemaInputKey], TSchemaOutput extends SafeFieldValues = TSchema[TObjectSchemaOutputKey]>(props: {
|
|
19
18
|
schema: TSchema;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FlatFieldErrorEntry, FlatFieldErrors } from './types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Filter {@link FlatFieldErrors} by a predicate.
|
|
5
|
+
*
|
|
6
|
+
* (Encapsulates to and from Object entries.)
|
|
7
|
+
*/
|
|
8
|
+
declare const makeFlatFieldErrorsFilter: (predicate: (entry: FlatFieldErrorEntry, index: number) => boolean) => (errors: FlatFieldErrors) => FlatFieldErrors;
|
|
9
|
+
export default makeFlatFieldErrorsFilter;
|
|
@@ -11,3 +11,7 @@ import { FieldError } from 'react-hook-form';
|
|
|
11
11
|
* ```
|
|
12
12
|
*/
|
|
13
13
|
export type FlatFieldErrors = Record<string, FieldError>;
|
|
14
|
+
/**
|
|
15
|
+
* Return from `Object.entries` on {@link FlatFieldErrors}.
|
|
16
|
+
*/
|
|
17
|
+
export type FlatFieldErrorEntry = [path: string, error: FieldError];
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { FlatFieldErrors } from './types';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Use {@link FieldErrors} as {@link FlatFieldErrors}.
|
|
3
5
|
*/
|
|
4
|
-
declare const useFormFlatFieldErrorsMemo: () =>
|
|
6
|
+
declare const useFormFlatFieldErrorsMemo: () => FlatFieldErrors;
|
|
5
7
|
export default useFormFlatFieldErrorsMemo;
|
|
@@ -2,7 +2,7 @@ import { FlatFieldErrors } from './types';
|
|
|
2
2
|
import { FieldErrors } from 'react-hook-form';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* Use
|
|
5
|
+
* Use {@link FieldErrors} with `ref`s as {@link FlatFieldErrors}.
|
|
6
6
|
*/
|
|
7
7
|
declare const useRefdFieldErrorsMemo: () => FlatFieldErrors;
|
|
8
8
|
export default useRefdFieldErrorsMemo;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FlatFieldErrorEntry } from './flat/types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Util wrapper for {@link isFieldErrorRefd} for usage with {@link FlatFieldErrorEntry}.
|
|
5
|
+
*/
|
|
6
|
+
declare const isFlatFieldErrorEntryRefd: ([, error]: FlatFieldErrorEntry) => boolean;
|
|
7
|
+
export default isFlatFieldErrorEntryRefd;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const getFormNonFieldErrorMarkerQuerySelector: (path: string) => string;
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const isNonFieldErrorMarkerInDOM: (path: string, parentElement: Pick<HTMLElement, 'querySelector'>) => boolean;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FlatFieldErrorEntry } from '../flat/types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Util wrapper for {@link isOrphanFormError} for usage with {@link FlatFieldErrorEntry}.
|
|
5
|
+
*/
|
|
6
|
+
declare const getIsFlatFieldErrorEntryOrphanByParentElement: (parentElement: Pick<HTMLElement, 'querySelector'>) => ([path, error]: FlatFieldErrorEntry) => boolean;
|
|
7
|
+
export default getIsFlatFieldErrorEntryOrphanByParentElement;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determined if there are orphan errors and no field errors.
|
|
3
|
+
* (May be useful when reporting or displaying a specific message to user.)
|
|
4
|
+
*/
|
|
5
|
+
declare const useFormHasOnlyOrphanFieldErrorsMemo: (formRef: React.RefObject<HTMLFormElement>) => boolean;
|
|
6
|
+
export default useFormHasOnlyOrphanFieldErrorsMemo;
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
declare const getRootsFromFlatFieldErrors: (errors: FlatFieldErrors) => FlatFieldErrors;
|
|
1
|
+
declare const getRootsFromFlatFieldErrors: (errors: import('../flat/types').FlatFieldErrors) => import('../flat/types').FlatFieldErrors;
|
|
4
2
|
export default getRootsFromFlatFieldErrors;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FlatFieldErrorEntry } from '../flat/types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Util wrapper for {@link isFormErrorPathRoot} for usage with {@link FlatFieldErrorEntry}.
|
|
5
|
+
*/
|
|
6
|
+
declare const isFlatFieldErrorEntryPathRoot: ([path]: FlatFieldErrorEntry) => boolean;
|
|
7
|
+
export default isFlatFieldErrorEntryPathRoot;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FieldErrors } from 'react-hook-form';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Create transformed memoized form errors value.
|
|
5
|
+
*/
|
|
6
|
+
declare const useFormErrorsTransformMemo: <TTransformedReturn>(transform: (errors: FieldErrors) => TTransformedReturn) => TTransformedReturn;
|
|
7
|
+
export default useFormErrorsTransformMemo;
|
package/dist/types/exports.d.ts
CHANGED
|
@@ -9,14 +9,14 @@ export { default as FormErrorMessage } from './errors/message/FormErrorMessage';
|
|
|
9
9
|
export { default as FormErrorMessageByPath } from './errors/message/FormErrorMessageByPath';
|
|
10
10
|
export { default as FormNonFieldErrorMarker } from './errors/nonfield/FormNonFieldErrorMarker';
|
|
11
11
|
export { default as FormNonFieldErrorMarkerHtmlAttribute } from './errors/nonfield/FormNonFieldErrorMarkerHtmlAttribute';
|
|
12
|
-
export { default as
|
|
12
|
+
export { default as useFormHasOnlyOrphanFieldErrorsMemo } from './errors/orphan/useFormHasOnlyOrphanFieldErrorsMemo';
|
|
13
13
|
export { default as useOrphanFormErrorsMemo } from './errors/orphan/useOrphanFormErrorsMemo';
|
|
14
14
|
export { default as useOrphanFormErrorsToConsole } from './errors/orphan/useOrphanFormErrorsToConsole';
|
|
15
15
|
export { default as useRootFormFieldErrorsMemo } from './errors/root/useRootFormFieldErrorsMemo';
|
|
16
16
|
export { default as useFormErrorConsoleDebug } from './errors/useFormErrorConsoleDebug';
|
|
17
17
|
export { default as useFormErrorsEffect } from './errors/useFormErrorsEffect';
|
|
18
18
|
export { default as useFormErrorsIfAny } from './errors/useFormErrorsIfAny';
|
|
19
|
-
export { default as
|
|
19
|
+
export { default as useFormErrorsTransformMemo } from './errors/useFormErrorsTransformMemo';
|
|
20
20
|
export { default as useFormRequestSubmit } from './errors/useFormRequestSubmit';
|
|
21
21
|
export type { SafeFieldValues } from './form/SafeFieldValues';
|
|
22
22
|
export type { UseFormFieldsProps } from './form/useForm';
|
|
@@ -3,9 +3,9 @@ import { SafeFieldValues } from './SafeFieldValues';
|
|
|
3
3
|
import { default as React } from 'react';
|
|
4
4
|
|
|
5
5
|
export type _FormSlots = 'top' | 'bottom';
|
|
6
|
-
export type _FormProps<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues> = React.PropsWithChildren<Pick<UseFormProps<TFieldValues, TTransformedValues>, 'form'> & {
|
|
6
|
+
export type _FormProps<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues> = React.PropsWithChildren<Pick<UseFormProps<TFieldValues, TTransformedValues>, 'form' | 'config'> & {
|
|
7
7
|
formId: string;
|
|
8
8
|
formRef: React.RefObject<HTMLFormElement>;
|
|
9
9
|
}>;
|
|
10
|
-
declare function _Form<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues>({ formId, formRef, form, children, }: _FormProps<TFieldValues, TTransformedValues>): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
declare function _Form<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues>({ formId, formRef, form, config, children, }: _FormProps<TFieldValues, TTransformedValues>): import("react/jsx-runtime").JSX.Element;
|
|
11
11
|
export default _Form;
|
|
@@ -3,6 +3,7 @@ import { SafeFieldValues } from './SafeFieldValues';
|
|
|
3
3
|
import { FormUtilsContextProviderProps } from './context/utils/FormUtilsContextProvider';
|
|
4
4
|
import { _FormProvidersProps } from './_FormProviders';
|
|
5
5
|
import { _FormProps } from './_Form';
|
|
6
|
+
import { ClientConfig } from '../client/config';
|
|
6
7
|
import { SubmitErrorHandler, UseFormProps as RhfUseFormProps, UseFormReturn as RhfUseFormReturn } from 'react-hook-form';
|
|
7
8
|
import { default as React } from 'react';
|
|
8
9
|
|
|
@@ -13,6 +14,7 @@ export type UseFormFieldsProps<TFieldValues extends SafeFieldValues = SafeFieldV
|
|
|
13
14
|
options?: UseFormOptions;
|
|
14
15
|
};
|
|
15
16
|
export type UseFormProps<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues> = {
|
|
17
|
+
config?: ClientConfig;
|
|
16
18
|
/** {@link RhfUseFormProps} props for RHF's {@link useRhfForm}. */
|
|
17
19
|
rhf?: RhfUseFormProps<TFieldValues>;
|
|
18
20
|
/** {@link FormProps} props for Form. */
|
|
@@ -37,7 +39,7 @@ export type UseFormProps<TFieldValues extends SafeFieldValues, TTransformedValue
|
|
|
37
39
|
* see https://caniuse.com/?search=form%20attribute
|
|
38
40
|
* @returns Form provider and form.
|
|
39
41
|
*/
|
|
40
|
-
declare const useForm: <TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues>({ rhf, form, utils, }: UseFormProps<TFieldValues, TTransformedValues>) => {
|
|
42
|
+
declare const useForm: <TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues>({ config, rhf, form, utils, }: UseFormProps<TFieldValues, TTransformedValues>) => {
|
|
41
43
|
readonly id: string;
|
|
42
44
|
readonly ref: React.RefObject<HTMLFormElement>;
|
|
43
45
|
readonly context: RhfUseFormReturn<TFieldValues, unknown, TTransformedValues>;
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { UseFormFieldsProps } from './useForm';
|
|
2
|
-
import { _FormSlots } from './_Form';
|
|
3
|
-
import { FormSubmitError } from '../submit/error/FormSubmitError';
|
|
4
1
|
import { DevtoolUIProps } from '@hookform/devtools/dist/devToolUI';
|
|
5
2
|
|
|
6
3
|
export type UseFormOptions = {
|
|
@@ -14,15 +11,4 @@ export type UseFormOptions = {
|
|
|
14
11
|
stopSubmitPropagation?: boolean;
|
|
15
12
|
/** Control dev tool options. */
|
|
16
13
|
devTool?: DevtoolUIProps | 'disabled';
|
|
17
|
-
/**
|
|
18
|
-
* Components injected by slot.
|
|
19
|
-
*
|
|
20
|
-
* e.g., top: block navigation on dirty form.
|
|
21
|
-
* e.g., bottom: root errors list.
|
|
22
|
-
*/
|
|
23
|
-
Children?: Partial<Record<_FormSlots, React.FC<UseFormFieldsProps>>>;
|
|
24
|
-
/**
|
|
25
|
-
* Handle non-{@link FormSubmitError} errors. Optionally, return {@link FormSubmitError} to merge into context errors.
|
|
26
|
-
*/
|
|
27
|
-
onSubmitError?: (error: unknown) => FormSubmitError | undefined;
|
|
28
14
|
};
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@paragrav/rhf-utils",
|
|
3
3
|
"author": "paragrav.dev",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.68",
|
|
6
6
|
"description": "Integration utilities for react-hook-form.",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"sideEffects": false,
|
|
@@ -57,9 +57,9 @@
|
|
|
57
57
|
"default": "./dist/esm/errors/useFormErrorsIfAny.mjs",
|
|
58
58
|
"types": "./dist/types/errors/useFormErrorsIfAny.d.ts"
|
|
59
59
|
},
|
|
60
|
-
"./errors/
|
|
61
|
-
"default": "./dist/esm/errors/
|
|
62
|
-
"types": "./dist/types/errors/
|
|
60
|
+
"./errors/useFormErrorsTransformMemo": {
|
|
61
|
+
"default": "./dist/esm/errors/useFormErrorsTransformMemo.mjs",
|
|
62
|
+
"types": "./dist/types/errors/useFormErrorsTransformMemo.d.ts"
|
|
63
63
|
},
|
|
64
64
|
"./errors/useFormRequestSubmit": {
|
|
65
65
|
"default": "./dist/esm/errors/useFormRequestSubmit.mjs",
|
|
@@ -73,14 +73,14 @@
|
|
|
73
73
|
"default": "./dist/esm/errors/nonfield/FormNonFieldErrorMarker.utils.mjs",
|
|
74
74
|
"types": "./dist/types/errors/nonfield/FormNonFieldErrorMarker.utils.d.ts"
|
|
75
75
|
},
|
|
76
|
+
"./errors/useFormHasOnlyOrphanFieldErrorsMemo": {
|
|
77
|
+
"default": "./dist/esm/errors/orphan/useFormHasOnlyOrphanFieldErrorsMemo.mjs",
|
|
78
|
+
"types": "./dist/types/errors/orphan/useFormHasOnlyOrphanFieldErrorsMemo.d.ts"
|
|
79
|
+
},
|
|
76
80
|
"./errors/useOrphanFormErrorsToConsoleError": {
|
|
77
81
|
"default": "./dist/esm/errors/orphan/useOrphanFormErrorsToConsoleError.mjs",
|
|
78
82
|
"types": "./dist/types/errors/orphan/useOrphanFormErrorsToConsoleError.d.ts"
|
|
79
83
|
},
|
|
80
|
-
"./errors/useFormErrorsHasOnlyOrphans": {
|
|
81
|
-
"default": "./dist/esm/errors/orphan/useFormErrorsHasOnlyOrphans.mjs",
|
|
82
|
-
"types": "./dist/types/errors/orphan/useFormErrorsHasOnlyOrphans.d.ts"
|
|
83
|
-
},
|
|
84
84
|
"./errors/useOrphanFormErrors": {
|
|
85
85
|
"default": "./dist/esm/errors/orphan/useOrphanFormErrors.mjs",
|
|
86
86
|
"types": "./dist/types/errors/orphan/useOrphanFormErrors.d.ts"
|
|
@@ -173,7 +173,6 @@
|
|
|
173
173
|
"lint": "eslint --ignore-path ./.gitignore --ext ts,tsx --report-unused-disable-directives --max-warnings 0 .",
|
|
174
174
|
"preinstall": "npx only-allow npm",
|
|
175
175
|
"prepare": "husky",
|
|
176
|
-
"prepublishOnly": "npm run build",
|
|
177
176
|
"preview": "vite preview --config vite.config.dev.ts",
|
|
178
177
|
"test": "vitest",
|
|
179
178
|
"test:ct": "playwright test -c playwright-ct.config.ts",
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import t from "../isFieldError.mjs";
|
|
2
|
-
import s from "../useFormErrorsMemo.mjs";
|
|
3
|
-
import i from "./getFlatFieldErrors.mjs";
|
|
4
|
-
const d = () => s(m), m = (r) => {
|
|
5
|
-
const e = i(r);
|
|
6
|
-
return Object.fromEntries(
|
|
7
|
-
Object.entries(e).filter(([, o]) => t(o))
|
|
8
|
-
);
|
|
9
|
-
};
|
|
10
|
-
export {
|
|
11
|
-
d as default,
|
|
12
|
-
m as getFlatFieldFormErrors
|
|
13
|
-
};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import r from "../../utils/isEmptyObject.mjs";
|
|
2
|
-
import t from "../flat/useRefdFieldErrorsMemo.mjs";
|
|
3
|
-
import m from "./useOrphanFormErrorsMemo.mjs";
|
|
4
|
-
const n = (o) => {
|
|
5
|
-
const s = m(o), e = t();
|
|
6
|
-
return r(s) ? !1 : !r(e);
|
|
7
|
-
}, d = n;
|
|
8
|
-
export {
|
|
9
|
-
d as default
|
|
10
|
-
};
|