@opengeoweb/core 9.8.0 → 9.10.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.
Files changed (92) hide show
  1. package/index.esm.js +246 -372
  2. package/package.json +2 -4
  3. package/src/lib/components/ComponentsLookUp/componentsLookUp.d.ts +4 -10
  4. package/src/lib/components/LayerManager/LayerManagerHeaderOptions.d.ts +2 -2
  5. package/src/lib/components/LayerManager/LayerManagerUtils.d.ts +2 -6
  6. package/src/lib/components/LayerManager/ProjectionSelect/ProjectionSelect.d.ts +2 -2
  7. package/src/lib/components/MapDrawToolRedux/MapDrawToolRedux.stories.d.ts +1 -0
  8. package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.d.ts +2 -1
  9. package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/DimensionSelectSliderConnect.d.ts +0 -2
  10. package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiDimensionSelectConnect.stories.d.ts +0 -1
  11. package/src/lib/components/SyncGroups/SyncGroups.FourMapsSynced.stories.d.ts +6 -0
  12. package/src/lib/components/SyncGroups/SyncGroups.TwoMapsSynced.stories.d.ts +6 -0
  13. package/src/lib/components/TimeSliderLite/TimeSliderLiteConnect.d.ts +7 -1
  14. package/src/lib/components/TimeSliderLite/TimeSliderLiteOptionsMenu/TimeRangeOptions/DayHourSelector.d.ts +3 -3
  15. package/src/lib/components/TimeSliderLite/TimeSliderLiteOptionsMenu/TimeStepOptions/TimeStepSelector.d.ts +4 -6
  16. package/src/lib/components/TimeSliderLite/TimeSliderLiteOptionsMenu/UpdateIntervalOptions/UpdateIntervalOptions.d.ts +4 -1
  17. package/src/lib/components/TimeSliderLite/timeSliderLiteUtils.d.ts +31 -0
  18. package/src/lib/components/TimeSliderLite/useOnToggleAnimation.d.ts +2 -2
  19. package/src/lib/index.d.ts +7 -7
  20. package/src/lib/utils/jsonPresetFilter.d.ts +4 -2
  21. package/src/lib/components/MultiMapDimensionSelect/DimensionSelectButton.d.ts +0 -8
  22. package/src/lib/components/MultiMapDimensionSelect/DimensionSelectButton.spec.d.ts +0 -1
  23. package/src/lib/components/MultiMapDimensionSelect/DimensionSelectDialogConnect.stories.d.ts +0 -29
  24. package/src/lib/components/MultiMapDimensionSelect/DimensionSelectSlider.d.ts +0 -14
  25. package/src/lib/components/MultiMapDimensionSelect/DimensionSelectSlider.spec.d.ts +0 -1
  26. package/src/lib/components/MultiMapDimensionSelect/MultiDimensionSelectConfig.d.ts +0 -11
  27. package/src/lib/storybookUtils/HelperComponents.d.ts +0 -15
  28. package/src/lib/storybookUtils/defaultStorySettings.d.ts +0 -22
  29. package/src/lib/storybookUtils/store.d.ts +0 -2
  30. package/src/lib/utils/dimensionUtils.d.ts +0 -7
  31. package/src/lib/utils/dimensionUtils.spec.d.ts +0 -1
  32. /package/src/lib/components/{ConfigurableMap → ConfigurableMapConnect}/ConfigurableMapConnect.d.ts +0 -0
  33. /package/src/lib/components/{ConfigurableMap → ConfigurableMapConnect}/ConfigurableMapConnect.spec.d.ts +0 -0
  34. /package/src/lib/components/{ConfigurableMap → ConfigurableMapConnect}/ConfigurableMapConnect.stories.d.ts +0 -0
  35. /package/src/lib/components/{ConfigurableMap → ConfigurableMapConnect}/index.d.ts +0 -0
  36. /package/src/lib/components/{Legend → LegendConnect}/LegendConnect.d.ts +0 -0
  37. /package/src/lib/components/{Legend → LegendConnect}/LegendConnect.spec.d.ts +0 -0
  38. /package/src/lib/components/{Legend → LegendConnect}/LegendConnect.stories.d.ts +0 -0
  39. /package/src/lib/components/{Legend → LegendConnect}/LegendMapButtonConnect.d.ts +0 -0
  40. /package/src/lib/components/{Legend → LegendConnect}/LegendMapButtonConnect.spec.d.ts +0 -0
  41. /package/src/lib/components/{Legend → LegendConnect}/index.d.ts +0 -0
  42. /package/src/lib/components/{MapControls → MapControlsConnect}/ZoomControlsConnect.d.ts +0 -0
  43. /package/src/lib/components/{MapControls → MapControlsConnect}/ZoomControlsConnect.spec.d.ts +0 -0
  44. /package/src/lib/components/{MapControls → MapControlsConnect}/index.d.ts +0 -0
  45. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.DoubleMap.stories.d.ts +0 -0
  46. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.Errors.stories.d.ts +0 -0
  47. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.FeatureLayers.stories.d.ts +0 -0
  48. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.InitialBBoxAndWithout.stories.d.ts +0 -0
  49. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.LayerActions.stories.d.ts +0 -0
  50. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.LayerChangeEnabledOpacity.stories.d.ts +0 -0
  51. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.MapModuleOverDefaultMap.stories.d.ts +0 -0
  52. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.MapPin.stories.d.ts +0 -0
  53. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.MultiMapLayerManager.stories.d.ts +0 -0
  54. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.SelectorTest.stories.d.ts +0 -0
  55. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.SetBaseLayers.stories.d.ts +0 -0
  56. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.ToggleControls.stories.d.ts +0 -0
  57. /package/src/lib/components/{MapView → MapViewConnect}/MapViewConnect.spec.d.ts +0 -0
  58. /package/src/lib/components/{MapView → MapViewConnect}/index.d.ts +0 -0
  59. /package/src/lib/components/{MapView → MapViewConnect}/types.d.ts +0 -0
  60. /package/src/lib/components/{MapView → MapViewConnect}/useKeyboardZoomAndPan.d.ts +0 -0
  61. /package/src/lib/components/{MapView → MapViewConnect}/useKeyboardZoomAndPan.spec.d.ts +0 -0
  62. /package/src/lib/components/{MapView → MapViewConnect}/useTouchZoomPan.d.ts +0 -0
  63. /package/src/lib/components/{MapView → MapViewConnect}/useTouchZoomPan.spec.d.ts +0 -0
  64. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/DimensionSelectButtonConnect.d.ts +0 -0
  65. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/DimensionSelectButtonConnect.spec.d.ts +0 -0
  66. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/DimensionSelectDialogConnect.d.ts +0 -0
  67. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/DimensionSelectDialogConnect.spec.d.ts +0 -0
  68. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/DimensionSelectSliderConnect.spec.d.ts +0 -0
  69. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/EnsembleDimensionExample.stories.d.ts +0 -0
  70. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiDimensionSelectMapButtonsConnect.d.ts +0 -0
  71. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiDimensionSelectMapButtonsConnect.spec.d.ts +0 -0
  72. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiMapMultiDimensionSelect.stories.d.ts +0 -0
  73. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiMapMultiDimensionSelectConnect.d.ts +0 -0
  74. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiMapMultiDimensionSelectConnect.spec.d.ts +0 -0
  75. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiMapSingleDimensionSelectConnect.d.ts +0 -0
  76. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/MultiMapSingleDimensionSelectConnect.spec.d.ts +0 -0
  77. /package/src/lib/components/{MultiMapDimensionSelect → MultiMapDimensionSelectConnect}/index.d.ts +0 -0
  78. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/HarmoniePresets/HarmonieTempAndPrecipPreset.d.ts +0 -0
  79. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/HarmoniePresets/index.d.ts +0 -0
  80. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/ModelRunInterval/ModelRunInterval.d.ts +0 -0
  81. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/ModelRunInterval/ModelRunInterval.spec.d.ts +0 -0
  82. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/ModelRunInterval/ModelRunInterval.stories.d.ts +0 -0
  83. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/ModelRunInterval/index.d.ts +0 -0
  84. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/MultiMapView.stories.d.ts +0 -0
  85. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/MultiMapView10x10.stories.d.ts +0 -0
  86. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/MultiMapView2x2.stories.d.ts +0 -0
  87. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/MultiMapView4x3.stories.d.ts +0 -0
  88. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/MultiMapViewConnect.d.ts +0 -0
  89. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/MultiMapViewConnect.spec.d.ts +0 -0
  90. /package/src/lib/components/{MultiMapView → MultiMapViewConnect}/storyUtils/mapPresets.d.ts +0 -0
  91. /package/src/lib/components/{TimeSlider → TimeSliderConnect}/AutoUpdate.stories.d.ts +0 -0
  92. /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';
