11import {
2+ Button ,
23 Label ,
34 Select ,
45 SelectContent ,
@@ -13,6 +14,7 @@ import {
1314} from '@/lib/query-options/flow'
1415import { useQuery } from '@tanstack/react-query'
1516import _ from 'lodash'
17+ import { X } from 'lucide-react'
1618import { useTranslation } from 'react-i18next'
1719import { useParams } from 'react-router-dom'
1820import { useFlowCtx } from '..'
@@ -59,83 +61,138 @@ export const SubFlowContent = () => {
5961 </ SelectContent >
6062 </ Select >
6163 </ div >
62- < div className = 'flex gap-3' >
63- < div className = 'space-y-2 w-full' >
64- < Label > { t ( 'assign_var.label' ) } </ Label >
65- < Select
66- value = { selectedNode ?. data ?. assignTo || NOT_CHOOSE }
67- onValueChange = { ( value ) => {
68- if ( ! selectedNode ) return
69-
70- const cloneSelectedNode = _ . cloneDeep ( selectedNode )
71-
72- if ( value === NOT_CHOOSE ) {
73- delete cloneSelectedNode . data . assignTo
74- } else {
75- cloneSelectedNode . data . assignTo = value
76- }
77-
78- handleChangeSelectedNode ( cloneSelectedNode )
79- } }
80- >
81- < SelectTrigger >
82- < SelectValue placeholder = { t ( 'assign_var.placeholder' ) } />
83- </ SelectTrigger >
84- < SelectContent >
85- < SelectItem value = { NOT_CHOOSE } >
86- { t ( 'assign_var.placeholder' ) }
87- </ SelectItem >
88- { flow . variables ?. map ( ( variable , index ) => {
89- return (
90- < SelectItem
91- key = { `${ variable . name } -${ index } ` }
92- value = { variable . name }
93- >
94- { variable . name }
95- </ SelectItem >
96- )
97- } ) }
98- </ SelectContent >
99- </ Select >
100- </ div >
101- < div className = 'space-y-2 w-full' >
102- < Label > { t ( 'output_var.label' ) } </ Label >
103- < Select
104- value = { selectedNode ?. data ?. outputVar || NOT_CHOOSE }
105- onValueChange = { ( value ) => {
106- if ( ! selectedNode ) return
107-
108- const cloneSelectedNode = _ . cloneDeep ( selectedNode )
109-
110- if ( value === NOT_CHOOSE ) {
111- delete cloneSelectedNode . data . outputVar
112- } else {
113- cloneSelectedNode . data . outputVar = value
114- }
115-
116- handleChangeSelectedNode ( cloneSelectedNode )
117- } }
118- >
119- < SelectTrigger >
120- < SelectValue placeholder = { t ( 'output_var.placeholder' ) } />
121- </ SelectTrigger >
122- < SelectContent >
123- < SelectItem value = { NOT_CHOOSE } >
124- { t ( 'output_var.placeholder' ) }
125- </ SelectItem >
126- { subflow ?. variables ?. map ( ( variable , index ) => {
127- return (
128- < SelectItem
129- key = { `${ variable . name } -${ index } ` }
130- value = { variable . name }
131- >
132- { variable . name }
133- </ SelectItem >
134- )
135- } ) }
136- </ SelectContent >
137- </ Select >
64+ < div className = 'flex gap-3 flex-col' >
65+ < div className = 'flex gap-3 w-full' >
66+ < Label className = 'w-full' > { t ( 'output_var.label' ) } </ Label >
67+ < Label className = 'w-full' > { t ( 'assign_var.label' ) } </ Label >
13868 </ div >
69+ { selectedNode ?. data ?. assignVars ?. map ( ( _item : any , index : number ) => {
70+ return (
71+ < div key = { index } className = 'flex gap-3' >
72+ < div className = 'space-y-2 w-full' >
73+ < Select
74+ value = {
75+ selectedNode ?. data ?. assignVars [ index ] ?. assignTo ||
76+ NOT_CHOOSE
77+ }
78+ onValueChange = { ( value ) => {
79+ if ( ! selectedNode ) return
80+
81+ const cloneSelectedNode = _ . cloneDeep ( selectedNode )
82+
83+ cloneSelectedNode . data . assignVars [ index ] . assignTo =
84+ value === NOT_CHOOSE ? undefined : value
85+
86+ handleChangeSelectedNode ( cloneSelectedNode )
87+ } }
88+ >
89+ < SelectTrigger >
90+ < SelectValue placeholder = { t ( 'assign_var.placeholder' ) } />
91+ </ SelectTrigger >
92+ < SelectContent >
93+ < SelectItem value = { NOT_CHOOSE } >
94+ { t ( 'assign_var.placeholder' ) }
95+ </ SelectItem >
96+ { flow . variables ?. map ( ( variable , index ) => {
97+ return (
98+ < SelectItem
99+ key = { `${ variable . name } -${ index } ` }
100+ value = { variable . name }
101+ >
102+ { variable . name }
103+ </ SelectItem >
104+ )
105+ } ) }
106+ </ SelectContent >
107+ </ Select >
108+ </ div >
109+ < div className = 'space-y-2 w-full' >
110+ < Select
111+ value = {
112+ selectedNode ?. data ?. assignVars [ index ] ?. outputVar ||
113+ NOT_CHOOSE
114+ }
115+ onValueChange = { ( value ) => {
116+ if ( ! selectedNode ) return
117+
118+ const cloneSelectedNode = _ . cloneDeep ( selectedNode )
119+
120+ cloneSelectedNode . data . assignVars [ index ] . outputVar =
121+ value === NOT_CHOOSE ? undefined : value
122+
123+ handleChangeSelectedNode ( cloneSelectedNode )
124+ } }
125+ >
126+ < SelectTrigger >
127+ < SelectValue placeholder = { t ( 'output_var.placeholder' ) } />
128+ </ SelectTrigger >
129+ < SelectContent >
130+ < SelectItem value = { NOT_CHOOSE } >
131+ { t ( 'output_var.placeholder' ) }
132+ </ SelectItem >
133+ { subflow ?. variables ?. map ( ( variable , index ) => {
134+ return (
135+ < SelectItem
136+ key = { `${ variable . name } -${ index } ` }
137+ value = { variable . name }
138+ >
139+ { variable . name }
140+ </ SelectItem >
141+ )
142+ } ) }
143+ </ SelectContent >
144+ </ Select >
145+ </ div >
146+ < Button
147+ variant = 'destructive'
148+ size = 'icon'
149+ className = 'flex-shrink-0'
150+ onClick = { ( ) => {
151+ if ( ! selectedNode ) return
152+
153+ const cloneSelectedNode = _ . cloneDeep ( selectedNode )
154+
155+ cloneSelectedNode . data . assignVars . splice ( index , 1 )
156+
157+ handleChangeSelectedNode ( cloneSelectedNode )
158+ } }
159+ >
160+ < X />
161+ </ Button >
162+ </ div >
163+ )
164+ } ) }
165+ < Button
166+ variant = 'outline'
167+ onClick = { ( ) => {
168+ if ( ! selectedNode ) return
169+
170+ const cloneSelectedNode = _ . cloneDeep ( selectedNode )
171+
172+ if ( ! cloneSelectedNode . data . assignVars ) {
173+ cloneSelectedNode . data . assignVars = [ ]
174+ }
175+
176+ if (
177+ cloneSelectedNode . data . assignVars . length > 0 &&
178+ cloneSelectedNode . data . assignVars . some (
179+ ( item : any ) =>
180+ item . assignTo === NOT_CHOOSE || item . outputVar === NOT_CHOOSE ,
181+ )
182+ ) {
183+ return
184+ }
185+
186+ cloneSelectedNode . data . assignVars . push ( {
187+ assignTo : undefined ,
188+ outputVar : undefined ,
189+ } )
190+
191+ handleChangeSelectedNode ( cloneSelectedNode )
192+ } }
193+ >
194+ Add
195+ </ Button >
139196 </ div >
140197 </ div >
141198 )
0 commit comments