UNPKG

react-hook-form-persist

Version:

Persist and populate react-hook-form form using storage of your choice

101 lines (99 loc) 3.34 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __objRest = (source, exclude) => { var target = {}; for (var prop in source) if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0) target[prop] = source[prop]; if (source != null && __getOwnPropSymbols) for (var prop of __getOwnPropSymbols(source)) { if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop)) target[prop] = source[prop]; } return target; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.tsx var src_exports = {}; __export(src_exports, { default: () => src_default }); module.exports = __toCommonJS(src_exports); var import_react = require("react"); var useFormPersist = (name, { storage, watch, setValue, exclude = [], onDataRestored, validate = false, dirty = false, onTimeout, timeout }) => { const watchedValues = watch(); const getStorage = () => storage || window.sessionStorage; const clearStorage = () => getStorage().removeItem(name); (0, import_react.useEffect)(() => { const str = getStorage().getItem(name); if (str) { const _a = JSON.parse(str), { _timestamp = null } = _a, values = __objRest(_a, ["_timestamp"]); const dataRestored = {}; const currTimestamp = Date.now(); if (timeout && currTimestamp - _timestamp > timeout) { onTimeout && onTimeout(); clearStorage(); return; } Object.keys(values).forEach((key) => { const shouldSet = !exclude.includes(key); if (shouldSet) { dataRestored[key] = values[key]; setValue(key, values[key], { shouldValidate: validate, shouldDirty: dirty }); } }); if (onDataRestored) { onDataRestored(dataRestored); } } }, [ storage, name, onDataRestored, setValue ]); (0, import_react.useEffect)(() => { const values = exclude.length ? Object.entries(watchedValues).filter(([key]) => !exclude.includes(key)).reduce((obj, [key, val]) => Object.assign(obj, { [key]: val }), {}) : Object.assign({}, watchedValues); if (Object.entries(values).length) { if (timeout !== void 0) { values._timestamp = Date.now(); } getStorage().setItem(name, JSON.stringify(values)); } }, [watchedValues, timeout]); return { clear: () => getStorage().removeItem(name) }; }; var src_default = useFormPersist; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = {});