"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}
);
});