"use client"; import { memo } from "react"; import { IconGitPullRequest, IconCheck, IconX, IconClock } from "@tabler/icons-react"; 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, isPRReadyToMerge } from "@/components/github/pr-task-icon"; import { useAppStore } from "@/components/state-provider"; import type { TaskPR } from "@/lib/types/github"; function PRStatusIcon({ pr }: { pr: TaskPR }) { // Terminal states take priority if (pr.state === "merged") { return ; } if (pr.state === "closed") { return ; } // Review/check states only matter for open PRs if (pr.checks_state === "failure" || pr.review_state === "changes_requested") { return ; } if (isPRReadyToMerge(pr)) { return ; } if (pr.checks_state === "success" && pr.review_state === "approved") { return ; } if (pr.checks_state === "pending" || pr.review_state === "pending") { return ; } return null; } export const PRTopbarButton = memo(function PRTopbarButton() { const activeTaskId = useAppStore((s) => s.tasks.activeTaskId); // useTaskPR fetches if not in store; useActiveTaskPR just reads useTaskPR(activeTaskId); const pr = useActiveTaskPR(); const addPRPanel = useDockviewStore((s) => s.addPRPanel); if (!pr) return null; return ( {pr.pr_title} ); });