@opengeoweb/core 9.16.0 → 9.18.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 CHANGED
@@ -1,36 +1,289 @@
1
1
  import * as React from 'react';
2
2
  import React__default, { useState, useCallback, useRef } from 'react';
3
- import { Grid, Box, MenuItem, Typography, useTheme, Popper, Fade, Tooltip, styled, LinearProgress, FormControl, InputLabel, Paper, List, ListItemButton, ListItemText, CircularProgress, ListSubheader, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, InputAdornment, DialogActions, Button, ListItemIcon, Checkbox } from '@mui/material';
4
- import { CustomIconButton, TooltipSelect, AlertIcon, sliderHeaderStyle, CustomSlider, ToggleMenu, CustomTooltip, tooltipContainerStyles, renderCounter, AlertBanner, CustomAccordion, calculateStartSize, ToolContainerDraggable, useDebounce, dateUtils, withEggs } from '@opengeoweb/shared';
5
- import { CollapseSmall, CollapseMedium, CollapseLarge, CollapseWindow, ExpandWindow, LayersAdd, CloudLoading, Copy, None, FastForward, AutoUpdateActive, Both, Visibility, VisibilityOff, Delete, DragHandle as DragHandle$1, Cached, Add, MapAdd, WorldMapProjection, Layers, List as List$1, ExitDomain, Info, Search, MyLocation, Close, ThemeWrapper, lightTheme } from '@opengeoweb/theme';
3
+ import { Grid, Box, MenuItem, Typography, useTheme, Popper, Fade, Tooltip, styled, LinearProgress, FormControl, InputLabel, Paper, List, ListItemButton, ListItemText, CircularProgress, ListSubheader, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, InputAdornment, DialogActions, Button, circularProgressClasses, ListItemIcon, Checkbox } from '@mui/material';
4
+ import { SHARED_NAMESPACE, sharedTranslations, CustomIconButton, TooltipSelect, AlertIcon, sliderHeaderStyle, CustomSlider, ToggleMenu, CustomTooltip, tooltipContainerStyles, renderCounter, AlertBanner, CustomAccordion, calculateStartSize, ToolContainerDraggable, useDebounce, dateUtils, withEggs, ErrorBoundary } from '@opengeoweb/shared';
5
+ import { CollapseSmall, CollapseMedium, CollapseLarge, CollapseWindow, ExpandWindow, LayersAdd, CloudLoading, Copy, None, FastForward, AutoUpdateActive, Both, Visibility, VisibilityOff, Delete, DragHandle as DragHandle$1, Cached, Add, MapAdd, WorldMapProjection, Layers, ExitDomain, Info, Search, Exclamation, MyLocation, Close, ThemeWrapper, lightTheme } from '@opengeoweb/theme';
6
+ import i18n from 'i18next';
7
+ import { useTranslation, initReactI18next, I18nextProvider } from 'react-i18next';
8
+ import { TIMESLIDER_NAMESPACE, timesliderTranslations, defaultTimeSpan, TIME_SLIDER_LEGEND_HEIGHT, SpeedButton, TimeStepButton, AnimationLengthButton, AnimationLength, TimeSpanButton, marks as marks$1, secondsPerPxFromCanvasWidth, getNewCenterOfFixedPointZoom, OptionsMenuButton, PlayButton, defaultTimeStep, BackwardForwardStepButton, AutoUpdateButton, NowButton, handleSetNowEvent, TimeSliderButtons, TimeSliderCurrentTimeBox, TimeSliderLegend, TimeSlider, onsetNewDateDebounced, getFilteredTime, ControlButtons, OptionsMenu, TimeSliderClock } from '@opengeoweb/timeslider';
9
+ import { WEBMAP_REACT_NAMESPACE, webmapReactTranslations, LayerInfoButton, LayerInfoDialog, MapControlButton, MapDimensionSelect, dimensionConfig, DimensionSelectDialog, DimensionSelectButton, ZoomControls, MapView, MapViewLayer, LegendDialog, LegendButton, registerDrawFunction, emptyGeoJSON, MapControls, publicLayers } from '@opengeoweb/webmap-react';
6
10
  import { useDispatch, useSelector, connect, useStore, Provider } from 'react-redux';
7
11
  import { ReactSortable } from 'react-sortablejs';
8
12
  import Sortable from 'sortablejs';
9
13
  import { layerTypes, layerUtils, layerActions, layerSelectors, serviceSelectors, serviceActions, mapSelectors, mapActions, mapEnums, uiSelectors, uiTypes, useSetupDialog, filterLayers, getUserAddedServices, uiActions, genericActions, drawtoolSelectors, syncConstants, loadingIndicatorActions, IS_LEGEND_OPEN_BY_DEFAULT, defaultLayers, mapStoreActions, getSingularDrawtoolDrawLayerId, syncGroupsSelectors, syncGroupsSelector, coreModuleConfig, routerUtils, routerModuleConfig } from '@opengeoweb/store';
10
- import { LayerInfoButton, LayerInfoDialog, MapControlButton, MapDimensionSelect, dimensionConfig, DimensionSelectDialog, DimensionSelectButton, ZoomControls, MapView, MapViewLayer, LegendDialog, registerDrawFunction, emptyGeoJSON, MapControls, publicLayers, WEBMAP_REACT_NAMESPACE, webmapReactTranslations } from '@opengeoweb/webmap-react';
11
14
  import { webmapUtils, getCapabilities, WMGetServiceFromStore, LayerType, handleDateUtilsISOString, wmServiceListener, EVENT_GETCAPABILITIES_START, EVENT_GETCAPABILITIES_READY, WMLayer } from '@opengeoweb/webmap';
12
- import { Box as Box$1 } from '@mui/system';
13
- import { defaultTimeSpan, TIME_SLIDER_LEGEND_HEIGHT, SpeedButton, TimeStepButton, AnimationLengthButton, AnimationLength, TimeSpanButton, marks as marks$1, secondsPerPxFromCanvasWidth, getNewCenterOfFixedPointZoom, OptionsMenuButton, PlayButton, defaultTimeStep, BackwardForwardStepButton, AutoUpdateButton, NowButton, handleSetNowEvent, TimeSliderButtons, TimeSliderCurrentTimeBox, TimeSliderLegend, TimeSlider, onsetNewDateDebounced, getFilteredTime, ControlButtons, OptionsMenu, TimeSliderClock } from '@opengeoweb/timeslider';
15
+ import { Box as Box$1, styled as styled$1 } from '@mui/system';
14
16
  import _, { isEqual, range } from 'lodash';
15
17
  import { LayerSelectButtonConnect, LayerSelectConnect, layerSelectConfig } from '@opengeoweb/layer-select';
16
18
  import axios from 'axios';
17
19
  import * as DOMPurify from 'dompurify';
18
- import i18n from 'i18next';
19
- import { initReactI18next, I18nextProvider } from 'react-i18next';
20
20
  import { SnackbarWrapperConnect } from '@opengeoweb/snackbar';
21
21
  import { useNavigate } from 'react-router-dom';
22
+ import * as Sentry from '@sentry/react';
22
23
 
23
24
  var en = {
24
- core: "Core"
25
+ feature_info_title: "Click on the map for info.",
26
+ feature_info_no_layers: "No layers added to the map.",
27
+ "add-layer-popup-title": "Load WMS layer(s)",
28
+ "add-layer-popup-service-url": "Service URL",
29
+ "add-layer-popup-available-services": "Available services",
30
+ "add-layer-popup-available-layers": "Available layers for {{serviceName}}",
31
+ "add-layer-popup-reload-layers": "Reload layers from service",
32
+ "layermanager-title": "Layer Manager",
33
+ "layermanager-baselayers-title": "Base layer",
34
+ "layermanager-baselayers-no-available": "No service available",
35
+ "layermanager-acceptance-time": "Acc Time",
36
+ "layermanager-dimensions-total-values": "Dimension value ({{total_dimensions}} options)",
37
+ "layermanager-dimensions-title": "Dimensions",
38
+ "layermanager-dimension-title": "Dimension",
39
+ "layermanager-opacity-title": "Opacity",
40
+ "layermanager-opacity-tooltip-prefix": "Opacity: ",
41
+ "layermanager-style-title": "Style",
42
+ "layermanager-layer-error": "This layer could not be loaded: does not exist on the server.",
43
+ "layermanager-layer": "Layer",
44
+ "layermanager-layer-toggle": "Toggle visibility",
45
+ "layermanager-layer-select": "Open the layer selector",
46
+ "layermanager-layer-drag": "Drag",
47
+ "layermanager-layer-leading": "Leading layer",
48
+ "layermanager-layer-leading-none": "None",
49
+ "layermanager-layer-leading-auto-timestep": "Auto-timestep",
50
+ "layermanager-layer-leading-auto-update": "Auto-update",
51
+ "layermanager-layer-leading-both": "Both",
52
+ "layermanager-layer-delete": "Delete",
53
+ "layermanager-layer-duplicate": "Duplicate layer",
54
+ "layermanager-options": "Options",
55
+ "layermanager-baselayers-tooltip": "Add base layers",
56
+ "layermanager-header-button-small": "small",
57
+ "layermanager-header-button-medium": "medium",
58
+ "layermanager-header-button-large": "large",
59
+ "layermanager-header-button-dock": "Dock",
60
+ "layermanager-header-button-undock": "Undock",
61
+ "projection-title": "Projection",
62
+ "wms-loader-title": "Load WMS layer(s)",
63
+ "wms-loader-description": "Please enter a wms server, or select one from the list.",
64
+ "wms-loader-no-data": "No data",
65
+ "wms-loader-error-http": "Use https or allow Mixed Content in your browser to use this WMS service",
66
+ "wms-loader-error-valid-service": "Please enter a valid WMS service",
67
+ "wms-loader-error-valid-url": "Please enter a valid URL",
68
+ "search-title": "Search",
69
+ "search-title-aria": "Map search",
70
+ "search-find-location": "Find my location",
71
+ "search-error": "Geolocation error: {{error}}",
72
+ "syncgroups-title": "Sync",
73
+ "syncgroups-zoom": "ZoomPane",
74
+ "syncgroups-timeslider": "Timeslider",
75
+ "syncgroups-level": "Level",
76
+ "syncgroups-add-group": "Add new group to list",
77
+ "syncgroups-remove-group": "Remove group from list",
78
+ "actions-close": "Close",
79
+ "sentry-start-recording": "Start Recording",
80
+ "sentry-stop-recording": "Stop Recording",
81
+ "layermanager-acceptance-time-within": "Layer: within the data acceptance window",
82
+ "layermanager-acceptance-time-outside": "Layer: out of date",
83
+ "layermanager-acceptance-time-updated": "Layer: updated",
84
+ "layermanager-acceptance-time-off": "off",
85
+ "layermanager-acceptance-time-exact": "exact",
86
+ "layermanager-dimensions-none": "Layer has no time dimension",
87
+ feature_info_marker_info: "Event marker info",
88
+ feature_info_location_info: "Get information for a specific location"
25
89
  };
