@opengeoweb/core 15.0.0 → 15.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.esm.js +403 -302
- package/package.json +10 -11
- package/src/lib/components/ComponentsLookUp/componentsLookUp.d.ts +8 -2
- package/src/lib/components/LayerInfoConnect/LayerInfoButtonConnect.d.ts +1 -0
- package/src/lib/components/MapViewConnect/MapViewConnect.DisplayClock.stories.d.ts +8 -0
- package/src/lib/components/MapViewConnect/olMapUtils.d.ts +2 -0
- package/src/lib/index.d.ts +0 -1
- package/src/lib/utils/defaultTestSettings.d.ts +3 -1
- package/src/lib/components/SentryRecordButton/SentryRecordButton.d.ts +0 -3
- package/src/lib/components/SentryRecordButton/SentryRecordButton.spec.d.ts +0 -1
- package/src/lib/components/SentryRecordButton/index.d.ts +0 -1
- package/src/lib/components/WMSLoader/WMSLoader.d.ts +0 -11
- package/src/lib/components/WMSLoader/WMSLoader.spec.d.ts +0 -1
- package/src/lib/components/WMSLoader/WMSLoader.stories.d.ts +0 -12
- package/src/lib/components/WMSLoader/WMSLoaderConnect.d.ts +0 -21
- /package/src/lib/components/{WMSLoader → LayerManager/AddLayersPopup}/WMSLayerTree/WMSLayerTree.d.ts +0 -0
- /package/src/lib/components/{WMSLoader → LayerManager/AddLayersPopup}/WMSLayerTree/WMSLayerTree.spec.d.ts +0 -0
- /package/src/lib/components/{WMSLoader → LayerManager/AddLayersPopup}/WMSLayerTree/WMSLayerTreeConnect.d.ts +0 -0
- /package/src/lib/components/{WMSLoader → LayerManager/AddLayersPopup}/WMSLayerTree/WMSLayerTreeConnect.spec.d.ts +0 -0
- /package/src/lib/components/{WMSLoader → LayerManager/AddLayersPopup}/WMSLayerTree/WMSLayerTreeHeader.d.ts +0 -0
- /package/src/lib/components/{WMSLoader → LayerManager/AddLayersPopup}/WMSServerList/WMSServerList.d.ts +0 -0
- /package/src/lib/components/{WMSLoader → LayerManager/AddLayersPopup}/WMSServerList/WMSServerList.spec.d.ts +0 -0
package/index.esm.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Grid, InputLabel, Paper, Box, Typography, CircularProgress, List, ListSubheader, ListItemButton, ListItemText, DialogContentText, TextField, InputAdornment, Button,
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { FormControl, MenuItem, Grid, InputLabel, Paper, Box, Typography, CircularProgress, List, ListSubheader, ListItemButton, ListItemText, DialogContentText, TextField, InputAdornment, Button, useTheme, Tooltip, ListItem, ListItemIcon, Checkbox, Popper, Fade, styled, LinearProgress, Autocomplete, Switch, Select } from '@mui/material';
|
|
3
3
|
import React, { useMemo, useState, useCallback, useEffect, useContext } from 'react';
|
|
4
|
-
import { safelyInitI18nForTestsAndStories, sharedTranslations, SHARED_NAMESPACE, CustomIconButton, CustomDialog,
|
|
5
|
-
import { queryWMSLayersTree, invalidateWMSGetCapabilities, LayerType,
|
|
6
|
-
import { filterLayers, mapSelectors, layerActions, layerTypes, layerSelectors, mapActions, mapEnums, loadingIndicatorSelectors, layerUtils, serviceSelectors, serviceActions, uiSelectors, uiTypes, useSetupDialog, getUserAddedServices, uiActions, drawingToolSelectors, syncGroupsSelectors, syncConstants, getViewObjectForSyncGroup, getViewObjectForMapId, loadingIndicatorActions, genericSelectors, genericActions, defaultLayers, getSingularDrawtoolDrawLayerId, syncGroupsSelector, syncGroupsActions, routerUtils, mapUtils } from '@opengeoweb/store';
|
|
7
|
-
import { connect, useDispatch, useSelector, useStore, Provider } from 'react-redux';
|
|
4
|
+
import { safelyInitI18nForTestsAndStories, sharedTranslations, SHARED_NAMESPACE, TooltipSelect, CustomIconButton, CustomDialog, CustomTooltip, ToggleMenu, AlertIcon, useConfirmationDialog, useScrollingInIsolation, sliderHeaderStyle, CustomSlider, tooltipContainerStyles, renderCounter, AlertBanner, CustomAccordion, PROJECTION, calculateStartSize, useWheelStopPropagation, ToolContainerDraggable, sessionStorageProvider, useDebounce, dateUtils, usePrevious } from '@opengeoweb/shared';
|
|
5
|
+
import { webmapUtils, queryWMSLayersTree, invalidateWMSGetCapabilities, LayerType, queryWMSServiceInfo, queryWMSLayers, getWMSServiceId, generateLayerId, WMJSDimension, getWMLayerById, getMapDimURL, handleDateUtilsISOString, WMLayer } from '@opengeoweb/webmap';
|
|
8
6
|
import _, { isEqual, isArray, range, zip, throttle } from 'lodash';
|
|
9
|
-
import {
|
|
7
|
+
import { useDispatch, useSelector, connect, useStore, Provider } from 'react-redux';
|
|
8
|
+
import { mapSelectors, layerSelectors, layerActions, layerTypes, filterLayers, mapActions, mapEnums, loadingIndicatorSelectors, layerUtils, serviceSelectors, serviceActions, uiSelectors, uiTypes, useSetupDialog, getUserAddedServices, uiActions, drawingToolSelectors, syncGroupsSelectors, syncConstants, getViewObjectForSyncGroup, getViewObjectForMapId, loadingIndicatorActions, genericSelectors, genericActions, defaultLayers, getSingularDrawtoolDrawLayerId, syncGroupsSelector, syncGroupsActions, routerUtils, mapUtils } from '@opengeoweb/store';
|
|
10
9
|
import i18n from 'i18next';
|
|
11
10
|
import { useTranslation, I18nextProvider } from 'react-i18next';
|
|
12
|
-
import { TIME_SLIDER_NAMESPACE, timesliderTranslations, defaultTimeSpan, AutoUpdateButton, BackwardForwardStepButton, NowButton, handleSetNowEvent, AnimationLengthButton, AnimationLength, SpeedButton, TimeSpanButton, secondsPerPxFromCanvasWidth, getNewCenterOfFixedPointZoom, TimeStepButton, OptionsMenuButton, PlayButton, defaultTimeStep, TimeSliderButtons, TimeSliderCurrentTimeBox, TimeSliderLegend, onsetNewDateDebounced, defaultSecondsPerPx, moveSelectedTimePx, TimeSlider
|
|
11
|
+
import { TIME_SLIDER_NAMESPACE, timesliderTranslations, defaultTimeSpan, AutoUpdateButton, BackwardForwardStepButton, NowButton, handleSetNowEvent, AnimationLengthButton, AnimationLength, SpeedButton, TimeSpanButton, secondsPerPxFromCanvasWidth, getNewCenterOfFixedPointZoom, TimeStepButton, OptionsMenuButton, PlayButton, defaultTimeStep, TimeSliderButtons, TimeSliderCurrentTimeBox, TimeSliderLegend, onsetNewDateDebounced, getFilteredTime, defaultSecondsPerPx, moveSelectedTimePx, TimeSlider } from '@opengeoweb/time-slider';
|
|
13
12
|
import { webmapReactTranslations, WEBMAP_REACT_NAMESPACE, webmapTranslations, WEBMAP_NAMESPACE, openLayersGetMapImageStore, LayerInfoButton, useEDRGetCollectionDetails, defaultEdrStyles, LayerInfoDialog, MapControlButton, MapDimensionSelect, dimensionConfig, DimensionSelectDialog, DimensionSelectButton, Clock, LegendDialog, LegendButton, MapContext, emptyGeoJSON, MapFeatureClass, setMapCenter, OpenLayersFeatureLayer, OpenLayersMapDraw, makeTimeList, useGetWMLayerInstance, getIsInsideAcceptanceTime, OpenLayersLayer, MapMeasure, useSetIntervalWhenVisible, TimeContext, OpenLayersMapView, WMSLayer, genericOpenLayersFeatureStyle, OpenLayersGetFeatureInfo, MapControls, OpenLayersZoomControl, getLayerUpdateInfo, publicLayers } from '@opengeoweb/webmap-react';
|
|
13
|
+
import { Cached, Add, MapAdd, CollapseSmall, CollapseMedium, CollapseLarge, CollapseWindow, ExpandWindow, LayersAdd, CloudLoading, ColumnCollapsed, ColumnCollapse, DragHandle as DragHandle$1, None, FastForward, AutoUpdateActive, Both, Delete, Visibility, VisibilityOff, Copy, Overlayers, WorldMapProjection, Layers, Search, Exclamation, MyLocation, Airplane, Region, Pinned, Close, ExitDomain, LocationInfo, Measure, Options, Info, ThemeWrapper, lightTheme, FlagBritain, FlagNetherlands, FlagFinland, FlagNorway } from '@opengeoweb/theme';
|
|
14
14
|
import { ReactSortable } from 'react-sortablejs';
|
|
15
15
|
import Sortable from 'sortablejs';
|
|
16
|
-
import { Box as Box$1, Stack
|
|
16
|
+
import { Box as Box$1, Stack } from '@mui/system';
|
|
17
17
|
import { LayerSelectButtonConnect, LayerSelectConnect, DataExplorerButtonConnect } from '@opengeoweb/layer-select';
|
|
18
18
|
import { unByKey } from 'ol/Observable';
|
|
19
19
|
import { useQuery, QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
@@ -28,7 +28,6 @@ import { ImageWMS } from 'ol/source';
|
|
|
28
28
|
import DOMPurify from 'dompurify';
|
|
29
29
|
import { snackbarTypes, snackbarActions, SnackbarWrapperConnect } from '@opengeoweb/snackbar';
|
|
30
30
|
import { useNavigate } from 'react-router-dom';
|
|
31
|
-
import { getReplay } from '@sentry/react';
|
|
32
31
|
import { http, HttpResponse, passthrough } from 'msw';
|
|
33
32
|
import Button$1 from '@mui/material/Button';
|
|
34
33
|
import ButtonGroup from '@mui/material/ButtonGroup';
|
|
@@ -104,8 +103,6 @@ var en = {
|
|
|
104
103
|
"syncgroups-add-group": "Add new group to list",
|
|
105
104
|
"syncgroups-remove-group": "Remove group from list",
|
|
106
105
|
"actions-close": "Close",
|
|
107
|
-
"sentry-start-recording": "Start Recording",
|
|
108
|
-
"sentry-stop-recording": "Stop Recording",
|
|
109
106
|
"layermanager-acceptance-time-within": "Layer: within the data acceptance window",
|
|
110
107
|
"layermanager-acceptance-time-outside": "Layer: out of date",
|
|
111
108
|
"layermanager-acceptance-time-updated": "Layer: updated",
|
|
@@ -131,7 +128,8 @@ var en = {
|
|
|
131
128
|
"delete-dialog-cancel": "Cancel",
|
|
132
129
|
"delete-dialog-confirm": "Delete",
|
|
133
130
|
"map-options-button": "Location or Measuring tool",
|
|
134
|
-
"map-measure-tool": "Measuring tool"
|
|
131
|
+
"map-measure-tool": "Measuring tool",
|
|
132
|
+
"data-outdated": "Outdated data"
|
|
135
133
|
};
|
|
136
134
|
var fi = {
|
|
137
135
|
feature_info_title: "Napsauta karttaa nähdäksesi lisätietoja.",
|
|
@@ -198,8 +196,6 @@ var fi = {
|
|
|
198
196
|
"syncgroups-add-group": "Lisää uusi ryhmä listaan",
|
|
199
197
|
"syncgroups-remove-group": "Poista ryhmä listasta",
|
|
200
198
|
"actions-close": "Sulje",
|
|
201
|
-
"sentry-start-recording": "Aloita tallennus",
|
|
202
|
-
"sentry-stop-recording": "Pysäytä tallennus",
|
|
203
199
|
"layermanager-acceptance-time-within": "Karttataso: on tietojen hyväksymisrajojen sisäpuolella",
|
|
204
200
|
"layermanager-acceptance-time-outside": "Karttataso: on vanhentunut",
|
|
205
201
|
"layermanager-acceptance-time-updated": "Karttataso: on päivitetty",
|
|
@@ -285,8 +281,6 @@ var no = {
|
|
|
285
281
|
"syncgroups-add-group": "Legg til ny gruppe til listen",
|
|
286
282
|
"syncgroups-remove-group": "Fjern gruppen fra listen",
|
|
287
283
|
"actions-close": "Lukk",
|
|
288
|
-
"sentry-start-recording": "Start opptak",
|
|
289
|
-
"sentry-stop-recording": "Stopp opptak",
|
|
290
284
|
"layermanager-acceptance-time-within": "Lag: innenfor akseptabelt tidsvundu",
|
|
291
285
|
"layermanager-acceptance-time-outside": "Lag: utenfor akseptabelt tidsvundu",
|
|
292
286
|
"layermanager-acceptance-time-updated": "Lag: oppdatert",
|
|
@@ -372,8 +366,6 @@ var nl = {
|
|
|
372
366
|
"syncgroups-add-group": "Groep toevoegen",
|
|
373
367
|
"syncgroups-remove-group": "Groep verwijderen",
|
|
374
368
|
"actions-close": "Sluiten",
|
|
375
|
-
"sentry-start-recording": "Start opname",
|
|
376
|
-
"sentry-stop-recording": "Stop opname",
|
|
377
369
|
"layermanager-acceptance-time-within": "Laag: binnen de data acceptatie norm",
|
|
378
370
|
"layermanager-acceptance-time-outside": "Laag: verouderd",
|
|
379
371
|
"layermanager-acceptance-time-updated": "Laag: bijgewerkt",
|
|
@@ -398,7 +390,8 @@ var nl = {
|
|
|
398
390
|
"delete-dialog-cancel": "Annuleren",
|
|
399
391
|
"delete-dialog-confirm": "Verwijderen",
|
|
400
392
|
"map-options-button": "Locatie informatie en Meten",
|
|
401
|
-
"map-measure-tool": "Meten"
|
|
393
|
+
"map-measure-tool": "Meten",
|
|
394
|
+
"data-outdated": "Data is niet actueel"
|
|
402
395
|
};
|
|
403
396
|
var coreTranslations = {
|
|
404
397
|
en: en,
|
|
@@ -717,6 +710,192 @@ function _regeneratorRuntime() {
|
|
|
717
710
|
})();
|
|
718
711
|
}
|
|
719
712
|
|
|
713
|
+
/* *
|
|
714
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
715
|
+
* you may not use this file except in compliance with the License.
|
|
716
|
+
* You may obtain a copy of the License at
|
|
717
|
+
*
|
|
718
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
719
|
+
*
|
|
720
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
721
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
722
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
723
|
+
* See the License for the specific language governing permissions and
|
|
724
|
+
* limitations under the License.
|
|
725
|
+
*
|
|
726
|
+
* Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
|
|
727
|
+
* Copyright 2023 - Finnish Meteorological Institute (FMI)
|
|
728
|
+
* Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
|
|
729
|
+
* */
|
|
730
|
+
var CORE_NAMESPACE = 'core';
|
|
731
|
+
var initCoreReactI18n = function initCoreReactI18n() {
|
|
732
|
+
safelyInitI18nForTestsAndStories(i18n, CORE_NAMESPACE, [{
|
|
733
|
+
ns: CORE_NAMESPACE,
|
|
734
|
+
translations: coreTranslations
|
|
735
|
+
}, {
|
|
736
|
+
ns: WEBMAP_REACT_NAMESPACE,
|
|
737
|
+
translations: webmapReactTranslations
|
|
738
|
+
}, {
|
|
739
|
+
ns: WEBMAP_NAMESPACE,
|
|
740
|
+
translations: webmapTranslations
|
|
741
|
+
}, {
|
|
742
|
+
ns: SHARED_NAMESPACE,
|
|
743
|
+
translations: sharedTranslations
|
|
744
|
+
}, {
|
|
745
|
+
ns: TIME_SLIDER_NAMESPACE,
|
|
746
|
+
translations: timesliderTranslations
|
|
747
|
+
}]);
|
|
748
|
+
};
|
|
749
|
+
var ns = [CORE_NAMESPACE, TIME_SLIDER_NAMESPACE];
|
|
750
|
+
var useCoreTranslation = function useCoreTranslation() {
|
|
751
|
+
return useTranslation(ns);
|
|
752
|
+
};
|
|
753
|
+
|
|
754
|
+
var BaseLayers = function BaseLayers(_ref) {
|
|
755
|
+
var _availableBaseLayers$;
|
|
756
|
+
var selectedBaseLayers = _ref.selectedBaseLayers,
|
|
757
|
+
availableBaseLayers = _ref.availableBaseLayers,
|
|
758
|
+
onChangeBaseLayers = _ref.onChangeBaseLayers,
|
|
759
|
+
icon = _ref.icon,
|
|
760
|
+
tooltipPrefix = _ref.tooltipPrefix;
|
|
761
|
+
var _useCoreTranslation = useCoreTranslation(),
|
|
762
|
+
t = _useCoreTranslation.t;
|
|
763
|
+
if (!(availableBaseLayers != null && availableBaseLayers.length)) {
|
|
764
|
+
return jsx("div", {
|
|
765
|
+
children: t('layermanager-baselayers-no-available')
|
|
766
|
+
});
|
|
767
|
+
}
|
|
768
|
+
var nonEmptyTooltipPrefix = tooltipPrefix != null ? tooltipPrefix : t('layermanager-layer') + ": ";
|
|
769
|
+
var selectedBaseLayerId = typeof selectedBaseLayers[0] !== 'undefined' ? selectedBaseLayers[0].id : '';
|
|
770
|
+
var list = availableBaseLayers.map(function (layer) {
|
|
771
|
+
return {
|
|
772
|
+
value: layer.id
|
|
773
|
+
};
|
|
774
|
+
});
|
|
775
|
+
var currentIndex = availableBaseLayers.findIndex(function (layer) {
|
|
776
|
+
return selectedBaseLayerId === layer.id;
|
|
777
|
+
});
|
|
778
|
+
return jsx(FormControl, {
|
|
779
|
+
style: {
|
|
780
|
+
width: '100%'
|
|
781
|
+
},
|
|
782
|
+
children: jsxs(TooltipSelect, {
|
|
783
|
+
IconComponent: icon,
|
|
784
|
+
currentIndex: currentIndex,
|
|
785
|
+
disableUnderline: true,
|
|
786
|
+
inputProps: {
|
|
787
|
+
SelectDisplayProps: {
|
|
788
|
+
'data-testid': 'selectBaseLayer'
|
|
789
|
+
}
|
|
790
|
+
},
|
|
791
|
+
isEnabled: true,
|
|
792
|
+
list: list,
|
|
793
|
+
onChange: function onChange(event) {
|
|
794
|
+
onChangeBaseLayers(event.target.value);
|
|
795
|
+
},
|
|
796
|
+
onChangeMouseWheel: function onChangeMouseWheel(e) {
|
|
797
|
+
return onChangeBaseLayers(e.value);
|
|
798
|
+
},
|
|
799
|
+
style: {
|
|
800
|
+
maxWidth: '100%'
|
|
801
|
+
},
|
|
802
|
+
tooltip: "" + nonEmptyTooltipPrefix + ((_availableBaseLayers$ = availableBaseLayers[currentIndex]) == null ? void 0 : _availableBaseLayers$.name),
|
|
803
|
+
value: selectedBaseLayerId,
|
|
804
|
+
children: [jsx(MenuItem, {
|
|
805
|
+
disabled: true,
|
|
806
|
+
children: t('layermanager-baselayers-title')
|
|
807
|
+
}), availableBaseLayers.map(function (baseLayer) {
|
|
808
|
+
return jsx(MenuItem, {
|
|
809
|
+
value: baseLayer.id,
|
|
810
|
+
children: baseLayer.name
|
|
811
|
+
}, baseLayer.id);
|
|
812
|
+
})]
|
|
813
|
+
})
|
|
814
|
+
});
|
|
815
|
+
};
|
|
816
|
+
|
|
817
|
+
// Generate a layer id for an available baselayer to ensure same available baselayers have unique id's in case of multiple maps
|
|
818
|
+
// If already in selectedBaseLayers based on name or id, keep current id
|
|
819
|
+
var constructLayerId = function constructLayerId(baseLayer, selectedBaseLayers) {
|
|
820
|
+
var foundLayer = selectedBaseLayers.find(function (selectedBaseLayer) {
|
|
821
|
+
return (baseLayer == null ? void 0 : baseLayer.id) === (selectedBaseLayer == null ? void 0 : selectedBaseLayer.id) || baseLayer.name === selectedBaseLayer.name;
|
|
822
|
+
});
|
|
823
|
+
return foundLayer ? foundLayer.id : webmapUtils.generateLayerId();
|
|
824
|
+
};
|
|
825
|
+
var constructListAvailableBaseLayers = function constructListAvailableBaseLayers(selectedBaseLayers, preloadedAvailableBaseLayers, mapId) {
|
|
826
|
+
// Ensure we use unique id's for the base layers - excepting the ones that are currently selected, reuse the existing ids
|
|
827
|
+
// Add mapId of map these available base layers are added for
|
|
828
|
+
var baseLayersWithMapId = preloadedAvailableBaseLayers.map(function (baseLayer) {
|
|
829
|
+
var layerId = constructLayerId(baseLayer, selectedBaseLayers);
|
|
830
|
+
return Object.assign({}, baseLayer, {
|
|
831
|
+
mapId: mapId,
|
|
832
|
+
id: layerId
|
|
833
|
+
});
|
|
834
|
+
});
|
|
835
|
+
// Ensure that current selected baselayer(s) are in the baseLayersWithMapId array, otherwise add them
|
|
836
|
+
return selectedBaseLayers.reduce(function (list, selectedBaseLayer) {
|
|
837
|
+
var foundLayer = baseLayersWithMapId.find(function (layer) {
|
|
838
|
+
return layer.id === (selectedBaseLayer == null ? void 0 : selectedBaseLayer.id);
|
|
839
|
+
});
|
|
840
|
+
if (foundLayer) {
|
|
841
|
+
return list;
|
|
842
|
+
}
|
|
843
|
+
return list.concat(Object.assign({}, selectedBaseLayer, {
|
|
844
|
+
mapId: mapId
|
|
845
|
+
}));
|
|
846
|
+
}, baseLayersWithMapId);
|
|
847
|
+
};
|
|
848
|
+
var areAvailableBaseLayersSame = function areAvailableBaseLayersSame(availableBaseLayerList, newBaseLayerList) {
|
|
849
|
+
var availableList = availableBaseLayerList.map(function (layer) {
|
|
850
|
+
return layer.name;
|
|
851
|
+
});
|
|
852
|
+
var newList = newBaseLayerList.map(function (layer) {
|
|
853
|
+
return layer.name;
|
|
854
|
+
});
|
|
855
|
+
return isEqual(availableList, newList);
|
|
856
|
+
};
|
|
857
|
+
var BaseLayersConnect = function BaseLayersConnect(_ref) {
|
|
858
|
+
var mapId = _ref.mapId,
|
|
859
|
+
preloadedAvailableBaseLayers = _ref.preloadedAvailableBaseLayers,
|
|
860
|
+
tooltipPrefix = _ref.tooltipPrefix,
|
|
861
|
+
icon = _ref.icon;
|
|
862
|
+
var dispatch = useDispatch();
|
|
863
|
+
var selectedBaseLayers = useSelector(function (store) {
|
|
864
|
+
return mapSelectors.getMapBaseLayers(store, mapId);
|
|
865
|
+
});
|
|
866
|
+
var currentAvailableBaseLayers = useSelector(function (store) {
|
|
867
|
+
return layerSelectors.getAvailableBaseLayersForMap(store, mapId);
|
|
868
|
+
});
|
|
869
|
+
React.useEffect(function () {
|
|
870
|
+
var availableBaseLayersToBeAdded = constructListAvailableBaseLayers(selectedBaseLayers, preloadedAvailableBaseLayers, mapId);
|
|
871
|
+
var areBaseLayersSame = areAvailableBaseLayersSame(availableBaseLayersToBeAdded, currentAvailableBaseLayers);
|
|
872
|
+
if (!areBaseLayersSame) {
|
|
873
|
+
dispatch(layerActions.setAvailableBaseLayers({
|
|
874
|
+
layers: availableBaseLayersToBeAdded,
|
|
875
|
+
mapId: mapId
|
|
876
|
+
}));
|
|
877
|
+
}
|
|
878
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
879
|
+
}, [mapId, preloadedAvailableBaseLayers]);
|
|
880
|
+
var onChangeBaseLayers = function onChangeBaseLayers(newSelectedLayerId) {
|
|
881
|
+
var newBaseLayer = currentAvailableBaseLayers.filter(function (layer) {
|
|
882
|
+
return layer.id === newSelectedLayerId;
|
|
883
|
+
});
|
|
884
|
+
dispatch(layerActions.setBaseLayers({
|
|
885
|
+
mapId: mapId,
|
|
886
|
+
layers: newBaseLayer,
|
|
887
|
+
origin: layerTypes.LayerActionOrigin.layerManager
|
|
888
|
+
}));
|
|
889
|
+
};
|
|
890
|
+
return jsx(BaseLayers, {
|
|
891
|
+
availableBaseLayers: currentAvailableBaseLayers,
|
|
892
|
+
icon: icon,
|
|
893
|
+
onChangeBaseLayers: onChangeBaseLayers,
|
|
894
|
+
selectedBaseLayers: selectedBaseLayers,
|
|
895
|
+
tooltipPrefix: tooltipPrefix
|
|
896
|
+
});
|
|
897
|
+
};
|
|
898
|
+
|
|
720
899
|
var preset = {
|
|
721
900
|
presetType: "mapPreset",
|
|
722
901
|
presetId: "mapPreset-1",
|
|
@@ -937,47 +1116,6 @@ var defaultConfigurations = /*#__PURE__*/Object.freeze({
|
|
|
937
1116
|
preloadedDefaultMapServices: preloadedDefaultMapServices
|
|
938
1117
|
});
|
|
939
1118
|
|
|
940
|
-
/* *
|
|
941
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
942
|
-
* you may not use this file except in compliance with the License.
|
|
943
|
-
* You may obtain a copy of the License at
|
|
944
|
-
*
|
|
945
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
946
|
-
*
|
|
947
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
948
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
949
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
950
|
-
* See the License for the specific language governing permissions and
|
|
951
|
-
* limitations under the License.
|
|
952
|
-
*
|
|
953
|
-
* Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
|
|
954
|
-
* Copyright 2023 - Finnish Meteorological Institute (FMI)
|
|
955
|
-
* Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
|
|
956
|
-
* */
|
|
957
|
-
var CORE_NAMESPACE = 'core';
|
|
958
|
-
var initCoreReactI18n = function initCoreReactI18n() {
|
|
959
|
-
safelyInitI18nForTestsAndStories(i18n, CORE_NAMESPACE, [{
|
|
960
|
-
ns: CORE_NAMESPACE,
|
|
961
|
-
translations: coreTranslations
|
|
962
|
-
}, {
|
|
963
|
-
ns: WEBMAP_REACT_NAMESPACE,
|
|
964
|
-
translations: webmapReactTranslations
|
|
965
|
-
}, {
|
|
966
|
-
ns: WEBMAP_NAMESPACE,
|
|
967
|
-
translations: webmapTranslations
|
|
968
|
-
}, {
|
|
969
|
-
ns: SHARED_NAMESPACE,
|
|
970
|
-
translations: sharedTranslations
|
|
971
|
-
}, {
|
|
972
|
-
ns: TIME_SLIDER_NAMESPACE,
|
|
973
|
-
translations: timesliderTranslations
|
|
974
|
-
}]);
|
|
975
|
-
};
|
|
976
|
-
var ns = [CORE_NAMESPACE, TIME_SLIDER_NAMESPACE];
|
|
977
|
-
var useCoreTranslation = function useCoreTranslation() {
|
|
978
|
-
return useTranslation(ns);
|
|
979
|
-
};
|
|
980
|
-
|
|
981
1119
|
var WMSLayerTreeHeader = function WMSLayerTreeHeader(_ref) {
|
|
982
1120
|
var serviceName = _ref.serviceName,
|
|
983
1121
|
onClickReload = _ref.onClickReload;
|
|
@@ -1827,151 +1965,6 @@ var returnCorrectSize = function returnCorrectSize(sizeResult) {
|
|
|
1827
1965
|
return sizeSmall;
|
|
1828
1966
|
};
|
|
1829
1967
|
|
|
1830
|
-
var BaseLayers = function BaseLayers(_ref) {
|
|
1831
|
-
var _availableBaseLayers$;
|
|
1832
|
-
var selectedBaseLayers = _ref.selectedBaseLayers,
|
|
1833
|
-
availableBaseLayers = _ref.availableBaseLayers,
|
|
1834
|
-
onChangeBaseLayers = _ref.onChangeBaseLayers,
|
|
1835
|
-
icon = _ref.icon,
|
|
1836
|
-
tooltipPrefix = _ref.tooltipPrefix;
|
|
1837
|
-
var _useCoreTranslation = useCoreTranslation(),
|
|
1838
|
-
t = _useCoreTranslation.t;
|
|
1839
|
-
if (!(availableBaseLayers != null && availableBaseLayers.length)) {
|
|
1840
|
-
return jsx("div", {
|
|
1841
|
-
children: t('layermanager-baselayers-no-available')
|
|
1842
|
-
});
|
|
1843
|
-
}
|
|
1844
|
-
var nonEmptyTooltipPrefix = tooltipPrefix != null ? tooltipPrefix : t('layermanager-layer') + ": ";
|
|
1845
|
-
var selectedBaseLayerId = typeof selectedBaseLayers[0] !== 'undefined' ? selectedBaseLayers[0].id : '';
|
|
1846
|
-
var list = availableBaseLayers.map(function (layer) {
|
|
1847
|
-
return {
|
|
1848
|
-
value: layer.id
|
|
1849
|
-
};
|
|
1850
|
-
});
|
|
1851
|
-
var currentIndex = availableBaseLayers.findIndex(function (layer) {
|
|
1852
|
-
return selectedBaseLayerId === layer.id;
|
|
1853
|
-
});
|
|
1854
|
-
return jsx(FormControl, {
|
|
1855
|
-
style: {
|
|
1856
|
-
width: '100%'
|
|
1857
|
-
},
|
|
1858
|
-
children: jsxs(TooltipSelect, {
|
|
1859
|
-
IconComponent: icon,
|
|
1860
|
-
currentIndex: currentIndex,
|
|
1861
|
-
disableUnderline: true,
|
|
1862
|
-
inputProps: {
|
|
1863
|
-
SelectDisplayProps: {
|
|
1864
|
-
'data-testid': 'selectBaseLayer'
|
|
1865
|
-
}
|
|
1866
|
-
},
|
|
1867
|
-
isEnabled: true,
|
|
1868
|
-
list: list,
|
|
1869
|
-
onChange: function onChange(event) {
|
|
1870
|
-
onChangeBaseLayers(event.target.value);
|
|
1871
|
-
},
|
|
1872
|
-
onChangeMouseWheel: function onChangeMouseWheel(e) {
|
|
1873
|
-
return onChangeBaseLayers(e.value);
|
|
1874
|
-
},
|
|
1875
|
-
style: {
|
|
1876
|
-
maxWidth: '100%'
|
|
1877
|
-
},
|
|
1878
|
-
tooltip: "" + nonEmptyTooltipPrefix + ((_availableBaseLayers$ = availableBaseLayers[currentIndex]) == null ? void 0 : _availableBaseLayers$.name),
|
|
1879
|
-
value: selectedBaseLayerId,
|
|
1880
|
-
children: [jsx(MenuItem, {
|
|
1881
|
-
disabled: true,
|
|
1882
|
-
children: t('layermanager-baselayers-title')
|
|
1883
|
-
}), availableBaseLayers.map(function (baseLayer) {
|
|
1884
|
-
return jsx(MenuItem, {
|
|
1885
|
-
value: baseLayer.id,
|
|
1886
|
-
children: baseLayer.name
|
|
1887
|
-
}, baseLayer.id);
|
|
1888
|
-
})]
|
|
1889
|
-
})
|
|
1890
|
-
});
|
|
1891
|
-
};
|
|
1892
|
-
|
|
1893
|
-
// Generate a layer id for an available baselayer to ensure same available baselayers have unique id's in case of multiple maps
|
|
1894
|
-
// If already in selectedBaseLayers based on name or id, keep current id
|
|
1895
|
-
var constructLayerId = function constructLayerId(baseLayer, selectedBaseLayers) {
|
|
1896
|
-
var foundLayer = selectedBaseLayers.find(function (selectedBaseLayer) {
|
|
1897
|
-
return (baseLayer == null ? void 0 : baseLayer.id) === (selectedBaseLayer == null ? void 0 : selectedBaseLayer.id) || baseLayer.name === selectedBaseLayer.name;
|
|
1898
|
-
});
|
|
1899
|
-
return foundLayer ? foundLayer.id : webmapUtils.generateLayerId();
|
|
1900
|
-
};
|
|
1901
|
-
var constructListAvailableBaseLayers = function constructListAvailableBaseLayers(selectedBaseLayers, preloadedAvailableBaseLayers, mapId) {
|
|
1902
|
-
// Ensure we use unique id's for the base layers - excepting the ones that are currently selected, reuse the existing ids
|
|
1903
|
-
// Add mapId of map these available base layers are added for
|
|
1904
|
-
var baseLayersWithMapId = preloadedAvailableBaseLayers.map(function (baseLayer) {
|
|
1905
|
-
var layerId = constructLayerId(baseLayer, selectedBaseLayers);
|
|
1906
|
-
return Object.assign({}, baseLayer, {
|
|
1907
|
-
mapId: mapId,
|
|
1908
|
-
id: layerId
|
|
1909
|
-
});
|
|
1910
|
-
});
|
|
1911
|
-
// Ensure that current selected baselayer(s) are in the baseLayersWithMapId array, otherwise add them
|
|
1912
|
-
return selectedBaseLayers.reduce(function (list, selectedBaseLayer) {
|
|
1913
|
-
var foundLayer = baseLayersWithMapId.find(function (layer) {
|
|
1914
|
-
return layer.id === (selectedBaseLayer == null ? void 0 : selectedBaseLayer.id);
|
|
1915
|
-
});
|
|
1916
|
-
if (foundLayer) {
|
|
1917
|
-
return list;
|
|
1918
|
-
}
|
|
1919
|
-
return list.concat(Object.assign({}, selectedBaseLayer, {
|
|
1920
|
-
mapId: mapId
|
|
1921
|
-
}));
|
|
1922
|
-
}, baseLayersWithMapId);
|
|
1923
|
-
};
|
|
1924
|
-
var areAvailableBaseLayersSame = function areAvailableBaseLayersSame(availableBaseLayerList, newBaseLayerList) {
|
|
1925
|
-
var availableList = availableBaseLayerList.map(function (layer) {
|
|
1926
|
-
return layer.name;
|
|
1927
|
-
});
|
|
1928
|
-
var newList = newBaseLayerList.map(function (layer) {
|
|
1929
|
-
return layer.name;
|
|
1930
|
-
});
|
|
1931
|
-
return isEqual(availableList, newList);
|
|
1932
|
-
};
|
|
1933
|
-
var BaseLayersConnect = function BaseLayersConnect(_ref) {
|
|
1934
|
-
var mapId = _ref.mapId,
|
|
1935
|
-
preloadedAvailableBaseLayers = _ref.preloadedAvailableBaseLayers,
|
|
1936
|
-
tooltipPrefix = _ref.tooltipPrefix,
|
|
1937
|
-
icon = _ref.icon;
|
|
1938
|
-
var dispatch = useDispatch();
|
|
1939
|
-
var selectedBaseLayers = useSelector(function (store) {
|
|
1940
|
-
return mapSelectors.getMapBaseLayers(store, mapId);
|
|
1941
|
-
});
|
|
1942
|
-
var currentAvailableBaseLayers = useSelector(function (store) {
|
|
1943
|
-
return layerSelectors.getAvailableBaseLayersForMap(store, mapId);
|
|
1944
|
-
});
|
|
1945
|
-
React.useEffect(function () {
|
|
1946
|
-
var availableBaseLayersToBeAdded = constructListAvailableBaseLayers(selectedBaseLayers, preloadedAvailableBaseLayers, mapId);
|
|
1947
|
-
var areBaseLayersSame = areAvailableBaseLayersSame(availableBaseLayersToBeAdded, currentAvailableBaseLayers);
|
|
1948
|
-
if (!areBaseLayersSame) {
|
|
1949
|
-
dispatch(layerActions.setAvailableBaseLayers({
|
|
1950
|
-
layers: availableBaseLayersToBeAdded,
|
|
1951
|
-
mapId: mapId
|
|
1952
|
-
}));
|
|
1953
|
-
}
|
|
1954
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1955
|
-
}, [mapId, preloadedAvailableBaseLayers]);
|
|
1956
|
-
var onChangeBaseLayers = function onChangeBaseLayers(newSelectedLayerId) {
|
|
1957
|
-
var newBaseLayer = currentAvailableBaseLayers.filter(function (layer) {
|
|
1958
|
-
return layer.id === newSelectedLayerId;
|
|
1959
|
-
});
|
|
1960
|
-
dispatch(layerActions.setBaseLayers({
|
|
1961
|
-
mapId: mapId,
|
|
1962
|
-
layers: newBaseLayer,
|
|
1963
|
-
origin: layerTypes.LayerActionOrigin.layerManager
|
|
1964
|
-
}));
|
|
1965
|
-
};
|
|
1966
|
-
return jsx(BaseLayers, {
|
|
1967
|
-
availableBaseLayers: currentAvailableBaseLayers,
|
|
1968
|
-
icon: icon,
|
|
1969
|
-
onChangeBaseLayers: onChangeBaseLayers,
|
|
1970
|
-
selectedBaseLayers: selectedBaseLayers,
|
|
1971
|
-
tooltipPrefix: tooltipPrefix
|
|
1972
|
-
});
|
|
1973
|
-
};
|
|
1974
|
-
|
|
1975
1968
|
var _excluded$6 = ["mapId", "preloadedAvailableBaseLayers", "preloadedServices", "tooltip", "settings"];
|
|
1976
1969
|
var _onRenderTree = function onRenderTree(_ref) {
|
|
1977
1970
|
var service = _ref.service,
|
|
@@ -2257,6 +2250,12 @@ var AcceptanceTime = function AcceptanceTime(_ref) {
|
|
|
2257
2250
|
}, {
|
|
2258
2251
|
value: '10',
|
|
2259
2252
|
text: '00:10'
|
|
2253
|
+
}, {
|
|
2254
|
+
value: '15',
|
|
2255
|
+
text: '00:15'
|
|
2256
|
+
}, {
|
|
2257
|
+
value: '20',
|
|
2258
|
+
text: '00:20'
|
|
2260
2259
|
}, {
|
|
2261
2260
|
value: '30',
|
|
2262
2261
|
text: '00:30'
|
|
@@ -4789,6 +4788,7 @@ var LayerInfoButtonConnect = function LayerInfoButtonConnect(_ref) {
|
|
|
4789
4788
|
mapId = _ref.mapId,
|
|
4790
4789
|
serviceUrl = _ref.serviceUrl,
|
|
4791
4790
|
layerName = _ref.layerName,
|
|
4791
|
+
layerId = _ref.layerId,
|
|
4792
4792
|
_ref$source = _ref.source,
|
|
4793
4793
|
source = _ref$source === void 0 ? 'app' : _ref$source;
|
|
4794
4794
|
var dispatch = useDispatch();
|
|
@@ -4798,6 +4798,9 @@ var LayerInfoButtonConnect = function LayerInfoButtonConnect(_ref) {
|
|
|
4798
4798
|
var currentLayerInfo = useSelector(function (store) {
|
|
4799
4799
|
return layerSelectors.getActiveLayerInfo(store);
|
|
4800
4800
|
});
|
|
4801
|
+
var currentLayerStyle = useSelector(function (store) {
|
|
4802
|
+
return layerSelectors.getLayerStyle(store, layerId);
|
|
4803
|
+
});
|
|
4801
4804
|
var isActive = layerName === (currentLayerInfo == null ? void 0 : currentLayerInfo.layerName) && serviceUrl === (currentLayerInfo == null ? void 0 : currentLayerInfo.serviceUrl) && isOpenInStore;
|
|
4802
4805
|
var onClick = function onClick() {
|
|
4803
4806
|
if (!isActive) {
|
|
@@ -4805,7 +4808,8 @@ var LayerInfoButtonConnect = function LayerInfoButtonConnect(_ref) {
|
|
|
4805
4808
|
layerName: layerName,
|
|
4806
4809
|
serviceUrl: serviceUrl,
|
|
4807
4810
|
source: source,
|
|
4808
|
-
mapId: mapId
|
|
4811
|
+
mapId: mapId,
|
|
4812
|
+
style: currentLayerStyle
|
|
4809
4813
|
}));
|
|
4810
4814
|
} else {
|
|
4811
4815
|
dispatch(layerActions.hideLayerInfo());
|
|
@@ -4843,6 +4847,7 @@ var LayerInfoDialogConnect = function LayerInfoDialogConnect(_ref) {
|
|
|
4843
4847
|
onClose: onCloseDialog,
|
|
4844
4848
|
onMouseDown: setDialogOrder,
|
|
4845
4849
|
order: dialogOrder,
|
|
4850
|
+
selectedStyle: layerInfo == null ? void 0 : layerInfo.style,
|
|
4846
4851
|
serviceName: currentService == null ? void 0 : currentService.name,
|
|
4847
4852
|
serviceUrl: currentService == null ? void 0 : currentService.serviceUrl,
|
|
4848
4853
|
source: source
|
|
@@ -4948,6 +4953,7 @@ var LayerRowConnect = /*#__PURE__*/React.memo(function (_ref) {
|
|
|
4948
4953
|
layerShowLayerInfoLayout: jsx(LayerInfoButtonConnect, {
|
|
4949
4954
|
isFeatureLayer: isFeatureLayer,
|
|
4950
4955
|
isLayerMissing: isLayerMissing,
|
|
4956
|
+
layerId: layerId,
|
|
4951
4957
|
layerName: layerName,
|
|
4952
4958
|
mapId: mapId,
|
|
4953
4959
|
serviceUrl: layerServiceUrl
|
|
@@ -6095,6 +6101,12 @@ var ClockConnect = function ClockConnect(_ref) {
|
|
|
6095
6101
|
var isMapClockVisible = useSelector(function (store) {
|
|
6096
6102
|
return mapSelectors.getIsClockVisible(store, mapId);
|
|
6097
6103
|
});
|
|
6104
|
+
var clockPosition = useSelector(function (store) {
|
|
6105
|
+
return mapSelectors.getClockPosition(store, mapId);
|
|
6106
|
+
});
|
|
6107
|
+
var clockSize = useSelector(function (store) {
|
|
6108
|
+
return mapSelectors.getClockSize(store, mapId);
|
|
6109
|
+
});
|
|
6098
6110
|
var onToggleClock = function onToggleClock(isClockVisible) {
|
|
6099
6111
|
dispatch(mapActions.toggleClock({
|
|
6100
6112
|
mapId: mapId,
|
|
@@ -6102,9 +6114,27 @@ var ClockConnect = function ClockConnect(_ref) {
|
|
|
6102
6114
|
origin: mapEnums.MapActionOrigin.map
|
|
6103
6115
|
}));
|
|
6104
6116
|
};
|
|
6117
|
+
var onSetPosition = function onSetPosition(position) {
|
|
6118
|
+
dispatch(mapActions.setClockPositionSize({
|
|
6119
|
+
mapId: mapId,
|
|
6120
|
+
position: position,
|
|
6121
|
+
origin: mapEnums.MapActionOrigin.map
|
|
6122
|
+
}));
|
|
6123
|
+
};
|
|
6124
|
+
var onSetSize = function onSetSize(size) {
|
|
6125
|
+
dispatch(mapActions.setClockPositionSize({
|
|
6126
|
+
mapId: mapId,
|
|
6127
|
+
size: size,
|
|
6128
|
+
origin: mapEnums.MapActionOrigin.map
|
|
6129
|
+
}));
|
|
6130
|
+
};
|
|
6105
6131
|
return jsx(Clock, {
|
|
6106
6132
|
isVisible: isMapClockVisible,
|
|
6133
|
+
onSetPosition: onSetPosition,
|
|
6134
|
+
onSetSize: onSetSize,
|
|
6107
6135
|
onToggleClock: onToggleClock,
|
|
6136
|
+
position: clockPosition,
|
|
6137
|
+
size: clockSize,
|
|
6108
6138
|
time: selectedTime
|
|
6109
6139
|
});
|
|
6110
6140
|
};
|
|
@@ -6938,16 +6968,34 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref)
|
|
|
6938
6968
|
hoverSelect = _ref.hoverSelect;
|
|
6939
6969
|
var store = useStore();
|
|
6940
6970
|
var dispatch = useDispatch();
|
|
6971
|
+
var activeDrawToolId = useSelector(drawingToolSelectors.getActiveDrawToolId);
|
|
6972
|
+
var activeDrawMode = useSelector(function (store) {
|
|
6973
|
+
return drawingToolSelectors.getActiveDrawMode(store, activeDrawToolId);
|
|
6974
|
+
});
|
|
6975
|
+
var shouldAllowMultipleShapes = useSelector(function (store) {
|
|
6976
|
+
return drawingToolSelectors.getShouldAllowMultipleShapes(store, activeDrawToolId);
|
|
6977
|
+
});
|
|
6978
|
+
var geoJSONIntersectionLayerId = useSelector(function (store) {
|
|
6979
|
+
return drawingToolSelectors.getGeoJSONIntersectionLayerId(store, activeDrawToolId);
|
|
6980
|
+
});
|
|
6981
|
+
var geoJSONIntersectionBoundsLayerId = useSelector(function (store) {
|
|
6982
|
+
return drawingToolSelectors.getGeoJSONIntersectionBoundsLayerId(store, activeDrawToolId);
|
|
6983
|
+
});
|
|
6941
6984
|
var onFeatureClick = React.useCallback(function (feature) {
|
|
6942
6985
|
var previouslySelectedFeatureIndex = layer.selectedFeatureIndex;
|
|
6943
6986
|
var selectedFeatureIndex = layer.geojson.features.findIndex(function (feat) {
|
|
6944
6987
|
return feature[0] && feat.id === feature[0].getId();
|
|
6945
6988
|
});
|
|
6946
|
-
if (selectedFeatureIndex !== -1
|
|
6989
|
+
if (selectedFeatureIndex !== -1) {
|
|
6947
6990
|
dispatch(layerActions.setSelectedFeature({
|
|
6948
6991
|
layerId: layerId,
|
|
6949
6992
|
selectedFeatureIndex: selectedFeatureIndex
|
|
6950
6993
|
}));
|
|
6994
|
+
dispatch(layerActions.toggleFeatureMode({
|
|
6995
|
+
layerId: layerId,
|
|
6996
|
+
isInEditMode: true,
|
|
6997
|
+
drawMode: ''
|
|
6998
|
+
}));
|
|
6951
6999
|
dispatch(layerActions.updateFeatureProperties({
|
|
6952
7000
|
layerId: layerId,
|
|
6953
7001
|
properties: {
|
|
@@ -6966,23 +7014,39 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref)
|
|
|
6966
7014
|
}
|
|
6967
7015
|
}
|
|
6968
7016
|
}, [dispatch, layer.geojson, layer.selectedFeatureIndex, layerId]);
|
|
7017
|
+
var onNoFeatureClick = React.useCallback(function () {
|
|
7018
|
+
if (activeDrawToolId) {
|
|
7019
|
+
// do not disable edit mode when a drawing tool is active
|
|
7020
|
+
return;
|
|
7021
|
+
}
|
|
7022
|
+
dispatch(layerActions.toggleFeatureMode({
|
|
7023
|
+
layerId: layerId,
|
|
7024
|
+
isInEditMode: false,
|
|
7025
|
+
drawMode: ''
|
|
7026
|
+
}));
|
|
7027
|
+
}, [activeDrawToolId, dispatch, layerId]);
|
|
7028
|
+
var onViewOnlyFeatureClick = React.useCallback(function (feature) {
|
|
7029
|
+
if (activeDrawToolId) {
|
|
7030
|
+
// do not select another feature when a drawing tool is active
|
|
7031
|
+
return;
|
|
7032
|
+
}
|
|
7033
|
+
onFeatureClick(feature);
|
|
7034
|
+
}, [activeDrawToolId, onFeatureClick]);
|
|
6969
7035
|
var updateFeature = React.useCallback(function (geojson, reason) {
|
|
6970
7036
|
if (!layerId) {
|
|
6971
7037
|
window.console.error('updateFeature without layerId');
|
|
6972
7038
|
return;
|
|
6973
7039
|
}
|
|
6974
|
-
var activeDrawToolId = drawingToolSelectors.getActiveDrawToolId(store.getState());
|
|
6975
|
-
var activeDrawMode = drawingToolSelectors.getActiveDrawMode(store.getState(), activeDrawToolId);
|
|
6976
7040
|
dispatch(layerActions.updateFeature({
|
|
6977
7041
|
geojson: geojson,
|
|
6978
7042
|
reason: reason,
|
|
6979
7043
|
layerId: layerId,
|
|
6980
|
-
shouldAllowMultipleShapes:
|
|
6981
|
-
geoJSONIntersectionLayerId:
|
|
6982
|
-
geoJSONIntersectionBoundsLayerId:
|
|
7044
|
+
shouldAllowMultipleShapes: shouldAllowMultipleShapes,
|
|
7045
|
+
geoJSONIntersectionLayerId: geoJSONIntersectionLayerId,
|
|
7046
|
+
geoJSONIntersectionBoundsLayerId: geoJSONIntersectionBoundsLayerId,
|
|
6983
7047
|
selectionType: activeDrawMode == null ? void 0 : activeDrawMode.selectionType
|
|
6984
7048
|
}));
|
|
6985
|
-
}, [dispatch,
|
|
7049
|
+
}, [layerId, dispatch, shouldAllowMultipleShapes, geoJSONIntersectionLayerId, geoJSONIntersectionBoundsLayerId, activeDrawMode == null ? void 0 : activeDrawMode.selectionType]);
|
|
6986
7050
|
var exitFeatureDrawMode = React.useCallback(function (reason) {
|
|
6987
7051
|
if (!layerId) {
|
|
6988
7052
|
window.console.error('exitFeatureDrawMode without layerId');
|
|
@@ -7012,6 +7076,8 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref)
|
|
|
7012
7076
|
exitDrawModeCallback: exitFeatureDrawMode,
|
|
7013
7077
|
geojson: layer.geojson,
|
|
7014
7078
|
isInEditMode: layer.isInEditMode || false,
|
|
7079
|
+
onNoFeatureClick: onNoFeatureClick,
|
|
7080
|
+
onViewOnlyFeatureClick: onViewOnlyFeatureClick,
|
|
7015
7081
|
selectedFeatureIndex: layer.selectedFeatureIndex || 0,
|
|
7016
7082
|
updateGeojson: updateFeature,
|
|
7017
7083
|
viewOnlyStyle: style
|
|
@@ -7194,6 +7260,15 @@ function useFitAndHighlightWarningFeature(_ref) {
|
|
|
7194
7260
|
}
|
|
7195
7261
|
}, [view, warningDialogFeatures, srs, dispatch, mapId]);
|
|
7196
7262
|
}
|
|
7263
|
+
/** Compare value with current time and if difference is more than factor times timeStep returns true */
|
|
7264
|
+
var getIsOutdated = function getIsOutdated(compareValue, timeStep, factor) {
|
|
7265
|
+
var currentDate = dateUtils.utc();
|
|
7266
|
+
var diff = dateUtils.differenceInMinutes(currentDate, dateUtils.createDate(compareValue));
|
|
7267
|
+
if (diff > timeStep * factor) {
|
|
7268
|
+
return true;
|
|
7269
|
+
}
|
|
7270
|
+
return false;
|
|
7271
|
+
};
|
|
7197
7272
|
|
|
7198
7273
|
var OlMapViewLayerConnect = function OlMapViewLayerConnect(layerProps) {
|
|
7199
7274
|
var layerId = layerProps.layerId,
|
|
@@ -7828,7 +7903,7 @@ var MapOptionsButtonConnect = function MapOptionsButtonConnect(_ref) {
|
|
|
7828
7903
|
* @param {object} [controls.zoomControls] **optional** controls: object - toggle the map controls, zoomControls defaults to true
|
|
7829
7904
|
*/
|
|
7830
7905
|
var OlMapViewConnect = function OlMapViewConnect(_ref) {
|
|
7831
|
-
var _useSelector2, _featureProperties$va;
|
|
7906
|
+
var _useSelector2, _useSelector3, _featureProperties$va;
|
|
7832
7907
|
var mapId = _ref.mapId,
|
|
7833
7908
|
children = _ref.children,
|
|
7834
7909
|
_ref$controls = _ref.controls,
|
|
@@ -7841,7 +7916,8 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
|
|
|
7841
7916
|
source = _ref.source,
|
|
7842
7917
|
tileServerSettings = _ref.tileServerSettings,
|
|
7843
7918
|
_ref$featureStyle = _ref.featureStyle,
|
|
7844
|
-
featureStyle = _ref$featureStyle === void 0 ? genericOpenLayersFeatureStyle : _ref$featureStyle
|
|
7919
|
+
featureStyle = _ref$featureStyle === void 0 ? genericOpenLayersFeatureStyle : _ref$featureStyle,
|
|
7920
|
+
displayTimeInMap = _ref.displayTimeInMap;
|
|
7845
7921
|
var store = useStore();
|
|
7846
7922
|
var _useGetOpenLayersView = useGetOpenLayersView(mapId, store),
|
|
7847
7923
|
view = _useGetOpenLayersView.view;
|
|
@@ -7929,7 +8005,21 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
|
|
|
7929
8005
|
var isAnimating = (_useSelector2 = useSelector(function (store) {
|
|
7930
8006
|
return mapSelectors.linkedMapAnimationInfo(store, mapId);
|
|
7931
8007
|
})) == null ? void 0 : _useSelector2.isAnimating;
|
|
8008
|
+
var autoUpdateLayerId = useSelector(function (store) {
|
|
8009
|
+
return mapSelectors.getAutoUpdateLayerId(store, mapId);
|
|
8010
|
+
});
|
|
8011
|
+
var shouldAutoUpdate = useSelector(function (store) {
|
|
8012
|
+
return mapSelectors.isAutoUpdating(store, mapId);
|
|
8013
|
+
});
|
|
8014
|
+
var autoUpdateLayerMaxValue = (_useSelector3 = useSelector(function (store) {
|
|
8015
|
+
return layerSelectors.getLayerTimeDimension(store, autoUpdateLayerId);
|
|
8016
|
+
})) == null ? void 0 : _useSelector3.maxValue;
|
|
8017
|
+
var autoUpdateTimeStep = useSelector(function (store) {
|
|
8018
|
+
return layerSelectors.getTimeStepForLayerId(store, autoUpdateLayerId);
|
|
8019
|
+
});
|
|
7932
8020
|
var dispatch = useDispatch();
|
|
8021
|
+
var _useCoreTranslation = useCoreTranslation(),
|
|
8022
|
+
t = _useCoreTranslation.t;
|
|
7933
8023
|
var updateLayerInformation = React.useCallback(function (payload) {
|
|
7934
8024
|
var _payload$layerDimensi, _payload$layerDimensi2;
|
|
7935
8025
|
var updatedPayLoad = Object.assign({}, payload, {
|
|
@@ -8130,6 +8220,28 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
|
|
|
8130
8220
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
8131
8221
|
}, [mapId, updateLayerInformation, layerIds]);
|
|
8132
8222
|
useSetIntervalWhenVisible(refetchLayers, 60000);
|
|
8223
|
+
/** Check if the autoUpdate layer has outdated data and inform the user by setting the map error */
|
|
8224
|
+
var checkIfDataOutdated = React.useCallback(function () {
|
|
8225
|
+
if (!shouldAutoUpdate || !autoUpdateLayerId || !autoUpdateLayerMaxValue || !autoUpdateTimeStep) {
|
|
8226
|
+
dispatch(mapActions.setMapPresetError({
|
|
8227
|
+
mapId: mapId,
|
|
8228
|
+
error: undefined
|
|
8229
|
+
}));
|
|
8230
|
+
return;
|
|
8231
|
+
}
|
|
8232
|
+
// check that the difference is more than 4 timesteps with the current time
|
|
8233
|
+
var isOutdated = getIsOutdated(autoUpdateLayerMaxValue, autoUpdateTimeStep, 4);
|
|
8234
|
+
dispatch(mapActions.setMapPresetError({
|
|
8235
|
+
mapId: mapId,
|
|
8236
|
+
error: isOutdated ? t('data-outdated') : undefined
|
|
8237
|
+
}));
|
|
8238
|
+
}, [autoUpdateLayerId, autoUpdateLayerMaxValue, autoUpdateTimeStep, dispatch, mapId, shouldAutoUpdate, t]);
|
|
8239
|
+
// Check every minute if data is outdated
|
|
8240
|
+
useSetIntervalWhenVisible(checkIfDataOutdated, 60000);
|
|
8241
|
+
// Recheck if data is outdated if the function is updated
|
|
8242
|
+
React.useEffect(function () {
|
|
8243
|
+
checkIfDataOutdated();
|
|
8244
|
+
}, [checkIfDataOutdated]);
|
|
8133
8245
|
useMapViewLoadingIndicator(mapId, mapLayerIds);
|
|
8134
8246
|
var _React$useState2 = React.useState({
|
|
8135
8247
|
debugMode: false
|
|
@@ -8275,6 +8387,8 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
|
|
|
8275
8387
|
bounds: "parent",
|
|
8276
8388
|
isDocked: true,
|
|
8277
8389
|
mapId: mapId
|
|
8390
|
+
}), !!displayTimeInMap && jsx(ClockConnect, {
|
|
8391
|
+
mapId: mapId
|
|
8278
8392
|
}), children]
|
|
8279
8393
|
})
|
|
8280
8394
|
});
|
|
@@ -9046,8 +9160,15 @@ var TimeSliderConnect = function TimeSliderConnect(_ref) {
|
|
|
9046
9160
|
var _React$useState = React.useState(selectedTime),
|
|
9047
9161
|
unfilteredSelectedTime = _React$useState[0],
|
|
9048
9162
|
setUnfilteredSelectedTime = _React$useState[1];
|
|
9163
|
+
// Store unfilteredSelectedTime in a ref for callbacks
|
|
9164
|
+
var unfilteredSelectedTimeRef = React.useRef(unfilteredSelectedTime);
|
|
9165
|
+
React.useEffect(function () {
|
|
9166
|
+
unfilteredSelectedTimeRef.current = unfilteredSelectedTime;
|
|
9167
|
+
}, [unfilteredSelectedTime]);
|
|
9049
9168
|
// Reference to the last time value set by this timeslider
|
|
9050
9169
|
var lastTimeValueAsSetByThisTimeSlider = React.useRef();
|
|
9170
|
+
// Track the last selectedTime we processed to avoid unnecessary updates
|
|
9171
|
+
var lastProcessedSelectedTime = React.useRef(selectedTime);
|
|
9051
9172
|
// Set new time in the redux state
|
|
9052
9173
|
var _onSetNewDate = React.useCallback(function (newDate) {
|
|
9053
9174
|
// Remember that this timeslider has set this time
|
|
@@ -9067,22 +9188,59 @@ var TimeSliderConnect = function TimeSliderConnect(_ref) {
|
|
|
9067
9188
|
}, [dispatch, isAnimating, mapId, sourceId]);
|
|
9068
9189
|
// Update local state when time is updated outside of this component, e.g. during animation or syncgroups
|
|
9069
9190
|
React.useEffect(function () {
|
|
9191
|
+
// Only update if selectedTime has actually changed (not just timeStep)
|
|
9192
|
+
if (lastProcessedSelectedTime.current === selectedTime) {
|
|
9193
|
+
return;
|
|
9194
|
+
}
|
|
9070
9195
|
var selectedTimeAsIsoString = timeToIso(selectedTime);
|
|
9071
|
-
if
|
|
9196
|
+
// Check if this is our own update bouncing back
|
|
9197
|
+
var isOurOwnUpdate = selectedTimeAsIsoString === lastTimeValueAsSetByThisTimeSlider.current;
|
|
9198
|
+
if (isOurOwnUpdate) {
|
|
9199
|
+
// Our update was processed, clear the flag and update tracking
|
|
9200
|
+
lastTimeValueAsSetByThisTimeSlider.current = undefined;
|
|
9201
|
+
lastProcessedSelectedTime.current = selectedTime;
|
|
9202
|
+
} else {
|
|
9203
|
+
// Time changed from outside this component (e.g., backward/forward buttons, animation)
|
|
9204
|
+
// Cancel any pending debounced updates and sync local state
|
|
9205
|
+
onsetNewDateDebounced.cancel();
|
|
9206
|
+
lastProcessedSelectedTime.current = selectedTime;
|
|
9072
9207
|
setUnfilteredSelectedTime(selectedTime);
|
|
9208
|
+
// Clear the flag so we don't block future external updates to this same time
|
|
9209
|
+
lastTimeValueAsSetByThisTimeSlider.current = undefined;
|
|
9073
9210
|
}
|
|
9074
9211
|
}, [selectedTime]);
|
|
9212
|
+
// Store timeStep in a ref so we can use the latest value without causing re-renders
|
|
9213
|
+
var timeStepRef = React.useRef(timeStep);
|
|
9214
|
+
var prevTimeStepRef = React.useRef(timeStep);
|
|
9215
|
+
React.useEffect(function () {
|
|
9216
|
+
var timeStepChanged = prevTimeStepRef.current !== timeStep;
|
|
9217
|
+
prevTimeStepRef.current = timeStep;
|
|
9218
|
+
timeStepRef.current = timeStep;
|
|
9219
|
+
// When timestep changes, apply smart rounding to current time
|
|
9220
|
+
// For large timesteps (>12h), round to nearest hour instead of timestep
|
|
9221
|
+
if (timeStepChanged) {
|
|
9222
|
+
var roundingStep = timeStep > 12 * 60 ? 60 : timeStep;
|
|
9223
|
+
var snappedTime = getFilteredTime(unfilteredSelectedTime, roundingStep, dataStartTime, dataEndTime);
|
|
9224
|
+
if (snappedTime !== unfilteredSelectedTime) {
|
|
9225
|
+
setUnfilteredSelectedTime(snappedTime);
|
|
9226
|
+
onsetNewDateDebounced(timeToIso(snappedTime), _onSetNewDate);
|
|
9227
|
+
}
|
|
9228
|
+
}
|
|
9229
|
+
}, [timeStep, unfilteredSelectedTime, dataStartTime, dataEndTime, _onSetNewDate]);
|
|
9075
9230
|
// Function used by timeslider components to update the unfiltered selected time
|
|
9076
9231
|
var setUnfilteredSelectedTimeFn = React.useCallback(function (unfilteredSelectedTimeFromComponents) {
|
|
9077
|
-
|
|
9078
|
-
|
|
9079
|
-
|
|
9080
|
-
setUnfilteredSelectedTime(unfilteredSelectedTimeFromComponents);
|
|
9081
|
-
var filteredIsoTime = makeFilteredSelectedTime(unfilteredSelectedTimeFromComponents);
|
|
9082
|
-
if (selectedTime !== filteredIsoTime) {
|
|
9083
|
-
onsetNewDateDebounced(timeToIso(filteredIsoTime), _onSetNewDate);
|
|
9232
|
+
// Only update if the value has actually changed
|
|
9233
|
+
if (unfilteredSelectedTimeFromComponents === unfilteredSelectedTimeRef.current) {
|
|
9234
|
+
return;
|
|
9084
9235
|
}
|
|
9085
|
-
|
|
9236
|
+
// Snap to nearest timestep when clicking/dragging on timeslider
|
|
9237
|
+
// For timesteps >= 1 hour, snap to nearest hour
|
|
9238
|
+
// For smaller timesteps, snap to the timestep itself (e.g., 5min, 10min, 15min)
|
|
9239
|
+
var roundingStep = timeStepRef.current >= 60 ? 60 : timeStepRef.current;
|
|
9240
|
+
var timeToSet = getFilteredTime(unfilteredSelectedTimeFromComponents, roundingStep, dataStartTime, dataEndTime);
|
|
9241
|
+
setUnfilteredSelectedTime(timeToSet);
|
|
9242
|
+
onsetNewDateDebounced(timeToIso(timeToSet), _onSetNewDate);
|
|
9243
|
+
}, [dataEndTime, dataStartTime, _onSetNewDate]);
|
|
9086
9244
|
// Move animation bar when user changes time using time picker
|
|
9087
9245
|
// Animation bar however cannot be moved into a time where there is no data
|
|
9088
9246
|
var moveAnimationUsingCalendar = function moveAnimationUsingCalendar(newTime) {
|
|
@@ -9105,8 +9263,13 @@ var TimeSliderConnect = function TimeSliderConnect(_ref) {
|
|
|
9105
9263
|
}));
|
|
9106
9264
|
};
|
|
9107
9265
|
var onCalendarSelect = function onCalendarSelect(newSelectedTime) {
|
|
9108
|
-
|
|
9109
|
-
|
|
9266
|
+
// When user explicitly sets time via calendar, snap to nearest available timestep
|
|
9267
|
+
// For large timesteps (>12h), round to nearest hour instead of timestep
|
|
9268
|
+
var roundingStep = timeStep > 12 * 60 ? 60 : timeStep;
|
|
9269
|
+
var snappedTime = getFilteredTime(newSelectedTime, roundingStep, dataStartTime, dataEndTime);
|
|
9270
|
+
setUnfilteredSelectedTime(snappedTime);
|
|
9271
|
+
onsetNewDateDebounced(timeToIso(snappedTime), _onSetNewDate);
|
|
9272
|
+
moveAnimationUsingCalendar(snappedTime);
|
|
9110
9273
|
};
|
|
9111
9274
|
var secondsPerPx = useSelector(function (store) {
|
|
9112
9275
|
return mapSelectors.getMapTimeSliderSecondsPerPx(store, mapId);
|
|
@@ -9122,10 +9285,15 @@ var TimeSliderConnect = function TimeSliderConnect(_ref) {
|
|
|
9122
9285
|
var event = _ref2.event,
|
|
9123
9286
|
deltaY = _ref2.deltaY;
|
|
9124
9287
|
if (!(event.ctrlKey || event.metaKey || event.shiftKey || event.altKey)) {
|
|
9125
|
-
|
|
9126
|
-
|
|
9288
|
+
if (deltaY === 0) {
|
|
9289
|
+
return;
|
|
9290
|
+
}
|
|
9291
|
+
// timeStepRef.current is in minutes, convert to seconds
|
|
9292
|
+
var timeStepInSeconds = timeStepRef.current * 60;
|
|
9293
|
+
var pixelsPerScroll = -deltaY / Math.abs(deltaY) * (timeStepInSeconds / secondsPerPx);
|
|
9294
|
+
moveSelectedTimePx(pixelsPerScroll, timeSliderWidth, centerTime, dataStartTime, dataEndTime, secondsPerPx, timeStepRef.current, unfilteredSelectedTimeRef.current, setUnfilteredSelectedTimeFn);
|
|
9127
9295
|
}
|
|
9128
|
-
}, [timeSliderWidth, centerTime, dataEndTime, dataStartTime, secondsPerPx, setUnfilteredSelectedTimeFn
|
|
9296
|
+
}, [timeSliderWidth, centerTime, dataEndTime, dataStartTime, secondsPerPx, setUnfilteredSelectedTimeFn]);
|
|
9129
9297
|
React.useEffect(function () {
|
|
9130
9298
|
if (isTimeScrollingEnabled && mapWindowRef != null && mapWindowRef.current) {
|
|
9131
9299
|
var handleWheel = function handleWheel(event) {
|
|
@@ -9334,7 +9502,9 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_ref) {
|
|
|
9334
9502
|
mapId: mapId,
|
|
9335
9503
|
layer: {
|
|
9336
9504
|
geojson: emptyGeoJSON,
|
|
9337
|
-
layerType: LayerType.featureLayer
|
|
9505
|
+
layerType: LayerType.featureLayer,
|
|
9506
|
+
isSelectable: false,
|
|
9507
|
+
isInEditMode: false
|
|
9338
9508
|
},
|
|
9339
9509
|
layerId: getSingularDrawtoolDrawLayerId(mapId),
|
|
9340
9510
|
origin: 'ConfigurableMapConnect'
|
|
@@ -10382,75 +10552,6 @@ var RouterWrapperConnect = function RouterWrapperConnect(props) {
|
|
|
10382
10552
|
});
|
|
10383
10553
|
};
|
|
10384
10554
|
|
|
10385
|
-
var Circle = styled$1('div')(function (_ref) {
|
|
10386
|
-
var isRecording = _ref.isRecording;
|
|
10387
|
-
return {
|
|
10388
|
-
width: '70%',
|
|
10389
|
-
height: '70%',
|
|
10390
|
-
borderRadius: '50%',
|
|
10391
|
-
backgroundColor: isRecording ? 'red' : 'gray',
|
|
10392
|
-
position: 'absolute',
|
|
10393
|
-
top: '50%',
|
|
10394
|
-
left: '50%',
|
|
10395
|
-
transform: 'translate(-50%, -50%)'
|
|
10396
|
-
};
|
|
10397
|
-
});
|
|
10398
|
-
var SentryRecordButton = function SentryRecordButton() {
|
|
10399
|
-
var _useCoreTranslation = useCoreTranslation(),
|
|
10400
|
-
t = _useCoreTranslation.t;
|
|
10401
|
-
var _React$useState = React.useState(false),
|
|
10402
|
-
isRecording = _React$useState[0],
|
|
10403
|
-
setIsRecording = _React$useState[1];
|
|
10404
|
-
var replay = getReplay();
|
|
10405
|
-
var toggleRecord = /*#__PURE__*/function () {
|
|
10406
|
-
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
10407
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
10408
|
-
while (1) switch (_context.prev = _context.next) {
|
|
10409
|
-
case 0:
|
|
10410
|
-
if (isRecording) {
|
|
10411
|
-
_context.next = 5;
|
|
10412
|
-
break;
|
|
10413
|
-
}
|
|
10414
|
-
replay == null || replay.start();
|
|
10415
|
-
setIsRecording(true);
|
|
10416
|
-
_context.next = 8;
|
|
10417
|
-
break;
|
|
10418
|
-
case 5:
|
|
10419
|
-
setIsRecording(false);
|
|
10420
|
-
_context.next = 8;
|
|
10421
|
-
return replay == null ? void 0 : replay.stop();
|
|
10422
|
-
case 8:
|
|
10423
|
-
case "end":
|
|
10424
|
-
return _context.stop();
|
|
10425
|
-
}
|
|
10426
|
-
}, _callee);
|
|
10427
|
-
}));
|
|
10428
|
-
return function toggleRecord() {
|
|
10429
|
-
return _ref2.apply(this, arguments);
|
|
10430
|
-
};
|
|
10431
|
-
}();
|
|
10432
|
-
var title = isRecording ? t('sentry-stop-recording') : t('sentry-start-recording');
|
|
10433
|
-
return jsx(ErrorBoundary, {
|
|
10434
|
-
displayOnTop: true,
|
|
10435
|
-
handlePromiseRejections: true,
|
|
10436
|
-
children: jsx(CustomTooltip, {
|
|
10437
|
-
title: title,
|
|
10438
|
-
children: jsx(CustomIconButton, {
|
|
10439
|
-
"data-testid": "sentryRecordButton",
|
|
10440
|
-
onClick: toggleRecord,
|
|
10441
|
-
sx: {
|
|
10442
|
-
margin: '10px',
|
|
10443
|
-
border: 'solid 1px gray'
|
|
10444
|
-
},
|
|
10445
|
-
variant: "flat",
|
|
10446
|
-
children: jsx(Circle, {
|
|
10447
|
-
isRecording: isRecording
|
|
10448
|
-
})
|
|
10449
|
-
})
|
|
10450
|
-
})
|
|
10451
|
-
});
|
|
10452
|
-
};
|
|
10453
|
-
|
|
10454
10555
|
var languages = [{
|
|
10455
10556
|
language: 'English',
|
|
10456
10557
|
code: 'en',
|
|
@@ -10576,7 +10677,7 @@ var SelectedFeature = function SelectedFeature(_ref) {
|
|
|
10576
10677
|
return Math.abs(lat) + "\xB0 " + latHemisphere + ", " + Math.abs(lon) + "\xB0 " + lonHemisphere;
|
|
10577
10678
|
};
|
|
10578
10679
|
var formattedCoordinates = useMemo(function () {
|
|
10579
|
-
if (feature
|
|
10680
|
+
if ((feature == null ? void 0 : feature.geometry.type) === 'Point') {
|
|
10580
10681
|
var latitude = feature.geometry.coordinates[1];
|
|
10581
10682
|
var longitude = feature.geometry.coordinates[0];
|
|
10582
10683
|
return getFormattedCoordinates(latitude, longitude);
|
|
@@ -11110,4 +11211,4 @@ var storyUtils = /*#__PURE__*/Object.freeze({
|
|
|
11110
11211
|
useDefaultMapSettings: useDefaultMapSettings
|
|
11111
11212
|
});
|
|
11112
11213
|
|
|
11113
|
-
export { CORE_NAMESPACE, ConfigurableMapConnect, CoreI18nProvider, CoreStoreProvider, CoreThemeProvider, CoreThemeStoreProvider, DemoWrapper, DemoWrapperConnect, HarmonieTempAndPrecipPreset, LanguageSelect, LayerInfoButtonConnect, LayerInfoDialogConnect, LayerManager, BaseLayerRow as LayerManagerBaseLayerRow, LayerManagerConnect, DescriptionRow as LayerManagerDescriptionRow, HeaderOptions as LayerManagerHeaderOptions, LayerContainerRow as LayerManagerLayerContainerRow, LayerManagerMapButtonConnect, LegendConnect, LegendMapButtonConnect, LoadingIndicatorProgressBar, LocationSearch, LocationSearchConnect, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, MyMapLocation, OlMapViewConnect, RouterWrapperConnect, SearchControlButtonConnect, SelectedFeaturesDialogConnect,
|
|
11214
|
+
export { CORE_NAMESPACE, ConfigurableMapConnect, CoreI18nProvider, CoreStoreProvider, CoreThemeProvider, CoreThemeStoreProvider, DemoWrapper, DemoWrapperConnect, HarmonieTempAndPrecipPreset, LanguageSelect, LayerInfoButtonConnect, LayerInfoDialogConnect, LayerManager, BaseLayerRow as LayerManagerBaseLayerRow, LayerManagerConnect, DescriptionRow as LayerManagerDescriptionRow, HeaderOptions as LayerManagerHeaderOptions, LayerContainerRow as LayerManagerLayerContainerRow, LayerManagerMapButtonConnect, LegendConnect, LegendMapButtonConnect, LoadingIndicatorProgressBar, LocationSearch, LocationSearchConnect, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, MyMapLocation, OlMapViewConnect, RouterWrapperConnect, SearchControlButtonConnect, SelectedFeaturesDialogConnect, SyncGroupViewerConnect, TimeSliderConnect, componentsLookUp, coreTranslations, defaultBbox, defaultConfigurations, fakeLocationDetailList, fakeLocationList, filterMapPresets, filterServices, filterTimeSeriesServices, getCenterOfLinkedFeature, getIsOutdated, getLanguageFromLocalStorage, languageLocalStorageKey, locationApiEndpoints, makeLayerInfoPayload, makePrefetchTimeSpan, saveLanguageToLocalStorage, storyUtils, testLayers, useFetchServices, useFitAndHighlightWarningFeature, useGetOpenLayersView, useLocationDetail, useLocationList, usePrefetchTimeSpan, useUpdateTimeSpan, useUpdateTimestep };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opengeoweb/core",
|
|
3
|
-
"version": "15.
|
|
3
|
+
"version": "15.2.0",
|
|
4
4
|
"description": "GeoWeb Core library for the opengeoweb project",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -8,31 +8,30 @@
|
|
|
8
8
|
"url": "git@gitlab.com:opengeoweb/opengeoweb.git"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@opengeoweb/shared": "15.
|
|
11
|
+
"@opengeoweb/shared": "15.2.0",
|
|
12
12
|
"react-redux": "^9.2.0",
|
|
13
|
-
"@opengeoweb/store": "15.
|
|
14
|
-
"@opengeoweb/time-slider": "15.
|
|
13
|
+
"@opengeoweb/store": "15.2.0",
|
|
14
|
+
"@opengeoweb/time-slider": "15.2.0",
|
|
15
15
|
"@reduxjs/toolkit": "^2.6.1",
|
|
16
|
-
"@opengeoweb/webmap-react": "15.
|
|
17
|
-
"@opengeoweb/webmap": "15.
|
|
18
|
-
"@opengeoweb/theme": "15.
|
|
16
|
+
"@opengeoweb/webmap-react": "15.2.0",
|
|
17
|
+
"@opengeoweb/webmap": "15.2.0",
|
|
18
|
+
"@opengeoweb/theme": "15.2.0",
|
|
19
19
|
"axios": "^1.7.7",
|
|
20
|
-
"@opengeoweb/layer-select": "15.
|
|
20
|
+
"@opengeoweb/layer-select": "15.2.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
25
|
"@mui/system": "^7.3.2",
|
|
26
|
-
"@opengeoweb/snackbar": "15.
|
|
26
|
+
"@opengeoweb/snackbar": "15.2.0",
|
|
27
27
|
"react-router-dom": "^6.21.0",
|
|
28
28
|
"react-draggable": "^4.4.6",
|
|
29
29
|
"i18next": "^25.0.1",
|
|
30
30
|
"react-i18next": "^15.1.1",
|
|
31
31
|
"dompurify": "^3.0.6",
|
|
32
32
|
"@mui/material": "^7.0.1",
|
|
33
|
-
"@sentry/react": "^8.34.0",
|
|
34
33
|
"@tanstack/react-query": "^5.85.5",
|
|
35
|
-
"@opengeoweb/api": "15.
|
|
34
|
+
"@opengeoweb/api": "15.2.0",
|
|
36
35
|
"@types/geojson": "^7946.0.14",
|
|
37
36
|
"@turf/turf": "^7.2.0",
|
|
38
37
|
"proj4": "^2.15.0"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { PlotPreset, TimeSeriesService } from '@opengeoweb/shared';
|
|
2
|
+
import type { Coordinates, PlotPreset, SourceSelection, TimeSeriesService } from '@opengeoweb/shared';
|
|
3
3
|
import type { mapTypes } from '@opengeoweb/store';
|
|
4
4
|
import type { InitialHarmTempAndPrecipProps } from '../MultiMapViewConnect/HarmoniePresets';
|
|
5
5
|
import type { ModelRunIntervalProps } from '../MultiMapViewConnect/ModelRunInterval';
|
|
@@ -27,7 +27,13 @@ export interface InitialTimeSeriesProps {
|
|
|
27
27
|
services: TimeSeriesService[];
|
|
28
28
|
hideLocationMarkers?: boolean;
|
|
29
29
|
}
|
|
30
|
-
export
|
|
30
|
+
export interface InitialSoundingsProps {
|
|
31
|
+
selectedSources: Record<string, SourceSelection>;
|
|
32
|
+
selectedLocations: Record<string, string | Coordinates | undefined>;
|
|
33
|
+
selectedTime?: string;
|
|
34
|
+
diagramType?: 'SKEWT' | 'BIJVOET' | 'EMAGRAM';
|
|
35
|
+
}
|
|
36
|
+
export type InitialProps = InitialMapProps | InitialMultiMapProps | InitialHarmTempAndPrecipProps | ModelRunIntervalProps | mapTypes.MapPresetInitialProps | InitialSliderProps | InitialTimeSeriesProps | InitialSoundingsProps | Record<string, unknown>;
|
|
31
37
|
/**
|
|
32
38
|
* The lookup table is for registering your own components with the workspace.
|
|
33
39
|
* @param payload
|
|
@@ -17,4 +17,6 @@ interface UseFitAndHighlightWarningFeatureOptions {
|
|
|
17
17
|
mapId: string;
|
|
18
18
|
}
|
|
19
19
|
export declare function useFitAndHighlightWarningFeature({ view, warningDialogFeatures, srs, mapId, }: UseFitAndHighlightWarningFeatureOptions): void;
|
|
20
|
+
/** Compare value with current time and if difference is more than factor times timeStep returns true */
|
|
21
|
+
export declare const getIsOutdated: (compareValue: string, timeStep: number, factor: number) => boolean;
|
|
20
22
|
export {};
|
package/src/lib/index.d.ts
CHANGED
|
@@ -17,7 +17,6 @@ export * from './components/RouterWrapper';
|
|
|
17
17
|
export * from './components/LocationSearch';
|
|
18
18
|
export * from './components/TimeSliderConnect';
|
|
19
19
|
export * from './components/LayerInfoConnect';
|
|
20
|
-
export * from './components/SentryRecordButton';
|
|
21
20
|
export * from './components/LanguageSelect';
|
|
22
21
|
export * from './components/SelectedFeaturesDialog/SelectedFeaturesDialogConnect';
|
|
23
22
|
export { useLocationDetail, useLocationList } from './utils/location-api/hooks';
|
|
@@ -18,7 +18,9 @@ export declare const multiDimensionLayer: {
|
|
|
18
18
|
currentValue: string;
|
|
19
19
|
values?: undefined;
|
|
20
20
|
})[];
|
|
21
|
-
}, WmdefaultReduxLayerRadarKNMI: WMLayer, defaultReduxLayerRadarKNMI: import("@opengeoweb/webmap").LayerOptions, defaultReduxLayerRadarColor: import("@opengeoweb/webmap").LayerOptions, multiDimensionLayer3: import("@opengeoweb/webmap").LayerFoundation
|
|
21
|
+
}, WmdefaultReduxLayerRadarKNMI: WMLayer, defaultReduxLayerRadarKNMI: import("@opengeoweb/webmap").LayerOptions, defaultReduxLayerRadarColor: import("@opengeoweb/webmap").LayerOptions, multiDimensionLayer3: import("@opengeoweb/webmap").LayerFoundation, defaultReduxLayerRadarKNMIWithStyles: import("@opengeoweb/webmap").LayerFoundation & {
|
|
22
|
+
styles: import("@opengeoweb/webmap").Style[];
|
|
23
|
+
};
|
|
22
24
|
export declare const flDimensionLayer: layerTypes.Layer;
|
|
23
25
|
export declare const layerWithSingleDimensionValue: WMLayer;
|
|
24
26
|
export declare const WmMultiDimensionLayer: WMLayer;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as SentryRecordButton } from './SentryRecordButton';
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { serviceTypes } from '@opengeoweb/store';
|
|
3
|
-
interface WMSLoaderProps {
|
|
4
|
-
onClickService?: (serviceURL: string, layerName: string) => void;
|
|
5
|
-
onRenderTree?: (service: serviceTypes.InitialService) => React.ReactNode;
|
|
6
|
-
highlightedLayers?: [];
|
|
7
|
-
preloadedServices?: serviceTypes.InitialService[];
|
|
8
|
-
tooltip?: string;
|
|
9
|
-
}
|
|
10
|
-
declare const WMSLoader: React.FC<WMSLoaderProps>;
|
|
11
|
-
export default WMSLoader;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { StoryObj } from '@storybook/react-webpack5';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import WMSLoader from './WMSLoader';
|
|
4
|
-
declare const _default: {
|
|
5
|
-
title: string;
|
|
6
|
-
tags: string[];
|
|
7
|
-
};
|
|
8
|
-
export default _default;
|
|
9
|
-
type Story = StoryObj<typeof WMSLoader>;
|
|
10
|
-
export declare const DemoWMSLoad: React.FC;
|
|
11
|
-
export declare const WMSLoaderLight: Story;
|
|
12
|
-
export declare const WMSLoaderDark: Story;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { serviceTypes } from '@opengeoweb/store';
|
|
3
|
-
import { LayerType } from '@opengeoweb/webmap';
|
|
4
|
-
interface WMSLoaderConnectProps {
|
|
5
|
-
mapId: string;
|
|
6
|
-
preloadedServices?: serviceTypes.InitialService[];
|
|
7
|
-
layerType?: LayerType;
|
|
8
|
-
tooltip?: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* A pop-up allowing you to add new WMS sources which can then be displayed on the map.
|
|
12
|
-
* A list of preconfigured sources can be given to the component which will always be availble to retrieve layers from
|
|
13
|
-
*
|
|
14
|
-
* Expects the following props:
|
|
15
|
-
* @param {string} mapId mapId: string - Id of the map
|
|
16
|
-
* @param {ServiceRefactorMe[]} [preloadedServices] **optional** preloadedServices: array of Service objects - contains an array of Service objects that are to be loaded as preconfigured WMS services
|
|
17
|
-
* @example
|
|
18
|
-
* ``` <WMSLoaderConnect mapId="mapid_1" preloadedServices = {preloadedServicesList} /> ```
|
|
19
|
-
*/
|
|
20
|
-
declare const WMSLoaderConnect: React.FC<WMSLoaderConnectProps>;
|
|
21
|
-
export default WMSLoaderConnect;
|
/package/src/lib/components/{WMSLoader → LayerManager/AddLayersPopup}/WMSLayerTree/WMSLayerTree.d.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|