From d193d9bf89e8a88bf70b673ea5e438d73cf40c0c Mon Sep 17 00:00:00 2001 From: Md Saban <45597394+mdsaban@users.noreply.github.com> Date: Tue, 2 Jul 2024 03:51:23 +0530 Subject: feat: Add bulk edit option for bookmarks. Fixes #84 (#259) * feat: add bulk edit option for bookmarks * fix: resolve comments * fix: resolve comments * fix: resolve comments * fix: resolve comments * rename bulk action store, simplify the bulk action toolbar --------- Co-authored-by: MohamedBassem --- .../dashboard/bookmarks/BookmarkActionBar.tsx | 2 +- .../bookmarks/BookmarkLayoutAdaptingCard.tsx | 62 ++++++++++++++++++++-- apps/web/components/dashboard/bookmarks/icons.tsx | 12 +++-- 3 files changed, 68 insertions(+), 8 deletions(-) (limited to 'apps/web/components/dashboard/bookmarks') diff --git a/apps/web/components/dashboard/bookmarks/BookmarkActionBar.tsx b/apps/web/components/dashboard/bookmarks/BookmarkActionBar.tsx index 6cc8e44e..299f47eb 100644 --- a/apps/web/components/dashboard/bookmarks/BookmarkActionBar.tsx +++ b/apps/web/components/dashboard/bookmarks/BookmarkActionBar.tsx @@ -22,7 +22,7 @@ export default function BookmarkActionBar({ href={`/dashboard/preview/${bookmark.id}`} className={cn(buttonVariants({ variant: "ghost" }), "px-2")} > - + diff --git a/apps/web/components/dashboard/bookmarks/BookmarkLayoutAdaptingCard.tsx b/apps/web/components/dashboard/bookmarks/BookmarkLayoutAdaptingCard.tsx index e1cc1f7c..33b65108 100644 --- a/apps/web/components/dashboard/bookmarks/BookmarkLayoutAdaptingCard.tsx +++ b/apps/web/components/dashboard/bookmarks/BookmarkLayoutAdaptingCard.tsx @@ -1,12 +1,15 @@ import type { BookmarksLayoutTypes } from "@/lib/userLocalSettings/types"; -import React from "react"; +import React, { useEffect, useState } from "react"; import Link from "next/link"; +import useBulkActionsStore from "@/lib/bulkActions"; import { bookmarkLayoutSwitch, useBookmarkLayout, } from "@/lib/userLocalSettings/bookmarksLayout"; import { cn } from "@/lib/utils"; import dayjs from "dayjs"; +import { Check } from "lucide-react"; +import { useTheme } from "next-themes"; import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; import { isBookmarkStillTagging } from "@hoarder/shared-react/utils/bookmarkUtils"; @@ -45,6 +48,57 @@ function BottomRow({ ); } +function MultiBookmarkSelector({ bookmark }: { bookmark: ZBookmark }) { + const { selectedBookmarks, isBulkEditEnabled } = useBulkActionsStore(); + const toggleBookmark = useBulkActionsStore((state) => state.toggleBookmark); + const [isSelected, setIsSelected] = useState(false); + const { theme } = useTheme(); + + useEffect(() => { + setIsSelected(selectedBookmarks.some((item) => item.id === bookmark.id)); + }, [selectedBookmarks]); + + if (!isBulkEditEnabled) return null; + + const getIconColor = () => { + if (theme === "dark") { + return isSelected ? "black" : "white"; + } + return isSelected ? "white" : "black"; + }; + + const getIconBackgroundColor = () => { + if (theme === "dark") { + return isSelected ? "bg-white" : "bg-white bg-opacity-10"; + } + return isSelected ? "bg-black" : "bg-white bg-opacity-40"; + }; + + return ( + + + ); +} + function ListView({ bookmark, image, @@ -56,10 +110,11 @@ function ListView({ return (
+
{image("list", "object-cover rounded-lg size-32")}
@@ -100,11 +155,12 @@ function GridView({ return (
+ {img &&
{img}
}
diff --git a/apps/web/components/dashboard/bookmarks/icons.tsx b/apps/web/components/dashboard/bookmarks/icons.tsx index d899f19d..04e3ff32 100644 --- a/apps/web/components/dashboard/bookmarks/icons.tsx +++ b/apps/web/components/dashboard/bookmarks/icons.tsx @@ -3,27 +3,31 @@ import { Archive, ArchiveRestore, Star } from "lucide-react"; export function FavouritedActionIcon({ favourited, className, + size, }: { favourited: boolean; className?: string; + size?: number; }) { return favourited ? ( - + ) : ( - + ); } export function ArchivedActionIcon({ archived, className, + size, }: { archived: boolean; className?: string; + size?: number; }) { return archived ? ( - + ) : ( - + ); } -- cgit v1.2.3-70-g09d2