@paragrav/rhf-utils 0.0.35 → 0.0.36

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 (29) hide show
  1. package/dist/esm/form/context/group/FormGroupContextProvider.mjs +30 -0
  2. package/dist/esm/form/context/group/index.mjs +11 -0
  3. package/dist/esm/form/context/group/useAsFormGroupParent.mjs +12 -0
  4. package/dist/esm/form/context/group/useFormGroupChildIsMountedTracker.mjs +16 -0
  5. package/dist/esm/form/context/group/useFormGroupChildIsSubmittingTracker.mjs +12 -0
  6. package/dist/esm/form/context/group/useFormGroupIsAnyBusy.mjs +8 -0
  7. package/dist/esm/form/context/group/useFormGroupIsChildBusy.mjs +8 -0
  8. package/dist/esm/form/context/group/useFormGroupIsParentBusy.mjs +8 -0
  9. package/dist/esm/form/useFormIsBusy.mjs +5 -6
  10. package/dist/esm/main.mjs +46 -38
  11. package/dist/types/errors/flat/types.d.ts +10 -0
  12. package/dist/types/errors/root/getRootFlatFieldErrors.d.ts +1 -1
  13. package/dist/types/form/Form.d.ts +3 -2
  14. package/dist/types/form/context/group/FormGroupContextProvider.d.ts +5 -0
  15. package/dist/types/form/context/group/index.d.ts +13 -0
  16. package/dist/types/form/context/group/useAsFormGroupParent.d.ts +7 -0
  17. package/dist/types/form/context/group/useFormGroupChildIsMountedTracker.d.ts +2 -0
  18. package/dist/types/form/context/group/useFormGroupChildIsSubmittingTracker.d.ts +2 -0
  19. package/dist/types/form/context/group/useFormGroupIsAnyBusy.d.ts +2 -0
  20. package/dist/types/form/context/group/useFormGroupIsChildBusy.d.ts +2 -0
  21. package/dist/types/form/context/group/useFormGroupIsParentBusy.d.ts +2 -0
  22. package/dist/types/form/useFormOrParentIsBusy.d.ts +2 -0
  23. package/dist/types/main.d.ts +7 -3
  24. package/dist/types/utils/useToggle.d.ts +4 -0
  25. package/package.json +26 -10
  26. package/dist/esm/form/context/parent/FormParentContextProvider.mjs +0 -10
  27. package/dist/esm/form/context/parent/index.mjs +0 -6
  28. package/dist/esm/form/context/parent/useAsFormParentState.mjs +0 -14
  29. package/dist/esm/form/context/parent/useFormParentIsBusy.mjs +0 -8
