@opengeoweb/core 4.5.0 → 4.6.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 (26) hide show
  1. package/index.esm.js +610 -252
  2. package/index.umd.js +565 -195
  3. package/lib/components/MapWarning/MapWarningProperties.d.ts +1 -0
  4. package/lib/components/TimeSlider/TimeSlider.d.ts +1 -0
  5. package/lib/components/TimeSlider/TimeSliderButtons/AnimationLengthButton/AnimationLengthButton.d.ts +9 -0
  6. package/lib/components/TimeSlider/TimeSliderButtons/AnimationLengthButton/AnimationLengthButton.spec.d.ts +1 -0
  7. package/lib/components/TimeSlider/TimeSliderButtons/AnimationLengthButton/AnimationLengthButtonConnect.d.ts +6 -0
  8. package/lib/components/TimeSlider/TimeSliderButtons/AnimationLengthButton/AnimationLengthButtonConnect.spec.d.ts +1 -0
  9. package/lib/components/TimeSlider/TimeSliderButtons/OptionsMenuButton/OptionsMenu.d.ts +1 -0
  10. package/lib/components/TimeSlider/TimeSliderButtons/OptionsMenuButton/OptionsMenuButton.d.ts +6 -0
  11. package/lib/components/TimeSlider/TimeSliderCurrentTimeBox/TimeSliderCurrentTimeBox.d.ts +3 -2
  12. package/lib/components/TimeSlider/TimeSliderCurrentTimeBox/TimeSliderCurrentTimeBoxConnect.d.ts +4 -0
  13. package/lib/components/TimeSlider/TimeSliderCurrentTimeBox/TimeSliderCurrentTimeBoxMouseEvents.d.ts +2 -2
  14. package/lib/components/TimeSlider/TimeSliderLegend/TimeSliderLegend.d.ts +3 -0
  15. package/lib/components/TimeSlider/TimeSliderLegend/TimeSliderLegendConnect.d.ts +4 -0
  16. package/lib/components/TimeSlider/TimeSliderLegend/TimeSliderLegendUtils.d.ts +1 -0
  17. package/lib/hooks/useSetupDialog/useSetupDialog.d.ts +2 -0
  18. package/lib/index.d.ts +1 -3
  19. package/lib/store/mapStore/map/reducer.d.ts +4 -8
  20. package/lib/store/mapStore/map/selectors.d.ts +21 -40
  21. package/lib/store/mapStore/map/types.d.ts +15 -14
  22. package/lib/store/ui/reducer.d.ts +5 -1
  23. package/lib/store/ui/selectors.d.ts +24 -0
  24. package/lib/store/ui/types.d.ts +10 -0
  25. package/lib/utils/testUtils.d.ts +1 -0
  26. package/package.json +5 -5
package/index.esm.js CHANGED
@@ -7,7 +7,7 @@ import _, { debounce, isEqual, groupBy, throttle, range } from 'lodash';
7
7
  import { takeLatest, put, select, call, takeEvery, all, delay } from 'redux-saga/effects';
8
8
  import { connect, useDispatch, useSelector, Provider } from 'react-redux';
9
9
  import { CustomTooltip, ToolButton, ToolContainerDraggable, IS_JEST, TooltipSelect, AlertIcon, useControlledTooltip, tooltipContainerStyles, sliderHeaderStyle, CustomSlider, ToggleMenu, ManagerButton, CustomAccordion, EnableButton, ManagerDeleteButton, AlertBanner, calculateDialogSizeAndPosition, useIsMounted, CustomToggleButton, useMakeSureContainerStaysInsideWindow, withEggs } from '@opengeoweb/shared';
10
- import { Pause, Play, Add, Copy, Flag, DragHandle as DragHandle$1, Cached, CollapseSmall, CollapseMedium, CollapseLarge, CollapseWindow, ExpandWindow, Filter, Search, Clear, Close, Info, DimensionsOther, DimensionsElevation, DimensionsRefTime, DimensionsTime, Edit, Visibility, Delete, Home, Minus, Layers, Equalizer, Link, LinkOff, AutoUpdateActive, AutoUpdateInActive, TextIcon, Speed, FastForward, Clock, Now, Options, StepForward, StepBackward, dragHandlePath, ChevronDown, ChevronUp, List as List$1, ChevronRight, ChevronLeft, Resize, ThemeWrapper, lightTheme } from '@opengeoweb/theme';
10
+ import { Pause, Play, Add, Copy, Both, None, DragHandle as DragHandle$1, Cached, CollapseSmall, CollapseMedium, CollapseLarge, CollapseWindow, ExpandWindow, Filter, Search, Clear, Close, Info, DimensionsOther, DimensionsElevation, DimensionsRefTime, DimensionsTime, Edit, Visibility, Delete, Home, Minus, Layers, Equalizer, Link, LinkOff, AutoUpdateActive, AutoUpdateInActive, TextIcon, Speed, FastForward, Clock, Now, Animation, Options, StepForward, StepBackward, dragHandlePath, ChevronDown, ChevronUp, List as List$1, ChevronRight, ChevronLeft, Resize, ThemeWrapper, lightTheme } from '@opengeoweb/theme';
11
11
  import { Paper, Box, Typography, IconButton, Grid, MenuItem, Button, Popper, FormControl, InputLabel, List, ListItem, ListItemText, CircularProgress, ListSubheader, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, DialogActions, LinearProgress, InputAdornment, Backdrop, ListItemSecondaryAction, ListItemIcon, Checkbox, Switch, styled, Slider, Menu, useTheme, Snackbar } from '@mui/material';
12
12
  import { legendImageStore, WMImageEventType, getLegendGraphicURLForLayer, WMGetServiceFromStore, LayerType as LayerType$1, clearImageCache, getMapImageStore, WMBBOX, debug, DebugType, WMJSMap, WMLayer } from '@opengeoweb/webmap';
13
13
  import { ReactSortable } from 'react-sortablejs';
@@ -398,6 +398,19 @@ var Scale;
398
398
  Scale[Scale["DataScale"] = 8] = "DataScale";
399
399
  })(Scale || (Scale = {}));
400
400
 
401
+ var AnimationLength;
402
+
403
+ (function (AnimationLength) {
404
+ AnimationLength[AnimationLength["Minutes15"] = 15] = "Minutes15";
405
+ AnimationLength[AnimationLength["Minutes30"] = 30] = "Minutes30";
406
+ AnimationLength[AnimationLength["Hours1"] = 60] = "Hours1";
407
+ AnimationLength[AnimationLength["Hours2"] = 120] = "Hours2";
408
+ AnimationLength[AnimationLength["Hours3"] = 180] = "Hours3";
409
+ AnimationLength[AnimationLength["Hours6"] = 360] = "Hours6";
410
+ AnimationLength[AnimationLength["Hours12"] = 720] = "Hours12";
411
+ AnimationLength[AnimationLength["Hours24"] = 1440] = "Hours24";
412
+ })(AnimationLength || (AnimationLength = {}));
413
+
401
414
  var MapActionOrigin;
402
415
 
