@eeacms/volto-arcgis-block 0.1.411 → 0.1.413

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file. Dates are d
4
4
 
5
5
  Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
6
6
 
7
+ ### [0.1.413](https://github.com/eea/volto-arcgis-block/compare/0.1.412...0.1.413) - 27 November 2025
8
+
9
+ ### [0.1.412](https://github.com/eea/volto-arcgis-block/compare/0.1.411...0.1.412) - 26 November 2025
10
+
11
+ #### :hammer_and_wrench: Others
12
+
13
+ - (task): Refactor error report widget to support multiple clicks on the map view refreshing data after each click [Unai Bolivar - [`dba002b`](https://github.com/eea/volto-arcgis-block/commit/dba002b28c1a7a31c0c4e3fa1d044a3e1919b11d)]
14
+ - (task): Improved the Error Report Widget mechanism for layer data retrieval to reflect accurate data and exclude nuts layers [Unai Bolivar - [`8100ae2`](https://github.com/eea/volto-arcgis-block/commit/8100ae2474a1c746c414ea46dc7259526ff9abc9)]
7
15
  ### [0.1.411](https://github.com/eea/volto-arcgis-block/compare/0.1.410...0.1.411) - 26 November 2025
8
16
 
9
17
  ### [0.1.410](https://github.com/eea/volto-arcgis-block/compare/0.1.409...0.1.410) - 25 November 2025
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eeacms/volto-arcgis-block",
3
- "version": "0.1.411",
3
+ "version": "0.1.413",
4
4
  "description": "volto-arcgis-block: Volto add-on",
5
5
  "main": "src/index.js",
6
6
  "author": "European Environment Agency: CodeSyntax",
@@ -85,163 +85,84 @@ class ErrorReport extends React.Component {
85
85
  } catch {}
86
86
  this.setState({
87
87
  latlong: { x: pt.latitude.toFixed(4), y: pt.longitude.toFixed(4) },
88
- selecting: false,
89
88
  datasets: ds,
90
89
  instructionsText:
91
90
  "The error report data has been added to your clipboard. Click the 'Service Desk' button and paste the clipboard content inside the Helpdesk's message box",
92
91
  });
93
- handler.remove();
94
92
  }.bind(this),
95
93
  );
96
94
  this.setState({ selecting: handler });
97
95
  }
98
96
 
97
+ getLayerTitle(layer) {
98
+ let title;
99
+ if (layer.ViewService && layer.ViewService.toLowerCase().includes('cdse')) {
100
+ title = layer.title;
101
+ } else if (layer.url.toLowerCase().includes('wmts')) {
102
+ title = layer._wmtsTitle;
103
+ } else if (layer.url.toLowerCase().toLowerCase().endsWith('mapserver')) {
104
+ title = layer.title;
105
+ } else {
106
+ if (layer.sublayers) {
107
+ title = layer.sublayers.items[0].title;
108
+ } else if (layer.activeLayer) {
109
+ title = layer.activeLayer.title;
110
+ } else {
111
+ title = layer.title;
112
+ }
113
+ }
114
+ return title;
115
+ }
116
+
117
+ getLayerName(layer) {
118
+ let title;
119
+ if (layer.sublayers) {
120
+ title = layer.sublayers.items[0].name;
121
+ } else if (layer.activeLayer) {
122
+ title = layer.activeLayer.name;
123
+ } else {
124
+ title = layer.name;
125
+ }
126
+ return title;
127
+ }
128
+
99
129
  getCheckedDatasets() {
100
- let checked = [];
130
+ let items = [];
101
131
  try {
102
- let uid = sessionStorage.getItem('mv_hydrated_for');
103
- let key = uid ? 'user_' + uid : 'user_anonymous';
104
- let raw = localStorage.getItem(key);
105
- if (raw) {
106
- let obj = JSON.parse(raw);
107
- let cl = obj && obj.checkedLayers;
108
- if (typeof cl === 'string') {
109
- try {
110
- cl = JSON.parse(cl);
111
- } catch {}
112
- }
113
- if (Array.isArray(cl)) {
114
- checked = [...new Set(cl)].filter((v) => v);
115
- }
132
+ let view = this.props.view;
133
+ let coll = view && view.map && view.map.layers;
134
+ if (coll && coll.items) {
135
+ items = coll.items;
136
+ } else if (coll && coll.toArray) {
137
+ items = coll.toArray();
116
138
  }
117
139
  } catch {}
118
- if (!checked.length) {
119
- try {
120
- let ss = sessionStorage.getItem('checkedLayers');
121
- if (ss) {
122
- let cl = ss;
123
- if (typeof ss === 'string') {
124
- try {
125
- cl = JSON.parse(ss);
126
- } catch {}
127
- }
128
- if (Array.isArray(cl)) {
129
- checked = [...new Set(cl)].filter((v) => v);
130
- }
131
- }
132
- } catch {}
133
- }
134
- if (checked.length) {
135
- let titles = [];
140
+ let layers = items.filter((a) => a && a.visible && a.title !== 'nuts');
141
+ let titles = [];
142
+ layers.forEach((layer) => {
143
+ let title;
136
144
  try {
137
- let esc = function (s) {
138
- try {
139
- return CSS && CSS.escape
140
- ? CSS.escape(s)
141
- : String(s).replace(/[^a-zA-Z0-9_-]/g, '\\$&');
142
- } catch {
143
- return String(s).replace(/[^a-zA-Z0-9_-]/g, '\\$&');
144
- }
145
- };
146
- let findTitleFor = function (val) {
147
- let v = String(val);
148
- let e = null;
149
- try {
150
- e = document.querySelector('[data-layer-id="' + esc(v) + '"]');
151
- } catch {}
152
- if (!e) {
153
- try {
154
- e = document.querySelector('[data-id="' + esc(v) + '"]');
155
- } catch {}
156
- }
157
- if (!e) {
158
- try {
159
- let sel1 = 'input[type="checkbox"][value="' + esc(v) + '"]';
160
- e = document.querySelector(sel1);
161
- } catch {}
162
- }
163
- if (!e) {
164
- try {
165
- let sel2 = 'input[type="checkbox"][id*="' + esc(v) + '"]';
166
- e = document.querySelector(sel2);
167
- } catch {}
168
- }
169
- if (e && e.tagName && e.tagName.toLowerCase() === 'input') {
170
- let id = e.id;
171
- if (id) {
172
- try {
173
- let selLab = 'label[for="' + esc(id) + '"]';
174
- let lab = document.querySelector(selLab);
175
- if (lab && lab.textContent) return lab.textContent.trim();
176
- } catch {}
177
- }
178
- try {
179
- let cont = e.closest('.toc-item,.ccl-tree__item,.layer-item');
180
- if (cont) {
181
- let selT =
182
- '.toc-item-title,.ccl-tree__label,.layer-title,.title';
183
-
184
- let lab = cont.querySelector(selT);
185
- if (lab && lab.textContent) return lab.textContent.trim();
145
+ if (this && this.props && this.props.hotspotData) {
146
+ let layerId = this.getLayerName(layer);
147
+ outerLoop: for (let key in this.props.hotspotData) {
148
+ let item = this.props.hotspotData[key];
149
+ for (let prop in item) {
150
+ if (prop === layerId) {
151
+ if (this.props.hotspotData[key][prop].Title !== undefined) {
152
+ title = this.props.hotspotData[key][prop].Title;
153
+ break outerLoop;
154
+ }
186
155
  }
187
- } catch {}
188
- }
189
- if (e) {
190
- try {
191
- let sel3 = '.toc-item-title,.ccl-tree__label,.layer-title,.title';
192
- let lab = e.querySelector(sel3);
193
- if (lab && lab.textContent) return lab.textContent.trim();
194
- } catch {}
195
- try {
196
- let t = e.getAttribute('data-title');
197
- if (t) return t;
198
- } catch {}
199
- try {
200
- if (e.textContent) return e.textContent.trim();
201
- } catch {}
156
+ }
202
157
  }
203
- return null;
204
- };
205
- checked.forEach(function (v) {
206
- let t = findTitleFor(v);
207
- if (t) titles.push(t);
208
- });
209
- } catch {}
210
- if (titles.length) return [...new Set(titles)];
211
- let all = [];
212
- try {
213
- let coll =
214
- this.props.view &&
215
- this.props.view.map &&
216
- this.props.view.map.allLayers;
217
- if (coll && coll.items) {
218
- all = coll.items;
219
- } else if (coll && coll.toArray) {
220
- all = coll.toArray();
221
158
  }
222
159
  } catch {}
223
- let byId = {};
224
- let byTitle = {};
225
- try {
226
- all.forEach(function (l) {
227
- if (l && l.id) byId[l.id] = l.title || l.id;
228
- if (l && l.title) byTitle[l.title] = l.title;
229
- });
230
- } catch {}
231
- let titles2 = [];
232
- checked.forEach(function (v) {
233
- if (byTitle[v]) titles2.push(byTitle[v]);
234
- else if (byId[v]) titles2.push(byId[v]);
235
- });
236
- if (titles2.length) return [...new Set(titles2)];
237
- }
238
- let layers = [];
239
- this.props.view.map.layers.forEach(function (l) {
240
- if (l.visible) {
241
- layers.push(l.title || l.id || 'layer');
160
+ if (!title) {
161
+ title = this.getLayerTitle(layer);
242
162
  }
163
+ if (title) titles.push(title);
243
164
  });
244
- return layers;
165
+ return [...new Set(titles)];
245
166
  }
246
167
 
247
168
  serviceDeskRedirect() {
@@ -272,7 +193,13 @@ class ErrorReport extends React.Component {
272
193
  document.body.removeChild(ta);
273
194
  }
274
195
  } catch {}
275
- window.open(this.helpdeskUrl, '_blank');
196
+ let url = this.helpdeskUrl;
197
+ try {
198
+ let u = new URL(url);
199
+ u.hash = 'error-report';
200
+ url = u.toString();
201
+ } catch {}
202
+ window.open(url, '_blank');
276
203
  }
277
204
 
278
205
  resetData() {