Setting the file. One moment. Order Reference Readiness · Wix Replatform · wix/skills · Skills Docslib/order-reference-readiness.js
lib/order-reference-readiness.js
JavaScript·30 lines·3 KB
||
[]) {
5 const byId = new Map((cells || []).map(cell => [cell.cell, cell]));
6 const baseline = byId.get(1), blockers = [];
7 if (!proven(baseline, 'shipping')) blockers.push('order-shipping-reference-unverified');
8 if (!proven(baseline, 'tax')) blockers.push('order-tax-reference-unverified');
9 if (blockers.length) return { verified: false, blockers, setupEdgeMode: 'task-complete' };
10 let carrier = true, code = true, taxGroup = true;
11 if (proven(byId.get(2), 'shipping')) carrier = code = false;
12 else if (proven(byId.get(8), 'shipping')) carrier = false;
13 else if (proven(byId.get(9), 'shipping')) code = false;
14 if (proven(byId.get(3), 'tax')) taxGroup = false;
15 if (!carrier && !code && !taxGroup && !(proven(byId.get(4), 'shipping') && proven(byId.get(4), 'tax'))) carrier = code = taxGroup = true;
16 const signatures = { 1: [true, true, true], 2: [false, false, true], 3: [true, true, false], 4: [false, false, false], 8: [false, true, true], 9: [true, false, true] };
17 let selected = [...byId.values()].find(cell => JSON.stringify(signatures[cell.cell] || cell.selectedReferences) === JSON.stringify([carrier, code, taxGroup]));
18 if (!selected || !proven(selected, 'shipping') || !proven(selected, 'tax')) return { verified: false, blockers: ['order-shipping-reference-unverified', 'order-tax-reference-unverified'], setupEdgeMode: 'task-complete', requiredCombination: [carrier, code, taxGroup] };
19 return { verified: true, carrier, code, taxGroup, selectedCell: selected.cell, blockers: [], setupEdgeMode: 'task-complete' };
20}
21function orderShippingReadiness(order, mapping = selectOrderReferenceMapping(), { logistics } = {}) {
22 const lines = order.shipping_lines || [];
23 if (!Array.isArray(lines) || lines.length > 1) return { deferred: true, reason: 'order-multiple-shipping-lines', severity: 'blocker' };
24 if (!lines.length && !(order.tax_lines || []).length) return { shippingInfo: undefined };
25 if (!mapping?.verified) return { deferred: true, reason: mapping?.blockers?.[0] || 'order-shipping-reference-unverified', severity: 'blocker' };
26 if (!lines.length) return { shippingInfo: undefined };
27 const line = lines[0];
28 return { shippingInfo: { title: line.method_title, cost: { price: { amount: String(line.total) } }, ...(logistics ? { logistics } : {}) }, requiredReferences: { carrier: mapping.carrier, code: mapping.code, taxGroup: mapping.taxGroup } };
29}
30module.exports = { selectOrderReferenceMapping, orderShippingReadiness };