@@ -561,7 +561,9 @@ var HeaderOptions = function HeaderOptions(_ref) {
561
561
  tooltipTitle: "small",
562
562
  "data-testid": "collapseSmall-btn",
563
563
  onClick: function onClick() {
564
- if (mapWidth && mapWidth > sizeSmall.width) {
564
+ if (!isDockedLayerManager) {
565
+ onChangeSize(sizeSmall);
566
+ } else if (mapWidth && mapWidth > sizeSmall.width) {
565
567
  onChangeSize(sizeSmall);
566
568
  }
567
569
  },
@@ -570,7 +572,9 @@ var HeaderOptions = function HeaderOptions(_ref) {
570
572
  tooltipTitle: "medium",
571
573
  "data-testid": "collapseMedium-btn",
572
574
  onClick: function onClick() {
573
- if (mapWidth && mapWidth > sizeMedium.width) {
575
+ if (!isDockedLayerManager) {
576
+ onChangeSize(sizeMedium);
577
+ } else if (mapWidth && mapWidth > sizeMedium.width) {
574
578
  onChangeSize(sizeMedium);
575
579
  }
576
580
  },
@@ -579,7 +583,9 @@ var HeaderOptions = function HeaderOptions(_ref) {
579
583
  tooltipTitle: "large",
580
584
  "data-testid": "collapseLarge-btn",
581
585
  onClick: function onClick() {
582
- if (mapWidth && mapWidth > sizeLarge.width) {
586
+ if (!isDockedLayerManager) {
587
+ onChangeSize(sizeLarge);
588
+ } else if (mapWidth && mapWidth > sizeLarge.width) {
583
589
  onChangeSize(sizeLarge);
584
590
  }
585
591
  },
@@ -916,6 +922,9 @@ var DimensionSelectValue = function DimensionSelectValue(_ref) {
916
922
  var isLatest = isReferenceTimeDimensionAndUseLatestIsAvailable && useLatestReferenceTime && selectedDimension.maxValue === selectedDimension.currentValue;
917
923
  return /*#__PURE__*/React__default.createElement(TooltipSelect, {
918
924
  disableUnderline: true,
925
+ SelectDisplayProps: {
926
+ 'aria-label': 'dimensionSelectValue'
927
+ },
919
928
  tooltip: tooltip,
920
929
  isEnabled: isEnabled,
921
930
  value: isLatest ? 'Latest' : selectedDimension.currentValue,
@@ -980,6 +989,9 @@ var DimensionSelectName = function DimensionSelectName(_ref) {
980
989
  return /*#__PURE__*/React__default.createElement(TooltipSelect, {
981
990
  disableUnderline: true,
982
991
  tooltip: tooltip,
992
+ SelectDisplayProps: {
993
+ 'aria-label': 'dimensionSelectName'
994
+ },
983
995
  isEnabled: isEnabled,
984
996
  value: selectedDimensionName,
985
997
  list: dimensionNames.map(function (name) {
@@ -3110,7 +3122,7 @@ var DragHandle = function DragHandle(_ref) {
3110
3122
  }, icon);
3111
3123
  };
3112
3124
 
3113
- var LayerContainerRow = function LayerContainerRow(_a) {
3125
+ var LayerContainerRow = /*#__PURE__*/React.memo(function (_a) {
3114
3126
  var mapId = _a.mapId,
3115
3127
  settings = _a.settings,
3116
3128
  gridProps = __rest(_a, ["mapId", "settings"]);
@@ -3119,6 +3131,14 @@ var LayerContainerRow = function LayerContainerRow(_a) {
3119
3131
  _React$useState2 = _slicedToArray(_React$useState, 2),
3120
3132
  keyPressed = _React$useState2[0],
3121
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];
3122
3142
  var layerIds = useSelector(function (store) {
3123
3143
  return mapSelectors.getLayerIds(store, mapId);
3124
3144
  });
@@ -3133,10 +3153,10 @@ var LayerContainerRow = function LayerContainerRow(_a) {
3133
3153
  origin: layerTypes.LayerActionOrigin.layerManager
3134
3154
  }));
3135
3155
  }, [dispatch]);
3136
- var _React$useState3 = React.useState(null),
3137
- _React$useState4 = _slicedToArray(_React$useState3, 2),
3138
- activeDragIndex = _React$useState4[0],
3139
- 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];
3140
3160
  var onSetList = function onSetList() {}; // since we use activeDragIndex, we don't need inner state handling of ReactSortable
3141
3161
  var onStart = React.useCallback(function (_ref2) {
3142
3162
  var oldIndex = _ref2.oldIndex;
@@ -3194,6 +3214,31 @@ var LayerContainerRow = function LayerContainerRow(_a) {
3194
3214
  return window.removeEventListener('wheel', preventDefault);
3195
3215
  };
3196
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]);
3197
3242
  return /*#__PURE__*/React.createElement(Grid, Object.assign({
3198
3243
  container: true,
3199
3244
  item: true,
@@ -3223,25 +3268,10 @@ var LayerContainerRow = function LayerContainerRow(_a) {
3223
3268
  style: {
3224
3269
  width: '100%'
3225
3270
  }
3226
- }, layerIds.map(function (layerId, index) {
3227
- var _a, _b;
3228
- return /*#__PURE__*/React.createElement(LayerRowConnect, {
3229
- mapId: mapId,
3230
- layerId: layerId,
3231
- layerIndex: index,
3232
- key: "layerRowConnect-".concat(layerId),
3233
- dragHandle: /*#__PURE__*/React.createElement(DragHandle, {
3234
- isDisabled: isDragDisabled,
3235
- index: index,
3236
- hideTooltip: isSorting || isDragDisabled,
3237
- isSorting: isSorting,
3238
- icon: (_a = settings === null || settings === void 0 ? void 0 : settings.dragHandle) === null || _a === void 0 ? void 0 : _a.icon,
3239
- tooltipTitle: (_b = settings === null || settings === void 0 ? void 0 : settings.dragHandle) === null || _b === void 0 ? void 0 : _b.tooltipTitle
3240
- }),
3241
- settings: settings
3242
- });
3243
- })));
3244
- };
3271
+ }, isPending ? ( /*#__PURE__*/React.createElement(LinearProgress, {
3272
+ "data-testid": "loading-bar"
3273
+ })) : contents.slice(0, rowsToDisplay)));
3274
+ });
3245
3275
 
3246
3276
  /* *
3247
3277
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -4394,6 +4424,9 @@ var ProjectionSelect = function ProjectionSelect(_ref) {
4394
4424
  }
4395
4425
  }, /*#__PURE__*/React.createElement(TooltipSelect, {
4396
4426
  disableUnderline: true,
4427
+ SelectDisplayProps: {
4428
+ 'aria-label': 'projectionSelect'
4429
+ },
4397
4430
  tooltip: "Projection: ".concat(currentProjectionObject === null || currentProjectionObject === void 0 ? void 0 : currentProjectionObject.name),
4398
4431
  isEnabled: true,
4399
4432
  style: {
@@ -4867,167 +4900,6 @@ var LayerManagerMapButtonConnect = function LayerManagerMapButtonConnect(_ref) {
4867
4900
  }, /*#__PURE__*/React.createElement(Layers, null));
4868
4901
  };
4869
4902
 
4870
- var dimensionConfig = [{
4871
- name: 'elevation',
4872
- label: 'Vertical level',
4873
- defaultUnit: 'hPa',
4874
- reversed: true,
4875
- iconType: 'IconLevels'
4876
- }, {
4877
- name: 'ensemble_member',
4878
- label: 'Ensemble member',
4879
- defaultUnit: 'member',
4880
- reversed: false,
4881
- iconType: 'IconEnsemble'
4882
- }, {
4883
- name: 'probability',
4884
- label: 'Probability',
4885
- defaultUnit: '%',
4886
- reversed: false,
4887
- iconType: 'IconLevels'
4888
- }, {
4889
- name: 'level',
4890
- label: 'Level',
4891
- defaultUnit: 'level',
4892
- reversed: false,
4893
- iconType: 'IconLevels'
4894
- }];
4895
- var getDimensionIcon = function getDimensionIcon(iconType) {
4896
- if (iconType === 'IconEnsemble') {
4897
- return Equalizer;
4898
- }
4899
- return DimensionsElevation;
4900
- };
4901
-
4902
- /* *
4903
- * Licensed under the Apache License, Version 2.0 (the "License");
4904
- * you may not use this file except in compliance with the License.
4905
- * You may obtain a copy of the License at
4906
- *
4907
- * http://www.apache.org/licenses/LICENSE-2.0
4908
- *
4909
- * Unless required by applicable law or agreed to in writing, software
4910
- * distributed under the License is distributed on an "AS IS" BASIS,
4911
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4912
- * See the License for the specific language governing permissions and
4913
- * limitations under the License.
4914
- *
4915
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4916
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
4917
- * */
4918
- var DimensionSelectButton = function DimensionSelectButton(_ref) {
4919
- var dimension = _ref.dimension,
4920
- onClickDimensionButton = _ref.onClickDimensionButton,
4921
- _ref$isActive = _ref.isActive,
4922
- isActive = _ref$isActive === void 0 ? false : _ref$isActive;
4923
- var dimConfig = dimensionConfig.find(function (cnf) {
4924
- return cnf.name === dimension;
4925
- });
4926
- var Icon = getDimensionIcon(dimConfig && dimConfig.iconType || 'IconLevels');
4927
- var title = "Show ".concat(dimConfig ? dimConfig.label.toLowerCase() : dimension.toLowerCase());
4928
- return /*#__PURE__*/React.createElement(MapControlButton, {
4929
- title: title,
4930
- "data-testid": "dimensionMapBtn-".concat(dimension),
4931
- onClick: onClickDimensionButton,
4932
- isActive: isActive
4933
- }, /*#__PURE__*/React.createElement(Icon, null));
4934
- };
4935
-
4936
- var SmallFontSlider = styled(Slider)(function () {
4937
- return {
4938
- '& .MuiSlider-markLabel': {
4939
- fontSize: '80%'
4940
- }
4941
- };
4942
- });
4943
- var DimensionSelectSlider = function DimensionSelectSlider(_ref) {
4944
- var marks = _ref.marks,
4945
- layerTitle = _ref.layerTitle,
4946
- _ref$reverse = _ref.reverse,
4947
- reverse = _ref$reverse === void 0 ? false : _ref$reverse,
4948
- _ref$isDisabled = _ref.isDisabled,
4949
- isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
4950
- _ref$managedValue = _ref.managedValue,
4951
- managedValue = _ref$managedValue === void 0 ? null : _ref$managedValue,
4952
- _ref$validSelection = _ref.validSelection,
4953
- validSelection = _ref$validSelection === void 0 ? true : _ref$validSelection,
4954
- _ref$alertColor = _ref.alertColor,
4955
- alertColor = _ref$alertColor === void 0 ? 'red' : _ref$alertColor,
4956
- onChangeDimensionValue = _ref.onChangeDimensionValue;
4957
- var _useState = useState(0),
4958
- _useState2 = _slicedToArray(_useState, 2),
4959
- currentIndex = _useState2[0],
4960
- setCurrentIndex = _useState2[1];
4961
- if (!marks || !marks.length) {
4962
- return null;
4963
- }
4964
- var sortedMarks = _toConsumableArray(marks).sort(function (a, b) {
4965
- return Number(typeof a.value === 'number' && typeof b.value === 'number' && a.value - b.value);
4966
- });
4967
- var adaptedMarks = reverse ? sortedMarks.reverse() : sortedMarks;
4968
- var values = adaptedMarks.map(function (m) {
4969
- return m.value;
4970
- });
4971
- // using index as values in slider to get constant spacing between marks
4972
- var indexLabelMarks = adaptedMarks.map(function (m, index) {
4973
- return {
4974
- value: index,
4975
- label: m.label
4976
- };
4977
- });
4978
- var sliderValue = managedValue !== null ? values.findIndex(function (v) {
4979
- return v === managedValue;
4980
- }) : currentIndex;
4981
- var upDownNavigation = function upDownNavigation(event) {
4982
- if (event.key === 'ArrowLeft' || event.key === 'ArrowRight' || event.metaKey || event.ctrlKey) {
4983
- event.preventDefault();
4984
- }
4985
- };
4986
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Box, {
4987
- "data-testid": "slider-dimensionSelect",
4988
- sx: {
4989
- height: '320px',
4990
- margin: '10px',
4991
- marginLeft: '-5px',
4992
- minWidth: 120,
4993
- fontSize: '90%'
4994
- }
4995
- }, /*#__PURE__*/React.createElement(Box, {
4996
- component: "span",
4997
- m: 1
4998
- }, /*#__PURE__*/React.createElement(SmallFontSlider, {
4999
- "data-testid": "verticalSlider",
5000
- orientation: "vertical",
5001
- "aria-labelledby": "vertical-slider",
5002
- step: null,
5003
- min: 0,
5004
- max: indexLabelMarks.length - 1,
5005
- marks: indexLabelMarks,
5006
- style: !validSelection ? {
5007
- color: alertColor
5008
- } : {},
5009
- disabled: isDisabled,
5010
- value: sliderValue,
5011
- onKeyDown: upDownNavigation,
5012
- onChange: function onChange(e, val) {
5013
- onChangeDimensionValue(values[val].toString());
5014
- if (!managedValue) {
5015
- setCurrentIndex(val);
5016
- }
5017
- }
5018
- }))), /*#__PURE__*/React.createElement(CustomTooltip, {
5019
- title: layerTitle
5020
- }, /*#__PURE__*/React.createElement(Typography, {
5021
- variant: "body2",
5022
- sx: {
5023
- paddingLeft: '10px',
5024
- maxWidth: 130,
5025
- overflow: 'hidden',
5026
- textOverflow: 'ellipsis'
5027
- }
5028
- }, layerTitle)));
5029
- };
5030
-
5031
4903
  /* *
5032
4904
  * Licensed under the Apache License, Version 2.0 (the "License");
5033
4905
  * you may not use this file except in compliance with the License.
@@ -5041,100 +4913,27 @@ var DimensionSelectSlider = function DimensionSelectSlider(_ref) {
5041
4913
  * See the License for the specific language governing permissions and
5042
4914
  * limitations under the License.
5043
4915
  *
5044
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5045
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
4916
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4917
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
5046
4918
  * */
5047
- var marksByDimension = function marksByDimension(dim) {
5048
- if (!dim || !dim.name) {
5049
- return [];
5050
- }
5051
- var dimCnf = dimensionConfig.find(function (cnf) {
5052
- return cnf.name === dim.name;
5053
- });
5054
- var defaultUnit = dimCnf ? dimCnf.defaultUnit : '';
5055
- var marks = [];
5056
- if (dim && dim.size) {
5057
- for (var i = 0; i < dim.size(); i += 1) {
5058
- marks.push({
5059
- value: Number(dim.getValueForIndex(i)) || dim.getValueForIndex(i),
5060
- label: "".concat(Number(dim.getValueForIndex(i)) || dim.getValueForIndex(i), " ").concat(dim.unitSymbol ? dim.unitSymbol : defaultUnit)
5061
- });
5062
- }
5063
- }
5064
- return marks;
5065
- };
5066
-
5067
- /* *
5068
- * Licensed under the Apache License, Version 2.0 (the "License");
5069
- * you may not use this file except in compliance with the License.
5070
- * You may obtain a copy of the License at
5071
- *
5072
- * http://www.apache.org/licenses/LICENSE-2.0
5073
- *
5074
- * Unless required by applicable law or agreed to in writing, software
5075
- * distributed under the License is distributed on an "AS IS" BASIS,
5076
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5077
- * See the License for the specific language governing permissions and
5078
- * limitations under the License.
5079
- *
5080
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5081
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
5082
- * */
5083
- var Icon = function Icon(_ref) {
5084
- var isLayerDimensionSynced = _ref.isLayerDimensionSynced;
5085
- return isLayerDimensionSynced ? ( /*#__PURE__*/React.createElement(Link, {
5086
- "data-testid": "syncIcon"
5087
- })) : ( /*#__PURE__*/React.createElement(LinkOff, {
5088
- "data-testid": "syncDisIcon"
5089
- }));
5090
- };
5091
- var DimensionSelectSliderConnect = function DimensionSelectSliderConnect(_ref2) {
5092
- var layerId = _ref2.layerId,
5093
- dimConfig = _ref2.dimConfig,
5094
- dimensionName = _ref2.dimensionName,
5095
- handleDimensionValueChanged = _ref2.handleDimensionValueChanged,
5096
- 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;
5097
4924
  var layerDimension = useSelector(function (store) {
5098
4925
  return layerSelectors.getLayerDimension(store, layerId, dimensionName);
5099
4926
  });
5100
- var wmLayer = webmapUtils.getWMLayerById(layerId);
5101
- if (!layerDimension || !wmLayer) {
5102
- return null;
5103
- }
5104
- var wmsDimension = wmLayer.getDimension(dimensionName);
5105
- if (!wmsDimension) {
4927
+ if (!layerDimension) {
5106
4928
  return null;
5107
4929
  }
5108
- var layerTitle = wmLayer.title;
5109
- var marks = marksByDimension(wmsDimension);
5110
- var isLayerDimensionSynced = layerDimension.synced !== undefined && layerDimension.synced === true;
5111
- var tooltipTitle = isLayerDimensionSynced ? 'Click to disconnect layer' : 'Click to connect layer';
5112
- return /*#__PURE__*/React.createElement(Grid, {
5113
- key: layerId,
5114
- item: true,
5115
- xs: "auto"
5116
- }, /*#__PURE__*/React.createElement(CustomIconButton, {
5117
- tooltipTitle: tooltipTitle,
5118
- "data-testid": "syncButton",
5119
- onClick: function onClick() {
5120
- return handleSyncChanged(layerId, dimensionName, layerDimension.currentValue, !layerDimension.synced);
5121
- },
5122
- sx: {
5123
- margin: '5px'
5124
- }
5125
- }, /*#__PURE__*/React.createElement(Icon, {
5126
- isLayerDimensionSynced: isLayerDimensionSynced
5127
- })), /*#__PURE__*/React.createElement(DimensionSelectSlider, {
5128
- marks: marks,
5129
- layerTitle: layerTitle,
5130
- reverse: dimConfig ? dimConfig.reversed : false,
5131
- managedValue: Number(layerDimension.currentValue) || layerDimension.currentValue,
5132
- onChangeDimensionValue: function onChangeDimensionValue(value) {
5133
- handleDimensionValueChanged(layerId, dimensionName, value);
5134
- },
5135
- isDisabled: false,
5136
- validSelection: layerDimension.synced === false || !(layerDimension.validSyncSelection !== undefined && layerDimension.validSyncSelection === false)
5137
- }));
4930
+ return /*#__PURE__*/React.createElement(MapDimensionSelect, {
4931
+ layerId: layerId,
4932
+ dimensionName: dimensionName,
4933
+ handleDimensionValueChanged: handleDimensionValueChanged,
4934
+ handleSyncChanged: handleSyncChanged,
4935
+ layerDimension: layerDimension
4936
+ });
5138
4937
  };
5139
4938
 
5140
4939
  /* *
@@ -5150,8 +4949,8 @@ var DimensionSelectSliderConnect = function DimensionSelectSliderConnect(_ref2)
5150
4949
  * See the License for the specific language governing permissions and
5151
4950
  * limitations under the License.
5152
4951
  *
5153
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5154
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
4952
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4953
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
5155
4954
  * */
5156
4955
  var DimensionSelectDialogConnect = function DimensionSelectDialogConnect(_ref) {
5157
4956
  var mapId = _ref.mapId,
@@ -5201,38 +5000,24 @@ var DimensionSelectDialogConnect = function DimensionSelectDialogConnect(_ref) {
5201
5000
  return cnf.name === dimensionName;
5202
5001
  });
5203
5002
  var title = dimConfig ? dimConfig.label : dimensionName;
5204
- var topPos = index * 32 + 164; // index * btn height + offset top of window
5205
- return /*#__PURE__*/React.createElement(ToolContainerDraggable, {
5206
- startPosition: {
5207
- left: 50,
5208
- top: topPos
5209
- },
5210
- minWidth: 180,
5211
- title: title,
5003
+ return /*#__PURE__*/React.createElement(DimensionSelectDialog, {
5004
+ dimensionName: dimensionName,
5212
5005
  isOpen: isOpen,
5213
5006
  "data-testid": "multidimensionContent-".concat(title),
5214
5007
  onClose: onCloseDialog,
5215
- bounds: "parent",
5216
5008
  onMouseDown: onMouseDown,
5217
5009
  order: order,
5218
- source: source
5219
- }, /*#__PURE__*/React.createElement("div", {
5220
- style: {
5221
- padding: 4
5222
- }
5223
- }, /*#__PURE__*/React.createElement(Grid, {
5224
- container: true,
5225
- direction: "row"
5010
+ source: source,
5011
+ index: index
5226
5012
  }, layerIds.map(function (layerId) {
5227
5013
  return /*#__PURE__*/React.createElement(DimensionSelectSliderConnect, {
5228
5014
  key: layerId,
5229
5015
  handleDimensionValueChanged: handleDimensionValueChanged,
5230
5016
  handleSyncChanged: handleSyncChanged,
5231
5017
  layerId: layerId,
5232
- dimConfig: dimConfig,
5233
5018
  dimensionName: dimensionName
5234
5019
  });
5235
- }))));
5020
+ }));
5236
5021
  };
5237
5022
 
5238
5023
  /* *
@@ -5689,6 +5474,7 @@ var MapViewConnect = function MapViewConnect(_a) {
5689
5474
  var mapId = _a.mapId,
5690
5475
  children = _a.children,
5691
5476
  props = __rest(_a, ["mapId", "children"]);
5477
+ var store = useStore();
5692
5478
  var mapDimensions = useSelector(function (store) {
5693
5479
  return mapSelectors.getMapDimensions(store, mapId);
5694
5480
  });
@@ -5728,19 +5514,6 @@ var MapViewConnect = function MapViewConnect(_a) {
5728
5514
  var timestep = useSelector(function (store) {
5729
5515
  return mapSelectors.getMapTimeStep(store, mapId);
5730
5516
  });
5731
- // draw tool selectors
5732
- var activeDrawToolId = useSelector(function (store) {
5733
- return drawtoolSelectors.getActiveDrawToolId(store);
5734
- });
5735
- var shouldAllowMultipleDrawShapes = useSelector(function (store) {
5736
- return drawtoolSelectors.getShouldAllowMultipleShapes(store, activeDrawToolId);
5737
- });
5738
- var geoJSONIntersectionLayerId = useSelector(function (store) {
5739
- return drawtoolSelectors.getGeoJSONIntersectionLayerId(store, activeDrawToolId);
5740
- });
5741
- var geoJSONIntersectionBoundsLayerId = useSelector(function (store) {
5742
- return drawtoolSelectors.getGeoJSONIntersectionBoundsLayerId(store, activeDrawToolId);
5743
- });
5744
5517
  var dispatch = useDispatch();
5745
5518
  var mapChangeDimension = React.useCallback(function (mapDimensionPayload) {
5746
5519
  if (mapDimensionPayload.dimension) {
@@ -5787,18 +5560,46 @@ var MapViewConnect = function MapViewConnect(_a) {
5787
5560
  var setSelectedFeature = React.useCallback(function (payload) {
5788
5561
  dispatch(layerActions.setSelectedFeature(payload));
5789
5562
  }, [dispatch]);
5790
- var updateFeature = React.useCallback(function (payload) {
5791
- dispatch(layerActions.updateFeature(payload));
5792
- }, [dispatch]);
5793
- var exitFeatureDrawMode = React.useCallback(function (payload) {
5794
- dispatch(layerActions.exitFeatureDrawMode(payload));
5795
- }, [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]);
5796
5589
  var activeWindowId = useSelector(uiSelectors.getActiveWindowId);
5797
5590
  var isActiveWindowId = function isActiveWindowId() {
5798
5591
  return activeWindowId === mapId;
5799
5592
  };
5800
5593
  useKeyboardZoomAndPan(isActiveWindowId(), mapId);
5801
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]);
5802
5603
  React.useEffect(function () {
5803
5604
  registerMap({
5804
5605
  mapId: mapId
@@ -5807,15 +5608,7 @@ var MapViewConnect = function MapViewConnect(_a) {
5807
5608
  id: mapId,
5808
5609
  type: [syncConstants.SYNCGROUPS_TYPE_SETTIME, syncConstants.SYNCGROUPS_TYPE_SETBBOX]
5809
5610
  });
5810
- return function () {
5811
- unregisterMap({
5812
- mapId: mapId
5813
- });
5814
- syncGroupRemoveSource({
5815
- id: mapId
5816
- });
5817
- };
5818
- }, [mapId, registerMap, syncGroupAddSource, syncGroupRemoveSource, unregisterMap]);
5611
+ }, [mapId, registerMap, syncGroupAddSource]);
5819
5612
  return /*#__PURE__*/React.createElement("div", {
5820
5613
  style: {
5821
5614
  height: '100%'
@@ -5852,6 +5645,9 @@ var MapViewConnect = function MapViewConnect(_a) {
5852
5645
  origin: mapEnums.MapActionOrigin.map,
5853
5646
  mapId: mapId
5854
5647
  });
5648
+ },
5649
+ onWMJSUnMount: function onWMJSUnMount(mapId) {
5650
+ unRegister(mapId);
5855
5651
  }
5856
5652
  }), baseLayers.map(function (layer) {
5857
5653
  return /*#__PURE__*/React.createElement(MapViewLayer, Object.assign({
@@ -5905,17 +5701,13 @@ var MapViewConnect = function MapViewConnect(_a) {
5905
5701
  updateFeature({
5906
5702
  geojson: geojson,
5907
5703
  layerId: layer.id,
5908
- reason: reason,
5909
- shouldAllowMultipleShapes: shouldAllowMultipleDrawShapes,
5910
- geoJSONIntersectionLayerId: geoJSONIntersectionLayerId,
5911
- geoJSONIntersectionBoundsLayerId: geoJSONIntersectionBoundsLayerId
5704
+ reason: reason
5912
5705
  });
5913
5706
  },
5914
5707
  exitDrawModeCallback: function exitDrawModeCallback(reason) {
5915
5708
  return exitFeatureDrawMode({
5916
5709
  reason: reason,
5917
- layerId: layer.id,
5918
- shouldAllowMultipleShapes: shouldAllowMultipleDrawShapes
5710
+ layerId: layer.id
5919
5711
  });
5920
5712
  }
5921
5713
  }, layer));
@@ -6880,6 +6672,7 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_a) {
6880
6672
  controls: {},
6881
6673
  displayTimeInMap: displayTimeInMap,
6882
6674
  showScaleBar: false,
6675
+ shouldAutoFetch: shouldAutoUpdate,
6883
6676
  mapId: mapId
6884
6677
  }, children), multiLegend && ( /*#__PURE__*/React__default.createElement(LegendConnect, {
6885
6678
  showMapId: true,
@@ -6898,7 +6691,7 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_a) {
6898
6691
  isDocked: true,
6899
6692
  mapWidthRef: mapWidthRef
6900
6693
  }));
6901
- }, [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]);
6902
6695
  };
