Skip to content

Commit d356183

Browse files
committed
delete tree issue fix [skip ci]
1 parent d504d70 commit d356183

3 files changed

Lines changed: 42 additions & 0 deletions

File tree

apps/desktop/src/main/services/ipc/registerIpc.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1689,6 +1689,8 @@ export function registerIpc({
16891689

16901690
const ipcInvokeTimeoutMs = (channel: string): number => {
16911691
switch (channel) {
1692+
case IPC.lanesDelete:
1693+
return 4 * 60_000;
16921694
case IPC.iosSimulatorLaunch:
16931695
return 10 * 60_000;
16941696
case IPC.iosSimulatorListLaunchTargets:

apps/desktop/src/renderer/components/lanes/LanesPage.tsx

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

apps/desktop/src/renderer/components/lanes/ManageLaneDialog.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,9 @@ function DeleteProgressStrip({ progress }: { progress: LaneDeleteProgress }) {
524524
{progress.overallStatus === "cancelled" ? (
525525
<div className="mt-2 text-[11px] text-amber-300">Delete cancelled. The lane was not removed.</div>
526526
) : null}
527+
{progress.overallStatus === "completed" ? (
528+
<div className="mt-2 text-[11px] text-emerald-300">Delete completed. Refreshing lane list...</div>
529+
) : null}
527530
</div>
528531
);
529532
}

0 commit comments

Comments
 (0)