qwc2 2025.4.10 → 2025.4.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.
- package/components/AppMenu.js +1 -1
- package/components/AttributeTableWidget.js +16 -0
- package/components/style/AppMenu.css +19 -5
- package/components/style/AttributeTableWidget.css +214 -0
- package/package.json +1 -1
- package/plugins/API.js +2 -2
- package/plugins/AttributeTable.js +3 -12
- package/plugins/BackgroundSwitcher.js +1 -1
- package/plugins/style/AttributeTable.css +1 -215
- package/plugins/style/Portal.css +2 -6
- package/static/translations/bg-BG.json +6 -0
- package/static/translations/ca-ES.json +6 -0
- package/static/translations/cs-CZ.json +6 -0
- package/static/translations/de-CH.json +6 -0
- package/static/translations/de-DE.json +6 -0
- package/static/translations/en-US.json +6 -0
- package/static/translations/es-ES.json +6 -0
- package/static/translations/fi-FI.json +6 -0
- package/static/translations/fr-FR.json +6 -0
- package/static/translations/hu-HU.json +6 -0
- package/static/translations/it-IT.json +6 -0
- package/static/translations/ja-JP.json +6 -0
- package/static/translations/nl-NL.json +6 -0
- package/static/translations/no-NO.json +6 -0
- package/static/translations/pl-PL.json +6 -0
- package/static/translations/pt-BR.json +6 -0
- package/static/translations/pt-PT.json +6 -0
- package/static/translations/ro-RO.json +6 -0
- package/static/translations/ru-RU.json +6 -0
- package/static/translations/sv-SE.json +6 -0
- package/static/translations/tr-TR.json +6 -0
- package/static/translations/tsconfig.json +5 -1
- package/utils/SearchProviders.js +1 -1
package/components/AppMenu.js
CHANGED
|
@@ -5,4 +5,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
|
|
|
5
5
|
* This source code is licensed under the BSD-style license found in the
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/import React from"react";import{connect}from"react-redux";import classnames from"classnames";import{remove as removeDiacritics}from"diacritics";import isEmpty from"lodash.isempty";import isEqual from"lodash.isequal";import mousetrap from"mousetrap";import PropTypes from"prop-types";import{setCurrentTask}from"../actions/task";import{setMenuMargin}from"../actions/windows";import InputContainer from"../components/widgets/InputContainer";import ConfigUtils from"../utils/ConfigUtils";import LocaleUtils from"../utils/LocaleUtils";import MiscUtils from"../utils/MiscUtils";import Icon from"./Icon";import"./style/AppMenu.css";var AppMenu=/*#__PURE__*/function(_React$Component){function AppMenu(props){var _this;_classCallCheck(this,AppMenu);_this=_callSuper(this,AppMenu,[props]);_defineProperty(_this,"state",{menuVisible:false,filter:"",submenusVisible:[],curEntry:null,keyNav:false});_defineProperty(_this,"addKeyBindings",function(items){items.forEach(function(item){if(item.subitems){_this.addKeyBindings(item.subitems)}else if(item.shortcut){mousetrap.bind(item.shortcut,function(){_this.onMenuitemClicked(item);return false});_this.boundShortcuts.push(item.shortcut)}})});_defineProperty(_this,"onKeyPress",function(ev){if(ev.key==="Enter"||ev.key==="ArrowLeft"||ev.key==="ArrowUp"||ev.key==="ArrowRight"||ev.key==="ArrowDown"){if(!_this.state.curEntry){if(ev.key==="ArrowUp"||ev.key==="ArrowDown"){_this.setState({curEntry:[ev.key==="ArrowUp"?_this.props.menuItems.length-1:0]})}}else{var curEntry=_toConsumableArray(_this.state.curEntry);var stack=[_this.props.menuItems];_this.state.curEntry.forEach(function(entry){stack.push(stack[stack.length-1][entry].subitems)});stack.pop();var leaf=curEntry.pop();var level=stack.length-1;if(ev.key==="Enter"){if(!isEmpty(stack[stack.length-1][leaf].subitems)){_this.onSubmenuClicked(stack[stack.length-1][leaf].key,level)}else{_this.onMenuitemClicked(stack[stack.length-1][leaf])}}else if(ev.key==="ArrowLeft"){if(!isEmpty(stack[stack.length-1][leaf].subitems)&&_this.state.submenusVisible[level]===stack[stack.length-1][leaf].key){_this.onSubmenuClicked(stack[stack.length-1][leaf].key,level)}}else if(ev.key==="ArrowUp"){leaf-=1;if(leaf>=0&&!isEmpty(stack[stack.length-1][leaf].subitems)&&_this.state.submenusVisible[level]===stack[stack.length-1][leaf].key){curEntry.push(leaf);leaf=stack[stack.length-1][leaf].subitems.length-1}else{while(leaf<0&&curEntry.length>0){leaf=curEntry.pop()}if(leaf<0){leaf=_this.props.menuItems.length-1}}}else if(ev.key==="ArrowRight"){if(!isEmpty(stack[stack.length-1][leaf].subitems)&&!_this.state.submenusVisible[level]){_this.onSubmenuClicked(stack[stack.length-1][leaf].key,level)}}else if(ev.key==="ArrowDown"){if(!isEmpty(stack[stack.length-1][leaf].subitems)&&_this.state.submenusVisible[level]===stack[stack.length-1][leaf].key){curEntry.push(leaf);leaf=0}else{leaf+=1;while(leaf>stack[stack.length-1].length-1&&curEntry.length>0){leaf=curEntry.pop()+1;stack.pop()}if(leaf>_this.props.menuItems.length-1){leaf=0}}}_this.setState({curEntry:[].concat(_toConsumableArray(curEntry),[leaf]),keyNav:true})}MiscUtils.killEvent(ev)}else if(ev.key==="Escape"){_this.toggleMenu();MiscUtils.killEvent(ev)}});_defineProperty(_this,"onMouseMove",function(ev){if(_this.state.keyNav){_this.setState({keyNav:false})}MiscUtils.killEvent(ev)});_defineProperty(_this,"toggleMenu",function(){if(!_this.state.menuVisible&&_this.props.currentTaskBlocked){return}if(!_this.state.menuVisible&&_this.props.appMenuClearsTask){_this.props.setCurrentTask(null)}if(!_this.props.keepMenuOpen){if(!_this.state.menuVisible){document.addEventListener("click",_this.checkCloseMenu);document.addEventListener("keydown",_this.onKeyPress,true);document.addEventListener("mousemove",_this.onMouseMove,true)}else{document.removeEventListener("click",_this.checkCloseMenu);document.removeEventListener("keydown",_this.onKeyPress,true);document.removeEventListener("mousemove",_this.onMouseMove,true)}}_this.props.onMenuToggled(!_this.state.menuVisible);if(_this.props.menuCompact){_this.props.setMenuMargin(!_this.state.menuVisible?MiscUtils.convertEmToPx(3.75):0,0)}_this.setState(function(state){return{menuVisible:!state.menuVisible,submenusVisible:[],filter:""}})});_defineProperty(_this,"checkCloseMenu",function(ev){if(_this.menuEl&&!_this.menuEl.contains(ev.target)&&!_this.props.keepMenuOpen){_this.toggleMenu()}MiscUtils.killEvent(ev)});_defineProperty(_this,"onSubmenuClicked",function(key,level){var a=_this.state.submenusVisible[level]===key?[]:[key];_this.setState(function(state){return{submenusVisible:state.submenusVisible.slice(0,level).concat(a)}})});_defineProperty(_this,"onMenuitemClicked",function(item){if(!_this.props.keepMenuOpen&&_this.state.menuVisible){_this.toggleMenu()}if(item.url){var label=item.title?LocaleUtils.tr(item.title):LocaleUtils.tr("appmenu.items."+item.key+(item.mode||""));_this.props.openExternalUrl(item.url,item.target,label,item.icon)}else{_this.props.setCurrentTask(item.task||item.key,item.mode,item.mapClickAction||(item.identifyEnabled?"identify":null))}});_defineProperty(_this,"renderMenuItems",function(items,level,filter,path){if(items){return items.map(function(item,idx){var active=isEqual(_this.state.curEntry,[].concat(_toConsumableArray(path),[idx]));if(item.subitems){var _item$key;var subitems=_this.renderMenuItems(item.subitems,level+1,filter,[].concat(_toConsumableArray(path),[idx]));if(filter&&isEmpty(subitems)){return null}var visible=filter&&!isEmpty(subitems)||_this.state.submenusVisible[level]===item.key;var className=classnames({"appmenu-submenu":true,"appmenu-submenu-active":active,"appmenu-submenu-expanded":visible});return/*#__PURE__*/React.createElement("li",{className:className,key:(_item$key=item.key)!==null&&_item$key!==void 0?_item$key:item.title,onClick:function onClick(){return _this.onSubmenuClicked(item.key,level)},onMouseEnter:function onMouseEnter(){if(!_this.state.keyNav){_this.setState({curEntry:[].concat(_toConsumableArray(path),[idx])})}},onMouseLeave:function onMouseLeave(){if(!_this.state.keyNav){_this.setState({curEntry:null})}},ref:function ref(el){if(active&&el&&_this.state.keyNav){el.scrollIntoView(false)}}},/*#__PURE__*/React.createElement(Icon,{icon:item.icon,size:"xlarge"}),item.title?LocaleUtils.tr(item.title):LocaleUtils.tr("appmenu.items."+item.key),/*#__PURE__*/React.createElement("ul",null,subitems))}else{var label=item.title?LocaleUtils.tr(item.title):LocaleUtils.tr("appmenu.items."+item.key+(item.mode||""));var comment=item.comment?LocaleUtils.tr("appmenu.items."+item.key+(item.mode||"")+"_comment"):"";if(!filter||removeDiacritics(label.toLowerCase()).match(filter)||comment&&removeDiacritics(comment.toLowerCase()).match(filter)){var _className=classnames({"appmenu-leaf":true,"appmenu-leaf-active":active});return/*#__PURE__*/React.createElement("li",{className:_className,key:item.key?item.key+(item.mode||""):item.title,onClick:function onClick(){return _this.onMenuitemClicked(item)},onMouseEnter:function onMouseEnter(){if(!_this.state.keyNav){_this.setState({curEntry:[].concat(_toConsumableArray(path),[idx])})}},onMouseLeave:function onMouseLeave(){if(!_this.state.keyNav){_this.setState({curEntry:null})}},ref:function ref(el){if(active&&el&&_this.state.keyNav){el.scrollIntoView(false)}}},/*#__PURE__*/React.createElement(Icon,{icon:item.icon,size:"xlarge"}),/*#__PURE__*/React.createElement("span",{className:"appmenu-leaf-label"},label,comment?/*#__PURE__*/React.createElement("div",{className:"appmenu-leaf-comment"},comment):null))}return null}}).filter(function(x){return x})}else{return null}});_defineProperty(_this,"setFilterField",function(el){_this.filterfield=el;if(_this.props.appMenuShortcut){mousetrap(el).bind(_this.props.appMenuShortcut,_this.toggleMenu)}});_this.menuEl=null;_this.filterfield=null;_this.boundShortcuts=[];return _this}_inherits(AppMenu,_React$Component);return _createClass(AppMenu,[{key:"componentDidMount",value:function componentDidMount(){if(this.props.showOnStartup){this.toggleMenu()}this.addKeyBindings(this.props.menuItems);if(this.props.appMenuShortcut){mousetrap.bind(this.props.appMenuShortcut,this.toggleMenu)}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){var _this2=this;if(this.state.menuVisible&&!prevState.menuVisible&&this.filterfield&&!this.props.menuCompact){// Need to wait until slide in transition is over
|
|
8
|
-
setTimeout(function(){_this2.filterfield.focus()},400)}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.boundShortcuts.forEach(function(shortcut){return mousetrap.unbind(shortcut)});if(this.props.appMenuShortcut){mousetrap.unbind(this.props.appMenuShortcut,this.toggleMenu)}if(this.state.menuVisible){document.removeEventListener("click",this.checkCloseMenu);document.removeEventListener("keydown",this.onKeyPress,true);document.removeEventListener("mousemove",this.onMouseMove,true)}}},{key:"render",value:function render(){var _this3=this;var isMobile=ConfigUtils.isMobile();var visible=!this.props.currentTaskBlocked&&this.state.menuVisible;var className=classnames({"AppMenu":true,"appmenu-blocked":this.props.currentTaskBlocked,"appmenu-visible":visible,"appmenu-compact":this.props.menuCompact});var filter=this.state.filter?new RegExp(removeDiacritics(this.state.filter).replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&"),"i"):null;return/*#__PURE__*/React.createElement("div",{className:className,ref:function ref(el){_this3.menuEl=el;MiscUtils.setupKillTouchEvents(el)}},/*#__PURE__*/React.createElement("div",{className:"appmenu-button
|
|
8
|
+
setTimeout(function(){_this2.filterfield.focus()},400)}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.boundShortcuts.forEach(function(shortcut){return mousetrap.unbind(shortcut)});if(this.props.appMenuShortcut){mousetrap.unbind(this.props.appMenuShortcut,this.toggleMenu)}if(this.state.menuVisible){document.removeEventListener("click",this.checkCloseMenu);document.removeEventListener("keydown",this.onKeyPress,true);document.removeEventListener("mousemove",this.onMouseMove,true)}}},{key:"render",value:function render(){var _this3=this;var isMobile=ConfigUtils.isMobile();var visible=!this.props.currentTaskBlocked&&this.state.menuVisible;var showLabel=!this.props.menuCompact&&!isMobile;var className=classnames({"AppMenu":true,"appmenu-blocked":this.props.currentTaskBlocked,"appmenu-visible":visible,"appmenu-compact":this.props.menuCompact,"appmenu-nolabel":!showLabel});var filter=this.state.filter?new RegExp(removeDiacritics(this.state.filter).replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&"),"i"):null;return/*#__PURE__*/React.createElement("div",{className:className,ref:function ref(el){_this3.menuEl=el;MiscUtils.setupKillTouchEvents(el)}},/*#__PURE__*/React.createElement("div",{className:"appmenu-button",onMouseDown:this.toggleMenu,title:this.props.buttonLabel},showLabel?/*#__PURE__*/React.createElement("span",{className:"appmenu-label"},this.props.buttonLabel):null,/*#__PURE__*/React.createElement("span",{className:"appmenu-icon"},/*#__PURE__*/React.createElement(Icon,{icon:"menu-hamburger"}))),/*#__PURE__*/React.createElement("div",{className:"appmenu-menu-container"},/*#__PURE__*/React.createElement("ul",{className:"appmenu-menu"},this.props.showFilterField?/*#__PURE__*/React.createElement("li",{className:"appmenu-leaf"},/*#__PURE__*/React.createElement(Icon,{icon:"search",size:"xlarge"}),/*#__PURE__*/React.createElement(InputContainer,{className:"appmenu-filter"},/*#__PURE__*/React.createElement("input",{onChange:function onChange(ev){return _this3.setState({filter:ev.target.value,curEntry:null})},placeholder:LocaleUtils.tr("appmenu.filter"),ref:this.setFilterField,role:"input",type:"text",value:this.state.filter}),/*#__PURE__*/React.createElement(Icon,{icon:"clear",onClick:function onClick(){return _this3.setState({filter:""})},role:"suffix"}))):null,this.renderMenuItems(this.props.menuItems,0,filter,[]))))}}])}(React.Component);_defineProperty(AppMenu,"propTypes",{appMenuClearsTask:PropTypes.bool,appMenuShortcut:PropTypes.string,buttonLabel:PropTypes.string,currentTaskBlocked:PropTypes.bool,keepMenuOpen:PropTypes.bool,menuCompact:PropTypes.bool,menuItems:PropTypes.array,onMenuToggled:PropTypes.func,openExternalUrl:PropTypes.func,setCurrentTask:PropTypes.func,setMenuMargin:PropTypes.func,showFilterField:PropTypes.bool,showOnStartup:PropTypes.bool});_defineProperty(AppMenu,"defaultProps",{onMenuToggled:function onMenuToggled(){}});export default connect(function(state){return{currentTaskBlocked:state.task.blocked}},{setCurrentTask:setCurrentTask,setMenuMargin:setMenuMargin})(AppMenu);
|
|
@@ -0,0 +1,16 @@
|
|
|
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 _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 _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 _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread 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 _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}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 _extends(){return _extends=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)({}).hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},_extends.apply(null,arguments)}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 _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)}/**
|
|
2
|
+
* Copyright 2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import FileSaver from"file-saver";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{LayerRole,addLayerFeatures,removeLayer}from"../actions/layers";import{zoomToExtent,zoomToPoint}from"../actions/map";import{setCurrentTask,setCurrentTaskBlocked}from"../actions/task";import EditComboField,{KeyValCache}from"../components/EditComboField";import EditUploadField from"../components/EditUploadField";import Icon from"../components/Icon";import NavBar from"../components/widgets/NavBar";import NumberInput from"../components/widgets/NumberInput";import ReCaptchaWidget from"../components/widgets/ReCaptchaWidget";import Spinner from"../components/widgets/Spinner";import TextInput from"../components/widgets/TextInput";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import{ExpressionFeatureCache,parseExpression,getFeatureTemplate}from"../utils/EditingUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import"./style/AttributeTableWidget.css";var AttributeTableWidget=/*#__PURE__*/function(_React$Component){function AttributeTableWidget(props){var _this;_classCallCheck(this,AttributeTableWidget);_this=_callSuper(this,AttributeTableWidget,[props]);_defineProperty(_this,"renderSortIndicator",function(field){if(_this.state.sortField&&_this.state.sortField.field===field){return/*#__PURE__*/React.createElement(Icon,{icon:_this.state.sortField.dir>0?"chevron-down":"chevron-up"})}else{return null}});_defineProperty(_this,"renderColumnResizeHandle",function(col,pos){return/*#__PURE__*/React.createElement("span",{className:"attribtable-table-"+pos+"draghandle",onMouseDown:function onMouseDown(ev){return _this.resizeTable(ev,col,true)}})});_defineProperty(_this,"renderRowResizeHandle",function(row,pos){return/*#__PURE__*/React.createElement("span",{className:"attribtable-table-"+pos+"draghandle",onMouseDown:function onMouseDown(ev){return _this.resizeTable(ev,row,false)}})});_defineProperty(_this,"changeSelectedLayer",function(value){_this.setState({selectedLayer:value})});_defineProperty(_this,"reload",function(){var layerName=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;_this.setState(function(state){var _this$props$filter$fi;var selectedLayer=layerName||state.selectedLayer;KeyValCache.clear();ExpressionFeatureCache.clear();var bbox=_this.state.limitToExtent?_this.props.mapBbox.bounds:null;_this.props.iface.getFeatures(_this.editLayerId(selectedLayer),_this.props.mapCrs,function(result){if(result){var features=result.features||[];_this.setState(function(state2){return{loading:false,features:features,filteredSortedFeatures:_this.filteredSortedFeatures(features,state2),loadedLayer:selectedLayer}})}else{// eslint-disable-next-line
|
|
8
|
+
alert(LocaleUtils.tr("attribtable.loadfailed"));_this.setState({loading:false,features:[],filteredSortedFeatures:[],loadedLayer:""})}},bbox,(_this$props$filter$fi=_this.props.filter.filterParams)===null||_this$props$filter$fi===void 0?void 0:_this$props$filter$fi[selectedLayer],_this.props.filter.filterGeom);return _objectSpread(_objectSpread({},AttributeTableWidget.defaultState),{},{loading:true,selectedLayer:selectedLayer,limitToExtent:state.limitToExtent})})});_defineProperty(_this,"sortBy",function(field){var newState={};if(_this.state.sortField&&_this.state.sortField.field===field){newState={sortField:{field:field,dir:-_this.state.sortField.dir}}}else{newState={sortField:{field:field,dir:1}}}newState.filteredSortedFeatures=_this.filteredSortedFeatures(_this.state.features,_objectSpread(_objectSpread({},_this.state),newState));_this.setState(newState)});_defineProperty(_this,"editLayerId",function(layerId){if(_this.props.theme&&_this.props.theme.editConfig&&_this.props.theme.editConfig[layerId]){return _this.props.theme.editConfig[layerId].editDataset||layerId}return layerId});_defineProperty(_this,"renderField",function(currentEditConfig,field,featureidx,filteredIndex,fielddisabled){var feature=_this.state.features[featureidx];var value=feature.properties[field.id];if(value===undefined||value===null){value=""}var updateField=function updateField(fieldid,val){var emptynull=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return _this.updateField(featureidx,filteredIndex,fieldid,val,emptynull)};var constraints=field.constraints||{};var disabled=constraints.readOnly||fielddisabled;var input=null;if(field.type==="boolean"||field.type==="bool"){input=/*#__PURE__*/React.createElement("input",_extends({name:field.id},constraints,{checked:value,disabled:disabled,onChange:function onChange(ev){return updateField(field.id,ev.target.checked)},type:"checkbox"}))}else if(constraints.values||constraints.keyvalrel){var filterExpr=null;if(field.filterExpression){var mapPrefix=(currentEditConfig.editDataset.match(/^[^.]+\./)||[""])[0];filterExpr=parseExpression(field.filterExpression,feature,_this.props.iface,mapPrefix,_this.props.mapCrs,function(){return _this.setState({reevaluate:+new Date})},true)}input=/*#__PURE__*/React.createElement(EditComboField,{editIface:_this.props.iface,fieldId:field.id,filterExpr:filterExpr,keyvalrel:constraints.keyvalrel,name:field.id,readOnly:constraints.readOnly||disabled,required:constraints.required,updateField:updateField,value:value,values:constraints.values})}else if(field.type==="number"){var _constraints$prec,_constraints$step;var precision=(_constraints$prec=constraints.prec)!==null&&_constraints$prec!==void 0?_constraints$prec:0;var step=(_constraints$step=constraints.step)!==null&&_constraints$step!==void 0?_constraints$step:1;input=/*#__PURE__*/React.createElement(NumberInput,{decimals:precision,disabled:disabled,max:constraints.max,min:constraints.min,name:field.id,onChange:function onChange(v){return updateField(field.id,v,true)},readOnly:constraints.readOnly,required:constraints.required,step:step,value:value})}else if(field.type==="date"){// Truncate time portion of ISO date string
|
|
9
|
+
value=value.substr(0,10);input=/*#__PURE__*/React.createElement("input",_extends({disabled:disabled,name:field.id,type:field.type},constraints,{onChange:function onChange(ev){return updateField(field.id,ev.target.value,true)},value:value}))}else if(field.type==="file"){return/*#__PURE__*/React.createElement(EditUploadField,{constraints:constraints,dataset:_this.editLayerId(_this.state.selectedLayer),disabled:disabled,fieldId:field.id,name:field.id,showThumbnails:false,updateField:updateField,updateFile:function updateFile(fieldId,data){_this.changedFiles[fieldId]=data},value:value})}else if(field.type==="text"){var _feature$properties$f;if(((_feature$properties$f=feature.properties[field.id])!==null&&_feature$properties$f!==void 0?_feature$properties$f:null)===null){var _ConfigUtils$getConfi;value=(_ConfigUtils$getConfi=ConfigUtils.getConfigProp("editTextNullValue"))!==null&&_ConfigUtils$getConfi!==void 0?_ConfigUtils$getConfi:""}var updateTextField=function updateTextField(val){if(val!==value){var textNullValue=ConfigUtils.getConfigProp("editTextNullValue");updateField(field.id,textNullValue!==undefined&&val===textNullValue?null:val)}};var addLinkAnchors=ConfigUtils.getConfigProp("editingAddLinkAnchors")!==false;var editTextNullValue=ConfigUtils.getConfigProp("editTextNullValue");input=/*#__PURE__*/React.createElement(TextInput,{addLinkAnchors:addLinkAnchors,clearValue:editTextNullValue,disabled:disabled,multiline:constraints.multiline,name:field.id,onChange:updateTextField,required:constraints.required,value:value})}else{input=/*#__PURE__*/React.createElement("input",_extends({disabled:disabled,name:field.id,type:field.type},constraints,{onChange:function onChange(ev){return updateField(field.id,ev.target.value)},value:value}))}return input});_defineProperty(_this,"addFeature",function(){var editConfig=_this.props.theme.editConfig||{};var currentEditConfig=editConfig[_this.state.loadedLayer];if(!currentEditConfig){return}var hasGeometry=(currentEditConfig||{}).geomType!==null;if(!_this.props.allowAddForGeometryLayers&&hasGeometry){// eslint-disable-next-line
|
|
10
|
+
alert(LocaleUtils.tr("attribtable.geomnoadd"));return}var featureSkel={type:"Feature",geometry:null,properties:currentEditConfig.fields.reduce(function(res,field){if(field.id!=="id"){res[field.id]=field.type==="text"?"":null}return res},{})};var mapPrefix=(currentEditConfig.editDataset.match(/^[^.]+\./)||[""])[0];getFeatureTemplate(currentEditConfig,featureSkel,_this.props.iface,mapPrefix,_this.props.mapCrs,function(feature){_this.setState(function(state){return{features:[].concat(_toConsumableArray(state.features),[feature]),filteredSortedFeatures:[].concat(_toConsumableArray(state.filteredSortedFeatures),[_objectSpread(_objectSpread({},feature),{},{originalIndex:state.features.length})]),filterVal:"",currentPage:Math.floor(state.features.length/state.pageSize),changedFeatureIdx:state.filteredSortedFeatures.length,newFeature:true}});_this.props.setCurrentTaskBlocked(true,LocaleUtils.tr("editing.unsavedchanged"))})});_defineProperty(_this,"deleteSelectedFeatured",function(){_this.setState(function(state){var features=state.filteredSortedFeatures.filter(function(feature){return state.selectedFeatures[feature.id]===true});features.forEach(function(feature){_this.props.iface.deleteFeature(_this.editLayerId(state.selectedLayer),feature.id,function(success){_this.setState(function(state2){var newState={deleteTask:_objectSpread(_objectSpread({},state2.deleteTask),{},{pending:state2.deleteTask.pending.filter(function(entry){return entry!==feature.id}),failed:success?state2.deleteTask.failed:[].concat(_toConsumableArray(state2.deleteTask.failed),[feature.id]),deleted:!success?state2.deleteTask.deleted:[].concat(_toConsumableArray(state2.deleteTask.deleted),[feature.id])})};if(isEmpty(newState.deleteTask.pending)){newState.features=state.features.filter(function(f){return!newState.deleteTask.deleted.includes(f.id)});newState.filteredSortedFeatures=_this.filteredSortedFeatures(newState.features,state);if(!isEmpty(newState.deleteTask.failed)){// eslint-disable-next-line
|
|
11
|
+
alert(LocaleUtils.tr("attribtable.deletefailed"))}newState.deleteTask=null;newState.currentPage=Math.floor((newState.features.length-1)/state.pageSize);newState.selectedFeatures={};newState.confirmDelete=false}return newState})},state.captchaResponse)});return{deleteTask:{pending:features.map(function(feature){return feature.id}),failed:[],deleted:[]}}})});_defineProperty(_this,"updateField",function(featureidx,filteredIdx,fieldid,value,emptynull){_this.props.setCurrentTaskBlocked(true,LocaleUtils.tr("editing.unsavedchanged"));_this.setState(function(state){value=value===""&&emptynull?null:value;var newFeatures=_toConsumableArray(state.features);newFeatures[featureidx]=_objectSpread({},newFeatures[featureidx]);newFeatures[featureidx].properties=_objectSpread(_objectSpread({},newFeatures[featureidx].properties),{},_defineProperty({},fieldid,value));var newfilteredSortedFeatures=_toConsumableArray(state.filteredSortedFeatures);newfilteredSortedFeatures[filteredIdx]=_objectSpread({},newfilteredSortedFeatures[filteredIdx]);newfilteredSortedFeatures[filteredIdx].properties=_objectSpread(_objectSpread({},newfilteredSortedFeatures[filteredIdx].properties),{},_defineProperty({},fieldid,value));var originalFeatureProps=state.originalFeatureProps||_objectSpread({},state.features[featureidx].properties);return{features:newFeatures,filteredSortedFeatures:newfilteredSortedFeatures,changedFeatureIdx:featureidx,originalFeatureProps:originalFeatureProps}})});_defineProperty(_this,"commit",function(){var feature=_objectSpread(_objectSpread({},_this.state.features[_this.state.changedFeatureIdx]),{},{crs:{type:"name",properties:{name:CoordinatesUtils.toOgcUrnCrs(_this.props.mapCrs)}}});var featureData=new FormData;featureData.set("feature",JSON.stringify(feature));Object.entries(_this.changedFiles).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],value=_ref2[1];return featureData.set("file:"+key,value)});if(_this.state.captchaResponse){featureData.set("g-recaptcha-response",_this.state.captchaResponse)}if(_this.state.newFeature){_this.props.iface.addFeatureMultipart(_this.editLayerId(_this.state.selectedLayer),featureData,function(success,result){return _this.featureCommited(success,result)})}else{_this.props.iface.editFeatureMultipart(_this.editLayerId(_this.state.loadedLayer),feature.id,featureData,function(success,result){return _this.featureCommited(success,result)})}});_defineProperty(_this,"featureCommited",function(success,result){if(!success){// eslint-disable-next-line
|
|
12
|
+
alert(result)}else{_this.changedFiles={};_this.setState(function(state){var newFeatures=_toConsumableArray(state.features);newFeatures[state.changedFeatureIdx]=result;return{features:newFeatures,filteredSortedFeatures:_this.filteredSortedFeatures(newFeatures,state),changedFeatureIdx:null,originalFeatureProps:null,newFeature:false}})}_this.props.setCurrentTaskBlocked(false)});_defineProperty(_this,"discard",function(){var newFeatures=_toConsumableArray(_this.state.features);if(_this.state.newFeature){newFeatures.splice(_this.state.changedFeatureIdx,1)}else{var featureidx=_this.state.changedFeatureIdx;newFeatures[featureidx]=_objectSpread({},newFeatures[featureidx]);newFeatures[featureidx].properties=_this.state.originalFeatureProps}_this.changedFiles={};_this.setState(function(state){return{features:newFeatures,filteredSortedFeatures:_this.filteredSortedFeatures(newFeatures,state),changedFeatureIdx:null,originalFeatureProps:null,newFeature:false}});_this.props.setCurrentTaskBlocked(false)});_defineProperty(_this,"highlightFeatures",function(){var features=[];if(_this.state.highlightedFeature){features.push(_this.state.highlightedFeature)}else if(_this.state.filterVal){features.push.apply(features,_toConsumableArray(Object.values(_this.state.filteredSortedFeatures)))}var layer={id:"__attributetablehighlight",role:LayerRole.SELECTION};_this.props.addLayerFeatures(layer,features.map(function(f){return{id:f.id,geometry:f.geometry}}),true)});_defineProperty(_this,"zoomToSelection",function(){var collection={type:"FeatureCollection",features:_this.state.filteredSortedFeatures.filter(function(feature){return _this.state.selectedFeatures[feature.id]===true&&feature.geometry})};if(!isEmpty(collection.features)){if(collection.features.length===1&&collection.features[0].geometry.type==="Point"){var zoom=MapUtils.computeZoom(_this.props.mapScales,_this.props.zoomLevel);_this.props.zoomToPoint(collection.features[0].geometry.coordinates,zoom,_this.props.mapCrs)}else{_this.props.zoomToExtent(VectorLayerUtils.computeFeatureBBox(collection),_this.props.mapCrs)}}});_defineProperty(_this,"switchToFormEditMode",function(){var editConfig=_this.props.theme.editConfig||{};var currentEditConfig=editConfig[_this.state.loadedLayer];var hasGeometry=(currentEditConfig||{}).geomType!==null;if(!hasGeometry){// eslint-disable-next-line
|
|
13
|
+
alert(LocaleUtils.tr("attribtable.nogeomnoform"));return}var feature=_this.state.filteredSortedFeatures.find(function(f){return _this.state.selectedFeatures[f.id]===true});_this.props.setCurrentTask("Editing",null,null,{layer:_this.state.loadedLayer,feature:feature})});_defineProperty(_this,"updateFilter",function(field,val){var resetPage=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;_this.setState(function(state){return _defineProperty(_defineProperty(_defineProperty({},field,val),"currentPage",resetPage?0:state.currentPage),"filteredSortedFeatures",_this.filteredSortedFeatures(state.features,_objectSpread(_objectSpread({},state),{},_defineProperty({},field,val))))})});_defineProperty(_this,"filteredSortedFeatures",function(features,state){var filteredFeatures=[];if(!state.filterVal){filteredFeatures=features.map(function(feature,idx){return _objectSpread(_objectSpread({},feature),{},{originalIndex:idx})})}else{var filterVal=state.filterVal.toLowerCase();var test=null;if(state.filterOp==="~"){test=function test(x){return String(x).toLowerCase().includes(filterVal)}}else if(state.filterOp==="="){test=function test(x){return String(x).toLowerCase()===filterVal}}else if(state.filterOp===">"){test=function test(x){return Number(x)>Number(filterVal)}}else if(state.filterOp===">="){test=function test(x){return Number(x)>=Number(filterVal)}}else if(state.filterOp==="<="){test=function test(x){return Number(x)<=Number(filterVal)}}else if(state.filterOp==="<"){test=function test(x){return Number(x)<Number(filterVal)}}// Build value relation lookup
|
|
14
|
+
var editConfig=_this.props.theme.editConfig||{};var currentEditConfig=editConfig[_this.state.loadedLayer];var valueLookup=currentEditConfig.fields.reduce(function(res,field){if(field.constraints&&field.constraints.values){res[field.id]=field.constraints.values.reduce(function(res2,constraint){res2[constraint.value]=constraint.label;return res2},{})}else if(field.constraints&&field.constraints.keyvalrel){res[field.id]=KeyValCache.getSync(field.constraints.keyvalrel).reduce(function(res2,entry){res2[entry.value]=entry.label;return res2},{})}return res},{});var filterFieldValue=state.filterField==="id"?function(feature){return feature.id}:function(feature){var value=feature.properties[state.filterField];return valueLookup[state.filterField]?valueLookup[state.filterField][value]:value};filteredFeatures=features.reduce(function(res,feature,idx){if(test(filterFieldValue(feature))){res.push(_objectSpread(_objectSpread({},feature),{},{originalIndex:idx}))}return res},[])}if(state.sortField){var sortFieldValue=state.sortField.field==="id"?function(feature){return feature.id}:function(feature){return feature.properties[state.sortField.field]};return filteredFeatures.sort(function(f1,f2){var v1=String(sortFieldValue(f1));var v2=String(sortFieldValue(f2));return v1.localeCompare(v2,undefined,{numeric:true,sensitivity:"base"})*state.sortField.dir})}else{return filteredFeatures}});_defineProperty(_this,"resizeTable",function(ev,index,resizeCol){if(_this.table){var element=_this.table.getElementsByTagName(resizeCol?"th":"tr")[index];var initial=0;if(resizeCol){initial=parseFloat(element.style.minWidth.replace(/px$/,""))||element.clientWidth}else{initial=parseFloat(element.style.height.replace(/px$/,""))||element.clientHeight}var resize={anchor:resizeCol?ev.clientX:ev.clientY,element:element,initial:initial};var resizeDo=resizeCol?function(event){var delta=event.clientX-resize.anchor;resize.element.style.minWidth=Math.max(resize.initial+delta,16)+"px";resize.element.style.width=Math.max(resize.initial+delta,16)+"px"}:function(event){var delta=event.clientY-resize.anchor;resize.element.style.height=Math.max(resize.initial+delta,16)+"px"};var eventShield=ev.view.document.createElement("div");eventShield.className="__event_shield";ev.view.document.body.appendChild(eventShield);ev.view.document.body.classList.add(resizeCol?"ewresizing":"nsresizing");ev.view.addEventListener("mousemove",resizeDo);ev.view.addEventListener("mouseup",function(event){event.view.document.body.removeChild(eventShield);event.view.removeEventListener("mousemove",resizeDo);event.view.document.body.classList.remove(resizeCol?"ewresizing":"nsresizing")},{once:true})}});_defineProperty(_this,"csvExport",function(){var editConfig=_this.props.theme.editConfig||{};var currentEditConfig=editConfig[_this.state.loadedLayer];if(!currentEditConfig){return}var fields=currentEditConfig.fields.filter(function(field){return field.id!=="id"});var data="";data+="id,"+fields.map(function(field){return"\"".concat(field.name.replaceAll("\"","\"\""),"\"")}).join(",")+"\n";_this.state.features.forEach(function(feature){data+=feature.id+","+fields.map(function(field){var value=feature.properties[field.id];if(value===null||value===undefined){return"null"}else{return"\"".concat(String(feature.properties[field.id]).replaceAll("\"","\"\""),"\"")}}).join(",")+"\n"});FileSaver.saveAs(new Blob([data],{type:"text/plain;charset=utf-8"}),_this.state.loadedLayer+".csv")});_this.changedFiles={};_this.state=AttributeTableWidget.defaultState;_this.table=null;_this.attribTableContents=null;return _this}_inherits(AttributeTableWidget,_React$Component);return _createClass(AttributeTableWidget,[{key:"componentDidMount",value:function componentDidMount(){if(this.props.initialLayer){this.reload(this.props.initialLayer)}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.state.newFeature&&!prevState.newFeature){if(this.attribTableContents){this.attribTableContents.scrollTop=this.attribTableContents.scrollHeight}}// Reload conditions when limited to extent
|
|
15
|
+
if(this.state.limitToExtent&&this.state.selectedLayer&&(!prevState.limitToExtent||this.props.mapBbox!==prevProps.mapBbox)){this.reload()}else if(!this.state.limitToExtent&&prevState.limitToExtent){this.reload()}// Highlight feature
|
|
16
|
+
if(this.state.highlightedFeature!==prevState.highlightedFeature||this.state.filteredSortedFeatures!==prevState.filteredSortedFeatures){this.highlightFeatures()}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.props.removeLayer("__attributetablehighlight")}},{key:"render",value:function render(){var _this2=this;var captchaRequired=ConfigUtils.getConfigProp("editServiceCaptchaSiteKey")&&!ConfigUtils.getConfigProp("username");var captchaPending=captchaRequired&&!this.state.captchaResponse;var editConfig=this.props.theme.editConfig||{};var currentEditConfig=editConfig[this.state.loadedLayer];var editPermissions=(editConfig[this.state.loadedLayer]||{}).permissions||{};var readOnly=editPermissions.updatable===false;var loadOverlay=null;if(this.state.selectedLayer&&this.state.selectedLayer!==this.state.loadedLayer){if(this.state.loading){loadOverlay=/*#__PURE__*/React.createElement("div",{className:"attribtable-overlay"},/*#__PURE__*/React.createElement(Spinner,null),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("attribtable.loading")))}else{loadOverlay=/*#__PURE__*/React.createElement("div",{className:"attribtable-overlay"},/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("attribtable.pleasereload")))}}else if(this.state.selectedLayer&&this.state.deleteTask){loadOverlay=/*#__PURE__*/React.createElement("div",{className:"attribtable-overlay"},/*#__PURE__*/React.createElement(Spinner,null),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("attribtable.deleting")))}var table=null;var footbar=null;if(currentEditConfig&&this.state.features){var fields=currentEditConfig.fields.reduce(function(res,field){if(field.id!=="id"){res.push(field)}return res},[]);var indexOffset=this.state.currentPage*this.state.pageSize;var features=this.state.filteredSortedFeatures.slice(indexOffset,indexOffset+this.state.pageSize);table=/*#__PURE__*/React.createElement("table",{className:"attribtable-table",ref:function ref(el){_this2.table=el}},/*#__PURE__*/React.createElement("thead",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("th",null),/*#__PURE__*/React.createElement("th",{onClick:function onClick(){return _this2.sortBy("id")}},/*#__PURE__*/React.createElement("span",null,/*#__PURE__*/React.createElement("span",{className:"attribtable-table-headername"},"id"),this.renderSortIndicator("id"),this.renderColumnResizeHandle(1,"r"))),fields.map(function(field,idx){return/*#__PURE__*/React.createElement("th",{key:field.id,onClick:function onClick(){return _this2.sortBy(field.id)},title:field.name},/*#__PURE__*/React.createElement("span",null,_this2.renderColumnResizeHandle(idx+1,"l"),/*#__PURE__*/React.createElement("span",{className:"attribtable-table-headername"},field.name),_this2.renderSortIndicator(field.id),idx<fields.length-1?_this2.renderColumnResizeHandle(idx+2,"r"):null))}))),/*#__PURE__*/React.createElement("tbody",null,features.map(function(feature,filteredIndex){var featureidx=feature.originalIndex;var disabled=readOnly||_this2.state.changedFeatureIdx!==null&&_this2.state.changedFeatureIdx!==featureidx;var key=_this2.state.changedFeatureIdx===featureidx&&_this2.state.newFeature?"newfeature":feature.id;return/*#__PURE__*/React.createElement("tr",{className:disabled?"row-disabled":"",key:key,onMouseEnter:function onMouseEnter(){return _this2.setState({highlightedFeature:feature})},onMouseLeave:function onMouseLeave(){return _this2.setState(function(state){return{highlightedFeature:state.highlightedFeature===feature?null:state.highlightedFeature}})}},/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("span",null,filteredIndex>0?_this2.renderRowResizeHandle(filteredIndex,"t"):null,/*#__PURE__*/React.createElement("input",{checked:_this2.state.selectedFeatures[feature.id]===true,onChange:function onChange(ev){return _this2.setState(function(state){return{selectedFeatures:_objectSpread(_objectSpread({},state.selectedFeatures),{},_defineProperty({},feature.id,ev.target.checked))}})},type:"checkbox"}),_this2.renderRowResizeHandle(filteredIndex+1,"b"))),/*#__PURE__*/React.createElement("td",null,feature.id),fields.map(function(field){return/*#__PURE__*/React.createElement("td",{key:field.id},_this2.renderField(currentEditConfig,field,featureidx,indexOffset+filteredIndex,disabled||!!_this2.state.filterVal&&field.id===_this2.state.filterField))}))})));var npages=Math.ceil(this.state.filteredSortedFeatures.length/this.state.pageSize);var pages=[this.state.currentPage];var extraright=Math.max(0,2-this.state.currentPage);var extraleft=Math.max(0,this.state.currentPage-(npages-3));for(var i=0;i<3+extraleft;++i){if(this.state.currentPage-i>0){pages.unshift(this.state.currentPage-i)}}for(var _i=0;_i<3+extraright;++_i){if(this.state.currentPage+_i<npages-1){pages.push(this.state.currentPage-_i+1)}}footbar=/*#__PURE__*/React.createElement("div",{className:"attribtable-footbar"},/*#__PURE__*/React.createElement(NavBar,{currentPage:this.state.currentPage,disabled:this.state.changedFeatureIdx!==null,nPages:npages,pageChanged:function pageChanged(currentPage){return _this2.setState({currentPage:currentPage})},pageSize:this.state.pageSize,pageSizeChanged:function pageSizeChanged(pageSize){return _this2.setState({pageSize:pageSize})}}),/*#__PURE__*/React.createElement("div",{className:"attribtable-filter controlgroup"},/*#__PURE__*/React.createElement(Icon,{icon:"filter"}),/*#__PURE__*/React.createElement("select",{disabled:this.state.changedFeatureIdx!==null,onChange:function onChange(ev){return _this2.updateFilter("filterField",ev.target.value)},value:this.state.filterField},/*#__PURE__*/React.createElement("option",{value:"id"},"id"),fields.map(function(field){return/*#__PURE__*/React.createElement("option",{key:field.id,value:field.id},field.name)})),/*#__PURE__*/React.createElement("select",{disabled:this.state.changedFeatureIdx!==null,onChange:function onChange(ev){return _this2.updateFilter("filterOp",ev.target.value)},value:this.state.filterOp},/*#__PURE__*/React.createElement("option",{value:"~"},"~"),/*#__PURE__*/React.createElement("option",{value:"="},"="),/*#__PURE__*/React.createElement("option",{value:">"},">"),/*#__PURE__*/React.createElement("option",{value:">="},">="),/*#__PURE__*/React.createElement("option",{value:"<="},"<="),/*#__PURE__*/React.createElement("option",{value:"<"},"<")),/*#__PURE__*/React.createElement(TextInput,{disabled:this.state.changedFeatureIdx!==null,onChange:function onChange(value){return _this2.updateFilter("filterVal",value,true)},value:this.state.filterVal})),this.props.showLimitToExtent?/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("label",null,/*#__PURE__*/React.createElement("input",{checked:this.state.limitToExtent,onChange:function onChange(ev){return _this2.setState({limitToExtent:ev.target.checked})},type:"checkbox"})," ",LocaleUtils.tr("attribtable.limittoextent"))):null)}var nolayer=!this.state.selectedLayer;var loading=this.state.loading;var editing=this.state.changedFeatureIdx!==null;var layerChanged=this.state.selectedLayer!==this.state.loadedLayer;var hasGeometry=(currentEditConfig||{}).geomType!==null;var showAddButton=editPermissions.creatable!==false&&(this.props.allowAddForGeometryLayers||!hasGeometry);var showDelButton=editPermissions.deletable!==false;var showEditButton=ConfigUtils.havePlugin("Editing")&&this.props.showEditFormButton;var deleteButton=showDelButton?/*#__PURE__*/React.createElement("button",{className:"button",disabled:layerChanged||editing||!Object.values(this.state.selectedFeatures).find(function(entry){return entry===true}),onClick:function onClick(){return _this2.setState({confirmDelete:true})},title:LocaleUtils.tr("attribtable.deletefeatures")},/*#__PURE__*/React.createElement(Icon,{icon:"trash"})):null;var captchaBar=null;if(captchaRequired&&(this.state.changedFeatureIdx!==null||this.state.confirmDelete)){captchaBar=/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement(ReCaptchaWidget,{onChange:function onChange(value){return _this2.setState({captchaResponse:value})},sitekey:ConfigUtils.getConfigProp("editServiceCaptchaSiteKey")}))}return/*#__PURE__*/React.createElement("div",{className:"AttributeTable"},loadOverlay,/*#__PURE__*/React.createElement("div",{className:"attribtable-toolbar"},this.props.showLayerSelection?/*#__PURE__*/React.createElement("select",{disabled:loading||editing,onChange:function onChange(ev){return _this2.changeSelectedLayer(ev.target.value)},value:this.state.selectedLayer||""},/*#__PURE__*/React.createElement("option",{disabled:true,value:""},LocaleUtils.tr("attribtable.selectlayer")),Object.keys(editConfig).map(function(layerId){var layerName=editConfig[layerId].layerName;var match=LayerUtils.searchLayer(_this2.props.layers,"name",layerName,[LayerRole.THEME]);return/*#__PURE__*/React.createElement("option",{key:layerId,value:layerId},match?match.sublayer.title:layerName)})):null,/*#__PURE__*/React.createElement("button",{className:"button",disabled:editing||nolayer||this.state.loading,onClick:function onClick(){return _this2.reload()},title:LocaleUtils.tr("attribtable.reload")},/*#__PURE__*/React.createElement(Icon,{icon:"refresh"})),showAddButton?/*#__PURE__*/React.createElement("button",{className:"button",disabled:nolayer||editing||loading||layerChanged,onClick:this.addFeature,title:LocaleUtils.tr("attribtable.addfeature")},/*#__PURE__*/React.createElement(Icon,{icon:"plus"})):null,/*#__PURE__*/React.createElement("button",{className:"button",disabled:layerChanged||!Object.values(this.state.selectedFeatures).find(function(entry){return entry===true}),onClick:this.zoomToSelection,title:LocaleUtils.tr("attribtable.zoomtoselection")},/*#__PURE__*/React.createElement(Icon,{icon:"search"})),showEditButton?/*#__PURE__*/React.createElement("button",{className:"button",disabled:layerChanged||editing||Object.values(this.state.selectedFeatures).filter(function(entry){return entry===true}).length!==1,onClick:this.switchToFormEditMode,title:LocaleUtils.tr("attribtable.formeditmode")},/*#__PURE__*/React.createElement(Icon,{icon:"editing"})):null,this.state.confirmDelete?/*#__PURE__*/React.createElement("button",{className:"button button-accept",disabled:captchaPending,onClick:this.deleteSelectedFeatured},/*#__PURE__*/React.createElement(Icon,{icon:"ok"}),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("attribtable.delete"))):deleteButton,this.state.confirmDelete?/*#__PURE__*/React.createElement("button",{className:"button button-reject",onClick:function onClick(){return _this2.setState({confirmDelete:false,captchaResponse:null})}},/*#__PURE__*/React.createElement(Icon,{icon:"remove"}),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("attribtable.nodelete"))):null,this.state.changedFeatureIdx!==null?/*#__PURE__*/React.createElement("button",{className:"button button-accept",disabled:captchaPending,onClick:this.commit},/*#__PURE__*/React.createElement(Icon,{icon:"ok"}),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("attribtable.commit"))):null,this.state.changedFeatureIdx!==null?/*#__PURE__*/React.createElement("button",{className:"button button-reject",onClick:this.discard},/*#__PURE__*/React.createElement(Icon,{icon:"remove"}),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("attribtable.discard"))):null,/*#__PURE__*/React.createElement("button",{className:"button",disabled:isEmpty(this.state.features),onClick:function onClick(){return _this2.csvExport()},title:LocaleUtils.tr("attribtable.csvexport")},/*#__PURE__*/React.createElement(Icon,{icon:"export"}))),captchaBar,/*#__PURE__*/React.createElement("div",{className:"attribtable-contents",ref:function ref(el){_this2.attribTableContents=el}},table),footbar)}}])}(React.Component);_defineProperty(AttributeTableWidget,"propTypes",{addLayerFeatures:PropTypes.func,/** Whether to allow adding records for datasets which have a geometry column. */allowAddForGeometryLayers:PropTypes.bool,filter:PropTypes.object,iface:PropTypes.object,initialLayer:PropTypes.string,layers:PropTypes.array,mapBbox:PropTypes.object,mapCrs:PropTypes.string,mapScales:PropTypes.array,removeLayer:PropTypes.func,setCurrentTask:PropTypes.func,setCurrentTaskBlocked:PropTypes.func,/** Whether to show a button to open the edit form for selected layer. Requires the Editing plugin to be enabled. */showEditFormButton:PropTypes.bool,/** Whether to show the layer selection menu. */showLayerSelection:PropTypes.bool,/** Whether to show the "Limit to extent" checkbox */showLimitToExtent:PropTypes.bool,theme:PropTypes.object,/** The zoom level for zooming to point features. */zoomLevel:PropTypes.number,zoomToExtent:PropTypes.func,zoomToPoint:PropTypes.func});_defineProperty(AttributeTableWidget,"defaultProps",{zoomLevel:1000,showEditFormButton:true,showLayerSelection:true});_defineProperty(AttributeTableWidget,"defaultState",{loading:false,selectedLayer:"",loadedLayer:"",features:[],filteredSortedFeatures:[],selectedFeatures:{},highlightedFeature:null,changedFeatureIdx:null,originalFeatureProps:null,pageSize:50,currentPage:0,filterField:"id",filterOp:"~",filterVal:"",sortField:null,deleteTask:null,newFeature:false,confirmDelete:false,limitToExtent:false,captchaResponse:""});export default connect(function(state){return{layers:state.layers.flat,filter:state.layers.filter,mapBbox:state.map.bbox,mapCrs:state.map.projection,mapScales:state.map.scales,theme:state.theme.current}},{addLayerFeatures:addLayerFeatures,removeLayer:removeLayer,setCurrentTask:setCurrentTask,setCurrentTaskBlocked:setCurrentTaskBlocked,zoomToExtent:zoomToExtent,zoomToPoint:zoomToPoint})(AttributeTableWidget);
|
|
@@ -6,7 +6,13 @@ div.AppMenu {
|
|
|
6
6
|
overflow: hidden;
|
|
7
7
|
display: flex;
|
|
8
8
|
align-items: center;
|
|
9
|
+
justify-content: right;
|
|
9
10
|
height: 100%;
|
|
11
|
+
flex: 0 1 20em;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
div.AppMenu.appmenu-nolabel {
|
|
15
|
+
flex: 0 0 auto;
|
|
10
16
|
}
|
|
11
17
|
|
|
12
18
|
div.AppMenu.appmenu-visible {
|
|
@@ -15,23 +21,31 @@ div.AppMenu.appmenu-visible {
|
|
|
15
21
|
overflow: visible;
|
|
16
22
|
}
|
|
17
23
|
|
|
24
|
+
div.AppMenu .appmenu-button {
|
|
25
|
+
display: flex;
|
|
26
|
+
align-items: center;
|
|
27
|
+
}
|
|
28
|
+
|
|
18
29
|
div.AppMenu .appmenu-label {
|
|
19
30
|
font-weight: bold;
|
|
20
31
|
transition: color 0.25s;
|
|
21
|
-
|
|
22
|
-
|
|
32
|
+
color: var(--app-menu-text-color);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
div.AppMenu.appmenu-visible .appmenu-label {
|
|
36
|
+
color: var(--app-submenu-text-color-hover);
|
|
23
37
|
}
|
|
24
38
|
|
|
25
|
-
div.AppMenu .appmenu-icon {
|
|
39
|
+
div.AppMenu .appmenu-icon > span.icon {
|
|
26
40
|
color: var(--app-menu-text-color);
|
|
27
41
|
padding: 0.25em;
|
|
28
42
|
margin: 0 1em;
|
|
29
|
-
width: 1.8em;
|
|
30
43
|
border: 2px solid var(--app-menu-text-color);
|
|
31
44
|
transition: color 0.25s, border-color 0.25s, background-color 0.25s;
|
|
32
45
|
}
|
|
33
46
|
|
|
34
|
-
|
|
47
|
+
|
|
48
|
+
div.AppMenu.appmenu-visible .appmenu-icon > span.icon {
|
|
35
49
|
color: var(--app-submenu-text-color-hover);
|
|
36
50
|
border-color: var(--app-submenu-text-color-hover);
|
|
37
51
|
background-color: inherit;
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
div.AttributeTable {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
height: 100%;
|
|
5
|
+
position: relative;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
div.attribtable-overlay {
|
|
9
|
+
position: absolute;
|
|
10
|
+
left: 0;
|
|
11
|
+
right: 0;
|
|
12
|
+
top: 2.25em;
|
|
13
|
+
bottom: 0;
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
background-color: rgba(200, 200, 200);
|
|
18
|
+
z-index: 4;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
div.attribtable-overlay > div.spinner {
|
|
22
|
+
width: 4em;
|
|
23
|
+
height: 4em;
|
|
24
|
+
margin-right: 1em;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
div.attribtable-toolbar {
|
|
28
|
+
display: flex;
|
|
29
|
+
align-items: center;
|
|
30
|
+
margin-bottom: 0.125em;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
div.attribtable-toolbar > * {
|
|
34
|
+
margin: 0.125em;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
div.attribtable-contents {
|
|
38
|
+
flex: 1 1 auto;
|
|
39
|
+
background-color: var(--list-bg-color);
|
|
40
|
+
overflow: auto;
|
|
41
|
+
border: 1px solid var(--border-color);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
table.attribtable-table {
|
|
45
|
+
min-width: 100%;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
table.attribtable-table th {
|
|
49
|
+
position: sticky;
|
|
50
|
+
top: 0;
|
|
51
|
+
z-index: 2;
|
|
52
|
+
padding: 0;
|
|
53
|
+
background-color: var(--button-bg-color);
|
|
54
|
+
color: var(--button-text-color);
|
|
55
|
+
box-shadow: inset -1px 0 0 var(--border-color),
|
|
56
|
+
inset 0 -1px 0 var(--border-color);
|
|
57
|
+
overflow: hidden;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
table.attribtable-table th:first-child {
|
|
61
|
+
position: sticky;
|
|
62
|
+
left: 0;
|
|
63
|
+
z-index: 3;
|
|
64
|
+
width: 2em;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
table.attribtable-table th > span {
|
|
68
|
+
margin: 0 0 -1px -1px;
|
|
69
|
+
padding: 0.25em;
|
|
70
|
+
display: flex;
|
|
71
|
+
align-items: center;
|
|
72
|
+
position: relative;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
table.attribtable-table th > span > span.icon {
|
|
76
|
+
position: absolute;
|
|
77
|
+
right: 1px;
|
|
78
|
+
background-color: var(--button-bg-color);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
span.attribtable-table-headername {
|
|
82
|
+
flex: 1 1 auto;
|
|
83
|
+
text-align: left;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
table.attribtable-table th > span > span.icon {
|
|
87
|
+
flex: 0 0 auto;
|
|
88
|
+
margin-left: 0.5em;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
table.attribtable-table tr:nth-child(even) {
|
|
92
|
+
background-color: var(--list-item-bg-color-even);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
table.attribtable-table tr:hover:not(.row-disabled) {
|
|
96
|
+
background-color: var(--list-item-bg-color-hover);
|
|
97
|
+
color: var(--list-item-text-color-hover);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
table.attribtable-table td:first-child {
|
|
101
|
+
background-color: var(--button-bg-color);
|
|
102
|
+
color: var(--button-text-color);
|
|
103
|
+
align-items: center;
|
|
104
|
+
padding: 0.25em 0.5em;
|
|
105
|
+
background-clip: padding-box;
|
|
106
|
+
position: sticky;
|
|
107
|
+
left: 0;
|
|
108
|
+
z-index: 1;
|
|
109
|
+
width: 2.5em;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
span.attribtable-table-ldraghandle,
|
|
113
|
+
span.attribtable-table-rdraghandle {
|
|
114
|
+
display: block;
|
|
115
|
+
position: absolute;
|
|
116
|
+
width: 4px;
|
|
117
|
+
top: 0;
|
|
118
|
+
bottom: 0;
|
|
119
|
+
cursor: ew-resize;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
span.attribtable-table-ldraghandle {
|
|
123
|
+
left: -1px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
span.attribtable-table-rdraghandle {
|
|
127
|
+
right: 0px;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
span.attribtable-table-tdraghandle,
|
|
131
|
+
span.attribtable-table-bdraghandle {
|
|
132
|
+
display: block;
|
|
133
|
+
position: absolute;
|
|
134
|
+
height: 4px;
|
|
135
|
+
left: 0;
|
|
136
|
+
right: 0;
|
|
137
|
+
cursor: ns-resize;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
span.attribtable-table-tdraghandle {
|
|
141
|
+
top: -1px;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
span.attribtable-table-bdraghandle {
|
|
145
|
+
bottom: 0px;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
table.attribtable-table {
|
|
149
|
+
table-layout: fixed;
|
|
150
|
+
width: 100%;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
table.attribtable-table td {
|
|
154
|
+
border: 1px solid var(--border-color);
|
|
155
|
+
text-align: center;
|
|
156
|
+
height: 2em;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
table.attribtable-table td:first-child {
|
|
160
|
+
border-left-width: 0;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
table.attribtable-table td > input:not([type=checkbox]),
|
|
164
|
+
table.attribtable-table td > select,
|
|
165
|
+
table.attribtable-table td > div.TextInput,
|
|
166
|
+
table.attribtable-table td > div.number-input,
|
|
167
|
+
table.attribtable-table td > span.edit-upload-field,
|
|
168
|
+
table.attribtable-table td > span.edit-upload-field-input {
|
|
169
|
+
min-width: 100%;
|
|
170
|
+
width: 0;
|
|
171
|
+
border: none!important;
|
|
172
|
+
background-color: transparent!important;
|
|
173
|
+
margin: 0;
|
|
174
|
+
height: 100%;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
table.attribtable-table td > div.TextInput,
|
|
178
|
+
table.attribtable-table td > div.TextInput > pre {
|
|
179
|
+
min-height: 2em;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
table.attribtable-table td > *:disabled,
|
|
183
|
+
table.attribtable-table tr.row-disabled,
|
|
184
|
+
table.attribtable-table tr.row-disabled * {
|
|
185
|
+
color: var(--text-color-disabled);
|
|
186
|
+
cursor: not-allowed!important;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
div.attribtable-footbar {
|
|
190
|
+
display: flex;
|
|
191
|
+
align-items: center;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
div.attribtable-footbar > div {
|
|
195
|
+
margin: 0.25em;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
div.attribtable-filter {
|
|
199
|
+
flex: 1 1 auto;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
div.attribtable-filter div.TextInput {
|
|
203
|
+
flex: 1 1 auto;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
body.ewresizing, body.ewresizing * {
|
|
207
|
+
cursor: ew-resize!important;
|
|
208
|
+
user-select: none;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
body.nsresizing, body.nsresizing * {
|
|
212
|
+
cursor: ns-resize!important;
|
|
213
|
+
user-select: none;
|
|
214
|
+
}
|
package/package.json
CHANGED
package/plugins/API.js
CHANGED
|
@@ -4,7 +4,7 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
|
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under the BSD-style license found in the
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/import React from"react";import{connect}from"react-redux";import axios from"axios";import ol from"openlayers";import PropTypes from"prop-types";import*as uuid from"uuid";import*as displayActions from"../actions/display";import*as editingActions from"../actions/editing";import{LayerRole}from"../actions/layers";import*as layerActions from"../actions/layers";import{registerCustomPlugin,unregisterCustomPlugin}from"../actions/localConfig";import*as localeActions from"../actions/locale";import*as locateActions from"../actions/locate";import*as mapActions from"../actions/map";import*as taskActions from"../actions/task";import*as themeActions from"../actions/theme";import*as windowsActions from"../actions/windows";import AppMenu from"../components/AppMenu";import AttributeForm from"../components/AttributeForm";import AutoEditForm from"../components/AutoEditForm";import CoordinateDisplayer from"../components/CoordinateDisplayer";import EditComboField from"../components/EditComboField";import EditUploadField from"../components/EditUploadField";import FullscreenSwitcher from"../components/FullscreenSwitcher";import Icon from"../components/Icon";import IdentifyViewer from"../components/IdentifyViewer";import ImportLayer from"../components/ImportLayer";import LayerInfoWindow from"../components/LayerInfoWindow";import LinkFeatureForm from"../components/LinkFeatureForm";import MapSelection from"../components/MapSelection";import NumericInputWindow from"../components/NumericInputWindow";import PickFeature from"../components/PickFeature";import PluginsContainer from"../components/PluginsContainer";import PrintSelection from"../components/PrintSelection";import QtDesignerForm from"../components/QtDesignerForm";import ResizeableWindow from"../components/ResizeableWindow";import SearchBox from"../components/SearchBox";import ServiceInfoWindow from"../components/ServiceInfoWindow";import SideBar from"../components/SideBar";import{Swipeable}from"../components/Swipeable";import TaskBar from"../components/TaskBar";import ThemeLayersListWindow from"../components/ThemeLayersListWindow";import ThemeList from"../components/ThemeList";import Toolbar from"../components/Toolbar";import ShareLink from"../components/share/ShareLink";import ShareQRCode from"../components/share/ShareQRCode";import ShareSocials from"../components/share/ShareSocials";import FixedTimeline from"../components/timeline/FixedTimeline";import InfiniteTimeline from"../components/timeline/InfiniteTimeline";import TimelineFeaturesSlider from"../components/timeline/TimelineFeaturesSlider";import AccordeonWidget from"../components/widgets/AccordeonWidget";import ButtonBar from"../components/widgets/ButtonBar";import ColorButton from"../components/widgets/ColorButton";import ComboBox from"../components/widgets/ComboBox";import CopyButton from"../components/widgets/CopyButton";import DateTimeInput from"../components/widgets/DateTimeInput";import EditableSelect from"../components/widgets/EditableSelect";import FileSelector from"../components/widgets/FileSelector";import Input from"../components/widgets/Input";import InputContainer from"../components/widgets/InputContainer";import LayerCatalogWidget from"../components/widgets/LayerCatalogWidget";import MenuButton from"../components/widgets/MenuButton";import ModalDialog from"../components/widgets/ModalDialog";import NavBar from"../components/widgets/NavBar";import NumberInput from"../components/widgets/NumberInput";import PopupMenu from"../components/widgets/PopupMenu";import{Image}from"../components/widgets/Primitives";import SearchWidget from"../components/widgets/SearchWidget";import Spinner from"../components/widgets/Spinner";import SuggestionInput from"../components/widgets/SuggestionInput";import TextInput from"../components/widgets/TextInput";import ToggleSwitch from"../components/widgets/ToggleSwitch";import VectorLayerPicker from"../components/widgets/VectorLayerPicker";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import EditingInterface from"../utils/EditingInterface";import*as EditingUtils from"../utils/EditingUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import*as PermaLinkUtils from"../utils/PermaLinkUtils";import{SearchResultType}from"../utils/SearchProviders";import ServiceLayerUtils from"../utils/ServiceLayerUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";/**
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import axios from"axios";import ol from"openlayers";import PropTypes from"prop-types";import*as uuid from"uuid";import*as displayActions from"../actions/display";import*as editingActions from"../actions/editing";import{LayerRole}from"../actions/layers";import*as layerActions from"../actions/layers";import{registerCustomPlugin,unregisterCustomPlugin}from"../actions/localConfig";import*as localeActions from"../actions/locale";import*as locateActions from"../actions/locate";import*as mapActions from"../actions/map";import*as taskActions from"../actions/task";import*as themeActions from"../actions/theme";import*as windowsActions from"../actions/windows";import AppMenu from"../components/AppMenu";import AttributeForm from"../components/AttributeForm";import AttributeTableWidget from"../components/AttributeTableWidget";import AutoEditForm from"../components/AutoEditForm";import CoordinateDisplayer from"../components/CoordinateDisplayer";import EditComboField from"../components/EditComboField";import EditUploadField from"../components/EditUploadField";import FullscreenSwitcher from"../components/FullscreenSwitcher";import Icon from"../components/Icon";import IdentifyViewer from"../components/IdentifyViewer";import ImportLayer from"../components/ImportLayer";import LayerInfoWindow from"../components/LayerInfoWindow";import LinkFeatureForm from"../components/LinkFeatureForm";import MapSelection from"../components/MapSelection";import NumericInputWindow from"../components/NumericInputWindow";import PickFeature from"../components/PickFeature";import PluginsContainer from"../components/PluginsContainer";import PrintSelection from"../components/PrintSelection";import QtDesignerForm from"../components/QtDesignerForm";import ResizeableWindow from"../components/ResizeableWindow";import SearchBox from"../components/SearchBox";import ServiceInfoWindow from"../components/ServiceInfoWindow";import SideBar from"../components/SideBar";import{Swipeable}from"../components/Swipeable";import TaskBar from"../components/TaskBar";import ThemeLayersListWindow from"../components/ThemeLayersListWindow";import ThemeList from"../components/ThemeList";import Toolbar from"../components/Toolbar";import ShareLink from"../components/share/ShareLink";import ShareQRCode from"../components/share/ShareQRCode";import ShareSocials from"../components/share/ShareSocials";import FixedTimeline from"../components/timeline/FixedTimeline";import InfiniteTimeline from"../components/timeline/InfiniteTimeline";import TimelineFeaturesSlider from"../components/timeline/TimelineFeaturesSlider";import AccordeonWidget from"../components/widgets/AccordeonWidget";import ButtonBar from"../components/widgets/ButtonBar";import ColorButton from"../components/widgets/ColorButton";import ComboBox from"../components/widgets/ComboBox";import CopyButton from"../components/widgets/CopyButton";import DateTimeInput from"../components/widgets/DateTimeInput";import EditableSelect from"../components/widgets/EditableSelect";import FileSelector from"../components/widgets/FileSelector";import Input from"../components/widgets/Input";import InputContainer from"../components/widgets/InputContainer";import LayerCatalogWidget from"../components/widgets/LayerCatalogWidget";import MenuButton from"../components/widgets/MenuButton";import ModalDialog from"../components/widgets/ModalDialog";import NavBar from"../components/widgets/NavBar";import NumberInput from"../components/widgets/NumberInput";import PopupMenu from"../components/widgets/PopupMenu";import{Image}from"../components/widgets/Primitives";import SearchWidget from"../components/widgets/SearchWidget";import Spinner from"../components/widgets/Spinner";import SuggestionInput from"../components/widgets/SuggestionInput";import TextInput from"../components/widgets/TextInput";import ToggleSwitch from"../components/widgets/ToggleSwitch";import VectorLayerPicker from"../components/widgets/VectorLayerPicker";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import EditingInterface from"../utils/EditingInterface";import*as EditingUtils from"../utils/EditingUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import*as PermaLinkUtils from"../utils/PermaLinkUtils";import{SearchResultType}from"../utils/SearchProviders";import ServiceLayerUtils from"../utils/ServiceLayerUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";/**
|
|
8
8
|
* Exposes an API for interacting with QWC2 via `window.qwc2`.
|
|
9
9
|
*
|
|
10
10
|
* You can interact with the API as soon as the `QWC2ApiReady` event is dispatched.
|
|
@@ -113,4 +113,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
|
|
|
113
113
|
* Return the current application state.
|
|
114
114
|
*/_defineProperty(_this,"getState",function(){return _this.props.state});return _this}_inherits(API,_React$Component);return _createClass(API,[{key:"componentDidMount",value:function componentDidMount(){window.qwc2={__customPlugins:{},__attributeCalculators:{},__identifyExportes:{}};// Auto-binded functions
|
|
115
115
|
for(var _i=0,_Object$keys=Object.keys(this.props);_i<_Object$keys.length;_i++){var prop=_Object$keys[_i];window.qwc2[prop]=this.props[prop]}// Additional exports
|
|
116
|
-
window.qwc2.LayerRole=LayerRole;window.qwc2.addPlugin=this.addPlugin;window.qwc2.removePlugin=this.removePlugin;window.qwc2.addIdentifyAttributeCalculator=this.addIdentifyAttributeCalculator;window.qwc2.removeIdentifyAttributeCalculator=this.removeIdentifyAttributeCalculator;window.qwc2.addIdentifyExporter=this.addIdentifyExporter;window.qwc2.removeIdentifyExporter=this.removeIdentifyExporter;window.qwc2.addExternalLayer=this.addExternalLayer;window.qwc2.drawScratch=this.drawScratch;window.qwc2.drawGeometry=this.drawGeometry;window.qwc2.getState=this.getState;window.qwc2.ConfigUtils=ConfigUtils;window.qwc2.CoordinatesUtils=CoordinatesUtils;window.qwc2.EditingInterface=EditingInterface;window.qwc2.EditingUtils=EditingUtils;window.qwc2.LocaleUtils=LocaleUtils;window.qwc2.MapUtils=MapUtils;window.qwc2.PermaLinkUtils=PermaLinkUtils;window.qwc2.SearchResultType=SearchResultType;window.qwc2.VectorLayerUtils=VectorLayerUtils;window.qwc2.libs={};window.qwc2.libs.axios=axios;window.qwc2.libs.React=React;window.qwc2.libs.PropTypes=PropTypes;window.qwc2.libs.connect=connect;window.qwc2.libs.ol=ol;window.qwc2.libs.uuid=uuid;window.qwc2.components={};window.qwc2.components.AppMenu=AppMenu;window.qwc2.components.AttributeForm=AttributeForm;window.qwc2.components.AutoEditForm=AutoEditForm;window.qwc2.components.CoordinateDisplayer=CoordinateDisplayer;window.qwc2.components.EditComboField=EditComboField;window.qwc2.components.EditUploadField=EditUploadField;window.qwc2.components.FullscreenSwitcher=FullscreenSwitcher;window.qwc2.components.Icon=Icon;window.qwc2.components.IdentifyViewer=IdentifyViewer;window.qwc2.components.ImportLayer=ImportLayer;window.qwc2.components.InputContainer=InputContainer;window.qwc2.components.LayerInfoWindow=LayerInfoWindow;window.qwc2.components.LinkFeatureForm=LinkFeatureForm;window.qwc2.components.MapSelection=MapSelection;window.qwc2.components.ModalDialog=ModalDialog;window.qwc2.components.NumericInputWindow=NumericInputWindow;window.qwc2.components.PickFeature=PickFeature;window.qwc2.components.PluginsContainer=PluginsContainer;window.qwc2.components.PopupMenu=PopupMenu;window.qwc2.components.PrintSelection=PrintSelection;window.qwc2.components.QtDesignerForm=QtDesignerForm;window.qwc2.components.ResizeableWindow=ResizeableWindow;window.qwc2.components.SearchBox=SearchBox;window.qwc2.components.ServiceInfoWindow=ServiceInfoWindow;window.qwc2.components.ShareLink=ShareLink;window.qwc2.components.ShareQRCode=ShareQRCode;window.qwc2.components.ShareSocials=ShareSocials;window.qwc2.components.SideBar=SideBar;window.qwc2.components.Spinner=Spinner;window.qwc2.components.Swipeable=Swipeable;window.qwc2.components.TaskBar=TaskBar;window.qwc2.components.ThemeLayersListWindow=ThemeLayersListWindow;window.qwc2.components.ThemeList=ThemeList;window.qwc2.components.FixedTimeline=FixedTimeline;window.qwc2.components.InfiniteTimeline=InfiniteTimeline;window.qwc2.components.TimelineFeaturesSlider=TimelineFeaturesSlider;window.qwc2.components.Toolbar=Toolbar;window.qwc2.components.AccordeonWidget=AccordeonWidget;window.qwc2.components.ButtonBar=ButtonBar;window.qwc2.components.ColorButton=ColorButton;window.qwc2.components.ComboBox=ComboBox;window.qwc2.components.CopyButton=CopyButton;window.qwc2.components.DateTimeInput=DateTimeInput;window.qwc2.components.EditableSelect=EditableSelect;window.qwc2.components.FileSelector=FileSelector;window.qwc2.components.Input=Input;window.qwc2.components.LayerCatalogWidget=LayerCatalogWidget;window.qwc2.components.MenuButton=MenuButton;window.qwc2.components.NavBar=NavBar;window.qwc2.components.NumberInput=NumberInput;window.qwc2.components.Image=Image;window.qwc2.components.SearchWidget=SearchWidget;window.qwc2.components.SuggestionInput=SuggestionInput;window.qwc2.components.TextInput=TextInput;window.qwc2.components.ToggleSwitch=ToggleSwitch;window.qwc2.components.VectorLayerPicker=VectorLayerPicker;window.dispatchEvent(new Event("QWC2ApiReady"))}},{key:"render",value:function render(){return null}}])}(React.Component);_defineProperty(API,"propTypes",{addLayer:PropTypes.func,mapCrs:PropTypes.string,registerCustomPlugin:PropTypes.func,setCurrentTask:PropTypes.func,state:PropTypes.object,unregisterCustomPlugin:PropTypes.func});function extractFunctions(obj){return Object.entries(obj).reduce(function(result,_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],value=_ref2[1];if(typeof value==="function"){result[key]=value}return result},{})}export default connect(function(state){return{mapCrs:state.map.projection,state:state}},_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({registerCustomPlugin:registerCustomPlugin,unregisterCustomPlugin:unregisterCustomPlugin},extractFunctions(displayActions)),extractFunctions(editingActions)),extractFunctions(layerActions)),extractFunctions(localeActions)),extractFunctions(locateActions)),extractFunctions(mapActions)),extractFunctions(taskActions)),extractFunctions(themeActions)),extractFunctions(windowsActions)))(API);
|
|
116
|
+
window.qwc2.LayerRole=LayerRole;window.qwc2.addPlugin=this.addPlugin;window.qwc2.removePlugin=this.removePlugin;window.qwc2.addIdentifyAttributeCalculator=this.addIdentifyAttributeCalculator;window.qwc2.removeIdentifyAttributeCalculator=this.removeIdentifyAttributeCalculator;window.qwc2.addIdentifyExporter=this.addIdentifyExporter;window.qwc2.removeIdentifyExporter=this.removeIdentifyExporter;window.qwc2.addExternalLayer=this.addExternalLayer;window.qwc2.drawScratch=this.drawScratch;window.qwc2.drawGeometry=this.drawGeometry;window.qwc2.getState=this.getState;window.qwc2.ConfigUtils=ConfigUtils;window.qwc2.CoordinatesUtils=CoordinatesUtils;window.qwc2.EditingInterface=EditingInterface;window.qwc2.EditingUtils=EditingUtils;window.qwc2.LocaleUtils=LocaleUtils;window.qwc2.MapUtils=MapUtils;window.qwc2.PermaLinkUtils=PermaLinkUtils;window.qwc2.SearchResultType=SearchResultType;window.qwc2.VectorLayerUtils=VectorLayerUtils;window.qwc2.libs={};window.qwc2.libs.axios=axios;window.qwc2.libs.React=React;window.qwc2.libs.PropTypes=PropTypes;window.qwc2.libs.connect=connect;window.qwc2.libs.ol=ol;window.qwc2.libs.uuid=uuid;window.qwc2.components={};window.qwc2.components.AppMenu=AppMenu;window.qwc2.components.AttributeForm=AttributeForm;window.qwc2.components.AttributeTableWidget=AttributeTableWidget;window.qwc2.components.AutoEditForm=AutoEditForm;window.qwc2.components.CoordinateDisplayer=CoordinateDisplayer;window.qwc2.components.EditComboField=EditComboField;window.qwc2.components.EditUploadField=EditUploadField;window.qwc2.components.FullscreenSwitcher=FullscreenSwitcher;window.qwc2.components.Icon=Icon;window.qwc2.components.IdentifyViewer=IdentifyViewer;window.qwc2.components.ImportLayer=ImportLayer;window.qwc2.components.InputContainer=InputContainer;window.qwc2.components.LayerInfoWindow=LayerInfoWindow;window.qwc2.components.LinkFeatureForm=LinkFeatureForm;window.qwc2.components.MapSelection=MapSelection;window.qwc2.components.ModalDialog=ModalDialog;window.qwc2.components.NumericInputWindow=NumericInputWindow;window.qwc2.components.PickFeature=PickFeature;window.qwc2.components.PluginsContainer=PluginsContainer;window.qwc2.components.PopupMenu=PopupMenu;window.qwc2.components.PrintSelection=PrintSelection;window.qwc2.components.QtDesignerForm=QtDesignerForm;window.qwc2.components.ResizeableWindow=ResizeableWindow;window.qwc2.components.SearchBox=SearchBox;window.qwc2.components.ServiceInfoWindow=ServiceInfoWindow;window.qwc2.components.ShareLink=ShareLink;window.qwc2.components.ShareQRCode=ShareQRCode;window.qwc2.components.ShareSocials=ShareSocials;window.qwc2.components.SideBar=SideBar;window.qwc2.components.Spinner=Spinner;window.qwc2.components.Swipeable=Swipeable;window.qwc2.components.TaskBar=TaskBar;window.qwc2.components.ThemeLayersListWindow=ThemeLayersListWindow;window.qwc2.components.ThemeList=ThemeList;window.qwc2.components.FixedTimeline=FixedTimeline;window.qwc2.components.InfiniteTimeline=InfiniteTimeline;window.qwc2.components.TimelineFeaturesSlider=TimelineFeaturesSlider;window.qwc2.components.Toolbar=Toolbar;window.qwc2.components.AccordeonWidget=AccordeonWidget;window.qwc2.components.ButtonBar=ButtonBar;window.qwc2.components.ColorButton=ColorButton;window.qwc2.components.ComboBox=ComboBox;window.qwc2.components.CopyButton=CopyButton;window.qwc2.components.DateTimeInput=DateTimeInput;window.qwc2.components.EditableSelect=EditableSelect;window.qwc2.components.FileSelector=FileSelector;window.qwc2.components.Input=Input;window.qwc2.components.LayerCatalogWidget=LayerCatalogWidget;window.qwc2.components.MenuButton=MenuButton;window.qwc2.components.NavBar=NavBar;window.qwc2.components.NumberInput=NumberInput;window.qwc2.components.Image=Image;window.qwc2.components.SearchWidget=SearchWidget;window.qwc2.components.SuggestionInput=SuggestionInput;window.qwc2.components.TextInput=TextInput;window.qwc2.components.ToggleSwitch=ToggleSwitch;window.qwc2.components.VectorLayerPicker=VectorLayerPicker;window.dispatchEvent(new Event("QWC2ApiReady"))}},{key:"render",value:function render(){return null}}])}(React.Component);_defineProperty(API,"propTypes",{addLayer:PropTypes.func,mapCrs:PropTypes.string,registerCustomPlugin:PropTypes.func,setCurrentTask:PropTypes.func,state:PropTypes.object,unregisterCustomPlugin:PropTypes.func});function extractFunctions(obj){return Object.entries(obj).reduce(function(result,_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],value=_ref2[1];if(typeof value==="function"){result[key]=value}return result},{})}export default connect(function(state){return{mapCrs:state.map.projection,state:state}},_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({registerCustomPlugin:registerCustomPlugin,unregisterCustomPlugin:unregisterCustomPlugin},extractFunctions(displayActions)),extractFunctions(editingActions)),extractFunctions(layerActions)),extractFunctions(localeActions)),extractFunctions(locateActions)),extractFunctions(mapActions)),extractFunctions(taskActions)),extractFunctions(themeActions)),extractFunctions(windowsActions)))(API);
|