From 3578c85e39e6abd3f3e08ca5b4f2e758af8f17bd Mon Sep 17 00:00:00 2001 From: "Timothy J. Baek" Date: Thu, 17 Oct 2024 00:17:50 -0700 Subject: [PATCH] feat: folder menu --- src/app.css | 4 +- src/lib/components/common/Collapsible.svelte | 4 +- src/lib/components/common/Dropdown.svelte | 2 +- src/lib/components/layout/Sidebar.svelte | 2 +- .../components/layout/Sidebar/ChatItem.svelte | 2 +- .../components/layout/Sidebar/ChatMenu.svelte | 16 ++--- .../layout/Sidebar/Folders/FolderMenu.svelte | 58 ++++++++++++++++ .../layout/Sidebar/RecursiveFolder.svelte | 67 ++++++++++++++----- 8 files changed, 123 insertions(+), 32 deletions(-) diff --git a/src/app.css b/src/app.css index 7a8bf59b0..53700abc6 100644 --- a/src/app.css +++ b/src/app.css @@ -56,7 +56,7 @@ li p { ::-webkit-scrollbar-thumb { --tw-border-opacity: 1; - background-color: rgba(217, 217, 227, 0.8); + background-color: rgba(236, 236, 236, 0.8); border-color: rgba(255, 255, 255, var(--tw-border-opacity)); border-radius: 9999px; border-width: 1px; @@ -64,7 +64,7 @@ li p { /* Dark theme scrollbar styles */ .dark ::-webkit-scrollbar-thumb { - background-color: rgba(69, 69, 74, 0.8); /* Darker color for dark theme */ + background-color: rgba(33, 33, 33, 0.8); /* Darker color for dark theme */ border-color: rgba(0, 0, 0, var(--tw-border-opacity)); } diff --git a/src/lib/components/common/Collapsible.svelte b/src/lib/components/common/Collapsible.svelte index 72baec4cf..6c9f1644a 100644 --- a/src/lib/components/common/Collapsible.svelte +++ b/src/lib/components/common/Collapsible.svelte @@ -14,6 +14,8 @@ export let className = ''; export let buttonClassName = 'w-fit'; export let title = null; + + export let disabled = false;
@@ -47,7 +49,7 @@
{/if} - {#if open} + {#if open && !disabled}
diff --git a/src/lib/components/common/Dropdown.svelte b/src/lib/components/common/Dropdown.svelte index e8e1eb8b5..b01bceace 100644 --- a/src/lib/components/common/Dropdown.svelte +++ b/src/lib/components/common/Dropdown.svelte @@ -22,7 +22,7 @@ { pinHandler(); }} @@ -82,7 +82,7 @@ { renameHandler(); }} @@ -92,7 +92,7 @@ { cloneChatHandler(); }} @@ -102,7 +102,7 @@ { archiveChatHandler(); }} @@ -112,7 +112,7 @@ { shareHandler(); }} @@ -122,7 +122,7 @@ { deleteHandler(); }} @@ -131,7 +131,7 @@
{$i18n.t('Delete')}
-
+
+ import { DropdownMenu } from 'bits-ui'; + import { flyAndScale } from '$lib/utils/transitions'; + import { getContext, createEventDispatcher } from 'svelte'; + + const i18n = getContext('i18n'); + const dispatch = createEventDispatcher(); + + import Dropdown from '$lib/components/common/Dropdown.svelte'; + import GarbageBin from '$lib/components/icons/GarbageBin.svelte'; + import Pencil from '$lib/components/icons/Pencil.svelte'; + import Tooltip from '$lib/components/common/Tooltip.svelte'; + + let show = false; + + + { + if (e.detail === false) { + dispatch('close'); + } + }} +> + + + + +
+ + { + dispatch('rename'); + }} + > + +
{$i18n.t('Rename')}
+
+ + { + dispatch('delete'); + }} + > + +
{$i18n.t('Delete')}
+
+
+
+
diff --git a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte index 1068bf5fb..e3397fad7 100644 --- a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte +++ b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte @@ -1,5 +1,5 @@ {#if dragged && x && y} @@ -252,6 +281,8 @@ bind:open className="w-full" buttonClassName="w-full" + disabled={(folders[folderId]?.childrenIds ?? []).length === 0 && + (folders[folderId].items?.chats ?? []).length === 0} on:change={(e) => { dispatch('open', e.detail); }} @@ -259,16 +290,10 @@
+ +
- {#if folders[folderId].childrenIds || folders[folderId].items?.chats} + {#if (folders[folderId]?.childrenIds ?? []).length > 0 || (folders[folderId].items?.chats ?? []).length > 0}