@opengeoweb/core 2.14.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/index.esm.js +570 -411
  2. package/index.umd.js +596 -411
  3. package/lib/components/ConfigurableMap/ConfigurableMapConnect.d.ts +1 -0
  4. package/lib/components/LayerManager/BaseLayerRow/BaseLayers/BaseLayersConnect.d.ts +1 -0
  5. package/lib/components/LayerManager/LayerSelect/LayerSelectUtils.d.ts +3 -3
  6. package/lib/components/LayerManager/LayerSelect/ServiceOptionsDialog/ServiceOptionsDialog.d.ts +0 -2
  7. package/lib/components/LayerManager/LayerSelect/ServicePopup/ServicePopup.d.ts +3 -1
  8. package/lib/components/LayerManager/LayerSelect/ServicePopup/ServicePopupConnect.d.ts +1 -0
  9. package/lib/components/Legend/LegendConnect.d.ts +1 -1
  10. package/lib/components/MapView/MapViewConnect.MapPin.stories.d.ts +4 -0
  11. package/lib/components/MapView/MapViewConnect.stories.d.ts +0 -1
  12. package/lib/components/MapWarning/MapWarningProperties.d.ts +16 -1
  13. package/lib/components/ReactMapView/ReactMapView.d.ts +1 -0
  14. package/lib/components/Snackbar/SnackbarWrapper.d.ts +9 -0
  15. package/lib/components/{CustomSwitch/CustomSwitch.spec.d.ts → Snackbar/SnackbarWrapper.spec.d.ts} +0 -0
  16. package/lib/components/Snackbar/SnackbarWrapper.stories.d.ts +7 -0
  17. package/lib/components/Snackbar/SnackbarWrapperConnect.d.ts +3 -0
  18. package/lib/components/Snackbar/SnackbarWrapperConnect.spec.d.ts +1 -0
  19. package/lib/components/TimeSlider/TimeSliderButtons/AutoUpdateButton/AutoUpdateButton.d.ts +2 -0
  20. package/lib/components/TimeSlider/TimeSliderButtons/SpeedButton/SpeedButton.d.ts +1 -0
  21. package/lib/components/TimeSlider/TimeSliderButtons/TimeStepButton/TimeStepButton.d.ts +1 -0
  22. package/lib/components/WMSLoader/services.d.ts +1 -0
  23. package/lib/index.d.ts +1 -0
  24. package/lib/store/coreModuleConfig.d.ts +1 -1
  25. package/lib/store/index.d.ts +1 -0
  26. package/lib/store/layerSelect/types.d.ts +2 -0
  27. package/lib/store/mapStore/layers/reducer.d.ts +3 -1
  28. package/lib/store/mapStore/layers/types.d.ts +1 -0
  29. package/lib/store/mapStore/map/selectors.d.ts +1 -1
  30. package/lib/store/mapStore/map/types.d.ts +1 -0
  31. package/lib/store/mapStore/map/utils.d.ts +2 -1
  32. package/lib/store/mapStore/service/selectors.d.ts +2 -0
  33. package/lib/store/mapStore/service/types.d.ts +1 -0
  34. package/lib/store/snackbar/config.d.ts +4 -0
  35. package/lib/store/snackbar/index.d.ts +2 -0
  36. package/lib/store/snackbar/reducer.d.ts +11 -0
  37. package/lib/store/snackbar/reducer.spec.d.ts +1 -0
  38. package/lib/store/snackbar/sagas.d.ts +5 -0
  39. package/lib/store/snackbar/sagas.spec.d.ts +1 -0
  40. package/lib/store/snackbar/selectors.d.ts +10 -0
  41. package/lib/store/snackbar/selectors.spec.d.ts +1 -0
  42. package/lib/store/snackbar/types.d.ts +17 -0
  43. package/lib/utils/jsonPresetFilter.d.ts +11 -12
  44. package/lib/utils/types.d.ts +2 -1
  45. package/package.json +8 -7
  46. package/lib/components/CustomSwitch/CustomSwitch.d.ts +0 -3
  47. package/lib/components/CustomSwitch/CustomSwitch.stories.d.ts +0 -7
  48. package/lib/components/CustomSwitch/index.d.ts +0 -1
  49. package/lib/components/MapView/MapViewConnect.DisableMapPin.stories.d.ts +0 -5
package/index.esm.js CHANGED
@@ -1,18 +1,19 @@
1
- import { createAction, createSlice, createSelector } from '@reduxjs/toolkit';
1
+ import { createAction, createSlice, createSelector, createEntityAdapter } from '@reduxjs/toolkit';
2
2
  import produce$1, { current, produce } from 'immer';
3
3
  import moment from 'moment';
4
4
  import * as React from 'react';
5
5
  import React__default, { Component, useRef, useState, useEffect } from 'react';
6
6
  import _, { isEqual, debounce, throttle, range } from 'lodash';
7
- import { takeLatest, put, select, call, all, takeEvery } from 'redux-saga/effects';
7
+ import { takeLatest, put, select, call, all, takeEvery, delay } from 'redux-saga/effects';
8
8
  import { connect, useDispatch, useSelector, Provider } from 'react-redux';
9
9
  import { Tooltip, Paper, Typography, Grid, InputLabel, IconButton, Box, CircularProgress, List, ListSubheader, ListItem, ListItemText, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, DialogActions, Button, MenuItem, FormControl, LinearProgress, InputAdornment, ListItemSecondaryAction, ListItemIcon, Checkbox, Switch, Slider, FormControlLabel, Popover, useMediaQuery, useTheme, SliderThumb } from '@mui/material';
10
- import { ToolButton, ToolContainerDraggable, TooltipSelect, AlertIcon, sliderStyles, tooltipContainerStyles, CustomSlider, ToggleMenu, ManagerButton, EnableButton, AlertBanner, ManagerDeleteButton, CustomToggleButton, useIsMounted } from '@opengeoweb/shared';
10
+ import { ToolButton, ToolContainerDraggable, TooltipSelect, AlertIcon, tooltipContainerStyles, sliderHeaderStyle, CustomSlider, ToggleMenu, ManagerButton, EnableButton, AlertBanner, ManagerDeleteButton, CustomToggleButton, useIsMounted } from '@opengeoweb/shared';
11
11
  import { Pause, Play, Cached, Add, Copy, Flag, DragHandle as DragHandle$1, Filter, Close, Search, Clear, ChevronLeft, ChevronRight, Edit, Delete, Home, Minus, Layers, Equalizer, Sort, Link, LinkOff, AutoUpdateActive, AutoUpdateInActive, TextIcon, FastForward, Options, SliderThumb as SliderThumb$1, List as List$1, ThemeWrapper, lightTheme } from '@opengeoweb/theme';
12
12
  import makeStyles from '@mui/styles/makeStyles';
13
13
  import { legendImageStore, WMImageEventType, getLegendGraphicURLForLayer, WMGetServiceFromStore, LayerType as LayerType$1, getMapImageStore, WMBBOX, debug, DebugType, WMJSMap, WMLayer } from '@opengeoweb/webmap';
14
14
  import { Sortable, ReactSortable } from 'react-sortablejs';
15
15
  import createStyles from '@mui/styles/createStyles';
16
+ import { FixedSizeList } from 'react-window';
16
17
  import withStyles from '@mui/styles/withStyles';
17
18
  import { debounce as debounce$1 } from 'throttle-debounce';
18
19
  import cloneDeep from 'lodash.clonedeep';
@@ -971,6 +972,8 @@ var createMap = function createMap(_ref) {
971
972
  activeMapPresetId = _ref$activeMapPresetI === void 0 ? null : _ref$activeMapPresetI,
972
973
  _ref$displayMapPin = _ref.displayMapPin,
973
974
  displayMapPin = _ref$displayMapPin === void 0 ? false : _ref$displayMapPin,
975
+ _ref$disableMapPin = _ref.disableMapPin,
976
+ disableMapPin = _ref$disableMapPin === void 0 ? false : _ref$disableMapPin,
974
977
  _ref$shouldShowZoomCo = _ref.shouldShowZoomControls,
975
978
  shouldShowZoomControls = _ref$shouldShowZoomCo === void 0 ? true : _ref$shouldShowZoomCo;
976
979
  return {
@@ -998,6 +1001,7 @@ var createMap = function createMap(_ref) {
998
1001
  isTimeSliderVisible: isTimeSliderVisible,
999
1002
  activeMapPresetId: activeMapPresetId,
1000
1003
  displayMapPin: displayMapPin,
1004
+ disableMapPin: disableMapPin,
1001
1005
  shouldShowZoomControls: shouldShowZoomControls
1002
1006
  };
1003
1007
  };
@@ -1436,7 +1440,7 @@ var createLayer = function createLayer(_a) {
1436
1440
  status: status
1437
1441
  });
1438
1442
  };
