@eeacms/volto-arcgis-block 0.1.360 → 0.1.362
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.362](https://github.com/eea/volto-arcgis-block/compare/0.1.361...0.1.362) - 21 May 2025
|
|
8
|
+
|
|
9
|
+
#### :hammer_and_wrench: Others
|
|
10
|
+
|
|
11
|
+
- CLMS-286372 (bug): Fixed syntax errors and removed old commented code in MenuWidget and Area widget upload service. [Unai Bolivar - [`bea1116`](https://github.com/eea/volto-arcgis-block/commit/bea1116c14d09dd10f6da0a34e36f6796780645f)]
|
|
12
|
+
- CLMS-286372 (bug): Fixed issues with Area widget upload service. [Unai Bolivar - [`a66e6c6`](https://github.com/eea/volto-arcgis-block/commit/a66e6c69ef4d79dc265f4a17462a8f29df7aeee1)]
|
|
13
|
+
### [0.1.361](https://github.com/eea/volto-arcgis-block/compare/0.1.360...0.1.361) - 20 May 2025
|
|
14
|
+
|
|
7
15
|
### [0.1.360](https://github.com/eea/volto-arcgis-block/compare/0.1.359...0.1.360) - 19 May 2025
|
|
8
16
|
|
|
9
17
|
#### :hammer_and_wrench: Others
|
package/package.json
CHANGED
|
@@ -248,31 +248,71 @@ class AreaWidget extends React.Component {
|
|
|
248
248
|
this.loadNutsService(e.target.value, [6, 7, 8]);
|
|
249
249
|
this.nutsRadioButton(e.target.value);
|
|
250
250
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
251
|
+
|
|
252
|
+
getNutsUrlChunks(nutsUrl) {
|
|
253
|
+
const [base, query] = nutsUrl.split('query?');
|
|
254
|
+
return {
|
|
255
|
+
baseUrl: base || '',
|
|
256
|
+
queryString: query || '',
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
getNutsParams(queryString) {
|
|
261
|
+
if (!queryString) return {};
|
|
262
|
+
return queryString.split('&').reduce((acc, pair) => {
|
|
263
|
+
const [key, value] = pair.split('=');
|
|
264
|
+
if (key && value) {
|
|
265
|
+
acc[key] = decodeURIComponent(value);
|
|
266
|
+
}
|
|
267
|
+
return acc;
|
|
268
|
+
}, {});
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
createDefinitionExpressionObject(params) {
|
|
272
|
+
if (!params || Object.keys(params).length === 0) return null;
|
|
273
|
+
return Object.entries(params)
|
|
274
|
+
.map(([k, v]) => {
|
|
275
|
+
if (typeof v === 'string' && v.includes(',')) {
|
|
276
|
+
const values = v.split(',').map((val) => `'${val.trim()}'`);
|
|
277
|
+
if (values.length > 2) {
|
|
278
|
+
return `${k} in (${values.join(', ')})`;
|
|
279
|
+
} else {
|
|
280
|
+
return values.map((val) => `${k}=${val}`).join(' OR ');
|
|
281
|
+
}
|
|
282
|
+
} else {
|
|
283
|
+
return `${k}='${v}'`;
|
|
284
|
+
}
|
|
285
|
+
})
|
|
286
|
+
.join(' AND ');
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
createFeatureLayer(id, baseUrl, level, definitionExpression) {
|
|
290
|
+
return new FeatureLayer({
|
|
291
|
+
id: id,
|
|
292
|
+
url: baseUrl,
|
|
293
|
+
layerId: level,
|
|
294
|
+
outFields: ['*'],
|
|
295
|
+
popupEnabled: false,
|
|
296
|
+
definitionExpression: definitionExpression,
|
|
297
|
+
});
|
|
298
|
+
}
|
|
254
299
|
|
|
255
300
|
loadNutsService(id, levels) {
|
|
256
301
|
this.clearWidget();
|
|
257
302
|
document.querySelector('.esri-attribution__powered-by').style.display =
|
|
258
303
|
'flex';
|
|
304
|
+
const { baseUrl, queryString } = this.getNutsUrlChunks(this.nutsUrl);
|
|
305
|
+
const params = this.getNutsParams(queryString);
|
|
306
|
+
const definitionExpression = this.createDefinitionExpressionObject(params);
|
|
259
307
|
levels.forEach((level) => {
|
|
260
|
-
|
|
261
|
-
id
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
popupEnabled: false,
|
|
267
|
-
//definitionExpression: 'LEVL_CODE=' + level,
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
//this.removeFileUploadedLayer();
|
|
271
|
-
|
|
308
|
+
const layer = this.createFeatureLayer(
|
|
309
|
+
id,
|
|
310
|
+
baseUrl,
|
|
311
|
+
level,
|
|
312
|
+
definitionExpression,
|
|
313
|
+
);
|
|
272
314
|
this.nutsGroupLayer.add(layer);
|
|
273
|
-
|
|
274
315
|
let index = this.getHighestIndex();
|
|
275
|
-
|
|
276
316
|
this.props.map.reorder(this.nutsGroupLayer, index + 1);
|
|
277
317
|
});
|
|
278
318
|
}
|
|
@@ -282,16 +322,12 @@ class AreaWidget extends React.Component {
|
|
|
282
322
|
'flex';
|
|
283
323
|
var layer = new FeatureLayer({
|
|
284
324
|
id: id,
|
|
285
|
-
|
|
286
|
-
url:
|
|
287
|
-
'https://land.discomap.eea.europa.eu/arcgis/rest/services/CLMS_Portal/World_countries_except_EU37/MapServer',
|
|
325
|
+
url: this.props.urls.outsideEu,
|
|
288
326
|
layerId: 0,
|
|
289
327
|
outFields: ['*'],
|
|
290
328
|
popupEnabled: false,
|
|
291
329
|
});
|
|
292
330
|
|
|
293
|
-
//this.removeFileUploadedLayer();
|
|
294
|
-
|
|
295
331
|
this.nutsGroupLayer.add(layer);
|
|
296
332
|
|
|
297
333
|
let index = this.getHighestIndex();
|
|
@@ -318,10 +354,6 @@ class AreaWidget extends React.Component {
|
|
|
318
354
|
|
|
319
355
|
const fileSize = e.target.files[0].size;
|
|
320
356
|
|
|
321
|
-
//Get the file from the form
|
|
322
|
-
|
|
323
|
-
const file = document.getElementById('uploadForm');
|
|
324
|
-
|
|
325
357
|
//Get the file blob
|
|
326
358
|
|
|
327
359
|
const fileBlob = e.target.files[0];
|
|
@@ -373,34 +405,26 @@ class AreaWidget extends React.Component {
|
|
|
373
405
|
return;
|
|
374
406
|
}
|
|
375
407
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
reader.readAsText(fileBlob);
|
|
390
|
-
reader.onload = () => {
|
|
391
|
-
this.handleCsv(reader.result);
|
|
392
|
-
};
|
|
393
|
-
break;
|
|
394
|
-
default:
|
|
395
|
-
break;
|
|
408
|
+
if (fileExtension === 'zip' || fileExtension === 'geojson') {
|
|
409
|
+
const formData = new FormData();
|
|
410
|
+
formData.append('file', fileBlob, fileName);
|
|
411
|
+
this.generateFeatureCollection(
|
|
412
|
+
fileName,
|
|
413
|
+
formData,
|
|
414
|
+
fileExtension === 'zip' ? 'shapefile' : 'geojson',
|
|
415
|
+
);
|
|
416
|
+
} else if (fileExtension === 'csv') {
|
|
417
|
+
reader.readAsText(fileBlob);
|
|
418
|
+
reader.onload = () => {
|
|
419
|
+
this.handleCsv(reader.result);
|
|
420
|
+
};
|
|
396
421
|
}
|
|
397
|
-
|
|
422
|
+
|
|
398
423
|
e.target.value = null;
|
|
399
|
-
// }, 2000);
|
|
400
424
|
this.props.uploadFileHandler(this.state.infoPopupType);
|
|
401
425
|
};
|
|
402
426
|
|
|
403
|
-
generateFeatureCollection(fileName,
|
|
427
|
+
generateFeatureCollection(fileName, formData, inputFormat) {
|
|
404
428
|
let name = fileName.split('.');
|
|
405
429
|
|
|
406
430
|
// Chrome adds c:\fakepath to the value - we need to remove it
|
|
@@ -414,12 +438,12 @@ class AreaWidget extends React.Component {
|
|
|
414
438
|
maxRecordCount: 1000,
|
|
415
439
|
enforceInputFileSizeLimit: true,
|
|
416
440
|
enforceOutputJsonSizeLimit: true,
|
|
441
|
+
// generalize features to 10 meters for better performance
|
|
442
|
+
generalize: true,
|
|
443
|
+
maxAllowableOffset: 10,
|
|
444
|
+
reducePrecision: true,
|
|
445
|
+
numberOfDigitsAfterDecimal: 0,
|
|
417
446
|
};
|
|
418
|
-
// generalize features to 10 meters for better performance
|
|
419
|
-
params.generalize = true;
|
|
420
|
-
params.maxAllowableOffset = 10;
|
|
421
|
-
params.reducePrecision = true;
|
|
422
|
-
params.numberOfDigitsAfterDecimal = 0;
|
|
423
447
|
|
|
424
448
|
const myContent = {
|
|
425
449
|
filetype: inputFormat,
|
|
@@ -429,7 +453,7 @@ class AreaWidget extends React.Component {
|
|
|
429
453
|
// use the REST generate operation to generate a feature collection from the zipped shapefile
|
|
430
454
|
request(this.uploadPortal + '/sharing/rest/content/features/generate', {
|
|
431
455
|
query: myContent,
|
|
432
|
-
body:
|
|
456
|
+
body: formData,
|
|
433
457
|
responseType: 'json',
|
|
434
458
|
})
|
|
435
459
|
.then((response) => {
|
|
@@ -459,8 +483,6 @@ class AreaWidget extends React.Component {
|
|
|
459
483
|
|
|
460
484
|
//Create a feature layer from the feature collection
|
|
461
485
|
this.addFeatureCollectionToMap(featureCollection);
|
|
462
|
-
} else {
|
|
463
|
-
//console.error('Unexpected response structure:', response);
|
|
464
486
|
}
|
|
465
487
|
})
|
|
466
488
|
.catch((error) => {
|
|
@@ -505,10 +527,9 @@ class AreaWidget extends React.Component {
|
|
|
505
527
|
const layers = featureCollection.layers.map((layer) => {
|
|
506
528
|
const graphics = layer.featureSet.features.map((feature) => {
|
|
507
529
|
const polygonSymbol = {
|
|
508
|
-
type: 'simple-fill',
|
|
530
|
+
type: 'simple-fill',
|
|
509
531
|
color: [234, 168, 72, 0.8],
|
|
510
532
|
outline: {
|
|
511
|
-
// autocasts as new SimpleLineSymbol()
|
|
512
533
|
color: '#000000',
|
|
513
534
|
width: 0.1,
|
|
514
535
|
},
|
|
@@ -557,9 +578,7 @@ class AreaWidget extends React.Component {
|
|
|
557
578
|
//Add uploaded layer to the map and zoom to the extent
|
|
558
579
|
|
|
559
580
|
this.props.view.graphics.addMany(sourceGraphics);
|
|
560
|
-
this.props.view.goTo(sourceGraphics).catch((error) => {
|
|
561
|
-
//console.error('From addFeatureCollectionToMap function', error);
|
|
562
|
-
});
|
|
581
|
+
this.props.view.goTo(sourceGraphics).catch((error) => {});
|
|
563
582
|
|
|
564
583
|
//Create a spatial reference object for the extent
|
|
565
584
|
|
|
@@ -633,13 +652,12 @@ class AreaWidget extends React.Component {
|
|
|
633
652
|
// Set a simple renderer on the layer
|
|
634
653
|
|
|
635
654
|
csvLayer.renderer = {
|
|
636
|
-
type: 'simple',
|
|
655
|
+
type: 'simple',
|
|
637
656
|
symbol: {
|
|
638
|
-
type: 'simple-marker',
|
|
657
|
+
type: 'simple-marker',
|
|
639
658
|
size: 6,
|
|
640
659
|
color: 'black',
|
|
641
660
|
outline: {
|
|
642
|
-
// autocasts as new SimpleLineSymbol()
|
|
643
661
|
width: 0.5,
|
|
644
662
|
color: 'white',
|
|
645
663
|
},
|
|
@@ -726,10 +744,9 @@ class AreaWidget extends React.Component {
|
|
|
726
744
|
//Draw a graphic using the polyId polygon data as the geometry
|
|
727
745
|
|
|
728
746
|
const polygonSymbol = {
|
|
729
|
-
type: 'simple-fill',
|
|
747
|
+
type: 'simple-fill',
|
|
730
748
|
color: [234, 168, 72, 0.8],
|
|
731
749
|
outline: {
|
|
732
|
-
// autocasts as new SimpleLineSymbol()
|
|
733
750
|
color: '#000000',
|
|
734
751
|
width: 0.1,
|
|
735
752
|
},
|
|
@@ -751,13 +768,10 @@ class AreaWidget extends React.Component {
|
|
|
751
768
|
//Add the polygon graphic to the map
|
|
752
769
|
|
|
753
770
|
this.props.view.graphics.add(polygonGraphic);
|
|
754
|
-
//this.props.map.add(this.fileUploadLayer);
|
|
755
771
|
|
|
756
772
|
//Refresh the map view
|
|
757
773
|
|
|
758
|
-
this.props.view.goTo(polygonGraphic).catch((error) => {
|
|
759
|
-
//console.error('From handleCsv function', error);
|
|
760
|
-
});
|
|
774
|
+
this.props.view.goTo(polygonGraphic).catch((error) => {});
|
|
761
775
|
|
|
762
776
|
//Send the area to the parent component
|
|
763
777
|
|
|
@@ -792,7 +806,6 @@ class AreaWidget extends React.Component {
|
|
|
792
806
|
infoPopupType: 'fileFormat',
|
|
793
807
|
});
|
|
794
808
|
this.props.uploadFileHandler(false);
|
|
795
|
-
//console.error('Error: ', error);
|
|
796
809
|
}
|
|
797
810
|
}
|
|
798
811
|
|
|
@@ -895,9 +908,9 @@ class AreaWidget extends React.Component {
|
|
|
895
908
|
);
|
|
896
909
|
popupToUpdate.style.display = 'block';
|
|
897
910
|
popupToUpdate.innerHTML =
|
|
898
|
-
'<div
|
|
899
|
-
'<span
|
|
900
|
-
'<div
|
|
911
|
+
'<div className="drawRectanglePopup-content">' +
|
|
912
|
+
'<span className="drawRectanglePopup-icon"><span className="esri-icon-cursor-marquee"></span></span>' +
|
|
913
|
+
'<div className="drawRectanglePopup-text">' +
|
|
901
914
|
'<a style="color: black; cursor: pointer" href="https://land.copernicus.eu/en/how-to-guides/how-to-download-spatial-data/how-to-download-m2m" target="_blank" rel="noreferrer">To download the full dataset consult the "How to download M2M" How to guide.</a>' +
|
|
902
915
|
'</div>' +
|
|
903
916
|
'</div>';
|
|
@@ -941,9 +954,9 @@ class AreaWidget extends React.Component {
|
|
|
941
954
|
);
|
|
942
955
|
popupToUpdate.style.display = 'block';
|
|
943
956
|
popupToUpdate.innerHTML =
|
|
944
|
-
'<div
|
|
945
|
-
'<span
|
|
946
|
-
'<div
|
|
957
|
+
'<div className="drawRectanglePopup-content">' +
|
|
958
|
+
'<span className="drawRectanglePopup-icon"><span className="esri-icon-cursor-marquee"></span></span>' +
|
|
959
|
+
'<div className="drawRectanglePopup-text">' +
|
|
947
960
|
'<a style="color: black; cursor: pointer" href="https://land.copernicus.eu/en/how-to-guides/how-to-download-spatial-data/how-to-download-m2m" target="_blank" rel="noreferrer">To download the full dataset consult the "How to download M2M" How to guide.</a>' +
|
|
948
961
|
'</div>' +
|
|
949
962
|
'</div>';
|
|
@@ -987,9 +1000,9 @@ class AreaWidget extends React.Component {
|
|
|
987
1000
|
if (this.props.download) {
|
|
988
1001
|
let popup = document.querySelector('.drawRectanglePopup-block');
|
|
989
1002
|
popup.innerHTML =
|
|
990
|
-
'<div
|
|
991
|
-
'<span
|
|
992
|
-
'<div
|
|
1003
|
+
'<div className="drawRectanglePopup-content">' +
|
|
1004
|
+
'<span className="drawRectanglePopup-icon"><span className="esri-icon-cursor-marquee"></span></span>' +
|
|
1005
|
+
'<div className="drawRectanglePopup-text">Select or draw an area of interest in the map to continue</div>' +
|
|
993
1006
|
'</div>';
|
|
994
1007
|
popup.style.display = 'block';
|
|
995
1008
|
}
|
|
@@ -1143,9 +1156,9 @@ class AreaWidget extends React.Component {
|
|
|
1143
1156
|
var popup = document.createElement('div');
|
|
1144
1157
|
popup.className = 'drawRectanglePopup-block';
|
|
1145
1158
|
popup.innerHTML =
|
|
1146
|
-
'<div
|
|
1147
|
-
'<span
|
|
1148
|
-
'<div
|
|
1159
|
+
'<div className="drawRectanglePopup-content">' +
|
|
1160
|
+
'<span className="drawRectanglePopup-icon"><span className="esri-icon-cursor-marquee"></span></span>' +
|
|
1161
|
+
'<div className="drawRectanglePopup-text">Select or draw an area of interest in the map to continue</div>' +
|
|
1149
1162
|
'</div>';
|
|
1150
1163
|
this.props.download && this.props.view.ui.add(popup, 'top-right');
|
|
1151
1164
|
});
|
|
@@ -1373,7 +1386,7 @@ class AreaWidget extends React.Component {
|
|
|
1373
1386
|
/>
|
|
1374
1387
|
<button
|
|
1375
1388
|
aria-label="Search"
|
|
1376
|
-
|
|
1389
|
+
className="esri-button area-searchbutton"
|
|
1377
1390
|
onClick={this.areaSearch.bind(this)}
|
|
1378
1391
|
onKeyDown={(e) => {
|
|
1379
1392
|
if (
|
|
@@ -1388,7 +1401,7 @@ class AreaWidget extends React.Component {
|
|
|
1388
1401
|
}
|
|
1389
1402
|
}}
|
|
1390
1403
|
>
|
|
1391
|
-
<span
|
|
1404
|
+
<span className="ccl-icon-zoom"></span>
|
|
1392
1405
|
</button>
|
|
1393
1406
|
<div className="no-result-message">No result found</div>
|
|
1394
1407
|
</div>
|
|
@@ -1435,7 +1448,7 @@ class AreaWidget extends React.Component {
|
|
|
1435
1448
|
</div>
|
|
1436
1449
|
<div className="ccl-form">
|
|
1437
1450
|
<form
|
|
1438
|
-
|
|
1451
|
+
encType="multipart/form-data"
|
|
1439
1452
|
method="post"
|
|
1440
1453
|
id="uploadForm"
|
|
1441
1454
|
>
|
|
@@ -336,7 +336,9 @@ class MapViewer extends React.Component {
|
|
|
336
336
|
this.location.search.includes('dataset=')))
|
|
337
337
|
) {
|
|
338
338
|
let toc_panel_scrolls = sessionStorage.getItem('toc_panel_scrolls');
|
|
339
|
-
sessionStorage.
|
|
339
|
+
if (!sessionStorage.getItem('TMSLayerObj')) {
|
|
340
|
+
sessionStorage.clear();
|
|
341
|
+
}
|
|
340
342
|
sessionStorage.setItem('toc_panel_scrolls', toc_panel_scrolls);
|
|
341
343
|
}
|
|
342
344
|
// if (
|
|
@@ -3060,15 +3060,15 @@ class MenuWidget extends React.Component {
|
|
|
3060
3060
|
|
|
3061
3061
|
// Create node
|
|
3062
3062
|
let template = `
|
|
3063
|
-
<div
|
|
3064
|
-
<div
|
|
3065
|
-
<div
|
|
3063
|
+
<div className="esri-legend__layer">
|
|
3064
|
+
<div className="esri-legend__layer-table esri-legend__layer-table--size-ramp" >
|
|
3065
|
+
<div className="esri-legend__layer-caption">
|
|
3066
3066
|
${title}
|
|
3067
3067
|
</div>
|
|
3068
|
-
<div
|
|
3069
|
-
<div
|
|
3070
|
-
<div
|
|
3071
|
-
<div
|
|
3068
|
+
<div className="esri-legend__layer-body">
|
|
3069
|
+
<div className="esri-legend__layer-row">
|
|
3070
|
+
<div className="esri-legend__layer-cell esri-legend__layer-cell--symbols" >
|
|
3071
|
+
<div className="esri-legend__symbol">
|
|
3072
3072
|
<img crossorigin="anonymous"
|
|
3073
3073
|
alt=""
|
|
3074
3074
|
src="${imageURL}"
|
|
@@ -3077,7 +3077,7 @@ class MenuWidget extends React.Component {
|
|
|
3077
3077
|
</div>
|
|
3078
3078
|
</div>
|
|
3079
3079
|
<div
|
|
3080
|
-
|
|
3080
|
+
className="esri-legend__layer-cell esri-legend__layer-cell--info"
|
|
3081
3081
|
></div>
|
|
3082
3082
|
</div>
|
|
3083
3083
|
</div>
|
|
@@ -4505,8 +4505,7 @@ class MenuWidget extends React.Component {
|
|
|
4505
4505
|
let dataset = url.searchParams.get('dataset');
|
|
4506
4506
|
if (
|
|
4507
4507
|
this.state.wmsUserServiceLayers.length > 0 &&
|
|
4508
|
-
prevState.wmsUserServiceLayers.length === 0
|
|
4509
|
-
!(product || dataset)
|
|
4508
|
+
prevState.wmsUserServiceLayers.length === 0
|
|
4510
4509
|
) {
|
|
4511
4510
|
// Close other tabs and open "My Services" tab
|
|
4512
4511
|
let dropdownsMapMenu = document.querySelectorAll('.map-menu-dropdown');
|
|
@@ -4515,13 +4514,16 @@ class MenuWidget extends React.Component {
|
|
|
4515
4514
|
let dropdownId = 'dropdown_' + i;
|
|
4516
4515
|
// let myServicesId = 'component_' + i;
|
|
4517
4516
|
// let mapMenuServiceDropdownId = 'product_' + i + '_' + j;
|
|
4518
|
-
|
|
4519
|
-
|
|
4520
|
-
dropdown
|
|
4521
|
-
|
|
4522
|
-
|
|
4523
|
-
|
|
4524
|
-
|
|
4517
|
+
if (!(product || dataset)) {
|
|
4518
|
+
dropdownsMapMenu.forEach((dropdown) => {
|
|
4519
|
+
if (dropdown.id !== dropdownId) {
|
|
4520
|
+
dropdown
|
|
4521
|
+
.querySelector('.ccl-expandable__button')
|
|
4522
|
+
.setAttribute('aria-expanded', 'false');
|
|
4523
|
+
}
|
|
4524
|
+
});
|
|
4525
|
+
}
|
|
4526
|
+
|
|
4525
4527
|
document.getElementById(dropdownId).setAttribute('aria-expanded', 'true');
|
|
4526
4528
|
}
|
|
4527
4529
|
|
|
@@ -5516,11 +5518,11 @@ class MenuWidget extends React.Component {
|
|
|
5516
5518
|
>
|
|
5517
5519
|
<div className="search-panel">
|
|
5518
5520
|
<div className="menu-searchpanel">
|
|
5519
|
-
<div
|
|
5521
|
+
<div className="search-input menu-search-input">
|
|
5520
5522
|
<input
|
|
5521
5523
|
type="text"
|
|
5522
5524
|
id="menu-searchtext"
|
|
5523
|
-
|
|
5525
|
+
maxLength="200"
|
|
5524
5526
|
placeholder="Search products and datasets"
|
|
5525
5527
|
onChange={() => this.openClearButton()}
|
|
5526
5528
|
onKeyDown={(e) => {
|
|
@@ -5529,9 +5531,9 @@ class MenuWidget extends React.Component {
|
|
|
5529
5531
|
}
|
|
5530
5532
|
}}
|
|
5531
5533
|
/>
|
|
5532
|
-
<div
|
|
5534
|
+
<div className="search-input-actions">
|
|
5533
5535
|
<button
|
|
5534
|
-
|
|
5536
|
+
className="ui basic icon button search-input-clear-icon-button clearsearch"
|
|
5535
5537
|
onClick={() => this.clearMenuText()}
|
|
5536
5538
|
onKeyDown={(e) => {
|
|
5537
5539
|
if (
|
|
@@ -5549,10 +5551,10 @@ class MenuWidget extends React.Component {
|
|
|
5549
5551
|
<svg
|
|
5550
5552
|
xmlns="http://www.w3.org/2000/svg"
|
|
5551
5553
|
viewBox="0 0 26 26"
|
|
5552
|
-
|
|
5554
|
+
className="icon"
|
|
5553
5555
|
>
|
|
5554
5556
|
<path
|
|
5555
|
-
|
|
5557
|
+
fillRule="evenodd"
|
|
5556
5558
|
d="M27.899 9.515L26.485 8.101 18 16.586 9.514 8.101 8.1 9.515 16.586 18 8.1 26.486 9.514 27.9 18 19.414 26.485 27.9 27.899 26.486 19.414 18z"
|
|
5557
5559
|
></path>
|
|
5558
5560
|
</svg>
|
|
@@ -5560,7 +5562,7 @@ class MenuWidget extends React.Component {
|
|
|
5560
5562
|
</div>
|
|
5561
5563
|
<button
|
|
5562
5564
|
aria-label="Search"
|
|
5563
|
-
|
|
5565
|
+
className="button menu-search-button"
|
|
5564
5566
|
onClick={() => this.menuSearch()}
|
|
5565
5567
|
onKeyDown={(e) => {
|
|
5566
5568
|
if (
|
|
@@ -5575,22 +5577,22 @@ class MenuWidget extends React.Component {
|
|
|
5575
5577
|
}
|
|
5576
5578
|
}}
|
|
5577
5579
|
>
|
|
5578
|
-
<span
|
|
5580
|
+
<span className="ccl-icon-zoom search-menu-icon"></span>
|
|
5579
5581
|
</button>
|
|
5580
5582
|
</div>
|
|
5581
|
-
<div
|
|
5582
|
-
<div
|
|
5583
|
+
<div className="filters-element filter-logo filters-header">
|
|
5584
|
+
<div className="filters-title">
|
|
5583
5585
|
<svg
|
|
5584
5586
|
xmlns="http://www.w3.org/2000/svg"
|
|
5585
5587
|
viewBox="0 0 36 36"
|
|
5586
|
-
|
|
5588
|
+
className="icon ui"
|
|
5587
5589
|
>
|
|
5588
5590
|
<path
|
|
5589
|
-
|
|
5591
|
+
fillRule="evenodd"
|
|
5590
5592
|
d="M5.0916,5.0002 L14.9996,19.3132 L14.9996,34.0002 L20.9996,29.5002 L20.9996,19.3132 L30.9086,5.0002 L5.0916,5.0002 Z M17.0006,18.6872 L8.9086,7.0002 L27.0916,7.0002 L19.0006,18.6872 L19.0006,28.5002 L17.0006,30.0002 L17.0006,18.6872 Z"
|
|
5591
5593
|
></path>
|
|
5592
5594
|
</svg>
|
|
5593
|
-
<span
|
|
5595
|
+
<span className="filters-title-bold">Filters</span>
|
|
5594
5596
|
<div
|
|
5595
5597
|
className="clear-filters"
|
|
5596
5598
|
tabIndex="0"
|
|
@@ -5643,7 +5645,7 @@ class MenuWidget extends React.Component {
|
|
|
5643
5645
|
Component
|
|
5644
5646
|
<select
|
|
5645
5647
|
id="select-component"
|
|
5646
|
-
|
|
5648
|
+
className="esri-select filter-select"
|
|
5647
5649
|
onBlur={() => {}}
|
|
5648
5650
|
onChange={() => {
|
|
5649
5651
|
this.loadProductFilters();
|
|
@@ -5655,7 +5657,7 @@ class MenuWidget extends React.Component {
|
|
|
5655
5657
|
Product groups
|
|
5656
5658
|
<select
|
|
5657
5659
|
id="select-product"
|
|
5658
|
-
|
|
5660
|
+
className="esri-select filter-select"
|
|
5659
5661
|
onBlur={() => {}}
|
|
5660
5662
|
onChange={() => {
|
|
5661
5663
|
this.loadFamilyFilters();
|
|
@@ -5667,7 +5669,7 @@ class MenuWidget extends React.Component {
|
|
|
5667
5669
|
Product sub-group
|
|
5668
5670
|
<select
|
|
5669
5671
|
id="select-family"
|
|
5670
|
-
|
|
5672
|
+
className="esri-select filter-select"
|
|
5671
5673
|
onBlur={() => {}}
|
|
5672
5674
|
onChange={() => {
|
|
5673
5675
|
this.menuSearch();
|