48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { getEffectiveInvoiceStatus } from "@beenvoice/domain/invoice-status";
|
|
import type { EffectiveInvoiceStatus } from "@beenvoice/domain/invoice-status";
|
|
|
|
export type InvoiceStatus = EffectiveInvoiceStatus;
|
|
|
|
export function getInvoiceStatus(invoice: {
|
|
status: string;
|
|
dueDate: Date | string;
|
|
createdBy?: { timeZone: string } | null;
|
|
}): InvoiceStatus {
|
|
if (invoice.status === "paid" || invoice.status === "draft") {
|
|
return invoice.status;
|
|
}
|
|
return getEffectiveInvoiceStatus(
|
|
"sent",
|
|
invoice.dueDate,
|
|
invoice.createdBy?.timeZone ?? "America/New_York",
|
|
);
|
|
}
|
|
|
|
export const statusLabels: Record<InvoiceStatus, string> = {
|
|
draft: "Draft",
|
|
sent: "Sent",
|
|
paid: "Paid",
|
|
overdue: "Overdue",
|
|
};
|
|
|
|
const lightStatusColors: Record<InvoiceStatus, string> = {
|
|
draft: "#6b7280",
|
|
sent: "#2563eb",
|
|
paid: "#16a34a",
|
|
overdue: "#dc2626",
|
|
};
|
|
|
|
const darkStatusColors: Record<InvoiceStatus, string> = {
|
|
draft: "#A1A1AA",
|
|
sent: "#60A5FA",
|
|
paid: "#4ADE80",
|
|
overdue: "#F87171",
|
|
};
|
|
|
|
/** @deprecated Use `getStatusColor` for theme-aware colors. */
|
|
export const statusColors = lightStatusColors;
|
|
|
|
export function getStatusColor(status: InvoiceStatus, isDark: boolean): string {
|
|
return (isDark ? darkStatusColors : lightStatusColors)[status];
|
|
}
|