import { useQuery } from "@tanstack/react-query"; import { api, type FeedFilters, type Tag } from "../lib/api"; const SORTS = [ { id: "newest", label: "Newest" }, { id: "oldest", label: "Oldest" }, { id: "views", label: "Most viewed" }, { id: "duration_desc", label: "Longest" }, { id: "duration_asc", label: "Shortest" }, { id: "shuffle", label: "Surprise me" }, ]; const SHOWS = [ { id: "unwatched", label: "Unwatched" }, { id: "all", label: "All" }, { id: "watched", label: "Watched" }, { id: "saved", label: "Saved" }, ]; function TagChip({ tag, active, onClick, }: { tag: Tag; active: boolean; onClick: () => void; }) { return ( ); } export default function Sidebar({ filters, setFilters, }: { filters: FeedFilters; setFilters: (f: FeedFilters) => void; }) { const tagsQuery = useQuery({ queryKey: ["tags"], queryFn: api.tags }); const tags = tagsQuery.data ?? []; const languages = tags.filter((t) => t.category === "language"); const topics = tags.filter((t) => t.category === "topic"); function toggleTag(id: number) { const has = filters.tags.includes(id); setFilters({ ...filters, tags: has ? filters.tags.filter((t) => t !== id) : [...filters.tags, id], }); } const active = filters.tags.length > 0 || filters.includeShorts || filters.includeLive || filters.show !== "unwatched" || filters.sort !== "newest"; return ( ); } function Section({ title, right, children, }: { title: string; right?: React.ReactNode; children: React.ReactNode; }) { return (
{title}
{right}
{children}
); } function Toggle({ label, checked, onChange, }: { label: string; checked: boolean; onChange: (v: boolean) => void; }) { return ( ); }