1- import { watch } from 'vue'
1+ import { ref } from 'vue'
22
3+ import { useErrorHandling } from '@/composables/useErrorHandling'
34import { useWorkflowService } from '@/platform/workflow/core/services/workflowService'
45import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore'
56import { useDialogService } from '@/services/dialogService'
7+ import { useAppMode } from '@/composables/useAppMode'
68import { useAppModeStore } from '@/stores/appModeStore'
79import { useDialogStore } from '@/stores/dialogStore'
810
911import BuilderSaveDialogContent from './BuilderSaveDialogContent.vue'
1012import BuilderSaveSuccessDialogContent from './BuilderSaveSuccessDialogContent.vue'
13+ import { whenever } from '@vueuse/core'
1114
1215const SAVE_DIALOG_KEY = 'builder-save'
1316const SUCCESS_DIALOG_KEY = 'builder-save-success'
1417
1518export function useBuilderSave ( ) {
16- const appModeStore = useAppModeStore ( )
19+ const { setMode } = useAppMode ( )
20+ const { toastErrorHandler } = useErrorHandling ( )
1721 const workflowStore = useWorkflowStore ( )
1822 const workflowService = useWorkflowService ( )
1923 const dialogService = useDialogService ( )
24+ const appModeStore = useAppModeStore ( )
2025 const dialogStore = useDialogStore ( )
2126
22- watch (
23- ( ) => appModeStore . isBuilderSaving ,
24- ( saving ) => {
25- if ( saving ) void onBuilderSave ( )
26- }
27- )
27+ const saving = ref ( false )
28+
29+ whenever ( saving , onBuilderSave )
30+
31+ function setSaving ( value : boolean ) {
32+ saving . value = value
33+ }
2834
2935 async function onBuilderSave ( ) {
3036 const workflow = workflowStore . activeWorkflow
@@ -33,13 +39,14 @@ export function useBuilderSave() {
3339 return
3440 }
3541
36- if ( ! workflow . isTemporary && workflow . activeState . extra ?. linearMode ) {
42+ if ( ! workflow . isTemporary && workflow . initialMode != null ) {
43+ // Re-save with the previously chosen mode — no dialog needed.
3744 try {
38- workflow . changeTracker ?. checkState ( )
39- appModeStore . saveSelectedToWorkflow ( )
45+ appModeStore . flushSelections ( )
4046 await workflowService . saveWorkflow ( workflow )
41- showSuccessDialog ( workflow . filename , appModeStore . isAppMode )
42- } catch {
47+ showSuccessDialog ( workflow . filename , workflow . initialMode === 'app' )
48+ } catch ( e ) {
49+ toastErrorHandler ( e )
4350 resetSaving ( )
4451 }
4552 return
@@ -73,17 +80,19 @@ export function useBuilderSave() {
7380 const workflow = workflowStore . activeWorkflow
7481 if ( ! workflow ) return
7582
76- appModeStore . saveSelectedToWorkflow ( )
83+ appModeStore . flushSelections ( )
84+ const mode = openAsApp ? 'app' : 'graph'
7785 const saved = await workflowService . saveWorkflowAs ( workflow , {
7886 filename,
79- openAsApp
87+ initialMode : mode
8088 } )
8189
8290 if ( ! saved ) return
8391
8492 closeSaveDialog ( )
8593 showSuccessDialog ( filename , openAsApp )
86- } catch {
94+ } catch ( e ) {
95+ toastErrorHandler ( e )
8796 closeSaveDialog ( )
8897 resetSaving ( )
8998 }
@@ -97,7 +106,7 @@ export function useBuilderSave() {
97106 workflowName,
98107 savedAsApp,
99108 onViewApp : ( ) => {
100- appModeStore . setMode ( 'app' )
109+ setMode ( 'app' )
101110 closeSuccessDialog ( )
102111 } ,
103112 onClose : closeSuccessDialog
@@ -118,6 +127,8 @@ export function useBuilderSave() {
118127 }
119128
120129 function resetSaving ( ) {
121- appModeStore . setBuilderSaving ( false )
130+ saving . value = false
122131 }
132+
133+ return { saving, setSaving }
123134}
0 commit comments