fix: Include remote branches in PR base selection even when local branch exists

The branch listing logic now correctly shows remote branches (e.g., "origin/main") even if a local branch with the same base name exists, since users need remote branches as PR base targets. Also extracted duplicate state reset logic in create-pr-dialog into a reusable function.
This commit is contained in:
Shirone
2026-01-14 18:36:14 +01:00
parent 07593f8704
commit 0898578c11
2 changed files with 25 additions and 36 deletions

View File

@@ -59,6 +59,21 @@ export function CreatePRDialog({
// Track whether an operation completed that warrants a refresh
const operationCompletedRef = useRef(false);
// Common state reset function to avoid duplication
const resetState = useCallback(() => {
setTitle('');
setBody('');
setCommitMessage('');
setBaseBranch(defaultBaseBranch);
setIsDraft(false);
setError(null);
setPrUrl(null);
setBrowserUrl(null);
setShowBrowserFallback(false);
operationCompletedRef.current = false;
setBranches([]);
}, [defaultBaseBranch]);
// Fetch branches for autocomplete
const fetchBranches = useCallback(async () => {
if (!worktree?.path) return;
@@ -87,39 +102,13 @@ export function CreatePRDialog({
// Reset state when dialog opens or worktree changes
useEffect(() => {
// Reset all state on both open and close
resetState();
if (open) {
// Reset form fields
setTitle('');
setBody('');
setCommitMessage('');
setBaseBranch(defaultBaseBranch);
setIsDraft(false);
setError(null);
// Also reset result states when opening for a new worktree
// This prevents showing stale PR URLs from previous worktrees
setPrUrl(null);
setBrowserUrl(null);
setShowBrowserFallback(false);
// Reset operation tracking
operationCompletedRef.current = false;
// Reset branches and fetch fresh ones
setBranches([]);
// Fetch fresh branches when dialog opens
fetchBranches();
} else {
// Reset everything when dialog closes
setTitle('');
setBody('');
setCommitMessage('');
setBaseBranch(defaultBaseBranch);
setIsDraft(false);
setError(null);
setPrUrl(null);
setBrowserUrl(null);
setShowBrowserFallback(false);
operationCompletedRef.current = false;
setBranches([]);
}
}, [open, worktree?.path, defaultBaseBranch, fetchBranches]);
}, [open, worktree?.path, resetState, fetchBranches]);
const handleCreate = async () => {
if (!worktree) return;