qwc2 2025.12.19 → 2025.12.24

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 (68) hide show
  1. package/actions/display.js +6 -6
  2. package/actions/theme.js +4 -19
  3. package/components/AppMenu.js +1 -1
  4. package/components/AttributeForm.js +7 -7
  5. package/components/AttributeTableWidget.js +2 -2
  6. package/components/AutoEditForm.js +6 -3
  7. package/components/EditComboField.js +1 -4
  8. package/components/IdentifyViewer.js +33 -34
  9. package/components/ImportLayer.js +78 -79
  10. package/components/PluginsContainer.js +2 -2
  11. package/components/ResizeableWindow.js +8 -1
  12. package/components/SearchBox.js +2 -2
  13. package/components/SideBar.js +1 -0
  14. package/components/StandardApp.js +1 -2
  15. package/components/ThemeLayersListWindow.js +10 -1
  16. package/components/{map3d/View3DSwitcher.js → ViewSwitcher.js} +74 -29
  17. package/components/map/OlMap.js +1 -1
  18. package/components/map3d/Map3D.js +50 -48
  19. package/components/map3d/MapControls3D.js +4 -1
  20. package/components/map3d/drawtool/EditTool3D.js +1 -1
  21. package/components/map3d/layers/WFSLayer3D.js +1 -1
  22. package/components/share/ShareQRCode.js +1 -1
  23. package/components/style/ViewSwitcher.css +36 -0
  24. package/components/widgets/ColorButton.js +2 -2
  25. package/components/widgets/CopyButton.js +1 -1
  26. package/components/widgets/LayerCatalogWidget.js +4 -4
  27. package/libs/openlayers.js +11 -11
  28. package/package.json +54 -55
  29. package/plugins/API.js +4 -4
  30. package/plugins/FeatureForm.js +2 -2
  31. package/plugins/FeatureSearch.js +12 -12
  32. package/plugins/GeometryDigitizer.js +2 -3
  33. package/plugins/Map.js +11 -4
  34. package/plugins/MapFilter.js +12 -12
  35. package/plugins/MapTip.js +1 -1
  36. package/plugins/ObliqueView.js +31 -12
  37. package/plugins/Print.js +79 -91
  38. package/plugins/Routing.js +1 -1
  39. package/plugins/Share.js +5 -5
  40. package/plugins/TimeManager.js +1 -2
  41. package/plugins/View3D.js +135 -123
  42. package/plugins/map/RedliningSupport.js +1 -1
  43. package/plugins/map3d/Draw3D.js +4 -4
  44. package/plugins/map3d/ExportObjects3D.js +1 -1
  45. package/plugins/map3d/HideObjects3D.js +7 -7
  46. package/plugins/map3d/Identify3D.js +1 -1
  47. package/plugins/map3d/LayerTree3D.js +1 -1
  48. package/plugins/map3d/MapExport3D.js +25 -25
  49. package/plugins/map3d/Measure3D.js +1 -1
  50. package/plugins/map3d/TopBar3D.js +7 -7
  51. package/plugins/style/ObliqueView.css +21 -9
  52. package/reducers/display.js +2 -2
  53. package/reducers/layers.js +11 -11
  54. package/scripts/gen-plugin-docs.js +11 -4
  55. package/scripts/makeIconkit.js +2 -2
  56. package/scripts/themesConfig.js +5 -5
  57. package/scripts/updateTranslations.js +2 -2
  58. package/utils/CoordinatesUtils.js +1 -1
  59. package/utils/EditingUtils.js +4 -4
  60. package/utils/FeatureStyles.js +1 -1
  61. package/utils/LayerUtils.js +73 -74
  62. package/utils/MiscUtils.js +10 -3
  63. package/utils/PermaLinkUtils.js +68 -71
  64. package/utils/SearchProviders.js +2 -2
  65. package/utils/ServiceLayerUtils.js +12 -12
  66. package/utils/ThemeUtils.js +1 -1
  67. package/utils/VectorLayerUtils.js +3 -3
  68. package/components/map3d/style/View3DSwitcher.css +0 -19
@@ -259,7 +259,7 @@ var FeatureForm = /*#__PURE__*/function (_React$Component) {
259
259
  },
260
260
  value: this.state.selectedFeature
