AbdulElahGwaith's picture
Upload folder using huggingface_hub
95b5a04 verified
import { useState, useEffect, useCallback } from 'react';
// ==============================|| HOOKS - LOCAL STORAGE ||============================== //
export function useLocalStorage(key, defaultValue) {
// Load initial state from localStorage or fallback to default
const readValue = () => {
if (typeof window === 'undefined') return defaultValue;
try {
const item = localStorage.getItem(key);
return item ? JSON.parse(item) : defaultValue;
} catch (err) {
console.warn(`Error reading localStorage key “${key}”:`, err);
return defaultValue;
}
};
const [state, setState] = useState(readValue);
// Sync to localStorage whenever state changes
useEffect(() => {
try {
localStorage.setItem(key, JSON.stringify(state));
} catch (err) {
console.warn(`Error setting localStorage key “${key}”:`, err);
}
}, [key, state]);
// Update single field
const setField = useCallback((key, value) => {
setState((prev) => ({
...prev,
[key]: value
}));
}, []);
// Reset to defaults
const resetState = useCallback(() => {
setState(defaultValue);
localStorage.setItem(key, JSON.stringify(defaultValue));
}, [defaultValue, key]);
return { state, setState, setField, resetState };
}