@@ -348,7 +348,8 @@ export async function importWorkflowFromYaml(
348348 applyAutoLayout: () => void
349349 setSubBlockValue: (blockId: string, subBlockId: string, value: any) => void
350350 getExistingBlocks: () => Record<string, any>
351- }
351+ },
352+ targetWorkflowId?: string
352353): Promise<{ success: boolean; errors: string[]; warnings: string[]; summary?: string }> {
353354 logger.info('Starting YAML workflow import (complete state creation)')
354355
@@ -376,7 +377,25 @@ export async function importWorkflowFromYaml(
376377 )
377378
378379 // Get the existing workflow state (to preserve starter blocks if they exist)
379- const existingBlocks = workflowActions.getExistingBlocks()
380+ let existingBlocks: Record<string, any> = {}
381+
382+ if (targetWorkflowId) {
383+ // For target workflow, fetch from API
384+ try {
385+ const response = await fetch(`/api/workflows/${targetWorkflowId}`)
386+ if (response.ok) {
387+ const workflowData = await response.json()
388+ existingBlocks = workflowData.data?.state?.blocks || {}
389+ logger.debug(`Fetched existing blocks for target workflow ${targetWorkflowId}:`, Object.keys(existingBlocks))
390+ }
391+ } catch (error) {
392+ logger.warn(`Failed to fetch existing blocks for workflow ${targetWorkflowId}:`, error)
393+ }
394+ } else {
395+ // For active workflow, use from store
396+ existingBlocks = workflowActions.getExistingBlocks()
397+ }
398+
380399 const existingStarterBlocks = Object.values(existingBlocks).filter(
381400 (block: any) => block.type === 'starter'
382401 )
@@ -389,11 +408,13 @@ export async function importWorkflowFromYaml(
389408
390409 // Get current workflow state
391410 const currentWorkflowState = useWorkflowStore.getState()
392- const activeWorkflowId = useWorkflowRegistry.getState().activeWorkflowId
411+ const activeWorkflowId = targetWorkflowId || useWorkflowRegistry.getState().activeWorkflowId
393412
394413 if (!activeWorkflowId) {
395414 return { success: false, errors: ['No active workflow'], warnings: [] }
396415 }
416+
417+ logger.info(`Importing YAML into workflow: ${activeWorkflowId} ${targetWorkflowId ? '(specified target)' : '(active workflow)'}`)
397418
398419 // Build complete blocks object
399420 const completeBlocks: Record<string, any> = {}
@@ -593,6 +614,12 @@ export async function importWorkflowFromYaml(
593614
594615 // Save directly to database via API
595616 logger.info('Saving complete workflow state directly to database...')
617+ logger.debug('Sample block being saved:', {
618+ firstBlockId: Object.keys(completeBlocks)[0],
619+ firstBlock: Object.values(completeBlocks)[0],
620+ firstBlockSubBlocks: Object.values(completeBlocks)[0]?.subBlocks
621+ })
622+
596623 const response = await fetch(`/api/workflows/${activeWorkflowId}/state`, {
597624 method: 'PUT',
598625 headers: {
@@ -614,17 +641,26 @@ export async function importWorkflowFromYaml(
614641 const saveResponse = await response.json()
615642 logger.info('Successfully saved to database:', saveResponse)
616643
617- // Update local state for immediate UI display
618- logger.info('Updating local state for immediate display...')
619- useWorkflowStore.setState(completeWorkflowState)
620-
621- // Set subblock values in local store
622- useSubBlockStore.setState((state: any) => ({
623- workflowValues: {
624- ...state.workflowValues,
625- [activeWorkflowId]: completeSubBlockValues,
626- },
627- }))
644+ // Update local state for immediate UI display (only if importing into active workflow)
645+ if (!targetWorkflowId) {
646+ logger.info('Updating local state for immediate display (active workflow)...')
647+ useWorkflowStore.setState(completeWorkflowState)
648+
649+ // Set subblock values in local store
650+ logger.debug('Setting SubBlockStore with values:', completeSubBlockValues)
651+ useSubBlockStore.setState((state: any) => ({
652+ workflowValues: {
653+ ...state.workflowValues,
654+ [activeWorkflowId]: completeSubBlockValues,
655+ },
656+ }))
657+
658+ // Verify SubBlockStore was updated
659+ const subBlockStoreValues = useSubBlockStore.getState().workflowValues[activeWorkflowId]
660+ logger.debug('SubBlockStore after update:', subBlockStoreValues)
661+ } else {
662+ logger.info('Skipping local state update (importing into non-active workflow)')
663+ }
628664
629665 // Brief delay for UI to update
630666 await new Promise((resolve) => setTimeout(resolve, 100))
0 commit comments