Skip to content

Commit 366af61

Browse files
committed
feat(code): unified PR creation workflow
1 parent e8e94fe commit 366af61

3 files changed

Lines changed: 40 additions & 21 deletions

File tree

apps/code/src/renderer/features/git-interaction/components/BranchSelector.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Combobox } from "@components/ui/combobox/Combobox";
22
import { useGitInteractionStore } from "@features/git-interaction/state/gitInteractionStore";
3-
import { getSuggestedBranchName } from "@features/git-interaction/utils/deriveBranchName";
3+
import { getSuggestedBranchName } from "@features/git-interaction/utils/getSuggestedBranchName";
44
import { invalidateGitBranchQueries } from "@features/git-interaction/utils/gitCacheKeys";
55
import { GitBranch, Plus } from "@phosphor-icons/react";
66
import { Flex, Spinner, Tooltip } from "@radix-ui/themes";
@@ -144,7 +144,9 @@ export function BranchSelector({
144144
onClick={() => {
145145
setOpen(false);
146146
actions.openBranch(
147-
taskId ? getSuggestedBranchName(taskId) : undefined,
147+
taskId
148+
? getSuggestedBranchName(taskId, repoPath ?? undefined)
149+
: undefined,
148150
);
149151
}}
150152
>
Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import type { Task } from "@shared/types";
2-
import { queryClient } from "@utils/queryClient";
1+
import { BRANCH_PREFIX } from "@shared/constants";
32

43
export function deriveBranchName(title: string, fallbackId: string): string {
54
const slug = title
@@ -11,21 +10,6 @@ export function deriveBranchName(title: string, fallbackId: string): string {
1110
.slice(0, 60)
1211
.replace(/-$/, "");
1312

14-
if (!slug) return `posthog/task-${fallbackId}`;
15-
return `posthog/${slug}`;
16-
}
17-
18-
export function getSuggestedBranchName(taskId: string): string {
19-
const queries = queryClient.getQueriesData<Task[]>({
20-
queryKey: ["tasks", "list"],
21-
});
22-
let task: Task | undefined;
23-
for (const [, tasks] of queries) {
24-
task = tasks?.find((t) => t.id === taskId);
25-
if (task) break;
26-
}
27-
const fallbackId = task?.task_number
28-
? String(task.task_number)
29-
: (task?.slug ?? taskId);
30-
return deriveBranchName(task?.title ?? "", fallbackId);
13+
if (!slug) return `${BRANCH_PREFIX}task-${fallbackId}`;
14+
return `${BRANCH_PREFIX}${slug}`;
3115
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { deriveBranchName } from "@features/git-interaction/utils/deriveBranchName";
2+
import { trpc } from "@renderer/trpc";
3+
import type { Task } from "@shared/types";
4+
import { queryClient } from "@utils/queryClient";
5+
6+
export function getSuggestedBranchName(
7+
taskId: string,
8+
repoPath?: string,
9+
): string {
10+
const queries = queryClient.getQueriesData<Task[]>({
11+
queryKey: ["tasks", "list"],
12+
});
13+
let task: Task | undefined;
14+
for (const [, tasks] of queries) {
15+
task = tasks?.find((t) => t.id === taskId);
16+
if (task) break;
17+
}
18+
const fallbackId = task?.task_number
19+
? String(task.task_number)
20+
: (task?.slug ?? taskId);
21+
const base = deriveBranchName(task?.title ?? "", fallbackId);
22+
23+
if (!repoPath) return base;
24+
25+
const cached = queryClient.getQueryData<string[]>(
26+
trpc.git.getAllBranches.queryKey({ directoryPath: repoPath }),
27+
);
28+
if (!cached?.includes(base)) return base;
29+
30+
let n = 2;
31+
while (cached.includes(`${base}-${n}`)) n++;
32+
return `${base}-${n}`;
33+
}

0 commit comments

Comments
 (0)