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