Skip to content

Commit 39ac580

Browse files
fix: guard against stale directory list responses in DirSwitcher
Add a version counter ref so that out-of-order IPC responses from listRecentDirs/listGitWorktreeDirs are discarded when a newer refresh has already been started. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 452ed70 commit 39ac580

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

ui/desktop/src/components/bottom_menu/DirSwitcher.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useCallback, useEffect, useMemo, useState } from 'react';
1+
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
22
import { Check, FolderDot, FolderOpen, GitBranch, Plus } from 'lucide-react';
33
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../ui/Tooltip';
44
import {
@@ -67,13 +67,17 @@ export const DirSwitcher: React.FC<DirSwitcherProps> = ({
6767
const [isMenuOpen, setIsMenuOpen] = useState(false);
6868
const [recentDirs, setRecentDirs] = useState<string[]>([]);
6969
const [worktreeDirs, setWorktreeDirs] = useState<string[]>([]);
70+
const refreshVersionRef = useRef(0);
7071

7172
const refreshMenuData = useCallback(async () => {
73+
const version = ++refreshVersionRef.current;
7274
const [recent, worktrees] = await Promise.all([
7375
window.electron.listRecentDirs().catch(() => []),
7476
window.electron.listGitWorktreeDirs(workingDir).catch(() => []),
7577
]);
7678

79+
if (version !== refreshVersionRef.current) return;
80+
7781
setRecentDirs(recent);
7882
setWorktreeDirs(worktrees);
7983
}, [workingDir]);

0 commit comments

Comments
 (0)