6903
6696
 
6904
6697
  /* *
@@ -7062,7 +6855,7 @@ var useHasSyncGroupWithLayerActions = function useHasSyncGroupWithLayerActions(s
7062
6855
  var makeMapPreset = function makeMapPreset(timeIncrement, uniqueId, referenceTime, layers, syncGroupsIds, displayLayerManagerAndLegendButtonInMap, displayDimensionSelectButtonInMap) {
7063
6856
  var mapTime = dateUtils.dateToString(dateUtils.add(dateUtils.utc(referenceTime), {
7064
6857
  hours: timeIncrement
7065
- }), "yyyy-MM-dd'T'HH:mm:ss'Z'");
6858
+ }), "yyyy-MM-dd'T'HH:mm:ss'Z'") || dateUtils.getCurrentTimeAsString();
7066
6859
  return {
7067
6860
  id: uniqueId,
7068
6861
  syncGroupsIds: syncGroupsIds,
@@ -7220,8 +7013,8 @@ var HarmonieTempAndPrecipPreset = function HarmonieTempAndPrecipPreset(_ref) {
7220
7013
  * See the License for the specific language governing permissions and
7221
7014
  * limitations under the License.
7222
7015
  *
7223
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7224
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
7016
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7017
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
7225
7018
  * */
7226
7019
  var componentsLookUp = function componentsLookUp(_ref) {
7227
7020
  var componentType = _ref.componentType,
@@ -7287,14 +7080,6 @@ var componentsLookUp = function componentsLookUp(_ref) {
7287
7080
  "data-testid": "coreModelRunInterval"
7288
7081
  }));
