import { useState } from "react"; import { updateIssue } from "~/fns/issues"; import { useAction } from "~/hooks/use-action"; import { Badge, RelativeTime } from "./ui/Primitives"; import { Button } from "./ui/Button"; import { inputClass } from "./ui/Field"; import { cn } from "~/utils/cn"; type Props = { owner: string; repo: string; number: number; title: string; state: "open" | "closed"; merged?: boolean; draft?: boolean; author: string; createdAt: number; canEdit: boolean; subtitle?: React.ReactNode; }; export function IssueHeader({ owner, repo, number, title, state, merged = false, draft = false, author, createdAt, canEdit, subtitle, }: Props) { const [editing, setEditing] = useState(false); const [value, setValue] = useState(title); const save = useAction(updateIssue); const tone = merged ? "purple" : state === "open" ? (draft ? "neutral" : "green") : "red"; const label = merged ? "Merged" : draft && state === "open" ? "Draft" : state === "open" ? "Open" : "Closed"; return (
{editing ? (
setValue(event.target.value)} className={cn(inputClass, "h-9 text-lg")} />
) : (

{title} #{number}

{canEdit && ( )}
)}
{label} {author} {subtitle ?? ( opened this )}
); }