@refinedev/react-hook-form 4.8.14 → 4.8.16

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 (41) hide show
  1. package/dist/index.cjs +3 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +4 -0
  4. package/dist/index.d.cts.map +1 -0
  5. package/dist/index.d.mts +4 -0
  6. package/dist/index.d.mts.map +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.mjs +3 -0
  9. package/dist/index.mjs.map +1 -0
  10. package/dist/useForm/index.d.cts +30 -0
  11. package/dist/useForm/index.d.cts.map +1 -0
  12. package/dist/useForm/index.d.mts +30 -0
  13. package/dist/useForm/index.d.mts.map +1 -0
  14. package/dist/useForm/index.d.ts +2 -2
  15. package/dist/useForm/index.d.ts.map +1 -1
  16. package/dist/useModalForm/index.d.cts +35 -0
  17. package/dist/useModalForm/index.d.cts.map +1 -0
  18. package/dist/useModalForm/index.d.mts +35 -0
  19. package/dist/useModalForm/index.d.mts.map +1 -0
  20. package/dist/useModalForm/index.d.ts +15 -15
  21. package/dist/useModalForm/index.d.ts.map +1 -1
  22. package/dist/useStepsForm/index.d.cts +28 -0
  23. package/dist/useStepsForm/index.d.cts.map +1 -0
  24. package/dist/useStepsForm/index.d.mts +28 -0
  25. package/dist/useStepsForm/index.d.mts.map +1 -0
  26. package/dist/useStepsForm/index.d.ts +12 -12
  27. package/dist/useStepsForm/index.d.ts.map +1 -1
  28. package/package.json +49 -35
  29. package/src/index.ts +6 -6
  30. package/src/useForm/index.spec.tsx +211 -224
  31. package/src/useForm/index.ts +229 -229
  32. package/src/useModalForm/index.spec.ts +243 -243
  33. package/src/useModalForm/index.ts +256 -265
  34. package/src/useStepsForm/index.spec.ts +103 -107
  35. package/src/useStepsForm/index.ts +127 -119
  36. package/dist/esm/index.js +0 -3
  37. package/dist/esm/index.js.map +0 -1
  38. package/dist/iife/index.js +0 -72
  39. package/dist/iife/index.js.map +0 -1
  40. package/dist/index.js +0 -3
  41. package/dist/index.js.map +0 -1
@@ -6,127 +6,123 @@ import { useStepsForm } from "./";
6
6
  import * as UseForm from "../useForm";
7
7
 
