54 lines
1.7 KiB
TypeScript
54 lines
1.7 KiB
TypeScript
export const COMMISSION_STATUSES = [
|
|
"NEW",
|
|
"REVIEWING",
|
|
"ACCEPTED",
|
|
"REJECTED",
|
|
"INPROGRESS",
|
|
"COMPLETED",
|
|
"SPAM",
|
|
] as const;
|
|
|
|
export type CommissionStatus = (typeof COMMISSION_STATUSES)[number];
|
|
|
|
function isCommissionStatus(value: string): value is CommissionStatus {
|
|
return (COMMISSION_STATUSES as readonly string[]).includes(value);
|
|
}
|
|
|
|
export const BOARD_COLUMNS = {
|
|
intake: {
|
|
title: "Intake",
|
|
statuses: ["NEW", "REVIEWING", "ACCEPTED"] as const,
|
|
// when you drop into this column, we normalize to one canonical status:
|
|
// NEW should usually be system-created; for manual moves, REVIEWING is safer.
|
|
canonicalStatus: "REVIEWING" as const,
|
|
},
|
|
inProgress: {
|
|
title: "In Progress",
|
|
statuses: ["INPROGRESS"] as const,
|
|
canonicalStatus: "INPROGRESS" as const,
|
|
},
|
|
completed: {
|
|
title: "Completed",
|
|
statuses: ["COMPLETED"] as const,
|
|
canonicalStatus: "COMPLETED" as const,
|
|
},
|
|
} as const;
|
|
|
|
const INTAKE_STATUSES = new Set<CommissionStatus>(BOARD_COLUMNS.intake.statuses);
|
|
const IN_PROGRESS_STATUSES = new Set<CommissionStatus>(BOARD_COLUMNS.inProgress.statuses);
|
|
const COMPLETED_STATUSES = new Set<CommissionStatus>(BOARD_COLUMNS.completed.statuses);
|
|
|
|
export type BoardColumnId = keyof typeof BOARD_COLUMNS;
|
|
|
|
export function columnIdForStatus(status: string): BoardColumnId | null {
|
|
if (!isCommissionStatus(status)) return null;
|
|
if (INTAKE_STATUSES.has(status)) return "intake";
|
|
if (IN_PROGRESS_STATUSES.has(status)) return "inProgress";
|
|
if (COMPLETED_STATUSES.has(status)) return "completed";
|
|
return null;
|
|
}
|
|
|
|
export function canonicalStatusForColumn(col: BoardColumnId): CommissionStatus {
|
|
return BOARD_COLUMNS[col].canonicalStatus;
|
|
}
|