@opengeoweb/core 4.2.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/index.esm.js +999 -810
  2. package/index.umd.js +989 -804
  3. package/lib/components/CanvasComponent/CanvasComponent.d.ts +1 -0
  4. package/lib/components/LayerManager/LayerSelect/KeywordFilterResults/KeywordFilterResults.stories.d.ts +12 -16
  5. package/lib/components/LayerManager/LayerSelect/LayerInfo/LayerInfoLegend.d.ts +10 -0
  6. package/lib/components/{TimeSlider/TimeSliderScaleSlider/TimeSliderScaleSlider.spec.d.ts → LayerManager/LayerSelect/LayerInfo/LayerInfoLegend.spec.d.ts} +0 -0
  7. package/lib/components/LayerManager/LayerSelect/LayerInfo/LayerInfoList.d.ts +6 -5
  8. package/lib/components/LayerManager/LayerSelect/LayerInfo/LayerInfoText.d.ts +9 -0
  9. package/lib/components/LayerManager/LayerSelect/LayerInfo/LayerInfoUtils.d.ts +7 -1
  10. package/lib/components/LayerManager/LayerSelect/LayerList/LayerList.d.ts +4 -5
  11. package/lib/components/LayerManager/LayerSelect/LayerList/LayerListConnect.d.ts +1 -0
  12. package/lib/components/LayerManager/LayerSelect/LayerList/LayerListDimensions.d.ts +7 -0
  13. package/lib/components/LayerManager/LayerSelect/LayerList/LayerListRow.d.ts +1 -0
  14. package/lib/components/LayerManager/LayerSelect/LayerSelect.d.ts +4 -0
  15. package/lib/components/LayerManager/LayerSelect/LayerSelect.stories.d.ts +8 -0
  16. package/lib/components/LayerManager/LayerSelect/LayerSelectUtils.d.ts +75 -0
  17. package/lib/components/LayerManager/LayerSelect/ServiceOptionsDialog/ServiceOptionsDialog.stories.d.ts +12 -16
  18. package/lib/components/LayerManager/LayerSelect/ServicePopup/ServicePopup.stories.d.ts +24 -32
  19. package/lib/components/Legend/LegendLayout.d.ts +13 -0
  20. package/lib/components/{TimeSlider/TimeSliderScaleSlider/TimeSliderScaleSliderConnect.spec.d.ts → Legend/LegendLayout.spec.d.ts} +0 -0
  21. package/lib/components/MapControls/MapControlButton.d.ts +1 -1
  22. package/lib/components/ReactMapView/ReactMapView.d.ts +2 -1
  23. package/lib/components/ReactMapView/ReactMapViewParseLayer.d.ts +2 -2
  24. package/lib/components/TimeSlider/TimeSlider.d.ts +0 -1
  25. package/lib/components/TimeSlider/TimeSliderButtons/NowButton/NowButton.d.ts +8 -0
  26. package/lib/components/TimeSlider/TimeSliderButtons/NowButton/NowButton.spec.d.ts +1 -0
  27. package/lib/components/TimeSlider/TimeSliderButtons/NowButton/NowButtonConnect.d.ts +9 -0
  28. package/lib/components/TimeSlider/TimeSliderButtons/NowButton/NowButtonConnect.spec.d.ts +1 -0
  29. package/lib/components/TimeSlider/TimeSliderButtons/OptionsMenuButton/OptionsMenuButton.d.ts +2 -0
  30. package/lib/components/TimeSlider/TimeSliderButtons/OptionsMenuButton/OptionsMenuButtonConnect.d.ts +1 -0
  31. package/lib/components/TimeSlider/TimeSliderButtons/TimeScaleButton/TimeScaleButton.d.ts +11 -0
  32. package/lib/components/TimeSlider/TimeSliderButtons/TimeScaleButton/TimeScaleButton.spec.d.ts +1 -0
  33. package/lib/components/TimeSlider/TimeSliderButtons/TimeScaleButton/TimeScaleButtonConnect.d.ts +4 -0
  34. package/lib/components/TimeSlider/TimeSliderButtons/TimeScaleButton/TimeScaleButtonConnect.spec.d.ts +1 -0
  35. package/lib/components/TimeSlider/TimeSliderButtons/TimeSliderButtons.stories.d.ts +6 -0
  36. package/lib/components/TimeSlider/TimeSliderButtons/TimeSliderButtonsConnect.d.ts +1 -0
  37. package/lib/components/TimeSlider/TimeSliderButtons/TimeSliderMenu/TimeSliderMenu.stories.d.ts +12 -16
  38. package/lib/components/TimeSlider/TimeSliderButtons/TimeStepButton/TimeStepButton.stories.d.ts +10 -16
  39. package/lib/components/TimeSlider/TimeSliderLegend/TimeSliderLegend.d.ts +1 -0
  40. package/lib/components/TimeSlider/TimeSliderUtils.d.ts +5 -0
  41. package/lib/components/WMSLoader/services.d.ts +2 -1
  42. package/lib/store/generic/synchronizationGroups/selectors.d.ts +2 -2
  43. package/lib/store/layerSelect/selectors.d.ts +18 -0
  44. package/lib/store/layerSelect/types.d.ts +3 -3
  45. package/lib/store/mapStore/map/sagas.d.ts +1 -1
  46. package/lib/store/mapStore/service/selectors.d.ts +0 -27
  47. package/lib/store/mapStore/service/types.d.ts +9 -2
  48. package/lib/store/ui/selectors.d.ts +5 -5
  49. package/lib/store/ui/types.d.ts +11 -3
  50. package/lib/store/utils.d.ts +2 -0
  51. package/lib/utils/__mocks__/getCapabilities.d.ts +2 -14
  52. package/lib/utils/defaultTestSettings.d.ts +3 -1
  53. package/package.json +10 -9
  54. package/lib/components/TimeSlider/TimeSliderScaleSlider/TimeSliderScaleSlider.d.ts +0 -12
  55. package/lib/components/TimeSlider/TimeSliderScaleSlider/TimeSliderScaleSlider.stories.d.ts +0 -13
  56. package/lib/components/TimeSlider/TimeSliderScaleSlider/TimeSliderScaleSliderConnect.d.ts +0 -24
package/index.esm.js CHANGED
@@ -6,17 +6,19 @@ import React__default, { Component, useRef, useState, useEffect, useCallback } f
6
6
  import _, { isEqual, debounce, groupBy, throttle, range } from 'lodash';
7
7
  import { takeLatest, put, select, call, all, takeEvery, delay } from 'redux-saga/effects';
8
8
  import { connect, useDispatch, useSelector, Provider } from 'react-redux';
9
- import { Tooltip, Paper, Box, Typography, Grid, InputLabel, IconButton, CircularProgress, List, ListSubheader, ListItem, ListItemText, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, DialogActions, Button, MenuItem, FormControl, LinearProgress, InputAdornment, ListItemSecondaryAction, ListItemIcon, Checkbox, Switch, styled, Slider, Menu, Popover, useTheme, SliderThumb, Snackbar } from '@mui/material';
9
+ import { Tooltip, Paper, Box, Typography, Grid, InputLabel, IconButton, CircularProgress, List, ListSubheader, ListItem, ListItemText, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, DialogActions, Button, MenuItem, FormControl, LinearProgress, InputAdornment, ListItemSecondaryAction, ListItemIcon, Checkbox, Switch, styled, Slider, Menu, Popover, useTheme, Snackbar } from '@mui/material';
10
10
  import { ToolButton, ToolContainerDraggable, TooltipSelect, AlertIcon, tooltipContainerStyles, sliderHeaderStyle, CustomSlider, ToggleMenu, ManagerButton, EnableButton, AlertBanner, ManagerDeleteButton, calculateDialogSizeAndPosition, CustomToggleButton, useIsMounted } from '@opengeoweb/shared';
11
- import { Pause, Play, Cached, Add, Copy, Flag, DragHandle as DragHandle$1, Filter, Search, Clear, Close, Info, DimensionsTime, DimensionsRefTime, DimensionsElevation, DimensionsOther, Edit, Visibility, Delete, Home, Minus, Layers, Equalizer, Link, LinkOff, AutoUpdateActive, AutoUpdateInActive, TextIcon, Speed, FastForward, Options, SliderThumb as SliderThumb$1, List as List$1, ThemeWrapper, lightTheme } from '@opengeoweb/theme';
11
+ import { Pause, Play, Cached, Add, Copy, Flag, DragHandle as DragHandle$1, Filter, Search, Clear, Close, Info, DimensionsOther, DimensionsElevation, DimensionsRefTime, DimensionsTime, Edit, Visibility, Delete, Home, Minus, Layers, Equalizer, Link, LinkOff, AutoUpdateActive, AutoUpdateInActive, TextIcon, Speed, FastForward, Clock, Now, Options, List as List$1, ThemeWrapper, lightTheme } from '@opengeoweb/theme';
12
12
  import { legendImageStore, WMImageEventType, getLegendGraphicURLForLayer, WMGetServiceFromStore, LayerType as LayerType$1, getMapImageStore, WMBBOX, debug, DebugType, WMJSMap, WMLayer } from '@opengeoweb/webmap';
13
- import { Sortable, ReactSortable } from 'react-sortablejs';
13
+ import { ReactSortable } from 'react-sortablejs';
14
+ import Sortable from 'sortablejs';
14
15
  import { ReactHookFormProvider, defaultFormOptions, ReactHookFormTextField } from '@opengeoweb/form-fields';
15
16
  import { useFormContext } from 'react-hook-form';
16
17
  import { FixedSizeList } from 'react-window';
17
18
  import Box$1 from '@mui/material/Box';
18
19
  import Typography$1 from '@mui/material/Typography';
19
20
  import Grid$1 from '@mui/material/Grid';
21
+ import Tooltip$1 from '@mui/material/Tooltip';
20
22
  import { debounce as debounce$1 } from 'throttle-debounce';
21
23
  import cloneDeep from 'lodash.clonedeep';
22
24
  import proj4 from 'proj4';
@@ -592,6 +594,7 @@ var types$2 = /*#__PURE__*/Object.freeze({
592
594
  get LayerActionOrigin () { return LayerActionOrigin; }
593
595
  });
594
596
 
597
+ var millisecondsInSecond = 1000;
595
598
  var defaultAnimationDelayAtStart = 250;
596
599
  var defaultDelay = 1000; // [ms]
597
600
 
@@ -722,48 +725,6 @@ var getDataLimitsFromLayers = function getDataLimitsFromLayers(layers) {
722
725
  */
723
726
  [2147483647, 0]);
724
727
  };
