"use client";
import Link from "next/link";
import {
IconGitPullRequest,
IconGitPullRequestClosed,
IconGitMerge,
IconPlus,
IconChevronDown,
} from "@tabler/icons-react";
import type { Icon } from "@tabler/icons-react";
import { Button } from "@kandev/ui/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@kandev/ui/dropdown-menu";
import { Spinner } from "@kandev/ui/spinner";
import { cn, formatRelativeTime } from "@/lib/utils";
import type { GitHubPR, GitHubPRStatus } from "@/lib/types/github";
import type { LaunchPayload, TaskPreset } from "./quick-task-launcher";
import { PRStatusBadges } from "./pr-status-badges";
import { prStatusKey, usePRStatuses } from "./use-pr-statuses";
type PRListProps = {
items: GitHubPR[];
loading: boolean;
error: string | null;
presets: TaskPreset[];
onStartTask: (payload: LaunchPayload) => void;
};
function prStateIcon(pr: GitHubPR): { Icon: Icon; className: string } {
if (pr.state === "merged")
return { Icon: IconGitMerge, className: "text-purple-600 dark:text-purple-400" };
if (pr.state === "closed")
return { Icon: IconGitPullRequestClosed, className: "text-red-600 dark:text-red-400" };
if (pr.draft) return { Icon: IconGitPullRequest, className: "text-muted-foreground" };
return { Icon: IconGitPullRequest, className: "text-emerald-600 dark:text-emerald-400" };
}
function StartTaskMenu({
pr,
presets,
onStartTask,
}: {
pr: GitHubPR;
presets: TaskPreset[];
onStartTask: PRListProps["onStartTask"];
}) {
const launch = (preset: TaskPreset) => onStartTask({ kind: "pr", pr, preset });
return (