UNPKG

@techsio/storefront-data

Version:

Medusa-first storefront data layer built on TanStack Query.

43 lines (42 loc) • 1.88 kB
import { getLocalStorageItem, removeLocalStorageItem, resolveLocalStorage, setLocalStorageItem } from "./local-storage.js"; function createLocalStorageValueStore({ key, storage, serverSnapshot = null }) { const listeners = new Set(); const readValue = ()=>getLocalStorageItem(key, storage); const notifyListeners = ()=>{ for (const listener of listeners)listener(); }; return { get: readValue, set (value) { const resolvedStorage = resolveLocalStorage(storage); if (!resolvedStorage) return; if (getLocalStorageItem(key, resolvedStorage) === value) return; if (setLocalStorageItem(key, value, resolvedStorage)) notifyListeners(); }, clear () { const resolvedStorage = resolveLocalStorage(storage); if (!resolvedStorage) return; if (null === getLocalStorageItem(key, resolvedStorage)) return; if (removeLocalStorageItem(key, resolvedStorage)) notifyListeners(); }, subscribe (listener) { listeners.add(listener); if ("undefined" == typeof window) return ()=>{ listeners.delete(listener); }; const resolvedStorage = resolveLocalStorage(storage); const handleStorage = (event)=>{ if (resolvedStorage && event.storageArea && event.storageArea !== resolvedStorage) return; if (event.key === key || null === event.key) listener(); }; window.addEventListener("storage", handleStorage); return ()=>{ listeners.delete(listener); window.removeEventListener("storage", handleStorage); }; }, getSnapshot: readValue, getServerSnapshot: ()=>serverSnapshot }; } export { createLocalStorageValueStore };