Files
xboct-flow/src/model/taskStatus.ts
T

74 lines
1.6 KiB
TypeScript

export const TaskStatus = {
BACKLOG: "backlog",
OPEN: "open",
IN_PROGRESS: "in-progress",
DONE: "done",
CANCELLED: "cancelled",
UNKNOWN: "unknown",
} as const;
export type TaskStatus = (typeof TaskStatus)[keyof typeof TaskStatus];
export type TaskStatusMeta = {
label: string;
/** Hide column by default in kanban (toggle can show later). */
defaultHidden: boolean;
/** Codicon id for tree; adapters wrap in ThemeIcon. */
icon: string;
/**
* Fallback value assigned when the parsed status is invalid/missing.
* Excluded from editing choices; hidden in tree when empty.
*/
fallback?: boolean;
};
/** Explicit display / column order (not Object.values). */
export const TASK_STATUS_ORDER: TaskStatus[] = [
TaskStatus.BACKLOG,
TaskStatus.OPEN,
TaskStatus.IN_PROGRESS,
TaskStatus.DONE,
TaskStatus.CANCELLED,
TaskStatus.UNKNOWN,
];
export const TASK_STATUS_META: Record<TaskStatus, TaskStatusMeta> = {
[TaskStatus.BACKLOG]: {
label: "Backlog",
defaultHidden: true,
icon: "inbox",
},
[TaskStatus.OPEN]: {
label: "Open",
defaultHidden: false,
icon: "circle-outline",
},
[TaskStatus.IN_PROGRESS]: {
label: "In Progress",
defaultHidden: false,
icon: "sync",
},
[TaskStatus.DONE]: {
label: "Done",
defaultHidden: false,
icon: "check",
},
[TaskStatus.CANCELLED]: {
label: "Cancelled",
defaultHidden: true,
icon: "close",
},
[TaskStatus.UNKNOWN]: {
label: "Unknown",
defaultHidden: true,
icon: "question",
fallback: true,
},
};
export function isTaskStatus(value: unknown): value is TaskStatus {
return (
typeof value === "string" && (TASK_STATUS_ORDER as string[]).includes(value)
);
}