@@ -4,13 +4,8 @@ import { TreeView } from './TreeView';
44import { BaySelector } from './BaySelector' ;
55import { LocationSelector } from './LocationSelector' ;
66import { CollapsibleSection } from './CollapsibleSection' ;
7- import {
8- LoadScriptButton ,
9- DownloadButton ,
10- CloneSelectedButton ,
11- AddActivityButton ,
12- AddStepButton
13- } from './buttons' ;
7+ import { NodeEditor } from './NodeEditor' ;
8+ import { LoadScriptButton , DownloadButton , CloneSelectedButton , AddActivityButton , AddStepButton } from './buttons' ;
149
1510interface Bay {
1611 id : string ;
@@ -75,9 +70,35 @@ export const Sidebar: React.FC<SidebarProps> = ({
7570 onDeleteActivity,
7671 onDeleteStep,
7772 parentActivityForAdd,
73+ onUpdateActivity,
74+ onUpdateStep,
7875} ) => {
7976 const [ executing , setExecuting ] = React . useState ( false ) ;
8077 const [ execMessage , setExecMessage ] = React . useState < string | null > ( null ) ;
78+ // Track selection locally to avoid deselection after ID change
79+ const [ localSelectedRef , setLocalSelectedRef ] = React . useState ( selectedRef ) ;
80+
81+ React . useEffect ( ( ) => {
82+ setLocalSelectedRef ( selectedRef ) ;
83+ } , [ selectedRef ] ) ;
84+
85+ // Track last selected node ID for reselection after ID change
86+ const lastSelectedRef = React . useRef ( selectedRef ) ;
87+
88+ React . useEffect ( ( ) => {
89+ lastSelectedRef . current = selectedRef ;
90+ } , [ selectedRef ] ) ;
91+
92+ // Handler to reselect node after ID change
93+ function handleNodeIdChange ( oldId : string , newId : string , kind : 'activity' | 'step' , parentActivityId ?: string ) {
94+ if ( kind === 'activity' ) {
95+ setLocalSelectedRef ( { kind : 'activity' , activityId : newId } ) ;
96+ onSelectActivity ( newId ) ;
97+ } else if ( kind === 'step' && parentActivityId ) {
98+ setLocalSelectedRef ( { kind : 'step' , activityId : parentActivityId , stepId : newId } ) ;
99+ onSelectStep ( parentActivityId , newId ) ;
100+ }
101+ }
81102
82103 const canExecute = isValid && ! ! selectedBayObj ?. dbId ;
83104
@@ -185,15 +206,37 @@ export const Sidebar: React.FC<SidebarProps> = ({
185206 parentActivityForAdd = { parentActivityForAdd }
186207 onShowStepDialog = { onShowStepDialog }
187208 />
209+ { /* Pass handleNodeIdChange to NodeEditor below */ }
188210 < TreeView
189211 script = { script }
190- selectedRef = { selectedRef }
212+ selectedRef = { localSelectedRef }
191213 onSelectScript = { onSelectScript }
192214 onSelectActivity = { onSelectActivity }
193215 onSelectStep = { onSelectStep }
194216 onDeleteActivity = { onDeleteActivity }
195217 onDeleteStep = { onDeleteStep }
196218 />
219+ { selectedNode && (
220+ < NodeEditor
221+ node = { selectedNode }
222+ onUpdateActivity = { ( activityId : string , patch : Partial < Activity > ) => {
223+ if ( patch . id && patch . id !== activityId ) {
224+ handleNodeIdChange ( activityId , patch . id , 'activity' ) ;
225+ }
226+ onUpdateActivity ( activityId , patch ) ;
227+ } }
228+ onUpdateStep = { ( stepId : string , patch : Partial < Step > ) => {
229+ if ( patch . id && patch . id !== stepId ) {
230+ let parentId = null ;
231+ if ( selectedRef && selectedRef . kind === 'step' ) {
232+ parentId = selectedRef . activityId ;
233+ }
234+ handleNodeIdChange ( stepId , patch . id , 'step' , parentId || undefined ) ;
235+ }
236+ onUpdateStep ( stepId , patch ) ;
237+ } }
238+ />
239+ ) }
197240 </ CollapsibleSection >
198241 </ div >
199242
0 commit comments