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.error.message}{" "}
)}← задачи
{i.description}}
| Команда | Пакет | Тип | Статус | Завершена | Ошибка |
|---|---|---|---|---|---|
| #{c.id} | #{c.batch_id} | {c.type} | {c.status} | {c.finished_at ? fmtStamp(c.finished_at) : ""} | {c.error} |
команд по задаче не было
}