Problems › JavaScript › orders
Is this status change allowed
Orders move through a fixed lifecycle, and a support tool needs to know whether a requested change is one the system permits.
- The only moves allowed are: placed to paid, placed to cancelled, paid to packed, paid to refunded, packed to shipped, shipped to delivered.
- Everything else is refused, including staying where you are.
- Unknown status names are refused.
canTransition(current: string, target: string) → bool
Where you start
function canTransition(current, target) {
}
Worked examples
| Call | Result |
|---|---|
canTransition("placed", "paid") | true |
canTransition("paid", "refunded") | true |
canTransition("shipped", "delivered") | true |
canTransition("placed", "shipped") | false |
Hint
A set of allowed pairs is easier to get right than a nest of ifs.
Reference solution in JavaScript
function canTransition(current, target) {
const allowed = ['placed>paid', 'placed>cancelled', 'paid>packed', 'paid>refunded', 'packed>shipped', 'shipped>delivered'];
return allowed.includes(current + '>' + target);
}