@@ -289,6 +289,15 @@ function StepFields({
289289 const str = ( key : string ) => ( typeof config [ key ] === 'string' ? ( config [ key ] as string ) : '' )
290290 const list = ( key : string ) =>
291291 Array . isArray ( config [ key ] ) ? ( config [ key ] as unknown [ ] ) . map ( ( x ) => String ( x ) ) : [ ]
292+ const obj = ( key : string ) : Record < string , unknown > =>
293+ config [ key ] && typeof config [ key ] === 'object' && ! Array . isArray ( config [ key ] )
294+ ? ( config [ key ] as Record < string , unknown > )
295+ : { }
296+ const objStr = ( key : string , sub : string ) => {
297+ const v = obj ( key ) [ sub ]
298+ return typeof v === 'string' ? v : ''
299+ }
300+ const setObj = ( key : string , sub : string , val : string ) => set ( key , { ...obj ( key ) , [ sub ] : val } )
292301
293302 switch ( kind ) {
294303 case 'grok' :
@@ -335,7 +344,10 @@ function StepFields({
335344 return (
336345 < >
337346 < TextField label = "function" required value = { str ( 'function' ) } readOnly = { readOnly } onChange = { ( v ) => set ( 'function' , v ) } />
338- < ListField label = "params" values = { list ( 'params' ) } readOnly = { readOnly } onChange = { ( v ) => set ( 'params' , v ) } />
347+ < div className = "grid grid-cols-2 gap-3" >
348+ < TextField label = "params.key" required value = { objStr ( 'params' , 'key' ) } readOnly = { readOnly } onChange = { ( v ) => setObj ( 'params' , 'key' , v ) } />
349+ < TextField label = "params.value" required value = { objStr ( 'params' , 'value' ) } readOnly = { readOnly } onChange = { ( v ) => setObj ( 'params' , 'value' , v ) } />
350+ </ div >
339351 < WhereField value = { str ( 'where' ) } readOnly = { readOnly } onChange = { ( v ) => set ( 'where' , v ) } />
340352 </ >
341353 )
@@ -399,7 +411,7 @@ function WhereField({
399411 )
400412}
401413
402- /** Editable list of strings (rename.from, add.params ). */
414+ /** Editable list of strings (rename.from). */
403415function ListField ( {
404416 label,
405417 values,
0 commit comments