Live video on the AT Protocol
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}