@@ -305,6 +305,7 @@ export function LanesPage() {
305305 } | null > ( null ) ;
306306 const branchSearchInputRef = useRef < HTMLInputElement > ( null ) ;
307307 const branchDropdownRef = useRef < HTMLDivElement > ( null ) ;
308+ const completedLaneDeleteRefreshesRef = useRef < Set < string > > ( new Set ( ) ) ;
308309
309310 const [ addLaneDropdownOpen , setAddLaneDropdownOpen ] = useState ( false ) ;
310311 const addLaneDropdownRef = useRef < HTMLDivElement > ( null ) ;
@@ -328,6 +329,10 @@ export function LanesPage() {
328329 } ;
329330 } , [ ] ) ;
330331
332+ useEffect ( ( ) => {
333+ completedLaneDeleteRefreshesRef . current . clear ( ) ;
334+ } , [ project ?. rootPath ] ) ;
335+
331336 const laneSnapshotByLaneId = useMemo (
332337 ( ) => new Map ( laneSnapshots . map ( ( snapshot ) => [ snapshot . lane . id , snapshot ] as const ) ) ,
333338 [ laneSnapshots ] ,
@@ -618,6 +623,38 @@ export function LanesPage() {
618623
619624 /* ---- Effects ---- */
620625
626+ useEffect ( ( ) => {
627+ const unsubscribe = window . ade . lanes . onDeleteEvent ( ( event ) => {
628+ const { laneId, overallStatus } = event . progress ;
629+ if ( overallStatus !== "completed" ) return ;
630+ if ( completedLaneDeleteRefreshesRef . current . has ( laneId ) ) return ;
631+ completedLaneDeleteRefreshesRef . current . add ( laneId ) ;
632+
633+ if ( selectedLaneId === laneId ) selectLane ( null ) ;
634+ setActiveLaneIds ( ( prev ) => prev . filter ( ( id ) => id !== laneId ) ) ;
635+ setPinnedLaneIds ( ( prev ) => {
636+ if ( ! prev . has ( laneId ) ) return prev ;
637+ const next = new Set ( prev ) ;
638+ next . delete ( laneId ) ;
639+ return next ;
640+ } ) ;
641+ setManagedLaneIds ( ( prev ) => prev . filter ( ( id ) => id !== laneId ) ) ;
642+ clearLaneInspectorTab ( laneId ) ;
643+ setLaneActionError ( null ) ;
644+
645+ void refreshLanes ( )
646+ . then ( ( ) => {
647+ if ( manageOpen && ( selectedLaneId === laneId || managedLaneIds . includes ( laneId ) ) ) {
648+ setManageOpen ( false ) ;
649+ }
650+ } )
651+ . catch ( ( err ) => {
652+ setLaneActionError ( `Lane was deleted, but refresh failed: ${ err instanceof Error ? err . message : String ( err ) } ` ) ;
653+ } ) ;
654+ } ) ;
655+ return unsubscribe ;
656+ } , [ clearLaneInspectorTab , managedLaneIds , manageOpen , refreshLanes , selectLane , selectedLaneId ] ) ;
657+
621658 useEffect ( ( ) => {
622659 const unsubscribe = window . ade . conflicts . onEvent ( ( event ) => {
623660 if ( event . type !== "prediction-complete" ) return ;
0 commit comments