@opengeoweb/core 9.9.0 → 9.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/index.esm.js +237 -371
  2. package/package.json +2 -4
  3. package/src/lib/components/ComponentsLookUp/componentsLookUp.d.ts +4 -10
  4. package/src/lib/components/MapDrawToolRedux/MapDrawToolRedux.stories.d.ts +1 -0
  5. package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.d.ts +2 -1
  6. package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/DimensionSelectSliderConnect.d.ts +0 -2
  7. package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiDimensionSelectConnect.stories.d.ts +0 -1
  8. package/src/lib/components/SyncGroups/SyncGroups.FourMapsSynced.stories.d.ts +6 -0
  9. package/src/lib/components/SyncGroups/SyncGroups.TwoMapsSynced.stories.d.ts +6 -0
  10. package/src/lib/components/TimeSliderLite/TimeSliderLiteConnect.d.ts +7 -1
  11. package/src/lib/components/TimeSliderLite/TimeSliderLiteOptionsMenu/TimeRangeOptions/DayHourSelector.d.ts +3 -3
  12. package/src/lib/components/TimeSliderLite/TimeSliderLiteOptionsMenu/TimeStepOptions/TimeStepSelector.d.ts +3 -3
  13. package/src/lib/components/TimeSliderLite/TimeSliderLiteOptionsMenu/UpdateIntervalOptions/UpdateIntervalOptions.d.ts +4 -1
  14. package/src/lib/components/TimeSliderLite/timeSliderLiteUtils.d.ts +31 -0
  15. package/src/lib/components/TimeSliderLite/useOnToggleAnimation.d.ts +2 -2
  16. package/src/lib/index.d.ts +7 -7
  17. package/src/lib/utils/jsonPresetFilter.d.ts +1 -1
  18. package/src/lib/components/MultiMapDimensionSelect/DimensionSelectButton.d.ts +0 -8
  19. package/src/lib/components/MultiMapDimensionSelect/DimensionSelectButton.spec.d.ts +0 -1
  20. package/src/lib/components/MultiMapDimensionSelect/DimensionSelectDialogConnect.stories.d.ts +0 -29
  21. package/src/lib/components/MultiMapDimensionSelect/DimensionSelectSlider.d.ts +0 -14
  22. package/src/lib/components/MultiMapDimensionSelect/DimensionSelectSlider.spec.d.ts +0 -1
  23. package/src/lib/components/MultiMapDimensionSelect/MultiDimensionSelectConfig.d.ts +0 -11
  24. package/src/lib/storybookUtils/HelperComponents.d.ts +0 -15
  25. package/src/lib/storybookUtils/defaultStorySettings.d.ts +0 -22
  26. package/src/lib/storybookUtils/store.d.ts +0 -2
  27. package/src/lib/utils/dimensionUtils.d.ts +0 -7
  28. package/src/lib/utils/dimensionUtils.spec.d.ts +0 -1
  29. /package/src/lib/components/{ConfigurableMap → ConfigurableMapConnect}/ConfigurableMapConnect.d.ts +0 -0
  30. /package/src/lib/components/{ConfigurableMap → ConfigurableMapConnect}/ConfigurableMapConnect.spec.d.ts +0 -0
  31. /package/src/lib/components/{ConfigurableMap → ConfigurableMapConnect}/ConfigurableMapConnect.stories.d.ts +0 -0
  32. /package/src/lib/components/{ConfigurableMap → ConfigurableMapConnect}/index.d.ts +0 -0
  33. /package/src/lib/components/{Legend → LegendConnect}/LegendConnect.d.ts +0 -0
  34. /package/src/lib/components/{Legend → LegendConnect}/LegendConnect.spec.d.ts +0 -0
  35. /package/src/lib/components/{Legend → LegendConnect}/LegendConnect.stories.d.ts +0 -0
  36. /package/src/lib/components/{Legend → LegendConnect}/LegendMapButtonConnect.d.ts +0 -0
  37. /package/src/lib/components/{Legend → LegendConnect}/LegendMapButtonConnect.spec.d.ts +0 -0
  38. /package/src/lib/components/{Legend → LegendConnect}/index.d.ts +0 -0
  39. /package/src/lib/components/{MapControls → MapControlsConnect}/ZoomControlsConnect.d.ts +0 -0
  40. /package/src/lib/components/{MapControls → MapControlsConnect}/ZoomControlsConnect.spec.d.ts +0 -0
  41. /package/src/lib/components/{MapControls → MapControlsConnect}/index.d.ts +0 -0
  42. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.DoubleMap.stories.d.ts +0 -0
  43. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.Errors.stories.d.ts +0 -0
  44. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.FeatureLayers.stories.d.ts +0 -0
  45. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.InitialBBoxAndWithout.stories.d.ts +0 -0
  46. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.LayerActions.stories.d.ts +0 -0
  47. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.LayerChangeEnabledOpacity.stories.d.ts +0 -0
  48. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.MapModuleOverDefaultMap.stories.d.ts +0 -0
  49. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.MapPin.stories.d.ts +0 -0
  50. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.MultiMapLayerManager.stories.d.ts +0 -0
  51. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.SelectorTest.stories.d.ts +0 -0
  52. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.SetBaseLayers.stories.d.ts +0 -0
  53. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.ToggleControls.stories.d.ts +0 -0
  54. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.spec.d.ts +0 -0
  55. /package/src/lib/components/{MapView → MapViewConnect}/index.d.ts +0 -0
  56. /package/src/lib/components/{MapView → MapViewConnect}/types.d.ts +0 -0
  57. /package/src/lib/components/{MapView → MapViewConnect}/useKeyboardZoomAndPan.d.ts +0 -0
  58. /package/src/lib/components/{MapView → MapViewConnect}/useKeyboardZoomAndPan.spec.d.ts +0 -0
  59. /package/src/lib/components/{MapView → MapViewConnect}/useTouchZoomPan.d.ts +0 -0
  60. /package/src/lib/components/{MapView → MapViewConnect}/useTouchZoomPan.spec.d.ts +0 -0
  61. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/DimensionSelectButtonConnect.d.ts +0 -0
  62. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/DimensionSelectButtonConnect.spec.d.ts +0 -0
  63. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/DimensionSelectDialogConnect.d.ts +0 -0
  64. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/DimensionSelectDialogConnect.spec.d.ts +0 -0
  65. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/DimensionSelectSliderConnect.spec.d.ts +0 -0
  66. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/EnsembleDimensionExample.stories.d.ts +0 -0
  67. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiDimensionSelectMapButtonsConnect.d.ts +0 -0
  68. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiDimensionSelectMapButtonsConnect.spec.d.ts +0 -0
  69. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiMapMultiDimensionSelect.stories.d.ts +0 -0
  70. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiMapMultiDimensionSelectConnect.d.ts +0 -0
  71. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiMapMultiDimensionSelectConnect.spec.d.ts +0 -0
  72. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiMapSingleDimensionSelectConnect.d.ts +0 -0
  73. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiMapSingleDimensionSelectConnect.spec.d.ts +0 -0
  74. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/index.d.ts +0 -0
  75. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/HarmoniePresets/HarmonieTempAndPrecipPreset.d.ts +0 -0
  76. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/HarmoniePresets/index.d.ts +0 -0
  77. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/ModelRunInterval/ModelRunInterval.d.ts +0 -0
  78. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/ModelRunInterval/ModelRunInterval.spec.d.ts +0 -0
  79. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/ModelRunInterval/ModelRunInterval.stories.d.ts +0 -0
  80. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/ModelRunInterval/index.d.ts +0 -0
  81. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/MultiMapView.stories.d.ts +0 -0
  82. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/MultiMapView10x10.stories.d.ts +0 -0
  83. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/MultiMapView2x2.stories.d.ts +0 -0
  84. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/MultiMapView4x3.stories.d.ts +0 -0
  85. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/MultiMapViewConnect.d.ts +0 -0
  86. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/MultiMapViewConnect.spec.d.ts +0 -0
  87. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/storyUtils/mapPresets.d.ts +0 -0
  88. /package/src/lib/components/{TimeSlider → TimeSliderConnect}/AutoUpdate.stories.d.ts +0 -0
  89. /package/src/lib/components/{TimeSlider → TimeSliderConnect}/TimeSliderConnect.stories.d.ts +0 -0