261
261
  }, Object.entries(this.state.pickedFeatures).map(function (_ref7) {
262
- var _ref9, _ref10, _match$layer$translat, _match$layer$translat2, _match$sublayer;
262
+ var _ref9, _ref0, _match$layer$translat, _match$layer$translat2, _match$sublayer;
263
263
  var _ref8 = _slicedToArray(_ref7, 2),
264
264
  id = _ref8[0],
265
265
  feature = _ref8[1];
@@ -270,7 +270,7 @@ var FeatureForm = /*#__PURE__*/function (_React$Component) {
270
270
  featureId = _id$split2[2];
271
271
  var editConfig = _this2.props.editConfigs[mapName][layerName];
272
272
  var match = LayerUtils.searchLayer(_this2.props.layers, 'wms_name', mapName, 'name', layerName);
273
- var layerTitle = (_ref9 = (_ref10 = (_match$layer$translat = (_match$layer$translat2 = match.layer.translations) === null || _match$layer$translat2 === void 0 || (_match$layer$translat2 = _match$layer$translat2.layertree) === null || _match$layer$translat2 === void 0 ? void 0 : _match$layer$translat2[layerName]) !== null && _match$layer$translat !== void 0 ? _match$layer$translat : editConfig.layerTitle) !== null && _ref10 !== void 0 ? _ref10 : match === null || match === void 0 || (_match$sublayer = match.sublayer) === null || _match$sublayer === void 0 ? void 0 : _match$sublayer.title) !== null && _ref9 !== void 0 ? _ref9 : layerName;
273
+ var layerTitle = (_ref9 = (_ref0 = (_match$layer$translat = (_match$layer$translat2 = match.layer.translations) === null || _match$layer$translat2 === void 0 || (_match$layer$translat2 = _match$layer$translat2.layertree) === null || _match$layer$translat2 === void 0 ? void 0 : _match$layer$translat2[layerName]) !== null && _match$layer$translat !== void 0 ? _match$layer$translat : editConfig.layerTitle) !== null && _ref0 !== void 0 ? _ref0 : match === null || match === void 0 || (_match$sublayer = match.sublayer) === null || _match$sublayer === void 0 ? void 0 : _match$sublayer.title) !== null && _ref9 !== void 0 ? _ref9 : layerName;
274
274
  var featureName = editConfig.displayField ? feature.properties[editConfig.displayField] : featureText + " " + featureId;
275
275
  return /*#__PURE__*/React.createElement("option", {
276
276
  key: id,
@@ -294,18 +294,18 @@ var FeatureSearch = /*#__PURE__*/function (_React$Component) {
294
294
  });
295
295
  _defineProperty(_this, "reloadSelectOptions", function () {
296
296
  var _this$state$searchPro, _this$state$searchPro2;
297
- Object.entries((_this$state$searchPro = (_this$state$searchPro2 = _this.state.searchProviders[_this.state.selectedProvider]) === null || _this$state$searchPro2 === void 0 || (_this$state$searchPro2 = _this$state$searchPro2.params) === null || _this$state$searchPro2 === void 0 ? void 0 : _this$state$searchPro2.fields) !== null && _this$state$searchPro !== void 0 ? _this$state$searchPro : {}).forEach(function (_ref10) {
298
- var _ref11 = _slicedToArray(_ref10, 2),
299
- name = _ref11[0],
300
- fieldcfg = _ref11[1];
297
+ Object.entries((_this$state$searchPro = (_this$state$searchPro2 = _this.state.searchProviders[_this.state.selectedProvider]) === null || _this$state$searchPro2 === void 0 || (_this$state$searchPro2 = _this$state$searchPro2.params) === null || _this$state$searchPro2 === void 0 ? void 0 : _this$state$searchPro2.fields) !== null && _this$state$searchPro !== void 0 ? _this$state$searchPro : {}).forEach(function (_ref0) {
298
+ var _ref1 = _slicedToArray(_ref0, 2),
299
+ name = _ref1[0],
300
+ fieldcfg = _ref1[1];
301
301
  if (fieldcfg.type === "select") {
302
302
  if (fieldcfg.options_query) {
303
303
  var _this$state$providerS3;
304
304
  var url = fieldcfg.options_query;
305
- Object.entries(_this.state.formValues).forEach(function (_ref12) {
306
- var _ref13 = _slicedToArray(_ref12, 2),
307
- key = _ref13[0],
308
- value = _ref13[1];
305
+ Object.entries(_this.state.formValues).forEach(function (_ref10) {
306
+ var _ref11 = _slicedToArray(_ref10, 2),
307
+ key = _ref11[0],
308
+ value = _ref11[1];
309
309
  url = url.replace("$".concat(key, "$"), value);
310
310
  });
311
311
  if (((_this$state$providerS3 = _this.state.providerSelectOptions[name]) === null || _this$state$providerS3 === void 0 ? void 0 : _this$state$providerS3.source) !== url) {
@@ -415,10 +415,10 @@ var FeatureSearch = /*#__PURE__*/function (_React$Component) {
415
415
  this.setState(function (state) {
416
416
  var _state$searchProvider;
417
417
  return {
418
- formValues: Object.entries(((_state$searchProvider = state.searchProviders[state.selectedProvider]) === null || _state$searchProvider === void 0 || (_state$searchProvider = _state$searchProvider.params) === null || _state$searchProvider === void 0 ? void 0 : _state$searchProvider.fields) || []).reduce(function (res, _ref14) {
419
- var _ref15 = _slicedToArray(_ref14, 2),
420
- field = _ref15[0],
421
- cfg = _ref15[1];
418
+ formValues: Object.entries(((_state$searchProvider = state.searchProviders[state.selectedProvider]) === null || _state$searchProvider === void 0 || (_state$searchProvider = _state$searchProvider.params) === null || _state$searchProvider === void 0 ? void 0 : _state$searchProvider.fields) || []).reduce(function (res, _ref12) {
419
+ var _ref13 = _slicedToArray(_ref12, 2),
420
+ field = _ref13[0],
421
+ cfg = _ref13[1];
422
422
  return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, field, ""));
423
423
  }, {})
424
424
  };
@@ -32,7 +32,6 @@ import React from 'react';
32
32
  import { connect } from 'react-redux';
33
33
  import polySelfIntersections from 'geojson-polygon-self-intersections';
34
34
  import isEmpty from 'lodash.isempty';
35
- import omit from 'lodash.omit';
36
35
  import PropTypes from 'prop-types';
37
36
  import { LayerRole, removeLayer, addLayerFeatures, removeLayerFeatures, clearLayer } from '../actions/layers';
38
37
  import { changeRedliningState, resetRedliningState } from '../actions/redlining';
@@ -511,8 +510,8 @@ var GeometryDigitizer = /*#__PURE__*/function (_React$Component) {
511
510
  }).join(";") : JSON.stringify({
512
511
  type: "FeatureCollection",
513
512
  features: supportedFeatures.map(function (feature) {
514
- var newFeature = omit(feature, EXCLUDE_PROPS);
515
- newFeature.properties = omit(newFeature.properties, EXCLUDE_ATTRS);
513
+ var newFeature = MiscUtils.objectOmit(feature, EXCLUDE_PROPS);
514
+ newFeature.properties = MiscUtils.objectOmit(newFeature.properties, EXCLUDE_ATTRS);
516
515
  return newFeature;
517
516
  })
518
517
  });
package/plugins/Map.js CHANGED
@@ -36,9 +36,10 @@ import { connect } from 'react-redux';
36
36
  import isEmpty from 'lodash.isempty';
37
37
  import PropTypes from 'prop-types';
38
38
  import { LayerRole } from '../actions/layers';
39
- import { MapContainerPortalContext } from '../components/PluginsContainer';
40
39
  import OlLayer from '../components/map/OlLayer';
41
40
  import OlMap from '../components/map/OlMap';
41
+ import { MapContainerPortalContext } from '../components/PluginsContainer';
42
+ import ViewSwitcher from '../components/ViewSwitcher';
42
43
  import Spinner from '../components/widgets/Spinner';
43
44
  import LayerUtils from '../utils/LayerUtils';
44
45
  import LocaleUtils from '../utils/LocaleUtils';
@@ -273,7 +274,10 @@ var Map = /*#__PURE__*/function (_React$Component) {
273
274
  mapOptions: this.props.mapOptions
274
275
  }, this.props.map, {
275
276
  fullExtent: (_this$props$theme = this.props.theme) === null || _this$props$theme === void 0 ? void 0 : _this$props$theme.bbox
276
- }), this.renderLayers(), this.renderSupportTools())), loadingIndicator], this.context);
277
+ }), this.renderLayers(), this.renderSupportTools())), /*#__PURE__*/React.createElement(ViewSwitcher, {
278
+ key: "ViewSwitcher",
279
+ position: this.props.viewSwitcherPosition
280
+ }), loadingIndicator], this.context);
277
281
  }
278
282
  }]);
279
283
  }(React.Component);
@@ -303,7 +307,9 @@ _defineProperty(Map, "propTypes", {
303
307
  tools: PropTypes.object,
304
308
  /** Options to pass to the map support plugins, in the form `{"<Name>": {<options>}}`.
305
309
  * Refer to the documentation of the <a href="#mapSupportPlugins">Map support plugins</a> for settable options. */
306
- toolsOptions: PropTypes.object
310
+ toolsOptions: PropTypes.object,
311
+ /** Position of the view switcher button. */
312
+ viewSwitcherPosition: PropTypes.number
307
313
  });
308
314
  _defineProperty(Map, "defaultProps", {
309
315
  mapOptions: {},
@@ -311,7 +317,8 @@ _defineProperty(Map, "defaultProps", {
311
317
  swipeGeometryTypeBlacklist: [],
312
318
  swipeLayerNameBlacklist: [],
313
319
  tools: {},
314
- toolsOptions: {}
320
+ toolsOptions: {},
321
+ viewSwitcherPosition: 6
315
322
  });
316
323
  export default (function (tools) {
317
324
  return connect(function (state) {
@@ -145,7 +145,7 @@ var MapFilter = /*#__PURE__*/function (_React$Component) {
145
145
  var expr = '';
146
146
  try {
147
147
  expr = JSON.parse(entry.expr);
148
- } catch (e) {
148
+ } catch (_unused) {
149
149
  return;
150
150
  }
151
151
  if (layerExpressions[entry.layer]) {
@@ -225,7 +225,7 @@ var MapFilter = /*#__PURE__*/function (_React$Component) {
225
225
  var expr = null;
226
226
  try {
227
227
  expr = JSON.parse(entry.expr);
228
- } catch (e) {
228
+ } catch (_unused2) {
229
229
  return null;
230
230
  }
231
231
  return {
@@ -339,7 +339,7 @@ var MapFilter = /*#__PURE__*/function (_React$Component) {
339
339
  var filterexpr = null;
340
340
  try {
341
341
  filterexpr = JSON.parse(_this.state.filterEditor.value);
342
- } catch (e) {
342
+ } catch (_unused3) {
343
343
  // Pass
344
344
  }
345
345
  if (!Array.isArray(filterexpr) || !_validateExpression(filterexpr)) {
@@ -704,16 +704,16 @@ var MapFilter = /*#__PURE__*/function (_React$Component) {
704
704
  if (!prevProps.theme && (_this$props$startupPa = this.props.startupParams) !== null && _this$props$startupPa !== void 0 && _this$props$startupPa.f) {
705
705
  try {
706
706
  var startupConfig = JSON.parse(this.props.startupParams.f);
707
- Object.entries(startupConfig).forEach(function (_ref10) {
708
- var _ref11 = _slicedToArray(_ref10, 2),
709
- filterId = _ref11[0],
710
- values = _ref11[1];
707
+ Object.entries(startupConfig).forEach(function (_ref0) {
708
+ var _ref1 = _slicedToArray(_ref0, 2),
709
+ filterId = _ref1[0],
710
+ values = _ref1[1];
711
711
  if (filterId in filters) {
712
712
  filters[filterId].active = true;
713
- Object.entries(values).forEach(function (_ref12) {
714
- var _ref13 = _slicedToArray(_ref12, 2),
715
- fieldId = _ref13[0],
716
- value = _ref13[1];
713
+ Object.entries(values).forEach(function (_ref10) {
714
+ var _ref11 = _slicedToArray(_ref10, 2),
715
+ fieldId = _ref11[0],
716
+ value = _ref11[1];
717
717
  filters[filterId].values[fieldId] = value;
718
718
  });
719
719
  }
@@ -737,7 +737,7 @@ var MapFilter = /*#__PURE__*/function (_React$Component) {
737
737
  }));
738
738
  }, {});
739
739
  }
740
- } catch (e) {
740
+ } catch (_unused4) {
741
741
  /* eslint-disable-next-line */
742
742
  console.log("Error while parsing startup filter");
743
743
  }
package/plugins/MapTip.js CHANGED
@@ -29,11 +29,11 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
29
29
  * LICENSE file in the root directory of this source tree.
30
30
  */
31
31
 
32
+ import htmlReactParser, { domToReact } from 'html-react-parser';
32
33
  import React from 'react';
33
34
  import ReactDOM from 'react-dom';
34
35
  import { connect } from 'react-redux';
35
36
  import DOMPurify from 'dompurify';
36
- import htmlReactParser, { domToReact } from 'html-react-parser';
37
37
  import isEmpty from 'lodash.isempty';
38
38
  import PropTypes from 'prop-types';
39
39
  import { v4 as uuidv4 } from 'uuid';
@@ -28,12 +28,13 @@ import axios from 'axios';
28
28
  import isEqual from 'lodash.isequal';
29
29
  import ol from 'openlayers';
30
30
  import PropTypes from 'prop-types';
31
+ import { setViewMode, ViewMode } from '../actions/display';
31
32
  import { zoomToExtent } from '../actions/map';
32
33
  import { setCurrentTask } from '../actions/task';
33
34
  import Icon from '../components/Icon';
35
+ import OlLayer from '../components/map/OlLayer';
34
36
  import OverviewMapButton from '../components/OverviewMapButton';
35
37
  import ResizeableWindow from '../components/ResizeableWindow';
36
- import OlLayer from '../components/map/OlLayer';
37
38
  import InputContainer from '../components/widgets/InputContainer';
38
39
  import ConfigUtils from '../utils/ConfigUtils';
39
40
  import CoordinatesUtils from '../utils/CoordinatesUtils';
@@ -72,6 +73,7 @@ var ObliqueView = /*#__PURE__*/function (_React$Component) {
72
73
  _classCallCheck(this, ObliqueView);
73
74
  _this = _callSuper(this, ObliqueView, [props]);
74
75
  _defineProperty(_this, "onClose", function () {
76
+ _this.props.setViewMode(ViewMode._2D);
75
77
  _this.setState(ObliqueView.defaultState);
76
78
  });
77
79
  _defineProperty(_this, "renderScaleChooser", function () {
@@ -264,6 +266,9 @@ var ObliqueView = /*#__PURE__*/function (_React$Component) {
264
266
  key: "componentDidMount",
265
267
  value: function componentDidMount() {
266
268
  window.addEventListener('focus', this.trackFocus, true);
269
+ if (this.props.startupParams.v === "oblique") {
270
+ this.props.setViewMode(ViewMode._Oblique);
271
+ }
267
272
  }
268
273
  }, {
269
274
  key: "componentWillUnmount",
@@ -274,12 +279,14 @@ var ObliqueView = /*#__PURE__*/function (_React$Component) {
274
279
  key: "componentDidUpdate",
275
280
  value: function componentDidUpdate(prevProps, prevState) {
276
281
  if (this.props.active && !prevProps.active) {
277
- this.setState({
278
- active: true
279
- });
282
+ this.props.setViewMode(ViewMode._Oblique);
280
283
  this.props.setCurrentTask(null);
281
284
  }
282
- if (this.state.active && this.props.theme && (this.props.theme !== prevProps.theme || !prevState.active)) {
285
+ // Honour theme startupView on theme change unless first loaded theme and startupParams.v is set
286
+ if (this.props.theme !== prevProps.theme && this.props.theme.startupView === "oblique" && (prevProps.theme !== null || !this.props.startupParams.v)) {
287
+ this.props.setViewMode(ViewMode._Oblique);
288
+ }
289
+ if (this.props.viewMode === ViewMode._Oblique && this.props.theme && (this.props.theme !== prevProps.theme || prevProps.viewMode !== ViewMode._Oblique)) {
283
290
  var _datasets$find$name, _datasets$find, _datasets$;
284
291
  var datasets = this.props.theme.obliqueDatasets || [];
285
292
  var defaultDataset = (_datasets$find$name = (_datasets$find = datasets.find(function (entry) {
@@ -318,9 +325,14 @@ var ObliqueView = /*#__PURE__*/function (_React$Component) {
318
325
  key: "render",
319
326
  value: function render() {
320
327
  var _this2 = this,
328
+ _this$props$theme,
329
+ _this$props$theme$fin,
330
+ _this$props$themes,
331
+ _this$props$themes$fi,
321
332
  _obliqueConfig$backgr,
322
- _this$state$selectedD;
323
- if (!this.state.active) {
333
+ _this$state$selectedD,
334
+ _this$props$theme2;
335
+ if (this.props.viewMode !== ViewMode._Oblique || !this.props.themes) {
324
336
  return null;
325
337
  }
326
338
  var rot = this.getRotation();
@@ -340,10 +352,10 @@ var ObliqueView = /*#__PURE__*/function (_React$Component) {
340
352
  title: LocaleUtils.tr("common.lock2dview"),
341
353
  active: this.state.viewsLocked
342
354
  }];
343
- var obliqueConfig = this.props.theme.obliqueDatasets.find(function (entry) {
355
+ var obliqueConfig = (_this$props$theme = this.props.theme) === null || _this$props$theme === void 0 || (_this$props$theme = _this$props$theme.obliqueDatasets) === null || _this$props$theme === void 0 || (_this$props$theme$fin = _this$props$theme.find) === null || _this$props$theme$fin === void 0 ? void 0 : _this$props$theme$fin.call(_this$props$theme, function (entry) {
344
356
  return entry.name === _this2.state.selectedDataset;
345
357
  });
346
- var basemap = this.props.themes.backgroundLayers.find(function (entry) {
358
+ var basemap = (_this$props$themes = this.props.themes) === null || _this$props$themes === void 0 || (_this$props$themes = _this$props$themes.backgroundLayers) === null || _this$props$themes === void 0 || (_this$props$themes$fi = _this$props$themes.find) === null || _this$props$themes$fi === void 0 ? void 0 : _this$props$themes$fi.call(_this$props$themes, function (entry) {
347
359
  return entry.name === (obliqueConfig === null || obliqueConfig === void 0 ? void 0 : obliqueConfig.backgroundLayer);
348
360
  });
349
361
  return /*#__PURE__*/React.createElement(ResizeableWindow, {
@@ -422,7 +434,9 @@ var ObliqueView = /*#__PURE__*/function (_React$Component) {
422
434
  transform: "rotate(".concat(-rot, "deg)")
423
435
  },
424
436
  tabIndex: 0
425
- }, "S"), /*#__PURE__*/React.createElement("span", null)), /*#__PURE__*/React.createElement("div", {
437
+ }, "S"), /*#__PURE__*/React.createElement("span", null), /*#__PURE__*/React.createElement("div", {
438
+ className: "obliqueview-nav-circle"
439
+ })), /*#__PURE__*/React.createElement("div", {
426
440
  className: "obliqueview-nav-zoom"
427
441
  }, /*#__PURE__*/React.createElement(Icon, {
428
442
  icon: "plus",
@@ -450,7 +464,7 @@ var ObliqueView = /*#__PURE__*/function (_React$Component) {
450
464
  });
451
465
  },
452
466
  value: (_this$state$selectedD = this.state.selectedDataset) !== null && _this$state$selectedD !== void 0 ? _this$state$selectedD : ""
453
- }, (this.props.theme.obliqueDatasets || []).map(function (entry) {
467
+ }, (((_this$props$theme2 = this.props.theme) === null || _this$props$theme2 === void 0 ? void 0 : _this$props$theme2.obliqueDatasets) || []).map(function (entry) {
454
468
  var _entry$title;
455
469
  return /*#__PURE__*/React.createElement("option", {
456
470
  key: entry.name,
@@ -488,8 +502,11 @@ _defineProperty(ObliqueView, "propTypes", {
488
502
  /** A list of allowed map scales, in decreasing order. */
489
503
  scales: PropTypes.arrayOf(PropTypes.number),
490
504
  setCurrentTask: PropTypes.func,
505
+ setViewMode: PropTypes.func,
506
+ startupParams: PropTypes.object,
491
507
  theme: PropTypes.object,
492
508
  themes: PropTypes.object,
509
+ viewMode: PropTypes.number,
493
510
  zoomToExtent: PropTypes.func
494
511
  });
495
512
  _defineProperty(ObliqueView, "defaultProps", {
@@ -505,7 +522,6 @@ _defineProperty(ObliqueView, "defaultProps", {
505
522
  scales: [20000, 10000, 5000, 2500, 1000, 500, 250]
506
523
  });
507
524
  _defineProperty(ObliqueView, "defaultState", {
508
- active: false,
509
525
  selectedDataset: null,
510
526
  datasetConfig: null,
511
527
  currentDirection: null,
@@ -517,10 +533,13 @@ export default connect(function (state) {
517
533
  return {
518
534
  active: state.task.id === "ObliqueView",
519
535
  map: state.map,
536
+ startupParams: state.localConfig.startupParams,
537
+ viewMode: state.display.viewMode,
520
538
  theme: state.theme.current,
521
539
  themes: state.theme.themes
522
540
  };
523
541
  }, {
524
542
  setCurrentTask: setCurrentTask,
543
+ setViewMode: setViewMode,
525
544
  zoomToExtent: zoomToExtent
526
545
  })(ObliqueView);