import { issueStateTone } from "~/ui/tones"; import { Link } from "@tanstack/react-router"; import { setLinkedIssue } from "~/fns/pull-review"; import { useAction } from "~/hooks/use-action"; import { Badge } from "~/ui/Badge"; import { Button } from "~/ui/Button"; import { inputClass } from "~/ui/Field"; import { cn } from "~/utils/cn"; import { SidebarSection } from "~/ui/Heading"; type Props = { owner: string; repo: string; number: number; issues: Array<{ number: number; title: string; state: "open" | "closed"; source: "manual" | "keyword" }>; canEdit: boolean; }; /** "Development" sidebar: issues this pull request resolves, from closing keywords or manual links. */ export function LinkedIssues({ owner, repo, number, issues, canEdit }: Props) { const link = useAction(setLinkedIssue); return ( {issues.length === 0 &&

No linked issues

} {issues.map((issue) => (
{issue.state} #{issue.number} {issue.title} {canEdit && issue.source === "manual" && ( )}
))} {link.error &&

{link.error}

} {canEdit && (
{ event.preventDefault(); const form = event.currentTarget; const value = Number(String(new FormData(form).get("issue") ?? "").replace(/^#/, "")); if (!Number.isInteger(value) || value <= 0) return; if (await link.run({ data: { owner, repo, number, issueNumber: value, linked: true } })) form.reset(); }} >
)}
); }