From 3a98987f715befe9b01155882813eda790c6db9a Mon Sep 17 00:00:00 2001 From: zoubenr Date: Wed, 6 May 2026 12:42:19 -0400 Subject: [PATCH] Add quick archive action to session rows (#1124) * feat: add quick archive action to session rows * refine quick archive row spacing and handler consistency --------- Co-authored-by: Zoubair Benryane Co-authored-by: Bohdan Triapitsyn --- .../session/sidebar/SessionNodeItem.tsx | 56 ++++++++++++++++--- 1 file changed, 49 insertions(+), 7 deletions(-) diff --git a/packages/ui/src/components/session/sidebar/SessionNodeItem.tsx b/packages/ui/src/components/session/sidebar/SessionNodeItem.tsx index 12206875..eedb5ce4 100644 --- a/packages/ui/src/components/session/sidebar/SessionNodeItem.tsx +++ b/packages/ui/src/components/session/sidebar/SessionNodeItem.tsx @@ -13,6 +13,7 @@ import { import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import { RiAddLine, + RiArchiveLine, RiArrowDownSLine, RiArrowRightSLine, RiChat4Line, @@ -274,11 +275,12 @@ function SessionNodeItemComponent(props: Props): React.ReactNode { : 'group-hover:opacity-0 group-focus-within:opacity-0'; const revealPaddingClass = isMinimalMode ? (isVSCode - ? 'group-hover:pr-1' - : 'group-hover:pr-1 group-focus-within:pr-1') + ? 'group-hover:pr-2' + : 'group-hover:pr-2 group-focus-within:pr-2') : (isVSCode - ? 'group-hover:pr-5' - : 'group-hover:pr-5 group-focus-within:pr-5'); + ? (archivedBucket ? 'group-hover:pr-5' : 'group-hover:pr-12') + : (archivedBucket ? 'group-hover:pr-5 group-focus-within:pr-5' : 'group-hover:pr-12 group-focus-within:pr-12')); + const alwaysActionPaddingClass = archivedBucket ? 'pr-7' : 'pr-13'; const suppressNextSelectRef = React.useRef(false); const [isTouchPressed, setIsTouchPressed] = React.useState(false); @@ -564,6 +566,23 @@ function SessionNodeItemComponent(props: Props): React.ReactNode { event.stopPropagation(); }; + const handleQuickArchivePointerDown = (event: React.PointerEvent) => { + event.preventDefault(); + event.stopPropagation(); + }; + + const handleQuickArchiveMouseDown = (event: React.MouseEvent) => { + event.preventDefault(); + event.stopPropagation(); + }; + + const handleQuickArchiveClick = (event: React.MouseEvent) => { + event.preventDefault(); + event.stopPropagation(); + setOpenSidebarMenuKey(null); + handleDeleteSession(session, { archivedBucket }); + }; + const handleRowSelect = (event?: React.MouseEvent) => { if (suppressNextSelectRef.current) { suppressNextSelectRef.current = false; @@ -745,7 +764,7 @@ function SessionNodeItemComponent(props: Props): React.ReactNode { 'flex min-w-0 flex-1 cursor-pointer flex-col gap-0 overflow-hidden rounded-sm text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 text-foreground select-none disabled:cursor-not-allowed transition-[padding]', isTouchPressed && 'bg-interactive-hover/70', alwaysShowActions - ? (isVSCode ? revealPaddingClass : 'pr-7') + ? (isVSCode ? revealPaddingClass : alwaysActionPaddingClass) : revealPaddingClass, )} > @@ -809,7 +828,7 @@ function SessionNodeItemComponent(props: Props): React.ReactNode { 'flex min-w-0 flex-1 cursor-pointer flex-col gap-0 overflow-hidden rounded-sm text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 text-foreground select-none disabled:cursor-not-allowed transition-[padding]', isTouchPressed && 'bg-interactive-hover/70', alwaysShowActions - ? (isVSCode ? revealPaddingClass : 'pr-7') + ? (isVSCode ? revealPaddingClass : alwaysActionPaddingClass) : revealPaddingClass )} > @@ -844,13 +863,36 @@ function SessionNodeItemComponent(props: Props): React.ReactNode { ) : null}
+ {!archivedBucket ? ( + + + + + + {t('sessions.sidebar.bulkActions.archive')} + + + ) : null}