@eeacms/volto-arcgis-block 0.1.371 → 0.1.373

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,16 @@ 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.373](https://github.com/eea/volto-arcgis-block/compare/0.1.372...0.1.373) - 8 July 2025
8
+
9
+ #### :hammer_and_wrench: Others
10
+
11
+ - Add Sonarqube tag using clms-frontend addons list [EEA Jenkins - [`fa8e13d`](https://github.com/eea/volto-arcgis-block/commit/fa8e13da184b9a9146cb65aca7a89c05fb0261ba)]
12
+ ### [0.1.372](https://github.com/eea/volto-arcgis-block/compare/0.1.371...0.1.372) - 26 June 2025
13
+
14
+ #### :hammer_and_wrench: Others
15
+
16
+ - (bug): Fixed crash that occurs when a search is made and the map used after it. [Unai Bolivar - [`83bc494`](https://github.com/eea/volto-arcgis-block/commit/83bc494dfa65e33cf499ca58daf0e1a22bdcdc64)]
7
17
  ### [0.1.371](https://github.com/eea/volto-arcgis-block/compare/0.1.370...0.1.371) - 25 June 2025
8
18
 
9
19
  #### :hammer_and_wrench: Others
package/Jenkinsfile CHANGED
@@ -9,7 +9,7 @@ pipeline {
9
9
  environment {
10
10
  GIT_NAME = "volto-arcgis-block"
11
11
  NAMESPACE = "@eeacms"
12
- SONARQUBE_TAGS = "volto.eea.europa.eu,clms.land.copernicus.eu,water.europa.eu-freshwater,clmsdemo.devel6cph.eea.europa.eu,land.copernicus.eu,ask.copernicus.eu"
12
+ SONARQUBE_TAGS = "volto.eea.europa.eu,water.europa.eu-freshwater,clmsdemo.devel6cph.eea.europa.eu,land.copernicus.eu,ask.copernicus.eu"
13
13
  DEPENDENCIES = ""
14
14
  BACKEND_PROFILES = "eea.kitkat:testing"
15
15
  BACKEND_ADDONS = "clms.addon,clms.types,clms.downloadtool,clms.statstool"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eeacms/volto-arcgis-block",
3
- "version": "0.1.371",
3
+ "version": "0.1.373",
4
4
  "description": "volto-arcgis-block: Volto add-on",
5
5
  "main": "src/index.js",
6
6
  "author": "European Environment Agency: CodeSyntax",
@@ -230,6 +230,11 @@ class AreaWidget extends React.Component {
230
230
  });
231
231
  this.props.uploadFileHandler(true);
232
232
  }
233
+ if (id === 'coordinates') {
234
+ document.querySelector('.coordinateWindow').style.display = 'block';
235
+ } else {
236
+ document.querySelector('.coordinateWindow').style.display = 'none';
237
+ }
233
238
  }
234
239
  nuts0handler(e) {
235
240
  this.loadNutsService(e.target.value, [0]);
@@ -986,6 +991,91 @@ class AreaWidget extends React.Component {
986
991
  });
987
992
  this.nutsRadioButton(event.target.value);
988
993
  }
994
+ addCoordinates() {
995
+ this.clearWidget();
996
+ let pointNorth = !isNaN(document.getElementById('menu-north').value)
997
+ ? Number(document.getElementById('menu-north').value)
998
+ : 0;
999
+ let pointSouth = !isNaN(document.getElementById('menu-south').value)
1000
+ ? Number(document.getElementById('menu-south').value)
1001
+ : 0;
1002
+ let pointEast = !isNaN(document.getElementById('menu-east').value)
1003
+ ? Number(document.getElementById('menu-east').value)
1004
+ : 0;
1005
+ let pointWest = !isNaN(document.getElementById('menu-west').value)
1006
+ ? Number(document.getElementById('menu-west').value)
1007
+ : 0;
1008
+ let pointNE = [pointNorth, pointEast];
1009
+ let pointSW = [pointSouth, pointWest];
1010
+ var fillSymbol = {
1011
+ type: 'simple-fill',
1012
+ color: [255, 255, 255, 0.5],
1013
+ outline: {
1014
+ color: [0, 0, 0],
1015
+ width: 1,
1016
+ },
1017
+ };
1018
+ let extentGraphic = new Graphic({
1019
+ geometry: new Extent({
1020
+ xmin: Math.min(pointNE[1], pointSW[1]),
1021
+ xmax: Math.max(pointNE[1], pointSW[1]),
1022
+ ymin: Math.min(pointNE[0], pointSW[0]),
1023
+ ymax: Math.max(pointNE[0], pointSW[0]),
1024
+ spatialReference: { wkid: 4326 },
1025
+ }),
1026
+ symbol: fillSymbol,
1027
+ });
1028
+ let outSpatialReference = new SpatialReference({
1029
+ wkid: 102100,
1030
+ });
1031
+ let graphicProjection = projection.project(
1032
+ extentGraphic.geometry,
1033
+ outSpatialReference,
1034
+ );
1035
+
1036
+ if (extentGraphic && this.checkExtent(graphicProjection)) {
1037
+ this.setState({
1038
+ showInfoPopup: true,
1039
+ infoPopupType: 'fullDataset',
1040
+ });
1041
+ this.props.uploadFileHandler(true);
1042
+ } else {
1043
+ this.setState({
1044
+ showInfoPopup: true,
1045
+ infoPopupType: 'download',
1046
+ });
1047
+ this.props.uploadFileHandler(true);
1048
+ }
1049
+ this.props.updateArea({
1050
+ origin: {
1051
+ x: extentGraphic.geometry.xmin,
1052
+ y: extentGraphic.geometry.ymin,
1053
+ },
1054
+ end: { x: extentGraphic.geometry.xmax, y: extentGraphic.geometry.ymax },
1055
+ });
1056
+ this.props.view.graphics.add(extentGraphic);
1057
+ }
1058
+ openCoordinates(event) {
1059
+ this.clearWidget();
1060
+ this.nutsRadioButton(event.target.value);
1061
+ }
1062
+ closeCoordinates() {
1063
+ if (
1064
+ document.querySelector('.coordinateContainer').style.display === 'none'
1065
+ ) {
1066
+ document.querySelector('.coordinateContainer').style.display = 'block';
1067
+ document.querySelector('.coordinateWindow').style.height = '13rem';
1068
+ document
1069
+ .querySelector('.closeCoordinates')
1070
+ .classList.replace('esri-icon-up-arrow', 'esri-icon-close');
1071
+ } else {
1072
+ document.querySelector('.coordinateContainer').style.display = 'none';
1073
+ document.querySelector('.coordinateWindow').style.height = '2rem';
1074
+ document
1075
+ .querySelector('.closeCoordinates')
1076
+ .classList.replace('esri-icon-close', 'esri-icon-up-arrow');
1077
+ }
1078
+ }
989
1079
  clearWidget() {
990
1080
  window.document.querySelector('.pan-container').style.display = 'none';
991
1081
  this.props.mapViewer.view.popup.close();
@@ -1272,7 +1362,7 @@ class AreaWidget extends React.Component {
1272
1362
  </fieldset>
1273
1363
  </div>
1274
1364
  <div className="area-header">
1275
- Area selection options for custom download:
1365
+ Area selection for custom download:
1276
1366
  </div>
1277
1367
  <div className="area-header2">
1278
1368
  <div className="area-dot">·</div>
@@ -1436,6 +1526,27 @@ class AreaWidget extends React.Component {
1436
1526
  </label>
1437
1527
  </div>
1438
1528
  </div>
1529
+ <div className="ccl-form-group">
1530
+ <div className="rectangle-block">
1531
+ <div className="area-dot">·</div>
1532
+ <input
1533
+ type="radio"
1534
+ id="download_area_select_coordinates"
1535
+ name="downloadAreaSelect"
1536
+ value="coordinates"
1537
+ className="ccl-radio ccl-required ccl-form-check-input area-radio"
1538
+ onClick={this.openCoordinates.bind(this)}
1539
+ ></input>
1540
+ <label
1541
+ className="ccl-form-radio-label"
1542
+ htmlFor="download_area_select_coordinates"
1543
+ >
1544
+ <span className="coordinates-header">
1545
+ Add coordinates
1546
+ </span>
1547
+ </label>
1548
+ </div>
1549
+ </div>
1439
1550
  </fieldset>
1440
1551
  </div>
1441
1552
  <div className="area-header2">
@@ -1461,9 +1572,7 @@ class AreaWidget extends React.Component {
1461
1572
  >
1462
1573
  <div className="field">
1463
1574
  <label className="file-upload">
1464
- <span>
1465
- File formats supported: shp(zip), geojson, CSV
1466
- </span>
1575
+ <span>Valid formats: shp, geojson, CSV</span>
1467
1576
  <input
1468
1577
  type="file"
1469
1578
  name="file"
@@ -1629,6 +1738,85 @@ class AreaWidget extends React.Component {
1629
1738
  </div>
1630
1739
  )}
1631
1740
  </div>
1741
+ <div className="coordinateWindow">
1742
+ <div className="coordinateHeader">
1743
+ Add new coordinates
1744
+ <div
1745
+ className="esri-icon-close esri-interactive closeCoordinates"
1746
+ onClick={this.closeCoordinates.bind(this)}
1747
+ onKeyDown={this.closeCoordinates.bind(this)}
1748
+ tabIndex="0"
1749
+ role="button"
1750
+ ></div>
1751
+ </div>
1752
+ <div className="coordinateContainer">
1753
+ <div className="coordinateSubContainer">
1754
+ <div className="coordinateSubContainerTitle">NE</div>
1755
+ <div>
1756
+ Lat:
1757
+ <input
1758
+ type="text"
1759
+ id="menu-north"
1760
+ maxLength="9"
1761
+ placeholder="00.000000"
1762
+ className="coordinateInput"
1763
+ />
1764
+ </div>
1765
+ <div>
1766
+ Lon:
1767
+ <input
1768
+ type="text"
1769
+ id="menu-east"
1770
+ maxLength="9"
1771
+ placeholder="00.000000"
1772
+ className="coordinateInput"
1773
+ />
1774
+ </div>
1775
+ </div>
1776
+ <div className="coordinateSubContainer">
1777
+ <div className="coordinateSubContainerTitle">SW</div>
1778
+ <div>
1779
+ Lat:
1780
+ <input
1781
+ type="text"
1782
+ id="menu-south"
1783
+ maxLength="9"
1784
+ placeholder="00.000000"
1785
+ className="coordinateInput"
1786
+ />
1787
+ </div>
1788
+ <div>
1789
+ Lon:
1790
+ <input
1791
+ type="text"
1792
+ id="menu-west"
1793
+ maxLength="9"
1794
+ placeholder="00.000000"
1795
+ className="coordinateInput"
1796
+ />
1797
+ </div>
1798
+ </div>
1799
+ <button
1800
+ aria-label="Search"
1801
+ className="button menu-search-button-coordinatess"
1802
+ onClick={() => this.addCoordinates()}
1803
+ onKeyDown={(e) => {
1804
+ if (
1805
+ !e.altKey &&
1806
+ e.code !== 'Tab' &&
1807
+ !e.ctrlKey &&
1808
+ e.code !== 'Delete' &&
1809
+ !e.shiftKey &&
1810
+ !e.code.startsWith('F')
1811
+ ) {
1812
+ this.addCoordinates();
1813
+ }
1814
+ }}
1815
+ >
1816
+ Add this area to the map
1817
+ </button>
1818
+ </div>
1819
+ </div>
1632
1820
  </>
1633
1821
  );
1634
1822
  }
@@ -49,7 +49,7 @@ export const AddCartItem = ({
49
49
  let check = document.querySelector('.area-panel input:checked')?.value;
50
50
  let fileUpload = sessionStorage.getItem('fileUploadLayer') ? true : false;
51
51
  let area = {};
52
- if (check === 'area' || fileUpload) {
52
+ if (check === 'area' || fileUpload || check === 'coordinates') {
53
53
  let graphics = mapViewer.view.graphics;
54
54
  if (graphics.length === 0) {
55
55
  area = '';
@@ -100,7 +100,7 @@ export const AddCartItem = ({
100
100
  let isMapServer = dataset?.ViewService?.toLowerCase().endsWith('/mapserver')
101
101
  ? true
102
102
  : false;
103
- if (check === 'area' || fileUpload) {
103
+ if (check === 'area' || fileUpload || check === 'coordinates') {
104
104
  areaExtent = new Extent({
105
105
  xmin: Math.min(areaData?.end?.x, areaData?.origin?.x),
106
106
  xmax: Math.max(areaData?.end?.x, areaData?.origin?.x),
@@ -1290,9 +1290,14 @@ class MenuWidget extends React.Component {
1290
1290
  this.DatasetFamilies[dataset.FamilyTitle].push(dataset);
1291
1291
  } else {
1292
1292
  if (this.filtersApplied) {
1293
- dataset_def = document
1293
+ const defcheckValue = document
1294
1294
  .querySelector('#' + checkProduct)
1295
1295
  ?.getAttribute('defcheck');
1296
+ if (defcheckValue) {
1297
+ dataset_def = defcheckValue
1298
+ .split(',')
1299
+ .filter((id) => id.trim() !== '');
1300
+ }
1296
1301
  } else if (
1297
1302
  dataset &&
1298
1303
  dataset.Default_active === true &&
@@ -468,6 +468,75 @@ label.ccl-form-radio-label span.nuts-menu-icon {
468
468
  color: red;
469
469
  font-size: 15px;
470
470
  }
471
+
472
+ .coordinateWindow {
473
+ position: absolute;
474
+ right: 23rem;
475
+ bottom: 2rem;
476
+ display: none;
477
+ width: 23rem;
478
+ height: 13rem;
479
+ background-color: white;
480
+ }
481
+
482
+ .coordinateHeader {
483
+ display: flex;
484
+ justify-content: space-between;
485
+ padding: 0.5rem;
486
+ background-color: #a0b128;
487
+ color: white;
488
+ }
489
+
490
+ .closeCoordinates {
491
+ width: 1.4rem;
492
+ height: 1.4rem;
493
+ padding: 0.2rem;
494
+ margin-right: 0.2rem;
495
+ }
496
+
497
+ .closeCoordinates:hover {
498
+ background-color: #7c8921;
499
+ }
500
+
501
+ .coordinateContainer {
502
+ display: block;
503
+ padding-right: 1rem;
504
+ padding-left: 1rem;
505
+ margin-top: 1rem;
506
+ }
507
+
508
+ .coordinateSubContainer {
509
+ display: flex;
510
+ flex-direction: row;
511
+ justify-content: space-between;
512
+ margin-top: 2rem;
513
+ margin-right: 0.5rem;
514
+ margin-left: 0.3rem;
515
+ }
516
+
517
+ .coordinateSubContainerTitle {
518
+ width: 1rem;
519
+ }
520
+
521
+ .menu-search-button-coordinatess {
522
+ padding: 0.2rem;
523
+ padding-right: 0.7rem;
524
+ padding-left: 0.7rem;
525
+ border: none;
526
+ margin-top: 1.5rem;
527
+ margin-left: 8.5rem;
528
+ background-color: #a0b128;
529
+ color: white;
530
+ }
531
+
532
+ .coordinateInput {
533
+ width: 6rem;
534
+ border-width: 1px;
535
+ border-style: solid;
536
+ border-color: #a0b128 !important;
537
+ margin-left: 0.5rem;
538
+ }
539
+
471
540
  /* WMS Upload */
472
541
  div.upload-container.esri-component
473
542
  > div.right-panel