import { Callout } from "~/ui/Callout";
import { ReportLink } from "~/components/ReportLink";
import { createFileRoute, redirect } from "@tanstack/react-router";
import { getIssue } from "~/fns/issues";
import { listAssignable, listLabels } from "~/fns/labels";
import { findIssueRedirect, getIssuePlanning } from "~/fns/planning";
import { useViewer } from "~/hooks/use-viewer";
import { IssueHeader } from "~/components/IssueHeader";
import { IssueSidebar } from "~/components/IssueSidebar";
import { Timeline } from "~/components/Timeline";
import { CommentComposer } from "~/components/CommentComposer";
import { IssuePlanningSidebar } from "~/components/IssuePlanningSidebar";
import { ReactionBar } from "~/components/ReactionBar";
import { Avatar } from "~/ui/Avatar";
import { Markdown } from "~/ui/Markdown";
import { RelativeTime } from "~/ui/RelativeTime";
export const Route = createFileRoute("/$owner/$repo/issues/$number")({
loader: async ({ params }) => {
const ref = { owner: params.owner, repo: params.repo };
const number = Number(params.number);
try {
const [issue, labels, assignable, planning] = await Promise.all([
getIssue({ data: { ...ref, number } }),
listLabels({ data: ref }),
listAssignable({ data: ref }),
getIssuePlanning({ data: { ...ref, number } }),
]);
return { ...issue, allLabels: labels, assignable: assignable.map((row) => row.name), planning };
} catch (error) {
const moved = await findIssueRedirect({ data: { ...ref, number } }).catch(() => null);
if (moved)
throw redirect({
to: "/$owner/$repo/issues/$number",
params: { owner: moved.owner, repo: moved.repo, number: String(moved.number) },
});
throw error;
}
},
component: IssuePage,