1- import type { AppStartListening } from 'app/store/store' ;
1+ import type { ActionCreatorWithPayload } from '@reduxjs/toolkit' ;
2+ import type { AppStartListening , RootState } from 'app/store/store' ;
23import * as canvasWorkflowNodesActions from 'features/controlLayers/store/canvasWorkflowNodesSlice' ;
34import * as nodesActions from 'features/nodes/store/nodesSlice' ;
5+ import type { AnyNode } from 'features/nodes/types/invocation' ;
46
57/**
68 * Listens for field value changes on nodes and redirects them to the canvas workflow nodes slice
7- * if the node belongs to a canvas workflow (exists in canvasWorkflowNodes but not in nodes) .
9+ * if the node belongs to a canvas workflow.
810 */
911export const addCanvasWorkflowFieldChangedListener = ( startListening : AppStartListening ) => {
10- // List of all field mutation actions from nodesSlice
11- const fieldMutationActions = [
12- nodesActions . fieldStringValueChanged ,
13- nodesActions . fieldIntegerValueChanged ,
14- nodesActions . fieldFloatValueChanged ,
15- nodesActions . fieldBooleanValueChanged ,
16- nodesActions . fieldModelIdentifierValueChanged ,
17- nodesActions . fieldEnumModelValueChanged ,
18- nodesActions . fieldSchedulerValueChanged ,
19- nodesActions . fieldBoardValueChanged ,
20- nodesActions . fieldImageValueChanged ,
21- nodesActions . fieldColorValueChanged ,
22- nodesActions . fieldImageCollectionValueChanged ,
23- nodesActions . fieldStringCollectionValueChanged ,
24- nodesActions . fieldIntegerCollectionValueChanged ,
25- nodesActions . fieldFloatCollectionValueChanged ,
26- nodesActions . fieldFloatGeneratorValueChanged ,
27- nodesActions . fieldIntegerGeneratorValueChanged ,
28- nodesActions . fieldStringGeneratorValueChanged ,
29- nodesActions . fieldImageGeneratorValueChanged ,
30- nodesActions . fieldValueReset ,
12+ // List of all field mutation actions from nodesSlice with their canvas workflow counterparts
13+ const fieldMutationActionPairs : Array < {
14+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15+ nodesAction : ActionCreatorWithPayload < any > ;
16+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17+ canvasAction : ActionCreatorWithPayload < any > ;
18+ } > = [
19+ {
20+ nodesAction : nodesActions . fieldStringValueChanged ,
21+ canvasAction : canvasWorkflowNodesActions . fieldStringValueChanged ,
22+ } ,
23+ {
24+ nodesAction : nodesActions . fieldIntegerValueChanged ,
25+ canvasAction : canvasWorkflowNodesActions . fieldIntegerValueChanged ,
26+ } ,
27+ {
28+ nodesAction : nodesActions . fieldFloatValueChanged ,
29+ canvasAction : canvasWorkflowNodesActions . fieldFloatValueChanged ,
30+ } ,
31+ {
32+ nodesAction : nodesActions . fieldBooleanValueChanged ,
33+ canvasAction : canvasWorkflowNodesActions . fieldBooleanValueChanged ,
34+ } ,
35+ {
36+ nodesAction : nodesActions . fieldModelIdentifierValueChanged ,
37+ canvasAction : canvasWorkflowNodesActions . fieldModelIdentifierValueChanged ,
38+ } ,
39+ {
40+ nodesAction : nodesActions . fieldEnumModelValueChanged ,
41+ canvasAction : canvasWorkflowNodesActions . fieldEnumModelValueChanged ,
42+ } ,
43+ {
44+ nodesAction : nodesActions . fieldSchedulerValueChanged ,
45+ canvasAction : canvasWorkflowNodesActions . fieldSchedulerValueChanged ,
46+ } ,
47+ {
48+ nodesAction : nodesActions . fieldBoardValueChanged ,
49+ canvasAction : canvasWorkflowNodesActions . fieldBoardValueChanged ,
50+ } ,
51+ {
52+ nodesAction : nodesActions . fieldImageValueChanged ,
53+ canvasAction : canvasWorkflowNodesActions . fieldImageValueChanged ,
54+ } ,
55+ {
56+ nodesAction : nodesActions . fieldColorValueChanged ,
57+ canvasAction : canvasWorkflowNodesActions . fieldColorValueChanged ,
58+ } ,
59+ {
60+ nodesAction : nodesActions . fieldImageCollectionValueChanged ,
61+ canvasAction : canvasWorkflowNodesActions . fieldImageCollectionValueChanged ,
62+ } ,
63+ {
64+ nodesAction : nodesActions . fieldStringCollectionValueChanged ,
65+ canvasAction : canvasWorkflowNodesActions . fieldStringCollectionValueChanged ,
66+ } ,
67+ {
68+ nodesAction : nodesActions . fieldIntegerCollectionValueChanged ,
69+ canvasAction : canvasWorkflowNodesActions . fieldIntegerCollectionValueChanged ,
70+ } ,
71+ {
72+ nodesAction : nodesActions . fieldFloatCollectionValueChanged ,
73+ canvasAction : canvasWorkflowNodesActions . fieldFloatCollectionValueChanged ,
74+ } ,
75+ {
76+ nodesAction : nodesActions . fieldFloatGeneratorValueChanged ,
77+ canvasAction : canvasWorkflowNodesActions . fieldFloatGeneratorValueChanged ,
78+ } ,
79+ {
80+ nodesAction : nodesActions . fieldIntegerGeneratorValueChanged ,
81+ canvasAction : canvasWorkflowNodesActions . fieldIntegerGeneratorValueChanged ,
82+ } ,
83+ {
84+ nodesAction : nodesActions . fieldStringGeneratorValueChanged ,
85+ canvasAction : canvasWorkflowNodesActions . fieldStringGeneratorValueChanged ,
86+ } ,
87+ {
88+ nodesAction : nodesActions . fieldImageGeneratorValueChanged ,
89+ canvasAction : canvasWorkflowNodesActions . fieldImageGeneratorValueChanged ,
90+ } ,
91+ { nodesAction : nodesActions . fieldValueReset , canvasAction : canvasWorkflowNodesActions . fieldValueReset } ,
3192 ] ;
3293
33- for ( const actionCreator of fieldMutationActions ) {
94+ for ( const { nodesAction , canvasAction } of fieldMutationActionPairs ) {
3495 startListening ( {
35- actionCreator,
36- effect : ( action : any , { dispatch, getState } : any ) => {
37- const state = getState ( ) ;
96+ actionCreator : nodesAction ,
97+ effect : ( action , { dispatch, getState } ) => {
98+ const state = getState ( ) as RootState ;
3899 const { nodeId } = action . payload ;
39100
40101 // Check if this node exists in canvas workflow nodes
41- const canvasWorkflowNode = state . canvasWorkflowNodes . nodes . find ( ( n : any ) => n . id === nodeId ) ;
42- const regularNode = state . nodes . present . nodes . find ( ( n : any ) => n . id === nodeId ) ;
102+ const canvasWorkflowNode = state . canvasWorkflowNodes . nodes . find ( ( n : AnyNode ) => n . id === nodeId ) ;
103+ const regularNode = state . nodes . present . nodes . find ( ( n : AnyNode ) => n . id === nodeId ) ;
43104
44- // If the node exists in canvas workflow but NOT in regular nodes, redirect the action
45- if ( canvasWorkflowNode && ! regularNode ) {
46- // Get the corresponding action from canvasWorkflowNodesSlice
47- const actionName = actionCreator . type . split ( '/' ) . pop ( ) as keyof typeof canvasWorkflowNodesActions ;
48- const canvasWorkflowAction = canvasWorkflowNodesActions [ actionName ] ;
105+ console . log ( '[canvasWorkflowFieldChanged] Field changed:' , {
106+ nodeId,
107+ hasCanvasNode : ! ! canvasWorkflowNode ,
108+ hasRegularNode : ! ! regularNode ,
109+ action : action . type ,
110+ payload : action . payload ,
111+ } ) ;
49112
50- if ( canvasWorkflowAction && typeof canvasWorkflowAction === 'function' ) {
51- dispatch ( canvasWorkflowAction ( action . payload as any ) ) ;
52- }
113+ // If the node exists in canvas workflow, redirect the action
114+ // This ensures canvas workflow fields always update the canvas workflow nodes slice
115+ if ( canvasWorkflowNode ) {
116+ console . log ( '[canvasWorkflowFieldChanged] Redirecting to canvas workflow nodes:' , canvasAction . type ) ;
117+ dispatch ( canvasAction ( action . payload ) ) ;
53118 }
54119 } ,
55120 } ) ;
56121 }
57- } ;
122+ } ;
0 commit comments