11import { useMemo } from 'react'
22import { getEnv , isTruthy } from '@/lib/env'
33import type { BlockConfig , SubBlockConfig , SubBlockType } from '@/blocks/types'
4+ import { useWorkflowDiffStore } from '@/stores/workflow-diff'
45import { mergeSubblockState } from '@/stores/workflows/utils'
56import { useWorkflowStore } from '@/stores/workflows/workflow/store'
67
@@ -14,6 +15,7 @@ import { useWorkflowStore } from '@/stores/workflows/workflow/store'
1415 * @param displayTriggerMode - Whether trigger mode is enabled for this block
1516 * @param activeWorkflowId - The active workflow ID
1617 * @param blockSubBlockValues - Current subblock values from the store
18+ * @param isDiffMode - Whether we're currently viewing a diff
1719 * @returns Object containing subBlocks array and stateToUse for stable key generation
1820 */
1921export function useEditorSubblockLayout (
@@ -22,7 +24,8 @@ export function useEditorSubblockLayout(
2224 displayAdvancedMode : boolean ,
2325 displayTriggerMode : boolean ,
2426 activeWorkflowId : string | null ,
25- blockSubBlockValues : Record < string , any >
27+ blockSubBlockValues : Record < string , any > ,
28+ isDiffMode : boolean
2629) {
2730 return useMemo ( ( ) => {
2831 // Guard against missing config or block selection
@@ -33,15 +36,28 @@ export function useEditorSubblockLayout(
3336 // Get the appropriate state for conditional evaluation
3437 let stateToUse : Record < string , any > = { }
3538
36- const blocks = useWorkflowStore . getState ( ) . blocks || { }
39+ // Get blocks based on whether we're in diff mode
40+ let blocks : Record < string , any >
41+ if ( isDiffMode ) {
42+ // In diff mode, get blocks from diff workflow
43+ const diffStore = useWorkflowDiffStore . getState ( )
44+ const diffWorkflow = diffStore . diffWorkflow
45+ blocks = ( diffWorkflow as any ) ?. blocks || { }
46+ } else {
47+ // In normal mode, get blocks from workflow store
48+ blocks = useWorkflowStore . getState ( ) . blocks || { }
49+ }
50+
3751 const mergedMap = mergeSubblockState ( blocks , activeWorkflowId || undefined , blockId )
3852 const mergedState = mergedMap ? mergedMap [ blockId ] : undefined
3953 const mergedSubBlocks = mergedState ?. subBlocks || { }
4054
55+ // In diff mode, prioritize diff workflow values; in normal mode, prioritize live store values
4156 stateToUse = Object . keys ( mergedSubBlocks ) . reduce (
4257 ( acc , key ) => {
43- const value =
44- blockSubBlockValues [ key ] !== undefined
58+ const value = isDiffMode
59+ ? ( mergedSubBlocks [ key ] ?. value ?? null )
60+ : blockSubBlockValues [ key ] !== undefined
4561 ? blockSubBlockValues [ key ]
4662 : ( mergedSubBlocks [ key ] ?. value ?? null )
4763 acc [ key ] = { value }
@@ -50,11 +66,14 @@ export function useEditorSubblockLayout(
5066 { } as Record < string , { value : unknown } >
5167 )
5268
53- Object . keys ( blockSubBlockValues ) . forEach ( ( key ) => {
54- if ( ! ( key in stateToUse ) ) {
55- stateToUse [ key ] = { value : blockSubBlockValues [ key ] }
56- }
57- } )
69+ // Only add live store values if not in diff mode
70+ if ( ! isDiffMode ) {
71+ Object . keys ( blockSubBlockValues ) . forEach ( ( key ) => {
72+ if ( ! ( key in stateToUse ) ) {
73+ stateToUse [ key ] = { value : blockSubBlockValues [ key ] }
74+ }
75+ } )
76+ }
5877
5978 // Filter visible blocks and those that meet their conditions
6079 const visibleSubBlocks = ( config . subBlocks || [ ] ) . filter ( ( block ) => {
@@ -134,5 +153,6 @@ export function useEditorSubblockLayout(
134153 displayTriggerMode ,
135154 blockSubBlockValues ,
136155 activeWorkflowId ,
156+ isDiffMode ,
137157 ] )
138158}
0 commit comments