"use client"; import { useEffect, useState } from "react"; export interface StorageLike { load(): T | null; save(value: T): void; } const SAVE_DELAY_MS = 60; export function useLocalStorage( storage: StorageLike, initialValue: T, enable = true, ): [T, (value: T | ((prev: T) => T)) => void] { const [value, setValue] = useState(initialValue); useEffect(() => { if (!enable) return; let disposed = false; const timer = window.setTimeout(() => { try { const stored = storage.load(); if (disposed || stored === null || stored === undefined) return; setValue(stored); } catch (error) { console.warn("Échec du chargement localStorage", error); } }, 0); return () => { disposed = true; window.clearTimeout(timer); }; }, [storage, enable]); useEffect(() => { if (!enable) return; const timer = window.setTimeout(() => { try { storage.save(value); } catch (error) { console.warn("Échec de la sauvegarde localStorage", error); } }, SAVE_DELAY_MS); return () => { window.clearTimeout(timer); }; }, [storage, value, enable]); return [value, setValue]; }