import { Link, useParams } from "react-router"; import { ApiError } from "../api/client.ts"; import { useIssue, useSettings } from "../api/queries.ts"; import { JIRA_URL } from "../board/constants.ts"; import { fmtStamp } from "../board/model/util.ts"; import { NoteForm } from "./NoteForm.tsx"; import { dueOf } from "./options.ts"; import "./issues.css"; export function IssuePage() { const { key = "" } = useParams(); const issue = useIssue(key); const settings = useSettings(); // подпись типа связи: логический тип из link_types настроек, иначе имя типа Jira const typeName = (jira: string) => Object.entries(settings.data?.link_types ?? {}).find(([, j]) => j === jira)?.[0] ?? jira; if (issue.isPending) return

загрузка {key}…

; if (issue.error instanceof ApiError && issue.error.status === 404) { return

Задачи {key} нет в зеркале хаба. к списку задач

; } if (issue.isError && !issue.data) { return (

{issue.error.message}{" "}

); } const i = issue.data!; const fields: [string, string | null][] = [ ["Тип", i.issue_type], ["Статус Jira", i.status], ["Приоритет", i.priority], ["Исполнитель", i.assignee], ["Автор", i.reporter], ["Спринт", i.sprint], ["Срок", dueOf(i) || null], ["Плановое начало", i.planned_start], ["Эпик", i.epic_key], ["Метки", i.labels.join(", ") || null], ["Сосед по связям", i.neighbor ? "да" : null], ["Обновлена в Jira", i.jira_updated ? fmtStamp(i.jira_updated) : null], ]; return (
{issue.isError && (

{issue.error.message}{" "}

)}

← задачи

{i.key} · {i.summary}

Открыть в Jira

{fields.filter(([, v]) => v).map(([k, v]) =>
{k}
{v}
)}
{i.description &&
{i.description}
}

Связи

    {i.links_out.map((l) =>
  • {typeName(l.link_type)} → {l.target_key}
  • )} {i.links_in.map((l) =>
  • {l.source_key} → {typeName(l.link_type)} → эта задача
  • )} {!i.links_out.length && !i.links_in.length &&
  • связей нет
  • }

Последние команды

{i.commands.length ? ( {i.commands.map((c) => ( ))}
КомандаПакетТипСтатусЗавершенаОшибка
#{c.id}#{c.batch_id}{c.type}{c.status} {c.finished_at ? fmtStamp(c.finished_at) : ""}{c.error}
) :

команд по задаче не было

}
); }