@opengeoweb/core 12.12.0 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -9,7 +9,7 @@ This library was generated with [Nx](https://nx.dev).
9
9
  ## Installation
10
10
 
11
11
  ```
12
- npm install @opengeoweb/core @opengeoweb/store @opengeoweb/timeslider
12
+ npm install @opengeoweb/core @opengeoweb/store @opengeoweb/time-slider
13
13
  ```
14
14
 
15
15
  ## Use
@@ -25,7 +25,7 @@ import {
25
25
  CoreThemeStoreProvider,
26
26
  } from '@opengeoweb/core';
27
27
  import { storeMiddlewares, storeReducerMap } from '@opengeoweb/store';
28
- import { TimeSliderConnect } from '@opengeoweb/timeslider';
28
+ import { TimeSliderConnect } from '@opengeoweb/time-slider';
29
29
  import { configureStore } from '@reduxjs/toolkit';
30
30
 
31
31
  const store = configureStore({
package/index.esm.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default, { useState, useCallback, useEffect, useContext, useMemo } from 'react';
4
- import { Grid, Box, MenuItem, Typography, useTheme, Popper, Fade, Tooltip, styled, LinearProgress, FormControl, InputLabel, Paper, List, ListItemButton, ListItemText, CircularProgress, ListSubheader, DialogContentText, TextField, InputAdornment, Button, Autocomplete, ListItemIcon, Checkbox, Switch, Select } from '@mui/material';
4
+ import { Grid, Box, MenuItem, Typography, useTheme, Popper, Fade, Tooltip, styled, Checkbox, LinearProgress, FormControl, InputLabel, Paper, List, ListItemButton, ListItemText, CircularProgress, ListSubheader, DialogContentText, TextField, InputAdornment, Button, Autocomplete, ListItemIcon, Switch, Select } from '@mui/material';
5
5
  import { safelyInitI18nForTestsAndStories, sharedTranslations, SHARED_NAMESPACE, CustomIconButton, CustomTooltip, TooltipSelect, AlertIcon, useScrollingInIsolation, sliderHeaderStyle, CustomSlider, ToggleMenu, tooltipContainerStyles, renderCounter, AlertBanner, CustomAccordion, CustomDialog, PROJECTION, calculateStartSize, useWheelStopPropagation, ToolContainerDraggable, dateUtils, useDebounce, sessionStorageProvider, usePrevious, ErrorBoundary } from '@opengeoweb/shared';
6
6
  import { CollapseSmall, CollapseMedium, CollapseLarge, CollapseWindow, ExpandWindow, LayersAdd, CloudLoading, ColumnCollapsed, ColumnCollapse, Copy, None, FastForward, AutoUpdateActive, Both, Delete, Visibility, VisibilityOff, DragHandle as DragHandle$1, Cached, Add, MapAdd, WorldMapProjection, Overlayers, Layers, ExitDomain, Info, Search, Exclamation, MyLocation, Close, ThemeWrapper, lightTheme, FlagBritain, FlagNetherlands, FlagFinland, FlagNorway } from '@opengeoweb/theme';
7
7
  import i18n from 'i18next';
8
8
  import { useTranslation, I18nextProvider } from 'react-i18next';
9
- import { TIMESLIDER_NAMESPACE, timesliderTranslations, defaultTimeSpan, SpeedButton, TimeStepButton, AnimationLengthButton, AnimationLength, TimeSpanButton, secondsPerPxFromCanvasWidth, getNewCenterOfFixedPointZoom, OptionsMenuButton, PlayButton, defaultTimeStep, BackwardForwardStepButton, AutoUpdateButton, NowButton, handleSetNowEvent, TimeSliderButtons, TimeSliderCurrentTimeBox, TimeSliderLegend, onsetNewDateDebounced, defaultSecondsPerPx, moveSelectedTimePx, TimeSlider, getFilteredTime, ControlButtons, OptionsMenu, TimeSliderClock } from '@opengeoweb/timeslider';
10
- import { webmapReactTranslations, WEBMAP_REACT_NAMESPACE, webmapTranslations, WEBMAP_NAMESPACE, LayerInfoButton, LayerInfoDialog, MapControlButton, MapDimensionSelect, dimensionConfig, DimensionSelectDialog, DimensionSelectButton, LegendDialog, LegendButton, MapContext, emptyGeoJSON, MapFeatureClass, setMapCenter, OpenLayersFeatureLayer, OpenLayersMapDraw, getIsInsideAcceptanceTime, OpenLayersLayer, useSetIntervalWhenVisible, openLayersGetMapImageStore, TimeContext, OpenLayersMapView, WMSLayer, genericOpenLayersFeatureStyle, OpenLayersGetFeatureInfo, MapControls, OpenLayersZoomControl, getLayerUpdateInfo, publicLayers } from '@opengeoweb/webmap-react';
9
+ import { TIME_SLIDER_NAMESPACE, timesliderTranslations, defaultTimeSpan, SpeedButton, TimeStepButton, AnimationLengthButton, AnimationLength, TimeSpanButton, secondsPerPxFromCanvasWidth, getNewCenterOfFixedPointZoom, OptionsMenuButton, PlayButton, defaultTimeStep, BackwardForwardStepButton, AutoUpdateButton, NowButton, handleSetNowEvent, TimeSliderButtons, TimeSliderCurrentTimeBox, TimeSliderLegend, onsetNewDateDebounced, defaultSecondsPerPx, moveSelectedTimePx, TimeSlider, getFilteredTime, ControlButtons, OptionsMenu, TimeSliderClock } from '@opengeoweb/time-slider';
10
+ import { webmapReactTranslations, WEBMAP_REACT_NAMESPACE, webmapTranslations, WEBMAP_NAMESPACE, LayerInfoButton, LayerInfoDialog, MapControlButton, MapDimensionSelect, dimensionConfig, DimensionSelectDialog, DimensionSelectButton, LegendDialog, LegendButton, MapContext, emptyGeoJSON, MapFeatureClass, setMapCenter, OpenLayersFeatureLayer, OpenLayersMapDraw, makeTimeList, getIsInsideAcceptanceTime, OpenLayersLayer, useSetIntervalWhenVisible, openLayersGetMapImageStore, TimeContext, OpenLayersMapView, WMSLayer, genericOpenLayersFeatureStyle, OpenLayersGetFeatureInfo, MapControls, OpenLayersZoomControl, getLayerUpdateInfo, publicLayers } from '@opengeoweb/webmap-react';
11
11
  import { useDispatch, useSelector, connect, useStore, Provider } from 'react-redux';
12
12
  import { ReactSortable } from 'react-sortablejs';
13
13
  import Sortable from 'sortablejs';
14
14
  import { layerTypes, layerUtils, mapSelectors, layerActions, layerSelectors, serviceSelectors, serviceActions, mapActions, mapEnums, uiSelectors, uiTypes, useSetupDialog, filterLayers, getUserAddedServices, uiActions, genericActions, syncGroupsSelectors, drawingToolSelectors, syncConstants, getViewObjectForSyncGroup, getViewObjectForMapId, genericSelectors, loadingIndicatorActions, defaultLayers, getSingularDrawtoolDrawLayerId, syncGroupsSelector, syncGroupsActions, routerUtils, mapUtils } from '@opengeoweb/store';
15
- import { webmapUtils, queryWMSServiceInfo, queryWMSLayers, queryWMSLayersTree, invalidateWMSGetCapabilities, LayerType, getWMSServiceId, handleDateUtilsISOString, getMapDimURL, generateLayerId, WMJSDimension, getWMLayerById, WMLayer } from '@opengeoweb/webmap';
15
+ import { webmapUtils, LayerType, queryWMSServiceInfo, queryWMSLayers, queryWMSLayersTree, invalidateWMSGetCapabilities, getWMSServiceId, handleDateUtilsISOString, getMapDimURL, generateLayerId, WMJSDimension, getWMLayerById, WMLayer } from '@opengeoweb/webmap';
16
16
  import _, { isArray, isEqual, range } from 'lodash';
17
17
  import { Box as Box$1, styled as styled$1 } from '@mui/system';
18
18
  import { LayerSelectButtonConnect, LayerSelectConnect, DataExplorerButtonConnect } from '@opengeoweb/layer-select';
@@ -58,6 +58,7 @@ var en = {
58
58
  "layermanager-style-title": "Style",
59
59
  "layermanager-layer-error": "This layer could not be loaded: does not exist on the server.",
60
60
  "layermanager-layer": "Layer",
61
+ "layermanager-layer-multi": "Layers",
61
62
  "layermanager-layer-toggle": "Toggle visibility",
62
63
  "layermanager-layer-select": "Open the layer selector",
63
64
  "layermanager-layer-drag": "Drag",
@@ -75,6 +76,7 @@ var en = {
75
76
  "layermanager-header-button-large": "large",
76
77
  "layermanager-header-button-dock": "Dock",
77
78
  "layermanager-header-button-undock": "Undock",
79
+ "layermanager-EDR": "EDR: ",
78
80
  "projection-title": "Projection",
79
81
  "wms-loader-description": "Please enter a wms server, or select one from the list.",
80
82
  "wms-loader-no-data": "No data",
@@ -697,11 +699,11 @@ var initCoreReactI18n = function initCoreReactI18n() {
697
699
  ns: SHARED_NAMESPACE,
698
700
  translations: sharedTranslations
699
701
  }, {
700
- ns: TIMESLIDER_NAMESPACE,
702
+ ns: TIME_SLIDER_NAMESPACE,
701
703
  translations: timesliderTranslations
702
704
  }]);
703
705
  };
704
- var ns = [CORE_NAMESPACE, TIMESLIDER_NAMESPACE];
706
+ var ns = [CORE_NAMESPACE, TIME_SLIDER_NAMESPACE];
705
707
  var useCoreTranslation = function useCoreTranslation() {
706
708
  return useTranslation(ns);
707
709
  };
@@ -1387,6 +1389,27 @@ var DimensionSelect = function DimensionSelect(_ref) {
1387
1389
  });
1388
1390
  };