package/index.esm.js CHANGED
@@ -1,17 +1,17 @@
1
1
  import * as React from 'react';
2
2
  import React__default, { useState, useCallback, useRef, useEffect, useLayoutEffect } from 'react';
3
- import { Grid, Box, MenuItem, Typography, useTheme, Button, Popper, ListItemText, ListItemIcon, FormControl, InputLabel, Paper, List, ListItemButton, CircularProgress, ListSubheader, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, InputAdornment, DialogActions, LinearProgress, styled, Slider, Checkbox, Card, IconButton, Select, CardContent, RadioGroup, FormControlLabel, Radio, ToggleButtonGroup, ToggleButton, Divider, Tooltip, ButtonGroup } from '@mui/material';
3
+ import { Grid, Box, MenuItem, Typography, useTheme, Button, Popper, ListItemText, ListItemIcon, LinearProgress, FormControl, InputLabel, Paper, List, ListItemButton, CircularProgress, ListSubheader, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, InputAdornment, DialogActions, Checkbox, Card, IconButton, Select, CardContent, RadioGroup, FormControlLabel, Radio, ToggleButtonGroup, ToggleButton, Divider, Tooltip, ButtonGroup } from '@mui/material';
4
4
  import { CustomIconButton, TooltipSelect, AlertIcon, useControlledTooltip, CustomTooltip, tooltipContainerStyles, sliderHeaderStyle, CustomSlider, ToggleMenu, renderCounter, AlertBanner, CustomAccordion, calculateStartSize, ToolContainerDraggable, dateUtils, withEggs } from '@opengeoweb/shared';
5
5
  import { LayerSelectButtonConnect, LayerInfoButton, LayerInfoButtonConnect, getUserAddedServices, layerSelectConfig } from '@opengeoweb/layer-select';
6
- import { CollapseSmall, CollapseMedium, CollapseLarge, CollapseWindow, ExpandWindow, Copy, None, FastForward, AutoUpdateActive, Both, Visibility, VisibilityOff, Delete, DragHandle as DragHandle$1, Cached, Add, MapAdd, WorldMapProjection, Layers, Equalizer, DimensionsElevation, Link, LinkOff, List as List$1, ExitDomain, Info, Search, MyLocation, Close, ChevronDown, ChevronUp, StepForward, StepBackward, Pause, Play, Options, ThemeWrapper, lightTheme } from '@opengeoweb/theme';
7
- import { useDispatch, useSelector, connect, Provider } from 'react-redux';
6
+ import { CollapseSmall, CollapseMedium, CollapseLarge, CollapseWindow, ExpandWindow, Copy, None, FastForward, AutoUpdateActive, Both, Visibility, VisibilityOff, Delete, DragHandle as DragHandle$1, Cached, Add, MapAdd, WorldMapProjection, Layers, List as List$1, ExitDomain, Info, Search, MyLocation, Close, ChevronDown, ChevronUp, StepForward, StepBackward, Pause, Play, Options, ThemeWrapper, lightTheme } from '@opengeoweb/theme';
7
+ import { useDispatch, useSelector, connect, useStore, Provider } from 'react-redux';
8
8
  import { ReactSortable } from 'react-sortablejs';
9
9
  import Sortable from 'sortablejs';
10
- import { layerTypes, layerUtils, layerActions, layerSelectors, serviceSelectors, serviceActions, mapSelectors, mapActions, mapEnums, mapConstants, filterLayers, uiSelectors, uiTypes, useSetupDialog, uiActions, drawtoolSelectors, genericActions, syncConstants, defaultLayers, mapStoreActions, getSingularDrawtoolDrawLayerId, syncGroupsSelectors, syncGroupsSelector, coreModuleConfig, routerUtils, routerModuleConfig, appModuleConfig, appActions } from '@opengeoweb/store';
11
- import { WMGetServiceFromStore, getCapabilities, webmapUtils, LayerType, handleMomentISOString, WMLayer } from '@opengeoweb/webmap';
10
+ import { layerTypes, layerUtils, layerActions, layerSelectors, serviceSelectors, serviceActions, mapSelectors, mapActions, mapEnums, mapConstants, filterLayers, uiSelectors, uiTypes, useSetupDialog, uiActions, genericActions, drawtoolSelectors, syncConstants, defaultLayers, mapStoreActions, getSingularDrawtoolDrawLayerId, syncGroupsSelectors, syncGroupsSelector, coreModuleConfig, routerUtils, routerModuleConfig, appModuleConfig, appActions } from '@opengeoweb/store';
11
+ import { WMGetServiceFromStore, getCapabilities, webmapUtils, LayerType, handleMomentISOString, WMLayer, getWMJSMapById } from '@opengeoweb/webmap';
12
12
  import { Box as Box$1 } from '@mui/system';
13
13
  import _, { isEqual, range } from 'lodash';
14
- import { MapControlButton, ZoomControls, MapView, MapViewLayer, LegendDialog, registerDrawFunction, emptyGeoJSON, MapControls, publicLayers } from '@opengeoweb/webmap-react';
14
+ import { MapControlButton, MapDimensionSelect, dimensionConfig, DimensionSelectDialog, DimensionSelectButton, ZoomControls, MapView, MapViewLayer, LegendDialog, registerDrawFunction, emptyGeoJSON, MapControls, publicLayers } from '@opengeoweb/webmap-react';
15
15
  import { TIME_SLIDER_LEGEND_HEIGHT, TimeSliderConnect, TimeSliderClockConnect, speedFactors } from '@opengeoweb/timeslider';
16
16
  import axios from 'axios';
17
17
  import { useDebounce } from '@opengeoweb/api';
