@opengeoweb/store 12.13.0 → 13.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,8 +1,8 @@
1
1
  import { createSlice, createSelector, createAction, createListenerMiddleware, isAnyOf, createEntityAdapter, combineReducers, configureStore } 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, webmapTestSettings, WMLayer, getWMLayerById, WMInvalidDateValues, handleDateUtilsISOString, isProjectionSupported, queryWMSLayers } from '@opengeoweb/webmap';
5
- import { defaultSecondsPerPx, defaultAnimationDelayAtStart, defaultTimeStep, defaultTimeSpan, roundWithTimeStep, getSpeedDelay } from '@opengeoweb/timeslider';
4
+ import { webmapUtils, parseISO8601IntervalToDateInterval, LayerType, handleDateUtilsISOString, webmapTestSettings, WMLayer, getWMLayerById, WMInvalidDateValues, isProjectionSupported, queryWMSLayers } from '@opengeoweb/webmap';
5
+ import { secondsPerPxFromCanvasWidth, defaultTimeSpan, defaultSecondsPerPx, defaultAnimationDelayAtStart, defaultTimeStep, roundWithTimeStep, getSpeedDelay } from '@opengeoweb/time-slider';
6
6
  import { produce } from 'immer';
7
7
  import { getLastEmptyFeatureIndex, getGeoJson, moveFeature, createInterSections, defaultLayers, emptyGeoJSON, defaultIntersectionStyleProperties, addSelectionTypeToGeoJSON, getFeatureCollection } from '@opengeoweb/webmap-react';
8
8
  export { defaultLayers } from '@opengeoweb/webmap-react';
