qwc2 2025.10.13 → 2025.10.14

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 (241) hide show
  1. package/actions/display.js +30 -1
  2. package/actions/editing.js +22 -1
  3. package/actions/layerinfo.js +13 -1
  4. package/actions/layers.js +213 -3
  5. package/actions/localConfig.js +58 -1
  6. package/actions/locale.js +21 -1
  7. package/actions/locate.js +26 -1
  8. package/actions/logging.js +10 -1
  9. package/actions/map.js +105 -2
  10. package/actions/measurement.js +12 -1
  11. package/actions/processNotifications.js +37 -1
  12. package/actions/redlining.js +18 -1
  13. package/actions/redliningPick.js +12 -1
  14. package/actions/search.js +12 -1
  15. package/actions/serviceinfo.js +12 -1
  16. package/actions/task.js +55 -3
  17. package/actions/theme.js +339 -19
  18. package/actions/windows.js +164 -5
  19. package/components/AppMenu.js +435 -3
  20. package/components/AttributeForm.js +928 -32
  21. package/components/AttributeTableWidget.js +1105 -13
  22. package/components/AutoEditForm.js +189 -3
  23. package/components/CoordinateDisplayer.js +78 -2
  24. package/components/EditComboField.js +190 -6
  25. package/components/EditUploadField.js +315 -3
  26. package/components/ExportSelection.js +203 -2
  27. package/components/FullscreenSwitcher.js +90 -3
  28. package/components/Icon.js +81 -2
  29. package/components/IdentifyViewer.js +1161 -6
  30. package/components/ImportLayer.js +718 -20
  31. package/components/LayerInfoWindow.js +145 -2
  32. package/components/LinkFeatureForm.js +246 -5
  33. package/components/MapButton.js +88 -2
  34. package/components/MapSelection.js +287 -8
  35. package/components/MessageBar.js +68 -2
  36. package/components/NumericInputWindow.js +359 -2
  37. package/components/PickFeature.js +266 -2
  38. package/components/PluginsContainer.js +227 -8
  39. package/components/PrintSelection.js +620 -49
  40. package/components/ProcessNotifications.js +104 -2
  41. package/components/QtDesignerForm.js +1137 -18
  42. package/components/ResizeableWindow.js +591 -8
  43. package/components/SearchBox.js +1307 -20
  44. package/components/ServiceInfoWindow.js +107 -2
  45. package/components/SideBar.js +204 -4
  46. package/components/StandardApp.js +381 -20
  47. package/components/Swipeable.js +15 -1
  48. package/components/TaskBar.js +85 -2
  49. package/components/ThemeLayersListWindow.js +216 -4
  50. package/components/ThemeList.js +381 -7
  51. package/components/Toolbar.js +106 -2
  52. package/components/WindowManager.js +178 -2
  53. package/components/map/OlLayer.js +257 -6
  54. package/components/map/OlMap.js +405 -5
  55. package/components/map/layers/BingLayer.js +31 -2
  56. package/components/map/layers/GoogleLayer.js +222 -19
  57. package/components/map/layers/GraticuleLayer.js +21 -1
  58. package/components/map/layers/ImageLayer.js +15 -1
  59. package/components/map/layers/MVTLayer.js +52 -2
  60. package/components/map/layers/OSMLayer.js +24 -2
  61. package/components/map/layers/OverlayLayer.js +55 -3
  62. package/components/map/layers/VectorLayer.js +173 -8
  63. package/components/map/layers/WFSLayer.js +220 -6
  64. package/components/map/layers/WMSLayer.js +180 -6
  65. package/components/map/layers/WMTSLayer.js +67 -3
  66. package/components/map/layers/XYZLayer.js +24 -2
  67. package/components/map/layers/index.js +28 -1
  68. package/components/map3d/EditDataset3D.js +190 -3
  69. package/components/map3d/HeightProfile3D.js +402 -3
  70. package/components/map3d/ImportObjects3D.js +162 -2
  71. package/components/map3d/Map3D.js +1304 -38
  72. package/components/map3d/MapControls3D.js +392 -7
  73. package/components/map3d/SearchField3D.js +183 -11
  74. package/components/map3d/View3DSwitcher.js +98 -2
  75. package/components/map3d/drawtool/CreateTool3D.js +174 -4
  76. package/components/map3d/drawtool/EditTool3D.js +590 -6
  77. package/components/map3d/drawtool/NumericInput3D.js +336 -4
  78. package/components/map3d/layers/GeoTIFFLayer3D.js +15 -1
  79. package/components/map3d/layers/VectorLayer3D.js +53 -2
  80. package/components/map3d/layers/WFSLayer3D.js +109 -3
  81. package/components/map3d/layers/WMSLayer3D.js +70 -2
  82. package/components/map3d/layers/WMTSLayer3D.js +27 -3
  83. package/components/map3d/layers/index.js +14 -1
  84. package/components/map3d/utils/FirstPersonControls3D.js +423 -16
  85. package/components/map3d/utils/MiscUtils3D.js +221 -13
  86. package/components/map3d/utils/OrbitControls3D.js +176 -5
  87. package/components/map3d/utils/Tiles3DStyle.js +238 -9
  88. package/components/share/ShareLink.js +54 -2
  89. package/components/share/ShareQRCode.js +62 -2
  90. package/components/share/ShareSocials.js +125 -3
  91. package/components/timeline/FixedTimeline.js +236 -5
  92. package/components/timeline/InfiniteTimeline.js +347 -8
  93. package/components/timeline/TimelineFeaturesSlider.js +439 -5
  94. package/components/widgets/AccordeonWidget.js +96 -2
  95. package/components/widgets/ButtonBar.js +124 -2
  96. package/components/widgets/ColorButton.js +201 -3
  97. package/components/widgets/ComboBox.js +166 -2
  98. package/components/widgets/CopyButton.js +110 -2
  99. package/components/widgets/DateTimeInput.js +100 -3
  100. package/components/widgets/EditableSelect.js +230 -3
  101. package/components/widgets/FileSelector.js +128 -4
  102. package/components/widgets/Input.js +124 -2
  103. package/components/widgets/InputContainer.js +96 -2
  104. package/components/widgets/LayerCatalogWidget.js +219 -3
  105. package/components/widgets/MenuButton.js +157 -1
  106. package/components/widgets/ModalDialog.js +64 -2
  107. package/components/widgets/NavBar.js +119 -2
  108. package/components/widgets/NumberInput.js +226 -4
  109. package/components/widgets/PopupMenu.js +72 -1
  110. package/components/widgets/Primitives.js +6 -1
  111. package/components/widgets/ReCaptchaWidget.js +55 -1
  112. package/components/widgets/SearchWidget.js +255 -2
  113. package/components/widgets/Spinner.js +44 -2
  114. package/components/widgets/SuggestionInput.js +77 -2
  115. package/components/widgets/TextInput.js +308 -2
  116. package/components/widgets/ToggleSwitch.js +85 -2
  117. package/components/widgets/VectorLayerPicker.js +85 -3
  118. package/libs/openlayers.js +225 -5
  119. package/package.json +1 -1
  120. package/plugins/API.js +358 -15
  121. package/plugins/AttributeTable.js +109 -3
  122. package/plugins/Authentication.js +130 -5
  123. package/plugins/BackgroundSwitcher.js +218 -4
  124. package/plugins/Bookmark.js +289 -3
  125. package/plugins/BottomBar.js +298 -4
  126. package/plugins/CookiePopup.js +67 -3
  127. package/plugins/Cyclomedia.js +442 -5
  128. package/plugins/Editing.js +497 -9
  129. package/plugins/FeatureForm.js +366 -4
  130. package/plugins/FeatureSearch.js +458 -3
  131. package/plugins/GeometryDigitizer.js +664 -7
  132. package/plugins/HeightProfile.js +763 -15
  133. package/plugins/Help.js +102 -3
  134. package/plugins/HomeButton.js +80 -3
  135. package/plugins/Identify.js +543 -5
  136. package/plugins/LayerCatalog.js +215 -4
  137. package/plugins/LayerTree.js +1194 -6
  138. package/plugins/LocateButton.js +94 -3
  139. package/plugins/Map.js +320 -16
  140. package/plugins/MapCompare.js +94 -3
  141. package/plugins/MapCopyright.js +127 -5
  142. package/plugins/MapExport.js +613 -20
  143. package/plugins/MapFilter.js +868 -12
  144. package/plugins/MapInfoTooltip.js +277 -3
  145. package/plugins/MapLegend.js +253 -4
  146. package/plugins/MapTip.js +290 -4
  147. package/plugins/Measure.js +220 -4
  148. package/plugins/NewsPopup.js +137 -3
  149. package/plugins/OverviewMap.js +167 -7
  150. package/plugins/Panoramax.js +340 -2
  151. package/plugins/Portal.js +199 -4
  152. package/plugins/Print.js +1231 -15
  153. package/plugins/Redlining.js +750 -6
  154. package/plugins/Reports.js +332 -3
  155. package/plugins/Routing.js +1278 -15
  156. package/plugins/ScratchDrawing.js +173 -5
  157. package/plugins/Settings.js +241 -4
  158. package/plugins/Share.js +198 -3
  159. package/plugins/StartupMarker.js +84 -4
  160. package/plugins/TaskButton.js +88 -3
  161. package/plugins/ThemeSwitcher.js +164 -4
  162. package/plugins/TimeManager.js +971 -10
  163. package/plugins/TopBar.js +300 -7
  164. package/plugins/TourGuide.js +213 -2
  165. package/plugins/ValueTool.js +419 -4
  166. package/plugins/View3D.js +519 -14
  167. package/plugins/ZoomButtons.js +165 -3
  168. package/plugins/map/EditingSupport.js +199 -7
  169. package/plugins/map/LocateSupport.js +260 -4
  170. package/plugins/map/MeasurementSupport.js +216 -8
  171. package/plugins/map/RedliningPickSupport.js +201 -7
  172. package/plugins/map/RedliningSupport.js +726 -17
  173. package/plugins/map/SnapInteraction.js +101 -1
  174. package/plugins/map/SnapSupport.js +210 -2
  175. package/plugins/map/SnappingSupport.js +356 -17
  176. package/plugins/map3d/BackgroundSwitcher3D.js +44 -3
  177. package/plugins/map3d/BottomBar3D.js +118 -3
  178. package/plugins/map3d/Compare3D.js +422 -8
  179. package/plugins/map3d/Draw3D.js +353 -6
  180. package/plugins/map3d/ExportObjects3D.js +393 -18
  181. package/plugins/map3d/HideObjects3D.js +313 -12
  182. package/plugins/map3d/Identify3D.js +283 -12
  183. package/plugins/map3d/LayerTree3D.js +323 -3
  184. package/plugins/map3d/MapCopyright3D.js +128 -5
  185. package/plugins/map3d/MapExport3D.js +590 -10
  186. package/plugins/map3d/MapLight3D.js +553 -6
  187. package/plugins/map3d/Measure3D.js +571 -20
  188. package/plugins/map3d/OverviewMap3D.js +169 -3
  189. package/plugins/map3d/Settings3D.js +73 -3
  190. package/plugins/map3d/TopBar3D.js +207 -9
  191. package/plugins/redlining/RedliningBufferSupport.js +206 -3
  192. package/reducers/display.js +34 -2
  193. package/reducers/editing.js +68 -3
  194. package/reducers/index.js +9 -1
  195. package/reducers/layerinfo.js +26 -2
  196. package/reducers/layers.js +456 -9
  197. package/reducers/localConfig.js +122 -2
  198. package/reducers/locale.js +38 -2
  199. package/reducers/locate.js +40 -2
  200. package/reducers/map.js +176 -5
  201. package/reducers/measurement.js +42 -2
  202. package/reducers/processNotifications.js +49 -2
  203. package/reducers/redlining.js +50 -2
  204. package/reducers/redliningPick.js +27 -2
  205. package/reducers/search.js +20 -1
  206. package/reducers/serviceinfo.js +25 -2
  207. package/reducers/task.js +45 -2
  208. package/reducers/theme.js +51 -2
  209. package/reducers/windows.js +203 -2
  210. package/scripts/dist.sh +1 -1
  211. package/scripts/gen-plugin-docs.js +152 -2
  212. package/scripts/makeIconkit.js +85 -6
  213. package/scripts/themesConfig.js +742 -40
  214. package/scripts/updateTranslations.js +251 -10
  215. package/selectors/searchproviders.js +44 -2
  216. package/stores/StandardStore.js +42 -2
  217. package/utils/ConfigUtils.js +84 -3
  218. package/utils/CoordinatesUtils.js +234 -23
  219. package/utils/DxfUtils.js +237 -11
  220. package/utils/EditingInterface.js +421 -87
  221. package/utils/EditingUtils.js +357 -13
  222. package/utils/ElevationInterface.js +83 -22
  223. package/utils/FeatureStyles.js +429 -5
  224. package/utils/IdentifyUtils.js +443 -7
  225. package/utils/ImageEditor.js +79 -9
  226. package/utils/LayerUtils.js +1516 -50
  227. package/utils/LocaleUtils.js +117 -7
  228. package/utils/MapUtils.js +241 -59
  229. package/utils/MeasureUtils.js +323 -2
  230. package/utils/MiscUtils.js +189 -11
  231. package/utils/PermaLinkUtils.js +429 -6
  232. package/utils/PluginStore.js +27 -1
  233. package/utils/ResourceRegistry.js +15 -1
  234. package/utils/RoutingInterface.js +307 -7
  235. package/utils/SearchProviders.js +722 -19
  236. package/utils/ServiceLayerUtils.js +669 -14
  237. package/utils/Signal.js +32 -2
  238. package/utils/ThemeUtils.js +341 -7
  239. package/utils/VectorLayerUtils.js +589 -15
  240. package/utils/expr_grammar/grammar.js +2239 -2
  241. package/utils/expr_grammar/test.js +65 -3