@@ -922,6 +922,9 @@ var DimensionSelectValue = function DimensionSelectValue(_ref) {
922
922
  var isLatest = isReferenceTimeDimensionAndUseLatestIsAvailable && useLatestReferenceTime && selectedDimension.maxValue === selectedDimension.currentValue;
923
923
  return /*#__PURE__*/React__default.createElement(TooltipSelect, {
924
924
  disableUnderline: true,
925
+ SelectDisplayProps: {
926
+ 'aria-label': 'dimensionSelectValue'
927
+ },
925
928
  tooltip: tooltip,
926
929
  isEnabled: isEnabled,
927
930
  value: isLatest ? 'Latest' : selectedDimension.currentValue,
@@ -986,6 +989,9 @@ var DimensionSelectName = function DimensionSelectName(_ref) {
986
989
  return /*#__PURE__*/React__default.createElement(TooltipSelect, {
987
990
  disableUnderline: true,
988
991
  tooltip: tooltip,
992
+ SelectDisplayProps: {
993
+ 'aria-label': 'dimensionSelectName'
994
+ },
989
995
  isEnabled: isEnabled,
990
996
  value: selectedDimensionName,
991
997
  list: dimensionNames.map(function (name) {
@@ -3116,7 +3122,7 @@ var DragHandle = function DragHandle(_ref) {
3116
3122
  }, icon);
3117
3123
  };
3118
3124
 
3119
- var LayerContainerRow = function LayerContainerRow(_a) {
3125
+ var LayerContainerRow = /*#__PURE__*/React.memo(function (_a) {
3120
3126
  var mapId = _a.mapId,
3121
3127
  settings = _a.settings,
3122
3128
  gridProps = __rest(_a, ["mapId", "settings"]);
@@ -3125,6 +3131,14 @@ var LayerContainerRow = function LayerContainerRow(_a) {
3125
3131
  _React$useState2 = _slicedToArray(_React$useState, 2),
3126
3132
  keyPressed = _React$useState2[0],
3127
3133
  setKeyPressed = _React$useState2[1];
3134
+ var _React$useTransition = React.useTransition(),
3135
+ _React$useTransition2 = _slicedToArray(_React$useTransition, 2),
3136
+ isPending = _React$useTransition2[0],
3137
+ startTransition = _React$useTransition2[1];
3138
+ var _React$useState3 = React.useState(0),
3139
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
3140
+ rowsToDisplay = _React$useState4[0],
3141
+ setRowsToDisplay = _React$useState4[1];
3128
3142
  var layerIds = useSelector(function (store) {
3129
3143
  return mapSelectors.getLayerIds(store, mapId);
3130
3144
  });
@@ -3139,10 +3153,10 @@ var LayerContainerRow = function LayerContainerRow(_a) {
3139
3153
  origin: layerTypes.LayerActionOrigin.layerManager
3140
3154
  }));
3141
3155
  }, [dispatch]);
3142
- var _React$useState3 = React.useState(null),
3143
- _React$useState4 = _slicedToArray(_React$useState3, 2),
3144
- activeDragIndex = _React$useState4[0],
3145
- setActiveDragIndex = _React$useState4[1];
3156
+ var _React$useState5 = React.useState(null),
3157
+ _React$useState6 = _slicedToArray(_React$useState5, 2),
3158
+ activeDragIndex = _React$useState6[0],
3159
+ setActiveDragIndex = _React$useState6[1];
3146
3160
  var onSetList = function onSetList() {}; // since we use activeDragIndex, we don't need inner state handling of ReactSortable
3147
3161
  var onStart = React.useCallback(function (_ref2) {
3148
3162
  var oldIndex = _ref2.oldIndex;
@@ -3200,6 +3214,31 @@ var LayerContainerRow = function LayerContainerRow(_a) {
3200
3214
  return window.removeEventListener('wheel', preventDefault);
3201
3215
  };
3202
3216
  }, [keyPressed, preventDefault]);
3217
+ var contents = layerIds.map(function (layerId, index) {
3218
+ var _a, _b;
3219
+ return /*#__PURE__*/React.createElement(LayerRowConnect, {
3220
+ mapId: mapId,
3221
+ layerId: layerId,
3222
+ layerIndex: index,
3223
+ key: "layerRowConnect-".concat(layerId),
3224
+ dragHandle: /*#__PURE__*/React.createElement(DragHandle, {
3225
+ isDisabled: isDragDisabled,
3226
+ index: index,
3227
+ hideTooltip: isSorting || isDragDisabled,
3228
+ isSorting: isSorting,
3229
+ icon: (_a = settings === null || settings === void 0 ? void 0 : settings.dragHandle) === null || _a === void 0 ? void 0 : _a.icon,
3230
+ tooltipTitle: (_b = settings === null || settings === void 0 ? void 0 : settings.dragHandle) === null || _b === void 0 ? void 0 : _b.tooltipTitle
3231
+ }),
3232
+ settings: settings
3233
+ });
3234
+ });
3235
+ React.useEffect(function () {
3236
+ if (rowsToDisplay < contents.length) {
3237
+ startTransition(function () {
3238
+ setRowsToDisplay(rowsToDisplay + contents.length);
3239
+ });
3240
+ }
3241
+ }, [contents.length, rowsToDisplay]);
3203
3242
  return /*#__PURE__*/React.createElement(Grid, Object.assign({
3204
3243
  container: true,
3205
3244
  item: true,
@@ -3229,25 +3268,10 @@ var LayerContainerRow = function LayerContainerRow(_a) {
3229
3268
  style: {
3230
3269
  width: '100%'
3231
3270
  }
3232
- }, layerIds.map(function (layerId, index) {
3233
- var _a, _b;
3234
- return /*#__PURE__*/React.createElement(LayerRowConnect, {
3235
- mapId: mapId,
3236
- layerId: layerId,
3237
- layerIndex: index,
3238
- key: "layerRowConnect-".concat(layerId),
3239
- dragHandle: /*#__PURE__*/React.createElement(DragHandle, {
3240
- isDisabled: isDragDisabled,
3241
- index: index,
3242
- hideTooltip: isSorting || isDragDisabled,
3243
- isSorting: isSorting,
3244
- icon: (_a = settings === null || settings === void 0 ? void 0 : settings.dragHandle) === null || _a === void 0 ? void 0 : _a.icon,
3245
- tooltipTitle: (_b = settings === null || settings === void 0 ? void 0 : settings.dragHandle) === null || _b === void 0 ? void 0 : _b.tooltipTitle
3246
- }),
3247
- settings: settings
3248
- });
3249
- })));
3250
- };
3271
+ }, isPending ? ( /*#__PURE__*/React.createElement(LinearProgress, {
3272
+ "data-testid": "loading-bar"
3273
+ })) : contents.slice(0, rowsToDisplay)));
3274
+ });
3251
3275
 
3252
3276
  /* *
3253
3277
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -4400,6 +4424,9 @@ var ProjectionSelect = function ProjectionSelect(_ref) {
4400
4424
  }
4401
4425
  }, /*#__PURE__*/React.createElement(TooltipSelect, {
4402
4426
  disableUnderline: true,
4427
+ SelectDisplayProps: {
4428
+ 'aria-label': 'projectionSelect'
4429
+ },
4403
4430
  tooltip: "Projection: ".concat(currentProjectionObject === null || currentProjectionObject === void 0 ? void 0 : currentProjectionObject.name),
4404
4431
  isEnabled: true,
4405
4432
  style: {
@@ -4873,203 +4900,6 @@ var LayerManagerMapButtonConnect = function LayerManagerMapButtonConnect(_ref) {
4873
4900
  }, /*#__PURE__*/React.createElement(Layers, null));
4874
4901
  };
4875
4902
 
4876
- var dimensionConfig = [{
4877
- name: 'elevation',
4878
- label: 'Vertical level',
4879
- defaultUnit: 'hPa',
4880
- reversed: true,
4881
- iconType: 'IconLevels'
4882
- }, {
4883
- name: 'ensemble_member',
4884
- label: 'Ensemble member',
4885
- defaultUnit: 'member',
4886
- reversed: false,
4887
- iconType: 'IconEnsemble'
4888
- }, {
4889
- name: 'probability',
4890
- label: 'Probability',
4891
- defaultUnit: '%',
4892
- reversed: false,
4893
- iconType: 'IconLevels'
4894
- }, {
4895
- name: 'level',
4896
- label: 'Level',
4897
- defaultUnit: 'level',
4898
- reversed: false,
4899
- iconType: 'IconLevels'
4900
- }];
4901
- var getDimensionIcon = function getDimensionIcon(iconType) {
4902
- if (iconType === 'IconEnsemble') {
4903
- return Equalizer;
4904
- }
4905
- return DimensionsElevation;
4906
- };
4907
-
4908
- /* *
4909
- * Licensed under the Apache License, Version 2.0 (the "License");
4910
- * you may not use this file except in compliance with the License.
4911
- * You may obtain a copy of the License at
4912
- *
4913
- * http://www.apache.org/licenses/LICENSE-2.0
4914
- *
4915
- * Unless required by applicable law or agreed to in writing, software
4916
- * distributed under the License is distributed on an "AS IS" BASIS,
4917
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4918
- * See the License for the specific language governing permissions and
4919
- * limitations under the License.
4920
- *
4921
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4922
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
4923
- * */
4924
- var DimensionSelectButton = function DimensionSelectButton(_ref) {
4925
- var dimension = _ref.dimension,
4926
- onClickDimensionButton = _ref.onClickDimensionButton,
4927
- _ref$isActive = _ref.isActive,
4928
- isActive = _ref$isActive === void 0 ? false : _ref$isActive;
4929
- var dimConfig = dimensionConfig.find(function (cnf) {
4930
- return cnf.name === dimension;
4931
- });
4932
- var Icon = getDimensionIcon(dimConfig && dimConfig.iconType || 'IconLevels');
4933
- var title = "Show ".concat(dimConfig ? dimConfig.label.toLowerCase() : dimension.toLowerCase());
4934
- return /*#__PURE__*/React.createElement(MapControlButton, {
4935
- title: title,
4936
- "data-testid": "dimensionMapBtn-".concat(dimension),
4937
- onClick: onClickDimensionButton,
4938
- isActive: isActive
4939
- }, /*#__PURE__*/React.createElement(Icon, null));
4940
- };
4941
-
4942
- var SmallFontSlider = styled(Slider)(function () {
4943
- return {
4944
- '& .MuiSlider-markLabel': {
4945
- fontSize: '80%'
4946
- }
4947
- };
4948
- });
4949
- var DimensionSelectSlider = function DimensionSelectSlider(_ref) {
4950
- var marks = _ref.marks,
4951
- layerTitle = _ref.layerTitle,
4952
- _ref$reverse = _ref.reverse,
4953
- reverse = _ref$reverse === void 0 ? false : _ref$reverse,
4954
- _ref$isDisabled = _ref.isDisabled,
4955
- isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
4956
- _ref$managedValue = _ref.managedValue,
4957
- managedValue = _ref$managedValue === void 0 ? null : _ref$managedValue,
4958
- _ref$validSelection = _ref.validSelection,
4959
- validSelection = _ref$validSelection === void 0 ? true : _ref$validSelection,
4960
- _ref$alertColor = _ref.alertColor,
4961
- alertColor = _ref$alertColor === void 0 ? 'red' : _ref$alertColor,
4962
- onChangeDimensionValue = _ref.onChangeDimensionValue;
4963
- var _useState = useState(0),
4964
- _useState2 = _slicedToArray(_useState, 2),
4965
- currentIndex = _useState2[0],
4966
- setCurrentIndex = _useState2[1];
4967
- if (!marks || !marks.length) {
4968
- return null;
4969
- }
4970
- var sortedMarks = _toConsumableArray(marks).sort(function (a, b) {
4971
- return Number(typeof a.value === 'number' && typeof b.value === 'number' && a.value - b.value);
4972
- });
4973
- var adaptedMarks = reverse ? sortedMarks.reverse() : sortedMarks;
4974
- var values = adaptedMarks.map(function (m) {
4975
- return m.value;
4976
- });
4977
- // using index as values in slider to get constant spacing between marks
4978
- var indexLabelMarks = adaptedMarks.map(function (m, index) {
4979
- return {
4980
- value: index,
4981
- label: m.label
4982
- };
4983
- });
4984
- var sliderValue = managedValue !== null ? values.findIndex(function (v) {
4985
- return v === managedValue;
4986
- }) : currentIndex;
4987
- var upDownNavigation = function upDownNavigation(event) {
4988
- if (event.key === 'ArrowLeft' || event.key === 'ArrowRight' || event.metaKey || event.ctrlKey) {
4989
- event.preventDefault();
4990
- }
4991
- };
4992
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Box, {
4993
- "data-testid": "slider-dimensionSelect",
4994
- sx: {
4995
- height: '320px',
4996
- margin: '10px',
4997
- marginLeft: '-5px',
4998
- minWidth: 120,
4999
- fontSize: '90%'
5000
- }
5001
- }, /*#__PURE__*/React.createElement(Box, {
5002
- component: "span",
5003
- m: 1
5004
- }, /*#__PURE__*/React.createElement(SmallFontSlider, {
5005
- "data-testid": "verticalSlider",
5006
- orientation: "vertical",
5007
- "aria-labelledby": "vertical-slider",
5008
- step: null,
5009
- min: 0,
5010
- max: indexLabelMarks.length - 1,
5011
- marks: indexLabelMarks,
5012
- style: !validSelection ? {
5013
- color: alertColor
5014
- } : {},
5015
- disabled: isDisabled,
5016
- value: sliderValue,
5017
- onKeyDown: upDownNavigation,
5018
- onChange: function onChange(e, val) {
5019
- onChangeDimensionValue(values[val].toString());
5020
- if (!managedValue) {
5021
- setCurrentIndex(val);
5022
- }
5023
- }
5024
- }))), /*#__PURE__*/React.createElement(CustomTooltip, {
5025
- title: layerTitle
5026
- }, /*#__PURE__*/React.createElement(Typography, {
5027
- variant: "body2",
5028
- sx: {
5029
- paddingLeft: '10px',
5030
- maxWidth: 130,
5031
- overflow: 'hidden',
5032
- textOverflow: 'ellipsis'
5033
- }
5034
- }, layerTitle)));
5035
- };
5036
-
5037
- /* *
5038
- * Licensed under the Apache License, Version 2.0 (the "License");
5039
- * you may not use this file except in compliance with the License.
5040
- * You may obtain a copy of the License at
5041
- *
5042
- * http://www.apache.org/licenses/LICENSE-2.0
5043
- *
5044
- * Unless required by applicable law or agreed to in writing, software
5045
- * distributed under the License is distributed on an "AS IS" BASIS,
5046
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5047
- * See the License for the specific language governing permissions and
5048
- * limitations under the License.
5049
- *
5050
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5051
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
5052
- * */
5053
- var marksByDimension = function marksByDimension(dim) {
5054
- if (!dim || !dim.name) {
5055
- return [];
5056
- }
5057
- var dimCnf = dimensionConfig.find(function (cnf) {
5058
- return cnf.name === dim.name;
5059
- });
5060
- var defaultUnit = dimCnf ? dimCnf.defaultUnit : '';
5061
- var marks = [];
5062
- if (dim && dim.size) {
5063
- for (var i = 0; i < dim.size(); i += 1) {
5064
- marks.push({
5065
- value: Number(dim.getValueForIndex(i)) || dim.getValueForIndex(i),
5066
- label: "".concat(Number(dim.getValueForIndex(i)) || dim.getValueForIndex(i), " ").concat(dim.unitSymbol ? dim.unitSymbol : defaultUnit)
5067
- });
5068
- }
5069
- }
5070
- return marks;
5071
- };
5072
-
5073
4903
  /* *
5074
4904
  * Licensed under the Apache License, Version 2.0 (the "License");
5075
4905
  * you may not use this file except in compliance with the License.
@@ -5083,64 +4913,27 @@ var marksByDimension = function marksByDimension(dim) {
5083
4913
  * See the License for the specific language governing permissions and
5084
4914
  * limitations under the License.
5085
4915
  *
5086
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5087
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
4916
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4917
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
5088
4918
  * */