1389
1391
 
1392
+ var showNoLayers = function showNoLayers(t) {
1393
+ return jsx(Box, {
1394
+ sx: {
1395
+ paddingLeft: 1,
1396
+ height: '32px',
1397
+ display: 'inline-flex',
1398
+ alignItems: 'center'
1399
+ },
1400
+ children: jsx(Typography, {
1401
+ variant: "body1",
1402
+ sx: {
1403
+ fontSize: function fontSize(theme) {
1404
+ return theme.palette.geowebColors.layerManager.tableRowDefaultText.fontSize;
1405
+ },
1406
+ color: 'geowebColors.layerManager.tableRowDefaultText.rgba',
1407
+ fontWeight: 500
1408
+ },
1409
+ children: t('layermanager-baselayers-no-available')
1410
+ })
1411
+ });
1412
+ };
1390
1413
  var getRenderLayersValues = function getRenderLayersValues(layerName, layers) {
1391
1414
  var serviceLayer = layers.find(function (layer) {
1392
1415
  return layer.name === layerName;
@@ -1425,25 +1448,7 @@ var RenderLayers = function RenderLayers(_ref) {
1425
1448
  t = _useCoreTranslation.t;
1426
1449
  var nonEmptyTooltipPrefix = tooltipPrefix != null ? tooltipPrefix : t('layermanager-layer') + ": ";
1427
1450
  if (!layers || !layers.length) {
1428
- return jsx(Box, {
1429
- sx: {
1430
- paddingLeft: 1,
1431
- height: '32px',
1432
- display: 'inline-flex',
1433
- alignItems: 'center'
1434
- },
1435
- children: jsx(Typography, {
1436
- variant: "body1",
1437
- sx: {
1438
- fontSize: function fontSize(theme) {
1439
- return theme.palette.geowebColors.layerManager.tableRowDefaultText.fontSize;
1440
- },
1441
- color: 'geowebColors.layerManager.tableRowDefaultText.rgba',
1442
- fontWeight: 500
1443
- },
1444
- children: t('layermanager-baselayers-no-available')
1445
- })
1446
- });
1451
+ return showNoLayers(t);
1447
1452
  }
1448
1453
  var selectLayer = function selectLayer(event) {
1449
1454
  event.stopPropagation();
@@ -2212,6 +2217,8 @@ var LayerRowUnstyled = function LayerRowUnstyled(_ref8) {
2212
2217
  layerName = _ref8.layerName,
2213
2218
  services = _ref8.services,
2214
2219
  mapId = _ref8.mapId,
2220
+ _ref8$isEDRLayer = _ref8.isEDRLayer,
2221
+ isEDRLayer = _ref8$isEDRLayer === void 0 ? false : _ref8$isEDRLayer,
2215
2222
  _ref8$onLayerRowClick = _ref8.onLayerRowClick,
2216
2223
  onLayerRowClick = _ref8$onLayerRowClick === void 0 ? function () {} : _ref8$onLayerRowClick,
2217
2224
  _ref8$isEnabled = _ref8.isEnabled,
@@ -2303,6 +2310,7 @@ var LayerRowUnstyled = function LayerRowUnstyled(_ref8) {
2303
2310
  onChangeActive: onClickRow
2304
2311
  }),
2305
2312
  layerName: layerName,
2313
+ isEDRLayer: isEDRLayer,
2306
2314
  Styles: layerStylesLayout || jsx(Styles, {
2307
2315
  style: layer.style,
2308
2316
  onChangeStyle: changeStyle
@@ -2448,9 +2456,12 @@ var Accordion = function Accordion(_ref0) {
2448
2456
  Opacity = _ref0.Opacity,
2449
2457
  layerName = _ref0.layerName,
2450
2458
  LeftButtons = _ref0.LeftButtons,
2451
- LoadDuration = _ref0.LoadDuration;
2459
+ LoadDuration = _ref0.LoadDuration,
2460
+ _ref0$isEDRLayer = _ref0.isEDRLayer,
2461
+ isEDRLayer = _ref0$isEDRLayer === void 0 ? false : _ref0$isEDRLayer;
2452
2462
  var _useCoreTranslation3 = useCoreTranslation(),
2453
2463
  t = _useCoreTranslation3.t;
2464
+ var displayLayerName = isEDRLayer ? t('layermanager-EDR') + layerName : layerName;
2454
2465
  return jsx(CustomAccordion, {
2455
2466
  className: "medium-layermanager",
2456
2467
  defaultExpanded: false,
@@ -2473,7 +2484,7 @@ var Accordion = function Accordion(_ref0) {
2473
2484
  display: 'flex',
2474
2485
  alignItems: 'center'
2475
2486
  },
2476
- children: layerName
2487
+ children: displayLayerName
2477
2488
  })]
2478
2489
  }),
2479
2490
  children: jsxs(Grid, {
@@ -2785,6 +2796,127 @@ var RenderStylesConnect = function RenderStylesConnect(_ref) {
2785
2796
  });
2786
2797
  };
2787
2798
 
2799
+ var getRenderEDRLayersValues = function getRenderEDRLayersValues(selectedParams, layers) {
2800
+ var paramArray = selectedParams.reduce(function (obj, param) {
2801
+ var serviceLayer = layers.find(function (layer) {
2802
+ return layer.name === param;
2803
+ });
2804
+ if (!serviceLayer) {
2805
+ return {
2806
+ notFound: obj.notFound.concat([param]),
2807
+ found: [].concat(obj.found)
2808
+ };
2809
+ }
2810
+ return {
2811
+ found: obj.found.concat([param]),
2812
+ notFound: [].concat(obj.notFound)
2813
+ };
2814
+ }, {
2815
+ found: [],
2816
+ notFound: []
2817
+ });
2818
+ if (paramArray.notFound.length > 0) {
2819
+ return {
2820
+ currentValues: [].concat(paramArray.found, [paramArray.notFound.join(',')]),
2821
+ extendedLayers: [].concat(layers, [{
2822
+ name: paramArray.notFound.join(','),
2823
+ title: paramArray.notFound.join(','),
2824
+ leaf: true,
2825
+ path: []
2826
+ }])
2827
+ };
2828
+ }
2829
+ return {
2830
+ currentValues: selectedParams,
2831
+ extendedLayers: layers
2832
+ };
2833
+ };
2834
+ var RenderEDRLayers = function RenderEDRLayers(_ref) {
2835
+ var onChangeLayerOptions = _ref.onChangeLayerOptions,
2836
+ selectedParams = _ref.selectedParams,
2837
+ _ref$layers = _ref.layers,
2838
+ layers = _ref$layers === void 0 ? [] : _ref$layers,
2839
+ layerName = _ref.layerName,
2840
+ collectionId = _ref.collectionId,
2841
+ _ref$isEnabled = _ref.isEnabled,
2842
+ isEnabled = _ref$isEnabled === void 0 ? true : _ref$isEnabled,
2843
+ tooltipPrefix = _ref.tooltipPrefix,
2844
+ skipLocalStyling = _ref.skipLocalStyling;
2845
+ var _useCoreTranslation = useCoreTranslation(),
2846
+ t = _useCoreTranslation.t;
2847
+ var nonEmptyTooltipPrefix = tooltipPrefix != null ? tooltipPrefix : selectedParams.length === 1 ? t('layermanager-layer') + ": " : t('layermanager-layer-multi') + ": ";
2848
+ if (!layers || !layers.length) {
2849
+ return showNoLayers(t);
2850
+ }
2851
+ var selectLayer = function selectLayer(event) {
2852
+ event.stopPropagation();
2853
+ // Ensure after deselecting all, the empty value gets removed
2854
+ var parameterNames = event.target.value.filter(function (param) {
2855
+ return param !== '';
2856
+ });
2857
+ onChangeLayerOptions({
2858
+ collectionId: collectionId,
2859
+ parameterNames: parameterNames
2860
+ });
2861
+ };
2862
+ var _getRenderEDRLayersVa = getRenderEDRLayersValues(selectedParams, layers),
2863
+ currentValues = _getRenderEDRLayersVa.currentValues,
2864
+ extendedLayers = _getRenderEDRLayersVa.extendedLayers;
2865
+ var list = extendedLayers.map(function (layer) {
2866
+ return {
2867
+ value: layer.name
2868
+ };
2869
+ });
2870
+ var edrText = t('layermanager-EDR');
2871
+ var tooltipNames = currentValues.map(function (value) {
2872
+ var layer = extendedLayers.find(function (layer) {
2873
+ return value === layer.name;
2874
+ });
2875
+ return (layer == null ? void 0 : layer.title) || (layer == null ? void 0 : layer.name);
2876
+ });
2877
+ var tooltip = nonEmptyTooltipPrefix + " " + tooltipNames.sort(function (paramA, paramB) {
2878
+ return (paramA != null ? paramA : '').localeCompare(paramB != null ? paramB : '');
2879
+ }).join(', ');
2880
+ return jsxs(TooltipSelect, {
2881
+ disableUnderline: true,
2882
+ tooltip: tooltip,
2883
+ inputProps: {
2884
+ SelectDisplayProps: {
2885
+ 'data-testid': 'selectEDRLayer'
2886
+ }
2887
+ },
2888
+ isEnabled: isEnabled,
2889
+ value: currentValues,
2890
+ list: list,
2891
+ onChange: selectLayer,
2892
+ skipLocalStyling: skipLocalStyling,
2893
+ multiple: true,
2894
+ renderValue: function renderValue() {
2895
+ return edrText + layerName;
2896
+ },
2897
+ children: [jsx(MenuItem, {
2898
+ disabled: true,
2899
+ children: t('layermanager-layer')
2900
+ }), extendedLayers.map(function (layerFromServiceLayers, currentIndex) {
2901
+ return jsxs(MenuItem, {
2902
+ value: layerFromServiceLayers.name,
2903
+ disabled: !layerFromServiceLayers.leaf,
2904
+ sx: {
2905
+ '&.MuiMenuItem-root.Mui-selected': {
2906
+ background: 'none',
2907
+ color: 'geowebColors.typographyAndIcons.text'
2908
+ }
2909
+ },
2910
+ children: [jsx(Checkbox, {
2911
+ checked: currentValues.includes(layerFromServiceLayers.name)
2912
+ }), layerFromServiceLayers.title, currentIndex === layers.length && jsx(AlertIcon, {
2913
+ severity: "error"
2914
+ })]
2915
+ }, layerFromServiceLayers.name);
2916
+ })]
2917
+ });
2918
+ };
2919
+
2788
2920
  var RenderLayersConnect = function RenderLayersConnect(_ref) {
2789
2921
  var layerId = _ref.layerId,
2790
2922
  mapId = _ref.mapId,
@@ -2794,6 +2926,12 @@ var RenderLayersConnect = function RenderLayersConnect(_ref) {
2794
2926
  var layerName = useSelector(function (store) {
2795
2927
  return layerSelectors.getLayerName(store, layerId);
2796
2928
  });
2929
+ var layerDisplayName = useSelector(function (store) {
2930
+ return layerSelectors.getLayerDisplayName(store, layerId);
2931
+ });
2932
+ var layerType = useSelector(function (store) {
2933
+ return layerSelectors.getLayerType(store, layerId);
2934
+ });
2797
2935
  var layerService = useSelector(function (store) {
2798
2936
  return layerSelectors.getLayerService(store, layerId);
2799
2937
  });
@@ -2803,6 +2941,9 @@ var RenderLayersConnect = function RenderLayersConnect(_ref) {
2803
2941
  var service = useSelector(function (store) {
2804
2942
  return serviceSelectors.getServiceByUrl(store, layerService);
2805
2943
  });
2944
+ var layerOptions = useSelector(function (store) {
2945
+ return layerSelectors.getLayerOptions(store, layerId);
2946
+ });
2806
2947
  var serviceSetLayers = React.useCallback(function (payload) {
2807
2948
  dispatch(serviceActions.serviceSetLayers(payload));
2808
2949
  }, [dispatch]);
@@ -2861,6 +3002,36 @@ var RenderLayersConnect = function RenderLayersConnect(_ref) {
2861
3002
  origin: layerTypes.LayerActionOrigin.layerManager
2862
3003
  }));
2863
3004
  }, [dispatch, mapId]);
3005
+ var layerChangeOptions = React.useCallback(function (_ref4) {
3006
+ var layerId = _ref4.layerId,
3007
+ options = _ref4.options;
3008
+ return dispatch(layerActions.layerChangeOptions({
3009
+ layerId: layerId,
3010
+ options: options,
3011
+ mapId: mapId,
3012
+ origin: layerTypes.LayerActionOrigin.layerManager
3013
+ }));
3014
+ }, [dispatch, mapId]);
3015
+ if (layerType === LayerType.edrFeatureLayer) {
3016
+ var _layerOptions$paramet;
3017
+ var selectedParams = (_layerOptions$paramet = layerOptions == null ? void 0 : layerOptions.parameterNames) != null ? _layerOptions$paramet : [];
3018
+ var collectionId = (layerOptions == null ? void 0 : layerOptions.collectionId) || '';
3019
+ return jsx(RenderEDRLayers, {
3020
+ layers: layers,
3021
+ layerName: layerDisplayName,
3022
+ collectionId: collectionId,
3023
+ selectedParams: selectedParams,
3024
+ onChangeLayerOptions: function onChangeLayerOptions(options) {
3025
+ layerChangeOptions({
3026
+ layerId: layerId,
3027
+ options: options
3028
+ });
3029
+ },
3030
+ isEnabled: isLayerEnabled,
3031
+ tooltipPrefix: tooltipPrefix,
3032
+ skipLocalStyling: skipLocalStyling
3033
+ });
3034
+ }
2864
3035
  return jsx(RenderLayers, {
2865
3036
  layers: layers,
2866
3037
  layerName: layerName,
@@ -3151,21 +3322,11 @@ var MissingDataConnect = function MissingDataConnect(_ref) {
3151
3322
  var layerIsInsideAcceptanceTime = useSelector(function (store) {
3152
3323
  return layerSelectors.getLayerIsInsideAcceptanceTime(store, layerId, mapId);
3153
3324
  });
3154
- var layerName = useSelector(function (store) {
3155
- return layerSelectors.getLayerName(store, layerId);
3156
- });
3157
- var layerService = useSelector(function (store) {
3158
- return layerSelectors.getLayerService(store, layerId);
3325
+ var isLayerMissing = useSelector(function (store) {
3326
+ return layerSelectors.getIsLayerMissing(store, layerId);
3159
3327
  });
3160
- var serviceLayer = useSelector(function (store) {
3161
- return serviceSelectors.getLayerFromService(store, layerService, layerName);
3162
- });
3163
- var layerStatus = useSelector(function (store) {
3164
- return layerSelectors.getLayerStatus(store, layerId);
3165
- });
3166
- var layerIsMissingOnServer = !serviceLayer || layerStatus === layerTypes.LayerStatus.error;
3167
3328
  return jsx(MissingData, {
3168
- layerIsInsideAcceptanceTime: layerIsMissingOnServer ? 'outside' : layerIsInsideAcceptanceTime
3329
+ layerIsInsideAcceptanceTime: isLayerMissing ? 'outside' : layerIsInsideAcceptanceTime
3169
3330
  });
3170
3331
  };
3171
3332
 
@@ -3290,37 +3451,32 @@ var LayerRowConnect = /*#__PURE__*/React.memo(function (_ref) {
3290
3451
  var layerName = useSelector(function (store) {
3291
3452
  return layerSelectors.getLayerName(store, layerId);
3292
3453
  });
3293
- var layerServiceUrl = useSelector(function (store) {
3294
- return layerSelectors.getLayerService(store, layerId);
3295
- });
3296
- var serviceLayer = useSelector(function (store) {
3297
- return serviceSelectors.getLayerFromService(store, layerServiceUrl, layerName);
3454
+ var layerDisplayName = useSelector(function (store) {
3455
+ return layerSelectors.getLayerDisplayName(store, layerId);
3298
3456
  });
3299
- var layerStatus = useSelector(function (store) {
3300
- return layerSelectors.getLayerStatus(store, layerId);
3457
+ var layerType = useSelector(function (store) {
3458
+ return layerSelectors.getLayerType(store, layerId);
3301
3459
  });
3302
- var currentlySelectedLayer = useSelector(function (store) {
3303
- return layerSelectors.getLayerByIdWithoutTimeDimension(store, layerId);
3460
+ var isEDRLayer = layerType === LayerType.edrFeatureLayer;
3461
+ var layerServiceUrl = useSelector(function (store) {
3462
+ return layerSelectors.getLayerService(store, layerId);
3304
3463
  });
3305
- var layerWithAllData = useSelector(function (store) {
3306
- return serviceSelectors.getLayerFromService(store, currentlySelectedLayer == null ? void 0 : currentlySelectedLayer.service, currentlySelectedLayer == null ? void 0 : currentlySelectedLayer.name);
3464
+ var isLayerMissing = useSelector(function (store) {
3465
+ return layerSelectors.getIsLayerMissing(store, layerId);
3307
3466
  });
3308
- var currentService = useSelector(function (store) {
3309
- return serviceSelectors.getServiceByUrl(store, layerServiceUrl);
3310
- });
3311
- var fullLayerName = serviceLayer == null ? void 0 : serviceLayer.title;
3312
3467
  renderCounter.count(LayerRowConnect.name);
3313
3468
  return jsx(LayerRow, {
3314
3469
  isEnabled: isEnabled,
3315
3470
  mapId: mapId,
3316
3471
  layerId: layerId,
3317
- isLayerMissing: !serviceLayer || layerStatus === layerTypes.LayerStatus.error,
3318
- layerName: fullLayerName || layerName,
3472
+ isLayerMissing: isLayerMissing,
3473
+ layerName: layerDisplayName,
3474
+ isEDRLayer: isEDRLayer,
3319
3475
  layerEnableLayout: jsx(EnableLayerConnect, {
3320
3476
  layerId: layerId,
3321
3477
  mapId: mapId,
3322
3478
  isEnabled: isEnabled,
3323
- layerName: fullLayerName || layerName,
3479
+ layerName: layerDisplayName,
3324
3480
  icon: isEnabled ? settings == null || (_settings$enableLayer = settings.enableLayer) == null ? void 0 : _settings$enableLayer.enabledIcon : settings == null || (_settings$enableLayer2 = settings.enableLayer) == null ? void 0 : _settings$enableLayer2.disabledIcon,
3325
3481
  tooltipTitle: isEnabled ? settings == null || (_settings$enableLayer3 = settings.enableLayer) == null ? void 0 : _settings$enableLayer3.enabledTooltipTitle : settings == null || (_settings$enableLayer4 = settings.enableLayer) == null ? void 0 : _settings$enableLayer4.disabledTooltipTitle
3326
3482
  }),
@@ -3364,10 +3520,10 @@ var LayerRowConnect = /*#__PURE__*/React.memo(function (_ref) {
3364
3520
  layerId: layerId
3365
3521
  }, settings == null ? void 0 : settings.deleteLayer)),
3366
3522
  layerShowLayerInfoLayout: jsx(LayerInfoButtonConnect, {
3367
- isLayerMissing: !serviceLayer,
3523
+ isLayerMissing: isLayerMissing,
3368
3524
  mapId: mapId,
3369
- serviceUrl: currentService == null ? void 0 : currentService.serviceUrl,
3370
- layerName: (layerWithAllData == null ? void 0 : layerWithAllData.name) || ''
3525
+ serviceUrl: layerServiceUrl,
3526
+ layerName: layerName
3371
3527
  }),
3372
3528
  layerMenuLayout: jsx(LayerManagerMenuButtonConnect, Object.assign({
3373
3529
  mapId: mapId,
@@ -4802,7 +4958,8 @@ var OverlayersSelectConnect = function OverlayersSelectConnect(_ref) {
4802
4958
  var changeOverlayer = React__default.useCallback(function (mapId, selectedOverlayer) {
4803
4959
  dispatch(mapActions.changeOverlayer({
4804
4960
  mapId: mapId || '',
4805
- selectedOverlayer: selectedOverlayer.id
4961
+ selectedOverlayer: selectedOverlayer.id,
4962
+ origin: 'map'
4806
4963
  }));
4807
4964
  }, [dispatch]);
4808
4965
  return jsx(OverlayersSelect, {
@@ -5219,6 +5376,9 @@ var DimensionSelectSliderConnect = function DimensionSelectSliderConnect(_ref) {
5219
5376
  var layerDimension = useSelector(function (store) {
5220
5377
  return layerSelectors.getLayerDimension(store, layerId, dimensionName);
5221
5378
  });
5379
+ var layerName = useSelector(function (store) {
5380
+ return layerSelectors.getLayerName(store, layerId);
5381
+ });
5222
5382
  var _useLayerDimensions = useLayerDimensions(layerId, mapId),
5223
5383
  isLayerEnabled = _useLayerDimensions.isLayerEnabled;
5224
5384
  if (!layerDimension || !isLayerEnabled) {
@@ -5229,7 +5389,8 @@ var DimensionSelectSliderConnect = function DimensionSelectSliderConnect(_ref) {
5229
5389
  dimensionName: dimensionName,
5230
5390
  handleDimensionValueChanged: handleDimensionValueChanged,
5231
5391
  handleSyncChanged: handleSyncChanged,
5232
- layerDimension: layerDimension
5392
+ layerDimension: layerDimension,
5393
+ layerName: layerName
5233
5394
  });
5234
5395
  };
5235
5396
 
@@ -5552,6 +5713,11 @@ var AnimationLengthButtonConnect = function AnimationLengthButtonConnect(_ref) {
5552
5713
  var animationEndTime = dateUtils.dateToIsoString(dateUtils.add(dateUtils.utc(selectedAnimationStartTime), {
5553
5714
  minutes: length
5554
5715
  }));
5716
+ dispatch(mapActions.setAnimationStartTime({
5717
+ mapId: mapId,
5718
+ animationStartTime: selectedAnimationStartTime || dateUtils.dateToIsoString(dateUtils.utc()),
5719
+ origin: mapEnums.MapActionOrigin.map
5720
+ }));
5555
5721
  dispatch(mapActions.setAnimationEndTime({
5556
5722
  mapId: mapId,
5557
5723
  animationEndTime: animationEndTime || dateUtils.dateToIsoString(dateUtils.utc()),
@@ -5619,10 +5785,6 @@ var TimeSpanButtonConnect = function TimeSpanButtonConnect(_ref) {
5619
5785
  var newSecondsPerPx = secondsPerPxFromCanvasWidth(timeSliderWidth, spanInSeconds);
5620
5786
  var newCenterTime = getNewCenterOfFixedPointZoom(selectedTime, secondsPerPx, newSecondsPerPx, centerTime);
5621
5787
  if (spanInSeconds !== undefined && newCenterTime !== undefined && newSecondsPerPx !== undefined) {
5622
- dispatch(mapActions.setTimeSliderSecondsPerPx({
5623
- mapId: mapId,
5624
- timeSliderSecondsPerPx: newSecondsPerPx
5625
- }));
5626
5788
  dispatch(mapActions.setTimeSliderSpan({
5627
5789
  mapId: mapId,
5628
5790
  timeSliderSpan: spanInSeconds,
@@ -5792,7 +5954,9 @@ var NowButtonConnect = function NowButtonConnect(_ref) {
5792
5954
  dispatch(genericActions.setTime({
5793
5955
  sourceId: sourceId,
5794
5956
  origin: 'NowButtonConnect, 140',
5795
- value: handleDateUtilsISOString(newDate)
5957
+ value: {
5958
+ currentTime: handleDateUtilsISOString(newDate)
5959
+ }
5796
5960
  }));
5797
5961
  };
5798
5962
  var onSetCenterTime = function onSetCenterTime(newTime) {
@@ -5997,16 +6161,6 @@ var TimeSliderLegendConnect = function TimeSliderLegendConnect(_ref) {
5997
6161
  timeSliderCenterTime: newTime
5998
6162
  }));
5999
6163
  },
6000
- onZoom: function onZoom(newSecondsPerPx, newCenterTime) {
6001
- dispatch(mapActions.setTimeSliderSecondsPerPx({
6002
- mapId: mapId,
6003
- timeSliderSecondsPerPx: newSecondsPerPx
6004
- }));
6005
- dispatch(mapActions.setTimeSliderCenterTime({
6006
- mapId: mapId,
6007
- timeSliderCenterTime: newCenterTime
6008
- }));
6009
- },
6010
6164
  onSetAnimationStartTime: function onSetAnimationStartTime(animationStartTime) {
6011
6165
  dispatch(mapActions.setAnimationStartTime({
6012
6166
  mapId: mapId,
@@ -6027,14 +6181,6 @@ var TimeSliderLegendConnect = function TimeSliderLegendConnect(_ref) {
6027
6181
  mapId: mapId,
6028
6182
  timeSliderWidth: newWidth
6029
6183
  }));
6030
- var spanInSeconds = secondsPerPx * storeWidth;
6031
- var newSecondsPerPx = secondsPerPxFromCanvasWidth(newWidth, spanInSeconds);
6032
- if (newSecondsPerPx !== undefined) {
6033
- dispatch(mapActions.setTimeSliderSecondsPerPx({
6034
- mapId: mapId,
6035
- timeSliderSecondsPerPx: newSecondsPerPx
6036
- }));
6037
- }
6038
6184
  }
6039
6185
  },
6040
6186
  adjustSelectedTimeOnWheel: adjustSelectedTimeOnWheel
@@ -6091,14 +6237,12 @@ var useUpdateTimeSpan = function useUpdateTimeSpan(mapId, myOnSetTimeSliderSpan)
6091
6237
  var isAnimating = useSelector(function (store) {
6092
6238
  return mapSelectors.isAnimating(store, mapId);
6093
6239
  });
6094
- var updateTimeSliderSpan = function updateTimeSliderSpan(spanInSeconds, newCenterTime, newSecondsPerPx) {
6095
- if (spanInSeconds !== undefined && newCenterTime !== undefined && newSecondsPerPx !== undefined) {
6096
- // Do not dispatch actions if values are the same
6097
- if (currentTimeSpan !== spanInSeconds || secondsPerPx !== newSecondsPerPx || centerTime !== newCenterTime) {
6098
- myOnSetTimeSliderSpan(spanInSeconds, newCenterTime, newSecondsPerPx);
6099
- }
6240
+ var updateTimeSliderSpan = React.useCallback(function (spanInSeconds, newCenterTime) {
6241
+ // Do not dispatch actions if values are the same
6242
+ if (spanInSeconds !== undefined && newCenterTime !== undefined && (currentTimeSpan !== spanInSeconds || centerTime !== newCenterTime)) {
6243
+ myOnSetTimeSliderSpan(spanInSeconds, newCenterTime);
6100
6244
  }
6101
- };
6245
+ }, [centerTime, currentTimeSpan, myOnSetTimeSliderSpan]);
6102
6246
  React.useEffect(function () {
6103
6247
  if (isTimeSpanAuto && autoTimeStepLayerId && activeLayerTimeDimension && !isAnimating) {
6104
6248
  var _getTimeBounds = getTimeBounds([activeLayerTimeDimension]),
@@ -6107,14 +6251,12 @@ var useUpdateTimeSpan = function useUpdateTimeSpan(mapId, myOnSetTimeSliderSpan)
6107
6251
  var minimumStartTime = selectedTime - 24 * 3600;
6108
6252
  var slicedStartTime = startTime < minimumStartTime ? minimumStartTime : startTime;
6109
6253
  var spanInSeconds = endTime - slicedStartTime;
6110
- var newSecondsPerPx = secondsPerPxFromCanvasWidth(timeSliderWidth, spanInSeconds);
6111
6254
  var newCenterTime = (slicedStartTime + endTime) / 2;
6112
- updateTimeSliderSpan(spanInSeconds, newCenterTime, newSecondsPerPx);
6255
+ updateTimeSliderSpan(spanInSeconds, newCenterTime);
6113
6256
  } else {
6114
6257
  var _spanInSeconds = currentTimeSpan || defaultTimeSpan;
6115
- var _newSecondsPerPx = secondsPerPxFromCanvasWidth(timeSliderWidth, _spanInSeconds);
6116
- var _newCenterTime = getNewCenterOfFixedPointZoom(selectedTime, secondsPerPx, _newSecondsPerPx, centerTime);
6117
- updateTimeSliderSpan(_spanInSeconds, _newCenterTime, _newSecondsPerPx);
6258
+ var _newCenterTime = getNewCenterOfFixedPointZoom(selectedTime, secondsPerPx, secondsPerPxFromCanvasWidth(timeSliderWidth, _spanInSeconds), centerTime);
6259
+ updateTimeSliderSpan(_spanInSeconds, _newCenterTime);
6118
6260
  }
6119
6261
  // eslint-disable-next-line react-hooks/exhaustive-deps
6120
6262
  }, [autoTimeStepLayerId, isTimeSpanAuto, mapId, activeLayerTimeDimension == null ? void 0 : activeLayerTimeDimension.name]);
@@ -6162,19 +6304,11 @@ var TimeSliderConnect = function TimeSliderConnect(_ref) {
6162
6304
  origin: mapEnums.MapActionOrigin.map
6163
6305
  }));
6164
6306
  }, [dispatch, mapId]);
6165
- var onSetTimeSliderSpan = React.useCallback(function (newSpan, newCenterTime, newSecondsPerPx) {
6166
- dispatch(mapActions.setTimeSliderSecondsPerPx({
6167
- mapId: mapId,
6168
- timeSliderSecondsPerPx: newSecondsPerPx
6169
- }));
6307
+ var onSetTimeSliderSpan = React.useCallback(function (newSpan) {
6170
6308
  dispatch(mapActions.setTimeSliderSpan({
6171
6309
  mapId: mapId,
6172
6310
  timeSliderSpan: newSpan
6173
6311
  }));
6174
- dispatch(mapActions.setTimeSliderCenterTime({
6175
- mapId: mapId,
6176
- timeSliderCenterTime: newCenterTime
6177
- }));
6178
6312
  }, [dispatch, mapId]);
6179
6313
  var timeStep = useSelector(function (store) {
6180
6314
  return mapSelectors.getMapTimeStep(store, mapId);
@@ -6216,7 +6350,9 @@ var TimeSliderConnect = function TimeSliderConnect(_ref) {
6216
6350
  dispatch(genericActions.setTime({
6217
6351
  sourceId: sourceId,
6218
6352
  origin: 'TimeSliderConnect',
6219
- value: handleDateUtilsISOString(newDate)
6353
+ value: {
6354
+ currentTime: handleDateUtilsISOString(newDate)
6355
+ }
6220
6356
  }));
6221
6357
  }, [dispatch, isAnimating, mapId, sourceId]);
6222
6358
  // Update local state when time is updated outside of this component, e.g. during animation or syncgroups
@@ -7418,65 +7554,53 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref)
7418
7554
  * Copyright 2025 - Finnish Meteorological Institute (FMI)
7419
7555
  * Copyright 2025 - The Norwegian Meteorological Institute (MET Norway)
7420
7556
  * */
7421
- var makePrefetchTimeSpan = function makePrefetchTimeSpan(timeSliderStartCenterEndTime, animationStartTime, animationEndTime, isAnimating) {
7422
- var timeSliderTimeStepInS = timeSliderStartCenterEndTime.step * 60;
7423
- var animationTimeStartInS = dateUtils.parseISO(animationStartTime).getTime() / 1000;
7424
- var animationTimeEndInS = dateUtils.parseISO(animationEndTime).getTime() / 1000;
7425
- var prefetchStart = isAnimating ? animationTimeStartInS : timeSliderStartCenterEndTime.start;
7426
- var prefetchEnd = isAnimating ? animationTimeEndInS : timeSliderStartCenterEndTime.end;
7427
- if (!prefetchStart || !prefetchEnd) {
7557
+ var makePrefetchTimeSpan = function makePrefetchTimeSpan(timeSliderStartCenterEndTime, isAnimating, prefetchList) {
7558
+ var timeSliderTimeStepInS = timeSliderStartCenterEndTime.step * 60 * 1000;
7559
+ var prefetchStart = timeSliderStartCenterEndTime.start * 1000;
7560
+ var prefetchEnd = timeSliderStartCenterEndTime.end * 1000;
7561
+ if (isAnimating || !prefetchStart || !prefetchEnd) {
7428
7562
  return {
7429
- timespan: {
7430
- start: 0,
7431
- end: 0,
7432
- step: 0
7433
- },
7434
- isAnimating: isAnimating
7563
+ isAnimating: isAnimating,
7564
+ prefetchList: prefetchList
7435
7565
  };
7436
7566
  }
7437
7567
  var roundStart = Math.round(prefetchStart / timeSliderTimeStepInS) * timeSliderTimeStepInS;
7438
- var roundEnd = Math.round(prefetchEnd / timeSliderTimeStepInS) * timeSliderTimeStepInS;
7568
+ var roundEnd = Math.round(prefetchEnd / timeSliderTimeStepInS) * timeSliderTimeStepInS + timeSliderTimeStepInS;
7569
+ var timeSpanList = makeTimeList({
7570
+ start: roundStart,
7571
+ end: roundEnd,
7572
+ step: timeSliderTimeStepInS
7573
+ });
7439
7574
  // eslint-disable-next-line no-constant-condition
7440
7575
  return {
7441
- timespan: {
7442
- start: roundStart * 1000,
7443
- end: roundEnd * 1000,
7444
- step: timeSliderTimeStepInS * 1000
7445
- },
7446
- isAnimating: isAnimating
7576
+ isAnimating: isAnimating,
7577
+ prefetchList: timeSpanList
7447
7578
  };
7448
7579
  };
7449
7580
  var makeLayerInfoPayload = function makeLayerInfoPayload(payload, mapDimensions, mapId) {
7450
7581
  // During intialization, try to base the layer dimension on the current map dimension value.
7582
+ var origin = 'onInitializeLayer in OlMapViewLayerConnect';
7583
+ var dimensions = (payload.dimensions || []).map(function (layerDim) {
7584
+ var _find;
7585
+ var currentMapDim = ((_find = (mapDimensions || []).find(function (mapDim) {
7586
+ return mapDim.name === layerDim.name;
7587
+ })) == null ? void 0 : _find.currentValue) || layerDim.currentValue;
7588
+ var wmDim = new WMJSDimension(layerDim);
7589
+ return Object.assign({}, layerDim, {
7590
+ currentValue: wmDim.getClosestValue(currentMapDim, true)
7591
+ });
7592
+ });
7451
7593
  var updatedPayLoad = {
7452
- origin: 'onInitializeLayer in OlMapViewLayerConnect',
7594
+ origin: origin,
7453
7595
  layerDimensions: {
7454
7596
  layerId: payload.layerId,
7455
- origin: 'onInitializeLayer in OlMapViewLayerConnect',
7456
- dimensions: (payload.dimensions || []).map(function (layerDim) {
7457
- var _find;
7458
- var currentMapDim = ((_find = (mapDimensions || []).find(function (mapDim) {
7459
- return mapDim.name === layerDim.name;
7460
- })) == null ? void 0 : _find.currentValue) || layerDim.currentValue;
7461
- var wmDim = new WMJSDimension(layerDim);
7462
- return Object.assign({}, layerDim, {
7463
- currentValue: wmDim.getClosestValue(currentMapDim)
7464
- });
7465
- })
7597
+ origin: origin,
7598
+ dimensions: dimensions
7466
7599
  },
7467
7600
  mapDimensions: {
7468
7601
  mapId: mapId,
7469
- origin: 'onInitializeLayer in OlMapViewLayerConnect',
7470
- dimensions: (payload.dimensions || []).map(function (layerDim) {
7471
- var _find2;
7472
- var currentMapDim = ((_find2 = (mapDimensions || []).find(function (mapDim) {
7473
- return mapDim.name === layerDim.name;
7474
- })) == null ? void 0 : _find2.currentValue) || layerDim.currentValue;
7475
- var wmDim = new WMJSDimension(layerDim);
7476
- return Object.assign({}, layerDim, {
7477
- currentValue: wmDim.getClosestValue(currentMapDim)
7478
- });
7479
- })
7602
+ origin: origin,
7603
+ dimensions: dimensions
7480
7604
  }
7481
7605
  };
7482
7606
  return updatedPayLoad;
@@ -7659,7 +7783,7 @@ var useGetOpenLayersView = function useGetOpenLayersView(mapId, store) {
7659
7783
  * @param {object} [controls.zoomControls] **optional** controls: object - toggle the map controls, zoomControls defaults to true
7660
7784
  */
7661
7785
  var OlMapViewConnect = function OlMapViewConnect(_ref) {
7662
- var _featureProperties$va;
7786
+ var _useSelector2, _featureProperties$va;
7663
7787
  var mapId = _ref.mapId,
7664
7788
  children = _ref.children,
7665
7789
  _ref$controls = _ref.controls,
@@ -7670,7 +7794,9 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
7670
7794
  initialBbox = _ref.initialBbox,
7671
7795
  holdShiftToScroll = _ref.holdShiftToScroll,
7672
7796
  source = _ref.source,
7673
- tileServerSettings = _ref.tileServerSettings;
7797
+ tileServerSettings = _ref.tileServerSettings,
7798
+ _ref$featureStyle = _ref.featureStyle,
7799
+ featureStyle = _ref$featureStyle === void 0 ? genericOpenLayersFeatureStyle : _ref$featureStyle;
7674
7800
  var store = useStore();
7675
7801
  var _useGetOpenLayersView = useGetOpenLayersView(mapId, store),
7676
7802
  view = _useGetOpenLayersView.view;
@@ -7754,16 +7880,10 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
7754
7880
  var timeSliderStartCenterEndTime = useSelector(function (store) {
7755
7881
  return mapSelectors.getMapTimeSliderStartCenterEndAndStep(store, mapId);
7756
7882
  });
7757
- var animationStartTime = useSelector(function (store) {
7758
- return mapSelectors.getAnimationStartTime(store, mapId);
7759
- });
7760
- var animationEndTime = useSelector(function (store) {
7761
- return mapSelectors.getAnimationEndTime(store, mapId);
7762
- });
7763
7883
  var isTimeScrollingEnabled = useSelector(syncGroupsSelectors.isTimeScrollingEnabled);
7764
- var isAnimating = useSelector(function (store) {
7765
- return mapSelectors.isAnimating(store, mapId);
7766
- });
7884
+ var isAnimating = (_useSelector2 = useSelector(function (store) {
7885
+ return mapSelectors.linkedMapAnimationInfo(store, mapId);
7886
+ })) == null ? void 0 : _useSelector2.isAnimating;
7767
7887
  var dispatch = useDispatch();
7768
7888
  var updateLayerInformation = React.useCallback(function (payload) {
7769
7889
  var _payload$layerDimensi, _payload$layerDimensi2;
@@ -7836,6 +7956,9 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
7836
7956
  var isActiveWindowId = useSelector(function (store) {
7837
7957
  return uiSelectors.getIsActiveWindowId(store, mapId);
7838
7958
  });
7959
+ var animationList = useSelector(function (store) {
7960
+ return mapSelectors.getAnimationListAsEpochTimes(store, mapId);
7961
+ });
7839
7962
  React.useEffect(function () {
7840
7963
  registerMap({
7841
7964
  mapId: mapId
@@ -7922,7 +8045,7 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
7922
8045
  }
7923
8046
  }));
7924
8047
  }, [hoverId, previousHoverId, hoverLinkedFeature, featureProperties, linkedPanelId, dispatch]);
7925
- var prefetchTimespan = makePrefetchTimeSpan(timeSliderStartCenterEndTime, animationStartTime, animationEndTime, isAnimating);
8048
+ var prefetchTimespan = makePrefetchTimeSpan(timeSliderStartCenterEndTime, isAnimating, animationList);
7926
8049
  var layerIds = mapLayerIds.join();
7927
8050
  var refetchLayers = React.useCallback(function () {
7928
8051
  mapLayerIds == null || mapLayerIds.forEach(/*#__PURE__*/function () {
@@ -8072,13 +8195,13 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
8072
8195
  layerId: layer == null ? void 0 : layer.id,
8073
8196
  layer: layer,
8074
8197
  zIndex: featureLayers.length - zIndex + 3000,
8075
- style: genericOpenLayersFeatureStyle,
8198
+ style: featureStyle,
8076
8199
  hoverSelect: {
8077
8200
  active: true
8078
8201
  }
8079
8202
  }, "featurelayer-" + (layer == null ? void 0 : layer.id));
8080
8203
  }), jsx(OpenLayersFeatureLayer, {
8081
- style: genericOpenLayersFeatureStyle,
8204
+ style: featureStyle,
8082
8205
  featureCollection: combinedLinkedFeatures,
8083
8206
  zIndex: 4000,
8084
8207
  hoverSelect: hoverSelect
@@ -8131,7 +8254,7 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
8131
8254
  });
8132
8255
  };
8133
8256
 
8134
- var _excluded = ["id", "dockedLayerManagerSize", "title", "layers", "dimensions", "shouldAutoUpdate", "shouldAnimate", "shouldAutoFetch", "initialBbox", "srs", "shouldShowZoomControls", "displayMapPin", "showTimeSlider", "disableTimeSlider", "displayTimeInMap", "displayLayerManagerAndLegendButtonInMap", "displayDimensionSelectButtonInMap", "multiLegend", "shouldShowLayerManager", "shouldShowDockedLayerManager", "showClock", "displayGetFeatureInfoButtonInMap", "shouldDisplayDrawControls", "displaySearchButtonInMap", "displayDataExplorerButtonOnMap", "mapControls", "children", "shouldDisablePrefetching", "tileServerSettings"];
8257
+ var _excluded = ["id", "dockedLayerManagerSize", "title", "layers", "dimensions", "shouldAutoUpdate", "shouldAnimate", "shouldAutoFetch", "initialBbox", "srs", "shouldShowZoomControls", "displayMapPin", "showTimeSlider", "disableTimeSlider", "displayTimeInMap", "displayLayerManagerAndLegendButtonInMap", "displayDimensionSelectButtonInMap", "multiLegend", "shouldShowLayerManager", "shouldShowDockedLayerManager", "showClock", "displayGetFeatureInfoButtonInMap", "shouldDisplayDrawControls", "displaySearchButtonInMap", "displayDataExplorerButtonOnMap", "mapControls", "children", "shouldDisablePrefetching", "tileServerSettings", "featureStyle"];
8135
8258
  var titleStyle = function titleStyle(theme) {
8136
8259
  return {
8137
8260
  position: 'absolute',
@@ -8202,6 +8325,8 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_ref) {
8202
8325
  children = _ref.children,
8203
8326
  shouldDisablePrefetching = _ref.shouldDisablePrefetching,
8204
8327
  tileServerSettings = _ref.tileServerSettings,
8328
+ _ref$featureStyle = _ref.featureStyle,
8329
+ featureStyle = _ref$featureStyle === void 0 ? genericOpenLayersFeatureStyle : _ref$featureStyle,
8205
8330
  props = _objectWithoutPropertiesLoose(_ref, _excluded);
8206
8331
  var dispatch = useDispatch();
8207
8332
  var mapId = React__default.useRef(id || webmapUtils.generateMapId()).current;
@@ -8334,12 +8459,13 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_ref) {
8334
8459
  initialBbox: initialBbox,
8335
8460
  shouldDisablePrefetching: shouldDisablePrefetching,
8336
8461
  tileServerSettings: tileServerSettings,
8462
+ featureStyle: featureStyle,
8337
8463
  children: children
8338
8464
  }), showClock && jsx(TimeSliderClockConnect, {
8339
8465
  mapId: mapId
8340
8466
  })]
8341
8467
  });
8342
- }, [mapId, title, id, initialBbox, mapControlConfig, tileServerSettings, disableTimeSlider, displayTimeInMap, shouldAutoFetch, shouldDisablePrefetching, children, showClock]);
8468
+ }, [mapId, title, id, initialBbox, mapControlConfig, tileServerSettings, disableTimeSlider, displayTimeInMap, shouldAutoFetch, shouldDisablePrefetching, children, showClock, featureStyle]);
8343
8469
  };
8344
8470
 
8345
8471
  var mapBoxStyle = function mapBoxStyle(theme) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/core",
3
- "version": "12.12.0",
3
+ "version": "13.0.0",
4
4
  "description": "GeoWeb Core library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -8,22 +8,22 @@
8
8
  "url": "git@gitlab.com:opengeoweb/opengeoweb.git"
9
9
  },
10
10
  "dependencies": {
11
- "@opengeoweb/shared": "12.12.0",
11
+ "@opengeoweb/shared": "13.0.0",
12
12
  "react-redux": "^9.2.0",
13
- "@opengeoweb/store": "12.12.0",
14
- "@opengeoweb/timeslider": "12.12.0",
13
+ "@opengeoweb/store": "13.0.0",
14
+ "@opengeoweb/time-slider": "13.0.0",
15
15
  "@reduxjs/toolkit": "^2.6.1",
16
- "@opengeoweb/webmap-react": "12.12.0",
17
- "@opengeoweb/webmap": "12.12.0",
18
- "@opengeoweb/theme": "12.12.0",
16
+ "@opengeoweb/webmap-react": "13.0.0",
17
+ "@opengeoweb/webmap": "13.0.0",
18
+ "@opengeoweb/theme": "13.0.0",
19
19
  "axios": "^1.7.7",
20
- "@opengeoweb/layer-select": "12.12.0",
20
+ "@opengeoweb/layer-select": "13.0.0",
21
21
  "lodash": "^4.17.21",
22
22
  "ol": "^10.4.0",
23
23
  "react-sortablejs": "^6.1.4",
24
24
  "sortablejs": "^1.15.1",
25
- "@mui/system": "^7.0.1",
26
- "@opengeoweb/snackbar": "12.12.0",
25
+ "@mui/system": "^7.3.2",
26
+ "@opengeoweb/snackbar": "13.0.0",
27
27
  "react-router-dom": "^6.21.0",
28
28
  "react-draggable": "^4.4.6",
29
29
  "i18next": "^25.0.1",
@@ -31,8 +31,8 @@
31
31
  "dompurify": "^3.0.6",
32
32
  "@mui/material": "^7.0.1",
33
33
  "@sentry/react": "^8.34.0",
34
- "@tanstack/react-query": "^5.69.2",
35
- "@opengeoweb/api": "12.12.0",
34
+ "@tanstack/react-query": "^5.85.5",
35
+ "@opengeoweb/api": "13.0.0",
36
36
  "@types/geojson": "^7946.0.14"
37
37
  },
38
38
  "peerDependencies": {
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { mapTypes, layerTypes } from '@opengeoweb/store';
3
3
  import { TileServerSettings } from '@opengeoweb/webmap';
4
+ import { StyleLike } from 'ol/style/Style';
4
5
  export declare const defaultBbox: {
5
6
  srs: "EPSG:3857";
6
7
  bbox: {
@@ -44,5 +45,6 @@ export interface ConfigurableMapConnectProps {
44
45
  children?: React.ReactNode;
45
46
  mapControls?: React.ReactNode;
46
47
  shouldDisablePrefetching?: boolean;
48
+ featureStyle?: StyleLike;
47
49
  }
48
50
  export declare const ConfigurableMapConnect: React.FC<ConfigurableMapConnectProps>;
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import { TimeAwareEDRLocationLayer } from '@opengeoweb/webmap-react';
3
+ import type { Meta } from '@storybook/react-webpack5';
4
+ declare const meta: Meta<typeof TimeAwareEDRLocationLayer>;
5
+ export default meta;
6
+ export declare const EDRLayerMultiParam: {
7
+ (): React.ReactElement;
8
+ parameters: {
9
+ msw: {
10
+ handlers: {
11
+ locations: import("msw").HttpHandler[];
12
+ };
13
+ };
14
+ };
15
+ };
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import { TimeAwareEDRLocationLayer } from '@opengeoweb/webmap-react';
3
+ import type { Meta } from '@storybook/react-webpack5';
4
+ declare const meta: Meta<typeof TimeAwareEDRLocationLayer>;
5
+ export default meta;
6
+ export declare const EDRLayerSymbols: {
7
+ (): React.ReactElement;
8
+ parameters: {
9
+ msw: {
10
+ handlers: {
11
+ locations: import("msw").HttpHandler[];
12
+ };
13
+ };
14
+ };
15
+ };
@@ -6,6 +6,7 @@ interface LayerRowUnstyledProps {
6
6
  layer?: layerTypes.Layer;
7
7
  layerName?: string;
8
8
  mapId: string;
9
+ isEDRLayer?: boolean;
9
10
  onLayerRowClick?: (layerId?: string) => void;
10
11
  onLayerEnable?: (payload: {
11
12
  layerId: string;
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+ import { EDRFeatureLayerOptions, LayerProps } from '@opengeoweb/webmap';
3
+ export interface RenderEDRLayersProps {
4
+ onChangeLayerOptions: (options: EDRFeatureLayerOptions) => void;
5
+ selectedParams: string[];
6
+ layers: LayerProps[];
7
+ layerName: string;
8
+ collectionId: string;
9
+ isEnabled?: boolean;
10
+ tooltipPrefix?: string;
11
+ skipLocalStyling?: boolean;
12
+ }
13
+ export declare const getRenderEDRLayersValues: (selectedParams: string[], layers: LayerProps[]) => {
14
+ currentValues: string[];
15
+ extendedLayers: LayerProps[];
16
+ };
17
+ declare const RenderEDRLayers: React.FC<RenderEDRLayersProps>;
18
+ export default RenderEDRLayers;
@@ -1,5 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { LayerProps } from '@opengeoweb/webmap';
3
+ import { i18n, TFunction } from 'i18next';
4
+ export declare const showNoLayers: (t: TFunction<"core", i18n>) => React.ReactElement;
3
5
  export interface RenderLayersProps {
4
6
  onChangeLayerName: (name: string) => void;
5
7
  layerName: string;
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ declare const _default: {
3
+ title: string;
4
+ component: React.FC<import("./OlMapViewConnect").OlMapViewConnectProps>;
5
+ tags: string[];
6
+ };
7
+ export default _default;
8
+ export declare const ToggleStyleAction: () => React.ReactElement;
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { Bbox, TileServerSettings } from '@opengeoweb/webmap';
3
3
  import { Source } from '@opengeoweb/shared';
4
+ import { StyleLike } from 'ol/style/Style';
4
5
  export interface MapControlsProps {
5
6
  mapControlsPositionTop?: number;
6
7
  search?: boolean;
@@ -24,6 +25,7 @@ export interface OlMapViewConnectProps {
24
25
  shouldDisablePrefetching?: boolean;
25
26
  tileServerSettings?: TileServerSettings;
26
27
  source?: Source;
28
+ featureStyle?: StyleLike;
27
29
  }
28
30
  /**
29
31
  * Connected component used to display the map and selected layers.
@@ -2,7 +2,7 @@ import { TimeSliderStartCenterEndTime } from '@opengeoweb/store';
2
2
  import { Dimension } from '@opengeoweb/webmap';
3
3
  import { MapLocation, OnInitializeLayerProps, TimeContextType, UpdateLayerInfoPayload } from '@opengeoweb/webmap-react';
4
4
  import { Feature, View } from 'ol';
5
- export declare const makePrefetchTimeSpan: (timeSliderStartCenterEndTime: TimeSliderStartCenterEndTime, animationStartTime: string | undefined, animationEndTime: string | undefined, isAnimating: boolean) => TimeContextType;
5
+ export declare const makePrefetchTimeSpan: (timeSliderStartCenterEndTime: TimeSliderStartCenterEndTime, isAnimating: boolean, prefetchList: number[]) => TimeContextType;
6
6
  export declare const makeLayerInfoPayload: (payload: OnInitializeLayerProps, mapDimensions: Dimension[], mapId: string) => UpdateLayerInfoPayload;
7
7
  export declare const getCenterOfLinkedFeature: (feature: Feature | undefined, srs: string) => MapLocation | null;
8
8
  interface UseFitAndHighlightWarningFeatureOptions {
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  export declare const useUpdateTimestep: (mapId: string) => void;
3
- export declare const useUpdateTimeSpan: (mapId: string, myOnSetTimeSliderSpan: (newSpan: number, newCenterTime: number, newSecondsPerPx: number) => void) => void;
3
+ export declare const useUpdateTimeSpan: (mapId: string, myOnSetTimeSliderSpan: (newSpan: number, newCenterTime: number) => void) => void;
4
4
  interface TimeSliderConnectProps {
5
5
  sourceId: string;
6
6
  mapId: string;
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  interface TimeSliderLegendConnectProps {
3
3
  mapId: string;
4
- onSetTimeSliderSpan?: (newSpan: number, newCenterTime: number, newSecondsPerPx: number) => void;
4
+ onSetTimeSliderSpan?: (newSpan: number, newCenterTime: number) => void;
5
5
  unfilteredSelectedTime: number;
6
6
  setUnfilteredSelectedTime: (unfilteredSelectedTime: number) => void;
7
7
  mapWindowRef?: React.MutableRefObject<HTMLElement | null>;
@@ -1,5 +1,5 @@
1
1
  import { mapTypes } from '@opengeoweb/store';
2
- import { TimeBounds } from '@opengeoweb/timeslider';
2
+ import { TimeBounds } from '@opengeoweb/time-slider';
3
3
  /**
4
4
  * Returns time bounds from the given dimension. If no time dimension given, current time is returned as default
5
5
  */