test commit
This commit is contained in:
@@ -8,3 +8,31 @@ export const ORDER_STATUSES = Object.freeze([
|
||||
'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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user