8
8
  describe("useStepsForm Hook", () => {
9
- it("'defaultStep' props should set the initial value of 'currentStep'", async () => {
10
- const { result } = renderHook(
11
- () =>
12
- useStepsForm({
13
- stepsProps: {
14
- defaultStep: 4,
15
- },
16
- }),
17
- {
18
- wrapper: TestWrapper({}),
19
- },
20
- );
21
- expect(result.current.steps.currentStep).toBe(4);
22
- });
9
+ it("'defaultStep' props should set the initial value of 'currentStep'", async () => {
10
+ const { result } = renderHook(
11
+ () =>
12
+ useStepsForm({
13
+ stepsProps: {
14
+ defaultStep: 4,
15
+ },
16
+ }),
17
+ {
18
+ wrapper: TestWrapper({}),
19
+ },
20
+ );
21
+ expect(result.current.steps.currentStep).toBe(4);
22
+ });
23
23
 
24
- it("'goToStep' should update the current step state", async () => {
25
- const { result } = renderHook(() => useStepsForm({}), {
26
- wrapper: TestWrapper({}),
27
- });
28
- await act(async () => {
29
- result.current.steps.gotoStep(1);
30
- });
31
- expect(result.current.steps.currentStep).toBe(1);
24
+ it("'goToStep' should update the current step state", async () => {
25
+ const { result } = renderHook(() => useStepsForm({}), {
26
+ wrapper: TestWrapper({}),
32
27
  });
28
+ await act(async () => {
29
+ result.current.steps.gotoStep(1);
30
+ });
31
+ expect(result.current.steps.currentStep).toBe(1);
32
+ });
33
33
 
34
- it("'currentStep' should be 0 when the 'goToSteps' params less than zero", async () => {
35
- const { result } = renderHook(() => useStepsForm({}), {
36
- wrapper: TestWrapper({}),
37
- });
38
- await act(async () => {
39
- result.current.steps.gotoStep(-7);
40
- });
41
- expect(result.current.steps.currentStep).toBe(0);
34
+ it("'currentStep' should be 0 when the 'goToSteps' params less than zero", async () => {
35
+ const { result } = renderHook(() => useStepsForm({}), {
36
+ wrapper: TestWrapper({}),
37
+ });
38
+ await act(async () => {
39
+ result.current.steps.gotoStep(-7);
42
40
  });
41
+ expect(result.current.steps.currentStep).toBe(0);
42
+ });
43
43
 
44
- it("'currentStep' should be 0 when the 'goToSteps' params less than zero", async () => {
45
- const { result } = renderHook(() => useStepsForm({}), {
46
- wrapper: TestWrapper({}),
47
- });
48
- await act(async () => {
49
- result.current.steps.gotoStep(-7);
50
- });
51
- expect(result.current.steps.currentStep).toBe(0);
44
+ it("'currentStep' should be 0 when the 'goToSteps' params less than zero", async () => {
45
+ const { result } = renderHook(() => useStepsForm({}), {
46
+ wrapper: TestWrapper({}),
52
47
  });
48
+ await act(async () => {
49
+ result.current.steps.gotoStep(-7);
50
+ });
51
+ expect(result.current.steps.currentStep).toBe(0);
52
+ });
53
53
 
54
- it("'currentStep' should not update when the 'goToSteps' params equal to the 'currentStep'", async () => {
55
- const { result } = renderHook(
56
- () =>
57
- useStepsForm({
58
- stepsProps: {
59
- defaultStep: 2,
60
- },
61
- }),
62
- {
63
- wrapper: TestWrapper({}),
64
- },
65
- );
66
- await act(async () => {
67
- result.current.steps.gotoStep(2);
68
- });
69
- expect(result.current.steps.currentStep).toBe(2);
54
+ it("'currentStep' should not update when the 'goToSteps' params equal to the 'currentStep'", async () => {
55
+ const { result } = renderHook(
56
+ () =>
57
+ useStepsForm({
58
+ stepsProps: {
59
+ defaultStep: 2,
60
+ },
61
+ }),
62
+ {
63
+ wrapper: TestWrapper({}),
64
+ },
65
+ );
66
+ await act(async () => {
67
+ result.current.steps.gotoStep(2);
70
68
  });
69
+ expect(result.current.steps.currentStep).toBe(2);
70
+ });
71
71
 
72
- it.each([
73
- {
74
- mockDirtyFields: {},
75
- },
76
- {
77
- mockDirtyFields: { field2: true },
78
- },
79
- ])(
80
- "should call setValue with correct data according to dirty fields",
81
- async (scenario) => {
82
- const mockData = { field1: "field1", field2: "field2" };
83
- const mockDirtyFields = scenario.mockDirtyFields;
84
- const setValue = jest.fn();
85
- const getValues = () => mockData;
72
+ it.each([
73
+ {
74
+ mockDirtyFields: {},
75
+ },
76
+ {
77
+ mockDirtyFields: { field2: true },
78
+ },
79
+ ])(
80
+ "should call setValue with correct data according to dirty fields",
81
+ async (scenario) => {
82
+ const mockData = { field1: "field1", field2: "field2" };
83
+ const mockDirtyFields = scenario.mockDirtyFields;
84
+ const setValue = jest.fn();
85
+ const getValues = () => mockData;
86
86
 
87
- (jest.spyOn(UseForm, "useForm") as jest.Mock).mockReturnValueOnce({
88
- setValue,
89
- getValues,
90
- formState: { dirtyFields: mockDirtyFields },
91
- refineCore: { queryResult: { data: { data: mockData } } },
92
- });
87
+ (jest.spyOn(UseForm, "useForm") as jest.Mock).mockReturnValueOnce({
88
+ setValue,
89
+ getValues,
90
+ formState: { dirtyFields: mockDirtyFields },
91
+ refineCore: { queryResult: { data: { data: mockData } } },
92
+ });
93
93
 
94
- const { result } = renderHook(
95
- () =>
96
- useStepsForm({
97
- stepsProps: {
98
- defaultStep: 1,
99
- },
100
- }),
101
- {
102
- wrapper: TestWrapper({}),
103
- },
104
- );
94
+ const { result } = renderHook(
95
+ () =>
96
+ useStepsForm({
97
+ stepsProps: {
98
+ defaultStep: 1,
99
+ },
100
+ }),
101
+ {
102
+ wrapper: TestWrapper({}),
103
+ },
104
+ );
105
105
 
106
- await waitFor(() => {
107
- expect(!result.current.refineCore.formLoading).toBeTruthy();
108
- });
106
+ await waitFor(() => {
107
+ expect(!result.current.refineCore.formLoading).toBeTruthy();
108
+ });
109
109
 
110
- expect(result.current.refineCore.queryResult?.data?.data).toEqual(
111
- mockData,
112
- );
110
+ expect(result.current.refineCore.queryResult?.data?.data).toEqual(
111
+ mockData,
112
+ );
113
113
 
114
- const setValueCallTimes =
115
- Object.keys(mockData).length -
116
- Object.keys(mockDirtyFields).length;
117
- expect(setValue).toHaveBeenCalledTimes(setValueCallTimes);
114
+ const setValueCallTimes =
115
+ Object.keys(mockData).length - Object.keys(mockDirtyFields).length;
116
+ expect(setValue).toHaveBeenCalledTimes(setValueCallTimes);
118
117
 
119
- Object.keys(mockData).forEach((key) => {
120
- const keyName = key as keyof typeof mockData &
121
- keyof typeof mockDirtyFields;
118
+ Object.keys(mockData).forEach((key) => {
119
+ const keyName = key as keyof typeof mockData &
120
+ keyof typeof mockDirtyFields;
122
121
 
123
- if (!mockDirtyFields[keyName]) {
124
- expect(setValue).toHaveBeenCalledWith(
125
- key,
126
- mockData[keyName],
127
- );
128
- }
129
- });
130
- },
131
- );
122
+ if (!mockDirtyFields[keyName]) {
123
+ expect(setValue).toHaveBeenCalledWith(key, mockData[keyName]);
124
+ }
125
+ });
126
+ },
127
+ );
132
128
  });
@@ -1,50 +1,51 @@
1
1
  import { useEffect, useState } from "react";
2
2
  import { FieldValues, Path } from "react-hook-form";
3
3
  import { BaseRecord, HttpError } from "@refinedev/core";
4
+ import get from "lodash/get";
4
5
 
5
6
  import { useForm, UseFormProps, UseFormReturnType } from "../useForm";
6
7
 
7
8
  export type UseStepsFormReturnType<
8
- TQueryFnData extends BaseRecord = BaseRecord,
9
- TError extends HttpError = HttpError,
10
- TVariables extends FieldValues = FieldValues,
11
- TContext extends object = {},
12
- TData extends BaseRecord = TQueryFnData,
13
- TResponse extends BaseRecord = TData,
14
- TResponseError extends HttpError = TError,
9
+ TQueryFnData extends BaseRecord = BaseRecord,
10
+ TError extends HttpError = HttpError,
11
+ TVariables extends FieldValues = FieldValues,
12
+ TContext extends object = {},
13
+ TData extends BaseRecord = TQueryFnData,
14
+ TResponse extends BaseRecord = TData,
15
+ TResponseError extends HttpError = TError,
15
16
  > = UseFormReturnType<
16
- TQueryFnData,
17
- TError,
18
- TVariables,
19
- TContext,
20
- TData,
21
- TResponse,
22
- TResponseError
17
+ TQueryFnData,
18
+ TError,
19
+ TVariables,
20
+ TContext,
21
+ TData,
22
+ TResponse,
23
+ TResponseError
23
24
  > & {
24
- steps: {
25
- currentStep: number;
26
- gotoStep: (step: number) => void;
27
- };
25
+ steps: {
26
+ currentStep: number;
27
+ gotoStep: (step: number) => void;
28
+ };
28
29
  };
29
30
 
30
31
  export type UseStepsFormProps<
31
- TQueryFnData extends BaseRecord = BaseRecord,
32
- TError extends HttpError = HttpError,
33
- TVariables extends FieldValues = FieldValues,
34
- TContext extends object = {},
35
- TData extends BaseRecord = TQueryFnData,
36
- TResponse extends BaseRecord = TData,
37
- TResponseError extends HttpError = TError,
32
+ TQueryFnData extends BaseRecord = BaseRecord,
33
+ TError extends HttpError = HttpError,
34
+ TVariables extends FieldValues = FieldValues,
35
+ TContext extends object = {},
36
+ TData extends BaseRecord = TQueryFnData,
37
+ TResponse extends BaseRecord = TData,
38
+ TResponseError extends HttpError = TError,
38
39
  > = UseFormProps<
39
- TQueryFnData,
40
- TError,
41
- TVariables,
42
- TContext,
43
- TData,
44
- TResponse,
45
- TResponseError
40
+ TQueryFnData,
41
+ TError,
42
+ TVariables,
43
+ TContext,
44
+ TData,
45
+ TResponse,
46
+ TResponseError
46
47
  > & {
47
- /**
48
+ /**
48
49
  * @description Configuration object for the steps.
49
50
  * `defaultStep`: Allows you to set the initial step.
50
51
  *
@@ -55,32 +56,44 @@ export type UseStepsFormProps<
55
56
  }`
56
57
  * @default `defaultStep = 0` `isBackValidate = false`
57
58
  */
58
- stepsProps?: {
59
- defaultStep?: number;
60
- isBackValidate?: boolean;
61
- };
59
+ stepsProps?: {
60
+ defaultStep?: number;
61
+ isBackValidate?: boolean;
62
+ };
62
63
  };
63
64
 
64
65
  export const useStepsForm = <
65
- TQueryFnData extends BaseRecord = BaseRecord,
66
- TError extends HttpError = HttpError,
67
- TVariables extends FieldValues = FieldValues,
68
- TContext extends object = {},
69
- TData extends BaseRecord = TQueryFnData,
70
- TResponse extends BaseRecord = TData,
71
- TResponseError extends HttpError = TError,
66
+ TQueryFnData extends BaseRecord = BaseRecord,
67
+ TError extends HttpError = HttpError,
68
+ TVariables extends FieldValues = FieldValues,
69
+ TContext extends object = {},
70
+ TData extends BaseRecord = TQueryFnData,
71
+ TResponse extends BaseRecord = TData,
72
+ TResponseError extends HttpError = TError,
72
73
  >({
73
- stepsProps,
74
- ...rest
74
+ stepsProps,
75
+ ...rest
75
76
  }: UseStepsFormProps<
76
- TQueryFnData,
77
- TError,
78
- TVariables,
79
- TContext,
80
- TData,
81
- TResponse,
82
- TResponseError
77
+ TQueryFnData,
78
+ TError,
79
+ TVariables,
80
+ TContext,
81
+ TData,
82
+ TResponse,
83
+ TResponseError
83
84
  > = {}): UseStepsFormReturnType<
85
+ TQueryFnData,
86
+ TError,
87
+ TVariables,
88
+ TContext,
89
+ TData,
90
+ TResponse,
91
+ TResponseError
92
+ > => {
93
+ const { defaultStep = 0, isBackValidate = false } = stepsProps ?? {};
94
+ const [current, setCurrent] = useState(defaultStep);
95
+
96
+ const useHookFormResult = useForm<
84
97
  TQueryFnData,
85
98
  TError,
86
99
  TVariables,
@@ -88,77 +101,72 @@ export const useStepsForm = <
88
101
  TData,
89
102
  TResponse,
90
103
  TResponseError
91
- > => {
92
- const { defaultStep = 0, isBackValidate = false } = stepsProps ?? {};
93
- const [current, setCurrent] = useState(defaultStep);
94
-
95
- const useHookFormResult = useForm<
96
- TQueryFnData,
97
- TError,
98
- TVariables,
99
- TContext,
100
- TData,
101
- TResponse,
102
- TResponseError
103
- >({
104
- ...rest,
104
+ >({
105
+ ...rest,
106
+ });
107
+
108
+ const {
109
+ trigger,
110
+ getValues,
111
+ setValue,
112
+ formState: { dirtyFields },
113
+ refineCore: { queryResult },
114
+ } = useHookFormResult;
115
+
116
+ useEffect(() => {
117
+ const data = queryResult?.data?.data;
118
+ if (!data) return;
119
+
120
+ const registeredFields = Object.keys(getValues());
121
+
122
+ console.log({
123
+ dirtyFields,
124
+ registeredFields,
125
+ data,
105
126
  });
106
127
 
107
- const {
108
- trigger,
109
- getValues,
110
- setValue,
111
- formState: { dirtyFields },
112
- refineCore: { queryResult },
113
- } = useHookFormResult;
114
-
115
- useEffect(() => {
116
- const data = queryResult?.data?.data;
117
- if (!data) return;
118
-
119
- const registeredFields = Object.keys(getValues());
120
- Object.entries(data).forEach(([key, value]) => {
121
- const name = key as Path<TVariables>;
122
-
123
- if (registeredFields.includes(name)) {
124
- if (!dirtyFields[name]) {
125
- setValue(name, value);
126
- }
127
- }
128
- });
129
- }, [queryResult?.data, current, setValue, getValues]);
130
-
131
- const go = (step: number) => {
132
- let targetStep = step;
133
-
134
- if (step < 0) {
135
- targetStep = 0;
128
+ Object.entries(data).forEach(([key, value]) => {
129
+ const name = key as Path<TVariables>;
130
+
131
+ if (registeredFields.includes(name)) {
132
+ if (!get(dirtyFields, name)) {
133
+ setValue(name, value);
136
134
  }
135
+ }
136
+ });
137
+ }, [queryResult?.data, current, setValue, getValues]);
137
138
 
138
- setCurrent(targetStep);
139
- };
139
+ const go = (step: number) => {
140
+ let targetStep = step;
140
141
 
141
- const gotoStep = async (step: number) => {
142
- if (step === current) {
143
- return;
144
- }
142
+ if (step < 0) {
143
+ targetStep = 0;
144
+ }
145
145
 
146
- if (step < current && !isBackValidate) {
147
- go(step);
148
- return;
149
- }
146
+ setCurrent(targetStep);
147
+ };
150
148
 
151
- const isValid = await trigger();
152
- if (isValid) {
153
- go(step);
154
- }
155
- };
156
-
157
- return {
158
- ...useHookFormResult,
159
- steps: {
160
- currentStep: current,
161
- gotoStep,
162
- },
163
- };
149
+ const gotoStep = async (step: number) => {
150
+ if (step === current) {
151
+ return;
152
+ }
153
+
154
+ if (step < current && !isBackValidate) {
155
+ go(step);
156
+ return;
157
+ }
158
+
159
+ const isValid = await trigger();
160
+ if (isValid) {
161
+ go(step);
162
+ }
163
+ };
164
+
165
+ return {
166
+ ...useHookFormResult,
167
+ steps: {
168
+ currentStep: current,
169
+ gotoStep,
170
+ },
171
+ };
164
172
  };
package/dist/esm/index.js DELETED
@@ -1,3 +0,0 @@
1
- "use client"
2
- var L=Object.defineProperty;var m=(t,a)=>L(t,"name",{value:a,configurable:!0});import{useEffect as Y}from"react";import ee from"lodash-es/get";import te from"lodash-es/has";import{useForm as re}from"react-hook-form";import{useForm as se,useWarnAboutChange as ae,useTranslate as oe,useRefineContext as ne,flattenObjectKeys as z}from"@refinedev/core";var C=m(({refineCoreProps:t,warnWhenUnsavedChanges:a,disableServerSideValidation:p=!1,...Q}={})=>{let{options:F}=ne(),S=(F==null?void 0:F.disableServerSideValidation)||p,U=oe(),{warnWhenUnsavedChanges:h,setWarnWhen:b}=ae(),f=a??h,d=re({...Q}),{watch:c,setValue:R,getValues:i,handleSubmit:T,setError:x}=d,E=se({...t,onMutationError:(r,s,e)=>{var v,H;if(S){(v=t==null?void 0:t.onMutationError)==null||v.call(t,r,s,e);return}let y=r==null?void 0:r.errors;for(let V in y){if(!Object.keys(z(s)).includes(V))continue;let u=y[V],D="";Array.isArray(u)&&(D=u.join(" ")),typeof u=="string"&&(D=u),typeof u=="boolean"&&u&&(D="Field is not valid."),typeof u=="object"&&"key"in u&&(D=U(u.key,u.message)),x(V,{message:D})}(H=t==null?void 0:t.onMutationError)==null||H.call(t,r,s,e)}}),{queryResult:l,onFinish:o,formLoading:B,onFinishAutoSave:j}=E;Y(()=>{var e;let r=(e=l==null?void 0:l.data)==null?void 0:e.data;if(!r)return;Object.keys(z(i())).forEach(y=>{let v=te(r,y),H=ee(r,y);v&&R(y,H)})},[l==null?void 0:l.data,R,i]),Y(()=>{let r=c((s,{type:e})=>{e==="change"&&W(s)});return()=>r.unsubscribe()},[c]);let W=m(r=>{var s;if(f&&b(!0),t!=null&&t.autoSave){b(!1);let e=(s=t.autoSave)==null?void 0:s.onFinish;return j(e?e(r):r)}return r},"onValuesChange"),g=m((r,s)=>async e=>(b(!1),T(r,s)(e)),"handleSubmit");return{...d,handleSubmit:g,refineCore:E,saveButtonProps:{disabled:B,onClick:r=>{g(o,()=>!1)(r)}}}},"useForm");import{useEffect as de,useState as Te}from"react";var ie=m(({stepsProps:t,...a}={})=>{let{defaultStep:p=0,isBackValidate:Q=!1}=t??{},[F,S]=Te(p),U=C({...a}),{trigger:h,getValues:b,setValue:f,formState:{dirtyFields:d},refineCore:{queryResult:c}}=U;de(()=>{var E;let T=(E=c==null?void 0:c.data)==null?void 0:E.data;if(!T)return;let x=Object.keys(b());Object.entries(T).forEach(([l,o])=>{let B=l;x.includes(B)&&(d[B]||f(B,o))})},[c==null?void 0:c.data,F,f,b]);let R=m(T=>{let x=T;T<0&&(x=0),S(x)},"go");return{...U,steps:{currentStep:F,gotoStep:m(async T=>{if(T===F)return;if(T<F&&!Q){R(T);return}await h()&&R(T)},"gotoStep")}}},"useStepsForm");import{useCallback as J}from"react";import{useGo as le,useModal as ue,useParsed as pe,useResource as ce,useUserFriendlyName as me,useTranslate as Fe,useWarnAboutChange as Re,useInvalidate as Ee}from"@refinedev/core";import P from"react";var xe=m(({modalProps:t,refineCoreProps:a,syncWithLocation:p,...Q}={})=>{var A,N;let F=Ee(),[S,U]=P.useState(!1),h=Fe(),{resource:b,action:f}=a??{},{resource:d,action:c,identifier:R}=ce(b),i=pe(),T=le(),x=me(),E=f??c??"",l=!(typeof p=="object"&&(p==null?void 0:p.syncId)===!1),o=typeof p=="object"&&"key"in p?p.key:d&&E&&p?`modal-${R}-${E}`:void 0,{defaultVisible:B=!1,autoSubmitClose:j=!0,autoResetForm:W=!0}=t??{},g=C({refineCoreProps:{...a,meta:{...o?{[o]:void 0}:{},...a==null?void 0:a.meta}},...Q}),{reset:$,refineCore:{onFinish:r,id:s,setId:e,autoSaveProps:y},saveButtonProps:v,handleSubmit:H}=g,{visible:V,show:k,close:u}=ue({defaultVisible:B});P.useEffect(()=>{var n,w,K,I;if(S===!1&&o){let M=(w=(n=i==null?void 0:i.params)==null?void 0:n[o])==null?void 0:w.open;if(typeof M=="boolean"?M&&k():typeof M=="string"&&M==="true"&&k(),l){let G=(I=(K=i==null?void 0:i.params)==null?void 0:K[o])==null?void 0:I.id;G&&(e==null||e(G))}U(!0)}},[o,i,l,e]),P.useEffect(()=>{var n;S===!0&&(V&&o?T({query:{[o]:{...(n=i==null?void 0:i.params)==null?void 0:n[o],open:!0,...l&&s&&{id:s}}},options:{keepQuery:!0},type:"replace"}):o&&!V&&T({query:{[o]:void 0},options:{keepQuery:!0},type:"replace"}))},[s,V,k,o,l]);let D=m(async n=>{await r(n),j&&u(),W&&$()},"submit"),{warnWhen:O,setWarnWhen:X}=Re(),Z=J(()=>{var n;if(y.status==="success"&&((n=a==null?void 0:a.autoSave)!=null&&n.invalidateOnClose)&&F({id:s,invalidates:a.invalidates||["list","many","detail"],dataProviderName:a.dataProviderName,resource:R}),O)if(window.confirm(h("warnWhenUnsavedChanges","Are you sure you want to leave? You have unsaved changes.")))X(!1);else return;e==null||e(void 0),u()},[O,y.status]),_=J(n=>{typeof n<"u"&&(e==null||e(n)),(!(E==="edit"||E==="clone")||(typeof n<"u"||typeof s<"u"))&&k()},[s]),q=h(`${R}.titles.${f}`,void 0,`${x(`${f} ${((A=d==null?void 0:d.meta)==null?void 0:A.label)??((N=d==null?void 0:d.options)==null?void 0:N.label)??(d==null?void 0:d.label)??R}`,"singular")}`);return{modal:{submit:D,close:Z,show:_,visible:V,title:q},...g,saveButtonProps:{...v,onClick:n=>H(D)(n)}}},"useModalForm");export{C as useForm,xe as useModalForm,ie as useStepsForm};
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/useForm/index.ts","../../src/useStepsForm/index.ts","../../src/useModalForm/index.ts"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport get from \"lodash-es/get\";\nimport has from \"lodash-es/has\";\n\nimport {\n useForm as useHookForm,\n UseFormProps as UseHookFormProps,\n UseFormReturn,\n FieldValues,\n UseFormHandleSubmit,\n Path,\n} from \"react-hook-form\";\nimport {\n BaseRecord,\n HttpError,\n useForm as useFormCore,\n useWarnAboutChange,\n UseFormProps as UseFormCoreProps,\n UseFormReturnType as UseFormReturnTypeCore,\n useTranslate,\n useRefineContext,\n flattenObjectKeys,\n} from \"@refinedev/core\";\n\nexport type UseFormReturnType<\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables extends FieldValues = FieldValues,\n TContext extends object = {},\n TData extends BaseRecord = TQueryFnData,\n TResponse extends BaseRecord = TData,\n TResponseError extends HttpError = TError,\n> = UseFormReturn<TVariables, TContext> & {\n refineCore: UseFormReturnTypeCore<\n TQueryFnData,\n TError,\n TVariables,\n TData,\n TResponse,\n TResponseError\n >;\n saveButtonProps: {\n disabled: boolean;\n onClick: (e: React.BaseSyntheticEvent) => void;\n };\n};\n\nexport type UseFormProps<\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables extends FieldValues = FieldValues,\n TContext extends object = {},\n TData extends BaseRecord = TQueryFnData,\n TResponse extends BaseRecord = TData,\n TResponseError extends HttpError = TError,\n> = {\n /**\n * Configuration object for the core of the [useForm](/docs/api-reference/core/hooks/useForm/)\n * @type [`UseFormCoreProps<TQueryFnData, TError, TVariables, TData, TResponse, TResponseError>`](/docs/api-reference/core/hooks/useForm/#properties)\n */\n refineCoreProps?: UseFormCoreProps<\n TQueryFnData,\n TError,\n TVariables,\n TData,\n TResponse,\n TResponseError\n >;\n /**\n * When you have unsaved changes and try to leave the current page, **refine** shows a confirmation modal box.\n * @default `false*`\n */\n warnWhenUnsavedChanges?: boolean;\n /**\n * Disables server-side validation\n * @default false\n * @see {@link https://refine.dev/docs/advanced-tutorials/forms/server-side-form-validation/}\n */\n disableServerSideValidation?: boolean;\n} & UseHookFormProps<TVariables, TContext>;\n\nexport const useForm = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables extends FieldValues = FieldValues,\n TContext extends object = {},\n TData extends BaseRecord = TQueryFnData,\n TResponse extends BaseRecord = TData,\n TResponseError extends HttpError = TError,\n>({\n refineCoreProps,\n warnWhenUnsavedChanges: warnWhenUnsavedChangesProp,\n disableServerSideValidation: disableServerSideValidationProp = false,\n ...rest\n}: UseFormProps<\n TQueryFnData,\n TError,\n TVariables,\n TContext,\n TData,\n TResponse,\n TResponseError\n> = {}): UseFormReturnType<\n TQueryFnData,\n TError,\n TVariables,\n TContext,\n TData,\n TResponse,\n TResponseError\n> => {\n const { options } = useRefineContext();\n const disableServerSideValidation =\n options?.disableServerSideValidation || disableServerSideValidationProp;\n\n const translate = useTranslate();\n\n const {\n warnWhenUnsavedChanges: warnWhenUnsavedChangesRefine,\n setWarnWhen,\n } = useWarnAboutChange();\n const warnWhenUnsavedChanges =\n warnWhenUnsavedChangesProp ?? warnWhenUnsavedChangesRefine;\n\n const useHookFormResult = useHookForm<TVariables, TContext>({\n ...rest,\n });\n\n const {\n watch,\n setValue,\n getValues,\n handleSubmit: handleSubmitReactHookForm,\n setError,\n } = useHookFormResult;\n\n const useFormCoreResult = useFormCore<\n TQueryFnData,\n TError,\n TVariables,\n TData,\n TResponse,\n TResponseError\n >({\n ...refineCoreProps,\n onMutationError: (error, _variables, _context) => {\n if (disableServerSideValidation) {\n refineCoreProps?.onMutationError?.(error, _variables, _context);\n return;\n }\n\n const errors = error?.errors;\n\n for (const key in errors) {\n // when the key is not registered in the form, react-hook-form not working\n const isKeyInVariables = Object.keys(\n flattenObjectKeys(_variables),\n ).includes(key);\n\n if (!isKeyInVariables) {\n continue;\n }\n\n const fieldError = errors[key];\n\n let newError = \"\";\n\n if (Array.isArray(fieldError)) {\n newError = fieldError.join(\" \");\n }\n\n if (typeof fieldError === \"string\") {\n newError = fieldError;\n }\n\n if (typeof fieldError === \"boolean\" && fieldError) {\n newError = \"Field is not valid.\";\n }\n\n if (typeof fieldError === \"object\" && \"key\" in fieldError) {\n const translatedMessage = translate(\n fieldError.key,\n fieldError.message,\n );\n\n newError = translatedMessage;\n }\n\n setError(key as Path<TVariables>, {\n message: newError,\n });\n }\n\n refineCoreProps?.onMutationError?.(error, _variables, _context);\n },\n });\n\n const { queryResult, onFinish, formLoading, onFinishAutoSave } =\n useFormCoreResult;\n\n useEffect(() => {\n const data = queryResult?.data?.data;\n if (!data) return;\n\n /**\n * get registered fields from react-hook-form\n */\n const registeredFields = Object.keys(flattenObjectKeys(getValues()));\n\n /**\n * set values from query result as default values\n */\n registeredFields.forEach((path) => {\n const hasValue = has(data, path);\n const dataValue = get(data, path);\n\n /**\n * set value if the path exists in the query result even if the value is null\n */\n if (hasValue) {\n setValue(path as Path<TVariables>, dataValue);\n }\n });\n }, [queryResult?.data, setValue, getValues]);\n\n useEffect(() => {\n const subscription = watch((values: any, { type }: { type?: any }) => {\n if (type === \"change\") {\n onValuesChange(values);\n }\n });\n return () => subscription.unsubscribe();\n }, [watch]);\n\n const onValuesChange = (changeValues: TVariables) => {\n if (warnWhenUnsavedChanges) {\n setWarnWhen(true);\n }\n\n if (refineCoreProps?.autoSave) {\n setWarnWhen(false);\n\n const onFinishProps = refineCoreProps.autoSave?.onFinish;\n\n if (onFinishProps) {\n return onFinishAutoSave(onFinishProps(changeValues));\n }\n\n return onFinishAutoSave(changeValues);\n }\n\n return changeValues;\n };\n\n const handleSubmit: UseFormHandleSubmit<TVariables> =\n (onValid, onInvalid) => async (e) => {\n setWarnWhen(false);\n return handleSubmitReactHookForm(onValid, onInvalid)(e);\n };\n\n const saveButtonProps = {\n disabled: formLoading,\n onClick: (e: React.BaseSyntheticEvent) => {\n handleSubmit(onFinish, () => false)(e);\n },\n };\n\n return {\n ...useHookFormResult,\n handleSubmit,\n refineCore: useFormCoreResult,\n saveButtonProps,\n };\n};\n","import { useEffect, useState } from \"react\";\nimport { FieldValues, Path } from \"react-hook-form\";\nimport { BaseRecord, HttpError } from \"@refinedev/core\";\n\nimport { useForm, UseFormProps, UseFormReturnType } from \"../useForm\";\n\nexport type UseStepsFormReturnType<\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables extends FieldValues = FieldValues,\n TContext extends object = {},\n TData extends BaseRecord = TQueryFnData,\n TResponse extends BaseRecord = TData,\n TResponseError extends HttpError = TError,\n> = UseFormReturnType<\n TQueryFnData,\n TError,\n TVariables,\n TContext,\n TData,\n TResponse,\n TResponseError\n> & {\n steps: {\n currentStep: number;\n gotoStep: (step: number) => void;\n };\n};\n\nexport type UseStepsFormProps<\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables extends FieldValues = FieldValues,\n TContext extends object = {},\n TData extends BaseRecord = TQueryFnData,\n TResponse extends BaseRecord = TData,\n TResponseError extends HttpError = TError,\n> = UseFormProps<\n TQueryFnData,\n TError,\n TVariables,\n TContext,\n TData,\n TResponse,\n TResponseError\n> & {\n /**\n * @description Configuration object for the steps.\n * `defaultStep`: Allows you to set the initial step.\n * \n * `isBackValidate`: Whether to validation the current step when going back.\n * @type `{\n defaultStep?: number;\n isBackValidate?: boolean;\n }`\n * @default `defaultStep = 0` `isBackValidate = false`\n */\n stepsProps?: {\n defaultStep?: number;\n isBackValidate?: boolean;\n };\n};\n\nexport const useStepsForm = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables extends FieldValues = FieldValues,\n TContext extends object = {},\n TData extends BaseRecord = TQueryFnData,\n TResponse extends BaseRecord = TData,\n TResponseError extends HttpError = TError,\n>({\n stepsProps,\n ...rest\n}: UseStepsFormProps<\n TQueryFnData,\n TError,\n TVariables,\n TContext,\n TData,\n TResponse,\n TResponseError\n> = {}): UseStepsFormReturnType<\n TQueryFnData,\n TError,\n TVariables,\n TContext,\n TData,\n TResponse,\n TResponseError\n> => {\n const { defaultStep = 0, isBackValidate = false } = stepsProps ?? {};\n const [current, setCurrent] = useState(defaultStep);\n\n const useHookFormResult = useForm<\n TQueryFnData,\n TError,\n TVariables,\n TContext,\n TData,\n TResponse,\n TResponseError\n >({\n ...rest,\n });\n\n const {\n trigger,\n getValues,\n setValue,\n formState: { dirtyFields },\n refineCore: { queryResult },\n } = useHookFormResult;\n\n useEffect(() => {\n const data = queryResult?.data?.data;\n if (!data) return;\n\n const registeredFields = Object.keys(getValues());\n Object.entries(data).forEach(([key, value]) => {\n const name = key as Path<TVariables>;\n\n if (registeredFields.includes(name)) {\n if (!dirtyFields[name]) {\n setValue(name, value);\n }\n }\n });\n }, [queryResult?.data, current, setValue, getValues]);\n\n const go = (step: number) => {\n let targetStep = step;\n\n if (step < 0) {\n targetStep = 0;\n }\n\n setCurrent(targetStep);\n };\n\n const gotoStep = async (step: number) => {\n if (step === current) {\n return;\n }\n\n if (step < current && !isBackValidate) {\n go(step);\n return;\n }\n\n const isValid = await trigger();\n if (isValid) {\n go(step);\n }\n };\n\n return {\n ...useHookFormResult,\n steps: {\n currentStep: current,\n gotoStep,\n },\n };\n};\n","import { useCallback } from \"react\";\nimport {\n BaseKey,\n BaseRecord,\n FormWithSyncWithLocationParams,\n HttpError,\n useGo,\n useModal,\n useParsed,\n useResource,\n useUserFriendlyName,\n useTranslate,\n useWarnAboutChange,\n useInvalidate,\n} from \"@refinedev/core\";\nimport { FieldValues } from \"react-hook-form\";\n\nimport { useForm, UseFormProps, UseFormReturnType } from \"../useForm\";\nimport React from \"react\";\n\nexport type UseModalFormReturnType<\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables extends FieldValues = FieldValues,\n TContext extends object = {},\n TData extends BaseRecord = TQueryFnData,\n TResponse extends BaseRecord = TData,\n TResponseError extends HttpError = TError,\n> = UseFormReturnType<\n TQueryFnData,\n TError,\n TVariables,\n TContext,\n TData,\n TResponse,\n TResponseError\n> & {\n modal: {\n submit: (values: TVariables) => void;\n close: () => void;\n show: (id?: BaseKey) => void;\n visible: boolean;\n title: string;\n };\n};\n\nexport type UseModalFormProps<\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables extends FieldValues = FieldValues,\n TContext extends object = {},\n TData extends BaseRecord = TQueryFnData,\n TResponse extends BaseRecord = TData,\n TResponseError extends HttpError = TError,\n> = UseFormProps<\n TQueryFnData,\n TError,\n TVariables,\n TContext,\n TData,\n TResponse,\n TResponseError\n> & {\n /**\n * @description Configuration object for the modal.\n * `defaultVisible`: Initial visibility state of the modal.\n * \n * `autoSubmitClose`: Whether the form should be submitted when the modal is closed.\n * \n * `autoResetForm`: Whether the form should be reset when the form is submitted.\n * @type `{\n defaultVisible?: boolean;\n autoSubmitClose?: boolean;\n autoResetForm?: boolean;\n }`\n * @default `defaultVisible = false` `autoSubmitClose = true` `autoResetForm = true`\n */\n modalProps?: {\n defaultVisible?: boolean;\n autoSubmitClose?: boolean;\n autoResetForm?: boolean;\n };\n} & FormWithSyncWithLocationParams;\n\nexport const useModalForm = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables extends FieldValues = FieldValues,\n TContext extends object = {},\n TData extends BaseRecord = TQueryFnData,\n TResponse extends BaseRecord = TData,\n TResponseError extends HttpError = TError,\n>({\n modalProps,\n refineCoreProps,\n syncWithLocation,\n ...rest\n}: UseModalFormProps<\n TQueryFnData,\n TError,\n TVariables,\n TContext,\n TData,\n TResponse,\n TResponseError\n> = {}): UseModalFormReturnType<\n TQueryFnData,\n TError,\n TVariables,\n TContext,\n TData,\n TResponse,\n TResponseError\n> => {\n const invalidate = useInvalidate();\n const [initiallySynced, setInitiallySynced] = React.useState(false);\n\n const translate = useTranslate();\n\n const { resource: resourceProp, action: actionProp } =\n refineCoreProps ?? {};\n\n const {\n resource,\n action: actionFromParams,\n identifier,\n } = useResource(resourceProp);\n\n const parsed = useParsed();\n const go = useGo();\n const getUserFriendlyName = useUserFriendlyName();\n\n const action = actionProp ?? actionFromParams ?? \"\";\n\n const syncingId = !(\n typeof syncWithLocation === \"object\" &&\n syncWithLocation?.syncId === false\n );\n\n const syncWithLocationKey =\n typeof syncWithLocation === \"object\" && \"key\" in syncWithLocation\n ? syncWithLocation.key\n : resource && action && syncWithLocation\n ? `modal-${identifier}-${action}`\n : undefined;\n\n const {\n defaultVisible = false,\n autoSubmitClose = true,\n autoResetForm = true,\n } = modalProps ?? {};\n\n const useHookFormResult = useForm<\n TQueryFnData,\n TError,\n TVariables,\n TContext,\n TData,\n TResponse,\n TResponseError\n >({\n refineCoreProps: {\n ...refineCoreProps,\n meta: {\n ...(syncWithLocationKey\n ? { [syncWithLocationKey]: undefined }\n : {}),\n ...refineCoreProps?.meta,\n },\n },\n ...rest,\n });\n\n const {\n reset,\n refineCore: { onFinish, id, setId, autoSaveProps },\n saveButtonProps,\n handleSubmit,\n } = useHookFormResult;\n\n const { visible, show, close } = useModal({\n defaultVisible,\n });\n\n React.useEffect(() => {\n if (initiallySynced === false && syncWithLocationKey) {\n const openStatus = parsed?.params?.[syncWithLocationKey]?.open;\n if (typeof openStatus === \"boolean\") {\n if (openStatus) {\n show();\n }\n } else if (typeof openStatus === \"string\") {\n if (openStatus === \"true\") {\n show();\n }\n }\n\n if (syncingId) {\n const idFromParams = parsed?.params?.[syncWithLocationKey]?.id;\n if (idFromParams) {\n setId?.(idFromParams);\n }\n }\n\n setInitiallySynced(true);\n }\n }, [syncWithLocationKey, parsed, syncingId, setId]);\n\n React.useEffect(() => {\n if (initiallySynced === true) {\n if (visible && syncWithLocationKey) {\n go({\n query: {\n [syncWithLocationKey]: {\n ...parsed?.params?.[syncWithLocationKey],\n open: true,\n ...(syncingId && id && { id }),\n },\n },\n options: { keepQuery: true },\n type: \"replace\",\n });\n } else if (syncWithLocationKey && !visible) {\n go({\n query: {\n [syncWithLocationKey]: undefined,\n },\n options: { keepQuery: true },\n type: \"replace\",\n });\n }\n }\n }, [id, visible, show, syncWithLocationKey, syncingId]);\n\n const submit = async (values: TVariables) => {\n await onFinish(values);\n\n if (autoSubmitClose) {\n close();\n }\n\n if (autoResetForm) {\n reset();\n }\n };\n\n const { warnWhen, setWarnWhen } = useWarnAboutChange();\n const handleClose = useCallback(() => {\n if (\n autoSaveProps.status === \"success\" &&\n refineCoreProps?.autoSave?.invalidateOnClose\n ) {\n invalidate({\n id,\n invalidates: refineCoreProps.invalidates || [\n \"list\",\n \"many\",\n \"detail\",\n ],\n dataProviderName: refineCoreProps.dataProviderName,\n resource: identifier,\n });\n }\n\n if (warnWhen) {\n const warnWhenConfirm = window.confirm(\n translate(\n \"warnWhenUnsavedChanges\",\n \"Are you sure you want to leave? You have unsaved changes.\",\n ),\n );\n\n if (warnWhenConfirm) {\n setWarnWhen(false);\n } else {\n return;\n }\n }\n\n setId?.(undefined);\n close();\n }, [warnWhen, autoSaveProps.status]);\n\n const handleShow = useCallback(\n (showId?: BaseKey) => {\n if (typeof showId !== \"undefined\") {\n setId?.(showId);\n }\n const needsIdToOpen = action === \"edit\" || action === \"clone\";\n const hasId =\n typeof showId !== \"undefined\" || typeof id !== \"undefined\";\n if (needsIdToOpen ? hasId : true) {\n show();\n }\n },\n [id],\n );\n\n const title = translate(\n `${identifier}.titles.${actionProp}`,\n undefined,\n `${getUserFriendlyName(\n `${actionProp} ${\n resource?.meta?.label ??\n resource?.options?.label ??\n resource?.label ??\n identifier\n }`,\n \"singular\",\n )}`,\n );\n\n return {\n modal: {\n submit,\n close: handleClose,\n show: handleShow,\n visible,\n title,\n },\n ...useHookFormResult,\n saveButtonProps: {\n ...saveButtonProps,\n onClick: (e) => handleSubmit(submit)(e),\n },\n };\n};\n"],"mappings":"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","names":["useEffect","get","has","useHookForm","useFormCore","useWarnAboutChange","useTranslate","useRefineContext","flattenObjectKeys","useForm","__name","refineCoreProps","warnWhenUnsavedChangesProp","disableServerSideValidationProp","rest","options","useRefineContext","disableServerSideValidation","translate","useTranslate","warnWhenUnsavedChangesRefine","setWarnWhen","useWarnAboutChange","warnWhenUnsavedChanges","useHookFormResult","useHookForm","watch","setValue","getValues","handleSubmitReactHookForm","setError","useFormCoreResult","useFormCore","error","_variables","_context","_a","_b","errors","key","flattenObjectKeys","fieldError","newError","queryResult","onFinish","formLoading","onFinishAutoSave","useEffect","data","path","hasValue","has","dataValue","get","subscription","values","type","onValuesChange","changeValues","onFinishProps","handleSubmit","onValid","onInvalid","e","useEffect","useState","useStepsForm","__name","stepsProps","rest","defaultStep","isBackValidate","current","setCurrent","useState","useHookFormResult","useForm","trigger","getValues","setValue","dirtyFields","queryResult","useEffect","_a","data","registeredFields","key","value","name","go","step","targetStep","useCallback","useGo","useModal","useParsed","useResource","useUserFriendlyName","useTranslate","useWarnAboutChange","useInvalidate","React","useModalForm","__name","modalProps","refineCoreProps","syncWithLocation","rest","_a","_b","invalidate","useInvalidate","initiallySynced","setInitiallySynced","React","translate","useTranslate","resourceProp","actionProp","resource","actionFromParams","identifier","useResource","parsed","useParsed","go","useGo","getUserFriendlyName","useUserFriendlyName","action","syncingId","syncWithLocationKey","defaultVisible","autoSubmitClose","autoResetForm","useHookFormResult","useForm","reset","onFinish","id","setId","autoSaveProps","saveButtonProps","handleSubmit","visible","show","close","useModal","_c","_d","openStatus","idFromParams","submit","values","warnWhen","setWarnWhen","useWarnAboutChange","handleClose","useCallback","handleShow","showId","title","e"]}