@opengeoweb/store 10.2.1-spike-ol.3 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.esm.js CHANGED
@@ -1,33 +1,321 @@
1
- import { createSlice, createSelector, createAction, createListenerMiddleware, isAnyOf, createEntityAdapter, combineReducers, configureStore } from '@reduxjs/toolkit';
1
+ import { createSlice, createSelector, createAction, createListenerMiddleware, isAnyOf, createEntityAdapter, combineReducers, configureStore, compose, EnhancerArray } from '@reduxjs/toolkit';
2
2
  import { isEqual, isEmpty, compact } from 'lodash';
3
3
  import { dateUtils, PROJECTION, defaultDelay } from '@opengeoweb/shared';
4
- import { webmapUtils, parseISO8601IntervalToDateInterval, LayerType, getWMJSMapById, webmapTestSettings, WMLayer, getWMSRequests, handleDateUtilsISOString, isProjectionSupported, queryWMSLayers, getWMLayerById, WMInvalidDateValues } from '@opengeoweb/webmap';
4
+ import { webmapUtils, parseISO8601IntervalToDateInterval, LayerType, getWMJSMapById, webmapTestSettings, WMLayer, getWMSRequests, handleDateUtilsISOString, isProjectionSupported, queryWMSLayers } from '@opengeoweb/webmap';
5
5
  import { defaultTimeStep, defaultTimeSpan, defaultAnimationDelayAtStart, defaultSecondsPerPx, roundWithTimeStep, getSpeedDelay } from '@opengeoweb/timeslider';
6
6
  import { produce } from 'immer';
7
- import { getGeoJson, moveFeature, createInterSections, getLastEmptyFeatureIndex, defaultLayers, addSelectionTypeToGeoJSON, getFeatureCollection, emptyGeoJSON, defaultIntersectionStyleProperties, isOpenLayersEnabled } from '@opengeoweb/webmap-react';
7
+ import { getGeoJson, moveFeature, createInterSections, getLastEmptyFeatureIndex, defaultLayers, addSelectionTypeToGeoJSON, getFeatureCollection, emptyGeoJSON, defaultIntersectionStyleProperties } from '@opengeoweb/webmap-react';
8
8
  export { defaultLayers } from '@opengeoweb/webmap-react';
9
9
  import { useSelector, useDispatch } from 'react-redux';
10
10
  import { useCallback, useEffect } from 'react';
11
11
  import * as turf from '@turf/turf';
12
12
  import { metronome } from '@opengeoweb/metronome';
13
- import { View, Observable } from 'ol';
14
- import { boundingExtent, getCenter } from 'ol/extent';
13
+
14
+ /* *
15
+ * Licensed under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License.
17
+ * You may obtain a copy of the License at
18
+ *
19
+ * http://www.apache.org/licenses/LICENSE-2.0
20
+ *
21
+ * Unless required by applicable law or agreed to in writing, software
22
+ * distributed under the License is distributed on an "AS IS" BASIS,
23
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ * See the License for the specific language governing permissions and
25
+ * limitations under the License.
26
+ *
27
+ * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
28
+ * Copyright 2020 - Finnish Meteorological Institute (FMI)
29
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
30
+ * */
31
+ var initialState$6 = {
32
+ byId: {},
33
+ allIds: []
34
+ };
35
+ var slice$7 = createSlice({
36
+ initialState: initialState$6,
37
+ name: 'serviceReducer',
38
+ reducers: {
39
+ serviceSetLayers: function serviceSetLayers(draft, action) {
40
+ var id = action.payload.id;
41
+ draft.byId[id] = Object.assign({}, action.payload);
42
+ if (!draft.allIds.includes(id)) {
43
+ draft.allIds.push(id);
44
+ }
45
+ },
46
+ mapStoreRemoveService: function mapStoreRemoveService(draft, action) {
47
+ var foundServiceIndex = draft.allIds.findIndex(function (id) {
48
+ return draft.byId[id].serviceUrl === action.payload.serviceUrl;
49
+ });
50
+ if (foundServiceIndex !== -1) {
51
+ var serviceId = draft.allIds[foundServiceIndex];
52
+ draft.allIds = draft.allIds.filter(function (id) {
53
+ return id !== serviceId;
54
+ });
55
+ delete draft.byId[serviceId];
56
+ }
57
+ },
58
+ fetchInitialServices: function fetchInitialServices(
59
+ // eslint-disable-next-line no-unused-vars
60
+ draft,
61
+ // eslint-disable-next-line no-unused-vars
62
+ action) {
63
+ // This block is intentionally left empty so no code should be put in here
64
+ }
65
+ }
66
+ });
67
+ var serviceReducer = slice$7.reducer,
68
+ serviceActions = slice$7.actions;
69
+
70
+ /* *
71
+ * Licensed under the Apache License, Version 2.0 (the "License");
72
+ * you may not use this file except in compliance with the License.
73
+ * You may obtain a copy of the License at
74
+ *
75
+ * http://www.apache.org/licenses/LICENSE-2.0
76
+ *
77
+ * Unless required by applicable law or agreed to in writing, software
78
+ * distributed under the License is distributed on an "AS IS" BASIS,
79
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
80
+ * See the License for the specific language governing permissions and
81
+ * limitations under the License.
82
+ *
83
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
84
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
85
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
86
+ * */
87
+ var selectorMemoizationOptions = {
88
+ memoizeOptions: {
89
+ maxSize: 1000,
90
+ resultEqualityCheck: isEqual
91
+ }
92
+ };
93
+
94
+ var utils$3 = /*#__PURE__*/Object.freeze({
95
+ __proto__: null,
96
+ selectorMemoizationOptions: selectorMemoizationOptions
97
+ });
98
+
99
+ /* *
100
+ * Licensed under the Apache License, Version 2.0 (the "License");
101
+ * you may not use this file except in compliance with the License.
102
+ * You may obtain a copy of the License at
103
+ *
104
+ * http://www.apache.org/licenses/LICENSE-2.0
105
+ *
106
+ * Unless required by applicable law or agreed to in writing, software
107
+ * distributed under the License is distributed on an "AS IS" BASIS,
108
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
109
+ * See the License for the specific language governing permissions and
110
+ * limitations under the License.
111
+ *
112
+ * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
113
+ * Copyright 2020 - Finnish Meteorological Institute (FMI)
114
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
115
+ * */
116
+ var getServicesStore = function getServicesStore(store) {
117
+ return store == null ? void 0 : store.services;
118
+ };
119
+ /**
120
+ * Retrieves all serviceIds
121
+ *
122
+ * Example: serviceIds = getServiceIds(store)
123
+ * @param {object} store store: object - object from which the service state will be extracted
124
+ * @returns {array} returnType: array - an array of all serviceIds
125
+ */
126
+ var getServiceIds = createSelector(getServicesStore, function (serviceState) {
127
+ var _serviceState$allIds;
128
+ return (_serviceState$allIds = serviceState == null ? void 0 : serviceState.allIds) != null ? _serviceState$allIds : [];
129
+ }, selectorMemoizationOptions);
130
+ /**
131
+ * Gets map services
132
+ *
133
+ * Example: services = getServices(store)
134
+ * @param {object} store store: object - Store object
135
+ * @returns {object} returnType: ServiceState
136
+ */
137
+ var getServices = createSelector(getServicesStore, function (store) {
138
+ var _store$byId;
139
+ return (_store$byId = store == null ? void 0 : store.byId) != null ? _store$byId : {};
140
+ }, selectorMemoizationOptions);
141
+ /**
142
+ * Gets the service object by its url
143
+ *
144
+ * Example: service = getServiceByName(store, 'serviceName')
145
+ * @param {object} store store: object - Store object
146
+ * @returns {ReduxService} returnType: Service
147
+ */
148
+ var getServiceByUrl = createSelector(getServicesStore, function (state, serviceUrl) {
149
+ return serviceUrl;
150
+ }, function (serviceState, serviceUrl) {
151
+ if (!serviceState) {
152
+ return undefined;
153
+ }
154
+ return Object.values(serviceState.byId).find(function (service) {
155
+ return service.serviceUrl === serviceUrl;
156
+ });
157
+ }, selectorMemoizationOptions);
158
+ /**
159
+ * Gets the layer from the store using the serviceUrl and layerName
160
+ *
161
+ * Example: layers = getLayersFromService(store, 'https://geoservices.knmi.nl/...')
162
+ * @param {object} store store: object - object from which the layers state will be extracted
163
+ * @param {string} serviceUrl serviceUrl: string - Url of the service where the layer belongs to
164
+ * @returns {array} returnType: ServiceLayer[] - All layers within the service object.
165
+ */
166
+ var getLayersFromServiceSelector = createSelector(getServiceByUrl, function (service) {
167
+ var _service$layers;
168
+ return (_service$layers = service == null ? void 0 : service.layers) != null ? _service$layers : [];
169
+ }, selectorMemoizationOptions);
170
+ /**
171
+ * Gets the layer from the store using the serviceUrl and layerName
172
+ *
173
+ * Example: layer = getLayerFromService(store, 'https://geoservices.knmi.nl/...', 'radar')
174
+ * @param {object} store store: object - The application store
175
+ * @param {string} serviceUrl serviceUrl: string - Url of the service where the layer belongs to
176
+ * @param {string} layerName layerName: string - Name of the layer in the service
177
+ * @returns {ServiceLayer} returnType: ServiceLayer - The layer from the service object.
178
+ */
179
+ var getLayerFromService = createSelector(getLayersFromServiceSelector, function (_store, _serviceUrl, layerName) {
180
+ return layerName;
181
+ }, function (layers, layerName) {
182
+ return layers.find(function (serviceLayer) {
183
+ return serviceLayer.name === layerName;
184
+ });
185
+ }, selectorMemoizationOptions);
186
+ /**
187
+ * Gets the layers stylelist from the servicestore using the serviceUrl and layerName
188
+ *
189
+ * Example: layerStyles = getLayerStyles(store, layerService, layerName);
190
+ * @param {object} store store: object - store from which the layers state will be extracted
191
+ * @param {string} serviceUrl serviceUrl: string - Url of the service where the layer belongs to
192
+ * @param {string} layerName layerName: string - Name of the layer in the service
193
+ * @returns {array} returnType: Style[] - array containing layer styles
194
+ */
195
+ var getLayerStyles = createSelector(getLayerFromService, function (layer) {
196
+ var _layer$styles;
197
+ return (_layer$styles = layer == null ? void 0 : layer.styles) != null ? _layer$styles : [];
198
+ }, selectorMemoizationOptions);
199
+
200
+ var selectors$7 = /*#__PURE__*/Object.freeze({
201
+ __proto__: null,
202
+ getLayerFromService: getLayerFromService,
203
+ getLayerStyles: getLayerStyles,
204
+ getLayersFromServiceSelector: getLayersFromServiceSelector,
205
+ getServiceByUrl: getServiceByUrl,
206
+ getServiceIds: getServiceIds,
207
+ getServices: getServices
208
+ });
209
+
210
+ /* *
211
+ * Licensed under the Apache License, Version 2.0 (the "License");
212
+ * you may not use this file except in compliance with the License.
213
+ * You may obtain a copy of the License at
214
+ *
215
+ * http://www.apache.org/licenses/LICENSE-2.0
216
+ *
217
+ * Unless required by applicable law or agreed to in writing, software
218
+ * distributed under the License is distributed on an "AS IS" BASIS,
219
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
220
+ * See the License for the specific language governing permissions and
221
+ * limitations under the License.
222
+ *
223
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
224
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
225
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
226
+ * */
227
+
228
+ var types$5 = /*#__PURE__*/Object.freeze({
229
+ __proto__: null
230
+ });
231
+
232
+ /* *
233
+ * Licensed under the Apache License, Version 2.0 (the "License");
234
+ * you may not use this file except in compliance with the License.
235
+ * You may obtain a copy of the License at
236
+ *
237
+ * http://www.apache.org/licenses/LICENSE-2.0
238
+ *
239
+ * Unless required by applicable law or agreed to in writing, software
240
+ * distributed under the License is distributed on an "AS IS" BASIS,
241
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
242
+ * See the License for the specific language governing permissions and
243
+ * limitations under the License.
244
+ *
245
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
246
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
247
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
248
+ * */
249
+ var getUserAddedServices = function getUserAddedServices() {
250
+ try {
251
+ var storedString = window.localStorage.getItem('userAddedServices');
252
+ var parsedData = JSON.parse(storedString);
253
+ if (parsedData && typeof parsedData === 'object') {
254
+ return Object.entries(parsedData).reduce(function (userServices, _ref) {
255
+ var _ref2;
256
+ var serviceUrl = _ref[0],
257
+ service = _ref[1];
258
+ return Object.assign({}, userServices, isNoIdService(service) ? (_ref2 = {}, _ref2[serviceUrl] = Object.assign({}, service, {
259
+ scope: 'user'
260
+ }), _ref2) : {});
261
+ }, {});
262
+ }
263
+ } catch (e) {
264
+ console.error('Unable to read services from localStorage: ', e);
265
+ }
266
+ return {};
267
+ };
268
+ var setUserAddedServices = function setUserAddedServices(services) {
269
+ try {
270
+ window.localStorage.setItem('userAddedServices', JSON.stringify(services));
271
+ } catch (e) {
272
+ console.error('Unable to write services to localStorage: ', e);
273
+ }
274
+ };
275
+ var isNoIdService = function isNoIdService(param) {
276
+ var serviceParam = param;
277
+ return !!(serviceParam != null && serviceParam.name && serviceParam != null && serviceParam.url);
278
+ };
279
+
280
+ /* *
281
+ * Licensed under the Apache License, Version 2.0 (the "License");
282
+ * you may not use this file except in compliance with the License.
283
+ * You may obtain a copy of the License at
284
+ *
285
+ * http://www.apache.org/licenses/LICENSE-2.0
286
+ *
287
+ * Unless required by applicable law or agreed to in writing, software
288
+ * distributed under the License is distributed on an "AS IS" BASIS,
289
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
290
+ * See the License for the specific language governing permissions and
291
+ * limitations under the License.
292
+ *
293
+ * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
294
+ * Copyright 2020 - Finnish Meteorological Institute (FMI)
295
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
296
+ * */
297
+ var AnimationLength;
298
+ (function (AnimationLength) {
299
+ AnimationLength[AnimationLength["Minutes15"] = 15] = "Minutes15";
300
+ AnimationLength[AnimationLength["Minutes30"] = 30] = "Minutes30";
301
+ AnimationLength[AnimationLength["Hours1"] = 60] = "Hours1";
302
+ AnimationLength[AnimationLength["Hours2"] = 120] = "Hours2";
303
+ AnimationLength[AnimationLength["Hours3"] = 180] = "Hours3";
304
+ AnimationLength[AnimationLength["Hours6"] = 360] = "Hours6";
305
+ AnimationLength[AnimationLength["Hours12"] = 720] = "Hours12";
306
+ AnimationLength[AnimationLength["Hours24"] = 1440] = "Hours24";
307
+ })(AnimationLength || (AnimationLength = {}));
308
+
309
+ var types$4 = /*#__PURE__*/Object.freeze({
310
+ __proto__: null,
311
+ get AnimationLength () { return AnimationLength; }
312
+ });
15
313
 
16
314
  function _arrayLikeToArray(r, a) {
17
315
  (null == a || a > r.length) && (a = r.length);
18
316
  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
19
317
  return n;
20
318
  }
21
- function _arrayWithHoles(r) {
22
- if (Array.isArray(r)) return r;
23
- }
24
- function _arrayWithoutHoles(r) {
25
- if (Array.isArray(r)) return _arrayLikeToArray(r);
26
- }
27
- function _assertThisInitialized(e) {
28
- if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
29
- return e;
30
- }
31
319
  function asyncGeneratorStep(n, t, e, r, o, a, c) {
32
320
  try {
33
321
  var i = n[a](c),
@@ -53,171 +341,22 @@ function _asyncToGenerator(n) {
53
341
  });
54
342
  };
55
343
  }
56
- function _callSuper(t, o, e) {
57
- return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, [], _getPrototypeOf(t).constructor) : o.apply(t, e));
58
- }
59
- function _classCallCheck(a, n) {
60
- if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
61
- }
62
- function _defineProperties(e, r) {
63
- for (var t = 0; t < r.length; t++) {
64
- var o = r[t];
65
- o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o);
66
- }
67
- }
68
- function _createClass(e, r, t) {
69
- return r && _defineProperties(e.prototype, r), Object.defineProperty(e, "prototype", {
70
- writable: !1
71
- }), e;
72
- }
73
- function _createForOfIteratorHelper(r, e) {
344
+ function _createForOfIteratorHelperLoose(r, e) {
74
345
  var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
75
- if (!t) {
76
- if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e ) {
77
- t && (r = t);
78
- var n = 0,
79
- F = function () {};
80
- return {
81
- s: F,
82
- n: function () {
83
- return n >= r.length ? {
84
- done: !0
85
- } : {
86
- done: !1,
87
- value: r[n++]
88
- };
89
- },
90
- e: function (r) {
91
- throw r;
92
- },
93
- f: F
94
- };
95
- }
96
- throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
97
- }
98
- var o,
99
- a = !0,
100
- u = !1;
101
- return {
102
- s: function () {
103
- t = t.call(r);
104
- },
105
- n: function () {
106
- var r = t.next();
107
- return a = r.done, r;
108
- },
109
- e: function (r) {
110
- u = !0, o = r;
111
- },
112
- f: function () {
113
- try {
114
- a || null == t.return || t.return();
115
- } finally {
116
- if (u) throw o;
117
- }
118
- }
119
- };
120
- }
121
- function _defineProperty(e, r, t) {
122
- return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
123
- value: t,
124
- enumerable: !0,
125
- configurable: !0,
126
- writable: !0
127
- }) : e[r] = t, e;
128
- }
129
- function _getPrototypeOf(t) {
130
- return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
131
- return t.__proto__ || Object.getPrototypeOf(t);
132
- }, _getPrototypeOf(t);
133
- }
134
- function _inherits(t, e) {
135
- if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
136
- t.prototype = Object.create(e && e.prototype, {
137
- constructor: {
138
- value: t,
139
- writable: !0,
140
- configurable: !0
141
- }
142
- }), Object.defineProperty(t, "prototype", {
143
- writable: !1
144
- }), e && _setPrototypeOf(t, e);
145
- }
146
- function _isNativeReflectConstruct() {
147
- try {
148
- var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
149
- } catch (t) {}
150
- return (_isNativeReflectConstruct = function () {
151
- return !!t;
152
- })();
153
- }
154
- function _iterableToArray(r) {
155
- if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
156
- }
157
- function _iterableToArrayLimit(r, l) {
158
- var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
159
- if (null != t) {
160
- var e,
161
- n,
162
- i,
163
- u,
164
- a = [],
165
- f = !0,
166
- o = !1;
167
- try {
168
- if (i = (t = t.call(r)).next, 0 === l) {
169
- if (Object(t) !== t) return;
170
- f = !1;
171
- } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
172
- } catch (r) {
173
- o = !0, n = r;
174
- } finally {
175
- try {
176
- if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
177
- } finally {
178
- if (o) throw n;
179
- }
180
- }
181
- return a;
182
- }
183
- }
184
- function _nonIterableRest() {
185
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
186
- }
187
- function _nonIterableSpread() {
188
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
189
- }
190
- function ownKeys(e, r) {
191
- var t = Object.keys(e);
192
- if (Object.getOwnPropertySymbols) {
193
- var o = Object.getOwnPropertySymbols(e);
194
- r && (o = o.filter(function (r) {
195
- return Object.getOwnPropertyDescriptor(e, r).enumerable;
196
- })), t.push.apply(t, o);
197
- }
198
- return t;
199
- }
200
- function _objectSpread2(e) {
201
- for (var r = 1; r < arguments.length; r++) {
202
- var t = null != arguments[r] ? arguments[r] : {};
203
- r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
204
- _defineProperty(e, r, t[r]);
205
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
206
- Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
207
- });
346
+ if (t) return (t = t.call(r)).next.bind(t);
347
+ if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e ) {
348
+ t && (r = t);
349
+ var o = 0;
350
+ return function () {
351
+ return o >= r.length ? {
352
+ done: !0
353
+ } : {
354
+ done: !1,
355
+ value: r[o++]
356
+ };
357
+ };
208
358
  }
209
- return e;
210
- }
211
- function _objectWithoutProperties(e, t) {
212
- if (null == e) return {};
213
- var o,
214
- r,
215
- i = _objectWithoutPropertiesLoose(e, t);
216
- if (Object.getOwnPropertySymbols) {
217
- var n = Object.getOwnPropertySymbols(e);
218
- for (r = 0; r < n.length; r++) o = n[r], t.indexOf(o) >= 0 || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
219
- }
220
- return i;
359
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
221
360
  }
222
361
  function _objectWithoutPropertiesLoose(r, e) {
223
362
  if (null == r) return {};
@@ -228,11 +367,6 @@ function _objectWithoutPropertiesLoose(r, e) {
228
367
  }
229
368
  return t;
230
369
  }
