1- import React , { useState , useEffect } from 'react '
2- import { useSelector , useDispatch } from 'react-redux '
1+ import { TestInput } from '@/types/api_types/workflowSchemas '
2+ import { uploadTestFiles } from '@/utils/api '
33import {
4+ Alert ,
5+ Button ,
6+ Input ,
47 Modal ,
5- ModalContent ,
6- ModalHeader ,
78 ModalBody ,
9+ ModalContent ,
810 ModalFooter ,
9- Button ,
11+ ModalHeader ,
12+ Switch ,
1013 Table ,
11- TableHeader ,
12- TableColumn ,
1314 TableBody ,
14- TableRow ,
1515 TableCell ,
16- Input ,
16+ TableColumn ,
17+ TableHeader ,
18+ TableRow ,
1719 Tooltip ,
18- Switch ,
19- Alert ,
2020} from '@heroui/react'
2121import { Icon } from '@iconify/react'
22- import TextEditor from '../textEditor/TextEditor'
23- import { addTestInput , deleteTestInput , updateTestInput } from '../../store/flowSlice'
24- import { RootState } from '../../store/store'
25- import { AppDispatch } from '../../store/store'
26- import { TestInput } from '@/types/api_types/workflowSchemas'
22+ import React , { useEffect , useState } from 'react'
23+ import { useDispatch , useSelector } from 'react-redux'
2724import { useSaveWorkflow } from '../../hooks/useSaveWorkflow'
28- import FileUploadBox from '../FileUploadBox'
29- import { uploadTestFiles } from '@/utils/api'
25+ import { addTestInput , deleteTestInput , updateTestInput } from '../../store/flowSlice'
3026import { getNodeMissingRequiredFields } from '../../store/nodeTypesSlice'
27+ import { AppDispatch , RootState } from '../../store/store'
28+ import FileUploadBox from '../FileUploadBox'
29+ import TextEditor from '../textEditor/TextEditor'
3130
3231interface RunModalProps {
3332 isOpen : boolean
3433 onOpenChange : ( isOpen : boolean ) => void
3534 onRun : ( initialInputs : Record < string , any > , files ?: Record < string , string [ ] > ) => void
3635 onSave ?: ( ) => void
36+ selectedRow ?: string | null
37+ onSelectedRowChange ?: ( rowId : string | null ) => void
3738}
3839
3940interface EditingCell {
4041 rowId : number
4142 field : string
4243}
4344
44- const RunModal : React . FC < RunModalProps > = ( { isOpen, onOpenChange, onRun, onSave } ) => {
45+ const RunModal : React . FC < RunModalProps > = ( {
46+ isOpen,
47+ onOpenChange,
48+ onRun,
49+ onSave,
50+ selectedRow : externalSelectedRow ,
51+ onSelectedRowChange,
52+ } ) => {
4553 const nodes = useSelector ( ( state : RootState ) => state . flow . nodes )
4654 const nodeConfigs = useSelector ( ( state : RootState ) => state . flow . nodeConfigs )
4755 const nodeTypesMetadata = useSelector ( ( state : RootState ) => state . nodeTypes ) . metadata
4856 const workflowID = useSelector ( ( state : RootState ) => state . flow . workflowID )
4957 const inputNode = nodes . find ( ( node ) => node . type === 'InputNode' )
5058 const workflowInputVariables = inputNode ? nodeConfigs [ inputNode . id ] ?. output_schema || { } : { }
5159 const workflowInputVariableNames = Object . keys ( workflowInputVariables )
52- const [ alert , setAlert ] = useState < { message : string ; color : 'danger' | 'success' | 'warning' | 'default' ; isVisible : boolean } > ( {
60+ const [ alert , setAlert ] = useState < {
61+ message : string
62+ color : 'danger' | 'success' | 'warning' | 'default'
63+ isVisible : boolean
64+ } > ( {
5365 message : '' ,
5466 color : 'default' ,
5567 isVisible : false ,
5668 } )
5769
5870 const [ testData , setTestData ] = useState < TestInput [ ] > ( [ ] )
5971 const [ editingCell , setEditingCell ] = useState < EditingCell | null > ( null )
60- const [ selectedRow , setSelectedRow ] = useState < string | null > ( null )
72+ const [ selectedRow , setSelectedRow ] = useState < string | null > ( externalSelectedRow || null )
6173 const [ editorContents , setEditorContents ] = useState < Record < string , string > > ( { } )
6274 const [ uploadedFiles , setUploadedFiles ] = useState < Record < string , File [ ] > > ( { } )
6375 const [ filePaths , setFilePaths ] = useState < Record < string , string [ ] > > ( { } )
@@ -73,10 +85,18 @@ const RunModal: React.FC<RunModalProps> = ({ isOpen, onOpenChange, onRun, onSave
7385
7486 useEffect ( ( ) => {
7587 if ( isOpen && testData . length > 0 && ! selectedRow ) {
76- setSelectedRow ( testData [ 0 ] . id . toString ( ) )
88+ const newSelectedRow = testData [ 0 ] . id . toString ( )
89+ setSelectedRow ( newSelectedRow )
90+ onSelectedRowChange ?.( newSelectedRow )
7791 }
7892 } , [ isOpen , testData , selectedRow ] )
7993
94+ useEffect ( ( ) => {
95+ if ( externalSelectedRow !== selectedRow ) {
96+ setSelectedRow ( externalSelectedRow )
97+ }
98+ } , [ externalSelectedRow ] )
99+
80100 const getNextId = ( ) => {
81101 const maxId = testData . reduce ( ( max , row ) => Math . max ( max , row . id ) , 0 )
82102 return maxId + 1
@@ -337,6 +357,7 @@ const RunModal: React.FC<RunModalProps> = ({ isOpen, onOpenChange, onRun, onSave
337357 onSelectionChange = { ( selection ) => {
338358 const selectedKey = Array . from ( selection ) [ 0 ] ?. toString ( ) || null
339359 setSelectedRow ( selectedKey )
360+ onSelectedRowChange ?.( selectedKey )
340361 } }
341362 classNames = { {
342363 base : 'min-w-[800px]' ,
0 commit comments