context.dispatch('stock/list', { skus: confChildSkus }, {root: true}).then((task) => { if (task && task.resultCode === 200) { const diffLog = [] _filterChildrenByStockitem(context, union(task.result, stockItems), product, diffLog) console.debug('Filtered configurable_children with the network call', diffLog) resolve() } else { console.error('Cannot sync the availability of the product options. Please update the vue-storefront-api or switch on the Internet :)') } }).catch(err => {
setStyles: function(hovered, reset) { if (reset) { // reset all layers d3_selectAll('.viewfield-group') .classed('highlighted', false) .classed('hovered', false) .classed('selected', false); d3_selectAll('.sequence') .classed('highlighted', false) .classed('selected', false); } var hoveredImageKey = hovered && hovered.key; var hoveredSequenceKey = this.getSequenceKeyForImage(hovered); var hoveredLineString = hoveredSequenceKey && _mlyCache.sequences.lineString[hoveredSequenceKey]; var hoveredImageKeys = (hoveredLineString && hoveredLineString.properties.coordinateProperties.image_keys) || []; var viewer = d3_select('#photoviewer'); var selected = viewer.empty() ? undefined : viewer.datum(); var selectedImageKey = selected && selected.key; var selectedSequenceKey = this.getSequenceKeyForImage(selected); var selectedLineString = selectedSequenceKey && _mlyCache.sequences.lineString[selectedSequenceKey]; var selectedImageKeys = (selectedLineString && selectedLineString.properties.coordinateProperties.image_keys) || []; // highlight sibling viewfields on either the selected or the hovered sequences var highlightedImageKeys = _union(hoveredImageKeys, selectedImageKeys); d3_selectAll('.layer-mapillary-images .viewfield-group') .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; }) .classed('hovered', function(d) { return d.key === hoveredImageKey; }) .classed('selected', function(d) { return d.key === selectedImageKey; }); d3_selectAll('.layer-mapillary-images .sequence') .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; }) .classed('selected', function(d) { return d.properties.key === selectedSequenceKey; }); // update viewfields if needed d3_selectAll('.viewfield-group .viewfield') .attr('d', viewfieldPath); function viewfieldPath() { var d = this.parentNode.__data__; if (d.pano && d.key !== selectedImageKey) { return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0'; } else { return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z'; } } return this; },
function sameVersions(local, remote) { if (local.version !== remote.version) return false; if (local.type === 'way') { var children = _union(local.nodes, remote.nodes); for (var i = 0; i < children.length; i++) { var a = localGraph.hasEntity(children[i]); var b = remoteGraph.hasEntity(children[i]); if (a && b && a.version !== b.version) return false; } } return true; }
var coords = _reduce(features, function(coords, feature) { var c = feature.geometry.coordinates; /* eslint-disable no-fallthrough */ switch (feature.geometry.type) { case 'Point': c = [c]; case 'MultiPoint': case 'LineString': break; case 'MultiPolygon': c = _flatten(c); case 'Polygon': case 'MultiLineString': c = _flatten(c); break; } /* eslint-enable no-fallthrough */ return _union(coords, c); }, []);
setStyles: function(hovered, reset) { if (reset) { // reset all layers d3_selectAll('.viewfield-group') .classed('highlighted', false) .classed('hovered', false) .classed('selected', false); d3_selectAll('.sequence') .classed('highlighted', false) .classed('selected', false); } var hoveredImageKey = hovered && hovered.key; var hoveredSequenceKey = this.getSequenceKeyForImage(hovered); var hoveredSequence = hoveredSequenceKey && _oscCache.sequences[hoveredSequenceKey]; var hoveredImageKeys = (hoveredSequence && hoveredSequence.images.map(function (d) { return d.key; })) || []; var viewer = d3_select('#photoviewer'); var selected = viewer.empty() ? undefined : viewer.datum(); var selectedImageKey = selected && selected.key; var selectedSequenceKey = this.getSequenceKeyForImage(selected); var selectedSequence = selectedSequenceKey && _oscCache.sequences[selectedSequenceKey]; var selectedImageKeys = (selectedSequence && selectedSequence.images.map(function (d) { return d.key; })) || []; // highlight sibling viewfields on either the selected or the hovered sequences var highlightedImageKeys = _union(hoveredImageKeys, selectedImageKeys); d3_selectAll('.layer-openstreetcam-images .viewfield-group') .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; }) .classed('hovered', function(d) { return d.key === hoveredImageKey; }) .classed('selected', function(d) { return d.key === selectedImageKey; }); d3_selectAll('.layer-openstreetcam-images .sequence') .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; }) .classed('selected', function(d) { return d.properties.key === selectedSequenceKey; }); return this; },
connections = _reduce(childNodes, function(result, e) { return resolver.isShared(e) ? _union(result, resolver.parentWays(e)) : result; }, connections);
return new Promise((resolve, reject) => { if (config.products.alwaysSyncPlatformPricesOver) { if (config.products.clearPricesBeforePlatformSync) { for (let product of products) { // clear out the prices as we need to sync them with Magento product.priceInclTax = null product.originalPriceInclTax = null product.specialPriceInclTax = null product.special_price = null product.price = null product.originalPrice = null product.priceTax = null product.specialPriceTax = null product.originalPriceTax = null if (product.configurable_children) { for (let sc of product.configurable_children) { sc.priceInclTax = null sc.originalPriceInclTax = null sc.specialPriceInclTax = null sc.special_price = null sc.price = null sc.originalPrice = null sc.priceTax = null sc.specialPriceTax = null sc.originalPriceTax = null } } } } let skus = products.map((p) => { return p.sku }) if (products.length === 1) { // single product - download child data const childSkus = flattenDeep(products.map((p) => { return (p.configurable_children) ? p.configurable_children.map((cc) => { return cc.sku }) : null })) skus = union(skus, childSkus) } console.log('Starting platform prices sync for', skus) // TODO: add option for syncro and non syncro return rootStore.dispatch('product/syncPlatformPricesOver', { skus: skus }, { root: true }).then((syncResult) => { if (syncResult) { syncResult = syncResult.items for (let product of products) { const backProduct = syncResult.find((itm) => { return itm.id === product.id }) if (backProduct) { product.price_is_current = true // in case we're syncing up the prices we should mark if we do have current or not product.price_refreshed_at = new Date() product = syncProductPrice(product, backProduct) if (product.configurable_children) { for (let configurableChild of product.configurable_children) { const backProductChild = syncResult.find((itm) => { return itm.id === configurableChild.id }) if (backProductChild) { configurableChild = syncProductPrice(configurableChild, backProductChild) } } } // TODO: shall we update local storage here for the main product? } } } resolve(products) }) if (!config.products.waitForPlatformSync && !global.$VS.isSSR) { console.log('Returning products, the prices yet to come from backend!') for (let product of products) { product.price_is_current = false // in case we're syncing up the prices we should mark if we do have current or not product.price_refreshed_at = null } resolve(products) } } else { resolve(products) } })