39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
export const ORDER_STATUSES = Object.freeze([
|
||
'DRAFT',
|
||
'PENDING_PAYMENT',
|
||
'PAID',
|
||
'IN_PROGRESS',
|
||
'SHIPPED',
|
||
'READY_FOR_PICKUP',
|
||
'DONE',
|
||
'CANCELLED',
|
||
])
|
||
|
||
/**
|
||
* Допустимые переходы статусов, доступные админу.
|
||
* Значение — массив из next-статусов.
|
||
* Для IN_PROGRESS: объект с ключами по deliveryType.
|
||
*/
|
||
export const ADMIN_ORDER_TRANSITIONS = Object.freeze({
|
||
DRAFT: ['PENDING_PAYMENT', 'CANCELLED'],
|
||
PENDING_PAYMENT: ['PAID', 'CANCELLED'],
|
||
PAID: ['IN_PROGRESS', 'CANCELLED'],
|
||
IN_PROGRESS: Object.freeze({
|
||
delivery: ['SHIPPED', 'CANCELLED'],
|
||
pickup: ['READY_FOR_PICKUP', 'CANCELLED'],
|
||
}),
|
||
})
|
||
|
||
export function getNextAdminStatuses(from, deliveryType) {
|
||
const transition = ADMIN_ORDER_TRANSITIONS[from]
|
||
if (!transition) return []
|
||
if (Array.isArray(transition)) return [...transition]
|
||
return transition[deliveryType] ? [...transition[deliveryType]] : []
|
||
}
|
||
|
||
export function canTransitionAdminOrderStatus(order, next) {
|
||
const from = order.status
|
||
if (from === next) return true
|
||
return getNextAdminStatuses(from, order.deliveryType).includes(next)
|
||
}
|