@@ -0,0 +1,30 @@
1
+ import { jsx as y } from "react/jsx-runtime";
2
+ import s from "react";
3
+ import { _FormGroupContextProvider as m } from "./index.mjs";
4
+ const B = ({ children: o }) => {
5
+ const [t, u] = s.useState([]), n = t.length, a = s.useCallback((e, l) => {
6
+ u(
7
+ (r) => l ? (
8
+ // add to array
9
+ [...r, e]
10
+ ) : (
11
+ // remove from array
12
+ r.filter((c) => c !== e)
13
+ )
14
+ );
15
+ }, []), [d, i] = s.useState(!1);
16
+ return /* @__PURE__ */ y(m, { value: {
17
+ children: {
18
+ busyCount: n,
19
+ busyIds: t,
20
+ setBusyId: a
21
+ },
22
+ parent: {
23
+ isBusy: d,
24
+ setIsBusy: i
25
+ }
26
+ }, children: o });
27
+ }, h = B;
28
+ export {
29
+ h as default
30
+ };
@@ -0,0 +1,11 @@
1
+ import o from "../../../utils/createContext.mjs";
2
+ const [
3
+ t,
4
+ e,
5
+ m
6
+ ] = o();
7
+ export {
8
+ m as _FormGroupContextProvider,
9
+ e as _useFormGroupContext,
10
+ t as _useFormGroupContextMaybe
11
+ };
@@ -0,0 +1,12 @@
1
+ import r from "react";
2
+ import t from "../../useFormIsBusy.mjs";
3
+ import { _useFormGroupContext as e } from "./index.mjs";
4
+ const u = () => {
5
+ const o = t(), { setIsBusy: s } = e().parent;
6
+ r.useEffect(() => {
7
+ s(o);
8
+ }, [s, o]);
9
+ }, a = u;
10
+ export {
11
+ a as default
12
+ };
@@ -0,0 +1,16 @@
1
+ import e from "react";
2
+ import { useFormContext as u } from "react-hook-form";
3
+ import { _useFormGroupContext as n } from "./index.mjs";
4
+ const c = () => {
5
+ u();
6
+ const { setBusyId: r } = n().children, t = e.useId();
7
+ e.useEffect(() => {
8
+ const o = (s) => {
9
+ r(t, s);
10
+ };
11
+ return o(!0), () => o(!1);
12
+ }, []);
13
+ }, i = c;
14
+ export {
15
+ i as default
16
+ };
@@ -0,0 +1,12 @@
1
+ import s from "react";
2
+ import { useFormState as e } from "react-hook-form";
3
+ import { _useFormGroupContext as i } from "./index.mjs";
4
+ const u = () => {
5
+ const { isSubmitting: t } = e(), { setBusyId: o } = i().children, r = s.useId();
6
+ s.useEffect(() => {
7
+ o(r, t);
8
+ }, [t, r, o]);
9
+ }, d = u;
10
+ export {
11
+ d as default
12
+ };
@@ -0,0 +1,8 @@
1
+ import { _useFormGroupContextMaybe as s } from "./index.mjs";
2
+ const r = () => {
3
+ const o = s();
4
+ return !!(o != null && o.children.busyCount) || !!(o != null && o.parent.isBusy);
5
+ }, e = r;
6
+ export {
7
+ e as default
8
+ };
@@ -0,0 +1,8 @@
1
+ import { _useFormGroupContextMaybe as r } from "./index.mjs";
2
+ const s = () => {
3
+ const o = r();
4
+ return !!(o != null && o.children.busyCount);
5
+ }, e = s;
6
+ export {
7
+ e as default
8
+ };
@@ -0,0 +1,8 @@
1
+ import { _useFormGroupContextMaybe as o } from "./index.mjs";
2
+ const s = () => {
3
+ const r = o();
4
+ return !!(r != null && r.parent.isBusy);
5
+ }, t = s;
6
+ export {
7
+ t as default
8
+ };
@@ -1,9 +1,8 @@
1
- import { useFormState as r } from "react-hook-form";
2
- import e from "./context/parent/useFormParentIsBusy.mjs";
3
- const m = () => {
4
- const { isSubmitting: t, isLoading: o } = r(), s = e();
5
- return !!(t || o || s);
1
+ import { useFormState as s } from "react-hook-form";
2
+ const r = () => {
3
+ const { isSubmitting: o, isLoading: t } = s();
4
+ return !!(o || t);
6
5
  };
7
6
  export {
8
- m as default
7
+ r as default
9
8
  };
package/dist/esm/main.mjs CHANGED
@@ -1,48 +1,56 @@
1
1
  import { default as e } from "./devtool/LazyDevTool.mjs";
2
2
  import { default as s } from "./errors/context/index.mjs";
3
- import { default as u } from "./errors/context/provider.mjs";
4
- import { default as m } from "./errors/message/FormErrorMessage.mjs";
3
+ import { default as a } from "./errors/context/provider.mjs";
4
+ import { default as f } from "./errors/message/FormErrorMessage.mjs";
5
5
  import { default as d } from "./errors/message/FormErrorMessageByPath.mjs";
6
- import { default as p } from "./errors/nonfield/FormNonFieldErrorMarker.mjs";
6
+ import { default as F } from "./errors/nonfield/FormNonFieldErrorMarker.mjs";
7
7
  import { default as n } from "./errors/nonfield/FormNonFieldErrorMarkerHtmlAttribute.mjs";
8
- import { default as i } from "./errors/orphan/useFormHasOrphanAndNoFieldErrors.mjs";
9
- import { default as b } from "./errors/orphan/useOrphanFormErrorsMemo.mjs";
10
- import { default as M } from "./errors/orphan/useOrphanFormErrorsToConsole.mjs";
11
- import { default as P } from "./errors/root/useRootFormFieldErrorsMemo.mjs";
12
- import { default as O } from "./errors/useFormErrorConsoleDebug.mjs";
13
- import { default as h } from "./errors/useFormErrorsEffect.mjs";
14
- import { default as R } from "./errors/useFormErrorsIfAny.mjs";
15
- import { default as B } from "./errors/useFormErrorsMemo.mjs";
16
- import { default as N } from "./errors/useFormRequestSubmit.mjs";
17
- import { default as H } from "./form/context/parent/FormParentContextProvider.mjs";
18
- import { default as T } from "./form/context/parent/useAsFormParentState.mjs";
19
- import { default as z } from "./form/context/parent/useFormParentIsBusy.mjs";
20
- import { default as j } from "./form/utils/getSubmitterButtonData.mjs";
21
- import { default as G } from "./submit/useFormOnSubmitSuccessful.mjs";
22
- import { default as K } from "./submit/useFormOnSubmitSuccessfulAndReset.mjs";
23
- import { default as U } from "./submit/useResetFormOnSubmitSuccessful.mjs";
8
+ import { default as E } from "./errors/orphan/useFormHasOrphanAndNoFieldErrors.mjs";
9
+ import { default as S } from "./errors/orphan/useOrphanFormErrorsMemo.mjs";
10
+ import { default as C } from "./errors/orphan/useOrphanFormErrorsToConsole.mjs";
11
+ import { default as h } from "./errors/root/useRootFormFieldErrorsMemo.mjs";
12
+ import { default as A } from "./errors/useFormErrorConsoleDebug.mjs";
13
+ import { default as I } from "./errors/useFormErrorsEffect.mjs";
14
+ import { default as B } from "./errors/useFormErrorsIfAny.mjs";
15
+ import { default as P } from "./errors/useFormErrorsMemo.mjs";
16
+ import { default as R } from "./errors/useFormRequestSubmit.mjs";
17
+ import { default as v } from "./form/context/group/FormGroupContextProvider.mjs";
18
+ import { default as N } from "./form/context/group/useAsFormGroupParent.mjs";
19
+ import { default as q } from "./form/context/group/useFormGroupChildIsMountedTracker.mjs";
20
+ import { default as L } from "./form/context/group/useFormGroupChildIsSubmittingTracker.mjs";
21
+ import { default as w } from "./form/context/group/useFormGroupIsAnyBusy.mjs";
22
+ import { default as K } from "./form/context/group/useFormGroupIsChildBusy.mjs";
23
+ import { default as U } from "./form/context/group/useFormGroupIsParentBusy.mjs";
24
+ import { default as W } from "./form/utils/getSubmitterButtonData.mjs";
25
+ import { default as Y } from "./submit/useFormOnSubmitSuccessful.mjs";
26
+ import { default as _ } from "./submit/useFormOnSubmitSuccessfulAndReset.mjs";
27
+ import { default as rr } from "./submit/useResetFormOnSubmitSuccessful.mjs";
24
28
  export {
25
- m as FormErrorMessage,
29
+ f as FormErrorMessage,
26
30
  d as FormErrorMessageByPath,
27
- u as FormErrorsFlatContextProvider,
28
- p as FormNonFieldErrorMarker,
31
+ a as FormErrorsFlatContextProvider,
32
+ v as FormGroupContextProvider,
33
+ F as FormNonFieldErrorMarker,
29
34
  n as FormNonFieldErrorMarkerHtmlAttribute,
30
- H as FormParentContextProvider,
31
35
  e as LazyDevTool,
32
- j as getSubmitterButtonData,
33
- T as useAsFormParentState,
34
- O as useFormErrorConsoleDebug,
35
- h as useFormErrorsEffect,
36
+ W as getSubmitterButtonData,
37
+ N as useAsFormGroupParent,
38
+ A as useFormErrorConsoleDebug,
39
+ I as useFormErrorsEffect,
36
40
  s as useFormErrorsFlatContext,
37
- R as useFormErrorsIfAny,
38
- B as useFormErrorsMemo,
39
- i as useFormHasOrphanAndNoFieldErrors,
40
- G as useFormOnSubmitSuccessful,
41
- K as useFormOnSubmitSuccessfulAndReset,
42
- z as useFormParentIsBusy,
43
- N as useFormRequestSubmit,
44
- b as useOrphanFormErrorsMemo,
45
- M as useOrphanFormErrorsToConsole,
46
- U as useResetFormAfterSubmitSuccessful,
47
- P as useRootFormFieldErrorsMemo
41
+ B as useFormErrorsIfAny,
42
+ P as useFormErrorsMemo,
43
+ q as useFormGroupChildIsMountedTracker,
44
+ L as useFormGroupChildIsSubmittingTracker,
45
+ w as useFormGroupIsAnyBusy,
46
+ K as useFormGroupIsChildBusy,
47
+ U as useFormGroupIsParentBusy,
48
+ E as useFormHasOrphanAndNoFieldErrors,
49
+ Y as useFormOnSubmitSuccessful,
50
+ _ as useFormOnSubmitSuccessfulAndReset,
51
+ R as useFormRequestSubmit,
52
+ S as useOrphanFormErrorsMemo,
53
+ C as useOrphanFormErrorsToConsole,
54
+ rr as useResetFormAfterSubmitSuccessful,
55
+ h as useRootFormFieldErrorsMemo
48
56
  };
@@ -1,3 +1,13 @@
1
1
  import { FieldError } from 'react-hook-form';
2
2
 
3
+ /**
4
+ * Flattened field errors object.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * {
9
+ * 'address.street': FieldError
10
+ * }
11
+ * ```
12
+ */
3
13
  export type FlatFieldErrors = Record<string, FieldError>;
@@ -2,7 +2,7 @@ import { FlatFieldErrors } from '../flat/types';
2
2
  import { FieldErrors } from 'react-hook-form';
3
3
 
4
4
  /**
5
- * Pending.
5
+ * Generate {@link FlatFieldErrors} object from {@link FieldErrors}.
6
6
  */
7
7
  declare const getRootFlatFieldErrors: (errors: FieldErrors) => FlatFieldErrors;
8
8
  export default getRootFlatFieldErrors;
@@ -1,7 +1,7 @@
1
1
  import { FormBaseProps } from './FormBase';
2
- import { LazyDevToolProps } from '../devtool/LazyDevTool';
3
2
  import { FieldValues, SubmitErrorHandler, UseFormReturn } from 'react-hook-form';
4
3
  import { default as React } from 'react';
4
+ import { DevtoolUIProps } from '@hookform/devtools/dist/devToolUI';
5
5
 
6
6
  export type FormProps<TFieldValues extends FieldValues, TTransformedValues extends FieldValues> = Omit<FormBaseProps, 'onSubmit'> & {
7
7
  isDev: boolean;
@@ -12,8 +12,9 @@ export type FormProps<TFieldValues extends FieldValues, TTransformedValues exten
12
12
  /** Submit handler when form is invalid. */
13
13
  onSubmitInvalid?: SubmitErrorHandler<TFieldValues>;
14
14
  options?: {
15
+ stopSubmitPropagation?: boolean;
15
16
  disableEmptyRootError?: boolean;
16
- devTool?: LazyDevToolProps | 'disabled';
17
+ devTool?: DevtoolUIProps | 'disabled';
17
18
  };
18
19
  className?: string;
19
20
  };
@@ -0,0 +1,5 @@
1
+ import { default as React } from 'react';
2
+
3
+ type Props = React.PropsWithChildren;
4
+ declare const FormGroupContextProvider: React.FC<Props>;
5
+ export default FormGroupContextProvider;
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ export type FormGroupContext = {
3
+ children: {
4
+ busyIds: string[];
5
+ busyCount: number;
6
+ setBusyId: (id: string, isBusy: boolean) => void;
7
+ };
8
+ parent: {
9
+ isBusy: boolean;
10
+ setIsBusy: (isBusy: boolean) => void;
11
+ };
12
+ };
13
+ export declare const _useFormGroupContextMaybe: () => FormGroupContext | undefined, _useFormGroupContext: () => FormGroupContext, _FormGroupContextProvider: import('react').Provider<FormGroupContext | undefined>;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Connect specific form state as parent context.
3
+ *
4
+ * Requires usage of provider.
5
+ */
6
+ declare const useAsFormGroupParent: () => void;
7
+ export default useAsFormGroupParent;
@@ -0,0 +1,2 @@
1
+ declare const useFormGroupChildIsMountedTracker: () => void;
2
+ export default useFormGroupChildIsMountedTracker;
@@ -0,0 +1,2 @@
1
+ declare const useFormGroupChildIsSubmittingTracker: () => void;
2
+ export default useFormGroupChildIsSubmittingTracker;
@@ -0,0 +1,2 @@
1
+ declare const useFormGroupIsAnyBusy: () => boolean;
2
+ export default useFormGroupIsAnyBusy;
@@ -0,0 +1,2 @@
1
+ declare const useFormGroupIsChildBusy: () => boolean;
2
+ export default useFormGroupIsChildBusy;
@@ -0,0 +1,2 @@
1
+ declare const useFormGroupIsParentBusy: () => boolean;
2
+ export default useFormGroupIsParentBusy;
@@ -0,0 +1,2 @@
1
+ declare const useFormOrParentIsBusy: () => boolean;
2
+ export default useFormOrParentIsBusy;
@@ -14,9 +14,13 @@ export { default as useFormErrorsEffect } from './errors/useFormErrorsEffect';
14
14
  export { default as useFormErrorsIfAny } from './errors/useFormErrorsIfAny';
15
15
  export { default as useFormErrorsMemo } from './errors/useFormErrorsMemo';
16
16
  export { default as useFormRequestSubmit } from './errors/useFormRequestSubmit';
17
- export { default as FormParentContextProvider } from './form/context/parent/FormParentContextProvider';
18
- export { default as useAsFormParentState } from './form/context/parent/useAsFormParentState';
19
- export { default as useFormParentIsBusy } from './form/context/parent/useFormParentIsBusy';
17
+ export { default as FormGroupContextProvider } from './form/context/group/FormGroupContextProvider';
18
+ export { default as useAsFormGroupParent } from './form/context/group/useAsFormGroupParent';
19
+ export { default as useFormGroupChildIsMountedTracker } from './form/context/group/useFormGroupChildIsMountedTracker';
20
+ export { default as useFormGroupChildIsSubmittingTracker } from './form/context/group/useFormGroupChildIsSubmittingTracker';
21
+ export { default as useFormGroupIsAnyBusy } from './form/context/group/useFormGroupIsAnyBusy';
22
+ export { default as useFormGroupIsChildBusy } from './form/context/group/useFormGroupIsChildBusy';
23
+ export { default as useFormGroupIsParentBusy } from './form/context/group/useFormGroupIsParentBusy';
20
24
  export { default as getSubmitterButtonData } from './form/utils/getSubmitterButtonData';
21
25
  export { default as useFormOnSubmitSuccessful } from './submit/useFormOnSubmitSuccessful';
22
26
  export { default as useFormOnSubmitSuccessfulAndReset } from './submit/useFormOnSubmitSuccessfulAndReset';
@@ -0,0 +1,4 @@
1
+ import { default as React } from 'react';
2
+
3
+ declare const useToggle: (defaultValue?: boolean) => [boolean, React.DispatchWithoutAction];
4
+ export default useToggle;
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.35",
5
+ "version": "0.0.36",
6
6
  "description": "Integration utilities for react-hook-form.",
7
7
  "type": "module",
8
8
  "sideEffects": false,
@@ -71,17 +71,33 @@
71
71
  "default": "./dist/esm/errors/root/useRootFormFieldErrors.mjs",
72
72
  "types": "./dist/types/errors/root/useRootFormFieldErrors.d.ts"
73
73
  },
