solid-awesome-hooks
Version:
A collection of awesome hooks for solid-js
24 lines (23 loc) • 903 B
JavaScript
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 }));
};