35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
export const ISSUE_STATUSES = [
|
|
{ name: 'Open', alias: 'OPEN', color: 'surface-light' },
|
|
{ name: 'In progress', alias: 'IN_PROGRESS', color: 'warning' },
|
|
{ name: 'Done', alias: 'DONE', color: 'success' },
|
|
{ name: 'Cancelled', alias: 'CANCELLED', color: 'primary' },
|
|
] as const;
|
|
|
|
export type IssueStatusValue = (typeof ISSUE_STATUSES)[number]['alias'];
|
|
|
|
const ISSUE_STATUS_ALIASES = ISSUE_STATUSES.map((status) => status.alias);
|
|
|
|
export class IssueStatus {
|
|
private constructor(private readonly _value: IssueStatusValue) {}
|
|
|
|
static create(value: string): IssueStatus {
|
|
if (!ISSUE_STATUS_ALIASES.includes(value as IssueStatusValue)) {
|
|
throw new Error(`Недопустимый статус задачи: "${value}". Разрешены: ${ISSUE_STATUS_ALIASES.join(', ')}`);
|
|
}
|
|
|
|
return new IssueStatus(value as IssueStatusValue);
|
|
}
|
|
|
|
static open(): IssueStatus {
|
|
return new IssueStatus('OPEN');
|
|
}
|
|
|
|
get value(): IssueStatusValue {
|
|
return this._value;
|
|
}
|
|
|
|
equals(other: IssueStatus): boolean {
|
|
return this._value === other.value;
|
|
}
|
|
}
|