231
- function _possibleConstructorReturn(t, e) {
232
- if (e && ("object" == typeof e || "function" == typeof e)) return e;
233
- if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
234
- return _assertThisInitialized(t);
235
- }
236
370
  function _regeneratorRuntime() {
237
371
  _regeneratorRuntime = function () {
238
372
  return e;
@@ -517,347 +651,30 @@ function _regeneratorRuntime() {
517
651
  if (r.tryLoc === t) {
518
652
  var n = r.completion;
519
653
  if ("throw" === n.type) {
520
- var o = n.arg;
521
- resetTryEntry(r);
522
- }
523
- return o;
524
- }
525
- }
526
- throw Error("illegal catch attempt");
527
- },
528
- delegateYield: function (e, r, n) {
529
- return this.delegate = {
530
- iterator: values(e),
531
- resultName: r,
532
- nextLoc: n
533
- }, "next" === this.method && (this.arg = t), y;
534
- }
535
- }, e;
536
- }
537
- function _setPrototypeOf(t, e) {
538
- return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
539
- return t.__proto__ = e, t;
540
- }, _setPrototypeOf(t, e);
541
- }
542
- function _slicedToArray(r, e) {
543
- return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
544
- }
545
- function _toConsumableArray(r) {
546
- return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
547
- }
548
- function _toPrimitive(t, r) {
549
- if ("object" != typeof t || !t) return t;
550
- var e = t[Symbol.toPrimitive];
551
- if (void 0 !== e) {
552
- var i = e.call(t, r || "default");
553
- if ("object" != typeof i) return i;
554
- throw new TypeError("@@toPrimitive must return a primitive value.");
555
- }
556
- return ("string" === r ? String : Number)(t);
557
- }
558
- function _toPropertyKey(t) {
559
- var i = _toPrimitive(t, "string");
560
- return "symbol" == typeof i ? i : i + "";
561
- }
562
- function _typeof(o) {
563
- "@babel/helpers - typeof";
564
-
565
- return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
566
- return typeof o;
567
- } : function (o) {
568
- return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
569
- }, _typeof(o);
570
- }
571
- function _unsupportedIterableToArray(r, a) {
572
- if (r) {
573
- if ("string" == typeof r) return _arrayLikeToArray(r, a);
574
- var t = {}.toString.call(r).slice(8, -1);
575
- return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
576
- }
577
- }
578
-
579
- var initialState$6 = {
580
- byId: {},
581
- allIds: []
582
- };
583
- var slice$7 = createSlice({
584
- initialState: initialState$6,
585
- name: 'serviceReducer',
586
- reducers: {
587
- serviceSetLayers: function serviceSetLayers(draft, action) {
588
- var id = action.payload.id;
589
- draft.byId[id] = _objectSpread2({}, action.payload);
590
- if (!draft.allIds.includes(id)) {
591
- draft.allIds.push(id);
592
- }
593
- },
594
- mapStoreRemoveService: function mapStoreRemoveService(draft, action) {
595
- var foundServiceIndex = draft.allIds.findIndex(function (id) {
596
- return draft.byId[id].serviceUrl === action.payload.serviceUrl;
597
- });
598
- if (foundServiceIndex !== -1) {
599
- var serviceId = draft.allIds[foundServiceIndex];
600
- draft.allIds = draft.allIds.filter(function (id) {
601
- return id !== serviceId;
602
- });
603
- delete draft.byId[serviceId];
604
- }
605
- },
606
- fetchInitialServices: function fetchInitialServices(
607
- // eslint-disable-next-line no-unused-vars
608
- draft,
609
- // eslint-disable-next-line no-unused-vars
610
- action) {
611
- // This block is intentionally left empty so no code should be put in here
612
- }
613
- }
614
- });
615
- var serviceReducer = slice$7.reducer,
616
- serviceActions = slice$7.actions;
617
-
618
- /* *
619
- * Licensed under the Apache License, Version 2.0 (the "License");
620
- * you may not use this file except in compliance with the License.
621
- * You may obtain a copy of the License at
622
- *
623
- * http://www.apache.org/licenses/LICENSE-2.0
624
- *
625
- * Unless required by applicable law or agreed to in writing, software
626
- * distributed under the License is distributed on an "AS IS" BASIS,
627
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
628
- * See the License for the specific language governing permissions and
629
- * limitations under the License.
630
- *
631
- * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
632
- * Copyright 2022 - Finnish Meteorological Institute (FMI)
633
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
634
- * */
635
- var selectorMemoizationOptions = {
636
- memoizeOptions: {
637
- maxSize: 1000,
638
- resultEqualityCheck: isEqual
639
- }
640
- };
641
-
642
- var utils$3 = /*#__PURE__*/Object.freeze({
643
- __proto__: null,
644
- selectorMemoizationOptions: selectorMemoizationOptions
645
- });
646
-
647
- /* *
648
- * Licensed under the Apache License, Version 2.0 (the "License");
649
- * you may not use this file except in compliance with the License.
650
- * You may obtain a copy of the License at
651
- *
652
- * http://www.apache.org/licenses/LICENSE-2.0
653
- *
654
- * Unless required by applicable law or agreed to in writing, software
655
- * distributed under the License is distributed on an "AS IS" BASIS,
656
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
657
- * See the License for the specific language governing permissions and
658
- * limitations under the License.
659
- *
660
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
661
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
662
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
663
- * */
664
- var getServicesStore = function getServicesStore(store) {
665
- return store === null || store === void 0 ? void 0 : store.services;
666
- };
667
- /**
668
- * Retrieves all serviceIds
669
- *
670
- * Example: serviceIds = getServiceIds(store)
671
- * @param {object} store store: object - object from which the service state will be extracted
672
- * @returns {array} returnType: array - an array of all serviceIds
673
- */
674
- var getServiceIds = createSelector(getServicesStore, function (serviceState) {
675
- var _serviceState$allIds;
676
- return (_serviceState$allIds = serviceState === null || serviceState === void 0 ? void 0 : serviceState.allIds) !== null && _serviceState$allIds !== void 0 ? _serviceState$allIds : [];
677
- }, selectorMemoizationOptions);
678
- /**
679
- * Gets map services
680
- *
681
- * Example: services = getServices(store)
682
- * @param {object} store store: object - Store object
683
- * @returns {object} returnType: ServiceState
684
- */
685
- var getServices = createSelector(getServicesStore, function (store) {
686
- var _store$byId;
687
- return (_store$byId = store === null || store === void 0 ? void 0 : store.byId) !== null && _store$byId !== void 0 ? _store$byId : {};
688
- }, selectorMemoizationOptions);
689
- /**
690
- * Gets the service object by its url
691
- *
692
- * Example: service = getServiceByName(store, 'serviceName')
693
- * @param {object} store store: object - Store object
694
- * @returns {ReduxService} returnType: Service
695
- */
696
- var getServiceByUrl = createSelector(getServicesStore, function (state, serviceUrl) {
697
- return serviceUrl;
698
- }, function (serviceState, serviceUrl) {
699
- if (!serviceState) {
700
- return undefined;
701
- }
702
- return Object.values(serviceState.byId).find(function (service) {
703
- return service.serviceUrl === serviceUrl;
704
- });
705
- }, selectorMemoizationOptions);
706
- /**
707
- * Gets the layer from the store using the serviceUrl and layerName
708
- *
709
- * Example: layers = getLayersFromService(store, 'https://geoservices.knmi.nl/...')
710
- * @param {object} store store: object - object from which the layers state will be extracted
711
- * @param {string} serviceUrl serviceUrl: string - Url of the service where the layer belongs to
712
- * @returns {array} returnType: ServiceLayer[] - All layers within the service object.
713
- */
714
- var getLayersFromServiceSelector = createSelector(getServiceByUrl, function (service) {
715
- var _service$layers;
716
- return (_service$layers = service === null || service === void 0 ? void 0 : service.layers) !== null && _service$layers !== void 0 ? _service$layers : [];
717
- }, selectorMemoizationOptions);
718
- /**
719
- * Gets the layer from the store using the serviceUrl and layerName
720
- *
721
- * Example: layer = getLayerFromService(store, 'https://geoservices.knmi.nl/...', 'radar')
722
- * @param {object} store store: object - The application store
723
- * @param {string} serviceUrl serviceUrl: string - Url of the service where the layer belongs to
724
- * @param {string} layerName layerName: string - Name of the layer in the service
725
- * @returns {ServiceLayer} returnType: ServiceLayer - The layer from the service object.
726
- */
727
- var getLayerFromService = createSelector(getLayersFromServiceSelector, function (_store, _serviceUrl, layerName) {
728
- return layerName;
729
- }, function (layers, layerName) {
730
- return layers.find(function (serviceLayer) {
731
- return serviceLayer.name === layerName;
732
- });
733
- }, selectorMemoizationOptions);
734
- /**
735
- * Gets the layers stylelist from the servicestore using the serviceUrl and layerName
736
- *
737
- * Example: layerStyles = getLayerStyles(store, layerService, layerName);
738
- * @param {object} store store: object - store from which the layers state will be extracted
739
- * @param {string} serviceUrl serviceUrl: string - Url of the service where the layer belongs to
740
- * @param {string} layerName layerName: string - Name of the layer in the service
741
- * @returns {array} returnType: Style[] - array containing layer styles
742
- */
743
- var getLayerStyles = createSelector(getLayerFromService, function (layer) {
744
- var _layer$styles;
745
- return (_layer$styles = layer === null || layer === void 0 ? void 0 : layer.styles) !== null && _layer$styles !== void 0 ? _layer$styles : [];
746
- }, selectorMemoizationOptions);
747
-
748
- var selectors$7 = /*#__PURE__*/Object.freeze({
749
- __proto__: null,
750
- getLayerFromService: getLayerFromService,
751
- getLayerStyles: getLayerStyles,
752
- getLayersFromServiceSelector: getLayersFromServiceSelector,
753
- getServiceByUrl: getServiceByUrl,
754
- getServiceIds: getServiceIds,
755
- getServices: getServices
756
- });
757
-
758
- /* *
759
- * Licensed under the Apache License, Version 2.0 (the "License");
760
- * you may not use this file except in compliance with the License.
761
- * You may obtain a copy of the License at
762
- *
763
- * http://www.apache.org/licenses/LICENSE-2.0
764
- *
765
- * Unless required by applicable law or agreed to in writing, software
766
- * distributed under the License is distributed on an "AS IS" BASIS,
767
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
768
- * See the License for the specific language governing permissions and
769
- * limitations under the License.
770
- *
771
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
772
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
773
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
774
- * */
775
-
776
- var types$5 = /*#__PURE__*/Object.freeze({
777
- __proto__: null
778
- });
779
-
780
- /* *
781
- * Licensed under the Apache License, Version 2.0 (the "License");
782
- * you may not use this file except in compliance with the License.
783
- * You may obtain a copy of the License at
784
- *
785
- * http://www.apache.org/licenses/LICENSE-2.0
786
- *
787
- * Unless required by applicable law or agreed to in writing, software
788
- * distributed under the License is distributed on an "AS IS" BASIS,
789
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
790
- * See the License for the specific language governing permissions and
791
- * limitations under the License.
792
- *
793
- * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
794
- * Copyright 2022 - Finnish Meteorological Institute (FMI)
795
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
796
- * */
797
- var getUserAddedServices = function getUserAddedServices() {
798
- try {
799
- var storedString = window.localStorage.getItem('userAddedServices');
800
- var parsedData = JSON.parse(storedString);
801
- if (parsedData && _typeof(parsedData) === 'object') {
802
- return Object.entries(parsedData).reduce(function (userServices, _ref) {
803
- var _ref2 = _slicedToArray(_ref, 2),
804
- serviceUrl = _ref2[0],
805
- service = _ref2[1];
806
- return _objectSpread2(_objectSpread2({}, userServices), isNoIdService(service) ? _defineProperty({}, serviceUrl, _objectSpread2(_objectSpread2({}, service), {}, {
807
- scope: 'user'
808
- })) : {});
809
- }, {});
654
+ var o = n.arg;
655
+ resetTryEntry(r);
656
+ }
657
+ return o;
658
+ }
659
+ }
660
+ throw Error("illegal catch attempt");
661
+ },
662
+ delegateYield: function (e, r, n) {
663
+ return this.delegate = {
664
+ iterator: values(e),
665
+ resultName: r,
666
+ nextLoc: n
667
+ }, "next" === this.method && (this.arg = t), y;
810
668
  }
811
- } catch (e) {
812
- console.error('Unable to read services from localStorage: ', e);
813
- }
814
- return {};
815
- };
816
- var setUserAddedServices = function setUserAddedServices(services) {
817
- try {
818
- window.localStorage.setItem('userAddedServices', JSON.stringify(services));
819
- } catch (e) {
820
- console.error('Unable to write services to localStorage: ', e);
669
+ }, e;
670
+ }
671
+ function _unsupportedIterableToArray(r, a) {
672
+ if (r) {
673
+ if ("string" == typeof r) return _arrayLikeToArray(r, a);
674
+ var t = {}.toString.call(r).slice(8, -1);
675
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
821
676
  }
822
- };
823
- var isNoIdService = function isNoIdService(param) {
824
- var serviceParam = param;
825
- return !!(serviceParam !== null && serviceParam !== void 0 && serviceParam.name && serviceParam !== null && serviceParam !== void 0 && serviceParam.url);
826
- };
827
-
828
- /* *
829
- * Licensed under the Apache License, Version 2.0 (the "License");
830
- * you may not use this file except in compliance with the License.
831
- * You may obtain a copy of the License at
832
- *
833
- * http://www.apache.org/licenses/LICENSE-2.0
834
- *
835
- * Unless required by applicable law or agreed to in writing, software
836
- * distributed under the License is distributed on an "AS IS" BASIS,
837
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
838
- * See the License for the specific language governing permissions and
839
- * limitations under the License.
840
- *
841
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
842
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
843
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
844
- * */
845
- var AnimationLength;
846
- (function (AnimationLength) {
847
- AnimationLength[AnimationLength["Minutes15"] = 15] = "Minutes15";
848
- AnimationLength[AnimationLength["Minutes30"] = 30] = "Minutes30";
849
- AnimationLength[AnimationLength["Hours1"] = 60] = "Hours1";
850
- AnimationLength[AnimationLength["Hours2"] = 120] = "Hours2";
851
- AnimationLength[AnimationLength["Hours3"] = 180] = "Hours3";
852
- AnimationLength[AnimationLength["Hours6"] = 360] = "Hours6";
853
- AnimationLength[AnimationLength["Hours12"] = 720] = "Hours12";
854
- AnimationLength[AnimationLength["Hours24"] = 1440] = "Hours24";
855
- })(AnimationLength || (AnimationLength = {}));
856
-
857
- var types$4 = /*#__PURE__*/Object.freeze({
858
- __proto__: null,
859
- get AnimationLength () { return AnimationLength; }
860
- });
677
+ }
861
678
 
862
679
  var dateFormat = dateUtils.DATE_FORMAT_UTC;
