UNPKG

recoil-sync-next

Version:

recoil-sync stores for Next.js

46 lines (45 loc) 1.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useSyncHistoryNext = void 0; const router_1 = require("next/router"); const react_1 = require("react"); function getStorageKey(storeKey, itemsKey) { return `RecoilSyncHistory::${storeKey !== null && storeKey !== void 0 ? storeKey : 'recoil-sync-history-default-store'}::${itemsKey}`; } function useSyncHistoryNext({ storeKey, serialize, deserialize, }) { const getHistoryKey = (0, react_1.useCallback)(() => { var _a, _b; return (_b = (_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.history) === null || _a === void 0 ? void 0 : _a.state) === null || _b === void 0 ? void 0 : _b.key; }, []); const saveItems = (0, react_1.useCallback)((itemsKey, values) => { const storageKey = getStorageKey(storeKey, itemsKey); if (Object.keys(values).length === 0) { sessionStorage.removeItem(storageKey); return; } sessionStorage.setItem(storageKey, serialize(values)); }, [storeKey, serialize]); const loadItems = (0, react_1.useCallback)((itemsKey) => { const storageKey = getStorageKey(storeKey, itemsKey); const valuesString = sessionStorage.getItem(storageKey); if (!valuesString) { return {}; } return deserialize(valuesString); }, [storeKey, deserialize]); const { events } = (0, router_1.useRouter)(); const listenChangeHistory = (0, react_1.useCallback)((handler) => { events.on('routeChangeStart', handler); return () => { events.off('routeChangeStart', handler); }; }, [events]); return { storeKey, getHistoryKey, saveItems, loadItems, listenChangeHistory, }; } exports.useSyncHistoryNext = useSyncHistoryNext;