@opengeoweb/core 2.1.0 → 2.1.1

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 (30) hide show
  1. package/core.esm.js +712 -317
  2. package/core.umd.js +655 -257
  3. package/lib/components/ComponentsLookUp/componentsLookUp.d.ts +47 -0
  4. package/lib/components/ComponentsLookUp/componentsLookUp.stories.d.ts +7 -0
  5. package/lib/components/ComponentsLookUp/componentsLookup.spec.d.ts +1 -0
  6. package/lib/components/ComponentsLookUp/index.d.ts +1 -0
  7. package/lib/components/{SyncGroups → ConfigurableConnectedMap}/ConfigurableConnectedMap.d.ts +18 -2
  8. package/lib/components/ConfigurableConnectedMap/ConfigurableConnectedMap.spec.d.ts +1 -0
  9. package/lib/components/ConfigurableConnectedMap/ConfigurableConnectedMap.stories.d.ts +6 -0
  10. package/lib/components/ConfigurableConnectedMap/index.d.ts +1 -0
  11. package/lib/components/ConfigurableMapWithSlider/ConfigurableMapWithSliderConnect.d.ts +3 -0
  12. package/lib/components/LayerManager/DescriptionRow/DescriptionRow.d.ts +1 -0
  13. package/lib/components/LayerManager/LayerManager.d.ts +2 -0
  14. package/lib/components/LayerManager/LayerManager.stories.d.ts +7 -9
  15. package/lib/components/LayerManager/LayerManagerConnect.d.ts +1 -0
  16. package/lib/components/LayerManager/LayerManagerConnect.stories.d.ts +5 -0
  17. package/lib/components/LayerManager/LayerManagerStories.stories.d.ts +6 -0
  18. package/lib/components/LayerManager/LayerSelect/LayerSelectConnect.d.ts +2 -0
  19. package/lib/components/MapView/MapView.Error.stories.d.ts +4 -0
  20. package/lib/components/MultiMapDimensionSelect/DimensionSelectDialogConnect.stories.d.ts +25 -0
  21. package/lib/components/MultiMapDimensionSelect/MultiDimensionSelect.stories.d.ts +1 -0
  22. package/lib/components/TimeSlider/TimeSliderButtons/PlayButton/PlayButtonConnect.d.ts +1 -0
  23. package/lib/components/TimeSlider/TimeSliderButtons/SpeedButton/SpeedButton.d.ts +0 -2
  24. package/lib/components/TimeSlider/TimeSliderUtils.d.ts +7 -0
  25. package/lib/index.d.ts +2 -1
  26. package/lib/store/mapStore/map/actions.d.ts +2 -2
  27. package/lib/store/mapStore/map/reducer.d.ts +7 -0
  28. package/lib/utils/__mocks__/WMS111GetCapabilitiesGeoServicesRADAR.d.ts +2 -0
  29. package/lib/utils/getCapabilities.d.ts +6 -0
  30. package/package.json +7 -7
package/core.esm.js CHANGED
@@ -7,7 +7,7 @@ import { takeLatest, put, select, call } from 'redux-saga/effects';
7
7
  import { WMGetServiceFromStore, getMapImageStore, WMBBOX, debug, DebugType, WMJSMap, WMLayer, legendImageStore, WMImageEventType, getLegendGraphicURLForLayer } from '@opengeoweb/webmap';
8
8
  import { makeStyles, Tooltip, Select, Grid, InputLabel, IconButton, Paper, Box, Typography, CircularProgress, List, ListSubheader, ListItem, ListItemText, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, DialogActions, Button, createStyles, MenuItem, Checkbox, SvgIcon, ListItemIcon, Menu, FormControl, withStyles, Slider, Switch, FormControlLabel, Popover, useMediaQuery, useTheme } from '@material-ui/core';
9
9
  import { connect, useDispatch, useSelector, Provider } from 'react-redux';
10
- import { sliderStyles, CustomSlider, ToolContainerDraggable } from '@opengeoweb/shared';
10
+ import { sliderStyles, CustomSlider, ToolContainerDraggable, useIsMounted } from '@opengeoweb/shared';
11
11
  import _ from 'lodash';
12
12
  import { Cached, Add, MoreVert, FileCopy, Delete, DragIndicator, Link, LinkOff, DeleteForever } from '@material-ui/icons';
13
13
  import { Sortable, ReactSortable } from 'react-sortablejs';