403
416
  (function (MapActionOrigin) {
@@ -591,6 +604,7 @@ var getLastTimeStepForLayerId = function getLastTimeStepForLayerId(layerId) {
591
604
  var types$2 = /*#__PURE__*/Object.freeze({
592
605
  __proto__: null,
593
606
  get Scale () { return Scale; },
607
+ get AnimationLength () { return AnimationLength; },
594
608
  get MapActionOrigin () { return MapActionOrigin; },
595
609
  get LayerType () { return LayerType; },
596
610
  get LayerStatus () { return LayerStatus; },
@@ -1964,7 +1978,9 @@ var createUIDialogElement = function createUIDialogElement(_ref) {
1964
1978
  activeMapId: activeMapId,
1965
1979
  isOpen: setOpen,
1966
1980
  type: type,
1967
- source: source
1981
+ source: source,
1982
+ isLoading: false,
1983
+ error: undefined
1968
1984
  };
1969
1985
  };
1970
1986
  var initialState$4 = {
@@ -2047,6 +2063,18 @@ var slice$4 = createSlice({
2047
2063
  setActiveWindowId: function setActiveWindowId(draft, action) {
2048
2064
  var activeWindowId = action.payload.activeWindowId;
2049
2065
  draft.activeWindowId = activeWindowId;
2066
+ },
2067
+ toggleIsLoadingDialog: function toggleIsLoadingDialog(draft, action) {
2068
+ var _action$payload3 = action.payload,
2069
+ isLoading = _action$payload3.isLoading,
2070
+ type = _action$payload3.type;
2071
+ draft.dialogs[type].isLoading = isLoading;
2072
+ },
2073
+ setErrorDialog: function setErrorDialog(draft, action) {
2074
+ var _action$payload4 = action.payload,
2075
+ error = _action$payload4.error,
2076
+ type = _action$payload4.type;
2077
+ draft.dialogs[type].error = error;
2050
2078
  }
2051
2079
  }
2052
2080
  });
@@ -2255,50 +2283,50 @@ var slice$3 = createSlice({
2255
2283
 
2256
2284
  draft.byId[mapId].animationDelay = animationDelay;
2257
2285
  },
2258
- setAnimationInterval: function setAnimationInterval(draft, action) {
2286
+ layerMoveLayer: function layerMoveLayer(draft, action) {
2259
2287
  var _action$payload9 = action.payload,
2260
- mapId = _action$payload9.mapId,
2261
- interval = _action$payload9.interval;
2288
+ oldIndex = _action$payload9.oldIndex,
2289
+ newIndex = _action$payload9.newIndex,
2290
+ mapId = _action$payload9.mapId;
2262
2291
 
2263
2292
  if (!draft.byId[mapId]) {
2264
2293
  return;
2265
2294
  }
2266
2295
 
2267
- draft.byId[mapId].timeStep = interval;
2296
+ draft.byId[mapId].mapLayers = moveArrayElements(draft.byId[mapId].mapLayers, oldIndex, newIndex);
2268
2297
  },
2269
- layerMoveLayer: function layerMoveLayer(draft, action) {
2298
+ setActiveLayerId: function setActiveLayerId(draft, action) {
2270
2299
  var _action$payload10 = action.payload,
2271
- oldIndex = _action$payload10.oldIndex,
2272
- newIndex = _action$payload10.newIndex,
2273
- mapId = _action$payload10.mapId;
2300
+ mapId = _action$payload10.mapId,
2301
+ layerId = _action$payload10.layerId;
2274
2302
 
2275
2303
  if (!draft.byId[mapId]) {
2276
2304
  return;
2277
2305
  }
2278
2306
 
2279
- draft.byId[mapId].mapLayers = moveArrayElements(draft.byId[mapId].mapLayers, oldIndex, newIndex);
2307
+ draft.byId[mapId].activeLayerId = layerId;
2280
2308
  },
2281
- setActiveLayerId: function setActiveLayerId(draft, action) {
2309
+ setTimeSliderCenterTime: function setTimeSliderCenterTime(draft, action) {
2282
2310
  var _action$payload11 = action.payload,
2283
2311
  mapId = _action$payload11.mapId,
2284
- layerId = _action$payload11.layerId;
2312
+ timeSliderCenterTime = _action$payload11.timeSliderCenterTime;
2285
2313
 
2286
2314
  if (!draft.byId[mapId]) {
2287
2315
  return;
2288
2316
  }
2289
2317
 
2290
- draft.byId[mapId].activeLayerId = layerId;
2318
+ draft.byId[mapId].timeSliderCenterTime = timeSliderCenterTime;
2291
2319
  },
2292
- setTimeSliderCenterTime: function setTimeSliderCenterTime(draft, action) {
2320
+ setTimeSliderUnfilteredSelectedTime: function setTimeSliderUnfilteredSelectedTime(draft, action) {
2293
2321
  var _action$payload12 = action.payload,
2294
2322
  mapId = _action$payload12.mapId,
2295
- timeSliderCenterTime = _action$payload12.timeSliderCenterTime;
2323
+ timeSliderUnfilteredSelectedTime = _action$payload12.timeSliderUnfilteredSelectedTime;
2296
2324
 
2297
2325
  if (!draft.byId[mapId]) {
2298
2326
  return;
2299
2327
  }
2300
2328
 
2301
- draft.byId[mapId].timeSliderCenterTime = timeSliderCenterTime;
2329
+ draft.byId[mapId].timeSliderUnfilteredSelectedTime = timeSliderUnfilteredSelectedTime;
2302
2330
  },
2303
2331
  setTimeSliderSecondsPerPx: function setTimeSliderSecondsPerPx(draft, action) {
2304
2332
  var _action$payload13 = action.payload,
@@ -2424,21 +2452,10 @@ var slice$3 = createSlice({
2424
2452
 
2425
2453
  draft.byId[mapId].activeMapPresetId = presetId;
2426
2454
  },
2427
- setIsMapPresetLoading: function setIsMapPresetLoading(draft, action) {
2455
+ setHasMapPresetChanges: function setHasMapPresetChanges(draft, action) {
2428
2456
  var _action$payload24 = action.payload,
2429
2457
  mapId = _action$payload24.mapId,
2430
- isLoading = _action$payload24.isLoading;
2431
-
2432
- if (!draft.byId[mapId]) {
2433
- return;
2434
- }
2435
-
2436
- draft.byId[mapId].isMapPresetLoading = isLoading;
2437
- },
2438
- setHasMapPresetChanges: function setHasMapPresetChanges(draft, action) {
2439
- var _action$payload25 = action.payload,
2440
- mapId = _action$payload25.mapId,
2441
- hasChanges = _action$payload25.hasChanges;
2458
+ hasChanges = _action$payload24.hasChanges;
2442
2459
 
2443
2460
  if (!draft.byId[mapId]) {
2444
2461
  return;
@@ -2446,21 +2463,10 @@ var slice$3 = createSlice({
2446
2463
 
2447
2464
  draft.byId[mapId].hasMapPresetChanges = hasChanges;
2448
2465
  },
2449
- setMapPresetError: function setMapPresetError(draft, action) {
2450
- var _action$payload26 = action.payload,
2451
- mapId = _action$payload26.mapId,
2452
- error = _action$payload26.error;
2453
-
2454
- if (!draft.byId[mapId]) {
2455
- return;
2456
- }
2457
-
2458
- draft.byId[mapId].mapPresetError = error;
2459
- },
2460
2466
  toggleDockedLayerManager: function toggleDockedLayerManager(draft, action) {
2461
- var _action$payload27 = action.payload,
2462
- mapId = _action$payload27.mapId,
2463
- openDockedLayerManager = _action$payload27.openDockedLayerManager;
2467
+ var _action$payload25 = action.payload,
2468
+ mapId = _action$payload25.mapId,
2469
+ openDockedLayerManager = _action$payload25.openDockedLayerManager;
2464
2470
 
2465
2471
  if (!draft.byId[mapId]) {
2466
2472
  return;
@@ -2473,9 +2479,9 @@ var slice$3 = createSlice({
2473
2479
  },
2474
2480
  extraReducers: function extraReducers(builder) {
2475
2481
  builder.addCase(addLayer$1, function (draft, action) {
2476
- var _action$payload28 = action.payload,
2477
- layerId = _action$payload28.layerId,
2478
- mapId = _action$payload28.mapId;
2482
+ var _action$payload26 = action.payload,
2483
+ layerId = _action$payload26.layerId,
2484
+ mapId = _action$payload26.mapId;
2479
2485
 
2480
2486
  if (!draft.byId[mapId]) {
2481
2487
  return;
@@ -2492,10 +2498,10 @@ var slice$3 = createSlice({
2492
2498
 
2493
2499
  draft.byId[mapId].mapLayers.unshift(layerId);
2494
2500
  }).addCase(addBaseLayer, function (draft, action) {
2495
- var _action$payload29 = action.payload,
2496
- layer = _action$payload29.layer,
2497
- layerId = _action$payload29.layerId,
2498
- mapId = _action$payload29.mapId;
2501
+ var _action$payload27 = action.payload,
2502
+ layer = _action$payload27.layer,
2503
+ layerId = _action$payload27.layerId,
2504
+ mapId = _action$payload27.mapId;
2499
2505
 
2500
2506
  if (!draft.byId[mapId]) {
2501
2507
  return;
@@ -2545,9 +2551,9 @@ var slice$3 = createSlice({
2545
2551
  }
2546
2552
  }
2547
2553
  }).addCase(setBaseLayers$1, function (draft, action) {
2548
- var _action$payload30 = action.payload,
2549
- layers = _action$payload30.layers,
2550
- mapId = _action$payload30.mapId; // Split into base and overlayers
2554
+ var _action$payload28 = action.payload,
2555
+ layers = _action$payload28.layers,
2556
+ mapId = _action$payload28.mapId; // Split into base and overlayers
2551
2557
 
2552
2558
  var baseLayers = [];
2553
2559
  var overLayers = [];
@@ -2574,9 +2580,9 @@ var slice$3 = createSlice({
2574
2580
  if (overLayerIds.length !== 0) draft.byId[mapId].overLayers = overLayerIds;
2575
2581
  }
2576
2582
  }).addCase(layerDelete$1, function (draft, action) {
2577
- var _action$payload31 = action.payload,
2578
- mapId = _action$payload31.mapId,
2579
- layerId = _action$payload31.layerId;
2583
+ var _action$payload29 = action.payload,
2584
+ mapId = _action$payload29.mapId,
2585
+ layerId = _action$payload29.layerId;
2580
2586
 
2581
2587
  if (!draft.byId[mapId]) {
2582
2588
  return;
@@ -2597,9 +2603,9 @@ var slice$3 = createSlice({
2597
2603
  draft.byId[mapId].activeLayerId = '';
2598
2604
  }
2599
2605
  }).addCase(baseLayerDelete, function (draft, action) {
2600
- var _action$payload32 = action.payload,
2601
- mapId = _action$payload32.mapId,
2602
- layerId = _action$payload32.layerId;
2606
+ var _action$payload30 = action.payload,
2607
+ mapId = _action$payload30.mapId,
2608
+ layerId = _action$payload30.layerId;
2603
2609
 
2604
2610
  if (!draft.byId[mapId]) {
2605
2611
  return;
@@ -2612,14 +2618,14 @@ var slice$3 = createSlice({
2612
2618
  return id !== layerId;
2613
2619
  });
2614
2620
  }).addCase(layerChangeDimension$1, function (draft, action) {
2615
- var _action$payload33 = action.payload,
2616
- layerId = _action$payload33.layerId,
2617
- dimension = _action$payload33.dimension;
2621
+ var _action$payload31 = action.payload,
2622
+ layerId = _action$payload31.layerId,
2623
+ dimension = _action$payload31.dimension;
2618
2624
  produceDraftStateSetMapDimensionFromLayerChangeDimension(draft, layerId, dimension);
2619
2625
  }).addCase(setTimeSync, function (draft, action) {
2620
- var _action$payload34 = action.payload,
2621
- targetsFromAction = _action$payload34.targets,
2622
- source = _action$payload34.source;
2626
+ var _action$payload32 = action.payload,
2627
+ targetsFromAction = _action$payload32.targets,
2628
+ source = _action$payload32.source;
2623
2629
  /* Because we want backwards compatibility with the previous code, we also need to listen to the original source action */
2624
2630
 
2625
2631
  var targets = [{
@@ -2643,9 +2649,9 @@ var slice$3 = createSlice({
2643
2649
  }
2644
2650
  });
2645
2651
  }).addCase(setBboxSync, function (draft, action) {
2646
- var _action$payload35 = action.payload,
2647
- targetsFromAction = _action$payload35.targets,
2648
- source = _action$payload35.source;
2652
+ var _action$payload33 = action.payload,
2653
+ targetsFromAction = _action$payload33.targets,
2654
+ source = _action$payload33.source;
2649
2655
  /* Because we want backwards compatibility with the previous code, we also need to listen to the original source action */
2650
2656
 
2651
2657
  var targets = [{
@@ -2676,9 +2682,9 @@ var slice$3 = createSlice({
2676
2682
  * These targets can be used as payloads in new Layer actions.
2677
2683
  * These actions are here handled via the layer reducer, as it is the same logic
2678
2684
  */
2679
- var _action$payload36 = action.payload,
2680
- targets = _action$payload36.targets,
2681
- source = _action$payload36.source;
2685
+ var _action$payload34 = action.payload,
2686
+ targets = _action$payload34.targets,
2687
+ source = _action$payload34.source;
2682
2688
  return targets.reduce(function (prevState, target) {
2683
2689
  var action = {
2684
2690
  payload: target,
@@ -2694,9 +2700,9 @@ var slice$3 = createSlice({
2694
2700
  var mapAction = mapActions$1.mapUpdateAllMapDimensions(mapDimensions);
2695
2701
  return reducer$3(draft, mapAction);
2696
2702
  }).addCase(mapChangeDimension, function (draft, action) {
2697
- var _action$payload37 = action.payload,
2698
- mapId = _action$payload37.mapId,
2699
- dimensionFromAction = _action$payload37.dimension;
2703
+ var _action$payload35 = action.payload,
2704
+ mapId = _action$payload35.mapId,
2705
+ dimensionFromAction = _action$payload35.dimension;
2700
2706
  produceDraftStateSetWebMapDimension(draft, mapId, dimensionFromAction, true);
2701
2707
  }).addCase(setMapPreset, function (draft, action) {
2702
2708
  var mapId = action.payload.mapId;
@@ -2719,9 +2725,9 @@ var slice$3 = createSlice({
2719
2725
  draft.byId[mapId].timeStep = defaultTimeStep;
2720
2726
  draft.byId[mapId].animationDelay = defaultAnimationDelayAtStart;
2721
2727
  }).addCase(uiActions.registerDialog, function (draft, action) {
2722
- var _action$payload38 = action.payload,
2723
- mapId = _action$payload38.mapId,
2724
- type = _action$payload38.type;
2728
+ var _action$payload36 = action.payload,
2729
+ mapId = _action$payload36.mapId,
2730
+ type = _action$payload36.type;
2725
2731
 
2726
2732
  if (!draft.byId[mapId]) {
2727
2733
  return;
@@ -3150,6 +3156,12 @@ var getActiveWindowId = function getActiveWindowId(store) {
3150
3156
 
3151
3157
  return (_a = store === null || store === void 0 ? void 0 : store.ui) === null || _a === void 0 ? void 0 : _a.activeWindowId;
3152
3158
  };
3159
+ var getDialogIsLoading = createSelector(getDialogDetailsByType, function (details) {
3160
+ return details && details.isLoading || false;
3161
+ });
3162
+ var getDialogError = createSelector(getDialogDetailsByType, function (details) {
3163
+ return details && details.error || '';
3164
+ });
3153
3165
 
3154
3166
  var selectors$1 = /*#__PURE__*/Object.freeze({
3155
3167
  __proto__: null,
@@ -3160,7 +3172,9 @@ var selectors$1 = /*#__PURE__*/Object.freeze({
3160
3172
  getDialogOrder: getDialogOrder,
3161
3173
  getDialogIsOrderedOnTop: getDialogIsOrderedOnTop,
3162
3174
  getDialogSource: getDialogSource,
3163
- getActiveWindowId: getActiveWindowId
3175
+ getActiveWindowId: getActiveWindowId,
3176
+ getDialogIsLoading: getDialogIsLoading,
3177
+ getDialogError: getDialogError
3164
3178
  });
3165
3179
 
3166
3180
  /* *
@@ -3969,6 +3983,19 @@ var getMapAnimationDelay = createSelector(getMapById, function (store) {
3969
3983
  var getMapTimeSliderCenterTime = createSelector(getMapById, function (store) {
3970
3984
  return store ? store.timeSliderCenterTime : moment().unix();
3971
3985
  });
3986
+ /**
3987
+ * Returns the unflitered selected time of time slider
3988
+ * This is not used to set the selected time itself, which is controlled by TimeBounds where values are rounded.
3989
+ *
3990
+ * Example: selectedTime = getTimeSliderUnfliteredSelectedTime(store, 'mapid_1')
3991
+ * @param {object} store store: object - store object
3992
+ * @param {string} mapId mapId: string - Id of the map
3993
+ * @returns {number} returnType: number - unfiltered selected time as a unix timestamp
3994
+ */
3995
+
3996
+ var getTimeSliderUnfilteredSelectedTime = createSelector(getMapById, function (store) {
3997
+ return store ? store.timeSliderUnfilteredSelectedTime : null;
3998
+ });
3972
3999
  /**
3973
4000
  * Returns the number of seconds per pixel on the time slider
3974
4001
  *
@@ -4275,18 +4302,6 @@ var getMapPreset = createSelector(getMapLayers, getMapBaseLayers, getMapOverLaye
4275
4302
  shouldShowLegend: shouldShowLegend
4276
4303
  });
4277
4304
  }, selectorMemoizationOptions);
4278
- /**
4279
- * Returns the loading state of the map preset
4280
- *
4281
- * Example getIsMapPresetLoading(store, mapId);
4282
- * @param {object} store store: object - store object
4283
- * @param {string} mapId mapId: string - Id of the map
4284
- * @returns {boolean} returnType: boolean
4285
- */
4286
-
4287
- var getIsMapPresetLoading = createSelector(getMapById, function (store) {
4288
- return store && store.isMapPresetLoading ? store.isMapPresetLoading : false;
4289
- });
4290
4305
  /**
4291
4306
  * Returns the has changes state of the map preset
4292
4307
  *
@@ -4299,18 +4314,6 @@ var getIsMapPresetLoading = createSelector(getMapById, function (store) {
4299
4314
  var getHasMapPresetChanges = createSelector(getMapById, function (store) {
4300
4315
  return store && store.hasMapPresetChanges ? store.hasMapPresetChanges : false;
4301
4316
  });
4302
- /**
4303
- * Returns the error state of the map preset
4304
- *
4305
- * Example getMapPresetError(store, mapId);
4306
- * @param {object} store store: object - store object
4307
- * @param {string} mapId mapId: string - Id of the map
4308
- * @returns {Error} returnType: string
4309
- */
4310
-
4311
- var getMapPresetError = createSelector(getMapById, function (store) {
4312
- return store === null || store === void 0 ? void 0 : store.mapPresetError;
4313
- });
4314
4317
  /**
4315
4318
  * Returns whether the docked layer manager is open
4316
4319
  *
@@ -4353,6 +4356,7 @@ var selectors = /*#__PURE__*/Object.freeze({
4353
4356
  getMapTimeStep: getMapTimeStep,
4354
4357
  getMapAnimationDelay: getMapAnimationDelay,
4355
4358
  getMapTimeSliderCenterTime: getMapTimeSliderCenterTime,
4359
+ getTimeSliderUnfilteredSelectedTime: getTimeSliderUnfilteredSelectedTime,
4356
4360
  getMapTimeSliderSecondsPerPx: getMapTimeSliderSecondsPerPx,
4357
4361
  getMapTimeSliderDataScaleToSecondsPerPx: getMapTimeSliderDataScaleToSecondsPerPx,
4358
4362
  isTimestepAuto: isTimestepAuto,
@@ -4372,9 +4376,7 @@ var selectors = /*#__PURE__*/Object.freeze({
4372
4376
  getActiveMapPresetId: getActiveMapPresetId,
4373
4377
  getLegendId: getLegendId,
4374
4378
  getMapPreset: getMapPreset,
4375
- getIsMapPresetLoading: getIsMapPresetLoading,
4376
4379
  getHasMapPresetChanges: getHasMapPresetChanges,
4377
- getMapPresetError: getMapPresetError,
4378
4380
  getIsDockedLayerManagerOpen: getIsDockedLayerManagerOpen
4379
4381
  });
4380
4382
 
@@ -8149,9 +8151,9 @@ function setMapPresetSaga(_ref6) {
8149
8151
  }
8150
8152
 
8151
8153
  _context8.next = 42;
8152
- return put(mapActions$1.setAnimationInterval({
8154
+ return put(mapActions$1.setTimeStep({
8153
8155
  mapId: mapId,
8154
- interval: interval
8156
+ timeStep: interval
8155
8157
  }));
8156
8158
 
8157
8159
  case 42:
@@ -9379,7 +9381,7 @@ var RenderLayers = function RenderLayers(_ref) {
9379
9381
  }));
9380
9382
  };
9381
9383
 
9382
- var marks$2 = [{
9384
+ var marks$3 = [{
9383
9385
  value: 0,
9384
9386
  label: '0 %'
9385
9387
  }, {
@@ -9517,7 +9519,7 @@ var OpacitySelect = function OpacitySelect(_ref) {
9517
9519
  step: 0.01,
9518
9520
  max: 1,
9519
9521
  min: 0,
9520
- marks: marks$2,
9522
+ marks: marks$3,
9521
9523
  onChange: function onChange(event, newValue) {
9522
9524
  event.stopPropagation();
9523
9525
  onLayerChangeOpacity(newValue);
@@ -9695,7 +9697,9 @@ var ActivateLayer = function ActivateLayer(_ref) {
9695
9697
  return /*#__PURE__*/React.createElement(ManagerButton, {
9696
9698
  tooltipTitle: tooltipTitle,
9697
9699
  onClick: onClick,
9698
- icon: /*#__PURE__*/React.createElement(Flag, {
9700
+ icon: isActive ? /*#__PURE__*/React.createElement(Both, {
9701
+ sx: iconStyle
9702
+ }) : /*#__PURE__*/React.createElement(None, {
9699
9703
  sx: iconStyle
9700
9704
  }),
9701
9705
  testId: id,
@@ -11767,6 +11771,9 @@ var HeaderOptions = function HeaderOptions(_ref) {
11767
11771
  onClick: function onClick() {
11768
11772
  return onChangeSize(sizeSmall);
11769
11773
  },
11774
+ onTouchEnd: function onTouchEnd() {
11775
+ return onChangeSize(sizeSmall);
11776
+ },
11770
11777
  sx: iconStyle,
11771
11778
  className: "collapseSmall-btn"
11772
11779
  }, /*#__PURE__*/React.createElement(CollapseSmall, null))), /*#__PURE__*/React.createElement(CustomTooltip, {
@@ -11777,6 +11784,9 @@ var HeaderOptions = function HeaderOptions(_ref) {
11777
11784
  onClick: function onClick() {
11778
11785
  return onChangeSize(sizeMedium);
11779
11786
  },
11787
+ onTouchEnd: function onTouchEnd() {
11788
+ return onChangeSize(sizeMedium);
11789
+ },
11780
11790
  sx: iconStyle,
11781
11791
  className: "collapseMedium-btn"
11782
11792
  }, /*#__PURE__*/React.createElement(CollapseMedium, null))), /*#__PURE__*/React.createElement(CustomTooltip, {
@@ -11787,6 +11797,9 @@ var HeaderOptions = function HeaderOptions(_ref) {
11787
11797
  onClick: function onClick() {
11788
11798
  return onChangeSize(sizeLarge);
11789
11799
  },
11800
+ onTouchEnd: function onTouchEnd() {
11801
+ return onChangeSize(sizeLarge);
11802
+ },
11790
11803
  sx: iconStyle,
11791
11804
  className: "collapseLarge-btn"
11792
11805
  }, /*#__PURE__*/React.createElement(CollapseLarge, null))), /*#__PURE__*/React.createElement(CustomTooltip, {
@@ -11798,6 +11811,9 @@ var HeaderOptions = function HeaderOptions(_ref) {
11798
11811
  sx: iconStyle,
11799
11812
  onClick: function onClick() {
11800
11813
  return onClickDockButton();
11814
+ },
11815
+ onTouchEnd: function onTouchEnd() {
11816
+ return onClickDockButton();
11801
11817
  }
11802
11818
  }, isDockedLayerManager ? /*#__PURE__*/React.createElement(CollapseWindow, {
11803
11819
  "data-testid": "dockedLayerManager-collapse"
@@ -11914,7 +11930,11 @@ var LayerManager = function LayerManager(_ref) {
11914
11930
  setSize(dragSize);
11915
11931
  }
11916
11932
  }
11917
- }, /*#__PURE__*/React.createElement(Box, null, isLoading && /*#__PURE__*/React.createElement(LinearProgress, {
11933
+ }, /*#__PURE__*/React.createElement(Box, {
11934
+ onKeyDown: function onKeyDown(event) {
11935
+ event.stopPropagation();
11936
+ }
11937
+ }, isLoading && /*#__PURE__*/React.createElement(LinearProgress, {
11918
11938
  "data-testid": "loading-bar",
11919
11939
  color: "secondary",
11920
11940
  sx: {
@@ -12021,12 +12041,20 @@ var useSetupDialog = function useSetupDialog(dialogType) {
12021
12041
  var isDialogOpen = useSelector(function (store) {
12022
12042
  return getisDialogOpen(store, dialogType);
12023
12043
  });
12044
+ var uiIsLoading = useSelector(function (store) {
12045
+ return getDialogIsLoading(store, dialogType);
12046
+ });
12047
+ var uiError = useSelector(function (store) {
12048
+ return getDialogError(store, dialogType);
12049
+ });
12024
12050
  return {
12025
12051
  setDialogOrder: setDialogOrder,
12026
12052
  dialogOrder: dialogOrder,
12027
12053
  onCloseDialog: onCloseDialog,
12028
12054
  uiSource: uiSource,
12029
- isDialogOpen: isDialogOpen
12055
+ isDialogOpen: isDialogOpen,
12056
+ uiIsLoading: uiIsLoading,
12057
+ uiError: uiError
12030
12058
  };
12031
12059
  };
12032
12060
 
@@ -12115,19 +12143,15 @@ var LayerManagerConnect = function LayerManagerConnect(_ref) {
12115
12143
  var mapId = useSelector(function (store) {
12116
12144
  return getDialogMapId(store, dialogType);
12117
12145
  });
12118
- var isMapPresetLoading = useSelector(function (store) {
12119
- return getIsMapPresetLoading(store, mapId);
12120
- });
12121
- var mapPresetError = useSelector(function (store) {
12122
- return getMapPresetError(store, mapId);
12123
- });
12124
12146
 
12125
12147
  var _useSetupDialog = useSetupDialog(dialogType),
12126
12148
  dialogOrder = _useSetupDialog.dialogOrder,
12127
12149
  setDialogOrder = _useSetupDialog.setDialogOrder,
12128
12150
  onCloseDialog = _useSetupDialog.onCloseDialog,
12129
12151
  isDialogOpen = _useSetupDialog.isDialogOpen,
12130
- uiSource = _useSetupDialog.uiSource;
12152
+ uiSource = _useSetupDialog.uiSource,
12153
+ uiIsLoading = _useSetupDialog.uiIsLoading,
12154
+ uiError = _useSetupDialog.uiError;
12131
12155
 
12132
12156
  useFetchServices(dialogType, preloadedMapServices);
12133
12157
 
@@ -12152,8 +12176,8 @@ var LayerManagerConnect = function LayerManagerConnect(_ref) {
12152
12176
  order: dialogOrder,
12153
12177
  source: uiSource,
12154
12178
  leftHeaderComponent: leftHeaderComponent,
12155
- isLoading: isMapPresetLoading,
12156
- error: mapPresetError,
12179
+ isLoading: uiIsLoading,
12180
+ error: uiError,
12157
12181
  onToggleDock: onToggleDock
12158
12182
  });
12159
12183
  };
@@ -13776,6 +13800,7 @@ var LayerList = function LayerList(_ref) {
13776
13800
  var rowMargin = 4;
13777
13801
  var rowHeight = widthToRowHeight(layerSelectWidth);
13778
13802
  var layerSelectFilterHeight = 155 + serviceListHeight;
13803
+ var minHeight = 400;
13779
13804
  return /*#__PURE__*/React.createElement(Box, {
13780
13805
  "data-testid": "layerList"
13781
13806
  }, /*#__PURE__*/React.createElement(Box, {
@@ -13784,7 +13809,7 @@ var LayerList = function LayerList(_ref) {
13784
13809
  fontSize: '12px'
13785
13810
  }
13786
13811
  }, filteredLayers.length, " results"), /*#__PURE__*/React.createElement(FixedSizeList, {
13787
- height: layerSelectHeight - layerSelectFilterHeight,
13812
+ height: layerSelectHeight - layerSelectFilterHeight < minHeight ? minHeight : layerSelectHeight - layerSelectFilterHeight,
13788
13813
  itemCount: filteredLayers.length,
13789
13814
  itemSize: rowHeight + rowMargin
13790
13815
  }, function (_ref2) {
@@ -14543,7 +14568,14 @@ var LayerSelect = function LayerSelect(_ref) {
14543
14568
  left: 100
14544
14569
  },
14545
14570
  isOpen: isOpen,
14546
- onChangeSize: onChangeSize,
14571
+ onResizeStop: function onResizeStop(_event, _direction, node) {
14572
+ var width = node.offsetWidth,
14573
+ height = node.offsetHeight;
14574
+ onChangeSize({
14575
+ width: width,
14576
+ height: height
14577
+ });
14578
+ },
14547
14579
  onClose: onClose,
14548
14580
  headerSize: "small",
14549
14581
  bounds: bounds,
@@ -15996,7 +16028,7 @@ var SpeedButton = function SpeedButton(_ref) {
15996
16028
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
15997
16029
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
15998
16030
  * */
15999
- var marks$1 = [{
16031
+ var marks$2 = [{
16000
16032
  label: '1 min',
16001
16033
  value: 1,
16002
16034
  text: '1m'
@@ -16091,18 +16123,11 @@ var TimeStepButton = function TimeStepButton(_ref) {
16091
16123
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
16092
16124
  _ref$isTimestepAuto = _ref.isTimestepAuto,
16093
16125
  isTimestepAuto = _ref$isTimestepAuto === void 0 ? false : _ref$isTimestepAuto,
16094
- timeDimension = _ref.timeDimension,
16095
16126
  onChangeTimeStep = _ref.onChangeTimeStep,
16096
16127
  _ref$onToggleTimestep = _ref.onToggleTimestepAuto,
16097
16128
  onToggleTimestepAuto = _ref$onToggleTimestep === void 0 ? function () {} : _ref$onToggleTimestep,
16098
16129
  _ref$isOpenByDefault = _ref.isOpenByDefault,
16099
16130
  isOpenByDefault = _ref$isOpenByDefault === void 0 ? false : _ref$isOpenByDefault;
16100
- var timeStepFromLayer = getActiveLayerTimeStep(timeDimension) || timeStep;
16101
- React.useEffect(function () {
16102
- if (isTimestepAuto) {
16103
- onChangeTimeStep(timeStepFromLayer);
16104
- }
16105
- }, [timeStepFromLayer, isTimestepAuto, onChangeTimeStep]);
16106
16131
 
16107
16132
  var handleMenuItemClick = function handleMenuItemClick(mark) {
16108
16133
  if (isTimestepAuto) {
@@ -16115,7 +16140,7 @@ var TimeStepButton = function TimeStepButton(_ref) {
16115
16140
  return /*#__PURE__*/React.createElement(TimeSliderMenu, {
16116
16141
  title: timeStepTitle,
16117
16142
  isOpenByDefault: isOpenByDefault,
16118
- marks: marks$1,
16143
+ marks: marks$2,
16119
16144
  value: timeStep,
16120
16145
  handleMenuItemClick: handleMenuItemClick,
16121
16146
  isDisabled: disabled,
@@ -16142,7 +16167,7 @@ var TimeStepButton = function TimeStepButton(_ref) {
16142
16167
  * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
16143
16168
  * Copyright 2022 - Finnish Meteorological Institute (FMI)
16144
16169
  * */
16145
- var marks = [{
16170
+ var marks$1 = [{
16146
16171
  label: '5 min',
16147
16172
  value: Scale.Minutes5,
16148
16173
  text: '5m'
@@ -16193,7 +16218,7 @@ var TimeScaleButton = function TimeScaleButton(_ref) {
16193
16218
  var onChangeSliderValue = function onChangeSliderValue(mark) {
16194
16219
  var newSliderValue = mark.value;
16195
16220
  var newValue = newSliderValue ? Math.round(newSliderValue) : 0;
16196
- var newScale = marks.find(function (el) {
16221
+ var newScale = marks$1.find(function (el) {
16197
16222
  return el.value === newValue;
16198
16223
  }).value;
16199
16224
  var scaleToSecPerPx = newScale === Scale.DataScale ? getScaleToSecondsPerPxForDataScale(layers) : scaleToSecondsPerPx[newScale];
@@ -16204,7 +16229,7 @@ var TimeScaleButton = function TimeScaleButton(_ref) {
16204
16229
  return /*#__PURE__*/React.createElement(TimeSliderMenu, {
16205
16230
  handleMenuItemClick: onChangeSliderValue,
16206
16231
  icon: /*#__PURE__*/React.createElement(Clock, null),
16207
- marks: marks,
16232
+ marks: marks$1,
16208
16233
  title: "Time scale",
16209
16234
  value: timeSliderScale,
16210
16235
  onChangeMouseWheel: onChangeSliderValue
@@ -16227,7 +16252,7 @@ var TimeScaleButton = function TimeScaleButton(_ref) {
16227
16252
  * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
16228
16253
  * Copyright 2022 - Finnish Meteorological Institute (FMI)
16229
16254
  * */
16230
- var title = 'Now';
16255
+ var title$1 = 'Now';
16231
16256
 
16232
16257
  var NowButton = function NowButton(_ref) {
16233
16258
  var _ref$onSetNow = _ref.onSetNow,
@@ -16235,7 +16260,7 @@ var NowButton = function NowButton(_ref) {
16235
16260
  _ref$disabled = _ref.disabled,
16236
16261
  disabled = _ref$disabled === void 0 ? false : _ref$disabled;
16237
16262
  return /*#__PURE__*/React.createElement(CustomTooltip, {
16238
- title: title,
16263
+ title: title$1,
16239
16264
  "data-testid": "nowButtonTooltip"
16240
16265
  }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
16241
16266
  disabled: disabled,
@@ -16248,6 +16273,86 @@ var NowButton = function NowButton(_ref) {
16248
16273
  }))));
16249
16274
  };
16250
16275
 
16276
+ /* *
16277
+ * Licensed under the Apache License, Version 2.0 (the "License");
16278
+ * you may not use this file except in compliance with the License.
16279
+ * You may obtain a copy of the License at
16280
+ *
16281
+ * http://www.apache.org/licenses/LICENSE-2.0
16282
+ *
16283
+ * Unless required by applicable law or agreed to in writing, software
16284
+ * distributed under the License is distributed on an "AS IS" BASIS,
16285
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16286
+ * See the License for the specific language governing permissions and
16287
+ * limitations under the License.
16288
+ *
16289
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
16290
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
16291
+ * */
16292
+ var title = 'Animation';
16293
+ var marks = [{
16294
+ label: '15 min',
16295
+ value: AnimationLength.Minutes15,
16296
+ text: '15m'
16297
+ }, {
16298
+ label: '30 min',
16299
+ value: AnimationLength.Minutes30,
16300
+ text: '30m'
16301
+ }, {
16302
+ label: '1 h',
16303
+ value: AnimationLength.Hours1,
16304
+ text: '1h'
16305
+ }, {
16306
+ label: '2 h',
16307
+ value: AnimationLength.Hours2,
16308
+ text: '2h'
16309
+ }, {
16310
+ label: '3 h',
16311
+ value: AnimationLength.Hours3,
16312
+ text: '3h'
16313
+ }, {
16314
+ label: '6 h',
16315
+ value: AnimationLength.Hours6,
16316
+ text: '6h'
16317
+ }, {
16318
+ label: '12 h',
16319
+ value: AnimationLength.Hours12,
16320
+ text: '12h'
16321
+ }, {
16322
+ label: '24 h',
16323
+ value: AnimationLength.Hours24,
16324
+ text: '24h'
16325
+ }].sort(function (a, b) {
16326
+ return b.value - a.value;
16327
+ });
16328
+
16329
+ var AnimationLengthButton = function AnimationLengthButton(_ref) {
16330
+ var _ref$disabled = _ref.disabled,
16331
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
16332
+ _ref$animationLength = _ref.animationLength,
16333
+ animationLength = _ref$animationLength === void 0 ? AnimationLength.Hours1 : _ref$animationLength,
16334
+ onChangeAnimationLength = _ref.onChangeAnimationLength;
16335
+
16336
+ var onChangeSliderValue = function onChangeSliderValue(mark) {
16337
+ var newSliderValue = mark.value;
16338
+ var newValue = newSliderValue ? Math.round(newSliderValue) : 0;
16339
+ var newLength = marks.find(function (el) {
16340
+ return el.value === newValue;
16341
+ }).value;
16342
+ onChangeAnimationLength(newLength);
16343
+ };
16344
+
16345
+ return /*#__PURE__*/React.createElement(TimeSliderMenu, {
16346
+ handleMenuItemClick: onChangeSliderValue,
16347
+ icon: /*#__PURE__*/React.createElement(Animation, null),
16348
+ marks: marks,
16349
+ title: title,
16350
+ isDisabled: disabled,
16351
+ value: animationLength,
16352
+ onChangeMouseWheel: onChangeSliderValue
16353
+ });
16354
+ };
16355
+
16251
16356
  /* *
16252
16357
  * Licensed under the Apache License, Version 2.0 (the "License");
16253
16358
  * you may not use this file except in compliance with the License.
@@ -16269,7 +16374,8 @@ var OptionsMenu = function OptionsMenu(_ref) {
16269
16374
  nowBtn = _ref.nowBtn,
16270
16375
  speedBtn = _ref.speedBtn,
16271
16376
  timeScaleBtn = _ref.timeScaleBtn,
16272
- timeStepBtn = _ref.timeStepBtn;
16377
+ timeStepBtn = _ref.timeStepBtn,
16378
+ animationLengthBtn = _ref.animationLengthBtn;
16273
16379
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Grid, {
16274
16380
  item: true,
16275
16381
  xs: "auto"
@@ -16285,6 +16391,11 @@ var OptionsMenu = function OptionsMenu(_ref) {
16285
16391
  })), /*#__PURE__*/React__default.createElement(Grid, {
16286
16392
  item: true,
16287
16393
  xs: "auto"
16394
+ }, animationLengthBtn || /*#__PURE__*/React__default.createElement(AnimationLengthButton, {
16395
+ onChangeAnimationLength: function onChangeAnimationLength() {}
16396
+ })), /*#__PURE__*/React__default.createElement(Grid, {
16397
+ item: true,
16398
+ xs: "auto"
16288
16399
  }, timeStepBtn || /*#__PURE__*/React__default.createElement(TimeStepButton, {
16289
16400
  timeStep: 0,
16290
16401
  onChangeTimeStep: function onChangeTimeStep() {}
@@ -16306,8 +16417,14 @@ var OptionsMenuButton = function OptionsMenuButton(_ref) {
16306
16417
  speedBtn = _ref.speedBtn,
16307
16418
  timeStepBtn = _ref.timeStepBtn,
16308
16419
  timeScaleBtn = _ref.timeScaleBtn,
16420
+ animationLengthBtn = _ref.animationLengthBtn,
16309
16421
  _ref$isOpenByDefault = _ref.isOpenByDefault,
16310
- isOpenByDefault = _ref$isOpenByDefault === void 0 ? false : _ref$isOpenByDefault;
16422
+ isOpenByDefault = _ref$isOpenByDefault === void 0 ? false : _ref$isOpenByDefault,
16423
+ timeStep = _ref.timeStep,
16424
+ timeDimension = _ref.timeDimension,
16425
+ onChangeTimeStep = _ref.onChangeTimeStep,
16426
+ _ref$isTimestepAuto = _ref.isTimestepAuto,
16427
+ isTimestepAuto = _ref$isTimestepAuto === void 0 ? false : _ref$isTimestepAuto;
16311
16428
 
16312
16429
  var _useState = useState(null),
16313
16430
  _useState2 = _slicedToArray(_useState, 2),
@@ -16324,6 +16441,12 @@ var OptionsMenuButton = function OptionsMenuButton(_ref) {
16324
16441
  setOpen(true);
16325
16442
  }
16326
16443
  }, [anchorEl, isOpenByDefault]);
16444
+ var timeStepFromLayer = getActiveLayerTimeStep(timeDimension) || timeStep;
16445
+ React__default.useEffect(function () {
16446
+ if (isTimestepAuto) {
16447
+ onChangeTimeStep(timeStepFromLayer);
16448
+ }
16449
+ }, [timeStepFromLayer, isTimestepAuto, onChangeTimeStep]);
16327
16450
  return /*#__PURE__*/React__default.createElement("div", null, /*#__PURE__*/React__default.createElement(CustomTooltip, {
16328
16451
  title: "Animation options",
16329
16452
  placement: "bottom"
@@ -16359,6 +16482,7 @@ var OptionsMenuButton = function OptionsMenuButton(_ref) {
16359
16482
  timeScaleBtn: timeScaleBtn,
16360
16483
  timeStepBtn: timeStepBtn,
16361
16484
  speedBtn: speedBtn,
16485
+ animationLengthBtn: animationLengthBtn,
16362
16486
  autoUpdateBtn: autoUpdateBtn
16363
16487
  })))));
16364
16488
  };
@@ -16625,11 +16749,12 @@ var drawStepPxLine = function drawStepPxLine(ctx, theme, stepPx, height, scale,
16625
16749
  var drawTimeText = function drawTimeText(ctx, theme, stepPx, height, timeText, scale) {
16626
16750
  var ctx2 = ctx;
16627
16751
  var _theme$palette$geoweb = theme.palette.geowebColors.timeSlider.timelineText,
16752
+ fontSize = _theme$palette$geoweb.fontSize,
16628
16753
  fontFamily = _theme$palette$geoweb.fontFamily,
16629
16754
  color = _theme$palette$geoweb.color;
16630
16755
  ctx2.fillStyle = color; // time text has smaller font than other timeline text
16631
16756
 
16632
- ctx2.font = "12px ".concat(fontFamily);
16757
+ ctx2.font = "".concat(fontSize, "px ").concat(fontFamily);
16633
16758
  ctx2.textAlign = 'left';
16634
16759
 
16635
16760
  if (scale === Scale.Year || scale === Scale.Month || scale === Scale.Week || scale === Scale.Day) {
@@ -16661,7 +16786,7 @@ var drawYearScaleText = function drawYearScaleText(ctx, theme, newDate, stepPx,
16661
16786
  ctx2.fillStyle = color;
16662
16787
  ctx2.font = "".concat(fontSize, "px ").concat(fontFamily);
16663
16788
  ctx2.textAlign = 'left';
16664
- ctx2.fillText(newDate, stepPx + 2, height - 30);
16789
+ ctx2.fillText(newDate, stepPx + 2, height - 10);
16665
16790
  };
16666
16791
 
16667
16792
  var drawLeftSideDateText = function drawLeftSideDateText(ctx, theme, newDate, height) {
@@ -17127,9 +17252,9 @@ var drawBackground = function drawBackground(context, theme, visibleTimeStart, v
17127
17252
  drawDefaultBackground();
17128
17253
  drawObservedData();
17129
17254
  drawForecastData();
17255
+ drawNightOrAlternateTime();
17130
17256
  drawAnimationArea();
17131
17257
  drawDraggableIcons();
17132
- drawNightOrAlternateTime();
17133
17258
 
17134
17259
  function drawDefaultBackground() {
17135
17260
  ctx.fillStyle = legendNoDataBackground.rgba;
@@ -17152,18 +17277,23 @@ var drawBackground = function drawBackground(context, theme, visibleTimeStart, v
17152
17277
 
17153
17278
  function drawAnimationArea() {
17154
17279
  ctx.fillStyle = theme.palette.geowebColors.timeSlider.timelineSelectionBackground.rgba;
17155
- ctx.fillRect(animationStartPx, y, Math.max(animationEndPx - animationStartPx, y), height);
17280
+ ctx.strokeStyle = theme.palette.geowebColors.timeSlider.timelineSelectionOutline.rgba;
17281
+ ctx.lineWidth = 3;
17282
+ ctx.rect(animationStartPx, y, Math.max(animationEndPx - animationStartPx, y), height);
17283
+ ctx.fill();
17284
+ ctx.stroke();
17156
17285
  }
17157
17286
 
17158
17287
  function drawDraggableIcons() {
17159
17288
  ctx.save();
17160
17289
  var path = new Path2D(dragHandlePath);
17161
17290
  ctx.translate(animationStartPx, y);
17162
- ctx.fillStyle = theme.palette.geowebColors.timeSlider.timelineSelectionBackground.rgba;
17291
+ ctx.fillStyle = theme.palette.geowebColors.timeSlider.timelineTimeScale.fill;
17163
17292
  ctx.fill(path);
17164
17293
  ctx.restore();
17165
17294
  ctx.save();
17166
17295
  ctx.translate(animationEndPx - 24, y);
17296
+ ctx.fillStyle = theme.palette.geowebColors.timeSlider.timelineTimeScale.fill;
17167
17297
  ctx.fill(path);
17168
17298
  ctx.restore();
17169
17299
  }
@@ -17301,6 +17431,11 @@ var isSelectedTimeIconArea = function isSelectedTimeIconArea(x, selectedTimePx,
17301
17431
  var isRightAnimationIconArea = function isRightAnimationIconArea(x, rightMarkerPx, width) {
17302
17432
  return x >= rightMarkerPx - width && x <= rightMarkerPx;
17303
17433
  };
17434
+ var isInsideAnimationArea = function isInsideAnimationArea(x, leftMarkerPx, rightMarkerPx) {
17435
+ var isInsideOnLeftSide = x >= leftMarkerPx;
17436
+ var isInsideOnRightSide = x <= rightMarkerPx;
17437
+ return isInsideOnLeftSide && isInsideOnRightSide;
17438
+ };
17304
17439
  /**
17305
17440
  * @param x The pin location
17306
17441
  * @param selectedTimePx The selected px
@@ -17315,7 +17450,8 @@ var isLeftAnimationIconArea = function isLeftAnimationIconArea(x, leftMarkerPx,
17315
17450
  var DRAG_AREA_WIDTH = 24;
17316
17451
 
17317
17452
  var TimeSliderLegend = function TimeSliderLegend(_ref) {
17318
- var centerTime = _ref.centerTime,
17453
+ var mapId = _ref.mapId,
17454
+ centerTime = _ref.centerTime,
17319
17455
  secondsPerPx = _ref.secondsPerPx,
17320
17456
  _ref$dataScaleToSecon = _ref.dataScaleToSecondsPerPx,
17321
17457
  dataScaleToSecondsPerPx = _ref$dataScaleToSecon === void 0 ? defaultDataScaleToSecondsPerPx : _ref$dataScaleToSecon,
@@ -17327,10 +17463,11 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
17327
17463
  dataEndTime = _ref.dataEndTime,
17328
17464
  animationStartTime = _ref.animationStartTime,
17329
17465
  animationEndTime = _ref.animationEndTime,
17330
- isTimeSliderHoverOn = _ref.isTimeSliderHoverOn,
17331
17466
  timeStep = _ref.timeStep,
17332
17467
  _ref$mapIsActive = _ref.mapIsActive,
17333
17468
  mapIsActive = _ref$mapIsActive === void 0 ? true : _ref$mapIsActive,
17469
+ unfilteredSelectedTime = _ref.unfilteredSelectedTime,
17470
+ setUnfilteredSelectedTime = _ref.setUnfilteredSelectedTime,
17334
17471
  onSetNewDate = _ref.onSetNewDate,
17335
17472
  onSetCenterTime = _ref.onSetCenterTime,
17336
17473
  onSetAnimationStartTime = _ref.onSetAnimationStartTime,
@@ -17367,26 +17504,45 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
17367
17504
 
17368
17505
  var _React$useState11 = React.useState(false),
17369
17506
  _React$useState12 = _slicedToArray(_React$useState11, 2),
17370
- mouseDownInLegend = _React$useState12[0],
17371
- setMouseDownInLegend = _React$useState12[1];
17507
+ dragTooltipOpen = _React$useState12[0],
17508
+ setDragTooltipOpen = _React$useState12[1];
17372
17509
 
17373
- var _React$useState13 = React.useState(animationStartTime && moment.utc(animationStartTime).unix()),
17510
+ var _React$useState13 = React.useState(false),
17374
17511
  _React$useState14 = _slicedToArray(_React$useState13, 2),
17375
- localAnimationStartTime = _React$useState14[0],
17376
- setLocalAnimationStartTime = _React$useState14[1];
17512
+ mouseDownInLegend = _React$useState14[0],
17513
+ setMouseDownInLegend = _React$useState14[1];
17377
17514
 
17378
- var _React$useState15 = React.useState(animationEndTime && moment.utc(animationEndTime).unix()),
17515
+ var _React$useState15 = React.useState(animationStartTime && moment.utc(animationStartTime).unix()),
17379
17516
  _React$useState16 = _slicedToArray(_React$useState15, 2),
17380
- localAnimationEndTime = _React$useState16[0],
17381
- setLocalAnimationEndTime = _React$useState16[1];
17517
+ localAnimationStartTime = _React$useState16[0],
17518
+ setLocalAnimationStartTime = _React$useState16[1];
17382
17519
 
17383
- var elem = document.querySelector('.timeSliderLegend');
17384
- var pixelsToLeft = elem === null || elem === void 0 ? void 0 : elem.getBoundingClientRect()['left']; // we need to subtract the left padding so event.x start within the canvas.
17385
-
17386
- var _React$useState17 = React.useState('auto'),
17520
+ var _React$useState17 = React.useState(animationEndTime && moment.utc(animationEndTime).unix()),
17387
17521
  _React$useState18 = _slicedToArray(_React$useState17, 2),
17388
- cursorStyle = _React$useState18[0],
17389
- setCursorStyle = _React$useState18[1];
17522
+ localAnimationEndTime = _React$useState18[0],
17523
+ setLocalAnimationEndTime = _React$useState18[1];
17524
+
17525
+ var _React$useState19 = React.useState(moment.utc(0)),
17526
+ _React$useState20 = _slicedToArray(_React$useState19, 2),
17527
+ tooltipTime = _React$useState20[0],
17528
+ setTooltipTime = _React$useState20[1];
17529
+
17530
+ var _React$useState21 = React.useState(false),
17531
+ _React$useState22 = _slicedToArray(_React$useState21, 2),
17532
+ animationAreaDragging = _React$useState22[0],
17533
+ setAnimationAreaDragging = _React$useState22[1];
17534
+
17535
+ var animationDiff = React.useRef();
17536
+ var isClickOrDrag = React.useRef();
17537
+ var pixelsMovedSinceStartDragging = React.useRef(0);
17538
+ var elem = document.querySelector(".timeSliderLegend_".concat(mapId));
17539
+ var pixelsToLeft = elem === null || elem === void 0 ? void 0 : elem.getBoundingClientRect()['left'];
17540
+ var pixelsToTop = elem === null || elem === void 0 ? void 0 : elem.getBoundingClientRect()['top'];
17541
+
17542
+ var _React$useState23 = React.useState('auto'),
17543
+ _React$useState24 = _slicedToArray(_React$useState23, 2),
17544
+ cursorStyle = _React$useState24[0],
17545
+ setCursorStyle = _React$useState24[1];
17390
17546
 
17391
17547
  var curTime = selectedTime !== undefined ? moment.unix(selectedTime).toISOString() : moment.utc().toISOString();
17392
17548
  React.useEffect(function () {
@@ -17416,7 +17572,7 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
17416
17572
  return function () {
17417
17573
  document.removeEventListener('keydown', handleKeyDown);
17418
17574
  };
17419
- }, [timeStep, isTimeSliderHoverOn, currentTime, dataStartTime, dataEndTime, mapIsActive, onSetCenterTime, onSetNewDate, curTime]);
17575
+ }, [curTime, currentTime, dataEndTime, dataStartTime, mapIsActive, onSetCenterTime, onSetNewDate, timeStep]);
17420
17576
  /**
17421
17577
  * remove active drag. can happen outside canvas.
17422
17578
  */
@@ -17429,13 +17585,18 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
17429
17585
  setRightMarkerDragging(false);
17430
17586
  setMouseDownInLegend(false);
17431
17587
  setCenterTimeDragging(false);
17588
+ setDragTooltipOpen(false);
17589
+ setAnimationAreaDragging(false);
17590
+ startDraggingPosition.current = 0;
17591
+ pixelsMovedSinceStartDragging.current = 0;
17592
+ animationDiff.current = undefined;
17432
17593
  };
17433
17594
 
17434
17595
  document.addEventListener('mouseup', handleMouseUp);
17435
17596
  return function () {
17436
17597
  document.removeEventListener('mouseup', handleMouseUp);
17437
17598
  };
17438
- });
17599
+ }, [centerTimeDragging]);
17439
17600
  var onMouseTouchMoveActions = useCallback(function (x) {
17440
17601
  if (!localAnimationStartTime || !localAnimationEndTime) return;
17441
17602
 
@@ -17447,44 +17608,80 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
17447
17608
  rightMarkerPx = _map2[1];
17448
17609
 
17449
17610
  if (leftMarkerDragging) {
17611
+ var mousePosition = leftMarkerPx + x;
17612
+ var rightAnimationPosition = rightMarkerPx - DRAG_AREA_WIDTH * 2; // update tooltip position while dragging
17450
17613
  // Prevent dragging if it would cause markers to cross over, except if the markers
17451
17614
  // are moved away from being crossed over
17452
- if (x >= rightMarkerPx - DRAG_AREA_WIDTH * 2 || x <= 0) return; // change local time bounds according to either dragged marker
17453
17615
 
17454
- var mouseTimeUnix = pixelToTimestamp(x - DRAG_AREA_WIDTH / 2, // lets us drag on the marker
17616
+ if (mousePosition >= rightAnimationPosition || mousePosition <= 0) return; // set animation drag info dialog location
17617
+
17618
+ dragTooltipPosition.current = pixelsToLeft ? mousePosition + pixelsToLeft : mousePosition; // change local time bounds according to either dragged marker
17619
+
17620
+ var mouseTimeUnix = pixelToTimestamp(mousePosition, // lets us drag on the marker
17455
17621
  centerTime, canvasWidth, secondsPerPx);
17456
17622
  setLocalAnimationStartTime(mouseTimeUnix);
17623
+ setTooltipTime(moment.unix(mouseTimeUnix));
17457
17624
  return;
17458
17625
  }
17459
17626
 
17460
17627
  if (rightMarkerDragging) {
17461
- // Similar condition for other marker
17462
- if (x <= leftMarkerPx + DRAG_AREA_WIDTH * 2 || x >= canvasWidth) return; // change local time bounds according to either dragged marker
17628
+ var _mousePosition = rightMarkerPx + x;
17629
+
17630
+ var leftAnimationPosition = leftMarkerPx + DRAG_AREA_WIDTH * 2; // Similar condition for other marker
17631
+
17632
+ if (leftAnimationPosition >= _mousePosition || _mousePosition >= canvasWidth) return; // set animation drag info dialog location
17463
17633
 
17464
- var _mouseTimeUnix = pixelToTimestamp(x + DRAG_AREA_WIDTH / 2, // lets us drag on the marker
17634
+ dragTooltipPosition.current = pixelsToLeft ? _mousePosition + pixelsToLeft : _mousePosition; // change local time bounds according to either dragged marker
17635
+
17636
+ var _mouseTimeUnix = pixelToTimestamp(_mousePosition, // lets us drag on the marker
17465
17637
  centerTime, canvasWidth, secondsPerPx);
17466
17638
 
17467
17639
  setLocalAnimationEndTime(_mouseTimeUnix);
17640
+ setTooltipTime(moment.unix(_mouseTimeUnix));
17641
+ return;
17642
+ }
17643
+
17644
+ if (animationAreaDragging) {
17645
+ if (animationDiff.current === undefined) {
17646
+ var startDraggingPositionTimestamp = pixelToTimestamp(startDraggingPosition.current, centerTime, canvasWidth, secondsPerPx);
17647
+ var diffLeftAnimationToStartDraggingPosition = startDraggingPositionTimestamp - localAnimationStartTime;
17648
+ var diffRightAnimationToStartDraggingPosition = localAnimationEndTime - startDraggingPositionTimestamp;
17649
+ animationDiff.current = {
17650
+ diffStartToRight: diffRightAnimationToStartDraggingPosition,
17651
+ diffStartToLeft: diffLeftAnimationToStartDraggingPosition
17652
+ };
17653
+ return;
17654
+ }
17655
+
17656
+ pixelsMovedSinceStartDragging.current += x;
17657
+ var currentPositionTimestamp = pixelToTimestamp(startDraggingPosition.current + pixelsMovedSinceStartDragging.current, centerTime, canvasWidth, secondsPerPx);
17658
+ var _animationDiff$curren = animationDiff.current,
17659
+ diffStartToRight = _animationDiff$curren.diffStartToRight,
17660
+ diffStartToLeft = _animationDiff$curren.diffStartToLeft;
17661
+ var startTime = currentPositionTimestamp - diffStartToLeft;
17662
+ var endTime = currentPositionTimestamp + diffStartToRight;
17663
+ setLocalAnimationStartTime(startTime);
17664
+ setLocalAnimationEndTime(endTime);
17468
17665
  }
17469
- }, [centerTime, leftMarkerDragging, localAnimationEndTime, localAnimationStartTime, rightMarkerDragging, secondsPerPx, canvasWidth]);
17666
+ }, [localAnimationStartTime, localAnimationEndTime, leftMarkerDragging, rightMarkerDragging, animationAreaDragging, centerTime, canvasWidth, secondsPerPx, pixelsToLeft, animationDiff]);
17470
17667
  var setSelectedTime = useCallback(function (x) {
17471
- setNewRoundedTime(x, centerTime, canvasWidth, secondsPerPx, timeStep, dataStartTime, dataEndTime, onSetNewDate);
17472
- }, [canvasWidth, centerTime, dataEndTime, dataStartTime, onSetNewDate, secondsPerPx, timeStep]);
17668
+ var unfliteredSelectedTimePx = timestampToPixel(unfilteredSelectedTime, centerTime, canvasWidth, secondsPerPx) + x;
17669
+ setUnfilteredSelectedTime(pixelToTimestamp(unfliteredSelectedTimePx, centerTime, canvasWidth, secondsPerPx));
17670
+ setNewRoundedTime(unfliteredSelectedTimePx, centerTime, canvasWidth, secondsPerPx, timeStep, dataStartTime, dataEndTime, onSetNewDate);
17671
+ }, [canvasWidth, centerTime, dataEndTime, dataStartTime, onSetNewDate, secondsPerPx, setUnfilteredSelectedTime, timeStep, unfilteredSelectedTime]);
17473
17672
  React.useEffect(function () {
17474
17673
  var handleMouseMove = function handleMouseMove(event) {
17674
+ if (event.movementX === 0) return;
17675
+
17475
17676
  if (mouseDownInLegend) {
17476
17677
  setCenterTimeDragging(true);
17477
17678
  var dragDistanceTime = event.movementX * secondsPerPx;
17478
17679
  var newCenterTime = centerTime - dragDistanceTime;
17479
17680
  onSetCenterTime && onSetCenterTime(newCenterTime);
17480
- } else {
17481
- if (!pixelsToLeft) return;
17482
-
17483
- if (leftMarkerDragging || rightMarkerDragging) {
17484
- onMouseTouchMoveActions(event.clientX - pixelsToLeft);
17485
- } else if (selectedTimeDragging) {
17486
- setSelectedTime(event.clientX - pixelsToLeft);
17487
- }
17681
+ } else if (leftMarkerDragging || rightMarkerDragging || animationAreaDragging) {
17682
+ onMouseTouchMoveActions(event.movementX);
17683
+ } else if (selectedTimeDragging) {
17684
+ setSelectedTime(event.movementX);
17488
17685
  }
17489
17686
  };
17490
17687
 
@@ -17492,10 +17689,14 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
17492
17689
  return function () {
17493
17690
  document.removeEventListener('mousemove', handleMouseMove);
17494
17691
  };
17495
- }, [centerTime, secondsPerPx, onSetCenterTime, mouseDownInLegend, leftMarkerDragging, rightMarkerDragging, onMouseTouchMoveActions, selectedTimeDragging, setSelectedTime, pixelsToLeft]);
17692
+ }, [animationAreaDragging, centerTime, leftMarkerDragging, mouseDownInLegend, onMouseTouchMoveActions, onSetCenterTime, rightMarkerDragging, secondsPerPx, selectedTimeDragging, setSelectedTime]);
17496
17693
  var theme = useTheme();
17694
+ var startDraggingPosition = React.useRef(0);
17497
17695
 
17498
17696
  var onMouseDown = function onMouseDown(x, y, width) {
17697
+ isClickOrDrag.current = 'click';
17698
+ startDraggingPosition.current = x;
17699
+
17499
17700
  var _map3 = [localAnimationStartTime, localAnimationEndTime, selectedTime].map(function (timestamp) {
17500
17701
  return timestampToPixel(timestamp, centerTime, width, secondsPerPx);
17501
17702
  }),
@@ -17512,16 +17713,27 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
17512
17713
  }
17513
17714
 
17514
17715
  if (animationStartTime && animationEndTime && onSetAnimationStartTime && onSetAnimationEndTime) {
17515
- // start dragging either marker
17716
+ dragTooltipPosition.current = pixelsToLeft ? x + pixelsToLeft : x; // start dragging either marker
17717
+
17516
17718
  if (isLeftAnimationIconArea(x, leftMarkerPx, DRAG_AREA_WIDTH) && !rightMarkerDragging) {
17517
17719
  setCursorStyle('grabbing');
17518
17720
  setLeftMarkerDragging(true);
17721
+ setTooltipTime(moment.utc(animationStartTime));
17722
+ setDragTooltipOpen(true);
17519
17723
  return;
17520
17724
  }
17521
17725
 
17522
17726
  if (isRightAnimationIconArea(x, rightMarkerPx, DRAG_AREA_WIDTH) && !leftMarkerDragging) {
17523
17727
  setCursorStyle('grabbing');
17524
17728
  setRightMarkerDragging(true);
17729
+ setTooltipTime(moment.utc(animationEndTime));
17730
+ setDragTooltipOpen(true);
17731
+ return;
17732
+ }
17733
+
17734
+ if (isInsideAnimationArea(x, leftMarkerPx, rightMarkerPx) && !animationAreaDragging) {
17735
+ setCursorStyle('grabbing');
17736
+ setAnimationAreaDragging(true);
17525
17737
  return;
17526
17738
  }
17527
17739
  } // clicking the timeslider
@@ -17530,18 +17742,36 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
17530
17742
  setMouseDownInLegend(true);
17531
17743
  };
17532
17744
 
17745
+ React.useEffect(function () {
17746
+ var stoppedDragging = !leftMarkerDragging && !rightMarkerDragging && !animationAreaDragging;
17747
+
17748
+ if (stoppedDragging) {
17749
+ if (localAnimationStartTime !== convertStringTimeToUnix(animationStartTime)) {
17750
+ onSetAnimationStartTime(moment.utc(localAnimationStartTime * 1000).format(dateFormat));
17751
+ }
17752
+
17753
+ if (localAnimationEndTime !== convertStringTimeToUnix(animationEndTime)) {
17754
+ onSetAnimationEndTime(moment.utc(localAnimationEndTime * 1000).format(dateFormat));
17755
+ }
17756
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
17757
+
17758
+ }, [leftMarkerDragging, rightMarkerDragging, animationAreaDragging]);
17759
+
17533
17760
  var onMouseUpTouchEnd = function onMouseUpTouchEnd(x) {
17534
- // Dispatch changes when releasing mouse
17535
- if (leftMarkerDragging) {
17536
- onSetAnimationStartTime(moment.utc(localAnimationStartTime * 1000).format(dateFormat));
17537
- } else if (rightMarkerDragging) {
17538
- onSetAnimationEndTime(moment.utc(localAnimationEndTime * 1000).format(dateFormat));
17539
- } else if (!selectedTimeDragging && !centerTimeDragging) {
17540
- setSelectedTime(x);
17761
+ if (isClickOrDrag.current === 'click') {
17762
+ // we need to set the unfiltered time, so the timebox will update accordingly
17763
+ setUnfilteredSelectedTime(pixelToTimestamp(x, centerTime, canvasWidth, secondsPerPx));
17764
+ setNewRoundedTime(x, centerTime, canvasWidth, secondsPerPx, timeStep, dataStartTime, dataEndTime, onSetNewDate);
17541
17765
  }
17766
+
17767
+ isClickOrDrag.current = undefined;
17542
17768
  };
17543
17769
 
17544
17770
  var onMouseMove = function onMouseMove(x, y, event, width) {
17771
+ if (isClickOrDrag.current === 'click') {
17772
+ isClickOrDrag.current = 'drag';
17773
+ }
17774
+
17545
17775
  if (selectedTimeDragging || leftMarkerDragging || rightMarkerDragging) return;
17546
17776
 
17547
17777
  var _map5 = [localAnimationStartTime, localAnimationEndTime, selectedTime].map(function (timestamp) {
@@ -17556,18 +17786,41 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
17556
17786
  var leftAnimationIconArea = isLeftAnimationIconArea(x, leftMarkerPx, DRAG_AREA_WIDTH);
17557
17787
  var rightAnimationIconArea = isRightAnimationIconArea(x, rightMarkerPx, DRAG_AREA_WIDTH);
17558
17788
  var selectedTimeArea = isSelectedTimeIconArea(x, selectedTimePx, DRAG_AREA_WIDTH);
17789
+ var insideAnimationArea = isInsideAnimationArea(x, leftMarkerPx, rightMarkerPx);
17559
17790
  var hoveringLegendHandles = leftAnimationIconArea || rightAnimationIconArea || selectedTimeArea || mouseDownInLegend;
17560
17791
 
17561
17792
  if (hoveringLegendHandles) {
17562
17793
  setCursorStyle('ew-resize');
17794
+ } else if (insideAnimationArea && !animationAreaDragging) {
17795
+ setCursorStyle('grab');
17796
+ } else if (insideAnimationArea && animationAreaDragging) {
17797
+ setCursorStyle('grabbing');
17563
17798
  } else {
17564
17799
  setCursorStyle('auto');
17565
17800
  }
17566
17801
  };
17567
17802
 
17568
- return /*#__PURE__*/React.createElement(Box, {
17803
+ var dragTooltipPosition = React.useRef();
17804
+ var popperRef = React.useRef(null);
17805
+
17806
+ var setTooltipPosition = function setTooltipPosition() {
17807
+ var tooltipX = dragTooltipPosition.current;
17808
+ var tooltipY = pixelsToTop && pixelsToTop - TIME_SLIDER_LEGEND_HEIGHT * 2.5;
17809
+ return new DOMRect(tooltipX, tooltipY, 0, 0);
17810
+ };
17811
+
17812
+ return /*#__PURE__*/React.createElement(CustomTooltip, {
17813
+ title: tooltipTime.format('HH:mm'),
17814
+ open: dragTooltipOpen,
17815
+ PopperProps: {
17816
+ popperRef: popperRef,
17817
+ anchorEl: {
17818
+ getBoundingClientRect: setTooltipPosition
17819
+ }
17820
+ }
17821
+ }, /*#__PURE__*/React.createElement(Box, {
17569
17822
  "data-testid": "timeSliderLegend",
17570
- className: "timeSliderLegend",
17823
+ className: "timeSliderLegend_".concat(mapId),
17571
17824
  sx: {
17572
17825
  height: "".concat(TIME_SLIDER_LEGEND_HEIGHT, "px"),
17573
17826
  borderRadius: '4.5px',
@@ -17589,9 +17842,13 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
17589
17842
  setCanvasWidth(width);
17590
17843
  drawTimeSliderLegend(ctx, theme, width, height, centerTime, secondsPerPx, dataScaleToSecondsPerPx, selectedTime, scale, currentTime, localAnimationStartTime, localAnimationEndTime, dataStartTime, dataEndTime);
17591
17844
  }
17592
- }));
17845
+ })));
17593
17846
  };
17594
17847
 
17848
+ function convertStringTimeToUnix(time) {
17849
+ return time ? moment.utc(time).unix() : undefined;
17850
+ }
17851
+
17595
17852
  var TIME_SLIDER_LEGEND_HEIGHT = 24;
17596
17853
 
17597
17854
  /* *
@@ -17643,7 +17900,7 @@ var HideSliderButton = function HideSliderButton(_ref) {
17643
17900
  * */
17644
17901
  var onMouseMove = function onMouseMove(x, width, selectedTime, centerTime, secondsPerPx, mouseDownInTimeBox, isTimeBoxArea, setCursorStyle) {
17645
17902
  if (!selectedTime || mouseDownInTimeBox) return;
17646
- var selectedTimePx = timestampToPixel(selectedTime.unix(), centerTime, width, secondsPerPx);
17903
+ var selectedTimePx = timestampToPixel(selectedTime, centerTime, width, secondsPerPx);
17647
17904
 
17648
17905
  if (isTimeBoxArea(x, selectedTimePx)) {
17649
17906
  setCursorStyle('grab');
@@ -17653,7 +17910,7 @@ var onMouseMove = function onMouseMove(x, width, selectedTime, centerTime, secon
17653
17910
  };
17654
17911
  var onMouseDown = function onMouseDown(x, width, selectedTime, centerTime, secondsPerPx, isTimeBoxArea, setCursorStyle, setMouseDownInTimeBox) {
17655
17912
  if (!selectedTime) return;
17656
- var selectedTimePx = timestampToPixel(selectedTime.unix(), centerTime, width, secondsPerPx);
17913
+ var selectedTimePx = timestampToPixel(selectedTime, centerTime, width, secondsPerPx);
17657
17914
 
17658
17915
  if (isTimeBoxArea(x, selectedTimePx)) {
17659
17916
  setCursorStyle('grabbing');
@@ -17735,7 +17992,9 @@ var TimeSliderCurrentTimeBox = function TimeSliderCurrentTimeBox(_ref) {
17735
17992
  timeStep = _ref.timeStep,
17736
17993
  dataStartTime = _ref.dataStartTime,
17737
17994
  dataEndTime = _ref.dataEndTime,
17738
- onSetNewDate = _ref.onSetNewDate;
17995
+ unfilteredSelectedTime = _ref.unfilteredSelectedTime,
17996
+ onSetNewDate = _ref.onSetNewDate,
17997
+ setUnfilteredSelectedTime = _ref.setUnfilteredSelectedTime;
17739
17998
  var TIME_BOX_WIDTH = 140;
17740
17999
  var theme = useTheme();
17741
18000
 
@@ -17780,11 +18039,9 @@ var TimeSliderCurrentTimeBox = function TimeSliderCurrentTimeBox(_ref) {
17780
18039
  React__default.useEffect(function () {
17781
18040
  var handleMouseMove = function handleMouseMove(event) {
17782
18041
  if (mouseDownInTimeBox) {
17783
- var elem = document.querySelector('.timeSliderTimeBox');
17784
- var rect = elem === null || elem === void 0 ? void 0 : elem.getBoundingClientRect(); // we need to subtract the left padding so event.x start within the canvas.
17785
-
17786
- if (!rect) return;
17787
- setNewRoundedTime(event.clientX - rect['left'], centerTime, canvasWidth, secondsPerPx, timeStep, dataStartTime, dataEndTime, onSetNewDate);
18042
+ var localSelectedTimePx = timestampToPixel(unfilteredSelectedTime, centerTime, canvasWidth, secondsPerPx) + event.movementX;
18043
+ setUnfilteredSelectedTime(pixelToTimestamp(localSelectedTimePx, centerTime, canvasWidth, secondsPerPx));
18044
+ setNewRoundedTime(localSelectedTimePx, centerTime, canvasWidth, secondsPerPx, timeStep, dataStartTime, dataEndTime, onSetNewDate);
17788
18045
  }
17789
18046
  };
17790
18047
 
@@ -17792,7 +18049,7 @@ var TimeSliderCurrentTimeBox = function TimeSliderCurrentTimeBox(_ref) {
17792
18049
  return function () {
17793
18050
  document.removeEventListener('mousemove', handleMouseMove);
17794
18051
  };
17795
- });
18052
+ }, [canvasWidth, centerTime, dataEndTime, dataStartTime, mouseDownInTimeBox, onSetNewDate, secondsPerPx, setUnfilteredSelectedTime, timeStep, unfilteredSelectedTime]);
17796
18053
  return /*#__PURE__*/React__default.createElement(Box$2, {
17797
18054
  "data-testid": "timeSliderTimeBox",
17798
18055
  className: "timeSliderTimeBox",
@@ -17813,32 +18070,18 @@ var TimeSliderCurrentTimeBox = function TimeSliderCurrentTimeBox(_ref) {
17813
18070
  onMouseDown(x, width, selectedTime, centerTime, secondsPerPx, isTimeBoxArea, setCursorStyle, setMouseDownInTimeBox);
17814
18071
  },
17815
18072
  onMouseUp: function onMouseUp(x) {
17816
- setNewRoundedTime(x, centerTime, canvasWidth, secondsPerPx, timeStep, dataStartTime, dataEndTime, onSetNewDate);
18073
+ if (mouseDownInTimeBox) {
18074
+ setUnfilteredSelectedTime(pixelToTimestamp(x, centerTime, canvasWidth, secondsPerPx));
18075
+ setNewRoundedTime(x, centerTime, canvasWidth, secondsPerPx, timeStep, dataStartTime, dataEndTime, onSetNewDate);
18076
+ }
17817
18077
  },
17818
18078
  onRenderCanvas: function onRenderCanvas(ctx, width, height) {
17819
18079
  setCanvasWidth(width);
17820
- renderTimeSliderCurrentTimeBox(ctx, theme, width, height, centerTime, selectedTime.unix(), secondsPerPx, scale);
18080
+ renderTimeSliderCurrentTimeBox(ctx, theme, width, height, centerTime, selectedTime, secondsPerPx, scale);
17821
18081
  }
17822
18082
  }));
17823
18083
  };
17824
18084
 
17825
- /* *
17826
- * Licensed under the Apache License, Version 2.0 (the "License");
17827
- * you may not use this file except in compliance with the License.
17828
- * You may obtain a copy of the License at
17829
- *
17830
- * http://www.apache.org/licenses/LICENSE-2.0
17831
- *
17832
- * Unless required by applicable law or agreed to in writing, software
17833
- * distributed under the License is distributed on an "AS IS" BASIS,
17834
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17835
- * See the License for the specific language governing permissions and
17836
- * limitations under the License.
17837
- *
17838
- * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
17839
- * Copyright 2022 - Finnish Meteorological Institute (FMI)
17840
- * */
17841
-
17842
18085
  var useTimeSliderKeyBoardControl = function useTimeSliderKeyBoardControl(mapIsActive, isVisible, onToggleTimeSlider) {
17843
18086
  React.useEffect(function () {
17844
18087
  var handleKeyDown = function handleKeyDown(event) {
@@ -17859,12 +18102,13 @@ var useTimeSliderKeyBoardControl = function useTimeSliderKeyBoardControl(mapIsAc
17859
18102
  var defaultProps = {
17860
18103
  centerTime: moment.utc().startOf('day').hours(12).unix(),
17861
18104
  secondsPerPx: 5,
17862
- selectedTime: moment.utc().startOf('day').hours(12),
18105
+ selectedTime: moment.utc().startOf('day').hours(12).unix(),
17863
18106
  dataScaleToSecondsPerPx: defaultDataScaleToSecondsPerPx
17864
18107
  };
17865
18108
 
17866
18109
  var TimeSlider = function TimeSlider(_ref) {
17867
- var buttons = _ref.buttons,
18110
+ var mapId = _ref.mapId,
18111
+ buttons = _ref.buttons,
17868
18112
  timeBox = _ref.timeBox,
17869
18113
  legend = _ref.legend,
17870
18114
  _ref$mapIsActive = _ref.mapIsActive,
@@ -17874,6 +18118,12 @@ var TimeSlider = function TimeSlider(_ref) {
17874
18118
  _ref$onToggleTimeSlid = _ref.onToggleTimeSlider,
17875
18119
  onToggleTimeSlider = _ref$onToggleTimeSlid === void 0 ? function () {} : _ref$onToggleTimeSlid;
17876
18120
  useTimeSliderKeyBoardControl(mapIsActive, isVisible, onToggleTimeSlider);
18121
+
18122
+ var _React$useState = React.useState(defaultProps.selectedTime),
18123
+ _React$useState2 = _slicedToArray(_React$useState, 2),
18124
+ unfilteredSelectedTime = _React$useState2[0],
18125
+ setUnfilteredSelectedTime = _React$useState2[1];
18126
+
17877
18127
  var visibilityState = isVisible ? 'visible' : 'hidden';
17878
18128
  return isVisible ? /*#__PURE__*/React.createElement(Grid, {
17879
18129
  style: {
@@ -17898,7 +18148,8 @@ var TimeSlider = function TimeSlider(_ref) {
17898
18148
  zIndex: 99
17899
18149
  }
17900
18150
  }, timeBox || /*#__PURE__*/React.createElement(TimeSliderCurrentTimeBox, Object.assign({}, defaultProps, {
17901
- selectedTime: defaultProps.selectedTime
18151
+ unfilteredSelectedTime: unfilteredSelectedTime,
18152
+ setUnfilteredSelectedTime: setUnfilteredSelectedTime
17902
18153
  }))), /*#__PURE__*/React.createElement(Grid, {
17903
18154
  item: true
17904
18155
  }), /*#__PURE__*/React.createElement(Grid, {
@@ -17906,8 +18157,10 @@ var TimeSlider = function TimeSlider(_ref) {
17906
18157
  }, buttons || /*#__PURE__*/React.createElement(TimeSliderButtons, null)), /*#__PURE__*/React.createElement(Grid, {
17907
18158
  item: true
17908
18159
  }, legend || /*#__PURE__*/React.createElement(TimeSliderLegend, Object.assign({}, defaultProps, {
17909
- selectedTime: defaultProps.selectedTime.unix(),
17910
- mapIsActive: mapIsActive
18160
+ mapId: mapId,
18161
+ mapIsActive: mapIsActive,
18162
+ unfilteredSelectedTime: unfilteredSelectedTime,
18163
+ setUnfilteredSelectedTime: setUnfilteredSelectedTime
17911
18164
  })), ' '), /*#__PURE__*/React.createElement(Grid, {
17912
18165
  item: true,
17913
18166
  sx: {
@@ -18041,12 +18294,6 @@ var TimeStepButtonComponent = function TimeStepButtonComponent(_ref) {
18041
18294
  var isTimestepAuto$1 = useSelector(function (store) {
18042
18295
  return isTimestepAuto(store, mapId);
18043
18296
  });
18044
- var activeLayerId = useSelector(function (store) {
18045
- return getActiveLayerId(store, mapId);
18046
- });
18047
- var activeLayerTimeDimension = useSelector(function (store) {
18048
- return getLayerTimeDimension(store, activeLayerId);
18049
- });
18050
18297
  var onToggleTimestepAuto = React.useCallback(function () {
18051
18298
  dispatch(mapActions$1.toggleTimestepAuto({
18052
18299
  mapId: mapId,
@@ -18066,9 +18313,7 @@ var TimeStepButtonComponent = function TimeStepButtonComponent(_ref) {
18066
18313
  timeStep: timeStep,
18067
18314
  onChangeTimeStep: onSetTimeStep,
18068
18315
  disabled: isAnimating$1,
18069
- isTimestepAuto: isTimestepAuto$1,
18070
- onToggleTimestepAuto: onToggleTimestepAuto,
18071
- timeDimension: activeLayerTimeDimension
18316
+ onToggleTimestepAuto: onToggleTimestepAuto
18072
18317
  });
18073
18318
  };
18074
18319
 
@@ -18188,6 +18433,57 @@ var NowButtonConnect = function NowButtonConnect(_ref) {
18188
18433
  });
18189
18434
  };
18190
18435
 
18436
+ /* *
18437
+ * Licensed under the Apache License, Version 2.0 (the "License");
18438
+ * you may not use this file except in compliance with the License.
18439
+ * You may obtain a copy of the License at
18440
+ *
18441
+ * http://www.apache.org/licenses/LICENSE-2.0
18442
+ *
18443
+ * Unless required by applicable law or agreed to in writing, software
18444
+ * distributed under the License is distributed on an "AS IS" BASIS,
18445
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18446
+ * See the License for the specific language governing permissions and
18447
+ * limitations under the License.
18448
+ *
18449
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
18450
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
18451
+ * */
18452
+
18453
+ var AnimationLengthButtonConnect = function AnimationLengthButtonConnect(_ref) {
18454
+ var mapId = _ref.mapId;
18455
+ var dispatch = useDispatch();
18456
+ var isAnimating$1 = useSelector(function (store) {
18457
+ return isAnimating(store, mapId);
18458
+ });
18459
+ var animationStartTime = useSelector(function (store) {
18460
+ return getAnimationStartTime(store, mapId);
18461
+ });
18462
+ var animationEndTime = useSelector(function (store) {
18463
+ return getAnimationEndTime(store, mapId);
18464
+ });
18465
+ var currentDiffInMinutes = moment(animationEndTime).diff(moment(animationStartTime), 'minutes');
18466
+ var currentLength = Object.values(AnimationLength).map(function (val) {
18467
+ return Number(val);
18468
+ }).find(function (val) {
18469
+ return val >= currentDiffInMinutes;
18470
+ });
18471
+
18472
+ var handlechangeAnimationLength = function handlechangeAnimationLength(length) {
18473
+ var animationEndTime = moment(animationStartTime).add(length, 'minutes').toISOString();
18474
+ dispatch(mapActions$1.setAnimationEndTime({
18475
+ mapId: mapId,
18476
+ animationEndTime: animationEndTime
18477
+ }));
18478
+ };
18479
+
18480
+ return /*#__PURE__*/React.createElement(AnimationLengthButton, {
18481
+ disabled: isAnimating$1,
18482
+ animationLength: currentLength || Number(AnimationLength.Hours24),
18483
+ onChangeAnimationLength: handlechangeAnimationLength
18484
+ });
18485
+ };
18486
+
18191
18487
  /* *
18192
18488
  * Licensed under the Apache License, Version 2.0 (the "License");
18193
18489
  * you may not use this file except in compliance with the License.
@@ -18216,11 +18512,35 @@ var NowButtonConnect = function NowButtonConnect(_ref) {
18216
18512
  var OptionsMenuButtonConnect = function OptionsMenuButtonConnect(_ref) {
18217
18513
  var sourceId = _ref.sourceId,
18218
18514
  mapId = _ref.mapId;
18515
+ var dispatch = useDispatch();
18516
+ var isTimestepAuto$1 = useSelector(function (store) {
18517
+ return isTimestepAuto(store, mapId);
18518
+ });
18519
+ var timeStep = useSelector(function (store) {
18520
+ return getMapTimeStep(store, mapId);
18521
+ });
18522
+ var activeLayerId = useSelector(function (store) {
18523
+ return getActiveLayerId(store, mapId);
18524
+ });
18525
+ var activeLayerTimeDimension = useSelector(function (store) {
18526
+ return getLayerTimeDimension(store, activeLayerId);
18527
+ });
18528
+ var onSetTimeStep = React.useCallback(function (timeStep, origin) {
18529
+ dispatch(mapActions$1.setTimeStep(Object.assign({
18530
+ mapId: mapId,
18531
+ timeStep: timeStep
18532
+ }, origin && {
18533
+ origin: origin
18534
+ })));
18535
+ }, [dispatch, mapId]);
18219
18536
  return /*#__PURE__*/React.createElement(OptionsMenuButton, {
18220
18537
  nowBtn: /*#__PURE__*/React.createElement(NowButtonConnect, {
18221
18538
  mapId: mapId,
18222
18539
  sourceId: sourceId
18223
18540
  }),
18541
+ animationLengthBtn: /*#__PURE__*/React.createElement(AnimationLengthButtonConnect, {
18542
+ mapId: mapId
18543
+ }),
18224
18544
  autoUpdateBtn: /*#__PURE__*/React.createElement(AutoUpdateButtonConnect, {
18225
18545
  mapId: mapId
18226
18546
  }),
@@ -18232,7 +18552,11 @@ var OptionsMenuButtonConnect = function OptionsMenuButtonConnect(_ref) {
18232
18552
  }),
18233
18553
  timeScaleBtn: /*#__PURE__*/React.createElement(TimeScaleButtonConnect, {
18234
18554
  mapId: mapId
18235
- })
18555
+ }),
18556
+ timeStep: timeStep,
18557
+ isTimestepAuto: isTimestepAuto$1,
18558
+ onChangeTimeStep: onSetTimeStep,
18559
+ timeDimension: activeLayerTimeDimension
18236
18560
  });
18237
18561
  };
18238
18562
 
@@ -18354,9 +18678,11 @@ var connectRedux$2 = connect(function (store, props) {
18354
18678
  timeValue: getTime(getSynchronizationGroupStore(store), props.sourceId),
18355
18679
  animationStartTime: getAnimationStartTime(store, props.mapId),
18356
18680
  animationEndTime: getAnimationEndTime(store, props.mapId),
18357
- activeWindowId: getActiveWindowId(store)
18681
+ activeWindowId: getActiveWindowId(store),
18682
+ unfilteredSelectedTime: getTimeSliderUnfilteredSelectedTime(store, props.mapId)
18358
18683
  };
18359
18684
  }, {
18685
+ setTimeSliderUnfilteredSelectedTime: mapActions$1.setTimeSliderUnfilteredSelectedTime,
18360
18686
  stopMapAnimation: mapActions$1.mapStopAnimation,
18361
18687
  setTime: genericActions.setTime,
18362
18688
  mapSetTimeSliderCenterTime: mapActions$1.setTimeSliderCenterTime,
@@ -18385,7 +18711,9 @@ var TimeSliderLegendConnect = function TimeSliderLegendConnect(_ref) {
18385
18711
  mapSetTimeSliderCenterTime = _ref.mapSetTimeSliderCenterTime,
18386
18712
  mapSetTimeSliderSecondsPerPx = _ref.mapSetTimeSliderSecondsPerPx,
18387
18713
  setAnimationStartTime = _ref.setAnimationStartTime,
18388
- setAnimationEndTime = _ref.setAnimationEndTime;
18714
+ setAnimationEndTime = _ref.setAnimationEndTime,
18715
+ unfilteredSelectedTime = _ref.unfilteredSelectedTime,
18716
+ setTimeSliderUnfilteredSelectedTime = _ref.setTimeSliderUnfilteredSelectedTime;
18389
18717
 
18390
18718
  var _getTimeBounds = getTimeBounds(dimensions),
18391
18719
  selectedTime = _getTimeBounds.selectedTime;
@@ -18399,6 +18727,7 @@ var TimeSliderLegendConnect = function TimeSliderLegendConnect(_ref) {
18399
18727
 
18400
18728
  var mapIsActive = mapId === activeWindowId;
18401
18729
  return /*#__PURE__*/React.createElement(TimeSliderLegend, {
18730
+ mapId: mapId,
18402
18731
  centerTime: centerTime,
18403
18732
  secondsPerPx: secondsPerPx,
18404
18733
  dataScaleToSecondsPerPx: dataScaleToSecondsPerPx,
@@ -18412,6 +18741,13 @@ var TimeSliderLegendConnect = function TimeSliderLegendConnect(_ref) {
18412
18741
  animationEndTime: animationEndTime,
18413
18742
  timeStep: timeStep,
18414
18743
  mapIsActive: mapIsActive,
18744
+ unfilteredSelectedTime: unfilteredSelectedTime || selectedTime,
18745
+ setUnfilteredSelectedTime: function setUnfilteredSelectedTime(timeSliderUnfilteredSelectedTime) {
18746
+ if (setTimeSliderUnfilteredSelectedTime) setTimeSliderUnfilteredSelectedTime({
18747
+ timeSliderUnfilteredSelectedTime: timeSliderUnfilteredSelectedTime,
18748
+ mapId: mapId
18749
+ });
18750
+ },
18415
18751
  onSetNewDate: function onSetNewDate(newDate) {
18416
18752
  if (isAnimating) {
18417
18753
  stopMapAnimation({
@@ -18475,9 +18811,11 @@ var connectRedux$1 = connect(function (store, props) {
18475
18811
  secondsPerPx: getMapTimeSliderSecondsPerPx(store, props.mapId),
18476
18812
  scale: getMapTimeSliderScale(store, props.mapId),
18477
18813
  timeStep: getMapTimeStep(store, props.mapId),
18478
- isAnimating: isAnimating(store, props.mapId)
18814
+ isAnimating: isAnimating(store, props.mapId),
18815
+ unfilteredSelectedTime: getTimeSliderUnfilteredSelectedTime(store, props.mapId)
18479
18816
  };
18480
18817
  }, {
18818
+ setTimeSliderUnfilteredSelectedTime: mapActions$1.setTimeSliderUnfilteredSelectedTime,
18481
18819
  stopMapAnimation: mapActions$1.mapStopAnimation,
18482
18820
  setTime: genericActions.setTime
18483
18821
  });
@@ -18493,10 +18831,12 @@ var TimeSliderCurrentTimeBoxConnectComponent = function TimeSliderCurrentTimeBox
18493
18831
  timeStep = _ref.timeStep,
18494
18832
  isAnimating = _ref.isAnimating,
18495
18833
  stopMapAnimation = _ref.stopMapAnimation,
18834
+ unfilteredSelectedTime = _ref.unfilteredSelectedTime,
18835
+ setTimeSliderUnfilteredSelectedTime = _ref.setTimeSliderUnfilteredSelectedTime,
18496
18836
  setTime = _ref.setTime;
18497
18837
 
18498
- var _getMomentTimeBounds = getMomentTimeBounds(dimensions),
18499
- selectedTime = _getMomentTimeBounds.selectedTime;
18838
+ var _getTimeBounds = getTimeBounds(dimensions),
18839
+ selectedTime = _getTimeBounds.selectedTime;
18500
18840
 
18501
18841
  var _getDataLimitsFromLay = getDataLimitsFromLayers(layers),
18502
18842
  _getDataLimitsFromLay2 = _slicedToArray(_getDataLimitsFromLay, 2),
@@ -18511,6 +18851,13 @@ var TimeSliderCurrentTimeBoxConnectComponent = function TimeSliderCurrentTimeBox
18511
18851
  dataStartTime: dataStartTime,
18512
18852
  dataEndTime: dataEndTime,
18513
18853
  timeStep: timeStep,
18854
+ unfilteredSelectedTime: unfilteredSelectedTime || selectedTime,
18855
+ setUnfilteredSelectedTime: function setUnfilteredSelectedTime(timeSliderUnfilteredSelectedTime) {
18856
+ if (setTimeSliderUnfilteredSelectedTime) setTimeSliderUnfilteredSelectedTime({
18857
+ timeSliderUnfilteredSelectedTime: timeSliderUnfilteredSelectedTime,
18858
+ mapId: mapId
18859
+ });
18860
+ },
18514
18861
  onSetNewDate: function onSetNewDate(newDate) {
18515
18862
  if (isAnimating) {
18516
18863
  stopMapAnimation({
@@ -18595,6 +18942,7 @@ var ConnectedTimeSlider = function ConnectedTimeSlider(_ref) {
18595
18942
  };
18596
18943
 
18597
18944
  return /*#__PURE__*/React.createElement(TimeSlider, {
18945
+ mapId: mapId,
18598
18946
  buttons: /*#__PURE__*/React.createElement(TimeSliderButtonsConnect, {
18599
18947
  mapId: mapId,
18600
18948
  sourceId: sourceId
@@ -22749,12 +23097,11 @@ var useKeyboardZoomAndPan = function useKeyboardZoomAndPan(mapIsActive, mapId) {
22749
23097
  var handleKeyPress = function handleKeyPress(event) {
22750
23098
  var target = event.target;
22751
23099
  var map = getWMJSMapById(mapId);
23100
+ var key = event.key,
23101
+ type = event.type;
23102
+ keysPressedDown[key] = type === 'keydown';
22752
23103
 
22753
23104
  if (map && target.tagName !== 'INPUT' && mapIsActive) {
22754
- var key = event.key,
22755
- type = event.type;
22756
- keysPressedDown[key] = type === 'keydown';
22757
-
22758
23105
  if (keysPressedDown['+']) {
22759
23106
  map.zoomIn(1);
22760
23107
  } else if (keysPressedDown['-']) {
@@ -23131,6 +23478,9 @@ var OptionsMenuConnect = function OptionsMenuConnect(_ref) {
23131
23478
  mapId: mapId,
23132
23479
  sourceId: sourceId
23133
23480
  }),
23481
+ animationLengthBtn: /*#__PURE__*/React__default.createElement(AnimationLengthButtonConnect, {
23482
+ mapId: mapId
23483
+ }),
23134
23484
  autoUpdateBtn: /*#__PURE__*/React__default.createElement(AutoUpdateButtonConnect, {
23135
23485
  mapId: mapId
23136
23486
  }),
@@ -24735,21 +25085,29 @@ var CoreThemeStoreProvider = function CoreThemeStoreProvider(_ref3) {
24735
25085
  * */
24736
25086
  var MapWarningProperties = function MapWarningProperties(_ref) {
24737
25087
  var selectedFeatureProperties = _ref.selectedFeatureProperties,
24738
- languageIndex = _ref.languageIndex;
25088
+ languageIndex = _ref.languageIndex,
25089
+ parentSize = _ref.parentSize;
24739
25090
  var language = languageIndex || 0;
25091
+ var newWidth = parentSize ? parentSize - 100 : 350;
24740
25092
  return /*#__PURE__*/React__default.createElement("div", {
25093
+ style: {
25094
+ position: 'fixed',
25095
+ width: "".concat(newWidth, "px"),
25096
+ height: '1px',
25097
+ display: 'flex',
25098
+ justifyContent: 'center',
25099
+ left: '50px'
25100
+ }
25101
+ }, /*#__PURE__*/React__default.createElement("div", {
24741
25102
  "data-testid": "map-warning-properties",
24742
25103
  style: {
24743
- width: '100%',
24744
- height: '15%',
24745
- marginTop: '30px',
24746
- marginLeft: '100px',
24747
- position: 'relative',
24748
- zIndex: 10000,
24749
- backgroundColor: '#CCCCCCC0',
25104
+ marginTop: '50px',
25105
+ width: '350px',
25106
+ height: '190px',
24750
25107
  padding: '0px 20px 20px',
24751
25108
  overflow: 'auto',
24752
- fontSize: '11px'
25109
+ fontSize: '11px',
25110
+ backgroundColor: '#CCCCCCC0'
24753
25111
  }
24754
25112
  }, /*#__PURE__*/React__default.createElement("h1", {
24755
25113
  "data-testid": "map-warning-properties-title"
@@ -24763,7 +25121,7 @@ var MapWarningProperties = function MapWarningProperties(_ref) {
24763
25121
  "data-testid": "map-warning-properties-row"
24764
25122
  }, "Sender: ", selectedFeatureProperties.languages[language].senderName), selectedFeatureProperties.identifier && /*#__PURE__*/React__default.createElement("pre", {
24765
25123
  "data-testid": "map-warning-properties-row"
24766
- }, "Identifier: ", selectedFeatureProperties.identifier));
25124
+ }, "Identifier: ", selectedFeatureProperties.identifier)));
24767
25125
  };
24768
25126
 
24769
25127
  /* *