From f99f4c0ff118547388a7e1ea332aa8755a8c9baf Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Sun, 19 May 2024 17:56:57 +0000 Subject: feature(web): Add an archive button to list management dialog --- .../action-buttons/ArchiveBookmarkButton.tsx | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 apps/web/components/dashboard/bookmarks/action-buttons/ArchiveBookmarkButton.tsx (limited to 'apps/web/components/dashboard/bookmarks/action-buttons/ArchiveBookmarkButton.tsx') diff --git a/apps/web/components/dashboard/bookmarks/action-buttons/ArchiveBookmarkButton.tsx b/apps/web/components/dashboard/bookmarks/action-buttons/ArchiveBookmarkButton.tsx new file mode 100644 index 00000000..671c9bb2 --- /dev/null +++ b/apps/web/components/dashboard/bookmarks/action-buttons/ArchiveBookmarkButton.tsx @@ -0,0 +1,64 @@ +import React from "react"; +import { ActionButton, ActionButtonProps } from "@/components/ui/action-button"; +import { toast } from "@/components/ui/use-toast"; +import { api } from "@/lib/trpc"; + +import { useUpdateBookmark } from "@hoarder/shared-react/hooks/bookmarks"; + +interface ArchiveBookmarkButtonProps + extends Omit { + bookmarkId: string; + onDone?: () => void; +} + +const ArchiveBookmarkButton = React.forwardRef< + HTMLButtonElement, + ArchiveBookmarkButtonProps +>(({ bookmarkId, onDone, ...props }, ref) => { + const { data } = api.bookmarks.getBookmark.useQuery({ bookmarkId }); + + const { mutate: updateBookmark, isPending: isArchivingBookmark } = + useUpdateBookmark({ + onSuccess: () => { + toast({ + description: "Bookmark has been archived!", + }); + onDone?.(); + }, + onError: (e) => { + if (e.data?.code == "BAD_REQUEST") { + toast({ + variant: "destructive", + description: e.message, + }); + } else { + toast({ + variant: "destructive", + title: "Something went wrong", + }); + } + }, + }); + + if (!data) { + return ; + } + + return ( + + updateBookmark({ + bookmarkId, + archived: !data.archived, + }) + } + {...props} + /> + ); +}); + +ArchiveBookmarkButton.displayName = "ArchiveBookmarkButton"; +export default ArchiveBookmarkButton; -- cgit v1.2.3-70-g09d2