shoc-frontend-new/src/domain/work-orders/utils/completion-doc-state.ts
2026-07-17 13:59:31 -03:00

80 lines
2.4 KiB
TypeScript

import { CheckCircle2, FileText, XCircle } from "lucide-react";
import type { CompletionDocStateConfig, DocState } from "@/domain/work-orders/types/completion-doc";
import type { CompletionDocStatus } from "@/domain/work-orders/types/work-order-table-row";
const MONTH_NAMES = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
];
function pad2(n: number): string {
return String(n).padStart(2, "0");
}
export function docStateOf(status: CompletionDocStatus): DocState {
return status === "Yes" ? "generated" : status === "NN" ? "not-required" : "draft";
}
export function fmtDocNow(): string {
const d = new Date();
let h = d.getHours();
const ap = h >= 12 ? "PM" : "AM";
h = h % 12 || 12;
return `${MONTH_NAMES[d.getMonth()].slice(0, 3)} ${d.getDate()}, ${d.getFullYear()} · ${h}:${pad2(d.getMinutes())} ${ap}`;
}
export const DOC_STATE_CFG: Record<DocState, CompletionDocStateConfig> = {
draft: {
pillLabel: "Draft — not generated",
pillBg: "var(--color-bg-muted)",
pillText: "var(--muted-foreground)",
cardBg: "var(--color-bg-muted)",
cardBorder: "var(--color-border)",
cardIconBg: "var(--color-bg-surface)",
iconColor: "var(--muted-foreground)",
cardTitle: "Draft — not generated",
icon: FileText,
},
generated: {
pillLabel: "Generated",
pillBg: "var(--doc-yes-bg)",
pillText: "var(--color-success)",
cardBg: "var(--doc-yes-bg)",
cardBorder: "#bbf7d0",
cardIconBg: "var(--color-bg-surface)",
iconColor: "var(--color-success)",
cardTitle: "Generated",
icon: CheckCircle2,
},
"not-required": {
pillLabel: "Not required",
pillBg: "var(--indicator-co-1-bg)",
pillText: "var(--warning)",
cardBg: "var(--indicator-co-1-bg)",
cardBorder: "#fde68a",
cardIconBg: "var(--color-bg-surface)",
iconColor: "var(--warning)",
cardTitle: "Not required",
icon: XCircle,
},
};
export function docStatusCardDescription(state: DocState, generatedAt: string): string {
if (state === "draft") {
return "This document hasn't been generated yet. Add any extra details, then generate it — or mark it as not required.";
}
if (state === "generated") {
return `Ready to download or share. Generated ${generatedAt}.`;
}
return "No document is required for this work order. You can undo this anytime.";
}