@@ -663,25 +663,15 @@ var getLayersFromServiceSelector = createSelector(getServiceByUrl, function (ser
663
663
  /**
664
664
  * Gets the layer from the store using the serviceUrl and layerName
665
665
  *
666
- * Example: layer = getLayerFromService(store, 'https://geoservices.knmi.nl/...', 'radar', true)
666
+ * Example: layer = getLayerFromService(store, 'https://geoservices.knmi.nl/...', 'radar')
667
667
  * @param {object} store store: object - The application store
668
668
  * @param {string} serviceUrl serviceUrl: string - Url of the service where the layer belongs to
669
669
  * @param {string} layerName layerName: string - Name of the layer in the service
670
- * @param {boolean} isEDRService isEDRService: boolean - if service is EDR (optional, default to false)
671
670
  * @returns {ServiceLayer} returnType: ServiceLayer - The layer from the service object.
672
671
  */
673
672
  var getLayerFromService = createSelector(getLayersFromServiceSelector, function (_store, _serviceUrl, layerName) {
674
673
  return layerName;
675
- }, function (_store, _serviceUrl, _layerName) {
676
- var isEDRService = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
677
- return isEDRService;
678
- }, function (layers, layerName, isEDRService) {
679
- if (isEDRService) {
680
- var firstParam = layerName.split(',')[0];
681
- return layers.find(function (serviceLayer) {
682
- return serviceLayer.name === firstParam;
683
- });
684
- }
674
+ }, function (layers, layerName) {
685
675
  return layers.find(function (serviceLayer) {
686
676
  return serviceLayer.name === layerName;
687
677
  });
@@ -699,11 +689,24 @@ var getLayerStyles = createSelector(getLayerFromService, function (layer) {
699
689
  var _layer$styles;
700
690
  return (_layer$styles = layer === null || layer === void 0 ? void 0 : layer.styles) !== null && _layer$styles !== void 0 ? _layer$styles : [];
701
691
  }, selectorMemoizationOptions);
692
+ /**
693
+ * Gets the layer title from the servicestore using the serviceUrl and layerName
694
+ *
695
+ * Example: layerStyles = getLayerTitle(store, layerService, layerName);
696
+ * @param {object} store store: object - store from which the layers state will be extracted
697
+ * @param {string} serviceUrl serviceUrl: string - Url of the service where the layer belongs to
698
+ * @param {string} layerName layerName: string - Name of the layer in the service
699
+ * @returns {array} returnType: string - string containing layer title
700
+ */
701
+ var getLayerTitle = createSelector(getLayerFromService, function (layer) {
702
+ return layer === null || layer === void 0 ? void 0 : layer.title;
703
+ }, selectorMemoizationOptions);
702
704
 
703
705
  var selectors$7 = /*#__PURE__*/Object.freeze({
704
706
  __proto__: null,
705
707
  getLayerFromService: getLayerFromService,
706
708
  getLayerStyles: getLayerStyles,
709
+ getLayerTitle: getLayerTitle,
707
710
  getLayersFromServiceSelector: getLayersFromServiceSelector,
708
711
  getServiceByUrl: getServiceByUrl,
709
712
  getServiceIds: getServiceIds,
@@ -1149,6 +1152,17 @@ var parseTimeDimToISO8601Interval = function parseTimeDimToISO8601Interval(timeI
1149
1152
  return interval.startTime && interval.endTime && interval.duration;
1150
1153
  });
1151
1154
  };
1155
+ var produceTimeSliderTimeSpan = function produceTimeSliderTimeSpan(draft, mapId, timeSliderSpan) {
1156
+ if (!draft.byId[mapId] || !timeSliderSpan) {
1157
+ return;
1158
+ }
1159
+ draft.byId[mapId].timeSliderSpan = timeSliderSpan;
1160
+ if (draft.byId[mapId].timeSliderWidth) {
1161
+ draft.byId[mapId].timeSliderSecondsPerPx = secondsPerPxFromCanvasWidth(draft.byId[mapId].timeSliderWidth, draft.byId[mapId].timeSliderSpan || defaultTimeSpan);
1162
+ } else {
1163
+ draft.byId[mapId].timeSliderSecondsPerPx = draft.byId[mapId].timeSliderSecondsPerPx || defaultSecondsPerPx;
1164
+ }
1165
+ };
1152
1166
 
1153
1167
  var utils$2 = /*#__PURE__*/Object.freeze({
1154
1168
  __proto__: null,
@@ -1164,7 +1178,8 @@ var utils$2 = /*#__PURE__*/Object.freeze({
1164
1178
  moveArrayElements: moveArrayElements,
1165
1179
  parseTimeDimToISO8601Interval: parseTimeDimToISO8601Interval,
1166
1180
  produceDraftStateSetMapDimensionFromLayerChangeDimension: produceDraftStateSetMapDimensionFromLayerChangeDimension,
1167
- produceDraftStateSetWebMapDimension: produceDraftStateSetWebMapDimension
1181
+ produceDraftStateSetWebMapDimension: produceDraftStateSetWebMapDimension,
1182
+ produceTimeSliderTimeSpan: produceTimeSliderTimeSpan
1168
1183
  });
1169
1184
 
1170
1185
  var replaceLayerIdsToEnsureUniqueLayerIdsInStore = function replaceLayerIdsToEnsureUniqueLayerIdsInStore(layerIds) {
@@ -1719,18 +1734,26 @@ var slice$6 = createSlice({
1719
1734
  draft.byId[layerId].name = name;
1720
1735
  }
1721
1736
  },
1722
- layerChangeGeojson: function layerChangeGeojson(draft, action) {
1737
+ layerChangeOptions: function layerChangeOptions(draft, action) {
1723
1738
  var _action$payload9 = action.payload,
1724
1739
  layerId = _action$payload9.layerId,
1725
- geojson = _action$payload9.geojson;
1740
+ options = _action$payload9.options;
1741
+ if (draft.byId[layerId] && options) {
1742
+ draft.byId[layerId].options = _objectSpread2({}, options);
1743
+ }
1744
+ },
1745
+ layerChangeGeojson: function layerChangeGeojson(draft, action) {
1746
+ var _action$payload0 = action.payload,
1747
+ layerId = _action$payload0.layerId,
1748
+ geojson = _action$payload0.geojson;
1726
1749
  if (draft.byId[layerId]) {
1727
1750
  draft.byId[layerId].geojson = geojson;
1728
1751
  }
1729
1752
  },
1730
1753
  layerSetGeojsonFromLayer: function layerSetGeojsonFromLayer(draft, action) {
1731
- var _action$payload0 = action.payload,
1732
- layerId = _action$payload0.layerId,
1733
- sourceLayerId = _action$payload0.sourceLayerId;
1754
+ var _action$payload1 = action.payload,
1755
+ layerId = _action$payload1.layerId,
1756
+ sourceLayerId = _action$payload1.sourceLayerId;
1734
1757
  if (draft.byId[layerId]) {
1735
1758
  var _draft$byId$sourceLay;
1736
1759
  draft.byId[layerId].geojson = (_draft$byId$sourceLay = draft.byId[sourceLayerId]) === null || _draft$byId$sourceLay === void 0 ? void 0 : _draft$byId$sourceLay.geojson;
@@ -1764,9 +1787,9 @@ var slice$6 = createSlice({
1764
1787
  }
1765
1788
  },
1766
1789
  setLayers: function setLayers(draft, action) {
1767
- var _action$payload1 = action.payload,
1768
- layers = _action$payload1.layers,
1769
- mapId = _action$payload1.mapId;
1790
+ var _action$payload10 = action.payload,
1791
+ layers = _action$payload10.layers,
1792
+ mapId = _action$payload10.mapId;
1770
1793
  if (!checkValidLayersPayload(layers, mapId)) {
1771
1794
  return;
1772
1795
  }
@@ -1794,9 +1817,9 @@ var slice$6 = createSlice({
1794
1817
  });
1795
1818
  },
1796
1819
  setBaseLayers: function setBaseLayers(draft, action) {
1797
- var _action$payload10 = action.payload,
1798
- layers = _action$payload10.layers,
1799
- mapId = _action$payload10.mapId;
1820
+ var _action$payload11 = action.payload,
1821
+ layers = _action$payload11.layers,
1822
+ mapId = _action$payload11.mapId;
1800
1823
  var filtererdBaseLayers = layers.filter(function (layer) {
1801
1824
  return layer.layerType === LayerType.baseLayer || layer.layerType === LayerType.overLayer;
1802
1825
  });
@@ -1842,9 +1865,9 @@ var slice$6 = createSlice({
1842
1865
  }
1843
1866
  },
1844
1867
  layerSetDimensions: function layerSetDimensions(draft, action) {
1845
- var _action$payload11 = action.payload,
1846
- dimensions = _action$payload11.dimensions,
1847
- layerId = _action$payload11.layerId;
1868
+ var _action$payload12 = action.payload,
1869
+ dimensions = _action$payload12.dimensions,
1870
+ layerId = _action$payload12.layerId;
1848
1871
  if (draft.byId[layerId]) {
1849
1872
  draft.byId[layerId].dimensions = dimensions;
1850
1873
  }
@@ -1878,9 +1901,9 @@ var slice$6 = createSlice({
1878
1901
  },
1879
1902
  // Overwrites all baselayer for a certain map
1880
1903
  setAvailableBaseLayers: function setAvailableBaseLayers(draft, action) {
1881
- var _action$payload12 = action.payload,
1882
- layers = _action$payload12.layers,
1883
- mapId = _action$payload12.mapId;
1904
+ var _action$payload13 = action.payload,
1905
+ layers = _action$payload13.layers,
1906
+ mapId = _action$payload13.mapId;
1884
1907
  // remove current baselayers for passed map
1885
1908
  draft.availableBaseLayers.allIds = draft.availableBaseLayers.allIds.filter(function (layerId) {
1886
1909
  if (draft.availableBaseLayers.byId[layerId] && draft.availableBaseLayers.byId[layerId].mapId === mapId) {
@@ -1899,9 +1922,9 @@ var slice$6 = createSlice({
1899
1922
  });
1900
1923
  },
1901
1924
  setUseLatestReferenceTime: function setUseLatestReferenceTime(draft, action) {
1902
- var _action$payload13 = action.payload,
1903
- id = _action$payload13.id,
1904
- useLatestReferenceTime = _action$payload13.useLatestReferenceTime;
1925
+ var _action$payload14 = action.payload,
1926
+ id = _action$payload14.id,
1927
+ useLatestReferenceTime = _action$payload14.useLatestReferenceTime;
1905
1928
  var layer = draft.byId[id];
1906
1929
  if (!layer) {
1907
1930
  return;
@@ -1909,10 +1932,10 @@ var slice$6 = createSlice({
1909
1932
  layer.useLatestReferenceTime = useLatestReferenceTime;
1910
1933
  },
1911
1934
  onUpdateLayerInformation: function onUpdateLayerInformation(draft, action) {
1912
- var _action$payload14 = action.payload,
1913
- layerStyle = _action$payload14.layerStyle,
1914
- layerDimensions = _action$payload14.layerDimensions,
1915
- error = _action$payload14.error;
1935
+ var _action$payload15 = action.payload,
1936
+ layerStyle = _action$payload15.layerStyle,
1937
+ layerDimensions = _action$payload15.layerDimensions,
1938
+ error = _action$payload15.error;
1916
1939
  if (error) {
1917
1940
  draft.byId[error.layerId].status = LayerStatus.error;
1918
1941
  return;
@@ -1955,9 +1978,21 @@ var slice$6 = createSlice({
1955
1978
  return dim.name === newLayerDimension.name;
1956
1979
  });
1957
1980
  if (existingDimension) {
1958
- var _newLayerDimension$va;
1959
- if (existingDimension.name === 'reference_time' && reduxLayer.useLatestReferenceTime && newLayerDimension.maxValue) {
1960
- existingDimension.currentValue = newLayerDimension.maxValue;
1981
+ var _newLayerDimension$va2;
1982
+ if (existingDimension.name === 'reference_time' && reduxLayer.useLatestReferenceTime) {
1983
+ var _existingDimension$va, _newLayerDimension$va;
1984
+ // update currentvalue to corresponding LATEST value
1985
+ // LATEST, LATEST-1, LATEST-2, LATEST-3
1986
+ var existingValues = (_existingDimension$va = existingDimension.values) === null || _existingDimension$va === void 0 ? void 0 : _existingDimension$va.split(',');
1987
+ var newValues = (_newLayerDimension$va = newLayerDimension.values) === null || _newLayerDimension$va === void 0 ? void 0 : _newLayerDimension$va.split(',');
1988
+ if (existingValues && newValues) {
1989
+ var match = [1, 2, 3, 4].find(function (offset) {
1990
+ return existingDimension.currentValue === existingValues.at(-offset) && newValues.at(-offset) !== undefined;
1991
+ });
1992
+ if (match) {
1993
+ existingDimension.currentValue = newValues.at(-match);
1994
+ }
1995
+ }
1961
1996
  }
1962
1997
  /* If found update only minValue, maxValue and values */
1963
1998
  existingDimension.maxValue = newLayerDimension.maxValue;
@@ -1967,7 +2002,7 @@ var slice$6 = createSlice({
1967
2002
  existingDimension.units = newLayerDimension.units;
1968
2003
  }
1969
2004
  /* For non time dimensions also update the current value, but only if the currentValue does not exist in the new dimension values */
1970
- var listOfValues = (_newLayerDimension$va = newLayerDimension.values) === null || _newLayerDimension$va === void 0 ? void 0 : _newLayerDimension$va.split(',');
2005
+ var listOfValues = (_newLayerDimension$va2 = newLayerDimension.values) === null || _newLayerDimension$va2 === void 0 ? void 0 : _newLayerDimension$va2.split(',');
1971
2006
  if (existingDimension.name !== 'time' && existingDimension.name !== 'reference_time' && !(listOfValues !== null && listOfValues !== void 0 && listOfValues.includes(existingDimension.currentValue))) {
1972
2007
  existingDimension.currentValue = newLayerDimension.currentValue;
1973
2008
  }
@@ -2007,25 +2042,25 @@ var slice$6 = createSlice({
2007
2042
  },
2008
2043
  // feature layer actions
2009
2044
  setSelectedFeature: function setSelectedFeature(draft, action) {
2010
- var _action$payload15 = action.payload,
2011
- layerId = _action$payload15.layerId,
2012
- selectedFeatureIndex = _action$payload15.selectedFeatureIndex;
2045
+ var _action$payload16 = action.payload,
2046
+ layerId = _action$payload16.layerId,
2047
+ selectedFeatureIndex = _action$payload16.selectedFeatureIndex;
2013
2048
  if (!draft.byId[layerId]) {
2014
2049
  return;
2015
2050
  }
2016
2051
  draft.byId[layerId].selectedFeatureIndex = selectedFeatureIndex;
2017
2052
  },
2018
2053
  updateFeature: function updateFeature(draft, action) {
2019
- var _action$payload16 = action.payload,
2020
- layerId = _action$payload16.layerId,
2021
- geojson = _action$payload16.geojson,
2022
- _action$payload16$sho = _action$payload16.shouldAllowMultipleShapes,
2023
- shouldAllowMultipleShapes = _action$payload16$sho === void 0 ? false : _action$payload16$sho,
2024
- _action$payload16$rea = _action$payload16.reason,
2025
- reason = _action$payload16$rea === void 0 ? '' : _action$payload16$rea,
2026
- geoJSONIntersectionLayerId = _action$payload16.geoJSONIntersectionLayerId,
2027
- geoJSONIntersectionBoundsLayerId = _action$payload16.geoJSONIntersectionBoundsLayerId,
2028
- selectionType = _action$payload16.selectionType;
2054
+ var _action$payload17 = action.payload,
2055
+ layerId = _action$payload17.layerId,
2056
+ geojson = _action$payload17.geojson,
2057
+ _action$payload17$sho = _action$payload17.shouldAllowMultipleShapes,
2058
+ shouldAllowMultipleShapes = _action$payload17$sho === void 0 ? false : _action$payload17$sho,
2059
+ _action$payload17$rea = _action$payload17.reason,
2060
+ reason = _action$payload17$rea === void 0 ? '' : _action$payload17$rea,
2061
+ geoJSONIntersectionLayerId = _action$payload17.geoJSONIntersectionLayerId,
2062
+ geoJSONIntersectionBoundsLayerId = _action$payload17.geoJSONIntersectionBoundsLayerId,
2063
+ selectionType = _action$payload17.selectionType;
2029
2064
  var currentLayer = draft.byId[layerId];
2030
2065
  if (!currentLayer) {
2031
2066
  return;
@@ -2054,10 +2089,10 @@ var slice$6 = createSlice({
2054
2089
  }
2055
2090
  },
2056
2091
  updateFeatureProperties: function updateFeatureProperties(draft, action) {
2057
- var _action$payload17 = action.payload,
2058
- layerId = _action$payload17.layerId,
2059
- properties = _action$payload17.properties,
2060
- selectedFeatureIndex = _action$payload17.selectedFeatureIndex;
2092
+ var _action$payload18 = action.payload,
2093
+ layerId = _action$payload18.layerId,
2094
+ properties = _action$payload18.properties,
2095
+ selectedFeatureIndex = _action$payload18.selectedFeatureIndex;
2061
2096
  var currentLayer = draft.byId[layerId];
2062
2097
  if (!currentLayer) {
2063
2098
  return;
@@ -2073,10 +2108,10 @@ var slice$6 = createSlice({
2073
2108
  }
2074
2109
  },
2075
2110
  toggleFeatureMode: function toggleFeatureMode(draft, action) {
2076
- var _action$payload18 = action.payload,
2077
- layerId = _action$payload18.layerId,
2078
- isInEditMode = _action$payload18.isInEditMode,
2079
- drawMode = _action$payload18.drawMode;
2111
+ var _action$payload19 = action.payload,
2112
+ layerId = _action$payload19.layerId,
2113
+ isInEditMode = _action$payload19.isInEditMode,
2114
+ drawMode = _action$payload19.drawMode;
2080
2115
  if (!draft.byId[layerId]) {
2081
2116
  return;
2082
2117
  }
@@ -2088,10 +2123,10 @@ var slice$6 = createSlice({
2088
2123
  }
2089
2124
  },
2090
2125
  exitFeatureDrawMode: function exitFeatureDrawMode(draft, action) {
2091
- var _action$payload19 = action.payload,
2092
- layerId = _action$payload19.layerId,
2093
- shouldAllowMultipleShapes = _action$payload19.shouldAllowMultipleShapes,
2094
- reason = _action$payload19.reason;
2126
+ var _action$payload20 = action.payload,
2127
+ layerId = _action$payload20.layerId,
2128
+ shouldAllowMultipleShapes = _action$payload20.shouldAllowMultipleShapes,
2129
+ reason = _action$payload20.reason;
2095
2130
  if (!draft.byId[layerId]) {
2096
2131
  return;
2097
2132
  }
@@ -2116,9 +2151,9 @@ var slice$6 = createSlice({
2116
2151
  },
2117
2152
  // layer info actions
2118
2153
  showLayerInfo: function showLayerInfo(draft, action) {
2119
- var _action$payload20 = action.payload,
2120
- serviceUrl = _action$payload20.serviceUrl,
2121
- layerName = _action$payload20.layerName;
2154
+ var _action$payload21 = action.payload,
2155
+ serviceUrl = _action$payload21.serviceUrl,
2156
+ layerName = _action$payload21.layerName;
2122
2157
  draft.activeLayerInfo = {
2123
2158
  serviceUrl: serviceUrl,
2124
2159
  layerName: layerName
@@ -2130,9 +2165,9 @@ var slice$6 = createSlice({
2130
2165
  },
2131
2166
  extraReducers: function extraReducers(builder) {
2132
2167
  builder.addCase(setTimeSync, function (draft, action) {
2133
- var _action$payload21 = action.payload,
2134
- targetsFromAction = _action$payload21.targets,
2135
- source = _action$payload21.source;
2168
+ var _action$payload22 = action.payload,
2169
+ targetsFromAction = _action$payload22.targets,
2170
+ source = _action$payload22.source;
2136
2171
  /* Because we want backwards compatibility with the previous code, we also need to listen to the original source action */
2137
2172
  var targets = [];
2138
2173
  if (source) {
@@ -2146,11 +2181,14 @@ var slice$6 = createSlice({
2146
2181
  targets.forEach(function (payload) {
2147
2182
  var targetId = payload.targetId,
2148
2183
  value = payload.value;
2149
- var dimension = {
2150
- name: 'time',
2151
- currentValue: value
2152
- };
2153
- produceDraftStateForAllLayersForDimensionWithinMap(draft, dimension, targetId, null);
2184
+ if (value !== null && value !== void 0 && value.currentTime) {
2185
+ var currentTime = value.currentTime;
2186
+ var dimension = {
2187
+ name: 'time',
2188
+ currentValue: currentTime
2189
+ };
2190
+ produceDraftStateForAllLayersForDimensionWithinMap(draft, dimension, targetId, null);
2191
+ }
2154
2192
  });
2155
2193
  }).addCase(setLayerActionSync, function (draft, action) {
2156
2194
  /*
@@ -2159,9 +2197,9 @@ var slice$6 = createSlice({
2159
2197
  * These targets can be used as payloads in new Layer actions.
2160
2198
  * These actions are here handled via the layer reducer, as it is the same logic
2161
2199
  */
2162
- var _action$payload22 = action.payload,
2163
- targets = _action$payload22.targets,
2164
- source = _action$payload22.source;
2200
+ var _action$payload23 = action.payload,
2201
+ targets = _action$payload23.targets,
2202
+ source = _action$payload23.source;
2165
2203
  return targets.reduce(function (prevState, target) {
2166
2204
  var actionType = (source === null || source === void 0 ? void 0 : source.type) || 'GENERIC_SYNC_SETLAYERACTIONS';
2167
2205
  var action = {
@@ -2452,10 +2490,7 @@ var slice$4 = createSlice({
2452
2490
  var _action$payload4 = action.payload,
2453
2491
  mapId = _action$payload4.mapId,
2454
2492
  timeSliderSpan = _action$payload4.timeSliderSpan;
2455
- if (!draft.byId[mapId]) {
2456
- return;
2457
- }
2458
- draft.byId[mapId].timeSliderSpan = timeSliderSpan;
2493
+ produceTimeSliderTimeSpan(draft, mapId, timeSliderSpan);
2459
2494
  },
2460
2495
  setTimeStep: function setTimeStep(draft, action) {
2461
2496
  var _action$payload5 = action.payload,
@@ -2554,6 +2589,7 @@ var slice$4 = createSlice({
2554
2589
  return;
2555
2590
  }
2556
2591
  draft.byId[mapId].timeSliderWidth = timeSliderWidth;
2592
+ draft.byId[mapId].timeSliderSecondsPerPx = secondsPerPxFromCanvasWidth(timeSliderWidth, draft.byId[mapId].timeSliderSpan || defaultTimeSpan);
2557
2593
  },
2558
2594
  setTimeSliderCenterTime: function setTimeSliderCenterTime(draft, action) {
2559
2595
  var _action$payload12 = action.payload,
@@ -2564,118 +2600,109 @@ var slice$4 = createSlice({
2564
2600
  }
2565
2601
  draft.byId[mapId].timeSliderCenterTime = timeSliderCenterTime;
2566
2602
  },
2567
- setTimeSliderSecondsPerPx: function setTimeSliderSecondsPerPx(draft, action) {
2603
+ toggleAutoUpdate: function toggleAutoUpdate(draft, action) {
2568
2604
  var _action$payload13 = action.payload,
2569
2605
  mapId = _action$payload13.mapId,
2570
- timeSliderSecondsPerPx = _action$payload13.timeSliderSecondsPerPx;
2571
- if (!draft.byId[mapId]) {
2572
- return;
2573
- }
2574
- draft.byId[mapId].timeSliderSecondsPerPx = timeSliderSecondsPerPx;
2575
- },
2576
- toggleAutoUpdate: function toggleAutoUpdate(draft, action) {
2577
- var _action$payload14 = action.payload,
2578
- mapId = _action$payload14.mapId,
2579
- shouldAutoUpdate = _action$payload14.shouldAutoUpdate;
2606
+ shouldAutoUpdate = _action$payload13.shouldAutoUpdate;
2580
2607
  if (!draft.byId[mapId]) {
2581
2608
  return;
2582
2609
  }
2583
2610
  draft.byId[mapId].isAutoUpdating = shouldAutoUpdate;
2584
2611
  },
2585
2612
  setEndTimeOverriding: function setEndTimeOverriding(draft, action) {
2586
- var _action$payload15 = action.payload,
2587
- mapId = _action$payload15.mapId,
2588
- shouldEndtimeOverride = _action$payload15.shouldEndtimeOverride;
2613
+ var _action$payload14 = action.payload,
2614
+ mapId = _action$payload14.mapId,
2615
+ shouldEndtimeOverride = _action$payload14.shouldEndtimeOverride;
2589
2616
  if (!draft.byId[mapId]) {
2590
2617
  return;
2591
2618
  }
2592
2619
  draft.byId[mapId].shouldEndtimeOverride = shouldEndtimeOverride;
2593
2620
  },
2594
2621
  toggleTimestepAuto: function toggleTimestepAuto(draft, action) {
2595
- var _action$payload16 = action.payload,
2596
- mapId = _action$payload16.mapId,
2597
- timestepAuto = _action$payload16.timestepAuto;
2622
+ var _action$payload15 = action.payload,
2623
+ mapId = _action$payload15.mapId,
2624
+ timestepAuto = _action$payload15.timestepAuto;
2598
2625
  if (!draft.byId[mapId]) {
2599
2626
  return;
2600
2627
  }
2601
2628
  draft.byId[mapId].isTimestepAuto = timestepAuto;
2602
2629
  },
2603
2630
  toggleTimeSpanAuto: function toggleTimeSpanAuto(draft, action) {
2604
- var _action$payload17 = action.payload,
2605
- mapId = _action$payload17.mapId,
2606
- timeSpanAuto = _action$payload17.timeSpanAuto;
2631
+ var _action$payload16 = action.payload,
2632
+ mapId = _action$payload16.mapId,
2633
+ timeSpanAuto = _action$payload16.timeSpanAuto;
2607
2634
  if (!draft.byId[mapId]) {
2608
2635
  return;
2609
2636
  }
2610
2637
  draft.byId[mapId].isTimeSpanAuto = timeSpanAuto;
2611
2638
  },
2612
2639
  toggleAnimationLengthAuto: function toggleAnimationLengthAuto(draft, action) {
2613
- var _action$payload18 = action.payload,
2614
- mapId = _action$payload18.mapId,
2615
- autoAnimationLength = _action$payload18.autoAnimationLength;
2640
+ var _action$payload17 = action.payload,
2641
+ mapId = _action$payload17.mapId,
2642
+ autoAnimationLength = _action$payload17.autoAnimationLength;
2616
2643
  if (!draft.byId[mapId]) {
2617
2644
  return;
2618
2645
  }
2619
2646
  draft.byId[mapId].isAnimationLengthAuto = autoAnimationLength;
2620
2647
  },
2621
2648
  toggleTimeSliderHover: function toggleTimeSliderHover(draft, action) {
2622
- var _action$payload19 = action.payload,
2623
- mapId = _action$payload19.mapId,
2624
- isTimeSliderHoverOn = _action$payload19.isTimeSliderHoverOn;
2649
+ var _action$payload18 = action.payload,
2650
+ mapId = _action$payload18.mapId,
2651
+ isTimeSliderHoverOn = _action$payload18.isTimeSliderHoverOn;
2625
2652
  if (!draft.byId[mapId]) {
2626
2653
  return;
2627
2654
  }
2628
2655
  draft.byId[mapId].isTimeSliderHoverOn = isTimeSliderHoverOn;
2629
2656
  },
2630
2657
  toggleTimeSliderIsVisible: function toggleTimeSliderIsVisible(draft, action) {
2631
- var _action$payload20 = action.payload,
2632
- mapId = _action$payload20.mapId,
2633
- isTimeSliderVisible = _action$payload20.isTimeSliderVisible;
2658
+ var _action$payload19 = action.payload,
2659
+ mapId = _action$payload19.mapId,
2660
+ isTimeSliderVisible = _action$payload19.isTimeSliderVisible;
2634
2661
  if (!draft.byId[mapId]) {
2635
2662
  return;
2636
2663
  }
2637
2664
  draft.byId[mapId].isTimeSliderVisible = isTimeSliderVisible;
2638
2665
  },
2639
2666
  toggleZoomControls: function toggleZoomControls(draft, action) {
2640
- var _action$payload21 = action.payload,
2641
- mapId = _action$payload21.mapId,
2642
- shouldShowZoomControls = _action$payload21.shouldShowZoomControls;
2667
+ var _action$payload20 = action.payload,
2668
+ mapId = _action$payload20.mapId,
2669
+ shouldShowZoomControls = _action$payload20.shouldShowZoomControls;
2643
2670
  if (!draft.byId[mapId]) {
2644
2671
  return;
2645
2672
  }
2646
2673
  draft.byId[mapId].shouldShowZoomControls = shouldShowZoomControls;
2647
2674
  },
2648
2675
  setMapPinLocation: function setMapPinLocation(draft, action) {
2649
- var _action$payload22 = action.payload,
2650
- mapId = _action$payload22.mapId,
2651
- mapPinLocation = _action$payload22.mapPinLocation;
2676
+ var _action$payload21 = action.payload,
2677
+ mapId = _action$payload21.mapId,
2678
+ mapPinLocation = _action$payload21.mapPinLocation;
2652
2679
  if (!draft.byId[mapId]) {
2653
2680
  return;
2654
2681
  }
2655
2682
  draft.byId[mapId].mapPinLocation = mapPinLocation;
2656
2683
  },
2657
2684
  setDisableMapPin: function setDisableMapPin(draft, action) {
2658
- var _action$payload23 = action.payload,
2659
- mapId = _action$payload23.mapId,
2660
- disableMapPin = _action$payload23.disableMapPin;
2685
+ var _action$payload22 = action.payload,
2686
+ mapId = _action$payload22.mapId,
2687
+ disableMapPin = _action$payload22.disableMapPin;
2661
2688
  if (!draft.byId[mapId]) {
2662
2689
  return;
2663
2690
  }
2664
2691
  draft.byId[mapId].disableMapPin = disableMapPin;
2665
2692
  },
2666
2693
  toggleMapPinIsVisible: function toggleMapPinIsVisible(draft, action) {
2667
- var _action$payload24 = action.payload,
2668
- mapId = _action$payload24.mapId,
2669
- displayMapPin = _action$payload24.displayMapPin;
2694
+ var _action$payload23 = action.payload,
2695
+ mapId = _action$payload23.mapId,
2696
+ displayMapPin = _action$payload23.displayMapPin;
2670
2697
  if (!draft.byId[mapId]) {
2671
2698
  return;
2672
2699
  }
2673
2700
  draft.byId[mapId].displayMapPin = displayMapPin;
2674
2701
  },
2675
2702
  setDockedLayerManagerSize: function setDockedLayerManagerSize(draft, action) {
2676
- var _action$payload25 = action.payload,
2677
- mapId = _action$payload25.mapId,
2678
- dockedLayerManagerSize = _action$payload25.dockedLayerManagerSize;
2703
+ var _action$payload24 = action.payload,
2704
+ mapId = _action$payload24.mapId,
2705
+ dockedLayerManagerSize = _action$payload24.dockedLayerManagerSize;
2679
2706
  if (!draft.byId[mapId]) {
2680
2707
  return;
2681
2708
  }
@@ -2690,9 +2717,9 @@ var slice$4 = createSlice({
2690
2717
  draft.defaultMapSettings = action.payload.preset;
2691
2718
  },
2692
2719
  changeOverlayer: function changeOverlayer(draft, action) {
2693
- var _action$payload26 = action.payload,
2694
- mapId = _action$payload26.mapId,
2695
- selectedOverlayer = _action$payload26.selectedOverlayer;
2720
+ var _action$payload25 = action.payload,
2721
+ mapId = _action$payload25.mapId,
2722
+ selectedOverlayer = _action$payload25.selectedOverlayer;
2696
2723
  if (!draft.byId[mapId]) {
2697
2724
  return;
2698
2725
  }
@@ -2701,10 +2728,10 @@ var slice$4 = createSlice({
2701
2728
  },
2702
2729
  extraReducers: function extraReducers(builder) {
2703
2730
  builder.addCase(layerActions.addLayer, function (draft, action) {
2704
- var _action$payload27 = action.payload,
2705
- layerId = _action$payload27.layerId,
2706
- mapId = _action$payload27.mapId,
2707
- layer = _action$payload27.layer;
2731
+ var _action$payload26 = action.payload,
2732
+ layerId = _action$payload26.layerId,
2733
+ mapId = _action$payload26.mapId,
2734
+ layer = _action$payload26.layer;
2708
2735
  if (!draft.byId[mapId]) {
2709
2736
  return;
2710
2737
  }
@@ -2723,9 +2750,9 @@ var slice$4 = createSlice({
2723
2750
  draft.byId[mapId].mapLayers.unshift(layerId);
2724
2751
  }
2725
2752
  }).addCase(layerActions.duplicateMapLayer, function (draft, action) {
2726
- var _action$payload28 = action.payload,
2727
- newLayerId = _action$payload28.newLayerId,
2728
- mapId = _action$payload28.mapId;
2753
+ var _action$payload27 = action.payload,
2754
+ newLayerId = _action$payload27.newLayerId,
2755
+ mapId = _action$payload27.mapId;
2729
2756
  if (!draft.byId[mapId]) {
2730
2757
  return;
2731
2758
  }
@@ -2735,10 +2762,10 @@ var slice$4 = createSlice({
2735
2762
  }
2736
2763
  draft.byId[mapId].mapLayers.unshift(newLayerId);
2737
2764
  }).addCase(layerActions.addBaseLayer, function (draft, action) {
2738
- var _action$payload29 = action.payload,
2739
- layer = _action$payload29.layer,
2740
- layerId = _action$payload29.layerId,
2741
- mapId = _action$payload29.mapId;
2765
+ var _action$payload28 = action.payload,
2766
+ layer = _action$payload28.layer,
2767
+ layerId = _action$payload28.layerId,
2768
+ mapId = _action$payload28.mapId;
2742
2769
  if (!draft.byId[mapId]) {
2743
2770
  return;
2744
2771
  }
@@ -2768,9 +2795,9 @@ var slice$4 = createSlice({
2768
2795
  draft.byId[mapId].autoTimeStepLayerId = activeLayerId;
2769
2796
  }
2770
2797
  }).addCase(layerActions.setBaseLayers, function (draft, action) {
2771
- var _action$payload30 = action.payload,
2772
- layers = _action$payload30.layers,
2773
- mapId = _action$payload30.mapId;
2798
+ var _action$payload29 = action.payload,
2799
+ layers = _action$payload29.layers,
2800
+ mapId = _action$payload29.mapId;
2774
2801
  // Split into base and overlayers
2775
2802
  var baseLayers = [];
2776
2803
  var overLayers = [];
@@ -2800,9 +2827,9 @@ var slice$4 = createSlice({
2800
2827
  }
2801
2828
  }
2802
2829
  }).addCase(layerActions.layerDelete, function (draft, action) {
2803
- var _action$payload31 = action.payload,
2804
- mapId = _action$payload31.mapId,
2805
- layerId = _action$payload31.layerId;
2830
+ var _action$payload30 = action.payload,
2831
+ mapId = _action$payload30.mapId,
2832
+ layerId = _action$payload30.layerId;
2806
2833
  var map = draft.byId[mapId];
2807
2834
  if (!map) {
2808
2835
  return;
@@ -2828,9 +2855,9 @@ var slice$4 = createSlice({
2828
2855
  return id !== layerId;
2829
2856
  });
2830
2857
  }).addCase(layerActions.baseLayerDelete, function (draft, action) {
2831
- var _action$payload32 = action.payload,
2832
- mapId = _action$payload32.mapId,
2833
- layerId = _action$payload32.layerId;
2858
+ var _action$payload31 = action.payload,
2859
+ mapId = _action$payload31.mapId,
2860
+ layerId = _action$payload31.layerId;
2834
2861
  if (!draft.byId[mapId]) {
2835
2862
  return;
2836
2863
  }
@@ -2841,14 +2868,14 @@ var slice$4 = createSlice({
2841
2868
  return id !== layerId;
2842
2869
  });
2843
2870
  }).addCase(layerActions.layerChangeDimension, function (draft, action) {
2844
- var _action$payload33 = action.payload,
2845
- layerId = _action$payload33.layerId,
2846
- dimension = _action$payload33.dimension;
2871
+ var _action$payload32 = action.payload,
2872
+ layerId = _action$payload32.layerId,
2873
+ dimension = _action$payload32.dimension;
2847
2874
  produceDraftStateSetMapDimensionFromLayerChangeDimension(draft, layerId, dimension);
2848
2875
  }).addCase(setTimeSync, function (draft, action) {
2849
- var _action$payload34 = action.payload,
2850
- targetsFromAction = _action$payload34.targets,
2851
- source = _action$payload34.source;
2876
+ var _action$payload33 = action.payload,
2877
+ targetsFromAction = _action$payload33.targets,
2878
+ source = _action$payload33.source;
2852
2879
  /* Because we want backwards compatibility with the previous code, we also need to listen to the original source action */
2853
2880
  var targets = [];
2854
2881
  if (source) {
@@ -2863,18 +2890,47 @@ var slice$4 = createSlice({
2863
2890
  var targetId = target.targetId,
2864
2891
  value = target.value;
2865
2892
  if (draft.byId[targetId]) {
2866
- var dimension = {
2867
- name: 'time',
2868
- currentValue: value
2869
- };
2870
- produceDraftStateSetWebMapDimension(draft, targetId, dimension, true);
2871
- produceDraftStateSetMapDimensionFromLayerChangeDimension(draft, targetId, dimension);
2893
+ // SetTimeSliderSpan
2894
+ if (value !== null && value !== void 0 && value.timeSliderSpan) {
2895
+ produceTimeSliderTimeSpan(draft, targetId, value.timeSliderSpan);
2896
+ }
2897
+ // SetTimeSliderCenterTime
2898
+ if (value !== null && value !== void 0 && value.timeSliderCenterTime) {
2899
+ draft.byId[targetId].timeSliderCenterTime = value.timeSliderCenterTime;
2900
+ }
2901
+ // SetTimeSliderStep
2902
+ if (value !== null && value !== void 0 && value.timeSliderStep) {
2903
+ draft.byId[targetId].timeStep = value.timeSliderStep;
2904
+ // When timestep is synced between slider, isTimestepAuto should be set to false.
2905
+ draft.byId[targetId].isTimestepAuto = false;
2906
+ }
2907
+ // SetAnimationStartTime
2908
+ if (value !== null && value !== void 0 && value.timeSliderAnimationStartTime) {
2909
+ draft.byId[targetId].animationStartTime = value.timeSliderAnimationStartTime;
2910
+ }
2911
+ // SetAnimationEndTime
2912
+ if (value !== null && value !== void 0 && value.timeSliderAnimationEndTime) {
2913
+ draft.byId[targetId].animationEndTime = value.timeSliderAnimationEndTime;
2914
+ }
2915
+ // SetAnimationDelay
2916
+ if (value !== null && value !== void 0 && value.timeSliderAnimationDelay) {
2917
+ draft.byId[targetId].animationDelay = value.timeSliderAnimationDelay;
2918
+ }
2919
+ // SetTime / update actual current value
2920
+ if (value !== null && value !== void 0 && value.currentTime) {
2921
+ var dimension = {
2922
+ name: 'time',
2923
+ currentValue: value.currentTime
2924
+ };
2925
+ produceDraftStateSetWebMapDimension(draft, targetId, dimension, true);
2926
+ produceDraftStateSetMapDimensionFromLayerChangeDimension(draft, targetId, dimension);
2927
+ }
2872
2928
  }
2873
2929
  });
2874
2930
  }).addCase(setBboxSync, function (draft, action) {
2875
- var _action$payload35 = action.payload,
2876
- targetsFromAction = _action$payload35.targets,
2877
- source = _action$payload35.source;
2931
+ var _action$payload34 = action.payload,
2932
+ targetsFromAction = _action$payload34.targets,
2933
+ source = _action$payload34.source;
2878
2934
  /* Because we want backwards compatibility with the previous code, we also need to listen to the original source action */
2879
2935
  var targets = [];
2880
2936
  if (source) {
@@ -2906,9 +2962,9 @@ var slice$4 = createSlice({
2906
2962
  * These targets can be used as payloads in new Layer actions.
2907
2963
  * These actions are here handled via the layer reducer, as it is the same logic
2908
2964
  */
2909
- var _action$payload36 = action.payload,
2910
- targets = _action$payload36.targets,
2911
- source = _action$payload36.source;
2965
+ var _action$payload35 = action.payload,
2966
+ targets = _action$payload35.targets,
2967
+ source = _action$payload35.source;
2912
2968
  return targets.reduce(function (prevState, target) {
2913
2969
  var actionType = (source === null || source === void 0 ? void 0 : source.type) || 'GENERIC_SYNC_SETLAYERACTIONS';
2914
2970
  var action = {
@@ -2930,9 +2986,9 @@ var slice$4 = createSlice({
2930
2986
  });
2931
2987
  return draft;
2932
2988
  }).addCase(mapChangeDimension, function (draft, action) {
2933
- var _action$payload37 = action.payload,
2934
- mapId = _action$payload37.mapId,
2935
- dimensionFromAction = _action$payload37.dimension;
2989
+ var _action$payload36 = action.payload,
2990
+ mapId = _action$payload36.mapId,
2991
+ dimensionFromAction = _action$payload36.dimension;
2936
2992
  produceDraftStateSetWebMapDimension(draft, mapId, dimensionFromAction, true);
2937
2993
  }).addCase(setMapPreset, function (draft, action) {
2938
2994
  var mapId = action.payload.mapId;
@@ -2952,9 +3008,9 @@ var slice$4 = createSlice({
2952
3008
  draft.byId[mapId].animationDelay = defaultAnimationDelayAtStart;
2953
3009
  draft.byId[mapId].dockedLayerManagerSize = '';
2954
3010
  }).addCase(uiActions.registerDialog, function (draft, action) {
2955
- var _action$payload38 = action.payload,
2956
- mapId = _action$payload38.mapId,
2957
- type = _action$payload38.type;
3011
+ var _action$payload37 = action.payload,
3012
+ mapId = _action$payload37.mapId,
3013
+ type = _action$payload37.type;
2958
3014
  if (!draft.byId[mapId]) {
2959
3015
  return;
2960
3016
  }
@@ -3204,8 +3260,13 @@ var getLayerEnabled = createSelector(getLayerById, function (layer) {
3204
3260
  * @returns {string} returnType: string - layer name
3205
3261
  */
3206
3262
  var getLayerName = createSelector(getLayerById, function (layer) {
3207
- var _layer$name;
3208
- return (_layer$name = layer === null || layer === void 0 ? void 0 : layer.name) !== null && _layer$name !== void 0 ? _layer$name : '';
3263
+ if (!layer) {
3264
+ return '';
3265
+ }
3266
+ if (layer.layerType === LayerType.edrFeatureLayer && layer.options && layer.options.parameterNames.length) {
3267
+ return layer.options.parameterNames[0];
3268
+ }
3269
+ return (layer === null || layer === void 0 ? void 0 : layer.name) || '';
3209
3270
  }, selectorMemoizationOptions);
3210
3271
  /**
3211
3272
  * Gets layer service
@@ -3392,6 +3453,9 @@ var getLayerType = createSelector(getLayerById, function (layer) {
3392
3453
  var _layer$layerType;
3393
3454
  return (_layer$layerType = layer === null || layer === void 0 ? void 0 : layer.layerType) !== null && _layer$layerType !== void 0 ? _layer$layerType : 'mapLayer';
3394
3455
  }, selectorMemoizationOptions);
3456
+ var getLayerOptions = createSelector(getLayerById, function (layer) {
3457
+ return layer === null || layer === void 0 ? void 0 : layer.options;
3458
+ }, selectorMemoizationOptions);
3395
3459
  /**
3396
3460
  * Gets all overlayers for a given mapId
3397
3461
  * Example: overlayers = getOverlayersForMapId(store, 'mapId123')
@@ -3413,6 +3477,47 @@ var getOverlayersForMapId = createSelector([layerStore, function (_store, mapId)
3413
3477
  });
3414
3478
  return overLayers;
3415
3479
  }, selectorMemoizationOptions);
3480
+ /**
3481
+ * Gets the layer title from the service store using the layerId
3482
+ *
3483
+ * Example: layerTitle = getLayerTitleFromService(store, 'layerId_1')
3484
+ * @param {object} store store: object - object from which the layers state will be extracted
3485
+ * @param {string} layerId layerId: string - Id of the layer
3486
+ * @returns {string} returnType: string - string containing layer title
3487
+ */
3488
+ var getLayerTitleFromService = createSelector(function (store) {
3489
+ return store;
3490
+ }, getLayerService, getLayerName, function (store, service, name) {
3491
+ return getLayerTitle(store, service, name);
3492
+ }, selectorMemoizationOptions);
3493
+ /**
3494
+ * Gets layer displayname. For EDR layers with multiple parameters, the collectionId is used as displayname. Otherwise the layer title from the service is used.
3495
+ *
3496
+ * Example: layerName = getLayerDisplayName(store, 'layerId_1')
3497
+ * @param {object} store store: object - object from which the layers state will be extracted
3498
+ * @param {string} layerId layerId: string - Id of the layer
3499
+ * @returns {string} returnType: string - layer displayname
3500
+ */
3501
+ var getLayerDisplayName = createSelector(getLayerType, getLayerOptions, getLayerTitleFromService, getLayerName, function (layerType, layerOptions, layerTitle, layerName) {
3502
+ if (layerType === LayerType.edrFeatureLayer && layerOptions) {
3503
+ return (layerOptions === null || layerOptions === void 0 ? void 0 : layerOptions.parameterNames.length) > 1 && layerOptions.collectionId ? layerOptions.collectionId : layerTitle || layerName;
3504
+ }
3505
+ return layerTitle || layerName;
3506
+ }, selectorMemoizationOptions);
3507
+ /**
3508
+ * Gets the layer missing status. A layer is missing if it is not found in the service store or if its status is 'error'.
3509
+ *
3510
+ * Example: isLayerMissing = getIsLayerMissing(store, 'layerId_1')
3511
+ * @param {object} store store: object - object from which the layers state will be extracted
3512
+ * @param {string} layerId layerId: string - Id of the layer
3513
+ * @returns {boolean} returnType: boolean - true if layer is missing
3514
+ */
3515
+ var getIsLayerMissing = createSelector(function (store) {
3516
+ return store;
3517
+ }, getLayerService, getLayerName, getLayerStatus, function (store, service, name, status) {
3518
+ var layer = getLayerFromService(store, service, name);
3519
+ return !layer || status === LayerStatus.error;
3520
+ }, selectorMemoizationOptions);
3416
3521
 
3417
3522
  var selectors$6 = /*#__PURE__*/Object.freeze({
3418
3523
  __proto__: null,
@@ -3427,22 +3532,26 @@ var selectors$6 = /*#__PURE__*/Object.freeze({
3427
3532
  getFeatureLayers: getFeatureLayers,
3428
3533
  getHasFeatureLayerGeoJSON: getHasFeatureLayerGeoJSON,
3429
3534
  getIsLayerInEditMode: getIsLayerInEditMode,
3535
+ getIsLayerMissing: getIsLayerMissing,
3430
3536
  getIsLayerPresent: getIsLayerPresent,
3431
3537
  getLayerById: getLayerById,
3432
3538
  getLayerByIdWithoutTimeDimension: getLayerByIdWithoutTimeDimension,
3433
3539
  getLayerCurrentTime: getLayerCurrentTime,
3434
3540
  getLayerDimension: getLayerDimension,
3435
3541
  getLayerDimensions: getLayerDimensions,
3542
+ getLayerDisplayName: getLayerDisplayName,
3436
3543
  getLayerEnabled: getLayerEnabled,
3437
3544
  getLayerHasTimeDimension: getLayerHasTimeDimension,
3438
3545
  getLayerIsInsideAcceptanceTime: getLayerIsInsideAcceptanceTime,
3439
3546
  getLayerName: getLayerName,
3440
3547
  getLayerNonTimeDimensions: getLayerNonTimeDimensions,
3441
3548
  getLayerOpacity: getLayerOpacity,
3549
+ getLayerOptions: getLayerOptions,
3442
3550
  getLayerService: getLayerService,
3443
3551
  getLayerStatus: getLayerStatus,
3444
3552
  getLayerStyle: getLayerStyle,
3445
3553
  getLayerTimeDimension: getLayerTimeDimension,
3554
+ getLayerTitleFromService: getLayerTitleFromService,
3446
3555
  getLayerType: getLayerType,
3447
3556
  getLayers: getLayers,
3448
3557
  getLayersById: getLayersById,
@@ -4649,26 +4758,21 @@ function (state, mapId) {
4649
4758
  });
4650
4759
  var getSelectedFeatureAsGeoJSON = createSelector([function (state, mapId) {
4651
4760
  var _state$linkedState2;
4652
- var sharedData = (_state$linkedState2 = state.linkedState) === null || _state$linkedState2 === void 0 ? void 0 : _state$linkedState2.sharedData[mapId];
4653
- var _ref = sharedData || {},
4654
- _ref$features = _ref.features,
4655
- features = _ref$features === void 0 ? [] : _ref$features,
4656
- selectedFeatureId = _ref.selectedFeatureId;
4657
- return {
4658
- features: features,
4659
- selectedFeatureId: selectedFeatureId
4660
- };
4661
- }], function (_ref2) {
4662
- var features = _ref2.features,
4663
- selectedFeatureId = _ref2.selectedFeatureId;
4664
- if (features && selectedFeatureId) {
4665
- var _features$2;
4666
- var selectedFeature = (_features$2 = features[0]) === null || _features$2 === void 0 ? void 0 : _features$2.geoJSON.features.find(function (feature) {
4667
- return feature.id === selectedFeatureId;
4668
- });
4669
- return selectedFeature;
4761
+ return (_state$linkedState2 = state.linkedState) === null || _state$linkedState2 === void 0 ? void 0 : _state$linkedState2.sharedData[mapId];
4762
+ }], function (sharedData) {
4763
+ var _features$2;
4764
+ if (!sharedData) {
4765
+ return null;
4670
4766
  }
4671
- return null;
4767
+ var features = sharedData.features,
4768
+ selectedFeatureId = sharedData.selectedFeatureId;
4769
+ if (!features || !selectedFeatureId) {
4770
+ return null;
4771
+ }
4772
+ var selectedFeature = (_features$2 = features[0]) === null || _features$2 === void 0 ? void 0 : _features$2.geoJSON.features.find(function (feature) {
4773
+ return feature.id === selectedFeatureId;
4774
+ });
4775
+ return selectedFeature;
4672
4776
  });
4673
4777
 
4674
4778
  var selectors$3 = /*#__PURE__*/Object.freeze({
@@ -4883,6 +4987,27 @@ var genericActions = _objectSpread2(_objectSpread2({}, syncGroupsActions), {}, {
4883
4987
  setBbox: setBbox
4884
4988
  });
4885
4989
 
4990
+ /* *
4991
+ * Licensed under the Apache License, Version 2.0 (the "License");
4992
+ * you may not use this file except in compliance with the License.
4993
+ * You may obtain a copy of the License at
4994
+ *
4995
+ * http://www.apache.org/licenses/LICENSE-2.0
4996
+ *
4997
+ * Unless required by applicable law or agreed to in writing, software
4998
+ * distributed under the License is distributed on an "AS IS" BASIS,
4999
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5000
+ * See the License for the specific language governing permissions and
5001
+ * limitations under the License.
5002
+ *
5003
+ * Copyright 2025 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5004
+ * Copyright 2025 - Finnish Meteorological Institute (FMI)
5005
+ * Copyright 2025 - The Norwegian Meteorological Institute (MET Norway)
5006
+ * */
5007
+ var IS_LEGEND_OPEN_BY_DEFAULT = false;
5008
+ var SECONDS_IN_DAY = 86400;
5009
+ var SECONDS_IN_HOUR = 3600;
5010
+
4886
5011
  var _excluded$2 = ["mapId"];
4887
5012
  var getMapStore = function getMapStore(store) {
4888
5013
  return store && store.webmap;
@@ -5166,16 +5291,16 @@ var isAnimating = function isAnimating(store, mapId) {
5166
5291
  * @param {string} mapId mapId: string - Id of the map
5167
5292
  * @returns {object} returnType: object - object containing isAnimating boolean and id string
5168
5293
  */
5169
- var linkedMapAnimationInfo = function linkedMapAnimationInfo(store, mapId) {
5170
- var _genericSelectors$get;
5294
+ var linkedMapAnimationInfo = createSelector(getMapStore, getSynchronizationGroupStore, getMapById, function (mapStore, syncStore, mapState) {
5171
5295
  var animationInfo = {
5172
- isAnimating: isAnimating(store, mapId),
5173
- id: mapId
5296
+ isAnimating: (mapState === null || mapState === void 0 ? void 0 : mapState.isAnimating) || false,
5297
+ id: (mapState === null || mapState === void 0 ? void 0 : mapState.id) || ''
5174
5298
  };
5175
- (_genericSelectors$get = getSynchronizationGroupStore(store)) === null || _genericSelectors$get === void 0 || _genericSelectors$get.groups.allIds.forEach(function (groupId) {
5176
- if (getSynchronizationGroupStore(store).groups.byId[groupId].targets.byId[animationInfo.id] && getSynchronizationGroupStore(store).groups.byId[groupId].targets.byId[animationInfo.id].linked) {
5177
- getSynchronizationGroupStore(store).groups.byId[groupId].targets.allIds.forEach(function (id) {
5178
- if (isAnimating(store, id) === true) {
5299
+ syncStore === null || syncStore === void 0 || syncStore.groups.allIds.forEach(function (groupId) {
5300
+ if (syncStore.groups.byId[groupId].targets.byId[animationInfo.id] && syncStore.groups.byId[groupId].targets.byId[animationInfo.id].linked) {
5301
+ syncStore.groups.byId[groupId].targets.allIds.forEach(function (id) {
5302
+ var _mapStore$byId$id;
5303
+ if ((mapStore === null || mapStore === void 0 || (_mapStore$byId$id = mapStore.byId[id]) === null || _mapStore$byId$id === void 0 ? void 0 : _mapStore$byId$id.isAnimating) === true) {
5179
5304
  animationInfo.isAnimating = true;
5180
5305
  animationInfo.id = id;
5181
5306
  }
@@ -5183,7 +5308,7 @@ var linkedMapAnimationInfo = function linkedMapAnimationInfo(store, mapId) {
5183
5308
  }
5184
5309
  });
5185
5310
  return animationInfo;
5186
- };
5311
+ }, selectorMemoizationOptions);
5187
5312
  /**
5188
5313
  * Gets start time of animation
5189
5314
  *
@@ -5327,7 +5452,7 @@ var getMapTimeSliderCenterTime = function getMapTimeSliderCenterTime(store, mapI
5327
5452
  };
5328
5453
  var getMapTimeSliderStartCenterEndAndStep = createSelector(getMapById, function (store) {
5329
5454
  var _store$timeStep2;
5330
- var timeSliderWidth = ((store === null || store === void 0 ? void 0 : store.timeSliderWidth) || 0) * 60;
5455
+ var timeSliderWidth = (store === null || store === void 0 ? void 0 : store.timeSliderSpan) || SECONDS_IN_DAY;
5331
5456
  var center = store ? store.timeSliderCenterTime : dateUtils.unix(dateUtils.utc());
5332
5457
  var start = center ? center - timeSliderWidth / 2 : undefined;
5333
5458
  var end = center ? center + timeSliderWidth / 2 : undefined;
@@ -5702,6 +5827,11 @@ var getAnimationList = createSelector(getLayersById, getMapById, getAnimationSta
5702
5827
  }
5703
5828
  return animationList;
5704
5829
  }, selectorMemoizationOptions);
5830
+ var getAnimationListAsEpochTimes = createSelector(getAnimationList, function (list) {
5831
+ return list.map(function (kvp) {
5832
+ return dateUtils.parseISO(handleDateUtilsISOString(kvp.value)).getTime();
5833
+ });
5834
+ }, selectorMemoizationOptions);
5705
5835
  /**
5706
5836
  * @param {object} store store: object - store object
5707
5837
  * @param {string} mapId mapId: string - Id of the map
@@ -5759,6 +5889,7 @@ var selectors$1 = /*#__PURE__*/Object.freeze({
5759
5889
  getAllUniqueDimensions: getAllUniqueDimensions,
5760
5890
  getAnimationEndTime: getAnimationEndTime,
5761
5891
  getAnimationList: getAnimationList,
5892
+ getAnimationListAsEpochTimes: getAnimationListAsEpochTimes,
5762
5893
  getAnimationRange: getAnimationRange,
5763
5894
  getAnimationStartTime: getAnimationStartTime,
5764
5895
  getAutoTimeStepLayerId: getAutoTimeStepLayerId,
@@ -5844,25 +5975,6 @@ var enums = /*#__PURE__*/Object.freeze({
5844
5975
  get MapActionOrigin () { return MapActionOrigin; }
5845
5976
  });
5846
5977
 
5847
- /* *
5848
- * Licensed under the Apache License, Version 2.0 (the "License");
5849
- * you may not use this file except in compliance with the License.
5850
- * You may obtain a copy of the License at
5851
- *
5852
- * http://www.apache.org/licenses/LICENSE-2.0
5853
- *
5854
- * Unless required by applicable law or agreed to in writing, software
5855
- * distributed under the License is distributed on an "AS IS" BASIS,
5856
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5857
- * See the License for the specific language governing permissions and
5858
- * limitations under the License.
5859
- *
5860
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5861
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
5862
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
5863
- * */
5864
- var IS_LEGEND_OPEN_BY_DEFAULT = false;
5865
-
5866
5978
  var filterLayers = function filterLayers() {
5867
5979
  var layers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
5868
5980
  var layerParser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (layer) {
@@ -5880,7 +5992,7 @@ var filterLayers = function filterLayers() {
5880
5992
  overLayers: overLayers
5881
5993
  };
5882
5994
  }
5883
- if (layer.layerType === LayerType.mapLayer || layer.layerType === LayerType.edrLayer) {
5995
+ if (layer.layerType === LayerType.mapLayer || layer.layerType === LayerType.edrFeatureLayer) {
5884
5996
  return {
5885
5997
  mapLayers: mapLayers.concat(parsedLayer),
5886
5998
  baseLayers: baseLayers,
@@ -6297,20 +6409,23 @@ genericListener.startListening({
6297
6409
  actionCreator: setTime,
6298
6410
  effect: function () {
6299
6411
  var _effect = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref, listenerApi) {
6300
- var payload, value, origin, targets, groups;
6412
+ var payload, value, origin, currentTime, targets, groups;
6301
6413
  return _regeneratorRuntime().wrap(function _callee$(_context) {
6302
6414
  while (1) switch (_context.prev = _context.next) {
6303
6415
  case 0:
6304
6416
  payload = _ref.payload;
6305
6417
  listenerApi.cancelActiveListeners();
6306
6418
  value = payload.value, origin = payload.origin;
6307
- /* Test if the value is according to the expected time format */
6308
- if (!setTimeValidatorRexexp.test(value)) {
6309
- console.error("setTime value ".concat(value, " does not conform to format [YYYY-MM-DDThh:mm:ssZ]. It was triggered by ").concat(origin));
6310
- } else {
6311
- targets = getTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETTIME);
6312
- groups = getTargetGroups(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETTIME);
6313
- listenerApi.dispatch(setTimeSync(payload, targets, groups));
6419
+ if (value !== null && value !== void 0 && value.currentTime) {
6420
+ currentTime = value.currentTime;
6421
+ /* Test if the current is according to the expected time format */
6422
+ if (!setTimeValidatorRexexp.test(currentTime)) {
6423
+ console.error("setTime value ".concat(currentTime, " does not conform to format [YYYY-MM-DDThh:mm:ssZ]. It was triggered by ").concat(origin));
6424
+ } else {
6425
+ targets = getTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETTIME);
6426
+ groups = getTargetGroups(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETTIME);
6427
+ listenerApi.dispatch(setTimeSync(payload, targets, groups));
6428
+ }
6314
6429
  }
6315
6430
  case 4:
6316
6431
  case "end":
@@ -6324,20 +6439,37 @@ genericListener.startListening({
6324
6439
  return effect;
6325
6440
  }()
6326
6441
  });
6442
+ // Synchronize timeslider settings for actions 'centertime', 'span' and 'timestep'.
6327
6443
  genericListener.startListening({
6328
- actionCreator: setBbox,
6444
+ matcher: isAnyOf(mapActions.setTimeSliderCenterTime, mapActions.setTimeSliderSpan, mapActions.setTimeStep, mapActions.setAnimationStartTime, mapActions.setAnimationEndTime, mapActions.setAnimationDelay),
6329
6445
  effect: function () {
6330
6446
  var _effect2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref2, listenerApi) {
6331
- var payload, targets, groups;
6447
+ var _synchronizationGroup;
6448
+ var payload, type, sourceId, syncGroupState, newPayload, targets, groups;
6332
6449
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
6333
6450
  while (1) switch (_context2.prev = _context2.next) {
6334
6451
  case 0:
6335
- payload = _ref2.payload;
6452
+ payload = _ref2.payload, type = _ref2.type;
6336
6453
  listenerApi.cancelActiveListeners();
6337
- targets = getTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETBBOX);
6338
- groups = getTargetGroups(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETBBOX);
6339
- listenerApi.dispatch(setBboxSync(payload, targets, groups));
6340
- case 5:
6454
+ sourceId = payload.mapId;
6455
+ syncGroupState = (_synchronizationGroup = getSynchronizationGroupSource(listenerApi.getState(), sourceId)) === null || _synchronizationGroup === void 0 || (_synchronizationGroup = _synchronizationGroup.payloadByType['SYNCGROUPS_TYPE_SETTIME']) === null || _synchronizationGroup === void 0 ? void 0 : _synchronizationGroup.value;
6456
+ newPayload = {
6457
+ sourceId: sourceId,
6458
+ origin: 'timeslidersynclistener',
6459
+ value: {
6460
+ currentTime: syncGroupState === null || syncGroupState === void 0 ? void 0 : syncGroupState.currentTime,
6461
+ timeSliderCenterTime: type === mapActions.setTimeSliderCenterTime.type ? payload.timeSliderCenterTime : (syncGroupState === null || syncGroupState === void 0 ? void 0 : syncGroupState.timeSliderCenterTime) || 0,
6462
+ timeSliderSpan: type === mapActions.setTimeSliderSpan.type ? payload.timeSliderSpan : syncGroupState === null || syncGroupState === void 0 ? void 0 : syncGroupState.timeSliderSpan,
6463
+ timeSliderStep: type === mapActions.setTimeStep.type ? payload.timeStep : syncGroupState === null || syncGroupState === void 0 ? void 0 : syncGroupState.timeSliderStep,
6464
+ timeSliderAnimationStartTime: type === mapActions.setAnimationStartTime.type ? payload.animationStartTime : syncGroupState === null || syncGroupState === void 0 ? void 0 : syncGroupState.timeSliderAnimationStartTime,
6465
+ timeSliderAnimationEndTime: type === mapActions.setAnimationEndTime.type ? payload.animationEndTime : syncGroupState === null || syncGroupState === void 0 ? void 0 : syncGroupState.timeSliderAnimationEndTime,
6466
+ timeSliderAnimationDelay: type === mapActions.setAnimationDelay.type ? payload.animationDelay : syncGroupState === null || syncGroupState === void 0 ? void 0 : syncGroupState.timeSliderAnimationDelay
6467
+ }
6468
+ };
6469
+ targets = getTargets(listenerApi.getState(), newPayload, SYNCGROUPS_TYPE_SETTIME);
6470
+ groups = getTargetGroups(listenerApi.getState(), newPayload, SYNCGROUPS_TYPE_SETTIME);
6471
+ listenerApi.dispatch(setTimeSync(newPayload, targets, groups));
6472
+ case 8:
6341
6473
  case "end":
6342
6474
  return _context2.stop();
6343
6475
  }
@@ -6350,27 +6482,19 @@ genericListener.startListening({
6350
6482
  }()
6351
6483
  });
6352
6484
  genericListener.startListening({
6353
- matcher: isAnyOf(layerActions.layerChangeName, layerActions.layerChangeEnabled, layerActions.layerChangeOpacity, layerActions.layerChangeDimension, layerActions.layerChangeStyle),
6485
+ actionCreator: setBbox,
6354
6486
  effect: function () {
6355
6487
  var _effect3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(_ref3, listenerApi) {
6356
- var payload, type, targets;
6488
+ var payload, targets, groups;
6357
6489
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
6358
6490
  while (1) switch (_context3.prev = _context3.next) {
6359
6491
  case 0:
6360
- payload = _ref3.payload, type = _ref3.type;
6492
+ payload = _ref3.payload;
6361
6493
  listenerApi.cancelActiveListeners();
6362
- /* Should not listen to actions from itself */
6363
- if (!(payload && payload.origin === LayerActionOrigin.ReactMapViewParseLayer)) {
6364
- _context3.next = 4;
6365
- break;
6366
- }
6367
- return _context3.abrupt("return");
6368
- case 4:
6369
- targets = getLayerActionsTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6370
- if (targets && targets.length > 0) {
6371
- listenerApi.dispatch(setLayerActionSync(payload, targets, type));
6372
- }
6373
- case 6:
6494
+ targets = getTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETBBOX);
6495
+ groups = getTargetGroups(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETBBOX);
6496
+ listenerApi.dispatch(setBboxSync(payload, targets, groups));
6497
+ case 5:
6374
6498
  case "end":
6375
6499
  return _context3.stop();
6376
6500
  }
@@ -6383,7 +6507,7 @@ genericListener.startListening({
6383
6507
  }()
6384
6508
  });
6385
6509
  genericListener.startListening({
6386
- actionCreator: layerActions.addLayer,
6510
+ matcher: isAnyOf(layerActions.layerChangeName, layerActions.layerChangeEnabled, layerActions.layerChangeOpacity, layerActions.layerChangeDimension, layerActions.layerChangeStyle),
6387
6511
  effect: function () {
6388
6512
  var _effect4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_ref4, listenerApi) {
6389
6513
  var payload, type, targets;
@@ -6399,7 +6523,7 @@ genericListener.startListening({
6399
6523
  }
6400
6524
  return _context4.abrupt("return");
6401
6525
  case 4:
6402
- targets = getAddLayerActionsTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6526
+ targets = getLayerActionsTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6403
6527
  if (targets && targets.length > 0) {
6404
6528
  listenerApi.dispatch(setLayerActionSync(payload, targets, type));
6405
6529
  }
@@ -6416,24 +6540,25 @@ genericListener.startListening({
6416
6540
  }()
6417
6541
  });
6418
6542
  genericListener.startListening({
6419
- actionCreator: layerActions.duplicateMapLayer,
6543
+ actionCreator: layerActions.addLayer,
6420
6544
  effect: function () {
6421
6545
  var _effect5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(_ref5, listenerApi) {
6422
- var payload, sourceLayer, newPayload, targets;
6546
+ var payload, type, targets;
6423
6547
  return _regeneratorRuntime().wrap(function _callee5$(_context5) {
6424
6548
  while (1) switch (_context5.prev = _context5.next) {
6425
6549
  case 0:
6426
- payload = _ref5.payload;
6550
+ payload = _ref5.payload, type = _ref5.type;
6427
6551
  listenerApi.cancelActiveListeners();
6428
- sourceLayer = getLayerById(listenerApi.getState(), payload.oldLayerId);
6429
- newPayload = {
6430
- mapId: payload.mapId,
6431
- layer: sourceLayer,
6432
- origin: payload.origin
6433
- };
6434
- targets = getAddLayerActionsTargets(listenerApi.getState(), newPayload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6552
+ /* Should not listen to actions from itself */
6553
+ if (!(payload && payload.origin === LayerActionOrigin.ReactMapViewParseLayer)) {
6554
+ _context5.next = 4;
6555
+ break;
6556
+ }
6557
+ return _context5.abrupt("return");
6558
+ case 4:
6559
+ targets = getAddLayerActionsTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6435
6560
  if (targets && targets.length > 0) {
6436
- listenerApi.dispatch(setLayerActionSync(newPayload, targets, layerActions.addLayer.type));
6561
+ listenerApi.dispatch(setLayerActionSync(payload, targets, type));
6437
6562
  }
6438
6563
  case 6:
6439
6564
  case "end":
@@ -6448,25 +6573,24 @@ genericListener.startListening({
6448
6573
  }()
6449
6574
  });
6450
6575
  genericListener.startListening({
6451
- actionCreator: mapActions.layerMoveLayer,
6576
+ actionCreator: layerActions.duplicateMapLayer,
6452
6577
  effect: function () {
6453
6578
  var _effect6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(_ref6, listenerApi) {
6454
- var payload, type, targets;
6579
+ var payload, sourceLayer, newPayload, targets;
6455
6580
  return _regeneratorRuntime().wrap(function _callee6$(_context6) {
6456
6581
  while (1) switch (_context6.prev = _context6.next) {
6457
6582
  case 0:
6458
- payload = _ref6.payload, type = _ref6.type;
6583
+ payload = _ref6.payload;
6459
6584
  listenerApi.cancelActiveListeners();
6460
- /* Should not listen to actions from itself */
6461
- if (!(payload && payload.origin === LayerActionOrigin.ReactMapViewParseLayer)) {
6462
- _context6.next = 4;
6463
- break;
6464
- }
6465
- return _context6.abrupt("return");
6466
- case 4:
6467
- targets = getLayerMoveActionsTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6585
+ sourceLayer = getLayerById(listenerApi.getState(), payload.oldLayerId);
6586
+ newPayload = {
6587
+ mapId: payload.mapId,
6588
+ layer: sourceLayer,
6589
+ origin: payload.origin
6590
+ };
6591
+ targets = getAddLayerActionsTargets(listenerApi.getState(), newPayload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6468
6592
  if (targets && targets.length > 0) {
6469
- listenerApi.dispatch(setLayerActionSync(payload, targets, type));
6593
+ listenerApi.dispatch(setLayerActionSync(newPayload, targets, layerActions.addLayer.type));
6470
6594
  }
6471
6595
  case 6:
6472
6596
  case "end":
@@ -6481,7 +6605,7 @@ genericListener.startListening({
6481
6605
  }()
6482
6606
  });
6483
6607
  genericListener.startListening({
6484
- matcher: isAnyOf(mapActions.setAutoLayerId, mapActions.setAutoUpdateLayerId, mapActions.setAutoTimestepLayerId),
6608
+ actionCreator: mapActions.layerMoveLayer,
6485
6609
  effect: function () {
6486
6610
  var _effect7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(_ref7, listenerApi) {
6487
6611
  var payload, type, targets;
@@ -6490,11 +6614,18 @@ genericListener.startListening({
6490
6614
  case 0:
6491
6615
  payload = _ref7.payload, type = _ref7.type;
6492
6616
  listenerApi.cancelActiveListeners();
6493
- targets = getSetAutoLayerIdActionsTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6617
+ /* Should not listen to actions from itself */
6618
+ if (!(payload && payload.origin === LayerActionOrigin.ReactMapViewParseLayer)) {
6619
+ _context7.next = 4;
6620
+ break;
6621
+ }
6622
+ return _context7.abrupt("return");
6623
+ case 4:
6624
+ targets = getLayerMoveActionsTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6494
6625
  if (targets && targets.length > 0) {
6495
6626
  listenerApi.dispatch(setLayerActionSync(payload, targets, type));
6496
6627
  }
6497
- case 4:
6628
+ case 6:
6498
6629
  case "end":
6499
6630
  return _context7.stop();
6500
6631
  }
@@ -6507,7 +6638,7 @@ genericListener.startListening({
6507
6638
  }()
6508
6639
  });
6509
6640
  genericListener.startListening({
6510
- actionCreator: layerActions.setBaseLayers,
6641
+ matcher: isAnyOf(mapActions.setAutoLayerId, mapActions.setAutoUpdateLayerId, mapActions.setAutoTimestepLayerId),
6511
6642
  effect: function () {
6512
6643
  var _effect8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(_ref8, listenerApi) {
6513
6644
  var payload, type, targets;
@@ -6516,18 +6647,11 @@ genericListener.startListening({
6516
6647
  case 0:
6517
6648
  payload = _ref8.payload, type = _ref8.type;
6518
6649
  listenerApi.cancelActiveListeners();
6519
- /* Should not listen to actions from itself */
6520
- if (!(payload && payload.origin === LayerActionOrigin.ReactMapViewParseLayer)) {
6521
- _context8.next = 4;
6522
- break;
6523
- }
6524
- return _context8.abrupt("return");
6525
- case 4:
6526
- targets = getMapBaseLayerActionsTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6650
+ targets = getSetAutoLayerIdActionsTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6527
6651
  if (targets && targets.length > 0) {
6528
6652
  listenerApi.dispatch(setLayerActionSync(payload, targets, type));
6529
6653
  }
6530
- case 6:
6654
+ case 4:
6531
6655
  case "end":
6532
6656
  return _context8.stop();
6533
6657
  }
@@ -6540,7 +6664,7 @@ genericListener.startListening({
6540
6664
  }()
6541
6665
  });
6542
6666
  genericListener.startListening({
6543
- actionCreator: layerActions.layerDelete,
6667
+ actionCreator: layerActions.setBaseLayers,
6544
6668
  effect: function () {
6545
6669
  var _effect9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(_ref9, listenerApi) {
6546
6670
  var payload, type, targets;
@@ -6556,7 +6680,7 @@ genericListener.startListening({
6556
6680
  }
6557
6681
  return _context9.abrupt("return");
6558
6682
  case 4:
6559
- targets = getLayerDeleteActionsTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6683
+ targets = getMapBaseLayerActionsTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6560
6684
  if (targets && targets.length > 0) {
6561
6685
  listenerApi.dispatch(setLayerActionSync(payload, targets, type));
6562
6686
  }
@@ -6572,6 +6696,39 @@ genericListener.startListening({
6572
6696
  return effect;
6573
6697
  }()
6574
6698
  });
6699
+ genericListener.startListening({
6700
+ actionCreator: layerActions.layerDelete,
6701
+ effect: function () {
6702
+ var _effect0 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee0(_ref0, listenerApi) {
6703
+ var payload, type, targets;
6704
+ return _regeneratorRuntime().wrap(function _callee0$(_context0) {
6705
+ while (1) switch (_context0.prev = _context0.next) {
6706
+ case 0:
6707
+ payload = _ref0.payload, type = _ref0.type;
6708
+ listenerApi.cancelActiveListeners();
6709
+ /* Should not listen to actions from itself */
6710
+ if (!(payload && payload.origin === LayerActionOrigin.ReactMapViewParseLayer)) {
6711
+ _context0.next = 4;
6712
+ break;
6713
+ }
6714
+ return _context0.abrupt("return");
6715
+ case 4:
6716
+ targets = getLayerDeleteActionsTargets(listenerApi.getState(), payload, SYNCGROUPS_TYPE_SETLAYERACTIONS);
6717
+ if (targets && targets.length > 0) {
6718
+ listenerApi.dispatch(setLayerActionSync(payload, targets, type));
6719
+ }
6720
+ case 6:
6721
+ case "end":
6722
+ return _context0.stop();
6723
+ }
6724
+ }, _callee0);
6725
+ }));
6726
+ function effect(_x17, _x18) {
6727
+ return _effect0.apply(this, arguments);
6728
+ }
6729
+ return effect;
6730
+ }()
6731
+ });
6575
6732
 
6576
6733
  /* A map with all the timerIds and their current step */
6577
6734
  var stepMap = new Map();
@@ -6663,14 +6820,14 @@ var isNextStepAvailable = function isNextStepAvailable(reduxLayers, nextTimeStri
6663
6820
  };
6664
6821
  }
6665
6822
  var olSource = layer.olSource;
6666
- var hasImageAvailableForRequestedTimeStep = olSource.hasImageForTimeValue(closestValue);
6823
+ var hasImageAvailableForRequestedTimeStep = olSource.isImageLoadingForTimestep(closestValue);
6667
6824
  // If there is no image available for requested timestep, return true and flag that this thing is not ready yet.
6668
6825
  if (hasImageAvailableForRequestedTimeStep) {
6669
6826
  return {
6670
6827
  status: true
6671
6828
  };
6672
6829
  }
6673
- olSource.loadImageForTimeValue(closestValue);
6830
+ olSource.setImageForTimeValue(closestValue);
6674
6831
  return {
6675
6832
  status: false
6676
6833
  };
@@ -6706,7 +6863,9 @@ var olMetronomeHandler = function olMetronomeHandler(timerIds, listenerApi) {
6706
6863
  // When there are no targets, default to one
6707
6864
  targets.push({
6708
6865
  targetId: timerId,
6709
- value: ''
6866
+ value: {
6867
+ currentTime: ''
6868
+ }
6710
6869
  });
6711
6870
  }
6712
6871
  var timerIsInDwell = handleTimerDwell(timerId, animationListValues.length);
@@ -6725,7 +6884,9 @@ var olMetronomeHandler = function olMetronomeHandler(timerIds, listenerApi) {
6725
6884
  var updatedValue = animationListValues[timerStep];
6726
6885
  targetsWithUpdateValue.push.apply(targetsWithUpdateValue, _toConsumableArray(targets.map(function (target) {
6727
6886
  return _objectSpread2(_objectSpread2({}, target), {}, {
6728
- value: updatedValue
6887
+ value: {
6888
+ currentTime: updatedValue
6889
+ }
6729
6890
  });
6730
6891
  })));
6731
6892
  var speedDelay = getMapAnimationDelay(listenerApi.getState(), timerId);
@@ -6763,7 +6924,8 @@ mapListener.startListening({
6763
6924
  var payload = _ref.payload;
6764
6925
  var mapId = payload.mapId;
6765
6926
  var layers = getMapLayersWithoutDimensionCurrentValue(listenerApi.getState(), mapId);
6766
- if (!layers.length) {
6927
+ var isAnimating$1 = isAnimating(listenerApi.getState(), mapId);
6928
+ if (!layers.length && isAnimating$1) {
6767
6929
  listenerApi.dispatch(mapActions.mapStopAnimation({
6768
6930
  mapId: mapId
6769
6931
  }));
@@ -6820,7 +6982,9 @@ mapListener.startListening({
6820
6982
  return listenerApi.dispatch(setTime({
6821
6983
  origin: LayerActionOrigin.updateLayerInformationListener,
6822
6984
  sourceId: syncedMapId,
6823
- value: incomingMaxTime
6985
+ value: {
6986
+ currentTime: incomingMaxTime
6987
+ }
6824
6988
  }));
6825
6989
  });
6826
6990
  }
@@ -6902,7 +7066,9 @@ mapListener.startListening({
6902
7066
  return listenerApi.dispatch(setTime({
6903
7067
  origin: LayerActionOrigin.toggleAutoUpdateListener,
6904
7068
  sourceId: syncedMapId,
6905
- value: timeDimension.maxValue
7069
+ value: {
7070
+ currentTime: timeDimension.maxValue
7071
+ }
6906
7072
  }));
6907
7073
  });
6908
7074
  }
@@ -7016,7 +7182,7 @@ mapListener.startListening({
7016
7182
  actionCreator: mapActions.setMapPreset,
7017
7183
  effect: function () {
7018
7184
  var _effect2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref6, listenerApi) {
7019
- var payload, mapId, initialProps, mapPreset, layers, activeLayerId, autoTimeStepLayerId, autoUpdateLayerId, proj, shouldAutoUpdate, shouldAnimate, animationPayload, toggleTimestepAuto, showTimeSlider, displayMapPin, shouldShowZoomControls, shouldShowLegend, shouldShowDataExplorer, dockedLayerManagerSize, timeSliderSpan, toggleTimeSpanAuto, defaultOverlayer, _filterLayers, mapLayers, baseLayers, overLayers, _newLayerIds$layers$f, _newLayerIds$layers$f2, autoTimeStepLayerIdNew, autoUpdateLayerIdNew, onlyActiveLayerIdIsSet, newLayerIds, newAutoTimeStepLayerId, newAutoUpdateLayerId, customLayers, customBaseLayer, customOverLayer, baseLayersWithDefaultLayer, overLayersWithDefaultLayer, allBaseLayers, _overLayers$find, foundOverlayerId, checkIsprojectionSupported, animationLength, animationEndTime, shouldEndtimeOverride, interval, endTime, startTime, centerTimeInSeconds, animationEnd, _startTime, duration, _animationEnd, animationStart, shouldOpenLegend, legendId, fiveMinuteDelayForAnimation, _animationEnd2, _animationStart;
7185
+ var payload, mapId, initialProps, mapPreset, layers, activeLayerId, autoTimeStepLayerId, autoUpdateLayerId, proj, shouldAutoUpdate, shouldAnimate, animationPayload, toggleTimestepAuto, showTimeSlider, displayMapPin, shouldShowZoomControls, shouldShowLegend, shouldShowDataExplorer, dockedLayerManagerSize, timeSliderSpan, toggleTimeSpanAuto, defaultOverlayer, _filterLayers, mapLayers, baseLayers, overLayers, _newLayerIds$layers$f, _newLayerIds$layers$f2, autoTimeStepLayerIdNew, autoUpdateLayerIdNew, onlyActiveLayerIdIsSet, newLayerIds, newAutoTimeStepLayerId, newAutoUpdateLayerId, customLayers, customBaseLayer, customOverLayer, baseLayersWithDefaultLayer, overLayersWithDefaultLayer, allBaseLayers, _overlayersFromStore$, overlayersFromStore, foundOverlayerId, checkIsprojectionSupported, animationLength, animationEndTime, shouldEndtimeOverride, interval, endTime, startTime, centerTimeInSeconds, animationEnd, _startTime, duration, _animationEnd, animationStart, shouldOpenLegend, legendId, fiveMinuteDelayForAnimation, _animationEnd2, _animationStart;
7020
7186
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
7021
7187
  while (1) switch (_context2.prev = _context2.next) {
7022
7188
  case 0:
@@ -7075,10 +7241,11 @@ mapListener.startListening({
7075
7241
  });
7076
7242
  });
7077
7243
  handleBaseLayers(mapId, allBaseLayers, listenerApi);
7078
- if (defaultOverlayer && overLayers) {
7079
- foundOverlayerId = ((_overLayers$find = overLayers.find(function (overlayer) {
7244
+ if (defaultOverlayer) {
7245
+ overlayersFromStore = getOverlayersForMapId(listenerApi.getState(), mapId);
7246
+ foundOverlayerId = ((_overlayersFromStore$ = overlayersFromStore.find(function (overlayer) {
7080
7247
  return overlayer.name === defaultOverlayer;
7081
- })) === null || _overLayers$find === void 0 ? void 0 : _overLayers$find.id) || 'none';
7248
+ })) === null || _overlayersFromStore$ === void 0 ? void 0 : _overlayersFromStore$.id) || 'none';
7082
7249
  listenerApi.dispatch(mapActions.changeOverlayer({
7083
7250
  mapId: mapId,
7084
7251
  selectedOverlayer: foundOverlayerId,
@@ -7178,7 +7345,9 @@ mapListener.startListening({
7178
7345
  listenerApi.dispatch(genericActions.setTime({
7179
7346
  origin: '',
7180
7347
  sourceId: mapId,
7181
- value: startTime
7348
+ value: {
7349
+ currentTime: startTime
7350
+ }
7182
7351
  }));
7183
7352
  centerTimeInSeconds = new Date(handleDateUtilsISOString(endTime)).getTime();
7184
7353
  listenerApi.dispatch(mapActions.setTimeSliderCenterTime({
@@ -7199,7 +7368,9 @@ mapListener.startListening({
7199
7368
  listenerApi.dispatch(genericActions.setTime({
7200
7369
  origin: '',
7201
7370
  sourceId: mapId,
7202
- value: _startTime
7371
+ value: {
7372
+ currentTime: _startTime
7373
+ }
7203
7374
  }));
7204
7375
  }
7205
7376
  // sets animationDelay by speed of animationPayload
@@ -7364,7 +7535,9 @@ mapListener.startListening({
7364
7535
  listenerApi.dispatch(genericActions.setTime({
7365
7536
  origin: '',
7366
7537
  sourceId: mapId,
7367
- value: handleDateUtilsISOString(selectedTimeString)
7538
+ value: {
7539
+ currentTime: handleDateUtilsISOString(selectedTimeString)
7540
+ }
7368
7541
  }));
7369
7542
  }
7370
7543
  }
@@ -8753,8 +8926,9 @@ var SupportedComponentTypes;
8753
8926
  (function (SupportedComponentTypes) {
8754
8927
  SupportedComponentTypes["WarningList"] = "WarningList";
8755
8928
  SupportedComponentTypes["TimeSeries"] = "TimeSeries";
8929
+ SupportedComponentTypes["Soundings"] = "Soundings";
8756
8930
  })(SupportedComponentTypes || (SupportedComponentTypes = {}));
8757
- var supportedComponentTypesForLinking = [SupportedComponentTypes.WarningList, SupportedComponentTypes.TimeSeries];
8931
+ var supportedComponentTypesForLinking = [SupportedComponentTypes.WarningList, SupportedComponentTypes.TimeSeries, SupportedComponentTypes.Soundings];
8758
8932
 
8759
8933
  var constants = /*#__PURE__*/Object.freeze({
8760
8934
  __proto__: null,
@@ -8827,4 +9001,4 @@ var configureOpenGeoWebStore = function configureOpenGeoWebStore() {
8827
9001
  });
8828
9002
  };
8829
9003
 
8830
- export { IS_LEGEND_OPEN_BY_DEFAULT, configureOpenGeoWebStore, 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, unifyReducerMaps, useSetupDialog, useUpdateSharedData };
9004
+ export { IS_LEGEND_OPEN_BY_DEFAULT, SECONDS_IN_DAY, SECONDS_IN_HOUR, configureOpenGeoWebStore, 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, unifyReducerMaps, useSetupDialog, useUpdateSharedData };