diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/CollapsedWorkspaceItem.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/CollapsedWorkspaceItem.tsx index f4dc793a488..14a052c8356 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/CollapsedWorkspaceItem.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/CollapsedWorkspaceItem.tsx @@ -33,7 +33,6 @@ interface CollapsedWorkspaceItemProps { isActive: boolean; isUnread: boolean; workspaceStatus: ActivePaneStatus | null; - diffStats?: { additions: number; deletions: number } | null; itemRef: RefObject; showDeleteDialog: boolean; setShowDeleteDialog: (open: boolean) => void; @@ -52,7 +51,6 @@ export function CollapsedWorkspaceItem({ isActive, isUnread, workspaceStatus, - diffStats, itemRef, showDeleteDialog, setShowDeleteDialog, @@ -172,7 +170,6 @@ export function CollapsedWorkspaceItem({ diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceContextMenu.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceContextMenu.tsx index 9277bd5f25a..26d45cee899 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceContextMenu.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceContextMenu.tsx @@ -47,7 +47,6 @@ interface WorkspaceContextMenuProps { isUnread: boolean; workspaceStatus: string | null | undefined; sections: { id: string; name: string }[]; - diffStats?: { additions: number; deletions: number } | null; onRename: () => void; onOpenInFinder: () => void; onOpenInEditor: () => void; @@ -67,7 +66,6 @@ export function WorkspaceContextMenu({ isUnread, workspaceStatus, sections, - diffStats, onRename, onOpenInFinder, onOpenInEditor, @@ -254,7 +252,6 @@ export function WorkspaceContextMenu({ diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceListItem.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceListItem.tsx index ad8747ac011..9fd8b6b1176 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceListItem.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/WorkspaceListItem.tsx @@ -160,21 +160,6 @@ export function WorkspaceListItem({ enabled: hasHovered && !!worktreePath, staleTime: GITHUB_STATUS_STALE_TIME, }); - const localDiffStats = useMemo(() => { - if (!localChanges) return null; - const allFiles = - localChanges.againstBase.length > 0 - ? localChanges.againstBase - : [ - ...localChanges.staged, - ...localChanges.unstaged, - ...localChanges.untracked, - ]; - const additions = allFiles.reduce((sum, f) => sum + (f.additions || 0), 0); - const deletions = allFiles.reduce((sum, f) => sum + (f.deletions || 0), 0); - if (additions === 0 && deletions === 0) return null; - return { additions, deletions }; - }, [localChanges]); const { data: aheadBehind, refetch: refetchAheadBehind } = electronTrpc.workspaces.getAheadBehind.useQuery( @@ -191,6 +176,22 @@ export function WorkspaceListItem({ workspaceId: id, }); + const localDiffStats = useMemo(() => { + if (!localChanges) return null; + const allFiles = + localChanges.againstBase.length > 0 + ? localChanges.againstBase + : [ + ...localChanges.staged, + ...localChanges.unstaged, + ...localChanges.untracked, + ]; + const additions = allFiles.reduce((sum, f) => sum + (f.additions || 0), 0); + const deletions = allFiles.reduce((sum, f) => sum + (f.deletions || 0), 0); + if (additions === 0 && deletions === 0) return null; + return { additions, deletions }; + }, [localChanges]); + const handleClick = (e?: React.MouseEvent) => { if (rename.isRenaming) return; @@ -249,7 +250,11 @@ export function WorkspaceListItem({ }; const pr = githubStatus?.pr; - const diffStats = localDiffStats; + const diffStats = + localDiffStats || + (pr && (pr.additions > 0 || pr.deletions > 0) + ? { additions: pr.additions, deletions: pr.deletions } + : null); const showBranchSubtitle = isBranchWorkspace || (!!name && name !== branch); @@ -263,7 +268,6 @@ export function WorkspaceListItem({ isActive={isActive} isUnread={isUnread} workspaceStatus={workspaceStatus} - diffStats={diffStats} itemRef={collapsedItemRef} showDeleteDialog={showDeleteDialog} setShowDeleteDialog={setShowDeleteDialog} @@ -466,7 +470,6 @@ export function WorkspaceListItem({ isUnread={isUnread} workspaceStatus={workspaceStatus} sections={sections} - diffStats={diffStats} onRename={rename.startRename} onOpenInFinder={handleOpenInFinder} onOpenInEditor={handleOpenInEditor} diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/components/WorkspaceHoverCard/WorkspaceHoverCard.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/components/WorkspaceHoverCard/WorkspaceHoverCard.tsx index cccd88d01d3..42ef7472217 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/components/WorkspaceHoverCard/WorkspaceHoverCard.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceListItem/components/WorkspaceHoverCard/WorkspaceHoverCard.tsx @@ -21,14 +21,12 @@ import { ReviewStatus } from "./components/ReviewStatus"; interface WorkspaceHoverCardContentProps { workspaceId: string; workspaceAlias?: string; - diffStats?: { additions: number; deletions: number } | null; onEditBranchClick?: (branchName: string) => void; } export function WorkspaceHoverCardContent({ workspaceId, workspaceAlias, - diffStats, onEditBranchClick, }: WorkspaceHoverCardContentProps) { const { data: worktreeInfo } = @@ -64,15 +62,6 @@ export function WorkspaceHoverCardContent({ ) : null; - const diffStatsBadge = diffStats ? ( -
- +{diffStats.additions} - - -{diffStats.deletions} - -
- ) : null; - const needsRebase = worktreeInfo?.gitStatus?.needsRebase; const behindCount = worktreeInfo?.gitStatus?.behind; @@ -176,7 +165,12 @@ export function WorkspaceHoverCardContent({ /> )} - {diffStatsBadge} +
+ +{pr.additions} + + -{pr.deletions} + +

{pr.title}

@@ -214,18 +208,11 @@ export function WorkspaceHoverCardContent({ ) : repoUrl ? (
-
-
- No PR for this branch -
- {diffStatsBadge} +
+ No PR for this branch
{previewButton}
- ) : diffStatsBadge ? ( -
- {diffStatsBadge} -
) : null}
); diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspacesListView/WorkspaceRow/WorkspaceRow.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspacesListView/WorkspaceRow/WorkspaceRow.tsx index 7520ad7c70b..509e4608ef9 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspacesListView/WorkspaceRow/WorkspaceRow.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspacesListView/WorkspaceRow/WorkspaceRow.tsx @@ -15,6 +15,7 @@ import { LuRotateCw, } from "react-icons/lu"; import { electronTrpc } from "renderer/lib/electron-trpc"; +import { useHoverGitHubStatus } from "renderer/lib/githubQueryPolicy"; import { useWorkspaceDeleteHandler } from "renderer/react-query/workspaces/useWorkspaceDeleteHandler"; import { STROKE_WIDTH } from "../../WorkspaceSidebar/constants"; import { DeleteWorkspaceDialog } from "../../WorkspaceSidebar/WorkspaceListItem/components/DeleteWorkspaceDialog/DeleteWorkspaceDialog"; @@ -36,6 +37,12 @@ export function WorkspaceRow({ isOpening, }: WorkspaceRowProps) { const isBranch = workspace.type === "branch"; + const { githubStatus, onMouseEnter: onGithubMouseEnter } = + useHoverGitHubStatus({ + workspaceId: workspace.workspaceId, + surface: "workspace-row", + isWorktree: workspace.type === "worktree", + }); const { showDeleteDialog, setShowDeleteDialog, handleDeleteClick } = useWorkspaceDeleteHandler(); const openFileInEditor = electronTrpc.external.openFileInEditor.useMutation({ @@ -52,6 +59,9 @@ export function WorkspaceRow({ } }; + const pr = githubStatus?.pr; + const showDiffStats = pr && (pr.additions > 0 || pr.deletions > 0); + const timeText = workspace.isOpen ? `Opened ${getRelativeTime(workspace.lastOpenedAt)}` : `Created ${getRelativeTime(workspace.createdAt)}`; @@ -69,6 +79,7 @@ export function WorkspaceRow({ type="button" onClick={handleClick} disabled={isOpening} + onMouseEnter={onGithubMouseEnter} className={cn( "flex items-center gap-3 w-full px-4 py-2 group text-left", "hover:bg-background/50 transition-colors", @@ -134,6 +145,14 @@ export function WorkspaceRow({ )} + {/* Diff stats */} + {showDiffStats && ( +
+ +{pr.additions} + -{pr.deletions} +
+ )} + {/* Spacer */}