1
- import type { AppStartListening } from 'app/store/store' ;
1
+ import type { ActionCreatorWithPayload } from '@reduxjs/toolkit' ;
2
+ import type { AppStartListening , RootState } from 'app/store/store' ;
2
3
import * as canvasWorkflowNodesActions from 'features/controlLayers/store/canvasWorkflowNodesSlice' ;
3
4
import * as nodesActions from 'features/nodes/store/nodesSlice' ;
5
+ import type { AnyNode } from 'features/nodes/types/invocation' ;
4
6
5
7
/**
6
8
* 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.
8
10
*/
9
11
export 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 } ,
31
92
] ;
32
93
33
- for ( const actionCreator of fieldMutationActions ) {
94
+ for ( const { nodesAction , canvasAction } of fieldMutationActionPairs ) {
34
95
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 ;
38
99
const { nodeId } = action . payload ;
39
100
40
101
// 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 ) ;
43
104
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
+ } ) ;
49
112
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 ) ) ;
53
118
}
54
119
} ,
55
120
} ) ;
56
121
}
57
- } ;
122
+ } ;
0 commit comments