26
90
  var fi = {
27
- core: "Core"
91
+ feature_info_title: "ei käännetty",
92
+ feature_info_no_layers: "ei käännetty",
93
+ "add-layer-popup-title": "ei käännetty",
94
+ "add-layer-popup-service-url": "ei käännetty",
95
+ "add-layer-popup-available-services": "ei käännetty",
96
+ "add-layer-popup-available-layers": "ei käännetty",
97
+ "add-layer-popup-reload-layers": "ei käännetty",
98
+ "layermanager-title": "ei käännetty",
99
+ "layermanager-baselayers-title": "ei käännetty",
100
+ "layermanager-baselayers-no-available": "ei käännetty",
101
+ "layermanager-acceptance-time": "ei käännetty",
102
+ "layermanager-dimensions-total-values": "ei käännetty",
103
+ "layermanager-dimensions-title": "ei käännetty",
104
+ "layermanager-dimension-title": "ei käännetty",
105
+ "layermanager-opacity-title": "ei käännetty",
106
+ "layermanager-opacity-tooltip-prefix": "ei käännetty",
107
+ "layermanager-style-title": "ei käännetty",
108
+ "layermanager-layer-error": "ei käännetty",
109
+ "layermanager-layer": "ei käännetty",
110
+ "layermanager-layer-toggle": "ei käännetty",
111
+ "layermanager-layer-select": "ei käännetty",
112
+ "layermanager-layer-drag": "ei käännetty",
113
+ "layermanager-layer-leading": "ei käännetty",
114
+ "layermanager-layer-leading-none": "ei käännetty",
115
+ "layermanager-layer-leading-auto-timestep": "ei käännetty",
116
+ "layermanager-layer-leading-auto-update": "ei käännetty",
117
+ "layermanager-layer-leading-both": "ei käännetty",
118
+ "layermanager-layer-delete": "ei käännetty",
119
+ "layermanager-layer-duplicate": "ei käännetty",
120
+ "layermanager-options": "ei käännetty",
121
+ "layermanager-baselayers-tooltip": "ei käännetty",
122
+ "layermanager-header-button-small": "ei käännetty",
123
+ "layermanager-header-button-medium": "ei käännetty",
124
+ "layermanager-header-button-large": "ei käännetty",
125
+ "layermanager-header-button-dock": "ei käännetty",
126
+ "layermanager-header-button-undock": "ei käännetty",
127
+ "projection-title": "ei käännetty",
128
+ "wms-loader-title": "ei käännetty",
129
+ "wms-loader-description": "ei käännetty",
130
+ "wms-loader-no-data": "ei käännetty",
131
+ "wms-loader-error-http": "ei käännetty",
132
+ "wms-loader-error-valid-service": "ei käännetty",
133
+ "wms-loader-error-valid-url": "ei käännetty",
134
+ "search-title": "ei käännetty",
135
+ "search-title-aria": "ei käännetty",
136
+ "search-find-location": "ei käännetty",
137
+ "search-error": "ei käännetty",
138
+ "syncgroups-title": "ei käännetty",
139
+ "syncgroups-zoom": "ei käännetty",
140
+ "syncgroups-timeslider": "ei käännetty",
141
+ "syncgroups-level": "ei käännetty",
142
+ "syncgroups-add-group": "ei käännetty",
143
+ "syncgroups-remove-group": "ei käännetty",
144
+ "actions-close": "ei käännetty",
145
+ "sentry-start-recording": "ei käännetty",
146
+ "sentry-stop-recording": "ei käännetty",
147
+ "layermanager-acceptance-time-within": "ei käännetty",
148
+ "layermanager-acceptance-time-outside": "ei käännetty",
149
+ "layermanager-acceptance-time-updated": "ei käännetty",
150
+ "layermanager-acceptance-time-off": "ei käännetty",
151
+ "layermanager-acceptance-time-exact": "ei käännetty",
152
+ "layermanager-dimensions-none": "ei käännetty",
153
+ feature_info_marker_info: "ei käännetty",
154
+ feature_info_location_info: "ei käännetty"
28
155
  };
29
156
  var no = {
30
- core: "Core"
157
+ feature_info_title: "ikke oversatt",
158
+ feature_info_no_layers: "ikke oversatt",
159
+ "add-layer-popup-title": "ikke oversatt",
160
+ "add-layer-popup-service-url": "ikke oversatt",
161
+ "add-layer-popup-available-services": "ikke oversatt",
162
+ "add-layer-popup-available-layers": "ikke oversatt",
163
+ "add-layer-popup-reload-layers": "ikke oversatt",
164
+ "layermanager-title": "ikke oversatt",
165
+ "layermanager-baselayers-title": "ikke oversatt",
166
+ "layermanager-baselayers-no-available": "ikke oversatt",
167
+ "layermanager-acceptance-time": "ikke oversatt",
168
+ "layermanager-dimensions-total-values": "ikke oversatt",
169
+ "layermanager-dimensions-title": "ikke oversatt",
170
+ "layermanager-dimension-title": "ikke oversatt",
171
+ "layermanager-opacity-title": "ikke oversatt",
172
+ "layermanager-opacity-tooltip-prefix": "ikke oversatt",
173
+ "layermanager-style-title": "ikke oversatt",
174
+ "layermanager-layer-error": "ikke oversatt",
175
+ "layermanager-layer": "ikke oversatt",
176
+ "layermanager-layer-toggle": "ikke oversatt",
177
+ "layermanager-layer-select": "ikke oversatt",
178
+ "layermanager-layer-drag": "ikke oversatt",
179
+ "layermanager-layer-leading": "ikke oversatt",
180
+ "layermanager-layer-leading-none": "ikke oversatt",
181
+ "layermanager-layer-leading-auto-timestep": "ikke oversatt",
182
+ "layermanager-layer-leading-auto-update": "ikke oversatt",
183
+ "layermanager-layer-leading-both": "ikke oversatt",
184
+ "layermanager-layer-delete": "ikke oversatt",
185
+ "layermanager-layer-duplicate": "ikke oversatt",
186
+ "layermanager-options": "ikke oversatt",
187
+ "layermanager-baselayers-tooltip": "ikke oversatt",
188
+ "layermanager-header-button-small": "ikke oversatt",
189
+ "layermanager-header-button-medium": "ikke oversatt",
190
+ "layermanager-header-button-large": "ikke oversatt",
191
+ "layermanager-header-button-dock": "ikke oversatt",
192
+ "layermanager-header-button-undock": "ikke oversatt",
193
+ "projection-title": "ikke oversatt",
194
+ "wms-loader-title": "ikke oversatt",
195
+ "wms-loader-description": "ikke oversatt",
196
+ "wms-loader-no-data": "ikke oversatt",
197
+ "wms-loader-error-http": "ikke oversatt",
198
+ "wms-loader-error-valid-service": "ikke oversatt",
199
+ "wms-loader-error-valid-url": "ikke oversatt",
200
+ "search-title": "ikke oversatt",
201
+ "search-title-aria": "ikke oversatt",
202
+ "search-find-location": "ikke oversatt",
203
+ "search-error": "ikke oversatt",
204
+ "syncgroups-title": "ikke oversatt",
205
+ "syncgroups-zoom": "ikke oversatt",
206
+ "syncgroups-timeslider": "ikke oversatt",
207
+ "syncgroups-level": "ikke oversatt",
208
+ "syncgroups-add-group": "ikke oversatt",
209
+ "syncgroups-remove-group": "ikke oversatt",
210
+ "actions-close": "ikke oversatt",
211
+ "sentry-start-recording": "ikke oversatt",
212
+ "sentry-stop-recording": "ikke oversatt",
213
+ "layermanager-acceptance-time-within": "ikke oversatt",
214
+ "layermanager-acceptance-time-outside": "ikke oversatt",
215
+ "layermanager-acceptance-time-updated": "ikke oversatt",
216
+ "layermanager-acceptance-time-off": "ikke oversatt",
217
+ "layermanager-acceptance-time-exact": "ikke oversatt",
218
+ "layermanager-dimensions-none": "ikke oversatt",
219
+ feature_info_marker_info: "ikke oversatt",
220
+ feature_info_location_info: "ikke oversatt"
31
221
  };
32
222
  var nl = {
33
- core: "Core"
223
+ feature_info_title: "niet vertaald",
224
+ feature_info_no_layers: "niet vertaald",
225
+ "add-layer-popup-title": "niet vertaald",
226
+ "add-layer-popup-service-url": "niet vertaald",
227
+ "add-layer-popup-available-services": "niet vertaald",
228
+ "add-layer-popup-available-layers": "niet vertaald",
229
+ "add-layer-popup-reload-layers": "niet vertaald",
230
+ "layermanager-title": "niet vertaald",
231
+ "layermanager-baselayers-title": "niet vertaald",
232
+ "layermanager-baselayers-no-available": "niet vertaald",
233
+ "layermanager-acceptance-time": "niet vertaald",
234
+ "layermanager-dimensions-total-values": "niet vertaald",
235
+ "layermanager-dimensions-title": "niet vertaald",
236
+ "layermanager-dimension-title": "niet vertaald",
237
+ "layermanager-opacity-title": "niet vertaald",
238
+ "layermanager-opacity-tooltip-prefix": "niet vertaald",
239
+ "layermanager-style-title": "niet vertaald",
240
+ "layermanager-layer-error": "niet vertaald",
241
+ "layermanager-layer": "niet vertaald",
242
+ "layermanager-layer-toggle": "niet vertaald",
243
+ "layermanager-layer-select": "niet vertaald",
244
+ "layermanager-layer-drag": "niet vertaald",
245
+ "layermanager-layer-leading": "niet vertaald",
246
+ "layermanager-layer-leading-none": "niet vertaald",
247
+ "layermanager-layer-leading-auto-timestep": "niet vertaald",
248
+ "layermanager-layer-leading-auto-update": "niet vertaald",
249
+ "layermanager-layer-leading-both": "niet vertaald",
250
+ "layermanager-layer-delete": "niet vertaald",
251
+ "layermanager-layer-duplicate": "niet vertaald",
252
+ "layermanager-options": "niet vertaald",
253
+ "layermanager-baselayers-tooltip": "niet vertaald",
254
+ "layermanager-header-button-small": "niet vertaald",
255
+ "layermanager-header-button-medium": "niet vertaald",
256
+ "layermanager-header-button-large": "niet vertaald",
257
+ "layermanager-header-button-dock": "niet vertaald",
258
+ "layermanager-header-button-undock": "niet vertaald",
259
+ "projection-title": "niet vertaald",
260
+ "wms-loader-title": "niet vertaald",
261
+ "wms-loader-description": "niet vertaald",
262
+ "wms-loader-no-data": "niet vertaald",
263
+ "wms-loader-error-http": "niet vertaald",
264
+ "wms-loader-error-valid-service": "niet vertaald",
265
+ "wms-loader-error-valid-url": "niet vertaald",
266
+ "search-title": "niet vertaald",
267
+ "search-title-aria": "niet vertaald",
268
+ "search-find-location": "niet vertaald",
269
+ "search-error": "niet vertaald",
270
+ "syncgroups-title": "niet vertaald",
271
+ "syncgroups-zoom": "niet vertaald",
272
+ "syncgroups-timeslider": "niet vertaald",
273
+ "syncgroups-level": "niet vertaald",
274
+ "syncgroups-add-group": "niet vertaald",
275
+ "syncgroups-remove-group": "niet vertaald",
276
+ "actions-close": "niet vertaald",
277
+ "sentry-start-recording": "niet vertaald",
278
+ "sentry-stop-recording": "niet vertaald",
279
+ "layermanager-acceptance-time-within": "niet vertaald",
280
+ "layermanager-acceptance-time-outside": "niet vertaald",
281
+ "layermanager-acceptance-time-updated": "niet vertaald",
282
+ "layermanager-acceptance-time-off": "niet vertaald",
283
+ "layermanager-acceptance-time-exact": "niet vertaald",
284
+ "layermanager-dimensions-none": "niet vertaald",
285
+ feature_info_marker_info: "niet vertaald",
286
+ feature_info_location_info: "niet vertaald"
34
287
  };
35
288
  var coreTranslations = {
36
289
  en: en,
@@ -1695,6 +1948,49 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
1695
1948
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
1696
1949
  };
1697
1950
 
