import { useAutoAnimate } from "@formkit/auto-animate/react"; import { useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { EditButton } from "@/components/buttons/EditButton"; import { Icons } from "@/components/Icon"; import { SectionHeading } from "@/components/layout/SectionHeading"; import { MediaGrid } from "@/components/media/MediaGrid"; import { WatchedMediaCard } from "@/components/media/WatchedMediaCard"; import { useBookmarkStore } from "@/stores/bookmarks"; import { useProgressStore } from "@/stores/progress"; import { MediaItem } from "@/utils/mediaTypes"; export function BookmarksPart() { const { t } = useTranslation(); const progressItems = useProgressStore((s) => s.items); const bookmarks = useBookmarkStore((s) => s.bookmarks); const removeBookmark = useBookmarkStore((s) => s.removeBookmark); const [editing, setEditing] = useState(false); const [gridRef] = useAutoAnimate(); const items = useMemo(() => { let output: MediaItem[] = []; Object.entries(bookmarks).forEach((entry) => { output.push({ id: entry[0], ...entry[1], }); }); output = output.sort((a, b) => { const bookmarkA = bookmarks[a.id]; const bookmarkB = bookmarks[b.id]; const progressA = progressItems[a.id]; const progressB = progressItems[b.id]; const dateA = Math.max(bookmarkA.updatedAt, progressA?.updatedAt ?? 0); const dateB = Math.max(bookmarkB.updatedAt, progressB?.updatedAt ?? 0); return dateB - dateA; }); return output; }, [bookmarks, progressItems]); if (items.length === 0) return null; return (
{items.map((v) => ( removeBookmark(v.id)} /> ))}
); }