mirror of
https://git.coastit.co.za/caitlin/CRM_ENVR.git
synced 2026-07-10 11:15:43 +02:00
30 lines
1018 B
TypeScript
30 lines
1018 B
TypeScript
// ── useLocalStorage Hook ──────────────────────────────────────────────
|
|
// Auto-generated by self-healing setup. Edit to customize.
|
|
|
|
import { useState, useEffect } from "react";
|
|
|
|
export function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T | ((prev: T) => T)) => void] {
|
|
const [storedValue, setStoredValue] = useState<T>(initialValue);
|
|
|
|
useEffect(() => {
|
|
try {
|
|
const item = window.localStorage.getItem(key);
|
|
if (item) setStoredValue(JSON.parse(item));
|
|
} catch {
|
|
// corrupted data — use initial value
|
|
}
|
|
}, [key]);
|
|
|
|
const setValue = (value: T | ((prev: T) => T)) => {
|
|
try {
|
|
const valueToStore = value instanceof Function ? value(storedValue) : value;
|
|
setStoredValue(valueToStore);
|
|
window.localStorage.setItem(key, JSON.stringify(valueToStore));
|
|
} catch {
|
|
// storage full or disabled
|
|
}
|
|
};
|
|
|
|
return [storedValue, setValue];
|
|
}
|