diff --git a/web/app/components/workflow/skill/file-operations-menu.tsx b/web/app/components/workflow/skill/file-operations-menu.tsx index 170a8484fe..b48558c0b0 100644 --- a/web/app/components/workflow/skill/file-operations-menu.tsx +++ b/web/app/components/workflow/skill/file-operations-menu.tsx @@ -22,6 +22,30 @@ import { cn } from '@/utils/classnames' * - Upload Folder: Upload entire folder structure (webkitdirectory) */ +type MenuItemProps = { + icon: React.ElementType + label: string + onClick: () => void + disabled?: boolean +} + +const MenuItem: React.FC = ({ icon: Icon, label, onClick, disabled }) => ( + +) + type FileOperationsMenuProps = { /** Target folder ID, or 'root' for root level */ nodeId: string @@ -122,16 +146,6 @@ const FileOperationsMenu: FC = ({ } }, [appId, createFolder, onClose, parentId, t]) - // Handle Upload File button click - const handleUploadFileClick = useCallback(() => { - fileInputRef.current?.click() - }, []) - - // Handle Upload Folder button click - const handleUploadFolderClick = useCallback(() => { - folderInputRef.current?.click() - }, []) - // Handle file input change (single or multiple files) const handleFileChange = useCallback(async (e: React.ChangeEvent) => { const files = Array.from(e.target.files || []) @@ -280,72 +294,34 @@ const FileOperationsMenu: FC = ({ onChange={handleFolderChange} /> - {/* New File */} - - - {/* New Folder */} - + /> {/* Divider */}
- {/* Upload File */} - - - {/* Upload Folder */} - + />
) } diff --git a/web/app/components/workflow/skill/file-tree-node.tsx b/web/app/components/workflow/skill/file-tree-node.tsx index abed6b878a..37def8f5b9 100644 --- a/web/app/components/workflow/skill/file-tree-node.tsx +++ b/web/app/components/workflow/skill/file-tree-node.tsx @@ -77,11 +77,6 @@ const FileTreeNode = ({ node, style, dragHandle }: NodeRendererProps { - setShowDropdown(false) - }, []) - // More button click handler const handleMoreClick = useCallback((e: React.MouseEvent) => { e.stopPropagation() @@ -164,7 +159,7 @@ const FileTreeNode = ({ node, style, dragHandle }: NodeRendererProps setShowDropdown(false)} /> diff --git a/web/app/components/workflow/skill/files.tsx b/web/app/components/workflow/skill/files.tsx index 133df0fe00..7c285af93a 100644 --- a/web/app/components/workflow/skill/files.tsx +++ b/web/app/components/workflow/skill/files.tsx @@ -92,7 +92,7 @@ const Files: React.FC = ({ className }) => { // Update store for state persistence if (ancestors.length > 0) - storeApi.getState().revealFile(activeTabId, ancestors) + storeApi.getState().revealFile(ancestors) // Use Tree API for immediate UI update (initialOpenState only applies on first render) const timeoutId = setTimeout(() => { diff --git a/web/app/components/workflow/skill/store/index.ts b/web/app/components/workflow/skill/store/index.ts index 93765f14b4..a69f4a9016 100644 --- a/web/app/components/workflow/skill/store/index.ts +++ b/web/app/components/workflow/skill/store/index.ts @@ -98,7 +98,7 @@ export type FileTreeSliceShape = { /** Toggle a folder's expanded state */ toggleFolder: (folderId: string) => void /** Reveal a file by expanding all ancestor folders */ - revealFile: (fileId: string, ancestorFolderIds: string[]) => void + revealFile: (ancestorFolderIds: string[]) => void } export const createFileTreeSlice: StateCreator = (set, get) => ({ @@ -119,7 +119,7 @@ export const createFileTreeSlice: StateCreator = (set, get) set({ expandedFolderIds: newSet }) }, - revealFile: (_fileId: string, ancestorFolderIds: string[]) => { + revealFile: (ancestorFolderIds: string[]) => { const { expandedFolderIds } = get() const newSet = new Set(expandedFolderIds) // Expand all ancestors diff --git a/web/app/components/workflow/skill/type.ts b/web/app/components/workflow/skill/type.ts index 9819c55e9a..222d3456eb 100644 --- a/web/app/components/workflow/skill/type.ts +++ b/web/app/components/workflow/skill/type.ts @@ -102,11 +102,7 @@ export function getAncestorIds(nodeId: string, nodes: AppAssetTreeView[]): strin * @returns Object for react-arborist opens prop */ export function toOpensObject(expandedIds: Set): Record { - const opens: Record = {} - expandedIds.forEach((id) => { - opens[id] = true - }) - return opens + return Object.fromEntries([...expandedIds].map(id => [id, true])) } /**