From ac8c5261225405afe9dfdf987fa6fcd902f5cf75 Mon Sep 17 00:00:00 2001 From: thomaspblock Date: Mon, 20 Jul 2026 08:15:50 +0200 Subject: [PATCH] feat(desktop): make missing project checkouts actionable (#2159) --- .../projects/ui/ProjectDetailScreen.tsx | 18 ++++--- .../projects/ui/ProjectRepositorySource.tsx | 48 ++++++++++++++----- .../projects/ui/ProjectWorkspaceTabs.tsx | 21 -------- .../src/features/projects/ui/ProjectsView.tsx | 2 +- desktop/src/testing/e2eBridge.ts | 25 +++++++++- .../tests/e2e/project-commit-detail.spec.ts | 3 ++ desktop/tests/e2e/project-pr-review.spec.ts | 34 ++++++++++++- 7 files changed, 103 insertions(+), 48 deletions(-) diff --git a/desktop/src/features/projects/ui/ProjectDetailScreen.tsx b/desktop/src/features/projects/ui/ProjectDetailScreen.tsx index 60c8ac965..2c75085c4 100644 --- a/desktop/src/features/projects/ui/ProjectDetailScreen.tsx +++ b/desktop/src/features/projects/ui/ProjectDetailScreen.tsx @@ -281,7 +281,9 @@ export function ProjectDetailScreen(props: ProjectDetailScreenProps) { description: error instanceof Error ? error.message : "The Git fetch failed.", }); + return; } + toast.success("Remote state refreshed."); }, [repoSnapshotQuery, repoStateQuery, repoSyncStatusQuery]); // Compact branch + remote/local controls shared by the readme and Files // tab headers. @@ -301,6 +303,12 @@ export function ProjectDetailScreen(props: ProjectDetailScreenProps) { ? "Local" : "Local missing", remoteLabel: repoSnapshotQuery.isLoading ? "Remote checking" : "Remote", + onCloneLocal: project?.cloneUrls[0] + ? () => { + void handleCloneRepo(); + } + : undefined, + clonePending: cloneRepoMutation.isPending, canPush: repoSyncStatusQuery.data?.canPush ?? false, onPush: () => { void handlePushLocalRepo(); @@ -813,16 +821,6 @@ export function ProjectDetailScreen(props: ProjectDetailScreenProps) { { - void handleCloneRepo(); - }, - pending: cloneRepoMutation.isPending, - } - : undefined - } commitDiff={commitDiffQuery.data} commitDiffError={commitDiffQuery.error} commitDiffLoading={commitDiffQuery.isLoading} diff --git a/desktop/src/features/projects/ui/ProjectRepositorySource.tsx b/desktop/src/features/projects/ui/ProjectRepositorySource.tsx index e627da9b0..32134793e 100644 --- a/desktop/src/features/projects/ui/ProjectRepositorySource.tsx +++ b/desktop/src/features/projects/ui/ProjectRepositorySource.tsx @@ -13,6 +13,7 @@ import { Button } from "@/shared/ui/button"; import { DropdownMenu, DropdownMenuContent, + DropdownMenuItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuTrigger, @@ -47,12 +48,12 @@ export function RepositoryBranchDropdown({ ) : null} - {cloneAction ? ( - - ) : null} {updatePullRequestAction ? (