← back to Beverlyhillsvideos App
hooks/useFavorites.ts
44 lines
import { useState, useEffect, useCallback } from 'react';
import AsyncStorage from '@react-native-async-storage/async-storage';
const STORAGE_KEY = '@bhv:favorites';
export function useFavorites() {
const [favorites, setFavorites] = useState<Set<string>>(new Set());
const [loaded, setLoaded] = useState(false);
useEffect(() => {
AsyncStorage.getItem(STORAGE_KEY)
.then((raw) => {
if (raw) {
setFavorites(new Set(JSON.parse(raw) as string[]));
}
})
.catch(() => {})
.finally(() => setLoaded(true));
}, []);
const toggle = useCallback(
async (name: string) => {
setFavorites((prev) => {
const next = new Set(prev);
if (next.has(name)) {
next.delete(name);
} else {
next.add(name);
}
AsyncStorage.setItem(STORAGE_KEY, JSON.stringify([...next])).catch(() => {});
return next;
});
},
[]
);
const isFavorite = useCallback(
(name: string) => favorites.has(name),
[favorites]
);
return { favorites, isFavorite, toggle, loaded };
}