UNPKG

vsf-utilities

Version:

Utilities functions shared between vsf projects

83 lines 3.48 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const productChecksum_1 = __importDefault(require("./productChecksum")); const getProductOptions_1 = __importDefault(require("./getProductOptions")); // 'id' check const getServerItemId = (product) => product.server_item_id || product.item_id; const isServerIdsEquals = (product1, product2) => { const product1ItemId = getServerItemId(product1); const product2ItemId = getServerItemId(product2); const areItemIdsDefined = product1ItemId !== undefined && product2ItemId !== undefined; return areItemIdsDefined && product1ItemId === product2ItemId; }; // 'checksum' check const getChecksum = (product) => { if (product.checksum) { return product.checksum; } return productChecksum_1.default(product); }; const isChecksumEquals = (product1, product2) => getChecksum(product1) === getChecksum(product2); // 'sku' check const isSkuEqual = (product1, product2) => String(product1.sku) === String(product2.sku); /** * Returns product equality check function * @param checkName - determines what type of check we want to do */ const getCheckFn = (checkName) => { switch (checkName) { case 'id': { return isServerIdsEquals; } case 'checksum': { return isChecksumEquals; } case 'sku': { return isSkuEqual; } default: { return isSkuEqual; } } }; /** * It passes all types of checks and returns the first passed. The order of checks matters! */ const makeCheck = (product1, product2, checks) => { for (const checkName of checks) { const fn = getCheckFn(checkName); if (fn(product1, product2)) { return true; } } return false; }; const productsEquals = (product1, product2) => { if (!product1 || !product2) { return false; } const check = makeCheck.bind(null, product1, product2); if (getProductOptions_1.default(product1, 'bundle_options').length || getProductOptions_1.default(product2, 'bundle_options').length) { // bundle options skus are merged into one sku so we can't rely on 'sku' // by default we want to check server_item_id ('id'), we can also use 'checksum' return check(['id', 'checksum']); } if (getProductOptions_1.default(product1, 'custom_options').length || getProductOptions_1.default(product2, 'custom_options').length) { // in admin panel we can add different sku for specific custom option so we can't rely on 'sku' // by default we want to check server_item_id ('id'), we can also use 'checksum' return check(['id', 'checksum']); } if (getProductOptions_1.default(product1, 'configurable_item_options').length || getProductOptions_1.default(product2, 'configurable_item_options').length) { // 'sku' should be uniq for configurable products // we can't check 'id' because it is the same when user edit product in microcart, so it can give wrong result return check(['sku']); } // by default we want to check if server_item_id is equal and check sku as fallback // this is for 'simple' and 'group' products return check(['id', 'sku']); }; exports.default = productsEquals; //# sourceMappingURL=productsEquals.js.map