@opengeoweb/core 2.2.0 → 2.2.1

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 (51) hide show
  1. package/index.esm.js +2154 -1200
  2. package/index.umd.js +2209 -1217
  3. package/lib/components/ComponentsLookUp/componentsLookUp.d.ts +3 -3
  4. package/lib/components/CustomToggleButton/CustomToggleButton.d.ts +9 -0
  5. package/lib/components/{ToggleIconButton/ToggleIconButton.spec.d.ts → CustomToggleButton/CustomToggleButton.spec.d.ts} +0 -0
  6. package/lib/components/CustomToggleButton/CustomToggleButton.stories.d.ts +13 -0
  7. package/lib/components/LayerManager/LayerSelect/KeywordFilterResults/KeywordFilterResults.d.ts +1 -3
  8. package/lib/components/LayerManager/LayerSelect/KeywordFilterResults/KeywordFilterResultsListItem.d.ts +4 -5
  9. package/lib/components/LayerManager/LayerSelect/KeywordFilterResults/KeywordFilterResultsListItemConnect.d.ts +6 -0
  10. package/lib/components/LayerManager/LayerSelect/KeywordFilterResults/KeywordFilterResultsListItemConnect.spec.d.ts +1 -0
  11. package/lib/components/LayerManager/LayerSelect/KeywordFilterResults/KeywordFilterSelectAllSwitchConnect.d.ts +3 -0
  12. package/lib/components/LayerManager/LayerSelect/KeywordFilterResults/KeywordFilterSelectAllSwitchConnect.spec.d.ts +1 -0
  13. package/lib/components/LayerManager/LayerSelect/LayerList/LayerList.d.ts +2 -2
  14. package/lib/components/LayerManager/LayerSelect/LayerList/LayerListUtils.d.ts +1 -2
  15. package/lib/components/LayerManager/LayerSelect/ServiceOptionsDialog/ServiceOptionsDialog.d.ts +4 -1
  16. package/lib/components/LayerManager/LayerSelect/ServiceOptionsDialog/ServiceOptionsDialogConnect.d.ts +3 -0
  17. package/lib/components/LayerManager/LayerSelect/ServiceOptionsDialog/ServiceOptionsDialogConnect.spec.d.ts +1 -0
  18. package/lib/components/LayerManager/LayerSelect/ServicePopup/ServicePopup.d.ts +3 -0
  19. package/lib/components/LayerManager/LayerSelect/ServicePopup/ServicePopupConnect.d.ts +10 -0
  20. package/lib/components/MapControls/MapControlButton.d.ts +2 -2
  21. package/lib/components/MultiMapView/HarmoniePresets/HarmRefTimePreset.d.ts +2 -2
  22. package/lib/components/MultiMapView/HarmoniePresets/HarmonieTempAndPrecipPreset.d.ts +4 -4
  23. package/lib/components/MultiMapView/MultiMapViewConnect.d.ts +2 -1
  24. package/lib/components/MultiMapView/storyUtils/mapPresets.d.ts +81 -0
  25. package/lib/components/ToolButton/ToolButton.d.ts +12 -0
  26. package/lib/components/ToolButton/ToolButton.spec.d.ts +1 -0
  27. package/lib/components/{ToggleIconButton/ToggleIconButton.stories.d.ts → ToolButton/ToolButton.stories.d.ts} +2 -2
  28. package/lib/components/ToolButton/index.d.ts +1 -0
  29. package/lib/index.d.ts +2 -0
  30. package/lib/store/generic/synchronizationGroups/types.d.ts +1 -0
  31. package/lib/store/layerSelect/actions.d.ts +4 -2
  32. package/lib/store/layerSelect/constants.d.ts +3 -1
  33. package/lib/store/layerSelect/sagas.d.ts +1 -0
  34. package/lib/store/layerSelect/selectors.d.ts +59 -9
  35. package/lib/store/layerSelect/types.d.ts +33 -12
  36. package/lib/store/mapStore/layers/selectors.d.ts +24 -12
  37. package/lib/store/mapStore/map/selectors.d.ts +38 -26
  38. package/lib/store/mapStore/service/actions.d.ts +8 -1
  39. package/lib/store/mapStore/service/constants.d.ts +1 -0
  40. package/lib/store/mapStore/service/selectors.d.ts +34 -6
  41. package/lib/store/mapStore/service/types.d.ts +9 -2
  42. package/lib/store/ui/selectors.d.ts +2 -2
  43. package/lib/store/utils.d.ts +6 -0
  44. package/lib/utils/defaultConfigurations.d.ts +3 -21
  45. package/lib/utils/getCapabilities.d.ts +1 -0
  46. package/lib/utils/jsonPresetFilter.d.ts +10 -0
  47. package/lib/utils/jsonPresetFilter.spec.d.ts +1 -0
  48. package/lib/utils/types.d.ts +52 -0
  49. package/package.json +5 -5
  50. package/lib/components/ToggleIconButton/ToggleIconButton.d.ts +0 -12
  51. package/lib/components/ToggleIconButton/index.d.ts +0 -1
package/index.esm.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { createSelector } from 'reselect';
2
- import _, { isEqual, debounce } from 'lodash';
3
2
  import moment from 'moment';
3
+ import _, { isEqual, debounce } from 'lodash';
4
4
  import * as React from 'react';
5
5
  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, 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, Checkbox, SvgIcon, ListItemIcon, Menu, FormControl, ToggleButton, InputAdornment, Switch, ListItemSecondaryAction, Slider, FormControlLabel, Popover, useMediaQuery, useTheme, SliderThumb } from '@mui/material';
9
+ import { Tooltip, Select, Grid, InputLabel, IconButton, Paper, Box, Typography, CircularProgress, List, ListSubheader, ListItem, ListItemText, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, DialogActions, Button, MenuItem, Checkbox, SvgIcon, ListItemIcon, Menu, FormControl, ToggleButton, InputAdornment, ListItemSecondaryAction, Switch, Slider, FormControlLabel, Popover, useMediaQuery, useTheme, SliderThumb } from '@mui/material';
10
10
  import makeStyles from '@mui/styles/makeStyles';
11
11
  import { connect, useDispatch, useSelector, Provider } from 'react-redux';
12
12
  import { sliderStyles, CustomSlider, ToolContainerDraggable, useIsMounted } from '@opengeoweb/shared';
@@ -657,6 +657,7 @@ var onUpdateLayerInformation = function onUpdateLayerInformation(payload) {
657
657
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
658
658
  * */
659
659
  var MAP_SERVICES_SET_LAYERS = 'MAP_SERVICES_SET_LAYERS';
660
+ var MAP_SERVICES_REMOVE_SERVICE = 'MAP_SERVICES_REMOVE_SERVICE';
660
661
 
661
662
  /* *
662
663
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -687,6 +688,19 @@ var serviceSetLayers = function serviceSetLayers(payload) {
687
688
  payload: payload
688
689
  };
689
690
  };
691
+ /**
692
+ * Action mapStoreRemoveService is used in ServiceOptionsDialogConnect after clicking the remove button. Action layerSelectServiceRemoved is used automatically after calling the mapStoreRemoveService action
693
+ *
694
+ * Example: mapStoreRemoveService({serviceUrl: someService})
695
+ * @param {object} payload consisting of serviceUrl: string
696
+ */
697
+
698
+ var mapStoreRemoveService = function mapStoreRemoveService(payload) {
699
+ return {
700
+ type: MAP_SERVICES_REMOVE_SERVICE,
701
+ payload: payload
702
+ };
703
+ };
690
704
 
691
705
  /* *
692
706
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -745,7 +759,8 @@ var actions$3 = /*#__PURE__*/Object.freeze({
745
759
  addAvailableBaseLayer: addAvailableBaseLayer,
746
760
  addAvailableBaseLayers: addAvailableBaseLayers,
747
761
  onUpdateLayerInformation: onUpdateLayerInformation,
748
- serviceSetLayers: serviceSetLayers
762
+ serviceSetLayers: serviceSetLayers,
763
+ mapStoreRemoveService: mapStoreRemoveService
749
764
  });
750
765
 
751
766
  /* *
@@ -778,6 +793,29 @@ var Scale;
778
793
  Scale[Scale["DataScale"] = 8] = "DataScale";
779
794
  })(Scale || (Scale = {}));
780
795
 
796
+ /* *
797
+ * Licensed under the Apache License, Version 2.0 (the "License");
798
+ * you may not use this file except in compliance with the License.
799
+ * You may obtain a copy of the License at
800
+ *
801
+ * http://www.apache.org/licenses/LICENSE-2.0
802
+ *
803
+ * Unless required by applicable law or agreed to in writing, software
804
+ * distributed under the License is distributed on an "AS IS" BASIS,
805
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
806
+ * See the License for the specific language governing permissions and
807
+ * limitations under the License.
808
+ *
809
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
810
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
811
+ * */
812
+ var selectorMemoizationOptions = {
813
+ memoizeOptions: {
814
+ maxSize: 1000,
815
+ resultEqualityCheck: isEqual
816
+ }
817
+ };
818
+
781
819
  /* *
782
820
  * Licensed under the Apache License, Version 2.0 (the "License");
783
821
  * you may not use this file except in compliance with the License.
@@ -1023,7 +1061,7 @@ var getLayerById = function getLayerById(store, layerId) {
1023
1061
 
1024
1062
  var getLayersById = createSelector(layerStore, function (store) {
1025
1063
  return store ? store.byId : null;
1026
- });
1064
+ }, selectorMemoizationOptions);
1027
1065
  /**
1028
1066
  * Retrieves all layerIds
1029
1067
  *
@@ -1034,7 +1072,7 @@ var getLayersById = createSelector(layerStore, function (store) {
1034
1072
 
1035
1073
  var getLayersIds = createSelector(layerStore, function (store) {
1036
1074
  return store ? store.allIds : [];
1037
- });
1075
+ }, selectorMemoizationOptions);
1038
1076
  /**
1039
1077
  * Retrieves all layers (including base layers and overlayers)
1040
1078
  *
@@ -1047,7 +1085,7 @@ var getAllLayers = createSelector(getLayersIds, getLayersById, function (ids, la
1047
1085
  return ids.map(function (layerId) {
1048
1086
  return layers[layerId];
1049
1087
  });
1050
- });
1088
+ }, selectorMemoizationOptions);
1051
1089
  /**
1052
1090
  * Retrieves all layers that aren't base layers and aren't overlayers
1053
1091
  *
@@ -1060,7 +1098,7 @@ var getLayers = createSelector(getAllLayers, function (layers) {
1060
1098
  return layers.filter(function (layer) {
1061
1099
  return layer.layerType !== LayerType.baseLayer && layer.layerType !== LayerType.overLayer;
1062
1100
  });
1063
- });
1101
+ }, selectorMemoizationOptions);
1064
1102
  /**
1065
1103
  * Retrieves all baselayers
1066
1104
  *
@@ -1073,7 +1111,7 @@ var getBaseLayers = createSelector(getAllLayers, function (layers) {
1073
1111
  return layers.filter(function (layer) {
1074
1112
  return layer.layerType === LayerType.baseLayer;
1075
1113
  });
1076
- });
1114
+ }, selectorMemoizationOptions);
1077
1115
  /**
1078
1116
  * Retrieves all overLayers
1079
1117
  *
@@ -1086,7 +1124,7 @@ var getOverLayers = createSelector(getAllLayers, function (layers) {
1086
1124
  return layers.filter(function (layer) {
1087
1125
  return layer.layerType === LayerType.overLayer;
1088
1126
  });
1089
- });
1127
+ }, selectorMemoizationOptions);
1090
1128
  /**
1091
1129
  * Gets dimensions of the passed layer
1092
1130
  *
@@ -1098,7 +1136,7 @@ var getOverLayers = createSelector(getAllLayers, function (layers) {
1098
1136
 
1099
1137
  var getLayerDimensions = createSelector(getLayerById, function (layer) {
1100
1138
  return layer && layer.dimensions ? layer.dimensions : [];
1101
- });
1139
+ }, selectorMemoizationOptions);
1102
1140
  /**
1103
1141
  * Gets dimensions of the passed layer, excluding the time dimension
1104
1142
  *
@@ -1110,21 +1148,21 @@ var getLayerDimensions = createSelector(getLayerById, function (layer) {
1110
1148
 
1111
1149
  var getLayerNonTimeDimensions = createSelector(getLayerDimensions, function (dimensions) {
1112
1150
  return filterNonTimeDimensions(dimensions);
1113
- });
1151
+ }, selectorMemoizationOptions);
1114
1152
  /**
1115
1153
  * Gets time dimension of the passed layer
1116
1154
  *
1117
1155
  * Example: timeDimension = getLayerTimeDimension(store, 'layerId_1')
1118
1156
  * @param {object} store store: object - object from which the layers state will be extracted
1119
1157
  * @param {string} layerId layerId: string - Id of the layer
1120
- * @returns {array} returnType: object - object of layer time dimension
1158
+ * @returns {object} returnType: object - object of layer time dimension
1121
1159
  */
1122
1160
 
1123
1161
  var getLayerTimeDimension = createSelector(getLayerDimensions, function (dimensions) {
1124
1162
  return dimensions && dimensions.length ? dimensions.find(function (dimension) {
1125
1163
  return dimension.name === 'time';
1126
- }) : [];
1127
- });
1164
+ }) : {};
1165
+ }, selectorMemoizationOptions);
1128
1166
  /**
1129
1167
  * Gets specified dimension of the passed layer
1130
1168
  *
@@ -1141,7 +1179,7 @@ var getLayerDimension = createSelector(getLayerDimensions, function (_store, _la
1141
1179
  return dimensions && dimensions.length ? dimensions.find(function (dimension) {
1142
1180
  return dimension.name === dimensionName;
1143
1181
  }) : {};
1144
- });
1182
+ }, selectorMemoizationOptions);
1145
1183
  /**
1146
1184
  * Gets opacity of the passed layer
1147
1185
  *
@@ -1223,9 +1261,11 @@ var getLayerStatus = createSelector(getLayerById, function (layer) {
1223
1261
  * @returns {array} returnType: array - array containing all available base layers
1224
1262
  */
1225
1263
 
