87 lines · 3.1 KB
import { createFileRoute } from "@tanstack/react-router";
import { usePull } from "~/hooks/use-pull";
import { useViewer } from "~/hooks/use-viewer";
import { Timeline } from "~/components/Timeline";
import { CommentComposer } from "~/components/CommentComposer";
import { IssueSidebar } from "~/components/IssueSidebar";
import { MergeBox } from "~/components/MergeBox";
import { ReactionBar } from "~/components/ReactionBar";
import { PullReviewers } from "~/components/PullReviewers";
import { LinkedIssues } from "~/components/LinkedIssues";
import { Avatar } from "~/ui/Avatar";
import { Markdown } from "~/ui/Markdown";
import { SignInPrompt } from "~/components/SignInPrompt";
import { ReportLink } from "~/components/ReportLink";

export const Route = createFileRoute("/$owner/$repo/pull/$number/")({
  component: Conversation,
});

function Conversation() {
  const data = usePull();
  const { owner, repo } = Route.useParams();
  const viewer = useViewer();
  const { issue } = data.conversation;

  return (
    <div className="grid gap-8 lg:grid-cols-[1fr_260px]">
      <div className="min-w-0 space-y-5">
        <div className="flex gap-3">
          <Avatar name={issue.author.name} />
          <div className="min-w-0 flex-1 overflow-hidden rounded-lg border border-kumo-hairline px-4 py-3">
            {issue.body.trim() ? (
              <Markdown html={issue.html} />
            ) : (
              <p className="text-sm text-kumo-subtle italic">No description provided.</p>
            )}
            <div className="mt-3 flex items-center justify-between gap-2">
              <ReactionBar
                owner={owner}
                repo={repo}