From 4db28ed94780ad2a22f080c2fae54ce0e4e1cf15 Mon Sep 17 00:00:00 2001 From: Waleed Date: Mon, 12 Jan 2026 11:25:00 -0800 Subject: [PATCH] feat(export): added the ability to export workflow (#2777) * feat(export): added the ability to export workflow * improvement(import): loading animation * fixed flicker on importing multiple workflows * ack pr comments * standardized import/export hooks * upgraded turborepo * cleaned up --------- Co-authored-by: Emir Karabeg --- .../w/[workflowId]/components/panel/panel.tsx | 2 +- .../components/context-menu/context-menu.tsx | 2 +- .../components/folder-item/folder-item.tsx | 30 +-- .../workflow-item/workflow-item.tsx | 51 ++-- .../workflow-list/workflow-list.tsx | 11 +- .../w/components/sidebar/sidebar.tsx | 54 ++-- .../workspace/[workspaceId]/w/hooks/index.ts | 1 + .../w/hooks/use-delete-folder.ts | 31 +-- .../w/hooks/use-delete-workflow.ts | 51 +--- .../w/hooks/use-duplicate-folder.ts | 29 +-- .../w/hooks/use-duplicate-workflow.ts | 116 ++++----- .../w/hooks/use-duplicate-workspace.ts | 25 +- .../w/hooks/use-export-folder.ts | 237 ++++++++++++++++++ .../w/hooks/use-export-workflow.ts | 233 ++++++++--------- .../w/hooks/use-export-workspace.ts | 3 - .../w/hooks/use-import-workflow.ts | 20 +- .../w/hooks/use-import-workspace.ts | 24 +- .../emcn/icons/animate/download.module.css | 22 ++ apps/sim/components/emcn/icons/download.tsx | 42 ++++ apps/sim/components/emcn/icons/index.ts | 1 + apps/sim/stores/workflows/registry/store.ts | 20 +- bun.lock | 17 +- package.json | 2 +- 23 files changed, 587 insertions(+), 437 deletions(-) create mode 100644 apps/sim/app/workspace/[workspaceId]/w/hooks/use-export-folder.ts create mode 100644 apps/sim/components/emcn/icons/animate/download.module.css create mode 100644 apps/sim/components/emcn/icons/download.tsx diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx index c7cb0c725..7eb13b798 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx @@ -113,7 +113,7 @@ export function Panel() { // Delete workflow hook const { isDeleting, handleDeleteWorkflow } = useDeleteWorkflow({ workspaceId, - getWorkflowIds: () => activeWorkflowId || '', + workflowIds: activeWorkflowId || '', isActive: true, onSuccess: () => setIsDeleteModalOpen(false), }) 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 769fe71d7..6be102415 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 @@ -373,7 +373,7 @@ export function ContextMenu({ onKeyDown={handleHexKeyDown} onFocus={handleHexFocus} onClick={(e) => e.stopPropagation()} - className='h-[20px] min-w-0 flex-1 rounded-[4px] bg-[#363636] px-[6px] text-[11px] text-white uppercase focus:outline-none' + className='h-[20px] min-w-0 flex-1 rounded-[4px] bg-[#363636] px-[6px] text-[11px] text-white uppercase caret-white focus:outline-none' /> - - -

{isImporting ? 'Importing workflow...' : 'Import workflow'}

-
- + {isImporting ? ( + + ) : ( + + + + + +

Import workflows

+
+
+ )}