Live video on the AT Protocol
at next 37 lines 953 B view raw
1import { useEffect, useState } from "react"; 2import storage from "../storage"; 3 4export function useAQState<T>( 5 key: string, 6 defaultValue: T, 7): [T, (value: T) => void] { 8 const [state, setState] = useState<T>(defaultValue); 9 const [isLoaded, setIsLoaded] = useState(false); 10 11 useEffect(() => { 12 const loadFromStorage = async () => { 13 try { 14 const stored = await storage.getItem(key); 15 if (stored !== null) { 16 setState(JSON.parse(stored)); 17 } 18 } catch (error) { 19 console.error(`Failed to load ${key} from storage:`, error); 20 } finally { 21 setIsLoaded(true); 22 } 23 }; 24 loadFromStorage(); 25 }, [key]); 26 27 const setStoredState = (value: T) => { 28 setState(value); 29 if (isLoaded) { 30 storage.setItem(key, JSON.stringify(value)).catch((error) => { 31 console.error(`Failed to save ${key} to storage:`, error); 32 }); 33 } 34 }; 35 36 return [state, setStoredState]; 37}