Skip to content

Commit 3662ac5

Browse files
committed
fix: replace useOptimistic with useState for branch selector
useOptimistic requires useTransition/startTransition to persist optimistic values during async work. Since the concurrency guard was refactored to use manual useState/useRef, useOptimistic would flash and immediately revert. Replace with useState + sync effect.
1 parent 15e0ebd commit 3662ac5

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

apps/web/src/components/BranchToolbarBranchSelector.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
useDeferredValue,
99
useEffect,
1010
useMemo,
11-
useOptimistic,
1211
useRef,
1312
useState,
1413
} from "react";
@@ -298,10 +297,12 @@ export function BranchToolbarBranchSelector({
298297
normalizedDeferredBranchQuery,
299298
],
300299
);
301-
const [resolvedActiveBranch, setOptimisticBranch] = useOptimistic(
302-
canonicalActiveBranch,
303-
(_currentBranch: string | null, optimisticBranch: string | null) => optimisticBranch,
304-
);
300+
const [resolvedActiveBranch, setOptimisticBranch] = useState(canonicalActiveBranch);
301+
302+
// Sync resolved branch when canonical value changes (e.g., after query invalidation)
303+
useEffect(() => {
304+
setOptimisticBranch(canonicalActiveBranch);
305+
}, [canonicalActiveBranch]);
305306
const [isBranchActionPending, setIsBranchActionPending] = useState(false);
306307
const isBranchActionPendingRef = useRef(false);
307308
const shouldVirtualizeBranchList = filteredBranchPickerItems.length > 40;

0 commit comments

Comments
 (0)