1439
- var initialState$5 = {
1443
+ var initialState$6 = {
1440
1444
  byId: {},
1441
1445
  allIds: [],
1442
1446
  availableBaseLayers: {
@@ -1444,8 +1448,8 @@ var initialState$5 = {
1444
1448
  allIds: []
1445
1449
  }
1446
1450
  };
1447
- var slice$5 = createSlice({
1448
- initialState: initialState$5,
1451
+ var slice$6 = createSlice({
1452
+ initialState: initialState$6,
1449
1453
  name: 'layerReducer',
1450
1454
  reducers: {
1451
1455
  addLayer: function addLayer(draft, action) {
@@ -1662,15 +1666,26 @@ var slice$5 = createSlice({
1662
1666
  draft.availableBaseLayers.allIds.push(layer.id);
1663
1667
  });
1664
1668
  },
1669
+ setAvailableBaseLayers: function setAvailableBaseLayers(draft, action) {
1670
+ var layers = action.payload.layers;
1671
+ draft.availableBaseLayers.byId = {};
1672
+ draft.availableBaseLayers.allIds = []; // add new available baselayers
1673
+
1674
+ layers.forEach(function (layer) {
1675
+ if (layer.layerType !== LayerType.baseLayer || !layer.mapId) return;
1676
+ draft.availableBaseLayers.byId[layer.id] = createLayer(Object.assign({}, layer));
1677
+ draft.availableBaseLayers.allIds.push(layer.id);
1678
+ });
1679
+ },
1665
1680
  onUpdateLayerInformation: function onUpdateLayerInformation(draft, action) {
1666
1681
  var _action$payload11 = action.payload,
1667
1682
  layerStyle = _action$payload11.layerStyle,
1668
1683
  layerDimensions = _action$payload11.layerDimensions;
1669
1684
  var layerStyleAction = layerActions.layerChangeStyle(layerStyle);
1670
1685
  var state = current(draft);
1671
- var intermediateState = layerStyle === null ? state : reducer$5(state, layerStyleAction);
1686
+ var intermediateState = layerStyle === null ? state : reducer$6(state, layerStyleAction);
1672
1687
  var dimensionsAction = layerActions.layerSetDimensions(layerDimensions);
1673
- var newState = layerDimensions === null ? intermediateState : reducer$5(intermediateState, dimensionsAction);
1688
+ var newState = layerDimensions === null ? intermediateState : reducer$6(intermediateState, dimensionsAction);
1674
1689
  return newState;
1675
1690
  }
1676
1691
  },
@@ -1715,7 +1730,7 @@ var slice$5 = createSlice({
1715
1730
  };
1716
1731
  /* Handle the Layer action with the same logic, using the same reducer */
1717
1732
 
1718
- return reducer$5(prevState, action);
1733
+ return reducer$6(prevState, action);
1719
1734
  }, state);
1720
1735
  }).addCase(setMapPreset, function (draft, action) {
1721
1736
  var mapId = action.payload.mapId;
@@ -1735,8 +1750,8 @@ var slice$5 = createSlice({
1735
1750
  });
1736
1751
  }
1737
1752
  });
1738
- var reducer$5 = slice$5.reducer;
1739
- var layerActions = slice$5.actions;
1753
+ var reducer$6 = slice$6.reducer;
1754
+ var layerActions = slice$6.actions;
1740
1755
 
1741
1756
  /* *
1742
1757
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1754,12 +1769,12 @@ var layerActions = slice$5.actions;
1754
1769
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
1755
1770
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
1756
1771
  * */
1757
- var initialState$4 = {
1772
+ var initialState$5 = {
1758
1773
  byId: {},
1759
1774
  allIds: []
1760
1775
  };
1761
- var slice$4 = createSlice({
1762
- initialState: initialState$4,
1776
+ var slice$5 = createSlice({
1777
+ initialState: initialState$5,
1763
1778
  name: 'serviceReducer',
1764
1779
  reducers: {
1765
1780
  serviceSetLayers: function serviceSetLayers(draft, action) {
@@ -1786,13 +1801,13 @@ var slice$4 = createSlice({
1786
1801
  var serviceLayers = action.payload.serviceLayers;
1787
1802
  if (serviceLayers === null) return draft;
1788
1803
  var mapAction = serviceActions.serviceSetLayers(serviceLayers);
1789
- var newState = reducer$4(draft, mapAction);
1804
+ var newState = reducer$5(draft, mapAction);
1790
1805
  return newState;
1791
1806
  });
1792
1807
  }
1793
1808
  });
1794
- var reducer$4 = slice$4.reducer;
1795
- var serviceActions = slice$4.actions;
1809
+ var reducer$5 = slice$5.reducer;
1810
+ var serviceActions = slice$5.actions;
1796
1811
 
1797
1812
  /* *
1798
1813
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1945,12 +1960,13 @@ var getLayerStyles = createSelector(getLayerFromService, function (layer) {
1945
1960
  * @returns {array} returnType: [] - array containing services
1946
1961
  */
1947
1962
 
1948
- var getServicesInArray = createSelector(servicesStore, function (store) {
1963
+ createSelector(servicesStore, function (store) {
1949
1964
  var services = store ? store.byId : {};
1950
1965
  var arrayOfServiceObjects = Object.keys(services).map(function (key) {
1951
1966
  return {
1952
1967
  name: services[key].name,
1953
- serviceUrl: services[key].serviceUrl
1968
+ serviceUrl: services[key].serviceUrl,
1969
+ isUserAddedService: services[key].isUserAddedService
1954
1970
  };
1955
1971
  });
1956
1972
  return arrayOfServiceObjects;
@@ -1976,13 +1992,13 @@ var createUIDialogElement = function createUIDialogElement(_ref) {
1976
1992
  source: source
1977
1993
  };
1978
1994
  };
1979
- var initialState$3 = {
1995
+ var initialState$4 = {
1980
1996
  order: [],
1981
1997
  dialogs: {},
1982
1998
  activeWindowId: undefined
1983
1999
  };
1984
- var slice$3 = createSlice({
1985
- initialState: initialState$3,
2000
+ var slice$4 = createSlice({
2001
+ initialState: initialState$4,
1986
2002
  name: 'uiReducer',
1987
2003
  reducers: {
1988
2004
  registerDialog: function registerDialog(draft, action) {
@@ -2059,8 +2075,8 @@ var slice$3 = createSlice({
2059
2075
  }
2060
2076
  }
2061
2077
  });
2062
- var reducer$3 = slice$3.reducer;
2063
- var uiActions = slice$3.actions;
2078
+ var reducer$4 = slice$4.reducer;
2079
+ var uiActions = slice$4.actions;
2064
2080
 
2065
2081
  var addBaseLayer = layerActions.addBaseLayer,
2066
2082
  addLayer$1 = layerActions.addLayer,
@@ -2111,12 +2127,12 @@ var createLayersWithIds = function createLayersWithIds(state, layers) {
2111
2127
  });
2112
2128
  };
2113
2129
 
2114
- var initialState$2 = {
2130
+ var initialState$3 = {
2115
2131
  byId: {},
2116
2132
  allIds: []
2117
2133
  };
2118
- var slice$2 = createSlice({
2119
- initialState: initialState$2,
2134
+ var slice$3 = createSlice({
2135
+ initialState: initialState$3,
2120
2136
  name: 'mapReducer',
2121
2137
  reducers: {
2122
2138
  registerMap: function registerMap(draft, action) {
@@ -2682,13 +2698,13 @@ var slice$2 = createSlice({
2682
2698
  };
2683
2699
  /* Handle the Layer action with the same logic, using the same reducer */
2684
2700
 
2685
- return reducer$2(prevState, action);
2701
+ return reducer$3(prevState, action);
2686
2702
  }, draft);
2687
2703
  }).addCase(onUpdateLayerInformation, function (draft, action) {
2688
2704
  var mapDimensions = action.payload.mapDimensions;
2689
2705
  if (mapDimensions === null) return draft;
2690
2706
  var mapAction = mapActions$1.mapUpdateAllMapDimensions(mapDimensions);
2691
- return reducer$2(draft, mapAction);
2707
+ return reducer$3(draft, mapAction);
2692
2708
  }).addCase(mapChangeDimension, function (draft, action) {
2693
2709
  var _action$payload36 = action.payload,
2694
2710
  mapId = _action$payload36.mapId,
@@ -2727,11 +2743,11 @@ var slice$2 = createSlice({
2727
2743
  });
2728
2744
  }
2729
2745
  });
2730
- var mapActions$1 = Object.assign(Object.assign({}, slice$2.actions), {
2746
+ var mapActions$1 = Object.assign(Object.assign({}, slice$3.actions), {
2731
2747
  setMapPreset: setMapPreset,
2732
2748
  mapChangeDimension: mapChangeDimension
2733
2749
  });
2734
- var reducer$2 = slice$2.reducer;
2750
+ var reducer$3 = slice$3.reducer;
2735
2751
 
2736
2752
  /* *
2737
2753
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -3228,7 +3244,7 @@ var removeInPlace = function removeInPlace(inDraftArray, condition) {
3228
3244
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3229
3245
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
3230
3246
  * */
3231
- var initialState$1 = {
3247
+ var initialState$2 = {
3232
3248
  sources: {
3233
3249
  byId: {},
3234
3250
  allIds: []
@@ -3252,8 +3268,8 @@ var initialState$1 = {
3252
3268
  }
3253
3269
  }
3254
3270
  };
3255
- var slice$1 = createSlice({
3256
- initialState: initialState$1,
3271
+ var slice$2 = createSlice({
3272
+ initialState: initialState$2,
3257
3273
  name: 'synchronizationGroupsReducer',
3258
3274
  reducers: {
3259
3275
  syncGroupAddSource: function syncGroupAddSource(draft, action) {
@@ -3397,7 +3413,7 @@ var slice$1 = createSlice({
3397
3413
  });
3398
3414
  },
3399
3415
  syncGroupClear: function syncGroupClear() {
3400
- return initialState$1;
3416
+ return initialState$2;
3401
3417
  },
3402
3418
  syncGroupSetViewState: function syncGroupSetViewState(draft, action) {
3403
3419
  var viewState = action.payload.viewState;
@@ -3469,7 +3485,7 @@ var setBboxOrTimeSync = function setBboxOrTimeSync(state, action) {
3469
3485
  });
3470
3486
  };
3471
3487
 
3472
- var _slice$actions = slice$1.actions,
3488
+ var _slice$actions = slice$2.actions,
3473
3489
  syncGroupAddGroup = _slice$actions.syncGroupAddGroup,
3474
3490
  syncGroupAddSource = _slice$actions.syncGroupAddSource,
3475
3491
  syncGroupAddTarget = _slice$actions.syncGroupAddTarget;
@@ -3479,8 +3495,8 @@ var _slice$actions = slice$1.actions,
3479
3495
  syncGroupRemoveSource = _slice$actions.syncGroupRemoveSource,
3480
3496
  syncGroupRemoveTarget = _slice$actions.syncGroupRemoveTarget,
3481
3497
  syncGroupSetViewState = _slice$actions.syncGroupSetViewState;
3482
- var actions = slice$1.actions,
3483
- reducer$1 = slice$1.reducer;
3498
+ var actions = slice$2.actions,
3499
+ reducer$2 = slice$2.reducer;
3484
3500
 
3485
3501
  /* *
3486
3502
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -3537,7 +3553,7 @@ var index = /*#__PURE__*/Object.freeze({
3537
3553
  actions: actions,
3538
3554
  constants: constants,
3539
3555
  types: types$1,
3540
- initialState: initialState$1
3556
+ initialState: initialState$2
3541
3557
  });
3542
3558
 
3543
3559
  /* *
@@ -4150,11 +4166,11 @@ var getPinLocation = createSelector(getMapById, function (store) {
4150
4166
  * Example getDisableMapPin(store);
4151
4167
  * @param {object} store store: object - store object
4152
4168
  * @param {string} mapId mapId: string - Id of the map
4153
- * @returns {boolean} returnType: boolean or undefined
4169
+ * @returns {boolean} returnType: boolean
4154
4170
  */
4155
4171
 
4156
4172
  var getDisableMapPin = createSelector(getMapById, function (store) {
4157
- return store ? store.disableMapPin : undefined;
4173
+ return store ? store.disableMapPin : false;
4158
4174
  });
4159
4175
  /**
4160
4176
  * Returns the diplay map pin boolean for the current map
@@ -4343,7 +4359,7 @@ var selectors = /*#__PURE__*/Object.freeze({
4343
4359
  getMapPresetError: getMapPresetError
4344
4360
  });
4345
4361
 
4346
- var initialState = {
4362
+ var initialState$1 = {
4347
4363
  filters: {
4348
4364
  searchFilter: '',
4349
4365
  activeServices: {
@@ -4356,8 +4372,8 @@ var initialState = {
4356
4372
  }
4357
4373
  }
4358
4374
  };
4359
- var slice = createSlice({
4360
- initialState: initialState,
4375
+ var slice$1 = createSlice({
4376
+ initialState: initialState$1,
4361
4377
  name: 'layerSelect',
4362
4378
  reducers: {
4363
4379
  setSearchFilter: function setSearchFilter(draft, action) {
@@ -4369,7 +4385,8 @@ var slice = createSlice({
4369
4385
  serviceId = _action$payload.serviceId,
4370
4386
  serviceName = _action$payload.serviceName,
4371
4387
  serviceUrl = _action$payload.serviceUrl,
4372
- keywords = _action$payload.keywords;
4388
+ keywords = _action$payload.keywords,
4389
+ isUserAddedService = _action$payload.isUserAddedService;
4373
4390
 
4374
4391
  if (!draft.filters.activeServices.byId[serviceId]) {
4375
4392
  draft.filters.activeServices.byId[serviceId] = {};
@@ -4404,6 +4421,7 @@ var slice = createSlice({
4404
4421
  draft.filters.activeServices.byId[serviceId].serviceName = serviceName;
4405
4422
  draft.filters.activeServices.byId[serviceId].serviceUrl = serviceUrl;
4406
4423
  draft.filters.activeServices.byId[serviceId].enabled = true;
4424
+ draft.filters.activeServices.byId[serviceId].isUserAddedService = isUserAddedService;
4407
4425
  draft.filters.activeServices.byId[serviceId].keywordsPerService = keywords;
4408
4426
  if (!draft.filters.activeServices.allIds.includes(serviceId)) draft.filters.activeServices.allIds.push(serviceId);
4409
4427
  },
@@ -4514,8 +4532,8 @@ var slice = createSlice({
4514
4532
  }
4515
4533
  }
4516
4534
  });
4517
- var reducer = slice.reducer;
4518
- var layerSelectActions = slice.actions;
4535
+ var reducer$1 = slice$1.reducer;
4536
+ var layerSelectActions = slice$1.actions;
4519
4537
 
4520
4538
  /* *
4521
4539
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -4647,6 +4665,80 @@ var getKeywordObjectById = function getKeywordObjectById(store, keywordId) {
4647
4665
  return (_d = (_c = (_b = (_a = store === null || store === void 0 ? void 0 : store.layerSelect) === null || _a === void 0 ? void 0 : _a.filters) === null || _b === void 0 ? void 0 : _b.keywords) === null || _c === void 0 ? void 0 : _c.byId[keywordId]) !== null && _d !== void 0 ? _d : {};
4648
4666
  };
4649
4667
 
4668
+ /* *
4669
+ * Licensed under the Apache License, Version 2.0 (the "License");
4670
+ * you may not use this file except in compliance with the License.
4671
+ * You may obtain a copy of the License at
4672
+ *
4673
+ * http://www.apache.org/licenses/LICENSE-2.0
4674
+ *
4675
+ * Unless required by applicable law or agreed to in writing, software
4676
+ * distributed under the License is distributed on an "AS IS" BASIS,
4677
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4678
+ * See the License for the specific language governing permissions and
4679
+ * limitations under the License.
4680
+ *
4681
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4682
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
4683
+ * */
4684
+ var snackbarAdapter = createEntityAdapter();
4685
+ var initialState = snackbarAdapter.getInitialState();
4686
+ var slice = createSlice({
4687
+ initialState: initialState,
4688
+ name: 'snackbar',
4689
+ reducers: {
4690
+ // To open the snackbar call this action
4691
+ // eslint-disable-next-line no-unused-vars
4692
+ openSnackbar: function openSnackbar(draft, action) {},
4693
+ // triggerOpenSnackbarBySaga is triggered by the saga to open the snackbar after the current snackbars have all been closed
4694
+ // DO NOT CALL THIS ACTION DIRECTLY!
4695
+ triggerOpenSnackbarBySaga: function triggerOpenSnackbarBySaga(draft, action) {
4696
+ var snackbarContent = action.payload.snackbarContent; // Ensure we have an id before proceeding
4697
+
4698
+ if (snackbarContent.id === undefined) {
4699
+ return;
4700
+ }
4701
+
4702
+ snackbarAdapter.setOne(draft, snackbarContent);
4703
+ },
4704
+ closeSnackbar: function closeSnackbar(draft) {
4705
+ snackbarAdapter.removeAll(draft);
4706
+ }
4707
+ }
4708
+ });
4709
+ var reducer = slice.reducer;
4710
+ var snackbarActions = slice.actions;
4711
+
4712
+ /* *
4713
+ * Licensed under the Apache License, Version 2.0 (the "License");
4714
+ * you may not use this file except in compliance with the License.
4715
+ * You may obtain a copy of the License at
4716
+ *
4717
+ * http://www.apache.org/licenses/LICENSE-2.0
4718
+ *
4719
+ * Unless required by applicable law or agreed to in writing, software
4720
+ * distributed under the License is distributed on an "AS IS" BASIS,
4721
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4722
+ * See the License for the specific language governing permissions and
4723
+ * limitations under the License.
4724
+ *
4725
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4726
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
4727
+ * */
4728
+
4729
+ var _snackbarAdapter$getS = snackbarAdapter.getSelectors(function (state) {
4730
+ var _a;
4731
+
4732
+ return (_a = state === null || state === void 0 ? void 0 : state.snackbar) !== null && _a !== void 0 ? _a : {
4733
+ entities: {},
4734
+ ids: []
4735
+ };
4736
+ }),
4737
+ getCurrentSnackbarMessages = _snackbarAdapter$getS.selectAll;
4738
+ createSelector(getCurrentSnackbarMessages, function (currentMessages) {
4739
+ return currentMessages.length > 0 ? currentMessages[0] : undefined;
4740
+ });
4741
+
4650
4742
  var types = /*#__PURE__*/Object.freeze({
4651
4743
  __proto__: null
4652
4744
  });
@@ -4978,15 +5070,15 @@ var getMapBaseLayerActionsTargets = function getMapBaseLayerActionsTargets(state
4978
5070
  });
4979
5071
  };
4980
5072
 
4981
- var _marked$4 = /*#__PURE__*/regeneratorRuntime.mark(setTimeSaga),
4982
- _marked2$4 = /*#__PURE__*/regeneratorRuntime.mark(setBBoxSaga),
5073
+ var _marked$5 = /*#__PURE__*/regeneratorRuntime.mark(setTimeSaga),
5074
+ _marked2$5 = /*#__PURE__*/regeneratorRuntime.mark(setBBoxSaga),
4983
5075
  _marked3$4 = /*#__PURE__*/regeneratorRuntime.mark(layerActionsSaga),
4984
5076
  _marked4$2 = /*#__PURE__*/regeneratorRuntime.mark(addLayerActionsSaga),
4985
5077
  _marked5$2 = /*#__PURE__*/regeneratorRuntime.mark(deleteLayerActionsSaga),
4986
5078
  _marked6$1 = /*#__PURE__*/regeneratorRuntime.mark(moveLayerActionsSaga),
4987
5079
  _marked7$1 = /*#__PURE__*/regeneratorRuntime.mark(setActiveLayerIdActionsSaga),
4988
5080
  _marked8$1 = /*#__PURE__*/regeneratorRuntime.mark(mapBaseLayerActionsSaga),
4989
- _marked9$1 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$4);
5081
+ _marked9$1 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$5);
4990
5082
  var setBaseLayers = layerActions.setBaseLayers,
4991
5083
  addLayer = layerActions.addLayer,
4992
5084
  layerChangeDimension = layerActions.layerChangeDimension,
@@ -5034,7 +5126,7 @@ function setTimeSaga(_ref) {
5034
5126
  return _context.stop();
5035
5127
  }
5036
5128
  }
5037
- }, _marked$4);
5129
+ }, _marked$5);
5038
5130
  }
5039
5131
  function setBBoxSaga(_ref2) {
5040
5132
  var payload, targets, groups;
@@ -5061,7 +5153,7 @@ function setBBoxSaga(_ref2) {
5061
5153
  return _context2.stop();
5062
5154
  }
5063
5155
  }
5064
- }, _marked2$4);
5156
+ }, _marked2$5);
5065
5157
  }
5066
5158
  function layerActionsSaga(_ref3) {
5067
5159
  var payload, type, targets;
@@ -5276,7 +5368,7 @@ function mapBaseLayerActionsSaga(_ref8) {
5276
5368
  }
5277
5369
  }, _marked8$1);
5278
5370
  }
5279
- function rootSaga$4() {
5371
+ function rootSaga$5() {
5280
5372
  return regeneratorRuntime.wrap(function rootSaga$(_context9) {
5281
5373
  while (1) {
5282
5374
  switch (_context9.prev = _context9.next) {
@@ -5435,11 +5527,11 @@ var sources = function sources(store) {
5435
5527
 
5436
5528
  var createSyncGroupViewStateSelector = createSelector(groups, sources, createSyncGroupViewState);
5437
5529
 
5438
- var _marked$3 = /*#__PURE__*/regeneratorRuntime.mark(updateSourceValueWhenLinkingComponentToGroupSaga),
5439
- _marked2$3 = /*#__PURE__*/regeneratorRuntime.mark(addGroupTargetSaga),
5530
+ var _marked$4 = /*#__PURE__*/regeneratorRuntime.mark(updateSourceValueWhenLinkingComponentToGroupSaga),
5531
+ _marked2$4 = /*#__PURE__*/regeneratorRuntime.mark(addGroupTargetSaga),
5440
5532
  _marked3$3 = /*#__PURE__*/regeneratorRuntime.mark(linkGroupTargetSaga),
5441
5533
  _marked4$1 = /*#__PURE__*/regeneratorRuntime.mark(updateViewStateSaga),
5442
- _marked5$1 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$3);
5534
+ _marked5$1 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$4);
5443
5535
  function updateSourceValueWhenLinkingComponentToGroupSaga(groupId, targetToUpdate) {
5444
5536
  var group;
5445
5537
  return regeneratorRuntime.wrap(function updateSourceValueWhenLinkingComponentToGroupSaga$(_context) {
@@ -5506,7 +5598,7 @@ function updateSourceValueWhenLinkingComponentToGroupSaga(groupId, targetToUpdat
5506
5598
  return _context.stop();
5507
5599
  }
5508
5600
  }
5509
- }, _marked$3);
5601
+ }, _marked$4);
5510
5602
  }
5511
5603
  function addGroupTargetSaga(_ref) {
5512
5604
  var payload, groupId, linked, targetToUpdate;
@@ -5530,7 +5622,7 @@ function addGroupTargetSaga(_ref) {
5530
5622
  return _context2.stop();
5531
5623
  }
5532
5624
  }
5533
- }, _marked2$3);
5625
+ }, _marked2$4);
5534
5626
  }
5535
5627
  function linkGroupTargetSaga(_ref2) {
5536
5628
  var payload, groupId, linked, targetToUpdate;
@@ -5580,7 +5672,7 @@ function updateViewStateSaga() {
5580
5672
  }, _marked4$1);
5581
5673
  }
5582
5674
 
5583
- function rootSaga$3() {
5675
+ function rootSaga$4() {
5584
5676
  return regeneratorRuntime.wrap(function rootSaga$(_context5) {
5585
5677
  while (1) {
5586
5678
  switch (_context5.prev = _context5.next) {
@@ -5647,14 +5739,14 @@ function rootSaga$3() {
5647
5739
  var synchronizationGroupConfig = {
5648
5740
  id: 'syncronizationGroupStore-module',
5649
5741
  reducerMap: {
5650
- syncronizationGroupStore: reducer$1
5742
+ syncronizationGroupStore: reducer$2
5651
5743
  },
5652
- sagas: [rootSaga$4, rootSaga$3]
5744
+ sagas: [rootSaga$5, rootSaga$4]
5653
5745
  };
5654
5746
 
5655
- var _marked$2 = /*#__PURE__*/regeneratorRuntime.mark(registerMapUISaga),
5656
- _marked2$2 = /*#__PURE__*/regeneratorRuntime.mark(unregisterUIMapSaga),
5657
- _marked3$2 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$2);
5747
+ var _marked$3 = /*#__PURE__*/regeneratorRuntime.mark(registerMapUISaga),
5748
+ _marked2$3 = /*#__PURE__*/regeneratorRuntime.mark(unregisterUIMapSaga),
5749
+ _marked3$2 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$3);
5658
5750
  function registerMapUISaga() {
5659
5751
  var fields, source;
5660
5752
  return regeneratorRuntime.wrap(function registerMapUISaga$(_context) {
@@ -5690,7 +5782,7 @@ function registerMapUISaga() {
5690
5782
  return _context.stop();
5691
5783
  }
5692
5784
  }
5693
- }, _marked$2);
5785
+ }, _marked$3);
5694
5786
  }
5695
5787
  function unregisterUIMapSaga() {
5696
5788
  var fields, activeUI;
@@ -5742,9 +5834,9 @@ function unregisterUIMapSaga() {
5742
5834
  return _context2.stop();
5743
5835
  }
5744
5836
  }
5745
- }, _marked2$2);
5837
+ }, _marked2$3);
5746
5838
  }
5747
- function rootSaga$2() {
5839
+ function rootSaga$3() {
5748
5840
  return regeneratorRuntime.wrap(function rootSaga$(_context3) {
5749
5841
  while (1) {
5750
5842
  switch (_context3.prev = _context3.next) {
@@ -5783,9 +5875,9 @@ function rootSaga$2() {
5783
5875
  var uiModuleConfig = {
5784
5876
  id: 'ui-module',
5785
5877
  reducerMap: {
5786
- ui: reducer$3
5878
+ ui: reducer$4
5787
5879
  },
5788
- sagas: [rootSaga$2]
5880
+ sagas: [rootSaga$3]
5789
5881
  };
5790
5882
 
5791
5883
  /* *
@@ -5953,100 +6045,51 @@ var PlayButtonConnect = connectRedux$6(function (_ref) {
5953
6045
  * Copyright 2022 - Finnish Meteorological Institute (FMI)
5954
6046
  * */
5955
6047
 
5956
- var parseBoolean = function parseBoolean(value) {
5957
- return ['true', 'false', true, false].includes(value) && JSON.parse(value);
5958
- };
5959
-
5960
- var isBaseLayer = function isBaseLayer(layer) {
5961
- return ['baseLayer'].includes(layer.layerType);
5962
- };
5963
-
5964
- var isMapLayer = function isMapLayer(layer) {
5965
- return ['mapLayer'].includes(layer.layerType);
5966
- };
5967
-
5968
- var isOverLayer = function isOverLayer(layer) {
5969
- return ['overLayer'].includes(layer.layerType);
5970
- };
5971
-
5972
6048
  var isValidService = function isValidService(service) {
5973
6049
  return Object.prototype.hasOwnProperty.call(service, 'url');
5974
6050
  };
5975
6051
 
5976
- var parseLayerType = function parseLayerType(layer, defaultValue) {
5977
- if (isBaseLayer(layer)) {
5978
- return LayerType.baseLayer;
5979
- }
5980
-
5981
- if (isMapLayer(layer)) {
5982
- return LayerType.mapLayer;
5983
- }
5984
-
5985
- if (isOverLayer(layer)) {
5986
- return LayerType.overLayer;
5987
- }
5988
-
5989
- return defaultValue;
6052
+ var parseBoolean = function parseBoolean(value) {
6053
+ return typeof value === 'boolean' ? value : value === 'true';
5990
6054
  };
5991
-
5992
6055
  var parseLayer = function parseLayer(layer) {
5993
- var lr = JSON.parse(JSON.stringify(layer)); // Cloning used here to achieve object immutability
5994
-
5995
- if (!lr.id) {
5996
- lr.id = generateLayerId();
5997
- }
5998
-
5999
- if (lr.layerType) {
6000
- lr.layerType = parseLayerType(lr, null);
6001
- }
6002
-
6003
- if (lr.enabled) {
6004
- lr.enabled = parseBoolean(lr.enabled);
6005
- }
6006
-
6007
- return lr;
6056
+ return Object.assign(Object.assign(Object.assign({}, layer), !layer.id && {
6057
+ id: generateLayerId()
6058
+ }), layer.enabled && {
6059
+ enabled: parseBoolean(layer.enabled)
6060
+ });
6008
6061
  };
6009
6062
 
6010
- var filterBaseLayers = function filterBaseLayers(presetArray) {
6011
- var hasLayers = presetArray && Array.isArray(presetArray) && presetArray.length > 0;
6012
- var filteredBaseLayers = hasLayers ? presetArray.filter(function (preset) {
6013
- return isBaseLayer(preset);
6014
- }).map(function (filteredPresetLayer) {
6015
- return parseLayer(filteredPresetLayer);
6016
- }) : null;
6017
- var hasBaseLayers = filteredBaseLayers && filteredBaseLayers.length > 0;
6018
- var baseLayers = hasBaseLayers ? filteredBaseLayers : undefined;
6019
- return baseLayers;
6020
- };
6021
- var filterMapLayers = function filterMapLayers(presetArray) {
6022
- var hasLayers = presetArray && Array.isArray(presetArray) && presetArray.length > 0;
6023
- var filteredMapLayers = hasLayers ? presetArray.filter(function (preset) {
6024
- return isMapLayer(preset);
6025
- }).map(function (filteredPresetLayer) {
6026
- return parseLayer(filteredPresetLayer);
6027
- }) : null;
6028
- var hasMapLayers = filteredMapLayers && filteredMapLayers.length > 0;
6029
- var mapLayers = hasMapLayers ? filteredMapLayers : undefined;
6030
- return mapLayers;
6063
+ var createEmtpyFilteredList = function createEmtpyFilteredList(existingList) {
6064
+ return {
6065
+ mapLayers: existingList,
6066
+ baseLayers: existingList,
6067
+ overLayers: existingList
6068
+ };
6031
6069
  };
6070
+
6032
6071
  var filterLayers = function filterLayers() {
6033
6072
  var layers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
6073
+ var layerParser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (layer) {
6074
+ return layer;
6075
+ };
6034
6076
  return layers.reduce(function (layers, layer) {
6035
6077
  var mapLayers = layers.mapLayers,
6036
6078
  baseLayers = layers.baseLayers,
6037
6079
  overLayers = layers.overLayers;
6080
+ var parsedLayer = layerParser(layer);
6038
6081
 
6039
6082
  if (layer.layerType === LayerType.baseLayer) {
6040
6083
  return {
6041
6084
  mapLayers: mapLayers,
6042
- baseLayers: baseLayers.concat(layer),
6085
+ baseLayers: baseLayers.concat(parsedLayer),
6043
6086
  overLayers: overLayers
6044
6087
  };
6045
6088
  }
6046
6089
 
6047
6090
  if (layer.layerType === LayerType.mapLayer) {
6048
6091
  return {
6049
- mapLayers: mapLayers.concat(layer),
6092
+ mapLayers: mapLayers.concat(parsedLayer),
6050
6093
  baseLayers: baseLayers,
6051
6094
  overLayers: overLayers
6052
6095
  };
@@ -6056,16 +6099,12 @@ var filterLayers = function filterLayers() {
6056
6099
  return {
6057
6100
  mapLayers: mapLayers,
6058
6101
  baseLayers: baseLayers,
6059
- overLayers: overLayers.concat(layer)
6102
+ overLayers: overLayers.concat(parsedLayer)
6060
6103
  };
6061
6104
  }
6062
6105
 
6063
6106
  return layers;
6064
- }, {
6065
- mapLayers: [],
6066
- baseLayers: [],
6067
- overLayers: []
6068
- });
6107
+ }, createEmtpyFilteredList([]));
6069
6108
  };
6070
6109
  var filterServices = function filterServices(presetArray) {
6071
6110
  var hasServices = presetArray && Array.isArray(presetArray) && presetArray.length > 0;
@@ -6076,21 +6115,28 @@ var filterServices = function filterServices(presetArray) {
6076
6115
  var services = hasValidServices ? validServices : undefined;
6077
6116
  return services;
6078
6117
  };
6079
- var filterMapPresets = function filterMapPresets(presets) {
6080
- var preset = presets && presets.preset;
6081
- var filterredServices = preset && preset.services ? filterServices(preset.services) : undefined;
6082
- var baseServices = preset && preset.baseServices ? filterServices(preset.baseServices) : undefined;
6083
- var filteredBaseLayers = preset && preset.layers ? filterBaseLayers(preset.layers) : undefined;
6084
- var filteredMapLayers = preset && preset.layers ? filterMapLayers(preset.layers) : undefined;
6118
+ var filterMapPresets = function filterMapPresets(initialAppPreset) {
6119
+ var preset = initialAppPreset && initialAppPreset.preset || {};
6120
+ var layers = preset.layers,
6121
+ services = preset.services,
6122
+ baseServices = preset.baseServices;
6123
+
6124
+ var _ref = layers ? filterLayers(layers, parseLayer) : createEmtpyFilteredList(undefined),
6125
+ baseLayers = _ref.baseLayers,
6126
+ mapLayers = _ref.mapLayers;
6127
+
6128
+ var filterredServices = services ? filterServices(services) : undefined;
6129
+ var filteredBaseServices = baseServices ? filterServices(baseServices) : undefined;
6085
6130
  var filteredPreset = {
6086
6131
  services: filterredServices,
6087
- baseServices: baseServices,
6088
- baseLayers: filteredBaseLayers,
6089
- mapLayers: filteredMapLayers
6132
+ baseServices: filteredBaseServices,
6133
+ baseLayers: baseLayers,
6134
+ mapLayers: mapLayers
6090
6135
  };
6091
6136
  return filteredPreset;
6092
- };
6093
- var getInitialPresets = function getInitialPresets(mapPreset, defaultInitialPresets) {
6137
+ }; // loads the initialPresets.json
6138
+
6139
+ var getInitialAppPresets = function getInitialAppPresets(mapPreset, defaultInitialPresets) {
6094
6140
  var filteredPresets = mapPreset ? filterMapPresets(mapPreset) : null;
6095
6141
  var initialPresets = filteredPresets || filterMapPresets(defaultInitialPresets);
6096
6142
  return initialPresets;
@@ -7019,7 +7065,7 @@ CanvasComponent.defaultProps = {
7019
7065
  var defaultCanvasWidth = 150;
7020
7066
  var defaultCanvasHeight = 30; // TODO: remove fontFamily styles after theming is fully implemented
7021
7067
 
7022
- var useStyles$s = makeStyles(function (theme) {
7068
+ var useStyles$r = makeStyles(function (theme) {
7023
7069
  return {
7024
7070
  legendCanvas: {
7025
7071
  margin: '10px 0px 10px 0px'
@@ -7087,7 +7133,7 @@ var renderLegendGraphic = function renderLegendGraphic(wmImage, ctx, width, heig
7087
7133
 
7088
7134
  var Legend = function Legend(_ref) {
7089
7135
  var layer = _ref.layer;
7090
- var classes = useStyles$s();
7136
+ var classes = useStyles$r();
7091
7137
  /* Variable to remember the previous image */
7092
7138
 
7093
7139
  var previousLegendImage = useRef(null);
@@ -7242,7 +7288,7 @@ var Legend = function Legend(_ref) {
7242
7288
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7243
7289
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
7244
7290
  * */
7245
- var useStyles$r = makeStyles(function () {
7291
+ var useStyles$q = makeStyles(function () {
7246
7292
  return {
7247
7293
  legendList: {
7248
7294
  display: 'flex',
@@ -7270,7 +7316,7 @@ var LegendDialog = function LegendDialog(_ref) {
7270
7316
  order = _ref$order === void 0 ? 0 : _ref$order,
7271
7317
  _ref$source = _ref.source,
7272
7318
  source = _ref$source === void 0 ? 'app' : _ref$source;
7273
- var classes = useStyles$r();
7319
+ var classes = useStyles$q();
7274
7320
  return /*#__PURE__*/React.createElement(ToolContainerDraggable, {
7275
7321
  startPosition: {
7276
7322
  right: 20,
@@ -7307,7 +7353,7 @@ var LegendDialog = function LegendDialog(_ref) {
7307
7353
  }, "No layers")));
7308
7354
  };
7309
7355
 
7310
- var IS_LEGEND_OPEN_BY_DEFAULT = true;
7356
+ var IS_LEGEND_OPEN_BY_DEFAULT = false;
7311
7357
 
7312
7358
  var LegendConnectComponent = function LegendConnectComponent(_ref) {
7313
7359
  var _ref$showMapId = _ref.showMapId,
@@ -7418,8 +7464,8 @@ var LegendConnect = function LegendConnect(_a) {
7418
7464
  }, props));
7419
7465
  };
7420
7466
 
7421
- var _marked$1 = /*#__PURE__*/regeneratorRuntime.mark(startAnimationSaga),
7422
- _marked2$1 = /*#__PURE__*/regeneratorRuntime.mark(stopAnimationSaga),
7467
+ var _marked$2 = /*#__PURE__*/regeneratorRuntime.mark(startAnimationSaga),
7468
+ _marked2$2 = /*#__PURE__*/regeneratorRuntime.mark(stopAnimationSaga),
7423
7469
  _marked3$1 = /*#__PURE__*/regeneratorRuntime.mark(deleteLayerSaga),
7424
7470
  _marked4 = /*#__PURE__*/regeneratorRuntime.mark(updateAnimation),
7425
7471
  _marked5 = /*#__PURE__*/regeneratorRuntime.mark(setLayerDimensionsSaga),
@@ -7427,7 +7473,7 @@ var _marked$1 = /*#__PURE__*/regeneratorRuntime.mark(startAnimationSaga),
7427
7473
  _marked7 = /*#__PURE__*/regeneratorRuntime.mark(handleBaseLayersSaga),
7428
7474
  _marked8 = /*#__PURE__*/regeneratorRuntime.mark(setMapPresetSaga),
7429
7475
  _marked9 = /*#__PURE__*/regeneratorRuntime.mark(checkMapPresetForChangesSaga),
7430
- _marked10 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$1);
7476
+ _marked10 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$2);
7431
7477
 
7432
7478
  var generateTimeList = function generateTimeList(start, end, interval) {
7433
7479
  var timeList = [];
@@ -7477,7 +7523,7 @@ function startAnimationSaga(_ref) {
7477
7523
  return _context.stop();
7478
7524
  }
7479
7525
  }
7480
- }, _marked$1);
7526
+ }, _marked$2);
7481
7527
  }
7482
7528
  function stopAnimationSaga(_ref2) {
7483
7529
  var payload, mapId;
@@ -7495,7 +7541,7 @@ function stopAnimationSaga(_ref2) {
7495
7541
  return _context2.stop();
7496
7542
  }
7497
7543
  }
7498
- }, _marked2$1);
7544
+ }, _marked2$2);
7499
7545
  }
7500
7546
  function deleteLayerSaga(_ref3) {
7501
7547
  var payload, mapId, layers;
@@ -8103,7 +8149,7 @@ function checkMapPresetForChangesSaga(action) {
8103
8149
  }
8104
8150
  }, _marked9);
8105
8151
  }
8106
- function rootSaga$1() {
8152
+ function rootSaga$2() {
8107
8153
  return regeneratorRuntime.wrap(function rootSaga$(_context10) {
8108
8154
  while (1) {
8109
8155
  switch (_context10.prev = _context10.next) {
@@ -8164,11 +8210,11 @@ function rootSaga$1() {
8164
8210
  var moduleConfig = {
8165
8211
  id: 'webmap-module',
8166
8212
  reducerMap: {
8167
- webmap: reducer$2,
8168
- services: reducer$4,
8169
- layers: reducer$5
8213
+ webmap: reducer$3,
8214
+ services: reducer$5,
8215
+ layers: reducer$6
8170
8216
  },
8171
- sagas: [rootSaga$1]
8217
+ sagas: [rootSaga$2]
8172
8218
  };
8173
8219
 
8174
8220
  /* *
@@ -8188,13 +8234,13 @@ var moduleConfig = {
8188
8234
  * Copyright 2022 - Finnish Meteorological Institute (FMI)
8189
8235
  * */
8190
8236
  var mergePresetsAndUserAddedServices = function mergePresetsAndUserAddedServices(presets, userAddedServices) {
8191
- return Object.values(Object.assign(Object.assign({}, presets.reduce(function (byId, preset) {
8192
- return Object.assign(Object.assign({}, byId), _defineProperty({}, preset.id, preset));
8237
+ return Object.values(Object.assign(Object.assign({}, presets.reduce(function (byUrl, preset) {
8238
+ return Object.assign(Object.assign({}, byUrl), _defineProperty({}, preset.url, preset));
8193
8239
  }, {})), userAddedServices));
8194
8240
  };
8195
- var isService = function isService(param) {
8241
+ var isNoIdService = function isNoIdService(param) {
8196
8242
  var serviceParam = param;
8197
- return !!((serviceParam === null || serviceParam === void 0 ? void 0 : serviceParam.id) && (serviceParam === null || serviceParam === void 0 ? void 0 : serviceParam.name) && (serviceParam === null || serviceParam === void 0 ? void 0 : serviceParam.url));
8243
+ return !!((serviceParam === null || serviceParam === void 0 ? void 0 : serviceParam.name) && (serviceParam === null || serviceParam === void 0 ? void 0 : serviceParam.url));
8198
8244
  };
8199
8245
 
8200
8246
  var getUserAddedServices = function getUserAddedServices() {
@@ -8208,7 +8254,9 @@ var getUserAddedServices = function getUserAddedServices() {
8208
8254
  serviceUrl = _ref2[0],
8209
8255
  service = _ref2[1];
8210
8256
 
8211
- return Object.assign(Object.assign({}, userServices), isService(service) ? _defineProperty({}, serviceUrl, service) : {});
8257
+ return Object.assign(Object.assign({}, userServices), isNoIdService(service) ? _defineProperty({}, serviceUrl, Object.assign(Object.assign({}, service), {
8258
+ isUserAddedService: true
8259
+ })) : {});
8212
8260
  }, {});
8213
8261
  }
8214
8262
  } catch (e) {
@@ -8225,48 +8273,35 @@ var setUserAddedServices = function setUserAddedServices(services) {
8225
8273
  }
8226
8274
  };
8227
8275
 
8228
- var _marked = /*#__PURE__*/regeneratorRuntime.mark(newServiceAddedSaga),
8229
- _marked2 = /*#__PURE__*/regeneratorRuntime.mark(layerSelectServiceRemovedSaga),
8230
- _marked3 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga);
8276
+ var _marked$1 = /*#__PURE__*/regeneratorRuntime.mark(newServiceAddedSaga),
8277
+ _marked2$1 = /*#__PURE__*/regeneratorRuntime.mark(layerSelectServiceRemovedSaga),
8278
+ _marked3 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga$1);
8231
8279
  function newServiceAddedSaga(capturedAction) {
8232
- var addedService, id, serviceUrl, name, keywords, services, findServiceName;
8280
+ var addedService, id, serviceUrl, name, isUserAddedService, keywords;
8233
8281
  return regeneratorRuntime.wrap(function newServiceAddedSaga$(_context) {
8234
8282
  while (1) {
8235
8283
  switch (_context.prev = _context.next) {
8236
8284
  case 0:
8237
8285
  addedService = capturedAction.payload;
8238
- id = addedService.id, serviceUrl = addedService.serviceUrl, name = addedService.name;
8286
+ id = addedService.id, serviceUrl = addedService.serviceUrl, name = addedService.name, isUserAddedService = addedService.isUserAddedService;
8239
8287
  keywords = addedService.layers.reduce(function (keywordAccumulator, layer) {
8240
8288
  return keywordAccumulator.concat(layer.path, layer.keywords);
8241
8289
  }, []);
8242
8290
  _context.next = 5;
8243
- return select(getServicesInArray);
8244
-
8245
- case 5:
8246
- services = _context.sent;
8247
-
8248
- findServiceName = function findServiceName() {
8249
- var foundService = services.find(function (object) {
8250
- return (object === null || object === void 0 ? void 0 : object.url) === serviceUrl;
8251
- });
8252
- if (foundService) return foundService.name;
8253
- return name;
8254
- };
8255
-
8256
- _context.next = 9;
8257
8291
  return put(layerSelectActions.addKeywordsAndActiveServices({
8258
8292
  serviceId: id,
8259
- serviceName: findServiceName(),
8293
+ serviceName: name,
8260
8294
  serviceUrl: serviceUrl,
8261
- keywords: keywords
8295
+ keywords: keywords,
8296
+ isUserAddedService: isUserAddedService
8262
8297
  }));
8263
8298
 
8264
- case 9:
8299
+ case 5:
8265
8300
  case "end":
8266
8301
  return _context.stop();
8267
8302
  }
8268
8303
  }
8269
- }, _marked);
8304
+ }, _marked$1);
8270
8305
  }
8271
8306
  function layerSelectServiceRemovedSaga(capturedAction) {
8272
8307
  var removedService, serviceId;
@@ -8286,7 +8321,7 @@ function layerSelectServiceRemovedSaga(capturedAction) {
8286
8321
  return _context2.stop();
8287
8322
  }
8288
8323
  }
8289
- }, _marked2);
8324
+ }, _marked2$1);
8290
8325
  }
8291
8326
  function addServiceToLocalStorageSaga(_ref) {
8292
8327
  var payload = _ref.payload;
@@ -8296,7 +8331,6 @@ function addServiceToLocalStorageSaga(_ref) {
8296
8331
  if (!isUserAddedService) return;
8297
8332
  var localStorageServices = getUserAddedServices();
8298
8333
  setUserAddedServices(Object.assign(Object.assign({}, localStorageServices), _defineProperty({}, serviceUrl, {
8299
- id: serviceUrl,
8300
8334
  name: name,
8301
8335
  url: serviceUrl
8302
8336
  })));
@@ -8310,7 +8344,7 @@ function removeServiceFromLocalStorageSaga(_ref2) {
8310
8344
  delete updatedServices[serviceUrl];
8311
8345
  setUserAddedServices(updatedServices);
8312
8346
  }
8313
- function rootSaga() {
8347
+ function rootSaga$1() {
8314
8348
  return regeneratorRuntime.wrap(function rootSaga$(_context3) {
8315
8349
  while (1) {
8316
8350
  switch (_context3.prev = _context3.next) {
@@ -8357,7 +8391,108 @@ function rootSaga() {
8357
8391
  var layerSelectConfig = {
8358
8392
  id: 'layerSelect-module',
8359
8393
  reducerMap: {
8360
- layerSelect: reducer
8394
+ layerSelect: reducer$1
8395
+ },
8396
+ sagas: [rootSaga$1]
8397
+ };
8398
+
8399
+ var _marked = /*#__PURE__*/regeneratorRuntime.mark(openSnackbarSaga),
8400
+ _marked2 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga);
8401
+ var hideTime = 4000;
8402
+ function openSnackbarSaga(capturedAction) {
8403
+ var snackbarMessage, currentSnackbarMessages, id, currentSnackbarMessagesOpen;
8404
+ return regeneratorRuntime.wrap(function openSnackbarSaga$(_context) {
8405
+ while (1) {
8406
+ switch (_context.prev = _context.next) {
8407
+ case 0:
8408
+ snackbarMessage = capturedAction.payload.snackbarContent.message;
8409
+ _context.next = 3;
8410
+ return select(getCurrentSnackbarMessages);
8411
+
8412
+ case 3:
8413
+ currentSnackbarMessages = _context.sent;
8414
+
8415
+ if (!currentSnackbarMessages.length) {
8416
+ _context.next = 7;
8417
+ break;
8418
+ }
8419
+
8420
+ _context.next = 7;
8421
+ return put(snackbarActions.closeSnackbar());
8422
+
8423
+ case 7:
8424
+ // Generate a unique id
8425
+ id = "snackbar".concat(Date.now().toString());
8426
+ _context.next = 10;
8427
+ return put(snackbarActions.triggerOpenSnackbarBySaga({
8428
+ snackbarContent: {
8429
+ message: snackbarMessage,
8430
+ id: id
8431
+ }
8432
+ }));
8433
+
8434
+ case 10:
8435
+ _context.next = 12;
8436
+ return delay(hideTime);
8437
+
8438
+ case 12:
8439
+ _context.next = 14;
8440
+ return select(getCurrentSnackbarMessages);
8441
+
8442
+ case 14:
8443
+ currentSnackbarMessagesOpen = _context.sent;
8444
+
8445
+ if (!currentSnackbarMessagesOpen.length) {
8446
+ _context.next = 18;
8447
+ break;
8448
+ }
8449
+
8450
+ _context.next = 18;
8451
+ return put(snackbarActions.closeSnackbar());
8452
+
8453
+ case 18:
8454
+ case "end":
8455
+ return _context.stop();
8456
+ }
8457
+ }
8458
+ }, _marked);
8459
+ }
8460
+ function rootSaga() {
8461
+ return regeneratorRuntime.wrap(function rootSaga$(_context2) {
8462
+ while (1) {
8463
+ switch (_context2.prev = _context2.next) {
8464
+ case 0:
8465
+ _context2.next = 2;
8466
+ return takeLatest(snackbarActions.openSnackbar.type, openSnackbarSaga);
8467
+
8468
+ case 2:
8469
+ case "end":
8470
+ return _context2.stop();
8471
+ }
8472
+ }
8473
+ }, _marked2);
8474
+ }
8475
+
8476
+ /* *
8477
+ * Licensed under the Apache License, Version 2.0 (the "License");
8478
+ * you may not use this file except in compliance with the License.
8479
+ * You may obtain a copy of the License at
8480
+ *
8481
+ * http://www.apache.org/licenses/LICENSE-2.0
8482
+ *
8483
+ * Unless required by applicable law or agreed to in writing, software
8484
+ * distributed under the License is distributed on an "AS IS" BASIS,
8485
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8486
+ * See the License for the specific language governing permissions and
8487
+ * limitations under the License.
8488
+ *
8489
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
8490
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
8491
+ * */
8492
+ var snackbarModuleConfig = {
8493
+ id: 'snackbar-module',
8494
+ reducerMap: {
8495
+ snackbar: reducer
8361
8496
  },
8362
8497
  sagas: [rootSaga]
8363
8498
  };
@@ -8378,7 +8513,7 @@ var layerSelectConfig = {
8378
8513
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
8379
8514
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
8380
8515
  * */
8381
- var coreModuleConfig = [moduleConfig, synchronizationGroupConfig, uiModuleConfig, layerSelectConfig];
8516
+ var coreModuleConfig = [moduleConfig, synchronizationGroupConfig, uiModuleConfig, layerSelectConfig, snackbarModuleConfig];
8382
8517
 
8383
8518
  /* *
8384
8519
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -8906,7 +9041,7 @@ var defaultConfigurations = /*#__PURE__*/Object.freeze({
8906
9041
  preloadedDefaultMapServices: preloadedDefaultMapServices
8907
9042
  });
8908
9043
 
8909
- var useStyles$q = makeStyles({
9044
+ var useStyles$p = makeStyles({
8910
9045
  buttonDiv: {
8911
9046
  position: 'relative'
8912
9047
  },
@@ -8939,7 +9074,7 @@ var AddLayersPopup = function AddLayersPopup(_ref) {
8939
9074
  handleClose = _ref.handleClose,
8940
9075
  _ref$layerType = _ref.layerType,
8941
9076
  layerType = _ref$layerType === void 0 ? LayerType.mapLayer : _ref$layerType;
8942
- var classes = useStyles$q();
9077
+ var classes = useStyles$p();
8943
9078
 
8944
9079
  var _React$useState = React.useState(''),
8945
9080
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -9012,6 +9147,12 @@ var AddLayersPopup = function AddLayersPopup(_ref) {
9012
9147
  }
9013
9148
  };
9014
9149
 
9150
+ React.useEffect(function () {
9151
+ if (!isEqual(preloadedServices, services)) {
9152
+ setServices(preloadedServices);
9153
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
9154
+
9155
+ }, [preloadedServices]);
9015
9156
  return /*#__PURE__*/React.createElement(Dialog, {
9016
9157
  fullWidth: true,
9017
9158
  maxWidth: "md",
@@ -9126,10 +9267,22 @@ var AddLayersButton = function AddLayersButton(_ref) {
9126
9267
  open = _React$useState2[0],
9127
9268
  setOpen = _React$useState2[1];
9128
9269
 
9270
+ var _React$useState3 = React.useState(shouldFocus),
9271
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
9272
+ isTooltipDisabled = _React$useState4[0],
9273
+ setTooltipDisabled = _React$useState4[1];
9274
+
9129
9275
  var handleClose = function handleClose() {
9130
9276
  setOpen(!open);
9131
9277
  };
9132
9278
 
9279
+ var onBlurTooltip = function onBlurTooltip(event) {
9280
+ // enable tooltip again after user blurs
9281
+ if (event.relatedTarget) {
9282
+ setTooltipDisabled(false);
9283
+ }
9284
+ };
9285
+
9133
9286
  React.useEffect(function () {
9134
9287
  if (shouldFocus && ref.current) {
9135
9288
  ref.current.focus();
@@ -9137,7 +9290,9 @@ var AddLayersButton = function AddLayersButton(_ref) {
9137
9290
 
9138
9291
  }, []);
9139
9292
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Tooltip, {
9140
- title: tooltip
9293
+ title: tooltip,
9294
+ disableFocusListener: isTooltipDisabled,
9295
+ onBlur: onBlurTooltip
9141
9296
  }, /*#__PURE__*/React.createElement(IconButton, {
9142
9297
  onClick: handleClose,
9143
9298
  sx: styles$2.button,
@@ -9303,7 +9458,7 @@ var LayerSelectButtonConnect = function LayerSelectButtonConnect(_ref) {
9303
9458
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
9304
9459
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
9305
9460
  * */
9306
- var useStyles$p = makeStyles({
9461
+ var useStyles$o = makeStyles({
9307
9462
  row: {
9308
9463
  height: '32px'
9309
9464
  },
@@ -9327,7 +9482,7 @@ var DescriptionRow = function DescriptionRow(_ref) {
9327
9482
  layerManagerWidth = _ref.layerManagerWidth,
9328
9483
  _ref$layerSelect = _ref.layerSelect,
9329
9484
  layerSelect = _ref$layerSelect === void 0 ? false : _ref$layerSelect;
9330
- var classes = useStyles$p();
9485
+ var classes = useStyles$o();
9331
9486
  var columnSizes = layerManagerWidth === LayerManagerWidth.sm ? LayerManagerColumnsSmall() : LayerManagerColumnsLarge();
9332
9487
  return /*#__PURE__*/React.createElement(Grid, {
9333
9488
  container: true,
@@ -9519,7 +9674,7 @@ var DimensionSelect = function DimensionSelect(_ref) {
9519
9674
  }))));
9520
9675
  };
9521
9676
 
9522
- var useStyles$o = makeStyles(function (theme) {
9677
+ var useStyles$n = makeStyles(function (theme) {
9523
9678
  return createStyles({
9524
9679
  dropdownEmpty: {
9525
9680
  paddingLeft: 8,
@@ -9572,7 +9727,7 @@ var RenderLayers = function RenderLayers(_ref) {
9572
9727
 
9573
9728
  var _a;
9574
9729
 
9575
- var classes = useStyles$o();
9730
+ var classes = useStyles$n();
9576
9731
 
9577
9732
  if (!layers || !layers.length) {
9578
9733
  return /*#__PURE__*/React.createElement("div", {
@@ -9638,7 +9793,7 @@ var RenderLayers = function RenderLayers(_ref) {
9638
9793
  }));
9639
9794
  };
9640
9795
 
9641
- var useStyles$n = makeStyles(function (theme) {
9796
+ var useStyles$m = makeStyles(function (theme) {
9642
9797
  return {
9643
9798
  opacityDiv: {
9644
9799
  height: 'calc(100% - 5px)',
@@ -9698,8 +9853,7 @@ var OpacitySelect = function OpacitySelect(_ref) {
9698
9853
  onLayerChangeOpacity = _ref.onLayerChangeOpacity,
9699
9854
  _ref$isEnabled = _ref.isEnabled,
9700
9855
  isEnabled = _ref$isEnabled === void 0 ? true : _ref$isEnabled;
9701
- var classes = useStyles$n();
9702
- var sliderClasses = sliderStyles();
9856
+ var classes = useStyles$m();
9703
9857
 
9704
9858
  var _React$useState = React.useState(false),
9705
9859
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -9765,8 +9919,8 @@ var OpacitySelect = function OpacitySelect(_ref) {
9765
9919
  onBlur: onBlur
9766
9920
  }, currentOpacityText)), open ? /*#__PURE__*/React.createElement("div", {
9767
9921
  className: classes.sliderBackground
9768
- }, /*#__PURE__*/React.createElement("div", {
9769
- className: sliderClasses.sliderHeader
9922
+ }, /*#__PURE__*/React.createElement(Box, {
9923
+ sx: sliderHeaderStyle
9770
9924
  }, "Opacity"), /*#__PURE__*/React.createElement(CustomSlider, {
9771
9925
  "data-testid": "opacitySlider",
9772
9926
  orientation: "vertical",
@@ -9915,44 +10069,37 @@ var RenderStyles = function RenderStyles(_ref) {
9915
10069
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
9916
10070
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
9917
10071
  * */
9918
- var useStyles$m = makeStyles(function (theme) {
9919
- return createStyles({
9920
- svgIcon: {
9921
- fill: function fill(_ref) {
9922
- var isActive = _ref.isActive,
9923
- isEnabled = _ref.isEnabled;
9924
-
9925
- if (isActive) {
9926
- return theme.palette.common.white;
9927
- }
9928
10072
 
9929
- if (isEnabled) {
9930
- return theme.palette.geowebColors.buttons.flat["default"].color;
9931
- }
10073
+ var makeIconStyle = function makeIconStyle(isActive, isEnabled) {
10074
+ return {
10075
+ color: function color() {
10076
+ if (isActive) {
10077
+ return 'common.white';
10078
+ }
9932
10079
 
9933
- return theme.palette.geowebColors.buttons.flat.disabled.color;
10080
+ if (isEnabled) {
10081
+ return 'geowebColors.buttons.flat.default.color';
9934
10082
  }
10083
+
10084
+ return 'geowebColors.buttons.flat.disabled.color';
9935
10085
  }
9936
- });
9937
- });
10086
+ };
10087
+ };
9938
10088
 
9939
- var ActivateLayer = function ActivateLayer(_ref2) {
9940
- var _ref2$tooltipTitle = _ref2.tooltipTitle,
9941
- tooltipTitle = _ref2$tooltipTitle === void 0 ? 'Leading layer' : _ref2$tooltipTitle,
9942
- onClickActivate = _ref2.onClickActivate,
9943
- _ref2$isActive = _ref2.isActive,
9944
- isActive = _ref2$isActive === void 0 ? false : _ref2$isActive,
9945
- _ref2$isEnabled = _ref2.isEnabled,
9946
- isEnabled = _ref2$isEnabled === void 0 ? true : _ref2$isEnabled;
9947
- var classes = useStyles$m({
9948
- isActive: isActive,
9949
- isEnabled: isEnabled
9950
- });
10089
+ var ActivateLayer = function ActivateLayer(_ref) {
10090
+ var _ref$tooltipTitle = _ref.tooltipTitle,
10091
+ tooltipTitle = _ref$tooltipTitle === void 0 ? 'Leading layer' : _ref$tooltipTitle,
10092
+ onClickActivate = _ref.onClickActivate,
10093
+ _ref$isActive = _ref.isActive,
10094
+ isActive = _ref$isActive === void 0 ? false : _ref$isActive,
10095
+ _ref$isEnabled = _ref.isEnabled,
10096
+ isEnabled = _ref$isEnabled === void 0 ? true : _ref$isEnabled;
10097
+ var iconStyle = makeIconStyle(isActive, isEnabled);
9951
10098
  return /*#__PURE__*/React.createElement(ManagerButton, {
9952
10099
  tooltipTitle: tooltipTitle,
9953
10100
  onClick: onClickActivate,
9954
10101
  icon: /*#__PURE__*/React.createElement(Flag, {
9955
- className: classes.svgIcon
10102
+ sx: iconStyle
9956
10103
  }),
9957
10104
  testId: "activateLayerButton",
9958
10105
  isActive: isActive
@@ -10939,6 +11086,15 @@ var constructListAvailableBaseLayers = function constructListAvailableBaseLayers
10939
11086
  }));
10940
11087
  }, baseLayersWithMapId);
10941
11088
  };
11089
+ var areAvailableBaseLayersSame = function areAvailableBaseLayersSame(availableBaseLayerList, newBaseLayerList) {
11090
+ var availableList = availableBaseLayerList.map(function (layer) {
11091
+ return layer.name;
11092
+ });
11093
+ var newList = newBaseLayerList.map(function (layer) {
11094
+ return layer.name;
11095
+ });
11096
+ return isEqual(availableList, newList);
11097
+ };
10942
11098
 
10943
11099
  var BaseLayersConnect = function BaseLayersConnect(_ref) {
10944
11100
  var mapId = _ref.mapId,
@@ -10952,14 +11108,16 @@ var BaseLayersConnect = function BaseLayersConnect(_ref) {
10952
11108
  });
10953
11109
  React.useEffect(function () {
10954
11110
  // Set initial availableBaseLayers only if none set for that map yet
10955
- if (currentAvailableBaseLayers.length < 1) {
10956
- var availableBaseLayersToBeAdded = constructListAvailableBaseLayers(selectedBaseLayers, preloadedAvailableBaseLayers, mapId);
10957
- dispatch(layerActions.addAvailableBaseLayers({
11111
+ var availableBaseLayersToBeAdded = constructListAvailableBaseLayers(selectedBaseLayers, preloadedAvailableBaseLayers, mapId);
11112
+ var areBaseLayersSame = areAvailableBaseLayersSame(availableBaseLayersToBeAdded, currentAvailableBaseLayers);
11113
+
11114
+ if (!areBaseLayersSame) {
11115
+ dispatch(layerActions.setAvailableBaseLayers({
10958
11116
  layers: availableBaseLayersToBeAdded
10959
11117
  }));
10960
11118
  } // eslint-disable-next-line react-hooks/exhaustive-deps
10961
11119
 
10962
- }, [mapId]);
11120
+ }, [mapId, preloadedAvailableBaseLayers]);
10963
11121
 
10964
11122
  var onChangeBaseLayers = function onChangeBaseLayers(newSelectedLayerId) {
10965
11123
  var newBaseLayer = currentAvailableBaseLayers.filter(function (layer) {
@@ -11259,23 +11417,22 @@ var ServicePopup = function ServicePopup(_ref) {
11259
11417
  hideBackdrop = _ref$hideBackdrop === void 0 ? false : _ref$hideBackdrop,
11260
11418
  isOpen = _ref.isOpen,
11261
11419
  closePopup = _ref.closePopup,
11420
+ serviceId = _ref.serviceId,
11262
11421
  url = _ref.url,
11263
11422
  services = _ref.services,
11264
11423
  serviceSetLayers = _ref.serviceSetLayers;
11265
11424
 
11266
- var _a, _b;
11267
-
11268
- var _React$useState = React.useState(servicePopupVariant !== 'edit' || services === undefined ? '' : (_a = services[url]) === null || _a === void 0 ? void 0 : _a.name),
11425
+ var _React$useState = React.useState(''),
11269
11426
  _React$useState2 = _slicedToArray(_React$useState, 2),
11270
11427
  serviceName = _React$useState2[0],
11271
11428
  setServiceName = _React$useState2[1];
11272
11429
 
11273
- var _React$useState3 = React.useState(servicePopupVariant === 'add' || url === undefined ? '' : url),
11430
+ var _React$useState3 = React.useState(''),
11274
11431
  _React$useState4 = _slicedToArray(_React$useState3, 2),
11275
11432
  serviceUrl = _React$useState4[0],
11276
11433
  setServiceUrl = _React$useState4[1];
11277
11434
 
11278
- var _React$useState5 = React.useState(servicePopupVariant !== 'edit' || services === undefined ? '' : (_b = services[url]) === null || _b === void 0 ? void 0 : _b["abstract"]),
11435
+ var _React$useState5 = React.useState(''),
11279
11436
  _React$useState6 = _slicedToArray(_React$useState5, 2),
11280
11437
  _abstract = _React$useState6[0],
11281
11438
  setAbstract = _React$useState6[1];
@@ -11310,6 +11467,19 @@ var ServicePopup = function ServicePopup(_ref) {
11310
11467
  serviceUrlHelperText = _React$useState18[0],
11311
11468
  setServiceUrlHelperText = _React$useState18[1];
11312
11469
 
11470
+ React.useEffect(function () {
11471
+ var _a;
11472
+
11473
+ if (servicePopupVariant === 'edit') {
11474
+ setServiceName(((_a = services[serviceId]) === null || _a === void 0 ? void 0 : _a.serviceName) || '');
11475
+ setServiceUrl(url || '');
11476
+ }
11477
+
11478
+ if (servicePopupVariant === 'save') {
11479
+ setServiceUrl(url || '');
11480
+ }
11481
+ }, [serviceId, services, url, servicePopupVariant, isOpen]);
11482
+
11313
11483
  var validateServiceUrl = function validateServiceUrl(url) {
11314
11484
  if (url === '' || url === null || typeof url === 'undefined') return false;
11315
11485
  var matcher = /^(?:\w+:)?\/\/([^\s.]+\.\S{2}|[0-9a-zA-Z]+[:?\d]*)\S*$/;
@@ -11396,11 +11566,10 @@ var ServicePopup = function ServicePopup(_ref) {
11396
11566
 
11397
11567
  var ServiceNameInRedux = function ServiceNameInRedux() {
11398
11568
  if (servicePopupVariant === 'add' || servicePopupVariant === 'save') {
11399
- for (var service in services) {
11400
- if (services && services[service].name.toLowerCase() === serviceName.toLowerCase()) return true;
11401
- }
11402
-
11403
- return false;
11569
+ var foundName = Object.keys(services).find(function (serviceId) {
11570
+ return services[serviceId].serviceName.toLowerCase() === (serviceName === null || serviceName === void 0 ? void 0 : serviceName.toLowerCase());
11571
+ });
11572
+ return foundName !== undefined;
11404
11573
  }
11405
11574
 
11406
11575
  return false;
@@ -11408,11 +11577,10 @@ var ServicePopup = function ServicePopup(_ref) {
11408
11577
 
11409
11578
  var UrlInRedux = function UrlInRedux() {
11410
11579
  if (servicePopupVariant === 'add' || servicePopupVariant === 'save') {
11411
- if (services && services[serviceUrl]) {
11412
- return true;
11413
- }
11414
-
11415
- return false;
11580
+ var foundUrl = Object.keys(services).find(function (serviceId) {
11581
+ return services[serviceId].serviceUrl === serviceUrl;
11582
+ });
11583
+ return foundUrl !== undefined;
11416
11584
  }
11417
11585
 
11418
11586
  return false;
@@ -11420,6 +11588,7 @@ var ServicePopup = function ServicePopup(_ref) {
11420
11588
 
11421
11589
 
11422
11590
  React.useEffect(function () {
11591
+ if (serviceName === undefined) return;
11423
11592
  setServiceNameHelperText('');
11424
11593
 
11425
11594
  if (ServiceNameInRedux()) {
@@ -11435,7 +11604,7 @@ var ServicePopup = function ServicePopup(_ref) {
11435
11604
  React.useEffect(function () {
11436
11605
  setServiceUrlHelperText('');
11437
11606
 
11438
- if (serviceUrl.length > 0 && !validateServiceUrl(serviceUrl)) {
11607
+ if (serviceUrl && serviceUrl.length > 0 && !validateServiceUrl(serviceUrl)) {
11439
11608
  setServiceUrlHasError(true);
11440
11609
  setServiceUrlHelperText('Error: Not a valid URL.');
11441
11610
  } else if (UrlInRedux()) {
@@ -11522,7 +11691,8 @@ var ServicePopup = function ServicePopup(_ref) {
11522
11691
  return setAbstract(event.target.value);
11523
11692
  },
11524
11693
  value: _abstract,
11525
- "data-testid": "abstractTextField"
11694
+ "data-testid": "abstractTextField",
11695
+ disabled: true
11526
11696
  })), /*#__PURE__*/React.createElement(DialogActions, {
11527
11697
  sx: style$1.footerContent
11528
11698
  }, /*#__PURE__*/React.createElement(Button, {
@@ -11578,10 +11748,11 @@ var ServicePopupConnect = function ServicePopupConnect(_ref) {
11578
11748
  hideBackdrop = _ref.hideBackdrop,
11579
11749
  isOpen = _ref.isOpen,
11580
11750
  closePopup = _ref.closePopup,
11751
+ serviceId = _ref.serviceId,
11581
11752
  url = _ref.url;
11582
11753
  var dispatch = useDispatch();
11583
11754
  var services = useSelector(function (store) {
11584
- return getServices(store);
11755
+ return getActiveServices(store);
11585
11756
  });
11586
11757
  var serviceSetLayers = React__default.useCallback(function (payload) {
11587
11758
  dispatch(serviceActions.serviceSetLayers(payload));
@@ -11591,9 +11762,10 @@ var ServicePopupConnect = function ServicePopupConnect(_ref) {
11591
11762
  hideBackdrop: hideBackdrop,
11592
11763
  isOpen: isOpen,
11593
11764
  closePopup: closePopup,
11594
- url: url,
11765
+ serviceId: serviceId,
11595
11766
  services: services,
11596
- serviceSetLayers: serviceSetLayers
11767
+ serviceSetLayers: serviceSetLayers,
11768
+ url: url
11597
11769
  });
11598
11770
  };
11599
11771
 
@@ -11938,16 +12110,29 @@ var LayerList = function LayerList(_ref) {
11938
12110
  mapLayers = _ref.mapLayers,
11939
12111
  keywordIds = _ref.keywordIds,
11940
12112
  allKeywordsActive = _ref.allKeywordsActive;
12113
+ var layerSelectFilterHeight = 199;
11941
12114
 
11942
12115
  var _React$useState = React.useState(0),
11943
12116
  _React$useState2 = _slicedToArray(_React$useState, 2),
11944
12117
  numberOfLayers = _React$useState2[0],
11945
12118
  setNumberOfLayers = _React$useState2[1];
11946
12119
 
12120
+ var _React$useState3 = React.useState([]),
12121
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
12122
+ layersFilteredFromService = _React$useState4[0],
12123
+ setLayersFilteredFromService = _React$useState4[1];
12124
+
11947
12125
  React.useEffect(function () {
11948
12126
  setNumberOfLayers(serviceIds.reduce(function (totalNumberOfLayers, serviceId) {
11949
12127
  return totalNumberOfLayers + filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString).length;
11950
12128
  }, 0));
12129
+ setLayersFilteredFromService(serviceIds.reduce(function (layerList, serviceId) {
12130
+ return layerList.concat(filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString).map(function (layer) {
12131
+ return Object.assign(Object.assign({}, layer), {
12132
+ serviceId: serviceId
12133
+ });
12134
+ }));
12135
+ }, []));
11951
12136
  }, [serviceIds, keywordIds, services, searchString, allKeywordsActive]);
11952
12137
  return /*#__PURE__*/React.createElement(Box, {
11953
12138
  "data-testid": "layerList"
@@ -11956,25 +12141,26 @@ var LayerList = function LayerList(_ref) {
11956
12141
  marginBottom: '4px',
11957
12142
  fontSize: '12px'
11958
12143
  }
11959
- }, numberOfLayers, " results"), /*#__PURE__*/React.createElement(Box, {
11960
- sx: {
11961
- height: layerSelectHeight - 199,
11962
- overflow: 'auto'
11963
- }
11964
- }, serviceIds.map(function (serviceId) {
11965
- return filterLayersFromService(serviceId, services, keywordIds, allKeywordsActive, searchString).map(function (layer, layerIndex) {
11966
- return /*#__PURE__*/React.createElement(LayerListRow, {
11967
- key: layer.name,
11968
- layer: layer,
11969
- layerIndex: layerIndex,
11970
- service: services[serviceId],
11971
- serviceUrl: services[serviceId].serviceUrl,
11972
- addLayer: addLayer,
11973
- deleteLayer: deleteLayer,
11974
- mapLayers: mapLayers
11975
- });
11976
- });
11977
- })));
12144
+ }, numberOfLayers, " results"), /*#__PURE__*/React.createElement(FixedSizeList, {
12145
+ height: layerSelectHeight - layerSelectFilterHeight,
12146
+ itemCount: numberOfLayers,
12147
+ itemSize: 68
12148
+ }, function (_ref2) {
12149
+ var index = _ref2.index,
12150
+ style = _ref2.style;
12151
+ return /*#__PURE__*/React.createElement("div", {
12152
+ style: style,
12153
+ key: layersFilteredFromService[index].name
12154
+ }, /*#__PURE__*/React.createElement(LayerListRow, {
12155
+ layer: layersFilteredFromService[index],
12156
+ layerIndex: index,
12157
+ service: services[layersFilteredFromService[index].serviceId],
12158
+ serviceUrl: services[layersFilteredFromService[index].serviceId].serviceUrl,
12159
+ addLayer: addLayer,
12160
+ deleteLayer: deleteLayer,
12161
+ mapLayers: mapLayers
12162
+ }));
12163
+ }));
11978
12164
  };
11979
12165
 
11980
12166
  /* *
@@ -12421,28 +12607,32 @@ var styles = {
12421
12607
 
12422
12608
  var ServiceOptionsDialog = function ServiceOptionsDialog(_ref) {
12423
12609
  var services = _ref.services,
12424
- mapStoreRemoveService = _ref.mapStoreRemoveService,
12425
- _ref$layers = _ref.layers,
12426
- layers = _ref$layers === void 0 ? [] : _ref$layers;
12610
+ mapStoreRemoveService = _ref.mapStoreRemoveService;
12427
12611
 
12428
12612
  var _React$useState = React.useState(false),
12429
12613
  _React$useState2 = _slicedToArray(_React$useState, 2),
12430
- addServiceisOpen = _React$useState2[0],
12614
+ addServiceIsOpen = _React$useState2[0],
12431
12615
  setAddServiceIsOpen = _React$useState2[1];
12432
12616
 
12617
+ var _React$useState3 = React.useState({
12618
+ isOpen: false,
12619
+ serviceId: '',
12620
+ serviceUrl: ''
12621
+ }),
12622
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
12623
+ editServiceIsOpen = _React$useState4[0],
12624
+ setEditServiceIsOpen = _React$useState4[1];
12625
+
12433
12626
  var openAddService = function openAddService() {
12434
12627
  setAddServiceIsOpen(true);
12435
12628
  };
12436
12629
 
12437
12630
  var closePopup = function closePopup() {
12438
12631
  setAddServiceIsOpen(false);
12439
- };
12440
-
12441
- var isDisabled = function isDisabled(service) {
12442
- return layers.some(function (layer) {
12443
- return layer.service && layer.service.includes(service);
12444
- }) || preloadedDefaultMapServices.some(function (defaultMapService) {
12445
- return defaultMapService.url && defaultMapService.url.includes(service);
12632
+ setEditServiceIsOpen({
12633
+ isOpen: false,
12634
+ serviceId: '',
12635
+ serviceUrl: ''
12446
12636
  });
12447
12637
  };
12448
12638
 
@@ -12471,16 +12661,25 @@ var ServiceOptionsDialog = function ServiceOptionsDialog(_ref) {
12471
12661
  marginRight: '-10px'
12472
12662
  }
12473
12663
  }, /*#__PURE__*/React.createElement(Tooltip, {
12474
- title: "Edit Service"
12664
+ title: "Edit Service",
12665
+ disableHoverListener: !services[serviceId].isUserAddedService
12475
12666
  }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(IconButton, {
12476
- disabled: isDisabled(services[serviceId].serviceUrl),
12667
+ disabled: !services[serviceId].isUserAddedService,
12477
12668
  "data-testid": "openEditServiceButton",
12478
- size: "large"
12669
+ size: "large",
12670
+ onClick: function onClick() {
12671
+ setEditServiceIsOpen({
12672
+ isOpen: true,
12673
+ serviceId: serviceId,
12674
+ serviceUrl: services[serviceId].serviceUrl
12675
+ });
12676
+ }
12479
12677
  }, /*#__PURE__*/React.createElement(Edit, null)))), /*#__PURE__*/React.createElement(Tooltip, {
12480
- title: "Delete Service"
12678
+ title: "Delete Service",
12679
+ disableHoverListener: !services[serviceId].isUserAddedService
12481
12680
  }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(IconButton, {
12482
12681
  size: "large",
12483
- disabled: isDisabled(services[serviceId].serviceUrl),
12682
+ disabled: !services[serviceId].isUserAddedService,
12484
12683
  onClick: function onClick() {
12485
12684
  return mapStoreRemoveService(serviceId, services[serviceId].serviceUrl);
12486
12685
  },
@@ -12494,10 +12693,16 @@ var ServiceOptionsDialog = function ServiceOptionsDialog(_ref) {
12494
12693
  sx: styles.button,
12495
12694
  variant: "tertiary",
12496
12695
  startIcon: /*#__PURE__*/React.createElement(Add, null)
12497
- }, "Add a new service"))), addServiceisOpen && /*#__PURE__*/React.createElement(ServicePopupConnect, {
12696
+ }, "Add a new service"))), addServiceIsOpen && /*#__PURE__*/React.createElement(ServicePopupConnect, {
12498
12697
  servicePopupVariant: "add",
12499
- isOpen: addServiceisOpen,
12698
+ isOpen: addServiceIsOpen,
12500
12699
  closePopup: closePopup
12700
+ }), editServiceIsOpen && /*#__PURE__*/React.createElement(ServicePopupConnect, {
12701
+ servicePopupVariant: "edit",
12702
+ isOpen: editServiceIsOpen.isOpen,
12703
+ closePopup: closePopup,
12704
+ serviceId: editServiceIsOpen.serviceId,
12705
+ url: editServiceIsOpen.serviceUrl
12501
12706
  }));
12502
12707
  };
12503
12708
 
@@ -12520,9 +12725,6 @@ var ServiceOptionsDialog = function ServiceOptionsDialog(_ref) {
12520
12725
 
12521
12726
  var ServiceOptionsDialogConnect = function ServiceOptionsDialogConnect() {
12522
12727
  var dispatch = useDispatch();
12523
- var allLayers = useSelector(function (store) {
12524
- return getAllLayers(store);
12525
- });
12526
12728
  var mapStoreRemoveService = React.useCallback(function (serviceId, serviceUrl) {
12527
12729
  dispatch(serviceActions.mapStoreRemoveService({
12528
12730
  id: serviceId,
@@ -12534,7 +12736,6 @@ var ServiceOptionsDialogConnect = function ServiceOptionsDialogConnect() {
12534
12736
  });
12535
12737
  return /*#__PURE__*/React.createElement(ServiceOptionsDialog, {
12536
12738
  services: services,
12537
- layers: allLayers,
12538
12739
  mapStoreRemoveService: mapStoreRemoveService
12539
12740
  });
12540
12741
  };
@@ -12796,40 +12997,6 @@ var KeywordFilterResultsListItemConnect = function KeywordFilterResultsListItemC
12796
12997
  });
12797
12998
  };
12798
12999
 
12799
- /* *
12800
- * Licensed under the Apache License, Version 2.0 (the "License");
12801
- * you may not use this file except in compliance with the License.
12802
- * You may obtain a copy of the License at
12803
- *
12804
- * http://www.apache.org/licenses/LICENSE-2.0
12805
- *
12806
- * Unless required by applicable law or agreed to in writing, software
12807
- * distributed under the License is distributed on an "AS IS" BASIS,
12808
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12809
- * See the License for the specific language governing permissions and
12810
- * limitations under the License.
12811
- *
12812
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12813
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
12814
- * */
12815
- var CustomSwitch = withStyles(function (theme) {
12816
- return {
12817
- switchBase: {
12818
- '&$checked': {
12819
- color: theme.palette.geowebColors.customSlider.thumb
12820
- },
12821
- '&$checked + $track': {
12822
- backgroundColor: theme.palette.geowebColors.buttons.primary["default"].fill
12823
- }
12824
- },
12825
- checked: {},
12826
- track: {
12827
- backgroundColor: theme.palette.geowebColors.customSlider.switchTrackDisabled,
12828
- opacity: '1 !important'
12829
- }
12830
- };
12831
- })(Switch);
12832
-
12833
13000
  /* *
12834
13001
  * Licensed under the Apache License, Version 2.0 (the "License");
12835
13002
  * you may not use this file except in compliance with the License.
@@ -12866,7 +13033,7 @@ var KeywordFilterSelectAllSwitchConnect = function KeywordFilterSelectAllSwitchC
12866
13033
  keywords: keywords
12867
13034
  }));
12868
13035
  }, [allKeywordIds, allKeywordsActive, checkedKeywordIds, dispatch]);
12869
- return /*#__PURE__*/React.createElement(CustomSwitch, {
13036
+ return /*#__PURE__*/React.createElement(Switch, {
12870
13037
  checked: allKeywordsActive,
12871
13038
  onChange: toggleKeywords,
12872
13039
  "data-testid": "customSwitch"
@@ -13158,6 +13325,11 @@ var LayerSelectConnect = function LayerSelectConnect(_ref) {
13158
13325
  var serviceSetLayers = React.useCallback(function (payload) {
13159
13326
  dispatch(serviceActions.serviceSetLayers(payload));
13160
13327
  }, [dispatch]);
13328
+
13329
+ var checkIfUserAddedService = function checkIfUserAddedService(service) {
13330
+ return !!service.isUserAddedService;
13331
+ };
13332
+
13161
13333
  React.useEffect(function () {
13162
13334
  if (isOpenInStore && preloadedServices && preloadedServices.length > 0) {
13163
13335
  mergePresetsAndUserAddedServices(preloadedServices, getUserAddedServices()).forEach(function (service) {
@@ -13169,7 +13341,7 @@ var LayerSelectConnect = function LayerSelectConnect(_ref) {
13169
13341
  name: service.name,
13170
13342
  serviceUrl: service.url,
13171
13343
  layers: layers,
13172
- isUserAddedService: false
13344
+ isUserAddedService: checkIfUserAddedService(service)
13173
13345
  });
13174
13346
  }
13175
13347
  })["catch"](function () {
@@ -13343,15 +13515,10 @@ var MapControlButton = function MapControlButton(_a) {
13343
13515
  return /*#__PURE__*/React.createElement(Tooltip, {
13344
13516
  placement: placement,
13345
13517
  title: title
13346
- }, /*#__PURE__*/React.createElement(Box, {
13347
- component: "span",
13348
- sx: {
13349
- marginBottom: '8px'
13350
- }
13351
13518
  }, /*#__PURE__*/React.createElement(ToolButton, Object.assign({
13352
13519
  onClick: onClick,
13353
13520
  active: isActive
13354
- }, props), children)));
13521
+ }, props), children));
13355
13522
  };
13356
13523
 
13357
13524
  /* *
@@ -14170,6 +14337,8 @@ var MultiMapMultiDimensionSelectConnect = function MultiMapMultiDimensionSelectC
14170
14337
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
14171
14338
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
14172
14339
  * */
14340
+ var titleOn = 'Auto update on';
14341
+ var titleOff = 'Auto update off';
14173
14342
 
14174
14343
  var AutoUpdateButton = function AutoUpdateButton(_ref) {
14175
14344
  var _ref$toggleAutoUpdate = _ref.toggleAutoUpdate,
@@ -14181,10 +14350,9 @@ var AutoUpdateButton = function AutoUpdateButton(_ref) {
14181
14350
  _ref$disabled = _ref.disabled,
14182
14351
  disabled = _ref$disabled === void 0 ? false : _ref$disabled;
14183
14352
  return /*#__PURE__*/React.createElement(Tooltip, {
14184
- title: isAutoUpdating ? 'Auto update on' : 'Auto update off'
14185
- }, /*#__PURE__*/React.createElement("span", {
14353
+ title: isAutoUpdating ? titleOn : titleOff,
14186
14354
  "data-testid": "autoUpdateButtonTooltip"
14187
- }, /*#__PURE__*/React.createElement(ToolButton, {
14355
+ }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
14188
14356
  active: isAutoUpdating,
14189
14357
  disabled: disabled,
14190
14358
  onClick: function onClick() {
@@ -14216,12 +14384,12 @@ var useStyles$c = makeStyles(function (theme) {
14216
14384
  }
14217
14385
  };
14218
14386
  });
14387
+ var speedTooltipTitle = 'Speed';
14219
14388
 
14220
14389
  var SpeedButton = function SpeedButton(_ref) {
14221
14390
  var animationDelay = _ref.animationDelay,
14222
14391
  setMapAnimationDelay = _ref.setMapAnimationDelay;
14223
14392
  var classes = useStyles$c();
14224
- var sliderClasses = sliderStyles();
14225
14393
 
14226
14394
  var _React$useState = React.useState(false),
14227
14395
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -14277,17 +14445,17 @@ var SpeedButton = function SpeedButton(_ref) {
14277
14445
  return /*#__PURE__*/React.createElement("div", {
14278
14446
  className: classes.speedButtonDiv
14279
14447
  }, /*#__PURE__*/React.createElement(Tooltip, {
14280
- title: "Speed"
14281
- }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
14448
+ title: speedTooltipTitle
14449
+ }, /*#__PURE__*/React.createElement(ToolButton, {
14282
14450
  onClick: onClickButton,
14283
14451
  active: true,
14284
14452
  "data-testid": "speedButton"
14285
14453
  }, /*#__PURE__*/React.createElement(TextIcon, {
14286
14454
  text: text
14287
- })))), open ? /*#__PURE__*/React.createElement("div", {
14455
+ }))), open ? /*#__PURE__*/React.createElement("div", {
14288
14456
  className: classes.sliderBackground
14289
- }, /*#__PURE__*/React.createElement("div", {
14290
- className: sliderClasses.sliderHeader
14457
+ }, /*#__PURE__*/React.createElement(Box, {
14458
+ sx: sliderHeaderStyle
14291
14459
  }, "Speed"), /*#__PURE__*/React.createElement(CustomSlider, {
14292
14460
  "data-testid": "speedSlider",
14293
14461
  orientation: "vertical",
@@ -14448,31 +14616,7 @@ var useStyles$b = makeStyles(function (theme) {
14448
14616
  disabled: {}
14449
14617
  };
14450
14618
  });
14451
- var TimeStepSwitch = withStyles(function (theme) {
14452
- return {
14453
- root: {
14454
- marginLeft: '18px'
14455
- },
14456
- thumb: {
14457
- width: 20,
14458
- height: 20,
14459
- margin: '0 0 0 0'
14460
- },
14461
- switchBase: {
14462
- '&$checked': {
14463
- color: theme.palette.geowebColors.customSlider.thumb
14464
- },
14465
- '&$checked + $track': {
14466
- backgroundColor: theme.palette.geowebColors.customSlider.switchTrack
14467
- }
14468
- },
14469
- checked: {},
14470
- track: {
14471
- backgroundColor: theme.palette.geowebColors.customSlider.switchTrackDisabled,
14472
- opacity: '1 !important'
14473
- }
14474
- };
14475
- })(Switch);
14619
+ var timeStepTitle = 'Time step';
14476
14620
 
14477
14621
  var TimeStepButton = function TimeStepButton(_ref) {
14478
14622
  var timeStep = _ref.timeStep,
@@ -14487,7 +14631,6 @@ var TimeStepButton = function TimeStepButton(_ref) {
14487
14631
  return null;
14488
14632
  } : _ref$onToggleTimestep;
14489
14633
  var classes = useStyles$b();
14490
- var sliderClasses = sliderStyles();
14491
14634
 
14492
14635
  var _React$useState = React.useState(false),
14493
14636
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -14545,8 +14688,8 @@ var TimeStepButton = function TimeStepButton(_ref) {
14545
14688
  return /*#__PURE__*/React.createElement("div", {
14546
14689
  className: classes.timeStepDiv
14547
14690
  }, /*#__PURE__*/React.createElement(Tooltip, {
14548
- title: "Time step"
14549
- }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
14691
+ title: timeStepTitle
14692
+ }, /*#__PURE__*/React.createElement(ToolButton, {
14550
14693
  active: true,
14551
14694
  onClick: onClickButton,
14552
14695
  "data-testid": "timeStepButton",
@@ -14554,10 +14697,10 @@ var TimeStepButton = function TimeStepButton(_ref) {
14554
14697
  }, /*#__PURE__*/React.createElement(FastForward, null), /*#__PURE__*/React.createElement(TextIcon, {
14555
14698
  text: currentMark && currentMark.text || '',
14556
14699
  "data-testid": "timeStepButtonText"
14557
- })))), open ? /*#__PURE__*/React.createElement("div", {
14700
+ }))), open ? /*#__PURE__*/React.createElement("div", {
14558
14701
  className: classes.sliderBackground
14559
- }, /*#__PURE__*/React.createElement("div", {
14560
- className: sliderClasses.sliderHeader
14702
+ }, /*#__PURE__*/React.createElement(Box, {
14703
+ sx: sliderHeaderStyle
14561
14704
  }, "Time step"), /*#__PURE__*/React.createElement(CustomSlider, {
14562
14705
  "data-testid": "timeStepButtonSlider",
14563
14706
  orientation: "vertical",
@@ -14575,14 +14718,17 @@ var TimeStepButton = function TimeStepButton(_ref) {
14575
14718
  }, /*#__PURE__*/React.createElement("span", {
14576
14719
  "data-testid": "timestepAutoSwitchTooltip"
14577
14720
  }, /*#__PURE__*/React.createElement(FormControlLabel, {
14578
- control: /*#__PURE__*/React.createElement(TimeStepSwitch, {
14721
+ control: /*#__PURE__*/React.createElement(Switch, {
14579
14722
  checked: isTimestepAuto,
14580
14723
  onChange: function onChange() {
14581
14724
  return onToggleTimestepAuto();
14582
14725
  },
14583
14726
  disabled: disabled,
14584
14727
  id: "timestepAutoSwitch",
14585
- disableRipple: true
14728
+ disableRipple: true,
14729
+ sx: {
14730
+ marginLeft: '18px'
14731
+ }
14586
14732
  }),
14587
14733
  label: "Auto",
14588
14734
  labelPlacement: "end",
@@ -14626,13 +14772,13 @@ var OptionsMenuButton = function OptionsMenuButton(_ref) {
14626
14772
  var id = open ? 'simple-popover' : undefined;
14627
14773
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Tooltip, {
14628
14774
  title: "Options"
14629
- }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ToolButton, {
14775
+ }, /*#__PURE__*/React.createElement(ToolButton, {
14630
14776
  onClick: onClickButton,
14631
14777
  "data-testid": "optionsMenuButton",
14632
14778
  active: open
14633
14779
  }, /*#__PURE__*/React.createElement(Options, {
14634
14780
  "data-testid": "optionsIcon"
14635
- })))), /*#__PURE__*/React.createElement(OptionsPopOver, {
14781
+ }))), /*#__PURE__*/React.createElement(OptionsPopOver, {
14636
14782
  id: id,
14637
14783
  open: open,
14638
14784
  "data-testid": "optionsMenuPopOver",
@@ -20405,8 +20551,10 @@ var ReactMapView = /*#__PURE__*/function (_React$Component) {
20405
20551
 
20406
20552
 
20407
20553
  if (!prevProps || prevProps.disableMapPin !== props.disableMapPin) {
20408
- if (!(props.disableMapPin === undefined)) {
20409
- this.adaguc.webMapJS.getMapPin().toggleDisableMapPin();
20554
+ if (props.disableMapPin === true) {
20555
+ this.adaguc.webMapJS.getMapPin().setMapPinDisabled();
20556
+ } else if (props.disableMapPin === false) {
20557
+ this.adaguc.webMapJS.getMapPin().setMapPinEnabled();
20410
20558
  }
20411
20559
  }
20412
20560
  /* Change the animation delay */
@@ -20751,7 +20899,10 @@ var ReactMapView = /*#__PURE__*/function (_React$Component) {
20751
20899
  _this4.onUpdateBBoxListener(newBbox);
20752
20900
  }, true);
20753
20901
  this.adaguc.webMapJS.addListener('onsetmappin', function (mapPinLatLonCoordinate) {
20754
- if (onMapPinChangeLocation) {
20902
+ // only change location when mapPin is visible and enabled
20903
+ if (onMapPinChangeLocation && // eslint-disable-next-line react/destructuring-assignment
20904
+ _this4.props.displayMapPin && // eslint-disable-next-line react/destructuring-assignment
20905
+ !_this4.props.disableMapPin) {
20755
20906
  onMapPinChangeLocation({
20756
20907
  mapPinLocation: {
20757
20908
  lat: mapPinLatLonCoordinate.lat,
@@ -20866,6 +21017,7 @@ ReactMapView.defaultProps = {
20866
21017
  },
20867
21018
  shouldAutoFetch: true,
20868
21019
  displayMapPin: false,
21020
+ disableMapPin: false,
20869
21021
  onMount: function onMount() {
20870
21022
  return null;
20871
21023
  },
@@ -21390,7 +21542,8 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_a) {
21390
21542
  displayDimensionSelectButtonInMap = _a$displayDimensionSe === void 0 ? true : _a$displayDimensionSe,
21391
21543
  _a$multiLegend = _a.multiLegend,
21392
21544
  multiLegend = _a$multiLegend === void 0 ? true : _a$multiLegend,
21393
- props = __rest(_a, ["id", "title", "layers", "shouldAutoUpdate", "shouldAnimate", "bbox", "srs", "shouldShowZoomControls", "displayMapPin", "showTimeSlider", "disableTimeSlider", "displayTimeInMap", "displayLayerManagerAndLegendButtonInMap", "displayDimensionSelectButtonInMap", "multiLegend"]);
21545
+ shouldShowLayerManager = _a.shouldShowLayerManager,
21546
+ props = __rest(_a, ["id", "title", "layers", "shouldAutoUpdate", "shouldAnimate", "bbox", "srs", "shouldShowZoomControls", "displayMapPin", "showTimeSlider", "disableTimeSlider", "displayTimeInMap", "displayLayerManagerAndLegendButtonInMap", "displayDimensionSelectButtonInMap", "multiLegend", "shouldShowLayerManager"]);
21394
21547
 
21395
21548
  var dispatch = useDispatch();
21396
21549
  var mapId = React__default.useRef(id || generateMapId()).current;
@@ -21419,7 +21572,17 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_a) {
21419
21572
  dispatch(mapActions$1.setMapPreset({
21420
21573
  mapId: mapId,
21421
21574
  initialProps: initialProps
21422
- })); // eslint-disable-next-line react-hooks/exhaustive-deps
21575
+ }));
21576
+
21577
+ if (shouldShowLayerManager !== undefined) {
21578
+ dispatch(uiActions.setActiveMapIdForDialog({
21579
+ type: 'layerManager',
21580
+ mapId: mapId,
21581
+ setOpen: shouldShowLayerManager,
21582
+ source: 'app'
21583
+ }));
21584
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
21585
+
21423
21586
  }, []);
21424
21587
  return /*#__PURE__*/React__default.createElement(Box, {
21425
21588
  sx: {
@@ -22437,21 +22600,17 @@ var MapWarningProperties = function MapWarningProperties(_ref) {
22437
22600
  }
22438
22601
  }, /*#__PURE__*/React__default.createElement("h1", {
22439
22602
  "data-testid": "map-warning-properties-title"
22440
- }, selectedFeatureProperties.country), selectedFeatureProperties.details[0].event && /*#__PURE__*/React__default.createElement("pre", {
22441
- "data-testid": "map-warning-properties-row"
22442
- }, "Event: ", selectedFeatureProperties.details[0].event), selectedFeatureProperties.details[0].sent && /*#__PURE__*/React__default.createElement("pre", {
22443
- "data-testid": "map-warning-properties-row"
22444
- }, "Sent:", ' ', moment.utc(selectedFeatureProperties.details[0].sent).format('DD MMM YYYY, HH:mm'), ' ', "UTC"), selectedFeatureProperties.details[0].expires && /*#__PURE__*/React__default.createElement("pre", {
22603
+ }, selectedFeatureProperties.areaDesc), selectedFeatureProperties.areaDesc && /*#__PURE__*/React__default.createElement("pre", {
22445
22604
  "data-testid": "map-warning-properties-row"
22446
- }, "Expires:", ' ', moment.utc(selectedFeatureProperties.details[0].expires).format('DD MMM YYYY, HH:mm'), ' ', "UTC"), selectedFeatureProperties.details[0].web && /*#__PURE__*/React__default.createElement("pre", {
22605
+ }, "event: ", selectedFeatureProperties.languages[2].event), selectedFeatureProperties.onset && /*#__PURE__*/React__default.createElement("pre", {
22447
22606
  "data-testid": "map-warning-properties-row"
22448
- }, "Web: ", selectedFeatureProperties.details[0].web), selectedFeatureProperties.details[0].sender && /*#__PURE__*/React__default.createElement("pre", {
22607
+ }, "Sent:", ' ', moment.utc(selectedFeatureProperties.onset).format('DD MMM YYYY, HH:mm'), ' ', "UTC"), selectedFeatureProperties.expires && /*#__PURE__*/React__default.createElement("pre", {
22449
22608
  "data-testid": "map-warning-properties-row"
22450
- }, "Sender: ", selectedFeatureProperties.details[0].sender), selectedFeatureProperties.details[0].identifier && /*#__PURE__*/React__default.createElement("pre", {
22609
+ }, "Expires:", ' ', moment.utc(selectedFeatureProperties.expires).format('DD MMM YYYY, HH:mm'), ' ', "UTC"), selectedFeatureProperties.languages[2].senderName && /*#__PURE__*/React__default.createElement("pre", {
22451
22610
  "data-testid": "map-warning-properties-row"
22452
- }, "Identifier: ", selectedFeatureProperties.details[0].identifier), selectedFeatureProperties.details[0].area && /*#__PURE__*/React__default.createElement("pre", {
22611
+ }, "Sender: ", selectedFeatureProperties.languages[2].senderName), selectedFeatureProperties.identifier && /*#__PURE__*/React__default.createElement("pre", {
22453
22612
  "data-testid": "map-warning-properties-row"
22454
- }, "area: ", selectedFeatureProperties.details[0].area));
22613
+ }, "Identifier: ", selectedFeatureProperties.identifier));
22455
22614
  };
22456
22615
 
22457
22616
  /* *
@@ -22472,4 +22631,4 @@ var MapWarningProperties = function MapWarningProperties(_ref) {
22472
22631
  * */
22473
22632
  var mapActions = Object.assign(Object.assign(Object.assign({}, layerActions), mapActions$1), serviceActions);
22474
22633
 
22475
- export { ConfigurableMapConnect, CoreThemeProvider, CoreThemeStoreProvider, HarmonieTempAndPrecipPreset, LayerManagerConnect, LayerManagerMapButtonConnect, Legend, LegendConnect, LegendMapButtonConnect, MapControls, MapView, MapViewConnect, MapViewLayer, MapWarningProperties, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, ReactMapView, ReactMapViewLayer, SyncGroupViewerConnect, index as SyncGroups, TimeSliderConnect, ZoomControlConnect, ZoomControls, componentsLookUp, coreModuleConfig, dateFormat, defaultBbox, defaultConfigurations, filterBaseLayers, filterLayers, filterMapLayers, filterMapPresets, filterNonTimeDimensions, filterServices, generateLayerId, generateMapId, generateTimesliderId, getFirstTimeStepForLayerId, getInitialPresets, getLastTimeStepForLayerId, getNextTimeStepForLayerId, getPreviousTimeStepForLayerId, getWMJSDimensionForLayerAndDimension, getWMJSMapById, getWMJSTimeDimensionForLayerId, getWMLayerById, layerActions, reducer$5 as layerReducer, mapActions, moduleConfig as mapModuleConfig, selectors as mapSelectors, types$2 as mapTypes, utils as mapUtils, publicLayers, publicServices, registerWMJSMap, registerWMLayer, store, genericActions as syncGroupActions, synchronizationGroupConfig as synchronizationGroupModuleConfig, synchronizationGroupConfig as synchronizationGroupsConfig, testLayers, uiActions, uiModuleConfig, selectors$1 as uiSelectors, types as uiTypes, useStyles$2 as useStyles };
22634
+ export { ConfigurableMapConnect, CoreThemeProvider, CoreThemeStoreProvider, HarmonieTempAndPrecipPreset, LayerManagerConnect, LayerManagerMapButtonConnect, Legend, LegendConnect, LegendMapButtonConnect, MapControls, MapView, MapViewConnect, MapViewLayer, MapWarningProperties, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, ReactMapView, ReactMapViewLayer, SyncGroupViewerConnect, index as SyncGroups, TimeSliderConnect, ZoomControlConnect, ZoomControls, componentsLookUp, coreModuleConfig, dateFormat, defaultBbox, defaultConfigurations, filterLayers, filterMapPresets, filterNonTimeDimensions, filterServices, generateLayerId, generateMapId, generateTimesliderId, getFirstTimeStepForLayerId, getInitialAppPresets, getLastTimeStepForLayerId, getNextTimeStepForLayerId, getPreviousTimeStepForLayerId, getWMJSDimensionForLayerAndDimension, getWMJSMapById, getWMJSTimeDimensionForLayerId, getWMLayerById, layerActions, reducer$6 as layerReducer, mapActions, moduleConfig as mapModuleConfig, selectors as mapSelectors, types$2 as mapTypes, utils as mapUtils, parseBoolean, parseLayer, publicLayers, publicServices, registerWMJSMap, registerWMLayer, store, genericActions as syncGroupActions, synchronizationGroupConfig as synchronizationGroupModuleConfig, synchronizationGroupConfig as synchronizationGroupsConfig, testLayers, uiActions, uiModuleConfig, selectors$1 as uiSelectors, types as uiTypes, useStyles$2 as useStyles };