1951
+ const CORE_NAMESPACE = 'core';
1952
+ const initCoreReactI18n = () => {
1953
+ i18n.use(initReactI18next).init({
1954
+ lng: 'en',
1955
+ fallbackLng: 'en',
1956
+ ns: CORE_NAMESPACE,
1957
+ interpolation: {
1958
+ escapeValue: false
1959
+ },
1960
+ resources: {
1961
+ en: {
1962
+ [CORE_NAMESPACE]: coreTranslations.en,
1963
+ [WEBMAP_REACT_NAMESPACE]: webmapReactTranslations.en,
1964
+ [SHARED_NAMESPACE]: sharedTranslations.en,
1965
+ [TIMESLIDER_NAMESPACE]: timesliderTranslations.en
1966
+ },
1967
+ fi: {
1968
+ [CORE_NAMESPACE]: coreTranslations.fi,
1969
+ [WEBMAP_REACT_NAMESPACE]: webmapReactTranslations.fi,
1970
+ [SHARED_NAMESPACE]: sharedTranslations.fi,
1971
+ [TIMESLIDER_NAMESPACE]: timesliderTranslations.fi
1972
+ },
1973
+ no: {
1974
+ [CORE_NAMESPACE]: coreTranslations.no,
1975
+ [WEBMAP_REACT_NAMESPACE]: webmapReactTranslations.no,
1976
+ [SHARED_NAMESPACE]: sharedTranslations.no,
1977
+ [TIMESLIDER_NAMESPACE]: timesliderTranslations.no
1978
+ },
1979
+ nl: {
1980
+ [CORE_NAMESPACE]: coreTranslations.nl,
1981
+ [WEBMAP_REACT_NAMESPACE]: webmapReactTranslations.nl,
1982
+ [SHARED_NAMESPACE]: sharedTranslations.nl,
1983
+ [TIMESLIDER_NAMESPACE]: timesliderTranslations.nl
1984
+ }
1985
+ }
1986
+ });
1987
+ };
1988
+ const ns = [CORE_NAMESPACE, TIMESLIDER_NAMESPACE];
1989
+ const translateKeyOutsideComponents = (key, params = undefined) => i18n.t(key, Object.assign({
1990
+ ns
1991
+ }, params));
1992
+ const useCoreTranslation = () => useTranslation(ns);
1993
+
1698
1994
  /* *
1699
1995
  * Licensed under the Apache License, Version 2.0 (the "License");
1700
1996
  * you may not use this file except in compliance with the License.
@@ -1732,6 +2028,9 @@ const HeaderOptions = ({
1732
2028
  mapWidth
1733
2029
  }) => {
1734
2030
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
2031
+ const {
2032
+ t
2033
+ } = useCoreTranslation();
1735
2034
  React.useEffect(() => {
1736
2035
  const handleKeyDown = event => {
1737
2036
  if (shortcutsEnabled) {
@@ -1750,7 +2049,7 @@ const HeaderOptions = ({
1750
2049
  };
1751
2050
  }, [onChangeSize, shortcutsEnabled]);
1752
2051
  return /*#__PURE__*/React.createElement(React.Fragment, null, !((_a = buttonSettings === null || buttonSettings === void 0 ? void 0 : buttonSettings.small) === null || _a === void 0 ? void 0 : _a.isDisabled) && ( /*#__PURE__*/React.createElement(CustomIconButton, {
1753
- tooltipTitle: "small",
2052
+ tooltipTitle: t('layermanager-header-button-small'),
1754
2053
  "data-testid": "collapseSmall-btn",
1755
2054
  onClick: () => {
1756
2055
  if (!isDockedLayerManager) {
@@ -1761,7 +2060,7 @@ const HeaderOptions = ({
1761
2060
  },
1762
2061
  className: "collapseSmall-btn"
1763
2062
  }, (_c = (_b = buttonSettings === null || buttonSettings === void 0 ? void 0 : buttonSettings.small) === null || _b === void 0 ? void 0 : _b.icon) !== null && _c !== void 0 ? _c : /*#__PURE__*/React.createElement(CollapseSmall, null))), !((_d = buttonSettings === null || buttonSettings === void 0 ? void 0 : buttonSettings.medium) === null || _d === void 0 ? void 0 : _d.isDisabled) && ( /*#__PURE__*/React.createElement(CustomIconButton, {
1764
- tooltipTitle: "medium",
2063
+ tooltipTitle: t('layermanager-header-button-medium'),
1765
2064
  "data-testid": "collapseMedium-btn",
1766
2065
  onClick: () => {
1767
2066
  if (!isDockedLayerManager) {
@@ -1772,7 +2071,7 @@ const HeaderOptions = ({
1772
2071
  },
1773
2072
  className: "collapseMedium-btn"
1774
2073
  }, (_f = (_e = buttonSettings === null || buttonSettings === void 0 ? void 0 : buttonSettings.medium) === null || _e === void 0 ? void 0 : _e.icon) !== null && _f !== void 0 ? _f : /*#__PURE__*/React.createElement(CollapseMedium, null))), !((_g = buttonSettings === null || buttonSettings === void 0 ? void 0 : buttonSettings.large) === null || _g === void 0 ? void 0 : _g.isDisabled) && ( /*#__PURE__*/React.createElement(CustomIconButton, {
1775
- tooltipTitle: "large",
2074
+ tooltipTitle: t('layermanager-header-button-large'),
1776
2075
  "data-testid": "collapseLarge-btn",
1777
2076
  onClick: () => {
1778
2077
  if (!isDockedLayerManager) {
@@ -1783,7 +2082,7 @@ const HeaderOptions = ({
1783
2082
  },
1784
2083
  className: "collapseLarge-btn"
1785
2084
  }, (_j = (_h = buttonSettings === null || buttonSettings === void 0 ? void 0 : buttonSettings.large) === null || _h === void 0 ? void 0 : _h.icon) !== null && _j !== void 0 ? _j : /*#__PURE__*/React.createElement(CollapseLarge, null))), !((_k = buttonSettings === null || buttonSettings === void 0 ? void 0 : buttonSettings.dock) === null || _k === void 0 ? void 0 : _k.isDisabled) && ( /*#__PURE__*/React.createElement(CustomIconButton, {
1786
- tooltipTitle: isDockedLayerManager ? 'Undock' : 'Dock',
2085
+ tooltipTitle: isDockedLayerManager ? t('layermanager-header-button-undock') : t('layermanager-header-button-dock'),
1787
2086
  "data-testid": "dockedBtn",
1788
2087
  disableRipple: true,
1789
2088
  onClick: () => onClickDockButton()
@@ -2027,7 +2326,7 @@ const style = {
2027
2326
  padding: 0
2028
2327
  };
2029
2328
  const LayerSelectButton = ({
2030
- tooltipTitle: _tooltipTitle = 'Open the layer selector',
2329
+ tooltipTitle: _tooltipTitle = translateKeyOutsideComponents('layermanager-layer-select'),
2031
2330
  icon: _icon = /*#__PURE__*/React.createElement(LayersAdd, {
2032
2331
  "data-testid": "layerSelectButtonConnectIcon"
2033
2332
  }),
@@ -2058,6 +2357,9 @@ const DescriptionRow = _a => {
2058
2357
  addLayerComponent
2059
2358
  } = _a,
2060
2359
  gridProps = __rest(_a, ["mapPresetsModule", "settings", "addLayerComponent"]);
2360
+ const {
2361
+ t
2362
+ } = useCoreTranslation();
2061
2363
  const [mapPresetsModuleInline] = React.useState(mapPresetsModule ? Object.assign(Object.assign({}, mapPresetsModule), {
2062
2364
  props: Object.assign(Object.assign({}, mapPresetsModule.props), {
2063
2365
  id: 'mappresets-menubuttonInline'
@@ -2088,7 +2390,7 @@ const DescriptionRow = _a => {
2088
2390
  }, /*#__PURE__*/React.createElement(Box, {
2089
2391
  className: `header-layer ${hasMapPresetsModule ? 'mappresetsModule-enabled' : ''}`,
2090
2392
  sx: styles$3.text
2091
- }, (_e = (_d = settings === null || settings === void 0 ? void 0 : settings.layerName) === null || _d === void 0 ? void 0 : _d.title) !== null && _e !== void 0 ? _e : 'Layer'), /*#__PURE__*/React.createElement(Box, {
2393
+ }, (_e = (_d = settings === null || settings === void 0 ? void 0 : settings.layerName) === null || _d === void 0 ? void 0 : _d.title) !== null && _e !== void 0 ? _e : t('layermanager-layer')), /*#__PURE__*/React.createElement(Box, {
2092
2394
  className: "header-mapPresets",
2093
2395
  sx: {
2094
2396
  marginRight: 4
@@ -2097,21 +2399,21 @@ const DescriptionRow = _a => {
2097
2399
  className: columnClasses.column3
2098
2400
  }, /*#__PURE__*/React.createElement(Box, {
2099
2401
  sx: styles$3.text
2100
- }, (_g = (_f = settings === null || settings === void 0 ? void 0 : settings.layerStyle) === null || _f === void 0 ? void 0 : _f.title) !== null && _g !== void 0 ? _g : 'Style')), /*#__PURE__*/React.createElement(Grid, {
2402
+ }, (_g = (_f = settings === null || settings === void 0 ? void 0 : settings.layerStyle) === null || _f === void 0 ? void 0 : _f.title) !== null && _g !== void 0 ? _g : t('layermanager-style-title'))), /*#__PURE__*/React.createElement(Grid, {
2101
2403
  className: columnClasses.column4
2102
2404
  }, /*#__PURE__*/React.createElement(Box, {
2103
2405
  sx: styles$3.text
2104
- }, (_j = (_h = settings === null || settings === void 0 ? void 0 : settings.opacity) === null || _h === void 0 ? void 0 : _h.title) !== null && _j !== void 0 ? _j : 'Opacity')), /*#__PURE__*/React.createElement(Grid, {
2406
+ }, (_j = (_h = settings === null || settings === void 0 ? void 0 : settings.opacity) === null || _h === void 0 ? void 0 : _h.title) !== null && _j !== void 0 ? _j : t('layermanager-opacity-title'))), /*#__PURE__*/React.createElement(Grid, {
2105
2407
  className: columnClasses.column5
2106
2408
  }, /*#__PURE__*/React.createElement(Box, {
2107
2409
  sx: styles$3.text
2108
- }, (_l = (_k = settings === null || settings === void 0 ? void 0 : settings.dimensions) === null || _k === void 0 ? void 0 : _k.title) !== null && _l !== void 0 ? _l : 'Dimensions')), /*#__PURE__*/React.createElement(Grid, {
2410
+ }, (_l = (_k = settings === null || settings === void 0 ? void 0 : settings.dimensions) === null || _k === void 0 ? void 0 : _k.title) !== null && _l !== void 0 ? _l : t('layermanager-dimensions-title'))), /*#__PURE__*/React.createElement(Grid, {
2109
2411
  className: columnClasses.acceptanceTime
2110
2412
  }, /*#__PURE__*/React.createElement(Box, {
2111
2413
  sx: [styles$3.text, {
2112
2414
  whiteSpace: 'nowrap'
2113
2415
  }]
2114
- }, (_o = (_m = settings === null || settings === void 0 ? void 0 : settings.acceptanceTime) === null || _m === void 0 ? void 0 : _m.title) !== null && _o !== void 0 ? _o : 'Acc Time')), /*#__PURE__*/React.createElement(Grid, {
2416
+ }, (_o = (_m = settings === null || settings === void 0 ? void 0 : settings.acceptanceTime) === null || _m === void 0 ? void 0 : _m.title) !== null && _o !== void 0 ? _o : t('layermanager-acceptance-time'))), /*#__PURE__*/React.createElement(Grid, {
2115
2417
  className: columnClasses.loadDuration
2116
2418
  }, /*#__PURE__*/React.createElement(Box, {
2117
2419
  sx: [styles$3.text, {
@@ -2294,6 +2596,9 @@ const DimensionSelectValue = ({
2294
2596
  skipLocalStyling
2295
2597
  }) => {
2296
2598
  var _a;
2599
+ const {
2600
+ t
2601
+ } = useCoreTranslation();
2297
2602
  const dimensionValuesRaw = (_a = selectedDimension === null || selectedDimension === void 0 ? void 0 : selectedDimension.values) === null || _a === void 0 ? void 0 : _a.split(',').slice(0, 100).reverse();
2298
2603
  if (!(selectedDimension === null || selectedDimension === void 0 ? void 0 : selectedDimension.name) || !(dimensionValuesRaw === null || dimensionValuesRaw === void 0 ? void 0 : dimensionValuesRaw.length)) {
2299
2604
  return null;
@@ -2341,7 +2646,9 @@ const DimensionSelectValue = ({
2341
2646
  skipLocalStyling: skipLocalStyling
2342
2647
  }, /*#__PURE__*/React__default.createElement(MenuItem, {
2343
2648
  disabled: true
2344
- }, "Dimension value (", dimensionValues.length, " options)"), dimensionValues.map(dimensionValue => {
2649
+ }, t('layermanager-dimensions-total-values', {
2650
+ total_dimensions: dimensionValues.length
2651
+ })), dimensionValues.map(dimensionValue => {
2345
2652
  var _a;
2346
2653
  return /*#__PURE__*/React__default.createElement(MenuItem, {
2347
2654
  key: dimensionValue,
@@ -2380,6 +2687,9 @@ const DimensionSelectName = ({
2380
2687
  dimensionNames,
2381
2688
  skipLocalStyling
2382
2689
  }) => {
2690
+ const {
2691
+ t
2692
+ } = useCoreTranslation();
2383
2693
  return /*#__PURE__*/React__default.createElement(TooltipSelect, {
2384
2694
  disableUnderline: true,
2385
2695
  tooltip: tooltip,
@@ -2406,14 +2716,14 @@ const DimensionSelectName = ({
2406
2716
  skipLocalStyling: skipLocalStyling
2407
2717
  }, /*#__PURE__*/React__default.createElement(MenuItem, {
2408
2718
  disabled: true
2409
- }, "Dimension"), dimensionNames.map(name => ( /*#__PURE__*/React__default.createElement(MenuItem, {
2719
+ }, t('layermanager-dimension-title')), dimensionNames.map(name => ( /*#__PURE__*/React__default.createElement(MenuItem, {
2410
2720
  key: name,
2411
2721
  value: name
2412
2722
  }, (nameMappings === null || nameMappings === void 0 ? void 0 : nameMappings[name]) || name))));
2413
2723
  };
2414
2724
 
2415
- const defaultDimensionNameTooltip = selectedDimension => `Dimensions: ${selectedDimension.name}`;
2416
- const defaultDimensionValueTooltip = selectedDimension => `Dimensions: ${selectedDimension.name} ${selectedDimension.currentValue} ${selectedDimension.units}`;
2725
+ const defaultDimensionNameTooltip = selectedDimension => `${translateKeyOutsideComponents('layermanager-dimensions-title')}: ${selectedDimension.name}`;
2726
+ const defaultDimensionValueTooltip = selectedDimension => `${translateKeyOutsideComponents('layermanager-dimensions-title')}: ${selectedDimension.name} ${selectedDimension.currentValue} ${selectedDimension.units}`;
2417
2727
  const DimensionSelect = ({
2418
2728
  onLayerChangeDimension,
2419
2729
  layerDimensions: _layerDimensions = [],
@@ -2512,10 +2822,13 @@ const RenderLayers = ({
2512
2822
  layerName,
2513
2823
  layers: _layers = [],
2514
2824
  isEnabled: _isEnabled = true,
2515
- tooltipPrefix: _tooltipPrefix = 'Layer: ',
2825
+ tooltipPrefix: _tooltipPrefix = `${translateKeyOutsideComponents('layermanager-layer')}: `,
2516
2826
  skipLocalStyling
2517
2827
  }) => {
2518
2828
  var _a;
2829
+ const {
2830
+ t
2831
+ } = useCoreTranslation();
2519
2832
  if (!_layers || !_layers.length) {
2520
2833
  return /*#__PURE__*/React.createElement(Box, {
2521
2834
  sx: {
@@ -2531,7 +2844,7 @@ const RenderLayers = ({
2531
2844
  color: 'geowebColors.layerManager.tableRowDefaultText.rgba',
2532
2845
  fontWeight: 500
2533
2846
  }
2534
- }, "No service available"));
2847
+ }, t('layermanager-baselayers-no-available')));
2535
2848
  }
2536
2849
  const selectLayer = event => {
2537
2850
  event.stopPropagation();
@@ -2564,7 +2877,7 @@ const RenderLayers = ({
2564
2877
  renderValue: value => extendedLayers.find(layer => layer.name === value).title
2565
2878
  }, /*#__PURE__*/React.createElement(MenuItem, {
2566
2879
  disabled: true
2567
- }, "Layer"), extendedLayers.map((layerFromServiceLayers, currentIndex) => ( /*#__PURE__*/React.createElement(MenuItem, {
2880
+ }, t('layermanager-layer')), extendedLayers.map((layerFromServiceLayers, currentIndex) => ( /*#__PURE__*/React.createElement(MenuItem, {
2568
2881
  key: layerFromServiceLayers.name,
2569
2882
  value: layerFromServiceLayers.name,
2570
2883
  disabled: !layerFromServiceLayers.leaf,
@@ -2608,8 +2921,11 @@ const OpacitySelect = ({
2608
2921
  currentOpacity,
2609
2922
  onLayerChangeOpacity,
2610
2923
  isEnabled: _isEnabled = true,
2611
- tooltipPrefix: _tooltipPrefix = 'Opacity: '
2924
+ tooltipPrefix: _tooltipPrefix = translateKeyOutsideComponents('layermanager-opacity-tooltip-prefix')
2612
2925
  }) => {
2926
+ const {
2927
+ t
2928
+ } = useCoreTranslation();
2613
2929
  const [anchorEl, setAnchorEl] = React.useState(null);
2614
2930
  const isOpen = Boolean(anchorEl);
2615
2931
  const theme = useTheme();
@@ -2695,7 +3011,7 @@ const OpacitySelect = ({
2695
3011
  }, theme.palette.geowebColors.layerManager.opacitySelect.popper)
2696
3012
  }, /*#__PURE__*/React.createElement(Box, {
2697
3013
  sx: sliderHeaderStyle
2698
- }, "Opacity"), /*#__PURE__*/React.createElement(CustomSlider, {
3014
+ }, t('layermanager-opacity-title')), /*#__PURE__*/React.createElement(CustomSlider, {
2699
3015
  "data-testid": "opacitySlider",
2700
3016
  orientation: "vertical",
2701
3017
  value: currentOpacity,
@@ -2737,9 +3053,12 @@ const LayerManagerMenuButton = ({
2737
3053
  mapId,
2738
3054
  layerId,
2739
3055
  onLayerDuplicate,
2740
- tooltipTitle: _tooltipTitle = 'Options',
3056
+ tooltipTitle: _tooltipTitle = translateKeyOutsideComponents('layermanager-options'),
2741
3057
  icon
2742
3058
  }) => {
3059
+ const {
3060
+ t
3061
+ } = useCoreTranslation();
2743
3062
  const onClickDuplicate = () => {
2744
3063
  onLayerDuplicate({
2745
3064
  mapId,
@@ -2757,7 +3076,7 @@ const LayerManagerMenuButton = ({
2757
3076
  },
2758
3077
  menuPosition: "bottom",
2759
3078
  menuItems: [{
2760
- text: 'Duplicate layer',
3079
+ text: t('layermanager-layer-duplicate'),
2761
3080
  action: onClickDuplicate,
2762
3081
  icon: /*#__PURE__*/React.createElement(Copy, null)
2763
3082
  }],
@@ -2849,10 +3168,13 @@ const RenderStyles = ({
2849
3168
  onChangeLayerStyle,
2850
3169
  isEnabled: _isEnabled = true,
2851
3170
  icon,
2852
- tooltipPrefix: _tooltipPrefix = 'Style: ',
3171
+ tooltipPrefix: _tooltipPrefix = `${translateKeyOutsideComponents('layermanager-style-title')}: `,
2853
3172
  skipLocalStyling
2854
3173
  }) => {
2855
3174
  var _a;
3175
+ const {
3176
+ t
3177
+ } = useCoreTranslation();
2856
3178
  const styles = [{
2857
3179
  title: 'default',
2858
3180
  name: 'default',
@@ -2891,7 +3213,7 @@ const RenderStyles = ({
2891
3213
  skipLocalStyling: skipLocalStyling
2892
3214
  }, /*#__PURE__*/React.createElement(MenuItem, {
2893
3215
  disabled: true
2894
- }, "Style"), styles.map(styleFromlayer => ( /*#__PURE__*/React.createElement(MenuItem, {
3216
+ }, t('layermanager-style-title')), styles.map(styleFromlayer => ( /*#__PURE__*/React.createElement(MenuItem, {
2895
3217
  key: styleFromlayer.name,
2896
3218
  value: styleFromlayer.name
2897
3219
  }, styleFromlayer.title))));
@@ -2935,8 +3257,11 @@ const ActivateLayer = ({
2935
3257
  current
2936
3258
  }) => {
2937
3259
  const isActive = current !== AutoOptions.NONE;
3260
+ const {
3261
+ t
3262
+ } = useCoreTranslation();
2938
3263
  return /*#__PURE__*/React.createElement(ToggleMenu, {
2939
- tooltipTitle: "Leading layer",
3264
+ tooltipTitle: t('layermanager-layer-leading'),
2940
3265
  buttonSx: {
2941
3266
  margin: '4px 2px',
2942
3267
  '&.MuiButtonBase-root': {
@@ -2954,35 +3279,35 @@ const ActivateLayer = ({
2954
3279
  isEnabled: isEnabled
2955
3280
  }),
2956
3281
  menuItems: [{
2957
- text: 'None',
3282
+ text: t('layermanager-layer-leading-none'),
2958
3283
  action: () => {
2959
3284
  onChange(AutoOptions.NONE);
2960
3285
  },
2961
3286
  icon: /*#__PURE__*/React.createElement(None, null),
2962
3287
  isSelected: current === AutoOptions.NONE
2963
3288
  }, {
2964
- text: 'Auto-timestep',
3289
+ text: t('layermanager-layer-leading-auto-timestep'),
2965
3290
  action: () => {
2966
3291
  onChange(AutoOptions.TIMESTEP);
2967
3292
  },
2968
3293
  icon: /*#__PURE__*/React.createElement(FastForward, null),
2969
3294
  isSelected: current === AutoOptions.TIMESTEP
2970
3295
  }, {
2971
- text: 'Auto-update',
3296
+ text: t('layermanager-layer-leading-auto-update'),
2972
3297
  action: () => {
2973
3298
  onChange(AutoOptions.UPDATE);
2974
3299
  },
2975
3300
  icon: /*#__PURE__*/React.createElement(AutoUpdateActive, null),
2976
3301
  isSelected: current === AutoOptions.UPDATE
2977
3302
  }, {
2978
- text: 'Both',
3303
+ text: t('layermanager-layer-leading-both'),
2979
3304
  action: () => {
2980
3305
  onChange(AutoOptions.BOTH);
2981
3306
  },
2982
3307
  isSelected: current === AutoOptions.BOTH,
2983
3308
  icon: /*#__PURE__*/React.createElement(Both, null)
2984
3309
  }],
2985
- menuTitle: "Leading layer"
3310
+ menuTitle: t('layermanager-layer-leading')
2986
3311
  });
2987
3312
  };
2988
3313
  const AutoUpdateIcon = ({
@@ -3074,37 +3399,6 @@ if (NOT_GENERIC || INCORRECT_NAME) {
3074
3399
  }, { unsafe: true });
3075
3400
  }
3076
3401
 
3077
- const acceptanceTimes = [{
3078
- value: 'off',
3079
- text: 'off'
3080
- }, {
3081
- value: '0',
3082
- text: 'exact'
3083
- }, {
3084
- value: '1',
3085
- text: '00:01'
3086
- }, {
3087
- value: '5',
3088
- text: '00:05'
3089
- }, {
3090
- value: '10',
3091
- text: '00:10'
3092
- }, {
3093
- value: '30',
3094
- text: '00:30'
3095
- }, {
3096
- value: '60',
3097
- text: '01:00'
3098
- }, {
3099
- value: '720',
3100
- text: '12:00'
3101
- }, {
3102
- value: '1440',
3103
- text: '24:00'
3104
- }];
3105
- const acceptanceTimesValues = acceptanceTimes.map(time => ({
3106
- value: time.value
3107
- }));
3108
3402
  const AcceptanceTime = ({
3109
3403
  onChangeAcceptanceTime,
3110
3404
  isEnabled: _isEnabled = true,
@@ -3113,13 +3407,58 @@ const AcceptanceTime = ({
3113
3407
  tooltipTitle,
3114
3408
  skipLocalStyling
3115
3409
  }) => {
3410
+ const {
3411
+ t
3412
+ } = useCoreTranslation();
3116
3413
  const onChange = acceptanceTimeRaw => {
3117
3414
  const acceptanceTime = acceptanceTimeRaw === 'off' ? undefined : Number(acceptanceTimeRaw);
3118
3415
  onChangeAcceptanceTime(acceptanceTime);
3119
3416
  };
3120
3417
  const layerAcceptanceTime = acceptanceTimeInMinutes === undefined ? 'off' : acceptanceTimeInMinutes.toString();
3418
+ const getAcceptenceTimes = () => {
3419
+ const acceptanceTimes = [{
3420
+ value: 'off',
3421
+ text: t('layermanager-acceptance-time-off')
3422
+ }, {
3423
+ value: '0',
3424
+ text: t('layermanager-acceptance-time-exact')
3425
+ }, {
3426
+ value: '1',
3427
+ text: '00:01'
3428
+ }, {
3429
+ value: '5',
3430
+ text: '00:05'
3431
+ }, {
3432
+ value: '10',
3433
+ text: '00:10'
3434
+ }, {
3435
+ value: '30',
3436
+ text: '00:30'
3437
+ }, {
3438
+ value: '60',
3439
+ text: '01:00'
3440
+ }, {
3441
+ value: '720',
3442
+ text: '12:00'
3443
+ }, {
3444
+ value: '1440',
3445
+ text: '24:00'
3446
+ }];
3447
+ const acceptanceTimesValues = acceptanceTimes.map(time => ({
3448
+ value: time.value
3449
+ }));
3450
+ return {
3451
+ acceptanceTimes,
3452
+ acceptanceTimesValues
3453
+ };
3454
+ };
3455
+ const {
3456
+ acceptanceTimes,
3457
+ acceptanceTimesValues
3458
+ } = React__default.useRef(getAcceptenceTimes()).current;
3459
+ const title = t('layermanager-acceptance-time');
3121
3460
  return /*#__PURE__*/React__default.createElement(TooltipSelect, {
3122
- tooltip: tooltipTitle !== null && tooltipTitle !== void 0 ? tooltipTitle : 'Acc Time',
3461
+ tooltip: tooltipTitle !== null && tooltipTitle !== void 0 ? tooltipTitle : title,
3123
3462
  isEnabled: _isEnabled,
3124
3463
  value: layerAcceptanceTime,
3125
3464
  onChange: event => {
@@ -3136,7 +3475,7 @@ const AcceptanceTime = ({
3136
3475
  skipLocalStyling: skipLocalStyling
3137
3476
  }, /*#__PURE__*/React__default.createElement(MenuItem, {
3138
3477
  disabled: true
3139
- }, "Acc Time"), acceptanceTimes.map(accTime => ( /*#__PURE__*/React__default.createElement(MenuItem, {
3478
+ }, title), acceptanceTimes.map(accTime => ( /*#__PURE__*/React__default.createElement(MenuItem, {
3140
3479
  key: accTime.text,
3141
3480
  value: accTime.value
3142
3481
  }, accTime.text))));
@@ -3173,6 +3512,27 @@ const ORANGE = {
3173
3512
  const MissingData = ({
3174
3513
  layerIsInsideAcceptanceTime
3175
3514
  }) => {
3515
+ const {
3516
+ t
3517
+ } = useCoreTranslation();
3518
+ const getTextAndColor = layerIsInsideAcceptanceTime => {
3519
+ if (layerIsInsideAcceptanceTime === 'inside') {
3520
+ return {
3521
+ tooltipText: t('layermanager-acceptance-time-within'),
3522
+ color: ORANGE
3523
+ };
3524
+ }
3525
+ if (layerIsInsideAcceptanceTime === 'outside') {
3526
+ return {
3527
+ color: RED,
3528
+ tooltipText: t('layermanager-acceptance-time-outside')
3529
+ };
3530
+ }
3531
+ return {
3532
+ color: GREEN,
3533
+ tooltipText: t('layermanager-acceptance-time-updated')
3534
+ };
3535
+ };
3176
3536
  const {
3177
3537
  tooltipText,
3178
3538
  color
@@ -3196,24 +3556,6 @@ const MissingData = ({
3196
3556
  }
3197
3557
  })));
3198
3558
  };
3199
- const getTextAndColor = layerIsInsideAcceptanceTime => {
3200
- if (layerIsInsideAcceptanceTime === 'inside') {
3201
- return {
3202
- tooltipText: 'Layer: within the data acceptance window',
3203
- color: ORANGE
3204
- };
3205
- }
3206
- if (layerIsInsideAcceptanceTime === 'outside') {
3207
- return {
3208
- color: RED,
3209
- tooltipText: 'Layer: out of date'
3210
- };
3211
- }
3212
- return {
3213
- color: GREEN,
3214
- tooltipText: 'Layer: updated'
3215
- };
3216
- };
3217
3559
 
3218
3560
  const MILLISECONDS_PER_SECOND = 1e3;
3219
3561
  const MAX_DURATION_IN_SECONDS = 60;
@@ -3354,11 +3696,16 @@ const Opacity = ({
3354
3696
  }));
3355
3697
  const DeleteLayer = ({
3356
3698
  onClick
3357
- }) => ( /*#__PURE__*/React__default.createElement(CustomIconButton, {
3358
- tooltipTitle: "Delete",
3359
- onClick: onClick,
3360
- "data-testid": "deleteButton"
3361
- }, /*#__PURE__*/React__default.createElement(Delete, null)));
3699
+ }) => {
3700
+ const {
3701
+ t
3702
+ } = useCoreTranslation();
3703
+ return /*#__PURE__*/React__default.createElement(CustomIconButton, {
3704
+ tooltipTitle: t('layermanager-layer-delete'),
3705
+ onClick: onClick,
3706
+ "data-testid": "deleteButton"
3707
+ }, /*#__PURE__*/React__default.createElement(Delete, null));
3708
+ };
3362
3709
  const ShowLayerInfo = ({
3363
3710
  onClick
3364
3711
  }) => /*#__PURE__*/React__default.createElement(LayerInfoButton, {
@@ -3405,6 +3752,9 @@ const LayerRowUnstyled = ({
3405
3752
  layerLoadDurationLayout,
3406
3753
  className
3407
3754
  }) => {
3755
+ const {
3756
+ t
3757
+ } = useCoreTranslation();
3408
3758
  const onClickRow = () => _onLayerRowClick(layerId);
3409
3759
  const changeEnable = event => {
3410
3760
  event.stopPropagation();
@@ -3514,7 +3864,7 @@ const LayerRowUnstyled = ({
3514
3864
  item: true,
3515
3865
  className: columnClasses.column7
3516
3866
  }, /*#__PURE__*/React__default.createElement(AlertBanner, {
3517
- title: "This layer could not be loaded: does not exist on the server.",
3867
+ title: t('layermanager-layer-error'),
3518
3868
  isCompact: true
3519
3869
  }))) : ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Grid, {
3520
3870
  item: true,
@@ -3599,6 +3949,9 @@ const Accordion = ({
3599
3949
  LeftButtons,
3600
3950
  LoadDuration
3601
3951
  }) => {
3952
+ const {
3953
+ t
3954
+ } = useCoreTranslation();
3602
3955
  return /*#__PURE__*/React__default.createElement(CustomAccordion, {
3603
3956
  className: "medium-layermanager",
3604
3957
  defaultExpanded: false,
@@ -3632,7 +3985,7 @@ const Accordion = ({
3632
3985
  item: true
3633
3986
  }, /*#__PURE__*/React__default.createElement(Grid, {
3634
3987
  item: true
3635
- }, "Style"), Styles), /*#__PURE__*/React__default.createElement(Grid, {
3988
+ }, t('layermanager-style-title')), Styles), /*#__PURE__*/React__default.createElement(Grid, {
3636
3989
  container: true,
3637
3990
  item: true,
3638
3991
  sx: {
@@ -3642,12 +3995,12 @@ const Accordion = ({
3642
3995
  }
3643
3996
  }, /*#__PURE__*/React__default.createElement(Grid, {
3644
3997
  item: true
3645
- }, "Opacity"), Opacity), /*#__PURE__*/React__default.createElement(Grid, {
3998
+ }, t('layermanager-opacity-title')), Opacity), /*#__PURE__*/React__default.createElement(Grid, {
3646
3999
  container: true,
3647
4000
  item: true
3648
4001
  }, /*#__PURE__*/React__default.createElement(Grid, {
3649
4002
  item: true
3650
- }, "Acc Time"), Acceptance), /*#__PURE__*/React__default.createElement(Grid, {
4003
+ }, t('layermanager-acceptance-time')), Acceptance), /*#__PURE__*/React__default.createElement(Grid, {
3651
4004
  container: true,
3652
4005
  item: true,
3653
4006
  flexDirection: "column"
@@ -3686,7 +4039,7 @@ const Accordion = ({
3686
4039
  const DeleteLayerConnect = ({
3687
4040
  layerId,
3688
4041
  mapId,
3689
- tooltipTitle: _tooltipTitle = 'Delete',
4042
+ tooltipTitle: _tooltipTitle = translateKeyOutsideComponents('layermanager-layer-delete'),
3690
4043
  icon: _icon = /*#__PURE__*/React.createElement(Delete, null)
3691
4044
  }) => {
3692
4045
  const dispatch = useDispatch();
@@ -3737,6 +4090,9 @@ const EnableLayerConnect = ({
3737
4090
  tooltipTitle
3738
4091
  }) => {
3739
4092
  const dispatch = useDispatch();
4093
+ const {
4094
+ t
4095
+ } = useCoreTranslation();
3740
4096
  const layerChangeEnabled = React.useCallback(({
3741
4097
  layerId,
3742
4098
  enabled
@@ -3746,7 +4102,7 @@ const EnableLayerConnect = ({
3746
4102
  mapId,
3747
4103
  origin: layerTypes.LayerActionOrigin.layerManager
3748
4104
  })), [dispatch, mapId]);
3749
- const normalTooltip = tooltipTitle !== null && tooltipTitle !== void 0 ? tooltipTitle : 'Toggle visibility';
4105
+ const normalTooltip = tooltipTitle !== null && tooltipTitle !== void 0 ? tooltipTitle : t('layermanager-layer-toggle');
3750
4106
  const miniTooltip = tooltipTitle !== null && tooltipTitle !== void 0 ? tooltipTitle : _layerName;
3751
4107
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CustomIconButton, {
3752
4108
  shouldShowAsDisabled: !_isEnabled,
@@ -4114,6 +4470,9 @@ const ActivateLayerConnect = ({
4114
4470
  layerId,
4115
4471
  mapId
4116
4472
  }) => {
4473
+ const {
4474
+ t
4475
+ } = useCoreTranslation();
4117
4476
  const dispatch = useDispatch();
4118
4477
  const autoUpdateLayerId = useSelector(store => mapSelectors.getAutoUpdateLayerId(store, mapId));
4119
4478
  const autoTimestepLayerId = useSelector(store => mapSelectors.getAutoTimeStepLayerId(store, mapId));
@@ -4244,7 +4603,7 @@ const ActivateLayerConnect = ({
4244
4603
  const layerHasTimeDimension = useSelector(store => layerSelectors.getLayerHasTimeDimension(store, layerId));
4245
4604
  if (!layerHasTimeDimension) {
4246
4605
  return /*#__PURE__*/React.createElement(CustomTooltip, {
4247
- title: "Layer has no time dimension",
4606
+ title: t('layermanager-dimensions-none'),
4248
4607
  placement: "top"
4249
4608
  }, /*#__PURE__*/React.createElement(Box$1, {
4250
4609
  "data-testid": "noTimeDimension",
@@ -4305,6 +4664,9 @@ const AcceptanceTimeConnect = ({
4305
4664
  tooltipTitle,
4306
4665
  skipLocalStyling
4307
4666
  }) => {
4667
+ const {
4668
+ t
4669
+ } = useCoreTranslation();
4308
4670
  const isEnabled = useSelector(store => layerSelectors.getLayerEnabled(store, layerId));
4309
4671
  const dispatch = useDispatch();
4310
4672
  const acceptanceTimeInMinutes = useSelector(store => {
@@ -4319,7 +4681,7 @@ const AcceptanceTimeConnect = ({
4319
4681
  const layerHasTimeDimension = useSelector(store => layerSelectors.getLayerHasTimeDimension(store, layerId));
4320
4682
  if (!layerHasTimeDimension) {
4321
4683
  return /*#__PURE__*/React__default.createElement(CustomTooltip, {
4322
- title: "Layer has no time dimension",
4684
+ title: t('layermanager-dimensions-none'),
4323
4685
  placement: "top"
4324
4686
  }, /*#__PURE__*/React__default.createElement(Box, {
4325
4687
  sx: {
@@ -4592,7 +4954,6 @@ const LayerRowConnect = /*#__PURE__*/React.memo(({
4592
4954
  });
4593
4955
  }, areEqual);
4594
4956
 
4595
- const TOOLTIP_TITLE = 'Drag';
4596
4957
  const DragHandle = ({
4597
4958
  isDisabled: _isDisabled = false,
4598
4959
  index: _index = undefined,
@@ -4601,7 +4962,7 @@ const DragHandle = ({
4601
4962
  icon: _icon = /*#__PURE__*/React__default.createElement(DragHandle$1, {
4602
4963
  "data-testid": "dragHandleIcon"
4603
4964
  }),
4604
- tooltipTitle: _tooltipTitle = TOOLTIP_TITLE
4965
+ tooltipTitle: _tooltipTitle = translateKeyOutsideComponents('layermanager-layer-drag')
4605
4966
  }) => {
4606
4967
  const usedTooltipTitle = _hideTooltip ? '' : _tooltipTitle;
4607
4968
  return /*#__PURE__*/React__default.createElement(CustomIconButton, {
@@ -4869,11 +5230,14 @@ const BaseLayers = ({
4869
5230
  availableBaseLayers,
4870
5231
  onChangeBaseLayers,
4871
5232
  icon,
4872
- tooltipPrefix: _tooltipPrefix = 'Layer: '
5233
+ tooltipPrefix: _tooltipPrefix = `${translateKeyOutsideComponents('layermanager-layer')}: `
4873
5234
  }) => {
4874
5235
  var _a;
5236
+ const {
5237
+ t
5238
+ } = useCoreTranslation();
4875
5239
  if (!availableBaseLayers || !availableBaseLayers.length) {
4876
- return /*#__PURE__*/React.createElement("div", null, "No service available");
5240
+ return /*#__PURE__*/React.createElement("div", null, t('layermanager-baselayers-no-available'));
4877
5241
  }
4878
5242
  const selectedBaseLayerId = typeof selectedBaseLayers[0] !== 'undefined' ? selectedBaseLayers[0].id : '';
4879
5243
  const list = availableBaseLayers.map(layer => ({
@@ -4906,7 +5270,7 @@ const BaseLayers = ({
4906
5270
  IconComponent: icon
4907
5271
  }, /*#__PURE__*/React.createElement(MenuItem, {
4908
5272
  disabled: true
4909
- }, "Base layer"), availableBaseLayers.map(baseLayer => ( /*#__PURE__*/React.createElement(MenuItem, {
5273
+ }, t('layermanager-baselayers-title')), availableBaseLayers.map(baseLayer => ( /*#__PURE__*/React.createElement(MenuItem, {
4910
5274
  key: baseLayer.id,
4911
5275
  value: baseLayer.id
4912
5276
  }, baseLayer.name)))));
@@ -5440,6 +5804,9 @@ const WMSServerList = ({
5440
5804
  handleChangeService,
5441
5805
  service: activeService
5442
5806
  }) => {
5807
+ const {
5808
+ t
5809
+ } = useCoreTranslation();
5443
5810
  const handleListItemClick = (event, service) => {
5444
5811
  handleChangeService(service);
5445
5812
  };
@@ -5456,7 +5823,7 @@ const WMSServerList = ({
5456
5823
  }, /*#__PURE__*/React.createElement(InputLabel, {
5457
5824
  shrink: true,
5458
5825
  htmlFor: "select-multiple-native"
5459
- }, "Available services"))), /*#__PURE__*/React.createElement(Paper, {
5826
+ }, t('add-layer-popup-available-services')))), /*#__PURE__*/React.createElement(Paper, {
5460
5827
  style: {
5461
5828
  height: 200,
5462
5829
  overflow: 'auto'
@@ -5495,6 +5862,9 @@ const WMSLayerTreeHeader = ({
5495
5862
  serviceName,
5496
5863
  onClickReload
5497
5864
  }) => {
5865
+ const {
5866
+ t
5867
+ } = useCoreTranslation();
5498
5868
  return /*#__PURE__*/React.createElement(Grid, {
5499
5869
  container: true,
5500
5870
  direction: "row",
@@ -5505,10 +5875,12 @@ const WMSLayerTreeHeader = ({
5505
5875
  }, /*#__PURE__*/React.createElement(InputLabel, {
5506
5876
  shrink: true,
5507
5877
  htmlFor: "select-multiple-native"
5508
- }, "Available layers for ", serviceName)), onClickReload && ( /*#__PURE__*/React.createElement(Grid, {
5878
+ }, t('add-layer-popup-available-layers', {
5879
+ serviceName
5880
+ }))), onClickReload && ( /*#__PURE__*/React.createElement(Grid, {
5509
5881
  item: true
5510
5882
  }, /*#__PURE__*/React.createElement(CustomIconButton, {
5511
- tooltipTitle: "Reload layers from service",
5883
+ tooltipTitle: t('add-layer-popup-reload-layers'),
5512
5884
  "data-testid": "reloadLayers",
5513
5885
  onClick: onClickReload
5514
5886
  }, /*#__PURE__*/React.createElement(Cached, null)))));
@@ -5519,6 +5891,9 @@ const WMSLayerTree = ({
5519
5891
  onClickLayer,
5520
5892
  highlightedLayers
5521
5893
  }) => {
5894
+ const {
5895
+ t
5896
+ } = useCoreTranslation();
5522
5897
  const initialTree = {
5523
5898
  name: 'loading wms getcapabilities',
5524
5899
  leaf: true,
@@ -5568,7 +5943,7 @@ const WMSLayerTree = ({
5568
5943
  display: "flex"
5569
5944
  }, /*#__PURE__*/React.createElement(Typography, {
5570
5945
  variant: "body2"
5571
- }, "No data"))));
5946
+ }, t('wms-loader-no-data')))));
5572
5947
  }
5573
5948
  // Base case where there exists at least one layer
5574
5949
  // TODO: find a better way of doing this, without using prototype
@@ -5925,6 +6300,9 @@ const AddLayersPopup = ({
5925
6300
  handleClose,
5926
6301
  layerType: _layerType = LayerType.mapLayer
5927
6302
  }) => {
6303
+ const {
6304
+ t
6305
+ } = useCoreTranslation();
5928
6306
  const [serviceURL, setServiceURL] = React.useState('');
5929
6307
  const [services, setServices] = React.useState(_preloadedServices);
5930
6308
  const [activeService, setActiveService] = React.useState(_preloadedServices[0]);
@@ -5961,11 +6339,11 @@ const AddLayersPopup = ({
5961
6339
  setUrlError('');
5962
6340
  setLoading(false);
5963
6341
  }).catch(() => {
5964
- setUrlError('Please enter a valid WMS service');
6342
+ setUrlError(t('wms-loader-error-valid-service'));
5965
6343
  setLoading(false);
5966
6344
  });
5967
6345
  } else {
5968
- setUrlError('Please enter a valid URL');
6346
+ setUrlError(t('wms-loader-error-valid-url'));
5969
6347
  setLoading(false);
5970
6348
  }
5971
6349
  };
@@ -5984,7 +6362,7 @@ const AddLayersPopup = ({
5984
6362
  "data-testid": "addLayersPopup"
5985
6363
  }, /*#__PURE__*/React.createElement(DialogTitle, {
5986
6364
  id: "form-dialog-title"
5987
- }, "Load WMS layer(s)"), /*#__PURE__*/React.createElement(DialogContent, null, /*#__PURE__*/React.createElement(DialogContentText, null, "Please enter a wms server, or select one from the list."), /*#__PURE__*/React.createElement(Box, {
6365
+ }, t('add-layer-popup-title')), /*#__PURE__*/React.createElement(DialogContent, null, /*#__PURE__*/React.createElement(DialogContentText, null, t('wms-loader-description')), /*#__PURE__*/React.createElement(Box, {
5988
6366
  m: 2
5989
6367
  }, /*#__PURE__*/React.createElement(Grid, {
5990
6368
  container: true,
@@ -5996,7 +6374,7 @@ const AddLayersPopup = ({
5996
6374
  }, /*#__PURE__*/React.createElement(TextField, {
5997
6375
  margin: "dense",
5998
6376
  id: "serviceurl",
5999
- label: "Service URL",
6377
+ label: t('add-layer-popup-service-url'),
6000
6378
  value: serviceURL,
6001
6379
  type: "url",
6002
6380
  onChange: event => {
@@ -6054,7 +6432,7 @@ const AddLayersPopup = ({
6054
6432
  })))))), /*#__PURE__*/React.createElement(DialogActions, null, /*#__PURE__*/React.createElement(Button, {
6055
6433
  onClick: handleClose,
6056
6434
  color: "primary"
6057
- }, "Close")));
6435
+ }, t('actions-close'))));
6058
6436
  };
6059
6437
 
6060
6438
  const styles$2 = {
@@ -6298,12 +6676,16 @@ const ProjectionSelect = ({
6298
6676
  currentProjection,
6299
6677
  onChangeProjection
6300
6678
  }) => {
6679
+ const {
6680
+ t
6681
+ } = useCoreTranslation();
6301
6682
  const selectProjection = newProj => {
6302
6683
  const newProjDetails = availableProjections.find(proj => proj.value === newProj);
6303
6684
  onChangeProjection(newProjDetails);
6304
6685
  };
6305
6686
  const index = availableProjections.findIndex(projection => projection.value === currentProjection);
6306
6687
  const currentProjectionObject = availableProjections.find(projection => projection.value === currentProjection);
6688
+ const title = t('projection-title');
6307
6689
  return /*#__PURE__*/React.createElement(Grid, {
6308
6690
  container: true,
6309
6691
  className: "setProjection-column",
@@ -6335,7 +6717,7 @@ const ProjectionSelect = ({
6335
6717
  SelectDisplayProps: {
6336
6718
  'aria-label': 'projectionSelect'
6337
6719
  },
6338
- tooltip: `Projection: ${currentProjectionObject === null || currentProjectionObject === void 0 ? void 0 : currentProjectionObject.name}`,
6720
+ tooltip: `${title}: ${currentProjectionObject === null || currentProjectionObject === void 0 ? void 0 : currentProjectionObject.name}`,
6339
6721
  isEnabled: true,
6340
6722
  style: {
6341
6723
  maxWidth: '100%'
@@ -6351,7 +6733,7 @@ const ProjectionSelect = ({
6351
6733
  requiresCtrlToChange: true
6352
6734
  }, /*#__PURE__*/React.createElement(MenuItem, {
6353
6735
  disabled: true
6354
- }, "Projection"), availableProjections.map(projection => ( /*#__PURE__*/React.createElement(MenuItem, {
6736
+ }, title), availableProjections.map(projection => ( /*#__PURE__*/React.createElement(MenuItem, {
6355
6737
  key: projection.name,
6356
6738
  value: projection.value
6357
6739
  }, projection.name)))))));
@@ -6413,7 +6795,7 @@ const LayerManager = ({
6413
6795
  preloadedBaseServices,
6414
6796
  bounds,
6415
6797
  onClose,
6416
- title: _title = 'Layer Manager',
6798
+ title: _title = translateKeyOutsideComponents('layermanager-title'),
6417
6799
  isOpen,
6418
6800
  onMouseDown: _onMouseDown = () => {},
6419
6801
  order: _order = 0,
@@ -6435,6 +6817,9 @@ const LayerManager = ({
6435
6817
  addLayerComponent
6436
6818
  }) => {
6437
6819
  var _a, _b, _c, _d, _e, _f, _g;
6820
+ const {
6821
+ t
6822
+ } = useCoreTranslation();
6438
6823
  const minSize = {
6439
6824
  width: 100,
6440
6825
  height: 126
@@ -6556,7 +6941,7 @@ const LayerManager = ({
6556
6941
  settings: settings === null || settings === void 0 ? void 0 : settings.content
6557
6942
  }), /*#__PURE__*/React.createElement(BaseLayerRow, {
6558
6943
  mapId: mapId,
6559
- tooltip: "Add base layers",
6944
+ tooltip: t('layermanager-baselayers-tooltip'),
6560
6945
  preloadedAvailableBaseLayers: preloadedAvailableBaseLayers,
6561
6946
  preloadedServices: preloadedBaseServices,
6562
6947
  settings: settings === null || settings === void 0 ? void 0 : settings.footer
@@ -6638,7 +7023,7 @@ const LayerManagerConnect = ({
6638
7023
  preloadedMapServices,
6639
7024
  preloadedBaseServices,
6640
7025
  bounds,
6641
- title: _title = 'Layer Manager',
7026
+ title: _title = translateKeyOutsideComponents('layermanager-title'),
6642
7027
  showMapIdInTitle: _showMapIdInTitle = false,
6643
7028
  leftHeaderComponent: _leftHeaderComponent = undefined,
6644
7029
  mapId: initialMapId = null,
@@ -6743,6 +7128,9 @@ const LayerManagerMapButtonConnect = ({
6743
7128
  source: _source = 'app',
6744
7129
  isMultiMap: _isMultiMap = false
6745
7130
  }) => {
7131
+ const {
7132
+ t
7133
+ } = useCoreTranslation();
6746
7134
  const dispatch = useDispatch();
6747
7135
  const dialogType = _isMultiMap ? `${uiTypes.DialogTypes.LayerManager}-${mapId}` : uiTypes.DialogTypes.LayerManager;
6748
7136
  const currentActiveMapId = useSelector(store => uiSelectors.getDialogMapId(store, dialogType));
@@ -6757,7 +7145,7 @@ const LayerManagerMapButtonConnect = ({
6757
7145
  }, [currentActiveMapId, dialogType, dispatch, isOpenInStore, mapId, _source]);
6758
7146
  const isOpen = currentActiveMapId === mapId && isOpenInStore;
6759
7147
  return /*#__PURE__*/React.createElement(MapControlButton, {
6760
- title: "Layer Manager",
7148
+ title: t('layermanager-title'),
6761
7149
  "data-testid": "layerManagerButton",
6762
7150
  onClick: openLayerManagerDialog,
6763
7151
  isActive: isOpen
@@ -8024,12 +8412,10 @@ const LegendMapButtonConnect = ({
8024
8412
  }));
8025
8413
  }, [currentActiveMapId, dispatch, isOpenInStore, mapId, _source, legendType]);
8026
8414
  const isOpen = currentActiveMapId === mapId && isOpenInStore;
8027
- return /*#__PURE__*/React.createElement(MapControlButton, {
8028
- title: "Legend",
8029
- "data-testid": "open-Legend",
8030
- onClick: openLegendDialog,
8031
- isActive: isOpen
8032
- }, /*#__PURE__*/React.createElement(List$1, null));
8415
+ return /*#__PURE__*/React.createElement(LegendButton, {
8416
+ isOpen: isOpen,
8417
+ openLegendDialog: openLegendDialog
8418
+ });
8033
8419
  };
8034
8420
 
8035
8421
  /* *
@@ -8124,6 +8510,9 @@ const GetFeatureInfoDialog = ({
8124
8510
  source: _source = 'app',
8125
8511
  mapPinLocation
8126
8512
  }) => {
8513
+ const {
8514
+ t
8515
+ } = useCoreTranslation();
8127
8516
  /* Ref and state for maplocation */
8128
8517
  const mapLocationWasChanged = React__default.useRef(false);
8129
8518
  const [isInitialMapLocationChanged, setInitialMapLocationIsChanged] = React__default.useState(false);
@@ -8200,7 +8589,7 @@ const GetFeatureInfoDialog = ({
8200
8589
  },
8201
8590
  minWidth: 300,
8202
8591
  onClose: onClose,
8203
- title: _showMapId ? `Event marker info ${mapId}` : 'Event marker info',
8592
+ title: _showMapId ? `${t('feature_info_marker_info')} ${mapId}` : t('feature_info_marker_info'),
8204
8593
  initialMaxHeight: 440,
8205
8594
  isOpen: isOpen,
8206
8595
  "data-testid": "moveable-getfeatureinfo",
@@ -8268,13 +8657,13 @@ const GetFeatureInfoDialog = ({
8268
8657
  sx: {
8269
8658
  padding: '10px'
8270
8659
  }
8271
- }, "Click on the map for info.")), !hasLayers && ( /*#__PURE__*/React__default.createElement(Typography, {
8660
+ }, t('feature_info_title'))), !hasLayers && ( /*#__PURE__*/React__default.createElement(Typography, {
8272
8661
  "data-testid": "NoLayers",
8273
8662
  variant: "subtitle1",
8274
8663
  sx: {
8275
8664
  padding: '10px'
8276
8665
  }
8277
- }, "No layers added to the map."))));
8666
+ }, t('feature_info_no_layers')))));
8278
8667
  };
8279
8668
 
8280
8669
  /* *
@@ -8361,6 +8750,9 @@ const GetFeatureInfoButtonConnect = ({
8361
8750
  mapId,
8362
8751
  source: _source = 'app'
8363
8752
  }) => {
8753
+ const {
8754
+ t
8755
+ } = useCoreTranslation();
8364
8756
  const dispatch = useDispatch();
8365
8757
  const gfiType = `getfeatureinfo-${mapId}`;
8366
8758
  const isOpenInStore = useSelector(store => uiSelectors.getisDialogOpen(store, gfiType));
@@ -8374,7 +8766,7 @@ const GetFeatureInfoButtonConnect = ({
8374
8766
  }));
8375
8767
  }, [mapId, dispatch, isOpenInStore, _source, gfiType]);
8376
8768
  return /*#__PURE__*/React.createElement(MapControlButton, {
8377
- title: "Get information for a specific location",
8769
+ title: t('feature_info_location_info'),
8378
8770
  "data-testid": "open-getfeatureinfo",
8379
8771
  onClick: openGfiDialog,
8380
8772
  isActive: isOpenInStore
@@ -8401,6 +8793,9 @@ const SearchControlButtonConnect = ({
8401
8793
  mapId,
8402
8794
  source: _source = 'app'
8403
8795
  }) => {
8796
+ const {
8797
+ t
8798
+ } = useCoreTranslation();
8404
8799
  const dispatch = useDispatch();
8405
8800
  const dialogType = `${uiTypes.DialogTypes.Search}-${mapId}`;
8406
8801
  const currentActiveMapId = useSelector(store => uiSelectors.getDialogMapId(store, dialogType));
@@ -8415,8 +8810,8 @@ const SearchControlButtonConnect = ({
8415
8810
  }, [currentActiveMapId, dialogType, dispatch, isOpenInStore, mapId, _source]);
8416
8811
  return /*#__PURE__*/React__default.createElement(MapControlButton, {
8417
8812
  onClick: openSearchDialog,
8418
- title: "Search",
8419
- "aria-label": "Map search",
8813
+ title: t('search-title'),
8814
+ "aria-label": t('search-title-aria'),
8420
8815
  isActive: isOpenInStore
8421
8816
  }, /*#__PURE__*/React__default.createElement(Search, null));
8422
8817
  };
@@ -8439,7 +8834,7 @@ const SearchControlButtonConnect = ({
8439
8834
  * */
8440
8835
  const MY_LOCATION = 'MyLocation';
8441
8836
  const locationOptions = {
8442
- enableHighAccuracy: true,
8837
+ enableHighAccuracy: false,
8443
8838
  timeout: 5000,
8444
8839
  maximumAge: 0
8445
8840
  };
@@ -8461,8 +8856,15 @@ const circleDrawFunction = (args, fillColor = '#88F', radius = 12) => {
8461
8856
  ctx.fill();
8462
8857
  };
8463
8858
  const MyMapLocation = ({
8464
- mapId
8859
+ mapId,
8860
+ isLoading,
8861
+ hasFailed,
8862
+ setIsLoading,
8863
+ setHasFailed
8465
8864
  }) => {
8865
+ const {
8866
+ t
8867
+ } = useCoreTranslation();
8466
8868
  const dispatch = useDispatch();
8467
8869
  const layersBelongsToCurrentMapId = useSelector(store => layerSelectors.getLayersByMapId(store, mapId || ''));
8468
8870
  const layerLocation = layersBelongsToCurrentMapId.find(layer => {
@@ -8477,13 +8879,17 @@ const MyMapLocation = ({
8477
8879
  const layerLocationId = (layerLocation === null || layerLocation === void 0 ? void 0 : layerLocation.id) || '';
8478
8880
  const circleDrawFunctionId = useRef(registerDrawFunction(circleDrawFunction));
8479
8881
  const handleLocationClick = () => {
8882
+ setIsLoading(true);
8480
8883
  if (mapId && layerLocationId !== '') {
8481
8884
  dispatch(layerActions.layerDelete({
8482
8885
  mapId,
8483
8886
  layerId: layerLocationId
8484
8887
  }));
8888
+ setIsLoading(false);
8485
8889
  } else if (navigator.geolocation && mapId && layerLocationId === '' && circleDrawFunctionId) {
8486
8890
  navigator.geolocation.getCurrentPosition(success => {
8891
+ setIsLoading(false);
8892
+ setHasFailed(false);
8487
8893
  const {
8488
8894
  coords: {
8489
8895
  latitude,
@@ -8520,40 +8926,70 @@ const MyMapLocation = ({
8520
8926
  }
8521
8927
  wmjsMap.calculateBoundingBoxAndZoom(latitude, longitude);
8522
8928
  }, error => {
8523
- console.warn(`Geolocation error: ${error.message}`);
8929
+ setIsLoading(false);
8930
+ setHasFailed(true);
8931
+ console.warn(t('search-error', {
8932
+ error: error.message
8933
+ }));
8524
8934
  }, locationOptions);
8525
8935
  }
8526
8936
  };
8527
- return /*#__PURE__*/React__default.createElement(CustomIconButton, {
8528
- title: "Find my location",
8937
+ const chooseIcon = () => {
8938
+ return hasFailed ? ( /*#__PURE__*/React__default.createElement(Exclamation, {
8939
+ style: {
8940
+ color: 'red'
8941
+ },
8942
+ "aria-label": "location error"
8943
+ })) : ( /*#__PURE__*/React__default.createElement(MyLocation, {
8944
+ "aria-label": "location default"
8945
+ }));
8946
+ };
8947
+ return /*#__PURE__*/React__default.createElement("div", null, isLoading ? ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(CircularProgress, {
8948
+ value: 100,
8949
+ variant: "determinate",
8950
+ sx: {
8951
+ height: '100%',
8952
+ width: '100%',
8953
+ color: theme => theme.palette.mode === 'light' ? '#1a90ff' : '#bad4ff',
8954
+ padding: '8px'
8955
+ },
8956
+ thickness: 6,
8957
+ "aria-label": "location loading"
8958
+ }), /*#__PURE__*/React__default.createElement(CircularProgress, {
8959
+ variant: "indeterminate",
8960
+ disableShrink: true,
8961
+ sx: {
8962
+ height: '100%',
8963
+ width: '100%',
8964
+ color: theme => theme.palette.mode === 'light' ? '#bad4ff' : '#414751',
8965
+ animationDuration: '1000ms',
8966
+ position: 'absolute',
8967
+ left: 0,
8968
+ [`& .${circularProgressClasses.circle}`]: {
8969
+ strokeLinecap: 'round'
8970
+ },
8971
+ padding: '8px'
8972
+ },
8973
+ thickness: 6
8974
+ }))) : ( /*#__PURE__*/React__default.createElement(CustomIconButton, {
8975
+ title: t('search-find-location'),
8529
8976
  "aria-label": MY_LOCATION,
8530
8977
  onClick: handleLocationClick,
8531
8978
  isSelected: layerLocationId !== '',
8532
8979
  size: "large"
8533
- }, /*#__PURE__*/React__default.createElement(MyLocation, null));
8980
+ }, chooseIcon())));
8534
8981
  };
8535
8982
 
8536
- /* *
8537
- * Licensed under the Apache License, Version 2.0 (the "License");
8538
- * you may not use this file except in compliance with the License.
8539
- * You may obtain a copy of the License at
8540
- *
8541
- * http://www.apache.org/licenses/LICENSE-2.0
8542
- *
8543
- * Unless required by applicable law or agreed to in writing, software
8544
- * distributed under the License is distributed on an "AS IS" BASIS,
8545
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8546
- * See the License for the specific language governing permissions and
8547
- * limitations under the License.
8548
- *
8549
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
8550
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
8551
- * */
8552
8983
  const SearchDialog = ({
8553
8984
  isOpen,
8554
8985
  onClose,
8555
8986
  mapId: _mapId = ''
8556
8987
  }) => {
8988
+ const {
8989
+ t
8990
+ } = useCoreTranslation();
8991
+ const [isLoading, setIsLoading] = useState(false);
8992
+ const [hasFailed, setHasFailed] = useState(false);
8557
8993
  return isOpen && _mapId ? ( /*#__PURE__*/React__default.createElement(Box$1, {
8558
8994
  sx: {
8559
8995
  display: 'flex',
@@ -8568,17 +9004,21 @@ const SearchDialog = ({
8568
9004
  backgroundColor: theme => theme.palette.background.paper
8569
9005
  }
8570
9006
  }, /*#__PURE__*/React__default.createElement(MyMapLocation, {
8571
- mapId: _mapId
9007
+ mapId: _mapId,
9008
+ isLoading: isLoading,
9009
+ hasFailed: hasFailed,
9010
+ setIsLoading: setIsLoading,
9011
+ setHasFailed: setHasFailed
8572
9012
  }), /*#__PURE__*/React__default.createElement(TextField, {
8573
9013
  id: "dummy-search-field",
8574
- label: "Search",
9014
+ label: t('search-title'),
8575
9015
  variant: "filled",
8576
9016
  InputProps: {
8577
9017
  disableUnderline: true,
8578
9018
  endAdornment: ( /*#__PURE__*/React__default.createElement(InputAdornment, {
8579
9019
  position: "end"
8580
9020
  }, /*#__PURE__*/React__default.createElement(CustomIconButton, {
8581
- tooltipTitle: "Close",
9021
+ tooltipTitle: t('actions-close'),
8582
9022
  edge: "end",
8583
9023
  onClick: onClose,
8584
9024
  size: "large"
@@ -10384,6 +10824,9 @@ const SyncGroupList = ({
10384
10824
  addNewGroup,
10385
10825
  removeGroup
10386
10826
  }) => {
10827
+ const {
10828
+ t
10829
+ } = useCoreTranslation();
10387
10830
  return /*#__PURE__*/React.createElement(List, {
10388
10831
  disablePadding: true
10389
10832
  }, viewStateData.groups.map((groupObject, index) => {
@@ -10405,7 +10848,7 @@ const SyncGroupList = ({
10405
10848
  paddingTop: '10px'
10406
10849
  }
10407
10850
  }, /*#__PURE__*/React.createElement(Typography, null, title), /*#__PURE__*/React.createElement(CustomIconButton, {
10408
- tooltipTitle: index === 0 ? 'Add new group to list' : 'Remove group from list',
10851
+ tooltipTitle: index === 0 ? t('syncgroups-add-group') : t('syncgroups-remove-group'),
10409
10852
  style: {
10410
10853
  right: '10px'
10411
10854
  },
@@ -10432,6 +10875,9 @@ const SyncGroupViewer = ({
10432
10875
  onMouseDown,
10433
10876
  order: _order = 0
10434
10877
  }) => {
10878
+ const {
10879
+ t
10880
+ } = useCoreTranslation();
10435
10881
  /*
10436
10882
  _____ Handle Toggle _____
10437
10883
  - Handles checking, unchecking and toggling between in groups
@@ -10512,7 +10958,7 @@ const SyncGroupViewer = ({
10512
10958
  return null;
10513
10959
  }
10514
10960
  return /*#__PURE__*/React.createElement(ToolContainerDraggable, {
10515
- title: "Sync",
10961
+ title: t('syncgroups-title'),
10516
10962
  startSize: {
10517
10963
  width: 349,
10518
10964
  height: 800
@@ -10524,19 +10970,19 @@ const SyncGroupViewer = ({
10524
10970
  order: _order
10525
10971
  }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(SyncGroupList, {
10526
10972
  viewStateData: syncGroupViewState.zoompane,
10527
- title: "ZoomPane",
10973
+ title: t('syncgroups-zoom'),
10528
10974
  handleToggle: (groupId, sourceId) => handleToggle('zoompane', groupId, sourceId),
10529
10975
  addNewGroup: groupId => addNewGroup('zoompane', groupId),
10530
10976
  removeGroup: groupId => removeGroup('zoompane', groupId)
10531
10977
  }), /*#__PURE__*/React.createElement(SyncGroupList, {
10532
10978
  viewStateData: syncGroupViewState.timeslider,
10533
- title: "Timeslider",
10979
+ title: t('syncgroups-timeslider'),
10534
10980
  handleToggle: (groupId, sourceId) => handleToggle('timeslider', groupId, sourceId),
10535
10981
  addNewGroup: groupId => addNewGroup('timeslider', groupId),
10536
10982
  removeGroup: groupId => removeGroup('timeslider', groupId)
10537
10983
  }), /*#__PURE__*/React.createElement(SyncGroupList, {
10538
10984
  viewStateData: syncGroupViewState.level,
10539
- title: "Level",
10985
+ title: t('syncgroups-level'),
10540
10986
  handleToggle: (groupId, sourceId) => handleToggle('level', groupId, sourceId),
10541
10987
  addNewGroup: groupId => addNewGroup('level', groupId),
10542
10988
  removeGroup: groupId => removeGroup('level', groupId)
@@ -10712,51 +11158,6 @@ var testLayers = /*#__PURE__*/Object.freeze({
10712
11158
  simplePolygonGeoJSON: simplePolygonGeoJSON
10713
11159
  });
10714
11160
 
10715
- /* *
10716
- * Licensed under the Apache License, Version 2.0 (the "License");
10717
- * you may not use this file except in compliance with the License.
10718
- * You may obtain a copy of the License at
10719
- *
10720
- * http://www.apache.org/licenses/LICENSE-2.0
10721
- *
10722
- * Unless required by applicable law or agreed to in writing, software
10723
- * distributed under the License is distributed on an "AS IS" BASIS,
10724
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10725
- * See the License for the specific language governing permissions and
10726
- * limitations under the License.
10727
- *
10728
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10729
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
10730
- * */
10731
- const CORE_NAMESPACE = 'core';
10732
- const initCoreReactI18n = () => {
10733
- i18n.use(initReactI18next).init({
10734
- lng: 'en',
10735
- ns: CORE_NAMESPACE,
10736
- interpolation: {
10737
- escapeValue: false
10738
- },
10739
- resources: {
10740
- en: {
10741
- [CORE_NAMESPACE]: coreTranslations.en,
10742
- [WEBMAP_REACT_NAMESPACE]: webmapReactTranslations.en
10743
- },
10744
- fi: {
10745
- [CORE_NAMESPACE]: coreTranslations.fi,
10746
- [WEBMAP_REACT_NAMESPACE]: webmapReactTranslations.fi
10747
- },
10748
- no: {
10749
- [CORE_NAMESPACE]: coreTranslations.no,
10750
- [WEBMAP_REACT_NAMESPACE]: webmapReactTranslations.no
10751
- },
10752
- nl: {
10753
- [CORE_NAMESPACE]: coreTranslations.nl,
10754
- [WEBMAP_REACT_NAMESPACE]: webmapReactTranslations.nl
10755
- }
10756
- }
10757
- });
10758
- };
10759
-
10760
11161
  /**
10761
11162
  * A Provider component which provides the GeoWeb theme
10762
11163
  * @param children
@@ -10844,4 +11245,50 @@ const RouterWrapperConnect = withEggs([routerModuleConfig])(props => {
10844
11245
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(NavigateSetter, null), props.children);
10845
11246
  });
10846
11247
 
10847
- export { ConfigurableMapConnect, CoreThemeProvider, CoreThemeStoreProvider, DemoWrapper, DemoWrapperConnect, HarmonieTempAndPrecipPreset, LayerInfoButtonConnect, LayerInfoDialogConnect, LayerManager, BaseLayerRow as LayerManagerBaseLayerRow, LayerManagerConnect, DescriptionRow as LayerManagerDescriptionRow, HeaderOptions as LayerManagerHeaderOptions, LayerContainerRow as LayerManagerLayerContainerRow, LayerManagerMapButtonConnect, LegendConnect, LegendMapButtonConnect, MapViewConnect, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, MyMapLocation, RouterWrapperConnect, SearchControlButtonConnect, SearchControlConnect, SearchDialog, SyncGroupViewerConnect, TimeSliderConnect, ZoomControlConnect, componentsLookUp, coreTranslations, defaultBbox, defaultConfigurations, filterMapPresets, filterServices, filterTimeSeriesServices, testLayers, useFetchServices, useUpdateTimeSpan, useUpdateTimestep };
11248
+ const Circle = styled$1('div')(({
11249
+ isRecording
11250
+ }) => ({
11251
+ width: '70%',
11252
+ height: '70%',
11253
+ borderRadius: '50%',
11254
+ backgroundColor: isRecording ? 'red' : 'gray',
11255
+ position: 'absolute',
11256
+ top: '50%',
11257
+ left: '50%',
11258
+ transform: 'translate(-50%, -50%)'
11259
+ }));
11260
+ const SentryRecordButton = () => {
11261
+ const {
11262
+ t
11263
+ } = useCoreTranslation();
11264
+ const [isRecording, setIsRecording] = React__default.useState(false);
11265
+ const replay = Sentry.getReplay();
11266
+ const toggleRecord = () => __awaiter(void 0, void 0, void 0, function* () {
11267
+ if (!isRecording) {
11268
+ replay === null || replay === void 0 ? void 0 : replay.start();
11269
+ setIsRecording(true);
11270
+ } else {
11271
+ setIsRecording(false);
11272
+ yield replay === null || replay === void 0 ? void 0 : replay.stop();
11273
+ }
11274
+ });
11275
+ const title = isRecording ? t('sentry-stop-recording') : t('sentry-start-recording');
11276
+ return /*#__PURE__*/React__default.createElement(ErrorBoundary, {
11277
+ handlePromiseRejections: true,
11278
+ displayOnTop: true
11279
+ }, /*#__PURE__*/React__default.createElement(CustomTooltip, {
11280
+ title: title
11281
+ }, /*#__PURE__*/React__default.createElement(CustomIconButton, {
11282
+ variant: "flat",
11283
+ onClick: toggleRecord,
11284
+ "data-testid": "sentryRecordButton",
11285
+ sx: {
11286
+ margin: '10px',
11287
+ border: 'solid 1px gray'
11288
+ }
11289
+ }, /*#__PURE__*/React__default.createElement(Circle, {
11290
+ isRecording: isRecording
11291
+ }))));
11292
+ };
11293
+
11294
+ export { CORE_NAMESPACE, ConfigurableMapConnect, CoreThemeProvider, CoreThemeStoreProvider, DemoWrapper, DemoWrapperConnect, HarmonieTempAndPrecipPreset, LayerInfoButtonConnect, LayerInfoDialogConnect, LayerManager, BaseLayerRow as LayerManagerBaseLayerRow, LayerManagerConnect, DescriptionRow as LayerManagerDescriptionRow, HeaderOptions as LayerManagerHeaderOptions, LayerContainerRow as LayerManagerLayerContainerRow, LayerManagerMapButtonConnect, LegendConnect, LegendMapButtonConnect, MapViewConnect, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, MyMapLocation, RouterWrapperConnect, SearchControlButtonConnect, SearchControlConnect, SearchDialog, SentryRecordButton, SyncGroupViewerConnect, ThemeWrapperWithModules, TimeSliderConnect, ZoomControlConnect, componentsLookUp, coreTranslations, defaultBbox, defaultConfigurations, filterMapPresets, filterServices, filterTimeSeriesServices, testLayers, translateKeyOutsideComponents, useFetchServices, useUpdateTimeSpan, useUpdateTimestep };