From 98a74bd73592e6ef3c6c005f9083aa425cf4243d Mon Sep 17 00:00:00 2001 From: waleed Date: Wed, 10 Dec 2025 10:57:42 -0800 Subject: [PATCH] feat(folders): add the ability to create a folder within a folder in popover --- .../components/context-menu/context-menu.tsx | 34 +++++++++++++++++-- .../components/folder-item/folder-item.tsx | 22 +++++++++++- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workflow-list/components/context-menu/context-menu.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workflow-list/components/context-menu/context-menu.tsx index b92224dd15..38301b5c47 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workflow-list/components/context-menu/context-menu.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workflow-list/components/context-menu/context-menu.tsx @@ -28,9 +28,13 @@ interface ContextMenuProps { */ onRename?: () => void /** - * Callback when create is clicked (for folders) + * Callback when create workflow is clicked (for folders) */ onCreate?: () => void + /** + * Callback when create folder is clicked (for folders) + */ + onCreateFolder?: () => void /** * Callback when duplicate is clicked */ @@ -54,10 +58,15 @@ interface ContextMenuProps { */ showRename?: boolean /** - * Whether to show the create option (default: false) + * Whether to show the create workflow option (default: false) * Set to true for folders to create workflows inside */ showCreate?: boolean + /** + * Whether to show the create folder option (default: false) + * Set to true for folders to create sub-folders inside + */ + showCreateFolder?: boolean /** * Whether to show the duplicate option (default: true) * Set to false for items that cannot be duplicated @@ -89,10 +98,15 @@ interface ContextMenuProps { */ disableDelete?: boolean /** - * Whether the create option is disabled (default: false) + * Whether the create workflow option is disabled (default: false) * Set to true when creation is in progress or user lacks permissions */ disableCreate?: boolean + /** + * Whether the create folder option is disabled (default: false) + * Set to true when creation is in progress or user lacks permissions + */ + disableCreateFolder?: boolean } /** @@ -110,12 +124,14 @@ export function ContextMenu({ onOpenInNewTab, onRename, onCreate, + onCreateFolder, onDuplicate, onExport, onDelete, showOpenInNewTab = false, showRename = true, showCreate = false, + showCreateFolder = false, showDuplicate = true, showExport = false, disableExport = false, @@ -123,6 +139,7 @@ export function ContextMenu({ disableDuplicate = false, disableDelete = false, disableCreate = false, + disableCreateFolder = false, }: ContextMenuProps) { return ( @@ -168,6 +185,17 @@ export function ContextMenu({ Create workflow )} + {showCreateFolder && onCreateFolder && ( + { + onCreateFolder() + onClose() + }} + > + Create folder + + )} {showDuplicate && onDuplicate && ( { + try { + await createFolderMutation.mutateAsync({ + workspaceId, + name: 'New Folder', + parentId: folder.id, + }) + } catch (error) { + logger.error('Failed to create folder:', error) + } + }, [createFolderMutation, workspaceId, folder.id]) + // Folder expand hook const { isExpanded, @@ -279,11 +296,14 @@ export function FolderItem({ folder, level, hoverHandlers }: FolderItemProps) { onClose={closeMenu} onRename={handleStartEdit} onCreate={handleCreateWorkflowInFolder} + onCreateFolder={handleCreateFolderInFolder} onDuplicate={handleDuplicateFolder} onDelete={() => setIsDeleteModalOpen(true)} showCreate={true} + showCreateFolder={true} disableRename={!userPermissions.canEdit} disableCreate={!userPermissions.canEdit || createWorkflowMutation.isPending} + disableCreateFolder={!userPermissions.canEdit || createFolderMutation.isPending} disableDuplicate={!userPermissions.canEdit} disableDelete={!userPermissions.canEdit} />