Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ interface CollapsedWorkspaceItemProps {
isActive: boolean;
isUnread: boolean;
workspaceStatus: ActivePaneStatus | null;
diffStats?: { additions: number; deletions: number } | null;
itemRef: RefObject<HTMLButtonElement | null>;
showDeleteDialog: boolean;
setShowDeleteDialog: (open: boolean) => void;
Expand All @@ -51,6 +52,7 @@ export function CollapsedWorkspaceItem({
isActive,
isUnread,
workspaceStatus,
diffStats,
itemRef,
showDeleteDialog,
setShowDeleteDialog,
Expand Down Expand Up @@ -170,6 +172,7 @@ export function CollapsedWorkspaceItem({
<WorkspaceHoverCardContent
workspaceId={id}
workspaceAlias={name}
diffStats={diffStats}
onEditBranchClick={setRenameBranchTarget}
/>
</HoverCardContent>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ 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;
Expand All @@ -66,6 +67,7 @@ export function WorkspaceContextMenu({
isUnread,
workspaceStatus,
sections,
diffStats,
onRename,
onOpenInFinder,
onOpenInEditor,
Expand Down Expand Up @@ -252,6 +254,7 @@ export function WorkspaceContextMenu({
<WorkspaceHoverCardContent
workspaceId={id}
workspaceAlias={name}
diffStats={diffStats}
onEditBranchClick={setRenameBranchTarget}
/>
</HoverCardContent>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,22 +160,6 @@ export function WorkspaceListItem({
enabled: hasHovered && !!worktreePath,
staleTime: GITHUB_STATUS_STALE_TIME,
});

const { data: aheadBehind, refetch: refetchAheadBehind } =
electronTrpc.workspaces.getAheadBehind.useQuery(
{ workspaceId: id },
{
enabled: isBranchWorkspace,
staleTime: GITHUB_STATUS_STALE_TIME,
},
);

useBranchSyncInvalidation({
gitBranch: localChanges?.branch,
workspaceBranch: branch,
workspaceId: id,
});

const localDiffStats = useMemo(() => {
if (!localChanges) return null;
const allFiles =
Expand All @@ -192,6 +176,21 @@ export function WorkspaceListItem({
return { additions, deletions };
}, [localChanges]);

const { data: aheadBehind, refetch: refetchAheadBehind } =
electronTrpc.workspaces.getAheadBehind.useQuery(
{ workspaceId: id },
{
enabled: isBranchWorkspace,
staleTime: GITHUB_STATUS_STALE_TIME,
},
);

useBranchSyncInvalidation({
gitBranch: localChanges?.branch,
workspaceBranch: branch,
workspaceId: id,
});

const handleClick = (e?: React.MouseEvent) => {
if (rename.isRenaming) return;

Expand Down Expand Up @@ -250,11 +249,7 @@ export function WorkspaceListItem({
};

const pr = githubStatus?.pr;
const diffStats =
localDiffStats ||
(pr && (pr.additions > 0 || pr.deletions > 0)
? { additions: pr.additions, deletions: pr.deletions }
: null);
const diffStats = localDiffStats;

const showBranchSubtitle = isBranchWorkspace || (!!name && name !== branch);

Expand All @@ -268,6 +263,7 @@ export function WorkspaceListItem({
isActive={isActive}
isUnread={isUnread}
workspaceStatus={workspaceStatus}
diffStats={diffStats}
itemRef={collapsedItemRef}
showDeleteDialog={showDeleteDialog}
setShowDeleteDialog={setShowDeleteDialog}
Expand Down Expand Up @@ -470,6 +466,7 @@ export function WorkspaceListItem({
isUnread={isUnread}
workspaceStatus={workspaceStatus}
sections={sections}
diffStats={diffStats}
onRename={rename.startRename}
onOpenInFinder={handleOpenInFinder}
onOpenInEditor={handleOpenInEditor}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,14 @@ 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 } =
Expand Down Expand Up @@ -62,6 +64,15 @@ export function WorkspaceHoverCardContent({
</Button>
) : null;

const diffStatsBadge = diffStats ? (
<div className="flex items-center gap-1.5 text-xs font-mono shrink-0">
<span className="text-emerald-500">+{diffStats.additions}</span>
<span className="text-destructive-foreground">
-{diffStats.deletions}
</span>
</div>
) : null;

const needsRebase = worktreeInfo?.gitStatus?.needsRebase;
const behindCount = worktreeInfo?.gitStatus?.behind;

Expand Down Expand Up @@ -165,12 +176,7 @@ export function WorkspaceHoverCardContent({
/>
)}
</div>
<div className="flex items-center gap-1.5 text-xs font-mono shrink-0">
<span className="text-emerald-500">+{pr.additions}</span>
<span className="text-destructive-foreground">
-{pr.deletions}
</span>
</div>
{diffStatsBadge}
</div>

<p className="text-xs leading-relaxed line-clamp-2">{pr.title}</p>
Expand Down Expand Up @@ -208,11 +214,18 @@ export function WorkspaceHoverCardContent({
</div>
) : repoUrl ? (
<div className="pt-2 border-t border-border space-y-2">
<div className="text-xs text-muted-foreground">
No PR for this branch
<div className="flex items-center justify-between gap-2">
<div className="text-xs text-muted-foreground">
No PR for this branch
</div>
{diffStatsBadge}
</div>
{previewButton}
</div>
) : diffStatsBadge ? (
<div className="pt-2 border-t border-border flex items-center justify-end">
{diffStatsBadge}
</div>
) : null}
</div>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ 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";
Expand All @@ -37,12 +36,6 @@ 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({
Expand All @@ -59,9 +52,6 @@ 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)}`;
Expand All @@ -79,7 +69,6 @@ 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",
Expand Down Expand Up @@ -145,14 +134,6 @@ export function WorkspaceRow({
</span>
)}

{/* Diff stats */}
{showDiffStats && (
<div className="flex items-center gap-1 text-[10px] font-mono shrink-0">
<span className="text-emerald-500">+{pr.additions}</span>
<span className="text-destructive-foreground">-{pr.deletions}</span>
</div>
)}

{/* Spacer */}
<div className="flex-1" />

Expand Down
Loading