diff --git a/src/app/core/layers/layer.js b/src/app/core/layers/layer.js index ef6dc65d9..178ff0854 100644 --- a/src/app/core/layers/layer.js +++ b/src/app/core/layers/layer.js @@ -1235,12 +1235,16 @@ proto.getFeatureCount = function() { /** * @param style * - * @returns {Promise} + * @returns { Promise} * * @since 3.8.0 */ proto.getStyleFeatureCount = async function(style) { - if ("undefined" === typeof this.state.stylesfeaturecount[style]) { + // skip when layer hasn't feature count option set on QGIS project + if (undefined === this.state.stylesfeaturecount) { + return; + } + if (undefined === this.state.stylesfeaturecount[style]) { try { const { result, data } = await XHR.post({ url: `${this.config.urls.featurecount}${this.getId()}/`, diff --git a/src/components/Catalog.vue b/src/components/Catalog.vue index 3db37791c..57f71567e 100644 --- a/src/components/Catalog.vue +++ b/src/components/Catalog.vue @@ -194,27 +194,29 @@ export default { /** * Change view + * + * @fires CatalogEventBus~layer-change-style */ async changeMapTheme(map_theme) { GUI.closeContent(); - const changes = await this.$options.service.changeMapTheme(map_theme); - const changeStyleLayersId = Object.keys(changes.layers).filter(layerId => { - if (changes.layers[layerId].style) { - if (!changes.layers[layerId].visible) { - const layer = CatalogLayersStoresRegistry.getLayerById(layerId); - // clear categories - layer.clearCategories(); - layer.change(); - } - return true; + + // get all layers with styles + const changes = (await this.$options.service.changeMapTheme(map_theme)).layers; + const layers = Object.keys(changes).filter(id => changes[id].style); + const styles = (await this.project.getMapThemeFromThemeName(map_theme)).styles; + + // clear categories + layers.forEach(id => { + if (!changes[id].visible) { + const layer = CatalogLayersStoresRegistry.getLayerById(id); + layer.clearCategories(); + layer.change(); } }); - if ('tab' === this.legend.place) { - VM.$emit('layer-change-style'); - } else { - // get all layer tha changes style - changeStyleLayersId.forEach(layerId => { VM.$emit('layer-change-style', { layerId }); }); - } + + // apply styles on each layer + layers.forEach(id => VM.$emit('layer-change-style', { layerId: id, style: styles[id] })); + }, delegationClickEventTab(evt) { diff --git a/src/components/CatalogLayerLegend.vue b/src/components/CatalogLayerLegend.vue index 0c23de5de..5f30a5a1a 100644 --- a/src/components/CatalogLayerLegend.vue +++ b/src/components/CatalogLayerLegend.vue @@ -224,8 +224,8 @@ await this.setLayerCategories(false); // toggle categories. } } - } catch(err) { - console.warn('Error while changing layer style') + } catch(e) { + console.warn('Error while changing layer style', e) } this.loading = false;