From df5d3a6dbce28b7f1e0b517364895b62b47187af Mon Sep 17 00:00:00 2001 From: hjlarry Date: Mon, 13 Apr 2026 18:00:51 +0800 Subject: [PATCH] broadcast workflow updates after DSL import --- .../workflow/__tests__/update-dsl-modal.spec.tsx | 9 +++++++++ web/app/components/workflow/update-dsl-modal.tsx | 4 +--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/web/app/components/workflow/__tests__/update-dsl-modal.spec.tsx b/web/app/components/workflow/__tests__/update-dsl-modal.spec.tsx index 961ab6ddb48..d56cf807792 100644 --- a/web/app/components/workflow/__tests__/update-dsl-modal.spec.tsx +++ b/web/app/components/workflow/__tests__/update-dsl-modal.spec.tsx @@ -17,6 +17,7 @@ class MockFileReader { vi.stubGlobal('FileReader', MockFileReader as unknown as typeof FileReader) const mockEmit = vi.fn() +const mockEmitWorkflowUpdate = vi.hoisted(() => vi.fn()) vi.mock('@/app/components/base/ui/toast', () => ({ toast: { @@ -39,6 +40,12 @@ vi.mock('@/service/workflow', () => ({ fetchWorkflowDraft: (path: string) => mockFetchWorkflowDraft(path), })) +vi.mock('../collaboration/core/collaboration-manager', () => ({ + collaborationManager: { + emitWorkflowUpdate: mockEmitWorkflowUpdate, + }, +})) + const mockHandleCheckPluginDependencies = vi.fn() vi.mock('@/app/components/workflow/plugin-dependency/hooks', () => ({ usePluginDependencies: () => ({ @@ -138,6 +145,7 @@ describe('UpdateDSLModal', () => { expect(mockEmit).toHaveBeenCalledWith(expect.objectContaining({ type: 'WORKFLOW_DATA_UPDATE', })) + expect(mockEmitWorkflowUpdate).toHaveBeenCalledWith('app-1') expect(defaultProps.onImport).toHaveBeenCalledTimes(1) expect(defaultProps.onCancel).toHaveBeenCalledTimes(1) }) @@ -187,6 +195,7 @@ describe('UpdateDSLModal', () => { await waitFor(() => { expect(mockImportDSLConfirm).toHaveBeenCalledWith({ import_id: 'import-2' }) }) + expect(mockEmitWorkflowUpdate).toHaveBeenCalledWith('app-1') }) it('should open the pending modal after the timeout and allow dismissing it', async () => { diff --git a/web/app/components/workflow/update-dsl-modal.tsx b/web/app/components/workflow/update-dsl-modal.tsx index b29ae657e44..6847157200d 100644 --- a/web/app/components/workflow/update-dsl-modal.tsx +++ b/web/app/components/workflow/update-dsl-modal.tsx @@ -114,6 +114,7 @@ const UpdateDSLModal = ({ } await handleWorkflowUpdate(appId) + collaborationManager.emitWorkflowUpdate(appId) onImport?.() const payload = getImportNotificationPayload(status, t) toast[payload.type](payload.message, payload.children ? { description: payload.children } : undefined) @@ -183,9 +184,6 @@ const UpdateDSLModal = ({ if (isImportCompleted(status)) { await handleCompletedImport(status, app_id) - // Notify other collaboration clients about the workflow update - if (app_id) - collaborationManager.emitWorkflowUpdate(app_id) } else if (status === DSLImportStatus.FAILED) { setLoading(false)