UNPKG

solid-awesome-hooks

Version:
24 lines (23 loc) 903 B
import { createDeferred, createEffect, on } from "solid-js"; const DEFAULT_OPTIONS = { storage: localStorage, saveWhenIdle: true, defer: true, clearOnEmpty: false, }; /** * * @param key - key name in storage * @param data - Reactive accessor to the data * @param options */ export const useSaveToStorage = (key, data, options) => { const resolvedOptions = Object.assign({}, DEFAULT_OPTIONS, options); const dataToSave = resolvedOptions.saveWhenIdle ? createDeferred(data) : data; createEffect(on(dataToSave, (rawData) => { if (resolvedOptions.clearOnEmpty && (rawData === null || rawData === undefined)) resolvedOptions.storage.removeItem(key); else resolvedOptions.storage.setItem(key, typeof rawData === "object" ? JSON.stringify(rawData) : String(rawData)); }, { defer: resolvedOptions.defer })); };