@paragrav/rhf-utils 0.60.0 → 0.62.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/README.md +57 -96
- package/dist/dts/_exports/relay.d.ts +7 -8
- package/dist/dts/_exports/types.d.ts +1 -0
- package/dist/dts/client/config/RhfUtilsClientConfigType.d.ts +8 -4
- package/dist/dts/errors/flat/getFlatFieldErrors.d.ts +5 -1
- package/dist/dts/form/RhfUtilsFormComponentPropsType.d.ts +2 -6
- package/dist/dts/form/UseRhfUtilsFormChildrenPropsType.d.ts +2 -2
- package/dist/dts/form/context/utils/LastSubmitStateType.d.ts +1 -0
- package/dist/dts/form/context/utils/{RhfUtilsContextPropsType.d.ts → RhfUtilsContextType.d.ts} +3 -2
- package/dist/dts/form/context/utils/useRhfUtilsContext.d.ts +4 -4
- package/dist/dts/form/defaults/form/useRhfUtilsFormResolvedFormProps.d.ts +10 -10
- package/dist/dts/form/providers/RhfUtilsFormProviders.d.ts +1 -1
- package/dist/dts/form/providers/RhfUtilsFormProvidersPropsType.d.ts +2 -0
- package/dist/dts/form/relay/FormRelayOptions.d.ts +16 -0
- package/dist/dts/form/{state/relay/FormStateRelayContextProvider.d.ts → relay/context/FormRelayContextProvider.d.ts} +1 -1
- package/dist/dts/form/relay/context/useFormRelayContext.d.ts +12 -0
- package/dist/dts/form/relay/context/utils.d.ts +4 -0
- package/dist/dts/form/relay/get/FormRelayGroupType.d.ts +16 -0
- package/dist/dts/form/relay/get/grouper/context/hooks.d.ts +8 -0
- package/dist/dts/form/relay/get/grouper/context/index.d.ts +5 -0
- package/dist/dts/form/relay/get/grouper/context/provider.d.ts +9 -0
- package/dist/dts/form/relay/get/grouper/useFirstFormStateGroup.d.ts +9 -0
- package/dist/dts/form/relay/get/useFormRelay.d.ts +13 -0
- package/dist/dts/form/relay/set/FormRelaySetter.d.ts +6 -0
- package/dist/dts/form/relay/set/useFormRelaySet.d.ts +2 -0
- package/dist/dts/form/relay/types.d.ts +12 -0
- package/dist/dts/form/with-handlers-and-children/RhfUtilsFormProps.d.ts +5 -1
- package/dist/dts/form/with-handlers-and-children/_useHandleSubmit.d.ts +1 -1
- package/dist/dts/form/with-providers/RhfUtilsFormWithProviders.d.ts +1 -1
- package/dist/dts/submit/UseRhfUtilsFormOnSubmitContextType.d.ts +3 -3
- package/dist/dts/submit/last-error/useLastSubmitErrorContextWith.d.ts +1 -1
- package/dist/esm/FormRelaySetter.mjs +140 -0
- package/dist/esm/index.mjs +203 -202
- package/dist/esm/relay.mjs +71 -209
- package/package.json +17 -17
- package/dist/dts/form/RhfUtilsFormStateWithUtilsType.d.ts +0 -7
- package/dist/dts/form/state/relay/FormStateRelayedAggregatedType.d.ts +0 -10
- package/dist/dts/form/state/relay/FormStateRelayedItemType.d.ts +0 -11
- package/dist/dts/form/state/relay/FormStateRelayedOptionsType.d.ts +0 -20
- package/dist/dts/form/state/relay/FormStateRelayedType.d.ts +0 -3
- package/dist/dts/form/state/relay/pull/hooks.d.ts +0 -31
- package/dist/dts/form/state/relay/push/FormStateRelayPusher.d.ts +0 -4
- package/dist/dts/form/state/relay/push/useFormStateRelayPusher.d.ts +0 -3
- package/dist/dts/form/state/relay/useFormStateRelayContext.d.ts +0 -20
- package/dist/dts/form/state/relay/utils.d.ts +0 -4
- package/dist/esm/getFlatFieldErrors.mjs +0 -55
|
@@ -5,4 +5,4 @@ import { RhfUtilsFormWithProvidersProps } from './RhfUtilsFormWithProvidersProps
|
|
|
5
5
|
* Form providers (with utils) with immediate descendent {@link RhfUtilsForm}.
|
|
6
6
|
* (Syntactic sugar for {@link useRhfUtilsForm}. Use this for most applications.)
|
|
7
7
|
*/
|
|
8
|
-
export declare function RhfUtilsFormWithProviders<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>, TOnSubmitReturnType, TApiValues extends undefined | SafeFieldValues = TGetApiValues extends RhfUtilsFormPropsGetApiValues<TTransformedValues, infer U> ? U : undefined>({ getApiData, resolver, rhf, defaultValues, options, onCancel, onSubmitInvalid, onBeforeSubmitInvariants, onBeforeSubmit, onSubmit, onSubmitSuccess, onSubmitError, onSubmitFinally, Children, form, formId, className, }: RhfUtilsFormWithProvidersProps<TFieldValues, TTransformedValues, TGetApiValues, TOnSubmitReturnType, TApiValues>): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function RhfUtilsFormWithProviders<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>, TOnSubmitReturnType, TApiValues extends undefined | SafeFieldValues = TGetApiValues extends RhfUtilsFormPropsGetApiValues<TTransformedValues, infer U> ? U : undefined>({ getApiData, resolver, rhf, defaultValues, options, relay, onCancel, onSubmitInvalid, onBeforeSubmitInvariants, onBeforeSubmit, onSubmit, onSubmitSuccess, onSubmitError, onSubmitFinally, Children, form, formId, className, }: RhfUtilsFormWithProvidersProps<TFieldValues, TTransformedValues, TGetApiValues, TOnSubmitReturnType, TApiValues>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { UseFormReturn } from 'react-hook-form';
|
|
2
2
|
import { FormSubmitError } from './error/FormSubmitError';
|
|
3
3
|
import { FormSubmitFieldErrors } from './error/FormSubmitFieldErrors';
|
|
4
|
-
import {
|
|
4
|
+
import { RhfUtilsContext } from '../form/context/utils/RhfUtilsContextType';
|
|
5
5
|
import { SafeFieldValues } from '../form/rhf/SafeFieldValuesType';
|
|
6
6
|
/**
|
|
7
7
|
* Props for onSubmit other than `data` and `event`.
|
|
@@ -9,7 +9,7 @@ import { SafeFieldValues } from '../form/rhf/SafeFieldValuesType';
|
|
|
9
9
|
* Consider keeping shape in line with `UseRhfUtilsFormChildrenProps` and `UseRhfUtilsFormReturn`.
|
|
10
10
|
*/
|
|
11
11
|
export type UseRhfUtilsFormOnSubmitContext<TFieldValues extends SafeFieldValues = SafeFieldValues, TTransformedValues extends SafeFieldValues = TFieldValues, TApiValues extends undefined | SafeFieldValues = undefined> = {
|
|
12
|
-
utils:
|
|
12
|
+
utils: RhfUtilsContext;
|
|
13
13
|
rhf: UseFormReturn<TFieldValues, unknown, TTransformedValues>;
|
|
14
14
|
FormSubmitError: typeof FormSubmitError<TFieldValues, TApiValues>;
|
|
15
15
|
};
|
|
@@ -17,7 +17,7 @@ export type UseRhfUtilsFormOnSubmitContext<TFieldValues extends SafeFieldValues
|
|
|
17
17
|
* Props for onSubmitError other than `error` and `event`.
|
|
18
18
|
*/
|
|
19
19
|
export type UseRhfUtilsFormOnSubmitErrorContext<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues> = {
|
|
20
|
-
utils:
|
|
20
|
+
utils: RhfUtilsContext;
|
|
21
21
|
rhf: UseFormReturn<TFieldValues, unknown, TTransformedValues>;
|
|
22
22
|
errors?: FormSubmitFieldErrors;
|
|
23
23
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { MaybePromise } from '../../utils/types';
|
|
2
|
-
export declare const useLastSubmitErrorContextWith: (handleSubmit: (event: React.
|
|
2
|
+
export declare const useLastSubmitErrorContextWith: (handleSubmit: (event: React.SubmitEvent<HTMLFormElement>) => MaybePromise<unknown>) => (event: React.SubmitEvent<HTMLFormElement>) => Promise<unknown>;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { jsx as F } from "react/jsx-runtime";
|
|
2
|
+
import s from "react";
|
|
3
|
+
import { get as S, useFormState as R } from "react-hook-form";
|
|
4
|
+
import { flatten as b } from "flat";
|
|
5
|
+
function f() {
|
|
6
|
+
const e = s.createContext(void 0), r = () => s.useContext(e), t = () => {
|
|
7
|
+
const o = r();
|
|
8
|
+
if (o === void 0) throw new Error();
|
|
9
|
+
return o;
|
|
10
|
+
};
|
|
11
|
+
return {
|
|
12
|
+
Provider: e.Provider,
|
|
13
|
+
useMaybe: r,
|
|
14
|
+
useRequired: t
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const {
|
|
18
|
+
Provider: x,
|
|
19
|
+
useRequired: l
|
|
20
|
+
} = f(), k = ({ children: e }) => {
|
|
21
|
+
const [r, t] = s.useState({}), o = s.useCallback(
|
|
22
|
+
(n, a, c) => {
|
|
23
|
+
if (r[a.formId]) throw new Error("Form id already exists.");
|
|
24
|
+
t((u) => ({
|
|
25
|
+
...u,
|
|
26
|
+
[a.formId]: { state: n, utils: a, options: c }
|
|
27
|
+
}));
|
|
28
|
+
},
|
|
29
|
+
[r]
|
|
30
|
+
), m = s.useCallback(
|
|
31
|
+
(n, a) => {
|
|
32
|
+
t((c) => {
|
|
33
|
+
const u = c[n];
|
|
34
|
+
if (!u) throw new Error("Form id doesn't exist");
|
|
35
|
+
return {
|
|
36
|
+
...c,
|
|
37
|
+
[n]: { ...u, state: a }
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
[]
|
|
42
|
+
), i = s.useCallback((n) => {
|
|
43
|
+
t(
|
|
44
|
+
(a) => Object.fromEntries(
|
|
45
|
+
Object.entries(a).filter(([c]) => c !== n)
|
|
46
|
+
)
|
|
47
|
+
);
|
|
48
|
+
}, []);
|
|
49
|
+
return /* @__PURE__ */ F(
|
|
50
|
+
x,
|
|
51
|
+
{
|
|
52
|
+
value: {
|
|
53
|
+
// set
|
|
54
|
+
add: o,
|
|
55
|
+
update: m,
|
|
56
|
+
remove: i,
|
|
57
|
+
// get
|
|
58
|
+
state: r
|
|
59
|
+
},
|
|
60
|
+
children: e
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
}, {
|
|
64
|
+
Provider: I,
|
|
65
|
+
useRequired: d,
|
|
66
|
+
useMaybe: q
|
|
67
|
+
} = f(), U = (e) => Object.keys(e).length === 0, E = (e) => b(e), p = (e) => {
|
|
68
|
+
const r = E(e), t = Object.keys(r);
|
|
69
|
+
return Object.fromEntries(
|
|
70
|
+
t.reduce(
|
|
71
|
+
(o, m) => {
|
|
72
|
+
const i = m.replace(
|
|
73
|
+
v,
|
|
74
|
+
""
|
|
75
|
+
);
|
|
76
|
+
if (i === m) return o;
|
|
77
|
+
const n = S(e, i, void 0);
|
|
78
|
+
return n && o.push([i, n]), o;
|
|
79
|
+
},
|
|
80
|
+
[]
|
|
81
|
+
// entries
|
|
82
|
+
)
|
|
83
|
+
);
|
|
84
|
+
}, v = /\.(?:type|message)\b$/, C = (e) => Object.fromEntries(
|
|
85
|
+
Object.entries(p(e)).map(([r, t]) => [
|
|
86
|
+
r,
|
|
87
|
+
{
|
|
88
|
+
type: t.type,
|
|
89
|
+
message: t.message,
|
|
90
|
+
hasRef: !!t.ref
|
|
91
|
+
// strip out actual ref, etc. (avoid circular JSON error)
|
|
92
|
+
}
|
|
93
|
+
])
|
|
94
|
+
), O = (e) => {
|
|
95
|
+
if (!e) return;
|
|
96
|
+
const [r] = s.useState(e);
|
|
97
|
+
g(r), h(r);
|
|
98
|
+
}, g = (e) => {
|
|
99
|
+
const r = d(), t = l(), o = y(e);
|
|
100
|
+
s.useEffect(
|
|
101
|
+
() => (t.add(o, r, e), () => {
|
|
102
|
+
t.remove(r.formId);
|
|
103
|
+
}),
|
|
104
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
105
|
+
[]
|
|
106
|
+
);
|
|
107
|
+
}, h = (e) => {
|
|
108
|
+
const r = d(), t = l(), o = y(e);
|
|
109
|
+
s.useEffect(
|
|
110
|
+
// when form state changes, publish to relay context
|
|
111
|
+
() => {
|
|
112
|
+
t.update(r.formId, o);
|
|
113
|
+
},
|
|
114
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
115
|
+
[o]
|
|
116
|
+
);
|
|
117
|
+
}, y = (e) => {
|
|
118
|
+
const r = R(), t = e.select(r), o = JSON.stringify({
|
|
119
|
+
...t,
|
|
120
|
+
errors: t.errors && C(t.errors)
|
|
121
|
+
});
|
|
122
|
+
return s.useMemo(
|
|
123
|
+
// when watch JSON changes, update memo
|
|
124
|
+
() => t,
|
|
125
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
126
|
+
[o]
|
|
127
|
+
);
|
|
128
|
+
}, _ = ({ options: e }) => (O(e), null);
|
|
129
|
+
export {
|
|
130
|
+
k as F,
|
|
131
|
+
I as _,
|
|
132
|
+
_ as a,
|
|
133
|
+
l as b,
|
|
134
|
+
f as c,
|
|
135
|
+
q as d,
|
|
136
|
+
O as e,
|
|
137
|
+
p as g,
|
|
138
|
+
U as i,
|
|
139
|
+
d as u
|
|
140
|
+
};
|