"use client"; import { useToast } from "@/components/ui/use-toast"; import { api } from "@/lib/trpc"; import { ZBookmark } from "@/lib/types/api/bookmarks"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Archive, MoreHorizontal, RotateCw, Star, Tags, Trash2, } from "lucide-react"; import { useTagModel } from "./TagModal"; export default function BookmarkOptions({ bookmark }: { bookmark: ZBookmark }) { const { toast } = useToast(); const linkId = bookmark.id; const [_, setTagModalIsOpen, tagModal] = useTagModel(bookmark); const invalidateBookmarksCache = api.useUtils().bookmarks.invalidate; const onError = () => { toast({ variant: "destructive", title: "Something went wrong", description: "There was a problem with your request.", }); }; const onSettled = () => { invalidateBookmarksCache(); }; const deleteBookmarkMutator = api.bookmarks.deleteBookmark.useMutation({ onSuccess: () => { toast({ description: "The bookmark has been deleted!", }); }, onError, onSettled, }); const updateBookmarkMutator = api.bookmarks.updateBookmark.useMutation({ onSuccess: () => { toast({ description: "The bookmark has been updated!", }); }, onError, onSettled, }); const crawlBookmarkMutator = api.bookmarks.recrawlBookmark.useMutation({ onSuccess: () => { toast({ description: "Re-fetch has been enqueued!", }); }, onError, onSettled, }); return ( <> {tagModal} updateBookmarkMutator.mutate({ bookmarkId: linkId, favourited: !bookmark.favourited, }) } > {bookmark.favourited ? "Un-favourite" : "Favourite"} updateBookmarkMutator.mutate({ bookmarkId: linkId, archived: !bookmark.archived, }) } > {bookmark.archived ? "Un-archive" : "Archive"} setTagModalIsOpen(true)}> Edit Tags crawlBookmarkMutator.mutate({ bookmarkId: bookmark.id }) } > Refresh deleteBookmarkMutator.mutate({ bookmarkId: bookmark.id }) } > Delete ); }