1226
- var getAvailableBaseLayersForMap = function getAvailableBaseLayersForMap(store, mapId) {
1227
- if (store && store.layers && store.layers.availableBaseLayers) {
1228
- var availableBaseLayers = store.layers.availableBaseLayers;
1264
+ var getAvailableBaseLayersForMap = createSelector(layerStore, function (_store, _mapId) {
1265
+ return _mapId;
1266
+ }, function (layerStore, mapId) {
1267
+ if (layerStore && layerStore.availableBaseLayers) {
1268
+ var availableBaseLayers = layerStore.availableBaseLayers;
1229
1269
  return availableBaseLayers.allIds.reduce(function (list, layerId) {
1230
1270
  if (availableBaseLayers.byId[layerId].mapId === mapId) {
1231
1271
  return list.concat(availableBaseLayers.byId[layerId]);
@@ -1236,7 +1276,7 @@ var getAvailableBaseLayersForMap = function getAvailableBaseLayersForMap(store,
1236
1276
  }
1237
1277
 
1238
1278
  return [];
1239
- };
1279
+ }, selectorMemoizationOptions);
1240
1280
 
1241
1281
  function _typeof(obj) {
1242
1282
  "@babel/helpers - typeof";
@@ -2087,14 +2127,6 @@ var utils = /*#__PURE__*/Object.freeze({
2087
2127
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
2088
2128
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
2089
2129
  * */
2090
- /* TODO:, move this to a right place https://gitlab.com/opengeoweb/opengeoweb/-/issues/1802 */
2091
-
2092
- var selectorMemoizationOptions = {
2093
- memoizeOptions: {
2094
- maxSize: 1000,
2095
- resultEqualityCheck: isEqual
2096
- }
2097
- };
2098
2130
  /**
2099
2131
  * Gets the map state by mapId
2100
2132
  *
@@ -2134,19 +2166,17 @@ var getAllMapIds = function getAllMapIds(store) {
2134
2166
  * @returns {object} object containing map state (isAnimating, bbox, baseLayers, layers etc.)
2135
2167
  */
2136
2168
 
2137
- var getFirstMap = function getFirstMap(store) {
2138
- if (store && store.webmap && store.webmap.allIds[0]) {
2139
- return store.webmap.byId[store.webmap.allIds[0]];
2140
- }
2141
-
2142
- return null;
2143
- };
2169
+ var getFirstMap = createSelector(getAllMapIds, function (store) {
2170
+ return store && store.webmap && store.webmap.byId ? store.webmap.byId : {};
2171
+ }, function (allMapIds, mapsById) {
2172
+ return allMapIds[0] && mapsById[allMapIds[0]] ? mapsById[allMapIds[0]] : null;
2173
+ }, selectorMemoizationOptions);
2144
2174
  /**
2145
2175
  * Gets the id of first map in store
2146
2176
  *
2147
2177
  * Example: getFirstMapId(store)
2148
- * @param {object} store store object from which the map state wll be extracted
2149
- * @returns {object} map id
2178
+ * @param {object} store store: object from which the map state wll be extracted
2179
+ * @returns {string} returnType:string - map id
2150
2180
  */
2151
2181
 
2152
2182
  var getFirstMapId = createSelector(getFirstMap, function (map) {
@@ -2157,7 +2187,7 @@ var getFirstMapId = createSelector(getFirstMap, function (map) {
2157
2187
  *
2158
2188
  * @param {object} store store: object - store object
2159
2189
  * @param {string} mapId mapId: string - Id of the map
2160
- * @returns {array} returnType:true if map is present
2190
+ * @returns {boolean} returnType:boolean - true if map is present
2161
2191
  */
2162
2192
 
2163
2193
  var getIsMapPresent = createSelector(function (store, mapId) {
@@ -2180,7 +2210,7 @@ var getIsMapPresent = createSelector(function (store, mapId) {
2180
2210
 
2181
2211
  var getLayerIds = createSelector(getMapById, function (store) {
2182
2212
  return store ? store.mapLayers : [];
2183
- });
2213
+ }, selectorMemoizationOptions);
2184
2214
  /**
2185
2215
  * Gets all layer states for a map
2186
2216
  *
@@ -2206,7 +2236,7 @@ var getMapLayers = createSelector(getLayerIds, getLayersById, function (layerIds
2206
2236
 
2207
2237
  var getMapBaseLayersIds = createSelector(getMapById, function (store) {
2208
2238
  return store ? store.baseLayers : [];
2209
- });
2239
+ }, selectorMemoizationOptions);
2210
2240
  /**
2211
2241
  * Gets all baselayers for a map
2212
2242
  *
@@ -2232,7 +2262,7 @@ var getMapBaseLayers = createSelector(getMapBaseLayersIds, getLayersById, functi
2232
2262
 
2233
2263
  var getMapOverLayersIds = createSelector(getMapById, function (store) {
2234
2264
  return store ? store.overLayers : [];
2235
- });
2265
+ }, selectorMemoizationOptions);
2236
2266
  /**
2237
2267
  * Gets all overLayers for a map
2238
2268
  *
@@ -2258,7 +2288,7 @@ var getMapOverLayers = createSelector(getMapOverLayersIds, getLayersById, functi
2258
2288
 
2259
2289
  var getMapDimensions = createSelector(getMapById, function (store) {
2260
2290
  return store ? store.dimensions : [];
2261
- });
2291
+ }, selectorMemoizationOptions);
2262
2292
  /**
2263
2293
  * Gets the map dimension requested
2264
2294
  *
@@ -2279,7 +2309,7 @@ var getMapDimension = createSelector(getMapById, function (_store, _mapId, dimen
2279
2309
  }
2280
2310
 
2281
2311
  return undefined;
2282
- });
2312
+ }, selectorMemoizationOptions);
2283
2313
  /**
2284
2314
  * Gets map srs
2285
2315
  *
@@ -2303,7 +2333,7 @@ var getSrs = createSelector(getMapById, function (store) {
2303
2333
 
2304
2334
  var getBbox = createSelector(getMapById, function (store) {
2305
2335
  return store ? store.bbox : {};
2306
- });
2336
+ }, selectorMemoizationOptions);
2307
2337
  /**
2308
2338
  * Gets if map is animating
2309
2339
  *
@@ -2393,7 +2423,7 @@ var getMapTimeSliderScale = createSelector(getMapById, function (store) {
2393
2423
  * Example: timeStep = getTimeStep(store, 'mapid_1')
2394
2424
  * @param {object} store store: object - store object
2395
2425
  * @param {string} mapId mapId: string - Id of the map
2396
- * @returns {object} returnType: number - time step as a number
2426
+ * @returns {number} returnType: number - time step as a number
2397
2427
  */
2398
2428
 
2399
2429
  var getMapTimeStep = createSelector(getMapById, function (store) {
@@ -2405,7 +2435,7 @@ var getMapTimeStep = createSelector(getMapById, function (store) {
2405
2435
  * Example: speed = getSpeed(store, 'mapid_1')
2406
2436
  * @param {object} store store: object - store object
2407
2437
  * @param {string} mapId mapId: string - Id of the map
2408
- * @returns {object} returnType: number - speed as a number
2438
+ * @returns {number} returnType: number - speed as a number
2409
2439
  */
2410
2440
 
2411
2441
  var getMapAnimationDelay = createSelector(getMapById, function (store) {
@@ -2417,7 +2447,7 @@ var getMapAnimationDelay = createSelector(getMapById, function (store) {
2417
2447
  * Example: centerTime = getCenterTime(store, 'mapid_1')
2418
2448
  * @param {object} store store: object - store object
2419
2449
  * @param {string} mapId mapId: string - Id of the map
2420
- * @returns {object} returnType: number - center time as a unix timestamp
2450
+ * @returns {number} returnType: number - center time as a unix timestamp
2421
2451
  */
2422
2452
 
2423
2453
  var getMapTimeSliderCenterTime = createSelector(getMapById, function (store) {
@@ -2429,7 +2459,7 @@ var getMapTimeSliderCenterTime = createSelector(getMapById, function (store) {
2429
2459
  * Example: secondsPerPx = getSecondsPerPx(store, 'mapid_1')
2430
2460
  * @param {object} store store: object - store object
2431
2461
  * @param {string} mapId mapId: string - Id of the map
2432
- * @returns {object} returnType: number - the number of seconds per pixel
2462
+ * @returns {number} returnType: number - the number of seconds per pixel
2433
2463
  */
2434
2464
 
2435
2465
  var getMapTimeSliderSecondsPerPx = createSelector(getMapById, function (store) {
@@ -2441,7 +2471,7 @@ var getMapTimeSliderSecondsPerPx = createSelector(getMapById, function (store) {
2441
2471
  * Example: dataScaleToSecondsPerPx = getMapTimeSliderDataScaleToSecondsPerPx(store, 'mapid_1')
2442
2472
  * @param {object} store store: object - store object
2443
2473
  * @param {string} mapId mapId: string - Id of the map
2444
- * @returns {object} returnType: number - the number of scaleto seconds pixel
2474
+ * @returns {number} returnType: number - the number of scaleto seconds pixel
2445
2475
  */
2446
2476
 
2447
2477
  var getMapTimeSliderDataScaleToSecondsPerPx = createSelector(getMapById, function (store) {
@@ -2492,14 +2522,14 @@ var getIsLayerActiveLayer = createSelector(getActiveLayerId, function (_store, _
2492
2522
  * Example const mapId = getMapIdFromLayerId(store 'layerId-A');
2493
2523
  * @param {object} store store: object - store object
2494
2524
  * @param {string} layerId layerId: string - Id of the layer
2495
- * @returns {string} returnType: the mapId, or null if not found
2525
+ * @returns {string} returnType: string - the mapId, or null if not found
2496
2526
  */
2497
2527
 
2498
2528
  var getMapIdFromLayerId = createSelector(function (store) {
2499
2529
  return store && store.webmap ? store.webmap : null;
2500
2530
  }, function (_store, layerId) {
2501
2531
  return layerId;
2502
- }, findMapIdFromLayerId);
2532
+ }, findMapIdFromLayerId, selectorMemoizationOptions);
2503
2533
  /**
2504
2534
  * Returns the layerId for given layerName
2505
2535
  *
@@ -2507,7 +2537,7 @@ var getMapIdFromLayerId = createSelector(function (store) {
2507
2537
  * @param {object} store store: object - store object
2508
2538
  * @param {string} mapId mapId: string - Id of the map
2509
2539
  * @param {string} layerId layerId: string - Id of the layer
2510
- * @returns {string} returnType: the layerId, or null if not found
2540
+ * @returns {string} returnType: string - the layerId, or null if not found
2511
2541
  */
2512
2542
 
2513
2543
  var getLayerIdByLayerName = createSelector(getMapLayers, function (_store, _mapId, layerName) {
@@ -2522,7 +2552,7 @@ var getLayerIdByLayerName = createSelector(getMapLayers, function (_store, _mapI
2522
2552
  }
2523
2553
 
2524
2554
  return null;
2525
- });
2555
+ }, selectorMemoizationOptions);
2526
2556
  /**
2527
2557
  * Returns the layerIndex in the map for given layerId
2528
2558
  *
@@ -2539,7 +2569,7 @@ var getLayerIndexByLayerId = createSelector(getMapLayers, function (_store, _map
2539
2569
  return layers.findIndex(function (layer) {
2540
2570
  return layer.id === layerId;
2541
2571
  });
2542
- });
2572
+ }, selectorMemoizationOptions);
2543
2573
  /**
2544
2574
  * Returns the Layer in the map for given layerIndex
2545
2575
  *
@@ -2558,7 +2588,7 @@ var getLayerByLayerIndex = createSelector(getMapLayers, function (_store, _mapId
2558
2588
  }
2559
2589
 
2560
2590
  return null;
2561
- });
2591
+ }, selectorMemoizationOptions);
2562
2592
  /**
2563
2593
  * Returns name of all unique dimensions present in all maps
2564
2594
  *
@@ -2581,7 +2611,7 @@ var getAllUniqueDimensions = createSelector(getAllMapIds, function (store) {
2581
2611
  }, list);
2582
2612
  return uniqueMapDims;
2583
2613
  }, []);
2584
- });
2614
+ }, selectorMemoizationOptions);
2585
2615
  /**
2586
2616
  * Returns the mapPinLocation for the current map
2587
2617
  *
@@ -2593,7 +2623,7 @@ var getAllUniqueDimensions = createSelector(getAllMapIds, function (store) {
2593
2623
 
2594
2624
  var getPinLocation = createSelector(getMapById, function (store) {
2595
2625
  return store ? store.mapPinLocation : undefined;
2596
- });
2626
+ }, selectorMemoizationOptions);
2597
2627
 
2598
2628
  /* *
2599
2629
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -2626,7 +2656,7 @@ var servicesStore = function servicesStore(store) {
2626
2656
 
2627
2657
  var getServiceIds = createSelector(servicesStore, function (serviceState) {
2628
2658
  return serviceState ? serviceState.allIds : [];
2629
- });
2659
+ }, selectorMemoizationOptions);
2630
2660
  /**
2631
2661
  * Gets map services
2632
2662
  *
@@ -2637,7 +2667,7 @@ var getServiceIds = createSelector(servicesStore, function (serviceState) {
2637
2667
 
2638
2668
  var getServices = createSelector(servicesStore, function (store) {
2639
2669
  return store ? store.byId : {};
2640
- });
2670
+ }, selectorMemoizationOptions);
2641
2671
  /**
2642
2672
  * Gets the service object by its url
2643
2673
  *
@@ -2654,19 +2684,19 @@ var getServiceByName = createSelector([servicesStore, function (state, serviceNa
2654
2684
  }
2655
2685
 
2656
2686
  return null;
2657
- });
2687
+ }, selectorMemoizationOptions);
2658
2688
  /**
2659
2689
  * Gets the layer from the store using the serviceUrl and layerName
2660
2690
  *
2661
2691
  * Example: layers = getLayersFromService(store, 'https://geoservices.knmi.nl/...')
2662
2692
  * @param {object} store store: object - object from which the layers state will be extracted
2663
2693
  * @param {string} serviceUrl serviceUrl: string - Url of the service where the layer belongs to
2664
- * @returns {arrayr} returnType: ServiceLayer[] - All layers within the service object.
2694
+ * @returns {array} returnType: ServiceLayer[] - All layers within the service object.
2665
2695
  */
2666
2696
 
2667
2697
  var getLayersFromService$1 = createSelector(getServiceByName, function (service) {
2668
2698
  return service && service.layers || null;
2669
- });
2699
+ }, selectorMemoizationOptions);
2670
2700
  /**
2671
2701
  * Gets the layer from the store using the serviceUrl and layerName
2672
2702
  *
@@ -2694,7 +2724,7 @@ var getLayerFromService = createSelector(function (store, serviceUrl) {
2694
2724
  }
2695
2725
 
2696
2726
  return layers[index];
2697
- });
2727
+ }, selectorMemoizationOptions);
2698
2728
  /**
2699
2729
  * Gets the layers stylelist from the servicestore using the serviceUrl and layerName
2700
2730
  *
@@ -2707,7 +2737,26 @@ var getLayerFromService = createSelector(function (store, serviceUrl) {
2707
2737
 
2708
2738
  var getLayerStyles = createSelector(getLayerFromService, function (layer) {
2709
2739
  return layer && layer.styles ? layer.styles : [];
2710
- });
2740
+ }, selectorMemoizationOptions);
2741
+ /**
2742
+ * Gets services and maps them into an array
2743
+ *
2744
+ * Example: services = getServices(store)
2745
+ * @param {object} store store: object - Store object
2746
+ * @returns {array} returnType: [] - array containing services
2747
+ */
2748
+
2749
+ var getServicesInArray = createSelector(servicesStore, function (store) {
2750
+ var services = store ? store.byId : {};
2751
+ var arrayOfServiceObjects = Object.keys(services).map(function (key) {
2752
+ return {
2753
+ id: services[key].id,
2754
+ name: services[key].name,
2755
+ service: services[key].service
2756
+ };
2757
+ });
2758
+ return arrayOfServiceObjects;
2759
+ }, selectorMemoizationOptions);
2711
2760
 
2712
2761
  /* *
2713
2762
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -2787,7 +2836,8 @@ var selectors = /*#__PURE__*/Object.freeze({
2787
2836
  getServiceByName: getServiceByName,
2788
2837
  getLayersFromService: getLayersFromService$1,
2789
2838
  getLayerFromService: getLayerFromService,
2790
- getLayerStyles: getLayerStyles
2839
+ getLayerStyles: getLayerStyles,
2840
+ getServicesInArray: getServicesInArray
2791
2841
  });
2792
2842
 
2793
2843
  /* *
@@ -2847,7 +2897,8 @@ var constants$1 = /*#__PURE__*/Object.freeze({
2847
2897
  WEBMAP_ADD_AVAILABLE_BASELAYER: WEBMAP_ADD_AVAILABLE_BASELAYER,
2848
2898
  WEBMAP_ADD_AVAILABLE_BASELAYERS: WEBMAP_ADD_AVAILABLE_BASELAYERS,
2849
2899
  WEBMAP_UPDATE_LAYER_INFO: WEBMAP_UPDATE_LAYER_INFO,
2850
- MAP_SERVICES_SET_LAYERS: MAP_SERVICES_SET_LAYERS
2900
+ MAP_SERVICES_SET_LAYERS: MAP_SERVICES_SET_LAYERS,
2901
+ MAP_SERVICES_REMOVE_SERVICE: MAP_SERVICES_REMOVE_SERVICE
2851
2902
  });
2852
2903
 
2853
2904
  /* *
@@ -3305,6 +3356,16 @@ function __rest(s, e) {
3305
3356
  t[p[i]] = s[p[i]];
3306
3357
  }
3307
3358
  return t;
3359
+ }
3360
+
3361
+ function __awaiter(thisArg, _arguments, P, generator) {
3362
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3363
+ return new (P || (P = Promise))(function (resolve, reject) {
3364
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
3365
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
3366
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
3367
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
3368
+ });
3308
3369
  }
3309
3370
 
3310
3371
  /* *
@@ -3971,6 +4032,11 @@ var reducer$4 = function reducer() {
3971
4032
  return;
3972
4033
  }
3973
4034
 
4035
+ if (!targetId) {
4036
+ console.warn("SYNCGROUPS_ADD_TARGET: targetId is not defined.");
4037
+ return;
4038
+ }
4039
+
3974
4040
  if (draft.groups.byId[groupId].targets.allIds.includes(targetId)) {
3975
4041
  return;
3976
4042
  }
@@ -4598,7 +4664,7 @@ var setServiceMetadata = function setServiceMetadata(wmLayer, mapId, webMapJSIns
4598
4664
 
4599
4665
  var _marked$4 = /*#__PURE__*/regeneratorRuntime.mark(setTimeSaga),
4600
4666
  _marked2$4 = /*#__PURE__*/regeneratorRuntime.mark(setBBoxSaga),
4601
- _marked3$3 = /*#__PURE__*/regeneratorRuntime.mark(layerActionsSaga),
4667
+ _marked3$4 = /*#__PURE__*/regeneratorRuntime.mark(layerActionsSaga),
4602
4668
  _marked4$2 = /*#__PURE__*/regeneratorRuntime.mark(addLayerActionsSaga),
4603
4669
  _marked5$1 = /*#__PURE__*/regeneratorRuntime.mark(deleteLayerActionsSaga),
4604
4670
  _marked6$1 = /*#__PURE__*/regeneratorRuntime.mark(moveLayerActionsSaga),
@@ -4708,7 +4774,7 @@ function layerActionsSaga(_ref3) {
4708
4774
  return _context3.stop();
4709
4775
  }
4710
4776
  }
4711
- }, _marked3$3);
4777
+ }, _marked3$4);
4712
4778
  }
4713
4779
  function addLayerActionsSaga(_ref4) {
4714
4780
  var payload, type, targets;
@@ -4948,7 +5014,7 @@ function rootSaga$4() {
4948
5014
 
4949
5015
  var _marked$3 = /*#__PURE__*/regeneratorRuntime.mark(updateSourceValueWhenLinkingComponentToGroupSaga),
4950
5016
  _marked2$3 = /*#__PURE__*/regeneratorRuntime.mark(addGroupTargetSaga),
4951
- _marked3$2 = /*#__PURE__*/regeneratorRuntime.mark(linkGroupTargetSaga),
5017
+ _marked3$3 = /*#__PURE__*/regeneratorRuntime.mark(linkGroupTargetSaga),
4952
5018
  _marked4$1 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$3);
4953
5019
  function updateSourceValueWhenLinkingComponentToGroupSaga(groupId, targetToUpdate) {
4954
5020
  var group;
@@ -5064,7 +5130,7 @@ function linkGroupTargetSaga(_ref2) {
5064
5130
  return _context3.stop();
5065
5131
  }
5066
5132
  }
5067
- }, _marked3$2);
5133
+ }, _marked3$3);
5068
5134
  }
5069
5135
 
5070
5136
  function rootSaga$3() {
@@ -5125,11 +5191,11 @@ var useStyles$I = makeStyles(function (theme) {
5125
5191
  },
5126
5192
  '&.Mui-selected': {
5127
5193
  color: theme.palette.common.white,
5128
- backgroundColor: theme.palette.geowebColors.buttons.primaryActive.fill,
5194
+ backgroundColor: theme.palette.geowebColors.buttons.primary.active.fill,
5129
5195
  boxShadow: "none",
5130
5196
  '&:hover': {
5131
5197
  color: theme.palette.common.white,
5132
- backgroundColor: theme.palette.geowebColors.buttons.primaryMouseover.fill
5198
+ backgroundColor: theme.palette.geowebColors.buttons.primary.mouseOver.fill
5133
5199
  }
5134
5200
  },
5135
5201
  '&:after': {
@@ -5249,9 +5315,11 @@ var TooltipSelect = function TooltipSelect(_a) {
5249
5315
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5250
5316
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
5251
5317
  * */
5318
+ var SyncGroupTypeList = [SYNCGROUPS_TYPE_SETBBOX, SYNCGROUPS_TYPE_SETTIME];
5252
5319
 
5253
5320
  var types = /*#__PURE__*/Object.freeze({
5254
- __proto__: null
5321
+ __proto__: null,
5322
+ SyncGroupTypeList: SyncGroupTypeList
5255
5323
  });
5256
5324
 
5257
5325
  /* *
@@ -5436,7 +5504,7 @@ var getDialogDetailsByType = function getDialogDetailsByType(store, dialogType)
5436
5504
  *
5437
5505
  * @param {object} store store object from which the ui state wll be extracted
5438
5506
  * @param {string} dialogType type of the dialog 'legend' | 'layerManager' | 'dimensionSelect-elevation'
5439
- * @returns {array} [string, boolean] first element gives the active map id, second element whether the dialog is open
5507
+ * @returns {boolean} returnType: boolean
5440
5508
  */
5441
5509
 
5442
5510
  var getisDialogOpen = createSelector(getDialogDetailsByType, function (details) {
@@ -5451,7 +5519,7 @@ var getisDialogOpen = createSelector(getDialogDetailsByType, function (details)
5451
5519
  *
5452
5520
  * @param {object} store store object from which the ui state wll be extracted
5453
5521
  * @param {string} dialogType type of the dialog 'legend' | 'layerManager' | 'dimensionSelect-elevation'
5454
- * @returns {array} [string, boolean] first element gives the active map id, second element whether the dialog is open
5522
+ * @returns {string} returnType: string - the active map id
5455
5523
  */
5456
5524
 
5457
5525
  var getDialogMapId = createSelector(getDialogDetailsByType, function (details) {
@@ -5515,7 +5583,7 @@ var getDialogSource = createSelector(getDialogDetailsByType, function (details)
5515
5583
 
5516
5584
  var _marked$2 = /*#__PURE__*/regeneratorRuntime.mark(registerMapUISaga),
5517
5585
  _marked2$2 = /*#__PURE__*/regeneratorRuntime.mark(unregisterUIMapSaga),
5518
- _marked3$1 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$2);
5586
+ _marked3$2 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$2);
5519
5587
  function registerMapUISaga() {
5520
5588
  var fields, source;
5521
5589
  return regeneratorRuntime.wrap(function registerMapUISaga$(_context) {
@@ -5622,7 +5690,7 @@ function rootSaga$2() {
5622
5690
  return _context3.stop();
5623
5691
  }
5624
5692
  }
5625
- }, _marked3$1);
5693
+ }, _marked3$2);
5626
5694
  }
5627
5695
 
5628
5696
  /* *
@@ -6357,6 +6425,16 @@ var reducer$1 = function reducer() {
6357
6425
  return reducer(state, mapAction);
6358
6426
  }
6359
6427
 
6428
+ case MAP_SERVICES_REMOVE_SERVICE:
6429
+ return produce(state, function (draft) {
6430
+ if (draft.byId[action.payload.serviceUrl]) {
6431
+ draft.allIds = draft.allIds.filter(function (id) {
6432
+ return id !== action.payload.serviceUrl;
6433
+ });
6434
+ delete draft.byId[action.payload.serviceUrl];
6435
+ }
6436
+ });
6437
+
6360
6438
  default:
6361
6439
  return state;
6362
6440
  }
@@ -6364,7 +6442,7 @@ var reducer$1 = function reducer() {
6364
6442
 
6365
6443
  var _marked$1 = /*#__PURE__*/regeneratorRuntime.mark(startAnimationSaga),
6366
6444
  _marked2$1 = /*#__PURE__*/regeneratorRuntime.mark(stopAnimationSaga),
6367
- _marked3 = /*#__PURE__*/regeneratorRuntime.mark(deleteLayerSaga),
6445
+ _marked3$1 = /*#__PURE__*/regeneratorRuntime.mark(deleteLayerSaga),
6368
6446
  _marked4 = /*#__PURE__*/regeneratorRuntime.mark(updateAnimation),
6369
6447
  _marked5 = /*#__PURE__*/regeneratorRuntime.mark(setLayerDimensionsSaga),
6370
6448
  _marked6 = /*#__PURE__*/regeneratorRuntime.mark(toggleAutoUpdateSaga),
@@ -6467,7 +6545,7 @@ function deleteLayerSaga(_ref3) {
6467
6545
  return _context3.stop();
6468
6546
  }
6469
6547
  }
6470
- }, _marked3);
6548
+ }, _marked3$1);
6471
6549
  }
6472
6550
  function updateAnimation(mapId, maxValue) {
6473
6551
  var animationStart, animationStartUnix, animationEnd, animationEndUnix, t, deltaT, start, end, isAnimating$1, timeStep;
@@ -6777,7 +6855,10 @@ var initialState = {
6777
6855
  byId: {},
6778
6856
  allIds: []
6779
6857
  },
6780
- keywords: []
6858
+ keywords: {
6859
+ byId: {},
6860
+ allIds: []
6861
+ }
6781
6862
  }
6782
6863
  };
6783
6864
  var reducer = function reducer() {
@@ -6806,28 +6887,21 @@ var reducer = function reducer() {
6806
6887
  _step;
6807
6888
 
6808
6889
  try {
6809
- var _loop = function _loop() {
6890
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
6810
6891
  var keyword = _step.value;
6811
- var foundKeyword = draft.filters.keywords.find(function (object) {
6812
- return object.id === keyword;
6813
- });
6814
6892
 
6815
- if (foundKeyword) {
6816
- foundKeyword.amount += 1;
6817
- foundKeyword.amountVisible += 1;
6818
- } else {
6819
- var newKeywordObject = {
6893
+ if (!draft.filters.keywords.byId[keyword]) {
6894
+ draft.filters.keywords.byId[keyword] = {
6820
6895
  id: keyword,
6821
6896
  amount: 1,
6822
6897
  amountVisible: 1,
6823
6898
  checked: true
6824
6899
  };
6825
- draft.filters.keywords.push(newKeywordObject);
6900
+ draft.filters.keywords.allIds.push(keyword);
6901
+ } else {
6902
+ draft.filters.keywords.byId[keyword].amount += 1;
6903
+ draft.filters.keywords.byId[keyword].amountVisible += 1;
6826
6904
  }
6827
- };
6828
-
6829
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
6830
- _loop();
6831
6905
  }
6832
6906
  } catch (err) {
6833
6907
  _iterator.e(err);
@@ -6843,37 +6917,72 @@ var reducer = function reducer() {
6843
6917
  });
6844
6918
  }
6845
6919
 
6846
- case 'LAYER_SELECT_ENABLE_ACTIVE_SERVICE':
6920
+ case 'LAYER_SELECT_SERVICE_REMOVED':
6847
6921
  {
6848
- var _action$payload2 = action.payload,
6849
- _serviceUrl = _action$payload2.serviceUrl,
6850
- _keywords = _action$payload2.keywords;
6851
6922
  return produce(state, function (draft) {
6852
- draft.filters.activeServices.byId[_serviceUrl].enabled = true;
6923
+ var serviceUrl = action.payload.serviceUrl; // 1. Find a service that is to be removed
6853
6924
 
6854
- var _iterator2 = _createForOfIteratorHelper(_keywords),
6925
+ var foundService = draft.filters.activeServices.byId[serviceUrl]; // 2. Go through all keywords for removed service, and decrement the amount of all found keywords
6926
+
6927
+ var _iterator2 = _createForOfIteratorHelper(foundService.keywordsPerService),
6855
6928
  _step2;
6856
6929
 
6857
6930
  try {
6858
- var _loop2 = function _loop2() {
6931
+ var _loop = function _loop() {
6859
6932
  var keyword = _step2.value;
6860
- var foundObject = draft.filters.keywords.find(function (object) {
6861
- return object.id === keyword;
6862
- });
6933
+ var foundObject = draft.filters.keywords.byId[keyword];
6863
6934
 
6864
- if (foundObject) {
6865
- foundObject.amountVisible += 1;
6935
+ if (foundObject && foundObject.amount) {
6936
+ foundObject.amount -= 1;
6937
+ foundObject.amountVisible -= 1;
6938
+ }
6939
+
6940
+ if (foundObject && foundObject.amount === 0) {
6941
+ delete draft.filters.keywords.byId[keyword];
6942
+ draft.filters.keywords.allIds = draft.filters.keywords.allIds.filter(function (id) {
6943
+ return id !== keyword;
6944
+ });
6866
6945
  }
6867
6946
  };
6868
6947
 
6869
6948
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
6870
- _loop2();
6871
- }
6949
+ _loop();
6950
+ } // Finally remove object from activeServices, so if the service is added again later on, new object and keywords will be re-added
6951
+
6872
6952
  } catch (err) {
6873
6953
  _iterator2.e(err);
6874
6954
  } finally {
6875
6955
  _iterator2.f();
6876
6956
  }
6957
+
6958
+ delete draft.filters.activeServices.byId[serviceUrl];
6959
+ draft.filters.activeServices.allIds = draft.filters.activeServices.allIds.filter(function (id) {
6960
+ return id !== serviceUrl;
6961
+ });
6962
+ });
6963
+ }
6964
+
6965
+ case 'LAYER_SELECT_ENABLE_ACTIVE_SERVICE':
6966
+ {
6967
+ var _action$payload2 = action.payload,
6968
+ _serviceUrl = _action$payload2.serviceUrl,
6969
+ _keywords = _action$payload2.keywords;
6970
+ return produce(state, function (draft) {
6971
+ draft.filters.activeServices.byId[_serviceUrl].enabled = true;
6972
+
6973
+ var _iterator3 = _createForOfIteratorHelper(_keywords),
6974
+ _step3;
6975
+
6976
+ try {
6977
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
6978
+ var keyword = _step3.value;
6979
+ draft.filters.keywords.byId[keyword].amountVisible += 1;
6980
+ }
6981
+ } catch (err) {
6982
+ _iterator3.e(err);
6983
+ } finally {
6984
+ _iterator3.f();
6985
+ }
6877
6986
  });
6878
6987
  }
6879
6988
 
@@ -6885,37 +6994,51 @@ var reducer = function reducer() {
6885
6994
  return produce(state, function (draft) {
6886
6995
  draft.filters.activeServices.byId[_serviceUrl2].enabled = false;
6887
6996
 
6888
- var _iterator3 = _createForOfIteratorHelper(_keywords2),
6889
- _step3;
6997
+ var _iterator4 = _createForOfIteratorHelper(_keywords2),
6998
+ _step4;
6890
6999
 
6891
7000
  try {
6892
- var _loop3 = function _loop3() {
6893
- var keyword = _step3.value;
6894
- var foundObject = draft.filters.keywords.find(function (object) {
6895
- return object.id === keyword;
6896
- });
7001
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
7002
+ var keyword = _step4.value;
7003
+ draft.filters.keywords.byId[keyword].amountVisible -= 1;
7004
+ }
7005
+ } catch (err) {
7006
+ _iterator4.e(err);
7007
+ } finally {
7008
+ _iterator4.f();
7009
+ }
7010
+ });
7011
+ }
6897
7012
 
6898
- if (foundObject && foundObject.amountVisible > 0) {
6899
- foundObject.amountVisible -= 1;
6900
- }
6901
- };
7013
+ case 'LAYER_SELECT_TOGGLE_KEYWORDS':
7014
+ {
7015
+ return produce(state, function (draft) {
7016
+ var keywords = action.payload.keywords;
6902
7017
 
6903
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
6904
- _loop3();
7018
+ var _iterator5 = _createForOfIteratorHelper(keywords),
7019
+ _step5;
7020
+
7021
+ try {
7022
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
7023
+ var keyword = _step5.value;
7024
+ draft.filters.keywords.byId[keyword].checked = !draft.filters.keywords.byId[keyword].checked;
6905
7025
  }
6906
7026
  } catch (err) {
6907
- _iterator3.e(err);
7027
+ _iterator5.e(err);
6908
7028
  } finally {
6909
- _iterator3.f();
7029
+ _iterator5.f();
6910
7030
  }
6911
7031
  });
6912
7032
  }
6913
7033
 
6914
- case 'LAYER_SELECT_UPDATE_KEYWORDS':
7034
+ case 'LAYER_SELECT_ENABLE_ONLY_ONE_KEYWORD':
6915
7035
  {
6916
7036
  return produce(state, function (draft) {
6917
- var keywords = action.payload.keywords;
6918
- draft.filters.keywords = keywords;
7037
+ var keyword = action.payload.keyword;
7038
+ draft.filters.keywords.allIds.forEach(function (id) {
7039
+ draft.filters.keywords.byId[id].checked = false;
7040
+ });
7041
+ draft.filters.keywords.byId[keyword].checked = true;
6919
7042
  });
6920
7043
  }
6921
7044
 
@@ -6944,7 +7067,9 @@ var LAYER_SELECT_SET_SEARCH_FILTER = 'LAYER_SELECT_SET_SEARCH_FILTER';
6944
7067
  var LAYER_SELECT_DISABLE_ACTIVE_SERVICE = 'LAYER_SELECT_DISABLE_ACTIVE_SERVICE';
6945
7068
  var LAYER_SELECT_ENABLE_ACTIVE_SERVICE = 'LAYER_SELECT_ENABLE_ACTIVE_SERVICE';
6946
7069
  var LAYER_SELECT_ADD_KEYWORDS_AND_ACTIVE_SERVICES = 'LAYER_SELECT_ADD_KEYWORDS_AND_ACTIVE_SERVICES';
6947
- var LAYER_SELECT_UPDATE_KEYWORDS = 'LAYER_SELECT_UPDATE_KEYWORDS';
7070
+ var LAYER_SELECT_SERVICE_REMOVED = 'LAYER_SELECT_SERVICE_REMOVED';
7071
+ var LAYER_SELECT_TOGGLE_KEYWORDS = 'LAYER_SELECT_TOGGLE_KEYWORDS';
7072
+ var LAYER_SELECT_ENABLE_ONLY_ONE_KEYWORD = 'LAYER_SELECT_ENABLE_ONLY_ONE_KEYWORD';
6948
7073
 
6949
7074
  /* *
6950
7075
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -7014,15 +7139,49 @@ var addKeywordsAndActiveServices = function addKeywordsAndActiveServices(payload
7014
7139
  payload: payload
7015
7140
  };
7016
7141
  };
7017
- var updateKeywords = function updateKeywords(payload) {
7142
+ /*
7143
+ * Removes the given service from Layer Select store
7144
+ *
7145
+ * Example: layerSelectServiceRemoved({ serviceUrl: 'https://service.wms' })
7146
+ * @param {string} payload {serviceUrl: string}
7147
+ */
7148
+
7149
+ var layerSelectServiceRemoved = function layerSelectServiceRemoved(payload) {
7150
+ return {
7151
+ type: LAYER_SELECT_SERVICE_REMOVED,
7152
+ payload: payload
7153
+ };
7154
+ };
7155
+ /*
7156
+ * Toggles keywords listed
7157
+ *
7158
+ * Example: toggleKeywords({ keywords: ['keyword1', 'keyword2'] })
7159
+ * @param {string[]} payload { keywords: string[] }
7160
+ */
7161
+
7162
+ var toggleKeywords = function toggleKeywords(payload) {
7163
+ return {
7164
+ type: LAYER_SELECT_TOGGLE_KEYWORDS,
7165
+ payload: payload
7166
+ };
7167
+ };
7168
+ /*
7169
+ * Enables only one keyword and disables all other
7170
+ *
7171
+ * Example: toggleKeywords({ keyword: 'keyword1' })
7172
+ * @param {string} payload { keyword: string }
7173
+ */
7174
+
7175
+ var enableOnlyOneKeyword = function enableOnlyOneKeyword(payload) {
7018
7176
  return {
7019
- type: LAYER_SELECT_UPDATE_KEYWORDS,
7177
+ type: LAYER_SELECT_ENABLE_ONLY_ONE_KEYWORD,
7020
7178
  payload: payload
7021
7179
  };
7022
7180
  };
7023
7181
 
7024
7182
  var _marked = /*#__PURE__*/regeneratorRuntime.mark(newServiceAddedSaga),
7025
- _marked2 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga);
7183
+ _marked2 = /*#__PURE__*/regeneratorRuntime.mark(layerSelectServiceRemovedSaga),
7184
+ _marked3 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga);
7026
7185
  function newServiceAddedSaga(capturedAction) {
7027
7186
  var addedService, service, keywords;
7028
7187
  return regeneratorRuntime.wrap(function newServiceAddedSaga$(_context) {
@@ -7047,21 +7206,45 @@ function newServiceAddedSaga(capturedAction) {
7047
7206
  }
7048
7207
  }, _marked);
7049
7208
  }
7050
- function rootSaga() {
7051
- return regeneratorRuntime.wrap(function rootSaga$(_context2) {
7209
+ function layerSelectServiceRemovedSaga(capturedAction) {
7210
+ var removedService, serviceUrl;
7211
+ return regeneratorRuntime.wrap(function layerSelectServiceRemovedSaga$(_context2) {
7052
7212
  while (1) {
7053
7213
  switch (_context2.prev = _context2.next) {
7054
7214
  case 0:
7055
- _context2.next = 2;
7056
- return takeEvery(MAP_SERVICES_SET_LAYERS, newServiceAddedSaga);
7215
+ removedService = capturedAction.payload;
7216
+ serviceUrl = removedService.serviceUrl;
7217
+ _context2.next = 4;
7218
+ return put(layerSelectServiceRemoved({
7219
+ serviceUrl: serviceUrl
7220
+ }));
7057
7221
 
7058
- case 2:
7222
+ case 4:
7059
7223
  case "end":
7060
7224
  return _context2.stop();
7061
7225
  }
7062
7226
  }
7063
7227
  }, _marked2);
7064
7228
  }
7229
+ function rootSaga() {
7230
+ return regeneratorRuntime.wrap(function rootSaga$(_context3) {
7231
+ while (1) {
7232
+ switch (_context3.prev = _context3.next) {
7233
+ case 0:
7234
+ _context3.next = 2;
7235
+ return takeEvery(MAP_SERVICES_SET_LAYERS, newServiceAddedSaga);
7236
+
7237
+ case 2:
7238
+ _context3.next = 4;
7239
+ return takeEvery(MAP_SERVICES_REMOVE_SERVICE, layerSelectServiceRemovedSaga);
7240
+
7241
+ case 4:
7242
+ case "end":
7243
+ return _context3.stop();
7244
+ }
7245
+ }
7246
+ }, _marked3);
7247
+ }
7065
7248
 
7066
7249
  /* *
7067
7250
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -7134,7 +7317,8 @@ var recurseNodes = function recurseNodes(nodesToRecur) {
7134
7317
  path: nodesToRecur.path || [],
7135
7318
  children: [],
7136
7319
  keywords: nodesToRecur.keywords || [],
7137
- "abstract": nodesToRecur["abstract"] || ''
7320
+ "abstract": nodesToRecur["abstract"] || '',
7321
+ styles: nodesToRecur.styles || []
7138
7322
  };
7139
7323
 
7140
7324
  if (nodesToRecur.children) {
@@ -7532,133 +7716,256 @@ var WMSServerList = function WMSServerList(_ref) {
7532
7716
  * See the License for the specific language governing permissions and
7533
7717
  * limitations under the License.
7534
7718
  *
7535
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7536
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
7719
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7720
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
7537
7721
  * */
7538
- var DWD = {
7539
- name: 'DWD',
7540
- url: 'https://maps.dwd.de/geoserver/ows?',
7541
- id: 'dwd'
7542
- };
7543
- var nationaalgeoregister = {
7544
- name: 'nationaalgeoregister.nl',
7545
- url: 'https://geodata.nationaalgeoregister.nl/cbsgebiedsindelingen/wms?request=GetCapabilities&service=wms',
7546
- id: 'nationaalgeoregister'
7547
- };
7548
- var KNMImsgcpp = {
7549
- name: 'KNMImsgcpp',
7550
- url: 'https://adaguc-server-msg-cpp-portal.pmc.knmi.cloud/wms?DATASET=msgrt&',
7551
- id: 'msgcpp-ogc-realtime'
7552
- };
7553
- var HeiGit = {
7554
- name: 'HeiGit',
7555
- url: 'https://maps.heigit.org/osm-wms/service',
7556
- id: 'HeiGit-osm-wms'
7557
- };
7558
- var ArcGisCanvas = {
7559
- name: 'ArcGisCanvas',
7560
- url: 'https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/',
7561
- id: 'ArcGisCanvas'
7562
- };
7563
- var KNMIgeoservicesBaselayers = {
7564
- name: 'KNMIgeoservicesBaselayers',
7565
- url: 'https://geoservices.knmi.nl/wms?DATASET=baselayers&',
7566
- id: 'KNMIgeoservicesBaselayers'
7567
- };
7568
- var KNMIgeoservicesRadar = {
7569
- name: 'KNMIgeoservicesRadar',
7570
- url: 'https://geoservices.knmi.nl/wms?dataset=RADAR&',
7571
- id: 'KNMIgeoservicesRadar'
7572
- };
7573
- var KNMIgeoservicesObs = {
7574
- name: 'KNMIgeoservicesObs',
7575
- url: 'https://geoservices.knmi.nl/adagucserver?dataset=OBS&service=WMS&',
7576
- id: 'KNMIgeoservicesObs'
7577
- };
7578
- var KNMIgeoservicesKlimaatAtlas = {
7579
- name: 'KNMIgeoservicesKlimaatAtlas',
7580
- url: 'https://geoservices.knmi.nl/wms?DATASET=gsie-dataset&SERVICE=WMS&',
7581
- id: 'KNMIgeoservicesKlimaatAtlas'
7582
- };
7583
- var KNMIgeoservicesHarmonie = {
7584
- name: 'KNMIgeoservicesHarmonie',
7585
- url: 'https://geoservices.knmi.nl/wms?DATASET=HARM_N25&',
7586
- id: 'KNMIgeoservicesKliKNMIgeoservicesHarmoniemaatAtlas'
7587
- };
7588
- var KNMIgeoservicesHarmonieMLService = {
7589
- name: 'KNMI Harmonie ML',
7590
- url: 'https://geoservices.knmi.nl/wms?DATASET=HARM_N25_ML&SERVICE=WMS&',
7591
- id: 'harmonieML'
7592
- };
7593
- var MetNorwayService = {
7594
- name: 'MetNorwayService',
7595
- url: 'https://wms-e1.geoweb.met.no/wms?',
7596
- id: 'MetNorwayService'
7722
+
7723
+ var parseBoolean = function parseBoolean(value) {
7724
+ return ['true', 'false', true, false].includes(value) && JSON.parse(value);
7597
7725
  };
7598
- var FMIopenwms = {
7599
- name: 'FMIopenwms',
7600
- url: 'https://openwms.fmi.fi/geoserver/wms?',
7601
- id: 'FMIopenwms'
7726
+
7727
+ var isBaseLayer = function isBaseLayer(layer) {
7728
+ return ['baseLayer'].includes(layer.layerType);
7602
7729
  };
7603
- var DWDObservations = {
7604
- name: 'DWDObservations',
7605
- url: 'https://maps.dwd.de/geoserver/dwd/Wetter_Beobachtungen/ows?',
7606
- id: 'DWDObservations'
7730
+
7731
+ var isMapLayer = function isMapLayer(layer) {
7732
+ return ['mapLayer'].includes(layer.layerType);
7607
7733
  };
7608
- var DWDWarnings = {
7609
- name: 'DWDWarnings',
7610
- url: 'https://maps.dwd.de/geoserver/dwd/Warnungen_Gemeinden_vereinigt/ows?',
7611
- id: 'DWDWarnings'
7734
+
7735
+ var isOverLayer = function isOverLayer(layer) {
7736
+ return ['overLayer'].includes(layer.layerType);
7612
7737
  };
7613
- var DWDWXProdukt = {
7614
- name: 'DWDWXProdukt',
7615
- url: 'https://maps.dwd.de/geoserver/dwd/WX-Produkt/ows?',
7616
- id: 'DWDWXProdukt'
7738
+
7739
+ var isValidService = function isValidService(service) {
7740
+ return Object.prototype.hasOwnProperty.call(service, 'url');
7617
7741
  };
7618
- var EUMETSAT = {
7619
- name: 'EUMETSAT',
7620
- url: 'https://view.eumetsat.int/geoserver/wms?',
7621
- id: 'EUMETSAT'
7742
+
7743
+ var isValidBbox = function isValidBbox(bbox) {
7744
+ var isFiniteNumber = Number.isFinite(bbox.bottom) && Number.isFinite(bbox.left) && Number.isFinite(bbox.right) && Number.isFinite(bbox.top);
7745
+ return isFiniteNumber;
7622
7746
  };
7623
- var eumetviewEUMETSAT = {
7624
- name: 'eumetviewEUMETSAT',
7625
- url: 'https://eumetview.eumetsat.int/geoserv/wms?',
7626
- id: 'eumetviewEUMETSAT'
7747
+
7748
+ var isValidSrs = function isValidSrs(srs) {
7749
+ var isValid = srs.includes('EPSG');
7750
+ return isValid;
7627
7751
  };
7628
- var ECMWFPublicService = {
7629
- name: 'ECMWF',
7630
- url: 'https://apps.ecmwf.int/wms/?token=public',
7631
- id: 'ecmwf'
7752
+
7753
+ var parseLayerType = function parseLayerType(layer, defaultValue) {
7754
+ if (isBaseLayer(layer)) {
7755
+ return LayerType.baseLayer;
7756
+ }
7757
+
7758
+ if (isMapLayer(layer)) {
7759
+ return LayerType.mapLayer;
7760
+ }
7761
+
7762
+ if (isOverLayer(layer)) {
7763
+ return LayerType.overLayer;
7764
+ }
7765
+
7766
+ return defaultValue;
7632
7767
  };
7633
- var MeteoCanada = {
7634
- name: 'Meteo Canada',
7635
- url: 'https://geo.weather.gc.ca/geomet/?lang=en&',
7636
- id: 'MeteoCanada'
7768
+
7769
+ var parseLayer = function parseLayer(layer) {
7770
+ var lr = JSON.parse(JSON.stringify(layer)); // Cloning used here to achieve object immutability
7771
+
7772
+ if (!lr.id) {
7773
+ lr.id = generateLayerId();
7774
+ }
7775
+
7776
+ if (lr.layerType) {
7777
+ lr.layerType = parseLayerType(lr, null);
7778
+ }
7779
+
7780
+ if (lr.enabled) {
7781
+ lr.enabled = parseBoolean(lr.enabled);
7782
+ }
7783
+
7784
+ return lr;
7637
7785
  };
7638
7786
 
7639
- var publicServices = /*#__PURE__*/Object.freeze({
7640
- __proto__: null,
7641
- DWD: DWD,
7642
- nationaalgeoregister: nationaalgeoregister,
7643
- KNMImsgcpp: KNMImsgcpp,
7644
- HeiGit: HeiGit,
7645
- ArcGisCanvas: ArcGisCanvas,
7646
- KNMIgeoservicesBaselayers: KNMIgeoservicesBaselayers,
7647
- KNMIgeoservicesRadar: KNMIgeoservicesRadar,
7648
- KNMIgeoservicesObs: KNMIgeoservicesObs,
7649
- KNMIgeoservicesKlimaatAtlas: KNMIgeoservicesKlimaatAtlas,
7650
- KNMIgeoservicesHarmonie: KNMIgeoservicesHarmonie,
7651
- KNMIgeoservicesHarmonieMLService: KNMIgeoservicesHarmonieMLService,
7652
- MetNorwayService: MetNorwayService,
7653
- FMIopenwms: FMIopenwms,
7654
- DWDObservations: DWDObservations,
7655
- DWDWarnings: DWDWarnings,
7656
- DWDWXProdukt: DWDWXProdukt,
7657
- EUMETSAT: EUMETSAT,
7658
- eumetviewEUMETSAT: eumetviewEUMETSAT,
7659
- ECMWFPublicService: ECMWFPublicService,
7660
- MeteoCanada: MeteoCanada
7661
- });
7787
+ var filterBaseLayers = function filterBaseLayers(presetArray) {
7788
+ var hasLayers = presetArray && Array.isArray(presetArray) && presetArray.length > 0;
7789
+ var filteredBaseLayers = hasLayers ? presetArray.filter(function (preset) {
7790
+ return isBaseLayer(preset);
7791
+ }).map(function (filteredPresetLayer) {
7792
+ return parseLayer(filteredPresetLayer);
7793
+ }) : null;
7794
+ var hasBaseLayers = filteredBaseLayers && filteredBaseLayers.length > 0;
7795
+ var baseLayers = hasBaseLayers ? filteredBaseLayers : undefined;
7796
+ return baseLayers;
7797
+ };
7798
+ var filterMapLayers = function filterMapLayers(presetArray) {
7799
+ var hasLayers = presetArray && Array.isArray(presetArray) && presetArray.length > 0;
7800
+ var filteredMapLayers = hasLayers ? presetArray.filter(function (preset) {
7801
+ return isMapLayer(preset);
7802
+ }).map(function (filteredPresetLayer) {
7803
+ return parseLayer(filteredPresetLayer);
7804
+ }) : null;
7805
+ var hasMapLayers = filteredMapLayers && filteredMapLayers.length > 0;
7806
+ var mapLayers = hasMapLayers ? filteredMapLayers : undefined;
7807
+ return mapLayers;
7808
+ };
7809
+ var filterServices = function filterServices(presetArray) {
7810
+ var hasServices = presetArray && Array.isArray(presetArray) && presetArray.length > 0;
7811
+ var validServices = hasServices ? presetArray.filter(function (preset) {
7812
+ return isValidService(preset);
7813
+ }) : null;
7814
+ var hasValidServices = validServices && validServices.length > 0;
7815
+ var services = hasValidServices ? validServices : undefined;
7816
+ return services;
7817
+ };
7818
+ var filterBbox = function filterBbox(presetBbox) {
7819
+ var hasAllValues = presetBbox && presetBbox.bottom && presetBbox.left && presetBbox.right && presetBbox.top;
7820
+ var bbox = hasAllValues && isValidBbox(presetBbox) ? presetBbox : undefined;
7821
+ return bbox;
7822
+ };
7823
+ var filterSrs = function filterSrs(presetSrs) {
7824
+ var isValid = presetSrs && isValidSrs(presetSrs);
7825
+ var srs = isValid ? presetSrs : undefined;
7826
+ return srs;
7827
+ };
7828
+ var filterDimensions = function filterDimensions(mapLayers) {
7829
+ var layerDimensions = mapLayers.reduce(function (mapLayerList, layer) {
7830
+ if (layer.dimensions && layer.dimensions.length > 0 && layer.id) {
7831
+ var dimensions = layer.dimensions.map(function (dimension) {
7832
+ return {
7833
+ dimension: dimension,
7834
+ layerId: layer.id
7835
+ };
7836
+ });
7837
+ return mapLayerList.concat(dimensions);
7838
+ }
7839
+
7840
+ return mapLayerList;
7841
+ }, []);
7842
+ return layerDimensions.length > 0 ? layerDimensions : undefined;
7843
+ };
7844
+ var filterMapPresets = function filterMapPresets(presets) {
7845
+ var preset = presets && presets.preset;
7846
+ var filteredBbox = preset && preset.bbox ? filterBbox(preset.bbox) : undefined;
7847
+ var filteredSrs = preset && preset.srs ? filterSrs(preset.srs) : undefined;
7848
+ var filterredServices = preset && preset.services ? filterServices(preset.services) : undefined;
7849
+ var baseServices = preset && preset.baseServices ? filterServices(preset.baseServices) : undefined;
7850
+ var filteredBaseLayers = preset && preset.layers ? filterBaseLayers(preset.layers) : undefined;
7851
+ var filteredMapLayers = preset && preset.layers ? filterMapLayers(preset.layers) : undefined;
7852
+ var presetType = preset && preset.presetType ? preset.presetType : undefined;
7853
+ var presetId = preset && preset.presetId ? preset.presetId : undefined;
7854
+ var presetName = preset && preset.presetName ? preset.presetName : undefined;
7855
+ var activeLayerId = preset && preset.activeLayerId ? preset.activeLayerId : undefined;
7856
+ var layerDimensions = filteredMapLayers ? filterDimensions(filteredMapLayers) : undefined;
7857
+ var filteredPreset = {
7858
+ presetType: presetType,
7859
+ presetId: presetId,
7860
+ presetName: presetName,
7861
+ bbox: filteredBbox,
7862
+ services: filterredServices,
7863
+ baseServices: baseServices,
7864
+ srs: filteredSrs,
7865
+ baseLayers: filteredBaseLayers,
7866
+ mapLayers: filteredMapLayers,
7867
+ activeLayerId: activeLayerId,
7868
+ layerDimensions: layerDimensions
7869
+ };
7870
+ return filteredPreset;
7871
+ };
7872
+ var getInitialPresets = function getInitialPresets(mapPresets, defaultInitialPresets) {
7873
+ var filteredPresets = mapPresets ? filterMapPresets(mapPresets) : null;
7874
+ var initialPresets = filteredPresets || filterMapPresets(defaultInitialPresets);
7875
+ return initialPresets;
7876
+ };
7877
+
7878
+ var preset = {
7879
+ presetType: "mapPreset",
7880
+ presetId: "mapPreset-1",
7881
+ presetName: "Layer manager preset",
7882
+ services: [
7883
+ {
7884
+ name: "KNMIgeoservicesRadar",
7885
+ url: "https://geoservices.knmi.nl/wms?dataset=RADAR&",
7886
+ id: "KNMIgeoservicesRadar"
7887
+ },
7888
+ {
7889
+ name: "MetNorwayService",
7890
+ url: "https://wms-e1.geoweb.met.no/wms?",
7891
+ id: "MetNorwayService"
7892
+ },
7893
+ {
7894
+ name: "FMIopenwms",
7895
+ url: "https://openwms.fmi.fi/geoserver/wms?",
7896
+ id: "FMIopenwms"
7897
+ },
7898
+ {
7899
+ name: "ECMWF",
7900
+ url: "https://apps.ecmwf.int/wms/?token=public",
7901
+ id: "ecmwf"
7902
+ },
7903
+ {
7904
+ name: "KNMIgeoservicesHarmonie",
7905
+ url: "https://geoservices.knmi.nl/wms?DATASET=HARM_N25&",
7906
+ id: "KNMIgeoservicesKliKNMIgeoservicesHarmoniemaatAtlas"
7907
+ },
7908
+ {
7909
+ name: "KNMI Harmonie ML",
7910
+ url: "https://geoservices.knmi.nl/wms?DATASET=HARM_N25_ML&SERVICE=WMS&",
7911
+ id: "harmonieML"
7912
+ },
7913
+ {
7914
+ name: "KNMIgeoservicesObs",
7915
+ url: "https://geoservices.knmi.nl/adagucserver?dataset=OBS&service=WMS&",
7916
+ id: "KNMIgeoservicesObs"
7917
+ },
7918
+ {
7919
+ name: "DWD",
7920
+ url: "https://maps.dwd.de/geoserver/ows?",
7921
+ id: "dwd"
7922
+ }
7923
+ ],
7924
+ baseServices: [
7925
+ {
7926
+ name: "KNMIgeoservicesBaselayers",
7927
+ url: "https://geoservices.knmi.nl/wms?DATASET=baselayers&",
7928
+ id: "KNMIgeoservicesBaselayers"
7929
+ },
7930
+ {
7931
+ name: "DWD",
7932
+ url: "https://maps.dwd.de/geoserver/ows?",
7933
+ id: "dwd"
7934
+ }
7935
+ ],
7936
+ layers: [
7937
+ {
7938
+ id: "layerid_2",
7939
+ name: "WorldMap_Light_Grey_Canvas",
7940
+ type: "twms",
7941
+ layerType: "baseLayer"
7942
+ },
7943
+ {
7944
+ service: "https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/",
7945
+ id: "layerid_3",
7946
+ name: "arcGisCanvas",
7947
+ type: "twms",
7948
+ enabled: "true",
7949
+ layerType: "baseLayer"
7950
+ },
7951
+ {
7952
+ id: "base-layer-2",
7953
+ name: "OpenStreetMap_NL",
7954
+ type: "twms",
7955
+ layerType: "baseLayer",
7956
+ enabled: "true"
7957
+ },
7958
+ {
7959
+ service: "https://maps.heigit.org/osm-wms/service",
7960
+ id: "layerid_5",
7961
+ name: "osm_auto:all",
7962
+ layerType: "baseLayer"
7963
+ }
7964
+ ]
7965
+ };
7966
+ var initialPreset = {
7967
+ preset: preset
7968
+ };
7662
7969
 
7663
7970
  /* *
7664
7971
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -7676,437 +7983,45 @@ var publicServices = /*#__PURE__*/Object.freeze({
7676
7983
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7677
7984
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
7678
7985
  * */
7679
- var baseLayer$1 = {
7680
- name: 'arcGisSat',
7681
- title: 'arcGisSat',
7682
- type: 'twms',
7683
- layerType: LayerType.baseLayer,
7684
- enabled: true,
7685
- id: generateLayerId()
7686
- }; // Base Layers List
7687
7986
 
7688
- var baseLayerGrey$1 = {
7689
- id: generateLayerId(),
7690
- name: 'WorldMap_Light_Grey_Canvas',
7691
- type: 'twms',
7692
- layerType: LayerType.baseLayer
7693
- };
7694
- var baseLayerOpenStreetMapNL$1 = {
7695
- id: 'base-layer-2',
7696
- name: 'OpenStreetMap_NL',
7697
- type: 'twms',
7698
- layerType: LayerType.baseLayer,
7699
- enabled: true
7700
- };
7701
- var baseLayerArcGisCanvas$1 = {
7702
- service: ArcGisCanvas.url,
7703
- id: generateLayerId(),
7704
- name: 'arcGisCanvas',
7705
- type: 'twms',
7706
- enabled: true,
7707
- layerType: LayerType.baseLayer
7708
- };
7709
- var baseLayerWorldMap$1 = {
7710
- id: generateLayerId(),
7711
- name: 'WorldMap',
7712
- type: 'twms',
7713
- layerType: LayerType.baseLayer,
7714
- enabled: true
7715
- };
7716
- var baseLayerHeiGit = {
7717
- service: HeiGit.url,
7718
- id: generateLayerId(),
7719
- name: 'osm_auto:all',
7720
- layerType: LayerType.baseLayer
7721
- }; // Over Layers List
7987
+ var _filterMapPresets = filterMapPresets(initialPreset),
7988
+ services = _filterMapPresets.services,
7989
+ baseServices = _filterMapPresets.baseServices,
7990
+ baseLayers = _filterMapPresets.baseLayers;
7722
7991
 
7723
- var overLayer$1 = {
7724
- service: KNMIgeoservicesBaselayers.url,
7725
- name: 'countryborders',
7726
- format: 'image/png',
7727
- enabled: true,
7728
- id: generateLayerId(),
7729
- layerType: LayerType.overLayer
7730
- }; // KNMI msgcpp List
7992
+ var availableDefaultBaseLayers = baseLayers;
7993
+ var preloadedDefaultBaseServices = baseServices;
7994
+ var preloadedDefaultMapServices = services;
7731
7995
 
7732
- var msgCppLayer = {
7733
- // doesn't work with https
7734
- service: KNMImsgcpp.url,
7735
- name: 'lwe_precipitation_rate',
7736
- format: 'image/png',
7737
- enabled: true,
7738
- style: 'precip-transparent/nearest',
7739
- id: generateLayerId(),
7740
- layerType: LayerType.mapLayer
7741
- }; // Nederlandse Nationaal Georegister Layers list
7996
+ var defaultConfigurations = /*#__PURE__*/Object.freeze({
7997
+ __proto__: null,
7998
+ availableDefaultBaseLayers: availableDefaultBaseLayers,
7999
+ preloadedDefaultBaseServices: preloadedDefaultBaseServices,
8000
+ preloadedDefaultMapServices: preloadedDefaultMapServices
8001
+ });
7742
8002
 
7743
- var veiligheidsRegiosGebiedsIndelingenLabels = {
7744
- service: nationaalgeoregister.url,
7745
- name: 'cbsgebiedsindelingen:cbs_veiligheidsregio_2020_labelpoint',
7746
- style: 'CBS_Label',
7747
- enabled: false,
7748
- layerType: LayerType.mapLayer
7749
- };
7750
- var veiligheidsRegiosGebiedsIndelingen = {
7751
- service: nationaalgeoregister.url,
7752
- name: 'cbsgebiedsindelingen:cbs_veiligheidsregio_2020_gegeneraliseerd',
7753
- style: 'CBS_Gebiedsindeling',
7754
- enabled: false,
7755
- layerType: LayerType.mapLayer
7756
- }; // KNMI Geoservices Layers List
8003
+ var useStyles$H = makeStyles({
8004
+ buttonDiv: {
8005
+ position: 'relative'
8006
+ },
8007
+ loadingButton: {
8008
+ position: 'absolute',
8009
+ top: 7,
8010
+ left: 7,
8011
+ zIndex: 1
8012
+ },
8013
+ button: {
8014
+ width: '24px',
8015
+ height: '24px',
8016
+ margin: '6px 0px 0px 10px'
8017
+ }
8018
+ });
7757
8019
 
7758
- var radarLayer$1 = {
7759
- service: KNMIgeoservicesRadar.url,
7760
- name: 'RAD_NL25_PCP_CM',
7761
- format: 'image/png',
7762
- enabled: true,
7763
- style: 'radar/nearest',
7764
- id: generateLayerId(),
7765
- layerType: LayerType.mapLayer
7766
- };
7767
- var radarLayerWithError = {
7768
- service: KNMIgeoservicesRadar.url,
7769
- name: 'radarLayer',
7770
- format: 'image/png',
7771
- enabled: true,
7772
- style: 'knmiradar/nearest',
7773
- id: generateLayerId(),
7774
- layerType: LayerType.mapLayer
7775
- };
7776
- var obsAirTemperature = {
7777
- service: KNMIgeoservicesObs.url,
7778
- name: '10M/ta',
7779
- id: generateLayerId(),
7780
- layerType: LayerType.mapLayer
7781
- };
7782
- var obsWind = {
7783
- service: KNMIgeoservicesObs.url,
7784
- name: '10M/wind',
7785
- id: generateLayerId(),
7786
- layerType: LayerType.mapLayer
7787
- };
7788
- var obsAirPressureAtSeaLevel = {
7789
- service: KNMIgeoservicesObs.url,
7790
- name: '10M/pp',
7791
- id: generateLayerId(),
7792
- layerType: LayerType.mapLayer
7793
- };
7794
- var obsRelativeHumidity = {
7795
- service: KNMIgeoservicesObs.url,
7796
- name: '10M/rh',
7797
- id: generateLayerId(),
7798
- layerType: LayerType.mapLayer
7799
- };
7800
- var obsGlobalSolarRadiation = {
7801
- service: KNMIgeoservicesObs.url,
7802
- name: '10M/qg',
7803
- id: generateLayerId(),
7804
- layerType: LayerType.mapLayer
7805
- };
7806
- var obsPrecipitationIntensityPWS = {
7807
- service: KNMIgeoservicesObs.url,
7808
- name: '10M/pg',
7809
- id: generateLayerId(),
7810
- layerType: LayerType.mapLayer
7811
- };
7812
- var harmonieRelativeHumidityPl = {
7813
- service: KNMIgeoservicesHarmonie.url,
7814
- name: 'relative_humidity__at_pl',
7815
- id: generateLayerId(),
7816
- layerType: LayerType.mapLayer,
7817
- enabled: true
7818
- };
7819
- var harmonieWindPl = {
7820
- service: KNMIgeoservicesHarmonie.url,
7821
- name: 'wind__at_pl',
7822
- id: generateLayerId(),
7823
- layerType: LayerType.mapLayer,
7824
- enabled: true
7825
- };
7826
- var harmonieAirTemperature = {
7827
- service: KNMIgeoservicesHarmonie.url,
7828
- name: 'air_temperature__at_2m',
7829
- id: generateLayerId(),
7830
- layerType: LayerType.mapLayer,
7831
- enabled: true
7832
- };
7833
- var harmoniePrecipitation = {
7834
- service: KNMIgeoservicesHarmonie.url,
7835
- name: 'precipitation_flux',
7836
- id: generateLayerId(),
7837
- layerType: LayerType.mapLayer,
7838
- enabled: true
7839
- };
7840
- var harmoniePressure = {
7841
- service: KNMIgeoservicesHarmonie.url,
7842
- name: 'air_pressure_at_sea_level',
7843
- id: generateLayerId(),
7844
- layerType: LayerType.mapLayer,
7845
- enabled: true
7846
- };
7847
- var harmonieWindFlags = {
7848
- service: KNMIgeoservicesHarmonie.url,
7849
- name: 'wind__at_10m',
7850
- enabled: true,
7851
- id: generateLayerId(),
7852
- layerType: LayerType.mapLayer
7853
- };
7854
- var klimaatAtlasTG3 = {
7855
- service: KNMIgeoservicesKlimaatAtlas.url,
7856
- name: 'TG3',
7857
- enabled: true,
7858
- id: generateLayerId(),
7859
- layerType: LayerType.mapLayer
7860
- }; // DWD Layers List
7861
-
7862
- var dwdWarningLayer = {
7863
- service: DWDWarnings.url,
7864
- name: 'Warnungen_Gemeinden_vereinigt',
7865
- format: 'image/png',
7866
- // style: 'warnungen_gemeinden_vereinigt_event_seamless_param',
7867
- enabled: true,
7868
- id: generateLayerId(),
7869
- layerType: LayerType.mapLayer
7870
- };
7871
- var dwdRadarLayer = {
7872
- service: DWDWXProdukt.url,
7873
- name: 'WX-Produkt',
7874
- format: 'image/png',
7875
- enabled: true,
7876
- id: generateLayerId(),
7877
- layerType: LayerType.mapLayer
7878
- }; // this needs authentication to work
7879
-
7880
- var dwdObservationsWetterLayer = {
7881
- service: DWDObservations.url,
7882
- name: 'Wetter_Beobachtungen',
7883
- style: 'Wetter_Symbole',
7884
- format: 'image/png',
7885
- enabled: true,
7886
- id: generateLayerId(),
7887
- layerType: LayerType.mapLayer // headers: [{ name: 'Authorization', value: 'Basic ...' }]
7888
-
7889
- };
7890
- var dwdObservationsWetterLayerWithHeader = {
7891
- service: DWDObservations.url,
7892
- name: 'Wetter_Beobachtungen',
7893
- style: 'Wetter_Symbole',
7894
- format: 'image/png',
7895
- enabled: true,
7896
- id: generateLayerId(),
7897
- layerType: LayerType.mapLayer,
7898
- headers: [{
7899
- name: 'authorization',
7900
- value: 'Basic aW50cmFuZXQtdXNlcjpDQnMjMTEh'
7901
- }]
7902
- }; // this needs authentication to work
7903
-
7904
- var dwdObservationsWindLayer = {
7905
- service: DWDObservations.url,
7906
- name: 'Wetter_Beobachtungen',
7907
- style: 'Wetter_Wind',
7908
- format: 'image/png',
7909
- enabled: true,
7910
- id: generateLayerId(),
7911
- layerType: LayerType.mapLayer
7912
- }; // FMI open wms Layers List
7913
-
7914
- var FMITemp = {
7915
- service: FMIopenwms.url,
7916
- name: 'temperature-forecast',
7917
- format: 'image/png',
7918
- enabled: true,
7919
- id: generateLayerId(),
7920
- layerType: LayerType.mapLayer
7921
- }; // Met Norway Layers List
7922
-
7923
- var MetNoTemp = {
7924
- service: MetNorwayService.url,
7925
- name: 'thredds_meps_latest_wind',
7926
- format: 'image/png',
7927
- enabled: true,
7928
- id: generateLayerId(),
7929
- layerType: LayerType.mapLayer
7930
- };
7931
- var metNorwayWind1 = {
7932
- service: MetNorwayService.url,
7933
- name: 'thredds_meps_latest_wind',
7934
- format: 'image/png',
7935
- enabled: true,
7936
- id: generateLayerId(),
7937
- layerType: LayerType.mapLayer
7938
- };
7939
- var metNorwayWind2 = {
7940
- service: MetNorwayService.url,
7941
- name: 'thredds_aromearctic_extracted_t',
7942
- format: 'image/png',
7943
- enabled: true,
7944
- id: generateLayerId(),
7945
- layerType: LayerType.mapLayer
7946
- };
7947
- var metNorwayWind3 = {
7948
- service: MetNorwayService.url,
7949
- name: 'thredds_nk800_temperature',
7950
- format: 'image/png',
7951
- enabled: true,
7952
- id: generateLayerId(),
7953
- layerType: LayerType.mapLayer
7954
- };
7955
- var metNorwayLatestT = {
7956
- service: MetNorwayService.url,
7957
- name: 'thredds_meps_latest_t',
7958
- format: 'image/png',
7959
- enabled: true,
7960
- id: generateLayerId(),
7961
- layerType: LayerType.mapLayer
7962
- };
7963
- var metNorwaySalinaty = {
7964
- service: MetNorwayService.url,
7965
- name: 'thredds_barents_2_5km_1h_salinity',
7966
- format: 'image/png',
7967
- enabled: true,
7968
- id: generateLayerId(),
7969
- layerType: LayerType.mapLayer
7970
- };
7971
- var msgFesEUMETSAT = {
7972
- service: EUMETSAT.url,
7973
- name: 'msg_fes:rgb_eview',
7974
- enabled: true,
7975
- id: generateLayerId(),
7976
- layerType: LayerType.mapLayer
7977
- };
7978
- var msgNaturalenhncdEUMETSAT = {
7979
- service: eumetviewEUMETSAT.url,
7980
- name: 'meteosat:msg_naturalenhncd',
7981
- enabled: true,
7982
- id: generateLayerId(),
7983
- layerType: LayerType.mapLayer
7984
- };
7985
- var msgAshEUMETSAT = {
7986
- service: eumetviewEUMETSAT.url,
7987
- name: 'meteosat:msg_ash',
7988
- enabled: true,
7989
- id: generateLayerId(),
7990
- layerType: LayerType.mapLayer
7991
- };
7992
- var msgCthEUMETSAT = {
7993
- service: eumetviewEUMETSAT.url,
7994
- name: 'meteosat:msg_cth',
7995
- enabled: true,
7996
- id: generateLayerId(),
7997
- layerType: LayerType.mapLayer
7998
- };
7999
- var msgFogEUMETSAT = {
8000
- service: eumetviewEUMETSAT.url,
8001
- name: 'meteosat:msg_fog',
8002
- enabled: true,
8003
- id: generateLayerId(),
8004
- layerType: LayerType.mapLayer
8005
- };
8006
- var msgNaturalEUMETSAT = {
8007
- service: eumetviewEUMETSAT.url,
8008
- name: 'meteosat:msg_natural',
8009
- enabled: true,
8010
- id: generateLayerId(),
8011
- layerType: LayerType.mapLayer
8012
- };
8013
-
8014
- var publicLayers = /*#__PURE__*/Object.freeze({
8015
- __proto__: null,
8016
- baseLayer: baseLayer$1,
8017
- baseLayerGrey: baseLayerGrey$1,
8018
- baseLayerOpenStreetMapNL: baseLayerOpenStreetMapNL$1,
8019
- baseLayerArcGisCanvas: baseLayerArcGisCanvas$1,
8020
- baseLayerWorldMap: baseLayerWorldMap$1,
8021
- baseLayerHeiGit: baseLayerHeiGit,
8022
- overLayer: overLayer$1,
8023
- msgCppLayer: msgCppLayer,
8024
- veiligheidsRegiosGebiedsIndelingenLabels: veiligheidsRegiosGebiedsIndelingenLabels,
8025
- veiligheidsRegiosGebiedsIndelingen: veiligheidsRegiosGebiedsIndelingen,
8026
- radarLayer: radarLayer$1,
8027
- radarLayerWithError: radarLayerWithError,
8028
- obsAirTemperature: obsAirTemperature,
8029
- obsWind: obsWind,
8030
- obsAirPressureAtSeaLevel: obsAirPressureAtSeaLevel,
8031
- obsRelativeHumidity: obsRelativeHumidity,
8032
- obsGlobalSolarRadiation: obsGlobalSolarRadiation,
8033
- obsPrecipitationIntensityPWS: obsPrecipitationIntensityPWS,
8034
- harmonieRelativeHumidityPl: harmonieRelativeHumidityPl,
8035
- harmonieWindPl: harmonieWindPl,
8036
- harmonieAirTemperature: harmonieAirTemperature,
8037
- harmoniePrecipitation: harmoniePrecipitation,
8038
- harmoniePressure: harmoniePressure,
8039
- harmonieWindFlags: harmonieWindFlags,
8040
- klimaatAtlasTG3: klimaatAtlasTG3,
8041
- dwdWarningLayer: dwdWarningLayer,
8042
- dwdRadarLayer: dwdRadarLayer,
8043
- dwdObservationsWetterLayer: dwdObservationsWetterLayer,
8044
- dwdObservationsWetterLayerWithHeader: dwdObservationsWetterLayerWithHeader,
8045
- dwdObservationsWindLayer: dwdObservationsWindLayer,
8046
- FMITemp: FMITemp,
8047
- MetNoTemp: MetNoTemp,
8048
- metNorwayWind1: metNorwayWind1,
8049
- metNorwayWind2: metNorwayWind2,
8050
- metNorwayWind3: metNorwayWind3,
8051
- metNorwayLatestT: metNorwayLatestT,
8052
- metNorwaySalinaty: metNorwaySalinaty,
8053
- msgFesEUMETSAT: msgFesEUMETSAT,
8054
- msgNaturalenhncdEUMETSAT: msgNaturalenhncdEUMETSAT,
8055
- msgAshEUMETSAT: msgAshEUMETSAT,
8056
- msgCthEUMETSAT: msgCthEUMETSAT,
8057
- msgFogEUMETSAT: msgFogEUMETSAT,
8058
- msgNaturalEUMETSAT: msgNaturalEUMETSAT
8059
- });
8060
-
8061
- /* *
8062
- * Licensed under the Apache License, Version 2.0 (the "License");
8063
- * you may not use this file except in compliance with the License.
8064
- * You may obtain a copy of the License at
8065
- *
8066
- * http://www.apache.org/licenses/LICENSE-2.0
8067
- *
8068
- * Unless required by applicable law or agreed to in writing, software
8069
- * distributed under the License is distributed on an "AS IS" BASIS,
8070
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8071
- * See the License for the specific language governing permissions and
8072
- * limitations under the License.
8073
- *
8074
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
8075
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
8076
- * */
8077
- var availableDefaultBaseLayers = [baseLayerGrey$1, baseLayerArcGisCanvas$1, baseLayerOpenStreetMapNL$1, baseLayerHeiGit];
8078
- var preloadedDefaultBaseServices = [KNMIgeoservicesBaselayers, DWD];
8079
- var preloadedDefaultMapServices = [KNMIgeoservicesRadar, MetNorwayService, FMIopenwms, ECMWFPublicService, KNMIgeoservicesHarmonie, KNMIgeoservicesHarmonieMLService, KNMIgeoservicesObs, DWD];
8080
-
8081
- var defaultConfigurations = /*#__PURE__*/Object.freeze({
8082
- __proto__: null,
8083
- availableDefaultBaseLayers: availableDefaultBaseLayers,
8084
- preloadedDefaultBaseServices: preloadedDefaultBaseServices,
8085
- preloadedDefaultMapServices: preloadedDefaultMapServices
8086
- });
8087
-
8088
- var useStyles$H = makeStyles({
8089
- buttonDiv: {
8090
- position: 'relative'
8091
- },
8092
- loadingButton: {
8093
- position: 'absolute',
8094
- top: 7,
8095
- left: 7,
8096
- zIndex: 1
8097
- },
8098
- button: {
8099
- width: '24px',
8100
- height: '24px',
8101
- margin: '6px 0px 0px 10px'
8102
- }
8103
- });
8104
-
8105
- var validateServiceUrl = function validateServiceUrl(url) {
8106
- if (url === '' || url === null || typeof url === 'undefined') return false;
8107
- var matcher = /^(?:\w+:)?\/\/([^\s.]+\.\S{2}|[0-9a-zA-Z]+[:?\d]*)\S*$/;
8108
- if (!matcher.test(url)) return false;
8109
- return true;
8020
+ var validateServiceUrl = function validateServiceUrl(url) {
8021
+ if (url === '' || url === null || typeof url === 'undefined') return false;
8022
+ var matcher = /^(?:\w+:)?\/\/([^\s.]+\.\S{2}|[0-9a-zA-Z]+[:?\d]*)\S*$/;
8023
+ if (!matcher.test(url)) return false;
8024
+ return true;
8110
8025
  };
8111
8026
 
8112
8027
  var AddLayersPopup = function AddLayersPopup(_ref) {
@@ -8804,12 +8719,12 @@ var useStyles$D = makeStyles(function (theme) {
8804
8719
  },
8805
8720
  backgroundColor: function backgroundColor(_ref2) {
8806
8721
  var isActive = _ref2.isActive;
8807
- return isActive ? theme.palette.geowebColors.buttons.primaryActive.fill : 'inherit';
8722
+ return isActive ? theme.palette.geowebColors.buttons.primary.active.fill : 'inherit';
8808
8723
  },
8809
8724
  '&:focus': {
8810
8725
  backgroundColor: function backgroundColor(_ref3) {
8811
8726
  var isActive = _ref3.isActive;
8812
- return isActive ? theme.palette.geowebColors.buttons.primaryMouseover.fill : theme.palette.geowebColors.layerManager.tableRowMouseover.rgba;
8727
+ return isActive ? theme.palette.geowebColors.buttons.primary.mouseOver.fill : theme.palette.geowebColors.layerManager.tableRowMouseover.rgba;
8813
8728
  },
8814
8729
  outline: theme.palette.geowebColors.buttons.focusDefault.outline,
8815
8730
  borderRadius: 0
@@ -8817,7 +8732,7 @@ var useStyles$D = makeStyles(function (theme) {
8817
8732
  '&:hover': {
8818
8733
  backgroundColor: function backgroundColor(_ref4) {
8819
8734
  var isActive = _ref4.isActive;
8820
- return isActive ? theme.palette.geowebColors.buttons.primaryMouseover.fill : theme.palette.geowebColors.layerManager.tableRowMouseover.rgba;
8735
+ return isActive ? theme.palette.geowebColors.buttons.primary.mouseOver.fill : theme.palette.geowebColors.layerManager.tableRowMouseover.rgba;
8821
8736
  }
8822
8737
  }
8823
8738
  },
@@ -10623,63 +10538,61 @@ var LayerManager = function LayerManager(_ref) {
10623
10538
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10624
10539
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
10625
10540
  * */
10626
- var useButtonStyles = makeStyles(function (theme) {
10627
- return createStyles({
10628
- button: {
10629
- height: '24px',
10630
- width: function width(_ref) {
10631
- var _width = _ref.width;
10632
- return _width ? "".concat(_width, "px") : '24px';
10633
- },
10634
- border: 0,
10635
- backgroundColor: theme.palette.geowebColors.buttons.surfaceIconDefault.fill,
10636
- borderRadius: '4.5px',
10637
- textTransform: 'none',
10638
- '& svg path, svg text': {
10639
- fill: theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat
10640
- },
10641
- '&:hover': {
10642
- backgroundColor: theme.palette.geowebColors.buttons.flatMouseover.fill
10643
- },
10644
- '&:disabled': {
10645
- backgroundColor: theme.palette.geowebColors.buttons.disabled.fill,
10646
- '& svg path, svg text': {
10647
- fill: theme.palette.geowebColors.typographyAndIcons.iconLinkDisabled
10648
- },
10649
- border: "1px solid ".concat(theme.palette.geowebColors.buttons.disabled.fill)
10650
- },
10651
- '&.Mui-selected': {
10652
- backgroundColor: theme.palette.geowebColors.buttons.primaryActive.fill,
10653
- '&:hover': {
10654
- backgroundColor: theme.palette.geowebColors.buttons.primaryMouseover.fill
10655
- },
10656
- '& svg': {
10657
- backgroundColor: 'transparent'
10658
- },
10659
- '& svg path, svg text': {
10660
- fill: theme.palette.geowebColors.typographyAndIcons.buttonIcon
10661
- }
10662
- }
10663
- }
10664
- });
10665
- });
10666
10541
 
10667
- var ToggleIconButton = function ToggleIconButton(_a) {
10542
+ var CustomToggleButton = function CustomToggleButton(_a) {
10543
+ var _a$variant = _a.variant,
10544
+ variant = _a$variant === void 0 ? 'primary' : _a$variant,
10545
+ _a$value = _a.value,
10546
+ value = _a$value === void 0 ? 0 : _a$value,
10547
+ props = __rest(_a, ["variant", "value"]);
10548
+
10549
+ return /*#__PURE__*/React.createElement(ToggleButton, Object.assign({
10550
+ className: variant,
10551
+ value: value
10552
+ }, props));
10553
+ };
10554
+
10555
+ /* *
10556
+ * Licensed under the Apache License, Version 2.0 (the "License");
10557
+ * you may not use this file except in compliance with the License.
10558
+ * You may obtain a copy of the License at
10559
+ *
10560
+ * http://www.apache.org/licenses/LICENSE-2.0
10561
+ *
10562
+ * Unless required by applicable law or agreed to in writing, software
10563
+ * distributed under the License is distributed on an "AS IS" BASIS,
10564
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10565
+ * See the License for the specific language governing permissions and
10566
+ * limitations under the License.
10567
+ *
10568
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10569
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
10570
+ * */
10571
+
10572
+ var ToolButton = function ToolButton(_a) {
10668
10573
  var active = _a.active,
10669
- width = _a.width,
10574
+ _a$width = _a.width,
10575
+ width = _a$width === void 0 ? '24px' : _a$width,
10576
+ _a$height = _a.height,
10577
+ height = _a$height === void 0 ? '24px' : _a$height,
10670
10578
  children = _a.children,
10671
10579
  _a$value = _a.value,
10672
10580
  value = _a$value === void 0 ? 0 : _a$value,
10673
- props = __rest(_a, ["active", "width", "children", "value"]);
10581
+ _a$sx = _a.sx,
10582
+ sx = _a$sx === void 0 ? {} : _a$sx,
10583
+ props = __rest(_a, ["active", "width", "height", "children", "value", "sx"]);
10674
10584
 
10675
- var classes = useButtonStyles({
10676
- width: width
10677
- });
10678
- return /*#__PURE__*/React.createElement(ToggleButton, Object.assign({
10679
- className: classes.button,
10585
+ return /*#__PURE__*/React.createElement(CustomToggleButton, Object.assign({
10586
+ variant: "tool",
10680
10587
  disableRipple: true,
10681
10588
  selected: active,
10682
- value: value
10589
+ value: value,
10590
+ sx: Object.assign({
10591
+ width: "".concat(width, "!important"),
10592
+ height: "".concat(height, "!important"),
10593
+ textTransform: 'none!important',
10594
+ padding: '11px!important'
10595
+ }, sx)
10683
10596
  }, props), children);
10684
10597
  };
10685
10598
 
@@ -10719,18 +10632,18 @@ var KeywordFilterButtonConnect = function KeywordFilterButtonConnect(_ref) {
10719
10632
  source: source
10720
10633
  }));
10721
10634
  }, [currentActiveMapId, dispatch, isOpenInStore, mapId, source]);
10722
- return /*#__PURE__*/React.createElement(ToggleIconButton, {
10635
+ return /*#__PURE__*/React.createElement(ToolButton, {
10723
10636
  onClick: openFilterResultsDialog,
10724
10637
  active: isOpenInStore,
10725
10638
  id: "keywordFilterButton",
10726
10639
  "data-testid": "keywordFilterButton",
10727
- disableRipple: true
10640
+ disableRipple: true,
10641
+ variant: "tool"
10728
10642
  }, /*#__PURE__*/React.createElement(SvgIcon, {
10729
10643
  viewBox: "0 0 24 24",
10730
10644
  xmlns: "http://www.w3.org/2000/svg"
10731
10645
  }, /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("path", {
10732
10646
  d: "M14.155 12.567c1.362 0 2.523.848 2.992 2.043h1.895a1.173 1.173 0 0 1 0 2.346h-1.895A3.213 3.213 0 0 1 14.155 19a3.213 3.213 0 0 1-2.992-2.044h-5.99a1.172 1.172 0 1 1 0-2.346h5.99a3.214 3.214 0 0 1 2.992-2.043zm0 1.755a1.461 1.461 0 1 0 0 2.922 1.461 1.461 0 0 0 0-2.922zM10.06 5c1.362 0 2.524.848 2.992 2.044h5.99a1.173 1.173 0 1 1 0 2.344h-5.99a3.214 3.214 0 0 1-2.992 2.044 3.216 3.216 0 0 1-2.992-2.044H5.173a1.172 1.172 0 1 1 0-2.344h1.895A3.216 3.216 0 0 1 10.06 5zm0 1.754a1.461 1.461 0 1 0 0 2.922 1.461 1.461 0 0 0 0-2.922z",
10733
- fill: "#FFF",
10734
10647
  fillRule: "evenodd"
10735
10648
  }))));
10736
10649
  };
@@ -10772,14 +10685,14 @@ var getSearchFilter = createSelector(layerSelectStore, function (store) {
10772
10685
  *
10773
10686
  * Example getActiveServices(store);
10774
10687
  * @param {object} store store: object - store object
10775
- * @returns {array} returnType: array of active services
10688
+ * @returns {object} returnType: object of active services
10776
10689
  */
10777
10690
 
10778
10691
  var getActiveServices = createSelector(layerSelectStore, function (store) {
10779
10692
  var _a;
10780
10693
 
10781
10694
  return store ? (_a = store === null || store === void 0 ? void 0 : store.filters) === null || _a === void 0 ? void 0 : _a.activeServices.byId : {};
10782
- });
10695
+ }, selectorMemoizationOptions);
10783
10696
  /**
10784
10697
  * Returns all ids of enabled services
10785
10698
  *
@@ -10801,36 +10714,75 @@ var getEnabledServiceIds = createSelector(layerSelectStore, function (store) {
10801
10714
 
10802
10715
  return (_a = store === null || store === void 0 ? void 0 : store.filters) === null || _a === void 0 ? void 0 : _a.activeServices.byId[service].id;
10803
10716
  });
10804
- });
10717
+ }, selectorMemoizationOptions);
10805
10718
  /**
10806
- * Returns all keywords
10719
+ * Returns all ids of checked keywords
10807
10720
  *
10808
- * Example getKeywords(store);
10721
+ * Example getCheckedKeywordIds(store);
10809
10722
  * @param {object} store store: object - store object
10810
- * @returns {array} returnType: array of keyword objects
10723
+ * @returns {array} returnType: array of keyword ids that are checked
10811
10724
  */
10812
10725
 
10813
- var getKeywords = createSelector(layerSelectStore, function (store) {
10814
- return store ? store.filters.keywords : [];
10815
- });
10726
+ var getCheckedKeywordIds = createSelector(layerSelectStore, function (store) {
10727
+ var _a, _b;
10816
10728
 
10817
- /* *
10818
- * Licensed under the Apache License, Version 2.0 (the "License");
10819
- * you may not use this file except in compliance with the License.
10820
- * You may obtain a copy of the License at
10729
+ var checkedKeywords = (_b = (_a = store === null || store === void 0 ? void 0 : store.filters) === null || _a === void 0 ? void 0 : _a.keywords.allIds.filter(function (keyword) {
10730
+ var _a;
10731
+
10732
+ return (_a = store === null || store === void 0 ? void 0 : store.filters) === null || _a === void 0 ? void 0 : _a.keywords.byId[keyword].checked;
10733
+ })) !== null && _b !== void 0 ? _b : [];
10734
+ return checkedKeywords.map(function (keyword) {
10735
+ var _a;
10736
+
10737
+ return (_a = store === null || store === void 0 ? void 0 : store.filters) === null || _a === void 0 ? void 0 : _a.keywords.byId[keyword].id;
10738
+ });
10739
+ }, selectorMemoizationOptions);
10740
+ /**
10741
+ * Returns ids of all keywords
10821
10742
  *
10822
- * http://www.apache.org/licenses/LICENSE-2.0
10743
+ * Example getAllKeywordIds(store);
10744
+ * @param {object} store store: object - store object
10745
+ * @returns {array} returnType: array of all keyword ids
10746
+ */
10747
+
10748
+ var getAllKeywordIds = createSelector(layerSelectStore, function (store) {
10749
+ var _a, _b;
10750
+
10751
+ return (_b = (_a = store === null || store === void 0 ? void 0 : store.filters) === null || _a === void 0 ? void 0 : _a.keywords.allIds) !== null && _b !== void 0 ? _b : [];
10752
+ }, selectorMemoizationOptions);
10753
+ /**
10754
+ * Returns if all keywords are checked
10823
10755
  *
10824
- * Unless required by applicable law or agreed to in writing, software
10825
- * distributed under the License is distributed on an "AS IS" BASIS,
10826
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10827
- * See the License for the specific language governing permissions and
10828
- * limitations under the License.
10756
+ * Example isAllKeywordsChecked(store);
10757
+ * @param {object} store store: object - store object
10758
+ * @returns {array} returnType: boolean if all keywords are checked
10759
+ */
10760
+
10761
+ var isAllKeywordsChecked = createSelector(layerSelectStore, function (store) {
10762
+ var _a, _b;
10763
+
10764
+ return (_b = (_a = store === null || store === void 0 ? void 0 : store.filters) === null || _a === void 0 ? void 0 : _a.keywords) === null || _b === void 0 ? void 0 : _b.allIds.every(function (keyword) {
10765
+ var _a, _b;
10766
+
10767
+ return (_b = (_a = store === null || store === void 0 ? void 0 : store.filters) === null || _a === void 0 ? void 0 : _a.keywords) === null || _b === void 0 ? void 0 : _b.byId[keyword].checked;
10768
+ });
10769
+ });
10770
+ /**
10771
+ * Gets a KeywordObject by its id
10829
10772
  *
10830
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10831
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
10832
- * */
10833
- var style = {
10773
+ * Example: keywordObject = getKeywordObjectById(store, 'keywordId')
10774
+ * @param {object} store object from which the keyword state will be extracted
10775
+ * @param {string} keywordId Id of the keyword
10776
+ * @returns {object} object containing keyword information (id, amount, amountVisible, checked)
10777
+ */
10778
+
10779
+ var getKeywordObjectById = function getKeywordObjectById(store, keywordId) {
10780
+ var _a, _b, _c, _d;
10781
+
10782
+ return (_d = (_c = (_b = (_a = store === null || store === void 0 ? void 0 : store.layerSelect) === null || _a === void 0 ? void 0 : _a.filters) === null || _b === void 0 ? void 0 : _b.keywords) === null || _c === void 0 ? void 0 : _c.byId[keywordId]) !== null && _d !== void 0 ? _d : {};
10783
+ };
10784
+
10785
+ var style$1 = {
10834
10786
  dialogTitle: {
10835
10787
  display: 'flex',
10836
10788
  justifyContent: 'space-between',
@@ -10886,63 +10838,340 @@ var ServicePopup = function ServicePopup(_ref) {
10886
10838
  hideBackdrop = _ref$hideBackdrop === void 0 ? false : _ref$hideBackdrop,
10887
10839
  isOpen = _ref.isOpen,
10888
10840
  closePopup = _ref.closePopup,
10889
- _ref$url = _ref.url,
10890
- url = _ref$url === void 0 ? '' : _ref$url;
10841
+ url = _ref.url,
10842
+ services = _ref.services,
10843
+ serviceSetLayers = _ref.serviceSetLayers;
10844
+
10845
+ var _a, _b;
10846
+
10847
+ var _React$useState = React.useState(servicePopupVariant !== 'edit' || services === undefined ? '' : (_a = services[url]) === null || _a === void 0 ? void 0 : _a.name),
10848
+ _React$useState2 = _slicedToArray(_React$useState, 2),
10849
+ serviceName = _React$useState2[0],
10850
+ setServiceName = _React$useState2[1];
10851
+
10852
+ var _React$useState3 = React.useState(servicePopupVariant === 'add' || url === undefined ? '' : url),
10853
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
10854
+ serviceUrl = _React$useState4[0],
10855
+ setServiceUrl = _React$useState4[1];
10856
+
10857
+ var _React$useState5 = React.useState(servicePopupVariant !== 'edit' || services === undefined ? '' : (_b = services[url]) === null || _b === void 0 ? void 0 : _b["abstract"]),
10858
+ _React$useState6 = _slicedToArray(_React$useState5, 2),
10859
+ _abstract = _React$useState6[0],
10860
+ setAbstract = _React$useState6[1];
10861
+
10862
+ var _React$useState7 = React.useState(false),
10863
+ _React$useState8 = _slicedToArray(_React$useState7, 2),
10864
+ disableButton = _React$useState8[0],
10865
+ setDisableButton = _React$useState8[1];
10866
+
10867
+ var _React$useState9 = React.useState(false),
10868
+ _React$useState10 = _slicedToArray(_React$useState9, 2),
10869
+ isLoading = _React$useState10[0],
10870
+ setIsLoading = _React$useState10[1];
10871
+
10872
+ var _React$useState11 = React.useState(false),
10873
+ _React$useState12 = _slicedToArray(_React$useState11, 2),
10874
+ serviceNameHasError = _React$useState12[0],
10875
+ setServiceNameHasError = _React$useState12[1];
10876
+
10877
+ var _React$useState13 = React.useState(''),
10878
+ _React$useState14 = _slicedToArray(_React$useState13, 2),
10879
+ serviceNameHelperText = _React$useState14[0],
10880
+ setServiceNameHelperText = _React$useState14[1];
10881
+
10882
+ var _React$useState15 = React.useState(false),
10883
+ _React$useState16 = _slicedToArray(_React$useState15, 2),
10884
+ serviceUrlHasError = _React$useState16[0],
10885
+ setServiceUrlHasError = _React$useState16[1];
10886
+
10887
+ var _React$useState17 = React.useState(''),
10888
+ _React$useState18 = _slicedToArray(_React$useState17, 2),
10889
+ serviceUrlHelperText = _React$useState18[0],
10890
+ setServiceUrlHelperText = _React$useState18[1];
10891
+
10892
+ var validateServiceUrl = function validateServiceUrl(url) {
10893
+ if (url === '' || url === null || typeof url === 'undefined') return false;
10894
+ var matcher = /^(?:\w+:)?\/\/([^\s.]+\.\S{2}|[0-9a-zA-Z]+[:?\d]*)\S*$/;
10895
+ if (!matcher.test(url)) return false;
10896
+ return true;
10897
+ };
10898
+
10899
+ var addNewService = function addNewService() {
10900
+ return __awaiter(void 0, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
10901
+ var layers, serviceLayers, _iterator, _step, object;
10902
+
10903
+ return regeneratorRuntime.wrap(function _callee$(_context) {
10904
+ while (1) {
10905
+ switch (_context.prev = _context.next) {
10906
+ case 0:
10907
+ setServiceUrlHasError(false);
10908
+
10909
+ if (!validateServiceUrl(serviceUrl)) {
10910
+ _context.next = 15;
10911
+ break;
10912
+ }
10913
+
10914
+ setIsLoading(true);
10915
+ _context.prev = 3;
10916
+ _context.next = 6;
10917
+ return getLayersFromService(serviceUrl);
10918
+
10919
+ case 6:
10920
+ layers = _context.sent;
10921
+
10922
+ if (layers.children) {
10923
+ serviceLayers = [];
10924
+ _iterator = _createForOfIteratorHelper(layers.children);
10925
+
10926
+ try {
10927
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
10928
+ object = _step.value;
10929
+ serviceLayers.push({
10930
+ name: object.name,
10931
+ text: object.title,
10932
+ leaf: object.leaf,
10933
+ path: object.path,
10934
+ keywords: object.keywords ? object.keywords : [],
10935
+ "abstract": object["abstract"] ? object["abstract"] : '',
10936
+ styles: object.styles ? object.styles : []
10937
+ });
10938
+ }
10939
+ } catch (err) {
10940
+ _iterator.e(err);
10941
+ } finally {
10942
+ _iterator.f();
10943
+ }
10944
+
10945
+ serviceSetLayers({
10946
+ id: serviceUrl,
10947
+ name: serviceName,
10948
+ service: serviceUrl,
10949
+ layers: serviceLayers
10950
+ });
10951
+ setIsLoading(false);
10952
+ closePopupAndResetState();
10953
+ }
10954
+
10955
+ _context.next = 15;
10956
+ break;
10957
+
10958
+ case 10:
10959
+ _context.prev = 10;
10960
+ _context.t0 = _context["catch"](3);
10961
+ setIsLoading(false);
10962
+ setServiceUrlHasError(true);
10963
+ setServiceUrlHelperText('Error: Download failed. Check the URL.');
10964
+
10965
+ case 15:
10966
+ case "end":
10967
+ return _context.stop();
10968
+ }
10969
+ }
10970
+ }, _callee, null, [[3, 10]]);
10971
+ }));
10972
+ };
10973
+
10974
+ var ServiceNameInRedux = function ServiceNameInRedux() {
10975
+ if (servicePopupVariant === 'add' || servicePopupVariant === 'save') {
10976
+ for (var service in services) {
10977
+ if (services && services[service].name.toLowerCase() === serviceName.toLowerCase()) return true;
10978
+ }
10979
+
10980
+ return false;
10981
+ }
10982
+
10983
+ return false;
10984
+ };
10985
+
10986
+ var UrlInRedux = function UrlInRedux() {
10987
+ if (servicePopupVariant === 'add' || servicePopupVariant === 'save') {
10988
+ if (services && services[serviceUrl]) {
10989
+ return true;
10990
+ }
10991
+
10992
+ return false;
10993
+ }
10994
+
10995
+ return false;
10996
+ }; // Check serviceName
10997
+
10998
+
10999
+ React.useEffect(function () {
11000
+ setServiceNameHelperText('');
11001
+
11002
+ if (ServiceNameInRedux()) {
11003
+ setServiceNameHasError(true);
11004
+ setServiceNameHelperText('Error: This name already exists. Choose another name.');
11005
+ } else {
11006
+ setServiceNameHasError(false);
11007
+ setServiceNameHelperText('');
11008
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
11009
+
11010
+ }, [serviceName]); // Check Url
11011
+
11012
+ React.useEffect(function () {
11013
+ setServiceUrlHelperText('');
11014
+
11015
+ if (serviceUrl.length > 0 && !validateServiceUrl(serviceUrl)) {
11016
+ setServiceUrlHasError(true);
11017
+ setServiceUrlHelperText('Error: Not a valid URL.');
11018
+ } else if (UrlInRedux()) {
11019
+ setServiceUrlHasError(true);
11020
+ setServiceUrlHelperText('Error: URL already exists.');
11021
+ } else {
11022
+ setServiceUrlHasError(false);
11023
+ setServiceNameHelperText('');
11024
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
11025
+
11026
+ }, [serviceUrl]); // Check if all fields are valid
11027
+
11028
+ React.useEffect(function () {
11029
+ if (!serviceNameHasError && !serviceUrlHasError && validateServiceUrl(serviceUrl) && serviceName.length > 0) {
11030
+ setDisableButton(false);
11031
+ } else setDisableButton(true);
11032
+ }, [serviceNameHasError, serviceUrlHasError, serviceName, serviceUrl]);
11033
+
11034
+ var closePopupAndResetState = function closePopupAndResetState() {
11035
+ setServiceName('');
11036
+ setServiceUrl('');
11037
+ setAbstract('');
11038
+ closePopup();
11039
+ };
11040
+
10891
11041
  return /*#__PURE__*/React.createElement(Dialog, {
10892
11042
  open: isOpen,
10893
11043
  hideBackdrop: hideBackdrop,
10894
11044
  fullWidth: true,
10895
11045
  maxWidth: "xs",
10896
- sx: style.container
11046
+ "data-testid": "servicePopup",
11047
+ sx: style$1.container
10897
11048
  }, /*#__PURE__*/React.createElement(DialogTitle, {
10898
- sx: style.dialogTitle
11049
+ sx: style$1.dialogTitle
10899
11050
  }, /*#__PURE__*/React.createElement(Typography, {
10900
11051
  variant: "h5",
10901
11052
  component: "span"
10902
11053
  }, getTitleForVariant(servicePopupVariant)), /*#__PURE__*/React.createElement(IconButton, {
10903
11054
  size: "small",
10904
- onClick: closePopup,
10905
- "data-testid": "ClosePopupButtonCross",
10906
- sx: style.closeBtn
11055
+ onClick: closePopupAndResetState,
11056
+ "data-testid": "closePopupButtonCross",
11057
+ sx: style$1.closeBtn
10907
11058
  }, /*#__PURE__*/React.createElement(Close, null))), /*#__PURE__*/React.createElement(DialogContent, {
10908
- sx: style.dialogContent
11059
+ sx: style$1.dialogContent
10909
11060
  }, /*#__PURE__*/React.createElement(TextField, {
10910
- sx: style.textField,
11061
+ sx: style$1.textField,
10911
11062
  variant: "filled",
10912
- label: "Service name"
11063
+ label: "Service name",
11064
+ onChange: function onChange(event) {
11065
+ return setServiceName(event.target.value);
11066
+ },
11067
+ value: serviceName,
11068
+ inputProps: {
11069
+ 'data-testid': 'serviceNameTextField'
11070
+ },
11071
+ error: serviceNameHasError,
11072
+ helperText: serviceNameHelperText
10913
11073
  })), /*#__PURE__*/React.createElement(DialogContent, {
10914
- sx: style.dialogContent
11074
+ sx: style$1.dialogContent
10915
11075
  }, /*#__PURE__*/React.createElement(TextField, {
10916
- sx: style.textField,
11076
+ sx: style$1.textField,
10917
11077
  variant: "filled",
10918
11078
  label: "Service URL",
10919
- defaultValue: url,
10920
- id: "service-url"
11079
+ onChange: function onChange(event) {
11080
+ return setServiceUrl(event.target.value);
11081
+ },
11082
+ value: serviceUrl,
11083
+ id: "service-url",
11084
+ inputProps: {
11085
+ 'data-testid': 'serviceUrlTextField'
11086
+ },
11087
+ error: serviceUrlHasError,
11088
+ helperText: serviceUrlHelperText
10921
11089
  })), /*#__PURE__*/React.createElement(DialogContent, {
10922
- sx: style.dialogContent
11090
+ sx: style$1.dialogContent
10923
11091
  }, /*#__PURE__*/React.createElement(TextField, {
10924
- sx: style.textField,
11092
+ sx: style$1.textField,
10925
11093
  variant: "filled",
10926
11094
  multiline: true,
10927
11095
  rows: 4,
10928
11096
  label: "Abstracts",
10929
- helperText: "Short description of what this service does"
11097
+ helperText: "Short description of what this service does",
11098
+ onChange: function onChange(event) {
11099
+ return setAbstract(event.target.value);
11100
+ },
11101
+ value: _abstract,
11102
+ "data-testid": "abstractTextField"
10930
11103
  })), /*#__PURE__*/React.createElement(DialogActions, {
10931
- sx: style.footerContent
11104
+ sx: style$1.footerContent
10932
11105
  }, /*#__PURE__*/React.createElement(Button, {
11106
+ onClick: closePopupAndResetState,
11107
+ "data-testid": "closePopupButtonCancel",
10933
11108
  variant: "tertiary",
10934
- onClick: closePopup,
10935
- "data-testid": "ClosePopupButtonCancel",
10936
11109
  sx: {
10937
11110
  width: '117px'
10938
11111
  }
10939
- }, "cancel"), /*#__PURE__*/React.createElement(Button, {
11112
+ }, "cancel"), !isLoading ? /*#__PURE__*/React.createElement(Button, {
11113
+ variant: "primary",
11114
+ disabled: disableButton,
11115
+ onClick: addNewService,
11116
+ "data-testid": "saveServiceButton",
10940
11117
  sx: {
10941
11118
  width: '117px',
10942
11119
  marginLeft: '16px!important'
10943
- },
10944
- variant: "primary"
10945
- }, "save")));
11120
+ }
11121
+ }, "save") : /*#__PURE__*/React.createElement(Box, {
11122
+ "data-testid": "loadingIndicator",
11123
+ sx: {
11124
+ width: '117px',
11125
+ height: '40px',
11126
+ display: 'flex',
11127
+ justifyContent: 'center',
11128
+ alignItems: 'center',
11129
+ marginLeft: '16px!important'
11130
+ }
11131
+ }, /*#__PURE__*/React.createElement(CircularProgress, {
11132
+ size: 35
11133
+ }))));
11134
+ };
11135
+
11136
+ /* *
11137
+ * Licensed under the Apache License, Version 2.0 (the "License");
11138
+ * you may not use this file except in compliance with the License.
11139
+ * You may obtain a copy of the License at
11140
+ *
11141
+ * http://www.apache.org/licenses/LICENSE-2.0
11142
+ *
11143
+ * Unless required by applicable law or agreed to in writing, software
11144
+ * distributed under the License is distributed on an "AS IS" BASIS,
11145
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11146
+ * See the License for the specific language governing permissions and
11147
+ * limitations under the License.
11148
+ *
11149
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11150
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
11151
+ * */
11152
+
11153
+ var ServicePopupConnect = function ServicePopupConnect(_ref) {
11154
+ var servicePopupVariant = _ref.servicePopupVariant,
11155
+ hideBackdrop = _ref.hideBackdrop,
11156
+ isOpen = _ref.isOpen,
11157
+ closePopup = _ref.closePopup,
11158
+ url = _ref.url;
11159
+ var dispatch = useDispatch();
11160
+ var services = useSelector(function (store) {
11161
+ return getServices(store);
11162
+ });
11163
+ var serviceSetLayers$1 = React__default.useCallback(function (payload) {
11164
+ dispatch(serviceSetLayers(payload));
11165
+ }, [dispatch]);
11166
+ return /*#__PURE__*/React__default.createElement(ServicePopup, {
11167
+ servicePopupVariant: servicePopupVariant,
11168
+ hideBackdrop: hideBackdrop,
11169
+ isOpen: isOpen,
11170
+ closePopup: closePopup,
11171
+ url: url,
11172
+ services: services,
11173
+ serviceSetLayers: serviceSetLayers$1
11174
+ });
10946
11175
  };
10947
11176
 
10948
11177
  var isURL = function isURL(string) {
@@ -10952,11 +11181,6 @@ var useStyles$q = makeStyles(function (theme) {
10952
11181
  return {
10953
11182
  iconButton: {
10954
11183
  color: theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat
10955
- },
10956
- saveButton: {
10957
- color: theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat,
10958
- textTransform: 'none',
10959
- border: "1px solid ".concat(theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat)
10960
11184
  }
10961
11185
  };
10962
11186
  });
@@ -10993,6 +11217,12 @@ var SearchFieldButtonContainer = function SearchFieldButtonContainer(_ref) {
10993
11217
  setPopupOpen = _React$useState2[1];
10994
11218
 
10995
11219
  var classes = useStyles$q();
11220
+ React__default.useEffect(function () {
11221
+ if (isPopupOpen === false) {
11222
+ onClickClear();
11223
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
11224
+
11225
+ }, [isPopupOpen]);
10996
11226
  var ClearButton = /*#__PURE__*/React__default.createElement(Tooltip, {
10997
11227
  title: "Clear",
10998
11228
  placement: "top"
@@ -11009,12 +11239,11 @@ var SearchFieldButtonContainer = function SearchFieldButtonContainer(_ref) {
11009
11239
  marginRight: '15px'
11010
11240
  }
11011
11241
  }, ClearButton), /*#__PURE__*/React__default.createElement(Button, {
11012
- variant: "outlined",
11242
+ variant: "tertiary",
11013
11243
  onClick: function onClick() {
11014
11244
  return setPopupOpen(true);
11015
- },
11016
- className: classes.saveButton
11017
- }, "Save"), /*#__PURE__*/React__default.createElement(ServicePopup, {
11245
+ }
11246
+ }, "Save"), /*#__PURE__*/React__default.createElement(ServicePopupConnect, {
11018
11247
  servicePopupVariant: "save",
11019
11248
  isOpen: isPopupOpen,
11020
11249
  closePopup: function closePopup() {
@@ -11126,17 +11355,7 @@ var SearchFieldConnect = function SearchFieldConnect() {
11126
11355
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11127
11356
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
11128
11357
  * */
11129
- var filterLayersFromService = function filterLayersFromService(serviceId, services, keywords, searchString) {
11130
- var activeKeywords = keywords.filter(function (keyword) {
11131
- return keyword.checked;
11132
- });
11133
- var keywordList = activeKeywords.map(function (keyword) {
11134
- return keyword.id;
11135
- });
11136
- var allKeywordsActive = keywords.every(function (keyword) {
11137
- return keyword.checked;
11138
- });
11139
-
11358
+ var filterLayersFromService = function filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString) {
11140
11359
  if (searchString === '' && allKeywordsActive) {
11141
11360
  return services[serviceId].layers.filter(function (layer) {
11142
11361
  return layer.leaf;
@@ -11148,11 +11367,9 @@ var filterLayersFromService = function filterLayersFromService(serviceId, servic
11148
11367
  return searchStringArray.every(function (search) {
11149
11368
  var layerPathAndKeywords = layer.path.concat(layer.keywords);
11150
11369
  return (!!layerPathAndKeywords && !layerPathAndKeywords.every(function (keyword) {
11151
- return !keywordList.includes(keyword);
11370
+ return !keywordIds.includes(keyword);
11152
11371
  }) || 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) {
11153
11372
  return !keyword.toLowerCase().includes(search.toLowerCase());
11154
- }) || !!layer.path && !layer.path.every(function (group) {
11155
- return !group.toLowerCase().includes(search.toLowerCase());
11156
11373
  }) || services[serviceId].name.toLowerCase().includes(search.toLowerCase()));
11157
11374
  });
11158
11375
  }).filter(function (layer) {
@@ -11208,7 +11425,8 @@ var LayerList = function LayerList(_ref) {
11208
11425
  serviceIds = _ref.serviceIds,
11209
11426
  layerSelectHeight = _ref.layerSelectHeight,
11210
11427
  searchString = _ref.searchString,
11211
- keywords = _ref.keywords;
11428
+ keywordIds = _ref.keywordIds,
11429
+ allKeywordsActive = _ref.allKeywordsActive;
11212
11430
  var classes = useStyles$p();
11213
11431
 
11214
11432
  var _React$useState = React.useState(0),
@@ -11218,9 +11436,9 @@ var LayerList = function LayerList(_ref) {
11218
11436
 
11219
11437
  React.useEffect(function () {
11220
11438
  setNumberOfLayers(serviceIds.reduce(function (totalNumberOfLayers, serviceId) {
11221
- return totalNumberOfLayers + filterLayersFromService(serviceId, services, keywords, searchString).length;
11439
+ return totalNumberOfLayers + filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString).length;
11222
11440
  }, 0));
11223
- }, [serviceIds, keywords, services, searchString]);
11441
+ }, [serviceIds, keywordIds, services, searchString, allKeywordsActive]);
11224
11442
  return /*#__PURE__*/React.createElement("div", {
11225
11443
  "data-testid": "layerList"
11226
11444
  }, /*#__PURE__*/React.createElement("div", {
@@ -11231,7 +11449,7 @@ var LayerList = function LayerList(_ref) {
11231
11449
  overflow: 'auto'
11232
11450
  }
11233
11451
  }, serviceIds.map(function (serviceId) {
11234
- return filterLayersFromService(serviceId, services, keywords, searchString).map(function (layer) {
11452
+ return filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString).map(function (layer) {
11235
11453
  return /*#__PURE__*/React.createElement("div", {
11236
11454
  key: "".concat(serviceId, "-").concat(layer.name),
11237
11455
  className: classes.layerRow,
@@ -11275,8 +11493,11 @@ var LayerListConnect = function LayerListConnect(_ref) {
11275
11493
  var enabledServiceIds = useSelector(function (store) {
11276
11494
  return getEnabledServiceIds(store);
11277
11495
  });
11278
- var keywords = useSelector(function (store) {
11279
- return getKeywords(store);
11496
+ var checkedKeywordIds = useSelector(function (store) {
11497
+ return getCheckedKeywordIds(store);
11498
+ });
11499
+ var allKeywordsActive = useSelector(function (store) {
11500
+ return isAllKeywordsChecked(store);
11280
11501
  });
11281
11502
  var searchString = useSelector(function (store) {
11282
11503
  return getSearchFilter(store);
@@ -11285,7 +11506,8 @@ var LayerListConnect = function LayerListConnect(_ref) {
11285
11506
  services: services,
11286
11507
  serviceIds: enabledServiceIds,
11287
11508
  layerSelectHeight: layerSelectHeight,
11288
- keywords: keywords,
11509
+ keywordIds: checkedKeywordIds,
11510
+ allKeywordsActive: allKeywordsActive,
11289
11511
  searchString: searchString
11290
11512
  });
11291
11513
  };
@@ -11306,62 +11528,34 @@ var LayerListConnect = function LayerListConnect(_ref) {
11306
11528
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11307
11529
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
11308
11530
  * */
11309
- var useStyles$o = makeStyles(function (theme) {
11310
- return createStyles({
11311
- chip: {
11312
- height: '32px',
11313
- margin: '0 8px 0 0',
11314
- padding: '5px 12px 7px',
11315
- borderRadius: '20px',
11316
- border: function border(_ref) {
11317
- var isEnabled = _ref.isEnabled;
11318
- return isEnabled ? "solid 1px ".concat(theme.palette.geowebColors.buttons.primaryActive.fill) : "solid 1px ".concat(theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat);
11319
- },
11320
- backgroundColor: function backgroundColor(_ref2) {
11321
- var isEnabled = _ref2.isEnabled;
11322
- return isEnabled ? theme.palette.geowebColors.buttons.primaryActive.fill : theme.palette.geowebColors.buttons.surfaceIconDefault.fill;
11323
- },
11324
- color: function color(_ref3) {
11325
- var isEnabled = _ref3.isEnabled;
11326
- return isEnabled ? theme.palette.geowebColors.typographyAndIcons.buttonIcon : theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat;
11327
- },
11328
- "float": 'left',
11329
- whiteSpace: 'nowrap',
11330
- '&:hover': {
11331
- backgroundColor: function backgroundColor(_ref4) {
11332
- var isEnabled = _ref4.isEnabled;
11333
- return isEnabled ? theme.palette.geowebColors.buttons.primaryMouseover.fill : theme.palette.geowebColors.buttons.flatMouseover.fill;
11334
- },
11335
- border: function border(_ref5) {
11336
- var isEnabled = _ref5.isEnabled;
11337
- return isEnabled ? "solid 1px ".concat(theme.palette.geowebColors.buttons.primaryMouseover.fill) : "solid 1px ".concat(theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat);
11338
- },
11339
- cursor: 'pointer'
11340
- }
11341
- }
11342
- });
11343
- });
11531
+ var style = {
11532
+ borderRadius: '20px!important',
11533
+ marginRight: '8px',
11534
+ whiteSpace: 'nowrap',
11535
+ height: '32px!important',
11536
+ padding: '5px 12px!important',
11537
+ textTransform: 'none!important',
11538
+ fontWeight: 'normal'
11539
+ };
11344
11540
 
11345
- var ServiceChip = function ServiceChip(_ref6) {
11346
- var _ref6$all = _ref6.all,
11347
- all = _ref6$all === void 0 ? false : _ref6$all,
11348
- service = _ref6.service,
11349
- isEnabled = _ref6.isEnabled,
11350
- toggleChip = _ref6.toggleChip;
11351
- var classes = useStyles$o({
11352
- isEnabled: isEnabled
11353
- });
11354
- return /*#__PURE__*/React.createElement("div", {
11355
- role: "button",
11541
+ var ServiceChip = function ServiceChip(_ref) {
11542
+ var _ref$all = _ref.all,
11543
+ all = _ref$all === void 0 ? false : _ref$all,
11544
+ service = _ref.service,
11545
+ isEnabled = _ref.isEnabled,
11546
+ toggleChip = _ref.toggleChip;
11547
+ return /*#__PURE__*/React.createElement(CustomToggleButton, {
11548
+ variant: "boxed",
11549
+ selected: isEnabled,
11356
11550
  tabIndex: 0,
11357
- className: classes.chip,
11358
11551
  "data-testid": all ? 'serviceChipAll' : 'serviceChip',
11359
11552
  onClick: function onClick() {
11360
11553
  return toggleChip(all ? 'all' : service && service.service);
11361
11554
  },
11362
11555
  onKeyPress: function onKeyPress() {
11363
11556
  return toggleChip(all ? 'all' : service && service.service);
11364
- }
11557
+ },
11558
+ sx: style
11365
11559
  }, service ? service.name : 'All');
11366
11560
  };
11367
11561
 
@@ -11430,7 +11624,7 @@ var ServiceChipConnect = function ServiceChipConnect(_ref) {
11430
11624
  });
11431
11625
  };
11432
11626
 
11433
- var useStyles$n = makeStyles(function (theme) {
11627
+ var useStyles$o = makeStyles(function (theme) {
11434
11628
  return createStyles({
11435
11629
  serviceChips: {
11436
11630
  width: '100%',
@@ -11497,31 +11691,72 @@ var ServiceList = function ServiceList(_ref4) {
11497
11691
  width = _React$useState4[0],
11498
11692
  setWidth = _React$useState4[1];
11499
11693
 
11694
+ var _React$useState5 = React.useState(null),
11695
+ _React$useState6 = _slicedToArray(_React$useState5, 2),
11696
+ intervalId = _React$useState6[0],
11697
+ setIntervalId = _React$useState6[1];
11698
+
11500
11699
  var ref = React.useRef(null);
11700
+ var scrollSpeed = 5;
11501
11701
  var maxWidthValue = ref && ref.current && ref.current.scrollWidth && ref.current.scrollWidth >= layerSelectWidth - margin && ref.current.scrollWidth || layerSelectWidth - 50;
11502
- var classes = useStyles$n({
11702
+ var classes = useStyles$o({
11503
11703
  margin: margin,
11504
11704
  maxWidthValue: maxWidthValue
11505
11705
  });
11506
- var onLeftArrowClick = React.useCallback(function () {
11507
- setMargin(Math.max(0, margin - 100));
11508
- }, [margin]);
11509
- var onRightArrowClick = React.useCallback(function () {
11510
- setMargin(Math.min(width - layerSelectWidth, margin + 100));
11511
- }, [margin, layerSelectWidth, width]);
11706
+
11707
+ var onMouseWheelScroll = function onMouseWheelScroll(e) {
11708
+ var delta = e.deltaY;
11709
+ var scrollSpeed = 0.1;
11710
+ if (delta > 0) setMargin(Math.min(Math.max(margin + scrollSpeed * delta, 0), width - layerSelectWidth));else setMargin(Math.min(Math.max(margin + scrollSpeed * delta, 0), width - layerSelectWidth));
11711
+ };
11712
+
11713
+ var onLeftChevronPressed = function onLeftChevronPressed() {
11714
+ setMargin(function (prevMargin) {
11715
+ return Math.max(prevMargin - scrollSpeed, 0);
11716
+ });
11717
+ setIntervalId(setInterval(function () {
11718
+ setMargin(function (prevMargin) {
11719
+ return Math.max(prevMargin - scrollSpeed, 0);
11720
+ });
11721
+ }, 20));
11722
+ };
11723
+
11724
+ var onRightChevronPressed = React.useCallback(function () {
11725
+ setMargin(function (prevMargin) {
11726
+ return Math.min(prevMargin + scrollSpeed, width - layerSelectWidth);
11727
+ });
11728
+ setIntervalId(setInterval(function () {
11729
+ setMargin(function (prevMargin) {
11730
+ return Math.min(prevMargin + scrollSpeed, width - layerSelectWidth);
11731
+ });
11732
+ }, 20));
11733
+ }, [width, layerSelectWidth]);
11734
+
11735
+ var onChevronMouseUp = function onChevronMouseUp() {
11736
+ clearInterval(intervalId);
11737
+ setIntervalId(null);
11738
+ };
11739
+
11512
11740
  React.useEffect(function () {
11513
11741
  setWidth(ref.current.scrollWidth + 50);
11514
11742
  setMargin(Math.max(0, Math.min(width - layerSelectWidth, margin)));
11515
- }, [services, layerSelectWidth, width, margin]);
11743
+
11744
+ if ((margin === 0 || layerSelectWidth + margin === width) && intervalId != null) {
11745
+ clearInterval(intervalId);
11746
+ setIntervalId(null);
11747
+ }
11748
+ }, [services, layerSelectWidth, width, margin, intervalId]);
11516
11749
  var isAllEnabled = Object.values(activeServices).every(function (activeService) {
11517
11750
  return activeService.enabled;
11518
11751
  });
11519
11752
  return /*#__PURE__*/React.createElement("div", {
11520
11753
  className: classes.serviceList,
11521
- "data-testid": "serviceList"
11754
+ "data-testid": "serviceList",
11755
+ onWheel: onMouseWheelScroll
11522
11756
  }, margin !== 0 && /*#__PURE__*/React.createElement(ChevronLeft, {
11523
11757
  className: classes.scrollArrowLeft,
11524
- onClick: onLeftArrowClick,
11758
+ onMouseDown: onLeftChevronPressed,
11759
+ onMouseUp: onChevronMouseUp,
11525
11760
  "data-testid": "leftScrollArrow"
11526
11761
  }), /*#__PURE__*/React.createElement("div", {
11527
11762
  className: classes.serviceChips,
@@ -11540,7 +11775,8 @@ var ServiceList = function ServiceList(_ref4) {
11540
11775
  });
11541
11776
  })), layerSelectWidth + margin < width && /*#__PURE__*/React.createElement(ChevronRight, {
11542
11777
  className: classes.scrollArrowRight,
11543
- onClick: onRightArrowClick,
11778
+ onMouseDown: onRightChevronPressed,
11779
+ onMouseUp: onChevronMouseUp,
11544
11780
  "data-testid": "rightScrollArrow"
11545
11781
  }));
11546
11782
  };
@@ -11577,11 +11813,190 @@ var ServiceListConnect = function ServiceListConnect(_ref) {
11577
11813
  });
11578
11814
  };
11579
11815
 
11580
- var useStyles$m = makeStyles(function (theme) {
11816
+ var useStyles$n = makeStyles(function (theme) {
11581
11817
  return createStyles({
11582
11818
  servicesContainer: {
11583
11819
  width: '300px',
11584
- height: '380px',
11820
+ maxHeight: '380px',
11821
+ top: '140px',
11822
+ backgroundColor: theme.palette.geowebColors.background.surface,
11823
+ boxShadow: theme.shadows[6],
11824
+ overflow: 'auto'
11825
+ },
11826
+ header: {
11827
+ position: 'sticky',
11828
+ top: 0,
11829
+ fontSize: theme.typography.fontSize,
11830
+ padding: '12px',
11831
+ backgroundColor: theme.palette.geowebColors.background.surface,
11832
+ zIndex: 100
11833
+ },
11834
+ footer: {
11835
+ display: 'flex',
11836
+ justifyContent: 'center',
11837
+ alignItems: 'center',
11838
+ position: 'sticky',
11839
+ bottom: 0,
11840
+ backgroundColor: theme.palette.geowebColors.background.surface,
11841
+ zIndex: 100
11842
+ },
11843
+ iconFill: {
11844
+ color: theme.palette.geowebColors.typographyAndIcons.icon
11845
+ },
11846
+ button: {
11847
+ margin: '16px',
11848
+ width: '80%',
11849
+ fontSize: '12px',
11850
+ textTransform: 'none'
11851
+ },
11852
+ text: {
11853
+ paddingTop: '3px',
11854
+ fontSize: '12px',
11855
+ fontFamily: theme.typography.fontFamily,
11856
+ fontWeight: theme.typography.fontWeightRegular,
11857
+ textTransform: 'none',
11858
+ color: '#575f7a'
11859
+ },
11860
+ icon: {
11861
+ width: '24px',
11862
+ height: '24px'
11863
+ }
11864
+ });
11865
+ });
11866
+
11867
+ var ServiceOptionsDialog = function ServiceOptionsDialog(_ref) {
11868
+ var services = _ref.services,
11869
+ mapStoreRemoveService = _ref.mapStoreRemoveService,
11870
+ _ref$layers = _ref.layers,
11871
+ layers = _ref$layers === void 0 ? [] : _ref$layers;
11872
+ var classes = useStyles$n();
11873
+
11874
+ var _React$useState = React.useState(false),
11875
+ _React$useState2 = _slicedToArray(_React$useState, 2),
11876
+ addServiceisOpen = _React$useState2[0],
11877
+ setAddServiceIsOpen = _React$useState2[1];
11878
+
11879
+ var openAddService = function openAddService() {
11880
+ setAddServiceIsOpen(true);
11881
+ };
11882
+
11883
+ var closePopup = function closePopup() {
11884
+ setAddServiceIsOpen(false);
11885
+ };
11886
+
11887
+ var isDisabled = function isDisabled(service) {
11888
+ return layers.some(function (layer) {
11889
+ return layer.service && layer.service.includes(service);
11890
+ });
11891
+ };
11892
+
11893
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Box, {
11894
+ className: classes.servicesContainer,
11895
+ "data-testid": "ServiceDialog"
11896
+ }, /*#__PURE__*/React.createElement("div", {
11897
+ className: classes.header
11898
+ }, " Services"), /*#__PURE__*/React.createElement(List, {
11899
+ disablePadding: true
11900
+ }, services.map(function (service) {
11901
+ return /*#__PURE__*/React.createElement(ListItem, {
11902
+ key: service.name
11903
+ }, /*#__PURE__*/React.createElement(ListItemText, {
11904
+ style: {
11905
+ fontSize: '16px'
11906
+ }
11907
+ }, /*#__PURE__*/React.createElement(Typography, {
11908
+ noWrap: true,
11909
+ style: {
11910
+ textOverflow: 'ellipsis',
11911
+ paddingRight: '60px'
11912
+ }
11913
+ }, service.name)), /*#__PURE__*/React.createElement(ListItemSecondaryAction, {
11914
+ style: {
11915
+ marginRight: '-10px'
11916
+ }
11917
+ }, /*#__PURE__*/React.createElement(Tooltip, {
11918
+ title: "Edit Service"
11919
+ }, /*#__PURE__*/React.createElement(IconButton, {
11920
+ "data-testid": "openEditServiceButton",
11921
+ size: "large"
11922
+ }, /*#__PURE__*/React.createElement(SvgIcon, null, /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("path", {
11923
+ d: "m8.332 17.09-.005.001-2.652.604.956-2.542.001-.001.001-.001.857-.744 1.69 1.945-.848.738zm.71.815L20.932 7.577 17.823 4 5.933 14.329l-.01.008.005.005L4.173 19l4.857-1.09-.004-.02.019.02-.002-.005z",
11924
+ fill: classes.iconFill,
11925
+ fillRule: "evenodd"
11926
+ }))))), /*#__PURE__*/React.createElement(Tooltip, {
11927
+ title: "Delete Service"
11928
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(IconButton, {
11929
+ size: "large",
11930
+ disabled: isDisabled(service.service),
11931
+ onClick: function onClick() {
11932
+ return mapStoreRemoveService(service.service);
11933
+ },
11934
+ "data-testid": "removeServiceButton"
11935
+ }, /*#__PURE__*/React.createElement(SvgIcon, null, /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("path", {
11936
+ d: "M17.504 8.228c.588 0 1.027.48.973 1.066l-.876 9.64A1.197 1.197 0 0 1 16.434 20H8.41c-.59 0-1.115-.48-1.167-1.066l-.877-9.64a.962.962 0 0 1 .973-1.066zm-2.115 1.228a.82.82 0 0 0-.819.82v7.674a.818.818 0 0 0 1.638 0v-7.675a.819.819 0 0 0-.819-.819zm-2.968 0a.819.819 0 0 0-.819.82v7.674a.818.818 0 1 0 1.638 0v-7.675a.82.82 0 0 0-.82-.819zm-2.968 0a.819.819 0 0 0-.818.82v7.674a.818.818 0 1 0 1.637 0v-7.675a.82.82 0 0 0-.82-.819zM13.432 4c.21 0 .404.168.436.376l.107.758 3.256-.01a1.606 1.606 0 0 1 1.61 1.6l.001.535-12.841.038L6 6.76a1.605 1.605 0 0 1 1.6-1.61l3.262-.008.103-.758a.454.454 0 0 1 .434-.38z",
11937
+ fill: classes.iconFill,
11938
+ fillRule: "evenodd"
11939
+ }))))))));
11940
+ })), /*#__PURE__*/React.createElement("div", {
11941
+ className: classes.footer
11942
+ }, /*#__PURE__*/React.createElement(Button, {
11943
+ onClick: openAddService,
11944
+ "data-testid": "openAddServiceButton",
11945
+ className: classes.button,
11946
+ variant: "tertiary",
11947
+ startIcon: /*#__PURE__*/React.createElement(SvgIcon, {
11948
+ className: classes.icon
11949
+ }, /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("path", {
11950
+ d: "M13.647 13.647h6.82a1.276 1.276 0 1 0 0-2.552h-6.82v-6.82a1.276 1.276 0 1 0-2.552 0v6.82h-6.82a1.276 1.276 0 1 0 0 2.552h6.82v6.82a1.274 1.274 0 0 0 1.276 1.275c.705 0 1.276-.571 1.276-1.276v-6.82z",
11951
+ fillRule: "evenodd"
11952
+ })))
11953
+ }, "Add a new service"))), addServiceisOpen && /*#__PURE__*/React.createElement(ServicePopupConnect, {
11954
+ servicePopupVariant: "add",
11955
+ isOpen: addServiceisOpen,
11956
+ closePopup: closePopup
11957
+ }));
11958
+ };
11959
+
11960
+ /* *
11961
+ * Licensed under the Apache License, Version 2.0 (the "License");
11962
+ * you may not use this file except in compliance with the License.
11963
+ * You may obtain a copy of the License at
11964
+ *
11965
+ * http://www.apache.org/licenses/LICENSE-2.0
11966
+ *
11967
+ * Unless required by applicable law or agreed to in writing, software
11968
+ * distributed under the License is distributed on an "AS IS" BASIS,
11969
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11970
+ * See the License for the specific language governing permissions and
11971
+ * limitations under the License.
11972
+ *
11973
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11974
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
11975
+ * */
11976
+
11977
+ var ServiceOptionsDialogConnect = function ServiceOptionsDialogConnect() {
11978
+ var dispatch = useDispatch();
11979
+ var allLayers = useSelector(function (store) {
11980
+ return getAllLayers(store);
11981
+ });
11982
+ var mapStoreRemoveService$1 = React.useCallback(function (serviceUrl) {
11983
+ dispatch(mapStoreRemoveService({
11984
+ serviceUrl: serviceUrl
11985
+ }));
11986
+ }, [dispatch]);
11987
+ var arrayOfServices = useSelector(function (store) {
11988
+ return getServicesInArray(store);
11989
+ });
11990
+ return /*#__PURE__*/React.createElement(ServiceOptionsDialog, {
11991
+ services: arrayOfServices,
11992
+ layers: allLayers,
11993
+ mapStoreRemoveService: mapStoreRemoveService$1
11994
+ });
11995
+ };
11996
+
11997
+ var useStyles$m = makeStyles(function (theme) {
11998
+ return createStyles({
11999
+ servicesContainer: {
11585
12000
  position: 'fixed',
11586
12001
  top: '140px',
11587
12002
  right: '-72px',
@@ -11607,23 +12022,21 @@ var ServiceOptionsButton = function ServiceOptionsButton() {
11607
12022
  setContainerOpen(!containerOpen);
11608
12023
  };
11609
12024
 
11610
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ToggleIconButton, {
12025
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ToolButton, {
11611
12026
  onClick: toggleContainer,
11612
12027
  active: containerOpen,
11613
- "data-testid": "serviceOptionsButton"
12028
+ "data-testid": "serviceOptionsButton",
12029
+ variant: "tool"
11614
12030
  }, /*#__PURE__*/React.createElement(SvgIcon, {
11615
12031
  viewBox: "0 0 24 24",
11616
12032
  xmlns: "http://www.w3.org/2000/svg"
11617
12033
  }, /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("path", {
11618
12034
  d: "M12 16c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zm0-2c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm0-6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z",
11619
- fill: "#FFF",
11620
12035
  fillRule: "evenodd"
11621
12036
  })))), containerOpen ? /*#__PURE__*/React.createElement(Box, {
11622
12037
  className: classes.servicesContainer,
11623
- "data-testid": "container"
11624
- }, /*#__PURE__*/React.createElement(Typography, {
11625
- className: classes.servicesText
11626
- }, "Services")) : null);
12038
+ "data-testid": "ServiceOptionsDialogContainer"
12039
+ }, /*#__PURE__*/React.createElement(ServiceOptionsDialogConnect, null)) : null);
11627
12040
  };
11628
12041
 
11629
12042
  var useStyles$l = makeStyles({
@@ -11720,40 +12133,6 @@ var LayerSelect = function LayerSelect(_ref) {
11720
12133
  })));
11721
12134
  };
11722
12135
 
11723
- /* *
11724
- * Licensed under the Apache License, Version 2.0 (the "License");
11725
- * you may not use this file except in compliance with the License.
11726
- * You may obtain a copy of the License at
11727
- *
11728
- * http://www.apache.org/licenses/LICENSE-2.0
11729
- *
11730
- * Unless required by applicable law or agreed to in writing, software
11731
- * distributed under the License is distributed on an "AS IS" BASIS,
11732
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11733
- * See the License for the specific language governing permissions and
11734
- * limitations under the License.
11735
- *
11736
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11737
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
11738
- * */
11739
- var CustomSwitch = withStyles(function (theme) {
11740
- return {
11741
- switchBase: {
11742
- '&$checked': {
11743
- color: theme.palette.geowebColors.customSlider.thumb
11744
- },
11745
- '&$checked + $track': {
11746
- backgroundColor: theme.palette.geowebColors.buttons.primary["default"].fill
11747
- }
11748
- },
11749
- checked: {},
11750
- track: {
11751
- backgroundColor: theme.palette.geowebColors.customSlider.switchTrackDisabled,
11752
- opacity: '1 !important'
11753
- }
11754
- };
11755
- })(Switch);
11756
-
11757
12136
  var useStyles$k = makeStyles(function (theme) {
11758
12137
  return createStyles({
11759
12138
  listItem: {
@@ -11788,11 +12167,9 @@ var useStyles$k = makeStyles(function (theme) {
11788
12167
  });
11789
12168
 
11790
12169
  var FilterListItem = function FilterListItem(_ref) {
11791
- var index = _ref.index,
11792
- text = _ref.text,
11793
- checked = _ref.checked,
11794
- toggleCheckbox = _ref.toggleCheckbox,
11795
- selectOnlyOne = _ref.selectOnlyOne;
12170
+ var keyword = _ref.keyword,
12171
+ toggleKeywords = _ref.toggleKeywords,
12172
+ enableOnlyOneKeyword = _ref.enableOnlyOneKeyword;
11796
12173
  var classes = useStyles$k();
11797
12174
 
11798
12175
  var _React$useState = React.useState(false),
@@ -11800,47 +12177,193 @@ var FilterListItem = function FilterListItem(_ref) {
11800
12177
  hovering = _React$useState2[0],
11801
12178
  setHovering = _React$useState2[1];
11802
12179
 
11803
- var handleMouseOver = React.useCallback(function () {
11804
- setHovering(true);
11805
- }, []);
11806
- var handleMouseLeave = React.useCallback(function () {
11807
- setHovering(false);
11808
- }, []);
11809
- return /*#__PURE__*/React.createElement("div", {
11810
- onMouseOver: handleMouseOver,
11811
- onMouseLeave: handleMouseLeave,
11812
- onFocus: handleMouseOver,
11813
- onBlur: handleMouseLeave,
11814
- "data-testid": "filterResultListItem"
11815
- }, /*#__PURE__*/React.createElement(ListItem, {
11816
- className: classes.listItem
11817
- }, /*#__PURE__*/React.createElement(ListItemIcon, {
11818
- className: classes.listItemIcon
11819
- }, /*#__PURE__*/React.createElement(Checkbox, {
11820
- color: "secondary",
11821
- checked: checked,
11822
- onChange: function onChange() {
11823
- return toggleCheckbox(index);
11824
- },
11825
- className: classes.checkbox
11826
- })), /*#__PURE__*/React.createElement(Typography, {
11827
- variant: "body2",
11828
- className: classes.listItemText
11829
- }, text), hovering ? /*#__PURE__*/React.createElement(ListItemSecondaryAction, null, /*#__PURE__*/React.createElement(IconButton, {
11830
- style: {
11831
- backgroundColor: 'transparent'
11832
- },
11833
- edge: "end",
11834
- size: "small",
11835
- onClick: function onClick() {
11836
- return selectOnlyOne(index);
11837
- },
11838
- "data-testid": "onlyButton"
11839
- }, /*#__PURE__*/React.createElement(Typography, {
11840
- className: classes.onlyByttonText
11841
- }, "ONLY"))) : null));
12180
+ var handleMouseOver = React.useCallback(function () {
12181
+ setHovering(true);
12182
+ }, []);
12183
+ var handleMouseLeave = React.useCallback(function () {
12184
+ setHovering(false);
12185
+ }, []);
12186
+
12187
+ var selectOnlyOne = function selectOnlyOne(keyword) {
12188
+ enableOnlyOneKeyword(keyword);
12189
+ };
12190
+
12191
+ var toggleCheckbox = function toggleCheckbox(keyword) {
12192
+ toggleKeywords([keyword]);
12193
+ };
12194
+
12195
+ if (keyword.amountVisible !== 0) {
12196
+ return /*#__PURE__*/React.createElement("div", {
12197
+ onMouseOver: handleMouseOver,
12198
+ onMouseLeave: handleMouseLeave,
12199
+ onFocus: handleMouseOver,
12200
+ onBlur: handleMouseLeave,
12201
+ "data-testid": "filterResultListItem"
12202
+ }, /*#__PURE__*/React.createElement(ListItem, {
12203
+ className: classes.listItem
12204
+ }, /*#__PURE__*/React.createElement(ListItemIcon, {
12205
+ className: classes.listItemIcon
12206
+ }, /*#__PURE__*/React.createElement(Checkbox, {
12207
+ color: "secondary",
12208
+ checked: keyword.checked,
12209
+ onChange: function onChange() {
12210
+ return toggleCheckbox(keyword.id);
12211
+ },
12212
+ className: classes.checkbox
12213
+ })), /*#__PURE__*/React.createElement(Typography, {
12214
+ variant: "body2",
12215
+ className: classes.listItemText
12216
+ }, keyword.id), hovering ? /*#__PURE__*/React.createElement(ListItemSecondaryAction, null, /*#__PURE__*/React.createElement(IconButton, {
12217
+ style: {
12218
+ backgroundColor: 'transparent'
12219
+ },
12220
+ edge: "end",
12221
+ size: "small",
12222
+ onClick: function onClick() {
12223
+ return selectOnlyOne(keyword.id);
12224
+ },
12225
+ "data-testid": "onlyButton"
12226
+ }, /*#__PURE__*/React.createElement(Typography, {
12227
+ className: classes.onlyByttonText
12228
+ }, "ONLY"))) : null));
12229
+ }
12230
+
12231
+ return null;
12232
+ };
12233
+
12234
+ /* *
12235
+ * Licensed under the Apache License, Version 2.0 (the "License");
12236
+ * you may not use this file except in compliance with the License.
12237
+ * You may obtain a copy of the License at
12238
+ *
12239
+ * http://www.apache.org/licenses/LICENSE-2.0
12240
+ *
12241
+ * Unless required by applicable law or agreed to in writing, software
12242
+ * distributed under the License is distributed on an "AS IS" BASIS,
12243
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12244
+ * See the License for the specific language governing permissions and
12245
+ * limitations under the License.
12246
+ *
12247
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12248
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
12249
+ * */
12250
+
12251
+ var KeywordFilterResultsListItemConnect = function KeywordFilterResultsListItemConnect(_ref) {
12252
+ var keyword = _ref.keyword;
12253
+ var dispatch = useDispatch();
12254
+ var toggleKeywords$1 = React.useCallback(function (keywords) {
12255
+ dispatch(toggleKeywords({
12256
+ keywords: keywords
12257
+ }));
12258
+ }, [dispatch]);
12259
+ var enableOnlyOneKeyword$1 = React.useCallback(function (keyword) {
12260
+ dispatch(enableOnlyOneKeyword({
12261
+ keyword: keyword
12262
+ }));
12263
+ }, [dispatch]);
12264
+ var keywordObject = useSelector(function (store) {
12265
+ return getKeywordObjectById(store, keyword);
12266
+ });
12267
+ return /*#__PURE__*/React.createElement(FilterListItem, {
12268
+ keyword: keywordObject,
12269
+ toggleKeywords: toggleKeywords$1,
12270
+ enableOnlyOneKeyword: enableOnlyOneKeyword$1
12271
+ });
12272
+ };
12273
+
12274
+ /* *
12275
+ * Licensed under the Apache License, Version 2.0 (the "License");
12276
+ * you may not use this file except in compliance with the License.
12277
+ * You may obtain a copy of the License at
12278
+ *
12279
+ * http://www.apache.org/licenses/LICENSE-2.0
12280
+ *
12281
+ * Unless required by applicable law or agreed to in writing, software
12282
+ * distributed under the License is distributed on an "AS IS" BASIS,
12283
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12284
+ * See the License for the specific language governing permissions and
12285
+ * limitations under the License.
12286
+ *
12287
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12288
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
12289
+ * */
12290
+ var CustomSwitch = withStyles(function (theme) {
12291
+ return {
12292
+ switchBase: {
12293
+ '&$checked': {
12294
+ color: theme.palette.geowebColors.customSlider.thumb
12295
+ },
12296
+ '&$checked + $track': {
12297
+ backgroundColor: theme.palette.geowebColors.buttons.primary["default"].fill
12298
+ }
12299
+ },
12300
+ checked: {},
12301
+ track: {
12302
+ backgroundColor: theme.palette.geowebColors.customSlider.switchTrackDisabled,
12303
+ opacity: '1 !important'
12304
+ }
12305
+ };
12306
+ })(Switch);
12307
+
12308
+ /* *
12309
+ * Licensed under the Apache License, Version 2.0 (the "License");
12310
+ * you may not use this file except in compliance with the License.
12311
+ * You may obtain a copy of the License at
12312
+ *
12313
+ * http://www.apache.org/licenses/LICENSE-2.0
12314
+ *
12315
+ * Unless required by applicable law or agreed to in writing, software
12316
+ * distributed under the License is distributed on an "AS IS" BASIS,
12317
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12318
+ * See the License for the specific language governing permissions and
12319
+ * limitations under the License.
12320
+ *
12321
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12322
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
12323
+ * */
12324
+
12325
+ var KeywordFilterSelectAllSwitchConnect = function KeywordFilterSelectAllSwitchConnect() {
12326
+ var dispatch = useDispatch();
12327
+ var allKeywordsActive = useSelector(function (store) {
12328
+ return isAllKeywordsChecked(store);
12329
+ });
12330
+ var allKeywordIds = useSelector(function (store) {
12331
+ return getAllKeywordIds(store);
12332
+ });
12333
+ var checkedKeywordIds = useSelector(function (store) {
12334
+ return getCheckedKeywordIds(store);
12335
+ });
12336
+ var toggleKeywords$1 = React.useCallback(function () {
12337
+ var keywords = allKeywordsActive ? checkedKeywordIds : allKeywordIds.filter(function (id) {
12338
+ return !checkedKeywordIds.includes(id);
12339
+ });
12340
+ dispatch(toggleKeywords({
12341
+ keywords: keywords
12342
+ }));
12343
+ }, [allKeywordIds, allKeywordsActive, checkedKeywordIds, dispatch]);
12344
+ return /*#__PURE__*/React.createElement(CustomSwitch, {
12345
+ checked: allKeywordsActive,
12346
+ onChange: toggleKeywords$1,
12347
+ "data-testid": "customSwitch"
12348
+ });
11842
12349
  };
11843
12350
 
12351
+ /* *
12352
+ * Licensed under the Apache License, Version 2.0 (the "License");
12353
+ * you may not use this file except in compliance with the License.
12354
+ * You may obtain a copy of the License at
12355
+ *
12356
+ * http://www.apache.org/licenses/LICENSE-2.0
12357
+ *
12358
+ * Unless required by applicable law or agreed to in writing, software
12359
+ * distributed under the License is distributed on an "AS IS" BASIS,
12360
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12361
+ * See the License for the specific language governing permissions and
12362
+ * limitations under the License.
12363
+ *
12364
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12365
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
12366
+ * */
11844
12367
  var useStyles$j = makeStyles(function (theme) {
11845
12368
  return createStyles({
11846
12369
  selectAll: {
@@ -11860,7 +12383,7 @@ var useStyles$j = makeStyles(function (theme) {
11860
12383
  });
11861
12384
 
11862
12385
  var KeywordFilterResults = function KeywordFilterResults(_ref) {
11863
- var keywordObjects = _ref.keywordObjects,
12386
+ var allKeywordIds = _ref.allKeywordIds,
11864
12387
  mapId = _ref.mapId,
11865
12388
  bounds = _ref.bounds,
11866
12389
  _ref$onClose = _ref.onClose,
@@ -11872,53 +12395,8 @@ var KeywordFilterResults = function KeywordFilterResults(_ref) {
11872
12395
  _ref$order = _ref.order,
11873
12396
  order = _ref$order === void 0 ? 0 : _ref$order,
11874
12397
  _ref$source = _ref.source,
11875
- source = _ref$source === void 0 ? 'module' : _ref$source,
11876
- updateKeywords = _ref.updateKeywords;
12398
+ source = _ref$source === void 0 ? 'module' : _ref$source;
11877
12399
  var classes = useStyles$j();
11878
-
11879
- var _React$useState = React.useState(true),
11880
- _React$useState2 = _slicedToArray(_React$useState, 2),
11881
- allSelected = _React$useState2[0],
11882
- setAllSelected = _React$useState2[1];
11883
-
11884
- var toggleSelectAll = function toggleSelectAll() {
11885
- var editedKeywords = keywordObjects.map(function (object) {
11886
- return Object.assign(Object.assign({}, object), {
11887
- checked: !allSelected
11888
- });
11889
- });
11890
- setAllSelected(!allSelected);
11891
- updateKeywords(editedKeywords);
11892
- };
11893
-
11894
- var toggleCheckbox = function toggleCheckbox(listIndex) {
11895
- var editedKeywords = keywordObjects.map(function (object, index) {
11896
- return listIndex === index ? Object.assign(Object.assign({}, object), {
11897
- checked: !object.checked
11898
- }) : object;
11899
- });
11900
- updateKeywords(editedKeywords);
11901
- };
11902
-
11903
- var selectOnlyOne = function selectOnlyOne(listIndex) {
11904
- var editedKeywords = keywordObjects.map(function (object, index) {
11905
- return listIndex === index ? Object.assign(Object.assign({}, object), {
11906
- checked: true
11907
- }) : Object.assign(Object.assign({}, object), {
11908
- checked: false
11909
- });
11910
- });
11911
- updateKeywords(editedKeywords);
11912
- }; // If even one checkbox is unchecked, switch toggleAll off
11913
- // If all checkboxes becomes checked, switch toggleAll on
11914
-
11915
-
11916
- React.useEffect(function () {
11917
- var checked = keywordObjects.every(function (object) {
11918
- return object.checked === true;
11919
- });
11920
- setAllSelected(checked);
11921
- }, [keywordObjects]);
11922
12400
  return /*#__PURE__*/React.createElement(ToolContainerDraggable, {
11923
12401
  title: showTitle ? "Filter Results ".concat(mapId) : 'Filter Results',
11924
12402
  "data-testid": "keywordFilterResults",
@@ -11956,27 +12434,15 @@ var KeywordFilterResults = function KeywordFilterResults(_ref) {
11956
12434
  justifyContent: "flex-end",
11957
12435
  alignContent: "center",
11958
12436
  className: classes["switch"]
11959
- }, /*#__PURE__*/React.createElement(CustomSwitch, {
11960
- checked: allSelected,
11961
- onChange: toggleSelectAll,
11962
- "data-testid": "customSwitch"
11963
- }))), /*#__PURE__*/React.createElement(List, {
12437
+ }, /*#__PURE__*/React.createElement(KeywordFilterSelectAllSwitchConnect, null))), /*#__PURE__*/React.createElement(List, {
11964
12438
  dense: true,
11965
12439
  style: {
11966
12440
  padding: '0px'
11967
12441
  }
11968
- }, keywordObjects.map(function (_ref2, index) {
11969
- var id = _ref2.id,
11970
- checked = _ref2.checked,
11971
- amountVisible = _ref2.amountVisible;
11972
- if (amountVisible === 0) return null;
11973
- return /*#__PURE__*/React.createElement(FilterListItem, {
11974
- key: "".concat(id, "-").concat(index),
11975
- index: index,
11976
- text: id,
11977
- checked: checked,
11978
- toggleCheckbox: toggleCheckbox,
11979
- selectOnlyOne: selectOnlyOne
12442
+ }, allKeywordIds.map(function (keywordId) {
12443
+ return /*#__PURE__*/React.createElement(KeywordFilterResultsListItemConnect, {
12444
+ key: keywordId,
12445
+ keyword: keywordId
11980
12446
  });
11981
12447
  })));
11982
12448
  };
@@ -12026,12 +12492,7 @@ var KeywordFilterResultsConnect = function KeywordFilterResultsConnect(_ref) {
12026
12492
  });
12027
12493
  var uiIsOrderedOnTop = useSelector(function (store) {
12028
12494
  return getDialogIsOrderedOnTop(store, 'keywordFilter');
12029
- });
12030
- var updateKeywords$1 = React.useCallback(function (keywords) {
12031
- dispatch(updateKeywords({
12032
- keywords: keywords
12033
- }));
12034
- }, [dispatch]); // Check to ensure the currently active map is still present on screen - if not, close the dialog
12495
+ }); // Check to ensure the currently active map is still present on screen - if not, close the dialog
12035
12496
 
12036
12497
  React.useEffect(function () {
12037
12498
  if (mapId !== '' && !isMapPresent) {
@@ -12063,11 +12524,11 @@ var KeywordFilterResultsConnect = function KeywordFilterResultsConnect(_ref) {
12063
12524
  unregisterDialog$1();
12064
12525
  }; // eslint-disable-next-line react-hooks/exhaustive-deps
12065
12526
  }, []);
12066
- var keywords = useSelector(function (store) {
12067
- return getKeywords(store);
12527
+ var allKeywordIds = useSelector(function (store) {
12528
+ return getAllKeywordIds(store);
12068
12529
  });
12069
12530
  return /*#__PURE__*/React.createElement(KeywordFilterResults, {
12070
- keywordObjects: keywords,
12531
+ allKeywordIds: allKeywordIds,
12071
12532
  mapId: mapId,
12072
12533
  bounds: bounds,
12073
12534
  isOpen: isOpenInStore,
@@ -12075,8 +12536,7 @@ var KeywordFilterResultsConnect = function KeywordFilterResultsConnect(_ref) {
12075
12536
  showTitle: showTitle,
12076
12537
  onMouseDown: onOrderDialog,
12077
12538
  order: uiOrder,
12078
- source: uiSource,
12079
- updateKeywords: updateKeywords$1
12539
+ source: uiSource
12080
12540
  });
12081
12541
  };
12082
12542
 
@@ -12329,7 +12789,6 @@ var LayerManagerConnect = function LayerManagerConnect(_ref) {
12329
12789
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12330
12790
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
12331
12791
  * */
12332
- var width = 24;
12333
12792
 
12334
12793
  var MapControlButton = function MapControlButton(_a) {
12335
12794
  var onClick = _a.onClick,
@@ -12341,14 +12800,10 @@ var MapControlButton = function MapControlButton(_a) {
12341
12800
  isActive = _a$isActive === void 0 ? false : _a$isActive,
12342
12801
  props = __rest(_a, ["onClick", "children", "title", "placement", "isActive"]);
12343
12802
 
12344
- var classes = useButtonStyles({
12345
- width: width
12346
- });
12347
- return /*#__PURE__*/React.createElement(ToggleIconButton, Object.assign({
12803
+ return /*#__PURE__*/React.createElement(ToolButton, Object.assign({
12348
12804
  onClick: onClick,
12349
12805
  active: isActive
12350
12806
  }, props), /*#__PURE__*/React.createElement(Tooltip, {
12351
- className: classes.button,
12352
12807
  placement: placement,
12353
12808
  title: title
12354
12809
  }, children));
@@ -13258,7 +13713,7 @@ var AutoUpdateButton = function AutoUpdateButton(_ref) {
13258
13713
  title: autoUpdateButton.title
13259
13714
  }, /*#__PURE__*/React.createElement("span", {
13260
13715
  "data-testid": "autoUpdateButtonTooltip"
13261
- }, /*#__PURE__*/React.createElement(ToggleIconButton, {
13716
+ }, /*#__PURE__*/React.createElement(ToolButton, {
13262
13717
  active: isAutoUpdating,
13263
13718
  disabled: disabled,
13264
13719
  onClick: function onClick() {
@@ -13322,7 +13777,7 @@ var LoopButton = function LoopButton(_ref) {
13322
13777
  var loopButtonPath = isLooping ? svgLoopOffPath : svgLoopPath;
13323
13778
  return /*#__PURE__*/React.createElement(Tooltip, {
13324
13779
  title: loopButtonPath.title
13325
- }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToggleIconButton, {
13780
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
13326
13781
  onClick: function onClick() {
13327
13782
  return onToggleLoop();
13328
13783
  },
@@ -13419,7 +13874,7 @@ var SpeedButton = function SpeedButton(_ref) {
13419
13874
  className: classes.speedButtonDiv
13420
13875
  }, /*#__PURE__*/React.createElement(Tooltip, {
13421
13876
  title: "Speed"
13422
- }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToggleIconButton, {
13877
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
13423
13878
  onClick: onClickButton,
13424
13879
  active: true,
13425
13880
  "data-testid": "speedButton"
@@ -13696,11 +14151,11 @@ var TimeStepButton = function TimeStepButton(_ref) {
13696
14151
  className: classes.timeStepDiv
13697
14152
  }, /*#__PURE__*/React.createElement(Tooltip, {
13698
14153
  title: "Time step"
13699
- }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToggleIconButton, {
14154
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
13700
14155
  active: true,
13701
14156
  onClick: onClickButton,
13702
14157
  "data-testid": "timeStepButton",
13703
- width: 58
14158
+ width: "58px"
13704
14159
  }, /*#__PURE__*/React.createElement(SvgIcon, null, /*#__PURE__*/React.createElement("path", {
13705
14160
  id: "lvnl598lea",
13706
14161
  d: "M12.1 5.86c.247 0 .5.089.745.267l6.008 4.316c.368.265.58.65.58 1.057 0 .408-.211.793-.581 1.058l-6.005 4.316c-.248.177-.5.267-.747.267-.466 0-.967-.36-.967-1.147v-3.016l-5.419 3.896c-.207.148-.417.234-.624.26l-.124.007c-.465 0-.966-.36-.966-1.147V7.006c0-.787.5-1.147.966-1.147.247 0 .5.09.746.268l5.421 3.894V7.006c0-.735.436-1.097.873-1.142z"
@@ -13787,7 +14242,7 @@ var OptionsMenuButton = function OptionsMenuButton(_ref) {
13787
14242
  var id = open ? 'simple-popover' : undefined;
13788
14243
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Tooltip, {
13789
14244
  title: "Options"
13790
- }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToggleIconButton, {
14245
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
13791
14246
  onClick: onClickButton,
13792
14247
  "data-testid": "optionsMenuButton",
13793
14248
  active: open
@@ -13876,7 +14331,7 @@ var PlayButton = function PlayButton(_ref) {
13876
14331
  var playButtonPath = isAnimating ? pausePath : playPath;
13877
14332
  return /*#__PURE__*/React.createElement(Tooltip, {
13878
14333
  title: playButtonPath.title
13879
- }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToggleIconButton, {
14334
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
13880
14335
  onClick: onTogglePlay,
13881
14336
  disabled: isDisabled,
13882
14337
  "data-testid": "playButton",
@@ -16663,17 +17118,232 @@ var TimeSliderScaleSliderComponent = function TimeSliderScaleSliderComponent(_re
16663
17118
  selectedTime: selectedTime
16664
17119
  });
16665
17120
  };
16666
- /**
16667
- * TimeSliderScaleSlider component connected to the store displaying a scale slider of the time slider
16668
- *
16669
- * Expects the following props:
16670
- * @param {string} mapId mapId: string - Id of the map
16671
- * @example
16672
- * ``` <TimeSliderScaleSliderConnect mapId={mapId} />```
16673
- */
16674
-
17121
+ /**
17122
+ * TimeSliderScaleSlider component connected to the store displaying a scale slider of the time slider
17123
+ *
17124
+ * Expects the following props:
17125
+ * @param {string} mapId mapId: string - Id of the map
17126
+ * @example
17127
+ * ``` <TimeSliderScaleSliderConnect mapId={mapId} />```
17128
+ */
17129
+
17130
+
17131
+ var TimeSliderScaleSliderConnect = connectReduxTimeSliderScaleSlider(TimeSliderScaleSliderComponent);
17132
+
17133
+ /* *
17134
+ * Licensed under the Apache License, Version 2.0 (the "License");
17135
+ * you may not use this file except in compliance with the License.
17136
+ * You may obtain a copy of the License at
17137
+ *
17138
+ * http://www.apache.org/licenses/LICENSE-2.0
17139
+ *
17140
+ * Unless required by applicable law or agreed to in writing, software
17141
+ * distributed under the License is distributed on an "AS IS" BASIS,
17142
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17143
+ * See the License for the specific language governing permissions and
17144
+ * limitations under the License.
17145
+ *
17146
+ * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
17147
+ * Copyright 2020 - Finnish Meteorological Institute (FMI)
17148
+ * */
17149
+ var connectRedux = connect(function (store, props) {
17150
+ return {
17151
+ isTimeSliderHoverOn: isTimeSliderHoverOn(store, props.mapId)
17152
+ };
17153
+ }, {
17154
+ toggleTimeSliderHover: toggleTimeSliderHover
17155
+ });
17156
+
17157
+ var ConnectedTimeSlider = function ConnectedTimeSlider(_ref) {
17158
+ var sourceId = _ref.sourceId,
17159
+ mapId = _ref.mapId,
17160
+ isTimeSliderHoverOn = _ref.isTimeSliderHoverOn,
17161
+ toggleTimeSliderHover = _ref.toggleTimeSliderHover;
17162
+ React.useEffect(function () {
17163
+ var handleKeyDown = function handleKeyDown(event) {
17164
+ if (event.ctrlKey && event.altKey && event.key === 'h') {
17165
+ toggleTimeSliderHover({
17166
+ mapId: mapId,
17167
+ isTimeSliderHoverOn: !isTimeSliderHoverOn
17168
+ });
17169
+ }
17170
+ };
17171
+
17172
+ document.addEventListener('keydown', handleKeyDown);
17173
+ return function () {
17174
+ document.removeEventListener('keydown', handleKeyDown);
17175
+ };
17176
+ }, [mapId, isTimeSliderHoverOn, toggleTimeSliderHover]);
17177
+ return /*#__PURE__*/React.createElement(TimeSlider, {
17178
+ buttons: /*#__PURE__*/React.createElement(TimeSliderButtonsConnect, {
17179
+ mapId: mapId
17180
+ }),
17181
+ rail: /*#__PURE__*/React.createElement(TimeSliderRailConnect, {
17182
+ mapId: mapId,
17183
+ sourceId: sourceId
17184
+ }),
17185
+ scaleSlider: /*#__PURE__*/React.createElement(TimeSliderScaleSliderConnect, {
17186
+ mapId: mapId
17187
+ }),
17188
+ legend: /*#__PURE__*/React.createElement(TimeSliderLegendConnect$1, {
17189
+ mapId: mapId,
17190
+ sourceId: sourceId
17191
+ })
17192
+ });
17193
+ };
17194
+ /**
17195
+ * TimeSlider component with components connected to the store displaying the time slider
17196
+ *
17197
+ * Expects the following props:
17198
+ * @param {string} mapId mapId: string - Id of the map
17199
+ * @param {string} sourceId sourceId: string - Source Id of the timeslider
17200
+ * @example
17201
+ * ``` <TimeSliderConnect sourceId="timeslider-1" mapId={mapId} />```
17202
+ */
17203
+
17204
+
17205
+ var TimeSliderConnect = connectRedux(ConnectedTimeSlider);
17206
+
17207
+ /* *
17208
+ * Licensed under the Apache License, Version 2.0 (the "License");
17209
+ * you may not use this file except in compliance with the License.
17210
+ * You may obtain a copy of the License at
17211
+ *
17212
+ * http://www.apache.org/licenses/LICENSE-2.0
17213
+ *
17214
+ * Unless required by applicable law or agreed to in writing, software
17215
+ * distributed under the License is distributed on an "AS IS" BASIS,
17216
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17217
+ * See the License for the specific language governing permissions and
17218
+ * limitations under the License.
17219
+ *
17220
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
17221
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
17222
+ * */
17223
+ var DWD = {
17224
+ name: 'DWD',
17225
+ url: 'https://maps.dwd.de/geoserver/ows?',
17226
+ id: 'dwd'
17227
+ };
17228
+ var nationaalgeoregister = {
17229
+ name: 'nationaalgeoregister.nl',
17230
+ url: 'https://geodata.nationaalgeoregister.nl/cbsgebiedsindelingen/wms?request=GetCapabilities&service=wms',
17231
+ id: 'nationaalgeoregister'
17232
+ };
17233
+ var KNMImsgcpp = {
17234
+ name: 'KNMImsgcpp',
17235
+ url: 'https://adaguc-server-msg-cpp-portal.pmc.knmi.cloud/wms?DATASET=msgrt&',
17236
+ id: 'msgcpp-ogc-realtime'
17237
+ };
17238
+ var HeiGit = {
17239
+ name: 'HeiGit',
17240
+ url: 'https://maps.heigit.org/osm-wms/service',
17241
+ id: 'HeiGit-osm-wms'
17242
+ };
17243
+ var ArcGisCanvas = {
17244
+ name: 'ArcGisCanvas',
17245
+ url: 'https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/',
17246
+ id: 'ArcGisCanvas'
17247
+ };
17248
+ var KNMIgeoservicesBaselayers = {
17249
+ name: 'KNMIgeoservicesBaselayers',
17250
+ url: 'https://geoservices.knmi.nl/wms?DATASET=baselayers&',
17251
+ id: 'KNMIgeoservicesBaselayers'
17252
+ };
17253
+ var KNMIgeoservicesRadar = {
17254
+ name: 'KNMIgeoservicesRadar',
17255
+ url: 'https://geoservices.knmi.nl/wms?dataset=RADAR&',
17256
+ id: 'KNMIgeoservicesRadar'
17257
+ };
17258
+ var KNMIgeoservicesObs = {
17259
+ name: 'KNMIgeoservicesObs',
17260
+ url: 'https://geoservices.knmi.nl/adagucserver?dataset=OBS&service=WMS&',
17261
+ id: 'KNMIgeoservicesObs'
17262
+ };
17263
+ var KNMIgeoservicesKlimaatAtlas = {
17264
+ name: 'KNMIgeoservicesKlimaatAtlas',
17265
+ url: 'https://geoservices.knmi.nl/wms?DATASET=gsie-dataset&SERVICE=WMS&',
17266
+ id: 'KNMIgeoservicesKlimaatAtlas'
17267
+ };
17268
+ var KNMIgeoservicesHarmonie = {
17269
+ name: 'KNMIgeoservicesHarmonie',
17270
+ url: 'https://geoservices.knmi.nl/wms?DATASET=HARM_N25&',
17271
+ id: 'KNMIgeoservicesKliKNMIgeoservicesHarmoniemaatAtlas'
17272
+ };
17273
+ var KNMIgeoservicesHarmonieMLService = {
17274
+ name: 'KNMI Harmonie ML',
17275
+ url: 'https://geoservices.knmi.nl/wms?DATASET=HARM_N25_ML&SERVICE=WMS&',
17276
+ id: 'harmonieML'
17277
+ };
17278
+ var MetNorwayService = {
17279
+ name: 'MetNorwayService',
17280
+ url: 'https://wms-e1.geoweb.met.no/wms?',
17281
+ id: 'MetNorwayService'
17282
+ };
17283
+ var FMIopenwms = {
17284
+ name: 'FMIopenwms',
17285
+ url: 'https://openwms.fmi.fi/geoserver/wms?',
17286
+ id: 'FMIopenwms'
17287
+ };
17288
+ var DWDObservations = {
17289
+ name: 'DWDObservations',
17290
+ url: 'https://maps.dwd.de/geoserver/dwd/Wetter_Beobachtungen/ows?',
17291
+ id: 'DWDObservations'
17292
+ };
17293
+ var DWDWarnings = {
17294
+ name: 'DWDWarnings',
17295
+ url: 'https://maps.dwd.de/geoserver/dwd/Warnungen_Gemeinden_vereinigt/ows?',
17296
+ id: 'DWDWarnings'
17297
+ };
17298
+ var DWDWXProdukt = {
17299
+ name: 'DWDWXProdukt',
17300
+ url: 'https://maps.dwd.de/geoserver/dwd/WX-Produkt/ows?',
17301
+ id: 'DWDWXProdukt'
17302
+ };
17303
+ var EUMETSAT = {
17304
+ name: 'EUMETSAT',
17305
+ url: 'https://view.eumetsat.int/geoserver/wms?',
17306
+ id: 'EUMETSAT'
17307
+ };
17308
+ var eumetviewEUMETSAT = {
17309
+ name: 'eumetviewEUMETSAT',
17310
+ url: 'https://eumetview.eumetsat.int/geoserv/wms?',
17311
+ id: 'eumetviewEUMETSAT'
17312
+ };
17313
+ var ECMWFPublicService = {
17314
+ name: 'ECMWF',
17315
+ url: 'https://apps.ecmwf.int/wms/?token=public',
17316
+ id: 'ecmwf'
17317
+ };
17318
+ var MeteoCanada = {
17319
+ name: 'Meteo Canada',
17320
+ url: 'https://geo.weather.gc.ca/geomet/?lang=en&',
17321
+ id: 'MeteoCanada'
17322
+ };
16675
17323
 
16676
- var TimeSliderScaleSliderConnect = connectReduxTimeSliderScaleSlider(TimeSliderScaleSliderComponent);
17324
+ var publicServices = /*#__PURE__*/Object.freeze({
17325
+ __proto__: null,
17326
+ DWD: DWD,
17327
+ nationaalgeoregister: nationaalgeoregister,
17328
+ KNMImsgcpp: KNMImsgcpp,
17329
+ HeiGit: HeiGit,
17330
+ ArcGisCanvas: ArcGisCanvas,
17331
+ KNMIgeoservicesBaselayers: KNMIgeoservicesBaselayers,
17332
+ KNMIgeoservicesRadar: KNMIgeoservicesRadar,
17333
+ KNMIgeoservicesObs: KNMIgeoservicesObs,
17334
+ KNMIgeoservicesKlimaatAtlas: KNMIgeoservicesKlimaatAtlas,
17335
+ KNMIgeoservicesHarmonie: KNMIgeoservicesHarmonie,
17336
+ KNMIgeoservicesHarmonieMLService: KNMIgeoservicesHarmonieMLService,
17337
+ MetNorwayService: MetNorwayService,
17338
+ FMIopenwms: FMIopenwms,
17339
+ DWDObservations: DWDObservations,
17340
+ DWDWarnings: DWDWarnings,
17341
+ DWDWXProdukt: DWDWXProdukt,
17342
+ EUMETSAT: EUMETSAT,
17343
+ eumetviewEUMETSAT: eumetviewEUMETSAT,
17344
+ ECMWFPublicService: ECMWFPublicService,
17345
+ MeteoCanada: MeteoCanada
17346
+ });
16677
17347
 
16678
17348
  /* *
16679
17349
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -16688,66 +17358,390 @@ var TimeSliderScaleSliderConnect = connectReduxTimeSliderScaleSlider(TimeSliderS
16688
17358
  * See the License for the specific language governing permissions and
16689
17359
  * limitations under the License.
16690
17360
  *
16691
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
16692
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
17361
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
17362
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
16693
17363
  * */
16694
- var connectRedux = connect(function (store, props) {
16695
- return {
16696
- isTimeSliderHoverOn: isTimeSliderHoverOn(store, props.mapId)
16697
- };
16698
- }, {
16699
- toggleTimeSliderHover: toggleTimeSliderHover
16700
- });
17364
+ var baseLayer$1 = {
17365
+ name: 'arcGisSat',
17366
+ title: 'arcGisSat',
17367
+ type: 'twms',
17368
+ layerType: LayerType.baseLayer,
17369
+ enabled: true,
17370
+ id: generateLayerId()
17371
+ }; // Base Layers List
17372
+
17373
+ var baseLayerGrey$1 = {
17374
+ id: generateLayerId(),
17375
+ name: 'WorldMap_Light_Grey_Canvas',
17376
+ type: 'twms',
17377
+ layerType: LayerType.baseLayer
17378
+ };
17379
+ var baseLayerOpenStreetMapNL$1 = {
17380
+ id: 'base-layer-2',
17381
+ name: 'OpenStreetMap_NL',
17382
+ type: 'twms',
17383
+ layerType: LayerType.baseLayer,
17384
+ enabled: true
17385
+ };
17386
+ var baseLayerArcGisCanvas$1 = {
17387
+ service: ArcGisCanvas.url,
17388
+ id: generateLayerId(),
17389
+ name: 'arcGisCanvas',
17390
+ type: 'twms',
17391
+ enabled: true,
17392
+ layerType: LayerType.baseLayer
17393
+ };
17394
+ var baseLayerWorldMap$1 = {
17395
+ id: generateLayerId(),
17396
+ name: 'WorldMap',
17397
+ type: 'twms',
17398
+ layerType: LayerType.baseLayer,
17399
+ enabled: true
17400
+ };
17401
+ var baseLayerHeiGit = {
17402
+ service: HeiGit.url,
17403
+ id: generateLayerId(),
17404
+ name: 'osm_auto:all',
17405
+ layerType: LayerType.baseLayer
17406
+ }; // Over Layers List
17407
+
17408
+ var overLayer$1 = {
17409
+ service: KNMIgeoservicesBaselayers.url,
17410
+ name: 'countryborders',
17411
+ format: 'image/png',
17412
+ enabled: true,
17413
+ id: generateLayerId(),
17414
+ layerType: LayerType.overLayer
17415
+ }; // KNMI msgcpp List
17416
+
17417
+ var msgCppLayer = {
17418
+ // doesn't work with https
17419
+ service: KNMImsgcpp.url,
17420
+ name: 'lwe_precipitation_rate',
17421
+ format: 'image/png',
17422
+ enabled: true,
17423
+ style: 'precip-transparent/nearest',
17424
+ id: generateLayerId(),
17425
+ layerType: LayerType.mapLayer
17426
+ }; // Nederlandse Nationaal Georegister Layers list
17427
+
17428
+ var veiligheidsRegiosGebiedsIndelingenLabels = {
17429
+ service: nationaalgeoregister.url,
17430
+ name: 'cbsgebiedsindelingen:cbs_veiligheidsregio_2020_labelpoint',
17431
+ style: 'CBS_Label',
17432
+ enabled: false,
17433
+ layerType: LayerType.mapLayer
17434
+ };
17435
+ var veiligheidsRegiosGebiedsIndelingen = {
17436
+ service: nationaalgeoregister.url,
17437
+ name: 'cbsgebiedsindelingen:cbs_veiligheidsregio_2020_gegeneraliseerd',
17438
+ style: 'CBS_Gebiedsindeling',
17439
+ enabled: false,
17440
+ layerType: LayerType.mapLayer
17441
+ }; // KNMI Geoservices Layers List
17442
+
17443
+ var radarLayer$1 = {
17444
+ service: KNMIgeoservicesRadar.url,
17445
+ name: 'RAD_NL25_PCP_CM',
17446
+ format: 'image/png',
17447
+ enabled: true,
17448
+ style: 'radar/nearest',
17449
+ id: generateLayerId(),
17450
+ layerType: LayerType.mapLayer
17451
+ };
17452
+ var radarLayerWithError = {
17453
+ service: KNMIgeoservicesRadar.url,
17454
+ name: 'radarLayer',
17455
+ format: 'image/png',
17456
+ enabled: true,
17457
+ style: 'knmiradar/nearest',
17458
+ id: generateLayerId(),
17459
+ layerType: LayerType.mapLayer
17460
+ };
17461
+ var obsAirTemperature = {
17462
+ service: KNMIgeoservicesObs.url,
17463
+ name: '10M/ta',
17464
+ id: generateLayerId(),
17465
+ layerType: LayerType.mapLayer
17466
+ };
17467
+ var obsWind = {
17468
+ service: KNMIgeoservicesObs.url,
17469
+ name: '10M/wind',
17470
+ id: generateLayerId(),
17471
+ layerType: LayerType.mapLayer
17472
+ };
17473
+ var obsAirPressureAtSeaLevel = {
17474
+ service: KNMIgeoservicesObs.url,
17475
+ name: '10M/pp',
17476
+ id: generateLayerId(),
17477
+ layerType: LayerType.mapLayer
17478
+ };
17479
+ var obsRelativeHumidity = {
17480
+ service: KNMIgeoservicesObs.url,
17481
+ name: '10M/rh',
17482
+ id: generateLayerId(),
17483
+ layerType: LayerType.mapLayer
17484
+ };
17485
+ var obsGlobalSolarRadiation = {
17486
+ service: KNMIgeoservicesObs.url,
17487
+ name: '10M/qg',
17488
+ id: generateLayerId(),
17489
+ layerType: LayerType.mapLayer
17490
+ };
17491
+ var obsPrecipitationIntensityPWS = {
17492
+ service: KNMIgeoservicesObs.url,
17493
+ name: '10M/pg',
17494
+ id: generateLayerId(),
17495
+ layerType: LayerType.mapLayer
17496
+ };
17497
+ var harmonieRelativeHumidityPl = {
17498
+ service: KNMIgeoservicesHarmonie.url,
17499
+ name: 'relative_humidity__at_pl',
17500
+ id: generateLayerId(),
17501
+ layerType: LayerType.mapLayer,
17502
+ enabled: true
17503
+ };
17504
+ var harmonieWindPl = {
17505
+ service: KNMIgeoservicesHarmonie.url,
17506
+ name: 'wind__at_pl',
17507
+ id: generateLayerId(),
17508
+ layerType: LayerType.mapLayer,
17509
+ enabled: true
17510
+ };
17511
+ var harmonieAirTemperature = {
17512
+ service: KNMIgeoservicesHarmonie.url,
17513
+ name: 'air_temperature__at_2m',
17514
+ id: generateLayerId(),
17515
+ layerType: LayerType.mapLayer,
17516
+ enabled: true
17517
+ };
17518
+ var harmoniePrecipitation = {
17519
+ service: KNMIgeoservicesHarmonie.url,
17520
+ name: 'precipitation_flux',
17521
+ id: generateLayerId(),
17522
+ layerType: LayerType.mapLayer,
17523
+ enabled: true
17524
+ };
17525
+ var harmoniePressure = {
17526
+ service: KNMIgeoservicesHarmonie.url,
17527
+ name: 'air_pressure_at_sea_level',
17528
+ id: generateLayerId(),
17529
+ layerType: LayerType.mapLayer,
17530
+ enabled: true
17531
+ };
17532
+ var harmonieWindFlags = {
17533
+ service: KNMIgeoservicesHarmonie.url,
17534
+ name: 'wind__at_10m',
17535
+ enabled: true,
17536
+ id: generateLayerId(),
17537
+ layerType: LayerType.mapLayer
17538
+ };
17539
+ var klimaatAtlasTG3 = {
17540
+ service: KNMIgeoservicesKlimaatAtlas.url,
17541
+ name: 'TG3',
17542
+ enabled: true,
17543
+ id: generateLayerId(),
17544
+ layerType: LayerType.mapLayer
17545
+ }; // DWD Layers List
17546
+
17547
+ var dwdWarningLayer = {
17548
+ service: DWDWarnings.url,
17549
+ name: 'Warnungen_Gemeinden_vereinigt',
17550
+ format: 'image/png',
17551
+ // style: 'warnungen_gemeinden_vereinigt_event_seamless_param',
17552
+ enabled: true,
17553
+ id: generateLayerId(),
17554
+ layerType: LayerType.mapLayer
17555
+ };
17556
+ var dwdRadarLayer = {
17557
+ service: DWDWXProdukt.url,
17558
+ name: 'WX-Produkt',
17559
+ format: 'image/png',
17560
+ enabled: true,
17561
+ id: generateLayerId(),
17562
+ layerType: LayerType.mapLayer
17563
+ }; // this needs authentication to work
16701
17564
 
16702
- var ConnectedTimeSlider = function ConnectedTimeSlider(_ref) {
16703
- var sourceId = _ref.sourceId,
16704
- mapId = _ref.mapId,
16705
- isTimeSliderHoverOn = _ref.isTimeSliderHoverOn,
16706
- toggleTimeSliderHover = _ref.toggleTimeSliderHover;
16707
- React.useEffect(function () {
16708
- var handleKeyDown = function handleKeyDown(event) {
16709
- if (event.ctrlKey && event.altKey && event.key === 'h') {
16710
- toggleTimeSliderHover({
16711
- mapId: mapId,
16712
- isTimeSliderHoverOn: !isTimeSliderHoverOn
16713
- });
16714
- }
16715
- };
17565
+ var dwdObservationsWetterLayer = {
17566
+ service: DWDObservations.url,
17567
+ name: 'Wetter_Beobachtungen',
17568
+ style: 'Wetter_Symbole',
17569
+ format: 'image/png',
17570
+ enabled: true,
17571
+ id: generateLayerId(),
17572
+ layerType: LayerType.mapLayer // headers: [{ name: 'Authorization', value: 'Basic ...' }]
16716
17573
 
16717
- document.addEventListener('keydown', handleKeyDown);
16718
- return function () {
16719
- document.removeEventListener('keydown', handleKeyDown);
16720
- };
16721
- }, [mapId, isTimeSliderHoverOn, toggleTimeSliderHover]);
16722
- return /*#__PURE__*/React.createElement(TimeSlider, {
16723
- buttons: /*#__PURE__*/React.createElement(TimeSliderButtonsConnect, {
16724
- mapId: mapId
16725
- }),
16726
- rail: /*#__PURE__*/React.createElement(TimeSliderRailConnect, {
16727
- mapId: mapId,
16728
- sourceId: sourceId
16729
- }),
16730
- scaleSlider: /*#__PURE__*/React.createElement(TimeSliderScaleSliderConnect, {
16731
- mapId: mapId
16732
- }),
16733
- legend: /*#__PURE__*/React.createElement(TimeSliderLegendConnect$1, {
16734
- mapId: mapId,
16735
- sourceId: sourceId
16736
- })
16737
- });
16738
17574
  };
16739
- /**
16740
- * TimeSlider component with components connected to the store displaying the time slider
16741
- *
16742
- * Expects the following props:
16743
- * @param {string} mapId mapId: string - Id of the map
16744
- * @param {string} sourceId sourceId: string - Source Id of the timeslider
16745
- * @example
16746
- * ``` <TimeSliderConnect sourceId="timeslider-1" mapId={mapId} />```
16747
- */
17575
+ var dwdObservationsWetterLayerWithHeader = {
17576
+ service: DWDObservations.url,
17577
+ name: 'Wetter_Beobachtungen',
17578
+ style: 'Wetter_Symbole',
17579
+ format: 'image/png',
17580
+ enabled: true,
17581
+ id: generateLayerId(),
17582
+ layerType: LayerType.mapLayer,
17583
+ headers: [{
17584
+ name: 'authorization',
17585
+ value: 'Basic aW50cmFuZXQtdXNlcjpDQnMjMTEh'
17586
+ }]
17587
+ }; // this needs authentication to work
16748
17588
 
17589
+ var dwdObservationsWindLayer = {
17590
+ service: DWDObservations.url,
17591
+ name: 'Wetter_Beobachtungen',
17592
+ style: 'Wetter_Wind',
17593
+ format: 'image/png',
17594
+ enabled: true,
17595
+ id: generateLayerId(),
17596
+ layerType: LayerType.mapLayer
17597
+ }; // FMI open wms Layers List
16749
17598
 
16750
- var TimeSliderConnect = connectRedux(ConnectedTimeSlider);
17599
+ var FMITemp = {
17600
+ service: FMIopenwms.url,
17601
+ name: 'temperature-forecast',
17602
+ format: 'image/png',
17603
+ enabled: true,
17604
+ id: generateLayerId(),
17605
+ layerType: LayerType.mapLayer
17606
+ }; // Met Norway Layers List
17607
+
17608
+ var MetNoTemp = {
17609
+ service: MetNorwayService.url,
17610
+ name: 'thredds_meps_latest_wind',
17611
+ format: 'image/png',
17612
+ enabled: true,
17613
+ id: generateLayerId(),
17614
+ layerType: LayerType.mapLayer
17615
+ };
17616
+ var metNorwayWind1 = {
17617
+ service: MetNorwayService.url,
17618
+ name: 'thredds_meps_latest_wind',
17619
+ format: 'image/png',
17620
+ enabled: true,
17621
+ id: generateLayerId(),
17622
+ layerType: LayerType.mapLayer
17623
+ };
17624
+ var metNorwayWind2 = {
17625
+ service: MetNorwayService.url,
17626
+ name: 'thredds_aromearctic_extracted_t',
17627
+ format: 'image/png',
17628
+ enabled: true,
17629
+ id: generateLayerId(),
17630
+ layerType: LayerType.mapLayer
17631
+ };
17632
+ var metNorwayWind3 = {
17633
+ service: MetNorwayService.url,
17634
+ name: 'thredds_nk800_temperature',
17635
+ format: 'image/png',
17636
+ enabled: true,
17637
+ id: generateLayerId(),
17638
+ layerType: LayerType.mapLayer
17639
+ };
17640
+ var metNorwayLatestT = {
17641
+ service: MetNorwayService.url,
17642
+ name: 'thredds_meps_latest_t',
17643
+ format: 'image/png',
17644
+ enabled: true,
17645
+ id: generateLayerId(),
17646
+ layerType: LayerType.mapLayer
17647
+ };
17648
+ var metNorwaySalinaty = {
17649
+ service: MetNorwayService.url,
17650
+ name: 'thredds_barents_2_5km_1h_salinity',
17651
+ format: 'image/png',
17652
+ enabled: true,
17653
+ id: generateLayerId(),
17654
+ layerType: LayerType.mapLayer
17655
+ };
17656
+ var msgFesEUMETSAT = {
17657
+ service: EUMETSAT.url,
17658
+ name: 'msg_fes:rgb_eview',
17659
+ enabled: true,
17660
+ id: generateLayerId(),
17661
+ layerType: LayerType.mapLayer
17662
+ };
17663
+ var msgNaturalenhncdEUMETSAT = {
17664
+ service: eumetviewEUMETSAT.url,
17665
+ name: 'meteosat:msg_naturalenhncd',
17666
+ enabled: true,
17667
+ id: generateLayerId(),
17668
+ layerType: LayerType.mapLayer
17669
+ };
17670
+ var msgAshEUMETSAT = {
17671
+ service: eumetviewEUMETSAT.url,
17672
+ name: 'meteosat:msg_ash',
17673
+ enabled: true,
17674
+ id: generateLayerId(),
17675
+ layerType: LayerType.mapLayer
17676
+ };
17677
+ var msgCthEUMETSAT = {
17678
+ service: eumetviewEUMETSAT.url,
17679
+ name: 'meteosat:msg_cth',
17680
+ enabled: true,
17681
+ id: generateLayerId(),
17682
+ layerType: LayerType.mapLayer
17683
+ };
17684
+ var msgFogEUMETSAT = {
17685
+ service: eumetviewEUMETSAT.url,
17686
+ name: 'meteosat:msg_fog',
17687
+ enabled: true,
17688
+ id: generateLayerId(),
17689
+ layerType: LayerType.mapLayer
17690
+ };
17691
+ var msgNaturalEUMETSAT = {
17692
+ service: eumetviewEUMETSAT.url,
17693
+ name: 'meteosat:msg_natural',
17694
+ enabled: true,
17695
+ id: generateLayerId(),
17696
+ layerType: LayerType.mapLayer
17697
+ };
17698
+
17699
+ var publicLayers = /*#__PURE__*/Object.freeze({
17700
+ __proto__: null,
17701
+ baseLayer: baseLayer$1,
17702
+ baseLayerGrey: baseLayerGrey$1,
17703
+ baseLayerOpenStreetMapNL: baseLayerOpenStreetMapNL$1,
17704
+ baseLayerArcGisCanvas: baseLayerArcGisCanvas$1,
17705
+ baseLayerWorldMap: baseLayerWorldMap$1,
17706
+ baseLayerHeiGit: baseLayerHeiGit,
17707
+ overLayer: overLayer$1,
17708
+ msgCppLayer: msgCppLayer,
17709
+ veiligheidsRegiosGebiedsIndelingenLabels: veiligheidsRegiosGebiedsIndelingenLabels,
17710
+ veiligheidsRegiosGebiedsIndelingen: veiligheidsRegiosGebiedsIndelingen,
17711
+ radarLayer: radarLayer$1,
17712
+ radarLayerWithError: radarLayerWithError,
17713
+ obsAirTemperature: obsAirTemperature,
17714
+ obsWind: obsWind,
17715
+ obsAirPressureAtSeaLevel: obsAirPressureAtSeaLevel,
17716
+ obsRelativeHumidity: obsRelativeHumidity,
17717
+ obsGlobalSolarRadiation: obsGlobalSolarRadiation,
17718
+ obsPrecipitationIntensityPWS: obsPrecipitationIntensityPWS,
17719
+ harmonieRelativeHumidityPl: harmonieRelativeHumidityPl,
17720
+ harmonieWindPl: harmonieWindPl,
17721
+ harmonieAirTemperature: harmonieAirTemperature,
17722
+ harmoniePrecipitation: harmoniePrecipitation,
17723
+ harmoniePressure: harmoniePressure,
17724
+ harmonieWindFlags: harmonieWindFlags,
17725
+ klimaatAtlasTG3: klimaatAtlasTG3,
17726
+ dwdWarningLayer: dwdWarningLayer,
17727
+ dwdRadarLayer: dwdRadarLayer,
17728
+ dwdObservationsWetterLayer: dwdObservationsWetterLayer,
17729
+ dwdObservationsWetterLayerWithHeader: dwdObservationsWetterLayerWithHeader,
17730
+ dwdObservationsWindLayer: dwdObservationsWindLayer,
17731
+ FMITemp: FMITemp,
17732
+ MetNoTemp: MetNoTemp,
17733
+ metNorwayWind1: metNorwayWind1,
17734
+ metNorwayWind2: metNorwayWind2,
17735
+ metNorwayWind3: metNorwayWind3,
17736
+ metNorwayLatestT: metNorwayLatestT,
17737
+ metNorwaySalinaty: metNorwaySalinaty,
17738
+ msgFesEUMETSAT: msgFesEUMETSAT,
17739
+ msgNaturalenhncdEUMETSAT: msgNaturalenhncdEUMETSAT,
17740
+ msgAshEUMETSAT: msgAshEUMETSAT,
17741
+ msgCthEUMETSAT: msgCthEUMETSAT,
17742
+ msgFogEUMETSAT: msgFogEUMETSAT,
17743
+ msgNaturalEUMETSAT: msgNaturalEUMETSAT
17744
+ });
16751
17745
 
16752
17746
  /* *
16753
17747
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -21059,10 +22053,10 @@ var useStyles$4 = makeStyles(function (theme) {
21059
22053
  var defaultBbox = {
21060
22054
  srs: 'EPSG:3857',
21061
22055
  bbox: {
21062
- left: -450651.2255879827,
21063
- bottom: 6490531.093143953,
21064
- right: 1428345.8183648037,
21065
- top: 7438773.776232235
22056
+ left: 58703.6377,
22057
+ bottom: 6408480.4514,
22058
+ right: 3967387.5161,
22059
+ top: 11520588.9031
21066
22060
  }
21067
22061
  };
21068
22062
  var ConfigurableConnectedMap = function ConfigurableConnectedMap(_ref) {
@@ -21152,6 +22146,14 @@ var ConfigurableConnectedMap = function ConfigurableConnectedMap(_ref) {
21152
22146
  mapId: mapId,
21153
22147
  animationDelay: getSpeedDelay(animationPayload.speed)
21154
22148
  }));
22149
+ } // If animation interval set, set the timestep auto property to false
22150
+
22151
+
22152
+ if (animationPayload && animationPayload.interval) {
22153
+ dispatch(toggleTimestepAuto({
22154
+ mapId: mapId,
22155
+ timestepAuto: false
22156
+ }));
21155
22157
  }
21156
22158
  } // eslint-disable-next-line react-hooks/exhaustive-deps
21157
22159
 
@@ -21214,93 +22216,35 @@ var useStyles$3 = makeStyles(function (theme) {
21214
22216
  }
21215
22217
  };
21216
22218
  });
21217
-
21218
- var makeIndexedMapId = function makeIndexedMapId(baseId, mapNo) {
21219
- return "".concat(baseId, "_").concat(mapNo);
21220
- };
21221
-
21222
22219
  var MultiMapViewConnect = function MultiMapViewConnect(_ref) {
21223
22220
  var maps = _ref.maps,
21224
22221
  rows = _ref.rows,
21225
22222
  cols = _ref.cols,
21226
- _ref$syncArea = _ref.syncArea,
21227
- syncArea = _ref$syncArea === void 0 ? true : _ref$syncArea,
21228
- _ref$syncTime = _ref.syncTime,
21229
- syncTime = _ref$syncTime === void 0 ? true : _ref$syncTime,
21230
22223
  _ref$showTimeSlider = _ref.showTimeSlider,
21231
22224
  showTimeSlider = _ref$showTimeSlider === void 0 ? true : _ref$showTimeSlider,
21232
22225
  _ref$showZoomControls = _ref.showZoomControls,
21233
22226
  showZoomControls = _ref$showZoomControls === void 0 ? true : _ref$showZoomControls;
21234
- var id = React__default.useRef(generateMapId()).current;
21235
22227
  var classes = useStyles$3();
21236
22228
  var dispatch = useDispatch();
21237
- var syncGroupAddGroup$1 = React__default.useCallback(function (payload) {
21238
- return dispatch(syncGroupAddGroup(payload));
21239
- }, [dispatch]);
21240
22229
  var syncGroupAddTarget$1 = React__default.useCallback(function (payload) {
21241
22230
  return dispatch(syncGroupAddTarget(payload));
21242
22231
  }, [dispatch]);
21243
22232
  React__default.useEffect(function () {
21244
- /* Add sync groups */
21245
- syncGroupAddGroup$1({
21246
- groupId: "Time_".concat(id),
21247
- title: "Time group for ".concat(id),
21248
- type: SYNCGROUPS_TYPE_SETTIME
21249
- });
21250
- syncGroupAddGroup$1({
21251
- groupId: "Area_".concat(id),
21252
- title: "Area group for ".concat(id),
21253
- type: SYNCGROUPS_TYPE_SETBBOX
21254
- });
21255
- /* Add this target to the group for area and time */
21256
-
21257
- syncGroupAddTarget$1({
21258
- groupId: "Time_".concat(id),
21259
- targetId: id,
21260
- linked: syncTime
21261
- });
21262
- syncGroupAddTarget$1({
21263
- groupId: "Area_".concat(id),
21264
- targetId: id,
21265
- linked: syncArea
21266
- });
21267
- /* Also add all tiles to the syncgroup for area and time */
21268
-
21269
- maps.forEach(function (map, mapIndex) {
21270
- syncGroupAddTarget$1({
21271
- groupId: "Time_".concat(id),
21272
- targetId: makeIndexedMapId(id, mapIndex),
21273
- linked: syncTime
21274
- });
21275
- syncGroupAddTarget$1({
21276
- groupId: "Area_".concat(id),
21277
- targetId: makeIndexedMapId(id, mapIndex),
21278
- linked: syncArea
21279
- });
21280
- /* Layer sync groups */
21281
-
21282
- var layerSyncGroup = map.layerSyncGroupId;
21283
-
21284
- if (layerSyncGroup) {
21285
- /* Always add the group, it does not harm if it is already defined previousely */
21286
- syncGroupAddGroup$1({
21287
- groupId: layerSyncGroup,
21288
- title: "Layer group for ".concat(id),
21289
- type: SYNCGROUPS_TYPE_SETLAYERACTIONS
21290
- });
22233
+ maps.forEach(function (map) {
22234
+ map.syncGroupsIds && map.syncGroupsIds.forEach(function (syncGroupsId) {
21291
22235
  syncGroupAddTarget$1({
21292
- groupId: layerSyncGroup,
21293
- targetId: makeIndexedMapId(id, mapIndex),
22236
+ groupId: syncGroupsId,
22237
+ targetId: map.id,
21294
22238
  linked: true
21295
22239
  });
21296
- }
22240
+ });
21297
22241
  });
21298
- }, [id, maps, syncArea, syncGroupAddGroup$1, syncGroupAddTarget$1, syncTime]);
22242
+ }, [maps, syncGroupAddTarget$1]);
21299
22243
  var mapStyle = {
21300
22244
  width: "".concat(Math.round(100 / cols), "%"),
21301
22245
  height: "".concat(Math.round(100 / rows), "%")
21302
22246
  };
21303
- var firstMapId = makeIndexedMapId(id, 0);
22247
+ var firstMapId = maps[0].id;
21304
22248
  return /*#__PURE__*/React__default.createElement("div", {
21305
22249
  style: {
21306
22250
  height: '100%',
@@ -21320,10 +22264,10 @@ var MultiMapViewConnect = function MultiMapViewConnect(_ref) {
21320
22264
  width: '100%'
21321
22265
  }
21322
22266
  }, showTimeSlider && /*#__PURE__*/React__default.createElement(TimeSliderConnect, {
21323
- sourceId: id,
22267
+ sourceId: firstMapId,
21324
22268
  mapId: firstMapId
21325
22269
  })), maps.map(function (map, mapIndex) {
21326
- var mapId = makeIndexedMapId(id, mapIndex);
22270
+ var mapId = map.id;
21327
22271
  return /*#__PURE__*/React__default.createElement("div", {
21328
22272
  className: classes.box,
21329
22273
  key: mapId,
@@ -21363,9 +22307,11 @@ var useGetLatestReferenceTime = function useGetLatestReferenceTime(inputLayer) {
21363
22307
  /* Helper to make a map layer preset */
21364
22308
 
21365
22309
 
21366
- var makeMapPreset = function makeMapPreset(timeIncrement, uniqueId, referenceTime, layers, layerSyncGroupId, displayLayerManagerButtonInMap, displayDimensionSelectButtonInMap) {
22310
+ var makeMapPreset = function makeMapPreset(timeIncrement, uniqueId, referenceTime, layers, syncGroupsIds, displayLayerManagerButtonInMap, displayDimensionSelectButtonInMap) {
21367
22311
  var mapTime = moment.utc(referenceTime).add(timeIncrement, 'h').format('YYYY-MM-DDTHH:mm:ss[Z]');
21368
22312
  return {
22313
+ id: uniqueId,
22314
+ syncGroupsIds: syncGroupsIds,
21369
22315
  title: "FC +".concat(timeIncrement),
21370
22316
  displayTimeInMap: true,
21371
22317
  bbox: {
@@ -21388,14 +22334,13 @@ var makeMapPreset = function makeMapPreset(timeIncrement, uniqueId, referenceTim
21388
22334
  });
21389
22335
  }),
21390
22336
  displayLayerManagerButtonInMap: displayLayerManagerButtonInMap,
21391
- displayDimensionSelectButtonInMap: displayDimensionSelectButtonInMap,
21392
- layerSyncGroupId: layerSyncGroupId
22337
+ displayDimensionSelectButtonInMap: displayDimensionSelectButtonInMap
21393
22338
  };
21394
22339
  };
21395
22340
  var HarmRefTimePreset = function HarmRefTimePreset(_ref) {
21396
22341
  var _ref$layers = _ref.layers,
21397
22342
  layers = _ref$layers === void 0 ? [harmoniePressure, harmonieWindFlags, harmoniePrecipitation] : _ref$layers,
21398
- layerSyncGroupId = _ref.layerSyncGroupId;
22343
+ syncGroupsIds = _ref.syncGroupsIds;
21399
22344
 
21400
22345
  /* Get latest reference time for this layer */
21401
22346
  var latestReferenceTime = useGetLatestReferenceTime(layers[0]);
@@ -21406,7 +22351,7 @@ var HarmRefTimePreset = function HarmRefTimePreset(_ref) {
21406
22351
  /* Add the layers with the different map times */
21407
22352
 
21408
22353
  var maps = timeIncrements.map(function (increment, index) {
21409
- return makeMapPreset(increment, "harm_precip".concat(increment), latestReferenceTime, layers, layerSyncGroupId, index === 0 || !layerSyncGroupId, index === 0 || !layerSyncGroupId);
22354
+ return makeMapPreset(increment, "harm_precip".concat(increment), latestReferenceTime, layers, syncGroupsIds, index === 0 || !syncGroupsIds, index === 0 || !syncGroupsIds);
21410
22355
  });
21411
22356
  return /*#__PURE__*/React.createElement(MultiMapViewConnect, {
21412
22357
  rows: 3,
@@ -21446,13 +22391,21 @@ var HarmonieTempAndPrecipPreset = function HarmonieTempAndPrecipPreset(_ref) {
21446
22391
  var layers = _ref.layers;
21447
22392
 
21448
22393
  /* Get all the reference times for this layer */
21449
- var referenceTimes = useGetReferenceTimes(layers.toprow);
22394
+ var referenceTimes = useGetReferenceTimes(layers.topRow);
21450
22395
  if (referenceTimes.length === 0) return /*#__PURE__*/React.createElement("div", null, "Loading...");
21451
22396
  /* Helper to make a map layer prest */
21452
22397
 
21453
- var makeMapPreset = function makeMapPreset(referenceTime, uniqueId, layer, layerSyncGroupId, col) {
22398
+ var makeMapPreset = function makeMapPreset(referenceTime, uniqueId, layer, syncGroupsIds, col) {
21454
22399
  return {
22400
+ id: uniqueId,
21455
22401
  title: "Harmonie run ".concat("".concat(referenceTime.substring(8, 13).replace('T', ' / '))),
22402
+ bbox: {
22403
+ left: -450651.2255879827,
22404
+ bottom: 6490531.093143953,
22405
+ right: 1428345.8183648037,
22406
+ top: 7438773.776232235
22407
+ },
22408
+ srs: 'EPSG:3857',
21456
22409
  layers: [Object.assign(Object.assign({}, layer), {
21457
22410
  id: uniqueId,
21458
22411
  dimensions: [{
@@ -21460,9 +22413,9 @@ var HarmonieTempAndPrecipPreset = function HarmonieTempAndPrecipPreset(_ref) {
21460
22413
  currentValue: referenceTime
21461
22414
  }]
21462
22415
  })],
21463
- layerSyncGroupId: layerSyncGroupId,
21464
- displayLayerManagerButtonInMap: col === 0 || !layerSyncGroupId,
21465
- displayDimensionSelectButtonInMap: col === 0 || !layerSyncGroupId
22416
+ syncGroupsIds: syncGroupsIds,
22417
+ displayLayerManagerButtonInMap: col === 0 || !syncGroupsIds,
22418
+ displayDimensionSelectButtonInMap: col === 0 || !syncGroupsIds
21466
22419
  };
21467
22420
  };
21468
22421
  /* Make the preset */
@@ -21473,14 +22426,14 @@ var HarmonieTempAndPrecipPreset = function HarmonieTempAndPrecipPreset(_ref) {
21473
22426
 
21474
22427
  var mapsTemperature = _toConsumableArray(Array(nCols)).map(function (_, index) {
21475
22428
  var refTime = referenceTimes[referenceTimes.length - nCols + index];
21476
- return makeMapPreset(refTime, "harm_air".concat(index), layers.toprow, layers.toprowGroup, index);
22429
+ return makeMapPreset(refTime, "harm_air".concat(index), layers.topRow, layers.topRowSyncGroups, index);
21477
22430
  });
21478
22431
  /* Add the harmonie precipitation layers with the different referencetimes */
21479
22432
 
21480
22433
 
21481
22434
  var mapsPrecipitation = _toConsumableArray(Array(nCols)).map(function (_, index) {
21482
22435
  var refTime = referenceTimes[referenceTimes.length - nCols + index];
21483
- return makeMapPreset(refTime, "harm_precip".concat(index), layers.bottomrow, layers.bottomrowGroup, index);
22436
+ return makeMapPreset(refTime, "harm_precip".concat(index), layers.bottomRow, layers.bottomRowSyncGroups, index);
21484
22437
  });
21485
22438
 
21486
22439
  var maps = mapsTemperature.concat(mapsPrecipitation);
@@ -21631,10 +22584,10 @@ var componentsLookUp = function componentsLookUp(_ref) {
21631
22584
  case 'HarmRefTimePreset':
21632
22585
  {
21633
22586
  var _layers = initialProps.layers,
21634
- layerSyncGroupId = initialProps.layerSyncGroupId;
22587
+ syncGroupsIds = initialProps.syncGroupsIds;
21635
22588
  return /*#__PURE__*/React__default.createElement(HarmRefTimePreset, {
21636
22589
  layers: _layers || [],
21637
- layerSyncGroupId: layerSyncGroupId,
22590
+ syncGroupsIds: syncGroupsIds,
21638
22591
  "data-testid": "coreHarmonieRefTimePreset"
21639
22592
  });
21640
22593
  }
@@ -21642,7 +22595,8 @@ var componentsLookUp = function componentsLookUp(_ref) {
21642
22595
  case 'ConfigurableMultiMapWithSlider':
21643
22596
  {
21644
22597
  var _mapPreset = initialProps.mapPreset,
21645
- _shouldShowZoomControls = initialProps.shouldShowZoomControls;
22598
+ _shouldShowZoomControls = initialProps.shouldShowZoomControls,
22599
+ _syncGroupsIds = initialProps.syncGroupsIds;
21646
22600
  if (!_mapPreset || _mapPreset.length === 0) return null;
21647
22601
  return /*#__PURE__*/React__default.createElement(MultiMapViewConnect, {
21648
22602
  rows: 2,
@@ -21651,6 +22605,7 @@ var componentsLookUp = function componentsLookUp(_ref) {
21651
22605
  maps: _mapPreset.map(function (p, i) {
21652
22606
  return {
21653
22607
  id: "".concat(id, "_").concat(i),
22608
+ syncGroupsIds: _syncGroupsIds,
21654
22609
  layers: p.layers || [],
21655
22610
  activeLayerId: p.activeLayerId || undefined,
21656
22611
  baseLayer: p.baseLayer || undefined,
@@ -22025,9 +22980,7 @@ var SyncGroupViewer = function SyncGroupViewer(_ref) {
22025
22980
  });
22026
22981
  };
22027
22982
 
22028
- return /*#__PURE__*/React.createElement("div", {
22029
- "data-testid": "syncGroupViewer"
22030
- }, /*#__PURE__*/React.createElement(ToolContainerDraggable, {
22983
+ return /*#__PURE__*/React.createElement(ToolContainerDraggable, {
22031
22984
  title: "Sync",
22032
22985
  startSize: {
22033
22986
  width: 349,
@@ -22035,7 +22988,8 @@ var SyncGroupViewer = function SyncGroupViewer(_ref) {
22035
22988
  },
22036
22989
  headerSize: "medium",
22037
22990
  isOpen: isOpen,
22038
- onClose: onClose
22991
+ onClose: onClose,
22992
+ "data-testid": "syncGroupViewer"
22039
22993
  }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(SyncGroupList, {
22040
22994
  viewStateData: syncGroupViewState.zoompane,
22041
22995
  title: "ZoomPane",
@@ -22072,7 +23026,7 @@ var SyncGroupViewer = function SyncGroupViewer(_ref) {
22072
23026
  removeGroup: function removeGroup(groupId) {
22073
23027
  return _removeGroup('level', groupId);
22074
23028
  }
22075
- }))));
23029
+ })));
22076
23030
  };
22077
23031
 
22078
23032
  /* *
@@ -22310,4 +23264,4 @@ var CoreThemeStoreProvider = function CoreThemeStoreProvider(_ref2) {
22310
23264
  }, children)));
22311
23265
  };
22312
23266
 
22313
- 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, filterNonTimeDimensions, generateLayerId, generateMapId, generateTimesliderId, getFirstTimeStepForLayerId, getLastTimeStepForLayerId, getNextTimeStepForLayerId, getPreviousTimeStepForLayerId, getWMJSDimensionForLayerAndDimension, getWMJSMapById, getWMJSTimeDimensionForLayerId, getWMLayerById, reducer$6 as layerReducer, makeMapPreset, actions$3 as mapActions, constants$1 as mapConstants, selectors 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, types$1 as uiTypes, useStyles$3 as useStyles };
23267
+ 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$1 as mapConstants, selectors 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, types$1 as uiTypes, useStyles$3 as useStyles };