5089
- var Icon = function Icon(_ref) {
5090
- var isLayerDimensionSynced = _ref.isLayerDimensionSynced;
5091
- return isLayerDimensionSynced ? ( /*#__PURE__*/React.createElement(Link, {
5092
- "data-testid": "syncIcon"
5093
- })) : ( /*#__PURE__*/React.createElement(LinkOff, {
5094
- "data-testid": "syncDisIcon"
5095
- }));
5096
- };
5097
- var DimensionSelectSliderConnect = function DimensionSelectSliderConnect(_ref2) {
5098
- var layerId = _ref2.layerId,
5099
- dimConfig = _ref2.dimConfig,
5100
- dimensionName = _ref2.dimensionName,
5101
- handleDimensionValueChanged = _ref2.handleDimensionValueChanged,
5102
- handleSyncChanged = _ref2.handleSyncChanged;
4919
+ var DimensionSelectSliderConnect = function DimensionSelectSliderConnect(_ref) {
4920
+ var layerId = _ref.layerId,
4921
+ dimensionName = _ref.dimensionName,
4922
+ handleDimensionValueChanged = _ref.handleDimensionValueChanged,
4923
+ handleSyncChanged = _ref.handleSyncChanged;
5103
4924
  var layerDimension = useSelector(function (store) {
5104
4925
  return layerSelectors.getLayerDimension(store, layerId, dimensionName);
5105
4926
  });
5106
- var wmLayer = webmapUtils.getWMLayerById(layerId);
5107
- if (!layerDimension || !wmLayer) {
5108
- return null;
5109
- }
5110
- var wmsDimension = wmLayer.getDimension(dimensionName);
5111
- if (!wmsDimension) {
4927
+ if (!layerDimension) {
5112
4928
  return null;
5113
4929
  }
5114
- var layerTitle = wmLayer.title;
5115
- var marks = marksByDimension(wmsDimension);
5116
- var isLayerDimensionSynced = layerDimension.synced !== undefined && layerDimension.synced === true;
5117
- var tooltipTitle = isLayerDimensionSynced ? 'Click to disconnect layer' : 'Click to connect layer';
5118
- return /*#__PURE__*/React.createElement(Grid, {
5119
- key: layerId,
5120
- item: true,
5121
- xs: "auto"
5122
- }, /*#__PURE__*/React.createElement(CustomIconButton, {
5123
- tooltipTitle: tooltipTitle,
5124
- "data-testid": "syncButton",
5125
- onClick: function onClick() {
5126
- return handleSyncChanged(layerId, dimensionName, layerDimension.currentValue, !layerDimension.synced);
5127
- },
5128
- sx: {
5129
- margin: '5px'
5130
- }
5131
- }, /*#__PURE__*/React.createElement(Icon, {
5132
- isLayerDimensionSynced: isLayerDimensionSynced
5133
- })), /*#__PURE__*/React.createElement(DimensionSelectSlider, {
5134
- marks: marks,
5135
- layerTitle: layerTitle,
5136
- reverse: dimConfig ? dimConfig.reversed : false,
5137
- managedValue: Number(layerDimension.currentValue) || layerDimension.currentValue,
5138
- onChangeDimensionValue: function onChangeDimensionValue(value) {
5139
- handleDimensionValueChanged(layerId, dimensionName, value);
5140
- },
5141
- isDisabled: false,
5142
- validSelection: layerDimension.synced === false || !(layerDimension.validSyncSelection !== undefined && layerDimension.validSyncSelection === false)
5143
- }));
4930
+ return /*#__PURE__*/React.createElement(MapDimensionSelect, {
4931
+ layerId: layerId,
4932
+ dimensionName: dimensionName,
4933
+ handleDimensionValueChanged: handleDimensionValueChanged,
4934
+ handleSyncChanged: handleSyncChanged,
4935
+ layerDimension: layerDimension
4936
+ });
5144
4937
  };
5145
4938
 
5146
4939
  /* *
@@ -5156,8 +4949,8 @@ var DimensionSelectSliderConnect = function DimensionSelectSliderConnect(_ref2)
5156
4949
  * See the License for the specific language governing permissions and
5157
4950
  * limitations under the License.
5158
4951
  *
5159
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5160
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
4952
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4953
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
5161
4954
  * */
5162
4955
  var DimensionSelectDialogConnect = function DimensionSelectDialogConnect(_ref) {
5163
4956
  var mapId = _ref.mapId,
@@ -5207,38 +5000,24 @@ var DimensionSelectDialogConnect = function DimensionSelectDialogConnect(_ref) {
5207
5000
  return cnf.name === dimensionName;
5208
5001
  });
5209
5002
  var title = dimConfig ? dimConfig.label : dimensionName;
5210
- var topPos = index * 32 + 164; // index * btn height + offset top of window
5211
- return /*#__PURE__*/React.createElement(ToolContainerDraggable, {
5212
- startPosition: {
5213
- left: 50,
5214
- top: topPos
5215
- },
5216
- minWidth: 180,
5217
- title: title,
5003
+ return /*#__PURE__*/React.createElement(DimensionSelectDialog, {
5004
+ dimensionName: dimensionName,
5218
5005
  isOpen: isOpen,
5219
5006
  "data-testid": "multidimensionContent-".concat(title),
5220
5007
  onClose: onCloseDialog,
5221
- bounds: "parent",
5222
5008
  onMouseDown: onMouseDown,
5223
5009
  order: order,
5224
- source: source
5225
- }, /*#__PURE__*/React.createElement("div", {
5226
- style: {
5227
- padding: 4
5228
- }
5229
- }, /*#__PURE__*/React.createElement(Grid, {
5230
- container: true,
5231
- direction: "row"
5010
+ source: source,
5011
+ index: index
5232
5012
  }, layerIds.map(function (layerId) {
5233
5013
  return /*#__PURE__*/React.createElement(DimensionSelectSliderConnect, {
5234
5014
  key: layerId,
5235
5015
  handleDimensionValueChanged: handleDimensionValueChanged,
5236
5016
  handleSyncChanged: handleSyncChanged,
5237
5017
  layerId: layerId,
5238
- dimConfig: dimConfig,
5239
5018
  dimensionName: dimensionName
5240
5019
  });
5241
- }))));
5020
+ }));
5242
5021
  };
