UNPKG

@mcmhomes/panorama-viewer

Version:
112 lines (104 loc) 3.98 kB
import {contains, each, findIndex, INT_LAX, IS_ARRAY, IS_OBJECT, ISSET, mapToArray} from './PanoramaUtils.jsx'; export const getSelectedVariationIndexesBySku = (variationGroups, skus) => { const selectedVariationIndexes = mapToArray(variationGroups, () => 0); if(IS_ARRAY(skus)) { each(skus, (sku, groupIndex) => { let skuFound = false; each(variationGroups, (group, groupIndex) => { let variationIndex = findIndex(group?.variations, variation => (variation?.sku === sku)); if(ISSET(variationIndex)) { selectedVariationIndexes[groupIndex] = variationIndex; skuFound = true; } }); if(!skuFound) { console.warn('[PanoramaViewer] SKU not found:', sku); } }); } else if(IS_OBJECT(skus)) { each(skus, (sku, groupId) => { const groupIndex = findIndex(variationGroups, variationGroup => (variationGroup?.groupId === groupId)); if(groupIndex !== null) { const group = variationGroups[groupIndex]; const variationIndex = findIndex(group?.variations, variation => (variation?.sku === sku)); if(ISSET(variationIndex)) { selectedVariationIndexes[groupIndex] = variationIndex; } else { console.warn('[PanoramaViewer] SKU not found in group:', sku, group); } } else { console.warn('[PanoramaViewer] SKU Group ID not found:', groupId); } }); } else if(ISSET(skus)) { console.warn('[PanoramaViewer] Invalid SKUs:', skus); } return selectedVariationIndexes; }; export const getTexturePathsToRender = (variationGroups, selectedVariationIndexes, locationVariationGroups, styleIndex, locationIndex, homeUrl) => { let result = []; let variationIndexesForLocation = []; let locationVariationIndexIndexed = {}; let locationVariationGroupsIndexed = {}; /** add full render **/ each(variationGroups, (group, groupIndex) => { const locationVariationIndex = findIndex(locationVariationGroups, locationVariationGroup => (locationVariationGroup?.groupId === group?.groupId)); const locationVariationGroup = (locationVariationIndex === null) ? null : locationVariationGroups?.[locationVariationIndex]; locationVariationIndexIndexed[group?.groupId] = locationVariationIndex; locationVariationGroupsIndexed[group?.groupId] = locationVariationGroup; if(locationVariationGroup && !locationVariationGroup?.layer) { variationIndexesForLocation.push(INT_LAX(selectedVariationIndexes[groupIndex])); } else { variationIndexesForLocation.push(0); } }); result.push({styleIndex, locationIndex, layerRenderOrder:0, basePath:homeUrl + 'img_' + styleIndex + '_' + locationIndex + ((variationIndexesForLocation.length <= 0) ? '' : '_' + variationIndexesForLocation.join('_'))}); /** add layers **/ each(variationGroups, (layerGroup, layerGroupIndex) => { const locationVariationGroup = locationVariationGroupsIndexed[layerGroup?.groupId]; if(!locationVariationGroup || !locationVariationGroup?.layer) { return; } const locationVariationIndex = locationVariationIndexIndexed[layerGroup?.groupId]; variationIndexesForLocation = []; each(variationGroups, (group, groupIndex) => { if((layerGroup?.groupId === group?.groupId) || contains(locationVariationGroup?.layerDependencyGroupIds, group?.groupId)) { variationIndexesForLocation.push(INT_LAX(selectedVariationIndexes[groupIndex])); } else { variationIndexesForLocation.push(0); } }); const colorPath = 'img_' + styleIndex + '_' + locationIndex + '_' + layerGroupIndex + 'c' + ((variationIndexesForLocation.length <= 0) ? '' : '_' + variationIndexesForLocation.join('_')); const maskPath = 'img_' + styleIndex + '_' + locationIndex + '_' + layerGroupIndex + 'm' + ((variationIndexesForLocation.length <= 0) ? '' : '_' + variationIndexesForLocation.join('_')); result.push({styleIndex, locationIndex, layerRenderOrder:(locationVariationIndex + 1), basePath:homeUrl + colorPath, maskBasePath:homeUrl + maskPath}); }); return result; };