UNPKG

kitchen-simulator

Version:

It is a kitchen simulator (self-contained micro-frontend).

187 lines (179 loc) 8.31 kB
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; import _typeof from "@babel/runtime/helpers/esm/typeof"; import { toPlainObject } from "../../utils/helper"; import { INSTALLATION_SUFFIX_TYPE, INSTALLATION_TYPE_NAME, INSTALLATION_TYPE_SKU_SUFFIX, TOE_KICK_MOLDING } from "../../constants"; export var searchForSkuValue = function searchForSkuValue(catalog, selectedLayer, elementType) { return new Promise(function (resolve) { if (elementType) { Object.values(catalog.elements).forEach(function (value) { if (value.obj && value.obj.skuArray) { if (value.obj.skuArray.find(function (skItem) { return skItem.sku === elementType; })) { saveDeepSearchType(elementType, value.name); resolve({ isAvailable: true, rootType: value.name }); } } }); } else { selectedLayer.items.valueSeq().forEach(function (item) { Object.values(catalog.elements).forEach(function (value) { if (value.obj && value.obj.skuArray) { if (value.obj.skuArray.find(function (skItem) { return skItem.sku === item.type; })) { resolve({ isAvailable: true, rootType: value.name }); } } }); }); } resolve({ isAvailable: false }); }); }; export var returnReplaceableDeepSearchType = function returnReplaceableDeepSearchType(type) { var DeepSearchTypes = JSON.parse(sessionStorage.getItem('deepSearchTypes')) || []; var replaceableType = DeepSearchTypes.find(function (item) { return item.type === type; }); return replaceableType && replaceableType.foundType || ''; }; export function getInstallationSuffix(type) { var _doorColor$isAssemble, _doorColor$install; var doorColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!doorColor) { console.error('getInstallationSuffix received false argument : ', doorColor); return doorColor; } doorColor = toPlainObject(doorColor); // If doorColor.isAssembled is explicitly set → trust it. // Else → fall back to checking install. var isAssembled = (_doorColor$isAssemble = doorColor.isAssembled) !== null && _doorColor$isAssemble !== void 0 ? _doorColor$isAssemble : ((_doorColor$install = doorColor.install) === null || _doorColor$install === void 0 ? void 0 : _doorColor$install.toLowerCase()) === INSTALLATION_TYPE_NAME.ASSEMBLED.toLowerCase(); if (type === INSTALLATION_SUFFIX_TYPE.SKU) { return isAssembled ? INSTALLATION_TYPE_SKU_SUFFIX.ASSEMBLED : INSTALLATION_TYPE_SKU_SUFFIX.RTA; } else { return isAssembled ? INSTALLATION_TYPE_NAME.ASSEMBLED : INSTALLATION_TYPE_NAME.RTA; } } export function isEqualInstallationType(doorColor1, doorColor2) { var _getInstallationSuffi, _getInstallationSuffi2; return ((_getInstallationSuffi = getInstallationSuffix(INSTALLATION_SUFFIX_TYPE.NAME, doorColor1)) === null || _getInstallationSuffi === void 0 ? void 0 : _getInstallationSuffi.toLowerCase()) === ((_getInstallationSuffi2 = getInstallationSuffix(INSTALLATION_SUFFIX_TYPE.NAME, doorColor2)) === null || _getInstallationSuffi2 === void 0 ? void 0 : _getInstallationSuffi2.toLowerCase()); } function buildSKU(baseSKU) { var doorColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var colorSuffix = doorColor.color_sku_alias || doorColor.sku || ''; var installationSuffix = getInstallationSuffix(INSTALLATION_SUFFIX_TYPE.SKU, doorColor); return [baseSKU, colorSuffix, installationSuffix].filter(Boolean).join('-'); } function buildToeKickSKU() { var doorColor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var catalog = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; // Base toe kick SKU (can be swapped between ['TKC', 'TK8', 'TK96']) var baseSKU = getToeKickSKU(doorColor, catalog); if (baseSKU === false) return false; return buildSKU(baseSKU, doorColor); } function buildRegularSKU(element, catalog) { var _internal_sku; var doorColor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; // Try to resolve element in catalog var _element = catalog.elements[element.type] || catalog.elements[returnReplaceableDeepSearchType(element.type)]; if (!_element) return false; // Start from default SKU var internal_sku = _element.obj.sku_number; // Override with SKU matching door color if found var tempSKU = _element.obj.skuArray.find(function (el) { return el.door_color_id === doorColor.id; }); if (tempSKU !== null && tempSKU !== void 0 && tempSKU.sku) { internal_sku = tempSKU.sku; } // Normalize left/right variants internal_sku = (_internal_sku = internal_sku) === null || _internal_sku === void 0 ? void 0 : _internal_sku.replace(/-([RL])$/, ''); // Reuse generic builder for suffixes return buildSKU(internal_sku, doorColor); } // element : cabinet // catalog : all cabinet info export function makeSKUForMagento(element, catalog, categoryData) { var _element$category; if ((_element$category = element.category) !== null && _element$category !== void 0 && _element$category.toLowerCase().includes('molding')) { element.type = element.name; } var doorColor = toPlainObject(element.doorStyle); if (!doorColor) return false; return element.name === TOE_KICK_MOLDING ? buildToeKickSKU(doorColor, catalog) : buildRegularSKU(element, catalog, doorColor); } export function isEmpty(value) { if (value === undefined || value === null || _typeof(value) === 'object' && Object.keys(value).length === 0 || typeof value === 'string' && value.trim().length === 0) return true;else return false; } var saveDeepSearchType = function saveDeepSearchType(type, foundType) { var DeepSearchTypes = JSON.parse(sessionStorage.getItem('deepSearchTypes')) || []; var isAlreadyAvailable = DeepSearchTypes.find(function (item) { return item.type === type; }); if (!isAlreadyAvailable) { DeepSearchTypes.push({ type: type, foundType: foundType }); } sessionStorage.setItem('deepSearchTypes', JSON.stringify(DeepSearchTypes)); }; /** * @param {Boolean} flag true: for thumbnail, false: default value * @returns */ export var getToeKickSKU = function getToeKickSKU() { var doorColor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var catalog = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var flag = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var catalogData = catalog.elements || []; var itemDoorColorID = (doorColor === null || doorColor === void 0 ? void 0 : doorColor.id) || []; var skuData = ''; Object.keys(catalogData).forEach(function (data) { var obj = catalogData[data].obj; if ((obj === null || obj === void 0 ? void 0 : obj.cabinet_category) === TOE_KICK_MOLDING) { var _obj$skuArray; var found = (_obj$skuArray = obj.skuArray) === null || _obj$skuArray === void 0 ? void 0 : _obj$skuArray.find(function (cData) { return cData.door_color_id === itemDoorColorID; }); if (found) { skuData = flag ? data : found === null || found === void 0 ? void 0 : found.sku; } } }); if (!skuData) return false; return skuData; }; function normalize(point) { if (Array.isArray(point)) { return { x: point[0], y: point[1] }; } return point; } export var areaPolygon = function areaPolygon(points) { var signed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (!Array.isArray(points) || points.length < 3) return 0; // normalize and ensure closed ring (without mutating input) var pts = points.map(normalize); var closed = pts.length > 0 && (pts[0].x !== pts[pts.length - 1].x || pts[0].y !== pts[pts.length - 1].y) ? [].concat(_toConsumableArray(pts), [pts[0]]) : pts; var det = 0; var l = closed.length - 1; // last index before the duplicated first point for (var i = 0; i < l; i++) { det += closed[i].x * closed[i + 1].y - closed[i].y * closed[i + 1].x; } var area = det / 2; return signed ? area : Math.abs(area); };