From 8b69cddfb92b3b7548d3f90dbec1038c728ea5d9 Mon Sep 17 00:00:00 2001 From: kamtschatka Date: Mon, 30 Sep 2024 02:02:48 +0200 Subject: feature(web): Add ability to manually trigger full page archives. Fixes #398 (#418) * [Feature Request] Ability to select what to "crawl full page archive" #398 Added the ability to start a full page crawl for links and also in bulk operations added the ability to refresh links as a bulk operation as well * minor icon and wording changes --------- Co-authored-by: MohamedBassem --- .../components/dashboard/BulkBookmarksAction.tsx | 51 +++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) (limited to 'apps/web/components/dashboard/BulkBookmarksAction.tsx') diff --git a/apps/web/components/dashboard/BulkBookmarksAction.tsx b/apps/web/components/dashboard/BulkBookmarksAction.tsx index 0867fdd2..39e13940 100644 --- a/apps/web/components/dashboard/BulkBookmarksAction.tsx +++ b/apps/web/components/dashboard/BulkBookmarksAction.tsx @@ -8,10 +8,21 @@ import { import ActionConfirmingDialog from "@/components/ui/action-confirming-dialog"; import { useToast } from "@/components/ui/use-toast"; import useBulkActionsStore from "@/lib/bulkActions"; -import { CheckCheck, Hash, Link, List, Pencil, Trash2, X } from "lucide-react"; +import { + CheckCheck, + FileDown, + Hash, + Link, + List, + Pencil, + RotateCw, + Trash2, + X, +} from "lucide-react"; import { useDeleteBookmark, + useRecrawlBookmark, useUpdateBookmark, } from "@hoarder/shared-react/hooks/bookmarks"; import { BookmarkTypes } from "@hoarder/shared/types/bookmarks"; @@ -63,11 +74,35 @@ export default function BulkBookmarksAction() { onError, }); + const recrawlBookmarkMutator = useRecrawlBookmark({ + onSuccess: () => { + setIsBulkEditEnabled(false); + }, + onError, + }); + interface UpdateBookmarkProps { favourited?: boolean; archived?: boolean; } + const recrawlBookmarks = async (archiveFullPage: boolean) => { + const links = selectedBookmarks.filter( + (item) => item.content.type === BookmarkTypes.LINK, + ); + await Promise.all( + links.map((item) => + recrawlBookmarkMutator.mutateAsync({ + bookmarkId: item.id, + archiveFullPage, + }), + ), + ); + toast({ + description: `${links.length} bookmarks will be ${archiveFullPage ? "re-crawled and archived!" : "refreshed!"}`, + }); + }; + function isClipboardAvailable() { if (typeof window === "undefined") { return false; @@ -172,6 +207,20 @@ export default function BulkBookmarksAction() { isPending: updateBookmarkMutator.isPending, hidden: !isBulkEditEnabled, }, + { + name: "Download Full Page Archive", + icon: , + action: () => recrawlBookmarks(true), + isPending: recrawlBookmarkMutator.isPending, + hidden: !isBulkEditEnabled, + }, + { + name: "Refresh", + icon: , + action: () => recrawlBookmarks(false), + isPending: recrawlBookmarkMutator.isPending, + hidden: !isBulkEditEnabled, + }, { name: "Delete", icon: , -- cgit v1.2.3-70-g09d2