diff --git a/assets/src/modules/Action.js b/assets/src/modules/Action.js index d7ad26ac26..70d24fcd01 100644 --- a/assets/src/modules/Action.js +++ b/assets/src/modules/Action.js @@ -7,6 +7,7 @@ */ import { mainLizmap } from '../modules/Globals.js'; +import SelectionTool from './SelectionTool.js'; import { Vector as VectorSource } from 'ol/source.js'; import { Vector as VectorLayer } from 'ol/layer.js'; import GeoJSON from 'ol/format/GeoJSON.js'; @@ -56,8 +57,15 @@ export default class Action { /** * Build the lizmap Action instance + * @param {Map} map - OpenLayers map + * @param {SelectionTool} selectionTool - The lizmap selection tool + * @param {object} lizmap3 - The old lizmap object */ - constructor() { + constructor(map, selectionTool, lizmap3) { + + this._map = map; + this._selectionTool = selectionTool; + this._lizmap3 = lizmap3; this.hasActions = true; if (typeof actionConfig === 'undefined') { @@ -97,8 +105,9 @@ export default class Action { }); } + const self = this; // React on the main Lizmap events - mainLizmap.lizmap3.events.on({ + this._lizmap3.events.on({ // The popup has been displayed // We need to add the buttons for the action with a 'feature' scope @@ -117,7 +126,7 @@ export default class Action { let layerId = val.replace('.' + featureId, ''); // Get layer lizmap config - let getLayerConfig = mainLizmap.lizmap3.getLayerConfigById(layerId); + let getLayerConfig = lizmap3.getLayerConfigById(layerId); if (!getLayerConfig) { return true; } @@ -128,13 +137,13 @@ export default class Action { let action = actionConfig[i]; // Only add action in Popup for the scope "feature" - if (!('scope' in action) || action['scope'] != mainLizmap.action.Scopes.Feature) { + if (!('scope' in action) || action['scope'] != self.Scopes.Feature) { continue; } // Only add action if the layer is in the list if (action['layers'].includes(layerId)) { - mainLizmap.action.addPopupActionButton(action, layerId, featureId, popupContainerId); + self.addPopupActionButton(action, layerId, featureId, popupContainerId); } } @@ -173,7 +182,7 @@ export default class Action { }); // Add the layer inside Lizmap objects - mainLizmap.map.addToolLayer(this.actionLayer); + this._map.addToolLayer(this.actionLayer); } /** @@ -275,7 +284,7 @@ export default class Action { // Only for the methods which gives a layerId in their configuration if (callback['method'] == this.CallbackMethods.Redraw || callback['method'] == this.CallbackMethods.Select) { - let getLayerConfig = mainLizmap.lizmap3.getLayerConfigById(callback['layerId']); + let getLayerConfig = this._lizmap3.getLayerConfigById(callback['layerId']); if (!getLayerConfig) { continue; } @@ -283,7 +292,7 @@ export default class Action { let layerConfig = getLayerConfig[1]; // Get the corresponding OpenLayers layer instance - const layer = lizMap.mainLizmap.map.getLayerByName(layerConfig.name); + const layer = this._map.getLayerByName(layerConfig.name); if(!layer){ continue; @@ -300,7 +309,7 @@ export default class Action { // Select features in the given layer let feat = features[0]; let f = feat.clone(); - mainLizmap.selectionTool.selectLayerFeaturesFromSelectionFeature(featureType, f); + this._selectionTool.selectLayerFeaturesFromSelectionFeature(featureType, f); } } } @@ -393,7 +402,7 @@ export default class Action { // as WKT geometries const WKTformat = new WKT(); const projOptions = { - featureProjection: mainLizmap.projection, + featureProjection: this._lizmap3.map.getProjection(), dataProjection: 'EPSG:4326' }; options['mapExtent'] = WKTformat.writeGeometry(fromExtent(mainLizmap.extent), projOptions); @@ -419,7 +428,7 @@ export default class Action { this.resetLizmapAction(true, true, true, true); // Display the errors - mainLizmap.lizmap3.addMessage(data.errors.title + '\n' + data.errors.detail, 'danger', true).attr('id', 'lizmap-action-message'); + this._lizmap3.addMessage(data.errors.title + '\n' + data.errors.detail, 'danger', true).attr('id', 'lizmap-action-message'); console.warn(data.errors); return false; @@ -442,7 +451,7 @@ export default class Action { // Display the message if given const message = featureProperties[message_field].trim(); if (message) { - mainLizmap.lizmap3.addMessage(message, 'info', true).attr('id', 'lizmap-action-message'); + this._lizmap3.addMessage(message, 'info', true).attr('id', 'lizmap-action-message'); } } } @@ -536,7 +545,7 @@ export default class Action { // Convert the action GeoJSON data into OpenLayers features const features = (new GeoJSON()).readFeatures(data, { - featureProjection: mainLizmap.projection + featureProjection: this._lizmap3.map.getProjection() }); // Add them to the action layer @@ -562,10 +571,10 @@ export default class Action { // Get the layerId, featureId and action for this button let val = button.value; - let [actionName, layerId, featureId] = mainLizmap.action.explodeActionInstanceUniqueId(val); + let [actionName, layerId, featureId] = this.explodeActionInstanceUniqueId(val); // Get the action item data - let popupAction = mainLizmap.action.getActionItemByName(actionName, mainLizmap.action.Scopes.Feature, layerId); + let popupAction = this.getActionItemByName(actionName, this.Scopes.Feature, layerId); if (!popupAction) { console.warn('No corresponding action found in the configuration !'); @@ -575,11 +584,11 @@ export default class Action { // We allow only one active action at a time. // If the action is already active for the clicked button // we need to deactivate it completely - if (mainLizmap.action.ACTIVE_LIZMAP_ACTION) { - let actionUniqueId = mainLizmap.action.buildActionInstanceUniqueId(actionName, mainLizmap.action.Scopes.Feature, layerId, featureId); - if (mainLizmap.action.ACTIVE_LIZMAP_ACTION == actionUniqueId) { + if (this.ACTIVE_LIZMAP_ACTION) { + let actionUniqueId = this.buildActionInstanceUniqueId(actionName, this.Scopes.Feature, layerId, featureId); + if (this.ACTIVE_LIZMAP_ACTION == actionUniqueId) { // Reset the action - mainLizmap.action.resetLizmapAction(true, true, true, true); + this.resetLizmapAction(true, true, true, true); // Return return true; @@ -589,7 +598,7 @@ export default class Action { // The action was not active, we can run it // This will override the previous actions and replace them // with this one - mainLizmap.action.ACTIVE_LIZMAP_ACTION = null; + this.ACTIVE_LIZMAP_ACTION = null; // Display a confirm question if needed if ('confirm' in popupAction && popupAction.confirm.trim() != '') { @@ -601,14 +610,14 @@ export default class Action { } // Reset - mainLizmap.action.resetLizmapAction(true, true, true, true); + this.resetLizmapAction(true, true, true, true); // Add the button btn-primary class button.classList.add('btn-primary'); // Run the Lizmap action for this feature // It will set the global variable ACTIVE_LIZMAP_ACTION - mainLizmap.action.runLizmapAction(actionName, mainLizmap.action.Scopes.Feature, layerId, featureId); + this.runLizmapAction(actionName, this.Scopes.Feature, layerId, featureId); return false; } @@ -670,7 +679,7 @@ export default class Action { } // Trigger the action when clicking on button - actionButton.addEventListener('click', mainLizmap.action.popupActionButtonClickHandler); + actionButton.addEventListener('click', this.popupActionButtonClickHandler.bind(this)); } }; diff --git a/assets/src/modules/Lizmap.js b/assets/src/modules/Lizmap.js index c366e1077c..48f717b7e6 100644 --- a/assets/src/modules/Lizmap.js +++ b/assets/src/modules/Lizmap.js @@ -161,7 +161,7 @@ export default class Lizmap { this.proxyEvents = new ProxyEvents(); this.wfs = new WFS(); this.wms = new WMS(); - this.action = new Action(); + this.action = new Action(this.map, this.selectionTool, this.lizmap3); this.featureStorage = new FeatureStorage(); this.popup = new Popup(this.initialConfig, this.state, this.map); this.legend = new Legend(this.state.layerTree);