5243
5022
 
5244
5023
  /* *
@@ -5695,6 +5474,7 @@ var MapViewConnect = function MapViewConnect(_a) {
5695
5474
  var mapId = _a.mapId,
5696
5475
  children = _a.children,
5697
5476
  props = __rest(_a, ["mapId", "children"]);
5477
+ var store = useStore();
5698
5478
  var mapDimensions = useSelector(function (store) {
5699
5479
  return mapSelectors.getMapDimensions(store, mapId);
5700
5480
  });
@@ -5734,19 +5514,6 @@ var MapViewConnect = function MapViewConnect(_a) {
5734
5514
  var timestep = useSelector(function (store) {
5735
5515
  return mapSelectors.getMapTimeStep(store, mapId);
5736
5516
  });
5737
- // draw tool selectors
5738
- var activeDrawToolId = useSelector(function (store) {
5739
- return drawtoolSelectors.getActiveDrawToolId(store);
5740
- });
5741
- var shouldAllowMultipleDrawShapes = useSelector(function (store) {
5742
- return drawtoolSelectors.getShouldAllowMultipleShapes(store, activeDrawToolId);
5743
- });
5744
- var geoJSONIntersectionLayerId = useSelector(function (store) {
5745
- return drawtoolSelectors.getGeoJSONIntersectionLayerId(store, activeDrawToolId);
5746
- });
5747
- var geoJSONIntersectionBoundsLayerId = useSelector(function (store) {
5748
- return drawtoolSelectors.getGeoJSONIntersectionBoundsLayerId(store, activeDrawToolId);
5749
- });
5750
5517
  var dispatch = useDispatch();
5751
5518
  var mapChangeDimension = React.useCallback(function (mapDimensionPayload) {
5752
5519
  if (mapDimensionPayload.dimension) {
@@ -5793,18 +5560,46 @@ var MapViewConnect = function MapViewConnect(_a) {
5793
5560
  var setSelectedFeature = React.useCallback(function (payload) {
5794
5561
  dispatch(layerActions.setSelectedFeature(payload));
5795
5562
  }, [dispatch]);
5796
- var updateFeature = React.useCallback(function (payload) {
5797
- dispatch(layerActions.updateFeature(payload));
5798
- }, [dispatch]);
5799
- var exitFeatureDrawMode = React.useCallback(function (payload) {
5800
- dispatch(layerActions.exitFeatureDrawMode(payload));
5801
- }, [dispatch]);
5563
+ var updateFeature = React.useCallback(function (_ref) {
5564
+ var geojson = _ref.geojson,
5565
+ reason = _ref.reason,
5566
+ layerId = _ref.layerId;
5567
+ var activeDrawToolId = drawtoolSelectors.getActiveDrawToolId(store.getState());
5568
+ var activeDrawMode = drawtoolSelectors.getActiveDrawMode(store.getState(), activeDrawToolId);
5569
+ dispatch(layerActions.updateFeature({
5570
+ geojson: geojson,
5571
+ reason: reason,
5572
+ layerId: layerId,
5573
+ shouldAllowMultipleShapes: drawtoolSelectors.getShouldAllowMultipleShapes(store.getState(), activeDrawToolId),
5574
+ geoJSONIntersectionLayerId: drawtoolSelectors.getGeoJSONIntersectionLayerId(store.getState(), activeDrawToolId),
5575
+ geoJSONIntersectionBoundsLayerId: drawtoolSelectors.getGeoJSONIntersectionBoundsLayerId(store.getState(), activeDrawToolId),
5576
+ selectionType: activeDrawMode === null || activeDrawMode === void 0 ? void 0 : activeDrawMode.selectionType
5577
+ }));
5578
+ }, [dispatch, store]);
5579
+ var exitFeatureDrawMode = React.useCallback(function (_ref2) {
5580
+ var reason = _ref2.reason,
5581
+ layerId = _ref2.layerId;
5582
+ var activeDrawToolId = drawtoolSelectors.getActiveDrawToolId(store.getState());
5583
+ dispatch(layerActions.exitFeatureDrawMode({
5584
+ reason: reason,
5585
+ layerId: layerId,
5586
+ shouldAllowMultipleShapes: drawtoolSelectors.getShouldAllowMultipleShapes(store.getState(), activeDrawToolId)
5587
+ }));
5588
+ }, [dispatch, store]);
5802
5589
  var activeWindowId = useSelector(uiSelectors.getActiveWindowId);
5803
5590
  var isActiveWindowId = function isActiveWindowId() {
5804
5591
  return activeWindowId === mapId;
5805
5592
  };
5806
5593
  useKeyboardZoomAndPan(isActiveWindowId(), mapId);
5807
5594
  useTouchZoomPan(isActiveWindowId(), mapId);
5595
+ var unRegister = React.useCallback(function (mapId) {
5596
+ unregisterMap({
5597
+ mapId: mapId
5598
+ });
5599
+ syncGroupRemoveSource({
5600
+ id: mapId
5601
+ });
5602
+ }, [syncGroupRemoveSource, unregisterMap]);
5808
5603
  React.useEffect(function () {
5809
5604
  registerMap({
5810
5605
  mapId: mapId
@@ -5813,15 +5608,7 @@ var MapViewConnect = function MapViewConnect(_a) {
5813
5608
  id: mapId,
5814
5609
  type: [syncConstants.SYNCGROUPS_TYPE_SETTIME, syncConstants.SYNCGROUPS_TYPE_SETBBOX]
5815
5610
  });
5816
- return function () {
5817
- unregisterMap({
5818
- mapId: mapId
5819
- });
5820
- syncGroupRemoveSource({
5821
- id: mapId
5822
- });
5823
- };
5824
- }, [mapId, registerMap, syncGroupAddSource, syncGroupRemoveSource, unregisterMap]);
5611
+ }, [mapId, registerMap, syncGroupAddSource]);
5825
5612
  return /*#__PURE__*/React.createElement("div", {
5826
5613
  style: {
5827
5614
  height: '100%'
@@ -5858,6 +5645,9 @@ var MapViewConnect = function MapViewConnect(_a) {
5858
5645
  origin: mapEnums.MapActionOrigin.map,
5859
5646
  mapId: mapId
5860
5647
  });
5648
+ },
5649
+ onWMJSUnMount: function onWMJSUnMount(mapId) {
5650
+ unRegister(mapId);
5861
5651
  }
5862
5652
  }), baseLayers.map(function (layer) {
5863
5653
  return /*#__PURE__*/React.createElement(MapViewLayer, Object.assign({
@@ -5911,17 +5701,13 @@ var MapViewConnect = function MapViewConnect(_a) {
5911
5701
  updateFeature({
5912
5702
  geojson: geojson,
5913
5703
  layerId: layer.id,
5914
- reason: reason,
5915
- shouldAllowMultipleShapes: shouldAllowMultipleDrawShapes,
5916
- geoJSONIntersectionLayerId: geoJSONIntersectionLayerId,
5917
- geoJSONIntersectionBoundsLayerId: geoJSONIntersectionBoundsLayerId
5704
+ reason: reason
5918
5705
  });
5919
5706
  },
5920
5707
  exitDrawModeCallback: function exitDrawModeCallback(reason) {
5921
5708
  return exitFeatureDrawMode({
5922
5709
  reason: reason,
5923
- layerId: layer.id,
5924
- shouldAllowMultipleShapes: shouldAllowMultipleDrawShapes
5710
+ layerId: layer.id
5925
5711
  });
5926
5712
  }
5927
5713
  }, layer));
@@ -6886,6 +6672,7 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_a) {
6886
6672
  controls: {},
6887
6673
  displayTimeInMap: displayTimeInMap,
6888
6674
  showScaleBar: false,
6675
+ shouldAutoFetch: shouldAutoUpdate,
6889
6676
  mapId: mapId
6890
6677
  }, children), multiLegend && ( /*#__PURE__*/React__default.createElement(LegendConnect, {
6891
6678
  showMapId: true,
@@ -6904,7 +6691,7 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_a) {
6904
6691
  isDocked: true,
6905
6692
  mapWidthRef: mapWidthRef
6906
6693
  }));
