@vtex/vtexis-compatibility-layer
Version:
Compatibility layer between intelligent search and VTEX
61 lines (60 loc) • 2.76 kB
JavaScript
;
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;