7289
7082
  }
7290
- case 'TimeSlider':
7291
- {
7292
- var sliderPreset = initialProps.sliderPreset;
7293
- return /*#__PURE__*/React__default.createElement(TimeSliderConnect, Object.assign({}, sliderPreset, {
7294
- sourceId: id,
7295
- "data-testid": "coreTimeSliderConnect"
7296
- }));
7297
- }
7298
7083
  default:
7299
7084
  return null;
7300
7085
  }
@@ -7685,11 +7470,76 @@ var MILLISECOND_TO_DAY = 1 / 86400000;
7685
7470
  var MILLISECOND_TO_SECOND = 1 / 1000;
7686
7471
  var MILLISECOND_TO_MINUTE = 1 / 60000;
7687
7472
  var MINUTE_TO_SECOND = 60;
7473
+ var MINUTE_TO_MILLISECOND = 60000;
7688
7474
  var SECOND_TO_DAY = 1 / 86400;
7689
7475
  var SECOND_TO_HOUR = 1 / 3600;
7690
7476
  var SECOND_TO_MILLISECOND = 1000;
7691
7477
  var SEVEN_DAYS_IN_SECONDS = 7 * 24 * 60 * 60;
7692
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
+ };
7693
7543
  /**
7694
7544
  * Reformats a date that has capitalized first letter and colon separator for time
7695
7545
  * @param dateString Date string from Date.toLocaleDateString
@@ -7826,12 +7676,12 @@ var defaultTimeRange = function defaultTimeRange(layers) {
7826
7676
  };
7827
7677
  var useDefaultTimeRange = function useDefaultTimeRange(layers, updateThreshold) {
7828
7678
  var currentTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Math.floor(Date.now() * MILLISECOND_TO_SECOND);
7829
- var _useState = useState([0, 0]),
7830
- _useState2 = _slicedToArray(_useState, 2),
7831
- _useState2$ = _slicedToArray(_useState2[0], 2),
7832
- defaultStartTime = _useState2$[0],
7833
- defaultEndTime = _useState2$[1],
7834
- 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];
7835
7685
  var updateThresholdInMinutes = updateThreshold * MINUTE_TO_SECOND;
7836
7686
  var updateDefaultTimeRange = function updateDefaultTimeRange() {
7837
7687
  var newTimeRange = defaultTimeRange(layers, currentTime);
@@ -7844,7 +7694,7 @@ var useDefaultTimeRange = function useDefaultTimeRange(layers, updateThreshold)
7844
7694
  useEffect(function () {
7845
7695
  updateDefaultTimeRange();
7846
7696
  // eslint-disable-next-line react-hooks/exhaustive-deps
7847
- }, [layers]);
7697
+ }, [layers, currentTime]);
7848
7698
  return [defaultStartTime, defaultEndTime];
7849
7699
  };
7850
7700
  var generateCustomTimeList = function generateCustomTimeList(currentTime, startTime, endTime, timeStep, timeZoneOffsetSeconds) {
@@ -7942,10 +7792,13 @@ var timeSliderLiteUtils = /*#__PURE__*/Object.freeze({
7942
7792
  MILLISECOND_TO_SECOND: MILLISECOND_TO_SECOND,
7943
7793
  MILLISECOND_TO_MINUTE: MILLISECOND_TO_MINUTE,
7944
7794
  MINUTE_TO_SECOND: MINUTE_TO_SECOND,
7795
+ MINUTE_TO_MILLISECOND: MINUTE_TO_MILLISECOND,
7945
7796
  SECOND_TO_DAY: SECOND_TO_DAY,
7946
7797
  SECOND_TO_HOUR: SECOND_TO_HOUR,
7947
7798
  SECOND_TO_MILLISECOND: SECOND_TO_MILLISECOND,
7948
7799
  SEVEN_DAYS_IN_SECONDS: SEVEN_DAYS_IN_SECONDS,
7800
+ defaultTimeSliderLiteUpdate: defaultTimeSliderLiteUpdate,
7801
+ useAutoUpdate: useAutoUpdate,
7949
7802
  reformatFinnishDateString: reformatFinnishDateString,
7950
7803
  shortUTCTime: shortUTCTime,
7951
7804
  getMonthChanges: getMonthChanges,
@@ -8448,7 +8301,8 @@ var AnimationSpeedOptions = function AnimationSpeedOptions(_ref) {
8448
8301
 
8449
8302
  var defaultUpdateIntervalOptions = [1, 2, 5, 10, 15, 30, 60];
8450
8303
  var UpdateIntervalOptions = function UpdateIntervalOptions(_ref) {
8451
- var defaultUpdateInterval = _ref.defaultUpdateInterval,
8304
+ var _ref$defaultUpdateInt = _ref.defaultUpdateInterval,
8305
+ defaultUpdateInterval = _ref$defaultUpdateInt === void 0 ? 1 : _ref$defaultUpdateInt,
8452
8306
  dropdownButtonIcon = _ref.dropdownButtonIcon,
8453
8307
  _ref$intervalOptionPr = _ref.intervalOptionPrefix,
8454
8308
  intervalOptionPrefix = _ref$intervalOptionPr === void 0 ? '' : _ref$intervalOptionPr,
@@ -8490,7 +8344,7 @@ var UpdateIntervalOptions = function UpdateIntervalOptions(_ref) {
8490
8344
  onChange: function onChange(event) {
8491
8345
  var _a;
8492
8346
  var newValue = Number((_a = event === null || event === void 0 ? void 0 : event.target) === null || _a === void 0 ? void 0 : _a.value);
8493
- setUpdateInterval && setUpdateInterval(newValue);
8347
+ setUpdateInterval && setUpdateInterval(newValue === defaultValue ? null : newValue);
8494
8348
  },
8495
8349
  IconComponent: dropdownButtonIcon
8496
8350
  }, updateIntervalOptions.map(function (option) {
@@ -9666,8 +9520,8 @@ var useOnToggleAnimation = function useOnToggleAnimation(dispatch, mapId, select
9666
9520
  origin: mapEnums.MapActionOrigin.map
9667
9521
  }));
9668
9522
  };
9669
- var onToggleAnimation = function onToggleAnimation() {
9670
- if (isAnimating) {
9523
+ var onToggleAnimation = function onToggleAnimation(forceStart) {
9524
+ if (isAnimating && !forceStart) {
9671
9525
  dispatch(mapActions.mapStopAnimation({
9672
9526
  mapId: mapId,
9673
9527
  origin: mapEnums.MapActionOrigin.map
@@ -9692,31 +9546,42 @@ var TimeSliderLiteConnect = function TimeSliderLiteConnect(_a) {
9692
9546
  var overrideUseTimeRange = _a.overrideUseTimeRange,
9693
9547
  overrideUseTimeStep = _a.overrideUseTimeStep,
9694
9548
  overrideUseTimeZone = _a.overrideUseTimeZone,
9549
+ overrideUseUpdateInterval = _a.overrideUseUpdateInterval,
9550
+ overrideHandleAutoUpdate = _a.overrideHandleAutoUpdate,
9695
9551
  sourceId = _a.sourceId,
9696
9552
  mapId = _a.mapId,
9697
9553
  _a$isAlwaysVisible = _a.isAlwaysVisible,
9698
9554
  isAlwaysVisible = _a$isAlwaysVisible === void 0 ? false : _a$isAlwaysVisible,
9699
9555
  TimeSliderLiteOptionsMenuProps = _a.TimeSliderLiteOptionsMenuProps,
9700
- timeSliderProps = __rest(_a, ["overrideUseTimeRange", "overrideUseTimeStep", "overrideUseTimeZone", "sourceId", "mapId", "isAlwaysVisible", "TimeSliderLiteOptionsMenuProps"]);
9701
- 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),
9702
9558
  _React$useState2 = _slicedToArray(_React$useState, 2),
9703
9559
  menuOpen = _React$useState2[0],
9704
9560
  setMenuOpen = _React$useState2[1];
9705
- var useTimeRange = React.useState(null);
9561
+ var useTimeRange = React__default.useState(null);
9706
9562
  var _ref = overrideUseTimeRange || useTimeRange,
9707
9563
  _ref2 = _slicedToArray(_ref, 2),
9708
9564
  timeRange = _ref2[0],
9709
9565
  setTimeRange = _ref2[1];
9710
- var useTimeStep = React.useState(null);
9566
+ var useTimeStep = React__default.useState(null);
9711
9567
  var _ref3 = overrideUseTimeStep || useTimeStep,
9712
9568
  _ref4 = _slicedToArray(_ref3, 2),
9713
9569
  timeStep = _ref4[0],
9714
9570
  setTimeStep = _ref4[1];
9715
- var useTimeZone = React.useState('LT');
9571
+ var useTimeZone = React__default.useState('LT');
9716
9572
  var _ref5 = overrideUseTimeZone || useTimeZone,
9717
9573
  _ref6 = _slicedToArray(_ref5, 2),
9718
9574
  timeZone = _ref6[0],
9719
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;
9720
9585
  var isTimeSliderVisible = useSelector(function (store) {
9721
9586
  return mapSelectors.isTimeSliderVisible(store, mapId);
9722
9587
  });
@@ -9748,18 +9613,25 @@ var TimeSliderLiteConnect = function TimeSliderLiteConnect(_a) {
9748
9613
  var layers = useSelector(function (store) {
9749
9614
  return mapSelectors.getMapLayers(store, mapId);
9750
9615
  });
9751
- var _useDefaultTimeRange = useDefaultTimeRange(layers, HOUR_TO_MINUTE),
9616
+ var _useDefaultTimeRange = useDefaultTimeRange(layers, HOUR_TO_MINUTE, currentTime),
9752
9617
  _useDefaultTimeRange2 = _slicedToArray(_useDefaultTimeRange, 2),
9753
9618
  defaultStartTime = _useDefaultTimeRange2[0],
9754
9619
  defaultEndTime = _useDefaultTimeRange2[1];
9755
- var _ref7 = timeRange || [defaultStartTime, defaultEndTime],
9756
- _ref8 = _slicedToArray(_ref7, 2),
9757
- startTime = _ref8[0],
9758
- endTime = _ref8[1];
9620
+ var _ref9 = timeRange || [defaultStartTime, defaultEndTime],
9621
+ _ref10 = _slicedToArray(_ref9, 2),
9622
+ startTime = _ref10[0],
9623
+ endTime = _ref10[1];
9759
9624
  var selectedTime = useSelector(function (store) {
9760
9625
  return mapSelectors.getSelectedTime(store, mapId);
9761
9626
  });
9762
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]);
9763
9635
  var handleTimeRangeChange = function handleTimeRangeChange(newTimeRange) {
9764
9636
  if (isAnimating && newTimeRange) {
9765
9637
  dispatch(mapActions.mapStopAnimation({
@@ -9776,7 +9648,7 @@ var TimeSliderLiteConnect = function TimeSliderLiteConnect(_a) {
9776
9648
  }
9777
9649
  setTimeStep(newTimeStep);
9778
9650
  };
9779
- 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({
9780
9652
  menuOpen: menuOpen,
9781
9653
  setMenuOpen: setMenuOpen,
9782
9654
  defaultTimeRange: [defaultStartTime, defaultEndTime],
@@ -9784,11 +9656,13 @@ var TimeSliderLiteConnect = function TimeSliderLiteConnect(_a) {
9784
9656
  useTimeRange: [timeRange, handleTimeRangeChange],
9785
9657
  useTimeStep: [timeStep, handleTimeStepChange],
9786
9658
  useAnimationSpeed: [animationSpeed, handleAnimationSpeedChange],
9659
+ useUpdateInterval: [updateInterval, setUpdateInterval],
9787
9660
  useTimeZone: [timeZone, setTimeZone],
9788
9661
  closeButtonIcon: (_d = (_c = timeSliderProps.settings) === null || _c === void 0 ? void 0 : _c.closeButton) === null || _d === void 0 ? void 0 : _d.icon,
9789
9662
  dropdownButtonIcon: (_f = (_e = timeSliderProps.settings) === null || _e === void 0 ? void 0 : _e.dropdownButton) === null || _f === void 0 ? void 0 : _f.icon,
9790
9663
  TimeZoneSwitch: (_g = timeSliderProps === null || timeSliderProps === void 0 ? void 0 : timeSliderProps.settings) === null || _g === void 0 ? void 0 : _g.TimeZoneSwitch
9791
- }, TimeSliderLiteOptionsMenuProps))), /*#__PURE__*/React.createElement(TimeSliderLite, Object.assign({
9664
+ }, TimeSliderLiteOptionsMenuProps))), /*#__PURE__*/React__default.createElement(TimeSliderLite, Object.assign({
9665
+ currentTime: currentTime,
9792
9666
  selectedTime: selectedTime,
9793
9667
  timeStep: timeStep !== null && timeStep !== void 0 ? timeStep : defaultTimeStep,
9794
9668
  timeZone: timeZone,