@@ -1,13 +1,138 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
3
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
4
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
5
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
6
+ function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
7
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
8
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
9
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
10
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
11
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
12
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
14
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
+ /**
2
16
  * Copyright 2018-2024 Sourcepole AG
3
17
  * All rights reserved.
4
18
  *
5
19
  * This source code is licensed under the BSD-style license found in the
6
20
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import ReactDOM from"react-dom";import{connect}from"react-redux";import PropTypes from"prop-types";import url from"url";import Icon from"../components/Icon";import{AppInfosPortalContext}from"../components/PluginsContainer";import ConfigUtils from"../utils/ConfigUtils";import"./style/Authentication.css";/**
21
+ */
22
+
23
+ import React from 'react';
24
+ import ReactDOM from 'react-dom';
25
+ import { connect } from 'react-redux';
26
+ import PropTypes from 'prop-types';
27
+ import url from 'url';
28
+ import Icon from '../components/Icon';
29
+ import { AppInfosPortalContext } from '../components/PluginsContainer';
30
+ import ConfigUtils from '../utils/ConfigUtils';
31
+ import './style/Authentication.css';
32
+
33
+ /**
8
34
  * Handles authentication
9
35
  *
10
36
  * Invokes the the authentication service specified by `authServiceUrl` in `config.json`.
11
- */var Authentication=/*#__PURE__*/function(_React$Component){function Authentication(props){var _this;_classCallCheck(this,Authentication);_this=_callSuper(this,Authentication,[props]);_defineProperty(_this,"showLogin",function(){var urlObj=url.parse(window.location.href,true);if(_this.props.clearLayerParam){delete urlObj.query.l}urlObj.search=undefined;window.location.href=ConfigUtils.getConfigProp("authServiceUrl")+"login?url="+encodeURIComponent(url.format(urlObj))});_defineProperty(_this,"resetIdleTimer",function(){if(_this.idleTimer){clearTimeout(_this.idleTimer);_this.idleTimer=setTimeout(_this.idleAutologout,_this.props.idleTimeout*1000)}});_defineProperty(_this,"idleAutologout",function(){var urlObj=url.parse(window.location.href,true);urlObj.search=undefined;var loginUrl=ConfigUtils.getConfigProp("authServiceUrl")+"login?url="+encodeURIComponent(url.format(urlObj));window.location.href=ConfigUtils.getConfigProp("authServiceUrl")+"logout?url="+encodeURIComponent(loginUrl)});_this.idleTimer=null;return _this}_inherits(Authentication,_React$Component);return _createClass(Authentication,[{key:"componentDidMount",value:function componentDidMount(){var username=ConfigUtils.getConfigProp("username");if(this.props.requireLogin&&!username){this.showLogin()}if(this.props.idleTimeout&&username){this.idleTimer=setTimeout(this.idleAutologout,this.props.idleTimeout*1000);window.addEventListener("keydown",this.resetIdleTimer,{passive:true});window.addEventListener("mousedown",this.resetIdleTimer,{passive:true});window.addEventListener("wheel",this.resetIdleTimer,{passive:true})}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var task=this.props.task;if(task!==prevProps.task){// "Login" and "Logout" task ids are legacy
12
- if(task.id==="Login"||task.id==="Authentication"&&task.mode==="Login"){this.showLogin()}else if(task.id==="Logout"||task.id==="Authentication"&&task.mode==="Logout"){// logout and redirect to custom logoutTargetUrl or current location if not set
13
- window.location.href=ConfigUtils.getConfigProp("authServiceUrl")+"logout?url="+encodeURIComponent(this.props.logoutTargetUrl||window.location.href)}}}},{key:"render",value:function render(){if(!this.props.showLoginUser){return null}var username=ConfigUtils.getConfigProp("username");if(!username){return null}return/*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/React.createElement("div",{className:"app-info login-user"},/*#__PURE__*/React.createElement(Icon,{icon:"login"}),/*#__PURE__*/React.createElement("span",null,username)),this.context)}}])}(React.Component);_defineProperty(Authentication,"contextType",AppInfosPortalContext);_defineProperty(Authentication,"availableIn3D",true);_defineProperty(Authentication,"propTypes",{/** Whether to clear the layer parameter from the URL on login. */clearLayerParam:PropTypes.bool,/** An idle timeout in seconds after which the user is automatically logged of. */idleTimeout:PropTypes.number,/** An URL to redirect to on logout, instead of the viewer URL. */logoutTargetUrl:PropTypes.string,/** Whether authentication is required, i.e. the viewer automatically redirects to the login page if no user is authenticated. */requireLogin:PropTypes.bool,/** Whether to display the currently logged in user below the application menu button. */showLoginUser:PropTypes.bool,task:PropTypes.object});export default connect(function(state){return{task:state.task}},{})(Authentication);
37
+ */
38
+ var Authentication = /*#__PURE__*/function (_React$Component) {
39
+ function Authentication(props) {
40
+ var _this;
41
+ _classCallCheck(this, Authentication);
42
+ _this = _callSuper(this, Authentication, [props]);
43
+ _defineProperty(_this, "showLogin", function () {
44
+ var urlObj = url.parse(window.location.href, true);
45
+ if (_this.props.clearLayerParam) {
46
+ delete urlObj.query.l;
47
+ }
48
+ urlObj.search = undefined;
49
+ window.location.href = ConfigUtils.getConfigProp("authServiceUrl") + "login?url=" + encodeURIComponent(url.format(urlObj));
50
+ });
51
+ _defineProperty(_this, "resetIdleTimer", function () {
52
+ if (_this.idleTimer) {
53
+ clearTimeout(_this.idleTimer);
54
+ _this.idleTimer = setTimeout(_this.idleAutologout, _this.props.idleTimeout * 1000);
55
+ }
56
+ });
57
+ _defineProperty(_this, "idleAutologout", function () {
58
+ var urlObj = url.parse(window.location.href, true);
59
+ urlObj.search = undefined;
60
+ var loginUrl = ConfigUtils.getConfigProp("authServiceUrl") + "login?url=" + encodeURIComponent(url.format(urlObj));
61
+ window.location.href = ConfigUtils.getConfigProp("authServiceUrl") + "logout?url=" + encodeURIComponent(loginUrl);
62
+ });
63
+ _this.idleTimer = null;
64
+ return _this;
65
+ }
66
+ _inherits(Authentication, _React$Component);
67
+ return _createClass(Authentication, [{
68
+ key: "componentDidMount",
69
+ value: function componentDidMount() {
70
+ var username = ConfigUtils.getConfigProp("username");
71
+ if (this.props.requireLogin && !username) {
72
+ this.showLogin();
73
+ }
74
+ if (this.props.idleTimeout && username) {
75
+ this.idleTimer = setTimeout(this.idleAutologout, this.props.idleTimeout * 1000);
76
+ window.addEventListener('keydown', this.resetIdleTimer, {
77
+ passive: true
78
+ });
79
+ window.addEventListener('mousedown', this.resetIdleTimer, {
80
+ passive: true
81
+ });
82
+ window.addEventListener('wheel', this.resetIdleTimer, {
83
+ passive: true
84
+ });
85
+ }
86
+ }
87
+ }, {
88
+ key: "componentDidUpdate",
89
+ value: function componentDidUpdate(prevProps) {
90
+ var task = this.props.task;
91
+ if (task !== prevProps.task) {
92
+ // "Login" and "Logout" task ids are legacy
93
+ if (task.id === "Login" || task.id === "Authentication" && task.mode === "Login") {
94
+ this.showLogin();
95
+ } else if (task.id === "Logout" || task.id === "Authentication" && task.mode === "Logout") {
96
+ // logout and redirect to custom logoutTargetUrl or current location if not set
97
+ window.location.href = ConfigUtils.getConfigProp("authServiceUrl") + "logout?url=" + encodeURIComponent(this.props.logoutTargetUrl || window.location.href);
98
+ }
99
+ }
100
+ }
101
+ }, {
102
+ key: "render",
103
+ value: function render() {
104
+ if (!this.props.showLoginUser) {
105
+ return null;
106
+ }
107
+ var username = ConfigUtils.getConfigProp("username");
108
+ if (!username) {
109
+ return null;
110
+ }
111
+ return /*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/React.createElement("div", {
112
+ className: "app-info login-user"
113
+ }, /*#__PURE__*/React.createElement(Icon, {
114
+ icon: "login"
115
+ }), /*#__PURE__*/React.createElement("span", null, username)), this.context);
116
+ }
117
+ }]);
118
+ }(React.Component);
119
+ _defineProperty(Authentication, "contextType", AppInfosPortalContext);
120
+ _defineProperty(Authentication, "availableIn3D", true);
121
+ _defineProperty(Authentication, "propTypes", {
122
+ /** Whether to clear the layer parameter from the URL on login. */
123
+ clearLayerParam: PropTypes.bool,
124
+ /** An idle timeout in seconds after which the user is automatically logged of. */
125
+ idleTimeout: PropTypes.number,
126
+ /** An URL to redirect to on logout, instead of the viewer URL. */
127
+ logoutTargetUrl: PropTypes.string,
128
+ /** Whether authentication is required, i.e. the viewer automatically redirects to the login page if no user is authenticated. */
129
+ requireLogin: PropTypes.bool,
130
+ /** Whether to display the currently logged in user below the application menu button. */
131
+ showLoginUser: PropTypes.bool,
132
+ task: PropTypes.object
133
+ });
134
+ export default connect(function (state) {
135
+ return {
136
+ task: state.task
137
+ };
138
+ }, {})(Authentication);
@@ -1,10 +1,224 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
3
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
4
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
5
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
6
+ function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
7
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
8
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
9
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
10
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
11
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
12
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
14
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
+ /**
2
16
  * Copyright 2016-2024 Sourcepole AG
3
17
  * All rights reserved.
4
18
  *
5
19
  * This source code is licensed under the BSD-style license found in the
6
20
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import{connect}from"react-redux";import classnames from"classnames";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{LayerRole,changeLayerProperty}from"../actions/layers";import Icon from"../components/Icon";import MapButton from"../components/MapButton";import ConfigUtils from"../utils/ConfigUtils";import LocaleUtils from"../utils/LocaleUtils";import"./style/BackgroundSwitcher.css";/**
21
+ */
22
+
23
+ import React from 'react';
24
+ import { connect } from 'react-redux';
25
+ import classnames from 'classnames';
26
+ import isEmpty from 'lodash.isempty';
27
+ import PropTypes from 'prop-types';
28
+ import { LayerRole, changeLayerProperty } from '../actions/layers';
29
+ import Icon from '../components/Icon';
30
+ import MapButton from '../components/MapButton';
31
+ import ConfigUtils from '../utils/ConfigUtils';
32
+ import LocaleUtils from '../utils/LocaleUtils';
33
+ import './style/BackgroundSwitcher.css';
34
+
35
+ /**
8
36
  * Map button for switching the background layer.
9
- */export var BackgroundSwitcher=/*#__PURE__*/function(_React$Component){function BackgroundSwitcher(){var _this;_classCallCheck(this,BackgroundSwitcher);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,BackgroundSwitcher,[].concat(args));_defineProperty(_this,"state",{visible:false});_defineProperty(_this,"itemTitle",function(item){var _item$title;return item.titleMsgId?LocaleUtils.tr(item.titleMsgId):(_item$title=item.title)!==null&&_item$title!==void 0?_item$title:item.name});_defineProperty(_this,"renderLayerItem",function(layer,visible){var assetsPath=ConfigUtils.getAssetsPath();var itemclasses=classnames({"background-switcher-item":true,"background-switcher-item-active":visible});return/*#__PURE__*/React.createElement("div",{className:itemclasses,key:layer?layer.name:"empty",onClick:function onClick(){return _this.backgroundLayerClicked(layer)}},/*#__PURE__*/React.createElement("div",{className:"background-switcher-item-title"},layer?/*#__PURE__*/React.createElement("span",{title:_this.itemTitle(layer)},_this.itemTitle(layer)):/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("bgswitcher.nobg"))),/*#__PURE__*/React.createElement("div",{className:"background-switcher-item-thumbnail"},/*#__PURE__*/React.createElement("img",{src:layer?assetsPath+"/"+layer.thumbnail:"data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="})))});_defineProperty(_this,"renderGroupItem",function(entry){var assetsPath=ConfigUtils.getAssetsPath();var layer=entry.layers.find(function(l){return l.visibility===true})||entry.layers.find(function(l){return l["default"]===true})||entry.layers[entry.layers.length-1];var itemclasses=classnames({"background-switcher-item":true,"background-switcher-item-active":layer.visibility});return/*#__PURE__*/React.createElement("div",{className:itemclasses,key:layer.name},/*#__PURE__*/React.createElement("div",{className:"background-switcher-item-title"},/*#__PURE__*/React.createElement("span",{title:_this.itemTitle(layer)},_this.itemTitle(layer)),/*#__PURE__*/React.createElement(Icon,{icon:"chevron-down"})),/*#__PURE__*/React.createElement("div",{className:"background-switcher-item-thumbnail"},/*#__PURE__*/React.createElement("img",{onClick:function onClick(){return _this.backgroundLayerClicked(layer)},src:assetsPath+"/"+layer.thumbnail})),/*#__PURE__*/React.createElement("div",{className:"background-switcher-group"},entry.layers.map(function(l){var menuitemclasses=classnames({"background-switcher-group-item":true,"background-switcher-group-item-active":l.visibility});return/*#__PURE__*/React.createElement("div",{className:menuitemclasses,key:l.name,onClick:function onClick(){return _this.backgroundLayerClicked(l)},onMouseEnter:function onMouseEnter(ev){return _this.updateGroupItem(ev,l)},onMouseLeave:function onMouseLeave(ev){return _this.updateGroupItem(ev,layer)},title:_this.itemTitle(l)},_this.itemTitle(l))})))});_defineProperty(_this,"updateGroupItem",function(ev,layer){var assetsPath=ConfigUtils.getAssetsPath();ev.target.parentElement.parentElement.childNodes[0].firstChild.innerText=_this.itemTitle(layer);ev.target.parentElement.parentElement.childNodes[1].firstChild.src=assetsPath+"/"+layer.thumbnail});_defineProperty(_this,"buttonClicked",function(){_this.setState(function(state){return{visible:!state.visible}})});_defineProperty(_this,"backgroundLayerClicked",function(layer){if(layer){_this.props.changeLayerVisibility(layer,true)}else{var visible=_this.props.layers.find(function(l){return l.visibility});if(visible){_this.props.changeLayerVisibility(visible,false)}}_this.setState({visible:false})});return _this}_inherits(BackgroundSwitcher,_React$Component);return _createClass(BackgroundSwitcher,[{key:"render",value:function render(){var _this2=this;var backgroundLayers=this.props.layers.slice(0).reverse();// Re-sort layers, ensuring grouped layers are grouped together
10
- var idx=0;var indices=backgroundLayers.reduce(function(res,l){var name=l.group||l.name;if(!res[name]){res[name]=++idx}return res},{});backgroundLayers.sort(function(a,b){return indices[a.group||a.name]-indices[b.group||b.name]});var entries=backgroundLayers.reduce(function(res,layer){if(!isEmpty(res)&&layer.group&&layer.group===res[res.length-1].group){res[res.length-1].layers.push(layer)}else if(layer.group){res.push({group:layer.group,layers:[layer]})}else{res.push(layer)}return res},[]);if(entries.length>0){return/*#__PURE__*/React.createElement(MapButton,{active:this.state.visible,icon:"bglayer",onClick:this.buttonClicked,position:this.props.position,tooltip:LocaleUtils.tr("tooltip.background")},/*#__PURE__*/React.createElement("div",{className:"background-switcher "+(this.state.visible?"background-switcher-active":"")},this.renderLayerItem(null,backgroundLayers.filter(function(layer){return layer.visibility===true}).length===0),entries.map(function(entry){return entry.group?_this2.renderGroupItem(entry):_this2.renderLayerItem(entry,entry.visibility===true)})))}return null}}])}(React.Component);_defineProperty(BackgroundSwitcher,"propTypes",{changeLayerVisibility:PropTypes.func,layers:PropTypes.array,/** The position slot index of the map button, from the bottom (0: bottom slot). */position:PropTypes.number});_defineProperty(BackgroundSwitcher,"defaultProps",{position:0});var selector=function selector(state){return{layers:state.layers.flat.filter(function(layer){return layer.role===LayerRole.BACKGROUND})}};export default connect(selector,{changeLayerVisibility:function changeLayerVisibility(layer,visibility){return changeLayerProperty(layer.id,"visibility",visibility)}})(BackgroundSwitcher);
37
+ */
38
+ export var BackgroundSwitcher = /*#__PURE__*/function (_React$Component) {
39
+ function BackgroundSwitcher() {
40
+ var _this;
41
+ _classCallCheck(this, BackgroundSwitcher);
42
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
43
+ args[_key] = arguments[_key];
44
+ }
45
+ _this = _callSuper(this, BackgroundSwitcher, [].concat(args));
46
+ _defineProperty(_this, "state", {
47
+ visible: false
48
+ });
49
+ _defineProperty(_this, "itemTitle", function (item) {
50
+ var _item$title;
51
+ return item.titleMsgId ? LocaleUtils.tr(item.titleMsgId) : (_item$title = item.title) !== null && _item$title !== void 0 ? _item$title : item.name;
52
+ });
53
+ _defineProperty(_this, "renderLayerItem", function (layer, visible) {
54
+ var assetsPath = ConfigUtils.getAssetsPath();
55
+ var itemclasses = classnames({
56
+ "background-switcher-item": true,
57
+ "background-switcher-item-active": visible
58
+ });
59
+ return /*#__PURE__*/React.createElement("div", {
60
+ className: itemclasses,
61
+ key: layer ? layer.name : "empty",
62
+ onClick: function onClick() {
63
+ return _this.backgroundLayerClicked(layer);
64
+ }
65
+ }, /*#__PURE__*/React.createElement("div", {
66
+ className: "background-switcher-item-title"
67
+ }, layer ? /*#__PURE__*/React.createElement("span", {
68
+ title: _this.itemTitle(layer)
69
+ }, _this.itemTitle(layer)) : /*#__PURE__*/React.createElement("span", null, LocaleUtils.tr("bgswitcher.nobg"))), /*#__PURE__*/React.createElement("div", {
70
+ className: "background-switcher-item-thumbnail"
71
+ }, /*#__PURE__*/React.createElement("img", {
72
+ src: layer ? assetsPath + "/" + layer.thumbnail : "data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
73
+ })));
74
+ });
75
+ _defineProperty(_this, "renderGroupItem", function (entry) {
76
+ var assetsPath = ConfigUtils.getAssetsPath();
77
+ var layer = entry.layers.find(function (l) {
78
+ return l.visibility === true;
79
+ }) || entry.layers.find(function (l) {
80
+ return l["default"] === true;
81
+ }) || entry.layers[entry.layers.length - 1];
82
+ var itemclasses = classnames({
83
+ "background-switcher-item": true,
84
+ "background-switcher-item-active": layer.visibility
85
+ });
86
+ return /*#__PURE__*/React.createElement("div", {
87
+ className: itemclasses,
88
+ key: layer.name
89
+ }, /*#__PURE__*/React.createElement("div", {
90
+ className: "background-switcher-item-title"
91
+ }, /*#__PURE__*/React.createElement("span", {
92
+ title: _this.itemTitle(layer)
93
+ }, _this.itemTitle(layer)), /*#__PURE__*/React.createElement(Icon, {
94
+ icon: "chevron-down"
95
+ })), /*#__PURE__*/React.createElement("div", {
96
+ className: "background-switcher-item-thumbnail"
97
+ }, /*#__PURE__*/React.createElement("img", {
98
+ onClick: function onClick() {
99
+ return _this.backgroundLayerClicked(layer);
100
+ },
101
+ src: assetsPath + "/" + layer.thumbnail
102
+ })), /*#__PURE__*/React.createElement("div", {
103
+ className: "background-switcher-group"
104
+ }, entry.layers.map(function (l) {
105
+ var menuitemclasses = classnames({
106
+ "background-switcher-group-item": true,
107
+ "background-switcher-group-item-active": l.visibility
108
+ });
109
+ return /*#__PURE__*/React.createElement("div", {
110
+ className: menuitemclasses,
111
+ key: l.name,
112
+ onClick: function onClick() {
113
+ return _this.backgroundLayerClicked(l);
114
+ },
115
+ onMouseEnter: function onMouseEnter(ev) {
116
+ return _this.updateGroupItem(ev, l);
117
+ },
118
+ onMouseLeave: function onMouseLeave(ev) {
119
+ return _this.updateGroupItem(ev, layer);
120
+ },
121
+ title: _this.itemTitle(l)
122
+ }, _this.itemTitle(l));
123
+ })));
124
+ });
125
+ _defineProperty(_this, "updateGroupItem", function (ev, layer) {
126
+ var assetsPath = ConfigUtils.getAssetsPath();
127
+ ev.target.parentElement.parentElement.childNodes[0].firstChild.innerText = _this.itemTitle(layer);
128
+ ev.target.parentElement.parentElement.childNodes[1].firstChild.src = assetsPath + "/" + layer.thumbnail;
129
+ });
130
+ _defineProperty(_this, "buttonClicked", function () {
131
+ _this.setState(function (state) {
132
+ return {
133
+ visible: !state.visible
134
+ };
135
+ });
136
+ });
137
+ _defineProperty(_this, "backgroundLayerClicked", function (layer) {
138
+ if (layer) {
139
+ _this.props.changeLayerVisibility(layer, true);
140
+ } else {
141
+ var visible = _this.props.layers.find(function (l) {
142
+ return l.visibility;
143
+ });
144
+ if (visible) {
145
+ _this.props.changeLayerVisibility(visible, false);
146
+ }
147
+ }
148
+ _this.setState({
149
+ visible: false
150
+ });
151
+ });
152
+ return _this;
153
+ }
154
+ _inherits(BackgroundSwitcher, _React$Component);
155
+ return _createClass(BackgroundSwitcher, [{
156
+ key: "render",
157
+ value: function render() {
158
+ var _this2 = this;
159
+ var backgroundLayers = this.props.layers.slice(0).reverse();
160
+ // Re-sort layers, ensuring grouped layers are grouped together
161
+ var idx = 0;
162
+ var indices = backgroundLayers.reduce(function (res, l) {
163
+ var name = l.group || l.name;
164
+ if (!res[name]) {
165
+ res[name] = ++idx;
166
+ }
167
+ return res;
168
+ }, {});
169
+ backgroundLayers.sort(function (a, b) {
170
+ return indices[a.group || a.name] - indices[b.group || b.name];
171
+ });
172
+ var entries = backgroundLayers.reduce(function (res, layer) {
173
+ if (!isEmpty(res) && layer.group && layer.group === res[res.length - 1].group) {
174
+ res[res.length - 1].layers.push(layer);
175
+ } else if (layer.group) {
176
+ res.push({
177
+ group: layer.group,
178
+ layers: [layer]
179
+ });
180
+ } else {
181
+ res.push(layer);
182
+ }
183
+ return res;
184
+ }, []);
185
+ if (entries.length > 0) {
186
+ return /*#__PURE__*/React.createElement(MapButton, {
187
+ active: this.state.visible,
188
+ icon: "bglayer",
189
+ onClick: this.buttonClicked,
190
+ position: this.props.position,
191
+ tooltip: LocaleUtils.tr("tooltip.background")
192
+ }, /*#__PURE__*/React.createElement("div", {
193
+ className: "background-switcher " + (this.state.visible ? 'background-switcher-active' : '')
194
+ }, this.renderLayerItem(null, backgroundLayers.filter(function (layer) {
195
+ return layer.visibility === true;
196
+ }).length === 0), entries.map(function (entry) {
197
+ return entry.group ? _this2.renderGroupItem(entry) : _this2.renderLayerItem(entry, entry.visibility === true);
198
+ })));
199
+ }
200
+ return null;
201
+ }
202
+ }]);
203
+ }(React.Component);
204
+ _defineProperty(BackgroundSwitcher, "propTypes", {
205
+ changeLayerVisibility: PropTypes.func,
206
+ layers: PropTypes.array,
207
+ /** The position slot index of the map button, from the bottom (0: bottom slot). */
208
+ position: PropTypes.number
209
+ });
210
+ _defineProperty(BackgroundSwitcher, "defaultProps", {
211
+ position: 0
212
+ });
213
+ var selector = function selector(state) {
214
+ return {
215
+ layers: state.layers.flat.filter(function (layer) {
216
+ return layer.role === LayerRole.BACKGROUND;
217
+ })
218
+ };
219
+ };
220
+ export default connect(selector, {
221
+ changeLayerVisibility: function changeLayerVisibility(layer, visibility) {
222
+ return changeLayerProperty(layer.id, "visibility", visibility);
223
+ }
224
+ })(BackgroundSwitcher);