Skip to content

Commit ee78d0d

Browse files
authored
feat: repo picker (#226)
1 parent a97ff4a commit ee78d0d

File tree

4 files changed

+50
-12
lines changed

4 files changed

+50
-12
lines changed

apps/array/src/renderer/features/repository-picker/components/RepositoryPicker.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,11 +147,15 @@ export function RepositoryPicker({
147147
variant="outline"
148148
size="1"
149149
color="gray"
150-
style={{ width: "100%" }}
151150
disabled={!hasIntegration}
152151
>
153152
<Flex justify="between" align="center" gap="2" width="100%">
154-
<Flex align="center" gap="2" style={{ minWidth: 0, flex: 1 }}>
153+
<Flex
154+
align="center"
155+
gap="2"
156+
width="250px"
157+
style={{ minWidth: 0, flex: 1 }}
158+
>
155159
<GitBranchIcon
156160
size={16}
157161
weight="regular"

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

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { FolderPicker } from "@features/folder-picker/components/FolderPicker";
2+
import { RepositoryPicker } from "@features/repository-picker/components/RepositoryPicker";
23
import { useSettingsStore } from "@features/settings/stores/settingsStore";
4+
import { useRepositoryIntegration } from "@hooks/useIntegrations";
35
import { useSetHeaderContent } from "@hooks/useSetHeaderContent";
46
import { Flex } from "@radix-ui/themes";
57
import { useRegisteredFoldersStore } from "@renderer/stores/registeredFoldersStore";
@@ -28,12 +30,17 @@ export function TaskInput() {
2830
const [selectedDirectory, setSelectedDirectory] = useState(
2931
lastUsedDirectory || "",
3032
);
33+
const [selectedRepository, setSelectedRepository] = useState<string | null>(
34+
null,
35+
);
3136
const [runMode, setRunMode] = useState<RunMode>(
3237
import.meta.env.DEV ? lastUsedRunMode : "local",
3338
);
3439
const [localWorkspaceMode, setLocalWorkspaceMode] =
3540
useState<LocalWorkspaceMode>(lastUsedLocalWorkspaceMode);
3641

42+
const { githubIntegration } = useRepositoryIntegration();
43+
3744
useEffect(() => {
3845
if (view.folderId) {
3946
const folder = folders.find((f) => f.id === view.folderId);
@@ -60,6 +67,8 @@ export function TaskInput() {
6067
const { isCreatingTask, canSubmit, handleSubmit } = useTaskCreation({
6168
editor,
6269
selectedDirectory,
70+
selectedRepository,
71+
githubIntegrationId: githubIntegration?.id,
6372
workspaceMode: effectiveWorkspaceMode,
6473
});
6574

@@ -113,12 +122,21 @@ export function TaskInput() {
113122
}}
114123
>
115124
<Flex gap="2" align="center">
116-
<FolderPicker
117-
value={selectedDirectory}
118-
onChange={handleDirectoryChange}
119-
placeholder="Select working directory..."
120-
size="1"
121-
/>
125+
{runMode === "cloud" ? (
126+
<RepositoryPicker
127+
value={selectedRepository}
128+
onChange={setSelectedRepository}
129+
placeholder="Select repository..."
130+
size="1"
131+
/>
132+
) : (
133+
<FolderPicker
134+
value={selectedDirectory}
135+
onChange={handleDirectoryChange}
136+
placeholder="Select working directory..."
137+
size="1"
138+
/>
139+
)}
122140
{import.meta.env.DEV && (
123141
<RunModeSelect value={runMode} onChange={setRunMode} size="1" />
124142
)}
@@ -132,7 +150,9 @@ export function TaskInput() {
132150
onLocalWorkspaceModeChange={setLocalWorkspaceMode}
133151
canSubmit={canSubmit}
134152
onSubmit={handleSubmit}
135-
hasDirectory={!!selectedDirectory}
153+
hasDirectory={
154+
runMode === "cloud" ? !!selectedRepository : !!selectedDirectory
155+
}
136156
/>
137157

138158
<SuggestedTasks editor={editor} />

apps/array/src/renderer/features/task-detail/hooks/useTaskCreation.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ const log = logger.scope("task-creation");
2222
interface UseTaskCreationOptions {
2323
editor: Editor | null;
2424
selectedDirectory: string;
25+
selectedRepository?: string | null;
26+
githubIntegrationId?: number;
2527
workspaceMode: WorkspaceMode;
2628
}
2729

@@ -46,6 +48,8 @@ async function startAgentSession(
4648
export function useTaskCreation({
4749
editor,
4850
selectedDirectory,
51+
selectedRepository,
52+
githubIntegrationId,
4953
workspaceMode,
5054
}: UseTaskCreationOptions): UseTaskCreationReturn {
5155
const {
@@ -60,20 +64,22 @@ export function useTaskCreation({
6064
const { autoRunTasks } = useSettingsStore();
6165
const { clearDraft } = useTaskInputStore();
6266

67+
const isCloudMode = workspaceMode === "cloud";
6368
const canSubmit =
6469
!!editor &&
6570
isAuthenticated &&
6671
!!client &&
67-
!!selectedDirectory &&
72+
(isCloudMode ? !!selectedRepository : !!selectedDirectory) &&
6873
!isCreatingTask &&
6974
!editor.isEmpty;
7075

7176
const handleSubmit = useCallback(async () => {
77+
const isCloud = workspaceMode === "cloud";
7278
const canSubmit =
7379
!!editor &&
7480
isAuthenticated &&
7581
!!client &&
76-
!!selectedDirectory &&
82+
(isCloud ? !!selectedRepository : !!selectedDirectory) &&
7783
!isCreatingTask &&
7884
!editor.isEmpty;
7985

@@ -91,7 +97,9 @@ export function useTaskCreation({
9197
const filePaths = extractFileMentions(editorJson);
9298

9399
let repository: string | undefined;
94-
if (selectedDirectory) {
100+
if (selectedRepository) {
101+
repository = selectedRepository;
102+
} else if (selectedDirectory) {
95103
const detected = await window.electronAPI.detectRepo(selectedDirectory);
96104
if (detected) {
97105
repository = `${detected.organization}/${detected.repository}`;
@@ -102,6 +110,7 @@ export function useTaskCreation({
102110
{
103111
description: content,
104112
repository,
113+
github_integration: isCloud ? githubIntegrationId : undefined,
105114
autoRun: autoRunTasks,
106115
createdFrom: "cli",
107116
},
@@ -192,6 +201,8 @@ export function useTaskCreation({
192201
}, [
193202
editor,
194203
selectedDirectory,
204+
selectedRepository,
205+
githubIntegrationId,
195206
workspaceMode,
196207
createTask,
197208
saveRepoPath,

apps/array/src/renderer/features/tasks/hooks/useTasks.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,19 @@ export function useCreateTask() {
4040
{
4141
description,
4242
repository,
43+
github_integration,
4344
}: {
4445
description: string;
4546
repository?: string;
47+
github_integration?: number;
4648
autoRun?: boolean;
4749
createdFrom?: "cli" | "command-menu";
4850
},
4951
) =>
5052
client.createTask({
5153
description,
5254
repository,
55+
github_integration,
5356
}) as unknown as Promise<Task>,
5457
{
5558
onSuccess: (_task, variables) => {

0 commit comments

Comments
 (0)