mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-01 13:13:11 +00:00
80 lines
2.4 KiB
TypeScript
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.";
|
|
}
|