{"ScriptPreparationCode":"var ORDER_STATUSES = {\r\n UNKNOWN: 0,\r\n DELIVERECT_PARSED: 1,\r\n POS_RECEIVED: 2,\r\n SENT_TO_DMA: 3, // Order has been sent to the DMA\r\n BEFORE_DELIVERECT_PARSE: 4,\r\n POS_RECEIPT_NOT_FOUND_YET: 5,\r\n RECEIVED_BY_DMA: 6, // Order has been received by the DMA.\r\n PRINTED_BY_DMA: 7, // Order has been printed by the DMA.\r\n NEW: 10,\r\n ACCEPTED: 20,\r\n SCHEDULED: 25,\r\n REJECTED: 30,\r\n DENIED: 35,\r\n PRINTED: 40,\r\n PREPARING: 50,\r\n PREPARED: 60,\r\n READY_FOR_PICKUP: 70,\r\n COURIER_ARRIVED: 75,\r\n IN_DELIVERY: 80,\r\n EN_ROUTE_TO_PICKUP: 83,\r\n EN_ROUTE_TO_DROPOFF: 87,\r\n DELIVERED: 90,\r\n DELIVERECT_FINALIZED: 92,\r\n AUTO_FINALIZED: 95,\r\n CANCEL: 100,\r\n CANCELED: 110,\r\n DELIVERY_CANCELED: 112,\r\n FAILED: 120,\r\n FAILED_HANDLED: 129,\r\n POS_MOCKED: 130,\r\n DELIVERY_FAILED: 131,\r\n POS_RECEIVED_FAILED: 121,\r\n RETRIABLE_FAILED: 122,\r\n MANUAL_RETRY: 123,\r\n FAILED_CANCEL: 126\r\n};\r\n\r\nvar FAILED_STATUSES_THAT_CAN_BE_RESOLVED_INTERNALLY = [\r\n ORDER_STATUSES.FAILED,\r\n ORDER_STATUSES.RETRIABLE_FAILED,\r\n ORDER_STATUSES.FAILED_HANDLED,\r\n ORDER_STATUSES.DELIVERY_CANCELED,\r\n ORDER_STATUSES.DELIVERY_FAILED\r\n];\r\n\r\nvar IN_PROGRESS_ORDERS_STATUSES = [\r\n ORDER_STATUSES.ACCEPTED,\r\n ORDER_STATUSES.PRINTED,\r\n ORDER_STATUSES.PREPARING\r\n];\r\n\r\nvar FINISHED_ORDERS_STATUSES = [\r\n ORDER_STATUSES.PREPARED,\r\n ORDER_STATUSES.READY_FOR_PICKUP,\r\n ORDER_STATUSES.IN_DELIVERY,\r\n ORDER_STATUSES.EN_ROUTE_TO_DROPOFF,\r\n ORDER_STATUSES.EN_ROUTE_TO_PICKUP,\r\n ORDER_STATUSES.COURIER_ARRIVED,\r\n ORDER_STATUSES.DELIVERED,\r\n ORDER_STATUSES.CANCELED,\r\n ORDER_STATUSES.CANCEL,\r\n ORDER_STATUSES.POS_MOCKED,\r\n ORDER_STATUSES.AUTO_FINALIZED,\r\n ORDER_STATUSES.DELIVERECT_FINALIZED,\r\n ORDER_STATUSES.DENIED,\r\n ORDER_STATUSES.FAILED_CANCEL\r\n];\r\nvar SCHEDULED_ORDERS_STATUSES = [ORDER_STATUSES.SCHEDULED];\r\n\r\nvar NEW_ORDERS_STATUSES = [\r\n ...FAILED_STATUSES_THAT_CAN_BE_RESOLVED_INTERNALLY,\r\n ORDER_STATUSES.BEFORE_DELIVERECT_PARSE,\r\n ORDER_STATUSES.DELIVERECT_PARSED,\r\n ORDER_STATUSES.POS_RECEIVED,\r\n ORDER_STATUSES.NEW\r\n];\r\n\r\nvar ORDER_STATUS_FILTER = {\r\n REQUIRES_ATTENTION: \u0022Requires Attention\u0022,\r\n NEW: \u0022New\u0022,\r\n IN_PROGRESS: \u0022In Progress\u0022,\r\n FINISHED: \u0022Finished\u0022,\r\n SCHEDULED: \u0022Scheduled\u0022\r\n};\r\n\r\nvar DEFAULT_ORDER_STATUS_FILTER_MAP = {\r\n [ORDER_STATUS_FILTER.NEW]: NEW_ORDERS_STATUSES,\r\n [ORDER_STATUS_FILTER.REQUIRES_ATTENTION]: NEW_ORDERS_STATUSES,\r\n [ORDER_STATUS_FILTER.IN_PROGRESS]: IN_PROGRESS_ORDERS_STATUSES,\r\n [ORDER_STATUS_FILTER.FINISHED]: FINISHED_ORDERS_STATUSES,\r\n [ORDER_STATUS_FILTER.SCHEDULED]: SCHEDULED_ORDERS_STATUSES\r\n};\r\n\r\nvar orderFlowSetting = {\r\n value: [20, 40, 50, 60, 70, 80]\r\n};","TestCases":[{"Name":"Reducer","Code":"const firstFinishedStatus =\r\n orderFlowSetting.value[orderFlowSetting.value.length - 1];\r\n const [inProgress, finished] = DEFAULT_ORDER_STATUS_FILTER_MAP[\r\n ORDER_STATUS_FILTER.FINISHED\r\n ].reduce(\r\n ([inProgress, finished], status) =\u003E {\r\n if (status !== ORDER_STATUSES.DENIED \u0026\u0026 status \u003C firstFinishedStatus) {\r\n inProgress.push(status);\r\n } else {\r\n finished.push(status);\r\n }\r\n return [inProgress, finished];\r\n },\r\n [[...DEFAULT_ORDER_STATUS_FILTER_MAP[ORDER_STATUS_FILTER.IN_PROGRESS]], []]\r\n );\r\n\r\n const result = {\r\n ...DEFAULT_ORDER_STATUS_FILTER_MAP,\r\n [ORDER_STATUS_FILTER.IN_PROGRESS]: inProgress,\r\n [ORDER_STATUS_FILTER.FINISHED]: finished\r\n };\r\n\r\nconsole.log(result)","IsDeferred":false},{"Name":"Multi loop","Code":"const editedOrderStatusFilterMap = {...\r\n DEFAULT_ORDER_STATUS_FILTER_MAP,\r\n };\r\n\r\n const to_remove = [];\r\n\r\n DEFAULT_ORDER_STATUS_FILTER_MAP[ORDER_STATUS_FILTER.FINISHED].forEach(orderStatus =\u003E {\r\n if (\r\n orderStatus !== ORDER_STATUSES.DENIED \u0026\u0026\r\n orderStatus \u003C orderFlowSetting.value[orderFlowSetting.value.length - 1]\r\n ) {\r\n editedOrderStatusFilterMap[ORDER_STATUS_FILTER.IN_PROGRESS].push(\r\n orderStatus,\r\n );\r\n to_remove.push(orderStatus);\r\n }\r\n });\r\n\r\n to_remove.forEach(orderStatus =\u003E\r\n editedOrderStatusFilterMap[ORDER_STATUS_FILTER.FINISHED].splice(\r\n editedOrderStatusFilterMap[ORDER_STATUS_FILTER.FINISHED].indexOf(\r\n orderStatus,\r\n ),\r\n 1,\r\n ),\r\n );\r\n\r\n console.log(editedOrderStatusFilterMap);","IsDeferred":false}]}