@opengeoweb/core 2.5.0 → 2.6.0

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.
Files changed (34) hide show
  1. package/index.esm.js +424 -545
  2. package/index.umd.js +470 -594
  3. package/lib/components/LayerManager/LayerManager.d.ts +2 -1
  4. package/lib/components/LayerManager/LayerManagerConnect.d.ts +1 -0
  5. package/lib/components/LayerManager/LayerSelect/LayerList/LayerListRow.d.ts +18 -0
  6. package/lib/components/LayerManager/LayerSelect/LayerList/LayerListUtils.d.ts +2 -1
  7. package/lib/components/LayerManager/LayerSelect/LayerSelectUtils.d.ts +4 -0
  8. package/lib/components/{TimeSlider/TimeSliderButtons/LoopButton/LoopButton.spec.d.ts → LayerManager/LayerSelect/LayerSelectUtils.spec.d.ts} +0 -0
  9. package/lib/components/LayerManager/LayerSelect/ServiceList/ServiceChip.d.ts +2 -2
  10. package/lib/components/LayerManager/LayerSelect/ServiceList/ServiceChipConnect.d.ts +2 -2
  11. package/lib/components/LayerManager/LayerSelect/ServiceList/ServiceList.d.ts +2 -2
  12. package/lib/components/MapWarning/MapWarningProperties.d.ts +6 -0
  13. package/lib/components/{TimeSlider/TimeSliderButtons/LoopButton/LoopButtonConnect.spec.d.ts → MapWarning/MapWarningProperties.spec.d.ts} +0 -0
  14. package/lib/components/TimeSlider/TimeSliderButtons/OptionsMenuButton/OptionsMenuButton.d.ts +0 -1
  15. package/lib/components/TimeSlider/TimeSliderButtons/TimeSliderButtons.d.ts +0 -1
  16. package/lib/index.d.ts +2 -2
  17. package/lib/store/layerSelect/sagas.d.ts +2 -1
  18. package/lib/store/mapStore/map/actions.d.ts +1 -8
  19. package/lib/store/mapStore/map/selectors.d.ts +0 -21
  20. package/lib/store/mapStore/service/reducer.d.ts +2 -8
  21. package/lib/store/mapStore/service/selectors.d.ts +6 -8
  22. package/lib/store/mapStore/service/types.d.ts +5 -8
  23. package/lib/store/mapStore/utils/helpers.d.ts +2 -0
  24. package/lib/utils/defaultConfigurations.d.ts +2 -2
  25. package/lib/utils/defaultTestSettings.d.ts +10 -199
  26. package/lib/utils/jsonPresetFilter.d.ts +2 -1
  27. package/lib/utils/localStorage.d.ts +3 -3
  28. package/lib/{components/TooltipSelect/TooltipSelect.spec.d.ts → utils/localStorage.spec.d.ts} +0 -0
  29. package/lib/utils/types.d.ts +4 -5
  30. package/package.json +8 -8
  31. package/lib/components/LayerManager/tooltipContainerStyles.d.ts +0 -2
  32. package/lib/components/TimeSlider/TimeSliderButtons/LoopButton/LoopButton.d.ts +0 -8
  33. package/lib/components/TimeSlider/TimeSliderButtons/LoopButton/LoopButtonConnect.d.ts +0 -10
  34. package/lib/components/TooltipSelect/TooltipSelect.d.ts +0 -14
package/index.esm.js CHANGED
@@ -6,10 +6,10 @@ import React__default, { useState, Component, useRef, useEffect } from 'react';
6
6
  import produce, { produce as produce$1 } from 'immer';
7
7
  import { takeLatest, put, select, call, takeEvery } from 'redux-saga/effects';
8
8
  import { WMGetServiceFromStore, LayerType as LayerType$1, getMapImageStore, WMBBOX, debug, DebugType, WMJSMap, WMLayer, legendImageStore, WMImageEventType, getLegendGraphicURLForLayer } from '@opengeoweb/webmap';
9
- import { Tooltip, Select, Grid, InputLabel, IconButton, Paper, Box, Typography, CircularProgress, List, ListSubheader, ListItem, ListItemText, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, DialogActions, Button, MenuItem, SvgIcon, FormControl, InputAdornment, ListItemSecondaryAction, ListItemIcon, Checkbox, Switch, Slider, FormControlLabel, Popover, useMediaQuery, useTheme, SliderThumb } from '@mui/material';
10
9
  import { connect, useDispatch, useSelector, Provider } from 'react-redux';
10
+ import { Grid, InputLabel, Tooltip, IconButton, Paper, Box, Typography, CircularProgress, List, ListSubheader, ListItem, ListItemText, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, DialogActions, Button, MenuItem, SvgIcon, FormControl, InputAdornment, ListItemSecondaryAction, ListItemIcon, Checkbox, Switch, Slider, FormControlLabel, Popover, useMediaQuery, useTheme, SliderThumb } from '@mui/material';
11
+ import { TooltipSelect, AlertIcon, sliderStyles, tooltipContainerStyles, CustomSlider, ToggleMenu, ManagerButton, EnableButton, AlertBanner, ManagerDeleteButton, ToolContainerDraggable, ToolButton, CustomToggleButton, useIsMounted } from '@opengeoweb/shared';
11
12
  import makeStyles from '@mui/styles/makeStyles';
12
- import { sliderStyles, CustomSlider, ToggleMenu, ManagerButton, EnableButton, AlertBanner, ManagerDeleteButton, ToolContainerDraggable, ToolButton, CustomToggleButton, useIsMounted } from '@opengeoweb/shared';
13
13
  import { Cached, Add, DragIndicator, Close, ChevronLeft, ChevronRight, Link, LinkOff, MoreVert, DeleteForever } from '@mui/icons-material';
14
14
  import { Sortable, ReactSortable } from 'react-sortablejs';
15
15
  import createStyles from '@mui/styles/createStyles';
@@ -213,19 +213,6 @@ var toggleAutoUpdate = function toggleAutoUpdate(payload) {
213
213
  payload: payload
214
214
  };
215
215
  };
