Skip to content

Commit efbcbe0

Browse files
committed
fix: render branch creation dialog in TaskInput screen
1 parent 26e19a4 commit efbcbe0

2 files changed

Lines changed: 67 additions & 2 deletions

File tree

apps/code/src/renderer/features/task-detail/components/TaskInput.tsx

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,14 @@ import { FolderPicker } from "@features/folder-picker/components/FolderPicker";
33
import { GitHubRepoPicker } from "@features/folder-picker/components/GitHubRepoPicker";
44
import { useFolders } from "@features/folders/hooks/useFolders";
55
import { BranchSelector } from "@features/git-interaction/components/BranchSelector";
6+
import { GitBranchDialog } from "@features/git-interaction/components/GitInteractionDialogs";
67
import { useGitQueries } from "@features/git-interaction/hooks/useGitQueries";
8+
import { useGitInteractionStore } from "@features/git-interaction/state/gitInteractionStore";
9+
import {
10+
sanitizeBranchName,
11+
validateBranchName,
12+
} from "@features/git-interaction/utils/branchNameValidation";
13+
import { invalidateGitBranchQueries } from "@features/git-interaction/utils/gitCacheKeys";
714
import type { MessageEditorHandle } from "@features/message-editor/components/MessageEditor";
815
import { ModeIndicatorInput } from "@features/message-editor/components/ModeIndicatorInput";
916
import { DropZoneOverlay } from "@features/sessions/components/DropZoneOverlay";
@@ -22,7 +29,7 @@ import {
2229
import { Flex } from "@radix-ui/themes";
2330
import { useTRPC } from "@renderer/trpc/client";
2431
import { useNavigationStore } from "@stores/navigationStore";
25-
import { useQuery } from "@tanstack/react-query";
32+
import { useMutation, useQuery } from "@tanstack/react-query";
2633
import { useCallback, useEffect, useRef, useState } from "react";
2734
import { useHotkeys } from "react-hotkeys-hook";
2835
import { usePreviewSession } from "../hooks/usePreviewSession";
@@ -94,6 +101,51 @@ export function TaskInput() {
94101
const cloudBranches = cloudBranchData?.branches;
95102
const cloudDefaultBranch = cloudBranchData?.defaultBranch ?? null;
96103

104+
const {
105+
branchOpen,
106+
branchName: newBranchName,
107+
branchError,
108+
actions: gitActions,
109+
} = useGitInteractionStore();
110+
111+
const createBranchMutation = useMutation(
112+
trpcReact.git.createBranch.mutationOptions({
113+
onSuccess: (_data, { branchName }) => {
114+
if (selectedDirectory) invalidateGitBranchQueries(selectedDirectory);
115+
setSelectedBranch(branchName);
116+
gitActions.closeBranch();
117+
},
118+
onError: (error) => {
119+
const message =
120+
error instanceof Error ? error.message : "Failed to create branch.";
121+
gitActions.setBranchError(message);
122+
},
123+
}),
124+
);
125+
126+
const handleNewBranchNameChange = useCallback(
127+
(value: string) => {
128+
const sanitized = sanitizeBranchName(value);
129+
gitActions.setBranchName(sanitized);
130+
gitActions.setBranchError(validateBranchName(sanitized));
131+
},
132+
[gitActions],
133+
);
134+
135+
const handleCreateBranch = useCallback(() => {
136+
const trimmed = newBranchName.trim();
137+
if (!trimmed || !selectedDirectory) return;
138+
const validationError = validateBranchName(trimmed);
139+
if (validationError) {
140+
gitActions.setBranchError(validationError);
141+
return;
142+
}
143+
createBranchMutation.mutate({
144+
directoryPath: selectedDirectory,
145+
branchName: trimmed,
146+
});
147+
}, [newBranchName, selectedDirectory, gitActions, createBranchMutation]);
148+
97149
// Preview session provides adapter-specific config options
98150
const {
99151
modeOption,
@@ -399,6 +451,18 @@ export function TaskInput() {
399451
/>
400452
</Flex>
401453
</Flex>
454+
455+
<GitBranchDialog
456+
open={branchOpen}
457+
onOpenChange={(open) => {
458+
if (!open) gitActions.closeBranch();
459+
}}
460+
branchName={newBranchName}
461+
onBranchNameChange={handleNewBranchNameChange}
462+
onConfirm={handleCreateBranch}
463+
isSubmitting={createBranchMutation.isPending}
464+
error={branchError}
465+
/>
402466
</div>
403467
);
404468
}

apps/code/src/shared/types/analytics.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ type GitActionType =
1313
| "commit-push"
1414
| "create-pr"
1515
| "view-pr"
16-
| "update-pr";
16+
| "update-pr"
17+
| "branch-here";
1718
export type FeedbackType = "good" | "bad" | "general";
1819
type FileOpenSource = "sidebar" | "agent-suggestion" | "search" | "diff";
1920
type FileChangeType = "added" | "modified" | "deleted";

0 commit comments

Comments
 (0)