import { useQuery } from "@tanstack/react-query"; import { Link, useCaseHref } from "@/lib/router"; import { casesApi, type CaseLinkRole } from "@/api/cases"; import { instanceSettingsApi } from "@/api/instanceSettings"; import { queryKeys } from "@/lib/queryKeys"; import { Badge } from "@/components/ui/badge"; import { StatusBadge } from "@/components/StatusBadge"; const ROLE_LABEL: Record = { origin: "origin", work: "work", reference: "reference", }; /** * Issue-page right-rail section (P4 ยง5): the cases linked to this issue, each * with its link role + case status. Self-gates on the experimental Cases flag * and renders nothing when the flag is off or no cases are linked, so it can be * dropped into the issue properties panel unconditionally. */ export function IssueCasesPanel({ issueId }: { issueId: string }) { const caseHref = useCaseHref(); const { data: experimentalSettings } = useQuery({ queryKey: queryKeys.instance.experimentalSettings, queryFn: () => instanceSettingsApi.getExperimental(), }); const enabled = experimentalSettings?.enableCases === true; const casesQuery = useQuery({ queryKey: queryKeys.cases.forIssue(issueId), queryFn: () => casesApi.listForIssue(issueId), enabled: enabled && !!issueId, }); const links = casesQuery.data ?? []; if (!enabled || links.length === 0) return null; return (

Cases

{links.map((link) => ( {link.case.identifier} {link.case.title} {ROLE_LABEL[link.role]} ))}
); }