74
- "./form/context/parent/FormParentContextProvider": {
75
- "default": "./dist/esm/form/context/parent/FormParentContextProvider.mjs",
76
- "types": "./dist/types/form/context/parent/FormParentContextProvider.d.ts"
74
+ "./form/context/group/FormGroupContextProvider": {
75
+ "default": "./dist/esm/form/context/group/FormGroupContextProvider.mjs",
76
+ "types": "./dist/types/form/context/group/FormGroupContextProvider.d.ts"
77
77
  },
78
- "./form/context/parent/useAsFormParentState": {
79
- "default": "./dist/esm/form/context/parent/useAsFormParentState.mjs",
80
- "types": "./dist/types/form/context/parent/useAsFormParentState.d.ts"
78
+ "./form/context/group/useAsFormGroupParent": {
79
+ "default": "./dist/esm/form/context/group/useAsFormGroupParent.mjs",
80
+ "types": "./dist/types/form/context/group/useAsFormGroupParent.d.ts"
81
81
  },
82
- "./form/context/parent/useFormParentIsBusy": {
83
- "default": "./dist/esm/form/context/parent/useFormParentIsBusy.mjs",
84
- "types": "./dist/types/form/context/parent/useFormParentIsBusy.d.ts"
82
+ "./form/context/group/useFormGroupChildIsSubmittingTracker": {
83
+ "default": "./dist/esm/form/context/group/useFormGroupChildIsSubmittingTracker.mjs",
84
+ "types": "./dist/types/form/context/group/useFormGroupChildIsSubmittingTracker.d.ts"
85
+ },
86
+ "./form/context/group/useFormGroupChildIsMountedTracker": {
87
+ "default": "./dist/esm/form/context/group/useFormGroupChildIsMountedTracker.mjs",
88
+ "types": "./dist/types/form/context/group/useFormGroupChildIsMountedTracker.d.ts"
89
+ },
90
+ "./form/context/group/useFormGroupIsAnyBusy": {
91
+ "default": "./dist/esm/form/context/group/useFormGroupIsAnyBusy.mjs",
92
+ "types": "./dist/types/form/context/group/useFormGroupIsAnyBusy.d.ts"
93
+ },
94
+ "./form/context/group/useFormGroupIsChildBusy": {
95
+ "default": "./dist/esm/form/context/group/useFormGroupIsChildBusy.mjs",
96
+ "types": "./dist/types/form/context/group/useFormGroupIsChildBusy.d.ts"
97
+ },
98
+ "./form/context/group/useFormGroupIsParentBusy": {
99
+ "default": "./dist/esm/form/context/group/useFormGroupIsParentBusy.mjs",
100
+ "types": "./dist/types/form/context/group/useFormGroupIsParentBusy.d.ts"
85
101
  },
86
102
  "./form/context/utils/getSubmitterButtonData": {
87
103
  "default": "./dist/esm/form/utils/getSubmitterButtonData.mjs",
@@ -1,10 +0,0 @@
1
- import { jsx as e } from "react/jsx-runtime";
2
- import s from "react";
3
- import { _FormParentContextProvider as n } from "./index.mjs";
4
- const a = ({ children: t }) => {
5
- const [r, o] = s.useState(!1);
6
- return /* @__PURE__ */ e(n, { value: { isBusy: r, setIsBusy: o }, children: t });
7
- }, P = a;
8
- export {
9
- P as default
10
- };
@@ -1,6 +0,0 @@
1
- import t from "../../../utils/createContext.mjs";
2
- const [o, , r] = t();
3
- export {
4
- r as _FormParentContextProvider,
5
- o as _useFormParentContext
6
- };
@@ -1,14 +0,0 @@
1
- import o from "react";
2
- import r from "../../useFormIsBusy.mjs";
3
- import { _useFormParentContext as s } from "./index.mjs";
4
- const n = () => {
5
- const e = r(), t = s();
6
- if (!t)
7
- throw new Error("Parent context is not provided.");
8
- o.useEffect(() => {
9
- t.setIsBusy(e);
10
- }, [t, e]);
11
- }, c = n;
12
- export {
13
- c as default
14
- };
@@ -1,8 +0,0 @@
1
- import { _useFormParentContext as t } from "./index.mjs";
2
- const e = () => {
3
- var s;
4
- return (s = t()) == null ? void 0 : s.isBusy;
5
- }, r = e;
6
- export {
7
- r as default
8
- };