aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/components/dashboard/lists/ListOptions.tsx
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2024-04-19 00:09:27 +0100
committerGitHub <noreply@github.com>2024-04-19 00:09:27 +0100
commite0999f701cd1834c3d940113cd8dd5247c5fe95f (patch)
treec4169a564ecd3f933e711bcc8ef7db20532174ea /apps/web/components/dashboard/lists/ListOptions.tsx
parentdeba31ee010f785a9739fd4df8a64a3056c9593d (diff)
downloadkarakeep-e0999f701cd1834c3d940113cd8dd5247c5fe95f.tar.zst
feature: Nested lists (#110). Fixes #62
* feature: Add support for nested lists * prevent moving the parent to a subtree
Diffstat (limited to 'apps/web/components/dashboard/lists/ListOptions.tsx')
-rw-r--r--apps/web/components/dashboard/lists/ListOptions.tsx71
1 files changed, 71 insertions, 0 deletions
diff --git a/apps/web/components/dashboard/lists/ListOptions.tsx b/apps/web/components/dashboard/lists/ListOptions.tsx
new file mode 100644
index 00000000..b44d8a23
--- /dev/null
+++ b/apps/web/components/dashboard/lists/ListOptions.tsx
@@ -0,0 +1,71 @@
+"use client";
+
+import { useState } from "react";
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu";
+import { Pencil, Plus, Trash2 } from "lucide-react";
+
+import { ZBookmarkList } from "@hoarder/shared/types/lists";
+
+import { EditListModal } from "../lists/EditListModal";
+import DeleteListConfirmationDialog from "./DeleteListConfirmationDialog";
+
+export function ListOptions({
+ list,
+ children,
+}: {
+ list: ZBookmarkList;
+ children?: React.ReactNode;
+}) {
+ const [deleteListDialogOpen, setDeleteListDialogOpen] = useState(false);
+ const [newNestedListModalOpen, setNewNestedListModalOpen] = useState(false);
+ const [editModalOpen, setEditModalOpen] = useState(false);
+
+ return (
+ <DropdownMenu>
+ <EditListModal
+ open={newNestedListModalOpen}
+ setOpen={setNewNestedListModalOpen}
+ parent={list}
+ />
+ <EditListModal
+ open={editModalOpen}
+ setOpen={setEditModalOpen}
+ list={list}
+ />
+ <DeleteListConfirmationDialog
+ list={list}
+ open={deleteListDialogOpen}
+ setOpen={setDeleteListDialogOpen}
+ />
+ <DropdownMenuTrigger asChild>{children}</DropdownMenuTrigger>
+ <DropdownMenuContent>
+ <DropdownMenuItem
+ className="flex gap-2"
+ onClick={() => setEditModalOpen(true)}
+ >
+ <Pencil className="size-4" />
+ <span>Edit</span>
+ </DropdownMenuItem>
+ <DropdownMenuItem
+ className="flex gap-2"
+ onClick={() => setNewNestedListModalOpen(true)}
+ >
+ <Plus className="size-4" />
+ <span>New nested list</span>
+ </DropdownMenuItem>
+ <DropdownMenuItem
+ className="flex gap-2"
+ onClick={() => setDeleteListDialogOpen(true)}
+ >
+ <Trash2 className="size-4" />
+ <span>Delete</span>
+ </DropdownMenuItem>
+ </DropdownMenuContent>
+ </DropdownMenu>
+ );
+}