@refinedev/react-hook-form 4.8.4 → 4.8.5

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/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var oe=Object.create;var j=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var ne=Object.getOwnPropertyNames;var de=Object.getPrototypeOf,Te=Object.prototype.hasOwnProperty;var R=(e,t)=>j(e,"name",{value:t,configurable:!0});var ie=(e,t)=>{for(var o in t)j(e,o,{get:t[o],enumerable:!0})},q=(e,t,o,f)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ne(t))!Te.call(e,n)&&n!==o&&j(e,n,{get:()=>t[n],enumerable:!(f=ae(t,n))||f.enumerable});return e};var le=(e,t,o)=>(o=e!=null?oe(de(e)):{},q(t||!e||!e.__esModule?j(o,"default",{value:e,enumerable:!0}):o,e)),ue=e=>q(j({},"__esModule",{value:!0}),e);var pe={};ie(pe,{useForm:()=>g,useModalForm:()=>re,useStepsForm:()=>ee});module.exports=ue(pe);var N=require("react"),L=require("react-hook-form"),V=require("@refinedev/core");var g=R(({refineCoreProps:e,warnWhenUnsavedChanges:t,disableServerSideValidation:o=!1,...f}={})=>{let{options:n}=(0,V.useRefineContext)(),v=(n==null?void 0:n.disableServerSideValidation)||o,D=(0,V.useTranslate)(),{warnWhenUnsavedChanges:C,setWarnWhen:E}=(0,V.useWarnAboutChange)(),T=t??C,S=(0,L.useForm)({...f}),{watch:c,setValue:d,getValues:h,handleSubmit:i,setError:F}=S,x=(0,V.useForm)({...e,onMutationError:(r,s,l)=>{var y,b;if(v){(y=e==null?void 0:e.onMutationError)==null||y.call(e,r,s,l);return}let H=r==null?void 0:r.errors;for(let Q in H){if(!Object.keys(s).includes(Q.split(".")[0]))continue;let m=H[Q],U="";Array.isArray(m)&&(U=m.join(" ")),typeof m=="string"&&(U=m),typeof m=="boolean"&&m&&(U="Field is not valid."),typeof m=="object"&&"key"in m&&(U=D(m.key,m.message)),F(Q,{message:U})}(b=e==null?void 0:e.onMutationError)==null||b.call(e,r,s,l)}}),{queryResult:a,onFinish:k,formLoading:B,onFinishAutoSave:w}=x;(0,N.useEffect)(()=>{var l;let r=(l=a==null?void 0:a.data)==null?void 0:l.data;if(!r)return;let s=Object.keys(h());Object.entries(r).forEach(([H,y])=>{let b=H;s.includes(b)&&d(b,y)})},[a==null?void 0:a.data,d,h]),(0,N.useEffect)(()=>{let r=c((s,{type:l})=>{l==="change"&&M(s)});return()=>r.unsubscribe()},[c]);let M=R(r=>{var s;if(T&&E(!0),e!=null&&e.autoSave){E(!1);let l=(s=e.autoSave)==null?void 0:s.onFinish;return w(l?l(r):r)}return r},"onValuesChange"),P=R((r,s)=>async l=>(E(!1),i(r,s)(l)),"handleSubmit");return{...S,handleSubmit:P,refineCore:x,saveButtonProps:{disabled:B,onClick:r=>{P(k,()=>!1)(r)}}}},"useForm");var O=require("react");var ee=R(({stepsProps:e,...t}={})=>{let{defaultStep:o=0,isBackValidate:f=!1}=e??{},[n,v]=(0,O.useState)(o),D=g({...t}),{trigger:C,getValues:E,setValue:T,formState:{dirtyFields:S},refineCore:{queryResult:c}}=D;(0,O.useEffect)(()=>{var x;let i=(x=c==null?void 0:c.data)==null?void 0:x.data;if(!i)return;let F=Object.keys(E());Object.entries(i).forEach(([a,k])=>{let B=a;F.includes(B)&&(S[B]||T(B,k))})},[c==null?void 0:c.data,n,T,E]);let d=R(i=>{let F=i;i<0&&(F=0),v(F)},"go");return{...D,steps:{currentStep:n,gotoStep:R(async i=>{if(i===n)return;if(i<n&&!f){d(i);return}await C()&&d(i)},"gotoStep")}}},"useStepsForm");var G=require("react"),p=require("@refinedev/core");var $=le(require("react"));var re=R(({modalProps:e,refineCoreProps:t,syncWithLocation:o,...f}={})=>{var J,X;let[n,v]=$.default.useState(!1),D=(0,p.useTranslate)(),{resource:C,action:E}=t??{},{resource:T,action:S,identifier:c}=(0,p.useResource)(C),d=(0,p.useParsed)(),h=(0,p.useGo)(),i=(0,p.useUserFriendlyName)(),F=E??S??"",x=!(typeof o=="object"&&(o==null?void 0:o.syncId)===!1),a=typeof o=="object"&&"key"in o?o.key:T&&F&&o?`modal-${c}-${F}`:void 0,{defaultVisible:k=!1,autoSubmitClose:B=!0,autoResetForm:w=!0}=e??{},M=g({refineCoreProps:{...t,meta:{...a?{[a]:void 0}:{},...t==null?void 0:t.meta}},...f}),{reset:P,refineCore:{onFinish:Y,id:r,setId:s},saveButtonProps:l,handleSubmit:H}=M,{visible:y,show:b,close:Q}=(0,p.useModal)({defaultVisible:k});$.default.useEffect(()=>{var u,K,I,Z;if(n===!1&&a){let W=(K=(u=d==null?void 0:d.params)==null?void 0:u[a])==null?void 0:K.open;if(typeof W=="boolean"?W&&b():typeof W=="string"&&W==="true"&&b(),x){let _=(Z=(I=d==null?void 0:d.params)==null?void 0:I[a])==null?void 0:Z.id;_&&(s==null||s(_))}v(!0)}},[a,d,x,s]),$.default.useEffect(()=>{var u;n===!0&&(y&&a?h({query:{[a]:{...(u=d==null?void 0:d.params)==null?void 0:u[a],open:!0,...x&&r&&{id:r}}},options:{keepQuery:!0},type:"replace"}):a&&!y&&h({query:{[a]:void 0},options:{keepQuery:!0},type:"replace"}))},[r,y,b,a,x]);let A=R(async u=>{await Y(u),B&&Q(),w&&P()},"submit"),{warnWhen:m,setWarnWhen:U}=(0,p.useWarnAboutChange)(),z=(0,G.useCallback)(()=>{if(m)if(window.confirm(D("warnWhenUnsavedChanges","Are you sure you want to leave? You have unsaved changes.")))U(!1);else return;s==null||s(void 0),Q()},[m]),te=(0,G.useCallback)(u=>{typeof u<"u"&&(s==null||s(u)),(!(F==="edit"||F==="clone")||(typeof u<"u"||typeof r<"u"))&&b()},[r]),se=D(`${c}.titles.${E}`,void 0,`${i(`${E} ${((J=T==null?void 0:T.meta)==null?void 0:J.label)??((X=T==null?void 0:T.options)==null?void 0:X.label)??(T==null?void 0:T.label)??c}`,"singular")}`);return{modal:{submit:A,close:z,show:te,visible:y,title:se},...M,saveButtonProps:{...l,onClick:u=>H(A)(u)}}},"useModalForm");
1
+ var ne=Object.create;var M=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var Te=Object.getOwnPropertyNames;var ie=Object.getPrototypeOf,le=Object.prototype.hasOwnProperty;var R=(e,t)=>M(e,"name",{value:t,configurable:!0});var ue=(e,t)=>{for(var s in t)M(e,s,{get:t[s],enumerable:!0})},q=(e,t,s,y)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Te(t))!le.call(e,n)&&n!==s&&M(e,n,{get:()=>t[n],enumerable:!(y=de(t,n))||y.enumerable});return e};var pe=(e,t,s)=>(s=e!=null?ne(ie(e)):{},q(t||!e||!e.__esModule?M(s,"default",{value:e,enumerable:!0}):s,e)),ce=e=>q(M({},"__esModule",{value:!0}),e);var me={};ue(me,{useForm:()=>C,useModalForm:()=>te,useStepsForm:()=>ee});module.exports=ce(me);var G=require("react"),L=require("react-hook-form"),S=require("@refinedev/core");var C=R(({refineCoreProps:e,warnWhenUnsavedChanges:t,disableServerSideValidation:s=!1,...y}={})=>{let{options:n}=(0,S.useRefineContext)(),H=(n==null?void 0:n.disableServerSideValidation)||s,Q=(0,S.useTranslate)(),{warnWhenUnsavedChanges:g,setWarnWhen:f}=(0,S.useWarnAboutChange)(),V=t??g,l=(0,L.useForm)({...y}),{watch:F,setValue:E,getValues:p,handleSubmit:u,setError:b}=l,x=(0,S.useForm)({...e,onMutationError:(a,o,r)=>{var k,v;if(H){(k=e==null?void 0:e.onMutationError)==null||k.call(e,a,o,r);return}let h=a==null?void 0:a.errors;for(let D in h){if(!Object.keys(o).includes(D.split(".")[0]))continue;let m=h[D],B="";Array.isArray(m)&&(B=m.join(" ")),typeof m=="string"&&(B=m),typeof m=="boolean"&&m&&(B="Field is not valid."),typeof m=="object"&&"key"in m&&(B=Q(m.key,m.message)),b(D,{message:B})}(v=e==null?void 0:e.onMutationError)==null||v.call(e,a,o,r)}}),{queryResult:c,onFinish:d,formLoading:U,onFinishAutoSave:W}=x;(0,G.useEffect)(()=>{var r;let a=(r=c==null?void 0:c.data)==null?void 0:r.data;if(!a)return;let o=Object.keys(p());Object.entries(a).forEach(([h,k])=>{let v=h;o.includes(v)&&E(v,k)})},[c==null?void 0:c.data,E,p]),(0,G.useEffect)(()=>{let a=F((o,{type:r})=>{r==="change"&&K(o)});return()=>a.unsubscribe()},[F]);let K=R(a=>{var o;if(V&&f(!0),e!=null&&e.autoSave){f(!1);let r=(o=e.autoSave)==null?void 0:o.onFinish;return W(r?r(a):a)}return a},"onValuesChange"),j=R((a,o)=>async r=>(f(!1),u(a,o)(r)),"handleSubmit");return{...l,handleSubmit:j,refineCore:x,saveButtonProps:{disabled:U,onClick:a=>{j(d,()=>!1)(a)}}}},"useForm");var $=require("react");var ee=R(({stepsProps:e,...t}={})=>{let{defaultStep:s=0,isBackValidate:y=!1}=e??{},[n,H]=(0,$.useState)(s),Q=C({...t}),{trigger:g,getValues:f,setValue:V,formState:{dirtyFields:l},refineCore:{queryResult:F}}=Q;(0,$.useEffect)(()=>{var x;let u=(x=F==null?void 0:F.data)==null?void 0:x.data;if(!u)return;let b=Object.keys(f());Object.entries(u).forEach(([c,d])=>{let U=c;b.includes(U)&&(l[U]||V(U,d))})},[F==null?void 0:F.data,n,V,f]);let E=R(u=>{let b=u;u<0&&(b=0),H(b)},"go");return{...Q,steps:{currentStep:n,gotoStep:R(async u=>{if(u===n)return;if(u<n&&!y){E(u);return}await g()&&E(u)},"gotoStep")}}},"useStepsForm");var Y=require("react"),i=require("@refinedev/core");var A=pe(require("react"));var te=R(({modalProps:e,refineCoreProps:t,syncWithLocation:s,...y}={})=>{var J,X;let n=(0,i.useInvalidate)(),[H,Q]=A.default.useState(!1),g=(0,i.useTranslate)(),{resource:f,action:V}=t??{},{resource:l,action:F,identifier:E}=(0,i.useResource)(f),p=(0,i.useParsed)(),u=(0,i.useGo)(),b=(0,i.useUserFriendlyName)(),x=V??F??"",c=!(typeof s=="object"&&(s==null?void 0:s.syncId)===!1),d=typeof s=="object"&&"key"in s?s.key:l&&x&&s?`modal-${E}-${x}`:void 0,{defaultVisible:U=!1,autoSubmitClose:W=!0,autoResetForm:K=!0}=e??{},j=C({refineCoreProps:{...t,meta:{...d?{[d]:void 0}:{},...t==null?void 0:t.meta}},...y}),{reset:z,refineCore:{onFinish:a,id:o,setId:r,autoSaveProps:h},saveButtonProps:k,handleSubmit:v}=j,{visible:D,show:w,close:m}=(0,i.useModal)({defaultVisible:U});A.default.useEffect(()=>{var T,O,I,Z;if(H===!1&&d){let P=(O=(T=p==null?void 0:p.params)==null?void 0:T[d])==null?void 0:O.open;if(typeof P=="boolean"?P&&w():typeof P=="string"&&P==="true"&&w(),c){let _=(Z=(I=p==null?void 0:p.params)==null?void 0:I[d])==null?void 0:Z.id;_&&(r==null||r(_))}Q(!0)}},[d,p,c,r]),A.default.useEffect(()=>{var T;H===!0&&(D&&d?u({query:{[d]:{...(T=p==null?void 0:p.params)==null?void 0:T[d],open:!0,...c&&o&&{id:o}}},options:{keepQuery:!0},type:"replace"}):d&&!D&&u({query:{[d]:void 0},options:{keepQuery:!0},type:"replace"}))},[o,D,w,d,c]);let B=R(async T=>{await a(T),W&&m(),K&&z()},"submit"),{warnWhen:N,setWarnWhen:re}=(0,i.useWarnAboutChange)(),se=(0,Y.useCallback)(()=>{var T;if(h.status==="success"&&((T=t==null?void 0:t.autoSave)!=null&&T.invalidateOnClose)&&n({id:o,invalidates:t.invalidates||["list","many","detail"],dataProviderName:t.dataProviderName,resource:E}),N)if(window.confirm(g("warnWhenUnsavedChanges","Are you sure you want to leave? You have unsaved changes.")))re(!1);else return;r==null||r(void 0),m()},[N,h.status]),ae=(0,Y.useCallback)(T=>{typeof T<"u"&&(r==null||r(T)),(!(x==="edit"||x==="clone")||(typeof T<"u"||typeof o<"u"))&&w()},[o]),oe=g(`${E}.titles.${V}`,void 0,`${b(`${V} ${((J=l==null?void 0:l.meta)==null?void 0:J.label)??((X=l==null?void 0:l.options)==null?void 0:X.label)??(l==null?void 0:l.label)??E}`,"singular")}`);return{modal:{submit:B,close:se,show:ae,visible:D,title:oe},...j,saveButtonProps:{...k,onClick:T=>v(B)(T)}}},"useModalForm");
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/useForm/index.ts","../src/useStepsForm/index.ts","../src/useModalForm/index.ts"],"sourcesContent":["export { useForm, UseFormProps, UseFormReturnType } from \"./useForm\";\nexport {\n useStepsForm,\n UseStepsFormProps,\n UseStepsFormReturnType,\n} from \"./useStepsForm\";\nexport {\n useModalForm,\n UseModalFormProps,\n UseModalFormReturnType,\n} from \"./useModalForm\";\n","import React, { useEffect } from \"react\";\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} 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(_variables).includes(\n key.split(\".\")[0],\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 const registeredFields = Object.keys(getValues());\n\n Object.entries(data).forEach(([key, value]) => {\n const name = key as Path<TVariables>;\n\n if (registeredFields.includes(name)) {\n setValue(name, value);\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} 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 [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 },\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 (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]);\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":["src_exports","__export","useForm","useModalForm","useStepsForm","__toCommonJS","import_react","import_react_hook_form","import_core","useForm","__name","refineCoreProps","warnWhenUnsavedChangesProp","disableServerSideValidationProp","rest","options","disableServerSideValidation","translate","warnWhenUnsavedChangesRefine","setWarnWhen","warnWhenUnsavedChanges","useHookFormResult","useHookForm","watch","setValue","getValues","handleSubmitReactHookForm","setError","useFormCoreResult","useFormCore","error","_variables","_context","_a","_b","errors","key","fieldError","newError","queryResult","onFinish","formLoading","onFinishAutoSave","data","registeredFields","value","name","subscription","values","type","onValuesChange","changeValues","onFinishProps","handleSubmit","onValid","onInvalid","e","import_react","useStepsForm","__name","stepsProps","rest","defaultStep","isBackValidate","current","setCurrent","useHookFormResult","useForm","trigger","getValues","setValue","dirtyFields","queryResult","_a","data","registeredFields","key","value","name","go","step","targetStep","import_react","import_core","import_react","useModalForm","__name","modalProps","refineCoreProps","syncWithLocation","rest","_a","_b","initiallySynced","setInitiallySynced","React","translate","resourceProp","actionProp","resource","actionFromParams","identifier","parsed","go","getUserFriendlyName","action","syncingId","syncWithLocationKey","defaultVisible","autoSubmitClose","autoResetForm","useHookFormResult","useForm","reset","onFinish","id","setId","saveButtonProps","handleSubmit","visible","show","close","_c","_d","openStatus","idFromParams","submit","values","warnWhen","setWarnWhen","handleClose","handleShow","showId","title","e"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/useForm/index.ts","../src/useStepsForm/index.ts","../src/useModalForm/index.ts"],"sourcesContent":["export { useForm, UseFormProps, UseFormReturnType } from \"./useForm\";\nexport {\n useStepsForm,\n UseStepsFormProps,\n UseStepsFormReturnType,\n} from \"./useStepsForm\";\nexport {\n useModalForm,\n UseModalFormProps,\n UseModalFormReturnType,\n} from \"./useModalForm\";\n","import React, { useEffect } from \"react\";\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} 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(_variables).includes(\n key.split(\".\")[0],\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 const registeredFields = Object.keys(getValues());\n\n Object.entries(data).forEach(([key, value]) => {\n const name = key as Path<TVariables>;\n\n if (registeredFields.includes(name)) {\n setValue(name, value);\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":["src_exports","__export","useForm","useModalForm","useStepsForm","__toCommonJS","import_react","import_react_hook_form","import_core","useForm","__name","refineCoreProps","warnWhenUnsavedChangesProp","disableServerSideValidationProp","rest","options","disableServerSideValidation","translate","warnWhenUnsavedChangesRefine","setWarnWhen","warnWhenUnsavedChanges","useHookFormResult","useHookForm","watch","setValue","getValues","handleSubmitReactHookForm","setError","useFormCoreResult","useFormCore","error","_variables","_context","_a","_b","errors","key","fieldError","newError","queryResult","onFinish","formLoading","onFinishAutoSave","data","registeredFields","value","name","subscription","values","type","onValuesChange","changeValues","onFinishProps","handleSubmit","onValid","onInvalid","e","import_react","useStepsForm","__name","stepsProps","rest","defaultStep","isBackValidate","current","setCurrent","useHookFormResult","useForm","trigger","getValues","setValue","dirtyFields","queryResult","_a","data","registeredFields","key","value","name","go","step","targetStep","import_react","import_core","import_react","useModalForm","__name","modalProps","refineCoreProps","syncWithLocation","rest","_a","_b","invalidate","initiallySynced","setInitiallySynced","React","translate","resourceProp","actionProp","resource","actionFromParams","identifier","parsed","go","getUserFriendlyName","action","syncingId","syncWithLocationKey","defaultVisible","autoSubmitClose","autoResetForm","useHookFormResult","useForm","reset","onFinish","id","setId","autoSaveProps","saveButtonProps","handleSubmit","visible","show","close","_c","_d","openStatus","idFromParams","submit","values","warnWhen","setWarnWhen","handleClose","handleShow","showId","title","e"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/useModalForm/index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,OAAO,EACP,UAAU,EACV,8BAA8B,EAC9B,SAAS,EAQZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAW,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGtE,oBAAY,sBAAsB,CAC9B,YAAY,SAAS,UAAU,GAAG,UAAU,EAC5C,MAAM,SAAS,SAAS,GAAG,SAAS,EACpC,UAAU,SAAS,WAAW,GAAG,WAAW,EAC5C,QAAQ,SAAS,MAAM,GAAG,EAAE,EAC5B,KAAK,SAAS,UAAU,GAAG,YAAY,EACvC,SAAS,SAAS,UAAU,GAAG,KAAK,EACpC,cAAc,SAAS,SAAS,GAAG,MAAM,IACzC,iBAAiB,CACjB,YAAY,EACZ,MAAM,EACN,UAAU,EACV,QAAQ,EACR,KAAK,EACL,SAAS,EACT,cAAc,CACjB,GAAG;IACA,KAAK,EAAE;QACH,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;QACrC,KAAK,EAAE,MAAM,IAAI,CAAC;QAClB,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;QAC7B,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL,CAAC;AAEF,oBAAY,iBAAiB,CACzB,YAAY,SAAS,UAAU,GAAG,UAAU,EAC5C,MAAM,SAAS,SAAS,GAAG,SAAS,EACpC,UAAU,SAAS,WAAW,GAAG,WAAW,EAC5C,QAAQ,SAAS,MAAM,GAAG,EAAE,EAC5B,KAAK,SAAS,UAAU,GAAG,YAAY,EACvC,SAAS,SAAS,UAAU,GAAG,KAAK,EACpC,cAAc,SAAS,SAAS,GAAG,MAAM,IACzC,YAAY,CACZ,YAAY,EACZ,MAAM,EACN,UAAU,EACV,QAAQ,EACR,KAAK,EACL,SAAS,EACT,cAAc,CACjB,GAAG;IACA;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE;QACT,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;CACL,GAAG,8BAA8B,CAAC;AAEnC,eAAO,MAAM,YAAY,kiBAiOxB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/useModalForm/index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,OAAO,EACP,UAAU,EACV,8BAA8B,EAC9B,SAAS,EASZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAW,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGtE,oBAAY,sBAAsB,CAC9B,YAAY,SAAS,UAAU,GAAG,UAAU,EAC5C,MAAM,SAAS,SAAS,GAAG,SAAS,EACpC,UAAU,SAAS,WAAW,GAAG,WAAW,EAC5C,QAAQ,SAAS,MAAM,GAAG,EAAE,EAC5B,KAAK,SAAS,UAAU,GAAG,YAAY,EACvC,SAAS,SAAS,UAAU,GAAG,KAAK,EACpC,cAAc,SAAS,SAAS,GAAG,MAAM,IACzC,iBAAiB,CACjB,YAAY,EACZ,MAAM,EACN,UAAU,EACV,QAAQ,EACR,KAAK,EACL,SAAS,EACT,cAAc,CACjB,GAAG;IACA,KAAK,EAAE;QACH,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;QACrC,KAAK,EAAE,MAAM,IAAI,CAAC;QAClB,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;QAC7B,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL,CAAC;AAEF,oBAAY,iBAAiB,CACzB,YAAY,SAAS,UAAU,GAAG,UAAU,EAC5C,MAAM,SAAS,SAAS,GAAG,SAAS,EACpC,UAAU,SAAS,WAAW,GAAG,WAAW,EAC5C,QAAQ,SAAS,MAAM,GAAG,EAAE,EAC5B,KAAK,SAAS,UAAU,GAAG,YAAY,EACvC,SAAS,SAAS,UAAU,GAAG,KAAK,EACpC,cAAc,SAAS,SAAS,GAAG,MAAM,IACzC,YAAY,CACZ,YAAY,EACZ,MAAM,EACN,UAAU,EACV,QAAQ,EACR,KAAK,EACL,SAAS,EACT,cAAc,CACjB,GAAG;IACA;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE;QACT,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;CACL,GAAG,8BAA8B,CAAC;AAEnC,eAAO,MAAM,YAAY,kiBAkPxB,CAAC"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.8.4",
2
+ "version": "4.8.5",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -32,7 +32,7 @@
32
32
  },
33
33
  "devDependencies": {
34
34
  "@testing-library/jest-dom": "^5.16.4",
35
- "@refinedev/core": "^4.38.2",
35
+ "@refinedev/core": "^4.39.0",
36
36
  "@esbuild-plugins/node-resolve": "^0.1.4",
37
37
  "@types/jest": "^29.2.4",
38
38
  "jest": "^29.3.1",
@@ -11,6 +11,7 @@ import {
11
11
  useUserFriendlyName,
12
12
  useTranslate,
13
13
  useWarnAboutChange,
14
+ useInvalidate,
14
15
  } from "@refinedev/core";
15
16
  import { FieldValues } from "react-hook-form";
16
17
 
@@ -111,6 +112,7 @@ export const useModalForm = <
111
112
  TResponse,
112
113
  TResponseError
113
114
  > => {
115
+ const invalidate = useInvalidate();
114
116
  const [initiallySynced, setInitiallySynced] = React.useState(false);
115
117
 
116
118
  const translate = useTranslate();
@@ -171,7 +173,7 @@ export const useModalForm = <
171
173
 
172
174
  const {
173
175
  reset,
174
- refineCore: { onFinish, id, setId },
176
+ refineCore: { onFinish, id, setId, autoSaveProps },
175
177
  saveButtonProps,
176
178
  handleSubmit,
177
179
  } = useHookFormResult;
@@ -244,6 +246,22 @@ export const useModalForm = <
244
246
 
245
247
  const { warnWhen, setWarnWhen } = useWarnAboutChange();
246
248
  const handleClose = useCallback(() => {
249
+ if (
250
+ autoSaveProps.status === "success" &&
251
+ refineCoreProps?.autoSave?.invalidateOnClose
252
+ ) {
253
+ invalidate({
254
+ id,
255
+ invalidates: refineCoreProps.invalidates || [
256
+ "list",
257
+ "many",
258
+ "detail",
259
+ ],
260
+ dataProviderName: refineCoreProps.dataProviderName,
261
+ resource: identifier,
262
+ });
263
+ }
264
+
247
265
  if (warnWhen) {
248
266
  const warnWhenConfirm = window.confirm(
249
267
  translate(
@@ -261,7 +279,7 @@ export const useModalForm = <
261
279
 
262
280
  setId?.(undefined);
263
281
  close();
264
- }, [warnWhen]);
282
+ }, [warnWhen, autoSaveProps.status]);
265
283
 
266
284
  const handleShow = useCallback(
267
285
  (showId?: BaseKey) => {