WarTracker / client /src /context /WatchlistContext.jsx
skander101's picture
initial commit: vibes only, probably bloated
6512187
Raw
History Blame Contribute Delete
1.21 kB
import { createContext, useContext, useState, useCallback } from "react";
const WatchlistContext = createContext();
const STORAGE_KEY = "wfm-watchlist";
function loadWatchlist() {
try {
const raw = localStorage.getItem(STORAGE_KEY);
return raw ? JSON.parse(raw) : [];
} catch {
return [];
}
}
export function WatchlistProvider({ children }) {
const [watchlist, setWatchlist] = useState(loadWatchlist);
const save = useCallback((list) => {
setWatchlist(list);
localStorage.setItem(STORAGE_KEY, JSON.stringify(list));
}, []);
const toggleItem = useCallback(
(itemSlug) => {
setWatchlist((prev) => {
const next = prev.includes(itemSlug)
? prev.filter((s) => s !== itemSlug)
: [...prev, itemSlug];
localStorage.setItem(STORAGE_KEY, JSON.stringify(next));
return next;
});
},
[]
);
const isWatched = useCallback(
(itemSlug) => watchlist.includes(itemSlug),
[watchlist]
);
return (
<WatchlistContext.Provider value={{ watchlist, toggleItem, isWatched }}>
{children}
</WatchlistContext.Provider>
);
}
export function useWatchlist() {
return useContext(WatchlistContext);
}