6907
- }, [children, disableTimeSlider, displayDimensionSelectButtonInMap, displayGetFeatureInfoButtonInMap, displayLayerManagerAndLegendButtonInMap, displaySearchButtonInMap, displayTimeInMap, id, mapControls, mapControlsPositionTop, mapId, multiLegend, showClock, title, mapWidthRef]);
6694
+ }, [children, disableTimeSlider, displayDimensionSelectButtonInMap, displayGetFeatureInfoButtonInMap, displayLayerManagerAndLegendButtonInMap, displaySearchButtonInMap, displayTimeInMap, id, mapControls, mapControlsPositionTop, mapId, multiLegend, showClock, shouldAutoUpdate, title, mapWidthRef]);
6908
6695
  };
6909
6696
 
6910
6697
  /* *
@@ -7226,8 +7013,8 @@ var HarmonieTempAndPrecipPreset = function HarmonieTempAndPrecipPreset(_ref) {
7226
7013
  * See the License for the specific language governing permissions and
7227
7014
  * limitations under the License.
7228
7015
  *
7229
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7230
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
7016
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7017
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
7231
7018
  * */
7232
7019
  var componentsLookUp = function componentsLookUp(_ref) {
7233
7020
  var componentType = _ref.componentType,
@@ -7293,14 +7080,6 @@ var componentsLookUp = function componentsLookUp(_ref) {
7293
7080
  "data-testid": "coreModelRunInterval"
7294
7081
  }));
7295
7082
  }
7296
- case 'TimeSlider':
7297
- {
7298
- var sliderPreset = initialProps.sliderPreset;
7299
- return /*#__PURE__*/React__default.createElement(TimeSliderConnect, Object.assign({}, sliderPreset, {
7300
- sourceId: id,
7301
- "data-testid": "coreTimeSliderConnect"
7302
- }));
7303
- }
7304
7083
  default:
7305
7084
  return null;
7306
7085
  }
@@ -7691,11 +7470,76 @@ var MILLISECOND_TO_DAY = 1 / 86400000;
7691
7470
  var MILLISECOND_TO_SECOND = 1 / 1000;
7692
7471
  var MILLISECOND_TO_MINUTE = 1 / 60000;
7693
7472
  var MINUTE_TO_SECOND = 60;
7473
+ var MINUTE_TO_MILLISECOND = 60000;
7694
7474
  var SECOND_TO_DAY = 1 / 86400;
7695
7475
  var SECOND_TO_HOUR = 1 / 3600;
7696
7476
  var SECOND_TO_MILLISECOND = 1000;
7697
7477
  var SEVEN_DAYS_IN_SECONDS = 7 * 24 * 60 * 60;
7698
7478
  var ONE_DAY_IN_SECONDS = DAY_TO_SECOND;