216
- /**
217
- * Toggles loop state for map
218
- *
219
- * Example: toggleLoop({ mapId: 'mapId1', shouldLoop: true })
220
- * @param {object} payload object with mapId: string, shouldLoop: boolean
221
- */
222
-
223
- var toggleLoop = function toggleLoop(payload) {
224
- return {
225
- type: WEBMAP_TOGGLE_LOOP,
226
- payload: payload
227
- };
228
- };
229
216
  /**
230
217
  *Sets the scale of a time slider with id for a map
231
218
  *
@@ -746,7 +733,6 @@ var actions$3 = /*#__PURE__*/Object.freeze({
746
733
  layerMoveLayer: layerMoveLayer,
747
734
  setActiveLayerId: setActiveLayerId,
748
735
  toggleAutoUpdate: toggleAutoUpdate,
749
- toggleLoop: toggleLoop,
750
736
  setTimeSliderScale: setTimeSliderScale,
751
737
  setTimeStep: setTimeStep,
752
738
  setAnimationDelay: setAnimationDelay,
@@ -864,6 +850,16 @@ var generateTimesliderId = function generateTimesliderId() {
864
850
  generatedTimesliderIds += 1;
865
851
  return "timesliderid_".concat(generatedTimesliderIds);
866
852
  };
853
+ var generatedServiceIds = 0;
854
+ var generateServiceId = function generateServiceId() {
855
+ generatedServiceIds += 1;
856
+ return "serviceid_".concat(generatedServiceIds);
857
+ };
858
+ var generatedTimeseriesIds = 0;
859
+ var generateTimeSeriesId = function generateTimeSeriesId() {
860
+ generatedTimeseriesIds += 1;
861
+ return "timeseriesid_".concat(generatedTimeseriesIds);
862
+ };
867
863
  /**
868
864
  * Map for registering wmlayers with their id's
869
865
  */
@@ -2523,18 +2519,6 @@ var getAnimationEndTime = createSelector(getMapById, function (store) {
2523
2519
  var isAutoUpdating = createSelector(getMapById, function (store) {
2524
2520
  return store ? store.isAutoUpdating : false;
2525
2521
  });
2526
- /**
2527
- * Tells whether the "loop" behavior of animation is on/off
2528
- *
2529
- * Example: isLooping = isLooping(store, 'mapid_1')
2530
- * @param {object} store store: object - store object
2531
- * @param {string} mapId mapId: string - Id of the map
2532
- * @returns {boolean} returnType: boolean
2533
- */
2534
-
2535
- var isLooping = createSelector(getMapById, function (store) {
2536
- return store ? store.isLooping : false;
2537
- });
2538
2522
  /**
2539
2523
  * Gets activeLayerId for map
2540
2524
  *
@@ -2826,14 +2810,21 @@ var getServices = createSelector(servicesStore, function (store) {
2826
2810
  *
2827
2811
  * Example: service = getServiceByName(store, 'serviceName')
2828
2812
  * @param {object} store store: object - Store object
2829
- * @returns {Service} returnType: Service
2813
+ * @returns {ReduxService} returnType: Service
2830
2814
  */
2831
2815
 
2832
- var getServiceByName = createSelector([servicesStore, function (state, serviceName) {
2833
- return serviceName;
2834
- }], function (serviceState, serviceName) {
2835
- if (serviceState && serviceState.byId && serviceState.byId[serviceName]) {
2836
- return serviceState.byId[serviceName];
2816
+ var getServiceByName = createSelector([servicesStore, function (state, serviceUrl) {
2817
+ return serviceUrl;
2818
+ }], function (serviceState, serviceUrl) {
2819
+ var foundServiceIndex = serviceState.allIds.findIndex(function (id) {
2820
+ return serviceState.byId[id].serviceUrl === serviceUrl;
2821
+ });
2822
+ /* Add the service based on a url */
2823
+
2824
+ var id = foundServiceIndex !== -1 ? serviceState.allIds[foundServiceIndex] : null;
2825
+
2826
+ if (serviceState && serviceState.byId && serviceState.byId[id]) {
2827
+ return serviceState.byId[id];
2837
2828
  }
2838
2829
 
2839
2830
  return null;
@@ -2903,9 +2894,8 @@ var getServicesInArray = createSelector(servicesStore, function (store) {
2903
2894
  var services = store ? store.byId : {};
2904
2895
  var arrayOfServiceObjects = Object.keys(services).map(function (key) {
2905
2896
  return {
2906
- id: services[key].id,
2907
2897
  name: services[key].name,
2908
- service: services[key].service
2898
+ serviceUrl: services[key].serviceUrl
2909
2899
  };
2910
2900
  });
2911
2901
  return arrayOfServiceObjects;
@@ -2950,7 +2940,6 @@ var selectors$1 = /*#__PURE__*/Object.freeze({
2950
2940
  getAnimationStartTime: getAnimationStartTime,
2951
2941
  getAnimationEndTime: getAnimationEndTime,
2952
2942
  isAutoUpdating: isAutoUpdating,
2953
- isLooping: isLooping,
2954
2943
  getActiveLayerId: getActiveLayerId,
2955
2944
  getMapTimeSliderScale: getMapTimeSliderScale,
2956
2945
  getMapTimeStep: getMapTimeStep,
@@ -4864,9 +4853,8 @@ var setServiceMetadata = function setServiceMetadata(wmLayer, mapId, webMapJSIns
4864
4853
  var updateObject = {
4865
4854
  origin: ORIGIN_REACTMAPVIEWPARSELAYER,
4866
4855
  serviceLayers: {
4867
- id: wmLayer.service,
4868
4856
  name: wmLayer.title,
4869
- service: wmLayer.service,
4857
+ serviceUrl: wmLayer.service,
4870
4858
  layers: layers,
4871
4859
  isUserAddedService: false
4872
4860
  },
@@ -5591,140 +5579,6 @@ var synchronizationGroupConfig = {
5591
5579
  sagas: [rootSaga$4, rootSaga$3]
5592
5580
  };
5593
5581
 
5594
- var TooltipSelect = function TooltipSelect(_a) {
5595
- var tooltip = _a.tooltip,
5596
- _a$list = _a.list,
5597
- list = _a$list === void 0 ? [] : _a$list,
5598
- _a$currentIndex = _a.currentIndex,
5599
- currentIndex = _a$currentIndex === void 0 ? -1 : _a$currentIndex,
5600
- _a$onChangeMouseWheel = _a.onChangeMouseWheel,
5601
- onChangeMouseWheel = _a$onChangeMouseWheel === void 0 ? function () {} : _a$onChangeMouseWheel,
5602
- _a$requiresCtrlToChan = _a.requiresCtrlToChange,
5603
- requiresCtrlToChange = _a$requiresCtrlToChan === void 0 ? false : _a$requiresCtrlToChan,
5604
- props = __rest(_a, ["tooltip", "list", "currentIndex", "onChangeMouseWheel", "requiresCtrlToChange"]);
5605
-
5606
- props.disableUnderline;
5607
- var otherProps = __rest(props, ["disableUnderline"]);
5608
-
5609
- var _React$useState = React.useState(false),
5610
- _React$useState2 = _slicedToArray(_React$useState, 2),
5611
- selectOpen = _React$useState2[0],
5612
- setSelectOpen = _React$useState2[1];
5613
-
5614
- var _React$useState3 = React.useState(false),
5615
- _React$useState4 = _slicedToArray(_React$useState3, 2),
5616
- tooltipOpen = _React$useState4[0],
5617
- setTooltipOpen = _React$useState4[1];
5618
-
5619
- var preventDefault = function preventDefault(event) {
5620
- event.preventDefault();
5621
- event.stopPropagation();
5622
- };
5623
-
5624
- var enableScroll = React.useCallback(function () {
5625
- document.removeEventListener('wheel', preventDefault, false);
5626
- }, []);
5627
- var disableScroll = React.useCallback(function () {
5628
- document.addEventListener('wheel', preventDefault, {
5629
- passive: false
5630
- });
5631
- }, []);
5632
- var onWheel = React.useCallback(function (event) {
5633
- if (requiresCtrlToChange && (event.ctrlKey || event.metaKey) || !requiresCtrlToChange) {
5634
- disableScroll();
5635
- if (selectOpen) return;
5636
- var direction = event.deltaY < 0 ? 1 : -1;
5637
- var newValue = list[Math.min(Math.max(currentIndex - direction, 0), list.length - 1)];
5638
- onChangeMouseWheel(newValue);
5639
- } else enableScroll();
5640
- }, [selectOpen, currentIndex, list, onChangeMouseWheel, enableScroll, disableScroll, requiresCtrlToChange]);
5641
- var onOpen = React.useCallback(function () {
5642
- setSelectOpen(true);
5643
- setTooltipOpen(false);
5644
- }, []);
5645
- var onClose = React.useCallback(function () {
5646
- setSelectOpen(false);
5647
- }, []);
5648
- var onMouseEnter = React.useCallback(function () {
5649
- if (!requiresCtrlToChange) {
5650
- disableScroll();
5651
- }
5652
-
5653
- if (!selectOpen) setTooltipOpen(true);
5654
- }, [selectOpen, disableScroll, requiresCtrlToChange]);
5655
- var onMouseLeave = React.useCallback(function () {
5656
- enableScroll();
5657
- setTooltipOpen(false);
5658
- }, [enableScroll]);
5659
- var onFocus = React.useCallback(function () {
5660
- if (!requiresCtrlToChange) {
5661
- disableScroll();
5662
- }
5663
-
5664
- setTooltipOpen(true);
5665
- }, [disableScroll, requiresCtrlToChange]);
5666
- var onBlur = React.useCallback(function () {
5667
- enableScroll();
5668
- setTooltipOpen(false);
5669
- }, [enableScroll]);
5670
- return /*#__PURE__*/React.createElement(Tooltip, {
5671
- title: tooltip,
5672
- placement: "top",
5673
- open: tooltipOpen
5674
- }, /*#__PURE__*/React.createElement(Select, Object.assign({
5675
- onOpen: onOpen,
5676
- onClose: onClose,
5677
- onMouseEnter: onMouseEnter,
5678
- onMouseLeave: onMouseLeave,
5679
- onFocus: onFocus,
5680
- onBlur: onBlur,
5681
- onWheel: onWheel,
5682
- MenuProps: {
5683
- BackdropProps: {
5684
- sx: {
5685
- '&.MuiBackdrop-root': {
5686
- backgroundColor: 'transparent'
5687
- }
5688
- }
5689
- },
5690
- sx: {
5691
- '& ul': {
5692
- backgroundColor: 'geowebColors.background.surface'
5693
- },
5694
- '& li': {
5695
- fontSize: '16px',
5696
- padding: '12px',
5697
- '&:hover': {
5698
- backgroundColor: 'geowebColors.buttons.tool.mouseOver.fill'
5699
- },
5700
- '&.Mui-selected': {
5701
- color: 'geowebColors.buttons.tool.active.color',
5702
- backgroundColor: 'geowebColors.buttons.tool.active.fill',
5703
- boxShadow: "none",
5704
- '&:hover': {
5705
- backgroundColor: 'geowebColors.buttons.tool.activeMouseOver.fill'
5706
- },
5707
- '&:focus': {
5708
- backgroundColor: 'geowebColors.buttons.tool.activeMouseOver.fill'
5709
- }
5710
- },
5711
- '&:after': {
5712
- background: 'none!important'
5713
- },
5714
- '&.Mui-disabled': {
5715
- fontSize: '12px',
5716
- opacity: 0.67,
5717
- padding: '0px 12px',
5718
- '&.MuiMenuItem-root': {
5719
- minHeight: '30px!important'
5720
- }
5721
- }
5722
- }
5723
- }
5724
- }
5725
- }, otherProps)));
5726
- };
5727
-
5728
5582
  /* *
5729
5583
  * Licensed under the Apache License, Version 2.0 (the "License");
5730
5584
  * you may not use this file except in compliance with the License.
@@ -6746,12 +6600,14 @@ var reducer$1 = function reducer() {
6746
6600
  switch (action.type) {
6747
6601
  case MAP_SERVICES_SET_LAYERS:
6748
6602
  return produce(state, function (draft) {
6749
- if (!draft.byId[action.payload.service]) draft.byId[action.payload.service] = {};
6750
- draft.byId[action.payload.service].id = action.payload.id;
6751
- draft.byId[action.payload.service].name = action.payload.name;
6752
- draft.byId[action.payload.service].service = action.payload.service;
6753
- draft.byId[action.payload.service].layers = action.payload.layers;
6754
- if (!draft.allIds.includes(action.payload.service)) draft.allIds.push(action.payload.service);
6603
+ var foundServiceIndex = draft.allIds.findIndex(function (id) {
6604
+ return draft.byId[id].serviceUrl === action.payload.serviceUrl;
6605
+ });
6606
+ /* Add the service based on a url */
6607
+
6608
+ var id = foundServiceIndex !== -1 ? draft.allIds[foundServiceIndex] : generateServiceId();
6609
+ draft.byId[id] = Object.assign({}, action.payload);
6610
+ if (!draft.allIds.includes(id)) draft.allIds.push(id);
6755
6611
  });
6756
6612
 
6757
6613
  case WEBMAP_UPDATE_LAYER_INFO:
@@ -6767,11 +6623,16 @@ var reducer$1 = function reducer() {
6767
6623
 
6768
6624
  case MAP_SERVICES_REMOVE_SERVICE:
6769
6625
  return produce(state, function (draft) {
6770
- if (draft.byId[action.payload.serviceUrl]) {
6626
+ var foundServiceIndex = draft.allIds.findIndex(function (id) {
6627
+ return draft.byId[id].serviceUrl === action.payload.serviceUrl;
6628
+ });
6629
+
6630
+ if (foundServiceIndex !== -1) {
6631
+ var serviceId = draft.allIds[foundServiceIndex];
6771
6632
  draft.allIds = draft.allIds.filter(function (id) {
6772
- return id !== action.payload.serviceUrl;
6633
+ return id !== serviceId;
6773
6634
  });
6774
- delete draft.byId[action.payload.serviceUrl];
6635
+ delete draft.byId[serviceId];
6775
6636
  }
6776
6637
  });
6777
6638
 
@@ -7535,9 +7396,30 @@ var enableOnlyOneKeyword = function enableOnlyOneKeyword(payload) {
7535
7396
  * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7536
7397
  * Copyright 2022 - Finnish Meteorological Institute (FMI)
7537
7398
  * */
7399
+ var mergePresetsAndUserAddedServices = function mergePresetsAndUserAddedServices(presets, userAddedServices) {
7400
+ return Object.values(Object.assign(Object.assign({}, presets.reduce(function (byId, preset) {
7401
+ return Object.assign(Object.assign({}, byId), _defineProperty({}, preset.id, preset));
7402
+ }, {})), userAddedServices));
7403
+ };
7404
+ var isService = function isService(param) {
7405
+ var serviceParam = param;
7406
+ return !!((serviceParam === null || serviceParam === void 0 ? void 0 : serviceParam.id) && (serviceParam === null || serviceParam === void 0 ? void 0 : serviceParam.name) && (serviceParam === null || serviceParam === void 0 ? void 0 : serviceParam.url));
7407
+ };
7408
+
7538
7409
  var getUserAddedServices = function getUserAddedServices() {
7539
7410
  try {
7540
- return JSON.parse(window.localStorage.getItem('userAddedServices')) || {};
7411
+ var storedString = window.localStorage.getItem('userAddedServices');
7412
+ var parsedData = JSON.parse(storedString);
7413
+
7414
+ if (parsedData && _typeof(parsedData) === 'object') {
7415
+ return Object.entries(parsedData).reduce(function (userServices, _ref) {
7416
+ var _ref2 = _slicedToArray(_ref, 2),
7417
+ serviceUrl = _ref2[0],
7418
+ service = _ref2[1];
7419
+
7420
+ return Object.assign(Object.assign({}, userServices), isService(service) ? _defineProperty({}, serviceUrl, service) : {});
7421
+ }, {});
7422
+ }
7541
7423
  } catch (e) {
7542
7424
  console.error('Unable to read services from localStorage: ', e);
7543
7425
  }
@@ -7556,19 +7438,19 @@ var _marked = /*#__PURE__*/regeneratorRuntime.mark(newServiceAddedSaga),
7556
7438
  _marked2 = /*#__PURE__*/regeneratorRuntime.mark(layerSelectServiceRemovedSaga),
7557
7439
  _marked3 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga);
7558
7440
  function newServiceAddedSaga(capturedAction) {
7559
- var addedService, service, keywords;
7441
+ var addedService, serviceUrl, keywords;
7560
7442
  return regeneratorRuntime.wrap(function newServiceAddedSaga$(_context) {
7561
7443
  while (1) {
7562
7444
  switch (_context.prev = _context.next) {
7563
7445
  case 0:
7564
7446
  addedService = capturedAction.payload;
7565
- service = addedService.service;
7447
+ serviceUrl = addedService.serviceUrl;
7566
7448
  keywords = addedService.layers.reduce(function (keywordAccumulator, layer) {
7567
7449
  return keywordAccumulator.concat(layer.path, layer.keywords);
7568
7450
  }, []);
7569
7451
  _context.next = 5;
7570
7452
  return put(addKeywordsAndActiveServices({
7571
- serviceUrl: service,
7453
+ serviceUrl: serviceUrl,
7572
7454
  keywords: keywords
7573
7455
  }));
7574
7456
 
@@ -7601,20 +7483,25 @@ function layerSelectServiceRemovedSaga(capturedAction) {
7601
7483
  }
7602
7484
  function addServiceToLocalStorageSaga(_ref) {
7603
7485
  var payload = _ref.payload;
7604
- var id = payload.id,
7605
- isUserAddedService = payload.isUserAddedService,
7486
+ var isUserAddedService = payload.isUserAddedService,
7606
7487
  name = payload.name,
7607
- service = payload.service;
7488
+ serviceUrl = payload.serviceUrl;
7608
7489
  if (!isUserAddedService) return;
7609
7490
  var localStorageServices = getUserAddedServices();
7610
- setUserAddedServices({
7611
- byId: Object.assign(Object.assign({}, localStorageServices.byId), _defineProperty({}, service, {
7612
- id: id,
7613
- name: name,
7614
- service: service
7615
- })),
7616
- allIds: _toConsumableArray(new Set([].concat(_toConsumableArray(localStorageServices.allIds || []), [service])))
7617
- });
7491
+ setUserAddedServices(Object.assign(Object.assign({}, localStorageServices), _defineProperty({}, serviceUrl, {
7492
+ id: serviceUrl,
7493
+ name: name,
7494
+ url: serviceUrl
7495
+ })));
7496
+ }
7497
+ function removeServiceFromLocalStorageSaga(_ref2) {
7498
+ var payload = _ref2.payload;
7499
+ var serviceUrl = payload.serviceUrl;
7500
+ var localStorageServices = getUserAddedServices();
7501
+ if (!localStorageServices[serviceUrl]) return;
7502
+ var updatedServices = Object.assign({}, localStorageServices);
7503
+ delete updatedServices[serviceUrl];
7504
+ setUserAddedServices(updatedServices);
7618
7505
  }
7619
7506
  function rootSaga() {
7620
7507
  return regeneratorRuntime.wrap(function rootSaga$(_context3) {
@@ -7633,6 +7520,10 @@ function rootSaga() {
7633
7520
  return takeEvery(MAP_SERVICES_SET_LAYERS, addServiceToLocalStorageSaga);
7634
7521
 
7635
7522
  case 6:
7523
+ _context3.next = 8;
7524
+ return takeEvery(MAP_SERVICES_REMOVE_SERVICE, removeServiceFromLocalStorageSaga);
7525
+
7526
+ case 8:
7636
7527
  case "end":
7637
7528
  return _context3.stop();
7638
7529
  }
@@ -7972,7 +7863,7 @@ var WMSLayerTree = function WMSLayerTree(_ref) {
7972
7863
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7973
7864
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
7974
7865
  * */
7975
- var connectRedux$7 = connect(function (store, props) {
7866
+ var connectRedux$6 = connect(function (store, props) {
7976
7867
  return {
7977
7868
  loadedLayers: getMapLayers(store, props.mapId)
7978
7869
  };
@@ -8035,7 +7926,7 @@ var ConnectedTree = function ConnectedTree(_ref) {
8035
7926
  });
8036
7927
  };
8037
7928
 
8038
- var WMSLayerTreeConnect = connectRedux$7(ConnectedTree);
7929
+ var WMSLayerTreeConnect = connectRedux$6(ConnectedTree);
8039
7930
 
8040
7931
  /* *
8041
7932
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -8394,7 +8285,7 @@ var defaultConfigurations = /*#__PURE__*/Object.freeze({
8394
8285
  preloadedDefaultMapServices: preloadedDefaultMapServices
8395
8286
  });
8396
8287
 
8397
- var useStyles$w = makeStyles({
8288
+ var useStyles$u = makeStyles({
8398
8289
  buttonDiv: {
8399
8290
  position: 'relative'
8400
8291
  },
@@ -8430,7 +8321,7 @@ var AddLayersPopup = function AddLayersPopup(_ref) {
8430
8321
  handleClose = _ref.handleClose,
8431
8322
  _ref$layerType = _ref.layerType,
8432
8323
  layerType = _ref$layerType === void 0 ? LayerType.mapLayer : _ref$layerType;
8433
- var classes = useStyles$w();
8324
+ var classes = useStyles$u();
8434
8325
 
8435
8326
  var _React$useState = React.useState(''),
8436
8327
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -8583,7 +8474,7 @@ var AddLayersPopup = function AddLayersPopup(_ref) {
8583
8474
  }, "Close")));
8584
8475
  };
8585
8476
 
8586
- var styles$1 = {
8477
+ var styles$2 = {
8587
8478
  buttonDiv: {
8588
8479
  position: 'relative'
8589
8480
  },
@@ -8635,7 +8526,7 @@ var AddLayersButton = function AddLayersButton(_ref) {
8635
8526
  title: tooltip
8636
8527
  }, /*#__PURE__*/React.createElement(IconButton, {
8637
8528
  onClick: handleClose,
8638
- sx: styles$1.button,
8529
+ sx: styles$2.button,
8639
8530
  disableRipple: true,
8640
8531
  "data-testid": "addLayersButton",
8641
8532
  ref: ref,
@@ -8800,7 +8691,7 @@ var LayerSelectButtonConnect = function LayerSelectButtonConnect(_ref) {
8800
8691
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
8801
8692
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
8802
8693
  * */
8803
- var useStyles$v = makeStyles({
8694
+ var useStyles$t = makeStyles({
8804
8695
  row: {
8805
8696
  height: '32px'
8806
8697
  },
@@ -8824,7 +8715,7 @@ var DescriptionRow = function DescriptionRow(_ref) {
8824
8715
  layerManagerWidth = _ref.layerManagerWidth,
8825
8716
  _ref$layerSelect = _ref.layerSelect,
8826
8717
  layerSelect = _ref$layerSelect === void 0 ? false : _ref$layerSelect;
8827
- var classes = useStyles$v();
8718
+ var classes = useStyles$t();
8828
8719
  var columnSizes = layerManagerWidth === LayerManagerWidth.sm ? LayerManagerColumnsSmall() : LayerManagerColumnsLarge();
8829
8720
  return /*#__PURE__*/React.createElement(Grid, {
8830
8721
  container: true,
@@ -8868,72 +8759,12 @@ var DescriptionRow = function DescriptionRow(_ref) {
8868
8759
  }));
8869
8760
  };
8870
8761
 
8871
- /* *
8872
- * Licensed under the Apache License, Version 2.0 (the "License");
8873
- * you may not use this file except in compliance with the License.
8874
- * You may obtain a copy of the License at
8875
- *
8876
- * http://www.apache.org/licenses/LICENSE-2.0
8877
- *
8878
- * Unless required by applicable law or agreed to in writing, software
8879
- * distributed under the License is distributed on an "AS IS" BASIS,
8880
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8881
- * See the License for the specific language governing permissions and
8882
- * limitations under the License.
8883
- *
8884
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
8885
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
8886
- * */
8887
- var useTooltipContainerStyles = makeStyles(function (theme) {
8888
- return createStyles({
8889
- textContainer: {
8890
- width: '100%',
8891
- height: 32,
8892
- fontWeight: 500,
8893
- fontSize: theme.palette.geowebColors.layerManager.tableRowDefaultText.fontSize,
8894
- color: function color(isEnabled) {
8895
- return isEnabled ? theme.palette.geowebColors.layerManager.tableRowDefaultText.rgba : theme.palette.geowebColors.layerManager.tableRowDisabledText.rgba;
8896
- },
8897
- '& .MuiOutlinedInput-input': {
8898
- padding: '6px 24px 6px 8px'
8899
- },
8900
- '& .MuiOutlinedInput-notchedOutline': {
8901
- borderColor: 'transparent!important'
8902
- },
8903
- '&:hover .MuiSelect-select': {
8904
- backgroundColor: theme.palette.geowebColors.buttons.tool.mouseOver.fill
8905
- },
8906
- '&.Mui-focused .MuiSelect-select': {
8907
- outline: theme.palette.geowebColors.buttons.focusDefault.outline,
8908
- backgroundColor: theme.palette.geowebColors.buttons.tool.mouseOver.fill
8909
- },
8910
- '&:hover&.MuiButton-root': {
8911
- backgroundColor: theme.palette.geowebColors.buttons.tool.mouseOver.fill
8912
- },
8913
- '&:focus&.MuiButton-root': {
8914
- outline: theme.palette.geowebColors.buttons.focusDefault.outline,
8915
- backgroundColor: theme.palette.geowebColors.buttons.tool.mouseOver.fill
8916
- },
8917
- '& .MuiSvgIcon-root': {
8918
- transition: 'none',
8919
- fill: function fill(isEnabled) {
8920
- return isEnabled ? theme.palette.geowebColors.buttons.flat["default"].color : theme.palette.geowebColors.buttons.flat.disabled.color;
8921
- }
8922
- },
8923
- '&>div': {
8924
- paddingLeft: 8
8925
- }
8926
- }
8927
- });
8928
- });
8929
-
8930
8762
  var DimensionSelect = function DimensionSelect(_ref) {
8931
8763
  var layerId = _ref.layerId,
8932
8764
  onLayerChangeDimension = _ref.onLayerChangeDimension,
8933
8765
  _ref$layerDimensions = _ref.layerDimensions,
8934
8766
  layerDimensions = _ref$layerDimensions === void 0 ? [] : _ref$layerDimensions,
8935
8767
  isEnabled = _ref.isEnabled;
8936
- var classes = useTooltipContainerStyles(isEnabled);
8937
8768
 
8938
8769
  var _React$useState = React.useState(layerDimensions.length ? layerDimensions[0].name : ''),
8939
8770
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -9019,7 +8850,7 @@ var DimensionSelect = function DimensionSelect(_ref) {
9019
8850
  'data-testid': 'selectDimension'
9020
8851
  }
9021
8852
  },
9022
- className: classes.textContainer,
8853
+ isEnabled: isEnabled,
9023
8854
  value: activeDimName,
9024
8855
  list: dimNameList,
9025
8856
  currentIndex: dimNameCurrentIndex,
@@ -9045,7 +8876,7 @@ var DimensionSelect = function DimensionSelect(_ref) {
9045
8876
  'data-testid': 'selectDimensionValue'
9046
8877
  }
9047
8878
  },
9048
- className: classes.textContainer,
8879
+ isEnabled: isEnabled,
9049
8880
  value: activeDim && activeDim.currentValue,
9050
8881
  list: dimValueList,
9051
8882
  currentIndex: dimValueCurrentIndex,
@@ -9066,7 +8897,7 @@ var DimensionSelect = function DimensionSelect(_ref) {
9066
8897
  }))));
9067
8898
  };
9068
8899
 
9069
- var useStyles$u = makeStyles(function (theme) {
8900
+ var useStyles$s = makeStyles(function (theme) {
9070
8901
  return createStyles({
9071
8902
  dropdownEmpty: {
9072
8903
  paddingLeft: 8,
@@ -9116,8 +8947,7 @@ var RenderLayers = function RenderLayers(_ref) {
9116
8947
  layers = _ref$layers === void 0 ? [] : _ref$layers,
9117
8948
  _ref$isEnabled = _ref.isEnabled,
9118
8949
  isEnabled = _ref$isEnabled === void 0 ? true : _ref$isEnabled;
9119
- var classes = useStyles$u();
9120
- var containerClass = useTooltipContainerStyles(isEnabled);
8950
+ var classes = useStyles$s();
9121
8951
 
9122
8952
  if (!layers || !layers.length) {
9123
8953
  return /*#__PURE__*/React.createElement("div", {
@@ -9151,7 +8981,7 @@ var RenderLayers = function RenderLayers(_ref) {
9151
8981
  'data-testid': 'selectLayer'
9152
8982
  }
9153
8983
  },
9154
- className: containerClass.textContainer,
8984
+ isEnabled: isEnabled,
9155
8985
  value: currentValue,
9156
8986
  list: list,
9157
8987
  currentIndex: currentIndex,
@@ -9159,19 +8989,31 @@ var RenderLayers = function RenderLayers(_ref) {
9159
8989
  onChangeMouseWheel: function onChangeMouseWheel(e) {
9160
8990
  return onChangeLayerName(e.value);
9161
8991
  },
9162
- requiresCtrlToChange: true
8992
+ requiresCtrlToChange: true,
8993
+ renderValue: function renderValue(value) {
8994
+ return extendedLayers.find(function (layer) {
8995
+ return layer.name === value;
8996
+ }).text;
8997
+ }
9163
8998
  }, /*#__PURE__*/React.createElement(MenuItem, {
9164
8999
  disabled: true
9165
- }, "Layer"), extendedLayers.map(function (layerFromServiceLayers) {
9000
+ }, "Layer"), extendedLayers.map(function (layerFromServiceLayers, currentIndex) {
9166
9001
  return /*#__PURE__*/React.createElement(MenuItem, {
9167
9002
  key: layerFromServiceLayers.name,
9168
9003
  value: layerFromServiceLayers.name,
9169
- disabled: !layerFromServiceLayers.leaf
9170
- }, layerFromServiceLayers.text);
9004
+ disabled: !layerFromServiceLayers.leaf,
9005
+ sx: {
9006
+ '& .MuiSvgIcon-root': {
9007
+ marginLeft: '28px'
9008
+ }
9009
+ }
9010
+ }, layerFromServiceLayers.text, currentIndex === layers.length && /*#__PURE__*/React.createElement(AlertIcon, {
9011
+ severity: "error"
9012
+ }));
9171
9013
  }));
9172
9014
  };
9173
9015
 
9174
- var useStyles$t = makeStyles(function (theme) {
9016
+ var useStyles$r = makeStyles(function (theme) {
9175
9017
  return {
9176
9018
  opacityDiv: {
9177
9019
  height: 'calc(100% - 5px)',
@@ -9232,9 +9074,8 @@ var OpacitySelect = function OpacitySelect(_ref) {
9232
9074
  onLayerChangeOpacity = _ref.onLayerChangeOpacity,
9233
9075
  _ref$isEnabled = _ref.isEnabled,
9234
9076
  isEnabled = _ref$isEnabled === void 0 ? true : _ref$isEnabled;
9235
- var classes = useStyles$t();
9077
+ var classes = useStyles$r();
9236
9078
  var sliderClasses = sliderStyles();
9237
- var containerClass = useTooltipContainerStyles(isEnabled);
9238
9079
 
9239
9080
  var _React$useState = React.useState(false),
9240
9081
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -9246,22 +9087,8 @@ var OpacitySelect = function OpacitySelect(_ref) {
9246
9087
  tooltipOpen = _React$useState4[0],
9247
9088
  setTooltipOpen = _React$useState4[1];
9248
9089
 
9249
- var preventDefault = function preventDefault(event) {
9250
- event.preventDefault();
9251
- event.stopPropagation();
9252
- };
9253
-
9254
- var enableScroll = React.useCallback(function () {
9255
- document.removeEventListener('wheel', preventDefault, false);
9256
- }, []);
9257
- var disableScroll = React.useCallback(function () {
9258
- document.addEventListener('wheel', preventDefault, {
9259
- passive: false
9260
- });
9261
- }, []);
9262
9090
  var onWheel = React.useCallback(function (event) {
9263
9091
  if (event.ctrlKey || event.metaKey) {
9264
- disableScroll();
9265
9092
  var multiplier = event.altKey ? 10 : 1;
9266
9093
  var direction = event.deltaY > 0 ? 0.01 * multiplier : -0.01 * multiplier;
9267
9094
  var newValue = Math.min(Math.max(currentOpacity - direction, 0), 1); // Kind of "one frame debouncer", meant to dampen too fast slider movement
@@ -9269,8 +9096,8 @@ var OpacitySelect = function OpacitySelect(_ref) {
9269
9096
  window.requestAnimationFrame(function () {
9270
9097
  onLayerChangeOpacity(newValue);
9271
9098
  });
9272
- } else enableScroll();
9273
- }, [currentOpacity, onLayerChangeOpacity, disableScroll, enableScroll]);
9099
+ }
9100
+ }, [currentOpacity, onLayerChangeOpacity]);
9274
9101
  var onClickButton = React.useCallback(function () {
9275
9102
  setOpen(!open);
9276
9103
  }, [open]);
@@ -9283,23 +9110,21 @@ var OpacitySelect = function OpacitySelect(_ref) {
9283
9110
  if (!open) setTooltipOpen(true);
9284
9111
  }, [open]);
9285
9112
  var onMouseLeave = React.useCallback(function () {
9286
- enableScroll();
9287
9113
  setTooltipOpen(false);
9288
- }, [enableScroll]);
9114
+ }, []);
9289
9115
  var onFocus = React.useCallback(function () {
9290
9116
  setTooltipOpen(true);
9291
9117
  }, []);
9292
9118
  var onBlur = React.useCallback(function () {
9293
- enableScroll();
9294
9119
  setTooltipOpen(false);
9295
- }, [enableScroll]);
9120
+ }, []);
9296
9121
  return /*#__PURE__*/React.createElement("div", {
9297
9122
  className: classes.opacityDiv,
9298
9123
  onWheel: onWheel,
9299
9124
  "data-testid": "scrollOpacity"
9300
9125
  }, /*#__PURE__*/React.createElement(Tooltip, {
9301
9126
  title: tooltipTitle,
9302
- className: containerClass.textContainer,
9127
+ sx: tooltipContainerStyles(isEnabled),
9303
9128
  placement: "top",
9304
9129
  open: tooltipOpen
9305
9130
  }, /*#__PURE__*/React.createElement(Button, {
@@ -9390,7 +9215,6 @@ var RenderStyles = function RenderStyles(_ref) {
9390
9215
  onChangeLayerStyle = _ref.onChangeLayerStyle,
9391
9216
  _ref$isEnabled = _ref.isEnabled,
9392
9217
  isEnabled = _ref$isEnabled === void 0 ? true : _ref$isEnabled;
9393
- var classes = useTooltipContainerStyles(isEnabled);
9394
9218
  var styles = [{
9395
9219
  title: 'default',
9396
9220
  name: 'default',
@@ -9425,7 +9249,7 @@ var RenderStyles = function RenderStyles(_ref) {
9425
9249
  'data-testid': 'selectStyle'
9426
9250
  }
9427
9251
  },
9428
- className: classes.textContainer,
9252
+ isEnabled: isEnabled,
9429
9253
  value: currentStyle,
9430
9254
  list: list,
9431
9255
  currentIndex: currentIndex,
@@ -9460,7 +9284,7 @@ var RenderStyles = function RenderStyles(_ref) {
9460
9284
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
9461
9285
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
9462
9286
  * */
9463
- var useStyles$s = makeStyles(function (theme) {
9287
+ var useStyles$q = makeStyles(function (theme) {
9464
9288
  return createStyles({
9465
9289
  svgIcon: {
9466
9290
  fill: function fill(_ref) {
@@ -9489,7 +9313,7 @@ var ActivateLayer = function ActivateLayer(_ref2) {
9489
9313
  isActive = _ref2$isActive === void 0 ? false : _ref2$isActive,
9490
9314
  _ref2$isEnabled = _ref2.isEnabled,
9491
9315
  isEnabled = _ref2$isEnabled === void 0 ? true : _ref2$isEnabled;
9492
- var classes = useStyles$s({
9316
+ var classes = useStyles$q({
9493
9317
  isActive: isActive,
9494
9318
  isEnabled: isEnabled
9495
9319
  });
@@ -9542,7 +9366,7 @@ var ActivateLayer = function ActivateLayer(_ref2) {
9542
9366
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
9543
9367
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
9544
9368
  * */
9545
- var useStyles$r = makeStyles(function (theme) {
9369
+ var useStyles$p = makeStyles(function (theme) {
9546
9370
  return createStyles({
9547
9371
  row: {
9548
9372
  background: function background(isEnabled) {
@@ -9595,7 +9419,7 @@ var LayerRow = function LayerRow(_ref) {
9595
9419
  layerActiveLayout = _ref.layerActiveLayout,
9596
9420
  layerManagerWidth = _ref.layerManagerWidth,
9597
9421
  dragHandle = _ref.dragHandle;
9598
- var classes = useStyles$r(isEnabled);
9422
+ var classes = useStyles$p(isEnabled);
9599
9423
  var columnSizes = layerManagerWidth === LayerManagerWidth.sm ? LayerManagerColumnsSmall() : LayerManagerColumnsLarge();
9600
9424
 
9601
9425
  var onClickRow = function onClickRow() {
@@ -10221,7 +10045,7 @@ var DragHandle = function DragHandle(_ref) {
10221
10045
  });
10222
10046
  };
10223
10047
 
10224
- var useStyles$q = makeStyles(function () {
10048
+ var useStyles$o = makeStyles(function () {
10225
10049
  return {
10226
10050
  layerRows: {
10227
10051
  width: '100%',
@@ -10241,6 +10065,12 @@ var LayerContainerRow = function LayerContainerRow(_ref) {
10241
10065
  var mapId = _ref.mapId,
10242
10066
  layerManagerWidth = _ref.layerManagerWidth;
10243
10067
  var dispatch = useDispatch();
10068
+
10069
+ var _React$useState = React.useState(false),
10070
+ _React$useState2 = _slicedToArray(_React$useState, 2),
10071
+ keyPressed = _React$useState2[0],
10072
+ setKeyPressed = _React$useState2[1];
10073
+
10244
10074
  var layerIds = useSelector(function (store) {
10245
10075
  return getLayerIds(store, mapId);
10246
10076
  });
@@ -10256,10 +10086,10 @@ var LayerContainerRow = function LayerContainerRow(_ref) {
10256
10086
  }));
10257
10087
  }, [dispatch]);
10258
10088
 
10259
- var _React$useState = React.useState(null),
10260
- _React$useState2 = _slicedToArray(_React$useState, 2),
10261
- activeDragIndex = _React$useState2[0],
10262
- setActiveDragIndex = _React$useState2[1];
10089
+ var _React$useState3 = React.useState(null),
10090
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
10091
+ activeDragIndex = _React$useState4[0],
10092
+ setActiveDragIndex = _React$useState4[1];
10263
10093
 
10264
10094
  var onSetList = function onSetList() {}; // since we use activeDragIndex, we don't need inner state handling of ReactSortable
10265
10095
 
@@ -10288,7 +10118,43 @@ var LayerContainerRow = function LayerContainerRow(_ref) {
10288
10118
 
10289
10119
  var isSorting = activeDragIndex !== null;
10290
10120
  var isDragDisabled = layerIds.length === 1;
10291
- var classes = useStyles$q(isSorting);
10121
+ var classes = useStyles$o(isSorting);
10122
+
10123
+ var keyPressedTrue = function keyPressedTrue(event) {
10124
+ if (event.ctrlKey || event.metaKey) {
10125
+ setKeyPressed(true);
10126
+ }
10127
+ };
10128
+
10129
+ var keyPressedFalse = function keyPressedFalse() {
10130
+ setKeyPressed(false);
10131
+ };
10132
+
10133
+ React.useEffect(function () {
10134
+ window.addEventListener('keydown', keyPressedTrue);
10135
+ window.addEventListener('keyup', keyPressedFalse);
10136
+ return function () {
10137
+ window.removeEventListener('keydown', keyPressedTrue);
10138
+ window.removeEventListener('keyup', keyPressedFalse);
10139
+ };
10140
+ }, []);
10141
+ var preventDefault = React.useCallback(function (event) {
10142
+ event.preventDefault();
10143
+ event.stopPropagation();
10144
+ }, []);
10145
+ React.useEffect(function () {
10146
+ if (keyPressed === true) {
10147
+ window.addEventListener('wheel', preventDefault, {
10148
+ passive: false
10149
+ });
10150
+ } else {
10151
+ window.removeEventListener('wheel', preventDefault);
10152
+ }
10153
+
10154
+ return function () {
10155
+ return window.removeEventListener('wheel', preventDefault);
10156
+ };
10157
+ }, [keyPressed, preventDefault]);
10292
10158
  return /*#__PURE__*/React.createElement(Grid, {
10293
10159
  container: true,
10294
10160
  item: true,
@@ -10344,7 +10210,6 @@ var BaseLayers = function BaseLayers(_ref) {
10344
10210
  var selectedBaseLayers = _ref.selectedBaseLayers,
10345
10211
  availableBaseLayers = _ref.availableBaseLayers,
10346
10212
  onChangeBaseLayers = _ref.onChangeBaseLayers;
10347
- var classes = useTooltipContainerStyles();
10348
10213
 
10349
10214
  if (!availableBaseLayers || !availableBaseLayers.length) {
10350
10215
  return /*#__PURE__*/React.createElement("div", null, "No service available");
@@ -10374,7 +10239,7 @@ var BaseLayers = function BaseLayers(_ref) {
10374
10239
  style: {
10375
10240
  maxWidth: '100%'
10376
10241
  },
10377
- className: classes.textContainer,
10242
+ isEnabled: true,
10378
10243
  value: selectedBaseLayerId,
10379
10244
  list: list,
10380
10245
  currentIndex: currentIndex,
@@ -10498,7 +10363,7 @@ var BaseLayersConnect = function BaseLayersConnect(_ref) {
10498
10363
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10499
10364
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
10500
10365
  * */
10501
- var useStyles$p = makeStyles({
10366
+ var useStyles$n = makeStyles({
10502
10367
  layerRow: {
10503
10368
  width: '100%',
10504
10369
  height: '36px'
@@ -10521,7 +10386,7 @@ var BaseLayerRow = function BaseLayerRow(_ref) {
10521
10386
  layerManagerWidth = _ref.layerManagerWidth,
10522
10387
  _ref$tooltip = _ref.tooltip,
10523
10388
  tooltip = _ref$tooltip === void 0 ? '' : _ref$tooltip;
10524
- var classes = useStyles$p();
10389
+ var classes = useStyles$n();
10525
10390
  var columnSizes = layerManagerWidth === LayerManagerWidth.sm ? LayerManagerColumnsSmall() : LayerManagerColumnsLarge();
10526
10391
  return /*#__PURE__*/React.createElement(Grid, {
10527
10392
  container: true,
@@ -10550,7 +10415,7 @@ var BaseLayerRow = function BaseLayerRow(_ref) {
10550
10415
  })));
10551
10416
  };
10552
10417
 
10553
- var useStyles$o = makeStyles({
10418
+ var styles$1 = {
10554
10419
  layerRowContainer: {
10555
10420
  position: 'relative',
10556
10421
  width: '100%',
@@ -10564,7 +10429,7 @@ var useStyles$o = makeStyles({
10564
10429
  width: '100%',
10565
10430
  boxSizing: 'border-box'
10566
10431
  }
10567
- });
10432
+ };
10568
10433
 
10569
10434
  var LayerManager = function LayerManager(_ref) {
10570
10435
  var mapId = _ref.mapId,
@@ -10584,8 +10449,9 @@ var LayerManager = function LayerManager(_ref) {
10584
10449
  _ref$layerSelect = _ref.layerSelect,
10585
10450
  layerSelect = _ref$layerSelect === void 0 ? false : _ref$layerSelect,
10586
10451
  _ref$showAddLayersToo = _ref.showAddLayersTooltip,
10587
- showAddLayersTooltip = _ref$showAddLayersToo === void 0 ? true : _ref$showAddLayersToo;
10588
- var classes = useStyles$o();
10452
+ showAddLayersTooltip = _ref$showAddLayersToo === void 0 ? true : _ref$showAddLayersToo,
10453
+ _ref$leftComponent = _ref.leftComponent,
10454
+ leftComponent = _ref$leftComponent === void 0 ? null : _ref$leftComponent;
10589
10455
 
10590
10456
  var _React$useState = React.useState(LayerManagerWidth.lg),
10591
10457
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -10617,13 +10483,14 @@ var LayerManager = function LayerManager(_ref) {
10617
10483
  "data-testid": "layerManagerWindow",
10618
10484
  onMouseDown: onMouseDown,
10619
10485
  order: order,
10620
- source: source
10621
- }, /*#__PURE__*/React.createElement("div", {
10622
- className: classes.layerManagerContainer
10486
+ source: source,
10487
+ leftComponent: leftComponent
10488
+ }, /*#__PURE__*/React.createElement(Box, {
10489
+ sx: styles$1.layerManagerContainer
10623
10490
  }, /*#__PURE__*/React.createElement(Grid, {
10624
10491
  container: true,
10625
10492
  "data-testid": "layerManagerRowContainer",
10626
- className: classes.layerRowContainer
10493
+ sx: styles$1.layerRowContainer
10627
10494
  }, /*#__PURE__*/React.createElement(DescriptionRow, {
10628
10495
  mapId: mapId,
10629
10496
  tooltip: showAddLayersTooltip ? 'Add Layers' : '',
@@ -10989,9 +10856,8 @@ var ServicePopup = function ServicePopup(_ref) {
10989
10856
  }
10990
10857
 
10991
10858
  serviceSetLayers({
10992
- id: serviceUrl,
10993
10859
  name: serviceName,
10994
- service: serviceUrl,
10860
+ serviceUrl: serviceUrl,
10995
10861
  layers: serviceLayers,
10996
10862
  isUserAddedService: true
10997
10863
  });
@@ -11376,6 +11242,65 @@ var SearchFieldConnect = function SearchFieldConnect() {
11376
11242
  });
11377
11243
  };
11378
11244
 
11245
+ /* *
11246
+ * Licensed under the Apache License, Version 2.0 (the "License");
11247
+ * you may not use this file except in compliance with the License.
11248
+ * You may obtain a copy of the License at
11249
+ *
11250
+ * http://www.apache.org/licenses/LICENSE-2.0
11251
+ *
11252
+ * Unless required by applicable law or agreed to in writing, software
11253
+ * distributed under the License is distributed on an "AS IS" BASIS,
11254
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11255
+ * See the License for the specific language governing permissions and
11256
+ * limitations under the License.
11257
+ *
11258
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11259
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
11260
+ * */
11261
+ var getMapStoreServiceFromLayerSelectServiceId = function getMapStoreServiceFromLayerSelectServiceId(services, serviceId) {
11262
+ /*
11263
+ Because the mapStore services redux store is refactored,
11264
+ the id's do not match anymore with the layerSelect services redux store.
11265
+ The following code ensures that the right mapStore service is found based on the id in the layerSelect store.
11266
+ TODO: https://gitlab.com/opengeoweb/opengeoweb/-/issues/1883
11267
+ */
11268
+ var mapStoreServiceIndex = Object.keys(services).findIndex(function (serviceKey) {
11269
+ return services[serviceKey].serviceUrl === serviceId;
11270
+ });
11271
+
11272
+ if (mapStoreServiceIndex === -1) {
11273
+ console.warn("serviceId ".concat(serviceId, " not found"));
11274
+ return null;
11275
+ }
11276
+
11277
+ return services[Object.keys(services)[mapStoreServiceIndex]];
11278
+ };
11279
+ var filterLayersFromService = function filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString) {
11280
+ var mapStoreService = getMapStoreServiceFromLayerSelectServiceId(services, serviceId);
11281
+ if (!mapStoreService) return [];
11282
+
11283
+ if (searchString === '' && allKeywordsActive) {
11284
+ return mapStoreService.layers.filter(function (layer) {
11285
+ return layer.leaf;
11286
+ });
11287
+ }
11288
+
11289
+ var searchStringArray = searchString.split(' ');
11290
+ return mapStoreService.layers.filter(function (layer) {
11291
+ return searchStringArray.every(function (search) {
11292
+ var layerPathAndKeywords = layer.path.concat(layer.keywords);
11293
+ return (!!layerPathAndKeywords && !layerPathAndKeywords.every(function (keyword) {
11294
+ return !keywordIds.includes(keyword);
11295
+ }) || allKeywordsActive) && (!!layer.name && layer.name.toLowerCase().includes(search.toLowerCase()) || !!layer.text && layer.text.toLowerCase().includes(search.toLowerCase()) || !!layer["abstract"] && layer["abstract"].toLowerCase().includes(search.toLowerCase()) || !!layerPathAndKeywords && !layerPathAndKeywords.every(function (keyword) {
11296
+ return !keyword.toLowerCase().includes(search.toLowerCase());
11297
+ }) || mapStoreService.name.toLowerCase().includes(search.toLowerCase()));
11298
+ });
11299
+ }).filter(function (layer) {
11300
+ return layer.leaf;
11301
+ });
11302
+ };
11303
+
11379
11304
  /* *
11380
11305
  * Licensed under the Apache License, Version 2.0 (the "License");
11381
11306
  * you may not use this file except in compliance with the License.
@@ -11433,78 +11358,104 @@ var LayerAddRemoveButton = function LayerAddRemoveButton(_ref) {
11433
11358
  * See the License for the specific language governing permissions and
11434
11359
  * limitations under the License.
11435
11360
  *
11436
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11437
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
11361
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11362
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
11438
11363
  * */
11439
- var filterLayersFromService = function filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString) {
11440
- if (searchString === '' && allKeywordsActive) {
11441
- return services[serviceId].layers.filter(function (layer) {
11442
- return layer.leaf;
11443
- });
11444
- }
11445
11364
 
11446
- var searchStringArray = searchString.split(' ');
11447
- return services[serviceId].layers.filter(function (layer) {
11448
- return searchStringArray.every(function (search) {
11449
- var layerPathAndKeywords = layer.path.concat(layer.keywords);
11450
- return (!!layerPathAndKeywords && !layerPathAndKeywords.every(function (keyword) {
11451
- return !keywordIds.includes(keyword);
11452
- }) || allKeywordsActive) && (!!layer.name && layer.name.toLowerCase().includes(search.toLowerCase()) || !!layer.text && layer.text.toLowerCase().includes(search.toLowerCase()) || !!layer["abstract"] && layer["abstract"].toLowerCase().includes(search.toLowerCase()) || !!layerPathAndKeywords && !layerPathAndKeywords.every(function (keyword) {
11453
- return !keyword.toLowerCase().includes(search.toLowerCase());
11454
- }) || services[serviceId].name.toLowerCase().includes(search.toLowerCase()));
11455
- });
11456
- }).filter(function (layer) {
11457
- return layer.leaf;
11458
- });
11459
- };
11460
-
11461
- var useStyles$n = makeStyles(function (theme) {
11462
- return {
11463
- layerRow: {
11464
- background: theme.palette.geowebColors.cards.cardContainer,
11465
- padding: '8px 0px 8px 12px',
11365
+ var LayerListRow = function LayerListRow(_ref) {
11366
+ var layer = _ref.layer,
11367
+ layerIndex = _ref.layerIndex,
11368
+ serviceId = _ref.serviceId,
11369
+ addLayer = _ref.addLayer,
11370
+ deleteLayer = _ref.deleteLayer,
11371
+ mapLayers = _ref.mapLayers;
11372
+ return /*#__PURE__*/React__default.createElement(Grid, {
11373
+ "data-testid": "layerListLayerRow",
11374
+ container: true,
11375
+ item: true,
11376
+ xs: 12,
11377
+ justifyContent: "center",
11378
+ alignItems: "center",
11379
+ sx: {
11380
+ backgroundColor: 'geowebColors.cards.cardContainer',
11381
+ paddingLeft: '12px',
11466
11382
  marginBottom: '4px',
11467
11383
  height: '64px',
11468
- border: "solid 1px ".concat(theme.palette.geowebColors.cards.cardContainerBorder),
11469
- display: 'grid',
11470
- gridTemplateColumns: '1fr 0.1fr',
11471
- gridGap: '20px'
11472
- },
11473
- layerText: {
11384
+ border: 'solid 1px',
11385
+ borderColor: 'geowebColors.cards.cardContainerBorder'
11386
+ }
11387
+ }, /*#__PURE__*/React__default.createElement(Grid, {
11388
+ container: true,
11389
+ item: true,
11390
+ xs: 10
11391
+ }, /*#__PURE__*/React__default.createElement(Grid, {
11392
+ container: true,
11393
+ item: true,
11394
+ xs: 12
11395
+ }, /*#__PURE__*/React__default.createElement(Box, {
11396
+ sx: {
11474
11397
  fontSize: '12px',
11398
+ height: '24px',
11399
+ lineHeight: '24px',
11475
11400
  fontWeight: 500,
11476
- overflow: 'clip',
11477
- height: '20px',
11478
- textOverflow: 'ellipsis'
11479
- },
11480
- layerName: {
11401
+ WebkitLineClamp: 1,
11402
+ display: '-webkit-box',
11403
+ WebkitBoxOrient: 'vertical',
11404
+ textOverflow: 'ellipsis',
11405
+ overflow: 'hidden'
11406
+ }
11407
+ }, layer.text)), /*#__PURE__*/React__default.createElement(Grid, {
11408
+ container: true,
11409
+ item: true,
11410
+ xs: 4
11411
+ }, /*#__PURE__*/React__default.createElement(Box, {
11412
+ sx: {
11481
11413
  fontSize: '12px',
11482
11414
  height: '24px',
11483
- overflow: 'clip',
11484
- "float": 'left',
11485
- paddingTop: '6px',
11486
- whiteSpace: 'nowrap'
11487
- },
11488
- layerNameMaxWidth: {
11489
- maxWidth: '270px'
11490
- },
11491
- layerAbstract: {
11415
+ lineHeight: '24px',
11416
+ WebkitLineClamp: 1,
11417
+ display: '-webkit-box',
11418
+ WebkitBoxOrient: 'vertical',
11419
+ textOverflow: 'ellipsis',
11420
+ overflow: 'hidden'
11421
+ }
11422
+ }, layer.name)), layer["abstract"] ? /*#__PURE__*/React__default.createElement(Grid, {
11423
+ "data-testid": "layerAbstract",
11424
+ container: true,
11425
+ item: true,
11426
+ xs: 8,
11427
+ sx: {
11492
11428
  fontSize: '10px',
11493
- paddingLeft: '200px',
11494
- overflow: 'clip',
11495
- height: '30px'
11496
- },
11497
- resultCount: {
11498
- marginBottom: '4px',
11499
- fontSize: '12px'
11500
- },
11501
- layerButton: {
11429
+ height: '30px',
11430
+ paddingLeft: '20px',
11431
+ WebkitLineClamp: 2,
11432
+ display: '-webkit-box',
11433
+ WebkitBoxOrient: 'vertical',
11434
+ textOverflow: 'ellipsis',
11435
+ overflow: 'hidden'
11436
+ }
11437
+ }, layer["abstract"]) : null), /*#__PURE__*/React__default.createElement(Grid, {
11438
+ container: true,
11439
+ item: true,
11440
+ xs: 2,
11441
+ justifyContent: "flex-end",
11442
+ alignItems: "center"
11443
+ }, /*#__PURE__*/React__default.createElement(Box, {
11444
+ sx: {
11445
+ width: '80px',
11446
+ height: '48px',
11502
11447
  marginRight: '8px',
11503
- marginTop: '4px',
11504
- width: '80px'
11448
+ paddingTop: '4px'
11505
11449
  }
11506
- };
11507
- });
11450
+ }, /*#__PURE__*/React__default.createElement(LayerAddRemoveButton, {
11451
+ layer: layer,
11452
+ layerIndex: layerIndex,
11453
+ serviceId: serviceId,
11454
+ addLayer: addLayer,
11455
+ deleteLayer: deleteLayer,
11456
+ mapLayers: mapLayers
11457
+ }))));
11458
+ };
11508
11459
 
11509
11460
  var LayerList = function LayerList(_ref) {
11510
11461
  var services = _ref.services,
@@ -11516,7 +11467,6 @@ var LayerList = function LayerList(_ref) {
11516
11467
  mapLayers = _ref.mapLayers,
11517
11468
  keywordIds = _ref.keywordIds,
11518
11469
  allKeywordsActive = _ref.allKeywordsActive;
11519
- var classes = useStyles$n();
11520
11470
 
11521
11471
  var _React$useState = React.useState(0),
11522
11472
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -11528,42 +11478,29 @@ var LayerList = function LayerList(_ref) {
11528
11478
  return totalNumberOfLayers + filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString).length;
11529
11479
  }, 0));
11530
11480
  }, [serviceIds, keywordIds, services, searchString, allKeywordsActive]);
11531
- return /*#__PURE__*/React.createElement("div", {
11481
+ return /*#__PURE__*/React.createElement(Box, {
11532
11482
  "data-testid": "layerList"
11533
- }, /*#__PURE__*/React.createElement("div", {
11534
- className: classes.resultCount
11535
- }, numberOfLayers, " results"), /*#__PURE__*/React.createElement("div", {
11536
- style: {
11483
+ }, /*#__PURE__*/React.createElement(Box, {
11484
+ sx: {
11485
+ marginBottom: '4px',
11486
+ fontSize: '12px'
11487
+ }
11488
+ }, numberOfLayers, " results"), /*#__PURE__*/React.createElement(Box, {
11489
+ sx: {
11537
11490
  height: layerSelectHeight - 199,
11538
11491
  overflow: 'auto'
11539
11492
  }
11540
11493
  }, serviceIds.map(function (serviceId) {
11541
11494
  return filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString).map(function (layer, layerIndex) {
11542
- return /*#__PURE__*/React.createElement("div", {
11543
- key: "".concat(serviceId, "-").concat(layer.name, "-").concat(layer.text)
11544
- }, /*#__PURE__*/React.createElement("div", {
11545
- key: "".concat(serviceId, "-").concat(layer.name),
11546
- className: classes.layerRow,
11547
- "data-testid": "layerListLayerRow"
11548
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
11549
- className: classes.layerText
11550
- }, layer.text), /*#__PURE__*/React.createElement("div", null, layer["abstract"] ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
11551
- className: "".concat(classes.layerName, " ").concat(classes.layerNameMaxWidth)
11552
- }, layer.name), /*#__PURE__*/React.createElement("div", {
11553
- className: classes.layerAbstract,
11554
- "data-testid": "layerAbstract"
11555
- }, layer["abstract"])) : /*#__PURE__*/React.createElement("div", {
11556
- className: classes.layerName
11557
- }, layer.name))), /*#__PURE__*/React.createElement("div", {
11558
- className: classes.layerButton
11559
- }, /*#__PURE__*/React.createElement(LayerAddRemoveButton, {
11495
+ return /*#__PURE__*/React.createElement(LayerListRow, {
11496
+ key: layer.name,
11560
11497
  layer: layer,
11561
11498
  layerIndex: layerIndex,
11562
11499
  serviceId: serviceId,
11563
11500
  addLayer: addLayer,
11564
11501
  deleteLayer: deleteLayer,
11565
11502
  mapLayers: mapLayers
11566
- }))));
11503
+ });
11567
11504
  });
11568
11505
  })));
11569
11506
  };
@@ -11697,10 +11634,10 @@ var ServiceChip = function ServiceChip(_ref) {
11697
11634
  tabIndex: 0,
11698
11635
  "data-testid": all ? 'serviceChipAll' : 'serviceChip',
11699
11636
  onClick: function onClick() {
11700
- return toggleChip(all ? 'all' : service && service.service);
11637
+ return toggleChip(all ? 'all' : service && service.serviceUrl);
11701
11638
  },
11702
11639
  onKeyPress: function onKeyPress() {
11703
- return toggleChip(all ? 'all' : service && service.service);
11640
+ return toggleChip(all ? 'all' : service && service.serviceUrl);
11704
11641
  },
11705
11642
  sx: style
11706
11643
  }, service ? service.name : 'All');
@@ -11918,13 +11855,14 @@ var ServiceList = function ServiceList(_ref4) {
11918
11855
  key: "All",
11919
11856
  all: true,
11920
11857
  isEnabled: isAllEnabled
11921
- }), Object.keys(services).map(function (service) {
11858
+ }), Object.keys(services).map(function (serviceId) {
11922
11859
  var _a;
11923
11860
 
11861
+ var service = services[serviceId];
11924
11862
  return /*#__PURE__*/React.createElement(ServiceChipConnect, {
11925
- key: services[service].id,
11926
- service: services[service],
11927
- isEnabled: (_a = activeServices[service]) === null || _a === void 0 ? void 0 : _a.enabled
11863
+ key: serviceId,
11864
+ service: service,
11865
+ isEnabled: (_a = activeServices[service.serviceUrl]) === null || _a === void 0 ? void 0 : _a.enabled
11928
11866
  });
11929
11867
  })), layerSelectWidth + margin < width && /*#__PURE__*/React.createElement(ChevronRight, {
11930
11868
  className: classes.scrollArrowRight,
@@ -12058,7 +11996,7 @@ var ServiceOptionsDialog = function ServiceOptionsDialog(_ref) {
12058
11996
  }, /*#__PURE__*/React.createElement(Tooltip, {
12059
11997
  title: "Edit Service"
12060
11998
  }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(IconButton, {
12061
- disabled: isDisabled(service.service),
11999
+ disabled: isDisabled(service.serviceUrl),
12062
12000
  "data-testid": "openEditServiceButton",
12063
12001
  size: "large"
12064
12002
  }, /*#__PURE__*/React.createElement(SvgIcon, null, /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("path", {
@@ -12068,9 +12006,9 @@ var ServiceOptionsDialog = function ServiceOptionsDialog(_ref) {
12068
12006
  title: "Delete Service"
12069
12007
  }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(IconButton, {
12070
12008
  size: "large",
12071
- disabled: isDisabled(service.service),
12009
+ disabled: isDisabled(service.serviceUrl),
12072
12010
  onClick: function onClick() {
12073
- return mapStoreRemoveService(service.service);
12011
+ return mapStoreRemoveService(service.serviceUrl);
12074
12012
  },
12075
12013
  "data-testid": "removeServiceButton"
12076
12014
  }, /*#__PURE__*/React.createElement(SvgIcon, null, /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("path", {
@@ -12755,13 +12693,12 @@ var LayerSelectConnect = function LayerSelectConnect(_ref) {
12755
12693
  }, [dispatch]);
12756
12694
  React.useEffect(function () {
12757
12695
  if (isOpenInStore && preloadedServices && preloadedServices.length > 0) {
12758
- preloadedServices.forEach(function (service) {
12696
+ mergePresetsAndUserAddedServices(preloadedServices, getUserAddedServices()).forEach(function (service) {
12759
12697
  getLayersFlattenedFromService(service.url).then(function (layers) {
12760
12698
  if (isMounted.current) {
12761
12699
  serviceSetLayers$1({
12762
- id: service.id,
12763
12700
  name: service.name,
12764
- service: service.url,
12701
+ serviceUrl: service.url,
12765
12702
  layers: layers,
12766
12703
  isUserAddedService: false
12767
12704
  });
@@ -12821,7 +12758,9 @@ var LayerManagerConnect = function LayerManagerConnect(_ref) {
12821
12758
  _ref$showTitle = _ref.showTitle,
12822
12759
  showTitle = _ref$showTitle === void 0 ? false : _ref$showTitle,
12823
12760
  _ref$layerSelect = _ref.layerSelect,
12824
- layerSelect = _ref$layerSelect === void 0 ? false : _ref$layerSelect;
12761
+ layerSelect = _ref$layerSelect === void 0 ? false : _ref$layerSelect,
12762
+ _ref$leftComponent = _ref.leftComponent,
12763
+ leftComponent = _ref$leftComponent === void 0 ? null : _ref$leftComponent;
12825
12764
  var dispatch = useDispatch();
12826
12765
  var isOpenInStore = useSelector(function (store) {
12827
12766
  return getisDialogOpen(store, 'layerManager');
@@ -12890,8 +12829,11 @@ var LayerManagerConnect = function LayerManagerConnect(_ref) {
12890
12829
  onMouseDown: onOrderDialog,
12891
12830
  order: uiOrder,
12892
12831
  source: uiSource,
12893
- layerSelect: layerSelect
12894
- }), layerSelect && /*#__PURE__*/React.createElement(LayerSelectConnect, null));
12832
+ layerSelect: layerSelect,
12833
+ leftComponent: leftComponent
12834
+ }), layerSelect && /*#__PURE__*/React.createElement(LayerSelectConnect, {
12835
+ preloadedServices: preloadedMapServices
12836
+ }));
12895
12837
  };
12896
12838
 
12897
12839
  /* *
@@ -13861,60 +13803,6 @@ var AutoUpdateButton = function AutoUpdateButton(_ref) {
13861
13803
  }, "AUTO")))))));
13862
13804
  };
13863
13805
 
13864
- /* *
13865
- * Licensed under the Apache License, Version 2.0 (the "License");
13866
- * you may not use this file except in compliance with the License.
13867
- * You may obtain a copy of the License at
13868
- *
13869
- * http://www.apache.org/licenses/LICENSE-2.0
13870
- *
13871
- * Unless required by applicable law or agreed to in writing, software
13872
- * distributed under the License is distributed on an "AS IS" BASIS,
13873
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13874
- * See the License for the specific language governing permissions and
13875
- * limitations under the License.
13876
- *
13877
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
13878
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
13879
- * */
13880
- var svgLoopPath = {
13881
- title: 'Loop',
13882
- src: 'M20.029 10.371c.24-.013.487.078.67.246.176.162.278.38.288.615.001 0 .22 1.941-1.458 3.79-1.124 1.224-2.718 1.844-4.74 1.844H6.96v1.288c0 .43-.284.654-.564.654-.14 0-.277-.05-.41-.148l-2.671-1.948c-.2-.147-.314-.36-.314-.587 0-.229.114-.443.315-.588l2.67-1.95c.134-.096.272-.145.41-.145.28 0 .563.224.563.653v1.116h7.832c1.417 0 2.59-.465 3.393-1.342 1.025-1.13 1.011-2.28.998-2.5-.023-.508.355-.954.842-.998zM17.605 5c.14 0 .277.05.41.148l2.671 1.947c.2.147.314.36.314.587 0 .23-.114.444-.315.589l-2.67 1.949c-.134.096-.272.146-.41.146-.28 0-.563-.224-.563-.654V8.597H9.21c-1.416 0-2.59.465-3.393 1.342-1.025 1.13-1.011 2.329-.999 2.558.024.508-.354.954-.841.998l-.05.002c-.228 0-.454-.09-.626-.248-.176-.163-.278-.38-.288-.614-.002 0-.227-1.993 1.458-3.849 1.124-1.224 2.718-1.845 4.74-1.845h7.83V5.654c0-.429.284-.654.564-.654z'
13883
- };
13884
- var svgLoopOffPath = {
13885
- title: 'Loop off',
13886
- src: 'M15.154 3.26l1.827.814-1.278 2.867h1.339V5.654c0-.429.283-.654.563-.654.14 0 .277.05.41.148l2.671 1.947c.2.147.314.36.314.587 0 .23-.114.444-.315.589l-2.67 1.949c-.134.096-.272.146-.41.146-.28 0-.563-.224-.563-.654V8.597h-2.076l-2.944 6.613h2.768c1.328 0 2.442-.408 3.238-1.182l.155-.16c1.025-1.129 1.011-2.279.998-2.499-.023-.508.355-.954.842-.998.247-.013.493.078.676.246.176.162.278.38.288.615.001 0 .22 1.941-1.458 3.79-1.124 1.224-2.718 1.844-4.74 1.844h-3.504l-2.439 5.478-1.827-.813 2.077-4.666H6.958v1.29c0 .429-.283.653-.563.653-.14 0-.277-.05-.41-.148l-2.671-1.948c-.2-.147-.314-.36-.314-.587 0-.229.114-.443.315-.588l2.67-1.95c.134-.096.272-.145.41-.145.28 0 .563.224.563.653v1.116h2.875l2.944-6.614H9.21c-1.322 0-2.432.405-3.228 1.172l-.165.17c-1.025 1.13-1.011 2.329-.999 2.558.024.508-.354.954-.841.998l-.05.002c-.228 0-.454-.09-.626-.248-.176-.163-.278-.38-.288-.614-.002 0-.227-1.993 1.458-3.849 1.124-1.224 2.718-1.845 4.74-1.845h4.303l1.64-3.68z'
13887
- };
13888
-
13889
- var LoopButton = function LoopButton(_ref) {
13890
- var _ref$isLooping = _ref.isLooping,
13891
- isLooping = _ref$isLooping === void 0 ? true : _ref$isLooping,
13892
- _ref$isDisabled = _ref.isDisabled,
13893
- isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
13894
- _ref$onToggleLoop = _ref.onToggleLoop,
13895
- onToggleLoop = _ref$onToggleLoop === void 0 ? function () {
13896
- return null;
13897
- } : _ref$onToggleLoop;
13898
- var loopButtonPath = isLooping ? svgLoopOffPath : svgLoopPath;
13899
- return /*#__PURE__*/React.createElement(Tooltip, {
13900
- title: loopButtonPath.title
13901
- }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
13902
- onClick: function onClick() {
13903
- return onToggleLoop();
13904
- },
13905
- active: isLooping,
13906
- disabled: isDisabled,
13907
- "data-testid": "loopButton"
13908
- }, /*#__PURE__*/React.createElement(SvgIcon, null, /*#__PURE__*/React.createElement("rect", {
13909
- width: 24,
13910
- height: 24,
13911
- fill: "transparent"
13912
- }), /*#__PURE__*/React.createElement("path", {
13913
- "data-testid": isLooping ? 'loop-off-svg-path' : 'loop-svg-path',
13914
- d: loopButtonPath.src
13915
- })))));
13916
- };
13917
-
13918
13806
  var useStyles$g = makeStyles(function (theme) {
13919
13807
  return {
13920
13808
  speedButtonDiv: {
@@ -14342,7 +14230,6 @@ var OptionsPopOver = withStyles(function (theme) {
14342
14230
 
14343
14231
  var OptionsMenuButton = function OptionsMenuButton(_ref) {
14344
14232
  var autoUpdateBtn = _ref.autoUpdateBtn,
14345
- loopBtn = _ref.loopBtn,
14346
14233
  speedBtn = _ref.speedBtn,
14347
14234
  timeStepBtn = _ref.timeStepBtn;
14348
14235
 
@@ -14406,9 +14293,6 @@ var OptionsMenuButton = function OptionsMenuButton(_ref) {
14406
14293
  })), /*#__PURE__*/React.createElement(Grid, {
14407
14294
  item: true,
14408
14295
  xs: "auto"
14409
- }, loopBtn || /*#__PURE__*/React.createElement(LoopButton, null)), /*#__PURE__*/React.createElement(Grid, {
14410
- item: true,
14411
- xs: "auto"
14412
14296
  }, autoUpdateBtn || /*#__PURE__*/React.createElement(AutoUpdateButton, null)))));
14413
14297
  };
14414
14298
 
@@ -14497,7 +14381,6 @@ var useStyles$e = makeStyles({
14497
14381
 
14498
14382
  var TimeSliderButtons = function TimeSliderButtons(_ref) {
14499
14383
  var autoUpdateBtn = _ref.autoUpdateBtn,
14500
- loopBtn = _ref.loopBtn,
14501
14384
  optionsMenuBtn = _ref.optionsMenuBtn,
14502
14385
  playBtn = _ref.playBtn,
14503
14386
  speedBtn = _ref.speedBtn,
@@ -14508,7 +14391,7 @@ var TimeSliderButtons = function TimeSliderButtons(_ref) {
14508
14391
  "data-testid": "timeSliderButtons"
14509
14392
  }, matches ? /*#__PURE__*/React.createElement(Grid, {
14510
14393
  container: true,
14511
- spacing: 1,
14394
+ spacing: 2,
14512
14395
  className: classes.buttonContainerBig
14513
14396
  }, /*#__PURE__*/React.createElement(Grid, {
14514
14397
  item: true
@@ -14526,8 +14409,6 @@ var TimeSliderButtons = function TimeSliderButtons(_ref) {
14526
14409
  }
14527
14410
  })), /*#__PURE__*/React.createElement(Grid, {
14528
14411
  item: true
14529
- }, loopBtn || /*#__PURE__*/React.createElement(LoopButton, null)), /*#__PURE__*/React.createElement(Grid, {
14530
- item: true
14531
14412
  }, autoUpdateBtn || /*#__PURE__*/React.createElement(AutoUpdateButton, null)), /*#__PURE__*/React.createElement(Grid, {
14532
14413
  item: true
14533
14414
  }, playBtn || /*#__PURE__*/React.createElement(PlayButton, null))) : /*#__PURE__*/React.createElement(Grid, {
@@ -16608,14 +16489,14 @@ var TimeSlider = function TimeSlider(_ref) {
16608
16489
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
16609
16490
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
16610
16491
  * */
16611
- var connectRedux$6 = connect(function (store, props) {
16492
+ var connectRedux$5 = connect(function (store, props) {
16612
16493
  return {
16613
16494
  isAutoUpdating: isAutoUpdating(store, props.mapId)
16614
16495
  };
16615
16496
  }, {
16616
16497
  toggleAutoUpdate: toggleAutoUpdate
16617
16498
  });
16618
- var AutoUpdateButtonConnectComponent = connectRedux$6(function (_ref) {
16499
+ var AutoUpdateButtonConnectComponent = connectRedux$5(function (_ref) {
16619
16500
  var mapId = _ref.mapId,
16620
16501
  isAutoUpdating = _ref.isAutoUpdating,
16621
16502
  toggleAutoUpdate = _ref.toggleAutoUpdate;
@@ -16633,54 +16514,7 @@ var AutoUpdateButtonConnectComponent = connectRedux$6(function (_ref) {
16633
16514
  disabled: false
16634
16515
  });
16635
16516
  });
16636
- var AutoUpdateButtonConnect = connectRedux$6(AutoUpdateButtonConnectComponent);
16637
-
16638
- /* *
16639
- * Licensed under the Apache License, Version 2.0 (the "License");
16640
- * you may not use this file except in compliance with the License.
16641
- * You may obtain a copy of the License at
16642
- *
16643
- * http://www.apache.org/licenses/LICENSE-2.0
16644
- *
16645
- * Unless required by applicable law or agreed to in writing, software
16646
- * distributed under the License is distributed on an "AS IS" BASIS,
16647
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16648
- * See the License for the specific language governing permissions and
16649
- * limitations under the License.
16650
- *
16651
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
16652
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
16653
- * */
16654
- var connectRedux$5 = connect(function (store, props) {
16655
- return {
16656
- isLooping: isLooping(store, props.mapId)
16657
- };
16658
- }, {
16659
- mapToggleLoop: toggleLoop
16660
- });
16661
- var LoopButtonConnect = connectRedux$5(function (_ref) {
16662
- var mapId = _ref.mapId,
16663
- _ref$isLooping = _ref.isLooping,
16664
- isLooping = _ref$isLooping === void 0 ? true : _ref$isLooping,
16665
- _ref$isDisabled = _ref.isDisabled,
16666
- isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
16667
- mapToggleLoop = _ref.mapToggleLoop;
16668
-
16669
- var onMapToggleLoop = function onMapToggleLoop() {
16670
- mapToggleLoop({
16671
- mapId: mapId,
16672
- shouldLoop: !isLooping
16673
- });
16674
- };
16675
-
16676
- return /*#__PURE__*/React__default.createElement(LoopButton, {
16677
- isLooping: isLooping,
16678
- isDisabled: isDisabled,
16679
- onToggleLoop: function onToggleLoop() {
16680
- onMapToggleLoop();
16681
- }
16682
- });
16683
- });
16517
+ var AutoUpdateButtonConnect = connectRedux$5(AutoUpdateButtonConnectComponent);
16684
16518
 
16685
16519
  /* *
16686
16520
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -16811,9 +16645,6 @@ var OptionsMenuButtonConnect = function OptionsMenuButtonConnect(_ref) {
16811
16645
  autoUpdateBtn: /*#__PURE__*/React.createElement(AutoUpdateButtonConnect, {
16812
16646
  mapId: mapId
16813
16647
  }),
16814
- loopBtn: /*#__PURE__*/React.createElement(LoopButtonConnect, {
16815
- mapId: mapId
16816
- }),
16817
16648
  speedBtn: /*#__PURE__*/React.createElement(SpeedButtonConnect, {
16818
16649
  mapId: mapId
16819
16650
  }),
@@ -16917,9 +16748,6 @@ var TimeSliderButtonsConnect = function TimeSliderButtonsConnect(_ref) {
16917
16748
  autoUpdateBtn: /*#__PURE__*/React.createElement(AutoUpdateButtonConnect, {
16918
16749
  mapId: mapId
16919
16750
  }),
16920
- loopBtn: /*#__PURE__*/React.createElement(LoopButtonConnect, {
16921
- mapId: mapId
16922
- }),
16923
16751
  optionsMenuBtn: /*#__PURE__*/React.createElement(OptionsMenuButtonConnect, {
16924
16752
  mapId: mapId
16925
16753
  }),
@@ -23576,4 +23404,55 @@ var CoreThemeStoreProvider = function CoreThemeStoreProvider(_ref2) {
23576
23404
  }, children)));
23577
23405
  };
23578
23406
 
23579
- export { ConfigurableConnectedMap, ConfigurableMapWithSliderConnect, CoreThemeProvider, CoreThemeStoreProvider, HarmRefTimePreset, HarmonieTempAndPrecipPreset, LayerManagerConnect, LayerManagerMapButtonConnect, Legend, LegendConnect, LegendMapButtonConnect, MapControls, MapView, MapViewConnect, MapViewLayer, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, ReactMapView, ReactMapViewLayer, SyncGroupViewerConnect, index as SyncGroups, TimeSliderConnect, TooltipSelect, ZoomControlConnect, ZoomControls, componentsLookUp, coreModuleConfig, dateFormat, defaultConfigurations, filterBaseLayers, filterBbox, filterDimensions, filterMapLayers, filterMapPresets, filterNonTimeDimensions, filterServices, filterSrs, generateLayerId, generateMapId, generateTimesliderId, getFirstTimeStepForLayerId, getInitialPresets, getLastTimeStepForLayerId, getNextTimeStepForLayerId, getPreviousTimeStepForLayerId, getWMJSDimensionForLayerAndDimension, getWMJSMapById, getWMJSTimeDimensionForLayerId, getWMLayerById, reducer$6 as layerReducer, makeMapPreset, actions$3 as mapActions, constants as mapConstants, moduleConfig as mapModuleConfig, selectors$1 as mapSelectors, types$2 as mapTypes, utils as mapUtils, publicLayers, publicServices, registerWMJSMap, registerWMLayer, store, actions as syncGroupActions, synchronizationGroupConfig as synchronizationGroupModuleConfig, testLayers, actions$2 as uiActions, uiModuleConfig, selectors as uiSelectors, types$1 as uiTypes, useStyles$3 as useStyles };
23407
+ /* *
23408
+ * Licensed under the Apache License, Version 2.0 (the "License");
23409
+ * you may not use this file except in compliance with the License.
23410
+ * You may obtain a copy of the License at
23411
+ *
23412
+ * http://www.apache.org/licenses/LICENSE-2.0
23413
+ *
23414
+ * Unless required by applicable law or agreed to in writing, software
23415
+ * distributed under the License is distributed on an "AS IS" BASIS,
23416
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23417
+ * See the License for the specific language governing permissions and
23418
+ * limitations under the License.
23419
+ *
23420
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
23421
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
23422
+ * */
23423
+ var MapWarningProperties = function MapWarningProperties(_ref) {
23424
+ var selectedFeatureProperties = _ref.selectedFeatureProperties;
23425
+ return /*#__PURE__*/React__default.createElement("div", {
23426
+ "data-testid": "map-warning-properties",
23427
+ style: {
23428
+ width: '100%',
23429
+ height: '15%',
23430
+ marginTop: '30px',
23431
+ marginLeft: '100px',
23432
+ position: 'relative',
23433
+ zIndex: 10000,
23434
+ backgroundColor: '#CCCCCCC0',
23435
+ padding: '0px 20px 20px',
23436
+ overflow: 'auto',
23437
+ fontSize: '11px'
23438
+ }
23439
+ }, /*#__PURE__*/React__default.createElement("h1", {
23440
+ "data-testid": "map-warning-properties-title"
23441
+ }, selectedFeatureProperties.country), selectedFeatureProperties.details[0].event && /*#__PURE__*/React__default.createElement("pre", {
23442
+ "data-testid": "map-warning-properties-row"
23443
+ }, "Event: ", selectedFeatureProperties.details[0].event), selectedFeatureProperties.details[0].sent && /*#__PURE__*/React__default.createElement("pre", {
23444
+ "data-testid": "map-warning-properties-row"
23445
+ }, "Sent:", ' ', moment.utc(selectedFeatureProperties.details[0].sent).format('DD MMM YYYY, HH:mm'), ' ', "UTC"), selectedFeatureProperties.details[0].expires && /*#__PURE__*/React__default.createElement("pre", {
23446
+ "data-testid": "map-warning-properties-row"
23447
+ }, "Expires:", ' ', moment.utc(selectedFeatureProperties.details[0].expires).format('DD MMM YYYY, HH:mm'), ' ', "UTC"), selectedFeatureProperties.details[0].web && /*#__PURE__*/React__default.createElement("pre", {
23448
+ "data-testid": "map-warning-properties-row"
23449
+ }, "Web: ", selectedFeatureProperties.details[0].web), selectedFeatureProperties.details[0].sender && /*#__PURE__*/React__default.createElement("pre", {
23450
+ "data-testid": "map-warning-properties-row"
23451
+ }, "Sender: ", selectedFeatureProperties.details[0].sender), selectedFeatureProperties.details[0].identifier && /*#__PURE__*/React__default.createElement("pre", {
23452
+ "data-testid": "map-warning-properties-row"
23453
+ }, "Identifier: ", selectedFeatureProperties.details[0].identifier), selectedFeatureProperties.details[0].area && /*#__PURE__*/React__default.createElement("pre", {
23454
+ "data-testid": "map-warning-properties-row"
23455
+ }, "area: ", selectedFeatureProperties.details[0].area));
23456
+ };
23457
+
23458
+ export { ConfigurableConnectedMap, ConfigurableMapWithSliderConnect, CoreThemeProvider, CoreThemeStoreProvider, HarmRefTimePreset, HarmonieTempAndPrecipPreset, LayerManagerConnect, LayerManagerMapButtonConnect, Legend, LegendConnect, LegendMapButtonConnect, MapControls, MapView, MapViewConnect, MapViewLayer, MapWarningProperties, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, ReactMapView, ReactMapViewLayer, SyncGroupViewerConnect, index as SyncGroups, TimeSliderConnect, ZoomControlConnect, ZoomControls, componentsLookUp, coreModuleConfig, dateFormat, defaultConfigurations, filterBaseLayers, filterBbox, filterDimensions, filterMapLayers, filterMapPresets, filterNonTimeDimensions, filterServices, filterSrs, generateLayerId, generateMapId, generateServiceId, generateTimeSeriesId, generateTimesliderId, getFirstTimeStepForLayerId, getInitialPresets, getLastTimeStepForLayerId, getNextTimeStepForLayerId, getPreviousTimeStepForLayerId, getWMJSDimensionForLayerAndDimension, getWMJSMapById, getWMJSTimeDimensionForLayerId, getWMLayerById, reducer$6 as layerReducer, makeMapPreset, actions$3 as mapActions, constants as mapConstants, moduleConfig as mapModuleConfig, selectors$1 as mapSelectors, types$2 as mapTypes, utils as mapUtils, publicLayers, publicServices, registerWMJSMap, registerWMLayer, store, actions as syncGroupActions, synchronizationGroupConfig as synchronizationGroupModuleConfig, synchronizationGroupConfig as synchronizationGroupsConfig, testLayers, actions$2 as uiActions, uiModuleConfig, selectors as uiSelectors, types$1 as uiTypes, useStyles$3 as useStyles };