_onLayerDefinitionSynced: function (m) { // Base and labels layers are synced in a separate method if (!layerTypesAndKinds.isTypeDataLayer(m.get('type'))) { return; } if (!this._diDashboardHelpers.getLayer(m.id)) { this._createLayer(m); } },
_onLayerDefinitionChanged: function (layerDefinitionModel, changedAttributes) { var attrs = layerDefinitionModel.changedAttributes(); var attrsNames = _.keys(attrs); // Base and labels layers are synced in a separate method if (!layerTypesAndKinds.isTypeDataLayer(layerDefinitionModel.get('type'))) { return; } // return if only the 'error' attribute has changed (no need to sync anything) if (attrsNames.length === 1 && attrsNames[0] === 'error') { return; } var layer = this._diDashboardHelpers.getLayer(layerDefinitionModel.id); if (!layerDefinitionModel.isNew()) { if (!layer) { this._createLayer(layerDefinitionModel); return; } if (attrs.type) { layer.remove(); this._createLayer(layerDefinitionModel); } else { if (layerDefinitionModel.get('source') && !layer.get('source')) { attrs.source = layerDefinitionModel.get('source'); } var onlySourceChanged = attrs.source && _.keys(attrs).length === 1; if (attrs.source) { // Set analysis model instead of the string ID source attrs.source = this._diDashboardHelpers.getAnalysisByNodeId(attrs.source); // Set source with setSource method layer.setSource(attrs.source, { silent: !onlySourceChanged }); // Remove source form attrs to avoid updating source delete attrs.source; } attrs = this._adaptAttrsToCDBjs(layerDefinitionModel.get('type'), attrs); layer.update(attrs, { silent: onlySourceChanged }); } // Find an animated layer if exists var animatedLayerDefinitionModel = this._layerDefinitionsCollection.find(function (model) { return model && model.styleModel && model.styleModel.get('type') === 'animation'; }); // Dependency with widgets-integration // If there is an animated layer, use that layer, else use the provided layer this.trigger('onLayerChanged', animatedLayerDefinitionModel || layerDefinitionModel); } },
_onLayerDefinitionAdded: function (m, c, opts) { // Base and labels layers are synced in a separate method if (!layerTypesAndKinds.isTypeDataLayer(m.get('type'))) { return; } // If added but not yet saved, postpone the creation until persisted (see sync listener) if (!m.isNew()) { if (!this._diDashboardHelpers.getLayer(m.id)) { this._createLayer(m); } else { // we need to sync model positions this._tryUpdateLayerPosition(m); } } },