kitchen-simulator
Version:
It is a kitchen simulator (self-contained micro-frontend).
200 lines (191 loc) • 9 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.areaPolygon = void 0;
exports.getInstallationSuffix = getInstallationSuffix;
exports.getToeKickSKU = void 0;
exports.isEmpty = isEmpty;
exports.isEqualInstallationType = isEqualInstallationType;
exports.makeSKUForMagento = makeSKUForMagento;
exports.searchForSkuValue = exports.returnReplaceableDeepSearchType = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _helper = require("../../utils/helper");
var _constants = require("../../constants");
var searchForSkuValue = exports.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
});
});
};
var returnReplaceableDeepSearchType = exports.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 || '';
};
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 = (0, _helper.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()) === _constants.INSTALLATION_TYPE_NAME.ASSEMBLED.toLowerCase();
if (type === _constants.INSTALLATION_SUFFIX_TYPE.SKU) {
return isAssembled ? _constants.INSTALLATION_TYPE_SKU_SUFFIX.ASSEMBLED : _constants.INSTALLATION_TYPE_SKU_SUFFIX.RTA;
} else {
return isAssembled ? _constants.INSTALLATION_TYPE_NAME.ASSEMBLED : _constants.INSTALLATION_TYPE_NAME.RTA;
}
}
function isEqualInstallationType(doorColor1, doorColor2) {
var _getInstallationSuffi, _getInstallationSuffi2;
return ((_getInstallationSuffi = getInstallationSuffix(_constants.INSTALLATION_SUFFIX_TYPE.NAME, doorColor1)) === null || _getInstallationSuffi === void 0 ? void 0 : _getInstallationSuffi.toLowerCase()) === ((_getInstallationSuffi2 = getInstallationSuffix(_constants.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(_constants.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
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 = (0, _helper.toPlainObject)(element.doorStyle);
if (!doorColor) return false;
return element.name === _constants.TOE_KICK_MOLDING ? buildToeKickSKU(doorColor, catalog) : buildRegularSKU(element, catalog, doorColor);
}
function isEmpty(value) {
if (value === undefined || value === null || (0, _typeof2["default"])(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
*/
var getToeKickSKU = exports.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) === _constants.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;
}
var areaPolygon = exports.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((0, _toConsumableArray2["default"])(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);
};