863
680
  var createMap = function createMap(_ref) {
@@ -957,28 +774,20 @@ var createMap = function createMap(_ref) {
957
774
  var checkValidLayersPayload = function checkValidLayersPayload(layers, mapId) {
958
775
  /* Check for duplicate ids */
959
776
  var layerIds = {};
960
- var _iterator = _createForOfIteratorHelper(layers),
961
- _step;
962
- try {
963
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
964
- var layer = _step.value;
965
- if (layer.id) {
966
- /* Check if layer is already added to a different map */
967
- if (layer.mapId && mapId && layer.mapId !== mapId) {
968
- return false;
969
- }
970
- /* Check duplicate */
971
- if (!layerIds[layer.id]) {
972
- layerIds[layer.id] = true;
973
- } else {
974
- return false;
975
- }
777
+ for (var _iterator = _createForOfIteratorHelperLoose(layers), _step; !(_step = _iterator()).done;) {
778
+ var layer = _step.value;
779
+ if (layer.id) {
780
+ /* Check if layer is already added to a different map */
781
+ if (layer.mapId && mapId && layer.mapId !== mapId) {
782
+ return false;
783
+ }
784
+ /* Check duplicate */
785
+ if (!layerIds[layer.id]) {
786
+ layerIds[layer.id] = true;
787
+ } else {
788
+ return false;
976
789
  }
977
790
  }
978
- } catch (err) {
979
- _iterator.e(err);
980
- } finally {
981
- _iterator.f();
982
791
  }
983
792
  return true;
984
793
  };
@@ -1074,7 +883,7 @@ var produceDraftStateSetMapDimensionFromLayerChangeDimension = function produceD
1074
883
  * @param newIndex New index of element in array
1075
884
  */
1076
885
  function moveArrayElements(array, oldIndex, newIndex) {
1077
- var newArray = _toConsumableArray(array);
886
+ var newArray = [].concat(array);
1078
887
  var indexNew = Math.min(newIndex, newArray.length - 1);
1079
888
  newArray.splice(indexNew, 0, newArray.splice(oldIndex, 1)[0]);
1080
889
  return newArray;
@@ -1179,14 +988,13 @@ var parseTimeDimToISO8601Interval = function parseTimeDimToISO8601Interval(timeI
1179
988
  }
1180
989
  var intervalList = timeInterval.split(',').map(function (interval) {
1181
990
  var _interval$split = interval.split('/'),
1182
- _interval$split2 = _slicedToArray(_interval$split, 3),
1183
- startTime = _interval$split2[0],
1184
- endTime = _interval$split2[1],
1185
- duration = _interval$split2[2];
991
+ startTime = _interval$split[0],
992
+ endTime = _interval$split[1],
993
+ duration = _interval$split[2];
1186
994
  return {
1187
- startTime: startTime === null || startTime === void 0 ? void 0 : startTime.trim(),
1188
- endTime: endTime === null || endTime === void 0 ? void 0 : endTime.trim(),
1189
- duration: duration === null || duration === void 0 ? void 0 : duration.trim()
995
+ startTime: startTime == null ? void 0 : startTime.trim(),
996
+ endTime: endTime == null ? void 0 : endTime.trim(),
997
+ duration: duration == null ? void 0 : duration.trim()
1190
998
  };
1191
999
  });
1192
1000
  // Filter out intervals with missing start, end or duration
@@ -1212,6 +1020,23 @@ var utils$2 = /*#__PURE__*/Object.freeze({
1212
1020
  produceDraftStateSetWebMapDimension: produceDraftStateSetWebMapDimension
1213
1021
  });
1214
1022
 
1023
+ /* *
1024
+ * Licensed under the Apache License, Version 2.0 (the "License");
1025
+ * you may not use this file except in compliance with the License.
1026
+ * You may obtain a copy of the License at
1027
+ *
1028
+ * http://www.apache.org/licenses/LICENSE-2.0
1029
+ *
1030
+ * Unless required by applicable law or agreed to in writing, software
1031
+ * distributed under the License is distributed on an "AS IS" BASIS,
1032
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1033
+ * See the License for the specific language governing permissions and
1034
+ * limitations under the License.
1035
+ *
1036
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
1037
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
1038
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
1039
+ * */
1215
1040
  var replaceLayerIdsToEnsureUniqueLayerIdsInStore = function replaceLayerIdsToEnsureUniqueLayerIdsInStore(layerIds) {
1216
1041
  var layers = layerIds.layers,
1217
1042
  autoTimeStepLayerId = layerIds.autoTimeStepLayerId,
@@ -1237,16 +1062,16 @@ var replaceLayerIdsToEnsureUniqueLayerIdsInStore = function replaceLayerIdsToEns
1237
1062
  });
1238
1063
  var _layersWithNewIds = layers.map(function (layer, index) {
1239
1064
  if (layer.id && index === autoTimeStepLayerIndex) {
1240
- return _objectSpread2(_objectSpread2({}, layer), {}, {
1065
+ return Object.assign({}, layer, {
1241
1066
  id: autoTimeStepLayerIdNew
1242
1067
  });
1243
1068
  }
1244
1069
  if (layer.id && index === autoUpdateLayerIndex) {
1245
- return _objectSpread2(_objectSpread2({}, layer), {}, {
1070
+ return Object.assign({}, layer, {
1246
1071
  id: autoUpdateLayerIdNew
1247
1072
  });
1248
1073
  }
1249
- return _objectSpread2(_objectSpread2({}, layer), {}, {
1074
+ return Object.assign({}, layer, {
1250
1075
  id: webmapUtils.generateLayerId()
1251
1076
  });
1252
1077
  });
@@ -1271,7 +1096,7 @@ var replaceLayerIdsToEnsureUniqueLayerIdsInStore = function replaceLayerIdsToEns
1271
1096
  // The code below is executed if neither auto timestep
1272
1097
  // nor auto update layer id was provided
1273
1098
  var layersWithNewIds = layers.map(function (layer) {
1274
- return _objectSpread2(_objectSpread2({}, layer), {}, {
1099
+ return Object.assign({}, layer, {
1275
1100
  id: webmapUtils.generateLayerId()
1276
1101
  });
1277
1102
  });
@@ -1285,11 +1110,11 @@ function replaceLayerIds(layers, autoLayerIdOld, autoLayerIdNew) {
1285
1110
  });
1286
1111
  var layersWithNewIds = layers.map(function (layer, index) {
1287
1112
  if (layer.id && index === autoLayerIndex) {
1288
- return _objectSpread2(_objectSpread2({}, layer), {}, {
1113
+ return Object.assign({}, layer, {
1289
1114
  id: autoLayerIdNew
1290
1115
  });
1291
1116
  }
1292
- return _objectSpread2(_objectSpread2({}, layer), {}, {
1117
+ return Object.assign({}, layer, {
1293
1118
  id: webmapUtils.generateLayerId()
1294
1119
  });
1295
1120
  });
@@ -1456,6 +1281,23 @@ var types$3 = /*#__PURE__*/Object.freeze({
1456
1281
  get LayerStatus () { return LayerStatus; }
1457
1282
  });
1458
1283
 
1284
+ /* *
1285
+ * Licensed under the Apache License, Version 2.0 (the "License");
1286
+ * you may not use this file except in compliance with the License.
1287
+ * You may obtain a copy of the License at
1288
+ *
1289
+ * http://www.apache.org/licenses/LICENSE-2.0
1290
+ *
1291
+ * Unless required by applicable law or agreed to in writing, software
1292
+ * distributed under the License is distributed on an "AS IS" BASIS,
1293
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1294
+ * See the License for the specific language governing permissions and
1295
+ * limitations under the License.
1296
+ *
1297
+ * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
1298
+ * Copyright 2020 - Finnish Meteorological Institute (FMI)
1299
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
1300
+ * */
1459
1301
  /**
1460
1302
  * Sets a dimension value for a layer in the state. If the dimension does not exist it is added to the layer.
1461
1303
  * @param draft The draft layerstate
@@ -1471,7 +1313,7 @@ var produceLayerDimensionDraftState = function produceLayerDimensionDraftState(d
1471
1313
  return layerDim.name === dimensionValueToUpdate.name;
1472
1314
  });
1473
1315
  if (existingLayerDimIndex < 0) {
1474
- layer.dimensions.push(_objectSpread2({}, dimensionValueToUpdate));
1316
+ layer.dimensions.push(Object.assign({}, dimensionValueToUpdate));
1475
1317
  } else {
1476
1318
  var layerDimension = layer.dimensions[existingLayerDimIndex];
1477
1319
  if (dimensionValueToUpdate.currentValue) {
@@ -1505,7 +1347,7 @@ var isActionLayerSynced = function isActionLayerSynced(state, layerIdFromAction,
1505
1347
  var produceDimensionActionForMapLayer = function produceDimensionActionForMapLayer(layerDim, wmjsDimension, newDimension) {
1506
1348
  // If new value does not occur in the wmjsdimension - do not update the value but set the validSyncSelection to false
1507
1349
  if (wmjsDimension.getIndexForValue(newDimension.currentValue) === -1) {
1508
- return _objectSpread2(_objectSpread2({}, layerDim), {}, {
1350
+ return Object.assign({}, layerDim, {
1509
1351
  name: newDimension.name,
1510
1352
  units: newDimension.units,
1511
1353
  currentValue: layerDim.currentValue,
@@ -1513,7 +1355,7 @@ var produceDimensionActionForMapLayer = function produceDimensionActionForMapLay
1513
1355
  });
1514
1356
  }
1515
1357
  // Otherwise, update to new value and set validSyncSelection to true
1516
- return _objectSpread2(_objectSpread2({}, layerDim), {}, {
1358
+ return Object.assign({}, layerDim, {
1517
1359
  name: newDimension.name,
1518
1360
  units: newDimension.units,
1519
1361
  currentValue: newDimension.currentValue,
@@ -1537,20 +1379,20 @@ var produceDraftStateForAllLayersForDimensionWithinMap = function produceDraftSt
1537
1379
  return;
1538
1380
  }
1539
1381
  var wmjsDimension = webmapUtils.getWMJSDimensionForLayerAndDimension(layerId, dimension.name);
1540
- if (wmjsDimension !== null && wmjsDimension !== void 0 && wmjsDimension.linked && wmjsDimension.name === 'reference_time') {
1382
+ if (wmjsDimension != null && wmjsDimension.linked && wmjsDimension.name === 'reference_time') {
1541
1383
  wmjsDimension.linked = false;
1542
1384
  }
1543
- if (layerIdFromAction === layerId || wmjsDimension !== null && wmjsDimension !== void 0 && wmjsDimension.linked) {
1385
+ if (layerIdFromAction === layerId || wmjsDimension != null && wmjsDimension.linked) {
1544
1386
  var evenWhenOutsideRange = true;
1545
1387
  var closestValue = wmjsDimension ? wmjsDimension.getClosestValue(dimension.currentValue, evenWhenOutsideRange) : dimension.currentValue;
1546
1388
  var synced = dimension.synced !== undefined ? {
1547
1389
  synced: dimension.synced
1548
1390
  } : {};
1549
- var dimensionValueToUpdate = _objectSpread2(_objectSpread2({
1391
+ var dimensionValueToUpdate = Object.assign({
1550
1392
  name: dimension.name,
1551
1393
  units: dimension.units,
1552
1394
  currentValue: closestValue
1553
- }, synced), {}, {
1395
+ }, synced, {
1554
1396
  validSyncSelection: true
1555
1397
  });
1556
1398
  /* Set the dimension value for this layer */
@@ -1577,9 +1419,9 @@ var produceDraftStateForAllLayersForDimensionWithinMap = function produceDraftSt
1577
1419
  */
1578
1420
  var filterNonTimeDimensions = function filterNonTimeDimensions(dimensions) {
1579
1421
  var _dimensions$filter;
1580
- return (_dimensions$filter = dimensions === null || dimensions === void 0 ? void 0 : dimensions.filter(function (dim) {
1422
+ return (_dimensions$filter = dimensions == null ? void 0 : dimensions.filter(function (dim) {
1581
1423
  return dim.name !== 'time';
1582
- })) !== null && _dimensions$filter !== void 0 ? _dimensions$filter : [];
1424
+ })) != null ? _dimensions$filter : [];
1583
1425
  };
1584
1426
  /**
1585
1427
  * Returns the list of dimensions without the time dimension
@@ -1587,11 +1429,11 @@ var filterNonTimeDimensions = function filterNonTimeDimensions(dimensions) {
1587
1429
  */
1588
1430
  var filterCurrentValueFromDimensions = function filterCurrentValueFromDimensions(dimensions) {
1589
1431
  var _dimensions$map;
1590
- return (_dimensions$map = dimensions === null || dimensions === void 0 ? void 0 : dimensions.map(function (dim) {
1432
+ return (_dimensions$map = dimensions == null ? void 0 : dimensions.map(function (dim) {
1591
1433
  // eslint-disable-next-line no-param-reassign
1592
1434
  dim.currentValue = '';
1593
1435
  return dim;
1594
- })) !== null && _dimensions$map !== void 0 ? _dimensions$map : [];
1436
+ })) != null ? _dimensions$map : [];
1595
1437
  };
1596
1438
  /**
1597
1439
  * The timeslider range is depending on values set via reference_time dimension.
@@ -1603,7 +1445,7 @@ var filterCurrentValueFromDimensions = function filterCurrentValueFromDimensions
1603
1445
  * @returns
1604
1446
  */
1605
1447
  var updateMinMaxValueWhenReferenceTimeChanges = function updateMinMaxValueWhenReferenceTimeChanges(draftLayer, dimensionValueToUpdate) {
1606
- if (!(draftLayer !== null && draftLayer !== void 0 && draftLayer.id) || !(draftLayer !== null && draftLayer !== void 0 && draftLayer.dimensions) || dimensionValueToUpdate.name !== 'reference_time') {
1448
+ if (!(draftLayer != null && draftLayer.id) || !(draftLayer != null && draftLayer.dimensions) || dimensionValueToUpdate.name !== 'reference_time') {
1607
1449
  return;
1608
1450
  }
1609
1451
  // If dimension reference_time is updated, we might have to update the time minValue and maxValue as well.
@@ -1617,7 +1459,7 @@ var updateMinMaxValueWhenReferenceTimeChanges = function updateMinMaxValueWhenRe
1617
1459
  if (reduxTimeDim && timeDimension && referenceTimeDimension) {
1618
1460
  // When the reference time changes, a new set of timevalues needs to be set in the layer.
1619
1461
  // From the new timevalues the min.max can be derived.
1620
- timeDimension === null || timeDimension === void 0 || timeDimension.setTimeValuesForReferenceTime(dimensionValueToUpdate.currentValue, referenceTimeDimension);
1462
+ timeDimension == null || timeDimension.setTimeValuesForReferenceTime(dimensionValueToUpdate.currentValue, referenceTimeDimension);
1621
1463
  reduxTimeDim.minValue = timeDimension.getFirstValue();
1622
1464
  reduxTimeDim.maxValue = timeDimension.getLastValue();
1623
1465
  }
@@ -1649,7 +1491,7 @@ var createLayer = function createLayer(_ref) {
1649
1491
  status = _ref$status === void 0 ? 'default' : _ref$status,
1650
1492
  _ref$useLatestReferen = _ref.useLatestReferenceTime,
1651
1493
  useLatestReferenceTime = _ref$useLatestReferen === void 0 ? true : _ref$useLatestReferen,
1652
- props = _objectWithoutProperties(_ref, _excluded$3);
1494
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$3);
1653
1495
  var wmjsLayer = webmapUtils.getWMLayerById(id);
1654
1496
  var dimensions = props.dimensions || (wmjsLayer ? wmjsLayer.getDimensions() : []).map(function (dim) {
1655
1497
  return {
@@ -1658,7 +1500,7 @@ var createLayer = function createLayer(_ref) {
1658
1500
  units: dim.units
1659
1501
  };
1660
1502
  });
1661
- return _objectSpread2(_objectSpread2({}, props), {}, {
1503
+ return Object.assign({}, props, {
1662
1504
  dimensions: dimensions,
1663
1505
  id: id,
1664
1506
  opacity: opacity,
@@ -1691,7 +1533,7 @@ var slice$6 = createSlice({
1691
1533
  }
1692
1534
  if (!draft.byId[layerId]) {
1693
1535
  // TODO: (Sander de Snaijer, 2020-03-19) remove layerIds from the layer utils
1694
- draft.byId[layerId] = createLayer(_objectSpread2(_objectSpread2({}, layer), {}, {
1536
+ draft.byId[layerId] = createLayer(Object.assign({}, layer, {
1695
1537
  id: layerId,
1696
1538
  mapId: mapId
1697
1539
  }));
@@ -1705,7 +1547,7 @@ var slice$6 = createSlice({
1705
1547
  mapId = _action$payload2.mapId;
1706
1548
  var oldLayer = draft.byId[oldLayerId];
1707
1549
  if (oldLayer && !draft.byId[newLayerId]) {
1708
- draft.byId[newLayerId] = createLayer(_objectSpread2(_objectSpread2({}, draft.byId[oldLayerId]), {}, {
1550
+ draft.byId[newLayerId] = createLayer(Object.assign({}, draft.byId[oldLayerId], {
1709
1551
  id: newLayerId,
1710
1552
  mapId: mapId
1711
1553
  }));
@@ -1777,7 +1619,7 @@ var slice$6 = createSlice({
1777
1619
  sourceLayerId = _action$payload10.sourceLayerId;
1778
1620
  if (draft.byId[layerId]) {
1779
1621
  var _draft$byId$sourceLay;
1780
- draft.byId[layerId].geojson = (_draft$byId$sourceLay = draft.byId[sourceLayerId]) === null || _draft$byId$sourceLay === void 0 ? void 0 : _draft$byId$sourceLay.geojson;
1622
+ draft.byId[layerId].geojson = (_draft$byId$sourceLay = draft.byId[sourceLayerId]) == null ? void 0 : _draft$byId$sourceLay.geojson;
1781
1623
  }
1782
1624
  },
1783
1625
  layerDelete: function layerDelete(draft, action) {
@@ -1830,7 +1672,7 @@ var slice$6 = createSlice({
1830
1672
  Here we set the layers for the mapId from the action. byId and allIds is updated.
1831
1673
  */
1832
1674
  layers.forEach(function (layer) {
1833
- draft.byId[layer.id] = createLayer(_objectSpread2({
1675
+ draft.byId[layer.id] = createLayer(Object.assign({
1834
1676
  id: layer.id,
1835
1677
  mapId: mapId
1836
1678
  }, layer));
@@ -1864,7 +1706,7 @@ var slice$6 = createSlice({
1864
1706
  });
1865
1707
  // set over and base layers
1866
1708
  filtererdBaseLayers.forEach(function (layer) {
1867
- draft.byId[layer.id] = createLayer(_objectSpread2({
1709
+ draft.byId[layer.id] = createLayer(Object.assign({
1868
1710
  id: layer.id,
1869
1711
  layerType: layer.layerType,
1870
1712
  mapId: mapId
@@ -1878,7 +1720,7 @@ var slice$6 = createSlice({
1878
1720
  return;
1879
1721
  }
1880
1722
  if (!draft.byId[layer.id]) {
1881
- draft.byId[layer.id] = createLayer(_objectSpread2({
1723
+ draft.byId[layer.id] = createLayer(Object.assign({
1882
1724
  id: layer.id,
1883
1725
  layerType: layer.layerType
1884
1726
  }, layer));
@@ -1899,7 +1741,7 @@ var slice$6 = createSlice({
1899
1741
  return;
1900
1742
  }
1901
1743
  if (!draft.availableBaseLayers.byId[layer.id]) {
1902
- draft.availableBaseLayers.byId[layer.id] = createLayer(_objectSpread2({
1744
+ draft.availableBaseLayers.byId[layer.id] = createLayer(Object.assign({
1903
1745
  id: layer.id,
1904
1746
  layerType: layer.layerType
1905
1747
  }, layer));
@@ -1913,7 +1755,7 @@ var slice$6 = createSlice({
1913
1755
  if (layer.layerType !== LayerType.baseLayer || draft.availableBaseLayers.byId[layer.id] || !layer.mapId) {
1914
1756
  return;
1915
1757
  }
1916
- draft.availableBaseLayers.byId[layer.id] = createLayer(_objectSpread2({
1758
+ draft.availableBaseLayers.byId[layer.id] = createLayer(Object.assign({
1917
1759
  id: layer.id,
1918
1760
  layerType: layer.layerType
1919
1761
  }, layer));
@@ -1938,7 +1780,7 @@ var slice$6 = createSlice({
1938
1780
  if (layer.layerType !== LayerType.baseLayer || !layer.mapId) {
1939
1781
  return;
1940
1782
  }
1941
- draft.availableBaseLayers.byId[layer.id] = createLayer(_objectSpread2({}, layer));
1783
+ draft.availableBaseLayers.byId[layer.id] = createLayer(Object.assign({}, layer));
1942
1784
  draft.availableBaseLayers.allIds.push(layer.id);
1943
1785
  });
1944
1786
  },
@@ -1957,7 +1799,7 @@ var slice$6 = createSlice({
1957
1799
  layerStyle = _action$payload16.layerStyle,
1958
1800
  layerDimensions = _action$payload16.layerDimensions;
1959
1801
  if (layerStyle && draft.byId[layerStyle.layerId]) {
1960
- draft.byId[layerStyle.layerId].style = layerStyle === null || layerStyle === void 0 ? void 0 : layerStyle.style;
1802
+ draft.byId[layerStyle.layerId].style = layerStyle == null ? void 0 : layerStyle.style;
1961
1803
  }
1962
1804
  if (!layerDimensions) {
1963
1805
  return;
@@ -1974,9 +1816,7 @@ var slice$6 = createSlice({
1974
1816
  var _reduxLayer$dimension;
1975
1817
  var layerId = layerToUpdate.id;
1976
1818
  var reduxLayer = draft.byId[layerId];
1977
- /* Find the wmLayer */
1978
- var wmLayer = webmapUtils.getWMLayerById(layerId);
1979
- (_reduxLayer$dimension = reduxLayer.dimensions) !== null && _reduxLayer$dimension !== void 0 ? _reduxLayer$dimension : reduxLayer.dimensions = [];
1819
+ (_reduxLayer$dimension = reduxLayer.dimensions) != null ? _reduxLayer$dimension : reduxLayer.dimensions = [];
1980
1820
  // remove dimensions not in incoming list of dimensions
1981
1821
  reduxLayer.dimensions = reduxLayer.dimensions.filter(function (dimension) {
1982
1822
  return incomingDimensionNames.includes(dimension.name);
@@ -1984,10 +1824,12 @@ var slice$6 = createSlice({
1984
1824
  var reduxDimensions = reduxLayer.dimensions;
1985
1825
  /* Now update or insert the dimension for each layer */
1986
1826
  layerDimensions.dimensions.forEach(function (newLayerDimension) {
1827
+ /* Find the wmLayer */
1828
+ var wmLayer = webmapUtils.getWMLayerById(layerId);
1987
1829
  /* Find the wmDimension */
1988
- var wmDimension = wmLayer === null || wmLayer === void 0 ? void 0 : wmLayer.getDimension(newLayerDimension.name);
1830
+ var wmDimension = wmLayer == null ? void 0 : wmLayer.getDimension(newLayerDimension.name);
1989
1831
  /* This will set the new range of start/stop values for this dimension, making getClosestValue work properly */
1990
- wmDimension === null || wmDimension === void 0 || wmDimension.reInitializeValues(newLayerDimension.values);
1832
+ wmDimension == null || wmDimension.reInitializeValues(newLayerDimension.values);
1991
1833
  var existingDimension = reduxDimensions.find(function (d) {
1992
1834
  return d.name === newLayerDimension.name;
1993
1835
  });
@@ -2004,24 +1846,9 @@ var slice$6 = createSlice({
2004
1846
  }
2005
1847
  } else if (layerId === layerDimensions.layerId) {
2006
1848
  /* Otherwise add a new one, but only for this layer. */
2007
- reduxDimensions.push(_objectSpread2({}, newLayerDimension));
1849
+ reduxDimensions.push(Object.assign({}, newLayerDimension));
2008
1850
  }
2009
1851
  });
2010
- // Ensure that the time range is correctly set based on the current reference time value
2011
- var timeDimension = layerDimensions.dimensions.find(function (layerDim) {
2012
- return layerDim.name === 'time';
2013
- });
2014
- var refTimeDimension = layerDimensions.dimensions.find(function (layerDim) {
2015
- return layerDim.name === 'reference_time';
2016
- });
2017
- if (timeDimension && refTimeDimension && wmLayer) {
2018
- /* Find the wmDimension */
2019
- var wmTimeDimension = wmLayer.getDimension('time');
2020
- var wmRefTimeDimension = wmLayer.getDimension('reference_time');
2021
- if (wmTimeDimension && wmRefTimeDimension) {
2022
- wmTimeDimension === null || wmTimeDimension === void 0 || wmTimeDimension.setTimeValuesForReferenceTime(refTimeDimension.currentValue, wmRefTimeDimension);
2023
- }
2024
- }
2025
1852
  });
2026
1853
  },
2027
1854
  // feature layer actions
@@ -2033,7 +1860,7 @@ var slice$6 = createSlice({
2033
1860
  if (!layerId || layerIdsWithoutNewId.length === draft.allIds.length) {
2034
1861
  return;
2035
1862
  }
2036
- var newLayerIds = [layerId].concat(_toConsumableArray(layerIdsWithoutNewId));
1863
+ var newLayerIds = [layerId].concat(layerIdsWithoutNewId);
2037
1864
  draft.allIds = newLayerIds;
2038
1865
  },
2039
1866
  // feature layer actions
@@ -2080,7 +1907,7 @@ var slice$6 = createSlice({
2080
1907
  return;
2081
1908
  }
2082
1909
  var bounds = intersectionBoundsLayer.geojson;
2083
- var geoJSONProperties = intersectionLayer.defaultGeoJSONProperties || ((_currentLayer$geojson = currentLayer.geojson) === null || _currentLayer$geojson === void 0 || (_currentLayer$geojson = _currentLayer$geojson.features[0]) === null || _currentLayer$geojson === void 0 ? void 0 : _currentLayer$geojson.properties);
1910
+ var geoJSONProperties = intersectionLayer.defaultGeoJSONProperties || ((_currentLayer$geojson = currentLayer.geojson) == null || (_currentLayer$geojson = _currentLayer$geojson.features[0]) == null ? void 0 : _currentLayer$geojson.properties);
2084
1911
  intersectionLayer.geojson = createInterSections(updatedGeoJSON, bounds, geoJSONProperties);
2085
1912
  }
2086
1913
  },
@@ -2134,7 +1961,7 @@ var slice$6 = createSlice({
2134
1961
  var currentGeoJSON = draft.byId[layerId].geojson;
2135
1962
  var lastFeatureIndex = currentGeoJSON !== undefined && getLastEmptyFeatureIndex(currentGeoJSON);
2136
1963
  if (currentGeoJSON && lastFeatureIndex !== undefined) {
2137
- var newGeoJSON = _objectSpread2(_objectSpread2({}, currentGeoJSON), {}, {
1964
+ var newGeoJSON = Object.assign({}, currentGeoJSON, {
2138
1965
  features: currentGeoJSON.features.filter(function (_feature, index) {
2139
1966
  return index !== lastFeatureIndex;
2140
1967
  })
@@ -2173,7 +2000,7 @@ var slice$6 = createSlice({
2173
2000
  });
2174
2001
  }
2175
2002
  /* And then append the targets form the action */
2176
- targets.push.apply(targets, _toConsumableArray(targetsFromAction));
2003
+ targets.push.apply(targets, targetsFromAction);
2177
2004
  targets.forEach(function (payload) {
2178
2005
  var targetId = payload.targetId,
2179
2006
  value = payload.value;
@@ -2222,11 +2049,28 @@ var slice$6 = createSlice({
2222
2049
  var layerReducer = slice$6.reducer,
2223
2050
  layerActions = slice$6.actions;
2224
2051
 
2052
+ /* *
2053
+ * Licensed under the Apache License, Version 2.0 (the "License");
2054
+ * you may not use this file except in compliance with the License.
2055
+ * You may obtain a copy of the License at
2056
+ *
2057
+ * http://www.apache.org/licenses/LICENSE-2.0
2058
+ *
2059
+ * Unless required by applicable law or agreed to in writing, software
2060
+ * distributed under the License is distributed on an "AS IS" BASIS,
2061
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2062
+ * See the License for the specific language governing permissions and
2063
+ * limitations under the License.
2064
+ *
2065
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
2066
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
2067
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
2068
+ * */
2225
2069
  var moveToTop = function moveToTop(list, element) {
2226
2070
  var filteredList = list.filter(function (item) {
2227
2071
  return item !== element;
2228
2072
  });
2229
- var newOrder = [element].concat(_toConsumableArray(filteredList));
2073
+ var newOrder = [element].concat(filteredList);
2230
2074
  return newOrder;
2231
2075
  };
2232
2076
  var createUIDialogElement = function createUIDialogElement(_ref) {
@@ -2365,21 +2209,14 @@ var createLayersWithIds = function createLayersWithIds(state, layers) {
2365
2209
  return layers;
2366
2210
  }
2367
2211
  return produce(layers, function (draft) {
2368
- var _iterator = _createForOfIteratorHelper(draft),
2369
- _step;
2370
- try {
2371
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
2372
- var layer = _step.value;
2373
- if (!layer.id) {
2374
- console.warn("Warning: Layer id was not provided");
2375
- } else if (checkIfMapLayerIdIsAlreadyTaken(state, layer.id)) {
2376
- console.warn("Warning: Layer id ".concat(layer.id, " was already set before."));
2377
- }
2212
+ for (var _iterator = _createForOfIteratorHelperLoose(draft), _step; !(_step = _iterator()).done;) {
2213
+ var layer = _step.value;
2214
+ if (!layer.id) {
2215
+ layer.id = webmapUtils.generateLayerId();
2216
+ } else if (checkIfMapLayerIdIsAlreadyTaken(state, layer.id)) {
2217
+ console.warn("Warning: Layer id " + layer.id + " was already taken: Generating new one.");
2218
+ layer.id = webmapUtils.generateLayerId();
2378
2219
  }
2379
- } catch (err) {
2380
- _iterator.e(err);
2381
- } finally {
2382
- _iterator.f();
2383
2220
  }
2384
2221
  });
2385
2222
  };
@@ -2732,7 +2569,7 @@ var slice$4 = createSlice({
2732
2569
  return;
2733
2570
  }
2734
2571
  if (checkIfMapLayerIdIsAlreadyTaken(draft, layerId)) {
2735
- console.warn("Warning: Layer id ".concat(layerId, " was already taken"));
2572
+ console.warn("Warning: Layer id " + layerId + " was already taken");
2736
2573
  return;
2737
2574
  }
2738
2575
  if (!draft.byId[mapId].mapLayers.length) {
@@ -2753,7 +2590,7 @@ var slice$4 = createSlice({
2753
2590
  return;
2754
2591
  }
2755
2592
  if (checkIfMapLayerIdIsAlreadyTaken(draft, newLayerId)) {
2756
- console.warn("Warning: Layer id ".concat(newLayerId, " was already taken"));
2593
+ console.warn("Warning: Layer id " + newLayerId + " was already taken");
2757
2594
  return;
2758
2595
  }
2759
2596
  draft.byId[mapId].mapLayers.unshift(newLayerId);
@@ -2766,7 +2603,7 @@ var slice$4 = createSlice({
2766
2603
  return;
2767
2604
  }
2768
2605
  if (checkIfMapLayerIdIsAlreadyTaken(draft, layerId)) {
2769
- console.warn("Warning: Layer id ".concat(layerId, " was already taken"));
2606
+ console.warn("Warning: Layer id " + layerId + " was already taken");
2770
2607
  return;
2771
2608
  }
2772
2609
  if (layer.layerType === LayerType.baseLayer) {
@@ -2783,8 +2620,7 @@ var slice$4 = createSlice({
2783
2620
  var id = _ref.id;
2784
2621
  return id;
2785
2622
  });
2786
- var _layerIds = _slicedToArray(layerIds, 1),
2787
- activeLayerId = _layerIds[0];
2623
+ var activeLayerId = layerIds[0];
2788
2624
  if (draft.byId[mapId]) {
2789
2625
  draft.byId[mapId].mapLayers = layerIds;
2790
2626
  draft.byId[mapId].autoUpdateLayerId = activeLayerId;
@@ -2865,7 +2701,7 @@ var slice$4 = createSlice({
2865
2701
  map.autoTimeStepLayerId = undefined;
2866
2702
  return;
2867
2703
  }
2868
- var _map$mapLayers = _slicedToArray(map.mapLayers, 1),
2704
+ var _map$mapLayers = map.mapLayers,
2869
2705
  activeLayerId = _map$mapLayers[0];
2870
2706
  if (map.autoUpdateLayerId === layerId) {
2871
2707
  map.autoUpdateLayerId = activeLayerId;
@@ -2907,7 +2743,7 @@ var slice$4 = createSlice({
2907
2743
  });
2908
2744
  }
2909
2745
  /* And then append the targets form the action */
2910
- targets.push.apply(targets, _toConsumableArray(targetsFromAction));
2746
+ targets.push.apply(targets, targetsFromAction);
2911
2747
  targets.forEach(function (target) {
2912
2748
  var targetId = target.targetId,
2913
2749
  value = target.value;
@@ -2934,7 +2770,7 @@ var slice$4 = createSlice({
2934
2770
  });
2935
2771
  }
2936
2772
  /* And then append the targets form the action */
2937
- targets.push.apply(targets, _toConsumableArray(targetsFromAction));
2773
+ targets.push.apply(targets, targetsFromAction);
2938
2774
  targets.forEach(function (payload) {
2939
2775
  var targetId = payload.targetId,
2940
2776
  bbox = payload.bbox,
@@ -3010,14 +2846,14 @@ var slice$4 = createSlice({
3010
2846
  });
3011
2847
  }
3012
2848
  });
3013
- var mapActions = _objectSpread2(_objectSpread2({}, slice$4.actions), {}, {
2849
+ var mapActions = Object.assign({}, slice$4.actions, {
3014
2850
  setMapPreset: setMapPreset,
3015
2851
  mapChangeDimension: mapChangeDimension
3016
2852
  });
3017
2853
  var mapReducer = slice$4.reducer;
3018
2854
 
3019
2855
  var layerStore = function layerStore(store) {
3020
- return store === null || store === void 0 ? void 0 : store.layers;
2856
+ return store == null ? void 0 : store.layers;
3021
2857
  };
3022
2858
  /**
3023
2859
  * Gets a layer from the layers part of the store by its Id
@@ -3068,7 +2904,7 @@ var getLayerByIdWithoutTimeDimension = createSelector([layerStore, function (lay
3068
2904
  */
3069
2905
  var getLayersById = createSelector(layerStore, function (store) {
3070
2906
  var _store$byId;
3071
- return (_store$byId = store === null || store === void 0 ? void 0 : store.byId) !== null && _store$byId !== void 0 ? _store$byId : null;
2907
+ return (_store$byId = store == null ? void 0 : store.byId) != null ? _store$byId : null;
3072
2908
  }, selectorMemoizationOptions);
3073
2909
  /**
3074
2910
  * Retrieves all layerIds
@@ -3165,7 +3001,7 @@ var getFeatureLayers = createSelector(getAllLayers, function (layers) {
3165
3001
  */
3166
3002
  var getLayerDimensions = createSelector(getLayerById, function (layer) {
3167
3003
  var _layer$dimensions;
3168
- return (_layer$dimensions = layer === null || layer === void 0 ? void 0 : layer.dimensions) !== null && _layer$dimensions !== void 0 ? _layer$dimensions : [];
3004
+ return (_layer$dimensions = layer == null ? void 0 : layer.dimensions) != null ? _layer$dimensions : [];
3169
3005
  }, selectorMemoizationOptions);
3170
3006
  /**
3171
3007
  * Gets dimensions of the passed layer, excluding the time dimension
@@ -3187,7 +3023,7 @@ var getLayerNonTimeDimensions = createSelector(getLayerDimensions, function (dim
3187
3023
  * @returns {object} returnType: object - object of layer time dimension
3188
3024
  */
3189
3025
  var getLayerTimeDimension = createSelector(getLayerDimensions, function (dimensions) {
3190
- return dimensions === null || dimensions === void 0 ? void 0 : dimensions.find(function (dimension) {
3026
+ return dimensions == null ? void 0 : dimensions.find(function (dimension) {
3191
3027
  return dimension.name === 'time';
3192
3028
  });
3193
3029
  }, selectorMemoizationOptions);
@@ -3203,7 +3039,7 @@ var getLayerHasTimeDimension = createSelector(getLayerTimeDimension, function (t
3203
3039
  return !!timeDimension;
3204
3040
  }, selectorMemoizationOptions);
3205
3041
  var getLayerCurrentTime = createSelector(getLayerTimeDimension, function (dimension) {
3206
- return dimension === null || dimension === void 0 ? void 0 : dimension.currentValue;
3042
+ return dimension == null ? void 0 : dimension.currentValue;
3207
3043
  }, selectorMemoizationOptions);
3208
3044
  /**
3209
3045
  * Gets specified dimension of the passed layer
@@ -3217,7 +3053,7 @@ var getLayerCurrentTime = createSelector(getLayerTimeDimension, function (dimens
3217
3053
  var getLayerDimension = createSelector(getLayerDimensions, function (_store, _layerId, dimensionName) {
3218
3054
  return dimensionName;
3219
3055
  }, function (dimensions, dimensionName) {
3220
- return dimensions === null || dimensions === void 0 ? void 0 : dimensions.find(function (dimension) {
3056
+ return dimensions == null ? void 0 : dimensions.find(function (dimension) {
3221
3057
  return dimension.name === dimensionName;
3222
3058
  });
3223
3059
  }, selectorMemoizationOptions);
@@ -3241,7 +3077,7 @@ var getLayerOpacity = createSelector(getLayerById, function (layer) {
3241
3077
  * @returns {boolean} returnType: boolean - true if enabled, false if disabled
3242
3078
  */
3243
3079
  var getLayerEnabled = createSelector(getLayerById, function (layer) {
3244
- return Boolean(layer === null || layer === void 0 ? void 0 : layer.enabled);
3080
+ return Boolean(layer == null ? void 0 : layer.enabled);
3245
3081
  }, selectorMemoizationOptions);
3246
3082
  /**
3247
3083
  * Gets layer name
@@ -3253,7 +3089,7 @@ var getLayerEnabled = createSelector(getLayerById, function (layer) {
3253
3089
  */
3254
3090
  var getLayerName = createSelector(getLayerById, function (layer) {
3255
3091
  var _layer$name;
3256
- return (_layer$name = layer === null || layer === void 0 ? void 0 : layer.name) !== null && _layer$name !== void 0 ? _layer$name : '';
3092
+ return (_layer$name = layer == null ? void 0 : layer.name) != null ? _layer$name : '';
3257
3093
  }, selectorMemoizationOptions);
3258
3094
  /**
3259
3095
  * Gets layer service
@@ -3265,7 +3101,7 @@ var getLayerName = createSelector(getLayerById, function (layer) {
3265
3101
  */
3266
3102
  var getLayerService = createSelector(getLayerById, function (layer) {
3267
3103
  var _layer$service;
3268
- return (_layer$service = layer === null || layer === void 0 ? void 0 : layer.service) !== null && _layer$service !== void 0 ? _layer$service : '';
3104
+ return (_layer$service = layer == null ? void 0 : layer.service) != null ? _layer$service : '';
3269
3105
  }, selectorMemoizationOptions);
3270
3106
  /**
3271
3107
  * Gets selected style of the passed layer
@@ -3320,7 +3156,7 @@ var getAvailableBaseLayersForMap = createSelector(layerStore, function (_store,
3320
3156
  * @returns {number} selectedFeatureIndex: the index of the selected geojson feature
3321
3157
  */
3322
3158
  var getSelectedFeatureIndex = createSelector(getLayerById, function (layer) {
3323
- return layer === null || layer === void 0 ? void 0 : layer.selectedFeatureIndex;
3159
+ return layer == null ? void 0 : layer.selectedFeatureIndex;
3324
3160
  }, selectorMemoizationOptions);
3325
3161
  /**
3326
3162
  * Returns the layer is in edit mode
@@ -3331,18 +3167,20 @@ var getSelectedFeatureIndex = createSelector(getLayerById, function (layer) {
3331
3167
  * @returns {number} isLayerInEditMode: boolean - isInEditMode
3332
3168
  */
3333
3169
  var getIsLayerInEditMode = createSelector(getLayerById, function (layer) {
3334
- return (layer === null || layer === void 0 ? void 0 : layer.isInEditMode) || false;
3170
+ return (layer == null ? void 0 : layer.isInEditMode) || false;
3335
3171
  }, selectorMemoizationOptions);
3336
3172
  var getFeatureLayerGeoJSON = createSelector(getLayerById, function (layer) {
3337
- return (layer === null || layer === void 0 ? void 0 : layer.geojson) || undefined;
3173
+ return (layer == null ? void 0 : layer.geojson) || undefined;
3338
3174
  }, selectorMemoizationOptions);
3339
3175
  var getHasFeatureLayerGeoJSON = createSelector(getFeatureLayerGeoJSON, function (geojson) {
3340
3176
  return !!geojson;
3341
3177
  }, selectorMemoizationOptions);
3342
- var getFeatureLayerGeoJSONProperties = createSelector(getLayerById, getSelectedFeatureIndex, function (layer) {
3178
+ var getFeatureLayerGeoJSONProperties = createSelector(getLayerById, getSelectedFeatureIndex, function (layer, selecteFeatureIndex) {
3343
3179
  var _layer$geojson;
3344
- var selecteFeatureIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
3345
- return (layer === null || layer === void 0 || (_layer$geojson = layer.geojson) === null || _layer$geojson === void 0 || (_layer$geojson = _layer$geojson.features[selecteFeatureIndex]) === null || _layer$geojson === void 0 ? void 0 : _layer$geojson.properties) || {};
3180
+ if (selecteFeatureIndex === void 0) {
3181
+ selecteFeatureIndex = 0;
3182
+ }
3183
+ return (layer == null || (_layer$geojson = layer.geojson) == null || (_layer$geojson = _layer$geojson.features[selecteFeatureIndex]) == null ? void 0 : _layer$geojson.properties) || {};
3346
3184
  }, selectorMemoizationOptions);
3347
3185
  /**
3348
3186
  * Gets layerIds that contain passed dimension
@@ -3357,7 +3195,7 @@ var getDimensionLayerIds = createSelector(getLayersIds, getLayersById, function
3357
3195
  }, function (layerIds, layers, dimensionName) {
3358
3196
  return layerIds.reduce(function (list, layerId) {
3359
3197
  var layer = layers[layerId];
3360
- var dimensions = layer !== null && layer !== void 0 && layer.dimensions ? layer.dimensions : [];
3198
+ var dimensions = layer != null && layer.dimensions ? layer.dimensions : [];
3361
3199
  if (dimensions.find(function (dimension) {
3362
3200
  return dimension.name === dimensionName;
3363
3201
  })) {
@@ -3367,13 +3205,13 @@ var getDimensionLayerIds = createSelector(getLayersIds, getLayersById, function
3367
3205
  }, []);
3368
3206
  }, selectorMemoizationOptions);
3369
3207
  var getAcceptanceTimeInMinutes = createSelector(getLayerById, function (layer) {
3370
- return layer === null || layer === void 0 ? void 0 : layer.acceptanceTimeInMinutes;
3208
+ return layer == null ? void 0 : layer.acceptanceTimeInMinutes;
3371
3209
  }, selectorMemoizationOptions);
3372
3210
  var getLayerIsInsideAcceptanceTime = createSelector(getAcceptanceTimeInMinutes, getLayerCurrentTime, function (state, _layerId, mapId) {
3373
3211
  var _state$webmap;
3374
- return (_state$webmap = state.webmap) === null || _state$webmap === void 0 || (_state$webmap = _state$webmap.byId[mapId]) === null || _state$webmap === void 0 || (_state$webmap = _state$webmap.dimensions) === null || _state$webmap === void 0 || (_state$webmap = _state$webmap.find(function (dimension) {
3212
+ return (_state$webmap = state.webmap) == null || (_state$webmap = _state$webmap.byId[mapId]) == null || (_state$webmap = _state$webmap.dimensions) == null || (_state$webmap = _state$webmap.find(function (dimension) {
3375
3213
  return dimension.name === 'time';
3376
- })) === null || _state$webmap === void 0 ? void 0 : _state$webmap.currentValue;
3214
+ })) == null ? void 0 : _state$webmap.currentValue;
3377
3215
  }, function (acceptanceTimeInMinutes, layerCurrentTime, mapCurrentTime) {
3378
3216
  if (!mapCurrentTime || !layerCurrentTime) {
3379
3217
  return 'equal';
@@ -3393,7 +3231,7 @@ var getLayerIsInsideAcceptanceTime = createSelector(getAcceptanceTimeInMinutes,
3393
3231
  return 'inside';
3394
3232
  }, selectorMemoizationOptions);
3395
3233
  var getUseLatestReferenceTime = createSelector(getLayerById, function (layer) {
3396
- return Boolean(layer === null || layer === void 0 ? void 0 : layer.useLatestReferenceTime);
3234
+ return Boolean(layer == null ? void 0 : layer.useLatestReferenceTime);
3397
3235
  }, selectorMemoizationOptions);
3398
3236
  /**
3399
3237
  * Returns the timestep for this layerId in seconds, or undefined if it has no time dimension or timeinterval.
@@ -3410,31 +3248,23 @@ var getTimeStepForLayerId = createSelector(getLayerTimeDimension, function (time
3410
3248
  return isEmpty(timeInterval) ? undefined : getTimeStepFromDataInterval(timeInterval);
3411
3249
  }
3412
3250
  var iso8601Intervals = parseTimeDimToISO8601Interval(values);
3413
- var _iterator = _createForOfIteratorHelper(iso8601Intervals),
3414
- _step;
3415
- try {
3416
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
3417
- var _step$value = _step.value,
3418
- startTime = _step$value.startTime,
3419
- endTime = _step$value.endTime,
3420
- duration = _step$value.duration;
3421
- if (dateUtils.isWithinInterval(currentValue, {
3422
- start: startTime,
3423
- end: endTime
3424
- })) {
3425
- var parsedInterval = parseISO8601IntervalToDateInterval(duration);
3426
- return getTimeStepFromDataInterval(parsedInterval);
3427
- }
3251
+ for (var _iterator = _createForOfIteratorHelperLoose(iso8601Intervals), _step; !(_step = _iterator()).done;) {
3252
+ var _step$value = _step.value,
3253
+ startTime = _step$value.startTime,
3254
+ endTime = _step$value.endTime,
3255
+ duration = _step$value.duration;
3256
+ if (dateUtils.isWithinInterval(currentValue, {
3257
+ start: startTime,
3258
+ end: endTime
3259
+ })) {
3260
+ var parsedInterval = parseISO8601IntervalToDateInterval(duration);
3261
+ return getTimeStepFromDataInterval(parsedInterval);
3428
3262
  }
3429
- } catch (err) {
3430
- _iterator.e(err);
3431
- } finally {
3432
- _iterator.f();
3433
3263
  }
3434
3264
  return getTimeStepFromDataInterval(timeInterval);
3435
3265
  }, selectorMemoizationOptions);
3436
3266
  var getActiveLayerInfo = createSelector(layerStore, function (store) {
3437
- return store === null || store === void 0 ? void 0 : store.activeLayerInfo;
3267
+ return store == null ? void 0 : store.activeLayerInfo;
3438
3268
  });
3439
3269
 
3440
3270
  var selectors$6 = /*#__PURE__*/Object.freeze({
@@ -3552,7 +3382,7 @@ var getDialogOrder = createSelector(function (store, dialogType) {
3552
3382
  var order = store.ui.order;
3553
3383
  var visibleOrder = order.filter(function (orderedDialogType) {
3554
3384
  var _store$ui$dialogs$ord;
3555
- return (_store$ui$dialogs$ord = store.ui.dialogs[orderedDialogType]) === null || _store$ui$dialogs$ord === void 0 ? void 0 : _store$ui$dialogs$ord.isOpen;
3385
+ return (_store$ui$dialogs$ord = store.ui.dialogs[orderedDialogType]) == null ? void 0 : _store$ui$dialogs$ord.isOpen;
3556
3386
  });
3557
3387
  if (!visibleOrder.includes(dialogType)) {
3558
3388
  return 0;
@@ -3593,7 +3423,7 @@ var getDialogSource = createSelector(getDialogDetailsByType, function (details)
3593
3423
  * @returns {string} active window id
3594
3424
  */
3595
3425
  var getActiveWindowId = createSelector(getUiStore, function (store) {
3596
- return store === null || store === void 0 ? void 0 : store.activeWindowId;
3426
+ return store == null ? void 0 : store.activeWindowId;
3597
3427
  }, selectorMemoizationOptions);
3598
3428
  /**
3599
3429
  * Gets the panelId of which the dialog is opened from
@@ -3604,9 +3434,9 @@ var getActiveWindowId = createSelector(getUiStore, function (store) {
3604
3434
  */
3605
3435
  var getSourcePanelId = createSelector(function (store, dialogType) {
3606
3436
  var _store$ui;
3607
- return (_store$ui = store.ui) === null || _store$ui === void 0 ? void 0 : _store$ui.dialogs[dialogType];
3437
+ return (_store$ui = store.ui) == null ? void 0 : _store$ui.dialogs[dialogType];
3608
3438
  }, function (dialog) {
3609
- return (dialog === null || dialog === void 0 ? void 0 : dialog.sourcePanelId) || '';
3439
+ return (dialog == null ? void 0 : dialog.sourcePanelId) || '';
3610
3440
  }, selectorMemoizationOptions);
3611
3441
  /**
3612
3442
  * Gets if this is the active window
@@ -3618,7 +3448,7 @@ var getSourcePanelId = createSelector(function (store, dialogType) {
3618
3448
  var getIsActiveWindowId = createSelector(getUiStore, function (_store, viewId) {
3619
3449
  return viewId;
3620
3450
  }, function (store, viewId) {
3621
- return viewId === (store === null || store === void 0 ? void 0 : store.activeWindowId);
3451
+ return viewId === (store == null ? void 0 : store.activeWindowId);
3622
3452
  }, selectorMemoizationOptions);
3623
3453
  var getDialogIsLoading = createSelector(getDialogDetailsByType, function (details) {
3624
3454
  return details && details.isLoading || false;
@@ -3630,11 +3460,11 @@ var getUiDialogsByActiveMapId = function getUiDialogsByActiveMapId(store, mapId)
3630
3460
  if (store && store.ui && store.ui.order) {
3631
3461
  var foundDialogsIds = store.ui.order.filter(function (id) {
3632
3462
  var _store$ui2;
3633
- return ((_store$ui2 = store.ui) === null || _store$ui2 === void 0 || (_store$ui2 = _store$ui2.dialogs[id]) === null || _store$ui2 === void 0 ? void 0 : _store$ui2.activeMapId) === mapId;
3463
+ return ((_store$ui2 = store.ui) == null || (_store$ui2 = _store$ui2.dialogs[id]) == null ? void 0 : _store$ui2.activeMapId) === mapId;
3634
3464
  });
3635
3465
  var foundDialogs = foundDialogsIds.reduce(function (list, id) {
3636
3466
  var _store$ui3;
3637
- var dialog = (_store$ui3 = store.ui) === null || _store$ui3 === void 0 ? void 0 : _store$ui3.dialogs[id];
3467
+ var dialog = (_store$ui3 = store.ui) == null ? void 0 : _store$ui3.dialogs[id];
3638
3468
  if (dialog) {
3639
3469
  return list.concat(dialog);
3640
3470
  }
@@ -3722,8 +3552,10 @@ var types$2 = /*#__PURE__*/Object.freeze({
3722
3552
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
3723
3553
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
3724
3554
  * */
3725
- var useSetupDialog = function useSetupDialog(dialogType) {
3726
- var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'app';
3555
+ var useSetupDialog = function useSetupDialog(dialogType, source) {
3556
+ if (source === void 0) {
3557
+ source = 'app';
3558
+ }
3727
3559
  var dispatch = useDispatch();
3728
3560
  var onCloseDialog = useCallback(function () {
3729
3561
  dispatch(uiActions.setToggleOpenDialog({
@@ -3858,6 +3690,23 @@ var removeInPlace = function removeInPlace(inDraftArray, condition) {
3858
3690
  inDraftArray.length = j;
3859
3691
  };
3860
3692
 
3693
+ /* *
3694
+ * Licensed under the Apache License, Version 2.0 (the "License");
3695
+ * you may not use this file except in compliance with the License.
3696
+ * You may obtain a copy of the License at
3697
+ *
3698
+ * http://www.apache.org/licenses/LICENSE-2.0
3699
+ *
3700
+ * Unless required by applicable law or agreed to in writing, software
3701
+ * distributed under the License is distributed on an "AS IS" BASIS,
3702
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3703
+ * See the License for the specific language governing permissions and
3704
+ * limitations under the License.
3705
+ *
3706
+ * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3707
+ * Copyright 2020 - Finnish Meteorological Institute (FMI)
3708
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
3709
+ * */
3861
3710
  var initialState$2 = {
3862
3711
  sources: {
3863
3712
  byId: {},
@@ -3916,7 +3765,7 @@ var slice$3 = createSlice({
3916
3765
  var _action$payload2 = action.payload,
3917
3766
  panelId = _action$payload2.panelId,
3918
3767
  data = _action$payload2.data;
3919
- draft.linkedState.sharedData[panelId] = _objectSpread2(_objectSpread2({}, draft.linkedState.sharedData[panelId]), data);
3768
+ draft.linkedState.sharedData[panelId] = Object.assign({}, draft.linkedState.sharedData[panelId], data);
3920
3769
  },
3921
3770
  deleteSharedData: function deleteSharedData(draft, action) {
3922
3771
  var panelId = action.payload.panelId;
@@ -3967,7 +3816,7 @@ var slice$3 = createSlice({
3967
3816
  linked = _action$payload4.linked;
3968
3817
  var synchronizationGroup = draft.groups.byId[groupId];
3969
3818
  if (!synchronizationGroup) {
3970
- console.warn("SYNCGROUPS_ADD_TARGET: Group ".concat(groupId, " does not exist."));
3819
+ console.warn("SYNCGROUPS_ADD_TARGET: Group " + groupId + " does not exist.");
3971
3820
  return;
3972
3821
  }
3973
3822
  if (!targetId) {
@@ -3977,7 +3826,7 @@ var slice$3 = createSlice({
3977
3826
  if (synchronizationGroup.targets.allIds.includes(targetId)) {
3978
3827
  return;
3979
3828
  }
3980
- var isSourceLinked = (_synchronizationGroup = synchronizationGroup.targets.byId[targetId]) === null || _synchronizationGroup === void 0 ? void 0 : _synchronizationGroup.linked;
3829
+ var isSourceLinked = (_synchronizationGroup = synchronizationGroup.targets.byId[targetId]) == null ? void 0 : _synchronizationGroup.linked;
3981
3830
  synchronizationGroup.targets.allIds.push(targetId);
3982
3831
  synchronizationGroup.targets.byId[targetId] = {
3983
3832
  linked: linked !== false
@@ -4107,10 +3956,10 @@ var setBboxOrTimeSync = function setBboxOrTimeSync(draft, action) {
4107
3956
  });
4108
3957
  }
4109
3958
  };
4110
- var _slice$actions = slice$3.actions,
4111
- syncGroupAddGroup = _slice$actions.syncGroupAddGroup;
3959
+ var _slice$actions = slice$3.actions;
3960
+ _slice$actions.syncGroupAddGroup;
4112
3961
  _slice$actions.syncGroupAddSource;
4113
- var syncGroupAddTarget = _slice$actions.syncGroupAddTarget;
3962
+ _slice$actions.syncGroupAddTarget;
4114
3963
  _slice$actions.syncGroupClear;
4115
3964
  _slice$actions.syncGroupLinkTarget;
4116
3965
  _slice$actions.syncGroupRemoveGroup;
@@ -4120,6 +3969,23 @@ var _slice$actions = slice$3.actions,
4120
3969
  var syncGroupsReducer = slice$3.reducer,
4121
3970
  syncGroupsActions = slice$3.actions;
4122
3971
 
3972
+ /* *
3973
+ * Licensed under the Apache License, Version 2.0 (the "License");
3974
+ * you may not use this file except in compliance with the License.
3975
+ * You may obtain a copy of the License at
3976
+ *
3977
+ * http://www.apache.org/licenses/LICENSE-2.0
3978
+ *
3979
+ * Unless required by applicable law or agreed to in writing, software
3980
+ * distributed under the License is distributed on an "AS IS" BASIS,
3981
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3982
+ * See the License for the specific language governing permissions and
3983
+ * limitations under the License.
3984
+ *
3985
+ * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3986
+ * Copyright 2020 - Finnish Meteorological Institute (FMI)
3987
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
3988
+ * */
4123
3989
  var syncGroupStore = function syncGroupStore(store) {
4124
3990
  return store.syncGroups || null;
4125
3991
  };
@@ -4159,7 +4025,7 @@ var getTargets = createSelector([syncGroupStore, function (syncGroupStore, paylo
4159
4025
  /* Remember that we have already added this target in the action payloads, prevents adding it twice */
4160
4026
  targetsInActionPayload[targetId] = true;
4161
4027
  /* Compose the payload */
4162
- var newPayload = _objectSpread2({
4028
+ var newPayload = Object.assign({
4163
4029
  targetId: targetId
4164
4030
  }, payload);
4165
4031
  actionPayloads.push(newPayload);
@@ -4179,7 +4045,7 @@ var getTargets = createSelector([syncGroupStore, function (syncGroupStore, paylo
4179
4045
  /* Remember that we have already added this target in the action payloads, prevents adding it twice */
4180
4046
  targetsInActionPayload[targetId] = true;
4181
4047
  /* Compose the payload */
4182
- var newPayload = _objectSpread2({
4048
+ var newPayload = Object.assign({
4183
4049
  targetId: targetId
4184
4050
  }, payload);
4185
4051
  actionPayloads.push(newPayload);
@@ -4216,7 +4082,7 @@ var getSourceId = createSelector([syncGroupStore, function (syncGroupStore, sour
4216
4082
  return typeof sourceId === 'string' ? sourceId : sourceId.sourceId;
4217
4083
  }, selectorMemoizationOptions);
4218
4084
  var getAllTargetGroupsForSource = createSelector([syncGroupStore, getSourceId], function (syncGroupStore, sourceId) {
4219
- if (syncGroupStore !== null && syncGroupStore !== void 0 && syncGroupStore.groups) {
4085
+ if (syncGroupStore != null && syncGroupStore.groups) {
4220
4086
  return syncGroupStore.groups.allIds.reduce(function (linkedSyncGroupIds, groupId) {
4221
4087
  var syncronizationGroup = syncGroupStore.groups.byId[groupId];
4222
4088
  var source = syncronizationGroup.targets.byId[sourceId];
@@ -4237,7 +4103,7 @@ var isTimeScrollingEnabled = createSelector(syncGroupStore, function (store) {
4237
4103
  }, selectorMemoizationOptions);
4238
4104
  var getSyncedMapIdsForTimeslider = createSelector(syncGroupStore, function (store) {
4239
4105
  var _store$viewState$time, _store$viewState$time2;
4240
- return (_store$viewState$time = (_store$viewState$time2 = store.viewState.timeslider.groups[0]) === null || _store$viewState$time2 === void 0 ? void 0 : _store$viewState$time2.selected) !== null && _store$viewState$time !== void 0 ? _store$viewState$time : [];
4106
+ return (_store$viewState$time = (_store$viewState$time2 = store.viewState.timeslider.groups[0]) == null ? void 0 : _store$viewState$time2.selected) != null ? _store$viewState$time : [];
4241
4107
  }, selectorMemoizationOptions);
4242
4108
  var getSyncGroupTargets = createSelector(syncGroupStore, function (store) {
4243
4109
  if (!store || !store.groups) {
@@ -4328,7 +4194,7 @@ var createSyncGroupViewState = function createSyncGroupViewState(groups, sources
4328
4194
  var _groupTypes$find;
4329
4195
  var groupType = (_groupTypes$find = groupTypes.find(function (object) {
4330
4196
  return object.syncType === groups.byId[id].type;
4331
- })) === null || _groupTypes$find === void 0 ? void 0 : _groupTypes$find.groupType;
4197
+ })) == null ? void 0 : _groupTypes$find.groupType;
4332
4198
  if (groupType) {
4333
4199
  draft[groupType].groups.push({
4334
4200
  id: id,
@@ -4529,7 +4395,7 @@ var getTime = createSelector(getSyncSourceBySourceId, function (store) {
4529
4395
  return store && store.payloadByType && store.payloadByType[SYNCGROUPS_TYPE_SETTIME] ? store.payloadByType[SYNCGROUPS_TYPE_SETTIME].value : null;
4530
4396
  }, selectorMemoizationOptions);
4531
4397
  var selectLinkedState = createSelector(synchronizationGroupStore, function (syncState) {
4532
- return (syncState === null || syncState === void 0 ? void 0 : syncState.linkedState) || {
4398
+ return (syncState == null ? void 0 : syncState.linkedState) || {
4533
4399
  links: {},
4534
4400
  sharedData: {}
4535
4401
  };
@@ -4561,7 +4427,7 @@ var selectLinkedPanelId = createSelector([selectLinkedState, function (_, mapVie
4561
4427
  // Find the panelId where mapView(s) is linked
4562
4428
  var panelId = Object.keys(linkedState.links).find(function (panelId) {
4563
4429
  var _linkedState$links$pa;
4564
- return (_linkedState$links$pa = linkedState.links[panelId]) === null || _linkedState$links$pa === void 0 ? void 0 : _linkedState$links$pa.includes(mapViewId);
4430
+ return (_linkedState$links$pa = linkedState.links[panelId]) == null ? void 0 : _linkedState$links$pa.includes(mapViewId);
4565
4431
  });
4566
4432
  return panelId;
4567
4433
  });
@@ -4578,7 +4444,7 @@ var selectLinkedFeatures = createSelector([function (linkedState) {
4578
4444
  }, getLinkedFeatureProviders], function (linkedState, featureProviders) {
4579
4445
  var features = featureProviders.flatMap(function (providerId) {
4580
4446
  var _linkedState$sharedDa;
4581
- return ((_linkedState$sharedDa = linkedState.sharedData[providerId]) === null || _linkedState$sharedDa === void 0 ? void 0 : _linkedState$sharedDa.features) || [];
4447
+ return ((_linkedState$sharedDa = linkedState.sharedData[providerId]) == null ? void 0 : _linkedState$sharedDa.features) || [];
4582
4448
  }).filter(function (f) {
4583
4449
  return f !== undefined;
4584
4450
  });
@@ -4589,7 +4455,7 @@ var selectLinkedFormFeatures = createSelector([function (linkedState) {
4589
4455
  }, getLinkedFeatureProviders], function (linkedState, featureProviders) {
4590
4456
  var features = featureProviders.flatMap(function (providerId) {
4591
4457
  var _linkedState$sharedDa2;
4592
- return ((_linkedState$sharedDa2 = linkedState.sharedData[providerId]) === null || _linkedState$sharedDa2 === void 0 ? void 0 : _linkedState$sharedDa2.formFeatures) || [];
4458
+ return ((_linkedState$sharedDa2 = linkedState.sharedData[providerId]) == null ? void 0 : _linkedState$sharedDa2.formFeatures) || [];
4593
4459
  }).filter(function (f) {
4594
4460
  return f !== undefined;
4595
4461
  });
@@ -4599,7 +4465,7 @@ var getSelectedFeature = createSelector([
4599
4465
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
4600
4466
  function (state, mapId) {
4601
4467
  var _state$linkedState;
4602
- var sharedData = (_state$linkedState = state.linkedState) === null || _state$linkedState === void 0 ? void 0 : _state$linkedState.sharedData[mapId];
4468
+ var sharedData = (_state$linkedState = state.linkedState) == null ? void 0 : _state$linkedState.sharedData[mapId];
4603
4469
  var _ref = sharedData || {},
4604
4470
  _ref$features = _ref.features,
4605
4471
  features = _ref$features === void 0 ? [] : _ref$features,
@@ -4612,7 +4478,7 @@ function (state, mapId) {
4612
4478
  var _features$;
4613
4479
  var features = _ref2.features,
4614
4480
  selectedFeatureId = _ref2.selectedFeatureId;
4615
- var selectedFeature = (_features$ = features[0]) === null || _features$ === void 0 ? void 0 : _features$.geoJSON.features.find(function (feature) {
4481
+ var selectedFeature = (_features$ = features[0]) == null ? void 0 : _features$.geoJSON.features.find(function (feature) {
4616
4482
  return feature.id === selectedFeatureId;
4617
4483
  });
4618
4484
  if (selectedFeature && selectedFeature.geometry.type === 'Point') {
@@ -4622,9 +4488,9 @@ function (state, mapId) {
4622
4488
  lat: coordinates[1],
4623
4489
  lon: coordinates[0],
4624
4490
  id: selectedFeature.id,
4625
- serviceId: (_selectedFeature$prop = selectedFeature.properties) === null || _selectedFeature$prop === void 0 ? void 0 : _selectedFeature$prop.serviceId,
4626
- collectionId: (_selectedFeature$prop2 = selectedFeature.properties) === null || _selectedFeature$prop2 === void 0 ? void 0 : _selectedFeature$prop2.collectionId,
4627
- name: (_selectedFeature$prop3 = selectedFeature.properties) === null || _selectedFeature$prop3 === void 0 ? void 0 : _selectedFeature$prop3.name
4491
+ serviceId: (_selectedFeature$prop = selectedFeature.properties) == null ? void 0 : _selectedFeature$prop.serviceId,
4492
+ collectionId: (_selectedFeature$prop2 = selectedFeature.properties) == null ? void 0 : _selectedFeature$prop2.collectionId,
4493
+ name: (_selectedFeature$prop3 = selectedFeature.properties) == null ? void 0 : _selectedFeature$prop3.name
4628
4494
  };
4629
4495
  }
4630
4496
  if (selectedFeature) {
@@ -4634,9 +4500,9 @@ function (state, mapId) {
4634
4500
  lat: center.geometry.coordinates[1],
4635
4501
  lon: center.geometry.coordinates[0],
4636
4502
  id: selectedFeature.id,
4637
- serviceId: (_selectedFeature$prop4 = selectedFeature.properties) === null || _selectedFeature$prop4 === void 0 ? void 0 : _selectedFeature$prop4.serviceId,
4638
- collectionId: (_selectedFeature$prop5 = selectedFeature.properties) === null || _selectedFeature$prop5 === void 0 ? void 0 : _selectedFeature$prop5.collectionId,
4639
- name: (_selectedFeature$prop6 = selectedFeature.properties) === null || _selectedFeature$prop6 === void 0 ? void 0 : _selectedFeature$prop6.name
4503
+ serviceId: (_selectedFeature$prop4 = selectedFeature.properties) == null ? void 0 : _selectedFeature$prop4.serviceId,
4504
+ collectionId: (_selectedFeature$prop5 = selectedFeature.properties) == null ? void 0 : _selectedFeature$prop5.collectionId,
4505
+ name: (_selectedFeature$prop6 = selectedFeature.properties) == null ? void 0 : _selectedFeature$prop6.name
4640
4506
  };
4641
4507
  }
4642
4508
  return null;
@@ -4656,6 +4522,23 @@ var selectors$3 = /*#__PURE__*/Object.freeze({
4656
4522
  selectSharedData: selectSharedData
4657
4523
  });
4658
4524
 
4525
+ /* *
4526
+ * Licensed under the Apache License, Version 2.0 (the "License");
4527
+ * you may not use this file except in compliance with the License.
4528
+ * You may obtain a copy of the License at
4529
+ *
4530
+ * http://www.apache.org/licenses/LICENSE-2.0
4531
+ *
4532
+ * Unless required by applicable law or agreed to in writing, software
4533
+ * distributed under the License is distributed on an "AS IS" BASIS,
4534
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4535
+ * See the License for the specific language governing permissions and
4536
+ * limitations under the License.
4537
+ *
4538
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4539
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
4540
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
4541
+ * */
4659
4542
  var useUpdateSharedData = function useUpdateSharedData(data, panelId) {
4660
4543
  var sharedData = useSelector(function (state) {
4661
4544
  return selectSharedData(state, panelId);
@@ -4665,8 +4548,8 @@ var useUpdateSharedData = function useUpdateSharedData(data, panelId) {
4665
4548
  });
4666
4549
  var dispatch = useDispatch();
4667
4550
  useEffect(function () {
4668
- var diff = _objectSpread2(_objectSpread2({}, sharedData), data);
4669
- if (panelId && (linkedMaps === null || linkedMaps === void 0 ? void 0 : linkedMaps.length) > 0 && !isEqual(diff, sharedData)) {
4551
+ var diff = Object.assign({}, sharedData, data);
4552
+ if (panelId && (linkedMaps == null ? void 0 : linkedMaps.length) > 0 && !isEqual(diff, sharedData)) {
4670
4553
  dispatch(syncGroupsActions.addSharedData({
4671
4554
  panelId: panelId,
4672
4555
  data: data
@@ -4785,7 +4668,7 @@ var slice$2 = createSlice({
4785
4668
  // When one EDR is loading with a known id (panelId), do not set the any ANY_EDR_SERVICE as the panelId is known.
4786
4669
  if (isEDRLoading && id === ANY_EDR_SERVICE && draft.ids.some(function (id) {
4787
4670
  var _draft$entities$id;
4788
- return (_draft$entities$id = draft.entities[id]) === null || _draft$entities$id === void 0 ? void 0 : _draft$entities$id.isEDRLoading;
4671
+ return (_draft$entities$id = draft.entities[id]) == null ? void 0 : _draft$entities$id.isEDRLoading;
4789
4672
  })) {
4790
4673
  draft.entities[id].isEDRLoading = false;
4791
4674
  } else {
@@ -4816,20 +4699,20 @@ var loadingIndicatorActions = slice$2.actions,
4816
4699
  * */
4817
4700
  var _loadingIndicatorAdap = loadingIndicatorAdapter.getSelectors(function (state) {
4818
4701
  var _state$loadingIndicat;
4819
- return (_state$loadingIndicat = state === null || state === void 0 ? void 0 : state.loadingIndicator) !== null && _state$loadingIndicat !== void 0 ? _state$loadingIndicat : {
4702
+ return (_state$loadingIndicat = state == null ? void 0 : state.loadingIndicator) != null ? _state$loadingIndicat : {
4820
4703
  entities: {},
4821
4704
  ids: []
4822
4705
  };
4823
4706
  }),
4824
4707
  selectLoadingIndicatorById = _loadingIndicatorAdap.selectById;
4825
4708
  var isGetMapLoading = createSelector(selectLoadingIndicatorById, function (loadingIndicator) {
4826
- return (loadingIndicator === null || loadingIndicator === void 0 ? void 0 : loadingIndicator.isGetMapLoading) || false;
4709
+ return (loadingIndicator == null ? void 0 : loadingIndicator.isGetMapLoading) || false;
4827
4710
  }, selectorMemoizationOptions);
4828
4711
  var isGetCapabilitiesLoading = createSelector(selectLoadingIndicatorById, function (loadingIndicator) {
4829
- return (loadingIndicator === null || loadingIndicator === void 0 ? void 0 : loadingIndicator.isGetCapabilitiesLoading) || false;
4712
+ return (loadingIndicator == null ? void 0 : loadingIndicator.isGetCapabilitiesLoading) || false;
4830
4713
  }, selectorMemoizationOptions);
4831
4714
  var isAnyEdrTypeLoading = function isAnyEdrTypeLoading(loadingIndicator) {
4832
- return (loadingIndicator === null || loadingIndicator === void 0 ? void 0 : loadingIndicator.isEDRLoading) || false;
4715
+ return (loadingIndicator == null ? void 0 : loadingIndicator.isEDRLoading) || false;
4833
4716
  };
4834
4717
  var isEDRLoading = createSelector(selectLoadingIndicatorById, isAnyEdrTypeLoading, selectorMemoizationOptions);
4835
4718
  var isAnyEDRLoading = createSelector([function (store) {
@@ -4848,7 +4731,24 @@ var selectors$2 = /*#__PURE__*/Object.freeze({
4848
4731
  selectLoadingIndicatorById: selectLoadingIndicatorById
4849
4732
  });
4850
4733
 
4851
- var genericActions = _objectSpread2(_objectSpread2({}, syncGroupsActions), {}, {
4734
+ /* *
4735
+ * Licensed under the Apache License, Version 2.0 (the "License");
4736
+ * you may not use this file except in compliance with the License.
4737
+ * You may obtain a copy of the License at
4738
+ *
4739
+ * http://www.apache.org/licenses/LICENSE-2.0
4740
+ *
4741
+ * Unless required by applicable law or agreed to in writing, software
4742
+ * distributed under the License is distributed on an "AS IS" BASIS,
4743
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4744
+ * See the License for the specific language governing permissions and
4745
+ * limitations under the License.
4746
+ *
4747
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4748
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
4749
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
4750
+ * */
4751
+ var genericActions = Object.assign({}, syncGroupsActions, {
4852
4752
  initialSyncState: initialState$2,
4853
4753
  setTime: setTime,
4854
4754
  setBbox: setBbox
@@ -4924,7 +4824,7 @@ var getIsMapPresent = createSelector(getMapById, function (map) {
4924
4824
  */
4925
4825
  var getLayerIds = createSelector(getMapById, function (map) {
4926
4826
  var _map$mapLayers;
4927
- return (_map$mapLayers = map === null || map === void 0 ? void 0 : map.mapLayers) !== null && _map$mapLayers !== void 0 ? _map$mapLayers : [];
4827
+ return (_map$mapLayers = map == null ? void 0 : map.mapLayers) != null ? _map$mapLayers : [];
4928
4828
  }, selectorMemoizationOptions);
4929
4829
  /**
4930
4830
  * Gets all layer states for a map
@@ -4936,7 +4836,7 @@ var getLayerIds = createSelector(getMapById, function (map) {
4936
4836
  */
4937
4837
  var getMapLayers = createSelector(getLayerIds, getLayersById, function (layerIdsInMap, allLayers) {
4938
4838
  var layersWithUndefined = layerIdsInMap.map(function (layerId) {
4939
- return allLayers === null || allLayers === void 0 ? void 0 : allLayers[layerId];
4839
+ return allLayers == null ? void 0 : allLayers[layerId];
4940
4840
  });
4941
4841
  var layersWithoutUndefined = compact(layersWithUndefined);
4942
4842
  return layersWithoutUndefined;
@@ -4953,7 +4853,7 @@ var getMapLayers = createSelector(getLayerIds, getLayersById, function (layerIds
4953
4853
  */
4954
4854
  var getMapLayersWithoutDimensionCurrentValue = createSelector(getLayerIds, getLayersById, function (layerIdsInMap, allLayers) {
4955
4855
  var layersWithUndefined = layerIdsInMap.map(function (layerId) {
4956
- return allLayers === null || allLayers === void 0 ? void 0 : allLayers[layerId];
4856
+ return allLayers == null ? void 0 : allLayers[layerId];
4957
4857
  });
4958
4858
  var layersWithoutUndefined = compact(layersWithUndefined);
4959
4859
  var layersWithoutTimeDim = layersWithoutUndefined.map(function (layer) {
@@ -5000,7 +4900,7 @@ var getMapOverLayersIds = createSelector(getMapById, function (store) {
5000
4900
  return store ? store.overLayers : [];
5001
4901
  }, selectorMemoizationOptions);
5002
4902
  var getMapFeatureLayers = createSelector(getMapById, getFeatureLayers, function (store, featureLayers) {
5003
- var featureLayersOnMap = (store === null || store === void 0 ? void 0 : store.featureLayers) || [];
4903
+ var featureLayersOnMap = (store == null ? void 0 : store.featureLayers) || [];
5004
4904
  return featureLayers.filter(function (layer) {
5005
4905
  return featureLayersOnMap.indexOf(layer.id) !== -1;
5006
4906
  });
@@ -5073,13 +4973,12 @@ var getSelectedTime = createSelector(function (store, mapId) {
5073
4973
  var getDataLimitsFromLayers = createSelector(getMapLayers, function (layers) {
5074
4974
  return layers.reduce(function (_ref, layer) {
5075
4975
  var _layer$dimensions;
5076
- var _ref2 = _slicedToArray(_ref, 2),
5077
- start = _ref2[0],
5078
- end = _ref2[1];
5079
- var dimension = (_layer$dimensions = layer.dimensions) === null || _layer$dimensions === void 0 ? void 0 : _layer$dimensions.find(function (dimension) {
4976
+ var start = _ref[0],
4977
+ end = _ref[1];
4978
+ var dimension = (_layer$dimensions = layer.dimensions) == null ? void 0 : _layer$dimensions.find(function (dimension) {
5080
4979
  return dimension.name === 'time';
5081
4980
  });
5082
- if (dimension !== null && dimension !== void 0 && dimension.minValue && dimension.maxValue) {
4981
+ if (dimension != null && dimension.minValue && dimension.maxValue) {
5083
4982
  var lastValue = dateUtils.unix(new Date(dimension.maxValue));
5084
4983
  var firstValue = dateUtils.unix(new Date(dimension.minValue));
5085
4984
  var newLast = Math.max(lastValue, end);
@@ -5163,7 +5062,7 @@ var linkedMapAnimationInfo = createSelector(function (store, mapId) {
5163
5062
  * @returns {string} returnType: string
5164
5063
  */
5165
5064
  var getAnimationStartTime = createSelector(getMapById, function (store) {
5166
- return store !== null && store !== void 0 && store.animationStartTime ? store.animationStartTime : dateUtils.dateToString(dateUtils.sub(dateUtils.utc(), {
5065
+ return store != null && store.animationStartTime ? store.animationStartTime : dateUtils.dateToString(dateUtils.sub(dateUtils.utc(), {
5167
5066
  hours: 6
5168
5067
  }), dateFormat);
5169
5068
  }, selectorMemoizationOptions);
@@ -5176,7 +5075,7 @@ var getAnimationStartTime = createSelector(getMapById, function (store) {
5176
5075
  * @returns {string} returnType: string
5177
5076
  */
5178
5077
  var getAnimationEndTime = createSelector(getMapById, function (store) {
5179
- return store !== null && store !== void 0 && store.animationEndTime ? store.animationEndTime : dateUtils.dateToString(dateUtils.sub(dateUtils.utc(), {
5078
+ return store != null && store.animationEndTime ? store.animationEndTime : dateUtils.dateToString(dateUtils.sub(dateUtils.utc(), {
5180
5079
  minutes: 10
5181
5080
  }), dateFormat);
5182
5081
  }, selectorMemoizationOptions);
@@ -5210,7 +5109,7 @@ var shouldEndtimeOverride = createSelector(getMapById, function (store) {
5210
5109
  * @param {string} mapId mapId: string - Id of the map
5211
5110
  */
5212
5111
  var getActiveLayerId = createSelector(getMapById, function (store) {
5213
- if (store !== null && store !== void 0 && store.autoUpdateLayerId && store.autoUpdateLayerId === store.autoTimeStepLayerId) {
5112
+ if (store != null && store.autoUpdateLayerId && store.autoUpdateLayerId === store.autoTimeStepLayerId) {
5214
5113
  return store.autoUpdateLayerId;
5215
5114
  }
5216
5115
  return undefined;
@@ -5223,7 +5122,7 @@ var getActiveLayerId = createSelector(getMapById, function (store) {
5223
5122
  * @param {string} mapId mapId: string - Id of the map
5224
5123
  */
5225
5124
  var getAutoUpdateLayerId = createSelector(getMapById, function (store) {
5226
- return store === null || store === void 0 ? void 0 : store.autoUpdateLayerId;
5125
+ return store == null ? void 0 : store.autoUpdateLayerId;
5227
5126
  }, selectorMemoizationOptions);
5228
5127
  /**
5229
5128
  * Gets autoUpdateLayerId for map
@@ -5233,7 +5132,7 @@ var getAutoUpdateLayerId = createSelector(getMapById, function (store) {
5233
5132
  * @param {string} mapId mapId: string - Id of the map
5234
5133
  */
5235
5134
  var getAutoTimeStepLayerId = createSelector(getMapById, function (store) {
5236
- return store === null || store === void 0 ? void 0 : store.autoTimeStepLayerId;
5135
+ return store == null ? void 0 : store.autoTimeStepLayerId;
5237
5136
  }, selectorMemoizationOptions);
5238
5137
  /**
5239
5138
  * Gets span of a time slider of a map
@@ -5256,10 +5155,10 @@ var getMapTimeSliderSpan = createSelector(getMapById, function (store) {
5256
5155
  */
5257
5156
  var getMapTimeStep = createSelector(getMapById, function (store) {
5258
5157
  var _store$timeStep;
5259
- return (_store$timeStep = store === null || store === void 0 ? void 0 : store.timeStep) !== null && _store$timeStep !== void 0 ? _store$timeStep : defaultTimeStep;
5158
+ return (_store$timeStep = store == null ? void 0 : store.timeStep) != null ? _store$timeStep : defaultTimeStep;
5260
5159
  }, selectorMemoizationOptions);
5261
5160
  var getMapTimeStepWithoutDefault = createSelector(getMapById, function (store) {
5262
- return store === null || store === void 0 ? void 0 : store.timeStep;
5161
+ return store == null ? void 0 : store.timeStep;
5263
5162
  }, selectorMemoizationOptions);
5264
5163
  /**
5265
5164
  * Returns the speed of animation
@@ -5294,20 +5193,6 @@ var getMapTimeSliderWidth = createSelector(getMapById, function (store) {
5294
5193
  var getMapTimeSliderCenterTime = createSelector(getMapById, function (store) {
5295
5194
  return store ? store.timeSliderCenterTime : dateUtils.unix(dateUtils.utc());
5296
5195
  }, selectorMemoizationOptions);
5297
- var getMapTimeSliderStartCenterEndAndStep = createSelector(getMapById, function (store) {
5298
- var _store$timeStep2;
5299
- var timeSliderWidth = ((store === null || store === void 0 ? void 0 : store.timeSliderWidth) || 0) * 60;
5300
- var center = store ? store.timeSliderCenterTime : dateUtils.unix(dateUtils.utc());
5301
- var start = center ? center - timeSliderWidth / 2 : undefined;
5302
- var end = center ? center + timeSliderWidth / 2 : undefined;
5303
- var step = (_store$timeStep2 = store === null || store === void 0 ? void 0 : store.timeStep) !== null && _store$timeStep2 !== void 0 ? _store$timeStep2 : defaultTimeStep;
5304
- return {
5305
- start: start,
5306
- center: center,
5307
- end: end,
5308
- step: step
5309
- };
5310
- }, selectorMemoizationOptions);
5311
5196
  /**
5312
5197
  * Returns the number of seconds per pixel on the time slider
5313
5198
  *
@@ -5337,7 +5222,7 @@ var isTimestepAuto = createSelector(getMapById, function (store) {
5337
5222
  * @returns {boolean} returnType: boolean
5338
5223
  */
5339
5224
  var isAnimationLengthAuto = createSelector(getMapById, function (store) {
5340
- return (store === null || store === void 0 ? void 0 : store.isAnimationLengthAuto) || false;
5225
+ return (store == null ? void 0 : store.isAnimationLengthAuto) || false;
5341
5226
  }, selectorMemoizationOptions);
5342
5227
  /**
5343
5228
  * Returns map is timespan auto
@@ -5406,7 +5291,7 @@ var getIsLayerActiveLayer = createSelector(getActiveLayerId, function (_store, _
5406
5291
  * @returns {string} returnType: string - the mapId, or null if not found
5407
5292
  */
5408
5293
  var getMapIdFromLayerId = createSelector(function (store) {
5409
- return store === null || store === void 0 ? void 0 : store.webmap;
5294
+ return store == null ? void 0 : store.webmap;
5410
5295
  }, function (_store, layerId) {
5411
5296
  return layerId;
5412
5297
  }, findMapIdFromLayerId, selectorMemoizationOptions);
@@ -5493,7 +5378,7 @@ var getAllUniqueDimensions = createSelector(getAllMapIds, function (store) {
5493
5378
  * @returns {object} returnType: latitude and longitude of pin
5494
5379
  */
5495
5380
  var getPinLocation = createSelector(getMapById, function (store) {
5496
- return store === null || store === void 0 ? void 0 : store.mapPinLocation;
5381
+ return store == null ? void 0 : store.mapPinLocation;
5497
5382
  }, selectorMemoizationOptions);
5498
5383
  /**
5499
5384
  * Returns the disable map pin boolean for the current map
@@ -5504,7 +5389,7 @@ var getPinLocation = createSelector(getMapById, function (store) {
5504
5389
  * @returns {boolean} returnType: boolean
5505
5390
  */
5506
5391
  var getDisableMapPin = createSelector([getMapById], function (map) {
5507
- return map === null || map === void 0 ? void 0 : map.disableMapPin;
5392
+ return map == null ? void 0 : map.disableMapPin;
5508
5393
  }, selectorMemoizationOptions);
5509
5394
  /**
5510
5395
  * Returns the display map pin boolean for the current map
@@ -5538,15 +5423,15 @@ var getLegendId = createSelector(getMapById, function (store) {
5538
5423
  */
5539
5424
  var getMapPreset = createSelector(getMapLayers, getMapBaseLayers, getMapOverLayers, getBbox, getSrs, getActiveLayerId, getAutoTimeStepLayerId, getAutoUpdateLayerId, isAnimating, isAutoUpdating, isTimeSliderVisible, getDisplayMapPin, isZoomControlsVisible, getMapTimeStep, getMapAnimationDelay, getAnimationStartTime, getAnimationEndTime, getMapTimeSliderSpan, isTimestepAuto, isTimeSpanAuto, getLegendId, getUiStore, function (mapLayers, baseLayers, overLayers, bbox, srs, activeLayerId, autoUpdateLayerId, autoTimeStepLayerId, isAnimating, isAutoUpdating, isTimeSliderVisible, displayMapPin, isZoomControlsVisible, mapTimeStep, mapAnimationDelay, animationStartTime, animationEndTime, timeSliderSpan, isTimestepAuto, isTimeSpanAuto, legendId, uiStore) {
5540
5425
  var _uiStore$dialogs$lege;
5541
- var allLayers = [].concat(_toConsumableArray(baseLayers), _toConsumableArray(overLayers), _toConsumableArray(mapLayers)).map(function (_ref3) {
5542
- _ref3.mapId;
5543
- var layer = _objectWithoutProperties(_ref3, _excluded$2);
5426
+ var allLayers = [].concat(baseLayers, overLayers, mapLayers).map(function (_ref2) {
5427
+ _ref2.mapId;
5428
+ var layer = _objectWithoutPropertiesLoose(_ref2, _excluded$2);
5544
5429
  if (layer.dimensions !== undefined) {
5545
5430
  // Filter out (reference) time dimension as these should not be part of the preset for now
5546
5431
  var dimensions = layer.dimensions.filter(function (dimension) {
5547
5432
  return dimension.name !== 'time' && dimension.name !== 'reference_time';
5548
5433
  });
5549
- return _objectSpread2(_objectSpread2({}, layer), {}, {
5434
+ return Object.assign({}, layer, {
5550
5435
  dimensions: dimensions
5551
5436
  });
5552
5437
  }
@@ -5557,16 +5442,16 @@ var getMapPreset = createSelector(getMapLayers, getMapBaseLayers, getMapOverLaye
5557
5442
  speed: mapAnimationDelay ? getSpeedFactor(mapAnimationDelay) : 1,
5558
5443
  duration: getAnimationDuration(animationEndTime, animationStartTime)
5559
5444
  };
5560
- var shouldShowLegend = legendId ? uiStore === null || uiStore === void 0 || (_uiStore$dialogs$lege = uiStore.dialogs[legendId]) === null || _uiStore$dialogs$lege === void 0 ? void 0 : _uiStore$dialogs$lege.isOpen : false;
5561
- return _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({
5445
+ var shouldShowLegend = legendId ? uiStore == null || (_uiStore$dialogs$lege = uiStore.dialogs[legendId]) == null ? void 0 : _uiStore$dialogs$lege.isOpen : false;
5446
+ return Object.assign({
5562
5447
  layers: allLayers
5563
5448
  }, activeLayerId !== undefined && {
5564
5449
  activeLayerId: activeLayerId
5565
- }), autoTimeStepLayerId !== undefined && {
5450
+ }, autoTimeStepLayerId !== undefined && {
5566
5451
  autoTimeStepLayerId: autoTimeStepLayerId
5567
- }), autoUpdateLayerId !== undefined && {
5452
+ }, autoUpdateLayerId !== undefined && {
5568
5453
  autoUpdateLayerId: autoUpdateLayerId
5569
- }), {}, {
5454
+ }, {
5570
5455
  proj: {
5571
5456
  bbox: bbox,
5572
5457
  srs: srs
@@ -5638,15 +5523,15 @@ var getAnimationList = createSelector(getLayersById, getMapById, getAnimationSta
5638
5523
  // - start, end and interval for a continuous animation loop
5639
5524
  // - timeList, for a custom timeList
5640
5525
  // Here the animation is defined by a timeList
5641
- if (mapStore !== null && mapStore !== void 0 && (_mapStore$timeList = mapStore.timeList) !== null && _mapStore$timeList !== void 0 && _mapStore$timeList.length) {
5526
+ if (mapStore != null && (_mapStore$timeList = mapStore.timeList) != null && _mapStore$timeList.length) {
5642
5527
  return mapStore.timeList;
5643
5528
  }
5644
- var autoTimeStepLayerId = mapStore === null || mapStore === void 0 ? void 0 : mapStore.autoTimeStepLayerId;
5645
- var timeDimension = autoTimeStepLayerId && (layers === null || layers === void 0 || (_layers$autoTimeStepL = layers[autoTimeStepLayerId]) === null || _layers$autoTimeStepL === void 0 || (_layers$autoTimeStepL = _layers$autoTimeStepL.dimensions) === null || _layers$autoTimeStepL === void 0 ? void 0 : _layers$autoTimeStepL.find(function (dimension) {
5529
+ var autoTimeStepLayerId = mapStore == null ? void 0 : mapStore.autoTimeStepLayerId;
5530
+ var timeDimension = autoTimeStepLayerId && (layers == null || (_layers$autoTimeStepL = layers[autoTimeStepLayerId]) == null || (_layers$autoTimeStepL = _layers$autoTimeStepL.dimensions) == null ? void 0 : _layers$autoTimeStepL.find(function (dimension) {
5646
5531
  return dimension.name === 'time';
5647
5532
  }));
5648
- var _ref4 = timeDimension || {},
5649
- values = _ref4.values;
5533
+ var _ref3 = timeDimension || {},
5534
+ values = _ref3.values;
5650
5535
  var unixAnimationStart = roundWithTimeStep(Number(animationStart && dateUtils.unix(dateUtils.utc(animationStart))), animationInterval, 'ceil');
5651
5536
  var unixAnimationEnd = roundWithTimeStep(Number(animationEnd && dateUtils.unix(dateUtils.utc(animationEnd))), animationInterval, 'floor');
5652
5537
  var animationList = generateAnimationList(unixAnimationStart, unixAnimationEnd, values);
@@ -5671,12 +5556,12 @@ var getAnimationList = createSelector(getLayersById, getMapById, getAnimationSta
5671
5556
  */
5672
5557
  var getAnimationRange = createSelector(getLayersById, getAutoTimeStepLayerId, getAnimationStartTime, getAnimationEndTime, isAnimationLengthAuto, function (layers, autoTimeStepLayerId, startTime, endTime, isAnimationLengthAuto) {
5673
5558
  var _layers$autoTimeStepL2;
5674
- var layerTimeDimension = autoTimeStepLayerId && (layers === null || layers === void 0 || (_layers$autoTimeStepL2 = layers[autoTimeStepLayerId]) === null || _layers$autoTimeStepL2 === void 0 || (_layers$autoTimeStepL2 = _layers$autoTimeStepL2.dimensions) === null || _layers$autoTimeStepL2 === void 0 ? void 0 : _layers$autoTimeStepL2.find(function (dimension) {
5559
+ var layerTimeDimension = autoTimeStepLayerId && (layers == null || (_layers$autoTimeStepL2 = layers[autoTimeStepLayerId]) == null || (_layers$autoTimeStepL2 = _layers$autoTimeStepL2.dimensions) == null ? void 0 : _layers$autoTimeStepL2.find(function (dimension) {
5675
5560
  return dimension.name === 'time';
5676
5561
  }));
5677
- var _ref5 = layerTimeDimension || {},
5678
- minValue = _ref5.minValue,
5679
- maxValue = _ref5.maxValue;
5562
+ var _ref4 = layerTimeDimension || {},
5563
+ minValue = _ref4.minValue,
5564
+ maxValue = _ref4.maxValue;
5680
5565
  var hasTimeDimension = minValue && maxValue;
5681
5566
  var animationStartTime = isAnimationLengthAuto && autoTimeStepLayerId && hasTimeDimension ? minValue : startTime;
5682
5567
  var animationEndTime = isAnimationLengthAuto && autoTimeStepLayerId && hasTimeDimension ? maxValue : endTime;
@@ -5748,7 +5633,6 @@ var selectors$1 = /*#__PURE__*/Object.freeze({
5748
5633
  getMapTimeSliderCenterTime: getMapTimeSliderCenterTime,
5749
5634
  getMapTimeSliderSecondsPerPx: getMapTimeSliderSecondsPerPx,
5750
5635
  getMapTimeSliderSpan: getMapTimeSliderSpan,
5751
- getMapTimeSliderStartCenterEndAndStep: getMapTimeSliderStartCenterEndAndStep,
5752
5636
  getMapTimeSliderWidth: getMapTimeSliderWidth,
5753
5637
  getMapTimeStep: getMapTimeStep,
5754
5638
  getMapTimeStepWithoutDefault: getMapTimeStepWithoutDefault,
@@ -5815,11 +5699,32 @@ var enums = /*#__PURE__*/Object.freeze({
5815
5699
  * */
5816
5700
  var IS_LEGEND_OPEN_BY_DEFAULT = false;
5817
5701
 
5818
- var filterLayers = function filterLayers() {
5819
- var layers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
5820
- var layerParser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (layer) {
5821
- return layer;
5822
- };
5702
+ /* *
5703
+ * Licensed under the Apache License, Version 2.0 (the "License");
5704
+ * you may not use this file except in compliance with the License.
5705
+ * You may obtain a copy of the License at
5706
+ *
5707
+ * http://www.apache.org/licenses/LICENSE-2.0
5708
+ *
5709
+ * Unless required by applicable law or agreed to in writing, software
5710
+ * distributed under the License is distributed on an "AS IS" BASIS,
5711
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5712
+ * See the License for the specific language governing permissions and
5713
+ * limitations under the License.
5714
+ *
5715
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5716
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
5717
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
5718
+ * */
5719
+ var filterLayers = function filterLayers(layers, layerParser) {
5720
+ if (layers === void 0) {
5721
+ layers = [];
5722
+ }
5723
+ if (layerParser === void 0) {
5724
+ layerParser = function layerParser(layer) {
5725
+ return layer;
5726
+ };
5727
+ }
5823
5728
  return layers.reduce(function (layers, layer) {
5824
5729
  var mapLayers = layers.mapLayers,
5825
5730
  baseLayers = layers.baseLayers,
@@ -5860,9 +5765,9 @@ var parseBoolean = function parseBoolean(value) {
5860
5765
  return typeof value === 'boolean' ? value : value === 'true';
5861
5766
  };
5862
5767
  var parseLayer = function parseLayer(layer) {
5863
- return _objectSpread2(_objectSpread2(_objectSpread2({}, layer), !layer.id && {
5768
+ return Object.assign({}, layer, !layer.id && {
5864
5769
  id: webmapUtils.generateLayerId()
5865
- }), layer.enabled && {
5770
+ }, layer.enabled && {
5866
5771
  enabled: parseBoolean(layer.enabled)
5867
5772
  });
5868
5773
  };
@@ -5875,7 +5780,24 @@ var filterLayers$1 = /*#__PURE__*/Object.freeze({
5875
5780
  parseLayer: parseLayer
5876
5781
  });
5877
5782
 
5878
- var mapUtils = _objectSpread2(_objectSpread2({}, utils$2), {}, {
5783
+ /* *
5784
+ * Licensed under the Apache License, Version 2.0 (the "License");
5785
+ * you may not use this file except in compliance with the License.
5786
+ * You may obtain a copy of the License at
5787
+ *
5788
+ * http://www.apache.org/licenses/LICENSE-2.0
5789
+ *
5790
+ * Unless required by applicable law or agreed to in writing, software
5791
+ * distributed under the License is distributed on an "AS IS" BASIS,
5792
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5793
+ * See the License for the specific language governing permissions and
5794
+ * limitations under the License.
5795
+ *
5796
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5797
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
5798
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
5799
+ * */
5800
+ var mapUtils = Object.assign({}, utils$2, {
5879
5801
  replaceLayerIdsToEnsureUniqueLayerIdsInStore: replaceLayerIdsToEnsureUniqueLayerIdsInStore
5880
5802
  });
5881
5803
 
@@ -6137,7 +6059,7 @@ var getLayerActionsTargets = function getLayerActionsTargets(state, payload, act
6137
6059
  var foundTargets = findTargets(state, payload, actionType, mapId);
6138
6060
  return foundTargets.map(function (target) {
6139
6061
  var payload = target.payload;
6140
- return _objectSpread2(_objectSpread2({}, payload), {}, {
6062
+ return Object.assign({}, payload, {
6141
6063
  layerId: target.layerId,
6142
6064
  origin: SyncGroupActionOrigin.layerActions,
6143
6065
  mapId: payload.mapId
@@ -6158,9 +6080,9 @@ var getAddLayerActionsTargets = function getAddLayerActionsTargets(state, payloa
6158
6080
  targetId = _ref.targetId;
6159
6081
  var layer = payload.layer;
6160
6082
  layer.id;
6161
- var layerWithoutId = _objectWithoutProperties(layer, _excluded$1);
6083
+ var layerWithoutId = _objectWithoutPropertiesLoose(layer, _excluded$1);
6162
6084
  var layerId = webmapUtils.generateLayerId();
6163
- return _objectSpread2(_objectSpread2({}, payload), {}, {
6085
+ return Object.assign({}, payload, {
6164
6086
  layer: layerWithoutId,
6165
6087
  layerId: layerId,
6166
6088
  mapId: targetId,
@@ -6178,7 +6100,7 @@ var getAddLayerActionsTargets = function getAddLayerActionsTargets(state, payloa
6178
6100
  var getLayerDeleteActionsTargets = function getLayerDeleteActionsTargets(state, payload, actionType) {
6179
6101
  var foundTargets = findTargets(state, payload, actionType, payload.mapId);
6180
6102
  return foundTargets.map(function (target) {
6181
- return _objectSpread2(_objectSpread2({}, target.payload), {}, {
6103
+ return Object.assign({}, target.payload, {
6182
6104
  mapId: target.targetId,
6183
6105
  layerId: target.layerId,
6184
6106
  origin: SyncGroupActionOrigin["delete"]
@@ -6195,7 +6117,7 @@ var getLayerDeleteActionsTargets = function getLayerDeleteActionsTargets(state,
6195
6117
  var getLayerMoveActionsTargets = function getLayerMoveActionsTargets(state, payload, actionType) {
6196
6118
  var foundTargets = findTargets(state, payload, actionType, payload.mapId);
6197
6119
  return foundTargets.map(function (target) {
6198
- return _objectSpread2(_objectSpread2({}, target.payload), {}, {
6120
+ return Object.assign({}, target.payload, {
6199
6121
  mapId: target.targetId,
6200
6122
  origin: SyncGroupActionOrigin.move
6201
6123
  });
@@ -6209,7 +6131,7 @@ var getLayerMoveActionsTargets = function getLayerMoveActionsTargets(state, payl
6209
6131
  * @returns
6210
6132
  */
6211
6133
  var getSetAutoLayerIdActionsTargets = function getSetAutoLayerIdActionsTargets(state, payload, actionType) {
6212
- var payloadWithLayerId = _objectSpread2(_objectSpread2({}, payload), {}, {
6134
+ var payloadWithLayerId = Object.assign({}, payload, {
6213
6135
  layerId: payload.autoUpdateLayerId || payload.autoTimeStepLayerId || payload.layerId
6214
6136
  });
6215
6137
  var foundTargets = findTargets(state, payloadWithLayerId, actionType, payload.mapId);
@@ -6233,7 +6155,7 @@ var getMapBaseLayerActionsTargets = function getMapBaseLayerActionsTargets(state
6233
6155
  return foundTargets.map(function (target) {
6234
6156
  return {
6235
6157
  layers: payload.layers.map(function (layer) {
6236
- return _objectSpread2(_objectSpread2({}, layer), {}, {
6158
+ return Object.assign({}, layer, {
6237
6159
  id: webmapUtils.generateLayerId()
6238
6160
  });
6239
6161
  }),
@@ -6258,7 +6180,7 @@ genericListener.startListening({
6258
6180
  value = payload.value, origin = payload.origin;
6259
6181
  /* Test if the value is according to the expected time format */
6260
6182
  if (!setTimeValidatorRexexp.test(value)) {
6261
- console.error("setTime value ".concat(value, " does not conform to format [YYYY-MM-DDThh:mm:ssZ]. It was triggered by ").concat(origin));
6183
+ console.error("setTime value " + value + " does not conform to format [YYYY-MM-DDThh:mm:ssZ]. It was triggered by " + origin);
6262
6184
  } else {
6263
6185
  targets = getTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETTIME);
6264
6186
  groups = getTargetGroups(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETTIME);
@@ -6526,9 +6448,9 @@ genericListener.startListening({
6526
6448
  });
6527
6449
 
6528
6450
  /* A map with all the timerIds and their current step */
6529
- var stepMap$1 = new Map();
6451
+ var stepMap = new Map();
6530
6452
  /* A map with a list of timers and their dwell */
6531
- var timerDwellMap$1 = new Map();
6453
+ var timerDwellMap = new Map();
6532
6454
  /**
6533
6455
  * Returns the next step for given timerId.
6534
6456
  * @param timerId The timer id
@@ -6536,9 +6458,11 @@ var timerDwellMap$1 = new Map();
6536
6458
  * @param numStepsToGoForward Amount of steps to go forwards, defaults to 1. Can be positive and negative
6537
6459
  * @returns
6538
6460
  */
6539
- var getNextStep$1 = function getNextStep(timerId, numberOfStepsInAnimation) {
6540
- var numStepsToGoForward = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
6541
- var currentStep = getCurrentStep$1(timerId);
6461
+ var getNextStep = function getNextStep(timerId, numberOfStepsInAnimation, numStepsToGoForward) {
6462
+ if (numStepsToGoForward === void 0) {
6463
+ numStepsToGoForward = 1;
6464
+ }
6465
+ var currentStep = getCurrentStep(timerId);
6542
6466
  var nextStep = currentStep + numStepsToGoForward;
6543
6467
  var nextStepClipped = (nextStep % numberOfStepsInAnimation + numberOfStepsInAnimation) % numberOfStepsInAnimation;
6544
6468
  return nextStepClipped;
@@ -6550,19 +6474,21 @@ var getNextStep$1 = function getNextStep(timerId, numberOfStepsInAnimation) {
6550
6474
  * @param dwell The number of steps to wait at the end of the animation sequence before to continue
6551
6475
  * @returns
6552
6476
  */
6553
- var handleTimerDwell$1 = function handleTimerDwell(timerId, numberOfStepsInAnimation) {
6554
- var dwell = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 8;
6477
+ var handleTimerDwell = function handleTimerDwell(timerId, numberOfStepsInAnimation, dwell) {
6478
+ if (dwell === void 0) {
6479
+ dwell = 8;
6480
+ }
6555
6481
  if (dwell > 0) {
6556
- var currentStep = getCurrentStep$1(timerId);
6482
+ var currentStep = getCurrentStep(timerId);
6557
6483
  // Reset the dwell if we are not at the last animation step
6558
6484
  if (currentStep < numberOfStepsInAnimation - 1) {
6559
- timerDwellMap$1.set(timerId, dwell);
6485
+ timerDwellMap.set(timerId, dwell);
6560
6486
  return false;
6561
6487
  }
6562
6488
  // We are at the last animation step, check the dwell
6563
- var timerDwell = timerDwellMap$1.has(timerId) && timerDwellMap$1.get(timerId) || 0;
6489
+ var timerDwell = timerDwellMap.has(timerId) && timerDwellMap.get(timerId) || 0;
6564
6490
  if (currentStep === numberOfStepsInAnimation - 1 && timerDwell > 0) {
6565
- timerDwellMap$1.set(timerId, timerDwell - 1);
6491
+ timerDwellMap.set(timerId, timerDwell - 1);
6566
6492
  return true;
6567
6493
  }
6568
6494
  }
@@ -6573,16 +6499,16 @@ var handleTimerDwell$1 = function handleTimerDwell(timerId, numberOfStepsInAnima
6573
6499
  * @param timerId
6574
6500
  * @param timerStep
6575
6501
  */
6576
- var setStep$1 = function setStep(timerId, timerStep) {
6577
- stepMap$1.set(timerId, timerStep);
6502
+ var setStep = function setStep(timerId, timerStep) {
6503
+ stepMap.set(timerId, timerStep);
6578
6504
  };
6579
6505
  /**
6580
6506
  * Gets the current step for the timer
6581
6507
  * @param timerId
6582
6508
  * @returns
6583
6509
  */
6584
- var getCurrentStep$1 = function getCurrentStep(timerId) {
6585
- return stepMap$1.get(timerId) || 0;
6510
+ var getCurrentStep = function getCurrentStep(timerId) {
6511
+ return stepMap.get(timerId) || 0;
6586
6512
  };
6587
6513
  var MAX_NUMBER_STEPS_FORWARD_TO_PREFETCH = 2;
6588
6514
  var MAX_NUMBER_OF_PARALLEL_LOADING_IMAGES = 8;
@@ -6597,57 +6523,41 @@ var prefetchAnimationTargetsForMetronome = function prefetchAnimationTargetsForM
6597
6523
  var timerShouldStepForward = true;
6598
6524
  // The following code prefetches/buffers for all maps in the group
6599
6525
  for (var numPrefetch = 0; numPrefetch < MAX_NUMBER_STEPS_FORWARD_TO_PREFETCH; numPrefetch += 1) {
6600
- var nextStep = getNextStep$1(timerId, animationListValues.length, numPrefetch + 1);
6526
+ var nextStep = getNextStep(timerId, animationListValues.length, numPrefetch + 1);
6601
6527
  var nextTimeValueStepToCheck = animationListValues[nextStep];
6602
- var _iterator = _createForOfIteratorHelper(targets),
6603
- _step;
6604
- try {
6605
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
6606
- var target = _step.value;
6607
- var targetMapId = target.targetId;
6608
- var wmMap = getWMJSMapById(targetMapId);
6609
- if (!wmMap) {
6610
- return true; // Map was not registered so there is nothing to prefetch, do not block going forward
6611
- }
6612
- var layersImageUrls = getWMSRequests(wmMap, [{
6613
- name: 'time',
6614
- currentValue: nextTimeValueStepToCheck
6615
- }]);
6616
- var _iterator2 = _createForOfIteratorHelper(layersImageUrls),
6617
- _step2;
6618
- try {
6619
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
6620
- var layersImageUrl = _step2.value;
6621
- var image = wmMap.getMapImageStore.getImage(layersImageUrl.url);
6622
- if (!image.isLoaded()) {
6623
- if (wmMap.getMapImageStore.getNumImagesLoading() < MAX_NUMBER_OF_PARALLEL_LOADING_IMAGES) {
6624
- image.load();
6625
- }
6626
- if (numPrefetch === 0) {
6627
- var altImage = wmMap.getAlternativeImage(layersImageUrl.url, wmMap.getBBOX(), true);
6628
- // No alternative image available yet, so skipping animation.
6629
- if (altImage.length === 0) {
6630
- // This is useful to indicate that the map is loading and has nothing yet to display.
6631
- // console.warn('No data available: Not stepping forward');
6632
- timerShouldStepForward = false;
6633
- }
6634
- }
6635
- } else if (image.isStale()) {
6636
- if (wmMap.getMapImageStore.getNumImagesLoading() < MAX_NUMBER_OF_PARALLEL_LOADING_IMAGES) {
6637
- image.forceReload(true);
6638
- }
6528
+ for (var _iterator = _createForOfIteratorHelperLoose(targets), _step; !(_step = _iterator()).done;) {
6529
+ var target = _step.value;
6530
+ var targetMapId = target.targetId;
6531
+ var wmMap = getWMJSMapById(targetMapId);
6532
+ if (!wmMap) {
6533
+ return true; // Map was not registered so there is nothing to prefetch, do not block going forward
6534
+ }
6535
+ var layersImageUrls = getWMSRequests(wmMap, [{
6536
+ name: 'time',
6537
+ currentValue: nextTimeValueStepToCheck
6538
+ }]);
6539
+ for (var _iterator2 = _createForOfIteratorHelperLoose(layersImageUrls), _step2; !(_step2 = _iterator2()).done;) {
6540
+ var layersImageUrl = _step2.value;
6541
+ var image = wmMap.getMapImageStore.getImage(layersImageUrl.url);
6542
+ if (!image.isLoaded()) {
6543
+ if (wmMap.getMapImageStore.getNumImagesLoading() < MAX_NUMBER_OF_PARALLEL_LOADING_IMAGES) {
6544
+ image.load();
6545
+ }
6546
+ if (numPrefetch === 0) {
6547
+ var altImage = wmMap.getAlternativeImage(layersImageUrl.url, wmMap.getBBOX(), true);
6548
+ // No alternative image available yet, so skipping animation.
6549
+ if (altImage.length === 0) {
6550
+ // This is useful to indicate that the map is loading and has nothing yet to display.
6551
+ // console.warn('No data available: Not stepping forward');
6552
+ timerShouldStepForward = false;
6639
6553
  }
6640
6554
  }
6641
- } catch (err) {
6642
- _iterator2.e(err);
6643
- } finally {
6644
- _iterator2.f();
6555
+ } else if (image.isStale()) {
6556
+ if (wmMap.getMapImageStore.getNumImagesLoading() < MAX_NUMBER_OF_PARALLEL_LOADING_IMAGES) {
6557
+ image.forceReload(true);
6558
+ }
6645
6559
  }
6646
6560
  }
6647
- } catch (err) {
6648
- _iterator.e(err);
6649
- } finally {
6650
- _iterator.f();
6651
6561
  }
6652
6562
  }
6653
6563
  return timerShouldStepForward;
@@ -6704,8 +6614,8 @@ mapListener.startListening({
6704
6614
  var shouldAutoUpdate = isAutoUpdating(listenerApi.getState(), mapId);
6705
6615
  var prevTimeDimension = getLayerTimeDimension(listenerApi.getState(), layerId);
6706
6616
  var isAutoUpdateLayer = layerId === autoUpdateLayerId;
6707
- var incomingMaxTime = newTimeDimension === null || newTimeDimension === void 0 ? void 0 : newTimeDimension.maxValue;
6708
- var isIncomingMaxTimeLaterThanCurrentLayerTime = incomingMaxTime && (prevTimeDimension === null || prevTimeDimension === void 0 ? void 0 : prevTimeDimension.currentValue) && prevTimeDimension.currentValue !== incomingMaxTime;
6617
+ var incomingMaxTime = newTimeDimension == null ? void 0 : newTimeDimension.maxValue;
6618
+ var isIncomingMaxTimeLaterThanCurrentLayerTime = incomingMaxTime && (prevTimeDimension == null ? void 0 : prevTimeDimension.currentValue) && prevTimeDimension.currentValue !== incomingMaxTime;
6709
6619
  if (isAutoUpdateLayer &&
6710
6620
  // only update the active layer
6711
6621
  shouldAutoUpdate && isIncomingMaxTimeLaterThanCurrentLayerTime) {
@@ -6794,7 +6704,7 @@ mapListener.startListening({
6794
6704
  autoUpdateLayerId = getAutoUpdateLayerId(listenerApi.getState(), mapId);
6795
6705
  timeDimension = getLayerTimeDimension(listenerApi.getState(), autoUpdateLayerId);
6796
6706
  syncedMapIds = getSyncedMapIdsForTimeslider(listenerApi.getState()); // go to end of active layer
6797
- if (timeDimension !== null && timeDimension !== void 0 && timeDimension.maxValue && autoUpdateLayerId) {
6707
+ if (timeDimension != null && timeDimension.maxValue && autoUpdateLayerId) {
6798
6708
  listenerApi.dispatch(layerActions.layerChangeDimension({
6799
6709
  layerId: autoUpdateLayerId,
6800
6710
  origin: LayerActionOrigin.toggleAutoUpdateListener,
@@ -6867,11 +6777,11 @@ mapListener.startListening({
6867
6777
  // In case of the timeList
6868
6778
  if (timeList && timeList.length > 0) {
6869
6779
  // Determine animation step based on initialTime and timeList
6870
- var initalTimerStep = timeList === null || timeList === void 0 ? void 0 : timeList.findIndex(function (timeNameValue) {
6780
+ var initalTimerStep = timeList == null ? void 0 : timeList.findIndex(function (timeNameValue) {
6871
6781
  return timeNameValue.value === initialTime;
6872
6782
  });
6873
6783
  if (initalTimerStep !== -1) {
6874
- setStep$1(useMapId, initalTimerStep);
6784
+ setStep(useMapId, initalTimerStep);
6875
6785
  }
6876
6786
  }
6877
6787
  }
@@ -6903,14 +6813,14 @@ var handleBaseLayers = function handleBaseLayers(mapId, baseLayers, listenerApi)
6903
6813
  // This happens when switching to a preset that has non-default baselayers
6904
6814
  if (!activeAvailableBaseLayer && currentAvailableBaseLayers.length) {
6905
6815
  listenerApi.dispatch(layerActions.addAvailableBaseLayers({
6906
- layers: [_objectSpread2(_objectSpread2({}, baseLayer), {}, {
6816
+ layers: [Object.assign({}, baseLayer, {
6907
6817
  mapId: mapId,
6908
6818
  id: activeBaseLayerId
6909
6819
  })]
6910
6820
  }));
6911
6821
  }
6912
6822
  var baseLayersWithActiveId = baseLayers.map(function (layer, index) {
6913
- return index === 0 ? _objectSpread2(_objectSpread2({}, layer), {}, {
6823
+ return index === 0 ? Object.assign({}, layer, {
6914
6824
  id: activeBaseLayerId || layer.id
6915
6825
  }) : layer;
6916
6826
  });
@@ -6958,10 +6868,10 @@ mapListener.startListening({
6958
6868
  // make sure layer with new id exist and if not, default to first layer
6959
6869
  newAutoUpdateLayerId = ((_newLayerIds$layers$f = newLayerIds.layers.find(function (layer) {
6960
6870
  return layer.id === newLayerIds.autoUpdateLayerId;
6961
- })) === null || _newLayerIds$layers$f === void 0 ? void 0 : _newLayerIds$layers$f.id) || ((_newLayerIds$layers$ = newLayerIds.layers[0]) === null || _newLayerIds$layers$ === void 0 ? void 0 : _newLayerIds$layers$.id);
6871
+ })) == null ? void 0 : _newLayerIds$layers$f.id) || ((_newLayerIds$layers$ = newLayerIds.layers[0]) == null ? void 0 : _newLayerIds$layers$.id);
6962
6872
  newAutoTimeStepLayerId = ((_newLayerIds$layers$f2 = newLayerIds.layers.find(function (layer) {
6963
6873
  return layer.id === newLayerIds.autoTimeStepLayerId;
6964
- })) === null || _newLayerIds$layers$f2 === void 0 ? void 0 : _newLayerIds$layers$f2.id) || ((_newLayerIds$layers$2 = newLayerIds.layers[0]) === null || _newLayerIds$layers$2 === void 0 ? void 0 : _newLayerIds$layers$2.id);
6874
+ })) == null ? void 0 : _newLayerIds$layers$f2.id) || ((_newLayerIds$layers$2 = newLayerIds.layers[0]) == null ? void 0 : _newLayerIds$layers$2.id);
6965
6875
  listenerApi.dispatch(mapActions.setAutoLayerId({
6966
6876
  mapId: mapId,
6967
6877
  autoUpdateLayerId: newAutoUpdateLayerId,
@@ -6969,16 +6879,16 @@ mapListener.startListening({
6969
6879
  }));
6970
6880
  }
6971
6881
  customLayers = getdefaultMapSettingsLayers(listenerApi.getState());
6972
- customBaseLayer = customLayers === null || customLayers === void 0 ? void 0 : customLayers.find(function (layer) {
6882
+ customBaseLayer = customLayers == null ? void 0 : customLayers.find(function (layer) {
6973
6883
  return layer.layerType === LayerType.baseLayer;
6974
6884
  });
6975
- customOverLayer = customLayers === null || customLayers === void 0 ? void 0 : customLayers.find(function (layer) {
6885
+ customOverLayer = customLayers == null ? void 0 : customLayers.find(function (layer) {
6976
6886
  return layer.layerType === LayerType.overLayer;
6977
6887
  }); // sets (default) baseLayers
6978
6888
  baseLayersWithDefaultLayer = baseLayers.length ? baseLayers : [customBaseLayer || defaultLayers.baseLayerGrey]; // sets (default) overLayers
6979
6889
  overLayersWithDefaultLayer = overLayers.length ? overLayers : [customOverLayer || defaultLayers.overLayer];
6980
- allBaseLayers = [].concat(_toConsumableArray(baseLayersWithDefaultLayer), _toConsumableArray(overLayersWithDefaultLayer)).map(function (layer) {
6981
- return _objectSpread2(_objectSpread2({}, layer), {}, {
6890
+ allBaseLayers = [].concat(baseLayersWithDefaultLayer, overLayersWithDefaultLayer).map(function (layer) {
6891
+ return Object.assign({}, layer, {
6982
6892
  id: webmapUtils.generateLayerId()
6983
6893
  });
6984
6894
  });
@@ -6992,7 +6902,7 @@ mapListener.startListening({
6992
6902
  _context2.next = 19;
6993
6903
  break;
6994
6904
  }
6995
- throw new Error("Projection ".concat(proj.srs, " is not supported"));
6905
+ throw new Error("Projection " + proj.srs + " is not supported");
6996
6906
  case 19:
6997
6907
  // set bbox
6998
6908
  listenerApi.dispatch(mapActions.setBbox({
@@ -7225,9 +7135,8 @@ mapListener.startListening({
7225
7135
  var timeStep = getMapTimeStep(listenerApi.getState(), mapId);
7226
7136
  var currentTime = getSelectedTime(listenerApi.getState(), mapId);
7227
7137
  var _mapSelectors$getData = getDataLimitsFromLayers(listenerApi.getState(), mapId),
7228
- _mapSelectors$getData2 = _slicedToArray(_mapSelectors$getData, 2),
7229
- dataStartTime = _mapSelectors$getData2[0],
7230
- dataEndTime = _mapSelectors$getData2[1];
7138
+ dataStartTime = _mapSelectors$getData[0],
7139
+ dataEndTime = _mapSelectors$getData[1];
7231
7140
  if (dateUtils.isValid(currentTime)) {
7232
7141
  var makeForwardStep = function makeForwardStep() {
7233
7142
  var nextTime = currentTime + timeStep;
@@ -7258,186 +7167,6 @@ mapListener.startListening({
7258
7167
  }
7259
7168
  });
7260
7169
 
7261
- var copyView = function copyView(view) {
7262
- return new View({
7263
- center: view.getCenter(),
7264
- resolution: view.getResolution(),
7265
- projection: view.getProjection()
7266
- });
7267
- };
7268
- /**
7269
- * The StoredView objects keep references to OpenLayers View objects that may be shared
7270
- * between multiple maps (when maps are pan/zoom synced).
7271
- * This file then offers and API for each map to retrieve the StoredView object
7272
- * that is relevant for the current workspace configuration.
7273
- *
7274
- * React is functional, but OpenLayers is object oriented.
7275
- * This component sits in between the two and thus you can make an argument for either style.
7276
- * Object oriented was chosen since:
7277
- * - This allows us to use OpenLayers's Observable as a base class to provide event handling,
7278
- * which is useful for the implementation.
7279
- * - For this mechanism to work smoothly with OpenLayers,
7280
- * we need to pass the exact same View object reference for all maps that are synchronized. Redux stores cannot be used in this context and prop drilling and/or context providers would likely lead to more invasive implementations.
7281
- */
7282
- var StoredView = /*#__PURE__*/function (_Observable) {
7283
- function StoredView(name, view) {
7284
- var _this;
7285
- _classCallCheck(this, StoredView);
7286
- _this = _callSuper(this, StoredView);
7287
- _this.name = name;
7288
- _this.view = view;
7289
- return _this;
7290
- }
7291
- _inherits(StoredView, _Observable);
7292
- return _createClass(StoredView, [{
7293
- key: "setView",
7294
- value: function setView(view) {
7295
- this.view = view;
7296
- this.changed();
7297
- }
7298
- }]);
7299
- }(Observable);
7300
- var VIEW_PER_SYNCGROUP = {};
7301
- var VIEW_PER_MAP = {};
7302
- var getViewObjectForMapId = function getViewObjectForMapId(id) {
7303
- var storedView = VIEW_PER_MAP[id];
7304
- if (!storedView) {
7305
- var newStoredView = new StoredView("view:".concat(id), new View());
7306
- VIEW_PER_MAP[id] = newStoredView;
7307
- return newStoredView;
7308
- }
7309
- return storedView;
7310
- };
7311
- var createViewObjectForNewMap = function createViewObjectForNewMap(createFromId, newId) {
7312
- var orig = VIEW_PER_MAP[createFromId];
7313
- if (!orig) {
7314
- return;
7315
- }
7316
- // If there already is a view for `newId`, use that one but set the view from createFromId
7317
- // this can happen for example when switching presets
7318
- if (VIEW_PER_MAP[newId] !== undefined) {
7319
- VIEW_PER_MAP[newId].setView(copyView(orig.view));
7320
- return;
7321
- }
7322
- VIEW_PER_MAP[newId] = new StoredView("view:".concat(newId), copyView(orig.view));
7323
- };
7324
- var getViewObjectForSyncGroup = function getViewObjectForSyncGroup(id) {
7325
- var storedView = VIEW_PER_SYNCGROUP[id];
7326
- if (!storedView) {
7327
- var newStoredView = new StoredView("syncgroup:".concat(id), new View());
7328
- VIEW_PER_SYNCGROUP[id] = newStoredView;
7329
- return newStoredView;
7330
- }
7331
- return storedView;
7332
- };
7333
-
7334
- /* *
7335
- * Licensed under the Apache License, Version 2.0 (the "License");
7336
- * you may not use this file except in compliance with the License.
7337
- * You may obtain a copy of the License at
7338
- *
7339
- * http://www.apache.org/licenses/LICENSE-2.0
7340
- *
7341
- * Unless required by applicable law or agreed to in writing, software
7342
- * distributed under the License is distributed on an "AS IS" BASIS,
7343
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7344
- * See the License for the specific language governing permissions and
7345
- * limitations under the License.
7346
- *
7347
- * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7348
- * Copyright 2024 - Finnish Meteorological Institute (FMI)
7349
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
7350
- * */
7351
- var openlayersListener = createListenerMiddleware();
7352
- var getGroupForMap = function getGroupForMap(mapId, state) {
7353
- var syncGroupState = getSynchronizationGroupState(state);
7354
- return syncGroupState.groups.allIds.find(function (id) {
7355
- var group = syncGroupState.groups.byId[id];
7356
- return group.type === SYNCGROUPS_TYPE_SETBBOX && group.targets.allIds.indexOf(mapId) !== -1;
7357
- });
7358
- };
7359
- // This is fired when the preset is set up and when the projection is changed
7360
- openlayersListener.startListening({
7361
- actionCreator: mapActions.setBbox,
7362
- effect: function effect(_ref, listenerApi) {
7363
- var payload = _ref.payload;
7364
- var mapId = payload.mapId,
7365
- bbox = payload.bbox,
7366
- srs = payload.srs;
7367
- var extent = boundingExtent([[bbox.left, bbox.bottom], [bbox.right, bbox.top]]);
7368
- var storedViewForMap = getViewObjectForMapId(mapId);
7369
- var view = new View({
7370
- projection: srs,
7371
- center: getCenter(extent)
7372
- });
7373
- storedViewForMap.setView(view);
7374
- // 1024 is the current best guess for width / height of a map
7375
- // Feature request made for OL to help us get this right https://github.com/openlayers/openlayers/issues/16572
7376
- view.setViewportSize([1024, 1024]);
7377
- var resolution = view.getResolutionForExtent(extent);
7378
- view.setResolution(resolution);
7379
- // Also: if this map is part of a group and the srs has changed => change group view
7380
- var mapSyncGroup = getGroupForMap(mapId, listenerApi.getState());
7381
- if (!mapSyncGroup) {
7382
- return;
7383
- }
7384
- var groupView = getViewObjectForSyncGroup(mapSyncGroup);
7385
- if (!groupView.view.isDef() || groupView.view.getProjection().getCode() !== srs) {
7386
- groupView.setView(copyView(view));
7387
- }
7388
- }
7389
- });
7390
- // This is fired when the map view is updated (regardless of if the map is in a group or not)
7391
- // When a map is in a group, this needs to ensure the view of the map is kept up-to-date
7392
- openlayersListener.startListening({
7393
- actionCreator: setBboxSync,
7394
- effect: function effect(_ref2, listenerApi) {
7395
- var _payload$source;
7396
- var payload = _ref2.payload;
7397
- var mapId = (_payload$source = payload.source) === null || _payload$source === void 0 ? void 0 : _payload$source.payload.sourceId;
7398
- var mapSyncGroup = getGroupForMap(mapId, listenerApi.getState());
7399
- if (!mapSyncGroup) {
7400
- return;
7401
- }
7402
- var groupView = getViewObjectForSyncGroup(mapSyncGroup);
7403
- var mapView = getViewObjectForMapId(mapId);
7404
- if (mapView.view.getProjection() === groupView.view.getProjection()) {
7405
- mapView.view.setCenter(groupView.view.getCenter());
7406
- mapView.view.setResolution(groupView.view.getResolution());
7407
- } else {
7408
- mapView.setView(copyView(groupView.view));
7409
- }
7410
- }
7411
- });
7412
- openlayersListener.startListening({
7413
- actionCreator: syncGroupAddGroup,
7414
- effect: function effect(_ref3) {
7415
- var payload = _ref3.payload;
7416
- if (payload.type !== SYNCGROUPS_TYPE_SETBBOX) {
7417
- return;
7418
- }
7419
- // Ensure there is an openlayers view for the sync group
7420
- getViewObjectForSyncGroup(payload.groupId);
7421
- }
7422
- });
7423
- // Ensure sync group view has contents: when a target is added to a group whose view is undefined, copy the view from the target
7424
- openlayersListener.startListening({
7425
- actionCreator: syncGroupAddTarget,
7426
- effect: function effect(_ref4, listenerApi) {
7427
- var payload = _ref4.payload;
7428
- var group = getSynchronizationGroup(listenerApi.getState(), payload.groupId);
7429
- if (!group || group.type !== SYNCGROUPS_TYPE_SETBBOX) {
7430
- return;
7431
- }
7432
- var groupView = getViewObjectForSyncGroup(payload.groupId);
7433
- if (groupView.view.isDef()) {
7434
- return;
7435
- }
7436
- var mapView = getViewObjectForMapId(payload.targetId);
7437
- groupView.setView(copyView(mapView.view));
7438
- }
7439
- });
7440
-
7441
7170
  var _excluded = ["url"];
7442
7171
  var serviceListener = createListenerMiddleware();
7443
7172
  var fetchService = /*#__PURE__*/function () {
@@ -7451,7 +7180,7 @@ var fetchService = /*#__PURE__*/function () {
7451
7180
  return queryWMSLayers(service.serviceUrl);
7452
7181
  case 3:
7453
7182
  layers = _context.sent;
7454
- listenerApi.dispatch(serviceActions.serviceSetLayers(_objectSpread2(_objectSpread2({}, service), {}, {
7183
+ listenerApi.dispatch(serviceActions.serviceSetLayers(Object.assign({}, service, {
7455
7184
  layers: layers
7456
7185
  })));
7457
7186
  _context.next = 10;
@@ -7487,8 +7216,8 @@ var fetchInitialServices = /*#__PURE__*/function () {
7487
7216
  _context2.next = 5;
7488
7217
  return Promise.all(payload.services.map(function (_ref3) {
7489
7218
  var url = _ref3.url,
7490
- service = _objectWithoutProperties(_ref3, _excluded);
7491
- return fetchService(_objectSpread2(_objectSpread2({}, service), {}, {
7219
+ service = _objectWithoutPropertiesLoose(_ref3, _excluded);
7220
+ return fetchService(Object.assign({}, service, {
7492
7221
  serviceUrl: url
7493
7222
  }), listenerApi);
7494
7223
  }));
@@ -7619,6 +7348,23 @@ routerListener.startListening({
7619
7348
  }()
7620
7349
  });
7621
7350
 
7351
+ /* *
7352
+ * Licensed under the Apache License, Version 2.0 (the "License");
7353
+ * you may not use this file except in compliance with the License.
7354
+ * You may obtain a copy of the License at
7355
+ *
7356
+ * http://www.apache.org/licenses/LICENSE-2.0
7357
+ *
7358
+ * Unless required by applicable law or agreed to in writing, software
7359
+ * distributed under the License is distributed on an "AS IS" BASIS,
7360
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7361
+ * See the License for the specific language governing permissions and
7362
+ * limitations under the License.
7363
+ *
7364
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7365
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
7366
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
7367
+ * */
7622
7368
  // reducer utils
7623
7369
  var drawAdapter = createEntityAdapter({
7624
7370
  selectId: function selectId(draw) {
@@ -7629,9 +7375,9 @@ var getDrawToolByLayerId = function getDrawToolByLayerId(draft, layerId) {
7629
7375
  var drawTool = draft.ids.map(function (id) {
7630
7376
  return draft.entities[id];
7631
7377
  }).find(function (tool) {
7632
- return (tool === null || tool === void 0 ? void 0 : tool.geoJSONLayerId) === layerId;
7378
+ return (tool == null ? void 0 : tool.geoJSONLayerId) === layerId;
7633
7379
  });
7634
- return (drawTool === null || drawTool === void 0 ? void 0 : drawTool.drawToolId) || undefined;
7380
+ return (drawTool == null ? void 0 : drawTool.drawToolId) || undefined;
7635
7381
  };
7636
7382
  var initialState = drawAdapter.getInitialState();
7637
7383
  var slice = createSlice({
@@ -7678,11 +7424,11 @@ var slice = createSlice({
7678
7424
  var tool = drawTool.drawModes.find(function (drawMode) {
7679
7425
  return drawMode.drawModeId === drawModeId;
7680
7426
  });
7681
- if ((tool === null || tool === void 0 ? void 0 : tool.isSelectable) === false) {
7427
+ if ((tool == null ? void 0 : tool.isSelectable) === false) {
7682
7428
  drawTool.activeDrawModeId = '';
7683
7429
  return;
7684
7430
  }
7685
- if ((drawTool === null || drawTool === void 0 ? void 0 : drawTool.activeDrawModeId) !== drawModeId || !shouldUpdateShape) {
7431
+ if ((drawTool == null ? void 0 : drawTool.activeDrawModeId) !== drawModeId || !shouldUpdateShape) {
7686
7432
  drawTool.activeDrawModeId = drawModeId;
7687
7433
  } else {
7688
7434
  drawTool.activeDrawModeId = '';
@@ -7711,7 +7457,7 @@ var slice = createSlice({
7711
7457
  }
7712
7458
  var newModes = drawTool.drawModes.map(function (mode) {
7713
7459
  if (mode.drawModeId === drawModeId) {
7714
- return _objectSpread2(_objectSpread2({}, mode), {}, {
7460
+ return Object.assign({}, mode, {
7715
7461
  shape: shape
7716
7462
  }, title && {
7717
7463
  title: title
@@ -7750,11 +7496,11 @@ var slice = createSlice({
7750
7496
  var entity = draft.entities[drawToolId];
7751
7497
  if (drawToolId && entity !== undefined) {
7752
7498
  var _entity$drawModes;
7753
- var newDrawModes = entity === null || entity === void 0 || (_entity$drawModes = entity.drawModes) === null || _entity$drawModes === void 0 ? void 0 : _entity$drawModes.map(function (mode) {
7499
+ var newDrawModes = entity == null || (_entity$drawModes = entity.drawModes) == null ? void 0 : _entity$drawModes.map(function (mode) {
7754
7500
  if (mode.shape.type === 'Feature') {
7755
- return _objectSpread2(_objectSpread2({}, mode), {}, {
7756
- shape: _objectSpread2(_objectSpread2({}, mode.shape), {}, {
7757
- properties: _objectSpread2(_objectSpread2({}, mode.shape.properties), properties)
7501
+ return Object.assign({}, mode, {
7502
+ shape: Object.assign({}, mode.shape, {
7503
+ properties: Object.assign({}, mode.shape.properties, properties)
7758
7504
  })
7759
7505
  });
7760
7506
  }
@@ -7806,7 +7552,7 @@ var getDrawingtoolStore = function getDrawingtoolStore(store) {
7806
7552
  };
7807
7553
  var _drawAdapter$getSelec = drawAdapter.getSelectors(function (state) {
7808
7554
  var _state$drawingtools;
7809
- return (_state$drawingtools = state === null || state === void 0 ? void 0 : state.drawingtools) !== null && _state$drawingtools !== void 0 ? _state$drawingtools : {
7555
+ return (_state$drawingtools = state == null ? void 0 : state.drawingtools) != null ? _state$drawingtools : {
7810
7556
  entities: {},
7811
7557
  ids: []
7812
7558
  };
@@ -7814,35 +7560,35 @@ var _drawAdapter$getSelec = drawAdapter.getSelectors(function (state) {
7814
7560
  selectDrawToolById = _drawAdapter$getSelec.selectById,
7815
7561
  selectAllDrawingTools = _drawAdapter$getSelec.selectAll;
7816
7562
  var getActiveDrawToolId = createSelector(selectAllDrawingTools, function (drawtools) {
7817
- var activeDrawTool = drawtools === null || drawtools === void 0 ? void 0 : drawtools.find(function (drawtool) {
7563
+ var activeDrawTool = drawtools == null ? void 0 : drawtools.find(function (drawtool) {
7818
7564
  return drawtool.activeDrawModeId !== '';
7819
7565
  });
7820
- return (activeDrawTool === null || activeDrawTool === void 0 ? void 0 : activeDrawTool.drawToolId) || '';
7566
+ return (activeDrawTool == null ? void 0 : activeDrawTool.drawToolId) || '';
7821
7567
  });
7822
7568
  var getDrawModeById = createSelector(selectDrawToolById, function (_store, _drawToolId, drawModeId) {
7823
7569
  return drawModeId;
7824
7570
  }, function (draw, drawModeId) {
7825
- return draw === null || draw === void 0 ? void 0 : draw.drawModes.find(function (tool) {
7571
+ return draw == null ? void 0 : draw.drawModes.find(function (tool) {
7826
7572
  return tool.drawModeId === drawModeId;
7827
7573
  });
7828
7574
  });
7829
7575
  var getActiveDrawModeId = createSelector(selectDrawToolById, function (drawingTool) {
7830
- return (drawingTool === null || drawingTool === void 0 ? void 0 : drawingTool.activeDrawModeId) || '';
7576
+ return (drawingTool == null ? void 0 : drawingTool.activeDrawModeId) || '';
7831
7577
  });
7832
7578
  var getDrawToolGeoJSONLayerId = createSelector(selectDrawToolById, function (drawingTool) {
7833
- return (drawingTool === null || drawingTool === void 0 ? void 0 : drawingTool.geoJSONLayerId) || '';
7579
+ return (drawingTool == null ? void 0 : drawingTool.geoJSONLayerId) || '';
7834
7580
  });
7835
7581
  var getGeoJSONIntersectionLayerId = createSelector(selectDrawToolById, function (drawingTool) {
7836
- return drawingTool === null || drawingTool === void 0 ? void 0 : drawingTool.geoJSONIntersectionLayerId;
7582
+ return drawingTool == null ? void 0 : drawingTool.geoJSONIntersectionLayerId;
7837
7583
  });
7838
7584
  var getGeoJSONIntersectionBoundsLayerId = createSelector(selectDrawToolById, function (drawingTool) {
7839
- return drawingTool === null || drawingTool === void 0 ? void 0 : drawingTool.geoJSONIntersectionBoundsLayerId;
7585
+ return drawingTool == null ? void 0 : drawingTool.geoJSONIntersectionBoundsLayerId;
7840
7586
  });
7841
7587
  var getShouldAllowMultipleShapes = createSelector(selectDrawToolById, function (drawingTool) {
7842
- return (drawingTool === null || drawingTool === void 0 ? void 0 : drawingTool.shouldAllowMultipleShapes) || false;
7588
+ return (drawingTool == null ? void 0 : drawingTool.shouldAllowMultipleShapes) || false;
7843
7589
  });
7844
7590
  var getActiveDrawMode = createSelector(selectDrawToolById, function (drawingTool) {
7845
- return drawingTool === null || drawingTool === void 0 ? void 0 : drawingTool.drawModes.find(function (mode) {
7591
+ return drawingTool == null ? void 0 : drawingTool.drawModes.find(function (mode) {
7846
7592
  return mode.drawModeId === drawingTool.activeDrawModeId;
7847
7593
  });
7848
7594
  });
@@ -7963,10 +7709,10 @@ drawingToolListener.startListening({
7963
7709
  drawMode: ''
7964
7710
  }));
7965
7711
  geoJSONLayer = getLayerById(listenerApi.getState(), drawingTool.geoJSONLayerId);
7966
- geoJSON = geoJSONLayer === null || geoJSONLayer === void 0 ? void 0 : geoJSONLayer.geojson;
7712
+ geoJSON = geoJSONLayer == null ? void 0 : geoJSONLayer.geojson;
7967
7713
  lastFeatureIndex = geoJSON !== undefined ? getLastEmptyFeatureIndex(geoJSON) : undefined;
7968
7714
  if (lastFeatureIndex !== undefined) {
7969
- newGeoJSON = _objectSpread2(_objectSpread2({}, geoJSON), {}, {
7715
+ newGeoJSON = Object.assign({}, geoJSON, {
7970
7716
  features: geoJSON.features.filter(function (_feature, index) {
7971
7717
  return index !== lastFeatureIndex;
7972
7718
  })
@@ -8007,10 +7753,10 @@ drawingToolListener.startListening({
8007
7753
  // check tool is selected of existing drawn shape
8008
7754
  currentGeoJSONLayer = getLayerById(listenerApi.getState(), drawingTool.geoJSONLayerId);
8009
7755
  _ref3 = currentGeoJSONLayer || {}, currentGeoJSON = _ref3.geojson, _ref3$selectedFeature = _ref3.selectedFeatureIndex, selectedFeatureIndex = _ref3$selectedFeature === void 0 ? 0 : _ref3$selectedFeature;
8010
- currentSelectionType = currentGeoJSON === null || currentGeoJSON === void 0 || (_currentGeoJSON$featu = currentGeoJSON.features[selectedFeatureIndex]) === null || _currentGeoJSON$featu === void 0 || (_currentGeoJSON$featu = _currentGeoJSON$featu.properties) === null || _currentGeoJSON$featu === void 0 ? void 0 : _currentGeoJSON$featu.selectionType;
7756
+ currentSelectionType = currentGeoJSON == null || (_currentGeoJSON$featu = currentGeoJSON.features[selectedFeatureIndex]) == null || (_currentGeoJSON$featu = _currentGeoJSON$featu.properties) == null ? void 0 : _currentGeoJSON$featu.selectionType;
8011
7757
  newSelectionType = newDrawMode.selectionType;
8012
7758
  isNewToolSelected = currentSelectionType !== newSelectionType;
8013
- shouldUpdateNewShape = !(currentGeoJSON !== null && currentGeoJSON !== void 0 && (_currentGeoJSON$featu2 = currentGeoJSON.features) !== null && _currentGeoJSON$featu2 !== void 0 && _currentGeoJSON$featu2.length) || isNewToolSelected || !newDrawMode.isSelectable && shouldAllowMultipleShapes; // don't change anything if same tool is selected again
7759
+ shouldUpdateNewShape = !(currentGeoJSON != null && (_currentGeoJSON$featu2 = currentGeoJSON.features) != null && _currentGeoJSON$featu2.length) || isNewToolSelected || !newDrawMode.isSelectable && shouldAllowMultipleShapes; // don't change anything if same tool is selected again
8014
7760
  if (shouldUpdateNewShape && shouldUpdateShape) {
8015
7761
  shapeWithSelectionType = addSelectionTypeToGeoJSON(newDrawMode.shape, newDrawMode.selectionType);
8016
7762
  geoJSONFeatureCollection = getFeatureCollection(shapeWithSelectionType, shouldAllowMultipleShapes, currentGeoJSON);
@@ -8022,12 +7768,12 @@ drawingToolListener.startListening({
8022
7768
  layerId: drawingTool.geoJSONLayerId,
8023
7769
  selectedFeatureIndex: _newGeoJSON.features.length - 1
8024
7770
  }));
8025
- listenerApi.dispatch(layerActions.updateFeature(_objectSpread2(_objectSpread2({
7771
+ listenerApi.dispatch(layerActions.updateFeature(Object.assign({
8026
7772
  layerId: drawingTool.geoJSONLayerId,
8027
7773
  geojson: _newGeoJSON
8028
7774
  }, geoJSONIntersectionLayerId && {
8029
7775
  geoJSONIntersectionLayerId: geoJSONIntersectionLayerId
8030
- }), geoJSONIntersectionBoundsLayerId && {
7776
+ }, geoJSONIntersectionBoundsLayerId && {
8031
7777
  geoJSONIntersectionBoundsLayerId: geoJSONIntersectionBoundsLayerId
8032
7778
  })));
8033
7779
  }
@@ -8161,179 +7907,6 @@ layersListener.startListening({
8161
7907
  }()
8162
7908
  });
8163
7909
 
8164
- /* A map with all the timerIds and their current step */
8165
- var stepMap = new Map();
8166
- /* A map with a list of timers and their dwell */
8167
- var timerDwellMap = new Map();
8168
- /**
8169
- * Returns the next step for given timerId.
8170
- * @param timerId The timer id
8171
- * @param numberOfStepsInAnimation Animation length in steps
8172
- * @param numStepsToGoForward Amount of steps to go forwards, defaults to 1. Can be positive and negative
8173
- * @returns
8174
- */
8175
- var getNextStep = function getNextStep(timerId, numberOfStepsInAnimation) {
8176
- var numStepsToGoForward = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
8177
- var currentStep = getCurrentStep(timerId);
8178
- var nextStep = currentStep + numStepsToGoForward;
8179
- var nextStepClipped = (nextStep % numberOfStepsInAnimation + numberOfStepsInAnimation) % numberOfStepsInAnimation;
8180
- return nextStepClipped;
8181
- };
8182
- /**
8183
- * Handles dwell at the end of the animation loop sequence. The number of steps to wait till proceed can be set by the dwell parameter.
8184
- * @param timerId The timer id
8185
- * @param numberOfStepsInAnimation Number of steps in the animation
8186
- * @param dwell The number of steps to wait at the end of the animation sequence before to continue
8187
- * @returns
8188
- */
8189
- var handleTimerDwell = function handleTimerDwell(timerId, numberOfStepsInAnimation) {
8190
- var dwell = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 8;
8191
- if (dwell > 0) {
8192
- var currentStep = getCurrentStep(timerId);
8193
- // Reset the dwell if we are not at the last animation step
8194
- if (currentStep < numberOfStepsInAnimation - 1) {
8195
- timerDwellMap.set(timerId, dwell);
8196
- return false;
8197
- }
8198
- // We are at the last animation step, check the dwell
8199
- var timerDwell = timerDwellMap.has(timerId) && timerDwellMap.get(timerId) || 0;
8200
- if (currentStep === numberOfStepsInAnimation - 1 && timerDwell > 0) {
8201
- timerDwellMap.set(timerId, timerDwell - 1);
8202
- return true;
8203
- }
8204
- }
8205
- return false;
8206
- };
8207
- /**
8208
- * Set step for the timerId
8209
- * @param timerId
8210
- * @param timerStep
8211
- */
8212
- var setStep = function setStep(timerId, timerStep) {
8213
- stepMap.set(timerId, timerStep);
8214
- };
8215
- /**
8216
- * Gets the current step for the timer
8217
- * @param timerId
8218
- * @returns
8219
- */
8220
- var getCurrentStep = function getCurrentStep(timerId) {
8221
- return stepMap.get(timerId) || 0;
8222
- };
8223
- /**
8224
- * Checks if the next step is available for all provided layers
8225
- * @param reduxLayers
8226
- * @param nextTimeString
8227
- * @returns
8228
- */
8229
- var isNextStepAvailable = function isNextStepAvailable(reduxLayers, nextTimeString) {
8230
- // Get all wmLayers for the found id's
8231
- var wmLayers = reduxLayers.map(function (reduxLayer) {
8232
- return reduxLayer.id && getWMLayerById(reduxLayer.id);
8233
- }).filter(function (l) {
8234
- return !!l;
8235
- });
8236
- // Returns a layer which could have an image for the requested time, but which isn't loaded yet.
8237
- var isThereSomethingNotAvailable = wmLayers.map(function (l) {
8238
- var _l$getDimension;
8239
- if (!l || !l.olSource) {
8240
- // No Openlayers source, do nothing, so do not flag that something is not available
8241
- return {
8242
- status: true
8243
- };
8244
- }
8245
- // Check if there is a timevalue available
8246
- var closestValue = (_l$getDimension = l.getDimension('time')) === null || _l$getDimension === void 0 ? void 0 : _l$getDimension.getClosestValue(nextTimeString);
8247
- if (!closestValue || WMInvalidDateValues.has(closestValue)) {
8248
- // No value available, so do not flag that something is not available
8249
- return {
8250
- status: true
8251
- };
8252
- }
8253
- var olSource = l.olSource;
8254
- var hasImageAvailableForRequestedTimeStep = olSource.hasImageForTimeValue(closestValue);
8255
- // If there is no image available for requested timestep, return true and flag that this thing is not ready yet.
8256
- if (hasImageAvailableForRequestedTimeStep) {
8257
- return {
8258
- status: true
8259
- };
8260
- }
8261
- olSource.loadImageForTimeValue(closestValue);
8262
- return {
8263
- status: false
8264
- };
8265
- });
8266
- var nextStepIsAvailable = isThereSomethingNotAvailable.filter(function (d) {
8267
- return d.status === true;
8268
- }).length === wmLayers.length;
8269
- return nextStepIsAvailable;
8270
- };
8271
- /**
8272
- * This handler is triggered by the metronome. An array of timerIds is given as argument.
8273
- * It will update the animation loop of multiple maps and sliders
8274
- * It will prefetch images for maps
8275
- * @param timerIds string[] array of timerIds
8276
- * @param listenerApi ListenerEffectAPI<CoreAppStore, Dispatch, unknown> listenerApi as received from listener
8277
- */
8278
- var olMetronomeHandler = function olMetronomeHandler(timerIds, listenerApi) {
8279
- var targetsWithUpdateValue = [];
8280
- var _iterator = _createForOfIteratorHelper(timerIds),
8281
- _step;
8282
- try {
8283
- var _loop = function _loop() {
8284
- var timerId = _step.value;
8285
- var animationListValuesNameAndValue = getAnimationList(listenerApi.getState(), timerId);
8286
- var animationListValues = animationListValuesNameAndValue.map(function (nameAndValue) {
8287
- return nameAndValue.value;
8288
- });
8289
- var targets = getTargets(listenerApi.getState(), {
8290
- sourceId: timerId,
8291
- origin: timerId
8292
- }, SYNCGROUPS_TYPE_SETTIME);
8293
- if (targets.length === 0) {
8294
- // When there are no targets, default to one
8295
- targets.push({
8296
- targetId: timerId,
8297
- value: ''
8298
- });
8299
- }
8300
- var timerIsInDwell = handleTimerDwell(timerId, animationListValues.length);
8301
- // Collect all layers for this syncgroups target
8302
- var reduxLayers = [];
8303
- targets.forEach(function (target) {
8304
- reduxLayers.push.apply(reduxLayers, _toConsumableArray(getLayersByMapId(listenerApi.getState(), target.targetId).filter(function (l) {
8305
- return l.layerType === LayerType.mapLayer;
8306
- })));
8307
- });
8308
- var nextStep = getNextStep(timerId, animationListValues.length, 1);
8309
- var timerShouldStepForward = isNextStepAvailable(reduxLayers, animationListValues[nextStep]) && !timerIsInDwell;
8310
- // Determine the next step
8311
- var timerStep = timerShouldStepForward ? getNextStep(timerId, animationListValues.length) : getCurrentStep(timerId);
8312
- setStep(timerId, timerStep);
8313
- var updatedValue = animationListValues[timerStep];
8314
- targetsWithUpdateValue.push.apply(targetsWithUpdateValue, _toConsumableArray(targets.map(function (target) {
8315
- return _objectSpread2(_objectSpread2({}, target), {}, {
8316
- value: updatedValue
8317
- });
8318
- })));
8319
- var speedDelay = getMapAnimationDelay(listenerApi.getState(), timerId);
8320
- var speed = 1000 / (speedDelay || 1);
8321
- metronome.setSpeed(timerId, speed);
8322
- };
8323
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
8324
- _loop();
8325
- }
8326
- // Update all targets of all sync groups in one action.
8327
- } catch (err) {
8328
- _iterator.e(err);
8329
- } finally {
8330
- _iterator.f();
8331
- }
8332
- if (targetsWithUpdateValue.length > 0) {
8333
- listenerApi.dispatch(setTimeSync(null, targetsWithUpdateValue, ['metronomelistener']));
8334
- }
8335
- };
8336
-
8337
7910
  /**
8338
7911
  * This handler is triggered by the metronome. An array of timerIds is given as argument.
8339
7912
  * It will update the animation loop of multiple maps and sliders
@@ -8342,55 +7915,43 @@ var olMetronomeHandler = function olMetronomeHandler(timerIds, listenerApi) {
8342
7915
  * @param listenerApi ListenerEffectAPI<CoreAppStore, Dispatch, unknown> listenerApi as received from listener
8343
7916
  */
8344
7917
  var metronomeHandler = function metronomeHandler(timerIds, listenerApi) {
8345
- if (isOpenLayersEnabled()) {
8346
- olMetronomeHandler(timerIds, listenerApi);
8347
- return;
8348
- }
8349
7918
  var targetsWithUpdateValue = [];
8350
- var _iterator = _createForOfIteratorHelper(timerIds),
8351
- _step;
8352
- try {
8353
- var _loop = function _loop() {
8354
- var timerId = _step.value;
8355
- var animationListValuesNameAndValue = getAnimationList(listenerApi.getState(), timerId);
8356
- var animationListValues = animationListValuesNameAndValue.map(function (nameAndValue) {
8357
- return nameAndValue.value;
7919
+ var _loop = function _loop() {
7920
+ var timerId = _step.value;
7921
+ var animationListValuesNameAndValue = getAnimationList(listenerApi.getState(), timerId);
7922
+ var animationListValues = animationListValuesNameAndValue.map(function (nameAndValue) {
7923
+ return nameAndValue.value;
7924
+ });
7925
+ var targets = getTargets(listenerApi.getState(), {
7926
+ sourceId: timerId,
7927
+ origin: timerId
7928
+ }, SYNCGROUPS_TYPE_SETTIME);
7929
+ if (targets.length === 0) {
7930
+ // When there are no targets, default to one
7931
+ targets.push({
7932
+ targetId: timerId,
7933
+ value: ''
8358
7934
  });
8359
- var targets = getTargets(listenerApi.getState(), {
8360
- sourceId: timerId,
8361
- origin: timerId
8362
- }, SYNCGROUPS_TYPE_SETTIME);
8363
- if (targets.length === 0) {
8364
- // When there are no targets, default to one
8365
- targets.push({
8366
- targetId: timerId,
8367
- value: ''
8368
- });
8369
- }
8370
- var timerIsInDwell = handleTimerDwell$1(timerId, animationListValues.length);
8371
- var timerShouldStepForward = prefetchAnimationTargetsForMetronome(timerId, animationListValues, targets) && !timerIsInDwell;
8372
- // Determine the next step
8373
- var timerStep = timerShouldStepForward ? getNextStep$1(timerId, animationListValues.length) : getCurrentStep$1(timerId);
8374
- setStep$1(timerId, timerStep);
8375
- var updatedValue = animationListValues[timerStep];
8376
- targetsWithUpdateValue.push.apply(targetsWithUpdateValue, _toConsumableArray(targets.map(function (target) {
8377
- return _objectSpread2(_objectSpread2({}, target), {}, {
8378
- value: updatedValue
8379
- });
8380
- })));
8381
- var speedDelay = getMapAnimationDelay(listenerApi.getState(), timerId);
8382
- var speed = 1000 / (speedDelay || 1);
8383
- metronome.setSpeed(timerId, speed);
8384
- };
8385
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
8386
- _loop();
8387
7935
  }
8388
- // Update all targets of all sync groups in one action.
8389
- } catch (err) {
8390
- _iterator.e(err);
8391
- } finally {
8392
- _iterator.f();
7936
+ var timerIsInDwell = handleTimerDwell(timerId, animationListValues.length);
7937
+ var timerShouldStepForward = prefetchAnimationTargetsForMetronome(timerId, animationListValues, targets) && !timerIsInDwell;
7938
+ // Determine the next step
7939
+ var timerStep = timerShouldStepForward ? getNextStep(timerId, animationListValues.length) : getCurrentStep(timerId);
7940
+ setStep(timerId, timerStep);
7941
+ var updatedValue = animationListValues[timerStep];
7942
+ targetsWithUpdateValue.push.apply(targetsWithUpdateValue, targets.map(function (target) {
7943
+ return Object.assign({}, target, {
7944
+ value: updatedValue
7945
+ });
7946
+ }));
7947
+ var speedDelay = getMapAnimationDelay(listenerApi.getState(), timerId);
7948
+ var speed = 1000 / (speedDelay || 1);
7949
+ metronome.setSpeed(timerId, speed);
7950
+ };
7951
+ for (var _iterator = _createForOfIteratorHelperLoose(timerIds), _step; !(_step = _iterator()).done;) {
7952
+ _loop();
8393
7953
  }
7954
+ // Update all targets of all sync groups in one action.
8394
7955
  if (targetsWithUpdateValue.length > 0) {
8395
7956
  listenerApi.dispatch(setTimeSync(null, targetsWithUpdateValue, ['metronomelistener']));
8396
7957
  }
@@ -8420,6 +7981,41 @@ metronomeListener.startListening({
8420
7981
  }()
8421
7982
  });
8422
7983
 
7984
+ /* *
7985
+ * Licensed under the Apache License, Version 2.0 (the "License");
7986
+ * you may not use this file except in compliance with the License.
7987
+ * You may obtain a copy of the License at
7988
+ *
7989
+ * http://www.apache.org/licenses/LICENSE-2.0
7990
+ *
7991
+ * Unless required by applicable law or agreed to in writing, software
7992
+ * distributed under the License is distributed on an "AS IS" BASIS,
7993
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7994
+ * See the License for the specific language governing permissions and
7995
+ * limitations under the License.
7996
+ *
7997
+ * Copyright 2025 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7998
+ * Copyright 2025 - Finnish Meteorological Institute (FMI)
7999
+ * Copyright 2025 - The Norwegian Meteorological Institute (MET Norway)
8000
+ * */
8001
+ var unifyReducerMaps = function unifyReducerMaps(reducerMaps) {
8002
+ var unifiedReducerMaps = {};
8003
+ for (var _iterator = _createForOfIteratorHelperLoose(reducerMaps), _step; !(_step = _iterator()).done;) {
8004
+ var reducersMap = _step.value;
8005
+ for (var _i = 0, _Object$entries = Object.entries(reducersMap); _i < _Object$entries.length; _i++) {
8006
+ var _Object$entries$_i = _Object$entries[_i],
8007
+ key = _Object$entries$_i[0],
8008
+ reducer = _Object$entries$_i[1];
8009
+ if (key in unifiedReducerMaps && unifiedReducerMaps[key] !== reducer) {
8010
+ throw new Error("Reducer key " + key + " is already defined with a different reducer");
8011
+ } else {
8012
+ unifiedReducerMaps[key] = reducer;
8013
+ }
8014
+ }
8015
+ }
8016
+ return unifiedReducerMaps;
8017
+ };
8018
+
8423
8019
  /* *
8424
8020
  * Licensed under the Apache License, Version 2.0 (the "License");
8425
8021
  * you may not use this file except in compliance with the License.
@@ -8438,15 +8034,18 @@ metronomeListener.startListening({
8438
8034
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
8439
8035
  * */
8440
8036
  var getSingularDrawtoolDrawLayerId = function getSingularDrawtoolDrawLayerId(mapId) {
8441
- return "drawlayer-".concat(mapId);
8037
+ return "drawlayer-" + mapId;
8442
8038
  };
8443
8039
 
8444
- var createLayersState = function createLayersState(layerId) {
8445
- var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8040
+ var createLayersState = function createLayersState(layerId, props) {
8041
+ var _byId;
8042
+ if (props === void 0) {
8043
+ props = {};
8044
+ }
8446
8045
  return {
8447
- byId: _defineProperty({}, layerId, createLayer(_objectSpread2({
8046
+ byId: (_byId = {}, _byId[layerId] = createLayer(Object.assign({
8448
8047
  id: layerId
8449
- }, props))),
8048
+ }, props)), _byId),
8450
8049
  allIds: [layerId],
8451
8050
  availableBaseLayers: {
8452
8051
  allIds: [],
@@ -8463,26 +8062,18 @@ var createMultipleLayersState = function createMultipleLayersState(layers, mapId
8463
8062
  byId: {}
8464
8063
  }
8465
8064
  };
8466
- var _iterator = _createForOfIteratorHelper(layers),
8467
- _step;
8468
- try {
8469
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
8470
- var layer = _step.value;
8471
- var layerState = createLayer(_objectSpread2(_objectSpread2({}, layer), {}, {
8472
- id: layer.id,
8473
- mapId: mapId
8474
- }));
8475
- mockState.byId[layer.id] = _objectSpread2({}, layerState);
8476
- mockState.allIds.push(layer.id);
8477
- if (layer.layerType === LayerType.baseLayer) {
8478
- mockState.availableBaseLayers.byId[layer.id] = _objectSpread2({}, layerState);
8479
- mockState.availableBaseLayers.allIds.push(layer.id);
8480
- }
8065
+ for (var _iterator = _createForOfIteratorHelperLoose(layers), _step; !(_step = _iterator()).done;) {
8066
+ var layer = _step.value;
8067
+ var layerState = createLayer(Object.assign({}, layer, {
8068
+ id: layer.id,
8069
+ mapId: mapId
8070
+ }));
8071
+ mockState.byId[layer.id] = Object.assign({}, layerState);
8072
+ mockState.allIds.push(layer.id);
8073
+ if (layer.layerType === LayerType.baseLayer) {
8074
+ mockState.availableBaseLayers.byId[layer.id] = Object.assign({}, layerState);
8075
+ mockState.availableBaseLayers.allIds.push(layer.id);
8481
8076
  }
8482
- } catch (err) {
8483
- _iterator.e(err);
8484
- } finally {
8485
- _iterator.f();
8486
8077
  }
8487
8078
  return mockState;
8488
8079
  };
@@ -8499,7 +8090,7 @@ var createWebmapState = function createWebmapState() {
8499
8090
  var mapState = createMap({
8500
8091
  id: mapId
8501
8092
  });
8502
- mockState.byId[mapId] = _objectSpread2({}, mapState);
8093
+ mockState.byId[mapId] = Object.assign({}, mapState);
8503
8094
  mockState.allIds.push(mapId);
8504
8095
  }
8505
8096
  return mockState;
@@ -8517,7 +8108,7 @@ var createMapDimensionsState = function createMapDimensionsState(dimensions) {
8517
8108
  var mapState = createMap({
8518
8109
  id: mapId
8519
8110
  });
8520
- mockState.byId[mapId] = _objectSpread2({}, mapState);
8111
+ mockState.byId[mapId] = Object.assign({}, mapState);
8521
8112
  mockState.byId[mapId].dimensions = dimensions;
8522
8113
  mockState.allIds.push(mapId);
8523
8114
  }
@@ -8562,7 +8153,7 @@ var mockStateMapWithLayer = function mockStateMapWithLayer(layer, mapId) {
8562
8153
  service: layer.service,
8563
8154
  dimensions: layer.dimensions
8564
8155
  }),
8565
- syncGroups: _objectSpread2(_objectSpread2({}, initialState$2), {}, {
8156
+ syncGroups: Object.assign({}, initialState$2, {
8566
8157
  viewState: {
8567
8158
  timeslider: {
8568
8159
  groups: [{
@@ -8585,7 +8176,7 @@ var mockStateMapWithLayer = function mockStateMapWithLayer(layer, mapId) {
8585
8176
  };
8586
8177
  var mockLinkedState = function mockLinkedState() {
8587
8178
  return {
8588
- syncGroups: _objectSpread2(_objectSpread2({}, initialState$2), {}, {
8179
+ syncGroups: Object.assign({}, initialState$2, {
8589
8180
  viewState: {
8590
8181
  timeslider: {
8591
8182
  groups: [{
@@ -8698,7 +8289,7 @@ var mockStateMapWithMultipleLayers = function mockStateMapWithMultipleLayers(lay
8698
8289
  allIds: ['serviceid_1']
8699
8290
  },
8700
8291
  layers: createMultipleLayersState(layers, mapId),
8701
- syncGroups: _objectSpread2(_objectSpread2({}, initialState$2), {}, {
8292
+ syncGroups: Object.assign({}, initialState$2, {
8702
8293
  viewState: {
8703
8294
  timeslider: {
8704
8295
  groups: [{
@@ -8771,7 +8362,7 @@ var mockStateMapWithDimensions = function mockStateMapWithDimensions(layer, mapI
8771
8362
  mapId: mapId,
8772
8363
  service: layer.service,
8773
8364
  dimensions: layer.dimensions,
8774
- enabled: (layer === null || layer === void 0 ? void 0 : layer.enabled) !== undefined ? layer.enabled : true
8365
+ enabled: (layer == null ? void 0 : layer.enabled) !== undefined ? layer.enabled : true
8775
8366
  })
8776
8367
  };
8777
8368
  };
@@ -8861,7 +8452,7 @@ var storeReducerMap = {
8861
8452
  drawingtools: drawingToolReducer,
8862
8453
  router: routerReducer
8863
8454
  };
8864
- var storeMiddlewares = [mapListener.middleware, serviceListener.middleware, layersListener.middleware, metronomeListener.middleware, syncGroupsListener.middleware, genericListener.middleware, drawingToolListener.middleware, routerListener.middleware, openlayersListener.middleware];
8455
+ var storeMiddlewares = [mapListener.middleware, serviceListener.middleware, layersListener.middleware, metronomeListener.middleware, syncGroupsListener.middleware, genericListener.middleware, drawingToolListener.middleware, routerListener.middleware];
8865
8456
  var storeRootReducer = combineReducers(storeReducerMap);
8866
8457
  var createMockStore = function createMockStore(mockState) {
8867
8458
  return configureStore({
@@ -8872,5 +8463,61 @@ var createMockStore = function createMockStore(mockState) {
8872
8463
  }
8873
8464
  });
8874
8465
  };
8466
+ var getDefaultEnhancers = function getDefaultEnhancers() {
8467
+ return new EnhancerArray();
8468
+ };
8469
+ /**
8470
+ * This creates an OpenGeoWeb redux store for redux connected components
8471
+ *
8472
+ * @param preloadedState Initial state for your application
8473
+ * @param extraReducers Additional reducers, you can pass your own reducers. See apps/geoweb/src/app/store.ts for how it is used in GeoWeb.
8474
+ * @param extraMiddleWares Additional middlewares
8475
+ * @param extraEnhancer Custom enhancers
8476
+ * @param enableDevTools Set to true to enable redux devtools.
8477
+ * @returns A redux store you can use with the core components
8478
+ */
8479
+ var configureOpenGeoWebStore = function configureOpenGeoWebStore(preloadedState, extraReducers, extraMiddleWares, extraEnhancers, enableDevTools) {
8480
+ if (preloadedState === void 0) {
8481
+ preloadedState = {};
8482
+ }
8483
+ if (extraReducers === void 0) {
8484
+ extraReducers = {};
8485
+ }
8486
+ if (extraMiddleWares === void 0) {
8487
+ extraMiddleWares = [];
8488
+ }
8489
+ if (extraEnhancers === void 0) {
8490
+ extraEnhancers = getDefaultEnhancers();
8491
+ }
8492
+ if (enableDevTools === void 0) {
8493
+ enableDevTools = false;
8494
+ }
8495
+ var allReducers = unifyReducerMaps([storeReducerMap, extraReducers]);
8496
+ var openGeoWebReducers = combineReducers(allReducers);
8497
+ // Combine middlewares
8498
+ var middlewares = [mapListener.middleware, serviceListener.middleware, layersListener.middleware, genericListener.middleware].concat(extraMiddleWares);
8499
+ // Ensure we do not add middlewares twice
8500
+ var uniqueMiddlewares = Array.from(new Set(middlewares.map(function (obj) {
8501
+ return obj;
8502
+ })));
8503
+ return configureStore({
8504
+ reducer: openGeoWebReducers,
8505
+ preloadedState: preloadedState,
8506
+ enhancers: function enhancers(defaultEnhancers) {
8507
+ return [compose.apply(void 0, [].concat(defaultEnhancers, extraEnhancers))];
8508
+ },
8509
+ devTools: enableDevTools,
8510
+ middleware: function middleware(getDefaultMiddleware) {
8511
+ return [].concat(getDefaultMiddleware({
8512
+ serializableCheck: {
8513
+ warnAfter: 128
8514
+ },
8515
+ immutableCheck: {
8516
+ warnAfter: 128
8517
+ }
8518
+ })).concat(uniqueMiddlewares);
8519
+ }
8520
+ });
8521
+ };
8875
8522
 
8876
- export { IS_LEGEND_OPEN_BY_DEFAULT, createMockStore, createViewObjectForNewMap, drawingToolActions, drawingToolListener, drawingToolReducer, selectors as drawingToolSelectors, filterLayers$1 as filterLayers, genericActions, genericListener, selectors$3 as genericSelectors, types as genericTypes, getSingularDrawtoolDrawLayerId, getUserAddedServices, getViewObjectForMapId, getViewObjectForSyncGroup, initialState$2 as initialState, layerActions, layerReducer, selectors$6 as layerSelectors, types$3 as layerTypes, utils$1 as layerUtils, layersListener, constants as linkComponentTypesConstants, loadingIndicatorActions, constants$1 as loadingIndicatorConstants, loadingIndicatorReducer, selectors$2 as loadingIndicatorSelectors, mapActions, enums as mapEnums, mapListener, mapReducer, selectors$1 as mapSelectors, types$4 as mapTypes, mapUtils, metronomeListener, openlayersListener, routerActions, routerListener, routerReducer, utils as routerUtils, selectorMemoizationOptions, serviceActions, serviceListener, serviceReducer, selectors$7 as serviceSelectors, types$5 as serviceTypes, setUserAddedServices, storeMiddlewares, storeReducerMap, storeTestSettings, storeTestUtils, utils$3 as storeUtils, constants$2 as syncConstants, syncGroupsActions, syncGroupsListener, syncGroupsReducer, selector as syncGroupsSelector, selectors$4 as syncGroupsSelectors, types$1 as syncGroupsTypes, types$1 as types, uiActions, uiReducer, selectors$5 as uiSelectors, types$2 as uiTypes, useSetupDialog, useUpdateSharedData };
8523
+ export { IS_LEGEND_OPEN_BY_DEFAULT, configureOpenGeoWebStore, createMockStore, drawingToolActions, drawingToolListener, drawingToolReducer, selectors as drawingToolSelectors, filterLayers$1 as filterLayers, genericActions, genericListener, selectors$3 as genericSelectors, types as genericTypes, getSingularDrawtoolDrawLayerId, getUserAddedServices, initialState$2 as initialState, layerActions, layerReducer, selectors$6 as layerSelectors, types$3 as layerTypes, utils$1 as layerUtils, layersListener, constants as linkComponentTypesConstants, loadingIndicatorActions, constants$1 as loadingIndicatorConstants, loadingIndicatorReducer, selectors$2 as loadingIndicatorSelectors, mapActions, enums as mapEnums, mapListener, mapReducer, selectors$1 as mapSelectors, types$4 as mapTypes, mapUtils, metronomeListener, routerActions, routerListener, routerReducer, utils as routerUtils, selectorMemoizationOptions, serviceActions, serviceListener, serviceReducer, selectors$7 as serviceSelectors, types$5 as serviceTypes, setUserAddedServices, storeMiddlewares, storeReducerMap, storeTestSettings, storeTestUtils, utils$3 as storeUtils, constants$2 as syncConstants, syncGroupsActions, syncGroupsListener, syncGroupsReducer, selector as syncGroupsSelector, selectors$4 as syncGroupsSelectors, types$1 as syncGroupsTypes, types$1 as types, uiActions, uiReducer, selectors$5 as uiSelectors, types$2 as uiTypes, unifyReducerMaps, useSetupDialog, useUpdateSharedData };