react-hook-form-storage
Version:
A TypeScript library for React Hook Form persist functionality
3 lines (2 loc) • 1.38 kB
JavaScript
;var e=require("react");const t=(e,t,r)=>Object.entries(e).reduce((e,[s,a])=>t&&!t.includes(s)||r&&r.includes(s)?e:{...e,[s]:a},{}),r=(e,t={},r=!1)=>{const s=Object.entries(e),a=t;return s.reduce((e,[t,s])=>{const c=null==a?void 0:a[t];if(!c)return{...e,[t]:s};const u=r?c.deserialize:c.serialize;if(!u)return e;const o=u(s);return{...e,[t]:o}},{})};exports.useFormStorage=(s,a,{storage:c=localStorage,included:u,excluded:o,onRestore:n,onSave:l,debounce:i,dirty:d,touched:f,validate:b,serializer:h={},autoSave:m=!0}={})=>{const[y,g]=e.useState(!1),{setValue:v,watch:S}=a,O=e.useCallback((e,t)=>c.setItem(e,t),[c]),k=e.useCallback(e=>c.getItem(e),[c]),C=e.useCallback(e=>c.removeItem(e),[c]),j=e.useCallback(async e=>{const a=t(e,u,o),c=r(a,h);await O(s,JSON.stringify(c)),null==l||l(a)},[s,u,o,l,h,O]);return e.useEffect(()=>{(async()=>{try{const e=await k(s);if(e){const s=JSON.parse(e),a=t(s,u,o),c=r(a,h,!0);Object.entries(c).forEach(([e,t])=>{v(e,t,{shouldDirty:d,shouldTouch:f,shouldValidate:b})}),g(!0),null==n||n(a)}}catch(e){console.error("Failed to restore data from storage:",e)}})()},[]),e.useEffect(()=>{if(!m)return;const e=S(i?((e,t)=>{let r=null;return(...s)=>{r&&clearTimeout(r),r=setTimeout(()=>e(...s),t)}})(j,i):j);return()=>e.unsubscribe()},[S,i]),{isRestored:y,save:async()=>j(a.getValues()),clear:async()=>C(s)}};
//# sourceMappingURL=index.js.map