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) }