"use client"; import { useQuery } from "@tanstack/react-query"; import { GitPullRequest, GitPullRequestArrow, GitPullRequestClosed, GitMerge, GitPullRequestDraft, } from "lucide-react"; import { issuePullRequestsOptions } from "@multica/core/github/queries"; import type { GitHubPullRequest, GitHubPullRequestState } from "@multica/core/types"; import { cn } from "@multica/ui/lib/utils"; import { useT } from "../../i18n"; const STATE_ICON: Record< GitHubPullRequestState, { icon: React.ComponentType<{ className?: string }>; className: string } > = { open: { icon: GitPullRequestArrow, className: "text-emerald-600 dark:text-emerald-400" }, draft: { icon: GitPullRequestDraft, className: "text-muted-foreground" }, merged: { icon: GitMerge, className: "text-violet-600 dark:text-violet-400" }, closed: { icon: GitPullRequestClosed, className: "text-rose-600 dark:text-rose-400" }, }; export function PullRequestList({ issueId }: { issueId: string }) { const { t } = useT("issues"); const { data, isLoading } = useQuery(issuePullRequestsOptions(issueId)); const prs = data?.pull_requests ?? []; if (isLoading) { return

{t(($) => $.detail.pull_requests_loading)}

; } if (prs.length === 0) { return (

{t(($) => $.detail.pull_requests_empty)}

); } return (
{prs.map((pr) => ( ))}
); } function PullRequestRow({ pr }: { pr: GitHubPullRequest }) { const { t } = useT("issues"); const cfg = STATE_ICON[pr.state] ?? { icon: GitPullRequest, className: "" }; const Icon = cfg.icon; const label = pr.state === "open" ? t(($) => $.detail.pull_request_state_open) : pr.state === "draft" ? t(($) => $.detail.pull_request_state_draft) : pr.state === "merged" ? t(($) => $.detail.pull_request_state_merged) : pr.state === "closed" ? t(($) => $.detail.pull_request_state_closed) : pr.state; return (

{pr.title}

{pr.repo_owner}/{pr.repo_name}#{pr.number} · {label} {pr.author_login ? ` · @${pr.author_login}` : null}

); }