725
- var getNextTimeStepvalue = function getNextTimeStepvalue(value, max) {
726
- var newValue = value + 1;
727
- return newValue > max ? max : newValue;
728
- };
729
- var getPreviousTimeStepvalue = function getPreviousTimeStepvalue(value, min) {
730
- var newValue = value - 1;
731
- return newValue < min ? min : newValue;
732
- };
733
- var getValueFromKeyboardEvent = function getValueFromKeyboardEvent(event, value, min, max) {
734
- var supportFourDirectionNavigation = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
735
-
736
- if (!supportFourDirectionNavigation) {
737
- if (event.ctrlKey || event.metaKey) {
738
- switch (event.key) {
739
- case 'ArrowDown':
740
- return getPreviousTimeStepvalue(value, min);
741
-
742
- case 'ArrowUp':
743
- return getNextTimeStepvalue(value, max);
744
-
745
- default:
746
- return null;
747
- }
748
- }
749
- } else {
750
- // currently supportFourDirectionNavigation (left/right/up/down) is only used in horizontal slider TimeSliderScaleSlider
751
- switch (event.key) {
752
- case 'ArrowDown':
753
- case 'ArrowLeft':
754
- return getPreviousTimeStepvalue(value, min);
755
-
756
- case 'ArrowUp':
757
- case 'ArrowRight':
758
- return getNextTimeStepvalue(value, max);
759
-
760
- default:
761
- return null;
762
- }
763
- }
764
-
765
- return null;
766
- };
767
728
  var getTimeStepFromDataInterval = function getTimeStepFromDataInterval(timeInterval) {
768
729
  switch (timeInterval.isRegularInterval) {
769
730
  case false:
@@ -920,6 +881,25 @@ var AUTO_MOVE_AREA_PADDING = 1;
920
881
  var getAutoMoveAreaWidth = function getAutoMoveAreaWidth(scale) {
921
882
  return (scale === Scale.Year ? needleGeom.largeWidth : needleGeom.smallWidth) / 2 + AUTO_MOVE_AREA_PADDING;
922
883
  };
884
+ /** Reusable business logic for how to handle events that set time to now (closest).
885
+ * Used in NowButton and TimeSliderLegend.
886
+ */
887
+
888
+ var handleSetNowEvent = function handleSetNowEvent(timeStep, dataStartTime, dataEndTime, currentTime, onSetNewDate, onSetCenterTime) {
889
+ if (dataStartTime < dataEndTime) {
890
+ if (dataEndTime < currentTime) {
891
+ onSetNewDate(moment.utc(dataEndTime * millisecondsInSecond).toISOString());
892
+ onSetCenterTime(dataEndTime);
893
+ } else if (dataStartTime > currentTime) {
894
+ onSetNewDate(moment.utc(dataStartTime * millisecondsInSecond).toISOString());
895
+ onSetCenterTime(dataStartTime);
896
+ } else {
897
+ var closestToCurrent = roundWithTimeStep(currentTime, timeStep);
898
+ onSetNewDate(moment.utc(closestToCurrent * millisecondsInSecond).toISOString());
899
+ onSetCenterTime(closestToCurrent);
900
+ }
901
+ }
902
+ };
923
903
 
924
904
  var createMap = function createMap(_ref) {
925
905
  var id = _ref.id,
@@ -1833,6 +1813,9 @@ var selectorMemoizationOptions = {
1833
1813
  resultEqualityCheck: isEqual
1834
1814
  }
1835
1815
  };
1816
+ var isUserAddedService = function isUserAddedService(scope) {
1817
+ return scope === 'user';
1818
+ };
1836
1819
 
1837
1820
  /* *
1838
1821
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1954,25 +1937,6 @@ var getLayerFromService = createSelector(function (store, serviceUrl) {
1954
1937
  var getLayerStyles$1 = createSelector(getLayerFromService, function (layer) {
1955
1938
  return layer && layer.styles ? layer.styles : [];
1956
1939
  }, selectorMemoizationOptions);
1957
- /**
1958
- * Gets services and maps them into an array
1959
- *
1960
- * Example: services = getServices(store)
1961
- * @param {object} store store: object - Store object
1962
- * @returns {array} returnType: [] - array containing services
1963
- */
1964
-
1965
- createSelector(servicesStore, function (store) {
1966
- var services = store ? store.byId : {};
1967
- var arrayOfServiceObjects = Object.keys(services).map(function (key) {
1968
- return {
1969
- name: services[key].name,
1970
- serviceUrl: services[key].serviceUrl,
1971
- isUserAddedService: services[key].isUserAddedService
1972
- };
1973
- });
1974
- return arrayOfServiceObjects;
1975
- }, selectorMemoizationOptions);
1976
1940
 
1977
1941
  var moveToTop = function moveToTop(list, element) {
1978
1942
  var filteredList = list.filter(function (item) {
@@ -3043,7 +3007,7 @@ var getUiStore = function getUiStore(store) {
3043
3007
  *
3044
3008
  * Example: getDialogDetailsByType(store, 'legend')
3045
3009
  * @param {object} store store object from which the ui state wll be extracted
3046
- * @param {string} dialogType type of the dialog 'legend' | 'layerManager' | 'dimensionSelect-elevation'
3010
+ * @param {string} dialogType type of the dialog
3047
3011
  * @returns {array} [string, boolean] first element gives the active map id, second element whether the dialog is open
3048
3012
  */
3049
3013
 
@@ -3058,7 +3022,7 @@ var getDialogDetailsByType = function getDialogDetailsByType(store, dialogType)
3058
3022
  * For a given ui component: gets wether the dialog is open or closed
3059
3023
  *
3060
3024
  * @param {object} store store object from which the ui state wll be extracted
3061
- * @param {string} dialogType type of the dialog 'legend' | 'layerManager' | 'dimensionSelect-elevation'
3025
+ * @param {string} dialogType type of the dialog
3062
3026
  * @returns {boolean} returnType: boolean
3063
3027
  */
3064
3028
 
@@ -3073,7 +3037,7 @@ var getisDialogOpen = createSelector(getDialogDetailsByType, function (details)
3073
3037
  *For a given ui component: gets the active map Id
3074
3038
  *
3075
3039
  * @param {object} store store object from which the ui state wll be extracted
3076
- * @param {string} dialogType type of the dialog 'legend' | 'layerManager' | 'dimensionSelect-elevation'
3040
+ * @param {string} dialogType type of the dialog
3077
3041
  * @returns {string} returnType: string - the active map id
3078
3042
  */
3079
3043
 
@@ -3088,7 +3052,7 @@ var getDialogMapId = createSelector(getDialogDetailsByType, function (details) {
3088
3052
  *For a given ui component: gets the order of visible dialog
3089
3053
  *
3090
3054
  * @param {object} store store object from which the ui state wll be extracted
3091
- * @param {DialogType} dialogType type of the dialog 'legend' | 'layerManager' | 'dimensionSelect-elevation' | dimensionSelect-ensemble_member
3055
+ * @param {DialogType} dialogType type of the dialog
3092
3056
  * @returns {number} the higher the order number the higher the zIndex
3093
3057
  */
3094
3058
 
@@ -3114,7 +3078,7 @@ var getDialogOrder = createSelector(function (store, dialogType) {
3114
3078
  *For a given ui component: returns if ordered on top
3115
3079
  *
3116
3080
  * @param {object} store store object from which the ui state wll be extracted
3117
- * @param {DialogType} dialogType type of the dialog 'legend' | 'layerManager' | 'dimensionSelect-elevation' | dimensionSelect-ensemble_member
3081
+ * @param {DialogType} dialogType type of the dialog
3118
3082
  * @returns {boolean}
3119
3083
  */
3120
3084
 
@@ -4361,6 +4325,25 @@ var selectors = /*#__PURE__*/Object.freeze({
4361
4325
  getMapPresetError: getMapPresetError
4362
4326
  });
4363
4327
 
4328
+ var DialogTypes;
4329
+
4330
+ (function (DialogTypes) {
4331
+ DialogTypes["LayerInfo"] = "layerInfo";
4332
+ DialogTypes["SyncGroups"] = "syncGroups";
4333
+ DialogTypes["TimeSeriesSelect"] = "timeSeriesSelect";
4334
+ DialogTypes["TimeSeriesManager"] = "timeSeriesManager";
4335
+ DialogTypes["KeywordFilter"] = "keywordFilter";
4336
+ DialogTypes["DimensionSelectEnsembleMember"] = "dimensionSelect-ensemble_member";
4337
+ DialogTypes["DimensionSelectElevation"] = "dimensionSelect-elevation";
4338
+ DialogTypes["LayerManager"] = "layerManager";
4339
+ DialogTypes["LayerSelect"] = "layerSelect";
4340
+ })(DialogTypes || (DialogTypes = {}));
4341
+
4342
+ var types = /*#__PURE__*/Object.freeze({
4343
+ __proto__: null,
4344
+ get DialogTypes () { return DialogTypes; }
4345
+ });
4346
+
4364
4347
  var initialState$1 = {
4365
4348
  filters: {
4366
4349
  searchFilter: '',
@@ -4384,7 +4367,7 @@ var initialState$1 = {
4384
4367
  };
4385
4368
  var slice$1 = createSlice({
4386
4369
  initialState: initialState$1,
4387
- name: 'layerSelect',
4370
+ name: DialogTypes.LayerSelect,
4388
4371
  reducers: {
4389
4372
  setSearchFilter: function setSearchFilter(draft, action) {
4390
4373
  var filterText = action.payload.filterText;
@@ -4401,7 +4384,7 @@ var slice$1 = createSlice({
4401
4384
  serviceUrl = _action$payload.serviceUrl,
4402
4385
  _abstract = _action$payload["abstract"],
4403
4386
  keywords = _action$payload.keywords,
4404
- isUserAddedService = _action$payload.isUserAddedService,
4387
+ scope = _action$payload.scope,
4405
4388
  groups = _action$payload.groups;
4406
4389
 
4407
4390
  if (!draft.filters.activeServices.byId[serviceId]) {
@@ -4441,7 +4424,7 @@ var slice$1 = createSlice({
4441
4424
  serviceId: serviceId,
4442
4425
  enabled: draft.allServicesEnabled,
4443
4426
  filterIds: filterIds,
4444
- isUserAddedService: isUserAddedService,
4427
+ scope: scope,
4445
4428
  serviceName: serviceName,
4446
4429
  serviceUrl: serviceUrl,
4447
4430
  "abstract": _abstract
@@ -4536,6 +4519,61 @@ var slice$1 = createSlice({
4536
4519
  var reducer$1 = slice$1.reducer;
4537
4520
  var layerSelectActions = slice$1.actions;
4538
4521
 
4522
+ /* *
4523
+ * Licensed under the Apache License, Version 2.0 (the "License");
4524
+ * you may not use this file except in compliance with the License.
4525
+ * You may obtain a copy of the License at
4526
+ *
4527
+ * http://www.apache.org/licenses/LICENSE-2.0
4528
+ *
4529
+ * Unless required by applicable law or agreed to in writing, software
4530
+ * distributed under the License is distributed on an "AS IS" BASIS,
4531
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4532
+ * See the License for the specific language governing permissions and
4533
+ * limitations under the License.
4534
+ *
4535
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4536
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
4537
+ * */
4538
+ var filterLayersFromService = function filterLayersFromService(serviceId, services, filterIds, allFiltersActive, searchString) {
4539
+ var mapStoreService = services[serviceId];
4540
+ if (!mapStoreService) return [];
4541
+
4542
+ if (searchString === '' && allFiltersActive) {
4543
+ return mapStoreService.layers.filter(function (layer) {
4544
+ return layer.leaf;
4545
+ });
4546
+ }
4547
+
4548
+ var searchStringArray = searchString.split(' ');
4549
+ return mapStoreService.layers.filter(function (layer) {
4550
+ return searchStringArray.every(function (search) {
4551
+ var _a, _b, _c;
4552
+
4553
+ var searchLowercase = search.toLowerCase();
4554
+ var layerFilterIds = layer.path.map(function (group) {
4555
+ return "groups-".concat(group);
4556
+ }).concat(layer.keywords.map(function (keyword) {
4557
+ return "keywords-".concat(keyword);
4558
+ }));
4559
+ var isFilterInLayer = (layerFilterIds === null || layerFilterIds === void 0 ? void 0 : layerFilterIds.some(function (id) {
4560
+ return filterIds.includes(id);
4561
+ })) || allFiltersActive;
4562
+ var isSearchTextInLayerFilter = layerFilterIds === null || layerFilterIds === void 0 ? void 0 : layerFilterIds.some(function (filterId) {
4563
+ return filterId.toLowerCase().includes(searchLowercase);
4564
+ });
4565
+ var isSearchTextInLayerName = (_a = layer.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(searchLowercase);
4566
+ var isSearchTextInLayerText = (_b = layer.text) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes(searchLowercase);
4567
+ var isSearchTextInLayerAbstract = (_c = layer["abstract"]) === null || _c === void 0 ? void 0 : _c.toLowerCase().includes(searchLowercase);
4568
+ var isSearchTextInServiceName = mapStoreService.name.toLowerCase().includes(searchLowercase);
4569
+ var isSearchTextInLayer = isSearchTextInLayerName || isSearchTextInLayerText || isSearchTextInLayerAbstract || isSearchTextInLayerFilter || isSearchTextInServiceName;
4570
+ return isFilterInLayer && isSearchTextInLayer;
4571
+ });
4572
+ }).filter(function (layer) {
4573
+ return layer.leaf;
4574
+ });
4575
+ };
4576
+
4539
4577
  /* *
4540
4578
  * Licensed under the Apache License, Version 2.0 (the "License");
4541
4579
  * you may not use this file except in compliance with the License.
@@ -4694,6 +4732,22 @@ var isAllFiltersChecked = createSelector(layerSelectStore, function (store) {
4694
4732
  var getActiveLayerInfo = createSelector(layerSelectStore, function (store) {
4695
4733
  return store === null || store === void 0 ? void 0 : store.activeLayerInfo;
4696
4734
  });
4735
+ /**
4736
+ * Returns a filtered active layer object based on the given filter settings
4737
+ * Example: layerSelectSelectors.getFilteredLayers(store, filteredSettings);
4738
+ * @param {object} store store: object - object from which the service state will be extracted
4739
+ * @returns {array} returnType: ActiveLayerObject - an array of all filtered activelayers
4740
+ */
4741
+
4742
+ var getFilteredLayers = createSelector([getEnabledServiceIds, getServices, getCheckedFilterIds, isAllFiltersChecked, getSearchFilter], function (enabledServiceIds, servicesStore, checkedFilterIds, allFiltersActive, searchFilter) {
4743
+ return enabledServiceIds.reduce(function (layerList, serviceId) {
4744
+ return layerList.concat(filterLayersFromService(serviceId, servicesStore, checkedFilterIds, allFiltersActive, searchFilter).map(function (layer) {
4745
+ return Object.assign(Object.assign({}, layer), {
4746
+ serviceName: serviceId
4747
+ });
4748
+ }));
4749
+ }, []);
4750
+ }, selectorMemoizationOptions);
4697
4751
 
4698
4752
  /* *
4699
4753
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -4769,17 +4823,6 @@ var getFirstSnackbarMessage = createSelector(getCurrentSnackbarMessages, functio
4769
4823
  return currentMessages.length > 0 ? currentMessages[0] : undefined;
4770
4824
  });
4771
4825
 
4772
- var DialogTypes;
4773
-
4774
- (function (DialogTypes) {
4775
- DialogTypes["LayerInfo"] = "layerInfo";
4776
- })(DialogTypes || (DialogTypes = {}));
4777
-
4778
- var types = /*#__PURE__*/Object.freeze({
4779
- __proto__: null,
4780
- get DialogTypes () { return DialogTypes; }
4781
- });
4782
-
4783
4826
  /* *
4784
4827
  * Licensed under the Apache License, Version 2.0 (the "License");
4785
4828
  * you may not use this file except in compliance with the License.
@@ -5978,9 +6021,7 @@ var PlayButton = function PlayButton(_ref) {
5978
6021
  var isAnimating = _ref.isAnimating,
5979
6022
  isDisabled = _ref.isDisabled,
5980
6023
  _ref$onTogglePlayButt = _ref.onTogglePlayButton,
5981
- onTogglePlayButton = _ref$onTogglePlayButt === void 0 ? function () {
5982
- return null;
5983
- } : _ref$onTogglePlayButt;
6024
+ onTogglePlayButton = _ref$onTogglePlayButt === void 0 ? function () {} : _ref$onTogglePlayButt;
5984
6025
 
5985
6026
  var onTogglePlay = function onTogglePlay() {
5986
6027
  onTogglePlayButton();
@@ -7099,6 +7140,84 @@ CanvasComponent.defaultProps = {
7099
7140
  }
7100
7141
  };
7101
7142
 
7143
+ /* *
7144
+ * Licensed under the Apache License, Version 2.0 (the "License");
7145
+ * you may not use this file except in compliance with the License.
7146
+ * You may obtain a copy of the License at
7147
+ *
7148
+ * http://www.apache.org/licenses/LICENSE-2.0
7149
+ *
7150
+ * Unless required by applicable law or agreed to in writing, software
7151
+ * distributed under the License is distributed on an "AS IS" BASIS,
7152
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7153
+ * See the License for the specific language governing permissions and
7154
+ * limitations under the License.
7155
+ *
7156
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7157
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
7158
+ * */
7159
+
7160
+ var LegendLayout = function LegendLayout(_ref) {
7161
+ var title = _ref.title,
7162
+ name = _ref.name,
7163
+ dimensions = _ref.dimensions,
7164
+ children = _ref.children,
7165
+ height = _ref.height,
7166
+ width = _ref.width,
7167
+ minWidth = _ref.minWidth;
7168
+ return /*#__PURE__*/React__default.createElement(Paper, {
7169
+ "data-testid": "legend",
7170
+ sx: {
7171
+ padding: '10px',
7172
+ border: '1px solid grey',
7173
+ backgroundColor: '#FFF',
7174
+ overflow: 'hidden',
7175
+ marginBottom: 0.5
7176
+ }
7177
+ }, /*#__PURE__*/React__default.createElement(Box, {
7178
+ "data-testid": "legend-title"
7179
+ }, /*#__PURE__*/React__default.createElement(Typography, {
7180
+ sx: {
7181
+ fontFamily: 'Roboto, Helvetica, Arial',
7182
+ fontSize: '10px',
7183
+ minWidth: '100%',
7184
+ wordWrap: 'break-word',
7185
+ color: 'common.black',
7186
+ whiteSpace: 'nowrap'
7187
+ },
7188
+ variant: "h3"
7189
+ }, title)), /*#__PURE__*/React__default.createElement(Tooltip, {
7190
+ title: title || 'loading',
7191
+ placement: "top"
7192
+ }, /*#__PURE__*/React__default.createElement(Box, {
7193
+ sx: {
7194
+ margin: '10px 0px 10px 0px',
7195
+ height: "".concat(height, "px"),
7196
+ width: "".concat(width, "px")
7197
+ }
7198
+ }, children)), /*#__PURE__*/React__default.createElement(Box, {
7199
+ "data-testid": "legend-info",
7200
+ sx: Object.assign({
7201
+ fontFamily: 'Roboto, Helvetica, Arial',
7202
+ fontSize: 10,
7203
+ color: 'common.black',
7204
+ overflowX: 'hidden',
7205
+ wordWrap: 'break-word',
7206
+ whiteSpace: 'nowrap'
7207
+ }, minWidth && {
7208
+ minWidth: "".concat(minWidth, "px")
7209
+ })
7210
+ }, dimensions && dimensions.map(function (dim) {
7211
+ return /*#__PURE__*/React__default.createElement(Box, {
7212
+ key: name + dim.name
7213
+ }, dim.name === 'time' ? "".concat(dim.currentValue) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Box, {
7214
+ style: {
7215
+ fontWeight: 500
7216
+ }
7217
+ }, dim.name, ":"), dim.currentValue, " ", dim.units));
7218
+ })));
7219
+ };
7220
+
7102
7221
  var defaultCanvasWidth = 150;
7103
7222
  var defaultCanvasHeight = 30;
7104
7223
  /**
@@ -7180,46 +7299,20 @@ var Legend = function Legend(_ref) {
7180
7299
  like a title and the WMS legendgraphic url */
7181
7300
 
7182
7301
  var wmLayer = getWMLayerById(layer.id);
7183
- return /*#__PURE__*/React__default.createElement(Paper, {
7184
- "data-testid": "legend",
7185
- sx: {
7186
- padding: '10px',
7187
- border: '1px solid grey',
7188
- display: 'inline-block',
7189
- backgroundColor: '#FFF',
7190
- overflow: 'hidden',
7191
- marginBottom: 0.5
7192
- }
7193
- }, /*#__PURE__*/React__default.createElement(Box, {
7194
- "data-testid": "legend-title",
7195
- style: {
7196
- maxWidth: canvasContainerWidth
7197
- }
7198
- }, /*#__PURE__*/React__default.createElement(Typography, {
7199
- sx: {
7200
- fontFamily: 'Roboto, Helvetica, Arial',
7201
- fontSize: '10px',
7202
- minWidth: "".concat(defaultCanvasWidth, "px"),
7203
- wordWrap: 'break-word',
7204
- color: 'common.black'
7205
- },
7206
- variant: "h3"
7207
- }, wmLayer && wmLayer.title)), /*#__PURE__*/React__default.createElement(Tooltip, {
7208
- title: wmLayer && wmLayer.title || 'loading',
7209
- placement: "top"
7210
- }, /*#__PURE__*/React__default.createElement(Box, {
7211
- sx: {
7212
- margin: '10px 0px 10px 0px',
7213
- height: "".concat(canvasContainerHeight, "px"),
7214
- width: "".concat(canvasContainerWidth, "px")
7215
- }
7302
+ return /*#__PURE__*/React__default.createElement(LegendLayout, {
7303
+ title: wmLayer === null || wmLayer === void 0 ? void 0 : wmLayer.title,
7304
+ name: wmLayer === null || wmLayer === void 0 ? void 0 : wmLayer.name,
7305
+ dimensions: layer === null || layer === void 0 ? void 0 : layer.dimensions,
7306
+ height: canvasContainerHeight,
7307
+ width: canvasContainerWidth,
7308
+ minWidth: defaultCanvasWidth
7216
7309
  }, /*#__PURE__*/React__default.createElement(CanvasComponent, {
7217
7310
  redrawInterval: 500,
7218
7311
  onRenderCanvas: function onRenderCanvas(ctx, width, height) {
7219
7312
  /*
7220
- Check if the wmLayer is available, this happens when the WMS GetCapabilities is loaded and parsed.
7221
- Note that we cannot use the wmLayer variable above, as this one could contain a non initialized WMJSLayer.
7222
- */
7313
+ Check if the wmLayer is available, this happens when the WMS GetCapabilities is loaded and parsed.
7314
+ Note that we cannot use the wmLayer variable above, as this one could contain a non initialized WMJSLayer.
7315
+ */
7223
7316
  var legendWmLayer = getWMLayerById(layer.id);
7224
7317
  var legendUrl = getLegendGraphicURLForLayer(legendWmLayer);
7225
7318
  var image = legendImageStore.getImage(legendUrl);
@@ -7268,26 +7361,7 @@ var Legend = function Legend(_ref) {
7268
7361
  renderLegendGraphic(previousLegendImage.current, ctx, imageWidth, imageHeight);
7269
7362
  }
7270
7363
  }
7271
- }))), /*#__PURE__*/React__default.createElement(Box, {
7272
- "data-testid": "legend-info",
7273
- sx: {
7274
- fontFamily: 'Roboto, Helvetica, Arial',
7275
- fontSize: 10,
7276
- color: 'common.black',
7277
- overflowX: 'hidden',
7278
- minWidth: "".concat(defaultCanvasWidth, "px"),
7279
- wordWrap: 'break-word',
7280
- maxWidth: "".concat(canvasContainerWidth, "px")
7281
- }
7282
- }, layer.dimensions && layer.dimensions.map(function (dim) {
7283
- return /*#__PURE__*/React__default.createElement(Box, {
7284
- key: layer.name + dim.name
7285
- }, dim.name === 'time' ? "".concat(dim.currentValue) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Box, {
7286
- style: {
7287
- fontWeight: 500
7288
- }
7289
- }, dim.name, ":"), dim.currentValue, " ", dim.units));
7290
- })));
7364
+ }));
7291
7365
  };
7292
7366
 
7293
7367
  /* *
@@ -7519,8 +7593,8 @@ function startAnimationSaga(_ref) {
7519
7593
  case 0:
7520
7594
  payload = _ref.payload;
7521
7595
  mapId = payload.mapId, start = payload.start, end = payload.end, interval = payload.interval, timeList = payload.timeList;
7522
- roundedStart = roundWithTimeStep(start && moment.utc(start).unix(), interval, 'ceil');
7523
- roundedEnd = roundWithTimeStep(end && moment.utc(end).unix(), interval, 'floor');
7596
+ roundedStart = roundWithTimeStep(Number(start && moment.utc(start).unix()), interval, 'ceil');
7597
+ roundedEnd = roundWithTimeStep(Number(end && moment.utc(end).unix()), interval, 'floor');
7524
7598
  _context.next = 6;
7525
7599
  return timeList || generateTimeList(moment.utc(roundedStart * 1000), moment.utc(roundedEnd * 1000), interval);
7526
7600
 
@@ -8256,7 +8330,7 @@ var getUserAddedServices = function getUserAddedServices() {
8256
8330
  service = _ref2[1];
8257
8331
 
8258
8332
  return Object.assign(Object.assign({}, userServices), isNoIdService(service) ? _defineProperty({}, serviceUrl, Object.assign(Object.assign({}, service), {
8259
- isUserAddedService: true
8333
+ scope: 'user'
8260
8334
  })) : {});
8261
8335
  }, {});
8262
8336
  }
@@ -8283,14 +8357,14 @@ var _marked$1 = /*#__PURE__*/regeneratorRuntime.mark(newServiceAddedSaga),
8283
8357
  _marked2$1 = /*#__PURE__*/regeneratorRuntime.mark(layerSelectRemoveServiceSaga),
8284
8358
  _marked3 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$1);
8285
8359
  function newServiceAddedSaga(capturedAction) {
8286
- var addedService, id, serviceUrl, name, isUserAddedService, _abstract, keywords, groups;
8360
+ var addedService, id, serviceUrl, name, scope, _abstract, keywords, groups;
8287
8361
 
8288
8362
  return regeneratorRuntime.wrap(function newServiceAddedSaga$(_context) {
8289
8363
  while (1) {
8290
8364
  switch (_context.prev = _context.next) {
8291
8365
  case 0:
8292
8366
  addedService = capturedAction.payload;
8293
- id = addedService.id, serviceUrl = addedService.serviceUrl, name = addedService.name, isUserAddedService = addedService.isUserAddedService, _abstract = addedService["abstract"];
8367
+ id = addedService.id, serviceUrl = addedService.serviceUrl, name = addedService.name, scope = addedService.scope, _abstract = addedService["abstract"];
8294
8368
  keywords = addedService.layers.reduce(function (keywords, layer) {
8295
8369
  var _a;
8296
8370
 
@@ -8315,7 +8389,7 @@ function newServiceAddedSaga(capturedAction) {
8315
8389
  serviceName: name,
8316
8390
  serviceUrl: serviceUrl,
8317
8391
  keywords: keywords,
8318
- isUserAddedService: isUserAddedService,
8392
+ scope: scope,
8319
8393
  groups: groups,
8320
8394
  "abstract": _abstract
8321
8395
  }));
@@ -8378,11 +8452,11 @@ function layerSelectRemoveServiceSaga(capturedAction) {
8378
8452
  }
8379
8453
  function addServiceToLocalStorageSaga(_ref3) {
8380
8454
  var payload = _ref3.payload;
8381
- var isUserAddedService = payload.isUserAddedService,
8455
+ var scope = payload.scope,
8382
8456
  name = payload.name,
8383
8457
  serviceUrl = payload.serviceUrl,
8384
8458
  _abstract2 = payload["abstract"];
8385
- if (!isUserAddedService) return;
8459
+ if (!isUserAddedService(scope)) return;
8386
8460
  var localStorageServices = getUserAddedServices();
8387
8461
  setUserAddedServices(Object.assign(Object.assign({}, localStorageServices), _defineProperty({}, serviceUrl, {
8388
8462
  name: name,
@@ -9463,14 +9537,14 @@ var LayerSelectButtonConnect = function LayerSelectButtonConnect(_ref) {
9463
9537
  source = _ref$source === void 0 ? 'app' : _ref$source;
9464
9538
  var dispatch = useDispatch();
9465
9539
  var currentActiveMapId = useSelector(function (store) {
9466
- return getDialogMapId(store, 'layerSelect');
9540
+ return getDialogMapId(store, DialogTypes.LayerSelect);
9467
9541
  });
9468
9542
  var isOpenInStore = useSelector(function (store) {
9469
- return getisDialogOpen(store, 'layerSelect');
9543
+ return getisDialogOpen(store, DialogTypes.LayerSelect);
9470
9544
  });
9471
9545
  var openLayerSelectDialog = React.useCallback(function () {
9472
9546
  dispatch(uiActions.setActiveMapIdForDialog({
9473
- type: 'layerSelect',
9547
+ type: DialogTypes.LayerSelect,
9474
9548
  mapId: mapId,
9475
9549
  setOpen: currentActiveMapId !== mapId ? true : !isOpenInStore,
9476
9550
  source: source
@@ -11354,14 +11428,14 @@ var KeywordFilterButtonConnect = function KeywordFilterButtonConnect(_ref) {
11354
11428
  source = _ref$source === void 0 ? 'app' : _ref$source;
11355
11429
  var dispatch = useDispatch();
11356
11430
  var currentActiveMapId = useSelector(function (store) {
11357
- return getDialogMapId(store, 'keywordFilter');
11431
+ return getDialogMapId(store, DialogTypes.KeywordFilter);
11358
11432
  });
11359
11433
  var isOpenInStore = useSelector(function (store) {
11360
- return getisDialogOpen(store, 'keywordFilter');
11434
+ return getisDialogOpen(store, DialogTypes.KeywordFilter);
11361
11435
  });
11362
11436
  var openFilterResultsDialog = React.useCallback(function () {
11363
11437
  dispatch(uiActions.setActiveMapIdForDialog({
11364
- type: 'keywordFilter',
11438
+ type: DialogTypes.KeywordFilter,
11365
11439
  mapId: mapId,
11366
11440
  setOpen: currentActiveMapId !== mapId ? true : !isOpenInStore,
11367
11441
  source: source
@@ -11678,7 +11752,7 @@ var ServicePopup = function ServicePopup(_ref2) {
11678
11752
  serviceUrl: formValues.serviceUrl,
11679
11753
  "abstract": formValues.serviceAbstracts,
11680
11754
  layers: serviceLayers,
11681
- isUserAddedService: true
11755
+ scope: 'user'
11682
11756
  });
11683
11757
  setIsLoading(false);
11684
11758
  showSnackbar(getSuccesMessage(formValues.serviceName));
@@ -11831,8 +11905,8 @@ var ServicePopup = function ServicePopup(_ref2) {
11831
11905
  })
11832
11906
  },
11833
11907
  disabled: isServiceUrlDisabled || isLoading,
11908
+ isReadOnly: isShowPopup,
11834
11909
  InputProps: {
11835
- readOnly: isShowPopup,
11836
11910
  disableUnderline: isShowPopup,
11837
11911
  endAdornment: isShowPopup && /*#__PURE__*/React.createElement(InputAdornment, {
11838
11912
  position: "end"
@@ -11855,8 +11929,8 @@ var ServicePopup = function ServicePopup(_ref2) {
11855
11929
  }
11856
11930
  },
11857
11931
  disabled: isShowPopup || isLoading,
11932
+ isReadOnly: isShowPopup,
11858
11933
  InputProps: {
11859
- readOnly: isShowPopup,
11860
11934
  disableUnderline: isShowPopup
11861
11935
  },
11862
11936
  sx: style$1.textField,
@@ -11867,9 +11941,8 @@ var ServicePopup = function ServicePopup(_ref2) {
11867
11941
  name: fields.serviceAbstracts.name,
11868
11942
  label: fields.serviceAbstracts.label,
11869
11943
  disabled: isShowPopup || isLoading,
11870
- rules: {},
11944
+ isReadOnly: isShowPopup,
11871
11945
  InputProps: {
11872
- readOnly: isShowPopup,
11873
11946
  disableUnderline: isShowPopup
11874
11947
  },
11875
11948
  helperText: !isShowPopup && 'Short description of what this service does',
@@ -12101,63 +12174,8 @@ var SearchFieldConnect = function SearchFieldConnect() {
12101
12174
  * See the License for the specific language governing permissions and
12102
12175
  * limitations under the License.
12103
12176
  *
12104
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12105
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
12106
- * */
12107
- var filterLayersFromService = function filterLayersFromService(serviceId, services, filterIds, allFiltersActive, searchString) {
12108
- var mapStoreService = services[serviceId];
12109
- if (!mapStoreService) return [];
12110
-
12111
- if (searchString === '' && allFiltersActive) {
12112
- return mapStoreService.layers.filter(function (layer) {
12113
- return layer.leaf;
12114
- });
12115
- }
12116
-
12117
- var searchStringArray = searchString.split(' ');
12118
- return mapStoreService.layers.filter(function (layer) {
12119
- return searchStringArray.every(function (search) {
12120
- var _a, _b, _c;
12121
-
12122
- var searchLowercase = search.toLowerCase();
12123
- var layerFilterIds = layer.path.map(function (group) {
12124
- return "group-".concat(group);
12125
- }).concat(layer.keywords.map(function (keyword) {
12126
- return "keyword-".concat(keyword);
12127
- }));
12128
- var isFilterInLayer = (layerFilterIds === null || layerFilterIds === void 0 ? void 0 : layerFilterIds.some(function (id) {
12129
- return filterIds.includes(id);
12130
- })) || allFiltersActive;
12131
- var isSearchTextInLayerFilter = layerFilterIds === null || layerFilterIds === void 0 ? void 0 : layerFilterIds.some(function (filterId) {
12132
- return filterId.toLowerCase().includes(searchLowercase);
12133
- });
12134
- var isSearchTextInLayerName = (_a = layer.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(searchLowercase);
12135
- var isSearchTextInLayerText = (_b = layer.text) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes(searchLowercase);
12136
- var isSearchTextInLayerAbstract = (_c = layer["abstract"]) === null || _c === void 0 ? void 0 : _c.toLowerCase().includes(searchLowercase);
12137
- var isSearchTextInServiceName = mapStoreService.name.toLowerCase().includes(searchLowercase);
12138
- var isSearchTextInLayer = isSearchTextInLayerName || isSearchTextInLayerText || isSearchTextInLayerAbstract || isSearchTextInLayerFilter || isSearchTextInServiceName;
12139
- return isFilterInLayer && isSearchTextInLayer;
12140
- });
12141
- }).filter(function (layer) {
12142
- return layer.leaf;
12143
- });
12144
- };
12145
-
12146
- /* *
12147
- * Licensed under the Apache License, Version 2.0 (the "License");
12148
- * you may not use this file except in compliance with the License.
12149
- * You may obtain a copy of the License at
12150
- *
12151
- * http://www.apache.org/licenses/LICENSE-2.0
12152
- *
12153
- * Unless required by applicable law or agreed to in writing, software
12154
- * distributed under the License is distributed on an "AS IS" BASIS,
12155
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12156
- * See the License for the specific language governing permissions and
12157
- * limitations under the License.
12158
- *
12159
- * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12160
- * Copyright 2022 - Finnish Meteorological Institute (FMI)
12177
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12178
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
12161
12179
  * */
12162
12180
 
12163
12181
  var LayerAddRemoveButton = function LayerAddRemoveButton(_ref) {
@@ -12280,11 +12298,11 @@ var LayerInfoButtonConnect = function LayerInfoButtonConnect(_ref) {
12280
12298
  * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12281
12299
  * Copyright 2022 - Finnish Meteorological Institute (FMI)
12282
12300
  * */
12283
- var textStyle$1 = {
12301
+ var textStyle = {
12284
12302
  lineHeight: '20px',
12285
12303
  letterSpacing: '0.25px'
12286
12304
  };
12287
- var textStyleWithMargin = Object.assign(Object.assign({}, textStyle$1), {
12305
+ var textStyleWithMargin = Object.assign(Object.assign({}, textStyle), {
12288
12306
  marginBottom: 1
12289
12307
  });
12290
12308
 
@@ -12293,7 +12311,7 @@ var LayerInfoText = function LayerInfoText(_ref) {
12293
12311
  value = _ref.value;
12294
12312
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Typography$1, {
12295
12313
  variant: "subtitle2",
12296
- sx: textStyle$1
12314
+ sx: textStyle
12297
12315
  }, label), /*#__PURE__*/React__default.createElement(Typography$1, {
12298
12316
  variant: "body2",
12299
12317
  sx: textStyleWithMargin
@@ -12316,10 +12334,6 @@ var LayerInfoText = function LayerInfoText(_ref) {
12316
12334
  * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12317
12335
  * Copyright 2022 - Finnish Meteorological Institute (FMI)
12318
12336
  * */
12319
- var textStyle = {
12320
- lineHeight: '20px',
12321
- letterSpacing: '0.25px'
12322
- };
12323
12337
  var valueStyle = Object.assign(Object.assign({}, textStyle), {
12324
12338
  overflowWrap: 'break-word'
12325
12339
  });
@@ -12330,12 +12344,15 @@ var LayerInfoList = function LayerInfoList(_ref) {
12330
12344
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Typography$1, {
12331
12345
  variant: "subtitle2",
12332
12346
  sx: textStyle
12333
- }, label), /*#__PURE__*/React__default.createElement(Grid$1, {
12347
+ }, label), list.length === 0 ? /*#__PURE__*/React__default.createElement(Typography$1, {
12348
+ variant: "body2",
12349
+ sx: textStyleWithMargin
12350
+ }, "-") : /*#__PURE__*/React__default.createElement(Grid$1, {
12334
12351
  container: true,
12335
12352
  direction: "column"
12336
12353
  }, list.map(function (item) {
12337
12354
  return /*#__PURE__*/React__default.createElement("div", {
12338
- key: item.name
12355
+ key: item.label
12339
12356
  }, /*#__PURE__*/React__default.createElement(Grid$1, {
12340
12357
  item: true,
12341
12358
  container: true,
@@ -12348,7 +12365,7 @@ var LayerInfoList = function LayerInfoList(_ref) {
12348
12365
  }, /*#__PURE__*/React__default.createElement(Typography$1, {
12349
12366
  variant: "body2",
12350
12367
  sx: textStyle
12351
- }, item.name, ":"))), /*#__PURE__*/React__default.createElement(Grid$1, {
12368
+ }, item.label, ":"))), /*#__PURE__*/React__default.createElement(Grid$1, {
12352
12369
  item: true,
12353
12370
  container: true,
12354
12371
  direction: "row",
@@ -12363,6 +12380,41 @@ var LayerInfoList = function LayerInfoList(_ref) {
12363
12380
  })));
12364
12381
  };
12365
12382
 
12383
+ /* *
12384
+ * Licensed under the Apache License, Version 2.0 (the "License");
12385
+ * you may not use this file except in compliance with the License.
12386
+ * You may obtain a copy of the License at
12387
+ *
12388
+ * http://www.apache.org/licenses/LICENSE-2.0
12389
+ *
12390
+ * Unless required by applicable law or agreed to in writing, software
12391
+ * distributed under the License is distributed on an "AS IS" BASIS,
12392
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12393
+ * See the License for the specific language governing permissions and
12394
+ * limitations under the License.
12395
+ *
12396
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12397
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
12398
+ * */
12399
+
12400
+ var LayerInfoLegend = function LayerInfoLegend(_ref) {
12401
+ var title = _ref.title,
12402
+ name = _ref.name,
12403
+ dimensions = _ref.dimensions,
12404
+ legendURL = _ref.legendURL;
12405
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Typography$1, {
12406
+ variant: "subtitle2",
12407
+ sx: textStyleWithMargin
12408
+ }, "Legend"), /*#__PURE__*/React__default.createElement(LegendLayout, {
12409
+ title: title,
12410
+ name: name,
12411
+ dimensions: dimensions
12412
+ }, legendURL ? /*#__PURE__*/React__default.createElement("img", {
12413
+ alt: title,
12414
+ src: legendURL
12415
+ }) : '-'));
12416
+ };
12417
+
12366
12418
  /* *
12367
12419
  * Licensed under the Apache License, Version 2.0 (the "License");
12368
12420
  * you may not use this file except in compliance with the License.
@@ -12394,20 +12446,19 @@ var getLayerStyles = function getLayerStyles(layer) {
12394
12446
 
12395
12447
  return styles.join(', ');
12396
12448
  };
12397
- var getDimensionValue = function getDimensionValue(name, layer, breakAt) {
12398
- var includeUnit = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
12399
-
12400
- var _a;
12401
-
12402
- var dimension = (_a = layer.dimensions) === null || _a === void 0 ? void 0 : _a.find(function (dimension) {
12403
- return dimension.name.toLowerCase() === name;
12449
+ var getDimensionValue = function getDimensionValue(name, dimensions) {
12450
+ var dimension = dimensions === null || dimensions === void 0 ? void 0 : dimensions.find(function (dimension) {
12451
+ return dimension.name.toLowerCase() === name.toLowerCase();
12404
12452
  });
12405
12453
 
12406
- if (!dimension) {
12407
- return '-';
12454
+ if (!dimension || !dimension.currentValue) {
12455
+ return null;
12408
12456
  }
12409
12457
 
12410
- var dimValue = dimension === null || dimension === void 0 ? void 0 : dimension.currentValue.split(breakAt).join("".concat(breakAt, " "));
12458
+ var dimName = dimension.name.toLowerCase();
12459
+ var breakAt = dimName === 'time' ? '/' : ',';
12460
+ var includeUnit = dimName !== 'time' && dimName !== 'reference_time';
12461
+ var dimValue = dimension.currentValue.split(breakAt).join("".concat(breakAt, " "));
12411
12462
 
12412
12463
  if (includeUnit) {
12413
12464
  return "".concat(dimValue, " ").concat(dimension.units);
@@ -12418,6 +12469,64 @@ var getDimensionValue = function getDimensionValue(name, layer, breakAt) {
12418
12469
  var getLayerBbox = function getLayerBbox(layer) {
12419
12470
  return layer.geographicBoundingBox ? "west ".concat(layer.geographicBoundingBox.west, ", east ").concat(layer.geographicBoundingBox.east, ", north ").concat(layer.geographicBoundingBox.north, ", south ").concat(layer.geographicBoundingBox.south) : '-';
12420
12471
  };
12472
+ var getDimensionIcon$1 = function getDimensionIcon(name, dimensions) {
12473
+ var dimension = dimensions === null || dimensions === void 0 ? void 0 : dimensions.find(function (dimension) {
12474
+ return dimension.name.toLowerCase() === name.toLowerCase();
12475
+ });
12476
+
12477
+ if (!dimension) {
12478
+ return null;
12479
+ }
12480
+
12481
+ switch (dimension.name.toLowerCase()) {
12482
+ case 'time':
12483
+ return /*#__PURE__*/React__default.createElement(DimensionsTime, null);
12484
+
12485
+ case 'reference_time':
12486
+ return /*#__PURE__*/React__default.createElement(DimensionsRefTime, null);
12487
+
12488
+ case 'elevation':
12489
+ return /*#__PURE__*/React__default.createElement(DimensionsElevation, null);
12490
+
12491
+ default:
12492
+ return /*#__PURE__*/React__default.createElement(DimensionsOther, null);
12493
+ }
12494
+ };
12495
+ var getDimensionLabel = function getDimensionLabel(name) {
12496
+ var dimName = name.toLowerCase().split('_').join(' ');
12497
+ return dimName.charAt(0).toUpperCase() + dimName.slice(1);
12498
+ };
12499
+ var getDimensionsList = function getDimensionsList(dimensions) {
12500
+ var result = [];
12501
+ dimensions === null || dimensions === void 0 ? void 0 : dimensions.forEach(function (_ref) {
12502
+ var name = _ref.name;
12503
+ var value = getDimensionValue(name, dimensions);
12504
+
12505
+ if (!value) {
12506
+ return;
12507
+ }
12508
+
12509
+ var icon = getDimensionIcon$1(name, dimensions);
12510
+ var label = getDimensionLabel(name);
12511
+ result.push({
12512
+ label: label,
12513
+ value: value,
12514
+ icon: icon
12515
+ });
12516
+ }); // sort alphabetically so other dimensions are sorted
12517
+
12518
+ result.sort(function (a, b) {
12519
+ return a.label.localeCompare(b.label);
12520
+ }); // sort by fixed order
12521
+
12522
+ var preferredOrder = ['Time', 'Reference time', 'Elevation']; // using reverse ordering to make sure the other dimensions come last
12523
+
12524
+ preferredOrder.reverse();
12525
+ result.sort(function (a, b) {
12526
+ return preferredOrder.indexOf(b.label) - preferredOrder.indexOf(a.label);
12527
+ });
12528
+ return result;
12529
+ };
12421
12530
 
12422
12531
  /* *
12423
12532
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -12452,9 +12561,7 @@ var LayerInfoDialog = function LayerInfoDialog(_ref) {
12452
12561
 
12453
12562
  var styles = getLayerStyles(layer);
12454
12563
  var bbox = getLayerBbox(layer);
12455
- var timeValue = getDimensionValue('time', layer, '/');
12456
- var refTimeValue = getDimensionValue('reference_time', layer, ',');
12457
- var elevationValue = getDimensionValue('elevation', layer, ',', true);
12564
+ var dimensions = getDimensionsList(layer.dimensions);
12458
12565
  return /*#__PURE__*/React__default.createElement(ToolContainerDraggable, {
12459
12566
  onClose: onClose,
12460
12567
  headerSize: "xs",
@@ -12489,23 +12596,7 @@ var LayerInfoDialog = function LayerInfoDialog(_ref) {
12489
12596
  value: layer["abstract"] || '-'
12490
12597
  }), /*#__PURE__*/React__default.createElement(LayerInfoList, {
12491
12598
  label: "Dimensions",
12492
- list: [{
12493
- name: 'Time',
12494
- value: timeValue,
12495
- icon: /*#__PURE__*/React__default.createElement(DimensionsTime, null)
12496
- }, {
12497
- name: 'Reference Time',
12498
- value: refTimeValue,
12499
- icon: /*#__PURE__*/React__default.createElement(DimensionsRefTime, null)
12500
- }, {
12501
- name: 'Elevation',
12502
- value: elevationValue,
12503
- icon: /*#__PURE__*/React__default.createElement(DimensionsElevation, null)
12504
- }, {
12505
- name: 'Other dimensions',
12506
- value: '-',
12507
- icon: /*#__PURE__*/React__default.createElement(DimensionsOther, null)
12508
- }]
12599
+ list: dimensions
12509
12600
  }), /*#__PURE__*/React__default.createElement(LayerInfoText, {
12510
12601
  label: "Styles",
12511
12602
  value: styles
@@ -12518,9 +12609,152 @@ var LayerInfoDialog = function LayerInfoDialog(_ref) {
12518
12609
  }), /*#__PURE__*/React__default.createElement(LayerInfoText, {
12519
12610
  label: "Keywords",
12520
12611
  value: ((_a = layer.keywords) === null || _a === void 0 ? void 0 : _a.join(', ')) || '-'
12612
+ }), /*#__PURE__*/React__default.createElement(LayerInfoLegend, {
12613
+ title: layer.text,
12614
+ name: layer.name,
12615
+ dimensions: layer.dimensions,
12616
+ legendURL: layer.styles && layer.styles.length && layer.styles[0].legendURL
12521
12617
  })));
12522
12618
  };
12523
12619
 
12620
+ /* *
12621
+ * Licensed under the Apache License, Version 2.0 (the "License");
12622
+ * you may not use this file except in compliance with the License.
12623
+ * You may obtain a copy of the License at
12624
+ *
12625
+ * http://www.apache.org/licenses/LICENSE-2.0
12626
+ *
12627
+ * Unless required by applicable law or agreed to in writing, software
12628
+ * distributed under the License is distributed on an "AS IS" BASIS,
12629
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12630
+ * See the License for the specific language governing permissions and
12631
+ * limitations under the License.
12632
+ *
12633
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12634
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
12635
+ * */
12636
+
12637
+ var LayerListDimensions = function LayerListDimensions(_ref) {
12638
+ var dimensions = _ref.dimensions;
12639
+
12640
+ if (!dimensions || !dimensions.length) {
12641
+ return null;
12642
+ }
12643
+
12644
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, dimensions.map(function (dimension) {
12645
+ return /*#__PURE__*/React__default.createElement(Tooltip$1, {
12646
+ key: dimension.label,
12647
+ title: "".concat(dimension.label, ": ").concat(dimension.value)
12648
+ }, /*#__PURE__*/React__default.createElement("span", {
12649
+ style: {
12650
+ marginRight: 4
12651
+ }
12652
+ }, dimension.icon));
12653
+ }));
12654
+ };
12655
+
12656
+ /* *
12657
+ * Licensed under the Apache License, Version 2.0 (the "License");
12658
+ * you may not use this file except in compliance with the License.
12659
+ * You may obtain a copy of the License at
12660
+ *
12661
+ * http://www.apache.org/licenses/LICENSE-2.0
12662
+ *
12663
+ * Unless required by applicable law or agreed to in writing, software
12664
+ * distributed under the License is distributed on an "AS IS" BASIS,
12665
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12666
+ * See the License for the specific language governing permissions and
12667
+ * limitations under the License.
12668
+ *
12669
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12670
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
12671
+ * */
12672
+ var buttonLarge = 80;
12673
+ var buttonSmall = 60;
12674
+ var layerSelectColumnsLarge = {
12675
+ column1: {
12676
+ width: 112
12677
+ },
12678
+ column2: {
12679
+ marginTop: '6px',
12680
+ width: "calc(100% - 112px)",
12681
+ height: '36px',
12682
+ paddingLeft: '20px'
12683
+ },
12684
+ column3: {
12685
+ height: '12px'
12686
+ },
12687
+ column4: {
12688
+ height: '24px'
12689
+ },
12690
+ column5: {
12691
+ height: '24px',
12692
+ width: 140
12693
+ },
12694
+ column6: {
12695
+ height: '24px',
12696
+ width: "calc(100% - 140px)"
12697
+ },
12698
+ column7: {
12699
+ height: '48px',
12700
+ width: buttonLarge,
12701
+ marginRight: 1,
12702
+ marginLeft: 2
12703
+ },
12704
+ column8: {
12705
+ width: "calc(100% - ".concat(buttonLarge, "px - 24px)")
12706
+ },
12707
+ column9: {
12708
+ width: "calc(".concat(buttonLarge, "px + 24px)")
12709
+ }
12710
+ };
12711
+ var layerSelectColumnsSmall = {
12712
+ column1: {
12713
+ width: '100%'
12714
+ },
12715
+ column2: {
12716
+ marginTop: '4px',
12717
+ width: "calc(100% - 20px)"
12718
+ },
12719
+ column3: {
12720
+ height: '12px'
12721
+ },
12722
+ column4: {
12723
+ height: '48px'
12724
+ },
12725
+ column5: {
12726
+ height: '24px',
12727
+ width: '100%'
12728
+ },
12729
+ column6: {
12730
+ height: '24px',
12731
+ width: '100%'
12732
+ },
12733
+ column7: {
12734
+ height: '48px',
12735
+ width: buttonSmall,
12736
+ marginRight: 0,
12737
+ marginLeft: 1
12738
+ },
12739
+ column8: {
12740
+ width: "calc(100% - ".concat(buttonSmall, "px - 8px)")
12741
+ },
12742
+ column9: {
12743
+ width: "calc(".concat(buttonSmall, "px + 8px)")
12744
+ }
12745
+ };
12746
+ var breakpoint = 500;
12747
+ var widthToColumns = function widthToColumns(width) {
12748
+ if (width <= breakpoint) return layerSelectColumnsSmall;
12749
+ return layerSelectColumnsLarge;
12750
+ };
12751
+ var rowHeightLarge = 68;
12752
+ var rowHeightSmall = 136;
12753
+ var widthToRowHeight = function widthToRowHeight(width) {
12754
+ if (width <= breakpoint) return rowHeightSmall;
12755
+ return rowHeightLarge;
12756
+ };
12757
+
12524
12758
  /* *
12525
12759
  * Licensed under the Apache License, Version 2.0 (the "License");
12526
12760
  * you may not use this file except in compliance with the License.
@@ -12541,7 +12775,8 @@ var layerInfoStyle = {
12541
12775
  fontSize: '10px',
12542
12776
  textOverflow: 'ellipsis',
12543
12777
  overflow: 'hidden',
12544
- whiteSpace: 'nowrap'
12778
+ whiteSpace: 'nowrap',
12779
+ lineHeight: 1
12545
12780
  };
12546
12781
 
12547
12782
  var LayerListRow = function LayerListRow(_ref) {
@@ -12551,31 +12786,32 @@ var LayerListRow = function LayerListRow(_ref) {
12551
12786
  addLayer = _ref.addLayer,
12552
12787
  deleteLayer = _ref.deleteLayer,
12553
12788
  mapLayers = _ref.mapLayers,
12554
- mapId = _ref.mapId;
12789
+ mapId = _ref.mapId,
12790
+ layerSelectWidth = _ref.layerSelectWidth;
12555
12791
 
12556
- var _a, _b, _c;
12792
+ var _a;
12557
12793
 
12794
+ var rowHeight = widthToRowHeight(layerSelectWidth);
12795
+ var columns = widthToColumns(layerSelectWidth);
12796
+ var dimensions = getDimensionsList(layer.dimensions);
12558
12797
  return /*#__PURE__*/React__default.createElement(Grid, {
12559
12798
  "data-testid": "layerListLayerRow",
12560
12799
  container: true,
12561
- item: true,
12562
- xs: 12,
12563
12800
  justifyContent: "center",
12564
12801
  alignItems: "center",
12565
12802
  sx: {
12566
12803
  backgroundColor: 'geowebColors.cards.cardContainer',
12567
12804
  padding: '8px',
12568
12805
  marginBottom: '4px',
12569
- height: '68px',
12806
+ height: rowHeight,
12570
12807
  border: 'solid 1px',
12571
12808
  borderColor: 'geowebColors.cards.cardContainerBorder'
12572
12809
  }
12573
12810
  }, /*#__PURE__*/React__default.createElement(Grid, {
12574
12811
  container: true,
12575
12812
  item: true,
12576
- xs: 10
12813
+ sx: columns.column8
12577
12814
  }, /*#__PURE__*/React__default.createElement(Grid, {
12578
- container: true,
12579
12815
  item: true,
12580
12816
  xs: 12
12581
12817
  }, /*#__PURE__*/React__default.createElement(Box, {
@@ -12584,25 +12820,19 @@ var LayerListRow = function LayerListRow(_ref) {
12584
12820
  height: '14px',
12585
12821
  lineHeight: '14px',
12586
12822
  fontWeight: 500,
12587
- WebkitLineClamp: 1,
12588
- display: '-webkit-box',
12589
- WebkitBoxOrient: 'vertical',
12590
12823
  textOverflow: 'ellipsis',
12591
12824
  overflow: 'hidden'
12592
12825
  }
12593
12826
  }, layer.text)), /*#__PURE__*/React__default.createElement(Grid, {
12594
- container: true,
12595
12827
  item: true,
12596
- xs: 4,
12597
- direction: "column"
12828
+ container: true,
12829
+ direction: "column",
12830
+ sx: columns.column1
12598
12831
  }, /*#__PURE__*/React__default.createElement(Box, {
12599
12832
  sx: {
12600
12833
  fontSize: '12px',
12601
12834
  height: '18px',
12602
12835
  lineHeight: '18px',
12603
- WebkitLineClamp: 1,
12604
- display: '-webkit-box',
12605
- WebkitBoxOrient: 'vertical',
12606
12836
  textOverflow: 'ellipsis',
12607
12837
  overflow: 'hidden'
12608
12838
  }
@@ -12610,44 +12840,41 @@ var LayerListRow = function LayerListRow(_ref) {
12610
12840
  layer: layer,
12611
12841
  mapId: mapId,
12612
12842
  serviceName: service.name
12613
- })), layer["abstract"] || ((_a = layer.keywords) === null || _a === void 0 ? void 0 : _a.length) || layer.path.length ? /*#__PURE__*/React__default.createElement(Grid, {
12843
+ })), /*#__PURE__*/React__default.createElement(Grid, {
12844
+ item: true,
12845
+ sx: columns.column2
12846
+ }, /*#__PURE__*/React__default.createElement(Grid, {
12847
+ item: true,
12848
+ sx: columns.column3
12849
+ }, layer["abstract"] && /*#__PURE__*/React__default.createElement(Typography, {
12614
12850
  "data-testid": "layerAbstract",
12851
+ sx: layerInfoStyle
12852
+ }, layer["abstract"])), /*#__PURE__*/React__default.createElement(Grid, {
12853
+ item: true,
12615
12854
  container: true,
12855
+ sx: columns.column4
12856
+ }, /*#__PURE__*/React__default.createElement(Grid, {
12616
12857
  item: true,
12617
- xs: 8,
12618
- sx: {
12619
- height: '45px',
12620
- paddingLeft: '20px',
12621
- WebkitLineClamp: 2,
12622
- display: '-webkit-box',
12623
- WebkitBoxOrient: 'vertical'
12624
- }
12625
- }, layer["abstract"] && /*#__PURE__*/React__default.createElement(Typography, {
12626
- sx: Object.assign(Object.assign({}, layerInfoStyle), {
12627
- height: 15
12628
- })
12629
- }, layer["abstract"]), layer.path.length > 0 && /*#__PURE__*/React__default.createElement(Typography, {
12630
- sx: Object.assign(Object.assign({}, layerInfoStyle), {
12631
- height: ((_b = layer.keywords) === null || _b === void 0 ? void 0 : _b.length) ? 15 : 30
12632
- })
12633
- }, "Groups: ", layer.path.join(' / ')), ((_c = layer.keywords) === null || _c === void 0 ? void 0 : _c.length) > 0 && /*#__PURE__*/React__default.createElement(Typography, {
12634
- sx: Object.assign(Object.assign({}, layerInfoStyle), {
12635
- height: layer.path.length ? 15 : 30
12636
- })
12858
+ sx: columns.column5
12859
+ }, /*#__PURE__*/React__default.createElement(LayerListDimensions, {
12860
+ dimensions: dimensions
12861
+ })), /*#__PURE__*/React__default.createElement(Grid, {
12862
+ item: true,
12863
+ sx: columns.column6
12864
+ }, layer.path.length > 0 && /*#__PURE__*/React__default.createElement(Typography, {
12865
+ sx: layerInfoStyle
12866
+ }, "Groups: ", layer.path.join(' / ')), ((_a = layer.keywords) === null || _a === void 0 ? void 0 : _a.length) > 0 && /*#__PURE__*/React__default.createElement(Typography, {
12867
+ sx: layerInfoStyle
12637
12868
  }, "Keywords:", ' ', layer.keywords.slice().sort(function (a, b) {
12638
12869
  return a.localeCompare(b);
12639
- }).join(', '))) : null), /*#__PURE__*/React__default.createElement(Grid, {
12870
+ }).join(', ')))))), /*#__PURE__*/React__default.createElement(Grid, {
12640
12871
  container: true,
12641
12872
  item: true,
12642
- xs: 2,
12873
+ sx: columns.column9,
12643
12874
  justifyContent: "flex-end",
12644
12875
  alignItems: "center"
12645
12876
  }, /*#__PURE__*/React__default.createElement(Box, {
12646
- sx: {
12647
- width: '80px',
12648
- height: '48px',
12649
- marginRight: '8px'
12650
- }
12877
+ sx: columns.column7
12651
12878
  }, /*#__PURE__*/React__default.createElement(LayerAddRemoveButton, {
12652
12879
  layer: layer,
12653
12880
  layerIndex: layerIndex,
@@ -12658,42 +12885,36 @@ var LayerListRow = function LayerListRow(_ref) {
12658
12885
  }))));
12659
12886
  };
12660
12887
 
12888
+ /* *
12889
+ * Licensed under the Apache License, Version 2.0 (the "License");
12890
+ * you may not use this file except in compliance with the License.
12891
+ * You may obtain a copy of the License at
12892
+ *
12893
+ * http://www.apache.org/licenses/LICENSE-2.0
12894
+ *
12895
+ * Unless required by applicable law or agreed to in writing, software
12896
+ * distributed under the License is distributed on an "AS IS" BASIS,
12897
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12898
+ * See the License for the specific language governing permissions and
12899
+ * limitations under the License.
12900
+ *
12901
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12902
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
12903
+ * */
12904
+
12661
12905
  var LayerList = function LayerList(_ref) {
12662
12906
  var services = _ref.services,
12663
- serviceIds = _ref.serviceIds,
12907
+ filteredLayers = _ref.filteredLayers,
12664
12908
  layerSelectHeight = _ref.layerSelectHeight,
12665
12909
  serviceListHeight = _ref.serviceListHeight,
12910
+ layerSelectWidth = _ref.layerSelectWidth,
12666
12911
  addLayer = _ref.addLayer,
12667
12912
  deleteLayer = _ref.deleteLayer,
12668
- searchString = _ref.searchString,
12669
12913
  mapLayers = _ref.mapLayers,
12670
- filterIds = _ref.filterIds,
12671
- allFiltersActive = _ref.allFiltersActive,
12672
12914
  mapId = _ref.mapId;
12915
+ var rowMargin = 4;
12916
+ var rowHeight = widthToRowHeight(layerSelectWidth);
12673
12917
  var layerSelectFilterHeight = 155 + serviceListHeight;
12674
-
12675
- var _React$useState = React.useState(0),
12676
- _React$useState2 = _slicedToArray(_React$useState, 2),
12677
- numberOfLayers = _React$useState2[0],
12678
- setNumberOfLayers = _React$useState2[1];
12679
-
12680
- var _React$useState3 = React.useState([]),
12681
- _React$useState4 = _slicedToArray(_React$useState3, 2),
12682
- layersFilteredFromService = _React$useState4[0],
12683
- setLayersFilteredFromService = _React$useState4[1];
12684
-
12685
- React.useEffect(function () {
12686
- setNumberOfLayers(serviceIds.reduce(function (totalNumberOfLayers, serviceId) {
12687
- return totalNumberOfLayers + filterLayersFromService(serviceId, services, filterIds, allFiltersActive, searchString).length;
12688
- }, 0));
12689
- setLayersFilteredFromService(serviceIds.reduce(function (layerList, serviceId) {
12690
- return layerList.concat(filterLayersFromService(serviceId, services, filterIds, allFiltersActive, searchString).map(function (layer) {
12691
- return Object.assign(Object.assign({}, layer), {
12692
- serviceId: serviceId
12693
- });
12694
- }));
12695
- }, []));
12696
- }, [serviceIds, filterIds, services, searchString, allFiltersActive]);
12697
12918
  return /*#__PURE__*/React.createElement(Box, {
12698
12919
  "data-testid": "layerList"
12699
12920
  }, /*#__PURE__*/React.createElement(Box, {
@@ -12701,24 +12922,27 @@ var LayerList = function LayerList(_ref) {
12701
12922
  marginBottom: '4px',
12702
12923
  fontSize: '12px'
12703
12924
  }
12704
- }, numberOfLayers, " results"), /*#__PURE__*/React.createElement(FixedSizeList, {
12925
+ }, filteredLayers.length, " results"), /*#__PURE__*/React.createElement(FixedSizeList, {
12705
12926
  height: layerSelectHeight - layerSelectFilterHeight,
12706
- itemCount: numberOfLayers,
12707
- itemSize: 72
12927
+ itemCount: filteredLayers.length,
12928
+ itemSize: rowHeight + rowMargin
12708
12929
  }, function (_ref2) {
12709
12930
  var index = _ref2.index,
12710
12931
  style = _ref2.style;
12932
+ var filter = filteredLayers[index];
12933
+ var service = services[filter.serviceName];
12711
12934
  return /*#__PURE__*/React.createElement("div", {
12712
12935
  style: style,
12713
- key: layersFilteredFromService[index].name
12714
- }, services[layersFilteredFromService[index].serviceId] && /*#__PURE__*/React.createElement(LayerListRow, {
12715
- layer: layersFilteredFromService[index],
12936
+ key: filter.name
12937
+ }, service && /*#__PURE__*/React.createElement(LayerListRow, {
12938
+ layer: filter,
12716
12939
  layerIndex: index,
12717
- service: services[layersFilteredFromService[index].serviceId],
12940
+ service: service,
12718
12941
  addLayer: addLayer,
12719
12942
  deleteLayer: deleteLayer,
12720
12943
  mapLayers: mapLayers,
12721
- mapId: mapId
12944
+ mapId: mapId,
12945
+ layerSelectWidth: layerSelectWidth
12722
12946
  }));
12723
12947
  }));
12724
12948
  };
@@ -12743,14 +12967,12 @@ var LayerList = function LayerList(_ref) {
12743
12967
  var LayerListConnect = function LayerListConnect(_ref) {
12744
12968
  var mapId = _ref.mapId,
12745
12969
  layerSelectHeight = _ref.layerSelectHeight,
12746
- serviceListHeight = _ref.serviceListHeight;
12970
+ serviceListHeight = _ref.serviceListHeight,
12971
+ layerSelectWidth = _ref.layerSelectWidth;
12972
+ var dispatch = useDispatch();
12747
12973
  var services = useSelector(function (store) {
12748
12974
  return getServices(store);
12749
12975
  });
12750
- var dispatch = useDispatch();
12751
- var enabledServiceIds = useSelector(function (store) {
12752
- return getEnabledServiceIds(store);
12753
- });
12754
12976
  var mapLayers = useSelector(function (store) {
12755
12977
  return getMapLayers(store, mapId);
12756
12978
  });
@@ -12765,7 +12987,6 @@ var LayerListConnect = function LayerListConnect(_ref) {
12765
12987
  layerType: LayerType$1.mapLayer
12766
12988
  };
12767
12989
  addMapLayer({
12768
- mapId: mapId,
12769
12990
  layerId: layer.id,
12770
12991
  layer: layer,
12771
12992
  origin: LayerActionOrigin.layerManager
@@ -12793,25 +13014,17 @@ var LayerListConnect = function LayerListConnect(_ref) {
12793
13014
  origin: LayerActionOrigin.layerManager
12794
13015
  }));
12795
13016
  }, [dispatch, mapId]);
12796
- var checkedFilterIds = useSelector(function (store) {
12797
- return getCheckedFilterIds(store);
12798
- });
12799
- var allFiltersActive = useSelector(function (store) {
12800
- return isAllFiltersChecked(store);
12801
- });
12802
- var searchString = useSelector(function (store) {
12803
- return getSearchFilter(store);
13017
+ var filteredLayers = useSelector(function (store) {
13018
+ return getFilteredLayers(store);
12804
13019
  });
12805
13020
  return /*#__PURE__*/React.createElement(LayerList, {
13021
+ filteredLayers: filteredLayers,
12806
13022
  services: services,
12807
- serviceIds: enabledServiceIds,
12808
13023
  layerSelectHeight: layerSelectHeight,
12809
13024
  serviceListHeight: serviceListHeight,
13025
+ layerSelectWidth: layerSelectWidth,
12810
13026
  addLayer: addLayer,
12811
13027
  deleteLayer: deleteLayer,
12812
- filterIds: checkedFilterIds,
12813
- allFiltersActive: allFiltersActive,
12814
- searchString: searchString,
12815
13028
  mapLayers: mapLayers,
12816
13029
  mapId: mapId
12817
13030
  });
@@ -12835,13 +13048,13 @@ var LayerListConnect = function LayerListConnect(_ref) {
12835
13048
  * */
12836
13049
  var style = {
12837
13050
  borderRadius: '20px!important',
12838
- marginRight: '8px',
13051
+ marginRight: '4px',
12839
13052
  whiteSpace: 'nowrap',
12840
- height: '32px!important',
13053
+ height: '24px!important',
12841
13054
  padding: '5px 12px!important',
12842
13055
  textTransform: 'none!important',
12843
13056
  fontWeight: 'normal',
12844
- marginBottom: '5px'
13057
+ marginBottom: '4px'
12845
13058
  };
12846
13059
 
12847
13060
  var ServiceChip = function ServiceChip(_ref) {
@@ -12996,9 +13209,9 @@ var ServiceList = function ServiceList(_ref) {
12996
13209
  display: 'block',
12997
13210
  alignItems: 'center',
12998
13211
  "float": 'left',
12999
- paddingLeft: '40px',
13000
- paddingRight: '30px',
13001
- marginBottom: '5px',
13212
+ paddingLeft: '48px',
13213
+ paddingRight: '40px',
13214
+ marginBottom: '8px',
13002
13215
  fontSize: '0.875rem'
13003
13216
  },
13004
13217
  ref: ref
@@ -13154,8 +13367,9 @@ var Rows = function Rows(_ref2) {
13154
13367
  var _services$serviceId = services[serviceId],
13155
13368
  serviceUrl = _services$serviceId.serviceUrl,
13156
13369
  serviceName = _services$serviceId.serviceName,
13157
- isUserAddedService = _services$serviceId.isUserAddedService;
13370
+ scope = _services$serviceId.scope;
13158
13371
  var serviceHasActiveLayers = checkIfServiceHasActiveLayers(serviceUrl);
13372
+ var userAddedService = isUserAddedService(scope);
13159
13373
  return /*#__PURE__*/React.createElement(ListItem, {
13160
13374
  key: serviceUrl
13161
13375
  }, /*#__PURE__*/React.createElement(ListItemText, {
@@ -13178,7 +13392,7 @@ var Rows = function Rows(_ref2) {
13178
13392
  }, /*#__PURE__*/React.createElement(Grid, {
13179
13393
  item: true,
13180
13394
  xs: 6
13181
- }, isUserAddedService ? /*#__PURE__*/React.createElement(Tooltip, {
13395
+ }, userAddedService ? /*#__PURE__*/React.createElement(Tooltip, {
13182
13396
  title: "Edit Service"
13183
13397
  }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(IconButton, {
13184
13398
  "aria-label": "edit service",
@@ -13209,7 +13423,7 @@ var Rows = function Rows(_ref2) {
13209
13423
  }, /*#__PURE__*/React.createElement(Visibility, null))))), /*#__PURE__*/React.createElement(Grid, {
13210
13424
  item: true,
13211
13425
  xs: 6
13212
- }, isUserAddedService && /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(Tooltip, {
13426
+ }, userAddedService && /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(Tooltip, {
13213
13427
  title: serviceHasActiveLayers ? 'Service has active layers. Cannot remove this service' : 'Delete Service',
13214
13428
  "data-testid": "removeServiceTooltip"
13215
13429
  }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(IconButton, {
@@ -13308,15 +13522,20 @@ var LayerSelect = function LayerSelect(_ref) {
13308
13522
  _ref$order = _ref.order,
13309
13523
  order = _ref$order === void 0 ? 0 : _ref$order,
13310
13524
  _ref$source = _ref.source,
13311
- source = _ref$source === void 0 ? 'module' : _ref$source;
13525
+ source = _ref$source === void 0 ? 'module' : _ref$source,
13526
+ _ref$startSize = _ref.startSize,
13527
+ startSize = _ref$startSize === void 0 ? {
13528
+ width: 750,
13529
+ height: 500
13530
+ } : _ref$startSize;
13312
13531
  var initialServiceListHeight = 37;
13313
13532
 
13314
- var _React$useState = React.useState(500),
13533
+ var _React$useState = React.useState(startSize.height),
13315
13534
  _React$useState2 = _slicedToArray(_React$useState, 2),
13316
13535
  height = _React$useState2[0],
13317
13536
  setHeight = _React$useState2[1];
13318
13537
 
13319
- var _React$useState3 = React.useState(750),
13538
+ var _React$useState3 = React.useState(startSize.width),
13320
13539
  _React$useState4 = _slicedToArray(_React$useState3, 2),
13321
13540
  width = _React$useState4[0],
13322
13541
  setWidth = _React$useState4[1];
@@ -13345,7 +13564,7 @@ var LayerSelect = function LayerSelect(_ref) {
13345
13564
  width: width,
13346
13565
  height: height
13347
13566
  },
13348
- minWidth: 390,
13567
+ minWidth: 320,
13349
13568
  minHeight: 126,
13350
13569
  startPosition: {
13351
13570
  top: 150,
@@ -13362,13 +13581,13 @@ var LayerSelect = function LayerSelect(_ref) {
13362
13581
  source: source
13363
13582
  }, /*#__PURE__*/React.createElement(Box, {
13364
13583
  sx: {
13365
- padding: '6px'
13584
+ padding: '4px 16px 0 16px'
13366
13585
  }
13367
13586
  }, /*#__PURE__*/React.createElement(SearchFieldConnect, null)), /*#__PURE__*/React.createElement(Box, {
13368
13587
  sx: {
13369
13588
  "float": 'left',
13370
13589
  position: 'absolute',
13371
- margin: '12px 0 0 8px',
13590
+ margin: '8px 8px 0 16px',
13372
13591
  zIndex: 2
13373
13592
  }
13374
13593
  }, /*#__PURE__*/React.createElement(KeywordFilterButtonConnect, {
@@ -13376,7 +13595,7 @@ var LayerSelect = function LayerSelect(_ref) {
13376
13595
  })), /*#__PURE__*/React.createElement(Box, {
13377
13596
  sx: {
13378
13597
  position: 'absolute',
13379
- margin: '12px 0 0 calc(100% - 36px)',
13598
+ margin: '8px 0 0 calc(100% - 40px)',
13380
13599
  zIndex: 2
13381
13600
  }
13382
13601
  }, /*#__PURE__*/React.createElement(ServiceOptionsButton, {
@@ -13385,12 +13604,13 @@ var LayerSelect = function LayerSelect(_ref) {
13385
13604
  setHeight: handleHeightChange
13386
13605
  })), /*#__PURE__*/React.createElement(Box, {
13387
13606
  sx: {
13388
- padding: '0 8px'
13607
+ padding: '0 16px'
13389
13608
  }
13390
13609
  }, /*#__PURE__*/React.createElement(LayerListConnect, {
13391
13610
  mapId: mapId,
13392
13611
  layerSelectHeight: height,
13393
- serviceListHeight: serviceListHeight
13612
+ serviceListHeight: serviceListHeight,
13613
+ layerSelectWidth: width
13394
13614
  })));
13395
13615
  };
13396
13616
 
@@ -13783,7 +14003,7 @@ var KeywordFilterResults = function KeywordFilterResults(_ref) {
13783
14003
  var KeywordFilterResultsConnect = function KeywordFilterResultsConnect(_ref) {
13784
14004
  var bounds = _ref.bounds;
13785
14005
 
13786
- var _useSetupDialog = useSetupDialog('keywordFilter'),
14006
+ var _useSetupDialog = useSetupDialog(DialogTypes.KeywordFilter),
13787
14007
  dialogOrder = _useSetupDialog.dialogOrder,
13788
14008
  onCloseDialog = _useSetupDialog.onCloseDialog,
13789
14009
  setDialogOrder = _useSetupDialog.setDialogOrder,
@@ -13870,10 +14090,10 @@ var LayerSelectConnect = function LayerSelectConnect(_ref) {
13870
14090
  _ref$showTitle = _ref.showTitle,
13871
14091
  showTitle = _ref$showTitle === void 0 ? false : _ref$showTitle;
13872
14092
  var mapId = useSelector(function (store) {
13873
- return getDialogMapId(store, 'layerSelect');
14093
+ return getDialogMapId(store, DialogTypes.LayerSelect);
13874
14094
  });
13875
14095
 
13876
- var _useSetupDialog = useSetupDialog('layerSelect'),
14096
+ var _useSetupDialog = useSetupDialog(DialogTypes.LayerSelect),
13877
14097
  dialogOrder = _useSetupDialog.dialogOrder,
13878
14098
  isDialogOpen = _useSetupDialog.isDialogOpen,
13879
14099
  onCloseDialog = _useSetupDialog.onCloseDialog,
@@ -13905,11 +14125,6 @@ var useFetchServices = function useFetchServices(dialogType) {
13905
14125
  var serviceSetLayers = React.useCallback(function (payload) {
13906
14126
  dispatch(serviceActions.serviceSetLayers(payload));
13907
14127
  }, [dispatch]);
13908
-
13909
- var checkIfUserAddedService = function checkIfUserAddedService(service) {
13910
- return !!service.isUserAddedService;
13911
- };
13912
-
13913
14128
  React.useEffect(function () {
13914
14129
  if (isOpenInStore && preloadedServices && preloadedServices.length > 0) {
13915
14130
  mergePresetsAndUserAddedServices(preloadedServices, getUserAddedServices()).forEach(function (service) {
@@ -13921,7 +14136,7 @@ var useFetchServices = function useFetchServices(dialogType) {
13921
14136
  name: service.name,
13922
14137
  serviceUrl: service.url,
13923
14138
  layers: layers,
13924
- isUserAddedService: checkIfUserAddedService(service),
14139
+ scope: service.scope ? service.scope : 'system',
13925
14140
  // first try to load the user abstract, otherwise the service abstract
13926
14141
  "abstract": service["abstract"] || wmService["abstract"]
13927
14142
  });
@@ -13956,7 +14171,7 @@ var mergePresetsAndUserAddedServices = function mergePresetsAndUserAddedServices
13956
14171
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
13957
14172
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
13958
14173
  * */
13959
- var dialogType = 'layerManager';
14174
+ var dialogType = DialogTypes.LayerManager;
13960
14175
  /**
13961
14176
  * Layer Managerconnected to the store displaying the layers forthe active map Id
13962
14177
  * Please note that in order to use this and open/close the dialog, every map on the screen that should be able to show
@@ -14117,7 +14332,7 @@ var ZoomControlConnect = function ZoomControlConnect(_ref) {
14117
14332
  }, [mapId]);
14118
14333
 
14119
14334
  var onZoomIn = function onZoomIn() {
14120
- return adagucRef.current.zoomIn();
14335
+ return adagucRef.current.zoomIn(undefined);
14121
14336
  };
14122
14337
 
14123
14338
  var onZoomOut = function onZoomOut() {
@@ -14204,14 +14419,14 @@ var LayerManagerMapButtonConnect = function LayerManagerMapButtonConnect(_ref) {
14204
14419
  source = _ref$source === void 0 ? 'app' : _ref$source;
14205
14420
  var dispatch = useDispatch();
14206
14421
  var currentActiveMapId = useSelector(function (store) {
14207
- return getDialogMapId(store, 'layerManager');
14422
+ return getDialogMapId(store, DialogTypes.LayerManager);
14208
14423
  });
14209
14424
  var isOpenInStore = useSelector(function (store) {
14210
- return getisDialogOpen(store, 'layerManager');
14425
+ return getisDialogOpen(store, DialogTypes.LayerManager);
14211
14426
  });
14212
14427
  var openLayerManagerDialog = React.useCallback(function () {
14213
14428
  dispatch(uiActions.setActiveMapIdForDialog({
14214
- type: 'layerManager',
14429
+ type: DialogTypes.LayerManager,
14215
14430
  mapId: mapId,
14216
14431
  setOpen: currentActiveMapId !== mapId ? true : !isOpenInStore,
14217
14432
  source: source
@@ -14327,7 +14542,7 @@ var DimensionSelectSlider = function DimensionSelectSlider(_ref) {
14327
14542
  }
14328
14543
 
14329
14544
  var sortedMarks = _toConsumableArray(marks).sort(function (a, b) {
14330
- return typeof a.value === 'number' && typeof b.value === 'number' && a.value - b.value;
14545
+ return Number(typeof a.value === 'number' && typeof b.value === 'number' && a.value - b.value);
14331
14546
  });
14332
14547
 
14333
14548
  var adaptedMarks = reverse ? sortedMarks.reverse() : sortedMarks;
@@ -14815,9 +15030,7 @@ var titleOff = 'Auto update off';
14815
15030
 
14816
15031
  var AutoUpdateButton = function AutoUpdateButton(_ref) {
14817
15032
  var _ref$toggleAutoUpdate = _ref.toggleAutoUpdate,
14818
- toggleAutoUpdate = _ref$toggleAutoUpdate === void 0 ? function () {
14819
- return null;
14820
- } : _ref$toggleAutoUpdate,
15033
+ toggleAutoUpdate = _ref$toggleAutoUpdate === void 0 ? function () {} : _ref$toggleAutoUpdate,
14821
15034
  _ref$isAutoUpdating = _ref.isAutoUpdating,
14822
15035
  isAutoUpdating = _ref$isAutoUpdating === void 0 ? false : _ref$isAutoUpdating,
14823
15036
  _ref$disabled = _ref.disabled,
@@ -15074,9 +15287,7 @@ var TimeStepButton = function TimeStepButton(_ref) {
15074
15287
  timeDimension = _ref.timeDimension,
15075
15288
  onChangeTimeStep = _ref.onChangeTimeStep,
15076
15289
  _ref$onToggleTimestep = _ref.onToggleTimestepAuto,
15077
- onToggleTimestepAuto = _ref$onToggleTimestep === void 0 ? function () {
15078
- return null;
15079
- } : _ref$onToggleTimestep,
15290
+ onToggleTimestepAuto = _ref$onToggleTimestep === void 0 ? function () {} : _ref$onToggleTimestep,
15080
15291
  _ref$isOpenByDefault = _ref.isOpenByDefault,
15081
15292
  isOpenByDefault = _ref$isOpenByDefault === void 0 ? false : _ref$isOpenByDefault;
15082
15293
  var timeStepFromLayer = getActiveLayerTimeStep(timeDimension) || timeStep;
@@ -15107,6 +15318,129 @@ var TimeStepButton = function TimeStepButton(_ref) {
15107
15318
  });
15108
15319
  };
15109
15320
 
15321
+ /* *
15322
+ * Licensed under the Apache License, Version 2.0 (the "License");
15323
+ * you may not use this file except in compliance with the License.
15324
+ * You may obtain a copy of the License at
15325
+ *
15326
+ * http://www.apache.org/licenses/LICENSE-2.0
15327
+ *
15328
+ * Unless required by applicable law or agreed to in writing, software
15329
+ * distributed under the License is distributed on an "AS IS" BASIS,
15330
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15331
+ * See the License for the specific language governing permissions and
15332
+ * limitations under the License.
15333
+ *
15334
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
15335
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
15336
+ * */
15337
+ var marks = [{
15338
+ label: '5 min',
15339
+ value: Scale.Minutes5,
15340
+ text: '5m'
15341
+ }, {
15342
+ label: '1 h',
15343
+ value: Scale.Hour,
15344
+ text: '1h'
15345
+ }, {
15346
+ label: '3 h',
15347
+ value: Scale.Hours3,
15348
+ text: '3h'
15349
+ }, {
15350
+ label: '6 h',
15351
+ value: Scale.Hours6,
15352
+ text: '6h'
15353
+ }, {
15354
+ label: 'day',
15355
+ value: Scale.Day,
15356
+ text: 'd'
15357
+ }, {
15358
+ label: 'week',
15359
+ value: Scale.Week,
15360
+ text: 'w'
15361
+ }, {
15362
+ label: 'month',
15363
+ value: Scale.Month,
15364
+ text: 'm'
15365
+ }, {
15366
+ label: 'year',
15367
+ value: Scale.Year,
15368
+ text: 'y'
15369
+ }, {
15370
+ label: 'data',
15371
+ value: Scale.DataScale,
15372
+ text: 'data'
15373
+ }].sort(function (a, b) {
15374
+ return b.value - a.value;
15375
+ });
15376
+ var TimeScaleButton = function TimeScaleButton(_ref) {
15377
+ var layers = _ref.layers,
15378
+ _ref$timeSliderScale = _ref.timeSliderScale,
15379
+ timeSliderScale = _ref$timeSliderScale === void 0 ? Scale.Hour : _ref$timeSliderScale,
15380
+ centerTime = _ref.centerTime,
15381
+ secondsPerPx = _ref.secondsPerPx,
15382
+ selectedTime = _ref.selectedTime,
15383
+ onChangeTimeSliderScale = _ref.onChangeTimeSliderScale;
15384
+
15385
+ var onChangeSliderValue = function onChangeSliderValue(mark) {
15386
+ var newSliderValue = mark.value;
15387
+ var newValue = newSliderValue ? Math.round(newSliderValue) : 0;
15388
+ var newScale = marks.find(function (el) {
15389
+ return el.value === newValue;
15390
+ }).value;
15391
+ var scaleToSecPerPx = newScale === Scale.DataScale ? getScaleToSecondsPerPxForDataScale(layers) : scaleToSecondsPerPx[newScale];
15392
+ var newCenterTime = getNewCenterOfFixedPointZoom(selectedTime, secondsPerPx, scaleToSecPerPx, centerTime);
15393
+ onChangeTimeSliderScale(newScale, newCenterTime, scaleToSecPerPx);
15394
+ };
15395
+
15396
+ return /*#__PURE__*/React.createElement(TimeSliderMenu, {
15397
+ handleMenuItemClick: onChangeSliderValue,
15398
+ icon: /*#__PURE__*/React.createElement(Clock, null),
15399
+ marks: marks,
15400
+ title: "Time scale",
15401
+ value: timeSliderScale
15402
+ });
15403
+ };
15404
+
15405
+ /* *
15406
+ * Licensed under the Apache License, Version 2.0 (the "License");
15407
+ * you may not use this file except in compliance with the License.
15408
+ * You may obtain a copy of the License at
15409
+ *
15410
+ * http://www.apache.org/licenses/LICENSE-2.0
15411
+ *
15412
+ * Unless required by applicable law or agreed to in writing, software
15413
+ * distributed under the License is distributed on an "AS IS" BASIS,
15414
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15415
+ * See the License for the specific language governing permissions and
15416
+ * limitations under the License.
15417
+ *
15418
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
15419
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
15420
+ * */
15421
+ var title = 'Now';
15422
+
15423
+ var NowButton = function NowButton(_ref) {
15424
+ var _ref$onSetNow = _ref.onSetNow,
15425
+ onSetNow = _ref$onSetNow === void 0 ? function () {
15426
+ return null;
15427
+ } : _ref$onSetNow,
15428
+ _ref$disabled = _ref.disabled,
15429
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled;
15430
+ return /*#__PURE__*/React.createElement(Tooltip, {
15431
+ title: title,
15432
+ "data-testid": "nowButtonTooltip"
15433
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
15434
+ disabled: disabled,
15435
+ onClick: function onClick() {
15436
+ return onSetNow();
15437
+ },
15438
+ "aria-label": "now"
15439
+ }, /*#__PURE__*/React.createElement(Now, {
15440
+ "data-testid": "now-svg"
15441
+ }))));
15442
+ };
15443
+
15110
15444
  var OptionsPopOver = styled(Popover)(function (_ref) {
15111
15445
  var theme = _ref.theme;
15112
15446
  return {
@@ -15119,9 +15453,11 @@ var OptionsPopOver = styled(Popover)(function (_ref) {
15119
15453
  });
15120
15454
 
15121
15455
  var OptionsMenuButton = function OptionsMenuButton(_ref2) {
15122
- var autoUpdateBtn = _ref2.autoUpdateBtn,
15456
+ var nowBtn = _ref2.nowBtn,
15457
+ autoUpdateBtn = _ref2.autoUpdateBtn,
15123
15458
  speedBtn = _ref2.speedBtn,
15124
- timeStepBtn = _ref2.timeStepBtn;
15459
+ timeStepBtn = _ref2.timeStepBtn,
15460
+ timeScaleBtn = _ref2.timeScaleBtn;
15125
15461
 
15126
15462
  var _React$useState = React.useState(null),
15127
15463
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -15144,10 +15480,9 @@ var OptionsMenuButton = function OptionsMenuButton(_ref2) {
15144
15480
  }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
15145
15481
  onClick: onClickButton,
15146
15482
  "data-testid": "optionsMenuButton",
15147
- active: open
15148
- }, /*#__PURE__*/React.createElement(Options, {
15149
- "data-testid": "optionsIcon"
15150
- })))), /*#__PURE__*/React.createElement(OptionsPopOver, {
15483
+ active: open,
15484
+ "aria-label": "animation options"
15485
+ }, /*#__PURE__*/React.createElement(Options, null)))), /*#__PURE__*/React.createElement(OptionsPopOver, {
15151
15486
  id: id,
15152
15487
  open: open,
15153
15488
  "data-testid": "optionsMenuPopOver",
@@ -15167,19 +15502,27 @@ var OptionsMenuButton = function OptionsMenuButton(_ref2) {
15167
15502
  }, /*#__PURE__*/React.createElement(Grid, {
15168
15503
  item: true,
15169
15504
  xs: "auto"
15505
+ }, nowBtn || /*#__PURE__*/React.createElement(NowButton, null)), /*#__PURE__*/React.createElement(Grid, {
15506
+ item: true,
15507
+ xs: "auto"
15508
+ }, timeScaleBtn || /*#__PURE__*/React.createElement(TimeScaleButton, {
15509
+ centerTime: 0,
15510
+ onChangeTimeSliderScale: function onChangeTimeSliderScale() {},
15511
+ secondsPerPx: 0,
15512
+ selectedTime: 0,
15513
+ timeSliderScale: 0
15514
+ })), /*#__PURE__*/React.createElement(Grid, {
15515
+ item: true,
15516
+ xs: "auto"
15170
15517
  }, timeStepBtn || /*#__PURE__*/React.createElement(TimeStepButton, {
15171
15518
  timeStep: 0,
15172
- onChangeTimeStep: function onChangeTimeStep() {
15173
- return null;
15174
- }
15519
+ onChangeTimeStep: function onChangeTimeStep() {}
15175
15520
  })), /*#__PURE__*/React.createElement(Grid, {
15176
15521
  item: true,
15177
15522
  xs: "auto"
15178
15523
  }, speedBtn || /*#__PURE__*/React.createElement(SpeedButton, {
15179
15524
  animationDelay: defaultAnimationDelayAtStart,
15180
- setMapAnimationDelay: function setMapAnimationDelay() {
15181
- return null;
15182
- }
15525
+ setMapAnimationDelay: function setMapAnimationDelay() {}
15183
15526
  })), /*#__PURE__*/React.createElement(Grid, {
15184
15527
  item: true,
15185
15528
  xs: "auto"
@@ -15210,10 +15553,7 @@ var TimeSliderButtons = function TimeSliderButtons(_ref) {
15210
15553
  "data-testid": "timeSliderButtons"
15211
15554
  }, /*#__PURE__*/React.createElement(Grid, {
15212
15555
  container: true,
15213
- spacing: 2,
15214
- sx: {
15215
- padding: '20px 0px 0px 16px'
15216
- }
15556
+ spacing: 2
15217
15557
  }, /*#__PURE__*/React.createElement(Grid, {
15218
15558
  item: true
15219
15559
  }, optionsMenuBtn || /*#__PURE__*/React.createElement(OptionsMenuButton, null)), /*#__PURE__*/React.createElement(Grid, {
@@ -15971,19 +16311,7 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
15971
16311
  React.useEffect(function () {
15972
16312
  var handleKeyDown = function handleKeyDown(event) {
15973
16313
  if (event.key === 'Home' && mapIsActive) {
15974
- if (dataStartTime < dataEndTime) {
15975
- if (dataEndTime < currentTime) {
15976
- onSetNewDate(moment.utc(dataEndTime * 1000).toISOString());
15977
- onSetCenterTime(dataEndTime);
15978
- } else if (dataStartTime > currentTime) {
15979
- onSetNewDate(moment.utc(dataStartTime * 1000).toISOString());
15980
- onSetCenterTime(dataStartTime);
15981
- } else {
15982
- var closestToCurrent = roundWithTimeStep(currentTime, timeStep);
15983
- onSetNewDate(moment.utc(closestToCurrent * 1000).toISOString());
15984
- onSetCenterTime(closestToCurrent);
15985
- }
15986
- }
16314
+ handleSetNowEvent(timeStep, dataStartTime, dataEndTime, currentTime, onSetNewDate, onSetCenterTime);
15987
16315
  }
15988
16316
  };
15989
16317
 
@@ -16015,7 +16343,7 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
16015
16343
  return /*#__PURE__*/React.createElement(Box, {
16016
16344
  "data-testid": "timeSliderLegend",
16017
16345
  sx: {
16018
- height: '50px'
16346
+ height: "".concat(TIME_SLIDER_LEGEND_HEIGHT, "px")
16019
16347
  }
16020
16348
  }, /*#__PURE__*/React.createElement(CanvasComponent, {
16021
16349
  ref: node,
@@ -16040,264 +16368,40 @@ var TimeSliderLegend = function TimeSliderLegend(_ref) {
16040
16368
  }
16041
16369
  }
16042
16370
  },
16043
- onWheel: function onWheel(_ref2) {
16044
- var deltaY = _ref2.deltaY,
16045
- deltaX = _ref2.deltaX,
16046
- canvasWidth = _ref2.canvasWidth,
16047
- mouseX = _ref2.mouseX;
16048
- zoom(deltaY, deltaX, canvasWidth, mouseX);
16049
- },
16050
- onMouseDown: function onMouseDown(x, y, width) {
16051
- setDragged(false);
16052
- setReleased(false);
16053
- var selectedTimeX = timestampToPixel(selectedTime, centerTime, width, secondsPerPx);
16054
- setNewSelectionTimeRequested(Math.abs(x - selectedTimeX) < NEEDLE_HANDLE_WIDTH);
16055
- },
16056
- onMouseUp: function onMouseUp() {
16057
- setReleased(true);
16058
- setNewSelectionTimeRequested(false);
16059
- },
16060
- onCanvasClick: function onCanvasClick(x, y, width) {
16061
- var isCanvasArea = x >= 0 && x < width;
16062
-
16063
- if (isCanvasArea) {
16064
- if (isReleased && !isDragged) {
16065
- setSelectedTime(x, width);
16066
- }
16067
- }
16068
- },
16069
- onRenderCanvas: function onRenderCanvas(ctx, width, height) {
16070
- renderTimeSliderLegend(ctx, theme, width, height, centerTime, secondsPerPx, dataScaleToSecondsPerPx, selectedTime, scale, currentTime, localAnimationStartTime, localAnimationEndTime);
16071
- }
16072
- }));
16073
- };
16074
-
16075
- /* *
16076
- * Licensed under the Apache License, Version 2.0 (the "License");
16077
- * you may not use this file except in compliance with the License.
16078
- * You may obtain a copy of the License at
16079
- *
16080
- * http://www.apache.org/licenses/LICENSE-2.0
16081
- *
16082
- * Unless required by applicable law or agreed to in writing, software
16083
- * distributed under the License is distributed on an "AS IS" BASIS,
16084
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16085
- * See the License for the specific language governing permissions and
16086
- * limitations under the License.
16087
- *
16088
- * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
16089
- * Copyright 2022 - Finnish Meteorological Institute (FMI)
16090
- * */
16091
- var scaleSliderOtherSettings = {
16092
- LEFT_PADDING: '10%'
16093
- };
16094
-
16095
- var thumbComponent = function thumbComponent(props) {
16096
- var children = props.children,
16097
- other = __rest(props, ["children"]);
16098
-
16099
- return /*#__PURE__*/React.createElement(SliderThumb, Object.assign({}, other, {
16100
- "data-testid": "scaleSliderSliderThumb",
16101
- tabIndex: 0
16102
- }), children, /*#__PURE__*/React.createElement(SliderThumb$1, null));
16103
- };
16104
-
16105
- var marks = [{
16106
- text: '5 min scale',
16107
- paddingLeft: '2px',
16108
- value: Scale.Minutes5
16109
- }, {
16110
- text: '1 h scale',
16111
- paddingLeft: '25px',
16112
- value: Scale.Hour
16113
- }, {
16114
- text: '3 h scale',
16115
- paddingLeft: '45px',
16116
- value: Scale.Hours3
16117
- }, {
16118
- text: '6 h scale',
16119
- paddingLeft: '65px',
16120
- value: Scale.Hours6
16121
- }, {
16122
- text: 'day scale',
16123
- paddingLeft: '80px',
16124
- value: Scale.Day
16125
- }, {
16126
- text: 'week scale',
16127
- paddingLeft: '92px',
16128
- value: Scale.Week
16129
- }, {
16130
- text: 'month scale',
16131
- paddingLeft: '107px',
16132
- value: Scale.Month
16133
- }, {
16134
- text: 'year scale',
16135
- paddingLeft: '130px',
16136
- value: Scale.Year
16137
- }, {
16138
- text: 'data scale',
16139
- paddingLeft: '140px',
16140
- value: Scale.DataScale
16141
- }];
16142
-
16143
- var valueLabelFormat = function valueLabelFormat(value) {
16144
- var valueNew = value.toString();
16145
- return valueNew;
16146
- };
16147
-
16148
- var GeoWebScaleSlider = styled(Slider)(function (_ref) {
16149
- var theme = _ref.theme;
16150
- return {
16151
- '&.MuiSlider-root': {
16152
- height: 4,
16153
- width: 167,
16154
- margin: "0 0 18px ".concat(scaleSliderOtherSettings.LEFT_PADDING)
16155
- },
16156
- '& .MuiSlider-thumb': {
16157
- backgroundColor: 'rgba(0,0,0,0)',
16158
- marginTop: 0,
16159
- width: 12,
16160
- height: 12,
16161
- color: theme.palette.geowebColors.timeSlider.timeScalePointer.fill,
16162
- '& svg polygon': {
16163
- filter: theme.palette.geowebColors.timeSlider.timeScaleShadowButtonScale.filter
16164
- },
16165
- '&:before': {
16166
- display: 'none'
16167
- }
16168
- },
16169
- '& .MuiSlider-valueLabel': {
16170
- left: '20px'
16171
- },
16172
- '& .MuiSlider-rail': {
16173
- color: theme.palette.geowebColors.timeSlider.timeScaleHorizontalScale.fill,
16174
- height: 4,
16175
- width: 170,
16176
- borderRadius: 4.5,
16177
- opacity: theme.palette.geowebColors.timeSlider.timeScaleHorizontalScale.opacity
16178
- },
16179
- '& .MuiSlider-mark': {
16180
- backgroundColor: theme.palette.geowebColors.timeSlider.timeScaleTimeIndicators.fill,
16181
- height: 6,
16182
- width: 2,
16183
- marginTop: -9,
16184
- '&.MuiSlider-markActive': {
16185
- backgroundColor: theme.palette.geowebColors.timeSlider.timeScaleTimeIndicatorsActive.fill,
16186
- height: 6,
16187
- width: 2,
16188
- marginTop: -9
16189
- }
16190
- },
16191
- '@media (max-width: 585px)': {
16192
- '&.MuiSlider-root': {
16193
- width: 110
16194
- },
16195
- '& .MuiSlider-rail': {
16196
- width: 110
16197
- }
16198
- },
16199
- '@media (max-width: 395px)': {
16200
- '&.MuiSlider-root': {
16201
- width: 60
16202
- },
16203
- '& .MuiSlider-rail': {
16204
- width: 60
16205
- }
16206
- }
16207
- };
16208
- });
16209
- var RAIL_GUTTER_OFFSET = 0.4;
16210
-
16211
- var TimeSliderScaleSlider = function TimeSliderScaleSlider(_ref2) {
16212
- var layers = _ref2.layers,
16213
- _ref2$timeSliderScale = _ref2.timeSliderScale,
16214
- timeSliderScale = _ref2$timeSliderScale === void 0 ? Scale.Hour : _ref2$timeSliderScale,
16215
- centerTime = _ref2.centerTime,
16216
- secondsPerPx = _ref2.secondsPerPx,
16217
- selectedTime = _ref2.selectedTime,
16218
- onChangeTimeSliderScale = _ref2.onChangeTimeSliderScale;
16219
- var min = 0;
16220
- var max = marks.length - 1;
16221
- var value = marks.findIndex(function (mark) {
16222
- return mark.value === timeSliderScale;
16223
- });
16224
-
16225
- var onChangeSliderValue = function onChangeSliderValue(newSliderValue) {
16226
- var newValue = newSliderValue ? Math.round(newSliderValue) : 0;
16227
- var newScale = marks.find(function (el) {
16228
- return el.value === newValue;
16229
- }).value;
16230
- var scaleToSecPerPx = newScale === Scale.DataScale ? getScaleToSecondsPerPxForDataScale(layers) : scaleToSecondsPerPx[newScale];
16231
- var newCenterTime = getNewCenterOfFixedPointZoom(selectedTime, secondsPerPx, scaleToSecPerPx, centerTime);
16232
- onChangeTimeSliderScale(newScale, newCenterTime, scaleToSecPerPx);
16233
- };
16234
-
16235
- var onChange = function onChange(event, value) {
16236
- if (event.type !== 'keydown') {
16237
- onChangeSliderValue(value);
16238
- }
16239
- };
16240
-
16241
- var onKeyDown = function onKeyDown(event) {
16242
- // disable default Slider behavior
16243
- event.preventDefault();
16244
- event.stopPropagation(); // custom logic
16245
-
16246
- var newValue = getValueFromKeyboardEvent(event, value, min, max, true);
16247
-
16248
- if (newValue !== null) {
16249
- onChangeSliderValue(newValue);
16250
- }
16251
- };
16252
-
16253
- var _marks$find = marks.find(function (mark) {
16254
- return mark.value === value;
16255
- }),
16256
- paddingLeft = _marks$find.paddingLeft,
16257
- text = _marks$find.text;
16258
-
16259
- var scaleTextPadding = {
16260
- paddingLeft: paddingLeft
16261
- };
16262
- return /*#__PURE__*/React.createElement(Box, {
16263
- "data-testid": "scaleSlider",
16264
- sx: {
16265
- backgroundColor: 'geowebColors.background.surface',
16266
- width: '229px',
16267
- height: '40px',
16268
- paddingTop: '4px',
16269
- paddingBottom: '7px',
16270
- boxSizing: 'content-box'
16271
- }
16272
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Box, {
16273
- "data-testid": "scaleSliderText",
16274
- sx: {
16275
- width: '67px',
16276
- height: '15px',
16277
- padding: '0px 10px 0 8px',
16278
- color: 'geowebColors.typographyAndIcons.text',
16279
- font: '12px Roboto'
16280
- },
16281
- style: scaleTextPadding
16282
- }, text)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(GeoWebScaleSlider, {
16283
- "data-testid": "scaleSliderSlider",
16284
- defaultValue: Scale.Hour,
16285
- value: value,
16286
- min: min - RAIL_GUTTER_OFFSET,
16287
- step: 1,
16288
- max: max + RAIL_GUTTER_OFFSET,
16289
- getAriaValueText: valueLabelFormat,
16290
- onChange: onChange,
16291
- onKeyDown: onKeyDown,
16292
- "aria-labelledby": "scale-slider",
16293
- components: {
16294
- Thumb: thumbComponent
16371
+ onWheel: function onWheel(_ref2) {
16372
+ var deltaY = _ref2.deltaY,
16373
+ deltaX = _ref2.deltaX,
16374
+ canvasWidth = _ref2.canvasWidth,
16375
+ mouseX = _ref2.mouseX;
16376
+ zoom(deltaY, deltaX, canvasWidth, mouseX);
16295
16377
  },
16296
- marks: marks,
16297
- track: false
16298
- })));
16378
+ onMouseDown: function onMouseDown(x, y, width) {
16379
+ setDragged(false);
16380
+ setReleased(false);
16381
+ var selectedTimeX = timestampToPixel(selectedTime, centerTime, width, secondsPerPx);
16382
+ setNewSelectionTimeRequested(Math.abs(x - selectedTimeX) < NEEDLE_HANDLE_WIDTH);
16383
+ },
16384
+ onMouseUp: function onMouseUp() {
16385
+ setReleased(true);
16386
+ setNewSelectionTimeRequested(false);
16387
+ },
16388
+ onCanvasClick: function onCanvasClick(x, y, width) {
16389
+ var isCanvasArea = x >= 0 && x < width;
16390
+
16391
+ if (isCanvasArea) {
16392
+ if (isReleased && !isDragged) {
16393
+ setSelectedTime(x, width);
16394
+ }
16395
+ }
16396
+ },
16397
+ onRenderCanvas: function onRenderCanvas(ctx, width, height) {
16398
+ renderTimeSliderLegend(ctx, theme, width, height, centerTime, secondsPerPx, dataScaleToSecondsPerPx, selectedTime, scale, currentTime, localAnimationStartTime, localAnimationEndTime);
16399
+ }
16400
+ }));
16299
16401
  };
16300
16402
 
16403
+ var TIME_SLIDER_LEGEND_HEIGHT = 50;
16404
+
16301
16405
  /* eslint-disable no-param-reassign */
16302
16406
 
16303
16407
  var drawRoundedRectangle = function drawRoundedRectangle(ctx, x, y, width, height, cornerRadius, theme) {
@@ -16545,12 +16649,12 @@ var TimeSliderRail = function TimeSliderRail(_ref) {
16545
16649
 
16546
16650
  var curTime = selectedTime !== undefined ? selectedTime.toISOString() : moment.utc().toISOString();
16547
16651
 
16548
- var _React$useState = React.useState(animationStartTime && moment.utc(animationStartTime).unix()),
16652
+ var _React$useState = React.useState(animationStartTime ? moment.utc(animationStartTime).unix() : undefined),
16549
16653
  _React$useState2 = _slicedToArray(_React$useState, 2),
16550
16654
  localAnimationStartTime = _React$useState2[0],
16551
16655
  setLocalAnimationStartTime = _React$useState2[1];
16552
16656
 
16553
- var _React$useState3 = React.useState(animationEndTime && moment.utc(animationEndTime).unix()),
16657
+ var _React$useState3 = React.useState(animationEndTime ? moment.utc(animationEndTime).unix() : undefined),
16554
16658
  _React$useState4 = _slicedToArray(_React$useState3, 2),
16555
16659
  localAnimationEndTime = _React$useState4[0],
16556
16660
  setLocalAnimationEndTime = _React$useState4[1];
@@ -16693,8 +16797,8 @@ var TimeSliderRail = function TimeSliderRail(_ref) {
16693
16797
  };
16694
16798
 
16695
16799
  React.useEffect(function () {
16696
- setLocalAnimationStartTime(animationStartTime && moment.utc(animationStartTime).unix());
16697
- setLocalAnimationEndTime(animationEndTime && moment.utc(animationEndTime).unix());
16800
+ setLocalAnimationStartTime(animationStartTime ? moment.utc(animationStartTime).unix() : undefined);
16801
+ setLocalAnimationEndTime(animationEndTime ? moment.utc(animationEndTime).unix() : undefined);
16698
16802
  }, [animationStartTime, animationEndTime]);
16699
16803
  var handleKeyDown = React.useCallback(function (event) {
16700
16804
  if (event.ctrlKey && dataStartTime && dataEndTime && mapIsActive) {
@@ -16845,7 +16949,6 @@ var defaultProps = {
16845
16949
  var TimeSlider = function TimeSlider(_ref) {
16846
16950
  var buttons = _ref.buttons,
16847
16951
  rail = _ref.rail,
16848
- scaleSlider = _ref.scaleSlider,
16849
16952
  legend = _ref.legend,
16850
16953
  _ref$mapIsActive = _ref.mapIsActive,
16851
16954
  mapIsActive = _ref$mapIsActive === void 0 ? true : _ref$mapIsActive,
@@ -16856,15 +16959,15 @@ var TimeSlider = function TimeSlider(_ref) {
16856
16959
  useTimeSliderKeyBoardControl(mapIsActive, isVisible, onToggleTimeSlider);
16857
16960
  return isVisible ? /*#__PURE__*/React.createElement(Grid, {
16858
16961
  container: true,
16859
- "data-testid": "timeSlider",
16860
16962
  sx: {
16861
16963
  display: 'grid',
16862
16964
  gridTemplateColumns: 'minmax(100px, 210px) minmax(66%, 1fr)',
16863
16965
  gridTemplateRows: '50px'
16864
- }
16966
+ },
16967
+ "data-testid": "timeSlider"
16865
16968
  }, /*#__PURE__*/React.createElement(Grid, {
16866
16969
  item: true
16867
- }, " ", buttons || /*#__PURE__*/React.createElement(TimeSliderButtons, null), " "), /*#__PURE__*/React.createElement(Grid, {
16970
+ }), /*#__PURE__*/React.createElement(Grid, {
16868
16971
  item: true
16869
16972
  }, rail || /*#__PURE__*/React.createElement(TimeSliderRail, Object.assign({}, defaultProps, {
16870
16973
  selectedTime: defaultProps.selectedTime,
@@ -16873,14 +16976,11 @@ var TimeSlider = function TimeSlider(_ref) {
16873
16976
  item: true,
16874
16977
  sx: {
16875
16978
  height: '50px'
16876
- }
16877
- }, scaleSlider || /*#__PURE__*/React.createElement(TimeSliderScaleSlider, Object.assign({}, defaultProps, {
16878
- selectedTime: defaultProps.selectedTime.unix(),
16879
- timeSliderScale: Scale.Hour,
16880
- onChangeTimeSliderScale: function onChangeTimeSliderScale() {
16881
- return null;
16882
- }
16883
- }))), /*#__PURE__*/React.createElement(Grid, {
16979
+ },
16980
+ container: true,
16981
+ alignItems: "center",
16982
+ justifyContent: "center"
16983
+ }, buttons || /*#__PURE__*/React.createElement(TimeSliderButtons, null)), /*#__PURE__*/React.createElement(Grid, {
16884
16984
  item: true
16885
16985
  }, legend || /*#__PURE__*/React.createElement(TimeSliderLegend, Object.assign({}, defaultProps, {
16886
16986
  selectedTime: defaultProps.selectedTime.unix(),
@@ -17030,6 +17130,122 @@ var TimeStepButtonComponent = function TimeStepButtonComponent(_ref) {
17030
17130
  });
17031
17131
  };
17032
17132
 
17133
+ /* *
17134
+ * Licensed under the Apache License, Version 2.0 (the "License");
17135
+ * you may not use this file except in compliance with the License.
17136
+ * You may obtain a copy of the License at
17137
+ *
17138
+ * http://www.apache.org/licenses/LICENSE-2.0
17139
+ *
17140
+ * Unless required by applicable law or agreed to in writing, software
17141
+ * distributed under the License is distributed on an "AS IS" BASIS,
17142
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17143
+ * See the License for the specific language governing permissions and
17144
+ * limitations under the License.
17145
+ *
17146
+ * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
17147
+ * Copyright 2020 - Finnish Meteorological Institute (FMI)
17148
+ * */
17149
+ var TimeScaleButtonConnect = function TimeScaleButtonConnect(_ref) {
17150
+ var mapId = _ref.mapId;
17151
+ var layers = useSelector(function (store) {
17152
+ return getMapLayers(store, mapId);
17153
+ });
17154
+ var timeSliderScale = useSelector(function (store) {
17155
+ return getMapTimeSliderScale(store, mapId);
17156
+ });
17157
+ var centerTime = useSelector(function (store) {
17158
+ return getMapTimeSliderCenterTime(store, mapId);
17159
+ });
17160
+ var secondsPerPx = useSelector(function (store) {
17161
+ return getMapTimeSliderSecondsPerPx(store, mapId);
17162
+ });
17163
+ var dimensions = useSelector(function (store) {
17164
+ return getMapDimensions(store, mapId);
17165
+ });
17166
+ var dispatch = useDispatch();
17167
+
17168
+ var onSetTimeSliderScale = function onSetTimeSliderScale(scale, newCenterTime, scaleToSecPerPx) {
17169
+ if (scale === Scale.DataScale) {
17170
+ dispatch(mapActions$1.setTimeSliderDataScaleToSecondsPerPx({
17171
+ mapId: mapId,
17172
+ timeSliderDataScaleToSecondsPerPx: scaleToSecPerPx
17173
+ }));
17174
+ }
17175
+
17176
+ dispatch(mapActions$1.setTimeSliderScale({
17177
+ mapId: mapId,
17178
+ timeSliderScale: scale
17179
+ }));
17180
+ dispatch(mapActions$1.setTimeSliderCenterTime({
17181
+ mapId: mapId,
17182
+ timeSliderCenterTime: newCenterTime
17183
+ }));
17184
+ };
17185
+
17186
+ var _getTimeBounds = getTimeBounds(dimensions),
17187
+ selectedTime = _getTimeBounds.selectedTime;
17188
+
17189
+ return /*#__PURE__*/React.createElement(TimeScaleButton, {
17190
+ layers: layers,
17191
+ timeSliderScale: timeSliderScale,
17192
+ onChangeTimeSliderScale: onSetTimeSliderScale,
17193
+ secondsPerPx: secondsPerPx,
17194
+ centerTime: centerTime,
17195
+ selectedTime: selectedTime
17196
+ });
17197
+ };
17198
+
17199
+ var NowButtonConnect = function NowButtonConnect(_ref) {
17200
+ var sourceId = _ref.sourceId,
17201
+ mapId = _ref.mapId,
17202
+ isDisabled = _ref.isDisabled;
17203
+ var dispatch = useDispatch();
17204
+ var currentTime = moment.utc().unix();
17205
+ var timeStep = useSelector(function (store) {
17206
+ return getMapTimeStep(store, mapId);
17207
+ });
17208
+
17209
+ var _getDataLimitsFromLay = getDataLimitsFromLayers(useSelector(function (store) {
17210
+ return getMapLayers(store, mapId);
17211
+ })),
17212
+ _getDataLimitsFromLay2 = _slicedToArray(_getDataLimitsFromLay, 2),
17213
+ dataStartTime = _getDataLimitsFromLay2[0],
17214
+ dataEndTime = _getDataLimitsFromLay2[1];
17215
+
17216
+ var isAnimating$1 = useSelector(function (store) {
17217
+ return isAnimating(store, mapId);
17218
+ });
17219
+
17220
+ var onSetNewDate = function onSetNewDate(newDate) {
17221
+ if (isAnimating$1) {
17222
+ dispatch(mapActions$1.mapStopAnimation({
17223
+ mapId: mapId
17224
+ }));
17225
+ }
17226
+
17227
+ dispatch(genericActions.setTime({
17228
+ sourceId: sourceId,
17229
+ origin: 'NowButtonConnect, 140',
17230
+ value: handleMomentISOString(newDate)
17231
+ }));
17232
+ };
17233
+
17234
+ var onSetCenterTime = function onSetCenterTime(newTime) {
17235
+ dispatch(mapActions$1.setTimeSliderCenterTime({
17236
+ mapId: mapId,
17237
+ timeSliderCenterTime: newTime
17238
+ }));
17239
+ };
17240
+
17241
+ return /*#__PURE__*/React.createElement(NowButton, {
17242
+ disabled: isDisabled,
17243
+ onSetNow: function onSetNow() {
17244
+ return handleSetNowEvent(timeStep, dataStartTime, dataEndTime, currentTime, onSetNewDate, onSetCenterTime);
17245
+ }
17246
+ });
17247
+ };
17248
+
17033
17249
  /* *
17034
17250
  * Licensed under the Apache License, Version 2.0 (the "License");
17035
17251
  * you may not use this file except in compliance with the License.
@@ -17056,8 +17272,13 @@ var TimeStepButtonComponent = function TimeStepButtonComponent(_ref) {
17056
17272
  */
17057
17273
 
17058
17274
  var OptionsMenuButtonConnect = function OptionsMenuButtonConnect(_ref) {
17059
- var mapId = _ref.mapId;
17275
+ var sourceId = _ref.sourceId,
17276
+ mapId = _ref.mapId;
17060
17277
  return /*#__PURE__*/React.createElement(OptionsMenuButton, {
17278
+ nowBtn: /*#__PURE__*/React.createElement(NowButtonConnect, {
17279
+ mapId: mapId,
17280
+ sourceId: sourceId
17281
+ }),
17061
17282
  autoUpdateBtn: /*#__PURE__*/React.createElement(AutoUpdateButtonConnect, {
17062
17283
  mapId: mapId
17063
17284
  }),
@@ -17066,6 +17287,9 @@ var OptionsMenuButtonConnect = function OptionsMenuButtonConnect(_ref) {
17066
17287
  }),
17067
17288
  timeStepBtn: /*#__PURE__*/React.createElement(TimeStepButtonComponent, {
17068
17289
  mapId: mapId
17290
+ }),
17291
+ timeScaleBtn: /*#__PURE__*/React.createElement(TimeScaleButtonConnect, {
17292
+ mapId: mapId
17069
17293
  })
17070
17294
  });
17071
17295
  };
@@ -17096,10 +17320,12 @@ var OptionsMenuButtonConnect = function OptionsMenuButtonConnect(_ref) {
17096
17320
  */
17097
17321
 
17098
17322
  var TimeSliderButtonsConnect = function TimeSliderButtonsConnect(_ref) {
17099
- var mapId = _ref.mapId;
17323
+ var sourceId = _ref.sourceId,
17324
+ mapId = _ref.mapId;
17100
17325
  return /*#__PURE__*/React.createElement(TimeSliderButtons, {
17101
17326
  optionsMenuBtn: /*#__PURE__*/React.createElement(OptionsMenuButtonConnect, {
17102
- mapId: mapId
17327
+ mapId: mapId,
17328
+ sourceId: sourceId
17103
17329
  }),
17104
17330
  playBtn: /*#__PURE__*/React.createElement(PlayButtonConnect, {
17105
17331
  mapId: mapId
@@ -17351,89 +17577,6 @@ var TimeSliderRailConnectComponent = function TimeSliderRailConnectComponent(_re
17351
17577
 
17352
17578
  var TimeSliderRailConnect = connectRedux$1(TimeSliderRailConnectComponent);
17353
17579
 
17354
- /* *
17355
- * Licensed under the Apache License, Version 2.0 (the "License");
17356
- * you may not use this file except in compliance with the License.
17357
- * You may obtain a copy of the License at
17358
- *
17359
- * http://www.apache.org/licenses/LICENSE-2.0
17360
- *
17361
- * Unless required by applicable law or agreed to in writing, software
17362
- * distributed under the License is distributed on an "AS IS" BASIS,
17363
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17364
- * See the License for the specific language governing permissions and
17365
- * limitations under the License.
17366
- *
17367
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
17368
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
17369
- * */
17370
- var connectReduxTimeSliderScaleSlider = connect(function (store, props) {
17371
- return {
17372
- layers: getMapLayers(store, props.mapId),
17373
- timeSliderScale: getMapTimeSliderScale(store, props.mapId),
17374
- centerTime: getMapTimeSliderCenterTime(store, props.mapId),
17375
- secondsPerPx: getMapTimeSliderSecondsPerPx(store, props.mapId),
17376
- dimensions: getMapDimensions(store, props.mapId)
17377
- };
17378
- }, {
17379
- mapSetTimeSliderScale: mapActions$1.setTimeSliderScale,
17380
- mapSetTimeSliderDataScaleToSecondsPerPx: mapActions$1.setTimeSliderDataScaleToSecondsPerPx,
17381
- mapSetTimeSliderCenterTime: mapActions$1.setTimeSliderCenterTime
17382
- });
17383
-
17384
- var TimeSliderScaleSliderComponent = function TimeSliderScaleSliderComponent(_ref) {
17385
- var timeSliderScale = _ref.timeSliderScale,
17386
- mapId = _ref.mapId,
17387
- layers = _ref.layers,
17388
- centerTime = _ref.centerTime,
17389
- secondsPerPx = _ref.secondsPerPx,
17390
- dimensions = _ref.dimensions,
17391
- mapSetTimeSliderScale = _ref.mapSetTimeSliderScale,
17392
- mapSetTimeSliderDataScaleToSecondsPerPx = _ref.mapSetTimeSliderDataScaleToSecondsPerPx,
17393
- mapSetTimeSliderCenterTime = _ref.mapSetTimeSliderCenterTime;
17394
-
17395
- var onSetTimeSliderScale = function onSetTimeSliderScale(scale, newCenterTime, scaleToSecPerPx) {
17396
- if (scale === Scale.DataScale) {
17397
- mapSetTimeSliderDataScaleToSecondsPerPx({
17398
- mapId: mapId,
17399
- timeSliderDataScaleToSecondsPerPx: scaleToSecPerPx
17400
- });
17401
- }
17402
-
17403
- mapSetTimeSliderScale({
17404
- mapId: mapId,
17405
- timeSliderScale: scale
17406
- });
17407
- mapSetTimeSliderCenterTime({
17408
- mapId: mapId,
17409
- timeSliderCenterTime: newCenterTime
17410
- });
17411
- };
17412
-
17413
- var _getTimeBounds = getTimeBounds(dimensions),
17414
- selectedTime = _getTimeBounds.selectedTime;
17415
-
17416
- return /*#__PURE__*/React.createElement(TimeSliderScaleSlider, {
17417
- layers: layers,
17418
- timeSliderScale: timeSliderScale,
17419
- onChangeTimeSliderScale: onSetTimeSliderScale,
17420
- secondsPerPx: secondsPerPx,
17421
- centerTime: centerTime,
17422
- selectedTime: selectedTime
17423
- });
17424
- };
17425
- /**
17426
- * TimeSliderScaleSlider component connected to the store displaying a scale slider of the time slider
17427
- *
17428
- * Expects the following props:
17429
- * @param {string} mapId mapId: string - Id of the map
17430
- * @example
17431
- * ``` <TimeSliderScaleSliderConnect mapId={mapId} />```
17432
- */
17433
-
17434
-
17435
- var TimeSliderScaleSliderConnect = connectReduxTimeSliderScaleSlider(TimeSliderScaleSliderComponent);
17436
-
17437
17580
  /* *
17438
17581
  * Licensed under the Apache License, Version 2.0 (the "License");
17439
17582
  * you may not use this file except in compliance with the License.
@@ -17501,15 +17644,13 @@ var ConnectedTimeSlider = function ConnectedTimeSlider(_ref) {
17501
17644
 
17502
17645
  return /*#__PURE__*/React.createElement(TimeSlider, {
17503
17646
  buttons: /*#__PURE__*/React.createElement(TimeSliderButtonsConnect, {
17504
- mapId: mapId
17647
+ mapId: mapId,
17648
+ sourceId: sourceId
17505
17649
  }),
17506
17650
  rail: /*#__PURE__*/React.createElement(TimeSliderRailConnect, {
17507
17651
  mapId: mapId,
17508
17652
  sourceId: sourceId
17509
17653
  }),
17510
- scaleSlider: /*#__PURE__*/React.createElement(TimeSliderScaleSliderConnect, {
17511
- mapId: mapId
17512
- }),
17513
17654
  legend: /*#__PURE__*/React.createElement(TimeSliderLegendConnect$1, {
17514
17655
  mapId: mapId,
17515
17656
  sourceId: sourceId
@@ -18000,7 +18141,7 @@ var setServiceMetadata = function setServiceMetadata(wmLayer, mapId, webMapJSIns
18000
18141
  id: service.id,
18001
18142
  serviceUrl: wmLayer.service,
18002
18143
  layers: layers,
18003
- isUserAddedService: false
18144
+ scope: 'system'
18004
18145
  },
18005
18146
  layerStyle: {
18006
18147
  origin: origin,
@@ -18706,7 +18847,7 @@ var AdagucMapDraw = /*#__PURE__*/function (_React$PureComponent) {
18706
18847
  }
18707
18848
 
18708
18849
  if (!featureCoords) {
18709
- return;
18850
+ return undefined;
18710
18851
  }
18711
18852
 
18712
18853
  var vertexSelected = mouseDown === true && this.mouseIsOverVertexNr !== VERTEX.NONE;
@@ -18730,6 +18871,8 @@ var AdagucMapDraw = /*#__PURE__*/function (_React$PureComponent) {
18730
18871
 
18731
18872
  return false;
18732
18873
  }
18874
+
18875
+ return undefined;
18733
18876
  }
18734
18877
  }, {
18735
18878
  key: "hoverVertex",
@@ -18848,7 +18991,7 @@ var AdagucMapDraw = /*#__PURE__*/function (_React$PureComponent) {
18848
18991
  isInEditMode = _this$props2.isInEditMode,
18849
18992
  featureNrToEdit = _this$props2.featureNrToEdit,
18850
18993
  onHoverFeature = _this$props2.onHoverFeature;
18851
- if (event && event.rightButton === true) return;
18994
+ if (event && event.rightButton === true) return undefined;
18852
18995
  /* adagucMouseMove is an event callback function which is triggered when the mouse moves over the map
18853
18996
  This event is only triggered if the map is in hover state.
18854
18997
  E.g. when the map is dragging/panning, this event is not triggerd
@@ -18889,11 +19032,11 @@ var AdagucMapDraw = /*#__PURE__*/function (_React$PureComponent) {
18889
19032
  }
18890
19033
 
18891
19034
  if (isInEditMode === false) {
18892
- return;
19035
+ return undefined;
18893
19036
  }
18894
19037
 
18895
19038
  var feature = this.geojson.features[featureNrToEdit];
18896
- if (!feature) return;
19039
+ if (!feature) return undefined;
18897
19040
  var webmapjs = this.props.webmapjs;
18898
19041
  this.mouseGeoCoord = webmapjs.getLatLongFromPixelCoord({
18899
19042
  x: mouseX,
@@ -18959,6 +19102,8 @@ var AdagucMapDraw = /*#__PURE__*/function (_React$PureComponent) {
18959
19102
  /* False means that this component will take over entire controll.
18960
19103
  True means that it is still possible to pan and drag the map while editing */
18961
19104
  }
19105
+
19106
+ return undefined;
18962
19107
  }
18963
19108
  /* Returns true if double click is detected */
18964
19109
 
@@ -19266,6 +19411,8 @@ var AdagucMapDraw = /*#__PURE__*/function (_React$PureComponent) {
19266
19411
  return false;
19267
19412
  }
19268
19413
  }
19414
+
19415
+ return undefined;
19269
19416
  }
19270
19417
  }, {
19271
19418
  key: "addPointToLineStringFeature",
@@ -20057,7 +20204,7 @@ var AdagucMapDraw = /*#__PURE__*/function (_React$PureComponent) {
20057
20204
  /* After the image is loaded the canvas will be redrawn and drawIcon will be triggered again
20058
20205
  via the beforecanvasdisplay listener. */
20059
20206
 
20060
- return;
20207
+ return undefined;
20061
20208
  }
20062
20209
 
20063
20210
  if (image.isLoaded()) {
@@ -20070,6 +20217,8 @@ var AdagucMapDraw = /*#__PURE__*/function (_React$PureComponent) {
20070
20217
  ctx.strokeRect(parseInt(_coord.x, 10) - imageWidth / 2, parseInt(_coord.y, 10) - imageHeight / 2, imageWidth, imageHeight);
20071
20218
  }
20072
20219
  }
20220
+
20221
+ return undefined;
20073
20222
  }
20074
20223
  }, {
20075
20224
  key: "drawMarker",
@@ -21322,12 +21471,8 @@ ReactMapView.defaultProps = {
21322
21471
  shouldAutoFetch: true,
21323
21472
  displayMapPin: false,
21324
21473
  disableMapPin: false,
21325
- onMount: function onMount() {
21326
- return null;
21327
- },
21328
- onUnMount: function onUnMount() {
21329
- return null;
21330
- },
21474
+ onMount: function onMount() {},
21475
+ onUnMount: function onUnMount() {},
21331
21476
  onMapChangeDimension: function onMapChangeDimension() {
21332
21477
  /* nothing */
21333
21478
  },
@@ -21436,7 +21581,7 @@ var MapView = function MapView(_a) {
21436
21581
  }
21437
21582
  }, /*#__PURE__*/React.createElement(ZoomControls, {
21438
21583
  onZoomIn: function onZoomIn() {
21439
- return adagucRef.current.zoomIn();
21584
+ return adagucRef.current.zoomIn(undefined);
21440
21585
  },
21441
21586
  onZoomOut: function onZoomOut() {
21442
21587
  return adagucRef.current.zoomOut();
@@ -21494,10 +21639,10 @@ var useTouchZoomPan = function useTouchZoomPan(mapIsActive, mapId) {
21494
21639
  return (touches === null || touches === void 0 ? void 0 : touches.length) === 2;
21495
21640
  };
21496
21641
 
21497
- var isValidMap = React.useCallback(function (map, event) {
21642
+ var isCanvasElement = React.useCallback(function (event) {
21498
21643
  var target = event.target;
21499
- return map && target.tagName !== 'INPUT' && mapIsActive;
21500
- }, [mapIsActive]);
21644
+ return target.tagName === 'CANVAS';
21645
+ }, []);
21501
21646
 
21502
21647
  var distance = function distance(x1, y1, x2, y2) {
21503
21648
  var dx = x1 - x2;
@@ -21505,9 +21650,32 @@ var useTouchZoomPan = function useTouchZoomPan(mapIsActive, mapId) {
21505
21650
  return Math.sqrt(dx * dx + dy * dy);
21506
21651
  };
21507
21652
 
21653
+ var isMatchingWebMapNumbers = function isMatchingWebMapNumbers(firstStr, secondStr) {
21654
+ // Returns true if the same web map (id) number were encountered in both given strings, false otherwise.
21655
+ var webMapNumberBaseFormat = 'WebMapJSMapNo_';
21656
+
21657
+ if (!firstStr.includes(webMapNumberBaseFormat) || !secondStr.includes(webMapNumberBaseFormat)) {
21658
+ return false;
21659
+ }
21660
+
21661
+ var numberMatcher = /\d+/;
21662
+ var firstNumber = firstStr.match(numberMatcher)[0];
21663
+ var secondNumber = secondStr.match(numberMatcher)[0];
21664
+ return Boolean(firstNumber && secondNumber && firstNumber === secondNumber);
21665
+ };
21666
+
21667
+ var isTouchInsideTargetElement = function isTouchInsideTargetElement(elem, touchX, touchY) {
21668
+ var _elem$getBoundingClie = elem.getBoundingClientRect(),
21669
+ left = _elem$getBoundingClie.left,
21670
+ top = _elem$getBoundingClie.top,
21671
+ width = _elem$getBoundingClie.width,
21672
+ height = _elem$getBoundingClie.height;
21673
+
21674
+ var leftMarginWidth = 0.02 * document.body.getBoundingClientRect().width;
21675
+ return touchY > window.scrollY + top && touchY < window.scrollY + top + height - TIME_SLIDER_LEGEND_HEIGHT && touchX > window.scrollX + left + leftMarginWidth && touchX < window.scrollX + left + width;
21676
+ };
21677
+
21508
21678
  var handleStart = React.useCallback(function (event) {
21509
- var map = getWMJSMapById(mapId);
21510
- if (!isValidMap(map, event)) return;
21511
21679
  var targetTouches = event.targetTouches;
21512
21680
  var firstTouch = targetTouches === null || targetTouches === void 0 ? void 0 : targetTouches.item(0);
21513
21681
  setFirstTouchX(firstTouch === null || firstTouch === void 0 ? void 0 : firstTouch.clientX);
@@ -21518,10 +21686,31 @@ var useTouchZoomPan = function useTouchZoomPan(mapIsActive, mapId) {
21518
21686
  setSecondTouchX(secondTouch === null || secondTouch === void 0 ? void 0 : secondTouch.clientX);
21519
21687
  setSecondTouchY(secondTouch === null || secondTouch === void 0 ? void 0 : secondTouch.clientY);
21520
21688
  }
21521
- }, [isValidMap, mapId]);
21689
+ }, []);
21522
21690
  var handleMove = React.useCallback(function (event) {
21523
21691
  var map = getWMJSMapById(mapId);
21524
- if (!isValidMap(map, event)) return;
21692
+ var targetElem = event.target;
21693
+
21694
+ if (!isCanvasElement(event)) {
21695
+ // Elements other than canvas elements are not allowed to be zoomed/panned
21696
+ return;
21697
+ }
21698
+
21699
+ var targetMapId = map.getId();
21700
+ var targetElemId = targetElem.parentElement.id;
21701
+
21702
+ if (!isMatchingWebMapNumbers(targetMapId, targetElemId)) {
21703
+ // Current map (given by map id) was not coupled to the canvas element user touched.
21704
+ // This web map id number comparison is of importance when dealing with multi-window presentations.
21705
+ return;
21706
+ }
21707
+
21708
+ if (!isTouchInsideTargetElement(targetElem, firstTouchX, firstTouchY)) {
21709
+ // A user touch outside the current canvas element will be rejected
21710
+ return;
21711
+ } // Start zooming/panning by touch
21712
+
21713
+
21525
21714
  event.preventDefault();
21526
21715
  var targetTouches = event.targetTouches;
21527
21716
  var firstTouch = targetTouches === null || targetTouches === void 0 ? void 0 : targetTouches.item(0);
@@ -21564,7 +21753,7 @@ var useTouchZoomPan = function useTouchZoomPan(mapIsActive, mapId) {
21564
21753
  setPrevDist(_dist);
21565
21754
  }
21566
21755
  }
21567
- }, [firstTouchX, firstTouchY, isValidMap, mapId, prevDist, secondTouchX, secondTouchY]);
21756
+ }, [mapId, isCanvasElement, firstTouchX, firstTouchY, secondTouchX, secondTouchY, prevDist]);
21568
21757
  var handleEnd = React.useCallback(function () {}, []);
21569
21758
  React.useEffect(function () {
21570
21759
  document.addEventListener('touchstart', handleStart, {
@@ -21813,7 +22002,7 @@ var MapViewConnect = function MapViewConnect(_a) {
21813
22002
  },
21814
22003
  srs: srs,
21815
22004
  bbox: bbox,
21816
- mapPinLocation: displayMapPin && mapPinLocation,
22005
+ mapPinLocation: displayMapPin ? mapPinLocation : undefined,
21817
22006
  dimensions: mapDimensions,
21818
22007
  activeLayerId: activeLayerId,
21819
22008
  animationDelay: animationDelay,
@@ -22015,7 +22204,7 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_a) {
22015
22204
 
22016
22205
  if (shouldShowLayerManager !== undefined) {
22017
22206
  dispatch(uiActions.setActiveMapIdForDialog({
22018
- type: 'layerManager',
22207
+ type: DialogTypes.LayerManager,
22019
22208
  mapId: mapId,
22020
22209
  setOpen: shouldShowLayerManager,
22021
22210
  source: 'app'
@@ -22755,7 +22944,7 @@ var SyncGroupViewerConnect = function SyncGroupViewerConnect() {
22755
22944
  dispatch(actions.syncGroupRemoveTarget(payload));
22756
22945
  }, [dispatch]);
22757
22946
 
22758
- var _useSetupDialog = useSetupDialog('syncGroups'),
22947
+ var _useSetupDialog = useSetupDialog(DialogTypes.SyncGroups),
22759
22948
  dialogOrder = _useSetupDialog.dialogOrder,
22760
22949
  isDialogOpen = _useSetupDialog.isDialogOpen,
22761
22950
  onCloseDialog = _useSetupDialog.onCloseDialog,