feat(github): move PR monitoring to backend with lightweight polling (#502)

This commit is contained in:
Carlos Florêncio
2026-03-30 23:26:01 +01:00
committed by GitHub
parent 59ee830d71
commit c56dfe8537
28 changed files with 1174 additions and 179 deletions
+6 -2
View File
@@ -6,7 +6,7 @@ import { cn } from "@/lib/utils";
import { useAppStore } from "@/components/state-provider";
import type { TaskPR } from "@/lib/types/github";
function getPRStatusColor(pr: TaskPR): string {
export function getPRStatusColor(pr: TaskPR): string {
if (pr.state === "merged") return "text-purple-500";
if (pr.state === "closed") return "text-red-500";
if (pr.review_state === "changes_requested" || pr.checks_state === "failure") {
@@ -37,7 +37,11 @@ export function PRTaskIcon({ taskId }: { taskId: string }) {
return (
<Tooltip>
<TooltipTrigger asChild>
<span className={cn("inline-flex items-center", getPRStatusColor(pr))}>
<span
data-testid={`pr-task-icon-${taskId}`}
data-pr-state={pr.state}
className={cn("inline-flex items-center", getPRStatusColor(pr))}
>
<IconGitPullRequest className="h-3.5 w-3.5" />
</span>
</TooltipTrigger>
@@ -6,15 +6,10 @@ import { Button } from "@kandev/ui/button";
import { Tooltip, TooltipContent, TooltipTrigger } from "@kandev/ui/tooltip";
import { useDockviewStore } from "@/lib/state/dockview-store";
import { useActiveTaskPR, useTaskPR } from "@/hooks/domains/github/use-task-pr";
import { getPRStatusColor } from "@/components/github/pr-task-icon";
import { useAppStore } from "@/components/state-provider";
import type { TaskPR } from "@/lib/types/github";
function prIconColor(state: string): string {
if (state === "merged") return "text-purple-500";
if (state === "closed") return "text-red-500";
return "text-green-600";
}
function PRStatusIcon({ pr }: { pr: TaskPR }) {
// Terminal states take priority
if (pr.state === "merged") {
@@ -55,7 +50,7 @@ export const PRTopbarButton = memo(function PRTopbarButton() {
className="cursor-pointer gap-1.5 px-2"
onClick={addPRPanel}
>
<IconGitPullRequest className={`h-4 w-4 ${prIconColor(pr.state)}`} />
<IconGitPullRequest className={`h-4 w-4 ${getPRStatusColor(pr)}`} />
<span className="text-xs font-medium">#{pr.pr_number}</span>
<PRStatusIcon pr={pr} />
</Button>