7479
+ /**
7480
+ * Default behaviour for time slider lite to update
7481
+ * - Update current time
7482
+ * - Update time range
7483
+ * - Update layers
7484
+ * @param mapId
7485
+ * @param options
7486
+ */
7487
+ var defaultTimeSliderLiteUpdate = function defaultTimeSliderLiteUpdate(mapId, options) {
7488
+ var _a;
7489
+ var updateIntervalSeconds = options.updateIntervalSeconds,
7490
+ setCurrentTime = options.setCurrentTime,
7491
+ timeRange = options.timeRange,
7492
+ setTimeRange = options.setTimeRange;
7493
+ setCurrentTime(Math.floor(Date.now() * MILLISECOND_TO_SECOND));
7494
+ if (timeRange) {
7495
+ setTimeRange([timeRange[0] + updateIntervalSeconds, timeRange[1] + updateIntervalSeconds]);
7496
+ }
7497
+ var layers = (_a = getWMJSMapById(mapId)) === null || _a === void 0 ? void 0 : _a.getLayers();
7498
+ layers === null || layers === void 0 ? void 0 : layers.forEach(function (layer) {
7499
+ layer.parseLayer(undefined, true, 'WMLayer timeSliderLite auto update');
7500
+ });
7501
+ };
7502
+ /**
7503
+ * Connected hook for updating time range and current time
7504
+ * @param updateInterval Update interval in minutes
7505
+ * @param timeRange [startTime, endTime] in seconds
7506
+ * @param setTimeRange Sets the time range
7507
+ * @param options Options
7508
+ */
7509
+ var useAutoUpdate = function useAutoUpdate(mapId, updateInterval, timeRange, setTimeRange, options) {
7510
+ var _a;
7511
+ var _useState = useState(Math.floor(Date.now() * MILLISECOND_TO_SECOND)),
7512
+ _useState2 = _slicedToArray(_useState, 2),
7513
+ currentTime = _useState2[0],
7514
+ setCurrentTime = _useState2[1];
7515
+ var _useState3 = useState(),
7516
+ _useState4 = _slicedToArray(_useState3, 2),
7517
+ updateIntervalInstance = _useState4[0],
7518
+ setUpdateIntervalInstance = _useState4[1];
7519
+ var updateIntervalSeconds = ((_a = updateInterval !== null && updateInterval !== void 0 ? updateInterval : options === null || options === void 0 ? void 0 : options.defaultUpdateInterval) !== null && _a !== void 0 ? _a : 1) * MINUTE_TO_SECOND;
7520
+ useEffect(function () {
7521
+ clearInterval(updateIntervalInstance);
7522
+ var intervalCallback = function intervalCallback() {
7523
+ var _a;
7524
+ return ((_a = options === null || options === void 0 ? void 0 : options.handleUpdate) !== null && _a !== void 0 ? _a : defaultTimeSliderLiteUpdate)(mapId, {
7525
+ updateIntervalSeconds: updateIntervalSeconds,
7526
+ setCurrentTime: setCurrentTime,
7527
+ timeRange: timeRange,
7528
+ setTimeRange: setTimeRange
7529
+ });
7530
+ };
7531
+ var interval = setInterval(intervalCallback, updateIntervalSeconds * SECOND_TO_MILLISECOND);
7532
+ setUpdateIntervalInstance(interval);
7533
+ return function () {
7534
+ return clearInterval(interval);
7535
+ };
7536
+ // eslint-disable-next-line react-hooks/exhaustive-deps
7537
+ }, [updateIntervalSeconds, timeRange]);
7538
+ return {
7539
+ currentTime: currentTime,
7540
+ updateIntervalSeconds: updateIntervalSeconds
7541
+ };
7542
+ };
7699
7543
  /**
7700
7544
  * Reformats a date that has capitalized first letter and colon separator for time
7701
7545
  * @param dateString Date string from Date.toLocaleDateString
@@ -7832,12 +7676,12 @@ var defaultTimeRange = function defaultTimeRange(layers) {
7832
7676
  };
7833
7677
  var useDefaultTimeRange = function useDefaultTimeRange(layers, updateThreshold) {
7834
7678
  var currentTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Math.floor(Date.now() * MILLISECOND_TO_SECOND);
7835
- var _useState = useState([0, 0]),
7836
- _useState2 = _slicedToArray(_useState, 2),
7837
- _useState2$ = _slicedToArray(_useState2[0], 2),
7838
- defaultStartTime = _useState2$[0],
7839
- defaultEndTime = _useState2$[1],
7840
- setDefaultTimeRange = _useState2[1];
7679
+ var _useState5 = useState([0, 0]),
7680
+ _useState6 = _slicedToArray(_useState5, 2),
7681
+ _useState6$ = _slicedToArray(_useState6[0], 2),
7682
+ defaultStartTime = _useState6$[0],
7683
+ defaultEndTime = _useState6$[1],
7684
+ setDefaultTimeRange = _useState6[1];
7841
7685
  var updateThresholdInMinutes = updateThreshold * MINUTE_TO_SECOND;
7842
7686
  var updateDefaultTimeRange = function updateDefaultTimeRange() {
7843
7687
  var newTimeRange = defaultTimeRange(layers, currentTime);
@@ -7850,7 +7694,7 @@ var useDefaultTimeRange = function useDefaultTimeRange(layers, updateThreshold)
7850
7694
  useEffect(function () {
7851
7695
  updateDefaultTimeRange();
7852
7696
  // eslint-disable-next-line react-hooks/exhaustive-deps
7853
- }, [layers]);
7697
+ }, [layers, currentTime]);
7854
7698
  return [defaultStartTime, defaultEndTime];
7855
7699
  };
7856
7700
  var generateCustomTimeList = function generateCustomTimeList(currentTime, startTime, endTime, timeStep, timeZoneOffsetSeconds) {
@@ -7948,10 +7792,13 @@ var timeSliderLiteUtils = /*#__PURE__*/Object.freeze({
7948
7792
  MILLISECOND_TO_SECOND: MILLISECOND_TO_SECOND,
7949
7793
  MILLISECOND_TO_MINUTE: MILLISECOND_TO_MINUTE,
7950
7794
  MINUTE_TO_SECOND: MINUTE_TO_SECOND,
7795
+ MINUTE_TO_MILLISECOND: MINUTE_TO_MILLISECOND,
7951
7796
  SECOND_TO_DAY: SECOND_TO_DAY,
7952
7797
  SECOND_TO_HOUR: SECOND_TO_HOUR,
7953
7798
  SECOND_TO_MILLISECOND: SECOND_TO_MILLISECOND,
7954
7799
  SEVEN_DAYS_IN_SECONDS: SEVEN_DAYS_IN_SECONDS,
7800
+ defaultTimeSliderLiteUpdate: defaultTimeSliderLiteUpdate,
7801
+ useAutoUpdate: useAutoUpdate,
7955
7802
  reformatFinnishDateString: reformatFinnishDateString,
7956
7803
  shortUTCTime: shortUTCTime,
7957
7804
  getMonthChanges: getMonthChanges,
@@ -8454,7 +8301,8 @@ var AnimationSpeedOptions = function AnimationSpeedOptions(_ref) {
8454
8301
 
8455
8302
  var defaultUpdateIntervalOptions = [1, 2, 5, 10, 15, 30, 60];
8456
8303
  var UpdateIntervalOptions = function UpdateIntervalOptions(_ref) {
8457
- var defaultUpdateInterval = _ref.defaultUpdateInterval,
8304
+ var _ref$defaultUpdateInt = _ref.defaultUpdateInterval,
8305
+ defaultUpdateInterval = _ref$defaultUpdateInt === void 0 ? 1 : _ref$defaultUpdateInt,
8458
8306
  dropdownButtonIcon = _ref.dropdownButtonIcon,
8459
8307
  _ref$intervalOptionPr = _ref.intervalOptionPrefix,
8460
8308
  intervalOptionPrefix = _ref$intervalOptionPr === void 0 ? '' : _ref$intervalOptionPr,
@@ -8496,7 +8344,7 @@ var UpdateIntervalOptions = function UpdateIntervalOptions(_ref) {
8496
8344
  onChange: function onChange(event) {
8497
8345
  var _a;
8498
8346
  var newValue = Number((_a = event === null || event === void 0 ? void 0 : event.target) === null || _a === void 0 ? void 0 : _a.value);
8499
- setUpdateInterval && setUpdateInterval(newValue);
8347
+ setUpdateInterval && setUpdateInterval(newValue === defaultValue ? null : newValue);
8500
8348
  },
8501
8349
  IconComponent: dropdownButtonIcon
8502
8350
  }, updateIntervalOptions.map(function (option) {
@@ -9657,9 +9505,7 @@ var TimeSliderLite = function TimeSliderLite(_ref) {
9657
9505
  * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
9658
9506
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
9659
9507
  * */
9660
- var useOnToggleAnimation = function useOnToggleAnimation(
9661
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
9662
- dispatch, mapId, selectedTime, timeStep, defaultTimeStep, startTime, endTime, isAnimating, timeSliderProps) {
9508
+ var useOnToggleAnimation = function useOnToggleAnimation(dispatch, mapId, selectedTime, timeStep, defaultTimeStep, startTime, endTime, isAnimating, timeSliderProps) {
9663
9509
  var startMapAnimation = function startMapAnimation() {
9664
9510
  var _a, _b, _c;
9665
9511
  var observedTimeStep = (_a = timeStep === null || timeStep === void 0 ? void 0 : timeStep[0]) !== null && _a !== void 0 ? _a : defaultTimeStep[0];
@@ -9674,8 +9520,8 @@ dispatch, mapId, selectedTime, timeStep, defaultTimeStep, startTime, endTime, is
9674
9520
  origin: mapEnums.MapActionOrigin.map
9675
9521
  }));
9676
9522
  };
9677
- var onToggleAnimation = function onToggleAnimation() {
9678
- if (isAnimating) {
9523
+ var onToggleAnimation = function onToggleAnimation(forceStart) {
9524
+ if (isAnimating && !forceStart) {
9679
9525
  dispatch(mapActions.mapStopAnimation({
9680
9526
  mapId: mapId,
9681
9527
  origin: mapEnums.MapActionOrigin.map
@@ -9700,31 +9546,42 @@ var TimeSliderLiteConnect = function TimeSliderLiteConnect(_a) {
9700
9546
  var overrideUseTimeRange = _a.overrideUseTimeRange,
9701
9547
  overrideUseTimeStep = _a.overrideUseTimeStep,
9702
9548
  overrideUseTimeZone = _a.overrideUseTimeZone,
9549
+ overrideUseUpdateInterval = _a.overrideUseUpdateInterval,
9550
+ overrideHandleAutoUpdate = _a.overrideHandleAutoUpdate,
9703
9551
  sourceId = _a.sourceId,
9704
9552
  mapId = _a.mapId,
9705
9553
  _a$isAlwaysVisible = _a.isAlwaysVisible,
9706
9554
  isAlwaysVisible = _a$isAlwaysVisible === void 0 ? false : _a$isAlwaysVisible,
9707
9555
  TimeSliderLiteOptionsMenuProps = _a.TimeSliderLiteOptionsMenuProps,
9708
- timeSliderProps = __rest(_a, ["overrideUseTimeRange", "overrideUseTimeStep", "overrideUseTimeZone", "sourceId", "mapId", "isAlwaysVisible", "TimeSliderLiteOptionsMenuProps"]);
9709
- var _React$useState = React.useState(false),
9556
+ timeSliderProps = __rest(_a, ["overrideUseTimeRange", "overrideUseTimeStep", "overrideUseTimeZone", "overrideUseUpdateInterval", "overrideHandleAutoUpdate", "sourceId", "mapId", "isAlwaysVisible", "TimeSliderLiteOptionsMenuProps"]);
9557
+ var _React$useState = React__default.useState(false),
9710
9558
  _React$useState2 = _slicedToArray(_React$useState, 2),
9711
9559
  menuOpen = _React$useState2[0],
9712
9560
  setMenuOpen = _React$useState2[1];
9713
- var useTimeRange = React.useState(null);
9561
+ var useTimeRange = React__default.useState(null);
9714
9562
  var _ref = overrideUseTimeRange || useTimeRange,
9715
9563
  _ref2 = _slicedToArray(_ref, 2),
9716
9564
  timeRange = _ref2[0],
9717
9565
  setTimeRange = _ref2[1];
9718
- var useTimeStep = React.useState(null);
9566
+ var useTimeStep = React__default.useState(null);
9719
9567
  var _ref3 = overrideUseTimeStep || useTimeStep,
9720
9568
  _ref4 = _slicedToArray(_ref3, 2),
9721
9569
  timeStep = _ref4[0],
9722
9570
  setTimeStep = _ref4[1];
9723
- var useTimeZone = React.useState('LT');
9571
+ var useTimeZone = React__default.useState('LT');
9724
9572
  var _ref5 = overrideUseTimeZone || useTimeZone,
9725
9573
  _ref6 = _slicedToArray(_ref5, 2),
9726
9574
  timeZone = _ref6[0],
9727
9575
  setTimeZone = _ref6[1];
9576
+ var useUpdateInterval = React__default.useState(null);
9577
+ var _ref7 = overrideUseUpdateInterval || useUpdateInterval,
9578
+ _ref8 = _slicedToArray(_ref7, 2),
9579
+ updateInterval = _ref8[0],
9580
+ setUpdateInterval = _ref8[1];
9581
+ var _useAutoUpdate = useAutoUpdate(mapId, updateInterval, timeRange, setTimeRange, Object.assign(Object.assign({}, TimeSliderLiteOptionsMenuProps), {
9582
+ handleUpdate: overrideHandleAutoUpdate
9583
+ })),
9584
+ currentTime = _useAutoUpdate.currentTime;
9728
9585
  var isTimeSliderVisible = useSelector(function (store) {
9729
9586
  return mapSelectors.isTimeSliderVisible(store, mapId);
9730
9587
  });
@@ -9756,18 +9613,25 @@ var TimeSliderLiteConnect = function TimeSliderLiteConnect(_a) {
9756
9613
  var layers = useSelector(function (store) {
9757
9614
  return mapSelectors.getMapLayers(store, mapId);
9758
9615
  });
9759
- var _useDefaultTimeRange = useDefaultTimeRange(layers, HOUR_TO_MINUTE),
9616
+ var _useDefaultTimeRange = useDefaultTimeRange(layers, HOUR_TO_MINUTE, currentTime),
9760
9617
  _useDefaultTimeRange2 = _slicedToArray(_useDefaultTimeRange, 2),
9761
9618
  defaultStartTime = _useDefaultTimeRange2[0],
9762
9619
  defaultEndTime = _useDefaultTimeRange2[1];
9763
- var _ref7 = timeRange || [defaultStartTime, defaultEndTime],
9764
- _ref8 = _slicedToArray(_ref7, 2),
9765
- startTime = _ref8[0],
9766
- endTime = _ref8[1];
9620
+ var _ref9 = timeRange || [defaultStartTime, defaultEndTime],
9621
+ _ref10 = _slicedToArray(_ref9, 2),
9622
+ startTime = _ref10[0],
9623
+ endTime = _ref10[1];
9767
9624
  var selectedTime = useSelector(function (store) {
9768
9625
  return mapSelectors.getSelectedTime(store, mapId);
9769
9626
  });
9770
9627
  var onToggleAnimation = useOnToggleAnimation(dispatch, mapId, selectedTime, timeStep, defaultTimeStep, startTime, endTime, isAnimating, timeSliderProps);
9628
+ // Restart animation if auto updated
9629
+ useEffect(function () {
9630
+ if (isAnimating) {
9631
+ onToggleAnimation(true);
9632
+ }
9633
+ // eslint-disable-next-line react-hooks/exhaustive-deps
9634
+ }, [currentTime]);
9771
9635
  var handleTimeRangeChange = function handleTimeRangeChange(newTimeRange) {
9772
9636
  if (isAnimating && newTimeRange) {
9773
9637
  dispatch(mapActions.mapStopAnimation({
@@ -9784,7 +9648,7 @@ var TimeSliderLiteConnect = function TimeSliderLiteConnect(_a) {
9784
9648
  }
9785
9649
  setTimeStep(newTimeStep);
9786
9650
  };
9787
- return /*#__PURE__*/React.createElement(React.Fragment, null, isVisible && menuOpen && ( /*#__PURE__*/React.createElement(TimeSliderLiteOptionsMenu, Object.assign({
9651
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, isVisible && menuOpen && ( /*#__PURE__*/React__default.createElement(TimeSliderLiteOptionsMenu, Object.assign({
9788
9652
  menuOpen: menuOpen,
9789
9653
  setMenuOpen: setMenuOpen,
9790
9654
  defaultTimeRange: [defaultStartTime, defaultEndTime],
@@ -9792,11 +9656,13 @@ var TimeSliderLiteConnect = function TimeSliderLiteConnect(_a) {
9792
9656
  useTimeRange: [timeRange, handleTimeRangeChange],
9793
9657
  useTimeStep: [timeStep, handleTimeStepChange],
9794
9658
  useAnimationSpeed: [animationSpeed, handleAnimationSpeedChange],
9659
+ useUpdateInterval: [updateInterval, setUpdateInterval],
9795
9660
  useTimeZone: [timeZone, setTimeZone],
9796
9661
  closeButtonIcon: (_d = (_c = timeSliderProps.settings) === null || _c === void 0 ? void 0 : _c.closeButton) === null || _d === void 0 ? void 0 : _d.icon,
9797
9662
  dropdownButtonIcon: (_f = (_e = timeSliderProps.settings) === null || _e === void 0 ? void 0 : _e.dropdownButton) === null || _f === void 0 ? void 0 : _f.icon,
9798
9663
  TimeZoneSwitch: (_g = timeSliderProps === null || timeSliderProps === void 0 ? void 0 : timeSliderProps.settings) === null || _g === void 0 ? void 0 : _g.TimeZoneSwitch
9799
- }, TimeSliderLiteOptionsMenuProps))), /*#__PURE__*/React.createElement(TimeSliderLite, Object.assign({
9664
+ }, TimeSliderLiteOptionsMenuProps))), /*#__PURE__*/React__default.createElement(TimeSliderLite, Object.assign({
9665
+ currentTime: currentTime,
9800
9666
  selectedTime: selectedTime,
9801
9667
  timeStep: timeStep !== null && timeStep !== void 0 ? timeStep : defaultTimeStep,
9802
9668
  timeZone: timeZone,