import { Callout } from "~/ui/Callout";
import { createFileRoute, Link, Outlet, useMatchRoute } from "@tanstack/react-router";
import { getPull } from "~/fns/pulls";
import { getIssue } from "~/fns/issues";
import { listAssignable, listLabels } from "~/fns/labels";
import { IssueHeader } from "~/components/IssueHeader";
import { PullStack } from "~/components/PullStack";
import { RelativeTime } from "~/ui/RelativeTime";
import { CountBadge } from "~/ui/CountBadge";
import { Code } from "~/ui/Code";
import { RouteTabs } from "~/ui/Nav";
export const Route = createFileRoute("/$owner/$repo/pull/$number")({
loader: async ({ params }) => {
const ref = { owner: params.owner, repo: params.repo };
const number = Number(params.number);
const [pull, issue, labels, assignable] = await Promise.all([
getPull({ data: { ...ref, number } }),
getIssue({ data: { ...ref, number } }),
listLabels({ data: ref }),
listAssignable({ data: ref }),
]);
return { ...pull, conversation: issue, allLabels: labels, assignable: assignable.map((row) => row.name) };
},
component: PullLayout,
});
function PullLayout() {
const data = Route.useLoaderData();
const params = Route.useParams();
const { pull, conversation } = data;
const { issue } = conversation;
const matchRoute = useMatchRoute();
const tabs = [
{
to: "/$owner/$repo/pull/$number",
label: "Conversation",
exact: true,
count: conversation.timeline.filter((item) => item.type === "comment").length,
},