qwc2 2025.10.9 → 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,10 +1,52 @@
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 ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}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 ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
5
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
6
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
7
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
8
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
9
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
10
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
11
+ 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); } }
12
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
13
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
14
+ 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); }
15
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
16
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
17
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
18
+ 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); }
19
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
20
+ 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; }
21
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
22
+ 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); }
23
+ /**
2
24
  * Copyright 2017-2024 Sourcepole AG
3
25
  * All rights reserved.
4
26
  *
5
27
  * This source code is licensed under the BSD-style license found in the
6
28
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import{connect}from"react-redux";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{setEditContext,clearEditContext}from"../actions/editing";import{LayerRole}from"../actions/layers";import{setCurrentTask}from"../actions/task";import AttributeForm from"../components/AttributeForm";import ResizeableWindow from"../components/ResizeableWindow";import TaskBar from"../components/TaskBar";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import EditingInterface from"../utils/EditingInterface";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import"./style/FeatureForm.css";/**
29
+ */
30
+
31
+ import React from 'react';
32
+ import { connect } from 'react-redux';
33
+ import isEmpty from 'lodash.isempty';
34
+ import PropTypes from 'prop-types';
35
+ import { setEditContext, clearEditContext } from '../actions/editing';
36
+ import { LayerRole } from '../actions/layers';
37
+ import { setCurrentTask } from '../actions/task';
38
+ import AttributeForm from '../components/AttributeForm';
39
+ import ResizeableWindow from '../components/ResizeableWindow';
40
+ import TaskBar from '../components/TaskBar';
41
+ import ConfigUtils from '../utils/ConfigUtils';
42
+ import CoordinatesUtils from '../utils/CoordinatesUtils';
43
+ import EditingInterface from '../utils/EditingInterface';
44
+ import LayerUtils from '../utils/LayerUtils';
45
+ import LocaleUtils from '../utils/LocaleUtils';
46
+ import MapUtils from '../utils/MapUtils';
47
+ import './style/FeatureForm.css';
48
+
49
+ /**
8
50
  * Displays queried feature attributes in a form.
9
51
  *
10
52
  * The attribute form is generated from the QGIS attribute form configuration.
@@ -17,5 +59,325 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
17
59
  * If the dataset it editable, the feature attributes can be edited directly in the displayed form.
18
60
  *
19
61
  * Can be used as default identify tool by setting `"identifyTool": "FeatureForm"` in `config.json`.
20
- */var FeatureForm=/*#__PURE__*/function(_React$Component){function FeatureForm(props){var _this;_classCallCheck(this,FeatureForm);_this=_callSuper(this,FeatureForm,[props]);_defineProperty(_this,"queryPoint",function(prevProps){if(_this.props.click.button!==0||_this.props.click===prevProps.click||(_this.props.click.features||[]).find(function(feature){return feature.id==="startupposmarker"})){return null}var searchMarker=(_this.props.click.features||[]).find(function(feature){return feature.id==="searchmarker"});if(searchMarker&&searchMarker.geometry.type==="Point"){return searchMarker.geometry.coordinates}return _this.props.click.coordinate});_defineProperty(_this,"queryFeatures",function(pos){var pendingRequests=0;Object.entries(_this.props.theme.editConfig||{}).forEach(function(_ref){var _this$props$filter$fi;var _ref2=_slicedToArray(_ref,2),layerId=_ref2[0],editConfig=_ref2[1];if(!editConfig.geomType){// Skip geometryless datasets
21
- return}var path=[];var sublayer=null;var mapScale=MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom);var layer=_this.props.layers.find(function(l){return l.role===LayerRole.THEME&&(sublayer=LayerUtils.searchSubLayer(l,"name",layerId,path))});if(!layer||!sublayer||!LayerUtils.sublayerVisible(layer,path)||!LayerUtils.layerScaleInRange(sublayer,mapScale)){return}var layerOrder=layer.params.LAYERS.split(",");++pendingRequests;var scale=Math.round(MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom));_this.props.iface.getFeature(editConfig,pos,_this.props.map.projection,scale,96,function(featureCollection){if(featureCollection&&!isEmpty(featureCollection.features)){_this.setState(function(state){var newPickedFeatures=Object.fromEntries(Object.entries(_objectSpread(_objectSpread({},state.pickedFeatures),featureCollection.features.reduce(function(res,feature){return _objectSpread(_objectSpread({},res),{},_defineProperty({},layerId+"::"+feature.id,feature))},{}))).sort(function(a,b){var partsA=a[0].split("::");var partsB=b[0].split("::");var diff=layerOrder.indexOf(partsB[0])-layerOrder.indexOf(partsA[0]);return diff===0?partsA[1].localeCompare(partsB[1]):diff}));var selectedFeature=state.pendingRequests<=1&&!state.selectedFeature?Object.keys(newPickedFeatures)[0]:"";return{pickedFeatures:newPickedFeatures,pendingRequests:state.pendingRequests-1,selectedFeature:selectedFeature}})}else{_this.setState(function(state){var _Object$keys$;var selectedFeature=state.pendingRequests<=1&&!state.selectedFeature?(_Object$keys$=Object.keys(state.pickedFeatures)[0])!==null&&_Object$keys$!==void 0?_Object$keys$:"":"";return{pendingRequests:state.pendingRequests-1,selectedFeature:selectedFeature}})}},(_this$props$filter$fi=_this.props.filter.filterParams)===null||_this$props$filter$fi===void 0?void 0:_this$props$filter$fi[sublayer.name],_this.props.filter.filterGeom)});_this.setState({pendingRequests:pendingRequests,pickedFeatures:{},selectedFeature:""})});_defineProperty(_this,"setSelectedFeature",function(ev){_this.setState({selectedFeature:ev.target.value})});_defineProperty(_this,"onWindowClose",function(){_this.clearResults();if(_this.props.exitTaskOnResultsClose){_this.props.setCurrentTask(null)}});_defineProperty(_this,"clearResults",function(){if(!_this.props.editContext.changed){_this.setState(FeatureForm.defaultState)}});_defineProperty(_this,"updatePickedFeatures",function(newfeature){_this.setState(function(state){return{pickedFeatures:Object.entries(state.pickedFeatures).reduce(function(res,_ref3){var _ref4=_slicedToArray(_ref3,2),key=_ref4[0],feature=_ref4[1];res[key]=feature.id===newfeature.id?newfeature:feature;return res},{})}})});_this.state=FeatureForm.defaultState;return _this}_inherits(FeatureForm,_React$Component);return _createClass(FeatureForm,[{key:"componentDidMount",value:function componentDidMount(){if(this.props.enabled){this.props.setEditContext("FeatureForm",{action:"Pick"})}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.props.enabled&&this.props.theme&&!prevProps.theme){var startupParams=this.props.startupParams;var haveIc=["1","true"].includes((startupParams.ic||"").toLowerCase());var c=(startupParams.c||"").split(/[;,]/g).map(function(x){return parseFloat(x)||0});if(haveIc&&c.length===2){var mapCrs=this.props.theme.mapCrs;this.queryFeatures(CoordinatesUtils.reproject(c,startupParams.crs||mapCrs,mapCrs))}}else if(this.props.theme!==prevProps.theme){this.clearResults()}else if(!this.props.enabled&&prevProps.enabled){if(this.props.clearResultsOnClose){this.clearResults()}}if(this.props.enabled&&!prevProps.enabled){this.props.setEditContext("FeatureForm",{action:"Pick"})}var isCurrentContext=this.props.editContext.id===this.props.currentEditContext;if(this.props.enabled&&isCurrentContext&&!this.props.editContext.changed&&this.state.pendingRequests===0){var clickPoint=this.queryPoint(prevProps);if(clickPoint){this.queryFeatures(clickPoint)}}if(this.props.enabled&&this.state.selectedFeature!==prevState.selectedFeature){var feature=this.state.pickedFeatures?this.state.pickedFeatures[this.state.selectedFeature]:null;var curLayerId=this.state.selectedFeature.split("::")[0];var curConfig=this.props.theme.editConfig[curLayerId]||{};var canEditGeometry=["Point","LineString","Polygon"].includes((curConfig.geomType||"").replace(/^Multi/,"").replace(/Z$/,""));var editPermissions=curConfig.permissions||{};this.props.setEditContext("FeatureForm",{action:"Pick",feature:feature,changed:false,geomType:curConfig.geomType||null,geomReadOnly:editPermissions.updatable===false||!canEditGeometry,permissions:(curConfig===null||curConfig===void 0?void 0:curConfig.permissions)||{}})}if(!this.props.enabled&&prevProps.enabled){this.props.clearEditContext("FeatureForm");this.setState(FeatureForm.defaultState)}}},{key:"render",value:function render(){var _this2=this;var resultWindow=null;if(this.state.pickedFeatures!==null){var body=null;if(this.state.pendingRequests>0){body=/*#__PURE__*/React.createElement("div",{className:"feature-query-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("featureform.querying")))}else if(isEmpty(this.state.pickedFeatures)){body=/*#__PURE__*/React.createElement("div",{className:"feature-query-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("featureform.noresults")))}else{var featureText=LocaleUtils.tr("featureform.feature");var curLayerId=this.state.selectedFeature.split("::")[0];var curConfig=this.props.theme.editConfig[curLayerId];body=/*#__PURE__*/React.createElement("div",{className:"feature-query-body",role:"body"},Object.keys(this.state.pickedFeatures).length>1?/*#__PURE__*/React.createElement("div",{className:"feature-query-selection"},/*#__PURE__*/React.createElement("select",{onChange:this.setSelectedFeature,value:this.state.selectedFeature},Object.entries(this.state.pickedFeatures).map(function(_ref5){var _this2$props$theme$tr,_this2$props$theme$tr2,_LayerUtils$searchLay,_LayerUtils$searchLay2;var _ref6=_slicedToArray(_ref5,2),id=_ref6[0],feature=_ref6[1];var _id$split=id.split("::"),_id$split2=_slicedToArray(_id$split,2),layerId=_id$split2[0],featureId=_id$split2[1];var editConfig=_this2.props.theme.editConfig[layerId];var layerName=editConfig.layerName;var layerTitle=editConfig.layerTitle?(_this2$props$theme$tr=(_this2$props$theme$tr2=_this2.props.theme.translations)===null||_this2$props$theme$tr2===void 0||(_this2$props$theme$tr2=_this2$props$theme$tr2.layertree)===null||_this2$props$theme$tr2===void 0?void 0:_this2$props$theme$tr2[layerName])!==null&&_this2$props$theme$tr!==void 0?_this2$props$theme$tr:editConfig.layerTitle:(_LayerUtils$searchLay=(_LayerUtils$searchLay2=LayerUtils.searchLayer(_this2.props.layers,_this2.props.theme.url,layerName))===null||_LayerUtils$searchLay2===void 0||(_LayerUtils$searchLay2=_LayerUtils$searchLay2.sublayer)===null||_LayerUtils$searchLay2===void 0?void 0:_LayerUtils$searchLay2.title)!==null&&_LayerUtils$searchLay!==void 0?_LayerUtils$searchLay:layerName;var featureName=editConfig.displayField?feature.properties[editConfig.displayField]:featureText+" "+featureId;return/*#__PURE__*/React.createElement("option",{key:id,value:id},layerTitle+": "+featureName)}))):null,this.props.editContext.feature?/*#__PURE__*/React.createElement(AttributeForm,{editConfig:curConfig,editContext:this.props.editContext,iface:this.props.iface,onCommit:this.updatePickedFeatures}):null)}resultWindow=/*#__PURE__*/React.createElement(ResizeableWindow,{dockable:this.props.geometry.side,icon:"featureform",initialHeight:this.props.geometry.initialHeight,initialWidth:this.props.geometry.initialWidth,initialX:this.props.geometry.initialX,initialY:this.props.geometry.initialY,initiallyDocked:this.props.geometry.initiallyDocked,key:"FeatureForm",onClose:this.onWindowClose,title:LocaleUtils.tr("featureform.title")},body)}return[resultWindow,/*#__PURE__*/React.createElement(TaskBar,{key:"FeatureFormTaskBar",task:"FeatureForm"},function(){return{body:LocaleUtils.tr("infotool.clickhelpPoint")}})]}}])}(React.Component);_defineProperty(FeatureForm,"propTypes",{clearEditContext:PropTypes.func,/** Whether to clear the identify results when exiting the identify tool. */clearResultsOnClose:PropTypes.bool,click:PropTypes.object,currentEditContext:PropTypes.string,editContext:PropTypes.object,enabled:PropTypes.bool,/** Whether to clear the task when the results window is closed. */exitTaskOnResultsClose:PropTypes.bool,filter:PropTypes.object,/** Default window geometry with size, position and docking status. Positive position values (including '0') are related to top (InitialY) and left (InitialX), negative values (including '-0') to bottom (InitialY) and right (InitialX). */geometry:PropTypes.shape({initialWidth:PropTypes.number,initialHeight:PropTypes.number,initialX:PropTypes.number,initialY:PropTypes.number,initiallyDocked:PropTypes.bool,side:PropTypes.string}),iface:PropTypes.object,layers:PropTypes.array,map:PropTypes.object,setCurrentTask:PropTypes.func,setEditContext:PropTypes.func,startupParams:PropTypes.object,theme:PropTypes.object});_defineProperty(FeatureForm,"defaultProps",{clearResultsOnClose:true,geometry:{initialWidth:320,initialHeight:480,initialX:0,initialY:0,initiallyDocked:false,side:"left"}});_defineProperty(FeatureForm,"defaultState",{pendingRequests:0,pickedFeatures:null,selectedFeature:""});export default(function(){var iface=arguments.length>0&&arguments[0]!==undefined?arguments[0]:EditingInterface;return connect(function(state){var enabled=state.task.id==="FeatureForm"||state.task.identifyEnabled&&ConfigUtils.getConfigProp("identifyTool",state.theme.current,"Identify")==="FeatureForm";return{click:state.map.click||{modifiers:{}},enabled:enabled,editContext:state.editing.contexts.FeatureForm||{},currentEditContext:state.editing.currentContext,iface:iface,layers:state.layers.flat,filter:state.layers.filter,map:state.map,theme:state.theme.current,startupParams:state.localConfig.startupParams}},{setCurrentTask:setCurrentTask,clearEditContext:clearEditContext,setEditContext:setEditContext})(FeatureForm)});
62
+ */
63
+ var FeatureForm = /*#__PURE__*/function (_React$Component) {
64
+ function FeatureForm(props) {
65
+ var _this;
66
+ _classCallCheck(this, FeatureForm);
67
+ _this = _callSuper(this, FeatureForm, [props]);
68
+ _defineProperty(_this, "queryPoint", function (prevProps) {
69
+ if (_this.props.click.button !== 0 || _this.props.click === prevProps.click || (_this.props.click.features || []).find(function (feature) {
70
+ return feature.id === 'startupposmarker';
71
+ })) {
72
+ return null;
73
+ }
74
+ var searchMarker = (_this.props.click.features || []).find(function (feature) {
75
+ return feature.id === 'searchmarker';
76
+ });
77
+ if (searchMarker && searchMarker.geometry.type === "Point") {
78
+ return searchMarker.geometry.coordinates;
79
+ }
80
+ return _this.props.click.coordinate;
81
+ });
82
+ _defineProperty(_this, "queryFeatures", function (pos) {
83
+ var pendingRequests = 0;
84
+ Object.entries(_this.props.theme.editConfig || {}).forEach(function (_ref) {
85
+ var _this$props$filter$fi;
86
+ var _ref2 = _slicedToArray(_ref, 2),
87
+ layerId = _ref2[0],
88
+ editConfig = _ref2[1];
89
+ if (!editConfig.geomType) {
90
+ // Skip geometryless datasets
91
+ return;
92
+ }
93
+ var path = [];
94
+ var sublayer = null;
95
+ var mapScale = MapUtils.computeForZoom(_this.props.map.scales, _this.props.map.zoom);
96
+ var layer = _this.props.layers.find(function (l) {
97
+ return l.role === LayerRole.THEME && (sublayer = LayerUtils.searchSubLayer(l, 'name', layerId, path));
98
+ });
99
+ if (!layer || !sublayer || !LayerUtils.sublayerVisible(layer, path) || !LayerUtils.layerScaleInRange(sublayer, mapScale)) {
100
+ return;
101
+ }
102
+ var layerOrder = layer.params.LAYERS.split(",");
103
+ ++pendingRequests;
104
+ var scale = Math.round(MapUtils.computeForZoom(_this.props.map.scales, _this.props.map.zoom));
105
+ _this.props.iface.getFeature(editConfig, pos, _this.props.map.projection, scale, 96, function (featureCollection) {
106
+ if (featureCollection && !isEmpty(featureCollection.features)) {
107
+ _this.setState(function (state) {
108
+ var newPickedFeatures = Object.fromEntries(Object.entries(_objectSpread(_objectSpread({}, state.pickedFeatures), featureCollection.features.reduce(function (res, feature) {
109
+ return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, layerId + "::" + feature.id, feature));
110
+ }, {}))).sort(function (a, b) {
111
+ var partsA = a[0].split("::");
112
+ var partsB = b[0].split("::");
113
+ var diff = layerOrder.indexOf(partsB[0]) - layerOrder.indexOf(partsA[0]);
114
+ return diff === 0 ? partsA[1].localeCompare(partsB[1]) : diff;
115
+ }));
116
+ var selectedFeature = state.pendingRequests <= 1 && !state.selectedFeature ? Object.keys(newPickedFeatures)[0] : "";
117
+ return {
118
+ pickedFeatures: newPickedFeatures,
119
+ pendingRequests: state.pendingRequests - 1,
120
+ selectedFeature: selectedFeature
121
+ };
122
+ });
123
+ } else {
124
+ _this.setState(function (state) {
125
+ var _Object$keys$;
126
+ var selectedFeature = state.pendingRequests <= 1 && !state.selectedFeature ? (_Object$keys$ = Object.keys(state.pickedFeatures)[0]) !== null && _Object$keys$ !== void 0 ? _Object$keys$ : "" : "";
127
+ return {
128
+ pendingRequests: state.pendingRequests - 1,
129
+ selectedFeature: selectedFeature
130
+ };
131
+ });
132
+ }
133
+ }, (_this$props$filter$fi = _this.props.filter.filterParams) === null || _this$props$filter$fi === void 0 ? void 0 : _this$props$filter$fi[sublayer.name], _this.props.filter.filterGeom);
134
+ });
135
+ _this.setState({
136
+ pendingRequests: pendingRequests,
137
+ pickedFeatures: {},
138
+ selectedFeature: ""
139
+ });
140
+ });
141
+ _defineProperty(_this, "setSelectedFeature", function (ev) {
142
+ _this.setState({
143
+ selectedFeature: ev.target.value
144
+ });
145
+ });
146
+ _defineProperty(_this, "onWindowClose", function () {
147
+ _this.clearResults();
148
+ if (_this.props.exitTaskOnResultsClose) {
149
+ _this.props.setCurrentTask(null);
150
+ }
151
+ });
152
+ _defineProperty(_this, "clearResults", function () {
153
+ if (!_this.props.editContext.changed) {
154
+ _this.setState(FeatureForm.defaultState);
155
+ }
156
+ });
157
+ _defineProperty(_this, "updatePickedFeatures", function (newfeature) {
158
+ _this.setState(function (state) {
159
+ return {
160
+ pickedFeatures: Object.entries(state.pickedFeatures).reduce(function (res, _ref3) {
161
+ var _ref4 = _slicedToArray(_ref3, 2),
162
+ key = _ref4[0],
163
+ feature = _ref4[1];
164
+ res[key] = feature.id === newfeature.id ? newfeature : feature;
165
+ return res;
166
+ }, {})
167
+ };
168
+ });
169
+ });
170
+ _this.state = FeatureForm.defaultState;
171
+ return _this;
172
+ }
173
+ _inherits(FeatureForm, _React$Component);
174
+ return _createClass(FeatureForm, [{
175
+ key: "componentDidMount",
176
+ value: function componentDidMount() {
177
+ if (this.props.enabled) {
178
+ this.props.setEditContext('FeatureForm', {
179
+ action: 'Pick'
180
+ });
181
+ }
182
+ }
183
+ }, {
184
+ key: "componentDidUpdate",
185
+ value: function componentDidUpdate(prevProps, prevState) {
186
+ if (this.props.enabled && this.props.theme && !prevProps.theme) {
187
+ var startupParams = this.props.startupParams;
188
+ var haveIc = ["1", "true"].includes((startupParams.ic || "").toLowerCase());
189
+ var c = (startupParams.c || "").split(/[;,]/g).map(function (x) {
190
+ return parseFloat(x) || 0;
191
+ });
192
+ if (haveIc && c.length === 2) {
193
+ var mapCrs = this.props.theme.mapCrs;
194
+ this.queryFeatures(CoordinatesUtils.reproject(c, startupParams.crs || mapCrs, mapCrs));
195
+ }
196
+ } else if (this.props.theme !== prevProps.theme) {
197
+ this.clearResults();
198
+ } else if (!this.props.enabled && prevProps.enabled) {
199
+ if (this.props.clearResultsOnClose) {
200
+ this.clearResults();
201
+ }
202
+ }
203
+ if (this.props.enabled && !prevProps.enabled) {
204
+ this.props.setEditContext('FeatureForm', {
205
+ action: 'Pick'
206
+ });
207
+ }
208
+ var isCurrentContext = this.props.editContext.id === this.props.currentEditContext;
209
+ if (this.props.enabled && isCurrentContext && !this.props.editContext.changed && this.state.pendingRequests === 0) {
210
+ var clickPoint = this.queryPoint(prevProps);
211
+ if (clickPoint) {
212
+ this.queryFeatures(clickPoint);
213
+ }
214
+ }
215
+ if (this.props.enabled && this.state.selectedFeature !== prevState.selectedFeature) {
216
+ var feature = this.state.pickedFeatures ? this.state.pickedFeatures[this.state.selectedFeature] : null;
217
+ var curLayerId = this.state.selectedFeature.split("::")[0];
218
+ var curConfig = this.props.theme.editConfig[curLayerId] || {};
219
+ var canEditGeometry = ['Point', 'LineString', 'Polygon'].includes((curConfig.geomType || "").replace(/^Multi/, '').replace(/Z$/, ''));
220
+ var editPermissions = curConfig.permissions || {};
221
+ this.props.setEditContext('FeatureForm', {
222
+ action: 'Pick',
223
+ feature: feature,
224
+ changed: false,
225
+ geomType: curConfig.geomType || null,
226
+ geomReadOnly: editPermissions.updatable === false || !canEditGeometry,
227
+ permissions: (curConfig === null || curConfig === void 0 ? void 0 : curConfig.permissions) || {}
228
+ });
229
+ }
230
+ if (!this.props.enabled && prevProps.enabled) {
231
+ this.props.clearEditContext('FeatureForm');
232
+ this.setState(FeatureForm.defaultState);
233
+ }
234
+ }
235
+ }, {
236
+ key: "render",
237
+ value: function render() {
238
+ var _this2 = this;
239
+ var resultWindow = null;
240
+ if (this.state.pickedFeatures !== null) {
241
+ var body = null;
242
+ if (this.state.pendingRequests > 0) {
243
+ body = /*#__PURE__*/React.createElement("div", {
244
+ className: "feature-query-body",
245
+ role: "body"
246
+ }, /*#__PURE__*/React.createElement("span", {
247
+ className: "identify-body-message"
248
+ }, LocaleUtils.tr("featureform.querying")));
249
+ } else if (isEmpty(this.state.pickedFeatures)) {
250
+ body = /*#__PURE__*/React.createElement("div", {
251
+ className: "feature-query-body",
252
+ role: "body"
253
+ }, /*#__PURE__*/React.createElement("span", {
254
+ className: "identify-body-message"
255
+ }, LocaleUtils.tr("featureform.noresults")));
256
+ } else {
257
+ var featureText = LocaleUtils.tr("featureform.feature");
258
+ var curLayerId = this.state.selectedFeature.split("::")[0];
259
+ var curConfig = this.props.theme.editConfig[curLayerId];
260
+ body = /*#__PURE__*/React.createElement("div", {
261
+ className: "feature-query-body",
262
+ role: "body"
263
+ }, Object.keys(this.state.pickedFeatures).length > 1 ? /*#__PURE__*/React.createElement("div", {
264
+ className: "feature-query-selection"
265
+ }, /*#__PURE__*/React.createElement("select", {
266
+ onChange: this.setSelectedFeature,
267
+ value: this.state.selectedFeature
268
+ }, Object.entries(this.state.pickedFeatures).map(function (_ref5) {
269
+ var _this2$props$theme$tr, _this2$props$theme$tr2, _LayerUtils$searchLay, _LayerUtils$searchLay2;
270
+ var _ref6 = _slicedToArray(_ref5, 2),
271
+ id = _ref6[0],
272
+ feature = _ref6[1];
273
+ var _id$split = id.split("::"),
274
+ _id$split2 = _slicedToArray(_id$split, 2),
275
+ layerId = _id$split2[0],
276
+ featureId = _id$split2[1];
277
+ var editConfig = _this2.props.theme.editConfig[layerId];
278
+ var layerName = editConfig.layerName;
279
+ var layerTitle = editConfig.layerTitle ? (_this2$props$theme$tr = (_this2$props$theme$tr2 = _this2.props.theme.translations) === null || _this2$props$theme$tr2 === void 0 || (_this2$props$theme$tr2 = _this2$props$theme$tr2.layertree) === null || _this2$props$theme$tr2 === void 0 ? void 0 : _this2$props$theme$tr2[layerName]) !== null && _this2$props$theme$tr !== void 0 ? _this2$props$theme$tr : editConfig.layerTitle : (_LayerUtils$searchLay = (_LayerUtils$searchLay2 = LayerUtils.searchLayer(_this2.props.layers, _this2.props.theme.url, layerName)) === null || _LayerUtils$searchLay2 === void 0 || (_LayerUtils$searchLay2 = _LayerUtils$searchLay2.sublayer) === null || _LayerUtils$searchLay2 === void 0 ? void 0 : _LayerUtils$searchLay2.title) !== null && _LayerUtils$searchLay !== void 0 ? _LayerUtils$searchLay : layerName;
280
+ var featureName = editConfig.displayField ? feature.properties[editConfig.displayField] : featureText + " " + featureId;
281
+ return /*#__PURE__*/React.createElement("option", {
282
+ key: id,
283
+ value: id
284
+ }, layerTitle + ": " + featureName);
285
+ }))) : null, this.props.editContext.feature ? /*#__PURE__*/React.createElement(AttributeForm, {
286
+ editConfig: curConfig,
287
+ editContext: this.props.editContext,
288
+ iface: this.props.iface,
289
+ onCommit: this.updatePickedFeatures
290
+ }) : null);
291
+ }
292
+ resultWindow = /*#__PURE__*/React.createElement(ResizeableWindow, {
293
+ dockable: this.props.geometry.side,
294
+ icon: "featureform",
295
+ initialHeight: this.props.geometry.initialHeight,
296
+ initialWidth: this.props.geometry.initialWidth,
297
+ initialX: this.props.geometry.initialX,
298
+ initialY: this.props.geometry.initialY,
299
+ initiallyDocked: this.props.geometry.initiallyDocked,
300
+ key: "FeatureForm",
301
+ onClose: this.onWindowClose,
302
+ title: LocaleUtils.tr("featureform.title")
303
+ }, body);
304
+ }
305
+ return [resultWindow, /*#__PURE__*/React.createElement(TaskBar, {
306
+ key: "FeatureFormTaskBar",
307
+ task: "FeatureForm"
308
+ }, function () {
309
+ return {
310
+ body: LocaleUtils.tr("infotool.clickhelpPoint")
311
+ };
312
+ })];
313
+ }
314
+ }]);
315
+ }(React.Component);
316
+ _defineProperty(FeatureForm, "propTypes", {
317
+ clearEditContext: PropTypes.func,
318
+ /** Whether to clear the identify results when exiting the identify tool. */
319
+ clearResultsOnClose: PropTypes.bool,
320
+ click: PropTypes.object,
321
+ currentEditContext: PropTypes.string,
322
+ editContext: PropTypes.object,
323
+ enabled: PropTypes.bool,
324
+ /** Whether to clear the task when the results window is closed. */
325
+ exitTaskOnResultsClose: PropTypes.bool,
326
+ filter: PropTypes.object,
327
+ /** Default window geometry with size, position and docking status. Positive position values (including '0') are related to top (InitialY) and left (InitialX), negative values (including '-0') to bottom (InitialY) and right (InitialX). */
328
+ geometry: PropTypes.shape({
329
+ initialWidth: PropTypes.number,
330
+ initialHeight: PropTypes.number,
331
+ initialX: PropTypes.number,
332
+ initialY: PropTypes.number,
333
+ initiallyDocked: PropTypes.bool,
334
+ side: PropTypes.string
335
+ }),
336
+ iface: PropTypes.object,
337
+ layers: PropTypes.array,
338
+ map: PropTypes.object,
339
+ setCurrentTask: PropTypes.func,
340
+ setEditContext: PropTypes.func,
341
+ startupParams: PropTypes.object,
342
+ theme: PropTypes.object
343
+ });
344
+ _defineProperty(FeatureForm, "defaultProps", {
345
+ clearResultsOnClose: true,
346
+ geometry: {
347
+ initialWidth: 320,
348
+ initialHeight: 480,
349
+ initialX: 0,
350
+ initialY: 0,
351
+ initiallyDocked: false,
352
+ side: 'left'
353
+ }
354
+ });
355
+ _defineProperty(FeatureForm, "defaultState", {
356
+ pendingRequests: 0,
357
+ pickedFeatures: null,
358
+ selectedFeature: ""
359
+ });
360
+ export default (function () {
361
+ var iface = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : EditingInterface;
362
+ return connect(function (state) {
363
+ var enabled = state.task.id === "FeatureForm" || state.task.identifyEnabled && ConfigUtils.getConfigProp("identifyTool", state.theme.current, "Identify") === "FeatureForm";
364
+ return {
365
+ click: state.map.click || {
366
+ modifiers: {}
367
+ },
368
+ enabled: enabled,
369
+ editContext: state.editing.contexts.FeatureForm || {},
370
+ currentEditContext: state.editing.currentContext,
371
+ iface: iface,
372
+ layers: state.layers.flat,
373
+ filter: state.layers.filter,
374
+ map: state.map,
375
+ theme: state.theme.current,
376
+ startupParams: state.localConfig.startupParams
377
+ };
378
+ }, {
379
+ setCurrentTask: setCurrentTask,
380
+ clearEditContext: clearEditContext,
381
+ setEditContext: setEditContext
382
+ })(FeatureForm);
383
+ });