Files
dc-observatio/services/pcp-tgu-ops-ui/src/features/tgu-planning/tguStatus.ts
T
Дмитрий Соловьев e0aa1ccf0e Таймлайн ТГУ: по умолчанию только актуальная цепочка планов
Раньше таймлайн рисовал планы всех статусов, включая историю версий
(SUPERSEDED/EXPIRED/REJECTED), из-за чего активная цепочка тонула в
наложении старых планов. Теперь по умолчанию показываются только
актуальные планы (PLANNED/ISSUING/WAITING_DECISION/ACCEPTED), а историю
версий можно включить чекбоксом над таймлайном.
2026-06-02 11:25:58 +03:00

40 lines
1.8 KiB
TypeScript

import type { TguPlanStatus } from "../../model/tguTypes";
import type { TimelineStatusStyle } from "../../model/timelineTypes";
export const STATUS_STYLES: TimelineStatusStyle[] = [
{ status: "ACCEPTED", label: "ACCEPTED", color: "#2f9e44", className: "status-accepted" },
{ status: "REJECTED", label: "REJECTED", color: "#d64545", className: "status-rejected" },
{ status: "WAITING_DECISION", label: "WAITING_DECISION", color: "#f0ad2e", className: "status-waiting" },
{ status: "PLANNED", label: "PLANNED", color: "#8d99a6", className: "status-planned" },
{ status: "ISSUING", label: "ISSUING", color: "#2f80ed", className: "status-issuing" },
{ status: "EXPIRED", label: "EXPIRED", color: "#495057", className: "status-expired" },
{ status: "SUPERSEDED", label: "SUPERSEDED", color: "#c7ced6", className: "status-superseded" },
{ status: "START_AMBIGUOUS", label: "START_AMBIGUOUS", color: "#b42318", className: "status-ambiguous" }
];
const STATUS_BY_NAME = new Map(STATUS_STYLES.map((style) => [style.status, style]));
/** Статусы актуальной цепочки: их показываем на таймлайне по умолчанию. */
const ACTIVE_PLAN_STATUSES = new Set<TguPlanStatus>([
"PLANNED",
"ISSUING",
"WAITING_DECISION",
"ACCEPTED"
]);
/** Проверяет, относится ли план к актуальной цепочке (а не к истории версий). */
export function isActivePlanStatus(status: TguPlanStatus): boolean {
return ACTIVE_PLAN_STATUSES.has(status);
}
export function statusStyle(status: TguPlanStatus): TimelineStatusStyle {
return (
STATUS_BY_NAME.get(status) ?? {
status,
label: status || "UNKNOWN",
color: "#79828d",
className: "status-unknown"
}
);
}