@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.
Files changed (46) hide show
  1. package/README.md +57 -96
  2. package/dist/dts/_exports/relay.d.ts +7 -8
  3. package/dist/dts/_exports/types.d.ts +1 -0
  4. package/dist/dts/client/config/RhfUtilsClientConfigType.d.ts +8 -4
  5. package/dist/dts/errors/flat/getFlatFieldErrors.d.ts +5 -1
  6. package/dist/dts/form/RhfUtilsFormComponentPropsType.d.ts +2 -6
  7. package/dist/dts/form/UseRhfUtilsFormChildrenPropsType.d.ts +2 -2
  8. package/dist/dts/form/context/utils/LastSubmitStateType.d.ts +1 -0
  9. package/dist/dts/form/context/utils/{RhfUtilsContextPropsType.d.ts → RhfUtilsContextType.d.ts} +3 -2
  10. package/dist/dts/form/context/utils/useRhfUtilsContext.d.ts +4 -4
  11. package/dist/dts/form/defaults/form/useRhfUtilsFormResolvedFormProps.d.ts +10 -10
  12. package/dist/dts/form/providers/RhfUtilsFormProviders.d.ts +1 -1
  13. package/dist/dts/form/providers/RhfUtilsFormProvidersPropsType.d.ts +2 -0
  14. package/dist/dts/form/relay/FormRelayOptions.d.ts +16 -0
  15. package/dist/dts/form/{state/relay/FormStateRelayContextProvider.d.ts → relay/context/FormRelayContextProvider.d.ts} +1 -1
  16. package/dist/dts/form/relay/context/useFormRelayContext.d.ts +12 -0
  17. package/dist/dts/form/relay/context/utils.d.ts +4 -0
  18. package/dist/dts/form/relay/get/FormRelayGroupType.d.ts +16 -0
  19. package/dist/dts/form/relay/get/grouper/context/hooks.d.ts +8 -0
  20. package/dist/dts/form/relay/get/grouper/context/index.d.ts +5 -0
  21. package/dist/dts/form/relay/get/grouper/context/provider.d.ts +9 -0
  22. package/dist/dts/form/relay/get/grouper/useFirstFormStateGroup.d.ts +9 -0
  23. package/dist/dts/form/relay/get/useFormRelay.d.ts +13 -0
  24. package/dist/dts/form/relay/set/FormRelaySetter.d.ts +6 -0
  25. package/dist/dts/form/relay/set/useFormRelaySet.d.ts +2 -0
  26. package/dist/dts/form/relay/types.d.ts +12 -0
  27. package/dist/dts/form/with-handlers-and-children/RhfUtilsFormProps.d.ts +5 -1
  28. package/dist/dts/form/with-handlers-and-children/_useHandleSubmit.d.ts +1 -1
  29. package/dist/dts/form/with-providers/RhfUtilsFormWithProviders.d.ts +1 -1
  30. package/dist/dts/submit/UseRhfUtilsFormOnSubmitContextType.d.ts +3 -3
  31. package/dist/dts/submit/last-error/useLastSubmitErrorContextWith.d.ts +1 -1
  32. package/dist/esm/FormRelaySetter.mjs +140 -0
  33. package/dist/esm/index.mjs +203 -202
  34. package/dist/esm/relay.mjs +71 -209
  35. package/package.json +17 -17
  36. package/dist/dts/form/RhfUtilsFormStateWithUtilsType.d.ts +0 -7
  37. package/dist/dts/form/state/relay/FormStateRelayedAggregatedType.d.ts +0 -10
  38. package/dist/dts/form/state/relay/FormStateRelayedItemType.d.ts +0 -11
  39. package/dist/dts/form/state/relay/FormStateRelayedOptionsType.d.ts +0 -20
  40. package/dist/dts/form/state/relay/FormStateRelayedType.d.ts +0 -3
  41. package/dist/dts/form/state/relay/pull/hooks.d.ts +0 -31
  42. package/dist/dts/form/state/relay/push/FormStateRelayPusher.d.ts +0 -4
  43. package/dist/dts/form/state/relay/push/useFormStateRelayPusher.d.ts +0 -3
  44. package/dist/dts/form/state/relay/useFormStateRelayContext.d.ts +0 -20
  45. package/dist/dts/form/state/relay/utils.d.ts +0 -4
  46. 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 { RhfUtilsContextProps } from '../form/context/utils/RhfUtilsContextPropsType';
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: RhfUtilsContextProps;
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: RhfUtilsContextProps;
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.FormEvent<HTMLFormElement>) => MaybePromise<unknown>) => (event: React.FormEvent<HTMLFormElement>) => Promise<unknown>;
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
+ };