UNPKG

@vtex/vtexis-compatibility-layer

Version:

Compatibility layer between intelligent search and VTEX

61 lines (60 loc) 2.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mergeProductWithItems = void 0; const mergeSellers = (sellerA, sellerB, defaultSeller) => { var _a; if (sellerB.error) { return sellerA; } sellerA.commertialOffer = { ...sellerA.commertialOffer, ...sellerB.commertialOffer, // This line is important because there are old versions of the vtex.store-graphl that returns the Tax as undefined // The versions are 2.158.1-hkignore.0, 2.158.0, 2.157.1 and 2.147.5-hkignore.0 // When those versions are not receiving requests anymore, than it is safe to delete this line Tax: (_a = sellerB.commertialOffer.Tax) !== null && _a !== void 0 ? _a : sellerA.commertialOffer.Tax, }; if (!defaultSeller) { return sellerA; } return { ...sellerA, sellerDefault: sellerA.sellerId === defaultSeller, }; }; const getDefaultSeller = (sellers) => { const sellersWithStock = sellers.filter((seller) => seller.commertialOffer.AvailableQuantity !== 0); return sellersWithStock === null || sellersWithStock === void 0 ? void 0 : sellersWithStock.sort((a, b) => a.commertialOffer.spotPrice - b.commertialOffer.spotPrice).map((seller) => seller.sellerId)[0]; }; const mergeProductWithItems = (product, items, simulationBehavior) => { const mergedProduct = { ...product }; mergedProduct.items.forEach((item, itemIndex) => { const simulationItem = items[itemIndex]; if (simulationBehavior !== 'only1P') { const defaultSeller = getDefaultSeller(simulationItem.sellers); item.sellers = item.sellers.map((seller, simulationIndex) => { const sellerSimulation = simulationItem.sellers[simulationIndex]; return mergeSellers(seller, sellerSimulation, defaultSeller); }); } else { const seller1PIndex = item.sellers.findIndex((seller) => seller.sellerId === '1'); const sellers = Array.from(item.sellers); sellers[seller1PIndex] = simulationItem.sellers[0]; const sellerDefault = getDefaultSeller(sellers); item.sellers = item.sellers.map((seller) => { if (seller.sellerId !== '1') { return !sellerDefault ? seller : { ...seller, sellerDefault: seller.sellerId === sellerDefault, }; } return mergeSellers(seller, simulationItem.sellers[0], sellerDefault); }); } }); return mergedProduct; }; exports.mergeProductWithItems = mergeProductWithItems;