@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.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('reselect'), require('lodash'), require('moment'), require('react'), require('immer'), require('redux-saga/effects'), require('@opengeoweb/webmap'), require('@mui/material'), require('@mui/styles/makeStyles'), require('react-redux'), require('@opengeoweb/shared'), require('@mui/icons-material'), require('react-sortablejs'), require('@mui/styles/createStyles'), require('@mui/styles/withStyles'), require('throttle-debounce'), require('lodash.clonedeep'), require('proj4'), require('redux-dynamic-modules'), require('redux-dynamic-modules-saga'), require('@opengeoweb/theme')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'reselect', 'lodash', 'moment', 'react', 'immer', 'redux-saga/effects', '@opengeoweb/webmap', '@mui/material', '@mui/styles/makeStyles', 'react-redux', '@opengeoweb/shared', '@mui/icons-material', 'react-sortablejs', '@mui/styles/createStyles', '@mui/styles/withStyles', 'throttle-debounce', 'lodash.clonedeep', 'proj4', 'redux-dynamic-modules', 'redux-dynamic-modules-saga', '@opengeoweb/theme'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Core = {}, global.reselect, global._, global.moment, global.React, global.produce, global.effects, global.webmap, global.material, global.makeStyles, global.reactRedux, global.shared, global.iconsMaterial, global.reactSortablejs, global.createStyles, global.withStyles, global.throttleDebounce, global.cloneDeep, global.proj4, global.reduxDynamicModules, global.reduxDynamicModulesSaga, global.theme));
5
- })(this, (function (exports, reselect, _, moment, React, produce, effects, webmap, material, makeStyles, reactRedux, shared, iconsMaterial, reactSortablejs, createStyles, withStyles, throttleDebounce, cloneDeep, proj4, reduxDynamicModules, reduxDynamicModulesSaga, theme) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('reselect'), require('moment'), require('lodash'), require('react'), require('immer'), require('redux-saga/effects'), require('@opengeoweb/webmap'), require('@mui/material'), require('@mui/styles/makeStyles'), require('react-redux'), require('@opengeoweb/shared'), require('@mui/icons-material'), require('react-sortablejs'), require('@mui/styles/createStyles'), require('@mui/styles/withStyles'), require('throttle-debounce'), require('lodash.clonedeep'), require('proj4'), require('redux-dynamic-modules'), require('redux-dynamic-modules-saga'), require('@opengeoweb/theme')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'reselect', 'moment', 'lodash', 'react', 'immer', 'redux-saga/effects', '@opengeoweb/webmap', '@mui/material', '@mui/styles/makeStyles', 'react-redux', '@opengeoweb/shared', '@mui/icons-material', 'react-sortablejs', '@mui/styles/createStyles', '@mui/styles/withStyles', 'throttle-debounce', 'lodash.clonedeep', 'proj4', 'redux-dynamic-modules', 'redux-dynamic-modules-saga', '@opengeoweb/theme'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Core = {}, global.reselect, global.moment, global._, global.React, global.produce, global.effects, global.webmap, global.material, global.makeStyles, global.reactRedux, global.shared, global.iconsMaterial, global.reactSortablejs, global.createStyles, global.withStyles, global.throttleDebounce, global.cloneDeep, global.proj4, global.reduxDynamicModules, global.reduxDynamicModulesSaga, global.theme));
5
+ })(this, (function (exports, reselect, moment, _, React, produce, effects, webmap, material, makeStyles, reactRedux, shared, iconsMaterial, reactSortablejs, createStyles, withStyles, throttleDebounce, cloneDeep, proj4, reduxDynamicModules, reduxDynamicModulesSaga, theme) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -24,8 +24,8 @@
24
24
  return Object.freeze(n);
25
25
  }
26
26
 
27
- var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
28
27
  var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);
28
+ var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
29
29
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
30
30
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
31
  var produce__default = /*#__PURE__*/_interopDefaultLegacy(produce);
@@ -671,6 +671,7 @@
671
671
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
672
672
  * */
673
673
  var MAP_SERVICES_SET_LAYERS = 'MAP_SERVICES_SET_LAYERS';
674
+ var MAP_SERVICES_REMOVE_SERVICE = 'MAP_SERVICES_REMOVE_SERVICE';
674
675
 
675
676
  /* *
676
677
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -701,6 +702,19 @@
701
702
  payload: payload
702
703
  };
703
704
  };
705
+ /**
706
+ * Action mapStoreRemoveService is used in ServiceOptionsDialogConnect after clicking the remove button. Action layerSelectServiceRemoved is used automatically after calling the mapStoreRemoveService action
707
+ *
708
+ * Example: mapStoreRemoveService({serviceUrl: someService})
709
+ * @param {object} payload consisting of serviceUrl: string
710
+ */
711
+
712
+ var mapStoreRemoveService = function mapStoreRemoveService(payload) {
713
+ return {
714
+ type: MAP_SERVICES_REMOVE_SERVICE,
715
+ payload: payload
716
+ };
717
+ };
704
718
 
705
719
  /* *
706
720
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -759,7 +773,8 @@
759
773
  addAvailableBaseLayer: addAvailableBaseLayer,
760
774
  addAvailableBaseLayers: addAvailableBaseLayers,
761
775
  onUpdateLayerInformation: onUpdateLayerInformation,
762
- serviceSetLayers: serviceSetLayers
776
+ serviceSetLayers: serviceSetLayers,
777
+ mapStoreRemoveService: mapStoreRemoveService
763
778
  });
764
779
 
765
780
  /* *
@@ -792,6 +807,29 @@
792
807
  Scale[Scale["DataScale"] = 8] = "DataScale";
793
808
  })(Scale || (Scale = {}));
794
809
 
810
+ /* *
811
+ * Licensed under the Apache License, Version 2.0 (the "License");
812
+ * you may not use this file except in compliance with the License.
813
+ * You may obtain a copy of the License at
814
+ *
815
+ * http://www.apache.org/licenses/LICENSE-2.0
816
+ *
817
+ * Unless required by applicable law or agreed to in writing, software
818
+ * distributed under the License is distributed on an "AS IS" BASIS,
819
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
820
+ * See the License for the specific language governing permissions and
821
+ * limitations under the License.
822
+ *
823
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
824
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
825
+ * */
826
+ var selectorMemoizationOptions = {
827
+ memoizeOptions: {
828
+ maxSize: 1000,
829
+ resultEqualityCheck: _.isEqual
830
+ }
831
+ };
832
+
795
833
  /* *
796
834
  * Licensed under the Apache License, Version 2.0 (the "License");
797
835
  * you may not use this file except in compliance with the License.
@@ -1037,7 +1075,7 @@
1037
1075
 
1038
1076
  var getLayersById = reselect.createSelector(layerStore, function (store) {
1039
1077
  return store ? store.byId : null;
1040
- });
1078
+ }, selectorMemoizationOptions);
1041
1079
  /**
1042
1080
  * Retrieves all layerIds
1043
1081
  *
@@ -1048,7 +1086,7 @@
1048
1086
 
1049
1087
  var getLayersIds = reselect.createSelector(layerStore, function (store) {
1050
1088
  return store ? store.allIds : [];
1051
- });
1089
+ }, selectorMemoizationOptions);
1052
1090
  /**
1053
1091
  * Retrieves all layers (including base layers and overlayers)
1054
1092
  *
@@ -1061,7 +1099,7 @@
1061
1099
  return ids.map(function (layerId) {
1062
1100
  return layers[layerId];
1063
1101
  });
1064
- });
1102
+ }, selectorMemoizationOptions);
1065
1103
  /**
1066
1104
  * Retrieves all layers that aren't base layers and aren't overlayers
1067
1105
  *
@@ -1074,7 +1112,7 @@
1074
1112
  return layers.filter(function (layer) {
1075
1113
  return layer.layerType !== LayerType.baseLayer && layer.layerType !== LayerType.overLayer;
1076
1114
  });
1077
- });
1115
+ }, selectorMemoizationOptions);
1078
1116
  /**
1079
1117
  * Retrieves all baselayers
1080
1118
  *
@@ -1087,7 +1125,7 @@
1087
1125
  return layers.filter(function (layer) {
1088
1126
  return layer.layerType === LayerType.baseLayer;
1089
1127
  });
1090
- });
1128
+ }, selectorMemoizationOptions);
1091
1129
  /**
1092
1130
  * Retrieves all overLayers
1093
1131
  *
@@ -1100,7 +1138,7 @@
1100
1138
  return layers.filter(function (layer) {
1101
1139
  return layer.layerType === LayerType.overLayer;
1102
1140
  });
1103
- });
1141
+ }, selectorMemoizationOptions);
1104
1142
  /**
1105
1143
  * Gets dimensions of the passed layer
1106
1144
  *
@@ -1112,7 +1150,7 @@
1112
1150
 
1113
1151
  var getLayerDimensions = reselect.createSelector(getLayerById, function (layer) {
1114
1152
  return layer && layer.dimensions ? layer.dimensions : [];
1115
- });
1153
+ }, selectorMemoizationOptions);
1116
1154
  /**
1117
1155
  * Gets dimensions of the passed layer, excluding the time dimension
1118
1156
  *
@@ -1124,21 +1162,21 @@
1124
1162
 
1125
1163
  var getLayerNonTimeDimensions = reselect.createSelector(getLayerDimensions, function (dimensions) {
1126
1164
  return filterNonTimeDimensions(dimensions);
1127
- });
1165
+ }, selectorMemoizationOptions);
1128
1166
  /**
1129
1167
  * Gets time dimension of the passed layer
1130
1168
  *
1131
1169
  * Example: timeDimension = getLayerTimeDimension(store, 'layerId_1')
1132
1170
  * @param {object} store store: object - object from which the layers state will be extracted
1133
1171
  * @param {string} layerId layerId: string - Id of the layer
1134
- * @returns {array} returnType: object - object of layer time dimension
1172
+ * @returns {object} returnType: object - object of layer time dimension
1135
1173
  */
1136
1174
 
1137
1175
  var getLayerTimeDimension = reselect.createSelector(getLayerDimensions, function (dimensions) {
1138
1176
  return dimensions && dimensions.length ? dimensions.find(function (dimension) {
1139
1177
  return dimension.name === 'time';
1140
- }) : [];
1141
- });
1178
+ }) : {};
1179
+ }, selectorMemoizationOptions);
1142
1180
  /**
1143
1181
  * Gets specified dimension of the passed layer
1144
1182
  *
@@ -1155,7 +1193,7 @@
1155
1193
  return dimensions && dimensions.length ? dimensions.find(function (dimension) {
1156
1194
  return dimension.name === dimensionName;
1157
1195
  }) : {};
1158
- });
1196
+ }, selectorMemoizationOptions);
1159
1197
  /**
1160
1198
  * Gets opacity of the passed layer
1161
1199
  *
@@ -1237,9 +1275,11 @@
1237
1275
  * @returns {array} returnType: array - array containing all available base layers
1238
1276
  */
1239
1277
 