@@ -146,8 +146,8 @@ var mapUpdateAllMapDimensions = function mapUpdateAllMapDimensions(payload) {
146
146
  /**
147
147
  * Starts the animation for a map.
148
148
  *
149
- * Example: mapStartAnimation({mapId:'mapId1', start: 'someISOTime', end: 'someISOTime', interval: 1000})
150
- * @param {object} payload Object with mapId: string, start: Moment, end: Moment and interval: number (in seconds), timeList?: TimeListType[]
149
+ * Example: mapStartAnimation({mapId:'mapId1', start: 'someISOTime', end: 'someISOTime', interval: 15})
150
+ * @param {object} payload Object with mapId: string, start: Moment, end: Moment and interval: number (in minutes), timeList?: TimeListType[]
151
151
  */
152
152
 
153
153
  var mapStartAnimation = function mapStartAnimation(payload) {
@@ -1506,6 +1506,17 @@ var types$2 = /*#__PURE__*/Object.freeze({
1506
1506
  });
1507
1507
 
1508
1508
  var defaultAnimationDelayAtStart = 250;
1509
+ var defaultDelay = 1000; // [ms]
1510
+
1511
+ var speedFactors = [0.1, 0.2, 0.5, 1, 2, 4, 8, 16]; // Declares available animation speed multipliers for default delay
1512
+
1513
+ /**
1514
+ * Returns speed delay for given speedFactor. For options, see defined above in "speedFactors"
1515
+ */
1516
+
1517
+ var getSpeedDelay = function getSpeedDelay(speedFactor) {
1518
+ return defaultDelay / speedFactor;
1519
+ };
1509
1520
  /**
1510
1521
  * Returns time bounds from the given dimension. If no time dimension given, current time is returned as default
1511
1522
  */
@@ -4252,10 +4263,18 @@ var getLayerActionsTargets = function getLayerActionsTargets(state, payload, act
4252
4263
 
4253
4264
  var getAddLayerActionsTargets = function getAddLayerActionsTargets(state, payload, actionType) {
4254
4265
  var foundTargets = findTargets(state, payload, actionType, payload.mapId);
4255
- return foundTargets.map(function (target) {
4256
- return Object.assign(Object.assign({}, target.payload), {
4266
+ return foundTargets.map(function (_ref) {
4267
+ var payload = _ref.payload,
4268
+ targetId = _ref.targetId;
4269
+ var layer = payload.layer;
4270
+
4271
+ layer.id;
4272
+ var layerWithoutId = __rest(layer, ["id"]);
4273
+
4274
+ return Object.assign(Object.assign({}, payload), {
4275
+ layer: layerWithoutId,
4257
4276
  layerId: generateLayerId(),
4258
- mapId: target.targetId,
4277
+ mapId: targetId,
4259
4278
  origin: ORIGIN_GENERIC_SYNCHRONIZATIONGROUP_UTILS_ADDACTION
4260
4279
  });
4261
4280
  });
@@ -4984,7 +5003,7 @@ var synchronizationGroupConfig = {
4984
5003
  sagas: [rootSaga$3, rootSaga$2]
4985
5004
  };
4986
5005
 
4987
- var useStyles$z = makeStyles(function (theme) {
5006
+ var useStyles$A = makeStyles(function (theme) {
4988
5007
  return {
4989
5008
  select: {
4990
5009
  '& ul': {
@@ -5039,7 +5058,7 @@ var TooltipSelect = function TooltipSelect(_a) {
5039
5058
  tooltipOpen = _React$useState4[0],
5040
5059
  setTooltipOpen = _React$useState4[1];
5041
5060
 
5042
- var classes = useStyles$z();
5061
+ var classes = useStyles$A();
5043
5062
  var onWheel = React.useCallback(function (event) {
5044
5063
  if (selectOpen) return;
5045
5064
  var direction = event.deltaY < 0 ? 1 : -1;
@@ -5498,12 +5517,32 @@ var uiModuleConfig = {
5498
5517
  sagas: [rootSaga$1]
5499
5518
  };
5500
5519
 
5520
+ /**
5521
+ * Checks if the layer id is already taken in one of the maps.
5522
+ * @param state The WebMapState
5523
+ * @param layerIdToCheck The layerId to check
5524
+ * @returns true if the layerId is already taken somewhere else.
5525
+ */
5526
+
5527
+ var checkIfMapLayerIdIsAlreadyTaken = function checkIfMapLayerIdIsAlreadyTaken(state, layerId) {
5528
+ return state.allIds.some(function (mapId) {
5529
+ var map = state.byId[mapId];
5530
+
5531
+ var doesLayeridExist = function doesLayeridExist(layers) {
5532
+ return layers && layers.some(function (id) {
5533
+ return id === layerId;
5534
+ });
5535
+ };
5536
+
5537
+ return doesLayeridExist(map.mapLayers) || doesLayeridExist(map.overLayers) || doesLayeridExist(map.baseLayers) || doesLayeridExist(map.featureLayers);
5538
+ });
5539
+ };
5501
5540
  /**
5502
5541
  * Addes id's to the layer object. All layers need to have an id for referring.
5503
5542
  * @param layers
5504
5543
  */
5505
5544
 
5506
- var createLayersWithIds = function createLayersWithIds(layers) {
5545
+ var createLayersWithIds = function createLayersWithIds(state, layers) {
5507
5546
  if (!layers) return layers;
5508
5547
  return produce$1(layers, function (draft) {
5509
5548
  for (var j = 0; j < draft.length; j += 1) {
@@ -5511,6 +5550,9 @@ var createLayersWithIds = function createLayersWithIds(layers) {
5511
5550
 
5512
5551
  if (!layer.id) {
5513
5552
  layer.id = generateLayerId();
5553
+ } else if (checkIfMapLayerIdIsAlreadyTaken(state, layer.id)) {
5554
+ console.warn("Warning: Layer id ".concat(layer.id, " was already taken: Generating new one."));
5555
+ layer.id = generateLayerId();
5514
5556
  }
5515
5557
  }
5516
5558
  });
@@ -5562,21 +5604,17 @@ var reducer$1 = function reducer() {
5562
5604
  return state;
5563
5605
  }
5564
5606
 
5565
- var layerIndex = state.byId[_mapId2].mapLayers.indexOf(layerId);
5566
-
5567
- if (layerIndex >= 0) {
5568
- // Do nothing if layerId is already used
5607
+ if (checkIfMapLayerIdIsAlreadyTaken(state, layerId)) {
5608
+ console.warn("Warning: Layer id ".concat(layerId, " was already taken"));
5569
5609
  return state;
5570
5610
  }
5571
5611
 
5572
5612
  return produce$1(state, function (draft) {
5573
- if (layerIndex === -1) {
5574
- if (!state.byId[_mapId2].mapLayers.length) {
5575
- draft.byId[_mapId2].activeLayerId = layerId;
5576
- }
5577
-
5578
- draft.byId[_mapId2].mapLayers.unshift(layerId);
5613
+ if (!state.byId[_mapId2].mapLayers.length) {
5614
+ draft.byId[_mapId2].activeLayerId = layerId;
5579
5615
  }
5616
+
5617
+ draft.byId[_mapId2].mapLayers.unshift(layerId);
5580
5618
  });
5581
5619
  }
5582
5620
 
@@ -5635,6 +5673,19 @@ var reducer$1 = function reducer() {
5635
5673
 
5636
5674
  return produce$1(state, function (draft) {
5637
5675
  draft.byId[_mapId6].isAnimating = true;
5676
+
5677
+ if (action.payload.start) {
5678
+ draft.byId[_mapId6].animationStartTime = action.payload.start.toISOString();
5679
+ }
5680
+
5681
+ if (action.payload.end) {
5682
+ draft.byId[_mapId6].animationEndTime = action.payload.end.toISOString();
5683
+ }
5684
+
5685
+ if (action.payload.interval && action.payload.interval !== draft.byId[_mapId6].timeStep) {
5686
+ draft.byId[_mapId6].timeStep = action.payload.interval;
5687
+ draft.byId[_mapId6].isTimestepAuto = false;
5688
+ }
5638
5689
  });
5639
5690
  }
5640
5691
 
@@ -5662,33 +5713,20 @@ var reducer$1 = function reducer() {
5662
5713
  return state;
5663
5714
  }
5664
5715
 
5665
- if (layer.layerType === LayerType.baseLayer) {
5666
- var _layerIndex = state.byId[_mapId8].baseLayers.indexOf(_layerId);
5667
-
5668
- if (_layerIndex >= 0) {
5669
- // Do nothing if layerId is already used
5670
- return state;
5671
- }
5716
+ if (checkIfMapLayerIdIsAlreadyTaken(state, _layerId)) {
5717
+ console.warn("Warning: Layer id ".concat(_layerId, " was already taken"));
5718
+ return state;
5719
+ }
5672
5720
 
5721
+ if (layer.layerType === LayerType.baseLayer) {
5673
5722
  return produce$1(state, function (draft) {
5674
- if (_layerIndex === -1) {
5675
- draft.byId[_mapId8].baseLayers.unshift(_layerId);
5676
- }
5723
+ draft.byId[_mapId8].baseLayers.unshift(_layerId);
5677
5724
  });
5678
5725
  }
5679
5726
 
5680
5727
  if (layer.layerType === LayerType.overLayer) {
5681
- var _layerIndex2 = state.byId[_mapId8].overLayers.indexOf(_layerId);
5682
-
5683
- if (_layerIndex2 >= 0) {
5684
- // Do nothing if layerId is already used
5685
- return state;
5686
- }
5687
-
5688
5728
  return produce$1(state, function (draft) {
5689
- if (_layerIndex2 === -1) {
5690
- draft.byId[_mapId8].overLayers.unshift(_layerId);
5691
- }
5729
+ draft.byId[_mapId8].overLayers.unshift(_layerId);
5692
5730
  });
5693
5731
  }
5694
5732
 
@@ -5761,7 +5799,7 @@ var reducer$1 = function reducer() {
5761
5799
  case WEBMAP_SET_LAYERS:
5762
5800
  {
5763
5801
  var _mapId13 = action.payload.mapId;
5764
- var layersWithIds = createLayersWithIds(action.payload.layers);
5802
+ var layersWithIds = createLayersWithIds(state, action.payload.layers);
5765
5803
  var layerIds = layersWithIds.map(function (_ref) {
5766
5804
  var id = _ref.id;
5767
5805
  return id;
@@ -5808,8 +5846,8 @@ var reducer$1 = function reducer() {
5808
5846
  baseLayers.push(layer);
5809
5847
  }
5810
5848
  });
5811
- var baseLayersWithIds = createLayersWithIds(baseLayers);
5812
- var overLayersWithIds = createLayersWithIds(overLayers);
5849
+ var baseLayersWithIds = createLayersWithIds(state, baseLayers);
5850
+ var overLayersWithIds = createLayersWithIds(state, overLayers);
5813
5851
  var baseLayerIds = baseLayersWithIds.map(function (_ref2) {
5814
5852
  var id = _ref2.id;
5815
5853
  return id;
@@ -6167,12 +6205,14 @@ var _marked = /*#__PURE__*/regeneratorRuntime.mark(startAnimationSaga),
6167
6205
  _marked5 = /*#__PURE__*/regeneratorRuntime.mark(setLayerDimensionsSaga),
6168
6206
  _marked6 = /*#__PURE__*/regeneratorRuntime.mark(toggleAutoUpdateSaga),
6169
6207
  _marked7 = /*#__PURE__*/regeneratorRuntime.mark(rootSaga);
6208
+
6170
6209
  var generateTimeList = function generateTimeList(start, end, interval) {
6171
6210
  var timeList = [];
6172
6211
  var unixStart = moment(start).utc().unix();
6173
6212
  var unixEnd = moment(end).utc().unix();
6213
+ var intervalSeconds = interval * 60;
6174
6214
 
6175
- for (var j = unixStart; j <= unixEnd; j += interval) {
6215
+ for (var j = unixStart; j <= unixEnd; j += intervalSeconds) {
6176
6216
  timeList.push({
6177
6217
  name: 'time',
6178
6218
  value: moment.unix(j).toISOString()
@@ -6199,8 +6239,8 @@ function startAnimationSaga(_ref) {
6199
6239
  case 0:
6200
6240
  payload = _ref.payload;
6201
6241
  mapId = payload.mapId, start = payload.start, end = payload.end, interval = payload.interval, timeList = payload.timeList;
6202
- roundedStart = roundWithTimeStep(start && start.unix(), interval / 60, 'ceil');
6203
- roundedEnd = roundWithTimeStep(end && end.unix(), interval / 60, 'floor');
6242
+ roundedStart = roundWithTimeStep(start && start.unix(), interval, 'ceil');
6243
+ roundedEnd = roundWithTimeStep(end && end.unix(), interval, 'floor');
6204
6244
  _context.next = 6;
6205
6245
  return timeList || generateTimeList(moment.utc(roundedStart * 1000), moment.utc(roundedEnd * 1000), interval);
6206
6246
 
@@ -6320,7 +6360,7 @@ function updateAnimation(mapId, maxValue) {
6320
6360
  mapId: mapId,
6321
6361
  start: start,
6322
6362
  end: end,
6323
- interval: timeStep * 60
6363
+ interval: timeStep
6324
6364
  }));
6325
6365
 
6326
6366
  case 23:
@@ -6331,7 +6371,7 @@ function updateAnimation(mapId, maxValue) {
6331
6371
  }, _marked4);
6332
6372
  }
6333
6373
  function setLayerDimensionsSaga(_ref4) {
6334
- var payload, dimensions, layerId, layer, newTimeDimension, mapId, activeLayerId, shouldAutoUpdate, prevTimeDimension;
6374
+ var payload, dimensions, layerId, layer, newTimeDimension, mapId, activeLayerId, shouldAutoUpdate, prevTimeDimension, isAnimating$1, webmapInstance;
6335
6375
  return regeneratorRuntime.wrap(function setLayerDimensionsSaga$(_context5) {
6336
6376
  while (1) {
6337
6377
  switch (_context5.prev = _context5.next) {
@@ -6372,14 +6412,20 @@ function setLayerDimensionsSaga(_ref4) {
6372
6412
 
6373
6413
  case 18:
6374
6414
  prevTimeDimension = _context5.sent;
6415
+ _context5.next = 21;
6416
+ return select(isAnimating, mapId);
6417
+
6418
+ case 21:
6419
+ isAnimating$1 = _context5.sent;
6420
+ webmapInstance = getWMJSMapById(mapId);
6375
6421
 
6376
6422
  if (!(layerId === activeLayerId && // only update the active layer
6377
6423
  shouldAutoUpdate && newTimeDimension && newTimeDimension.maxValue && prevTimeDimension && prevTimeDimension.currentValue && prevTimeDimension.currentValue !== newTimeDimension.maxValue)) {
6378
- _context5.next = 24;
6424
+ _context5.next = 30;
6379
6425
  break;
6380
6426
  }
6381
6427
 
6382
- _context5.next = 22;
6428
+ _context5.next = 26;
6383
6429
  return put(layerChangeDimension({
6384
6430
  layerId: layerId,
6385
6431
  origin: 'setLayerDimensionSaga',
@@ -6389,26 +6435,39 @@ function setLayerDimensionsSaga(_ref4) {
6389
6435
  }
6390
6436
  }));
6391
6437
 
6392
- case 22:
6393
- _context5.next = 24;
6438
+ case 26:
6439
+ _context5.next = 28;
6394
6440
  return call(updateAnimation, mapId, newTimeDimension.maxValue);
6395
6441
 
6396
- case 24:
6397
- _context5.next = 29;
6442
+ case 28:
6443
+ _context5.next = 33;
6398
6444
  break;
6399
6445
 
6400
- case 26:
6401
- _context5.prev = 26;
6446
+ case 30:
6447
+ if (!(isAnimating$1 && !webmapInstance.isAnimating && newTimeDimension && newTimeDimension.maxValue)) {
6448
+ _context5.next = 33;
6449
+ break;
6450
+ }
6451
+
6452
+ _context5.next = 33;
6453
+ return call(updateAnimation, mapId, newTimeDimension.maxValue);
6454
+
6455
+ case 33:
6456
+ _context5.next = 38;
6457
+ break;
6458
+
6459
+ case 35:
6460
+ _context5.prev = 35;
6402
6461
  _context5.t0 = _context5["catch"](1);
6403
6462
  // eslint-disable-next-line no-console
6404
6463
  console.warn(_context5.t0);
6405
6464
 
6406
- case 29:
6465
+ case 38:
6407
6466
  case "end":
6408
6467
  return _context5.stop();
6409
6468
  }
6410
6469
  }
6411
- }, _marked5, null, [[1, 26]]);
6470
+ }, _marked5, null, [[1, 35]]);
6412
6471
  }
6413
6472
  function toggleAutoUpdateSaga(_ref5) {
6414
6473
  var payload, shouldAutoUpdate, mapId, layerId, timeDimension;
@@ -6606,6 +6665,23 @@ var getLayersFromService = function getLayersFromService(serviceUrl) {
6606
6665
  }, forceReload);
6607
6666
  });
6608
6667
  };
6668
+ /**
6669
+ * Returns a promise with a webmapjs node structure layers from the WMS GetCapabilities document.
6670
+ * @param serviceUrl The URL of the WMS service
6671
+ * @param {boolean} forceReload **optional** forceReload: boolean, true will force the layers to be reloaded from the service, defaults to false
6672
+ */
6673
+
6674
+ var getLayerNodesFromService = function getLayerNodesFromService(serviceUrl) {
6675
+ var forceReload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
6676
+ return new Promise(function (resolve, reject) {
6677
+ var serviceObject = WMGetServiceFromStore(serviceUrl);
6678
+ serviceObject.getNodes(function (nodes) {
6679
+ resolve(nodes.children);
6680
+ }, function (error) {
6681
+ reject(new Error(error));
6682
+ }, forceReload);
6683
+ });
6684
+ };
6609
6685
 
6610
6686
  /* *
6611
6687
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -7510,7 +7586,7 @@ var defaultConfigurations = /*#__PURE__*/Object.freeze({
7510
7586
  preloadedDefaultMapServices: preloadedDefaultMapServices
7511
7587
  });
7512
7588
 
7513
- var useStyles$y = makeStyles({
7589
+ var useStyles$z = makeStyles({
7514
7590
  buttonDiv: {
7515
7591
  position: 'relative'
7516
7592
  },
@@ -7546,7 +7622,7 @@ var AddLayersPopup = function AddLayersPopup(_ref) {
7546
7622
  handleClose = _ref.handleClose,
7547
7623
  _ref$layerType = _ref.layerType,
7548
7624
  layerType = _ref$layerType === void 0 ? LayerType.mapLayer : _ref$layerType;
7549
- var classes = useStyles$y();
7625
+ var classes = useStyles$z();
7550
7626
 
7551
7627
  var _React$useState = React.useState(''),
7552
7628
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -7698,7 +7774,7 @@ var AddLayersPopup = function AddLayersPopup(_ref) {
7698
7774
  }, "Close")));
7699
7775
  };
7700
7776
 
7701
- var useStyles$x = makeStyles(function (theme) {
7777
+ var useStyles$y = makeStyles(function (theme) {
7702
7778
  return {
7703
7779
  buttonDiv: {
7704
7780
  position: 'relative'
@@ -7733,7 +7809,7 @@ var AddLayersButton = function AddLayersButton(_ref) {
7733
7809
  _ref$shouldFocus = _ref.shouldFocus,
7734
7810
  shouldFocus = _ref$shouldFocus === void 0 ? false : _ref$shouldFocus;
7735
7811
  var ref = React.useRef(null);
7736
- var classes = useStyles$x();
7812
+ var classes = useStyles$y();
7737
7813
 
7738
7814
  var _React$useState = React.useState(false),
7739
7815
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -7842,6 +7918,65 @@ var widthToWidthClass = function widthToWidthClass(w) {
7842
7918
  return LayerManagerWidth.lg;
7843
7919
  };
7844
7920
 
7921
+ /* *
7922
+ * Licensed under the Apache License, Version 2.0 (the "License");
7923
+ * you may not use this file except in compliance with the License.
7924
+ * You may obtain a copy of the License at
7925
+ *
7926
+ * http://www.apache.org/licenses/LICENSE-2.0
7927
+ *
7928
+ * Unless required by applicable law or agreed to in writing, software
7929
+ * distributed under the License is distributed on an "AS IS" BASIS,
7930
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7931
+ * See the License for the specific language governing permissions and
7932
+ * limitations under the License.
7933
+ *
7934
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7935
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
7936
+ * */
7937
+ var useStyles$x = makeStyles(function (theme) {
7938
+ return {
7939
+ button: {
7940
+ width: '24px',
7941
+ height: '24px',
7942
+ margin: '6px 0px 0px 10px',
7943
+ color: theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat,
7944
+ borderRadius: '15%'
7945
+ }
7946
+ };
7947
+ });
7948
+
7949
+ var LayerSelectButtonConnect = function LayerSelectButtonConnect(_ref) {
7950
+ var mapId = _ref.mapId,
7951
+ _ref$source = _ref.source,
7952
+ source = _ref$source === void 0 ? 'app' : _ref$source;
7953
+ var dispatch = useDispatch();
7954
+ var classes = useStyles$x();
7955
+ var currentActiveMapId = useSelector(function (store) {
7956
+ return getDialogMapId(store, 'layerSelect');
7957
+ });
7958
+ var isOpenInStore = useSelector(function (store) {
7959
+ return getisDialogOpen(store, 'layerSelect');
7960
+ });
7961
+ var openLayerSelectDialog = React.useCallback(function () {
7962
+ dispatch(setActiveMapIdForDialog({
7963
+ type: 'layerSelect',
7964
+ activeMapId: mapId,
7965
+ setOpen: currentActiveMapId !== mapId ? true : !isOpenInStore,
7966
+ source: source
7967
+ }));
7968
+ }, [currentActiveMapId, dispatch, isOpenInStore, mapId, source]);
7969
+ return /*#__PURE__*/React.createElement(Tooltip, {
7970
+ title: "Layer Select"
7971
+ }, /*#__PURE__*/React.createElement(IconButton, {
7972
+ onClick: openLayerSelectDialog,
7973
+ className: classes.button,
7974
+ id: "layerSelectButton",
7975
+ "data-testid": "layerSelectButton",
7976
+ disableRipple: true
7977
+ }, /*#__PURE__*/React.createElement(Add, null)));
7978
+ };
7979
+
7845
7980
  /* *
7846
7981
  * Licensed under the Apache License, Version 2.0 (the "License");
7847
7982
  * you may not use this file except in compliance with the License.
@@ -7879,7 +8014,9 @@ var DescriptionRow = function DescriptionRow(_ref) {
7879
8014
  preloadedServices = _ref$preloadedService === void 0 ? preloadedDefaultMapServices : _ref$preloadedService,
7880
8015
  _ref$tooltip = _ref.tooltip,
7881
8016
  tooltip = _ref$tooltip === void 0 ? '' : _ref$tooltip,
7882
- layerManagerWidth = _ref.layerManagerWidth;
8017
+ layerManagerWidth = _ref.layerManagerWidth,
8018
+ _ref$layerSelect = _ref.layerSelect,
8019
+ layerSelect = _ref$layerSelect === void 0 ? false : _ref$layerSelect;
7883
8020
  var classes = useStyles$w();
7884
8021
  var columnSizes = layerManagerWidth === LayerManagerWidth.sm ? LayerManagerColumnsSmall() : LayerManagerColumnsLarge();
7885
8022
  return /*#__PURE__*/React.createElement(Grid, {
@@ -7901,6 +8038,8 @@ var DescriptionRow = function DescriptionRow(_ref) {
7901
8038
  });
7902
8039
  },
7903
8040
  shouldFocus: true
8041
+ }), layerSelect && /*#__PURE__*/React.createElement(LayerSelectButtonConnect, {
8042
+ mapId: mapId
7904
8043
  })), /*#__PURE__*/React.createElement(Grid, {
7905
8044
  className: columnSizes.column2
7906
8045
  }, /*#__PURE__*/React.createElement("div", {
@@ -8536,7 +8675,7 @@ var OpacitySelect = function OpacitySelect(_ref) {
8536
8675
  }, /*#__PURE__*/React.createElement("div", {
8537
8676
  className: sliderClasses.sliderHeader
8538
8677
  }, "Opacity"), /*#__PURE__*/React.createElement(CustomSlider, {
8539
- dataTestId: "opacitySlider",
8678
+ "data-testid": "opacitySlider",
8540
8679
  orientation: "vertical",
8541
8680
  value: currentOpacity,
8542
8681
  step: 0.01,
@@ -9919,7 +10058,11 @@ var LayerManager = function LayerManager(_ref) {
9919
10058
  _ref$order = _ref.order,
9920
10059
  order = _ref$order === void 0 ? 0 : _ref$order,
9921
10060
  _ref$source = _ref.source,
9922
- source = _ref$source === void 0 ? 'app' : _ref$source;
10061
+ source = _ref$source === void 0 ? 'app' : _ref$source,
10062
+ _ref$layerSelect = _ref.layerSelect,
10063
+ layerSelect = _ref$layerSelect === void 0 ? false : _ref$layerSelect,
10064
+ _ref$showAddLayersToo = _ref.showAddLayersTooltip,
10065
+ showAddLayersTooltip = _ref$showAddLayersToo === void 0 ? true : _ref$showAddLayersToo;
9923
10066
  var classes = useStyles$j();
9924
10067
 
9925
10068
  var _React$useState = React.useState(LayerManagerWidth.lg),
@@ -9961,9 +10104,10 @@ var LayerManager = function LayerManager(_ref) {
9961
10104
  className: classes.layerRowContainer
9962
10105
  }, /*#__PURE__*/React.createElement(DescriptionRow, {
9963
10106
  mapId: mapId,
9964
- tooltip: "Add Layers",
10107
+ tooltip: showAddLayersTooltip ? 'Add Layers' : '',
9965
10108
  layerManagerWidth: layerManagerWidth,
9966
- preloadedServices: preloadedMapServices
10109
+ preloadedServices: preloadedMapServices,
10110
+ layerSelect: layerSelect
9967
10111
  }), /*#__PURE__*/React.createElement(LayerContainerRow, {
9968
10112
  mapId: mapId,
9969
10113
  layerManagerWidth: layerManagerWidth
@@ -9976,6 +10120,60 @@ var LayerManager = function LayerManager(_ref) {
9976
10120
  }))));
9977
10121
  };
9978
10122
 
10123
+ /* *
10124
+ * Licensed under the Apache License, Version 2.0 (the "License");
10125
+ * you may not use this file except in compliance with the License.
10126
+ * You may obtain a copy of the License at
10127
+ *
10128
+ * http://www.apache.org/licenses/LICENSE-2.0
10129
+ *
10130
+ * Unless required by applicable law or agreed to in writing, software
10131
+ * distributed under the License is distributed on an "AS IS" BASIS,
10132
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10133
+ * See the License for the specific language governing permissions and
10134
+ * limitations under the License.
10135
+ *
10136
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10137
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
10138
+ * */
10139
+
10140
+ var LayerSelect = function LayerSelect(_ref) {
10141
+ var mapId = _ref.mapId,
10142
+ bounds = _ref.bounds,
10143
+ _ref$onClose = _ref.onClose,
10144
+ onClose = _ref$onClose === void 0 ? function () {} : _ref$onClose,
10145
+ showTitle = _ref.showTitle,
10146
+ isOpen = _ref.isOpen,
10147
+ _ref$onMouseDown = _ref.onMouseDown,
10148
+ onMouseDown = _ref$onMouseDown === void 0 ? function () {} : _ref$onMouseDown,
10149
+ _ref$order = _ref.order,
10150
+ order = _ref$order === void 0 ? 0 : _ref$order,
10151
+ _ref$source = _ref.source,
10152
+ source = _ref$source === void 0 ? 'module' : _ref$source;
10153
+ return /*#__PURE__*/React.createElement(ToolContainerDraggable, {
10154
+ title: showTitle ? "Layer Select ".concat(mapId) : 'Layer Select',
10155
+ startSize: {
10156
+ width: 500,
10157
+ height: 500
10158
+ },
10159
+ minWidth: 300,
10160
+ minHeight: 126,
10161
+ startPosition: {
10162
+ top: 100,
10163
+ left: 100
10164
+ },
10165
+ isOpen: isOpen,
10166
+ onChangeSize: function onChangeSize() {},
10167
+ onClose: onClose,
10168
+ headerSize: "small",
10169
+ bounds: bounds,
10170
+ "data-testid": "layerSelectWindow",
10171
+ onMouseDown: onMouseDown,
10172
+ order: order,
10173
+ source: source
10174
+ }, /*#__PURE__*/React.createElement("div", null));
10175
+ };
10176
+
9979
10177
  /* *
9980
10178
  * Licensed under the Apache License, Version 2.0 (the "License");
9981
10179
  * you may not use this file except in compliance with the License.
@@ -9993,34 +10191,33 @@ var LayerManager = function LayerManager(_ref) {
9993
10191
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
9994
10192
  * */
9995
10193
  /**
9996
- * Layer Managerconnected to the store displaying the layers forthe active map Id
9997
- * Please note that in order to use this and open/close the dialog, every map on the screen that should be able to show
9998
- * a dialog should have the <LayerManagerMapButtonConnect/> which is used to focus the correct map and open the dialog
10194
+ * LayerSelectConnect is a component that is opened from LayerManager
10195
+ * It's used to add Services and Layers to the application
10196
+ * It doesn't expect any props, its subcomponents only read and write to redux store
9999
10197
  *
10000
- * Expects the following props:
10001
- * @param {Service[]} preloadedMapServices preloadedMapServices: array of Service objects - contains an array of Service objects that are preloaded into in the WMS Loader for maplayers
10002
- * @param {Service[]} preloadedBaseServices preloadedBaseServices: array of Service objects - contains an array of Service objects that are preloaded into in the WMS Loader fpr baselayers
10003
- * @param {Layer[]} preloadedAvailableBaseLayers preloadedAvailableBaseLayers: array of Layer objects - contains an array of Layer objects (consisting solely of type baseLayer) that are available to be shown as basemaps
10004
- * ``` <LayerManagerConnect />```
10198
+ * ``` <LayerSelectConnect />```
10005
10199
  */
10006
10200
 
10007
- var LayerManagerConnect = function LayerManagerConnect(_ref) {
10008
- var preloadedAvailableBaseLayers = _ref.preloadedAvailableBaseLayers,
10009
- preloadedMapServices = _ref.preloadedMapServices,
10010
- preloadedBaseServices = _ref.preloadedBaseServices,
10011
- bounds = _ref.bounds,
10201
+ var LayerSelectConnect = function LayerSelectConnect(_ref) {
10202
+ var bounds = _ref.bounds,
10012
10203
  _ref$showTitle = _ref.showTitle,
10013
- showTitle = _ref$showTitle === void 0 ? false : _ref$showTitle;
10204
+ showTitle = _ref$showTitle === void 0 ? false : _ref$showTitle,
10205
+ _ref$preloadedService = _ref.preloadedServices,
10206
+ preloadedServices = _ref$preloadedService === void 0 ? preloadedDefaultMapServices : _ref$preloadedService;
10014
10207
  var dispatch = useDispatch();
10015
- var isOpenInStore = useSelector(function (store) {
10016
- return getisDialogOpen(store, 'layerManager');
10017
- });
10208
+
10209
+ var _useIsMounted = useIsMounted(),
10210
+ isMounted = _useIsMounted.isMounted;
10211
+
10018
10212
  var mapId = useSelector(function (store) {
10019
- return getDialogMapId(store, 'layerManager');
10213
+ return getDialogMapId(store, 'layerSelect');
10214
+ });
10215
+ var isOpenInStore = useSelector(function (store) {
10216
+ return getisDialogOpen(store, 'layerSelect');
10020
10217
  });
10021
10218
  var onClose = React.useCallback(function () {
10022
10219
  return dispatch(setToggleOpenDialog({
10023
- type: 'layerManager',
10220
+ type: 'layerSelect',
10024
10221
  setOpen: false
10025
10222
  }));
10026
10223
  }, [dispatch]);
@@ -10028,13 +10225,13 @@ var LayerManagerConnect = function LayerManagerConnect(_ref) {
10028
10225
  return getIsMapPresent(store, mapId);
10029
10226
  });
10030
10227
  var uiOrder = useSelector(function (store) {
10031
- return getDialogOrder(store, 'layerManager');
10228
+ return getDialogOrder(store, 'layerSelect');
10032
10229
  });
10033
10230
  var uiSource = useSelector(function (store) {
10034
- return getDialogSource(store, 'layerManager');
10231
+ return getDialogSource(store, 'layerSelect');
10035
10232
  });
10036
10233
  var uiIsOrderedOnTop = useSelector(function (store) {
10037
- return getDialogIsOrderedOnTop(store, 'layerManager');
10234
+ return getDialogIsOrderedOnTop(store, 'layerSelect');
10038
10235
  }); // Check to ensure the currently active map is still present on screen - if not, close the dialog
10039
10236
 
10040
10237
  React.useEffect(function () {
@@ -10044,19 +10241,19 @@ var LayerManagerConnect = function LayerManagerConnect(_ref) {
10044
10241
  }, [mapId, isMapPresent, onClose]);
10045
10242
  var registerDialog$1 = React.useCallback(function () {
10046
10243
  return dispatch(registerDialog({
10047
- type: 'layerManager',
10244
+ type: 'layerSelect',
10048
10245
  setOpen: false
10049
10246
  }));
10050
10247
  }, [dispatch]);
10051
10248
  var unregisterDialog$1 = React.useCallback(function () {
10052
10249
  return dispatch(unregisterDialog({
10053
- type: 'layerManager'
10250
+ type: 'layerSelect'
10054
10251
  }));
10055
10252
  }, [dispatch]);
10056
10253
  var onOrderDialog = React.useCallback(function () {
10057
10254
  if (!uiIsOrderedOnTop) {
10058
10255
  dispatch(orderDialog({
10059
- type: 'layerManager'
10256
+ type: 'layerSelect'
10060
10257
  }));
10061
10258
  }
10062
10259
  }, [dispatch, uiIsOrderedOnTop]); // Register this dialog in the store
@@ -10067,11 +10264,28 @@ var LayerManagerConnect = function LayerManagerConnect(_ref) {
10067
10264
  unregisterDialog$1();
10068
10265
  }; // eslint-disable-next-line react-hooks/exhaustive-deps
10069
10266
  }, []);
10070
- return /*#__PURE__*/React.createElement(LayerManager, {
10267
+ var serviceSetLayers$1 = React.useCallback(function (payload) {
10268
+ return dispatch(serviceSetLayers(payload));
10269
+ }, [dispatch]);
10270
+ React.useEffect(function () {
10271
+ if (isOpenInStore && preloadedServices && preloadedServices.length > 0) {
10272
+ preloadedServices.forEach(function (service) {
10273
+ getLayerNodesFromService(service.url).then(function (layers) {
10274
+ if (isMounted.current) {
10275
+ serviceSetLayers$1({
10276
+ service: service.url,
10277
+ layers: layers
10278
+ });
10279
+ }
10280
+ })["catch"](function () {
10281
+ return null;
10282
+ });
10283
+ });
10284
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
10285
+
10286
+ }, [isOpenInStore, preloadedServices, serviceSetLayers$1]);
10287
+ return /*#__PURE__*/React.createElement(LayerSelect, {
10071
10288
  mapId: mapId,
10072
- preloadedAvailableBaseLayers: preloadedAvailableBaseLayers,
10073
- preloadedMapServices: preloadedMapServices,
10074
- preloadedBaseServices: preloadedBaseServices,
10075
10289
  bounds: bounds,
10076
10290
  isOpen: isOpenInStore,
10077
10291
  onClose: onClose,
@@ -10098,48 +10312,157 @@ var LayerManagerConnect = function LayerManagerConnect(_ref) {
10098
10312
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10099
10313
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
10100
10314
  * */
10101
- var useButtonStyles = makeStyles(function (theme) {
10102
- return createStyles({
10103
- button: {
10104
- height: '24px',
10105
- width: function width(_ref) {
10106
- var _width = _ref.width;
10107
- return _width ? "".concat(_width, "px") : '24px';
10108
- },
10109
- border: 0,
10110
- backgroundColor: theme.palette.geowebColors.buttons.surfaceIconDefault.fill,
10111
- borderRadius: '4.5px',
10112
- textTransform: 'none',
10113
- '& svg path, svg text': {
10114
- fill: theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat
10115
- },
10116
- '&:hover': {
10117
- backgroundColor: theme.palette.geowebColors.buttons.flatMouseover.fill
10118
- },
10119
- '&:disabled': {
10120
- backgroundColor: theme.palette.geowebColors.buttons.disabled.fill,
10121
- '& svg path, svg text': {
10122
- fill: theme.palette.geowebColors.typographyAndIcons.iconLinkDisabled
10123
- }
10124
- },
10125
- '&.Mui-selected': {
10126
- backgroundColor: theme.palette.geowebColors.buttons.primaryActive.fill,
10127
- '&:hover': {
10128
- backgroundColor: theme.palette.geowebColors.buttons.primaryMouseover.fill
10129
- },
10130
- '& svg': {
10131
- backgroundColor: 'transparent'
10132
- },
10133
- '& svg path, svg text': {
10134
- fill: theme.palette.geowebColors.typographyAndIcons.buttonIcon
10135
- }
10136
- }
10137
- }
10138
- });
10139
- });
10140
-
10141
- var ToggleIconButton = function ToggleIconButton(_a) {
10142
- var active = _a.active,
10315
+ /**
10316
+ * Layer Managerconnected to the store displaying the layers forthe active map Id
10317
+ * Please note that in order to use this and open/close the dialog, every map on the screen that should be able to show
10318
+ * a dialog should have the <LayerManagerMapButtonConnect/> which is used to focus the correct map and open the dialog
10319
+ *
10320
+ * Expects the following props:
10321
+ * @param {Service[]} preloadedMapServices preloadedMapServices: array of Service objects - contains an array of Service objects that are preloaded into in the WMS Loader for maplayers
10322
+ * @param {Service[]} preloadedBaseServices preloadedBaseServices: array of Service objects - contains an array of Service objects that are preloaded into in the WMS Loader fpr baselayers
10323
+ * @param {Layer[]} preloadedAvailableBaseLayers preloadedAvailableBaseLayers: array of Layer objects - contains an array of Layer objects (consisting solely of type baseLayer) that are available to be shown as basemaps
10324
+ * ``` <LayerManagerConnect />```
10325
+ */
10326
+
10327
+ var LayerManagerConnect = function LayerManagerConnect(_ref) {
10328
+ var preloadedAvailableBaseLayers = _ref.preloadedAvailableBaseLayers,
10329
+ preloadedMapServices = _ref.preloadedMapServices,
10330
+ preloadedBaseServices = _ref.preloadedBaseServices,
10331
+ bounds = _ref.bounds,
10332
+ _ref$showTitle = _ref.showTitle,
10333
+ showTitle = _ref$showTitle === void 0 ? false : _ref$showTitle,
10334
+ _ref$layerSelect = _ref.layerSelect,
10335
+ layerSelect = _ref$layerSelect === void 0 ? false : _ref$layerSelect;
10336
+ var dispatch = useDispatch();
10337
+ var isOpenInStore = useSelector(function (store) {
10338
+ return getisDialogOpen(store, 'layerManager');
10339
+ });
10340
+ var mapId = useSelector(function (store) {
10341
+ return getDialogMapId(store, 'layerManager');
10342
+ });
10343
+ var onClose = React.useCallback(function () {
10344
+ return dispatch(setToggleOpenDialog({
10345
+ type: 'layerManager',
10346
+ setOpen: false
10347
+ }));
10348
+ }, [dispatch]);
10349
+ var isMapPresent = useSelector(function (store) {
10350
+ return getIsMapPresent(store, mapId);
10351
+ });
10352
+ var uiOrder = useSelector(function (store) {
10353
+ return getDialogOrder(store, 'layerManager');
10354
+ });
10355
+ var uiSource = useSelector(function (store) {
10356
+ return getDialogSource(store, 'layerManager');
10357
+ });
10358
+ var uiIsOrderedOnTop = useSelector(function (store) {
10359
+ return getDialogIsOrderedOnTop(store, 'layerManager');
10360
+ }); // Check to ensure the currently active map is still present on screen - if not, close the dialog
10361
+
10362
+ React.useEffect(function () {
10363
+ if (mapId !== '' && !isMapPresent) {
10364
+ onClose();
10365
+ }
10366
+ }, [mapId, isMapPresent, onClose]);
10367
+ var registerDialog$1 = React.useCallback(function () {
10368
+ return dispatch(registerDialog({
10369
+ type: 'layerManager',
10370
+ setOpen: false
10371
+ }));
10372
+ }, [dispatch]);
10373
+ var unregisterDialog$1 = React.useCallback(function () {
10374
+ return dispatch(unregisterDialog({
10375
+ type: 'layerManager'
10376
+ }));
10377
+ }, [dispatch]);
10378
+ var onOrderDialog = React.useCallback(function () {
10379
+ if (!uiIsOrderedOnTop) {
10380
+ dispatch(orderDialog({
10381
+ type: 'layerManager'
10382
+ }));
10383
+ }
10384
+ }, [dispatch, uiIsOrderedOnTop]); // Register this dialog in the store
10385
+
10386
+ React.useEffect(function () {
10387
+ registerDialog$1();
10388
+ return function () {
10389
+ unregisterDialog$1();
10390
+ }; // eslint-disable-next-line react-hooks/exhaustive-deps
10391
+ }, []);
10392
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LayerManager, {
10393
+ mapId: mapId,
10394
+ preloadedAvailableBaseLayers: preloadedAvailableBaseLayers,
10395
+ preloadedMapServices: preloadedMapServices,
10396
+ preloadedBaseServices: preloadedBaseServices,
10397
+ bounds: bounds,
10398
+ isOpen: isOpenInStore,
10399
+ onClose: onClose,
10400
+ showTitle: showTitle,
10401
+ onMouseDown: onOrderDialog,
10402
+ order: uiOrder,
10403
+ source: uiSource,
10404
+ layerSelect: layerSelect
10405
+ }), layerSelect && /*#__PURE__*/React.createElement(LayerSelectConnect, null));
10406
+ };
10407
+
10408
+ /* *
10409
+ * Licensed under the Apache License, Version 2.0 (the "License");
10410
+ * you may not use this file except in compliance with the License.
10411
+ * You may obtain a copy of the License at
10412
+ *
10413
+ * http://www.apache.org/licenses/LICENSE-2.0
10414
+ *
10415
+ * Unless required by applicable law or agreed to in writing, software
10416
+ * distributed under the License is distributed on an "AS IS" BASIS,
10417
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10418
+ * See the License for the specific language governing permissions and
10419
+ * limitations under the License.
10420
+ *
10421
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10422
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
10423
+ * */
10424
+ var useButtonStyles = makeStyles(function (theme) {
10425
+ return createStyles({
10426
+ button: {
10427
+ height: '24px',
10428
+ width: function width(_ref) {
10429
+ var _width = _ref.width;
10430
+ return _width ? "".concat(_width, "px") : '24px';
10431
+ },
10432
+ border: 0,
10433
+ backgroundColor: theme.palette.geowebColors.buttons.surfaceIconDefault.fill,
10434
+ borderRadius: '4.5px',
10435
+ textTransform: 'none',
10436
+ '& svg path, svg text': {
10437
+ fill: theme.palette.geowebColors.typographyAndIcons.buttonIconTertiaryFlat
10438
+ },
10439
+ '&:hover': {
10440
+ backgroundColor: theme.palette.geowebColors.buttons.flatMouseover.fill
10441
+ },
10442
+ '&:disabled': {
10443
+ backgroundColor: theme.palette.geowebColors.buttons.disabled.fill,
10444
+ '& svg path, svg text': {
10445
+ fill: theme.palette.geowebColors.typographyAndIcons.iconLinkDisabled
10446
+ }
10447
+ },
10448
+ '&.Mui-selected': {
10449
+ backgroundColor: theme.palette.geowebColors.buttons.primaryActive.fill,
10450
+ '&:hover': {
10451
+ backgroundColor: theme.palette.geowebColors.buttons.primaryMouseover.fill
10452
+ },
10453
+ '& svg': {
10454
+ backgroundColor: 'transparent'
10455
+ },
10456
+ '& svg path, svg text': {
10457
+ fill: theme.palette.geowebColors.typographyAndIcons.buttonIcon
10458
+ }
10459
+ }
10460
+ }
10461
+ });
10462
+ });
10463
+
10464
+ var ToggleIconButton = function ToggleIconButton(_a) {
10465
+ var active = _a.active,
10143
10466
  width = _a.width,
10144
10467
  children = _a.children,
10145
10468
  props = __rest(_a, ["active", "width", "children"]);
@@ -11183,9 +11506,6 @@ var useStyles$g = makeStyles(function (theme) {
11183
11506
  }
11184
11507
  };
11185
11508
  });
11186
- var defaultDelay = 1000; // [ms]
11187
-
11188
- var speedFactors = [0.1, 0.2, 0.5, 1, 2, 4, 8, 16]; // Declares available animation speed multipliers for default delay
11189
11509
 
11190
11510
  var SpeedButton = function SpeedButton(_ref) {
11191
11511
  var animationDelay = _ref.animationDelay,
@@ -11200,7 +11520,7 @@ var SpeedButton = function SpeedButton(_ref) {
11200
11520
 
11201
11521
  var marks = speedFactors.map(function (speedFactor, i) {
11202
11522
  return {
11203
- delay: defaultDelay / speedFactor,
11523
+ delay: getSpeedDelay(speedFactor),
11204
11524
  markPos: i,
11205
11525
  text: "".concat(speedFactor, "x")
11206
11526
  };
@@ -11252,7 +11572,7 @@ var SpeedButton = function SpeedButton(_ref) {
11252
11572
  }, /*#__PURE__*/React.createElement("div", {
11253
11573
  className: sliderClasses.sliderHeader
11254
11574
  }, "Speed"), /*#__PURE__*/React.createElement(CustomSlider, {
11255
- dataTestId: "speedSlider",
11575
+ "data-testid": "speedSlider",
11256
11576
  orientation: "vertical",
11257
11577
  value: currentValue,
11258
11578
  step: null,
@@ -11410,21 +11730,6 @@ var useStyles$f = makeStyles(function (theme) {
11410
11730
  disabled: {}
11411
11731
  };
11412
11732
  });
11413
-
11414
- var ThumbComponent = function ThumbComponent(props) {
11415
- var ref = React.useRef(null);
11416
- React.useEffect(function () {
11417
- if (ref.current) {
11418
- ref.current.focus();
11419
- }
11420
- }, []);
11421
- return /*#__PURE__*/React.createElement("span", Object.assign({}, props, {
11422
- ref: ref,
11423
- "data-testid": "timeStepButtonSliderThumb",
11424
- id: "thumbTimeStep"
11425
- }));
11426
- };
11427
-
11428
11733
  var TimeStepSwitch = withStyles(function (theme) {
11429
11734
  return {
11430
11735
  root: {
@@ -11529,7 +11834,7 @@ var TimeStepButton = function TimeStepButton(_ref) {
11529
11834
  }, /*#__PURE__*/React.createElement("div", {
11530
11835
  className: sliderClasses.sliderHeader
11531
11836
  }, "Time step"), /*#__PURE__*/React.createElement(CustomSlider, {
11532
- dataTestId: "timeStepButtonSlider",
11837
+ "data-testid": "timeStepButtonSlider",
11533
11838
  orientation: "vertical",
11534
11839
  value: currentMark && currentMark.value ? currentMark.value : 0,
11535
11840
  step: null,
@@ -11537,9 +11842,9 @@ var TimeStepButton = function TimeStepButton(_ref) {
11537
11842
  max: timeStepMarks[timeStepMarks.length - 1].value,
11538
11843
  marks: timeStepMarks,
11539
11844
  disabled: disabledSlider,
11540
- ThumbComponent: ThumbComponent,
11541
11845
  onChange: onChangeSlider,
11542
- onKeyDown: onKeyDown
11846
+ onKeyDown: onKeyDown,
11847
+ shouldAutoFocus: true
11543
11848
  }), /*#__PURE__*/React.createElement(Tooltip, {
11544
11849
  title: timestepAutoSwitch.title
11545
11850
  }, /*#__PURE__*/React.createElement("span", {
@@ -14042,6 +14347,7 @@ var OptionsMenuButtonConnect = function OptionsMenuButtonConnect(_ref) {
14042
14347
  * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
14043
14348
  * Copyright 2020 - Finnish Meteorological Institute (FMI)
14044
14349
  * */
14350
+ var animationIntervalDefault = 5;
14045
14351
  var connectRedux$3 = connect(function (store, props) {
14046
14352
  return {
14047
14353
  isAnimating: isAnimating(store, props.mapId),
@@ -14062,8 +14368,7 @@ var PlayButtonConnect = connectRedux$3(function (_ref) {
14062
14368
  timeStep = _ref.timeStep,
14063
14369
  mapStartAnimation = _ref.mapStartAnimation,
14064
14370
  mapStopAnimation = _ref.mapStopAnimation;
14065
- var animationIntervalDefault = 300;
14066
- var animationInterval = timeStep ? timeStep * 60 : animationIntervalDefault;
14371
+ var animationInterval = timeStep || animationIntervalDefault;
14067
14372
 
14068
14373
  var onTogglePlay = function onTogglePlay() {
14069
14374
  if (isAnimating) {
@@ -14571,125 +14876,6 @@ var ConnectedTimeSlider = function ConnectedTimeSlider(_ref) {
14571
14876
 
14572
14877
  var TimeSliderConnect = connectRedux(ConnectedTimeSlider);
14573
14878
 
14574
- /* *
14575
- * Licensed under the Apache License, Version 2.0 (the "License");
14576
- * you may not use this file except in compliance with the License.
14577
- * You may obtain a copy of the License at
14578
- *
14579
- * http://www.apache.org/licenses/LICENSE-2.0
14580
- *
14581
- * Unless required by applicable law or agreed to in writing, software
14582
- * distributed under the License is distributed on an "AS IS" BASIS,
14583
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14584
- * See the License for the specific language governing permissions and
14585
- * limitations under the License.
14586
- *
14587
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
14588
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
14589
- * */
14590
- var generateUniqueLayerIds = function generateUniqueLayerIds(layers, activeLayerId) {
14591
- // if there is an activeLayerId given, generate a unique id for it
14592
- var activeLayerNewId = activeLayerId ? generateLayerId() : activeLayerId; // first match is set as activeLayer because there can only be one
14593
-
14594
- var activeLayerIndex = layers.findIndex(function (layer) {
14595
- return layer.id === activeLayerId;
14596
- });
14597
- var layersNewIds = layers.map(function (layer, index) {
14598
- if (layer.id && index === activeLayerIndex) {
14599
- return Object.assign(Object.assign({}, layer), {
14600
- id: activeLayerNewId
14601
- });
14602
- }
14603
-
14604
- return Object.assign(Object.assign({}, layer), {
14605
- id: generateLayerId()
14606
- });
14607
- });
14608
- return {
14609
- layersNewIds: layersNewIds,
14610
- activeLayerNewId: activeLayerNewId
14611
- };
14612
- };
14613
-
14614
- /* *
14615
- * Licensed under the Apache License, Version 2.0 (the "License");
14616
- * you may not use this file except in compliance with the License.
14617
- * You may obtain a copy of the License at
14618
- *
14619
- * http://www.apache.org/licenses/LICENSE-2.0
14620
- *
14621
- * Unless required by applicable law or agreed to in writing, software
14622
- * distributed under the License is distributed on an "AS IS" BASIS,
14623
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14624
- * See the License for the specific language governing permissions and
14625
- * limitations under the License.
14626
- *
14627
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
14628
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
14629
- * */
14630
- var initialBbox = {
14631
- srs: 'EPSG:3857',
14632
- bbox: {
14633
- left: -450651.2255879827,
14634
- bottom: 6490531.093143953,
14635
- right: 1428345.8183648037,
14636
- top: 7438773.776232235
14637
- }
14638
- };
14639
- var useDefaultMapSettings = function useDefaultMapSettings() {
14640
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
14641
- var dispatch = useDispatch();
14642
- var _props$mapId = props.mapId,
14643
- mapId = _props$mapId === void 0 ? 'test-map-1' : _props$mapId;
14644
- var _props$layers = props.layers,
14645
- layers = _props$layers === void 0 ? [] : _props$layers,
14646
- _props$activeLayerId = props.activeLayerId,
14647
- activeLayerId = _props$activeLayerId === void 0 ? undefined : _props$activeLayerId,
14648
- _props$baseLayers = props.baseLayers,
14649
- baseLayers = _props$baseLayers === void 0 ? [Object.assign(Object.assign({}, baseLayerGrey$1), {
14650
- id: "layer-grey-".concat(mapId)
14651
- }), overLayer$1] : _props$baseLayers,
14652
- _props$bbox = props.bbox,
14653
- bbox = _props$bbox === void 0 ? initialBbox.bbox : _props$bbox,
14654
- _props$srs = props.srs,
14655
- srs = _props$srs === void 0 ? initialBbox.srs : _props$srs,
14656
- _props$shouldAutoUpda = props.shouldAutoUpdate,
14657
- shouldAutoUpdate = _props$shouldAutoUpda === void 0 ? false : _props$shouldAutoUpda; // make sure all layers have a unique id before going forward
14658
-
14659
- var _generateUniqueLayerI = generateUniqueLayerIds(layers, activeLayerId),
14660
- layersNewIds = _generateUniqueLayerI.layersNewIds,
14661
- activeLayerNewId = _generateUniqueLayerI.activeLayerNewId;
14662
-
14663
- React.useEffect(function () {
14664
- // set layers
14665
- dispatch(setLayers({
14666
- mapId: mapId,
14667
- layers: layersNewIds
14668
- })); // set active layer if given otherwise to first layer
14669
-
14670
- dispatch(setActiveLayerId({
14671
- mapId: mapId,
14672
- layerId: activeLayerNewId || layersNewIds.length && layersNewIds[0].id
14673
- })); // baseLayers
14674
-
14675
- dispatch(setBaseLayers({
14676
- mapId: mapId,
14677
- layers: baseLayers
14678
- })); // bbox
14679
-
14680
- dispatch(setBbox$1({
14681
- bbox: bbox,
14682
- srs: srs,
14683
- mapId: mapId
14684
- })); // auto update
14685
-
14686
- dispatch(toggleAutoUpdate({
14687
- mapId: mapId,
14688
- shouldAutoUpdate: shouldAutoUpdate
14689
- })); // eslint-disable-next-line react-hooks/exhaustive-deps
14690
- }, []);
14691
- };
14692
-
14693
14879
  /* *
14694
14880
  * Licensed under the Apache License, Version 2.0 (the "License");
14695
14881
  * you may not use this file except in compliance with the License.
@@ -17646,21 +17832,31 @@ var ReactMapView = /*#__PURE__*/function (_React$Component) {
17646
17832
 
17647
17833
  if (children !== this.currentMapProps.children) {
17648
17834
  var _ret = function () {
17649
- var wmjsLayers = _this2.adaguc.webMapJS.getLayers();
17650
-
17651
17835
  var myChildren = [];
17836
+ var takenIds = new Set();
17652
17837
  React.Children.forEach(children, function (child) {
17653
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
17654
- // @ts-ignore
17655
- if (child && child.props && child.props.id) {
17656
- myChildren.push(child);
17657
- } else if (child !== null) {
17658
- debug(DebugType.Error, 'ReactWMJSLayer ignored', child);
17838
+ if (child) {
17839
+ var childProps = child.props;
17840
+
17841
+ if (childProps && childProps.id) {
17842
+ if (!takenIds.has(childProps.id)) {
17843
+ myChildren.push(child);
17844
+ takenIds.add(childProps.id);
17845
+ } else {
17846
+ childProps.onLayerError(childProps, new Error("Duplicate layer id \"".concat(childProps.id, "\" encountered within this WebMap")), _this2.adaguc.webMapJS);
17847
+ console.warn('ReactWMJSLayer has a duplicate id', child);
17848
+ }
17849
+ } else {
17850
+ debug(DebugType.Warning, 'ReactElement child ignored: has no props or id', child);
17851
+ }
17659
17852
  }
17660
17853
  });
17661
17854
  myChildren.reverse();
17855
+
17856
+ var wmjsLayers = _this2.adaguc.webMapJS.getLayers();
17662
17857
  /* ReactWMJSLayer Layer Childs: Detect all ReactLayers connected to WMJSLayers, remove WMJSLayer if there is no ReactLayer */
17663
17858
 
17859
+
17664
17860
  var _loop = function _loop(l) {
17665
17861
  if (myChildren.filter(function (c) {
17666
17862
  return c && c.props && c.props.id === wmjsLayers[l].ReactWMJSLayerId;
@@ -18920,14 +19116,51 @@ var LegendMapButtonConnect = function LegendMapButtonConnect(_ref) {
18920
19116
  * See the License for the specific language governing permissions and
18921
19117
  * limitations under the License.
18922
19118
  *
18923
- * Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
18924
- * Copyright 2020 - Finnish Meteorological Institute (FMI)
19119
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
19120
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
19121
+ * */
19122
+ var generateUniqueLayerIds = function generateUniqueLayerIds(layers, activeLayerId) {
19123
+ // if there is an activeLayerId given, generate a unique id for it
19124
+ var activeLayerNewId = activeLayerId ? generateLayerId() : activeLayerId; // first match is set as activeLayer because there can only be one
19125
+
19126
+ var activeLayerIndex = layers.findIndex(function (layer) {
19127
+ return layer.id === activeLayerId;
19128
+ });
19129
+ var layersNewIds = layers.map(function (layer, index) {
19130
+ if (layer.id && index === activeLayerIndex) {
19131
+ return Object.assign(Object.assign({}, layer), {
19132
+ id: activeLayerNewId
19133
+ });
19134
+ }
19135
+
19136
+ return Object.assign(Object.assign({}, layer), {
19137
+ id: generateLayerId()
19138
+ });
19139
+ });
19140
+ return {
19141
+ layersNewIds: layersNewIds,
19142
+ activeLayerNewId: activeLayerNewId
19143
+ };
19144
+ };
19145
+
19146
+ /* *
19147
+ * Licensed under the Apache License, Version 2.0 (the "License");
19148
+ * you may not use this file except in compliance with the License.
19149
+ * You may obtain a copy of the License at
19150
+ *
19151
+ * http://www.apache.org/licenses/LICENSE-2.0
19152
+ *
19153
+ * Unless required by applicable law or agreed to in writing, software
19154
+ * distributed under the License is distributed on an "AS IS" BASIS,
19155
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19156
+ * See the License for the specific language governing permissions and
19157
+ * limitations under the License.
19158
+ *
19159
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
19160
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
18925
19161
  * */
18926
19162
  var useStyles$4 = makeStyles(function (theme) {
18927
19163
  return {
18928
- draggableThing: {
18929
- boxShadow: '4px 4px 15px 1px rgba(0,0,0,0.75)'
18930
- },
18931
19164
  mapTitle: {
18932
19165
  position: 'absolute',
18933
19166
  padding: '5px',
@@ -18943,6 +19176,15 @@ var useStyles$4 = makeStyles(function (theme) {
18943
19176
  }
18944
19177
  };
18945
19178
  });
19179
+ var defaultBbox = {
19180
+ srs: 'EPSG:3857',
19181
+ bbox: {
19182
+ left: -450651.2255879827,
19183
+ bottom: 6490531.093143953,
19184
+ right: 1428345.8183648037,
19185
+ top: 7438773.776232235
19186
+ }
19187
+ };
18946
19188
  var ConfigurableConnectedMap = function ConfigurableConnectedMap(_ref) {
18947
19189
  var id = _ref.id,
18948
19190
  title = _ref.title,
@@ -18961,43 +19203,94 @@ var ConfigurableConnectedMap = function ConfigurableConnectedMap(_ref) {
18961
19203
  displayDimensionSelectButtonInMap = _ref$displayDimension === void 0 ? true : _ref$displayDimension,
18962
19204
  _ref$shouldAutoUpdate = _ref.shouldAutoUpdate,
18963
19205
  shouldAutoUpdate = _ref$shouldAutoUpdate === void 0 ? false : _ref$shouldAutoUpdate,
19206
+ _ref$shouldAnimate = _ref.shouldAnimate,
19207
+ shouldAnimate = _ref$shouldAnimate === void 0 ? false : _ref$shouldAnimate,
19208
+ _ref$animationPayload = _ref.animationPayload,
19209
+ animationPayload = _ref$animationPayload === void 0 ? undefined : _ref$animationPayload,
18964
19210
  _ref$shouldShowZoomCo = _ref.shouldShowZoomControls,
18965
19211
  shouldShowZoomControls = _ref$shouldShowZoomCo === void 0 ? false : _ref$shouldShowZoomCo;
18966
- var myMapId = React__default.useRef(id || generateMapId()).current;
18967
- var baseLayerWithUniqueId = Object.assign(Object.assign({}, baseLayer), {
18968
- id: "baseLayer-".concat(myMapId)
18969
- });
18970
- useDefaultMapSettings({
18971
- mapId: myMapId,
18972
- bbox: bbox || initialBbox.bbox,
18973
- srs: srs || initialBbox.srs,
18974
- layers: layers,
18975
- activeLayerId: activeLayerId,
18976
- baseLayers: [baseLayerWithUniqueId, Object.assign(Object.assign({}, overLayer$1), {
18977
- id: generateLayerId()
18978
- })],
18979
- shouldAutoUpdate: shouldAutoUpdate
18980
- });
18981
19212
  var classes = useStyles$4();
19213
+ var dispatch = useDispatch();
19214
+ var mapId = React__default.useRef(id || generateMapId()).current;
19215
+ var baseLayerWithUniqueId = Object.assign(Object.assign({}, baseLayer), {
19216
+ id: "baseLayer-".concat(mapId)
19217
+ }); // make sure all layers have a unique id before going forward
19218
+
19219
+ var _generateUniqueLayerI = generateUniqueLayerIds(layers, activeLayerId),
19220
+ layersNewIds = _generateUniqueLayerI.layersNewIds,
19221
+ activeLayerNewId = _generateUniqueLayerI.activeLayerNewId;
19222
+
19223
+ React__default.useEffect(function () {
19224
+ // set layers
19225
+ dispatch(setLayers({
19226
+ mapId: mapId,
19227
+ layers: layersNewIds
19228
+ })); // set active layer if given otherwise to first layer
19229
+
19230
+ dispatch(setActiveLayerId({
19231
+ mapId: mapId,
19232
+ layerId: activeLayerNewId || layersNewIds.length && layersNewIds[0].id
19233
+ })); // baseLayers
19234
+
19235
+ dispatch(setBaseLayers({
19236
+ mapId: mapId,
19237
+ layers: [baseLayerWithUniqueId, Object.assign(Object.assign({}, overLayer$1), {
19238
+ id: generateLayerId()
19239
+ })]
19240
+ })); // bbox
19241
+
19242
+ dispatch(setBbox$1({
19243
+ bbox: bbox || defaultBbox.bbox,
19244
+ srs: srs || defaultBbox.srs,
19245
+ mapId: mapId
19246
+ })); // auto update
19247
+
19248
+ dispatch(toggleAutoUpdate({
19249
+ mapId: mapId,
19250
+ shouldAutoUpdate: shouldAutoUpdate
19251
+ })); // turn animation on
19252
+
19253
+ if (shouldAnimate === true) {
19254
+ var duration = animationPayload && animationPayload.duration ? animationPayload.duration : 5 * 60; // set to default of 5 hours
19255
+
19256
+ dispatch(mapStartAnimation({
19257
+ mapId: mapId,
19258
+ start: moment.utc().subtract(duration, 'minutes'),
19259
+ end: moment.utc(),
19260
+ interval: animationPayload && animationPayload.interval ? animationPayload.interval : animationIntervalDefault
19261
+ }));
19262
+
19263
+ if (animationPayload && animationPayload.speed) {
19264
+ dispatch(setAnimationDelay({
19265
+ mapId: mapId,
19266
+ animationDelay: getSpeedDelay(animationPayload.speed)
19267
+ }));
19268
+ }
19269
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
19270
+
19271
+ }, []);
18982
19272
  return /*#__PURE__*/React__default.createElement("div", {
18983
- className: className || classes.mapContainer
19273
+ className: className || classes.mapContainer,
19274
+ "data-testid": "configurableConnectedMap"
18984
19275
  }, /*#__PURE__*/React__default.createElement(Typography, {
19276
+ "data-testid": "mapTitle",
18985
19277
  className: classes.mapTitle
18986
- }, title || myMapId), /*#__PURE__*/React__default.createElement(MapControls, {
19278
+ }, title || mapId), /*#__PURE__*/React__default.createElement(MapControls, {
19279
+ "data-testid": "mapControls",
18987
19280
  style: {
18988
19281
  top: shouldShowZoomControls ? 120 : 24
18989
19282
  }
18990
19283
  }, displayLayerManagerButtonInMap && /*#__PURE__*/React__default.createElement(LayerManagerMapButtonConnect, {
18991
- mapId: myMapId
19284
+ mapId: mapId
18992
19285
  }), /*#__PURE__*/React__default.createElement(LegendMapButtonConnect, {
18993
- mapId: myMapId
19286
+ mapId: mapId
18994
19287
  }), displayDimensionSelectButtonInMap && /*#__PURE__*/React__default.createElement(MultiDimensionSelectMapButtonsConnect, {
18995
- mapId: myMapId
19288
+ mapId: mapId
18996
19289
  })), /*#__PURE__*/React__default.createElement(MapViewConnect, {
18997
19290
  controls: {},
18998
19291
  displayTimeInMap: displayTimeInMap,
18999
19292
  showScaleBar: false,
19000
- mapId: myMapId
19293
+ mapId: mapId
19001
19294
  }));
19002
19295
  };
19003
19296
 
@@ -19356,10 +19649,14 @@ var ConfigurableMapWithSliderConnect = function ConfigurableMapWithSliderConnect
19356
19649
  activeLayerId = _ref$activeLayerId === void 0 ? undefined : _ref$activeLayerId,
19357
19650
  _ref$shouldAutoUpdate = _ref.shouldAutoUpdate,
19358
19651
  shouldAutoUpdate = _ref$shouldAutoUpdate === void 0 ? false : _ref$shouldAutoUpdate,
19652
+ _ref$shouldAnimate = _ref.shouldAnimate,
19653
+ shouldAnimate = _ref$shouldAnimate === void 0 ? false : _ref$shouldAnimate,
19359
19654
  bbox = _ref.bbox,
19360
19655
  srs = _ref.srs,
19361
19656
  _ref$shouldShowZoomCo = _ref.shouldShowZoomControls,
19362
- shouldShowZoomControls = _ref$shouldShowZoomCo === void 0 ? true : _ref$shouldShowZoomCo;
19657
+ shouldShowZoomControls = _ref$shouldShowZoomCo === void 0 ? true : _ref$shouldShowZoomCo,
19658
+ _ref$animationPayload = _ref.animationPayload,
19659
+ animationPayload = _ref$animationPayload === void 0 ? undefined : _ref$animationPayload;
19363
19660
  var classes = useStyles$2();
19364
19661
  return /*#__PURE__*/React__default.createElement("div", {
19365
19662
  className: classes.mapSliderConnect,
@@ -19382,10 +19679,108 @@ var ConfigurableMapWithSliderConnect = function ConfigurableMapWithSliderConnect
19382
19679
  bbox: bbox,
19383
19680
  srs: srs,
19384
19681
  shouldAutoUpdate: shouldAutoUpdate,
19682
+ shouldAnimate: shouldAnimate,
19683
+ animationPayload: animationPayload,
19385
19684
  shouldShowZoomControls: shouldShowZoomControls
19386
19685
  }));
19387
19686
  };
19388
19687
 
19688
+ /* *
19689
+ * Licensed under the Apache License, Version 2.0 (the "License");
19690
+ * you may not use this file except in compliance with the License.
19691
+ * You may obtain a copy of the License at
19692
+ *
19693
+ * http://www.apache.org/licenses/LICENSE-2.0
19694
+ *
19695
+ * Unless required by applicable law or agreed to in writing, software
19696
+ * distributed under the License is distributed on an "AS IS" BASIS,
19697
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19698
+ * See the License for the specific language governing permissions and
19699
+ * limitations under the License.
19700
+ *
19701
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
19702
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
19703
+ * */
19704
+ var componentsLookUp = function componentsLookUp(_ref) {
19705
+ var componentType = _ref.componentType,
19706
+ initialProps = _ref.initialProps,
19707
+ id = _ref.id;
19708
+
19709
+ switch (componentType) {
19710
+ case 'ConfigurableMap':
19711
+ case 'ConfigurableMapWithSlider':
19712
+ {
19713
+ var mapPreset = initialProps.mapPreset,
19714
+ shouldShowZoomControls = initialProps.shouldShowZoomControls;
19715
+ return /*#__PURE__*/React__default.createElement(ConfigurableMapWithSliderConnect, Object.assign({}, mapPreset, {
19716
+ id: id,
19717
+ bbox: mapPreset && mapPreset.proj && mapPreset.proj.bbox,
19718
+ srs: mapPreset && mapPreset.proj && mapPreset.proj.srs,
19719
+ shouldAutoUpdate: mapPreset && mapPreset.shouldAutoUpdate || false,
19720
+ shouldShowZoomControls: shouldShowZoomControls !== undefined ? shouldShowZoomControls : true,
19721
+ shouldAnimate: mapPreset && mapPreset.shouldAnimate || false,
19722
+ animationPayload: mapPreset && mapPreset.animationPayload ? mapPreset.animationPayload : undefined,
19723
+ "data-testid": "coreConfigurableMapWithSlider"
19724
+ }));
19725
+ }
19726
+
19727
+ case 'HarmonieTempAndPrecipPreset':
19728
+ {
19729
+ var layers = initialProps.layers;
19730
+ return /*#__PURE__*/React__default.createElement(HarmonieTempAndPrecipPreset, {
19731
+ layers: layers || null,
19732
+ "data-testid": "coreHarmonieTempAndPrecipPreset"
19733
+ });
19734
+ }
19735
+
19736
+ case 'HarmRefTimePreset':
19737
+ {
19738
+ var _layers = initialProps.layers,
19739
+ layerSyncGroupId = initialProps.layerSyncGroupId;
19740
+ return /*#__PURE__*/React__default.createElement(HarmRefTimePreset, {
19741
+ layers: _layers || [],
19742
+ layerSyncGroupId: layerSyncGroupId,
19743
+ "data-testid": "coreHarmonieRefTimePreset"
19744
+ });
19745
+ }
19746
+
19747
+ case 'ConfigurableMultiMapWithSlider':
19748
+ {
19749
+ var _mapPreset = initialProps.mapPreset,
19750
+ _shouldShowZoomControls = initialProps.shouldShowZoomControls;
19751
+ if (!_mapPreset || _mapPreset.length === 0) return null;
19752
+ return /*#__PURE__*/React__default.createElement(MultiMapViewConnect, {
19753
+ rows: 2,
19754
+ cols: 2,
19755
+ showZoomControls: _shouldShowZoomControls !== undefined ? _shouldShowZoomControls : true,
19756
+ maps: _mapPreset.map(function (p, i) {
19757
+ return {
19758
+ id: "".concat(id, "_").concat(i),
19759
+ layers: p.layers || [],
19760
+ activeLayerId: p.activeLayerId || undefined,
19761
+ baseLayer: p.baseLayer || undefined,
19762
+ bbox: _mapPreset[0] && _mapPreset[0].proj && _mapPreset[0].proj.bbox || null,
19763
+ srs: _mapPreset[0] && _mapPreset[0].proj && _mapPreset[0].proj.srs || null
19764
+ };
19765
+ }),
19766
+ "data-testid": "coreConfigurableMultiMapWithSlider"
19767
+ });
19768
+ }
19769
+
19770
+ case 'TimeSlider':
19771
+ {
19772
+ var sliderPreset = initialProps.sliderPreset;
19773
+ return /*#__PURE__*/React__default.createElement(TimeSliderConnect, Object.assign({}, sliderPreset, {
19774
+ sourceId: id,
19775
+ "data-testid": "coreTimeSliderConnect"
19776
+ }));
19777
+ }
19778
+
19779
+ default:
19780
+ return null;
19781
+ }
19782
+ };
19783
+
19389
19784
  /* *
19390
19785
  * Licensed under the Apache License, Version 2.0 (the "License");
19391
19786
  * you may not use this file except in compliance with the License.
@@ -20019,4 +20414,4 @@ var CoreThemeStoreProvider = function CoreThemeStoreProvider(_ref2) {
20019
20414
  }, children)));
20020
20415
  };
20021
20416
 
20022
- export { ConfigurableConnectedMap, ConfigurableMapWithSliderConnect, CoreThemeProvider, CoreThemeStoreProvider, HarmRefTimePreset, HarmonieTempAndPrecipPreset, LayerManagerConnect, LayerManagerMapButtonConnect, Legend, LegendConnect, LegendMapButtonConnect, MapControls, MapView, MapViewConnect, MapViewLayer, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, ReactMapView, ReactMapViewLayer, SyncGroupViewerConnect, index as SyncGroups, TimeSliderConnect, TooltipSelect, ZoomControlConnect, ZoomControls, coreModuleConfig, defaultConfigurations, filterNonTimeDimensions, generateLayerId, generateMapId, generateScreenId, generateTimesliderId, getFirstTimeStepForLayerId, getLastTimeStepForLayerId, getNextTimeStepForLayerId, getPreviousTimeStepForLayerId, getWMJSDimensionForLayerAndDimension, getWMJSMapById, getWMJSTimeDimensionForLayerId, getWMLayerById, reducer$5 as layerReducer, makeMapPreset, actions$3 as mapActions, constants$1 as mapConstants, selectors as mapSelectors, types$2 as mapTypes, utils as mapUtils, publicLayers, publicServices, registerWMJSMap, registerWMLayer, store, actions as syncGroupActions, synchronizationGroupConfig as synchronizationGroupModuleConfig, testLayers, actions$2 as uiActions, types$1 as uiTypes, useStyles$3 as useStyles };
20417
+ export { ConfigurableConnectedMap, ConfigurableMapWithSliderConnect, CoreThemeProvider, CoreThemeStoreProvider, HarmRefTimePreset, HarmonieTempAndPrecipPreset, LayerManagerConnect, LayerManagerMapButtonConnect, Legend, LegendConnect, LegendMapButtonConnect, MapControls, MapView, MapViewConnect, MapViewLayer, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, ReactMapView, ReactMapViewLayer, SyncGroupViewerConnect, index as SyncGroups, TimeSliderConnect, TooltipSelect, ZoomControlConnect, ZoomControls, componentsLookUp, coreModuleConfig, defaultConfigurations, filterNonTimeDimensions, generateLayerId, generateMapId, generateScreenId, generateTimesliderId, getFirstTimeStepForLayerId, getLastTimeStepForLayerId, getNextTimeStepForLayerId, getPreviousTimeStepForLayerId, getWMJSDimensionForLayerAndDimension, getWMJSMapById, getWMJSTimeDimensionForLayerId, getWMLayerById, reducer$5 as layerReducer, makeMapPreset, actions$3 as mapActions, constants$1 as mapConstants, selectors as mapSelectors, types$2 as mapTypes, utils as mapUtils, publicLayers, publicServices, registerWMJSMap, registerWMLayer, store, actions as syncGroupActions, synchronizationGroupConfig as synchronizationGroupModuleConfig, testLayers, actions$2 as uiActions, types$1 as uiTypes, useStyles$3 as useStyles };