From 44ec2921d4583436488e16739612fdf50b7a9b4b Mon Sep 17 00:00:00 2001 From: mlogclub Date: Tue, 2 Jun 2026 16:19:11 +0800 Subject: [PATCH] feat: add context menu support to DocumentList, FAQList, and KnowledgeBaseList for improved user interaction --- .../knowledge/_components/document-list.tsx | 21 +++++++++++++++---- .../knowledge/_components/faq-list.tsx | 15 ++++++++++--- .../_components/knowledge-base-list.tsx | 13 ++++++++++-- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/web/app/dashboard/knowledge/_components/document-list.tsx b/web/app/dashboard/knowledge/_components/document-list.tsx index 1e4e7c8..20d3374 100644 --- a/web/app/dashboard/knowledge/_components/document-list.tsx +++ b/web/app/dashboard/knowledge/_components/document-list.tsx @@ -152,6 +152,7 @@ export function DocumentList({ knowledgeBaseId, onActionStateChange }: DocumentL const [moving, setMoving] = useState(false); const [bulkMoveOpen, setBulkMoveOpen] = useState(false); const [selectedIds, setSelectedIds] = useState([]); + const [contextMenuDocumentId, setContextMenuDocumentId] = useState(null); const [selectedDirectoryId, setSelectedDirectoryId] = useState(null); const [actionLoadingMap, setActionLoadingMap] = useState>({}); const [dialogOpen, setDialogOpen] = useState(false); @@ -484,10 +485,16 @@ export function DocumentList({ knowledgeBaseId, onActionStateChange }: DocumentL ) : null} {documents.results.map((item) => ( viewMode === "grid" ? ( - + setContextMenuDocumentId(open ? item.id : null)} + >
@@ -569,10 +576,16 @@ export function DocumentList({ knowledgeBaseId, onActionStateChange }: DocumentL ) : ( - + setContextMenuDocumentId(open ? item.id : null)} + >
([]); + const [contextMenuFAQId, setContextMenuFAQId] = useState(null); const [importing, setImporting] = useState(false); const [importDialogOpen, setImportDialogOpen] = useState(false); const [selectedDirectoryId, setSelectedDirectoryId] = useState(null); @@ -429,9 +430,17 @@ export function FAQList({ ) : null} {faqs.results.map((item) => ( - + setContextMenuFAQId(open ? item.id : null)} + > -
+
event.stopPropagation()} diff --git a/web/app/dashboard/knowledge/_components/knowledge-base-list.tsx b/web/app/dashboard/knowledge/_components/knowledge-base-list.tsx index 666f1b1..075db61 100644 --- a/web/app/dashboard/knowledge/_components/knowledge-base-list.tsx +++ b/web/app/dashboard/knowledge/_components/knowledge-base-list.tsx @@ -82,7 +82,9 @@ function getStatusOptions(t: TFunction) { type SortableKnowledgeBaseCardProps = { item: KnowledgeBase; isSelected: boolean; + isContextMenuOpen: boolean; disabled: boolean; + onContextMenuOpenChange: (open: boolean) => void; onSelect: () => void; onEdit: () => void; onDelete: () => void; @@ -95,7 +97,9 @@ type SortableKnowledgeBaseCardProps = { function SortableKnowledgeBaseCard({ item, isSelected, + isContextMenuOpen, disabled, + onContextMenuOpenChange, onSelect, onEdit, onDelete, @@ -122,13 +126,13 @@ function SortableKnowledgeBaseCard({ }; return ( - + (null); const [knowledgeBases, setKnowledgeBases] = useState([]); + const [contextMenuKnowledgeBaseId, setContextMenuKnowledgeBaseId] = useState(null); const statusOptions = useMemo(() => getStatusOptions(t), [t]); const sensors = useSensors( @@ -487,7 +492,11 @@ export function KnowledgeBaseList({ key={item.id} item={item} isSelected={selectedKnowledgeBaseId === item.id} + isContextMenuOpen={contextMenuKnowledgeBaseId === item.id} disabled={loading || sorting} + onContextMenuOpenChange={(open) => + setContextMenuKnowledgeBaseId(open ? item.id : null) + } onSelect={() => onSelectKnowledgeBase(item)} onEdit={() => openEditDialog(item)} onDelete={() => void handleDelete(item)}