1240
- var getAvailableBaseLayersForMap = function getAvailableBaseLayersForMap(store, mapId) {
1241
- if (store && store.layers && store.layers.availableBaseLayers) {
1242
- var availableBaseLayers_1 = store.layers.availableBaseLayers;
1278
+ var getAvailableBaseLayersForMap = reselect.createSelector(layerStore, function (_store, _mapId) {
1279
+ return _mapId;
1280
+ }, function (layerStore, mapId) {
1281
+ if (layerStore && layerStore.availableBaseLayers) {
1282
+ var availableBaseLayers_1 = layerStore.availableBaseLayers;
1243
1283
  return availableBaseLayers_1.allIds.reduce(function (list, layerId) {
1244
1284
  if (availableBaseLayers_1.byId[layerId].mapId === mapId) {
1245
1285
  return list.concat(availableBaseLayers_1.byId[layerId]);
@@ -1250,7 +1290,7 @@
1250
1290
  }
1251
1291
 
1252
1292
  return [];
1253
- };
1293
+ }, selectorMemoizationOptions);
1254
1294
 
1255
1295
  /*! *****************************************************************************
1256
1296
  Copyright (c) Microsoft Corporation.
@@ -1306,6 +1346,16 @@
1306
1346
  return t;
1307
1347
  }
1308
1348
 
1349
+ function __awaiter(thisArg, _arguments, P, generator) {
1350
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1351
+ return new (P || (P = Promise))(function (resolve, reject) {
1352
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
1353
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
1354
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
1355
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
1356
+ });
1357
+ }
1358
+
1309
1359
  function __generator(thisArg, body) {
1310
1360
  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
1311
1361
  return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
@@ -1964,14 +2014,6 @@
1964
2014
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
1965
2015
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
1966
2016
  * */
1967
- /* TODO:, move this to a right place https://gitlab.com/opengeoweb/opengeoweb/-/issues/1802 */
1968
-
1969
- var selectorMemoizationOptions = {
1970
- memoizeOptions: {
1971
- maxSize: 1000,
1972
- resultEqualityCheck: _.isEqual
1973
- }
1974
- };
1975
2017
  /**
1976
2018
  * Gets the map state by mapId
1977
2019
  *
@@ -2011,19 +2053,17 @@
2011
2053
  * @returns {object} object containing map state (isAnimating, bbox, baseLayers, layers etc.)
2012
2054
  */
2013
2055
 
2014
- var getFirstMap = function getFirstMap(store) {
2015
- if (store && store.webmap && store.webmap.allIds[0]) {
2016
- return store.webmap.byId[store.webmap.allIds[0]];
2017
- }
2018
-
2019
- return null;
2020
- };
2056
+ var getFirstMap = reselect.createSelector(getAllMapIds, function (store) {
2057
+ return store && store.webmap && store.webmap.byId ? store.webmap.byId : {};
2058
+ }, function (allMapIds, mapsById) {
2059
+ return allMapIds[0] && mapsById[allMapIds[0]] ? mapsById[allMapIds[0]] : null;
2060
+ }, selectorMemoizationOptions);
2021
2061
  /**
2022
2062
  * Gets the id of first map in store
2023
2063
  *
2024
2064
  * Example: getFirstMapId(store)
2025
- * @param {object} store store object from which the map state wll be extracted
2026
- * @returns {object} map id
2065
+ * @param {object} store store: object from which the map state wll be extracted
2066
+ * @returns {string} returnType:string - map id
2027
2067
  */
2028
2068
 
2029
2069
  var getFirstMapId = reselect.createSelector(getFirstMap, function (map) {
@@ -2034,7 +2074,7 @@
2034
2074
  *
2035
2075
  * @param {object} store store: object - store object
2036
2076
  * @param {string} mapId mapId: string - Id of the map
2037
- * @returns {array} returnType:true if map is present
2077
+ * @returns {boolean} returnType:boolean - true if map is present
2038
2078
  */
2039
2079
 
2040
2080
  var getIsMapPresent = reselect.createSelector(function (store, mapId) {
@@ -2057,7 +2097,7 @@
2057
2097
 
2058
2098
  var getLayerIds = reselect.createSelector(getMapById, function (store) {
2059
2099
  return store ? store.mapLayers : [];
2060
- });
2100
+ }, selectorMemoizationOptions);
2061
2101
  /**
2062
2102
  * Gets all layer states for a map
2063
2103
  *
@@ -2083,7 +2123,7 @@
2083
2123
 
2084
2124
  var getMapBaseLayersIds = reselect.createSelector(getMapById, function (store) {
2085
2125
  return store ? store.baseLayers : [];
2086
- });
2126
+ }, selectorMemoizationOptions);
2087
2127
  /**
2088
2128
  * Gets all baselayers for a map
2089
2129
  *
@@ -2109,7 +2149,7 @@
2109
2149
 
2110
2150
  var getMapOverLayersIds = reselect.createSelector(getMapById, function (store) {
2111
2151
  return store ? store.overLayers : [];
2112
- });
2152
+ }, selectorMemoizationOptions);
2113
2153
  /**
2114
2154
  * Gets all overLayers for a map
2115
2155
  *
@@ -2135,7 +2175,7 @@
2135
2175
 
2136
2176
  var getMapDimensions = reselect.createSelector(getMapById, function (store) {
2137
2177
  return store ? store.dimensions : [];
2138
- });
2178
+ }, selectorMemoizationOptions);
2139
2179
  /**
2140
2180
  * Gets the map dimension requested
2141
2181
  *
@@ -2156,7 +2196,7 @@
2156
2196
  }
2157
2197
 
2158
2198
  return undefined;
2159
- });
2199
+ }, selectorMemoizationOptions);
2160
2200
  /**
2161
2201
  * Gets map srs
2162
2202
  *
@@ -2180,7 +2220,7 @@
2180
2220
 
2181
2221
  var getBbox = reselect.createSelector(getMapById, function (store) {
2182
2222
  return store ? store.bbox : {};
2183
- });
2223
+ }, selectorMemoizationOptions);
2184
2224
  /**
2185
2225
  * Gets if map is animating
2186
2226
  *
@@ -2270,7 +2310,7 @@
2270
2310
  * Example: timeStep = getTimeStep(store, 'mapid_1')
2271
2311
  * @param {object} store store: object - store object
2272
2312
  * @param {string} mapId mapId: string - Id of the map
2273
- * @returns {object} returnType: number - time step as a number
2313
+ * @returns {number} returnType: number - time step as a number
2274
2314
  */
2275
2315
 
2276
2316
  var getMapTimeStep = reselect.createSelector(getMapById, function (store) {
@@ -2282,7 +2322,7 @@
2282
2322
  * Example: speed = getSpeed(store, 'mapid_1')
2283
2323
  * @param {object} store store: object - store object
2284
2324
  * @param {string} mapId mapId: string - Id of the map
2285
- * @returns {object} returnType: number - speed as a number
2325
+ * @returns {number} returnType: number - speed as a number
2286
2326
  */
2287
2327
 
2288
2328
  var getMapAnimationDelay = reselect.createSelector(getMapById, function (store) {
@@ -2294,7 +2334,7 @@
2294
2334
  * Example: centerTime = getCenterTime(store, 'mapid_1')
2295
2335
  * @param {object} store store: object - store object
2296
2336
  * @param {string} mapId mapId: string - Id of the map
2297
- * @returns {object} returnType: number - center time as a unix timestamp
2337
+ * @returns {number} returnType: number - center time as a unix timestamp
2298
2338
  */
2299
2339
 
2300
2340
  var getMapTimeSliderCenterTime = reselect.createSelector(getMapById, function (store) {
@@ -2306,7 +2346,7 @@
2306
2346
  * Example: secondsPerPx = getSecondsPerPx(store, 'mapid_1')
2307
2347
  * @param {object} store store: object - store object
2308
2348
  * @param {string} mapId mapId: string - Id of the map
2309
- * @returns {object} returnType: number - the number of seconds per pixel
2349
+ * @returns {number} returnType: number - the number of seconds per pixel
2310
2350
  */
2311
2351
 
2312
2352
  var getMapTimeSliderSecondsPerPx = reselect.createSelector(getMapById, function (store) {
@@ -2318,7 +2358,7 @@
2318
2358
  * Example: dataScaleToSecondsPerPx = getMapTimeSliderDataScaleToSecondsPerPx(store, 'mapid_1')
2319
2359
  * @param {object} store store: object - store object
2320
2360
  * @param {string} mapId mapId: string - Id of the map
2321
- * @returns {object} returnType: number - the number of scaleto seconds pixel
2361
+ * @returns {number} returnType: number - the number of scaleto seconds pixel
2322
2362
  */
2323
2363
 
2324
2364
  var getMapTimeSliderDataScaleToSecondsPerPx = reselect.createSelector(getMapById, function (store) {
@@ -2369,14 +2409,14 @@
2369
2409
  * Example const mapId = getMapIdFromLayerId(store 'layerId-A');
2370
2410
  * @param {object} store store: object - store object
2371
2411
  * @param {string} layerId layerId: string - Id of the layer
2372
- * @returns {string} returnType: the mapId, or null if not found
2412
+ * @returns {string} returnType: string - the mapId, or null if not found
2373
2413
  */
2374
2414
 
2375
2415
  var getMapIdFromLayerId = reselect.createSelector(function (store) {
2376
2416
  return store && store.webmap ? store.webmap : null;
2377
2417
  }, function (_store, layerId) {
2378
2418
  return layerId;
2379
- }, findMapIdFromLayerId);
2419
+ }, findMapIdFromLayerId, selectorMemoizationOptions);
2380
2420
  /**
2381
2421
  * Returns the layerId for given layerName
2382
2422
  *
@@ -2384,7 +2424,7 @@
2384
2424
  * @param {object} store store: object - store object
2385
2425
  * @param {string} mapId mapId: string - Id of the map
2386
2426
  * @param {string} layerId layerId: string - Id of the layer
2387
- * @returns {string} returnType: the layerId, or null if not found
2427
+ * @returns {string} returnType: string - the layerId, or null if not found
2388
2428
  */
2389
2429
 
2390
2430
  var getLayerIdByLayerName = reselect.createSelector(getMapLayers, function (_store, _mapId, layerName) {
@@ -2399,7 +2439,7 @@
2399
2439
  }
2400
2440
 
2401
2441
  return null;
2402
- });
2442
+ }, selectorMemoizationOptions);
2403
2443
  /**
2404
2444
  * Returns the layerIndex in the map for given layerId
2405
2445
  *
@@ -2416,7 +2456,7 @@
2416
2456
  return layers.findIndex(function (layer) {
2417
2457
  return layer.id === layerId;
2418
2458
  });
2419
- });
2459
+ }, selectorMemoizationOptions);
2420
2460
  /**
2421
2461
  * Returns the Layer in the map for given layerIndex
2422
2462
  *
@@ -2435,7 +2475,7 @@
2435
2475
  }
2436
2476
 
2437
2477
  return null;
2438
- });
2478
+ }, selectorMemoizationOptions);
2439
2479
  /**
2440
2480
  * Returns name of all unique dimensions present in all maps
2441
2481
  *
@@ -2458,7 +2498,7 @@
2458
2498
  }, list);
2459
2499
  return uniqueMapDims;
2460
2500
  }, []);
2461
- });
2501
+ }, selectorMemoizationOptions);
2462
2502
  /**
2463
2503
  * Returns the mapPinLocation for the current map
2464
2504
  *
@@ -2470,7 +2510,7 @@
2470
2510
 
2471
2511
  var getPinLocation = reselect.createSelector(getMapById, function (store) {
2472
2512
  return store ? store.mapPinLocation : undefined;
2473
- });
2513
+ }, selectorMemoizationOptions);
2474
2514
 
2475
2515
  /* *
2476
2516
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -2503,7 +2543,7 @@
2503
2543
 
2504
2544
  var getServiceIds = reselect.createSelector(servicesStore, function (serviceState) {
2505
2545
  return serviceState ? serviceState.allIds : [];
2506
- });
2546
+ }, selectorMemoizationOptions);
2507
2547
  /**
2508
2548
  * Gets map services
2509
2549
  *
@@ -2514,7 +2554,7 @@
2514
2554
 
2515
2555
  var getServices = reselect.createSelector(servicesStore, function (store) {
2516
2556
  return store ? store.byId : {};
2517
- });
2557
+ }, selectorMemoizationOptions);
2518
2558
  /**
2519
2559
  * Gets the service object by its url
2520
2560
  *
@@ -2531,19 +2571,19 @@
2531
2571
  }
2532
2572
 
2533
2573
  return null;
2534
- });
2574
+ }, selectorMemoizationOptions);
2535
2575
  /**
2536
2576
  * Gets the layer from the store using the serviceUrl and layerName
2537
2577
  *
2538
2578
  * Example: layers = getLayersFromService(store, 'https://geoservices.knmi.nl/...')
2539
2579
  * @param {object} store store: object - object from which the layers state will be extracted
2540
2580
  * @param {string} serviceUrl serviceUrl: string - Url of the service where the layer belongs to
2541
- * @returns {arrayr} returnType: ServiceLayer[] - All layers within the service object.
2581
+ * @returns {array} returnType: ServiceLayer[] - All layers within the service object.
2542
2582
  */
2543
2583
 
2544
2584
  var getLayersFromService$1 = reselect.createSelector(getServiceByName, function (service) {
2545
2585
  return service && service.layers || null;
2546
- });
2586
+ }, selectorMemoizationOptions);
2547
2587
  /**
2548
2588
  * Gets the layer from the store using the serviceUrl and layerName
2549
2589
  *
@@ -2571,7 +2611,7 @@
2571
2611
  }
2572
2612
 
2573
2613
  return layers[index];
2574
- });
2614
+ }, selectorMemoizationOptions);
2575
2615
  /**
2576
2616
  * Gets the layers stylelist from the servicestore using the serviceUrl and layerName
2577
2617
  *
@@ -2584,7 +2624,26 @@
2584
2624
 
2585
2625
  var getLayerStyles = reselect.createSelector(getLayerFromService, function (layer) {
2586
2626
  return layer && layer.styles ? layer.styles : [];
2587
- });
2627
+ }, selectorMemoizationOptions);
2628
+ /**
2629
+ * Gets services and maps them into an array
2630
+ *
2631
+ * Example: services = getServices(store)
2632
+ * @param {object} store store: object - Store object
2633
+ * @returns {array} returnType: [] - array containing services
2634
+ */
2635
+
2636
+ var getServicesInArray = reselect.createSelector(servicesStore, function (store) {
2637
+ var services = store ? store.byId : {};
2638
+ var arrayOfServiceObjects = Object.keys(services).map(function (key) {
2639
+ return {
2640
+ id: services[key].id,
2641
+ name: services[key].name,
2642
+ service: services[key].service
2643
+ };
2644
+ });
2645
+ return arrayOfServiceObjects;
2646
+ }, selectorMemoizationOptions);
2588
2647
 
2589
2648
  /* *
2590
2649
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -2664,7 +2723,8 @@
2664
2723
  getServiceByName: getServiceByName,
2665
2724
  getLayersFromService: getLayersFromService$1,
2666
2725
  getLayerFromService: getLayerFromService,
2667
- getLayerStyles: getLayerStyles
2726
+ getLayerStyles: getLayerStyles,
2727
+ getServicesInArray: getServicesInArray
2668
2728
  });
2669
2729
 
2670
2730
  /* *
@@ -2724,7 +2784,8 @@
2724
2784
  WEBMAP_ADD_AVAILABLE_BASELAYER: WEBMAP_ADD_AVAILABLE_BASELAYER,
2725
2785
  WEBMAP_ADD_AVAILABLE_BASELAYERS: WEBMAP_ADD_AVAILABLE_BASELAYERS,
2726
2786
  WEBMAP_UPDATE_LAYER_INFO: WEBMAP_UPDATE_LAYER_INFO,
2727
- MAP_SERVICES_SET_LAYERS: MAP_SERVICES_SET_LAYERS
2787
+ MAP_SERVICES_SET_LAYERS: MAP_SERVICES_SET_LAYERS,
2788
+ MAP_SERVICES_REMOVE_SERVICE: MAP_SERVICES_REMOVE_SERVICE
2728
2789
  });
2729
2790
 
2730
2791
  /* *
@@ -3837,6 +3898,11 @@
3837
3898
  return;
3838
3899
  }
3839
3900
 
3901
+ if (!targetId) {
3902
+ console.warn("SYNCGROUPS_ADD_TARGET: targetId is not defined.");
3903
+ return;
3904
+ }
3905
+
3840
3906
  if (draft.groups.byId[groupId].targets.allIds.includes(targetId)) {
3841
3907
  return;
3842
3908
  }
@@ -5091,11 +5157,11 @@
5091
5157
  },
5092
5158
  '&.Mui-selected': {
5093
5159
  color: theme.palette.common.white,
5094
- backgroundColor: theme.palette.geowebColors.buttons.primaryActive.fill,
5160
+ backgroundColor: theme.palette.geowebColors.buttons.primary.active.fill,
5095
5161
  boxShadow: "none",
5096
5162
  '&:hover': {
5097
5163
  color: theme.palette.common.white,
5098
- backgroundColor: theme.palette.geowebColors.buttons.primaryMouseover.fill
5164
+ backgroundColor: theme.palette.geowebColors.buttons.primary.mouseOver.fill
5099
5165
  }
5100
5166
  },
5101
5167
  '&:after': {
@@ -5213,9 +5279,11 @@
5213
5279
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5214
5280
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
5215
5281
  * */
5282
+ var SyncGroupTypeList = [SYNCGROUPS_TYPE_SETBBOX, SYNCGROUPS_TYPE_SETTIME];
5216
5283
 
5217
5284
  var types = /*#__PURE__*/Object.freeze({
5218
- __proto__: null
5285
+ __proto__: null,
5286
+ SyncGroupTypeList: SyncGroupTypeList
5219
5287
  });
5220
5288
 
5221
5289
  /* *
@@ -5419,7 +5487,7 @@
5419
5487
  *
5420
5488
  * @param {object} store store object from which the ui state wll be extracted
5421
5489
  * @param {string} dialogType type of the dialog 'legend' | 'layerManager' | 'dimensionSelect-elevation'
5422
- * @returns {array} [string, boolean] first element gives the active map id, second element whether the dialog is open
5490
+ * @returns {boolean} returnType: boolean
5423
5491
  */
5424
5492
 
5425
5493
  var getisDialogOpen = reselect.createSelector(getDialogDetailsByType, function (details) {
@@ -5434,7 +5502,7 @@
5434
5502
  *
5435
5503
  * @param {object} store store object from which the ui state wll be extracted
5436
5504
  * @param {string} dialogType type of the dialog 'legend' | 'layerManager' | 'dimensionSelect-elevation'
5437
- * @returns {array} [string, boolean] first element gives the active map id, second element whether the dialog is open
5505
+ * @returns {string} returnType: string - the active map id
5438
5506
  */
5439
5507
 
5440
5508
  var getDialogMapId = reselect.createSelector(getDialogDetailsByType, function (details) {
@@ -6390,6 +6458,16 @@
6390
6458
  return reducer(state, mapAction);
6391
6459
  }
6392
6460
 
6461
+ case MAP_SERVICES_REMOVE_SERVICE:
6462
+ return produce__default["default"](state, function (draft) {
6463
+ if (draft.byId[action.payload.serviceUrl]) {
6464
+ draft.allIds = draft.allIds.filter(function (id) {
6465
+ return id !== action.payload.serviceUrl;
6466
+ });
6467
+ delete draft.byId[action.payload.serviceUrl];
6468
+ }
6469
+ });
6470
+
6393
6471
  default:
6394
6472
  return state;
6395
6473
  }
@@ -6882,7 +6960,10 @@
6882
6960
  byId: {},
6883
6961
  allIds: []
6884
6962
  },
6885
- keywords: []
6963
+ keywords: {
6964
+ byId: {},
6965
+ allIds: []
6966
+ }
6886
6967
  }
6887
6968
  };
6888
6969
  var reducer = function reducer(state, action) {
@@ -6910,30 +6991,22 @@
6910
6991
  if (!draft.filters.activeServices.byId[serviceUrl_1]) {
6911
6992
  draft.filters.activeServices.byId[serviceUrl_1] = {};
6912
6993
 
6913
- var _loop_1 = function _loop_1(keyword) {
6914
- var foundKeyword = draft.filters.keywords.find(function (object) {
6915
- return object.id === keyword;
6916
- });
6917
-
6918
- if (foundKeyword) {
6919
- foundKeyword.amount += 1;
6920
- foundKeyword.amountVisible += 1;
6921
- } else {
6922
- var newKeywordObject = {
6923
- id: keyword,
6924
- amount: 1,
6925
- amountVisible: 1,
6926
- checked: true
6927
- };
6928
- draft.filters.keywords.push(newKeywordObject);
6929
- }
6930
- };
6931
-
6932
6994
  try {
6933
6995
  for (var keywords_2 = __values(keywords_1), keywords_2_1 = keywords_2.next(); !keywords_2_1.done; keywords_2_1 = keywords_2.next()) {
6934
6996
  var keyword = keywords_2_1.value;
6935
6997
 
6936
- _loop_1(keyword);
6998
+ if (!draft.filters.keywords.byId[keyword]) {
6999
+ draft.filters.keywords.byId[keyword] = {
7000
+ id: keyword,
7001
+ amount: 1,
7002
+ amountVisible: 1,
7003
+ checked: true
7004
+ };
7005
+ draft.filters.keywords.allIds.push(keyword);
7006
+ } else {
7007
+ draft.filters.keywords.byId[keyword].amount += 1;
7008
+ draft.filters.keywords.byId[keyword].amountVisible += 1;
7009
+ }
6937
7010
  }
6938
7011
  } catch (e_1_1) {
6939
7012
  e_1 = {
@@ -6955,31 +7028,37 @@
6955
7028
  });
6956
7029
  }
6957
7030
 
6958
- case 'LAYER_SELECT_ENABLE_ACTIVE_SERVICE':
7031
+ case 'LAYER_SELECT_SERVICE_REMOVED':
6959
7032
  {
6960
- var _b = action.payload,
6961
- serviceUrl_2 = _b.serviceUrl,
6962
- keywords_3 = _b.keywords;
6963
7033
  return produce__default["default"](state, function (draft) {
6964
7034
  var e_2, _a;
6965
7035
 
6966
- draft.filters.activeServices.byId[serviceUrl_2].enabled = true;
7036
+ var serviceUrl = action.payload.serviceUrl; // 1. Find a service that is to be removed
6967
7037
 
6968
- var _loop_2 = function _loop_2(keyword) {
6969
- var foundObject = draft.filters.keywords.find(function (object) {
6970
- return object.id === keyword;
6971
- });
7038
+ var foundService = draft.filters.activeServices.byId[serviceUrl];
7039
+
7040
+ var _loop_1 = function _loop_1(keyword) {
7041
+ var foundObject = draft.filters.keywords.byId[keyword];
6972
7042
 
6973
- if (foundObject) {
6974
- foundObject.amountVisible += 1;
7043
+ if (foundObject && foundObject.amount) {
7044
+ foundObject.amount -= 1;
7045
+ foundObject.amountVisible -= 1;
7046
+ }
7047
+
7048
+ if (foundObject && foundObject.amount === 0) {
7049
+ delete draft.filters.keywords.byId[keyword];
7050
+ draft.filters.keywords.allIds = draft.filters.keywords.allIds.filter(function (id) {
7051
+ return id !== keyword;
7052
+ });
6975
7053
  }
6976
7054
  };
6977
7055
 
6978
7056
  try {
6979
- for (var keywords_4 = __values(keywords_3), keywords_4_1 = keywords_4.next(); !keywords_4_1.done; keywords_4_1 = keywords_4.next()) {
6980
- var keyword = keywords_4_1.value;
7057
+ // 2. Go through all keywords for removed service, and decrement the amount of all found keywords
7058
+ for (var _b = __values(foundService.keywordsPerService), _c = _b.next(); !_c.done; _c = _b.next()) {
7059
+ var keyword = _c.value;
6981
7060
 
6982
- _loop_2(keyword);
7061
+ _loop_1(keyword);
6983
7062
  }
6984
7063
  } catch (e_2_1) {
6985
7064
  e_2 = {
@@ -6987,10 +7066,45 @@
6987
7066
  };
6988
7067
  } finally {
6989
7068
  try {
6990
- if (keywords_4_1 && !keywords_4_1.done && (_a = keywords_4["return"])) _a.call(keywords_4);
7069
+ if (_c && !_c.done && (_a = _b["return"])) _a.call(_b);
6991
7070
  } finally {
6992
7071
  if (e_2) throw e_2.error;
6993
7072
  }
7073
+ } // Finally remove object from activeServices, so if the service is added again later on, new object and keywords will be re-added
7074
+
7075
+
7076
+ delete draft.filters.activeServices.byId[serviceUrl];
7077
+ draft.filters.activeServices.allIds = draft.filters.activeServices.allIds.filter(function (id) {
7078
+ return id !== serviceUrl;
7079
+ });
7080
+ });
7081
+ }
7082
+
7083
+ case 'LAYER_SELECT_ENABLE_ACTIVE_SERVICE':
7084
+ {
7085
+ var _b = action.payload,
7086
+ serviceUrl_2 = _b.serviceUrl,
7087
+ keywords_3 = _b.keywords;
7088
+ return produce__default["default"](state, function (draft) {
7089
+ var e_3, _a;
7090
+
7091
+ draft.filters.activeServices.byId[serviceUrl_2].enabled = true;
7092
+
7093
+ try {
7094
+ for (var keywords_4 = __values(keywords_3), keywords_4_1 = keywords_4.next(); !keywords_4_1.done; keywords_4_1 = keywords_4.next()) {
7095
+ var keyword = keywords_4_1.value;
7096
+ draft.filters.keywords.byId[keyword].amountVisible += 1;
7097
+ }
7098
+ } catch (e_3_1) {
7099
+ e_3 = {
7100
+ error: e_3_1
7101
+ };
7102
+ } finally {
7103
+ try {
7104
+ if (keywords_4_1 && !keywords_4_1.done && (_a = keywords_4["return"])) _a.call(keywords_4);
7105
+ } finally {
7106
+ if (e_3) throw e_3.error;
7107
+ }
6994
7108
  }
6995
7109
  });
6996
7110
  }
@@ -7001,45 +7115,63 @@
7001
7115
  serviceUrl_3 = _c.serviceUrl,
7002
7116
  keywords_5 = _c.keywords;
7003
7117
  return produce__default["default"](state, function (draft) {
7004
- var e_3, _a;
7118
+ var e_4, _a;
7005
7119
 
7006
7120
  draft.filters.activeServices.byId[serviceUrl_3].enabled = false;
7007
7121
 
7008
- var _loop_3 = function _loop_3(keyword) {
7009
- var foundObject = draft.filters.keywords.find(function (object) {
7010
- return object.id === keyword;
7011
- });
7012
-
7013
- if (foundObject && foundObject.amountVisible > 0) {
7014
- foundObject.amountVisible -= 1;
7015
- }
7016
- };
7017
-
7018
7122
  try {
7019
7123
  for (var keywords_6 = __values(keywords_5), keywords_6_1 = keywords_6.next(); !keywords_6_1.done; keywords_6_1 = keywords_6.next()) {
7020
7124
  var keyword = keywords_6_1.value;
7021
-
7022
- _loop_3(keyword);
7125
+ draft.filters.keywords.byId[keyword].amountVisible -= 1;
7023
7126
  }
7024
- } catch (e_3_1) {
7025
- e_3 = {
7026
- error: e_3_1
7127
+ } catch (e_4_1) {
7128
+ e_4 = {
7129
+ error: e_4_1
7027
7130
  };
7028
7131
  } finally {
7029
7132
  try {
7030
7133
  if (keywords_6_1 && !keywords_6_1.done && (_a = keywords_6["return"])) _a.call(keywords_6);
7031
7134
  } finally {
7032
- if (e_3) throw e_3.error;
7135
+ if (e_4) throw e_4.error;
7033
7136
  }
7034
7137
  }
7035
7138
  });
7036
7139
  }
7037
7140
 
7038
- case 'LAYER_SELECT_UPDATE_KEYWORDS':
7141
+ case 'LAYER_SELECT_TOGGLE_KEYWORDS':
7039
7142
  {
7040
7143
  return produce__default["default"](state, function (draft) {
7144
+ var e_5, _a;
7145
+
7041
7146
  var keywords = action.payload.keywords;
7042
- draft.filters.keywords = keywords;
7147
+
7148
+ try {
7149
+ for (var keywords_7 = __values(keywords), keywords_7_1 = keywords_7.next(); !keywords_7_1.done; keywords_7_1 = keywords_7.next()) {
7150
+ var keyword = keywords_7_1.value;
7151
+ draft.filters.keywords.byId[keyword].checked = !draft.filters.keywords.byId[keyword].checked;
7152
+ }
7153
+ } catch (e_5_1) {
7154
+ e_5 = {
7155
+ error: e_5_1
7156
+ };
7157
+ } finally {
7158
+ try {
7159
+ if (keywords_7_1 && !keywords_7_1.done && (_a = keywords_7["return"])) _a.call(keywords_7);
7160
+ } finally {
7161
+ if (e_5) throw e_5.error;
7162
+ }
7163
+ }
7164
+ });
7165
+ }
7166
+
7167
+ case 'LAYER_SELECT_ENABLE_ONLY_ONE_KEYWORD':
7168
+ {
7169
+ return produce__default["default"](state, function (draft) {
7170
+ var keyword = action.payload.keyword;
7171
+ draft.filters.keywords.allIds.forEach(function (id) {
7172
+ draft.filters.keywords.byId[id].checked = false;
7173
+ });
7174
+ draft.filters.keywords.byId[keyword].checked = true;
7043
7175
  });
7044
7176
  }
7045
7177
 
@@ -7068,7 +7200,9 @@
7068
7200
  var LAYER_SELECT_DISABLE_ACTIVE_SERVICE = 'LAYER_SELECT_DISABLE_ACTIVE_SERVICE';
7069
7201
  var LAYER_SELECT_ENABLE_ACTIVE_SERVICE = 'LAYER_SELECT_ENABLE_ACTIVE_SERVICE';
7070
7202
  var LAYER_SELECT_ADD_KEYWORDS_AND_ACTIVE_SERVICES = 'LAYER_SELECT_ADD_KEYWORDS_AND_ACTIVE_SERVICES';
7071
- var LAYER_SELECT_UPDATE_KEYWORDS = 'LAYER_SELECT_UPDATE_KEYWORDS';
7203
+ var LAYER_SELECT_SERVICE_REMOVED = 'LAYER_SELECT_SERVICE_REMOVED';
7204
+ var LAYER_SELECT_TOGGLE_KEYWORDS = 'LAYER_SELECT_TOGGLE_KEYWORDS';
7205
+ var LAYER_SELECT_ENABLE_ONLY_ONE_KEYWORD = 'LAYER_SELECT_ENABLE_ONLY_ONE_KEYWORD';
7072
7206
 
7073
7207
  /* *
7074
7208
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -7138,9 +7272,42 @@
7138
7272
  payload: payload
7139
7273
  };
7140
7274
  };
7141
- var updateKeywords = function updateKeywords(payload) {
7275
+ /*
7276
+ * Removes the given service from Layer Select store
7277
+ *
7278
+ * Example: layerSelectServiceRemoved({ serviceUrl: 'https://service.wms' })
7279
+ * @param {string} payload {serviceUrl: string}
7280
+ */
7281
+
7282
+ var layerSelectServiceRemoved = function layerSelectServiceRemoved(payload) {
7283
+ return {
7284
+ type: LAYER_SELECT_SERVICE_REMOVED,
7285
+ payload: payload
7286
+ };
7287
+ };
7288
+ /*
7289
+ * Toggles keywords listed
7290
+ *
7291
+ * Example: toggleKeywords({ keywords: ['keyword1', 'keyword2'] })
7292
+ * @param {string[]} payload { keywords: string[] }
7293
+ */
7294
+
7295
+ var toggleKeywords = function toggleKeywords(payload) {
7296
+ return {
7297
+ type: LAYER_SELECT_TOGGLE_KEYWORDS,
7298
+ payload: payload
7299
+ };
7300
+ };
7301
+ /*
7302
+ * Enables only one keyword and disables all other
7303
+ *
7304
+ * Example: toggleKeywords({ keyword: 'keyword1' })
7305
+ * @param {string} payload { keyword: string }
7306
+ */
7307
+
7308
+ var enableOnlyOneKeyword = function enableOnlyOneKeyword(payload) {
7142
7309
  return {
7143
- type: LAYER_SELECT_UPDATE_KEYWORDS,
7310
+ type: LAYER_SELECT_ENABLE_ONLY_ONE_KEYWORD,
7144
7311
  payload: payload
7145
7312
  };
7146
7313
  };
@@ -7187,6 +7354,28 @@
7187
7354
  }
7188
7355
  });
7189
7356
  }
7357
+ function layerSelectServiceRemovedSaga(capturedAction) {
7358
+ var removedService, serviceUrl;
7359
+ return __generator(this, function (_a) {
7360
+ switch (_a.label) {
7361
+ case 0:
7362
+ removedService = capturedAction.payload;
7363
+ serviceUrl = removedService.serviceUrl;
7364
+ return [4
7365
+ /*yield*/
7366
+ , effects.put(layerSelectServiceRemoved({
7367
+ serviceUrl: serviceUrl
7368
+ }))];
7369
+
7370
+ case 1:
7371
+ _a.sent();
7372
+
7373
+ return [2
7374
+ /*return*/
7375
+ ];
7376
+ }
7377
+ });
7378
+ }
7190
7379
  function rootSaga() {
7191
7380
  return __generator(this, function (_a) {
7192
7381
  switch (_a.label) {
@@ -7198,6 +7387,13 @@
7198
7387
  case 1:
7199
7388
  _a.sent();
7200
7389
 
7390
+ return [4
7391
+ /*yield*/
7392
+ , effects.takeEvery(MAP_SERVICES_REMOVE_SERVICE, layerSelectServiceRemovedSaga)];
7393
+
7394
+ case 2:
7395
+ _a.sent();
7396
+
7201
7397
  return [2
7202
7398
  /*return*/
7203
7399
  ];
@@ -7276,7 +7472,8 @@
7276
7472
  path: nodesToRecur.path || [],
7277
7473
  children: [],
7278
7474
  keywords: nodesToRecur.keywords || [],
7279
- "abstract": nodesToRecur["abstract"] || ''
7475
+ "abstract": nodesToRecur["abstract"] || '',
7476
+ styles: nodesToRecur.styles || []
7280
7477
  };
7281
7478
 
7282
7479
  if (nodesToRecur.children) {
@@ -7693,132 +7890,288 @@
7693
7890
  * See the License for the specific language governing permissions and
7694
7891
  * limitations under the License.
7695
7892
  *
7696
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7697
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
7893
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7894
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
7698
7895
  * */
7699
- var DWD = {
7700
- name: 'DWD',
7701
- url: 'https://maps.dwd.de/geoserver/ows?',
7702
- id: 'dwd'
7703
- };
7704
- var nationaalgeoregister = {
7705
- name: 'nationaalgeoregister.nl',
7706
- url: 'https://geodata.nationaalgeoregister.nl/cbsgebiedsindelingen/wms?request=GetCapabilities&service=wms',
7707
- id: 'nationaalgeoregister'
7708
- };
7709
- var KNMImsgcpp = {
7710
- name: 'KNMImsgcpp',
7711
- url: 'https://adaguc-server-msg-cpp-portal.pmc.knmi.cloud/wms?DATASET=msgrt&',
7712
- id: 'msgcpp-ogc-realtime'
7713
- };
7714
- var HeiGit = {
7715
- name: 'HeiGit',
7716
- url: 'https://maps.heigit.org/osm-wms/service',
7717
- id: 'HeiGit-osm-wms'
7718
- };
7719
- var ArcGisCanvas = {
7720
- name: 'ArcGisCanvas',
7721
- url: 'https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/',
7722
- id: 'ArcGisCanvas'
7723
- };
7724
- var KNMIgeoservicesBaselayers = {
7725
- name: 'KNMIgeoservicesBaselayers',
7726
- url: 'https://geoservices.knmi.nl/wms?DATASET=baselayers&',
7727
- id: 'KNMIgeoservicesBaselayers'
7728
- };
7729
- var KNMIgeoservicesRadar = {
7730
- name: 'KNMIgeoservicesRadar',
7731
- url: 'https://geoservices.knmi.nl/wms?dataset=RADAR&',
7732
- id: 'KNMIgeoservicesRadar'
7733
- };
7734
- var KNMIgeoservicesObs = {
7735
- name: 'KNMIgeoservicesObs',
7736
- url: 'https://geoservices.knmi.nl/adagucserver?dataset=OBS&service=WMS&',
7737
- id: 'KNMIgeoservicesObs'
7738
- };
7739
- var KNMIgeoservicesKlimaatAtlas = {
7740
- name: 'KNMIgeoservicesKlimaatAtlas',
7741
- url: 'https://geoservices.knmi.nl/wms?DATASET=gsie-dataset&SERVICE=WMS&',
7742
- id: 'KNMIgeoservicesKlimaatAtlas'
7743
- };
7744
- var KNMIgeoservicesHarmonie = {
7745
- name: 'KNMIgeoservicesHarmonie',
7746
- url: 'https://geoservices.knmi.nl/wms?DATASET=HARM_N25&',
7747
- id: 'KNMIgeoservicesKliKNMIgeoservicesHarmoniemaatAtlas'
7748
- };
7749
- var KNMIgeoservicesHarmonieMLService = {
7750
- name: 'KNMI Harmonie ML',
7751
- url: 'https://geoservices.knmi.nl/wms?DATASET=HARM_N25_ML&SERVICE=WMS&',
7752
- id: 'harmonieML'
7896
+
7897
+ var parseBoolean = function parseBoolean(value) {
7898
+ return ['true', 'false', true, false].includes(value) && JSON.parse(value);
7753
7899
  };
7754
- var MetNorwayService = {
7755
- name: 'MetNorwayService',
7756
- url: 'https://wms-e1.geoweb.met.no/wms?',
7757
- id: 'MetNorwayService'
7900
+
7901
+ var isBaseLayer = function isBaseLayer(layer) {
7902
+ return ['baseLayer'].includes(layer.layerType);
7758
7903
  };
7759
- var FMIopenwms = {
7760
- name: 'FMIopenwms',
7761
- url: 'https://openwms.fmi.fi/geoserver/wms?',
7762
- id: 'FMIopenwms'
7904
+
7905
+ var isMapLayer = function isMapLayer(layer) {
7906
+ return ['mapLayer'].includes(layer.layerType);
7763
7907
  };
7764
- var DWDObservations = {
7765
- name: 'DWDObservations',
7766
- url: 'https://maps.dwd.de/geoserver/dwd/Wetter_Beobachtungen/ows?',
7767
- id: 'DWDObservations'
7908
+
7909
+ var isOverLayer = function isOverLayer(layer) {
7910
+ return ['overLayer'].includes(layer.layerType);
7768
7911
  };
7769
- var DWDWarnings = {
7770
- name: 'DWDWarnings',
7771
- url: 'https://maps.dwd.de/geoserver/dwd/Warnungen_Gemeinden_vereinigt/ows?',
7772
- id: 'DWDWarnings'
7912
+
7913
+ var isValidService = function isValidService(service) {
7914
+ return Object.prototype.hasOwnProperty.call(service, 'url');
7773
7915
  };
7774
- var DWDWXProdukt = {
7775
- name: 'DWDWXProdukt',
7776
- url: 'https://maps.dwd.de/geoserver/dwd/WX-Produkt/ows?',
7777
- id: 'DWDWXProdukt'
7916
+
7917
+ var isValidBbox = function isValidBbox(bbox) {
7918
+ var isFiniteNumber = Number.isFinite(bbox.bottom) && Number.isFinite(bbox.left) && Number.isFinite(bbox.right) && Number.isFinite(bbox.top);
7919
+ return isFiniteNumber;
7778
7920
  };
7779
- var EUMETSAT = {
7780
- name: 'EUMETSAT',
7781
- url: 'https://view.eumetsat.int/geoserver/wms?',
7782
- id: 'EUMETSAT'
7921
+
7922
+ var isValidSrs = function isValidSrs(srs) {
7923
+ var isValid = srs.includes('EPSG');
7924
+ return isValid;
7783
7925
  };
7784
- var eumetviewEUMETSAT = {
7785
- name: 'eumetviewEUMETSAT',
7786
- url: 'https://eumetview.eumetsat.int/geoserv/wms?',
7787
- id: 'eumetviewEUMETSAT'
7926
+
7927
+ var parseLayerType = function parseLayerType(layer, defaultValue) {
7928
+ if (isBaseLayer(layer)) {
7929
+ return LayerType.baseLayer;
7930
+ }
7931
+
7932
+ if (isMapLayer(layer)) {
7933
+ return LayerType.mapLayer;
7934
+ }
7935
+
7936
+ if (isOverLayer(layer)) {
7937
+ return LayerType.overLayer;
7938
+ }
7939
+
7940
+ return defaultValue;
7788
7941
  };
7789
- var ECMWFPublicService = {
7790
- name: 'ECMWF',
7791
- url: 'https://apps.ecmwf.int/wms/?token=public',
7792
- id: 'ecmwf'
7942
+
7943
+ var parseLayer = function parseLayer(layer) {
7944
+ var lr = JSON.parse(JSON.stringify(layer)); // Cloning used here to achieve object immutability
7945
+
7946
+ if (!lr.id) {
7947
+ lr.id = generateLayerId();
7948
+ }
7949
+
7950
+ if (lr.layerType) {
7951
+ lr.layerType = parseLayerType(lr, null);
7952
+ }
7953
+
7954
+ if (lr.enabled) {
7955
+ lr.enabled = parseBoolean(lr.enabled);
7956
+ }
7957
+
7958
+ return lr;
7793
7959
  };
7794
- var MeteoCanada = {
7795
- name: 'Meteo Canada',
7796
- url: 'https://geo.weather.gc.ca/geomet/?lang=en&',
7797
- id: 'MeteoCanada'
7960
+
7961
+ var filterBaseLayers = function filterBaseLayers(presetArray) {
7962
+ var hasLayers = presetArray && Array.isArray(presetArray) && presetArray.length > 0;
7963
+ var filteredBaseLayers = hasLayers ? presetArray.filter(function (preset) {
7964
+ return isBaseLayer(preset);
7965
+ }).map(function (filteredPresetLayer) {
7966
+ return parseLayer(filteredPresetLayer);
7967
+ }) : null;
7968
+ var hasBaseLayers = filteredBaseLayers && filteredBaseLayers.length > 0;
7969
+ var baseLayers = hasBaseLayers ? filteredBaseLayers : undefined;
7970
+ return baseLayers;
7971
+ };
7972
+ var filterMapLayers = function filterMapLayers(presetArray) {
7973
+ var hasLayers = presetArray && Array.isArray(presetArray) && presetArray.length > 0;
7974
+ var filteredMapLayers = hasLayers ? presetArray.filter(function (preset) {
7975
+ return isMapLayer(preset);
7976
+ }).map(function (filteredPresetLayer) {
7977
+ return parseLayer(filteredPresetLayer);
7978
+ }) : null;
7979
+ var hasMapLayers = filteredMapLayers && filteredMapLayers.length > 0;
7980
+ var mapLayers = hasMapLayers ? filteredMapLayers : undefined;
7981
+ return mapLayers;
7982
+ };
7983
+ var filterServices = function filterServices(presetArray) {
7984
+ var hasServices = presetArray && Array.isArray(presetArray) && presetArray.length > 0;
7985
+ var validServices = hasServices ? presetArray.filter(function (preset) {
7986
+ return isValidService(preset);
7987
+ }) : null;
7988
+ var hasValidServices = validServices && validServices.length > 0;
7989
+ var services = hasValidServices ? validServices : undefined;
7990
+ return services;
7991
+ };
7992
+ var filterBbox = function filterBbox(presetBbox) {
7993
+ var hasAllValues = presetBbox && presetBbox.bottom && presetBbox.left && presetBbox.right && presetBbox.top;
7994
+ var bbox = hasAllValues && isValidBbox(presetBbox) ? presetBbox : undefined;
7995
+ return bbox;
7996
+ };
7997
+ var filterSrs = function filterSrs(presetSrs) {
7998
+ var isValid = presetSrs && isValidSrs(presetSrs);
7999
+ var srs = isValid ? presetSrs : undefined;
8000
+ return srs;
8001
+ };
8002
+ var filterDimensions = function filterDimensions(mapLayers) {
8003
+ var layerDimensions = mapLayers.reduce(function (mapLayerList, layer) {
8004
+ if (layer.dimensions && layer.dimensions.length > 0 && layer.id) {
8005
+ var dimensions = layer.dimensions.map(function (dimension) {
8006
+ return {
8007
+ dimension: dimension,
8008
+ layerId: layer.id
8009
+ };
8010
+ });
8011
+ return mapLayerList.concat(dimensions);
8012
+ }
8013
+
8014
+ return mapLayerList;
8015
+ }, []);
8016
+ return layerDimensions.length > 0 ? layerDimensions : undefined;
8017
+ };
8018
+ var filterMapPresets = function filterMapPresets(presets) {
8019
+ var preset = presets && presets.preset;
8020
+ var filteredBbox = preset && preset.bbox ? filterBbox(preset.bbox) : undefined;
8021
+ var filteredSrs = preset && preset.srs ? filterSrs(preset.srs) : undefined;
8022
+ var filterredServices = preset && preset.services ? filterServices(preset.services) : undefined;
8023
+ var baseServices = preset && preset.baseServices ? filterServices(preset.baseServices) : undefined;
8024
+ var filteredBaseLayers = preset && preset.layers ? filterBaseLayers(preset.layers) : undefined;
8025
+ var filteredMapLayers = preset && preset.layers ? filterMapLayers(preset.layers) : undefined;
8026
+ var presetType = preset && preset.presetType ? preset.presetType : undefined;
8027
+ var presetId = preset && preset.presetId ? preset.presetId : undefined;
8028
+ var presetName = preset && preset.presetName ? preset.presetName : undefined;
8029
+ var activeLayerId = preset && preset.activeLayerId ? preset.activeLayerId : undefined;
8030
+ var layerDimensions = filteredMapLayers ? filterDimensions(filteredMapLayers) : undefined;
8031
+ var filteredPreset = {
8032
+ presetType: presetType,
8033
+ presetId: presetId,
8034
+ presetName: presetName,
8035
+ bbox: filteredBbox,
8036
+ services: filterredServices,
8037
+ baseServices: baseServices,
8038
+ srs: filteredSrs,
8039
+ baseLayers: filteredBaseLayers,
8040
+ mapLayers: filteredMapLayers,
8041
+ activeLayerId: activeLayerId,
8042
+ layerDimensions: layerDimensions
8043
+ };
8044
+ return filteredPreset;
8045
+ };
8046
+ var getInitialPresets = function getInitialPresets(mapPresets, defaultInitialPresets) {
8047
+ var filteredPresets = mapPresets ? filterMapPresets(mapPresets) : null;
8048
+ var initialPresets = filteredPresets || filterMapPresets(defaultInitialPresets);
8049
+ return initialPresets;
8050
+ };
8051
+
8052
+ var preset = {
8053
+ presetType: "mapPreset",
8054
+ presetId: "mapPreset-1",
8055
+ presetName: "Layer manager preset",
8056
+ services: [
8057
+ {
8058
+ name: "KNMIgeoservicesRadar",
8059
+ url: "https://geoservices.knmi.nl/wms?dataset=RADAR&",
8060
+ id: "KNMIgeoservicesRadar"
8061
+ },
8062
+ {
8063
+ name: "MetNorwayService",
8064
+ url: "https://wms-e1.geoweb.met.no/wms?",
8065
+ id: "MetNorwayService"
8066
+ },
8067
+ {
8068
+ name: "FMIopenwms",
8069
+ url: "https://openwms.fmi.fi/geoserver/wms?",
8070
+ id: "FMIopenwms"
8071
+ },
8072
+ {
8073
+ name: "ECMWF",
8074
+ url: "https://apps.ecmwf.int/wms/?token=public",
8075
+ id: "ecmwf"
8076
+ },
8077
+ {
8078
+ name: "KNMIgeoservicesHarmonie",
8079
+ url: "https://geoservices.knmi.nl/wms?DATASET=HARM_N25&",
8080
+ id: "KNMIgeoservicesKliKNMIgeoservicesHarmoniemaatAtlas"
8081
+ },
8082
+ {
8083
+ name: "KNMI Harmonie ML",
8084
+ url: "https://geoservices.knmi.nl/wms?DATASET=HARM_N25_ML&SERVICE=WMS&",
8085
+ id: "harmonieML"
8086
+ },
8087
+ {
8088
+ name: "KNMIgeoservicesObs",
8089
+ url: "https://geoservices.knmi.nl/adagucserver?dataset=OBS&service=WMS&",
8090
+ id: "KNMIgeoservicesObs"
8091
+ },
8092
+ {
8093
+ name: "DWD",
8094
+ url: "https://maps.dwd.de/geoserver/ows?",
8095
+ id: "dwd"
8096
+ }
8097
+ ],
8098
+ baseServices: [
8099
+ {
8100
+ name: "KNMIgeoservicesBaselayers",
8101
+ url: "https://geoservices.knmi.nl/wms?DATASET=baselayers&",
8102
+ id: "KNMIgeoservicesBaselayers"
8103
+ },
8104
+ {
8105
+ name: "DWD",
8106
+ url: "https://maps.dwd.de/geoserver/ows?",
8107
+ id: "dwd"
8108
+ }
8109
+ ],
8110
+ layers: [
8111
+ {
8112
+ id: "layerid_2",
8113
+ name: "WorldMap_Light_Grey_Canvas",
8114
+ type: "twms",
8115
+ layerType: "baseLayer"
8116
+ },
8117
+ {
8118
+ service: "https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/",
8119
+ id: "layerid_3",
8120
+ name: "arcGisCanvas",
8121
+ type: "twms",
8122
+ enabled: "true",
8123
+ layerType: "baseLayer"
8124
+ },
8125
+ {
8126
+ id: "base-layer-2",
8127
+ name: "OpenStreetMap_NL",
8128
+ type: "twms",
8129
+ layerType: "baseLayer",
8130
+ enabled: "true"
8131
+ },
8132
+ {
8133
+ service: "https://maps.heigit.org/osm-wms/service",
8134
+ id: "layerid_5",
8135
+ name: "osm_auto:all",
8136
+ layerType: "baseLayer"
8137
+ }
8138
+ ]
8139
+ };
8140
+ var initialPreset = {
8141
+ preset: preset
7798
8142
  };
7799
8143
 
7800
- var publicServices = /*#__PURE__*/Object.freeze({
8144
+ /* *
8145
+ * Licensed under the Apache License, Version 2.0 (the "License");
8146
+ * you may not use this file except in compliance with the License.
8147
+ * You may obtain a copy of the License at
8148
+ *
8149
+ * http://www.apache.org/licenses/LICENSE-2.0
8150
+ *
8151
+ * Unless required by applicable law or agreed to in writing, software
8152
+ * distributed under the License is distributed on an "AS IS" BASIS,
8153
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8154
+ * See the License for the specific language governing permissions and
8155
+ * limitations under the License.
8156
+ *
8157
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
8158
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
8159
+ * */
8160
+
8161
+ var _a$1 = filterMapPresets(initialPreset),
8162
+ services = _a$1.services,
8163
+ baseServices = _a$1.baseServices,
8164
+ baseLayers = _a$1.baseLayers;
8165
+
8166
+ var availableDefaultBaseLayers = baseLayers;
8167
+ var preloadedDefaultBaseServices = baseServices;
8168
+ var preloadedDefaultMapServices = services;
8169
+
8170
+ var defaultConfigurations = /*#__PURE__*/Object.freeze({
7801
8171
  __proto__: null,
7802
- DWD: DWD,
7803
- nationaalgeoregister: nationaalgeoregister,
7804
- KNMImsgcpp: KNMImsgcpp,
7805
- HeiGit: HeiGit,
7806
- ArcGisCanvas: ArcGisCanvas,
7807
- KNMIgeoservicesBaselayers: KNMIgeoservicesBaselayers,
7808
- KNMIgeoservicesRadar: KNMIgeoservicesRadar,
7809
- KNMIgeoservicesObs: KNMIgeoservicesObs,
7810
- KNMIgeoservicesKlimaatAtlas: KNMIgeoservicesKlimaatAtlas,
7811
- KNMIgeoservicesHarmonie: KNMIgeoservicesHarmonie,
7812
- KNMIgeoservicesHarmonieMLService: KNMIgeoservicesHarmonieMLService,
7813
- MetNorwayService: MetNorwayService,
7814
- FMIopenwms: FMIopenwms,
7815
- DWDObservations: DWDObservations,
7816
- DWDWarnings: DWDWarnings,
7817
- DWDWXProdukt: DWDWXProdukt,
7818
- EUMETSAT: EUMETSAT,
7819
- eumetviewEUMETSAT: eumetviewEUMETSAT,
7820
- ECMWFPublicService: ECMWFPublicService,
7821
- MeteoCanada: MeteoCanada
8172
+ availableDefaultBaseLayers: availableDefaultBaseLayers,
8173
+ preloadedDefaultBaseServices: preloadedDefaultBaseServices,
8174
+ preloadedDefaultMapServices: preloadedDefaultMapServices
7822
8175
  });
7823
8176
 
7824
8177
  /* *
@@ -7837,468 +8190,43 @@
7837
8190
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7838
8191
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
7839
8192
  * */
7840
- var baseLayer$1 = {
7841
- name: 'arcGisSat',
7842
- title: 'arcGisSat',
7843
- type: 'twms',
7844
- layerType: LayerType.baseLayer,
7845
- enabled: true,
7846
- id: generateLayerId()
7847
- }; // Base Layers List
8193
+ var useStyles$H = makeStyles__default["default"]({
8194
+ buttonDiv: {
8195
+ position: 'relative'
8196
+ },
8197
+ loadingButton: {
8198
+ position: 'absolute',
8199
+ top: 7,
8200
+ left: 7,
8201
+ zIndex: 1
8202
+ },
8203
+ button: {
8204
+ width: '24px',
8205
+ height: '24px',
8206
+ margin: '6px 0px 0px 10px'
8207
+ }
8208
+ });
7848
8209
 
7849
- var baseLayerGrey$1 = {
7850
- id: generateLayerId(),
7851
- name: 'WorldMap_Light_Grey_Canvas',
7852
- type: 'twms',
7853
- layerType: LayerType.baseLayer
7854
- };
7855
- var baseLayerOpenStreetMapNL$1 = {
7856
- id: 'base-layer-2',
7857
- name: 'OpenStreetMap_NL',
7858
- type: 'twms',
7859
- layerType: LayerType.baseLayer,
7860
- enabled: true
7861
- };
7862
- var baseLayerArcGisCanvas$1 = {
7863
- service: ArcGisCanvas.url,
7864
- id: generateLayerId(),
7865
- name: 'arcGisCanvas',
7866
- type: 'twms',
7867
- enabled: true,
7868
- layerType: LayerType.baseLayer
7869
- };
7870
- var baseLayerWorldMap$1 = {
7871
- id: generateLayerId(),
7872
- name: 'WorldMap',
7873
- type: 'twms',
7874
- layerType: LayerType.baseLayer,
7875
- enabled: true
8210
+ var validateServiceUrl = function validateServiceUrl(url) {
8211
+ if (url === '' || url === null || typeof url === 'undefined') return false;
8212
+ var matcher = /^(?:\w+:)?\/\/([^\s.]+\.\S{2}|[0-9a-zA-Z]+[:?\d]*)\S*$/;
8213
+ if (!matcher.test(url)) return false;
8214
+ return true;
7876
8215
  };
7877
- var baseLayerHeiGit = {
7878
- service: HeiGit.url,
7879
- id: generateLayerId(),
7880
- name: 'osm_auto:all',
7881
- layerType: LayerType.baseLayer
7882
- }; // Over Layers List
7883
8216
 
7884
- var overLayer$1 = {
7885
- service: KNMIgeoservicesBaselayers.url,
7886
- name: 'countryborders',
7887
- format: 'image/png',
7888
- enabled: true,
7889
- id: generateLayerId(),
7890
- layerType: LayerType.overLayer
7891
- }; // KNMI msgcpp List
7892
-
7893
- var msgCppLayer = {
7894
- // doesn't work with https
7895
- service: KNMImsgcpp.url,
7896
- name: 'lwe_precipitation_rate',
7897
- format: 'image/png',
7898
- enabled: true,
7899
- style: 'precip-transparent/nearest',
7900
- id: generateLayerId(),
7901
- layerType: LayerType.mapLayer
7902
- }; // Nederlandse Nationaal Georegister Layers list
7903
-
7904
- var veiligheidsRegiosGebiedsIndelingenLabels = {
7905
- service: nationaalgeoregister.url,
7906
- name: 'cbsgebiedsindelingen:cbs_veiligheidsregio_2020_labelpoint',
7907
- style: 'CBS_Label',
7908
- enabled: false,
7909
- layerType: LayerType.mapLayer
7910
- };
7911
- var veiligheidsRegiosGebiedsIndelingen = {
7912
- service: nationaalgeoregister.url,
7913
- name: 'cbsgebiedsindelingen:cbs_veiligheidsregio_2020_gegeneraliseerd',
7914
- style: 'CBS_Gebiedsindeling',
7915
- enabled: false,
7916
- layerType: LayerType.mapLayer
7917
- }; // KNMI Geoservices Layers List
7918
-
7919
- var radarLayer$1 = {
7920
- service: KNMIgeoservicesRadar.url,
7921
- name: 'RAD_NL25_PCP_CM',
7922
- format: 'image/png',
7923
- enabled: true,
7924
- style: 'radar/nearest',
7925
- id: generateLayerId(),
7926
- layerType: LayerType.mapLayer
7927
- };
7928
- var radarLayerWithError = {
7929
- service: KNMIgeoservicesRadar.url,
7930
- name: 'radarLayer',
7931
- format: 'image/png',
7932
- enabled: true,
7933
- style: 'knmiradar/nearest',
7934
- id: generateLayerId(),
7935
- layerType: LayerType.mapLayer
7936
- };
7937
- var obsAirTemperature = {
7938
- service: KNMIgeoservicesObs.url,
7939
- name: '10M/ta',
7940
- id: generateLayerId(),
7941
- layerType: LayerType.mapLayer
7942
- };
7943
- var obsWind = {
7944
- service: KNMIgeoservicesObs.url,
7945
- name: '10M/wind',
7946
- id: generateLayerId(),
7947
- layerType: LayerType.mapLayer
7948
- };
7949
- var obsAirPressureAtSeaLevel = {
7950
- service: KNMIgeoservicesObs.url,
7951
- name: '10M/pp',
7952
- id: generateLayerId(),
7953
- layerType: LayerType.mapLayer
7954
- };
7955
- var obsRelativeHumidity = {
7956
- service: KNMIgeoservicesObs.url,
7957
- name: '10M/rh',
7958
- id: generateLayerId(),
7959
- layerType: LayerType.mapLayer
7960
- };
7961
- var obsGlobalSolarRadiation = {
7962
- service: KNMIgeoservicesObs.url,
7963
- name: '10M/qg',
7964
- id: generateLayerId(),
7965
- layerType: LayerType.mapLayer
7966
- };
7967
- var obsPrecipitationIntensityPWS = {
7968
- service: KNMIgeoservicesObs.url,
7969
- name: '10M/pg',
7970
- id: generateLayerId(),
7971
- layerType: LayerType.mapLayer
7972
- };
7973
- var harmonieRelativeHumidityPl = {
7974
- service: KNMIgeoservicesHarmonie.url,
7975
- name: 'relative_humidity__at_pl',
7976
- id: generateLayerId(),
7977
- layerType: LayerType.mapLayer,
7978
- enabled: true
7979
- };
7980
- var harmonieWindPl = {
7981
- service: KNMIgeoservicesHarmonie.url,
7982
- name: 'wind__at_pl',
7983
- id: generateLayerId(),
7984
- layerType: LayerType.mapLayer,
7985
- enabled: true
7986
- };
7987
- var harmonieAirTemperature = {
7988
- service: KNMIgeoservicesHarmonie.url,
7989
- name: 'air_temperature__at_2m',
7990
- id: generateLayerId(),
7991
- layerType: LayerType.mapLayer,
7992
- enabled: true
7993
- };
7994
- var harmoniePrecipitation = {
7995
- service: KNMIgeoservicesHarmonie.url,
7996
- name: 'precipitation_flux',
7997
- id: generateLayerId(),
7998
- layerType: LayerType.mapLayer,
7999
- enabled: true
8000
- };
8001
- var harmoniePressure = {
8002
- service: KNMIgeoservicesHarmonie.url,
8003
- name: 'air_pressure_at_sea_level',
8004
- id: generateLayerId(),
8005
- layerType: LayerType.mapLayer,
8006
- enabled: true
8007
- };
8008
- var harmonieWindFlags = {
8009
- service: KNMIgeoservicesHarmonie.url,
8010
- name: 'wind__at_10m',
8011
- enabled: true,
8012
- id: generateLayerId(),
8013
- layerType: LayerType.mapLayer
8014
- };
8015
- var klimaatAtlasTG3 = {
8016
- service: KNMIgeoservicesKlimaatAtlas.url,
8017
- name: 'TG3',
8018
- enabled: true,
8019
- id: generateLayerId(),
8020
- layerType: LayerType.mapLayer
8021
- }; // DWD Layers List
8022
-
8023
- var dwdWarningLayer = {
8024
- service: DWDWarnings.url,
8025
- name: 'Warnungen_Gemeinden_vereinigt',
8026
- format: 'image/png',
8027
- // style: 'warnungen_gemeinden_vereinigt_event_seamless_param',
8028
- enabled: true,
8029
- id: generateLayerId(),
8030
- layerType: LayerType.mapLayer
8031
- };
8032
- var dwdRadarLayer = {
8033
- service: DWDWXProdukt.url,
8034
- name: 'WX-Produkt',
8035
- format: 'image/png',
8036
- enabled: true,
8037
- id: generateLayerId(),
8038
- layerType: LayerType.mapLayer
8039
- }; // this needs authentication to work
8040
-
8041
- var dwdObservationsWetterLayer = {
8042
- service: DWDObservations.url,
8043
- name: 'Wetter_Beobachtungen',
8044
- style: 'Wetter_Symbole',
8045
- format: 'image/png',
8046
- enabled: true,
8047
- id: generateLayerId(),
8048
- layerType: LayerType.mapLayer // headers: [{ name: 'Authorization', value: 'Basic ...' }]
8049
-
8050
- };
8051
- var dwdObservationsWetterLayerWithHeader = {
8052
- service: DWDObservations.url,
8053
- name: 'Wetter_Beobachtungen',
8054
- style: 'Wetter_Symbole',
8055
- format: 'image/png',
8056
- enabled: true,
8057
- id: generateLayerId(),
8058
- layerType: LayerType.mapLayer,
8059
- headers: [{
8060
- name: 'authorization',
8061
- value: 'Basic aW50cmFuZXQtdXNlcjpDQnMjMTEh'
8062
- }]
8063
- }; // this needs authentication to work
8064
-
8065
- var dwdObservationsWindLayer = {
8066
- service: DWDObservations.url,
8067
- name: 'Wetter_Beobachtungen',
8068
- style: 'Wetter_Wind',
8069
- format: 'image/png',
8070
- enabled: true,
8071
- id: generateLayerId(),
8072
- layerType: LayerType.mapLayer
8073
- }; // FMI open wms Layers List
8074
-
8075
- var FMITemp = {
8076
- service: FMIopenwms.url,
8077
- name: 'temperature-forecast',
8078
- format: 'image/png',
8079
- enabled: true,
8080
- id: generateLayerId(),
8081
- layerType: LayerType.mapLayer
8082
- }; // Met Norway Layers List
8083
-
8084
- var MetNoTemp = {
8085
- service: MetNorwayService.url,
8086
- name: 'thredds_meps_latest_wind',
8087
- format: 'image/png',
8088
- enabled: true,
8089
- id: generateLayerId(),
8090
- layerType: LayerType.mapLayer
8091
- };
8092
- var metNorwayWind1 = {
8093
- service: MetNorwayService.url,
8094
- name: 'thredds_meps_latest_wind',
8095
- format: 'image/png',
8096
- enabled: true,
8097
- id: generateLayerId(),
8098
- layerType: LayerType.mapLayer
8099
- };
8100
- var metNorwayWind2 = {
8101
- service: MetNorwayService.url,
8102
- name: 'thredds_aromearctic_extracted_t',
8103
- format: 'image/png',
8104
- enabled: true,
8105
- id: generateLayerId(),
8106
- layerType: LayerType.mapLayer
8107
- };
8108
- var metNorwayWind3 = {
8109
- service: MetNorwayService.url,
8110
- name: 'thredds_nk800_temperature',
8111
- format: 'image/png',
8112
- enabled: true,
8113
- id: generateLayerId(),
8114
- layerType: LayerType.mapLayer
8115
- };
8116
- var metNorwayLatestT = {
8117
- service: MetNorwayService.url,
8118
- name: 'thredds_meps_latest_t',
8119
- format: 'image/png',
8120
- enabled: true,
8121
- id: generateLayerId(),
8122
- layerType: LayerType.mapLayer
8123
- };
8124
- var metNorwaySalinaty = {
8125
- service: MetNorwayService.url,
8126
- name: 'thredds_barents_2_5km_1h_salinity',
8127
- format: 'image/png',
8128
- enabled: true,
8129
- id: generateLayerId(),
8130
- layerType: LayerType.mapLayer
8131
- };
8132
- var msgFesEUMETSAT = {
8133
- service: EUMETSAT.url,
8134
- name: 'msg_fes:rgb_eview',
8135
- enabled: true,
8136
- id: generateLayerId(),
8137
- layerType: LayerType.mapLayer
8138
- };
8139
- var msgNaturalenhncdEUMETSAT = {
8140
- service: eumetviewEUMETSAT.url,
8141
- name: 'meteosat:msg_naturalenhncd',
8142
- enabled: true,
8143
- id: generateLayerId(),
8144
- layerType: LayerType.mapLayer
8145
- };
8146
- var msgAshEUMETSAT = {
8147
- service: eumetviewEUMETSAT.url,
8148
- name: 'meteosat:msg_ash',
8149
- enabled: true,
8150
- id: generateLayerId(),
8151
- layerType: LayerType.mapLayer
8152
- };
8153
- var msgCthEUMETSAT = {
8154
- service: eumetviewEUMETSAT.url,
8155
- name: 'meteosat:msg_cth',
8156
- enabled: true,
8157
- id: generateLayerId(),
8158
- layerType: LayerType.mapLayer
8159
- };
8160
- var msgFogEUMETSAT = {
8161
- service: eumetviewEUMETSAT.url,
8162
- name: 'meteosat:msg_fog',
8163
- enabled: true,
8164
- id: generateLayerId(),
8165
- layerType: LayerType.mapLayer
8166
- };
8167
- var msgNaturalEUMETSAT = {
8168
- service: eumetviewEUMETSAT.url,
8169
- name: 'meteosat:msg_natural',
8170
- enabled: true,
8171
- id: generateLayerId(),
8172
- layerType: LayerType.mapLayer
8173
- };
8174
-
8175
- var publicLayers = /*#__PURE__*/Object.freeze({
8176
- __proto__: null,
8177
- baseLayer: baseLayer$1,
8178
- baseLayerGrey: baseLayerGrey$1,
8179
- baseLayerOpenStreetMapNL: baseLayerOpenStreetMapNL$1,
8180
- baseLayerArcGisCanvas: baseLayerArcGisCanvas$1,
8181
- baseLayerWorldMap: baseLayerWorldMap$1,
8182
- baseLayerHeiGit: baseLayerHeiGit,
8183
- overLayer: overLayer$1,
8184
- msgCppLayer: msgCppLayer,
8185
- veiligheidsRegiosGebiedsIndelingenLabels: veiligheidsRegiosGebiedsIndelingenLabels,
8186
- veiligheidsRegiosGebiedsIndelingen: veiligheidsRegiosGebiedsIndelingen,
8187
- radarLayer: radarLayer$1,
8188
- radarLayerWithError: radarLayerWithError,
8189
- obsAirTemperature: obsAirTemperature,
8190
- obsWind: obsWind,
8191
- obsAirPressureAtSeaLevel: obsAirPressureAtSeaLevel,
8192
- obsRelativeHumidity: obsRelativeHumidity,
8193
- obsGlobalSolarRadiation: obsGlobalSolarRadiation,
8194
- obsPrecipitationIntensityPWS: obsPrecipitationIntensityPWS,
8195
- harmonieRelativeHumidityPl: harmonieRelativeHumidityPl,
8196
- harmonieWindPl: harmonieWindPl,
8197
- harmonieAirTemperature: harmonieAirTemperature,
8198
- harmoniePrecipitation: harmoniePrecipitation,
8199
- harmoniePressure: harmoniePressure,
8200
- harmonieWindFlags: harmonieWindFlags,
8201
- klimaatAtlasTG3: klimaatAtlasTG3,
8202
- dwdWarningLayer: dwdWarningLayer,
8203
- dwdRadarLayer: dwdRadarLayer,
8204
- dwdObservationsWetterLayer: dwdObservationsWetterLayer,
8205
- dwdObservationsWetterLayerWithHeader: dwdObservationsWetterLayerWithHeader,
8206
- dwdObservationsWindLayer: dwdObservationsWindLayer,
8207
- FMITemp: FMITemp,
8208
- MetNoTemp: MetNoTemp,
8209
- metNorwayWind1: metNorwayWind1,
8210
- metNorwayWind2: metNorwayWind2,
8211
- metNorwayWind3: metNorwayWind3,
8212
- metNorwayLatestT: metNorwayLatestT,
8213
- metNorwaySalinaty: metNorwaySalinaty,
8214
- msgFesEUMETSAT: msgFesEUMETSAT,
8215
- msgNaturalenhncdEUMETSAT: msgNaturalenhncdEUMETSAT,
8216
- msgAshEUMETSAT: msgAshEUMETSAT,
8217
- msgCthEUMETSAT: msgCthEUMETSAT,
8218
- msgFogEUMETSAT: msgFogEUMETSAT,
8219
- msgNaturalEUMETSAT: msgNaturalEUMETSAT
8220
- });
8221
-
8222
- /* *
8223
- * Licensed under the Apache License, Version 2.0 (the "License");
8224
- * you may not use this file except in compliance with the License.
8225
- * You may obtain a copy of the License at
8226
- *
8227
- * http://www.apache.org/licenses/LICENSE-2.0
8228
- *
8229
- * Unless required by applicable law or agreed to in writing, software
8230
- * distributed under the License is distributed on an "AS IS" BASIS,
8231
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8232
- * See the License for the specific language governing permissions and
8233
- * limitations under the License.
8234
- *
8235
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
8236
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
8237
- * */
8238
- var availableDefaultBaseLayers = [baseLayerGrey$1, baseLayerArcGisCanvas$1, baseLayerOpenStreetMapNL$1, baseLayerHeiGit];
8239
- var preloadedDefaultBaseServices = [KNMIgeoservicesBaselayers, DWD];
8240
- var preloadedDefaultMapServices = [KNMIgeoservicesRadar, MetNorwayService, FMIopenwms, ECMWFPublicService, KNMIgeoservicesHarmonie, KNMIgeoservicesHarmonieMLService, KNMIgeoservicesObs, DWD];
8241
-
8242
- var defaultConfigurations = /*#__PURE__*/Object.freeze({
8243
- __proto__: null,
8244
- availableDefaultBaseLayers: availableDefaultBaseLayers,
8245
- preloadedDefaultBaseServices: preloadedDefaultBaseServices,
8246
- preloadedDefaultMapServices: preloadedDefaultMapServices
8247
- });
8248
-
8249
- /* *
8250
- * Licensed under the Apache License, Version 2.0 (the "License");
8251
- * you may not use this file except in compliance with the License.
8252
- * You may obtain a copy of the License at
8253
- *
8254
- * http://www.apache.org/licenses/LICENSE-2.0
8255
- *
8256
- * Unless required by applicable law or agreed to in writing, software
8257
- * distributed under the License is distributed on an "AS IS" BASIS,
8258
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8259
- * See the License for the specific language governing permissions and
8260
- * limitations under the License.
8261
- *
8262
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
8263
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
8264
- * */
8265
- var useStyles$H = makeStyles__default["default"]({
8266
- buttonDiv: {
8267
- position: 'relative'
8268
- },
8269
- loadingButton: {
8270
- position: 'absolute',
8271
- top: 7,
8272
- left: 7,
8273
- zIndex: 1
8274
- },
8275
- button: {
8276
- width: '24px',
8277
- height: '24px',
8278
- margin: '6px 0px 0px 10px'
8279
- }
8280
- });
8281
-
8282
- var validateServiceUrl = function validateServiceUrl(url) {
8283
- if (url === '' || url === null || typeof url === 'undefined') return false;
8284
- var matcher = /^(?:\w+:)?\/\/([^\s.]+\.\S{2}|[0-9a-zA-Z]+[:?\d]*)\S*$/;
8285
- if (!matcher.test(url)) return false;
8286
- return true;
8287
- };
8288
-
8289
- var AddLayersPopup = function AddLayersPopup(_a) {
8290
- var onClickService = _a.onClickService,
8291
- onRenderTree = _a.onRenderTree,
8292
- _b = _a.highlightedLayers,
8293
- highlightedLayers = _b === void 0 ? [] : _b,
8294
- _c = _a.preloadedServices,
8295
- preloadedServices = _c === void 0 ? preloadedDefaultMapServices : _c,
8296
- _d = _a.open,
8297
- open = _d === void 0 ? false : _d,
8298
- handleClose = _a.handleClose,
8299
- _e = _a.layerType,
8300
- layerType = _e === void 0 ? LayerType.mapLayer : _e;
8301
- var classes = useStyles$H();
8217
+ var AddLayersPopup = function AddLayersPopup(_a) {
8218
+ var onClickService = _a.onClickService,
8219
+ onRenderTree = _a.onRenderTree,
8220
+ _b = _a.highlightedLayers,
8221
+ highlightedLayers = _b === void 0 ? [] : _b,
8222
+ _c = _a.preloadedServices,
8223
+ preloadedServices = _c === void 0 ? preloadedDefaultMapServices : _c,
8224
+ _d = _a.open,
8225
+ open = _d === void 0 ? false : _d,
8226
+ handleClose = _a.handleClose,
8227
+ _e = _a.layerType,
8228
+ layerType = _e === void 0 ? LayerType.mapLayer : _e;
8229
+ var classes = useStyles$H();
8302
8230
 
8303
8231
  var _f = __read(React__namespace.useState(''), 2),
8304
8232
  serviceURL = _f[0],
@@ -9007,12 +8935,12 @@
9007
8935
  },
9008
8936
  backgroundColor: function backgroundColor(_a) {
9009
8937
  var isActive = _a.isActive;
9010
- return isActive ? theme.palette.geowebColors.buttons.primaryActive.fill : 'inherit';
8938
+ return isActive ? theme.palette.geowebColors.buttons.primary.active.fill : 'inherit';
9011
8939
  },
9012
8940
  '&:focus': {
9013
8941
  backgroundColor: function backgroundColor(_a) {
9014
8942
  var isActive = _a.isActive;
9015
- return isActive ? theme.palette.geowebColors.buttons.primaryMouseover.fill : theme.palette.geowebColors.layerManager.tableRowMouseover.rgba;
8943
+ return isActive ? theme.palette.geowebColors.buttons.primary.mouseOver.fill : theme.palette.geowebColors.layerManager.tableRowMouseover.rgba;
9016
8944
  },
9017
8945
  outline: theme.palette.geowebColors.buttons.focusDefault.outline,
9018
8946
  borderRadius: 0
@@ -9020,7 +8948,7 @@
9020
8948
  '&:hover': {
9021
8949
  backgroundColor: function backgroundColor(_a) {
9022
8950
  var isActive = _a.isActive;
9023
- return isActive ? theme.palette.geowebColors.buttons.primaryMouseover.fill : theme.palette.geowebColors.layerManager.tableRowMouseover.rgba;
8951
+ return isActive ? theme.palette.geowebColors.buttons.primary.mouseOver.fill : theme.palette.geowebColors.layerManager.tableRowMouseover.rgba;
9024
8952
  }
9025
8953
  }
9026
8954
  },
@@ -10886,63 +10814,61 @@
10886
10814
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10887
10815
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
10888
10816
  * */
10889
- var useButtonStyles = makeStyles__default["default"](function (theme) {
10890
- return createStyles__default["default"]({
10891
- button: {
10892
- height: '24px',
10893
- width: function width(_a) {
10894
- var width = _a.width;
10895
- return width ? width + "px" : '24px';
10896
- },
10897
- border: 0,
10898
- backgroundColor: theme.palette.geowebColors.buttons.surfaceIconDefault.fill,
10899
- borderRadius: '4.5px',
10900
- textTransform: 'none',
10901
- '& svg path, svg text': {
10902
- fill: theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat
10903
- },
10904
- '&:hover': {
10905
- backgroundColor: theme.palette.geowebColors.buttons.flatMouseover.fill
10906
- },
10907
- '&:disabled': {
10908
- backgroundColor: theme.palette.geowebColors.buttons.disabled.fill,
10909
- '& svg path, svg text': {
10910
- fill: theme.palette.geowebColors.typographyAndIcons.iconLinkDisabled
10911
- },
10912
- border: "1px solid " + theme.palette.geowebColors.buttons.disabled.fill
10913
- },
10914
- '&.Mui-selected': {
10915
- backgroundColor: theme.palette.geowebColors.buttons.primaryActive.fill,
10916
- '&:hover': {
10917
- backgroundColor: theme.palette.geowebColors.buttons.primaryMouseover.fill
10918
- },
10919
- '& svg': {
10920
- backgroundColor: 'transparent'
10921
- },
10922
- '& svg path, svg text': {
10923
- fill: theme.palette.geowebColors.typographyAndIcons.buttonIcon
10924
- }
10925
- }
10926
- }
10927
- });
10928
- });
10929
10817
 
10930
- var ToggleIconButton = function ToggleIconButton(_a) {
10818
+ var CustomToggleButton = function CustomToggleButton(_a) {
10819
+ var _b = _a.variant,
10820
+ variant = _b === void 0 ? 'primary' : _b,
10821
+ _c = _a.value,
10822
+ value = _c === void 0 ? 0 : _c,
10823
+ props = __rest(_a, ["variant", "value"]);
10824
+
10825
+ return /*#__PURE__*/React__namespace.createElement(material.ToggleButton, __assign({
10826
+ className: variant,
10827
+ value: value
10828
+ }, props));
10829
+ };
10830
+
10831
+ /* *
10832
+ * Licensed under the Apache License, Version 2.0 (the "License");
10833
+ * you may not use this file except in compliance with the License.
10834
+ * You may obtain a copy of the License at
10835
+ *
10836
+ * http://www.apache.org/licenses/LICENSE-2.0
10837
+ *
10838
+ * Unless required by applicable law or agreed to in writing, software
10839
+ * distributed under the License is distributed on an "AS IS" BASIS,
10840
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10841
+ * See the License for the specific language governing permissions and
10842
+ * limitations under the License.
10843
+ *
10844
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10845
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
10846
+ * */
10847
+
10848
+ var ToolButton = function ToolButton(_a) {
10931
10849
  var active = _a.active,
10932
- width = _a.width,
10850
+ _b = _a.width,
10851
+ width = _b === void 0 ? '24px' : _b,
10852
+ _c = _a.height,
10853
+ height = _c === void 0 ? '24px' : _c,
10933
10854
  children = _a.children,
10934
- _b = _a.value,
10935
- value = _b === void 0 ? 0 : _b,
10936
- props = __rest(_a, ["active", "width", "children", "value"]);
10937
-
10938
- var classes = useButtonStyles({
10939
- width: width
10940
- });
10941
- return /*#__PURE__*/React__namespace.createElement(material.ToggleButton, __assign({
10942
- className: classes.button,
10855
+ _d = _a.value,
10856
+ value = _d === void 0 ? 0 : _d,
10857
+ _e = _a.sx,
10858
+ sx = _e === void 0 ? {} : _e,
10859
+ props = __rest(_a, ["active", "width", "height", "children", "value", "sx"]);
10860
+
10861
+ return /*#__PURE__*/React__namespace.createElement(CustomToggleButton, __assign({
10862
+ variant: "tool",
10943
10863
  disableRipple: true,
10944
10864
  selected: active,
10945
- value: value
10865
+ value: value,
10866
+ sx: __assign({
10867
+ width: width + "!important",
10868
+ height: height + "!important",
10869
+ textTransform: 'none!important',
10870
+ padding: '11px!important'
10871
+ }, sx)
10946
10872
  }, props), children);
10947
10873
  };
10948
10874
 
@@ -10982,18 +10908,18 @@
10982
10908
  source: source
10983
10909
  }));
10984
10910
  }, [currentActiveMapId, dispatch, isOpenInStore, mapId, source]);
10985
- return /*#__PURE__*/React__namespace.createElement(ToggleIconButton, {
10911
+ return /*#__PURE__*/React__namespace.createElement(ToolButton, {
10986
10912
  onClick: openFilterResultsDialog,
10987
10913
  active: isOpenInStore,
10988
10914
  id: "keywordFilterButton",
10989
10915
  "data-testid": "keywordFilterButton",
10990
- disableRipple: true
10916
+ disableRipple: true,
10917
+ variant: "tool"
10991
10918
  }, /*#__PURE__*/React__namespace.createElement(material.SvgIcon, {
10992
10919
  viewBox: "0 0 24 24",
10993
10920
  xmlns: "http://www.w3.org/2000/svg"
10994
10921
  }, /*#__PURE__*/React__namespace.createElement("g", null, /*#__PURE__*/React__namespace.createElement("path", {
10995
10922
  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",
10996
- fill: "#FFF",
10997
10923
  fillRule: "evenodd"
10998
10924
  }))));
10999
10925
  };
@@ -11035,14 +10961,14 @@
11035
10961
  *
11036
10962
  * Example getActiveServices(store);
11037
10963
  * @param {object} store store: object - store object
11038
- * @returns {array} returnType: array of active services
10964
+ * @returns {object} returnType: object of active services
11039
10965
  */
11040
10966
 
11041
10967
  var getActiveServices = reselect.createSelector(layerSelectStore, function (store) {
11042
10968
  var _a;
11043
10969
 
11044
10970
  return store ? (_a = store === null || store === void 0 ? void 0 : store.filters) === null || _a === void 0 ? void 0 : _a.activeServices.byId : {};
11045
- });
10971
+ }, selectorMemoizationOptions);
11046
10972
  /**
11047
10973
  * Returns all ids of enabled services
11048
10974
  *
@@ -11064,18 +10990,73 @@
11064
10990
 
11065
10991
  return (_a = store === null || store === void 0 ? void 0 : store.filters) === null || _a === void 0 ? void 0 : _a.activeServices.byId[service].id;
11066
10992
  });
11067
- });
10993
+ }, selectorMemoizationOptions);
10994
+ /**
10995
+ * Returns all ids of checked keywords
10996
+ *
10997
+ * Example getCheckedKeywordIds(store);
10998
+ * @param {object} store store: object - store object
10999
+ * @returns {array} returnType: array of keyword ids that are checked
11000
+ */
11001
+
11002
+ var getCheckedKeywordIds = reselect.createSelector(layerSelectStore, function (store) {
11003
+ var _a, _b;
11004
+
11005
+ 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) {
11006
+ var _a;
11007
+
11008
+ return (_a = store === null || store === void 0 ? void 0 : store.filters) === null || _a === void 0 ? void 0 : _a.keywords.byId[keyword].checked;
11009
+ })) !== null && _b !== void 0 ? _b : [];
11010
+ return checkedKeywords.map(function (keyword) {
11011
+ var _a;
11012
+
11013
+ return (_a = store === null || store === void 0 ? void 0 : store.filters) === null || _a === void 0 ? void 0 : _a.keywords.byId[keyword].id;
11014
+ });
11015
+ }, selectorMemoizationOptions);
11016
+ /**
11017
+ * Returns ids of all keywords
11018
+ *
11019
+ * Example getAllKeywordIds(store);
11020
+ * @param {object} store store: object - store object
11021
+ * @returns {array} returnType: array of all keyword ids
11022
+ */
11023
+
11024
+ var getAllKeywordIds = reselect.createSelector(layerSelectStore, function (store) {
11025
+ var _a, _b;
11026
+
11027
+ 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 : [];
11028
+ }, selectorMemoizationOptions);
11068
11029
  /**
11069
- * Returns all keywords
11030
+ * Returns if all keywords are checked
11070
11031
  *
11071
- * Example getKeywords(store);
11032
+ * Example isAllKeywordsChecked(store);
11072
11033
  * @param {object} store store: object - store object
11073
- * @returns {array} returnType: array of keyword objects
11034
+ * @returns {array} returnType: boolean if all keywords are checked
11074
11035
  */
11075
11036
 
11076
- var getKeywords = reselect.createSelector(layerSelectStore, function (store) {
11077
- return store ? store.filters.keywords : [];
11037
+ var isAllKeywordsChecked = reselect.createSelector(layerSelectStore, function (store) {
11038
+ var _a, _b;
11039
+
11040
+ 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) {
11041
+ var _a, _b;
11042
+
11043
+ 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;
11044
+ });
11078
11045
  });
11046
+ /**
11047
+ * Gets a KeywordObject by its id
11048
+ *
11049
+ * Example: keywordObject = getKeywordObjectById(store, 'keywordId')
11050
+ * @param {object} store object from which the keyword state will be extracted
11051
+ * @param {string} keywordId Id of the keyword
11052
+ * @returns {object} object containing keyword information (id, amount, amountVisible, checked)
11053
+ */
11054
+
11055
+ var getKeywordObjectById = function getKeywordObjectById(store, keywordId) {
11056
+ var _a, _b, _c, _d;
11057
+
11058
+ 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 : {};
11059
+ };
11079
11060
 
11080
11061
  /* *
11081
11062
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -11093,7 +11074,7 @@
11093
11074
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11094
11075
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
11095
11076
  * */
11096
- var style = {
11077
+ var style$1 = {
11097
11078
  dialogTitle: {
11098
11079
  display: 'flex',
11099
11080
  justifyContent: 'space-between',
@@ -11144,68 +11125,347 @@
11144
11125
  };
11145
11126
 
11146
11127
  var ServicePopup = function ServicePopup(_a) {
11128
+ var _b, _c;
11129
+
11147
11130
  var servicePopupVariant = _a.servicePopupVariant,
11148
- _b = _a.hideBackdrop,
11149
- hideBackdrop = _b === void 0 ? false : _b,
11131
+ _d = _a.hideBackdrop,
11132
+ hideBackdrop = _d === void 0 ? false : _d,
11150
11133
  isOpen = _a.isOpen,
11151
11134
  closePopup = _a.closePopup,
11152
- _c = _a.url,
11153
- url = _c === void 0 ? '' : _c;
11135
+ url = _a.url,
11136
+ services = _a.services,
11137
+ serviceSetLayers = _a.serviceSetLayers;
11138
+
11139
+ var _e = __read(React__namespace.useState(servicePopupVariant !== 'edit' || services === undefined ? '' : (_b = services[url]) === null || _b === void 0 ? void 0 : _b.name), 2),
11140
+ serviceName = _e[0],
11141
+ setServiceName = _e[1];
11142
+
11143
+ var _f = __read(React__namespace.useState(servicePopupVariant === 'add' || url === undefined ? '' : url), 2),
11144
+ serviceUrl = _f[0],
11145
+ setServiceUrl = _f[1];
11146
+
11147
+ var _g = __read(React__namespace.useState(servicePopupVariant !== 'edit' || services === undefined ? '' : (_c = services[url]) === null || _c === void 0 ? void 0 : _c["abstract"]), 2),
11148
+ _abstract = _g[0],
11149
+ setAbstract = _g[1];
11150
+
11151
+ var _h = __read(React__namespace.useState(false), 2),
11152
+ disableButton = _h[0],
11153
+ setDisableButton = _h[1];
11154
+
11155
+ var _j = __read(React__namespace.useState(false), 2),
11156
+ isLoading = _j[0],
11157
+ setIsLoading = _j[1];
11158
+
11159
+ var _k = __read(React__namespace.useState(false), 2),
11160
+ serviceNameHasError = _k[0],
11161
+ setServiceNameHasError = _k[1];
11162
+
11163
+ var _l = __read(React__namespace.useState(''), 2),
11164
+ serviceNameHelperText = _l[0],
11165
+ setServiceNameHelperText = _l[1];
11166
+
11167
+ var _m = __read(React__namespace.useState(false), 2),
11168
+ serviceUrlHasError = _m[0],
11169
+ setServiceUrlHasError = _m[1];
11170
+
11171
+ var _o = __read(React__namespace.useState(''), 2),
11172
+ serviceUrlHelperText = _o[0],
11173
+ setServiceUrlHelperText = _o[1];
11174
+
11175
+ var validateServiceUrl = function validateServiceUrl(url) {
11176
+ if (url === '' || url === null || typeof url === 'undefined') return false;
11177
+ var matcher = /^(?:\w+:)?\/\/([^\s.]+\.\S{2}|[0-9a-zA-Z]+[:?\d]*)\S*$/;
11178
+ if (!matcher.test(url)) return false;
11179
+ return true;
11180
+ };
11181
+
11182
+ var addNewService = function addNewService() {
11183
+ return __awaiter(void 0, void 0, void 0, function () {
11184
+ var layers, serviceLayers, _a, _b, object;
11185
+
11186
+ var e_1, _c;
11187
+
11188
+ return __generator(this, function (_d) {
11189
+ switch (_d.label) {
11190
+ case 0:
11191
+ setServiceUrlHasError(false);
11192
+ if (!validateServiceUrl(serviceUrl)) return [3
11193
+ /*break*/
11194
+ , 4];
11195
+ setIsLoading(true);
11196
+ _d.label = 1;
11197
+
11198
+ case 1:
11199
+ _d.trys.push([1, 3,, 4]);
11200
+
11201
+ return [4
11202
+ /*yield*/
11203
+ , getLayersFromService(serviceUrl)];
11204
+
11205
+ case 2:
11206
+ layers = _d.sent();
11207
+
11208
+ if (layers.children) {
11209
+ serviceLayers = [];
11210
+
11211
+ try {
11212
+ for (_a = __values(layers.children), _b = _a.next(); !_b.done; _b = _a.next()) {
11213
+ object = _b.value;
11214
+ serviceLayers.push({
11215
+ name: object.name,
11216
+ text: object.title,
11217
+ leaf: object.leaf,
11218
+ path: object.path,
11219
+ keywords: object.keywords ? object.keywords : [],
11220
+ "abstract": object["abstract"] ? object["abstract"] : '',
11221
+ styles: object.styles ? object.styles : []
11222
+ });
11223
+ }
11224
+ } catch (e_1_1) {
11225
+ e_1 = {
11226
+ error: e_1_1
11227
+ };
11228
+ } finally {
11229
+ try {
11230
+ if (_b && !_b.done && (_c = _a["return"])) _c.call(_a);
11231
+ } finally {
11232
+ if (e_1) throw e_1.error;
11233
+ }
11234
+ }
11235
+
11236
+ serviceSetLayers({
11237
+ id: serviceUrl,
11238
+ name: serviceName,
11239
+ service: serviceUrl,
11240
+ layers: serviceLayers
11241
+ });
11242
+ setIsLoading(false);
11243
+ closePopupAndResetState();
11244
+ }
11245
+
11246
+ return [3
11247
+ /*break*/
11248
+ , 4];
11249
+
11250
+ case 3:
11251
+ _d.sent();
11252
+ setIsLoading(false);
11253
+ setServiceUrlHasError(true);
11254
+ setServiceUrlHelperText('Error: Download failed. Check the URL.');
11255
+ return [3
11256
+ /*break*/
11257
+ , 4];
11258
+
11259
+ case 4:
11260
+ return [2
11261
+ /*return*/
11262
+ ];
11263
+ }
11264
+ });
11265
+ });
11266
+ };
11267
+
11268
+ var ServiceNameInRedux = function ServiceNameInRedux() {
11269
+ if (servicePopupVariant === 'add' || servicePopupVariant === 'save') {
11270
+ for (var service in services) {
11271
+ if (services && services[service].name.toLowerCase() === serviceName.toLowerCase()) return true;
11272
+ }
11273
+
11274
+ return false;
11275
+ }
11276
+
11277
+ return false;
11278
+ };
11279
+
11280
+ var UrlInRedux = function UrlInRedux() {
11281
+ if (servicePopupVariant === 'add' || servicePopupVariant === 'save') {
11282
+ if (services && services[serviceUrl]) {
11283
+ return true;
11284
+ }
11285
+
11286
+ return false;
11287
+ }
11288
+
11289
+ return false;
11290
+ }; // Check serviceName
11291
+
11292
+
11293
+ React__namespace.useEffect(function () {
11294
+ setServiceNameHelperText('');
11295
+
11296
+ if (ServiceNameInRedux()) {
11297
+ setServiceNameHasError(true);
11298
+ setServiceNameHelperText('Error: This name already exists. Choose another name.');
11299
+ } else {
11300
+ setServiceNameHasError(false);
11301
+ setServiceNameHelperText('');
11302
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
11303
+
11304
+ }, [serviceName]); // Check Url
11305
+
11306
+ React__namespace.useEffect(function () {
11307
+ setServiceUrlHelperText('');
11308
+
11309
+ if (serviceUrl.length > 0 && !validateServiceUrl(serviceUrl)) {
11310
+ setServiceUrlHasError(true);
11311
+ setServiceUrlHelperText('Error: Not a valid URL.');
11312
+ } else if (UrlInRedux()) {
11313
+ setServiceUrlHasError(true);
11314
+ setServiceUrlHelperText('Error: URL already exists.');
11315
+ } else {
11316
+ setServiceUrlHasError(false);
11317
+ setServiceNameHelperText('');
11318
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
11319
+
11320
+ }, [serviceUrl]); // Check if all fields are valid
11321
+
11322
+ React__namespace.useEffect(function () {
11323
+ if (!serviceNameHasError && !serviceUrlHasError && validateServiceUrl(serviceUrl) && serviceName.length > 0) {
11324
+ setDisableButton(false);
11325
+ } else setDisableButton(true);
11326
+ }, [serviceNameHasError, serviceUrlHasError, serviceName, serviceUrl]);
11327
+
11328
+ var closePopupAndResetState = function closePopupAndResetState() {
11329
+ setServiceName('');
11330
+ setServiceUrl('');
11331
+ setAbstract('');
11332
+ closePopup();
11333
+ };
11334
+
11154
11335
  return /*#__PURE__*/React__namespace.createElement(material.Dialog, {
11155
11336
  open: isOpen,
11156
11337
  hideBackdrop: hideBackdrop,
11157
11338
  fullWidth: true,
11158
11339
  maxWidth: "xs",
11159
- sx: style.container
11340
+ "data-testid": "servicePopup",
11341
+ sx: style$1.container
11160
11342
  }, /*#__PURE__*/React__namespace.createElement(material.DialogTitle, {
11161
- sx: style.dialogTitle
11343
+ sx: style$1.dialogTitle
11162
11344
  }, /*#__PURE__*/React__namespace.createElement(material.Typography, {
11163
11345
  variant: "h5",
11164
11346
  component: "span"
11165
11347
  }, getTitleForVariant(servicePopupVariant)), /*#__PURE__*/React__namespace.createElement(material.IconButton, {
11166
11348
  size: "small",
11167
- onClick: closePopup,
11168
- "data-testid": "ClosePopupButtonCross",
11169
- sx: style.closeBtn
11349
+ onClick: closePopupAndResetState,
11350
+ "data-testid": "closePopupButtonCross",
11351
+ sx: style$1.closeBtn
11170
11352
  }, /*#__PURE__*/React__namespace.createElement(iconsMaterial.Close, null))), /*#__PURE__*/React__namespace.createElement(material.DialogContent, {
11171
- sx: style.dialogContent
11353
+ sx: style$1.dialogContent
11172
11354
  }, /*#__PURE__*/React__namespace.createElement(material.TextField, {
11173
- sx: style.textField,
11355
+ sx: style$1.textField,
11174
11356
  variant: "filled",
11175
- label: "Service name"
11357
+ label: "Service name",
11358
+ onChange: function onChange(event) {
11359
+ return setServiceName(event.target.value);
11360
+ },
11361
+ value: serviceName,
11362
+ inputProps: {
11363
+ 'data-testid': 'serviceNameTextField'
11364
+ },
11365
+ error: serviceNameHasError,
11366
+ helperText: serviceNameHelperText
11176
11367
  })), /*#__PURE__*/React__namespace.createElement(material.DialogContent, {
11177
- sx: style.dialogContent
11368
+ sx: style$1.dialogContent
11178
11369
  }, /*#__PURE__*/React__namespace.createElement(material.TextField, {
11179
- sx: style.textField,
11370
+ sx: style$1.textField,
11180
11371
  variant: "filled",
11181
11372
  label: "Service URL",
11182
- defaultValue: url,
11183
- id: "service-url"
11373
+ onChange: function onChange(event) {
11374
+ return setServiceUrl(event.target.value);
11375
+ },
11376
+ value: serviceUrl,
11377
+ id: "service-url",
11378
+ inputProps: {
11379
+ 'data-testid': 'serviceUrlTextField'
11380
+ },
11381
+ error: serviceUrlHasError,
11382
+ helperText: serviceUrlHelperText
11184
11383
  })), /*#__PURE__*/React__namespace.createElement(material.DialogContent, {
11185
- sx: style.dialogContent
11384
+ sx: style$1.dialogContent
11186
11385
  }, /*#__PURE__*/React__namespace.createElement(material.TextField, {
11187
- sx: style.textField,
11386
+ sx: style$1.textField,
11188
11387
  variant: "filled",
11189
11388
  multiline: true,
11190
11389
  rows: 4,
11191
11390
  label: "Abstracts",
11192
- helperText: "Short description of what this service does"
11391
+ helperText: "Short description of what this service does",
11392
+ onChange: function onChange(event) {
11393
+ return setAbstract(event.target.value);
11394
+ },
11395
+ value: _abstract,
11396
+ "data-testid": "abstractTextField"
11193
11397
  })), /*#__PURE__*/React__namespace.createElement(material.DialogActions, {
11194
- sx: style.footerContent
11398
+ sx: style$1.footerContent
11195
11399
  }, /*#__PURE__*/React__namespace.createElement(material.Button, {
11400
+ onClick: closePopupAndResetState,
11401
+ "data-testid": "closePopupButtonCancel",
11196
11402
  variant: "tertiary",
11197
- onClick: closePopup,
11198
- "data-testid": "ClosePopupButtonCancel",
11199
11403
  sx: {
11200
11404
  width: '117px'
11201
11405
  }
11202
- }, "cancel"), /*#__PURE__*/React__namespace.createElement(material.Button, {
11406
+ }, "cancel"), !isLoading ? /*#__PURE__*/React__namespace.createElement(material.Button, {
11407
+ variant: "primary",
11408
+ disabled: disableButton,
11409
+ onClick: addNewService,
11410
+ "data-testid": "saveServiceButton",
11203
11411
  sx: {
11204
11412
  width: '117px',
11205
11413
  marginLeft: '16px!important'
11206
- },
11207
- variant: "primary"
11208
- }, "save")));
11414
+ }
11415
+ }, "save") : /*#__PURE__*/React__namespace.createElement(material.Box, {
11416
+ "data-testid": "loadingIndicator",
11417
+ sx: {
11418
+ width: '117px',
11419
+ height: '40px',
11420
+ display: 'flex',
11421
+ justifyContent: 'center',
11422
+ alignItems: 'center',
11423
+ marginLeft: '16px!important'
11424
+ }
11425
+ }, /*#__PURE__*/React__namespace.createElement(material.CircularProgress, {
11426
+ size: 35
11427
+ }))));
11428
+ };
11429
+
11430
+ /* *
11431
+ * Licensed under the Apache License, Version 2.0 (the "License");
11432
+ * you may not use this file except in compliance with the License.
11433
+ * You may obtain a copy of the License at
11434
+ *
11435
+ * http://www.apache.org/licenses/LICENSE-2.0
11436
+ *
11437
+ * Unless required by applicable law or agreed to in writing, software
11438
+ * distributed under the License is distributed on an "AS IS" BASIS,
11439
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11440
+ * See the License for the specific language governing permissions and
11441
+ * limitations under the License.
11442
+ *
11443
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11444
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
11445
+ * */
11446
+
11447
+ var ServicePopupConnect = function ServicePopupConnect(_a) {
11448
+ var servicePopupVariant = _a.servicePopupVariant,
11449
+ hideBackdrop = _a.hideBackdrop,
11450
+ isOpen = _a.isOpen,
11451
+ closePopup = _a.closePopup,
11452
+ url = _a.url;
11453
+ var dispatch = reactRedux.useDispatch();
11454
+ var services = reactRedux.useSelector(function (store) {
11455
+ return getServices(store);
11456
+ });
11457
+ var serviceSetLayers$1 = React__default["default"].useCallback(function (payload) {
11458
+ dispatch(serviceSetLayers(payload));
11459
+ }, [dispatch]);
11460
+ return /*#__PURE__*/React__default["default"].createElement(ServicePopup, {
11461
+ servicePopupVariant: servicePopupVariant,
11462
+ hideBackdrop: hideBackdrop,
11463
+ isOpen: isOpen,
11464
+ closePopup: closePopup,
11465
+ url: url,
11466
+ services: services,
11467
+ serviceSetLayers: serviceSetLayers$1
11468
+ });
11209
11469
  };
11210
11470
 
11211
11471
  /* *
@@ -11231,11 +11491,6 @@
11231
11491
  return {
11232
11492
  iconButton: {
11233
11493
  color: theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat
11234
- },
11235
- saveButton: {
11236
- color: theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat,
11237
- textTransform: 'none',
11238
- border: "1px solid " + theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat
11239
11494
  }
11240
11495
  };
11241
11496
  });
@@ -11271,6 +11526,12 @@
11271
11526
  setPopupOpen = _b[1];
11272
11527
 
11273
11528
  var classes = useStyles$q();
11529
+ React__default["default"].useEffect(function () {
11530
+ if (isPopupOpen === false) {
11531
+ onClickClear();
11532
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
11533
+
11534
+ }, [isPopupOpen]);
11274
11535
  var ClearButton = /*#__PURE__*/React__default["default"].createElement(material.Tooltip, {
11275
11536
  title: "Clear",
11276
11537
  placement: "top"
@@ -11287,12 +11548,11 @@
11287
11548
  marginRight: '15px'
11288
11549
  }
11289
11550
  }, ClearButton), /*#__PURE__*/React__default["default"].createElement(material.Button, {
11290
- variant: "outlined",
11551
+ variant: "tertiary",
11291
11552
  onClick: function onClick() {
11292
11553
  return setPopupOpen(true);
11293
- },
11294
- className: classes.saveButton
11295
- }, "Save"), /*#__PURE__*/React__default["default"].createElement(ServicePopup, {
11554
+ }
11555
+ }, "Save"), /*#__PURE__*/React__default["default"].createElement(ServicePopupConnect, {
11296
11556
  servicePopupVariant: "save",
11297
11557
  isOpen: isPopupOpen,
11298
11558
  closePopup: function closePopup() {
@@ -11420,17 +11680,7 @@
11420
11680
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11421
11681
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
11422
11682
  * */
11423
- var filterLayersFromService = function filterLayersFromService(serviceId, services, keywords, searchString) {
11424
- var activeKeywords = keywords.filter(function (keyword) {
11425
- return keyword.checked;
11426
- });
11427
- var keywordList = activeKeywords.map(function (keyword) {
11428
- return keyword.id;
11429
- });
11430
- var allKeywordsActive = keywords.every(function (keyword) {
11431
- return keyword.checked;
11432
- });
11433
-
11683
+ var filterLayersFromService = function filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString) {
11434
11684
  if (searchString === '' && allKeywordsActive) {
11435
11685
  return services[serviceId].layers.filter(function (layer) {
11436
11686
  return layer.leaf;
@@ -11442,11 +11692,9 @@
11442
11692
  return searchStringArray.every(function (search) {
11443
11693
  var layerPathAndKeywords = layer.path.concat(layer.keywords);
11444
11694
  return (!!layerPathAndKeywords && !layerPathAndKeywords.every(function (keyword) {
11445
- return !keywordList.includes(keyword);
11695
+ return !keywordIds.includes(keyword);
11446
11696
  }) || 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) {
11447
11697
  return !keyword.toLowerCase().includes(search.toLowerCase());
11448
- }) || !!layer.path && !layer.path.every(function (group) {
11449
- return !group.toLowerCase().includes(search.toLowerCase());
11450
11698
  }) || services[serviceId].name.toLowerCase().includes(search.toLowerCase()));
11451
11699
  });
11452
11700
  }).filter(function (layer) {
@@ -11518,7 +11766,8 @@
11518
11766
  serviceIds = _a.serviceIds,
11519
11767
  layerSelectHeight = _a.layerSelectHeight,
11520
11768
  searchString = _a.searchString,
11521
- keywords = _a.keywords;
11769
+ keywordIds = _a.keywordIds,
11770
+ allKeywordsActive = _a.allKeywordsActive;
11522
11771
  var classes = useStyles$p();
11523
11772
 
11524
11773
  var _b = __read(React__namespace.useState(0), 2),
@@ -11527,9 +11776,9 @@
11527
11776
 
11528
11777
  React__namespace.useEffect(function () {
11529
11778
  setNumberOfLayers(serviceIds.reduce(function (totalNumberOfLayers, serviceId) {
11530
- return totalNumberOfLayers + filterLayersFromService(serviceId, services, keywords, searchString).length;
11779
+ return totalNumberOfLayers + filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString).length;
11531
11780
  }, 0));
11532
- }, [serviceIds, keywords, services, searchString]);
11781
+ }, [serviceIds, keywordIds, services, searchString, allKeywordsActive]);
11533
11782
  return /*#__PURE__*/React__namespace.createElement("div", {
11534
11783
  "data-testid": "layerList"
11535
11784
  }, /*#__PURE__*/React__namespace.createElement("div", {
@@ -11540,7 +11789,7 @@
11540
11789
  overflow: 'auto'
11541
11790
  }
11542
11791
  }, serviceIds.map(function (serviceId) {
11543
- return filterLayersFromService(serviceId, services, keywords, searchString).map(function (layer) {
11792
+ return filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString).map(function (layer) {
11544
11793
  return /*#__PURE__*/React__namespace.createElement("div", {
11545
11794
  key: serviceId + "-" + layer.name,
11546
11795
  className: classes.layerRow,
@@ -11584,8 +11833,11 @@
11584
11833
  var enabledServiceIds = reactRedux.useSelector(function (store) {
11585
11834
  return getEnabledServiceIds(store);
11586
11835
  });
11587
- var keywords = reactRedux.useSelector(function (store) {
11588
- return getKeywords(store);
11836
+ var checkedKeywordIds = reactRedux.useSelector(function (store) {
11837
+ return getCheckedKeywordIds(store);
11838
+ });
11839
+ var allKeywordsActive = reactRedux.useSelector(function (store) {
11840
+ return isAllKeywordsChecked(store);
11589
11841
  });
11590
11842
  var searchString = reactRedux.useSelector(function (store) {
11591
11843
  return getSearchFilter(store);
@@ -11594,7 +11846,8 @@
11594
11846
  services: services,
11595
11847
  serviceIds: enabledServiceIds,
11596
11848
  layerSelectHeight: layerSelectHeight,
11597
- keywords: keywords,
11849
+ keywordIds: checkedKeywordIds,
11850
+ allKeywordsActive: allKeywordsActive,
11598
11851
  searchString: searchString
11599
11852
  });
11600
11853
  };
@@ -11615,41 +11868,15 @@
11615
11868
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11616
11869
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
11617
11870
  * */
11618
- var useStyles$o = makeStyles__default["default"](function (theme) {
11619
- return createStyles__default["default"]({
11620
- chip: {
11621
- height: '32px',
11622
- margin: '0 8px 0 0',
11623
- padding: '5px 12px 7px',
11624
- borderRadius: '20px',
11625
- border: function border(_a) {
11626
- var isEnabled = _a.isEnabled;
11627
- return isEnabled ? "solid 1px " + theme.palette.geowebColors.buttons.primaryActive.fill : "solid 1px " + theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat;
11628
- },
11629
- backgroundColor: function backgroundColor(_a) {
11630
- var isEnabled = _a.isEnabled;
11631
- return isEnabled ? theme.palette.geowebColors.buttons.primaryActive.fill : theme.palette.geowebColors.buttons.surfaceIconDefault.fill;
11632
- },
11633
- color: function color(_a) {
11634
- var isEnabled = _a.isEnabled;
11635
- return isEnabled ? theme.palette.geowebColors.typographyAndIcons.buttonIcon : theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat;
11636
- },
11637
- "float": 'left',
11638
- whiteSpace: 'nowrap',
11639
- '&:hover': {
11640
- backgroundColor: function backgroundColor(_a) {
11641
- var isEnabled = _a.isEnabled;
11642
- return isEnabled ? theme.palette.geowebColors.buttons.primaryMouseover.fill : theme.palette.geowebColors.buttons.flatMouseover.fill;
11643
- },
11644
- border: function border(_a) {
11645
- var isEnabled = _a.isEnabled;
11646
- return isEnabled ? "solid 1px " + theme.palette.geowebColors.buttons.primaryMouseover.fill : "solid 1px " + theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat;
11647
- },
11648
- cursor: 'pointer'
11649
- }
11650
- }
11651
- });
11652
- });
11871
+ var style = {
11872
+ borderRadius: '20px!important',
11873
+ marginRight: '8px',
11874
+ whiteSpace: 'nowrap',
11875
+ height: '32px!important',
11876
+ padding: '5px 12px!important',
11877
+ textTransform: 'none!important',
11878
+ fontWeight: 'normal'
11879
+ };
11653
11880
 
11654
11881
  var ServiceChip = function ServiceChip(_a) {
11655
11882
  var _b = _a.all,
@@ -11657,20 +11884,18 @@
11657
11884
  service = _a.service,
11658
11885
  isEnabled = _a.isEnabled,
11659
11886
  toggleChip = _a.toggleChip;
11660
- var classes = useStyles$o({
11661
- isEnabled: isEnabled
11662
- });
11663
- return /*#__PURE__*/React__namespace.createElement("div", {
11664
- role: "button",
11887
+ return /*#__PURE__*/React__namespace.createElement(CustomToggleButton, {
11888
+ variant: "boxed",
11889
+ selected: isEnabled,
11665
11890
  tabIndex: 0,
11666
- className: classes.chip,
11667
11891
  "data-testid": all ? 'serviceChipAll' : 'serviceChip',
11668
11892
  onClick: function onClick() {
11669
11893
  return toggleChip(all ? 'all' : service && service.service);
11670
11894
  },
11671
11895
  onKeyPress: function onKeyPress() {
11672
11896
  return toggleChip(all ? 'all' : service && service.service);
11673
- }
11897
+ },
11898
+ sx: style
11674
11899
  }, service ? service.name : 'All');
11675
11900
  };
11676
11901
 
@@ -11755,7 +11980,7 @@
11755
11980
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11756
11981
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
11757
11982
  * */
11758
- var useStyles$n = makeStyles__default["default"](function (theme) {
11983
+ var useStyles$o = makeStyles__default["default"](function (theme) {
11759
11984
  return createStyles__default["default"]({
11760
11985
  serviceChips: {
11761
11986
  width: '100%',
@@ -11820,31 +12045,71 @@
11820
12045
  width = _c[0],
11821
12046
  setWidth = _c[1];
11822
12047
 
12048
+ var _d = __read(React__namespace.useState(null), 2),
12049
+ intervalId = _d[0],
12050
+ setIntervalId = _d[1];
12051
+
11823
12052
  var ref = React__namespace.useRef(null);
12053
+ var scrollSpeed = 5;
11824
12054
  var maxWidthValue = ref && ref.current && ref.current.scrollWidth && ref.current.scrollWidth >= layerSelectWidth - margin && ref.current.scrollWidth || layerSelectWidth - 50;
11825
- var classes = useStyles$n({
12055
+ var classes = useStyles$o({
11826
12056
  margin: margin,
11827
12057
  maxWidthValue: maxWidthValue
11828
12058
  });
11829
- var onLeftArrowClick = React__namespace.useCallback(function () {
11830
- setMargin(Math.max(0, margin - 100));
11831
- }, [margin]);
11832
- var onRightArrowClick = React__namespace.useCallback(function () {
11833
- setMargin(Math.min(width - layerSelectWidth, margin + 100));
11834
- }, [margin, layerSelectWidth, width]);
12059
+
12060
+ var onMouseWheelScroll = function onMouseWheelScroll(e) {
12061
+ var delta = e.deltaY;
12062
+ var scrollSpeed = 0.1;
12063
+ 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));
12064
+ };
12065
+
12066
+ var onLeftChevronPressed = function onLeftChevronPressed() {
12067
+ setMargin(function (prevMargin) {
12068
+ return Math.max(prevMargin - scrollSpeed, 0);
12069
+ });
12070
+ setIntervalId(setInterval(function () {
12071
+ setMargin(function (prevMargin) {
12072
+ return Math.max(prevMargin - scrollSpeed, 0);
12073
+ });
12074
+ }, 20));
12075
+ };
12076
+
12077
+ var onRightChevronPressed = React__namespace.useCallback(function () {
12078
+ setMargin(function (prevMargin) {
12079
+ return Math.min(prevMargin + scrollSpeed, width - layerSelectWidth);
12080
+ });
12081
+ setIntervalId(setInterval(function () {
12082
+ setMargin(function (prevMargin) {
12083
+ return Math.min(prevMargin + scrollSpeed, width - layerSelectWidth);
12084
+ });
12085
+ }, 20));
12086
+ }, [width, layerSelectWidth]);
12087
+
12088
+ var onChevronMouseUp = function onChevronMouseUp() {
12089
+ clearInterval(intervalId);
12090
+ setIntervalId(null);
12091
+ };
12092
+
11835
12093
  React__namespace.useEffect(function () {
11836
12094
  setWidth(ref.current.scrollWidth + 50);
11837
12095
  setMargin(Math.max(0, Math.min(width - layerSelectWidth, margin)));
11838
- }, [services, layerSelectWidth, width, margin]);
12096
+
12097
+ if ((margin === 0 || layerSelectWidth + margin === width) && intervalId != null) {
12098
+ clearInterval(intervalId);
12099
+ setIntervalId(null);
12100
+ }
12101
+ }, [services, layerSelectWidth, width, margin, intervalId]);
11839
12102
  var isAllEnabled = Object.values(activeServices).every(function (activeService) {
11840
12103
  return activeService.enabled;
11841
12104
  });
11842
12105
  return /*#__PURE__*/React__namespace.createElement("div", {
11843
12106
  className: classes.serviceList,
11844
- "data-testid": "serviceList"
12107
+ "data-testid": "serviceList",
12108
+ onWheel: onMouseWheelScroll
11845
12109
  }, margin !== 0 && /*#__PURE__*/React__namespace.createElement(iconsMaterial.ChevronLeft, {
11846
12110
  className: classes.scrollArrowLeft,
11847
- onClick: onLeftArrowClick,
12111
+ onMouseDown: onLeftChevronPressed,
12112
+ onMouseUp: onChevronMouseUp,
11848
12113
  "data-testid": "leftScrollArrow"
11849
12114
  }), /*#__PURE__*/React__namespace.createElement("div", {
11850
12115
  className: classes.serviceChips,
@@ -11863,7 +12128,8 @@
11863
12128
  });
11864
12129
  })), layerSelectWidth + margin < width && /*#__PURE__*/React__namespace.createElement(iconsMaterial.ChevronRight, {
11865
12130
  className: classes.scrollArrowRight,
11866
- onClick: onRightArrowClick,
12131
+ onMouseDown: onRightChevronPressed,
12132
+ onMouseUp: onChevronMouseUp,
11867
12133
  "data-testid": "rightScrollArrow"
11868
12134
  }));
11869
12135
  };
@@ -11900,6 +12166,202 @@
11900
12166
  });
11901
12167
  };
11902
12168
 
12169
+ /* *
12170
+ * Licensed under the Apache License, Version 2.0 (the "License");
12171
+ * you may not use this file except in compliance with the License.
12172
+ * You may obtain a copy of the License at
12173
+ *
12174
+ * http://www.apache.org/licenses/LICENSE-2.0
12175
+ *
12176
+ * Unless required by applicable law or agreed to in writing, software
12177
+ * distributed under the License is distributed on an "AS IS" BASIS,
12178
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12179
+ * See the License for the specific language governing permissions and
12180
+ * limitations under the License.
12181
+ *
12182
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12183
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
12184
+ * */
12185
+ var useStyles$n = makeStyles__default["default"](function (theme) {
12186
+ return createStyles__default["default"]({
12187
+ servicesContainer: {
12188
+ width: '300px',
12189
+ maxHeight: '380px',
12190
+ top: '140px',
12191
+ backgroundColor: theme.palette.geowebColors.background.surface,
12192
+ boxShadow: theme.shadows[6],
12193
+ overflow: 'auto'
12194
+ },
12195
+ header: {
12196
+ position: 'sticky',
12197
+ top: 0,
12198
+ fontSize: theme.typography.fontSize,
12199
+ padding: '12px',
12200
+ backgroundColor: theme.palette.geowebColors.background.surface,
12201
+ zIndex: 100
12202
+ },
12203
+ footer: {
12204
+ display: 'flex',
12205
+ justifyContent: 'center',
12206
+ alignItems: 'center',
12207
+ position: 'sticky',
12208
+ bottom: 0,
12209
+ backgroundColor: theme.palette.geowebColors.background.surface,
12210
+ zIndex: 100
12211
+ },
12212
+ iconFill: {
12213
+ color: theme.palette.geowebColors.typographyAndIcons.icon
12214
+ },
12215
+ button: {
12216
+ margin: '16px',
12217
+ width: '80%',
12218
+ fontSize: '12px',
12219
+ textTransform: 'none'
12220
+ },
12221
+ text: {
12222
+ paddingTop: '3px',
12223
+ fontSize: '12px',
12224
+ fontFamily: theme.typography.fontFamily,
12225
+ fontWeight: theme.typography.fontWeightRegular,
12226
+ textTransform: 'none',
12227
+ color: '#575f7a'
12228
+ },
12229
+ icon: {
12230
+ width: '24px',
12231
+ height: '24px'
12232
+ }
12233
+ });
12234
+ });
12235
+
12236
+ var ServiceOptionsDialog = function ServiceOptionsDialog(_a) {
12237
+ var services = _a.services,
12238
+ mapStoreRemoveService = _a.mapStoreRemoveService,
12239
+ _b = _a.layers,
12240
+ layers = _b === void 0 ? [] : _b;
12241
+ var classes = useStyles$n();
12242
+
12243
+ var _c = __read(React__namespace.useState(false), 2),
12244
+ addServiceisOpen = _c[0],
12245
+ setAddServiceIsOpen = _c[1];
12246
+
12247
+ var openAddService = function openAddService() {
12248
+ setAddServiceIsOpen(true);
12249
+ };
12250
+
12251
+ var closePopup = function closePopup() {
12252
+ setAddServiceIsOpen(false);
12253
+ };
12254
+
12255
+ var isDisabled = function isDisabled(service) {
12256
+ return layers.some(function (layer) {
12257
+ return layer.service && layer.service.includes(service);
12258
+ });
12259
+ };
12260
+
12261
+ return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(material.Box, {
12262
+ className: classes.servicesContainer,
12263
+ "data-testid": "ServiceDialog"
12264
+ }, /*#__PURE__*/React__namespace.createElement("div", {
12265
+ className: classes.header
12266
+ }, " Services"), /*#__PURE__*/React__namespace.createElement(material.List, {
12267
+ disablePadding: true
12268
+ }, services.map(function (service) {
12269
+ return /*#__PURE__*/React__namespace.createElement(material.ListItem, {
12270
+ key: service.name
12271
+ }, /*#__PURE__*/React__namespace.createElement(material.ListItemText, {
12272
+ style: {
12273
+ fontSize: '16px'
12274
+ }
12275
+ }, /*#__PURE__*/React__namespace.createElement(material.Typography, {
12276
+ noWrap: true,
12277
+ style: {
12278
+ textOverflow: 'ellipsis',
12279
+ paddingRight: '60px'
12280
+ }
12281
+ }, service.name)), /*#__PURE__*/React__namespace.createElement(material.ListItemSecondaryAction, {
12282
+ style: {
12283
+ marginRight: '-10px'
12284
+ }
12285
+ }, /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
12286
+ title: "Edit Service"
12287
+ }, /*#__PURE__*/React__namespace.createElement(material.IconButton, {
12288
+ "data-testid": "openEditServiceButton",
12289
+ size: "large"
12290
+ }, /*#__PURE__*/React__namespace.createElement(material.SvgIcon, null, /*#__PURE__*/React__namespace.createElement("g", null, /*#__PURE__*/React__namespace.createElement("path", {
12291
+ 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",
12292
+ fill: classes.iconFill,
12293
+ fillRule: "evenodd"
12294
+ }))))), /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
12295
+ title: "Delete Service"
12296
+ }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(material.IconButton, {
12297
+ size: "large",
12298
+ disabled: isDisabled(service.service),
12299
+ onClick: function onClick() {
12300
+ return mapStoreRemoveService(service.service);
12301
+ },
12302
+ "data-testid": "removeServiceButton"
12303
+ }, /*#__PURE__*/React__namespace.createElement(material.SvgIcon, null, /*#__PURE__*/React__namespace.createElement("g", null, /*#__PURE__*/React__namespace.createElement("path", {
12304
+ 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",
12305
+ fill: classes.iconFill,
12306
+ fillRule: "evenodd"
12307
+ }))))))));
12308
+ })), /*#__PURE__*/React__namespace.createElement("div", {
12309
+ className: classes.footer
12310
+ }, /*#__PURE__*/React__namespace.createElement(material.Button, {
12311
+ onClick: openAddService,
12312
+ "data-testid": "openAddServiceButton",
12313
+ className: classes.button,
12314
+ variant: "tertiary",
12315
+ startIcon: /*#__PURE__*/React__namespace.createElement(material.SvgIcon, {
12316
+ className: classes.icon
12317
+ }, /*#__PURE__*/React__namespace.createElement("g", null, /*#__PURE__*/React__namespace.createElement("path", {
12318
+ 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",
12319
+ fillRule: "evenodd"
12320
+ })))
12321
+ }, "Add a new service"))), addServiceisOpen && /*#__PURE__*/React__namespace.createElement(ServicePopupConnect, {
12322
+ servicePopupVariant: "add",
12323
+ isOpen: addServiceisOpen,
12324
+ closePopup: closePopup
12325
+ }));
12326
+ };
12327
+
12328
+ /* *
12329
+ * Licensed under the Apache License, Version 2.0 (the "License");
12330
+ * you may not use this file except in compliance with the License.
12331
+ * You may obtain a copy of the License at
12332
+ *
12333
+ * http://www.apache.org/licenses/LICENSE-2.0
12334
+ *
12335
+ * Unless required by applicable law or agreed to in writing, software
12336
+ * distributed under the License is distributed on an "AS IS" BASIS,
12337
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12338
+ * See the License for the specific language governing permissions and
12339
+ * limitations under the License.
12340
+ *
12341
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12342
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
12343
+ * */
12344
+
12345
+ var ServiceOptionsDialogConnect = function ServiceOptionsDialogConnect() {
12346
+ var dispatch = reactRedux.useDispatch();
12347
+ var allLayers = reactRedux.useSelector(function (store) {
12348
+ return getAllLayers(store);
12349
+ });
12350
+ var mapStoreRemoveService$1 = React__namespace.useCallback(function (serviceUrl) {
12351
+ dispatch(mapStoreRemoveService({
12352
+ serviceUrl: serviceUrl
12353
+ }));
12354
+ }, [dispatch]);
12355
+ var arrayOfServices = reactRedux.useSelector(function (store) {
12356
+ return getServicesInArray(store);
12357
+ });
12358
+ return /*#__PURE__*/React__namespace.createElement(ServiceOptionsDialog, {
12359
+ services: arrayOfServices,
12360
+ layers: allLayers,
12361
+ mapStoreRemoveService: mapStoreRemoveService$1
12362
+ });
12363
+ };
12364
+
11903
12365
  /* *
11904
12366
  * Licensed under the Apache License, Version 2.0 (the "License");
11905
12367
  * you may not use this file except in compliance with the License.
@@ -11919,8 +12381,6 @@
11919
12381
  var useStyles$m = makeStyles__default["default"](function (theme) {
11920
12382
  return createStyles__default["default"]({
11921
12383
  servicesContainer: {
11922
- width: '300px',
11923
- height: '380px',
11924
12384
  position: 'fixed',
11925
12385
  top: '140px',
11926
12386
  right: '-72px',
@@ -11945,23 +12405,21 @@
11945
12405
  setContainerOpen(!containerOpen);
11946
12406
  };
11947
12407
 
11948
- return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(ToggleIconButton, {
12408
+ return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(ToolButton, {
11949
12409
  onClick: toggleContainer,
11950
12410
  active: containerOpen,
11951
- "data-testid": "serviceOptionsButton"
12411
+ "data-testid": "serviceOptionsButton",
12412
+ variant: "tool"
11952
12413
  }, /*#__PURE__*/React__namespace.createElement(material.SvgIcon, {
11953
12414
  viewBox: "0 0 24 24",
11954
12415
  xmlns: "http://www.w3.org/2000/svg"
11955
12416
  }, /*#__PURE__*/React__namespace.createElement("g", null, /*#__PURE__*/React__namespace.createElement("path", {
11956
12417
  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",
11957
- fill: "#FFF",
11958
12418
  fillRule: "evenodd"
11959
12419
  })))), containerOpen ? /*#__PURE__*/React__namespace.createElement(material.Box, {
11960
12420
  className: classes.servicesContainer,
11961
- "data-testid": "container"
11962
- }, /*#__PURE__*/React__namespace.createElement(material.Typography, {
11963
- className: classes.servicesText
11964
- }, "Services")) : null);
12421
+ "data-testid": "ServiceOptionsDialogContainer"
12422
+ }, /*#__PURE__*/React__namespace.createElement(ServiceOptionsDialogConnect, null)) : null);
11965
12423
  };
11966
12424
 
11967
12425
  /* *
@@ -12072,40 +12530,6 @@
12072
12530
  })));
12073
12531
  };
12074
12532
 
12075
- /* *
12076
- * Licensed under the Apache License, Version 2.0 (the "License");
12077
- * you may not use this file except in compliance with the License.
12078
- * You may obtain a copy of the License at
12079
- *
12080
- * http://www.apache.org/licenses/LICENSE-2.0
12081
- *
12082
- * Unless required by applicable law or agreed to in writing, software
12083
- * distributed under the License is distributed on an "AS IS" BASIS,
12084
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12085
- * See the License for the specific language governing permissions and
12086
- * limitations under the License.
12087
- *
12088
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12089
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
12090
- * */
12091
- var CustomSwitch = withStyles__default["default"](function (theme) {
12092
- return {
12093
- switchBase: {
12094
- '&$checked': {
12095
- color: theme.palette.geowebColors.customSlider.thumb
12096
- },
12097
- '&$checked + $track': {
12098
- backgroundColor: theme.palette.geowebColors.buttons.primary["default"].fill
12099
- }
12100
- },
12101
- checked: {},
12102
- track: {
12103
- backgroundColor: theme.palette.geowebColors.customSlider.switchTrackDisabled,
12104
- opacity: '1 !important'
12105
- }
12106
- };
12107
- })(material.Switch);
12108
-
12109
12533
  /* *
12110
12534
  * Licensed under the Apache License, Version 2.0 (the "License");
12111
12535
  * you may not use this file except in compliance with the License.
@@ -12156,56 +12580,184 @@
12156
12580
  });
12157
12581
 
12158
12582
  var FilterListItem = function FilterListItem(_a) {
12159
- var index = _a.index,
12160
- text = _a.text,
12161
- checked = _a.checked,
12162
- toggleCheckbox = _a.toggleCheckbox,
12163
- selectOnlyOne = _a.selectOnlyOne;
12583
+ var keyword = _a.keyword,
12584
+ toggleKeywords = _a.toggleKeywords,
12585
+ enableOnlyOneKeyword = _a.enableOnlyOneKeyword;
12164
12586
  var classes = useStyles$k();
12165
12587
 
12166
- var _b = __read(React__namespace.useState(false), 2),
12167
- hovering = _b[0],
12168
- setHovering = _b[1];
12588
+ var _b = __read(React__namespace.useState(false), 2),
12589
+ hovering = _b[0],
12590
+ setHovering = _b[1];
12591
+
12592
+ var handleMouseOver = React__namespace.useCallback(function () {
12593
+ setHovering(true);
12594
+ }, []);
12595
+ var handleMouseLeave = React__namespace.useCallback(function () {
12596
+ setHovering(false);
12597
+ }, []);
12598
+
12599
+ var selectOnlyOne = function selectOnlyOne(keyword) {
12600
+ enableOnlyOneKeyword(keyword);
12601
+ };
12602
+
12603
+ var toggleCheckbox = function toggleCheckbox(keyword) {
12604
+ toggleKeywords([keyword]);
12605
+ };
12606
+
12607
+ if (keyword.amountVisible !== 0) {
12608
+ return /*#__PURE__*/React__namespace.createElement("div", {
12609
+ onMouseOver: handleMouseOver,
12610
+ onMouseLeave: handleMouseLeave,
12611
+ onFocus: handleMouseOver,
12612
+ onBlur: handleMouseLeave,
12613
+ "data-testid": "filterResultListItem"
12614
+ }, /*#__PURE__*/React__namespace.createElement(material.ListItem, {
12615
+ className: classes.listItem
12616
+ }, /*#__PURE__*/React__namespace.createElement(material.ListItemIcon, {
12617
+ className: classes.listItemIcon
12618
+ }, /*#__PURE__*/React__namespace.createElement(material.Checkbox, {
12619
+ color: "secondary",
12620
+ checked: keyword.checked,
12621
+ onChange: function onChange() {
12622
+ return toggleCheckbox(keyword.id);
12623
+ },
12624
+ className: classes.checkbox
12625
+ })), /*#__PURE__*/React__namespace.createElement(material.Typography, {
12626
+ variant: "body2",
12627
+ className: classes.listItemText
12628
+ }, keyword.id), hovering ? /*#__PURE__*/React__namespace.createElement(material.ListItemSecondaryAction, null, /*#__PURE__*/React__namespace.createElement(material.IconButton, {
12629
+ style: {
12630
+ backgroundColor: 'transparent'
12631
+ },
12632
+ edge: "end",
12633
+ size: "small",
12634
+ onClick: function onClick() {
12635
+ return selectOnlyOne(keyword.id);
12636
+ },
12637
+ "data-testid": "onlyButton"
12638
+ }, /*#__PURE__*/React__namespace.createElement(material.Typography, {
12639
+ className: classes.onlyByttonText
12640
+ }, "ONLY"))) : null));
12641
+ }
12642
+
12643
+ return null;
12644
+ };
12645
+
12646
+ /* *
12647
+ * Licensed under the Apache License, Version 2.0 (the "License");
12648
+ * you may not use this file except in compliance with the License.
12649
+ * You may obtain a copy of the License at
12650
+ *
12651
+ * http://www.apache.org/licenses/LICENSE-2.0
12652
+ *
12653
+ * Unless required by applicable law or agreed to in writing, software
12654
+ * distributed under the License is distributed on an "AS IS" BASIS,
12655
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12656
+ * See the License for the specific language governing permissions and
12657
+ * limitations under the License.
12658
+ *
12659
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12660
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
12661
+ * */
12662
+
12663
+ var KeywordFilterResultsListItemConnect = function KeywordFilterResultsListItemConnect(_a) {
12664
+ var keyword = _a.keyword;
12665
+ var dispatch = reactRedux.useDispatch();
12666
+ var toggleKeywords$1 = React__namespace.useCallback(function (keywords) {
12667
+ dispatch(toggleKeywords({
12668
+ keywords: keywords
12669
+ }));
12670
+ }, [dispatch]);
12671
+ var enableOnlyOneKeyword$1 = React__namespace.useCallback(function (keyword) {
12672
+ dispatch(enableOnlyOneKeyword({
12673
+ keyword: keyword
12674
+ }));
12675
+ }, [dispatch]);
12676
+ var keywordObject = reactRedux.useSelector(function (store) {
12677
+ return getKeywordObjectById(store, keyword);
12678
+ });
12679
+ return /*#__PURE__*/React__namespace.createElement(FilterListItem, {
12680
+ keyword: keywordObject,
12681
+ toggleKeywords: toggleKeywords$1,
12682
+ enableOnlyOneKeyword: enableOnlyOneKeyword$1
12683
+ });
12684
+ };
12685
+
12686
+ /* *
12687
+ * Licensed under the Apache License, Version 2.0 (the "License");
12688
+ * you may not use this file except in compliance with the License.
12689
+ * You may obtain a copy of the License at
12690
+ *
12691
+ * http://www.apache.org/licenses/LICENSE-2.0
12692
+ *
12693
+ * Unless required by applicable law or agreed to in writing, software
12694
+ * distributed under the License is distributed on an "AS IS" BASIS,
12695
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12696
+ * See the License for the specific language governing permissions and
12697
+ * limitations under the License.
12698
+ *
12699
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12700
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
12701
+ * */
12702
+ var CustomSwitch = withStyles__default["default"](function (theme) {
12703
+ return {
12704
+ switchBase: {
12705
+ '&$checked': {
12706
+ color: theme.palette.geowebColors.customSlider.thumb
12707
+ },
12708
+ '&$checked + $track': {
12709
+ backgroundColor: theme.palette.geowebColors.buttons.primary["default"].fill
12710
+ }
12711
+ },
12712
+ checked: {},
12713
+ track: {
12714
+ backgroundColor: theme.palette.geowebColors.customSlider.switchTrackDisabled,
12715
+ opacity: '1 !important'
12716
+ }
12717
+ };
12718
+ })(material.Switch);
12719
+
12720
+ /* *
12721
+ * Licensed under the Apache License, Version 2.0 (the "License");
12722
+ * you may not use this file except in compliance with the License.
12723
+ * You may obtain a copy of the License at
12724
+ *
12725
+ * http://www.apache.org/licenses/LICENSE-2.0
12726
+ *
12727
+ * Unless required by applicable law or agreed to in writing, software
12728
+ * distributed under the License is distributed on an "AS IS" BASIS,
12729
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12730
+ * See the License for the specific language governing permissions and
12731
+ * limitations under the License.
12732
+ *
12733
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12734
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
12735
+ * */
12169
12736
 
12170
- var handleMouseOver = React__namespace.useCallback(function () {
12171
- setHovering(true);
12172
- }, []);
12173
- var handleMouseLeave = React__namespace.useCallback(function () {
12174
- setHovering(false);
12175
- }, []);
12176
- return /*#__PURE__*/React__namespace.createElement("div", {
12177
- onMouseOver: handleMouseOver,
12178
- onMouseLeave: handleMouseLeave,
12179
- onFocus: handleMouseOver,
12180
- onBlur: handleMouseLeave,
12181
- "data-testid": "filterResultListItem"
12182
- }, /*#__PURE__*/React__namespace.createElement(material.ListItem, {
12183
- className: classes.listItem
12184
- }, /*#__PURE__*/React__namespace.createElement(material.ListItemIcon, {
12185
- className: classes.listItemIcon
12186
- }, /*#__PURE__*/React__namespace.createElement(material.Checkbox, {
12187
- color: "secondary",
12188
- checked: checked,
12189
- onChange: function onChange() {
12190
- return toggleCheckbox(index);
12191
- },
12192
- className: classes.checkbox
12193
- })), /*#__PURE__*/React__namespace.createElement(material.Typography, {
12194
- variant: "body2",
12195
- className: classes.listItemText
12196
- }, text), hovering ? /*#__PURE__*/React__namespace.createElement(material.ListItemSecondaryAction, null, /*#__PURE__*/React__namespace.createElement(material.IconButton, {
12197
- style: {
12198
- backgroundColor: 'transparent'
12199
- },
12200
- edge: "end",
12201
- size: "small",
12202
- onClick: function onClick() {
12203
- return selectOnlyOne(index);
12204
- },
12205
- "data-testid": "onlyButton"
12206
- }, /*#__PURE__*/React__namespace.createElement(material.Typography, {
12207
- className: classes.onlyByttonText
12208
- }, "ONLY"))) : null));
12737
+ var KeywordFilterSelectAllSwitchConnect = function KeywordFilterSelectAllSwitchConnect() {
12738
+ var dispatch = reactRedux.useDispatch();
12739
+ var allKeywordsActive = reactRedux.useSelector(function (store) {
12740
+ return isAllKeywordsChecked(store);
12741
+ });
12742
+ var allKeywordIds = reactRedux.useSelector(function (store) {
12743
+ return getAllKeywordIds(store);
12744
+ });
12745
+ var checkedKeywordIds = reactRedux.useSelector(function (store) {
12746
+ return getCheckedKeywordIds(store);
12747
+ });
12748
+ var toggleKeywords$1 = React__namespace.useCallback(function () {
12749
+ var keywords = allKeywordsActive ? checkedKeywordIds : allKeywordIds.filter(function (id) {
12750
+ return !checkedKeywordIds.includes(id);
12751
+ });
12752
+ dispatch(toggleKeywords({
12753
+ keywords: keywords
12754
+ }));
12755
+ }, [allKeywordIds, allKeywordsActive, checkedKeywordIds, dispatch]);
12756
+ return /*#__PURE__*/React__namespace.createElement(CustomSwitch, {
12757
+ checked: allKeywordsActive,
12758
+ onChange: toggleKeywords$1,
12759
+ "data-testid": "customSwitch"
12760
+ });
12209
12761
  };
12210
12762
 
12211
12763
  /* *
@@ -12243,7 +12795,7 @@
12243
12795
  });
12244
12796
 
12245
12797
  var KeywordFilterResults = function KeywordFilterResults(_a) {
12246
- var keywordObjects = _a.keywordObjects,
12798
+ var allKeywordIds = _a.allKeywordIds,
12247
12799
  mapId = _a.mapId,
12248
12800
  bounds = _a.bounds,
12249
12801
  _b = _a.onClose,
@@ -12255,52 +12807,8 @@
12255
12807
  _d = _a.order,
12256
12808
  order = _d === void 0 ? 0 : _d,
12257
12809
  _e = _a.source,
12258
- source = _e === void 0 ? 'module' : _e,
12259
- updateKeywords = _a.updateKeywords;
12810
+ source = _e === void 0 ? 'module' : _e;
12260
12811
  var classes = useStyles$j();
12261
-
12262
- var _f = __read(React__namespace.useState(true), 2),
12263
- allSelected = _f[0],
12264
- setAllSelected = _f[1];
12265
-
12266
- var toggleSelectAll = function toggleSelectAll() {
12267
- var editedKeywords = keywordObjects.map(function (object) {
12268
- return __assign(__assign({}, object), {
12269
- checked: !allSelected
12270
- });
12271
- });
12272
- setAllSelected(!allSelected);
12273
- updateKeywords(editedKeywords);
12274
- };
12275
-
12276
- var toggleCheckbox = function toggleCheckbox(listIndex) {
12277
- var editedKeywords = keywordObjects.map(function (object, index) {
12278
- return listIndex === index ? __assign(__assign({}, object), {
12279
- checked: !object.checked
12280
- }) : object;
12281
- });
12282
- updateKeywords(editedKeywords);
12283
- };
12284
-
12285
- var selectOnlyOne = function selectOnlyOne(listIndex) {
12286
- var editedKeywords = keywordObjects.map(function (object, index) {
12287
- return listIndex === index ? __assign(__assign({}, object), {
12288
- checked: true
12289
- }) : __assign(__assign({}, object), {
12290
- checked: false
12291
- });
12292
- });
12293
- updateKeywords(editedKeywords);
12294
- }; // If even one checkbox is unchecked, switch toggleAll off
12295
- // If all checkboxes becomes checked, switch toggleAll on
12296
-
12297
-
12298
- React__namespace.useEffect(function () {
12299
- var checked = keywordObjects.every(function (object) {
12300
- return object.checked === true;
12301
- });
12302
- setAllSelected(checked);
12303
- }, [keywordObjects]);
12304
12812
  return /*#__PURE__*/React__namespace.createElement(shared.ToolContainerDraggable, {
12305
12813
  title: showTitle ? "Filter Results " + mapId : 'Filter Results',
12306
12814
  "data-testid": "keywordFilterResults",
@@ -12338,27 +12846,15 @@
12338
12846
  justifyContent: "flex-end",
12339
12847
  alignContent: "center",
12340
12848
  className: classes["switch"]
12341
- }, /*#__PURE__*/React__namespace.createElement(CustomSwitch, {
12342
- checked: allSelected,
12343
- onChange: toggleSelectAll,
12344
- "data-testid": "customSwitch"
12345
- }))), /*#__PURE__*/React__namespace.createElement(material.List, {
12849
+ }, /*#__PURE__*/React__namespace.createElement(KeywordFilterSelectAllSwitchConnect, null))), /*#__PURE__*/React__namespace.createElement(material.List, {
12346
12850
  dense: true,
12347
12851
  style: {
12348
12852
  padding: '0px'
12349
12853
  }
12350
- }, keywordObjects.map(function (_a, index) {
12351
- var id = _a.id,
12352
- checked = _a.checked,
12353
- amountVisible = _a.amountVisible;
12354
- if (amountVisible === 0) return null;
12355
- return /*#__PURE__*/React__namespace.createElement(FilterListItem, {
12356
- key: id + "-" + index,
12357
- index: index,
12358
- text: id,
12359
- checked: checked,
12360
- toggleCheckbox: toggleCheckbox,
12361
- selectOnlyOne: selectOnlyOne
12854
+ }, allKeywordIds.map(function (keywordId) {
12855
+ return /*#__PURE__*/React__namespace.createElement(KeywordFilterResultsListItemConnect, {
12856
+ key: keywordId,
12857
+ keyword: keywordId
12362
12858
  });
12363
12859
  })));
12364
12860
  };
@@ -12408,12 +12904,7 @@
12408
12904
  });
12409
12905
  var uiIsOrderedOnTop = reactRedux.useSelector(function (store) {
12410
12906
  return getDialogIsOrderedOnTop(store, 'keywordFilter');
12411
- });
12412
- var updateKeywords$1 = React__namespace.useCallback(function (keywords) {
12413
- dispatch(updateKeywords({
12414
- keywords: keywords
12415
- }));
12416
- }, [dispatch]); // Check to ensure the currently active map is still present on screen - if not, close the dialog
12907
+ }); // Check to ensure the currently active map is still present on screen - if not, close the dialog
12417
12908
 
12418
12909
  React__namespace.useEffect(function () {
12419
12910
  if (mapId !== '' && !isMapPresent) {
@@ -12445,11 +12936,11 @@
12445
12936
  unregisterDialog$1();
12446
12937
  }; // eslint-disable-next-line react-hooks/exhaustive-deps
12447
12938
  }, []);
12448
- var keywords = reactRedux.useSelector(function (store) {
12449
- return getKeywords(store);
12939
+ var allKeywordIds = reactRedux.useSelector(function (store) {
12940
+ return getAllKeywordIds(store);
12450
12941
  });
12451
12942
  return /*#__PURE__*/React__namespace.createElement(KeywordFilterResults, {
12452
- keywordObjects: keywords,
12943
+ allKeywordIds: allKeywordIds,
12453
12944
  mapId: mapId,
12454
12945
  bounds: bounds,
12455
12946
  isOpen: isOpenInStore,
@@ -12457,8 +12948,7 @@
12457
12948
  showTitle: showTitle,
12458
12949
  onMouseDown: onOrderDialog,
12459
12950
  order: uiOrder,
12460
- source: uiSource,
12461
- updateKeywords: updateKeywords$1
12951
+ source: uiSource
12462
12952
  });
12463
12953
  };
12464
12954
 
@@ -12708,7 +13198,6 @@
12708
13198
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12709
13199
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
12710
13200
  * */
12711
- var width = 24;
12712
13201
 
12713
13202
  var MapControlButton = function MapControlButton(_a) {
12714
13203
  var onClick = _a.onClick,
@@ -12720,14 +13209,10 @@
12720
13209
  isActive = _c === void 0 ? false : _c,
12721
13210
  props = __rest(_a, ["onClick", "children", "title", "placement", "isActive"]);
12722
13211
 
12723
- var classes = useButtonStyles({
12724
- width: width
12725
- });
12726
- return /*#__PURE__*/React__namespace.createElement(ToggleIconButton, __assign({
13212
+ return /*#__PURE__*/React__namespace.createElement(ToolButton, __assign({
12727
13213
  onClick: onClick,
12728
13214
  active: isActive
12729
13215
  }, props), /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
12730
- className: classes.button,
12731
13216
  placement: placement,
12732
13217
  title: title
12733
13218
  }, children));
@@ -13635,7 +14120,7 @@
13635
14120
  title: autoUpdateButton.title
13636
14121
  }, /*#__PURE__*/React__namespace.createElement("span", {
13637
14122
  "data-testid": "autoUpdateButtonTooltip"
13638
- }, /*#__PURE__*/React__namespace.createElement(ToggleIconButton, {
14123
+ }, /*#__PURE__*/React__namespace.createElement(ToolButton, {
13639
14124
  active: isAutoUpdating,
13640
14125
  disabled: disabled,
13641
14126
  onClick: function onClick() {
@@ -13699,7 +14184,7 @@
13699
14184
  var loopButtonPath = isLooping ? svgLoopOffPath : svgLoopPath;
13700
14185
  return /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
13701
14186
  title: loopButtonPath.title
13702
- }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(ToggleIconButton, {
14187
+ }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(ToolButton, {
13703
14188
  onClick: function onClick() {
13704
14189
  return onToggleLoop();
13705
14190
  },
@@ -13811,7 +14296,7 @@
13811
14296
  className: classes.speedButtonDiv
13812
14297
  }, /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
13813
14298
  title: "Speed"
13814
- }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(ToggleIconButton, {
14299
+ }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(ToolButton, {
13815
14300
  onClick: onClickButton,
13816
14301
  active: true,
13817
14302
  "data-testid": "speedButton"
@@ -14103,11 +14588,11 @@
14103
14588
  className: classes.timeStepDiv
14104
14589
  }, /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
14105
14590
  title: "Time step"
14106
- }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(ToggleIconButton, {
14591
+ }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(ToolButton, {
14107
14592
  active: true,
14108
14593
  onClick: onClickButton,
14109
14594
  "data-testid": "timeStepButton",
14110
- width: 58
14595
+ width: "58px"
14111
14596
  }, /*#__PURE__*/React__namespace.createElement(material.SvgIcon, null, /*#__PURE__*/React__namespace.createElement("path", {
14112
14597
  id: "lvnl598lea",
14113
14598
  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"
@@ -14209,7 +14694,7 @@
14209
14694
  var id = open ? 'simple-popover' : undefined;
14210
14695
  return /*#__PURE__*/React__namespace.createElement("div", null, /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
14211
14696
  title: "Options"
14212
- }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(ToggleIconButton, {
14697
+ }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(ToolButton, {
14213
14698
  onClick: onClickButton,
14214
14699
  "data-testid": "optionsMenuButton",
14215
14700
  active: open
@@ -14298,7 +14783,7 @@
14298
14783
  var playButtonPath = isAnimating ? pausePath : playPath;
14299
14784
  return /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
14300
14785
  title: playButtonPath.title
14301
- }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(ToggleIconButton, {
14786
+ }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(ToolButton, {
14302
14787
  onClick: onTogglePlay,
14303
14788
  disabled: isDisabled,
14304
14789
  "data-testid": "playButton",
@@ -17147,17 +17632,232 @@
17147
17632
  selectedTime: selectedTime
17148
17633
  });
17149
17634
  };
17150
- /**
17151
- * TimeSliderScaleSlider component connected to the store displaying a scale slider of the time slider
17152
- *
17153
- * Expects the following props:
17154
- * @param {string} mapId mapId: string - Id of the map
17155
- * @example
17156
- * ``` <TimeSliderScaleSliderConnect mapId={mapId} />```
17157
- */
17158
-
17635
+ /**
17636
+ * TimeSliderScaleSlider component connected to the store displaying a scale slider of the time slider
17637
+ *
17638
+ * Expects the following props:
17639
+ * @param {string} mapId mapId: string - Id of the map
17640
+ * @example
17641
+ * ``` <TimeSliderScaleSliderConnect mapId={mapId} />```
17642
+ */
17643
+
17644
+
17645
+ var TimeSliderScaleSliderConnect = connectReduxTimeSliderScaleSlider(TimeSliderScaleSliderComponent);
17646
+
17647
+ /* *
17648
+ * Licensed under the Apache License, Version 2.0 (the "License");
17649
+ * you may not use this file except in compliance with the License.
17650
+ * You may obtain a copy of the License at
17651
+ *
17652
+ * http://www.apache.org/licenses/LICENSE-2.0
17653
+ *
17654
+ * Unless required by applicable law or agreed to in writing, software
17655
+ * distributed under the License is distributed on an "AS IS" BASIS,
17656
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17657
+ * See the License for the specific language governing permissions and
17658
+ * limitations under the License.
17659
+ *
17660
+ * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
17661
+ * Copyright 2020 - Finnish Meteorological Institute (FMI)
17662
+ * */
17663
+ var connectRedux = reactRedux.connect(function (store, props) {
17664
+ return {
17665
+ isTimeSliderHoverOn: isTimeSliderHoverOn(store, props.mapId)
17666
+ };
17667
+ }, {
17668
+ toggleTimeSliderHover: toggleTimeSliderHover
17669
+ });
17670
+
17671
+ var ConnectedTimeSlider = function ConnectedTimeSlider(_a) {
17672
+ var sourceId = _a.sourceId,
17673
+ mapId = _a.mapId,
17674
+ isTimeSliderHoverOn = _a.isTimeSliderHoverOn,
17675
+ toggleTimeSliderHover = _a.toggleTimeSliderHover;
17676
+ React__namespace.useEffect(function () {
17677
+ var handleKeyDown = function handleKeyDown(event) {
17678
+ if (event.ctrlKey && event.altKey && event.key === 'h') {
17679
+ toggleTimeSliderHover({
17680
+ mapId: mapId,
17681
+ isTimeSliderHoverOn: !isTimeSliderHoverOn
17682
+ });
17683
+ }
17684
+ };
17685
+
17686
+ document.addEventListener('keydown', handleKeyDown);
17687
+ return function () {
17688
+ document.removeEventListener('keydown', handleKeyDown);
17689
+ };
17690
+ }, [mapId, isTimeSliderHoverOn, toggleTimeSliderHover]);
17691
+ return /*#__PURE__*/React__namespace.createElement(TimeSlider, {
17692
+ buttons: /*#__PURE__*/React__namespace.createElement(TimeSliderButtonsConnect, {
17693
+ mapId: mapId
17694
+ }),
17695
+ rail: /*#__PURE__*/React__namespace.createElement(TimeSliderRailConnect, {
17696
+ mapId: mapId,
17697
+ sourceId: sourceId
17698
+ }),
17699
+ scaleSlider: /*#__PURE__*/React__namespace.createElement(TimeSliderScaleSliderConnect, {
17700
+ mapId: mapId
17701
+ }),
17702
+ legend: /*#__PURE__*/React__namespace.createElement(TimeSliderLegendConnect$1, {
17703
+ mapId: mapId,
17704
+ sourceId: sourceId
17705
+ })
17706
+ });
17707
+ };
17708
+ /**
17709
+ * TimeSlider component with components connected to the store displaying the time slider
17710
+ *
17711
+ * Expects the following props:
17712
+ * @param {string} mapId mapId: string - Id of the map
17713
+ * @param {string} sourceId sourceId: string - Source Id of the timeslider
17714
+ * @example
17715
+ * ``` <TimeSliderConnect sourceId="timeslider-1" mapId={mapId} />```
17716
+ */
17717
+
17718
+
17719
+ var TimeSliderConnect = connectRedux(ConnectedTimeSlider);
17720
+
17721
+ /* *
17722
+ * Licensed under the Apache License, Version 2.0 (the "License");
17723
+ * you may not use this file except in compliance with the License.
17724
+ * You may obtain a copy of the License at
17725
+ *
17726
+ * http://www.apache.org/licenses/LICENSE-2.0
17727
+ *
17728
+ * Unless required by applicable law or agreed to in writing, software
17729
+ * distributed under the License is distributed on an "AS IS" BASIS,
17730
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17731
+ * See the License for the specific language governing permissions and
17732
+ * limitations under the License.
17733
+ *
17734
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
17735
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
17736
+ * */
17737
+ var DWD = {
17738
+ name: 'DWD',
17739
+ url: 'https://maps.dwd.de/geoserver/ows?',
17740
+ id: 'dwd'
17741
+ };
17742
+ var nationaalgeoregister = {
17743
+ name: 'nationaalgeoregister.nl',
17744
+ url: 'https://geodata.nationaalgeoregister.nl/cbsgebiedsindelingen/wms?request=GetCapabilities&service=wms',
17745
+ id: 'nationaalgeoregister'
17746
+ };
17747
+ var KNMImsgcpp = {
17748
+ name: 'KNMImsgcpp',
17749
+ url: 'https://adaguc-server-msg-cpp-portal.pmc.knmi.cloud/wms?DATASET=msgrt&',
17750
+ id: 'msgcpp-ogc-realtime'
17751
+ };
17752
+ var HeiGit = {
17753
+ name: 'HeiGit',
17754
+ url: 'https://maps.heigit.org/osm-wms/service',
17755
+ id: 'HeiGit-osm-wms'
17756
+ };
17757
+ var ArcGisCanvas = {
17758
+ name: 'ArcGisCanvas',
17759
+ url: 'https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/',
17760
+ id: 'ArcGisCanvas'
17761
+ };
17762
+ var KNMIgeoservicesBaselayers = {
17763
+ name: 'KNMIgeoservicesBaselayers',
17764
+ url: 'https://geoservices.knmi.nl/wms?DATASET=baselayers&',
17765
+ id: 'KNMIgeoservicesBaselayers'
17766
+ };
17767
+ var KNMIgeoservicesRadar = {
17768
+ name: 'KNMIgeoservicesRadar',
17769
+ url: 'https://geoservices.knmi.nl/wms?dataset=RADAR&',
17770
+ id: 'KNMIgeoservicesRadar'
17771
+ };
17772
+ var KNMIgeoservicesObs = {
17773
+ name: 'KNMIgeoservicesObs',
17774
+ url: 'https://geoservices.knmi.nl/adagucserver?dataset=OBS&service=WMS&',
17775
+ id: 'KNMIgeoservicesObs'
17776
+ };
17777
+ var KNMIgeoservicesKlimaatAtlas = {
17778
+ name: 'KNMIgeoservicesKlimaatAtlas',
17779
+ url: 'https://geoservices.knmi.nl/wms?DATASET=gsie-dataset&SERVICE=WMS&',
17780
+ id: 'KNMIgeoservicesKlimaatAtlas'
17781
+ };
17782
+ var KNMIgeoservicesHarmonie = {
17783
+ name: 'KNMIgeoservicesHarmonie',
17784
+ url: 'https://geoservices.knmi.nl/wms?DATASET=HARM_N25&',
17785
+ id: 'KNMIgeoservicesKliKNMIgeoservicesHarmoniemaatAtlas'
17786
+ };
17787
+ var KNMIgeoservicesHarmonieMLService = {
17788
+ name: 'KNMI Harmonie ML',
17789
+ url: 'https://geoservices.knmi.nl/wms?DATASET=HARM_N25_ML&SERVICE=WMS&',
17790
+ id: 'harmonieML'
17791
+ };
17792
+ var MetNorwayService = {
17793
+ name: 'MetNorwayService',
17794
+ url: 'https://wms-e1.geoweb.met.no/wms?',
17795
+ id: 'MetNorwayService'
17796
+ };
17797
+ var FMIopenwms = {
17798
+ name: 'FMIopenwms',
17799
+ url: 'https://openwms.fmi.fi/geoserver/wms?',
17800
+ id: 'FMIopenwms'
17801
+ };
17802
+ var DWDObservations = {
17803
+ name: 'DWDObservations',
17804
+ url: 'https://maps.dwd.de/geoserver/dwd/Wetter_Beobachtungen/ows?',
17805
+ id: 'DWDObservations'
17806
+ };
17807
+ var DWDWarnings = {
17808
+ name: 'DWDWarnings',
17809
+ url: 'https://maps.dwd.de/geoserver/dwd/Warnungen_Gemeinden_vereinigt/ows?',
17810
+ id: 'DWDWarnings'
17811
+ };
17812
+ var DWDWXProdukt = {
17813
+ name: 'DWDWXProdukt',
17814
+ url: 'https://maps.dwd.de/geoserver/dwd/WX-Produkt/ows?',
17815
+ id: 'DWDWXProdukt'
17816
+ };
17817
+ var EUMETSAT = {
17818
+ name: 'EUMETSAT',
17819
+ url: 'https://view.eumetsat.int/geoserver/wms?',
17820
+ id: 'EUMETSAT'
17821
+ };
17822
+ var eumetviewEUMETSAT = {
17823
+ name: 'eumetviewEUMETSAT',
17824
+ url: 'https://eumetview.eumetsat.int/geoserv/wms?',
17825
+ id: 'eumetviewEUMETSAT'
17826
+ };
17827
+ var ECMWFPublicService = {
17828
+ name: 'ECMWF',
17829
+ url: 'https://apps.ecmwf.int/wms/?token=public',
17830
+ id: 'ecmwf'
17831
+ };
17832
+ var MeteoCanada = {
17833
+ name: 'Meteo Canada',
17834
+ url: 'https://geo.weather.gc.ca/geomet/?lang=en&',
17835
+ id: 'MeteoCanada'
17836
+ };
17159
17837
 
17160
- var TimeSliderScaleSliderConnect = connectReduxTimeSliderScaleSlider(TimeSliderScaleSliderComponent);
17838
+ var publicServices = /*#__PURE__*/Object.freeze({
17839
+ __proto__: null,
17840
+ DWD: DWD,
17841
+ nationaalgeoregister: nationaalgeoregister,
17842
+ KNMImsgcpp: KNMImsgcpp,
17843
+ HeiGit: HeiGit,
17844
+ ArcGisCanvas: ArcGisCanvas,
17845
+ KNMIgeoservicesBaselayers: KNMIgeoservicesBaselayers,
17846
+ KNMIgeoservicesRadar: KNMIgeoservicesRadar,
17847
+ KNMIgeoservicesObs: KNMIgeoservicesObs,
17848
+ KNMIgeoservicesKlimaatAtlas: KNMIgeoservicesKlimaatAtlas,
17849
+ KNMIgeoservicesHarmonie: KNMIgeoservicesHarmonie,
17850
+ KNMIgeoservicesHarmonieMLService: KNMIgeoservicesHarmonieMLService,
17851
+ MetNorwayService: MetNorwayService,
17852
+ FMIopenwms: FMIopenwms,
17853
+ DWDObservations: DWDObservations,
17854
+ DWDWarnings: DWDWarnings,
17855
+ DWDWXProdukt: DWDWXProdukt,
17856
+ EUMETSAT: EUMETSAT,
17857
+ eumetviewEUMETSAT: eumetviewEUMETSAT,
17858
+ ECMWFPublicService: ECMWFPublicService,
17859
+ MeteoCanada: MeteoCanada
17860
+ });
17161
17861
 
17162
17862
  /* *
17163
17863
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -17172,66 +17872,390 @@
17172
17872
  * See the License for the specific language governing permissions and
17173
17873
  * limitations under the License.
17174
17874
  *
17175
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
17176
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
17875
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
17876
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
17177
17877
  * */
17178
- var connectRedux = reactRedux.connect(function (store, props) {
17179
- return {
17180
- isTimeSliderHoverOn: isTimeSliderHoverOn(store, props.mapId)
17181
- };
17182
- }, {
17183
- toggleTimeSliderHover: toggleTimeSliderHover
17184
- });
17878
+ var baseLayer$1 = {
17879
+ name: 'arcGisSat',
17880
+ title: 'arcGisSat',
17881
+ type: 'twms',
17882
+ layerType: LayerType.baseLayer,
17883
+ enabled: true,
17884
+ id: generateLayerId()
17885
+ }; // Base Layers List
17886
+
17887
+ var baseLayerGrey$1 = {
17888
+ id: generateLayerId(),
17889
+ name: 'WorldMap_Light_Grey_Canvas',
17890
+ type: 'twms',
17891
+ layerType: LayerType.baseLayer
17892
+ };
17893
+ var baseLayerOpenStreetMapNL$1 = {
17894
+ id: 'base-layer-2',
17895
+ name: 'OpenStreetMap_NL',
17896
+ type: 'twms',
17897
+ layerType: LayerType.baseLayer,
17898
+ enabled: true
17899
+ };
17900
+ var baseLayerArcGisCanvas$1 = {
17901
+ service: ArcGisCanvas.url,
17902
+ id: generateLayerId(),
17903
+ name: 'arcGisCanvas',
17904
+ type: 'twms',
17905
+ enabled: true,
17906
+ layerType: LayerType.baseLayer
17907
+ };
17908
+ var baseLayerWorldMap$1 = {
17909
+ id: generateLayerId(),
17910
+ name: 'WorldMap',
17911
+ type: 'twms',
17912
+ layerType: LayerType.baseLayer,
17913
+ enabled: true
17914
+ };
17915
+ var baseLayerHeiGit = {
17916
+ service: HeiGit.url,
17917
+ id: generateLayerId(),
17918
+ name: 'osm_auto:all',
17919
+ layerType: LayerType.baseLayer
17920
+ }; // Over Layers List
17921
+
17922
+ var overLayer$1 = {
17923
+ service: KNMIgeoservicesBaselayers.url,
17924
+ name: 'countryborders',
17925
+ format: 'image/png',
17926
+ enabled: true,
17927
+ id: generateLayerId(),
17928
+ layerType: LayerType.overLayer
17929
+ }; // KNMI msgcpp List
17930
+
17931
+ var msgCppLayer = {
17932
+ // doesn't work with https
17933
+ service: KNMImsgcpp.url,
17934
+ name: 'lwe_precipitation_rate',
17935
+ format: 'image/png',
17936
+ enabled: true,
17937
+ style: 'precip-transparent/nearest',
17938
+ id: generateLayerId(),
17939
+ layerType: LayerType.mapLayer
17940
+ }; // Nederlandse Nationaal Georegister Layers list
17941
+
17942
+ var veiligheidsRegiosGebiedsIndelingenLabels = {
17943
+ service: nationaalgeoregister.url,
17944
+ name: 'cbsgebiedsindelingen:cbs_veiligheidsregio_2020_labelpoint',
17945
+ style: 'CBS_Label',
17946
+ enabled: false,
17947
+ layerType: LayerType.mapLayer
17948
+ };
17949
+ var veiligheidsRegiosGebiedsIndelingen = {
17950
+ service: nationaalgeoregister.url,
17951
+ name: 'cbsgebiedsindelingen:cbs_veiligheidsregio_2020_gegeneraliseerd',
17952
+ style: 'CBS_Gebiedsindeling',
17953
+ enabled: false,
17954
+ layerType: LayerType.mapLayer
17955
+ }; // KNMI Geoservices Layers List
17956
+
17957
+ var radarLayer$1 = {
17958
+ service: KNMIgeoservicesRadar.url,
17959
+ name: 'RAD_NL25_PCP_CM',
17960
+ format: 'image/png',
17961
+ enabled: true,
17962
+ style: 'radar/nearest',
17963
+ id: generateLayerId(),
17964
+ layerType: LayerType.mapLayer
17965
+ };
17966
+ var radarLayerWithError = {
17967
+ service: KNMIgeoservicesRadar.url,
17968
+ name: 'radarLayer',
17969
+ format: 'image/png',
17970
+ enabled: true,
17971
+ style: 'knmiradar/nearest',
17972
+ id: generateLayerId(),
17973
+ layerType: LayerType.mapLayer
17974
+ };
17975
+ var obsAirTemperature = {
17976
+ service: KNMIgeoservicesObs.url,
17977
+ name: '10M/ta',
17978
+ id: generateLayerId(),
17979
+ layerType: LayerType.mapLayer
17980
+ };
17981
+ var obsWind = {
17982
+ service: KNMIgeoservicesObs.url,
17983
+ name: '10M/wind',
17984
+ id: generateLayerId(),
17985
+ layerType: LayerType.mapLayer
17986
+ };
17987
+ var obsAirPressureAtSeaLevel = {
17988
+ service: KNMIgeoservicesObs.url,
17989
+ name: '10M/pp',
17990
+ id: generateLayerId(),
17991
+ layerType: LayerType.mapLayer
17992
+ };
17993
+ var obsRelativeHumidity = {
17994
+ service: KNMIgeoservicesObs.url,
17995
+ name: '10M/rh',
17996
+ id: generateLayerId(),
17997
+ layerType: LayerType.mapLayer
17998
+ };
17999
+ var obsGlobalSolarRadiation = {
18000
+ service: KNMIgeoservicesObs.url,
18001
+ name: '10M/qg',
18002
+ id: generateLayerId(),
18003
+ layerType: LayerType.mapLayer
18004
+ };
18005
+ var obsPrecipitationIntensityPWS = {
18006
+ service: KNMIgeoservicesObs.url,
18007
+ name: '10M/pg',
18008
+ id: generateLayerId(),
18009
+ layerType: LayerType.mapLayer
18010
+ };
18011
+ var harmonieRelativeHumidityPl = {
18012
+ service: KNMIgeoservicesHarmonie.url,
18013
+ name: 'relative_humidity__at_pl',
18014
+ id: generateLayerId(),
18015
+ layerType: LayerType.mapLayer,
18016
+ enabled: true
18017
+ };
18018
+ var harmonieWindPl = {
18019
+ service: KNMIgeoservicesHarmonie.url,
18020
+ name: 'wind__at_pl',
18021
+ id: generateLayerId(),
18022
+ layerType: LayerType.mapLayer,
18023
+ enabled: true
18024
+ };
18025
+ var harmonieAirTemperature = {
18026
+ service: KNMIgeoservicesHarmonie.url,
18027
+ name: 'air_temperature__at_2m',
18028
+ id: generateLayerId(),
18029
+ layerType: LayerType.mapLayer,
18030
+ enabled: true
18031
+ };
18032
+ var harmoniePrecipitation = {
18033
+ service: KNMIgeoservicesHarmonie.url,
18034
+ name: 'precipitation_flux',
18035
+ id: generateLayerId(),
18036
+ layerType: LayerType.mapLayer,
18037
+ enabled: true
18038
+ };
18039
+ var harmoniePressure = {
18040
+ service: KNMIgeoservicesHarmonie.url,
18041
+ name: 'air_pressure_at_sea_level',
18042
+ id: generateLayerId(),
18043
+ layerType: LayerType.mapLayer,
18044
+ enabled: true
18045
+ };
18046
+ var harmonieWindFlags = {
18047
+ service: KNMIgeoservicesHarmonie.url,
18048
+ name: 'wind__at_10m',
18049
+ enabled: true,
18050
+ id: generateLayerId(),
18051
+ layerType: LayerType.mapLayer
18052
+ };
18053
+ var klimaatAtlasTG3 = {
18054
+ service: KNMIgeoservicesKlimaatAtlas.url,
18055
+ name: 'TG3',
18056
+ enabled: true,
18057
+ id: generateLayerId(),
18058
+ layerType: LayerType.mapLayer
18059
+ }; // DWD Layers List
18060
+
18061
+ var dwdWarningLayer = {
18062
+ service: DWDWarnings.url,
18063
+ name: 'Warnungen_Gemeinden_vereinigt',
18064
+ format: 'image/png',
18065
+ // style: 'warnungen_gemeinden_vereinigt_event_seamless_param',
18066
+ enabled: true,
18067
+ id: generateLayerId(),
18068
+ layerType: LayerType.mapLayer
18069
+ };
18070
+ var dwdRadarLayer = {
18071
+ service: DWDWXProdukt.url,
18072
+ name: 'WX-Produkt',
18073
+ format: 'image/png',
18074
+ enabled: true,
18075
+ id: generateLayerId(),
18076
+ layerType: LayerType.mapLayer
18077
+ }; // this needs authentication to work
17185
18078
 
17186
- var ConnectedTimeSlider = function ConnectedTimeSlider(_a) {
17187
- var sourceId = _a.sourceId,
17188
- mapId = _a.mapId,
17189
- isTimeSliderHoverOn = _a.isTimeSliderHoverOn,
17190
- toggleTimeSliderHover = _a.toggleTimeSliderHover;
17191
- React__namespace.useEffect(function () {
17192
- var handleKeyDown = function handleKeyDown(event) {
17193
- if (event.ctrlKey && event.altKey && event.key === 'h') {
17194
- toggleTimeSliderHover({
17195
- mapId: mapId,
17196
- isTimeSliderHoverOn: !isTimeSliderHoverOn
17197
- });
17198
- }
17199
- };
18079
+ var dwdObservationsWetterLayer = {
18080
+ service: DWDObservations.url,
18081
+ name: 'Wetter_Beobachtungen',
18082
+ style: 'Wetter_Symbole',
18083
+ format: 'image/png',
18084
+ enabled: true,
18085
+ id: generateLayerId(),
18086
+ layerType: LayerType.mapLayer // headers: [{ name: 'Authorization', value: 'Basic ...' }]
17200
18087
 
17201
- document.addEventListener('keydown', handleKeyDown);
17202
- return function () {
17203
- document.removeEventListener('keydown', handleKeyDown);
17204
- };
17205
- }, [mapId, isTimeSliderHoverOn, toggleTimeSliderHover]);
17206
- return /*#__PURE__*/React__namespace.createElement(TimeSlider, {
17207
- buttons: /*#__PURE__*/React__namespace.createElement(TimeSliderButtonsConnect, {
17208
- mapId: mapId
17209
- }),
17210
- rail: /*#__PURE__*/React__namespace.createElement(TimeSliderRailConnect, {
17211
- mapId: mapId,
17212
- sourceId: sourceId
17213
- }),
17214
- scaleSlider: /*#__PURE__*/React__namespace.createElement(TimeSliderScaleSliderConnect, {
17215
- mapId: mapId
17216
- }),
17217
- legend: /*#__PURE__*/React__namespace.createElement(TimeSliderLegendConnect$1, {
17218
- mapId: mapId,
17219
- sourceId: sourceId
17220
- })
17221
- });
17222
18088
  };
17223
- /**
17224
- * TimeSlider component with components connected to the store displaying the time slider
17225
- *
17226
- * Expects the following props:
17227
- * @param {string} mapId mapId: string - Id of the map
17228
- * @param {string} sourceId sourceId: string - Source Id of the timeslider
17229
- * @example
17230
- * ``` <TimeSliderConnect sourceId="timeslider-1" mapId={mapId} />```
17231
- */
18089
+ var dwdObservationsWetterLayerWithHeader = {
18090
+ service: DWDObservations.url,
18091
+ name: 'Wetter_Beobachtungen',
18092
+ style: 'Wetter_Symbole',
18093
+ format: 'image/png',
18094
+ enabled: true,
18095
+ id: generateLayerId(),
18096
+ layerType: LayerType.mapLayer,
18097
+ headers: [{
18098
+ name: 'authorization',
18099
+ value: 'Basic aW50cmFuZXQtdXNlcjpDQnMjMTEh'
18100
+ }]
18101
+ }; // this needs authentication to work
17232
18102
 
18103
+ var dwdObservationsWindLayer = {
18104
+ service: DWDObservations.url,
18105
+ name: 'Wetter_Beobachtungen',
18106
+ style: 'Wetter_Wind',
18107
+ format: 'image/png',
18108
+ enabled: true,
18109
+ id: generateLayerId(),
18110
+ layerType: LayerType.mapLayer
18111
+ }; // FMI open wms Layers List
17233
18112
 
17234
- var TimeSliderConnect = connectRedux(ConnectedTimeSlider);
18113
+ var FMITemp = {
18114
+ service: FMIopenwms.url,
18115
+ name: 'temperature-forecast',
18116
+ format: 'image/png',
18117
+ enabled: true,
18118
+ id: generateLayerId(),
18119
+ layerType: LayerType.mapLayer
18120
+ }; // Met Norway Layers List
18121
+
18122
+ var MetNoTemp = {
18123
+ service: MetNorwayService.url,
18124
+ name: 'thredds_meps_latest_wind',
18125
+ format: 'image/png',
18126
+ enabled: true,
18127
+ id: generateLayerId(),
18128
+ layerType: LayerType.mapLayer
18129
+ };
18130
+ var metNorwayWind1 = {
18131
+ service: MetNorwayService.url,
18132
+ name: 'thredds_meps_latest_wind',
18133
+ format: 'image/png',
18134
+ enabled: true,
18135
+ id: generateLayerId(),
18136
+ layerType: LayerType.mapLayer
18137
+ };
18138
+ var metNorwayWind2 = {
18139
+ service: MetNorwayService.url,
18140
+ name: 'thredds_aromearctic_extracted_t',
18141
+ format: 'image/png',
18142
+ enabled: true,
18143
+ id: generateLayerId(),
18144
+ layerType: LayerType.mapLayer
18145
+ };
18146
+ var metNorwayWind3 = {
18147
+ service: MetNorwayService.url,
18148
+ name: 'thredds_nk800_temperature',
18149
+ format: 'image/png',
18150
+ enabled: true,
18151
+ id: generateLayerId(),
18152
+ layerType: LayerType.mapLayer
18153
+ };
18154
+ var metNorwayLatestT = {
18155
+ service: MetNorwayService.url,
18156
+ name: 'thredds_meps_latest_t',
18157
+ format: 'image/png',
18158
+ enabled: true,
18159
+ id: generateLayerId(),
18160
+ layerType: LayerType.mapLayer
18161
+ };
18162
+ var metNorwaySalinaty = {
18163
+ service: MetNorwayService.url,
18164
+ name: 'thredds_barents_2_5km_1h_salinity',
18165
+ format: 'image/png',
18166
+ enabled: true,
18167
+ id: generateLayerId(),
18168
+ layerType: LayerType.mapLayer
18169
+ };
18170
+ var msgFesEUMETSAT = {
18171
+ service: EUMETSAT.url,
18172
+ name: 'msg_fes:rgb_eview',
18173
+ enabled: true,
18174
+ id: generateLayerId(),
18175
+ layerType: LayerType.mapLayer
18176
+ };
18177
+ var msgNaturalenhncdEUMETSAT = {
18178
+ service: eumetviewEUMETSAT.url,
18179
+ name: 'meteosat:msg_naturalenhncd',
18180
+ enabled: true,
18181
+ id: generateLayerId(),
18182
+ layerType: LayerType.mapLayer
18183
+ };
18184
+ var msgAshEUMETSAT = {
18185
+ service: eumetviewEUMETSAT.url,
18186
+ name: 'meteosat:msg_ash',
18187
+ enabled: true,
18188
+ id: generateLayerId(),
18189
+ layerType: LayerType.mapLayer
18190
+ };
18191
+ var msgCthEUMETSAT = {
18192
+ service: eumetviewEUMETSAT.url,
18193
+ name: 'meteosat:msg_cth',
18194
+ enabled: true,
18195
+ id: generateLayerId(),
18196
+ layerType: LayerType.mapLayer
18197
+ };
18198
+ var msgFogEUMETSAT = {
18199
+ service: eumetviewEUMETSAT.url,
18200
+ name: 'meteosat:msg_fog',
18201
+ enabled: true,
18202
+ id: generateLayerId(),
18203
+ layerType: LayerType.mapLayer
18204
+ };
18205
+ var msgNaturalEUMETSAT = {
18206
+ service: eumetviewEUMETSAT.url,
18207
+ name: 'meteosat:msg_natural',
18208
+ enabled: true,
18209
+ id: generateLayerId(),
18210
+ layerType: LayerType.mapLayer
18211
+ };
18212
+
18213
+ var publicLayers = /*#__PURE__*/Object.freeze({
18214
+ __proto__: null,
18215
+ baseLayer: baseLayer$1,
18216
+ baseLayerGrey: baseLayerGrey$1,
18217
+ baseLayerOpenStreetMapNL: baseLayerOpenStreetMapNL$1,
18218
+ baseLayerArcGisCanvas: baseLayerArcGisCanvas$1,
18219
+ baseLayerWorldMap: baseLayerWorldMap$1,
18220
+ baseLayerHeiGit: baseLayerHeiGit,
18221
+ overLayer: overLayer$1,
18222
+ msgCppLayer: msgCppLayer,
18223
+ veiligheidsRegiosGebiedsIndelingenLabels: veiligheidsRegiosGebiedsIndelingenLabels,
18224
+ veiligheidsRegiosGebiedsIndelingen: veiligheidsRegiosGebiedsIndelingen,
18225
+ radarLayer: radarLayer$1,
18226
+ radarLayerWithError: radarLayerWithError,
18227
+ obsAirTemperature: obsAirTemperature,
18228
+ obsWind: obsWind,
18229
+ obsAirPressureAtSeaLevel: obsAirPressureAtSeaLevel,
18230
+ obsRelativeHumidity: obsRelativeHumidity,
18231
+ obsGlobalSolarRadiation: obsGlobalSolarRadiation,
18232
+ obsPrecipitationIntensityPWS: obsPrecipitationIntensityPWS,
18233
+ harmonieRelativeHumidityPl: harmonieRelativeHumidityPl,
18234
+ harmonieWindPl: harmonieWindPl,
18235
+ harmonieAirTemperature: harmonieAirTemperature,
18236
+ harmoniePrecipitation: harmoniePrecipitation,
18237
+ harmoniePressure: harmoniePressure,
18238
+ harmonieWindFlags: harmonieWindFlags,
18239
+ klimaatAtlasTG3: klimaatAtlasTG3,
18240
+ dwdWarningLayer: dwdWarningLayer,
18241
+ dwdRadarLayer: dwdRadarLayer,
18242
+ dwdObservationsWetterLayer: dwdObservationsWetterLayer,
18243
+ dwdObservationsWetterLayerWithHeader: dwdObservationsWetterLayerWithHeader,
18244
+ dwdObservationsWindLayer: dwdObservationsWindLayer,
18245
+ FMITemp: FMITemp,
18246
+ MetNoTemp: MetNoTemp,
18247
+ metNorwayWind1: metNorwayWind1,
18248
+ metNorwayWind2: metNorwayWind2,
18249
+ metNorwayWind3: metNorwayWind3,
18250
+ metNorwayLatestT: metNorwayLatestT,
18251
+ metNorwaySalinaty: metNorwaySalinaty,
18252
+ msgFesEUMETSAT: msgFesEUMETSAT,
18253
+ msgNaturalenhncdEUMETSAT: msgNaturalenhncdEUMETSAT,
18254
+ msgAshEUMETSAT: msgAshEUMETSAT,
18255
+ msgCthEUMETSAT: msgCthEUMETSAT,
18256
+ msgFogEUMETSAT: msgFogEUMETSAT,
18257
+ msgNaturalEUMETSAT: msgNaturalEUMETSAT
18258
+ });
17235
18259
 
17236
18260
  /* *
17237
18261
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -21505,10 +22529,10 @@
21505
22529
  var defaultBbox = {
21506
22530
  srs: 'EPSG:3857',
21507
22531
  bbox: {
21508
- left: -450651.2255879827,
21509
- bottom: 6490531.093143953,
21510
- right: 1428345.8183648037,
21511
- top: 7438773.776232235
22532
+ left: 58703.6377,
22533
+ bottom: 6408480.4514,
22534
+ right: 3967387.5161,
22535
+ top: 11520588.9031
21512
22536
  }
21513
22537
  };
21514
22538
  var ConfigurableConnectedMap = function ConfigurableConnectedMap(_a) {
@@ -21600,6 +22624,14 @@
21600
22624
  mapId: mapId,
21601
22625
  animationDelay: getSpeedDelay(animationPayload.speed)
21602
22626
  }));
22627
+ } // If animation interval set, set the timestep auto property to false
22628
+
22629
+
22630
+ if (animationPayload && animationPayload.interval) {
22631
+ dispatch(toggleTimestepAuto({
22632
+ mapId: mapId,
22633
+ timestepAuto: false
22634
+ }));
21603
22635
  }
21604
22636
  } // eslint-disable-next-line react-hooks/exhaustive-deps
21605
22637
 
@@ -21662,93 +22694,35 @@
21662
22694
  }
21663
22695
  };
21664
22696
  });
21665
-
21666
- var makeIndexedMapId = function makeIndexedMapId(baseId, mapNo) {
21667
- return baseId + "_" + mapNo;
21668
- };
21669
-
21670
22697
  var MultiMapViewConnect = function MultiMapViewConnect(_a) {
21671
22698
  var maps = _a.maps,
21672
22699
  rows = _a.rows,
21673
22700
  cols = _a.cols,
21674
- _b = _a.syncArea,
21675
- syncArea = _b === void 0 ? true : _b,
21676
- _c = _a.syncTime,
21677
- syncTime = _c === void 0 ? true : _c,
21678
- _d = _a.showTimeSlider,
21679
- showTimeSlider = _d === void 0 ? true : _d,
21680
- _e = _a.showZoomControls,
21681
- showZoomControls = _e === void 0 ? true : _e;
21682
- var id = React__default["default"].useRef(generateMapId()).current;
22701
+ _b = _a.showTimeSlider,
22702
+ showTimeSlider = _b === void 0 ? true : _b,
22703
+ _c = _a.showZoomControls,
22704
+ showZoomControls = _c === void 0 ? true : _c;
21683
22705
  var classes = useStyles$3();
21684
22706
  var dispatch = reactRedux.useDispatch();
21685
- var syncGroupAddGroup$1 = React__default["default"].useCallback(function (payload) {
21686
- return dispatch(syncGroupAddGroup(payload));
21687
- }, [dispatch]);
21688
22707
  var syncGroupAddTarget$1 = React__default["default"].useCallback(function (payload) {
21689
22708
  return dispatch(syncGroupAddTarget(payload));
21690
22709
  }, [dispatch]);
21691
22710
  React__default["default"].useEffect(function () {
21692
- /* Add sync groups */
21693
- syncGroupAddGroup$1({
21694
- groupId: "Time_" + id,
21695
- title: "Time group for " + id,
21696
- type: SYNCGROUPS_TYPE_SETTIME
21697
- });
21698
- syncGroupAddGroup$1({
21699
- groupId: "Area_" + id,
21700
- title: "Area group for " + id,
21701
- type: SYNCGROUPS_TYPE_SETBBOX
21702
- });
21703
- /* Add this target to the group for area and time */
21704
-
21705
- syncGroupAddTarget$1({
21706
- groupId: "Time_" + id,
21707
- targetId: id,
21708
- linked: syncTime
21709
- });
21710
- syncGroupAddTarget$1({
21711
- groupId: "Area_" + id,
21712
- targetId: id,
21713
- linked: syncArea
21714
- });
21715
- /* Also add all tiles to the syncgroup for area and time */
21716
-
21717
- maps.forEach(function (map, mapIndex) {
21718
- syncGroupAddTarget$1({
21719
- groupId: "Time_" + id,
21720
- targetId: makeIndexedMapId(id, mapIndex),
21721
- linked: syncTime
21722
- });
21723
- syncGroupAddTarget$1({
21724
- groupId: "Area_" + id,
21725
- targetId: makeIndexedMapId(id, mapIndex),
21726
- linked: syncArea
21727
- });
21728
- /* Layer sync groups */
21729
-
21730
- var layerSyncGroup = map.layerSyncGroupId;
21731
-
21732
- if (layerSyncGroup) {
21733
- /* Always add the group, it does not harm if it is already defined previousely */
21734
- syncGroupAddGroup$1({
21735
- groupId: layerSyncGroup,
21736
- title: "Layer group for " + id,
21737
- type: SYNCGROUPS_TYPE_SETLAYERACTIONS
21738
- });
22711
+ maps.forEach(function (map) {
22712
+ map.syncGroupsIds && map.syncGroupsIds.forEach(function (syncGroupsId) {
21739
22713
  syncGroupAddTarget$1({
21740
- groupId: layerSyncGroup,
21741
- targetId: makeIndexedMapId(id, mapIndex),
22714
+ groupId: syncGroupsId,
22715
+ targetId: map.id,
21742
22716
  linked: true
21743
22717
  });
21744
- }
22718
+ });
21745
22719
  });
21746
- }, [id, maps, syncArea, syncGroupAddGroup$1, syncGroupAddTarget$1, syncTime]);
22720
+ }, [maps, syncGroupAddTarget$1]);
21747
22721
  var mapStyle = {
21748
22722
  width: Math.round(100 / cols) + "%",
21749
22723
  height: Math.round(100 / rows) + "%"
21750
22724
  };
21751
- var firstMapId = makeIndexedMapId(id, 0);
22725
+ var firstMapId = maps[0].id;
21752
22726
  return /*#__PURE__*/React__default["default"].createElement("div", {
21753
22727
  style: {
21754
22728
  height: '100%',
@@ -21768,10 +22742,10 @@
21768
22742
  width: '100%'
21769
22743
  }
21770
22744
  }, showTimeSlider && /*#__PURE__*/React__default["default"].createElement(TimeSliderConnect, {
21771
- sourceId: id,
22745
+ sourceId: firstMapId,
21772
22746
  mapId: firstMapId
21773
22747
  })), maps.map(function (map, mapIndex) {
21774
- var mapId = makeIndexedMapId(id, mapIndex);
22748
+ var mapId = map.id;
21775
22749
  return /*#__PURE__*/React__default["default"].createElement("div", {
21776
22750
  className: classes.box,
21777
22751
  key: mapId,
@@ -21827,9 +22801,11 @@
21827
22801
  /* Helper to make a map layer preset */
21828
22802
 
21829
22803
 
21830
- var makeMapPreset = function makeMapPreset(timeIncrement, uniqueId, referenceTime, layers, layerSyncGroupId, displayLayerManagerButtonInMap, displayDimensionSelectButtonInMap) {
22804
+ var makeMapPreset = function makeMapPreset(timeIncrement, uniqueId, referenceTime, layers, syncGroupsIds, displayLayerManagerButtonInMap, displayDimensionSelectButtonInMap) {
21831
22805
  var mapTime = moment__default["default"].utc(referenceTime).add(timeIncrement, 'h').format('YYYY-MM-DDTHH:mm:ss[Z]');
21832
22806
  return {
22807
+ id: uniqueId,
22808
+ syncGroupsIds: syncGroupsIds,
21833
22809
  title: "FC +" + timeIncrement,
21834
22810
  displayTimeInMap: true,
21835
22811
  bbox: {
@@ -21852,14 +22828,13 @@
21852
22828
  });
21853
22829
  }),
21854
22830
  displayLayerManagerButtonInMap: displayLayerManagerButtonInMap,
21855
- displayDimensionSelectButtonInMap: displayDimensionSelectButtonInMap,
21856
- layerSyncGroupId: layerSyncGroupId
22831
+ displayDimensionSelectButtonInMap: displayDimensionSelectButtonInMap
21857
22832
  };
21858
22833
  };
21859
22834
  var HarmRefTimePreset = function HarmRefTimePreset(_a) {
21860
22835
  var _b = _a.layers,
21861
22836
  layers = _b === void 0 ? [harmoniePressure, harmonieWindFlags, harmoniePrecipitation] : _b,
21862
- layerSyncGroupId = _a.layerSyncGroupId;
22837
+ syncGroupsIds = _a.syncGroupsIds;
21863
22838
  /* Get latest reference time for this layer */
21864
22839
 
21865
22840
  var latestReferenceTime = useGetLatestReferenceTime(layers[0]);
@@ -21870,7 +22845,7 @@
21870
22845
  /* Add the layers with the different map times */
21871
22846
 
21872
22847
  var maps = timeIncrements.map(function (increment, index) {
21873
- return makeMapPreset(increment, "harm_precip" + increment, latestReferenceTime, layers, layerSyncGroupId, index === 0 || !layerSyncGroupId, index === 0 || !layerSyncGroupId);
22848
+ return makeMapPreset(increment, "harm_precip" + increment, latestReferenceTime, layers, syncGroupsIds, index === 0 || !syncGroupsIds, index === 0 || !syncGroupsIds);
21874
22849
  });
21875
22850
  return /*#__PURE__*/React__namespace.createElement(MultiMapViewConnect, {
21876
22851
  rows: 3,
@@ -21926,13 +22901,21 @@
21926
22901
  var layers = _a.layers;
21927
22902
  /* Get all the reference times for this layer */
21928
22903
 
21929
- var referenceTimes = useGetReferenceTimes(layers.toprow);
22904
+ var referenceTimes = useGetReferenceTimes(layers.topRow);
21930
22905
  if (referenceTimes.length === 0) return /*#__PURE__*/React__namespace.createElement("div", null, "Loading...");
21931
22906
  /* Helper to make a map layer prest */
21932
22907
 
21933
- var makeMapPreset = function makeMapPreset(referenceTime, uniqueId, layer, layerSyncGroupId, col) {
22908
+ var makeMapPreset = function makeMapPreset(referenceTime, uniqueId, layer, syncGroupsIds, col) {
21934
22909
  return {
22910
+ id: uniqueId,
21935
22911
  title: "Harmonie run " + ("" + referenceTime.substring(8, 13).replace('T', ' / ')),
22912
+ bbox: {
22913
+ left: -450651.2255879827,
22914
+ bottom: 6490531.093143953,
22915
+ right: 1428345.8183648037,
22916
+ top: 7438773.776232235
22917
+ },
22918
+ srs: 'EPSG:3857',
21936
22919
  layers: [__assign(__assign({}, layer), {
21937
22920
  id: uniqueId,
21938
22921
  dimensions: [{
@@ -21940,9 +22923,9 @@
21940
22923
  currentValue: referenceTime
21941
22924
  }]
21942
22925
  })],
21943
- layerSyncGroupId: layerSyncGroupId,
21944
- displayLayerManagerButtonInMap: col === 0 || !layerSyncGroupId,
21945
- displayDimensionSelectButtonInMap: col === 0 || !layerSyncGroupId
22926
+ syncGroupsIds: syncGroupsIds,
22927
+ displayLayerManagerButtonInMap: col === 0 || !syncGroupsIds,
22928
+ displayDimensionSelectButtonInMap: col === 0 || !syncGroupsIds
21946
22929
  };
21947
22930
  };
21948
22931
  /* Make the preset */
@@ -21953,14 +22936,14 @@
21953
22936
 
21954
22937
  var mapsTemperature = __spreadArray([], __read(Array(nCols))).map(function (_, index) {
21955
22938
  var refTime = referenceTimes[referenceTimes.length - nCols + index];
21956
- return makeMapPreset(refTime, "harm_air" + index, layers.toprow, layers.toprowGroup, index);
22939
+ return makeMapPreset(refTime, "harm_air" + index, layers.topRow, layers.topRowSyncGroups, index);
21957
22940
  });
21958
22941
  /* Add the harmonie precipitation layers with the different referencetimes */
21959
22942
 
21960
22943
 
21961
22944
  var mapsPrecipitation = __spreadArray([], __read(Array(nCols))).map(function (_, index) {
21962
22945
  var refTime = referenceTimes[referenceTimes.length - nCols + index];
21963
- return makeMapPreset(refTime, "harm_precip" + index, layers.bottomrow, layers.bottomrowGroup, index);
22946
+ return makeMapPreset(refTime, "harm_precip" + index, layers.bottomRow, layers.bottomRowSyncGroups, index);
21964
22947
  });
21965
22948
 
21966
22949
  var maps = mapsTemperature.concat(mapsPrecipitation);
@@ -22113,10 +23096,10 @@
22113
23096
  {
22114
23097
  var _c = initialProps,
22115
23098
  layers = _c.layers,
22116
- layerSyncGroupId = _c.layerSyncGroupId;
23099
+ syncGroupsIds = _c.syncGroupsIds;
22117
23100
  return /*#__PURE__*/React__default["default"].createElement(HarmRefTimePreset, {
22118
23101
  layers: layers || [],
22119
- layerSyncGroupId: layerSyncGroupId,
23102
+ syncGroupsIds: syncGroupsIds,
22120
23103
  "data-testid": "coreHarmonieRefTimePreset"
22121
23104
  });
22122
23105
  }
@@ -22125,7 +23108,8 @@
22125
23108
  {
22126
23109
  var _d = initialProps,
22127
23110
  mapPreset_1 = _d.mapPreset,
22128
- shouldShowZoomControls = _d.shouldShowZoomControls;
23111
+ shouldShowZoomControls = _d.shouldShowZoomControls,
23112
+ syncGroupsIds_1 = _d.syncGroupsIds;
22129
23113
  if (!mapPreset_1 || mapPreset_1.length === 0) return null;
22130
23114
  return /*#__PURE__*/React__default["default"].createElement(MultiMapViewConnect, {
22131
23115
  rows: 2,
@@ -22134,6 +23118,7 @@
22134
23118
  maps: mapPreset_1.map(function (p, i) {
22135
23119
  return {
22136
23120
  id: id + "_" + i,
23121
+ syncGroupsIds: syncGroupsIds_1,
22137
23122
  layers: p.layers || [],
22138
23123
  activeLayerId: p.activeLayerId || undefined,
22139
23124
  baseLayer: p.baseLayer || undefined,
@@ -22528,9 +23513,7 @@
22528
23513
  });
22529
23514
  };
22530
23515
 
22531
- return /*#__PURE__*/React__namespace.createElement("div", {
22532
- "data-testid": "syncGroupViewer"
22533
- }, /*#__PURE__*/React__namespace.createElement(shared.ToolContainerDraggable, {
23516
+ return /*#__PURE__*/React__namespace.createElement(shared.ToolContainerDraggable, {
22534
23517
  title: "Sync",
22535
23518
  startSize: {
22536
23519
  width: 349,
@@ -22538,7 +23521,8 @@
22538
23521
  },
22539
23522
  headerSize: "medium",
22540
23523
  isOpen: isOpen,
22541
- onClose: onClose
23524
+ onClose: onClose,
23525
+ "data-testid": "syncGroupViewer"
22542
23526
  }, /*#__PURE__*/React__namespace.createElement("div", null, /*#__PURE__*/React__namespace.createElement(SyncGroupList, {
22543
23527
  viewStateData: syncGroupViewState.zoompane,
22544
23528
  title: "ZoomPane",
@@ -22575,7 +23559,7 @@
22575
23559
  removeGroup: function removeGroup(groupId) {
22576
23560
  return _removeGroup('level', groupId);
22577
23561
  }
22578
- }))));
23562
+ })));
22579
23563
  };
22580
23564
 
22581
23565
  /* *
@@ -22843,11 +23827,19 @@
22843
23827
  exports.coreModuleConfig = coreModuleConfig;
22844
23828
  exports.dateFormat = dateFormat;
22845
23829
  exports.defaultConfigurations = defaultConfigurations;
23830
+ exports.filterBaseLayers = filterBaseLayers;
23831
+ exports.filterBbox = filterBbox;
23832
+ exports.filterDimensions = filterDimensions;
23833
+ exports.filterMapLayers = filterMapLayers;
23834
+ exports.filterMapPresets = filterMapPresets;
22846
23835
  exports.filterNonTimeDimensions = filterNonTimeDimensions;
23836
+ exports.filterServices = filterServices;
23837
+ exports.filterSrs = filterSrs;
22847
23838
  exports.generateLayerId = generateLayerId;
22848
23839
  exports.generateMapId = generateMapId;
22849
23840
  exports.generateTimesliderId = generateTimesliderId;
22850
23841
  exports.getFirstTimeStepForLayerId = getFirstTimeStepForLayerId;
23842
+ exports.getInitialPresets = getInitialPresets;
22851
23843
  exports.getLastTimeStepForLayerId = getLastTimeStepForLayerId;
22852
23844
  exports.getNextTimeStepForLayerId = getNextTimeStepForLayerId;
22853
23845
  exports.getPreviousTimeStepForLayerId = getPreviousTimeStepForLayerId;