diff --git a/easyflow-ui-admin/app/src/components/headerSearch/HeaderSearch.vue b/easyflow-ui-admin/app/src/components/headerSearch/HeaderSearch.vue index fed10ffe..9dffeb7e 100644 --- a/easyflow-ui-admin/app/src/components/headerSearch/HeaderSearch.vue +++ b/easyflow-ui-admin/app/src/components/headerSearch/HeaderSearch.vue @@ -1,5 +1,5 @@ diff --git a/easyflow-ui-admin/app/src/router/__tests__/detail-return-navigation.test.ts b/easyflow-ui-admin/app/src/router/__tests__/detail-return-navigation.test.ts index 7cb68256..27725c1a 100644 --- a/easyflow-ui-admin/app/src/router/__tests__/detail-return-navigation.test.ts +++ b/easyflow-ui-admin/app/src/router/__tests__/detail-return-navigation.test.ts @@ -31,6 +31,20 @@ describe('detail return navigation', () => { expect(listSource).toContain('tab: activeTab.value'); }); + it('returns workflow design to the originating list page and filters', () => { + const detailSource = readViewSource('ai/workflow/WorkflowDesign.vue'); + const listSource = readViewSource('ai/workflow/WorkflowList.vue'); + + expect(detailSource).toContain( + 'parseWorkflowDesignReturnState(route.query)', + ); + expect(detailSource).toContain( + 'query: buildWorkflowListRouteQuery(listState)', + ); + expect(listSource).toContain('buildWorkflowDesignReturnQuery'); + expect(listSource).toContain('getPageState'); + }); + it('returns plugin tool editing to its plugin tool list with a safe fallback', () => { const editSource = readViewSource('ai/plugin/PluginToolEdit.vue'); const listSource = readViewSource('ai/plugin/PluginToolTable.vue'); diff --git a/easyflow-ui-admin/app/src/views/ai/workflow/WorkflowDesign.vue b/easyflow-ui-admin/app/src/views/ai/workflow/WorkflowDesign.vue index 980e1377..c7135d3e 100644 --- a/easyflow-ui-admin/app/src/views/ai/workflow/WorkflowDesign.vue +++ b/easyflow-ui-admin/app/src/views/ai/workflow/WorkflowDesign.vue @@ -51,6 +51,10 @@ import { isWorkflowDataEmpty, normalizeWorkflowStartNodes, } from '../../../../../packages/tinyflow-ui/src/utils/workflowNodeFields'; +import { + buildWorkflowListRouteQuery, + parseWorkflowDesignReturnState, +} from './workflow-list-route-state'; import '@tinyflow-ai/vue/dist/index.css'; @@ -160,7 +164,11 @@ async function initializeWorkflow() { } function backToWorkflowList() { - router.replace({ path: '/ai/workflow' }); + const listState = parseWorkflowDesignReturnState(route.query); + router.replace({ + path: '/ai/workflow', + query: buildWorkflowListRouteQuery(listState), + }); } const WORKFLOW_DRAFT_WRITE_DELAY = 320; let draftWriteTimer: ReturnType | undefined; diff --git a/easyflow-ui-admin/app/src/views/ai/workflow/WorkflowList.vue b/easyflow-ui-admin/app/src/views/ai/workflow/WorkflowList.vue index 27e29749..f7f3de0a 100644 --- a/easyflow-ui-admin/app/src/views/ai/workflow/WorkflowList.vue +++ b/easyflow-ui-admin/app/src/views/ai/workflow/WorkflowList.vue @@ -1,6 +1,8 @@