@@ -62,6 +62,99 @@ const GraphInspector = ({
6262 ) ;
6363
6464 case 'array' :
65+ if ( property . name === 'parameters' ) {
66+ return (
67+ < div className = { styles . parametersContainer } >
68+ { ( node . properties . parameters || [ ] ) . map ( ( param , index ) => (
69+ < div key = { index } className = { styles . parameterRow } >
70+ < input
71+ type = "text"
72+ value = { param . name }
73+ onChange = { ( e ) => {
74+ const newParams = [ ...node . properties . parameters ] ;
75+ newParams [ index ] = { ...param , name : e . target . value } ;
76+ updateNodeProperty ( 'parameters' , newParams ) ;
77+
78+ // Update the input port name (index + 1 since we removed Params port)
79+ const nodeTypeCopy = { ...nodeTypes [ node . type ] } ;
80+ nodeTypeCopy . inputs [ index + 1 ] = {
81+ type : 'data' ,
82+ name : e . target . value ,
83+ description : `Parameter of type ${ param . type } `
84+ } ;
85+ nodeTypes [ node . type ] = nodeTypeCopy ;
86+ } }
87+ placeholder = "Parameter name"
88+ className = { `${ styles . input } ${ config . isDarkTheme ? styles . inputDark : styles . inputLight } ` }
89+ />
90+ < select
91+ value = { param . type }
92+ onChange = { ( e ) => {
93+ const newParams = [ ...node . properties . parameters ] ;
94+ newParams [ index ] = { ...param , type : e . target . value } ;
95+ updateNodeProperty ( 'parameters' , newParams ) ;
96+
97+ // Update the input port description (index + 1 since we removed Params port)
98+ const nodeTypeCopy = { ...nodeTypes [ node . type ] } ;
99+ nodeTypeCopy . inputs [ index + 1 ] = {
100+ type : 'data' ,
101+ name : param . name ,
102+ description : `Parameter of type ${ e . target . value } `
103+ } ;
104+ nodeTypes [ node . type ] = nodeTypeCopy ;
105+ } }
106+ className = { `${ styles . typeSelect } ${ config . isDarkTheme ? styles . inputDark : styles . inputLight } ` }
107+ >
108+ < option value = "string" > String</ option >
109+ < option value = "number" > Number</ option >
110+ < option value = "boolean" > Boolean</ option >
111+ < option value = "object" > Object</ option >
112+ < option value = "array" > Array</ option >
113+ </ select >
114+ < button
115+ onClick = { ( ) => {
116+ const newParams = node . properties . parameters . filter ( ( _ , i ) => i !== index ) ;
117+ updateNodeProperty ( 'parameters' , newParams ) ;
118+
119+ // Remove the corresponding input port (index + 1 since we removed Params port)
120+ const nodeTypeCopy = { ...nodeTypes [ node . type ] } ;
121+ nodeTypeCopy . inputs = [
122+ ...nodeTypeCopy . inputs . slice ( 0 , index + 1 ) ,
123+ ...nodeTypeCopy . inputs . slice ( index + 2 )
124+ ] ;
125+ nodeTypes [ node . type ] = nodeTypeCopy ;
126+ } }
127+ className = { `${ styles . removeButton } ${ config . isDarkTheme ? styles . removeButtonDark : styles . removeButtonLight } ` }
128+ >
129+ < i className = "fas fa-minus" > </ i >
130+ </ button >
131+ </ div >
132+ ) ) }
133+ < button
134+ onClick = { ( ) => {
135+ const newParams = [
136+ ...( node . properties . parameters || [ ] ) ,
137+ { name : `param${ ( node . properties . parameters || [ ] ) . length + 1 } ` , type : 'string' }
138+ ] ;
139+ updateNodeProperty ( 'parameters' , newParams ) ;
140+
141+ // Add a new input port (no +2 offset since we removed Params port)
142+ const nodeTypeCopy = { ...nodeTypes [ node . type ] } ;
143+ const newParamName = `param${ ( node . properties . parameters || [ ] ) . length + 1 } ` ;
144+ nodeTypeCopy . inputs . push ( {
145+ type : 'data' ,
146+ name : newParamName ,
147+ description : `Parameter of type string`
148+ } ) ;
149+ nodeTypes [ node . type ] = nodeTypeCopy ;
150+ } }
151+ className = { `${ styles . addButton } ${ config . isDarkTheme ? styles . addButtonDark : styles . addButtonLight } ` }
152+ >
153+ < i className = "fas fa-plus" > </ i > Add Parameter
154+ </ button >
155+ </ div >
156+ ) ;
157+ }
65158 if ( property . name === 'cases' ) {
66159 return (
67160 < div className = { styles . casesContainer } >
0 commit comments