qwc2 2025.7.22 → 2025.7.23

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.
@@ -4,5 +4,5 @@ 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 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
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 trargs=item.trargs||[];var label=item.title?LocaleUtils.tr.apply(LocaleUtils,[item.title].concat(_toConsumableArray(trargs))):LocaleUtils.tr.apply(LocaleUtils,["appmenu.items."+item.key+(item.mode||"")].concat(_toConsumableArray(trargs)));var comment=item.comment?LocaleUtils.tr.apply(LocaleUtils,["appmenu.items."+item.key+(item.mode||"")+"_comment"].concat(_toConsumableArray(trargs))):"";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
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);
@@ -5,13 +5,13 @@ 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 clone from"clone";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{v1 as uuidv1}from"uuid";import{setEditContext,clearEditContext}from"../actions/editing";import{LayerRole,refreshLayer}from"../actions/layers";import{setCurrentTaskBlocked}from"../actions/task";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import{getFeatureTemplate,parseExpressionsAsync}from"../utils/EditingUtils";import LocaleUtils from"../utils/LocaleUtils";import AutoEditForm from"./AutoEditForm";import LinkFeatureForm from"./LinkFeatureForm";import QtDesignerForm from"./QtDesignerForm";import ButtonBar from"./widgets/ButtonBar";import ReCaptchaWidget from"./widgets/ReCaptchaWidget";import"./style/AttributeForm.css";var AttributeForm=/*#__PURE__*/function(_React$Component){function AttributeForm(props){var _this;_classCallCheck(this,AttributeForm);_this=_callSuper(this,AttributeForm,[props]);_defineProperty(_this,"state",{busy:false,deleteClicked:false,childEdit:null,relationTables:{},formValid:true,captchaResponse:null});_defineProperty(_this,"editLayerId",function(layerId){return _this.props.editConfig||layerId});_defineProperty(_this,"render",function(){var captchaRequired=ConfigUtils.getConfigProp("editServiceCaptchaSiteKey")&&!ConfigUtils.getConfigProp("username");var captchaPending=captchaRequired&&!_this.state.captchaResponse;var commitBar=null;if(_this.props.editContext.changed){var commitButtons=[{key:"Commit",icon:_this.state.formValid?"ok":"warning",label:_this.state.formValid?LocaleUtils.tr("editing.commit"):LocaleUtils.tr("editing.invalidform"),extraClasses:_this.state.formValid?"button-accept":"button-warning",type:"submit",disabled:!_this.state.formValid||captchaPending},{key:"Discard",icon:"remove",label:LocaleUtils.tr("editing.discard"),extraClasses:"button-reject"}];commitBar=/*#__PURE__*/React.createElement(ButtonBar,{buttons:commitButtons,onClick:_this.onDiscard});/* submit is handled via onSubmit in the form */}var curConfig=_this.props.editConfig;var editPermissions=curConfig.permissions||{};var readOnly=_this.props.readOnly||editPermissions.updatable===false&&_this.props.editContext.action==="Pick";var deleteBar=null;if(!_this.props.hideDelete&&_this.props.editContext.action==="Pick"&&_this.props.editContext.feature&&!_this.props.editContext.changed&&editPermissions.deletable!==false&&!_this.props.readOnly){// Delete button bar will appear by default if no permissions are defined in editConfig or when deletable permission is set
8
- if(!_this.state.deleteClicked){var _this$props$deleteLab;var deleteButtons=[{key:"Delete",icon:"trash",label:(_this$props$deleteLab=_this.props.deleteLabel)!==null&&_this$props$deleteLab!==void 0?_this$props$deleteLab:LocaleUtils.tr("editing.delete")}];deleteBar=/*#__PURE__*/React.createElement(ButtonBar,{buttons:deleteButtons,onClick:_this.deleteClicked})}else{var _deleteButtons=[{key:"Yes",icon:"ok",label:LocaleUtils.tr("editing.reallydelete"),extraClasses:"button-accept",disabled:captchaPending},{key:"No",icon:"remove",label:LocaleUtils.tr("editing.canceldelete"),extraClasses:"button-reject"}];deleteBar=/*#__PURE__*/React.createElement(ButtonBar,{buttons:_deleteButtons,onClick:_this.deleteFeature})}}var busyDiv=null;if(_this.state.busy){busyDiv=/*#__PURE__*/React.createElement("div",{className:"attrib-form-busy"})}var childAttributeForm=null;if(_this.state.childEdit){childAttributeForm=/*#__PURE__*/React.createElement("div",{className:"link-feature-form-container"},/*#__PURE__*/React.createElement(LinkFeatureForm,_extends({},_this.state.childEdit,{finished:_this.state.childEdit.finishCallback,iface:_this.props.iface,pickFilter:_this.props.childPickFilter,readOnly:_this.props.readOnly})))}var captchaButton=null;if(captchaRequired&&(_this.props.editContext.changed||_this.state.deleteClicked)){captchaButton=/*#__PURE__*/React.createElement(ReCaptchaWidget,{onChange:function onChange(value){return _this.setState({captchaResponse:value})},sitekey:ConfigUtils.getConfigProp("editServiceCaptchaSiteKey")})}var readOnlyMsg=null;if(!readOnly&&_this.props.editContext.geomReadOnly){readOnlyMsg=LocaleUtils.tr("editing.geomreadonly")}else if(!readOnly&&_this.props.editContext.geomNonZeroZ){readOnlyMsg=LocaleUtils.tr("editing.geomnonzeroz")}return/*#__PURE__*/React.createElement("div",{className:"AttributeForm"},readOnlyMsg?/*#__PURE__*/React.createElement("div",{className:"attrib-form-geom-readonly"},readOnlyMsg):null,/*#__PURE__*/React.createElement("form",{action:"",onChange:function onChange(ev){return _this.formChanged(ev)},onSubmit:_this.onSubmit,ref:_this.setupChangedObserver},_this.props.editConfig.form?/*#__PURE__*/React.createElement(QtDesignerForm,{addRelationRecord:_this.addRelationRecord,editConfigs:_this.props.theme.editConfig,editLayerId:_this.props.editConfig.editDataset,editRelationRecord:_this.editRelationRecord,feature:_this.props.editContext.feature,fields:_this.fieldsMap(_this.props.editConfig.fields),form:_this.props.editConfig.form,iface:_this.props.iface,mapCrs:_this.props.map.projection,mapPrefix:_this.editMapPrefix(),readOnly:readOnly,removeRelationRecord:_this.removeRelationRecord,reorderRelationRecord:_this.reorderRelationRecord,report:_this.props.report,setFormBusy:_this.setFormBusy,setRelationTables:_this.setRelationTables,switchEditContext:_this.startChildEdit,updateField:_this.updateField,updateRelationField:_this.updateRelationField}):/*#__PURE__*/React.createElement(AutoEditForm,{editLayerId:_this.props.editConfig.editDataset,fields:_this.props.editConfig.fields,iface:_this.props.iface,readOnly:readOnly,touchFriendly:_this.props.touchFriendly,updateField:_this.updateField,values:_this.props.editContext.feature.properties}),captchaButton,commitBar),deleteBar,busyDiv,childAttributeForm)});_defineProperty(_this,"setFormBusy",function(busy){_this.setState({busy:busy})});_defineProperty(_this,"fieldsMap",function(fields){return fields.reduce(function(res,field){return _objectSpread(_objectSpread({},res),{},_defineProperty({},field.id,field))},{})});_defineProperty(_this,"updateField",function(key,value){var newProperties=_objectSpread(_objectSpread({},_this.props.editContext.feature.properties),{},_defineProperty({},key,value));var newFeature=_objectSpread(_objectSpread({},_this.props.editContext.feature),{},{properties:newProperties});_this.props.setEditContext(_this.props.editContext.id,{feature:newFeature,changed:true});_this.validateFieldConstraints(newFeature)});_defineProperty(_this,"editMapPrefix",function(){return(_this.props.editConfig.editDataset.match(/^[^.]+\./)||[""])[0]});_defineProperty(_this,"setRelationTables",function(relationTables){_this.setState({relationTables:relationTables})});_defineProperty(_this,"loadRelationValues",function(feature,callback){if(!isEmpty(_this.state.relationTables)){if(feature.id){var relTables=Object.entries(_this.state.relationTables).map(function(_ref){var _ref2=_slicedToArray(_ref,2),name=_ref2[0],entry=_ref2[1];if(entry.sortcol){return name+":"+entry.fk+":"+entry.sortcol}else{return name+":"+entry.fk}}).join(",");_this.props.iface.getRelations(_this.props.editConfig,feature.id,_this.props.map.projection,relTables,_this.props.theme.editConfig,function(relationValues){var newFeature=_objectSpread(_objectSpread({},feature),{},{relationValues:relationValues});callback(newFeature)})}else{var relationValues=_objectSpread(_objectSpread({},Object.entries(_this.state.relationTables).reduce(function(res,_ref3){var _ref4=_slicedToArray(_ref3,2),name=_ref4[0],entry=_ref4[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},name,{fk:entry.fk,features:[]}))},{})),feature.relationValues);var newFeature=_objectSpread(_objectSpread({},feature),{},{relationValues:relationValues});callback(newFeature)}}});_defineProperty(_this,"addRelationRecord",function(table){var newRelationValues=_objectSpread({},_this.props.editContext.feature.relationValues);var editConfig=_this.props.theme.editConfig[table.split(".").slice(-1)];var mapPrefix=(editConfig.editDataset.match(/^[^.]+\./)||[""])[0];getFeatureTemplate(editConfig,{type:"Feature",properties:{}},_this.props.iface,mapPrefix,_this.props.map.projection,function(newRelFeature){newRelFeature.__status__="empty";if(editConfig.geomType===null){newRelFeature.geometry=null}// If feature id is known, i.e. not when drawing new feature, set foreign key
8
+ if(!_this.state.deleteClicked){var _this$props$deleteLab;var deleteButtons=[{key:"Delete",icon:"trash",label:(_this$props$deleteLab=_this.props.deleteLabel)!==null&&_this$props$deleteLab!==void 0?_this$props$deleteLab:LocaleUtils.tr("editing.delete")}];deleteBar=/*#__PURE__*/React.createElement(ButtonBar,{buttons:deleteButtons,onClick:_this.deleteClicked})}else{var _deleteButtons=[{key:"Yes",icon:"ok",label:LocaleUtils.tr("editing.reallydelete"),extraClasses:"button-accept",disabled:captchaPending},{key:"No",icon:"remove",label:LocaleUtils.tr("editing.canceldelete"),extraClasses:"button-reject"}];deleteBar=/*#__PURE__*/React.createElement(ButtonBar,{buttons:_deleteButtons,onClick:_this.deleteFeature})}}var busyDiv=null;if(_this.state.busy){busyDiv=/*#__PURE__*/React.createElement("div",{className:"attrib-form-busy"})}var childAttributeForm=null;if(_this.state.childEdit){childAttributeForm=/*#__PURE__*/React.createElement("div",{className:"link-feature-form-container"},/*#__PURE__*/React.createElement(LinkFeatureForm,_extends({},_this.state.childEdit,{finished:_this.state.childEdit.finishCallback,iface:_this.props.iface,pickFilter:_this.props.childPickFilter,readOnly:_this.props.readOnly})))}var captchaButton=null;if(captchaRequired&&(_this.props.editContext.changed||_this.state.deleteClicked)){captchaButton=/*#__PURE__*/React.createElement(ReCaptchaWidget,{onChange:function onChange(value){return _this.setState({captchaResponse:value})},sitekey:ConfigUtils.getConfigProp("editServiceCaptchaSiteKey")})}var readOnlyMsg=null;if(!readOnly&&_this.props.editContext.geomReadOnly){readOnlyMsg=LocaleUtils.tr("editing.geomreadonly")}else if(!readOnly&&_this.props.editContext.geomNonZeroZ){readOnlyMsg=LocaleUtils.tr("editing.geomnonzeroz")}return/*#__PURE__*/React.createElement("div",{className:"AttributeForm"},readOnlyMsg?/*#__PURE__*/React.createElement("div",{className:"attrib-form-geom-readonly"},readOnlyMsg):null,/*#__PURE__*/React.createElement("form",{action:"",onChange:function onChange(ev){return _this.formChanged(ev)},onSubmit:_this.onSubmit,ref:_this.setupChangedObserver},_this.props.editConfig.form?/*#__PURE__*/React.createElement(QtDesignerForm,{addRelationRecord:_this.addRelationRecord,editConfig:_this.props.editConfig,editConfigs:_this.props.theme.editConfig,editRelationRecord:_this.editRelationRecord,feature:_this.props.editContext.feature,iface:_this.props.iface,mapCrs:_this.props.map.projection,mapPrefix:_this.editMapPrefix(),readOnly:readOnly,removeRelationRecord:_this.removeRelationRecord,reorderRelationRecord:_this.reorderRelationRecord,report:_this.props.report,setFormBusy:_this.setFormBusy,setRelationTables:_this.setRelationTables,switchEditContext:_this.startChildEdit,updateField:_this.updateField,updateRelationField:_this.updateRelationField}):/*#__PURE__*/React.createElement(AutoEditForm,{editLayerId:_this.props.editConfig.editDataset,fields:_this.props.editConfig.fields,iface:_this.props.iface,readOnly:readOnly,touchFriendly:_this.props.touchFriendly,updateField:_this.updateField,values:_this.props.editContext.feature.properties}),captchaButton,commitBar),deleteBar,busyDiv,childAttributeForm)});_defineProperty(_this,"setFormBusy",function(busy){_this.setState({busy:busy})});_defineProperty(_this,"updateField",function(key,value){var newProperties=_objectSpread(_objectSpread({},_this.props.editContext.feature.properties),{},_defineProperty({},key,value));var newFeature=_objectSpread(_objectSpread({},_this.props.editContext.feature),{},{properties:newProperties});_this.props.setEditContext(_this.props.editContext.id,{feature:newFeature,changed:true});_this.validateFieldConstraints(newFeature)});_defineProperty(_this,"editMapPrefix",function(){return(_this.props.editConfig.editDataset.match(/^[^.]+\./)||[""])[0]});_defineProperty(_this,"setRelationTables",function(relationTables){_this.setState({relationTables:relationTables})});_defineProperty(_this,"loadRelationValues",function(feature,callback){if(!isEmpty(_this.state.relationTables)){if(feature.id){var relTables=Object.entries(_this.state.relationTables).map(function(_ref){var _ref2=_slicedToArray(_ref,2),name=_ref2[0],entry=_ref2[1];if(entry.sortcol){return name+":"+entry.fk+":"+entry.sortcol}else{return name+":"+entry.fk}}).join(",");_this.props.iface.getRelations(_this.props.editConfig,feature.id,_this.props.map.projection,relTables,_this.props.theme.editConfig,function(relationValues){var newFeature=_objectSpread(_objectSpread({},feature),{},{relationValues:relationValues});callback(newFeature)})}else{var relationValues=_objectSpread(_objectSpread({},Object.entries(_this.state.relationTables).reduce(function(res,_ref3){var _ref4=_slicedToArray(_ref3,2),name=_ref4[0],entry=_ref4[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},name,{fk:entry.fk,features:[]}))},{})),feature.relationValues);var newFeature=_objectSpread(_objectSpread({},feature),{},{relationValues:relationValues});callback(newFeature)}}});_defineProperty(_this,"addRelationRecord",function(table){var newRelationValues=_objectSpread({},_this.props.editContext.feature.relationValues);var editConfig=_this.props.theme.editConfig[table.split(".").slice(-1)];var mapPrefix=(editConfig.editDataset.match(/^[^.]+\./)||[""])[0];getFeatureTemplate(editConfig,{type:"Feature",properties:{}},_this.props.iface,mapPrefix,_this.props.map.projection,function(newRelFeature){newRelFeature.__status__="empty";if(editConfig.geomType===null){newRelFeature.geometry=null}// If feature id is known, i.e. not when drawing new feature, set foreign key
9
9
  if(_this.props.editContext.action!=="Draw"){newRelFeature.properties[_this.state.relationTables[table].fk]=_this.props.editContext.feature.id}newRelationValues[table]=_objectSpread({},newRelationValues[table]);newRelationValues[table].features=newRelationValues[table].features.concat([newRelFeature]);var newFeature=_objectSpread(_objectSpread({},_this.props.editContext.feature),{},{relationValues:newRelationValues});_this.props.setEditContext(_this.props.editContext.id,{feature:newFeature,changed:true})})});_defineProperty(_this,"reorderRelationRecord",function(table,idx,dir){var nFeatures=_this.props.editContext.feature.relationValues[table].features.length;if(dir<0&&idx===0||dir>0&&idx>=nFeatures-1){return}var newRelationValues=_objectSpread({},_this.props.editContext.feature.relationValues);newRelationValues[table]=_objectSpread({},newRelationValues[table]);var newFeatures=newRelationValues[table].features.slice(0);var offset=dir<0?0:1;newFeatures.splice(idx-1+offset,2,newFeatures[idx+offset],newFeatures[idx-1+offset]);newFeatures[idx-1+offset].properties=_objectSpread({},newFeatures[idx-1+offset].properties);newFeatures[idx+offset].properties=_objectSpread({},newFeatures[idx+offset].properties);newFeatures[idx-1+offset].__status__=["new","empty"].includes(newFeatures[idx-1+offset].__status__)?"new":"changed";newFeatures[idx+offset].__status__=["new","empty"].includes(newFeatures[idx+offset].__status__)?"new":"changed";newRelationValues[table].features=newFeatures;var newFeature=_objectSpread(_objectSpread({},_this.props.editContext.feature),{},{relationValues:newRelationValues});_this.props.setEditContext(_this.props.editContext.id,{feature:newFeature,changed:true})});_defineProperty(_this,"removeRelationRecord",function(table,idx){var newRelationValues=_objectSpread({},_this.props.editContext.feature.relationValues);newRelationValues[table]=_objectSpread({},newRelationValues[table]);newRelationValues[table].features=newRelationValues[table].features.slice(0);var fieldStatus=newRelationValues[table].features[idx].__status__||"";// If field was new, delete it directly, else mark it as deleted
10
10
  if(["new","empty"].includes(fieldStatus)){newRelationValues[table].features.splice(idx,1)}else{newRelationValues[table].features[idx]=_objectSpread(_objectSpread({},newRelationValues[table].features[idx]),{},{__status__:fieldStatus.startsWith("deleted")?fieldStatus.substr(8):"deleted:"+fieldStatus})}var newFeature=_objectSpread(_objectSpread({},_this.props.editContext.feature),{},{relationValues:newRelationValues});_this.props.setEditContext(_this.props.editContext.id,{feature:newFeature,changed:true})});_defineProperty(_this,"updateRelationField",function(table,idx,key,value){var newRelationValues=_objectSpread({},_this.props.editContext.feature.relationValues);newRelationValues[table]=_objectSpread({},newRelationValues[table]);newRelationValues[table].features=newRelationValues[table].features.slice(0);newRelationValues[table].features[idx]=_objectSpread(_objectSpread({},newRelationValues[table].features[idx]),{},{properties:_objectSpread(_objectSpread({},newRelationValues[table].features[idx].properties),{},_defineProperty({},key,value)),__status__:["new","empty"].includes(newRelationValues[table].features[idx].__status__)?"new":"changed"});var newFeature=_objectSpread(_objectSpread({},_this.props.editContext.feature),{},{relationValues:newRelationValues});_this.props.setEditContext(_this.props.editContext.id,{feature:newFeature,changed:true})});_defineProperty(_this,"editRelationRecord",function(action,layer,dataset,idx,displayField){var editConfig=(_this.props.theme.editConfig||{})[layer];var feature=_this.props.editContext.feature.relationValues[dataset].features[idx];_this.setState({childEdit:{action:action,editConfig:editConfig,editContextId:":"+layer,dataset:dataset,idx:idx,feature:feature,finishCallback:_this.finishEditRelationRecord,displayField:displayField,hideDelete:true}})});_defineProperty(_this,"finishEditRelationRecord",function(feature){_this.props.clearEditContext(_this.state.childEdit.editContextId,_this.props.editContext.id);if(feature){var table=_this.state.childEdit.dataset;var idx=_this.state.childEdit.idx;var newRelationValues=_objectSpread({},_this.props.editContext.feature.relationValues);newRelationValues[table]=_objectSpread({},newRelationValues[table]);newRelationValues[table].features=newRelationValues[table].features.slice(0);newRelationValues[table].features[idx]=_objectSpread(_objectSpread({},feature),{},{properties:_objectSpread({},feature.properties)});// If feature id is known, i.e. not when drawing new feature, set foreign key
11
11
  var changed=_this.props.editContext.changed;var fk=_this.state.relationTables[table].fk;if(_this.props.editContext.action!=="Draw"&&feature.properties[fk]!==_this.props.editContext.feature.id){newRelationValues[table].features[idx].properties[fk]=_this.props.editContext.feature.id;newRelationValues[table].features[idx].__status__="changed";changed=true}var newFeature=_objectSpread(_objectSpread({},_this.props.editContext.feature),{},{relationValues:newRelationValues});_this.props.setEditContext(_this.props.editContext.id,{feature:newFeature,changed:changed})}_this.setState({childEdit:null})});_defineProperty(_this,"onDiscard",function(action){if(action==="Discard"){_this.props.setCurrentTaskBlocked(false);if(!_this.props.onDiscard||!_this.props.onDiscard()){if(_this.props.editContext.action==="Pick"){// Re-query the original feature
12
12
  _this.setState({busy:true});_this.props.iface.getFeatureById(_this.props.editConfig,_this.props.editContext.feature.id,_this.props.map.projection,function(feature){_this.setState({busy:false});if(!isEmpty(_this.state.relationTables)){// Re-load relation values
13
13
  _this.loadRelationValues(feature,function(newFeature){_this.props.setEditContext(_this.props.editContext.id,{feature:newFeature,changed:false})});// Re-validate feature field constraints
14
- _this.validateFieldConstraints(feature)}else{_this.props.setEditContext(_this.props.editContext.id,{feature:feature,changed:false})}})}else{var featureSkel={type:"Feature",properties:{}};var mapPrefix=(_this.props.editConfig.editDataset.match(/^[^.]+\./)||[""])[0];getFeatureTemplate(_this.props.editConfig,featureSkel,_this.props.iface,mapPrefix,_this.props.map.projection,function(feature){_this.props.setEditContext(_this.props.editContext.id,{feature:feature,changed:false})})}}}});_defineProperty(_this,"setupChangedObserver",function(form){_this.form=form;if(form){form.observer=new MutationObserver(function(){_this.setState({formValid:form.checkValidity()})});form.observer.observe(form,{subtree:true,childList:true,attributes:true})}});_defineProperty(_this,"formChanged",function(ev){var _ev$target;var form=ev.currentTarget;if((_ev$target=ev.target)!==null&&_ev$target!==void 0&&_ev$target.setCustomValidity){ev.target.setCustomValidity("")}if(form){_this.setState({formValid:form.checkValidity()});_this.props.setEditContext(_this.props.editContext.id,{changed:true})}});_defineProperty(_this,"validateFieldConstraints",function(feature){var validCallback=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var invalidCallback=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var constraintExpressions=_this.props.editConfig.fields.reduce(function(res,cur){var _cur$constraints;if((_cur$constraints=cur.constraints)!==null&&_cur$constraints!==void 0&&_cur$constraints.expression){var _cur$constraints2;return _objectSpread(_objectSpread({},res),{},_defineProperty({},cur.id,(_cur$constraints2=cur.constraints)===null||_cur$constraints2===void 0?void 0:_cur$constraints2.expression))}return res},{});parseExpressionsAsync(constraintExpressions,feature,_this.props.editConfig.editDataset,_this.props.iface,_this.editMapPrefix(),_this.props.map.projection,false).then(function(result){var valid=true;Object.entries(result).forEach(function(_ref5){var _ref6=_slicedToArray(_ref5,2),key=_ref6[0],value=_ref6[1];var element=_this.form.elements.namedItem(key);if(element){if(value===false){var _this$props$editConfi,_this$props$editConfi2;valid=false;element.setCustomValidity((_this$props$editConfi=(_this$props$editConfi2=_this.props.editConfig.fields.find(function(field){return field.id===key}))===null||_this$props$editConfi2===void 0||(_this$props$editConfi2=_this$props$editConfi2.constraints)===null||_this$props$editConfi2===void 0?void 0:_this$props$editConfi2.placeholder)!==null&&_this$props$editConfi!==void 0?_this$props$editConfi:LocaleUtils.tr("editing.contraintviolation"))}else{element.setCustomValidity("")}}});if(!valid){_this.setState({formValid:false});if(invalidCallback){invalidCallback()}}else{if(validCallback){validCallback()}}})});_defineProperty(_this,"onSubmit",function(ev){ev.preventDefault();_this.validateFieldConstraints(_this.props.editContext.feature,_this.doSubmit,function(){/* eslint-disable-next-line */alert(LocaleUtils.tr("editing.contraintviolation"))})});_defineProperty(_this,"doSubmit",function(){_this.setState({busy:true});var feature=_this.props.editContext.feature;// Ensure properties is not null
14
+ _this.validateFieldConstraints(feature)}else{_this.props.setEditContext(_this.props.editContext.id,{feature:feature,changed:false})}})}else{var featureSkel={type:"Feature",properties:{}};var mapPrefix=(_this.props.editConfig.editDataset.match(/^[^.]+\./)||[""])[0];getFeatureTemplate(_this.props.editConfig,featureSkel,_this.props.iface,mapPrefix,_this.props.map.projection,function(feature){_this.props.setEditContext(_this.props.editContext.id,{feature:feature,changed:false})})}}}});_defineProperty(_this,"setupChangedObserver",function(form){_this.form=form;if(form){form.observer=new MutationObserver(function(){_this.setState({formValid:form.checkValidity()})});form.observer.observe(form,{subtree:true,childList:true,attributes:true})}});_defineProperty(_this,"formChanged",function(ev){var _ev$target;var form=ev.currentTarget;if((_ev$target=ev.target)!==null&&_ev$target!==void 0&&_ev$target.setCustomValidity){ev.target.setCustomValidity("")}if(form){_this.setState({formValid:form.checkValidity()});_this.props.setEditContext(_this.props.editContext.id,{changed:true})}});_defineProperty(_this,"validateFieldConstraints",function(feature){var validCallback=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var invalidCallback=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var constraintExpressions=_this.props.editConfig.fields.reduce(function(res,cur){var _cur$constraints;if((_cur$constraints=cur.constraints)!==null&&_cur$constraints!==void 0&&_cur$constraints.expression){return[].concat(_toConsumableArray(res),[{field:cur.id,expression:cur.constraints.expression}])}return res},[]);parseExpressionsAsync(constraintExpressions,feature,_this.props.editConfig,_this.props.iface,_this.editMapPrefix(),_this.props.map.projection,false).then(function(result){var valid=true;var reasons=[];Object.entries(result).forEach(function(_ref5){var _ref6=_slicedToArray(_ref5,2),key=_ref6[0],value=_ref6[1];var element=_this.form.elements.namedItem(key);if(element){if(value===false){var _this$props$editConfi,_this$props$editConfi2;valid=false;var reason=(_this$props$editConfi=(_this$props$editConfi2=_this.props.editConfig.fields.find(function(field){return field.id===key}))===null||_this$props$editConfi2===void 0||(_this$props$editConfi2=_this$props$editConfi2.constraints)===null||_this$props$editConfi2===void 0?void 0:_this$props$editConfi2.placeholder)!==null&&_this$props$editConfi!==void 0?_this$props$editConfi:LocaleUtils.tr("editing.contraintviolation");reasons.push(reason);element.setCustomValidity(reason)}else{element.setCustomValidity("")}}});if(!valid){_this.setState({formValid:false});if(invalidCallback){invalidCallback(reasons)}}else{if(validCallback){validCallback()}}})});_defineProperty(_this,"onSubmit",function(ev){ev.preventDefault();_this.validateFieldConstraints(_this.props.editContext.feature,_this.doSubmit,function(reasons){/* eslint-disable-next-line */alert(LocaleUtils.tr("editing.contraintviolation")+":\n"+reasons.join("\n"))})});_defineProperty(_this,"doSubmit",function(){_this.setState({busy:true});var feature=_this.props.editContext.feature;// Ensure properties is not null
15
15
  feature=_objectSpread(_objectSpread({},feature),{},{type:"Feature",properties:_objectSpread({},feature.properties||{}),crs:{type:"name",properties:{name:CoordinatesUtils.toOgcUrnCrs(_this.props.map.projection)}}});// Omit geometry if it is read-only
16
16
  if(_this.props.editContext.geomReadOnly){delete feature.geometry}var curConfig=_this.props.editConfig;var mapPrefix=_this.editMapPrefix();var textNullValue=ConfigUtils.getConfigProp("editTextNullValue");// Keep relation values separate
17
17
  var relationValues=clone(feature.relationValues||{});delete feature.relationValues;var relationUploads={};var featureUploads={};// Collect all values from form fields
@@ -4,15 +4,15 @@ 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 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",onPointerDown:function onPointerDown(ev){return _this.resizeTable(ev,col,true)}})});_defineProperty(_this,"renderRowResizeHandle",function(row,pos){return/*#__PURE__*/React.createElement("span",{className:"attribtable-table-"+pos+"draghandle",onPointerDown:function onPointerDown(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;var editConfig=_this.props.theme.editConfig||{};var currentEditConfig=editConfig[selectedLayer];KeyValCache.clear();ExpressionFeatureCache.clear();var bbox=_this.state.limitToExtent?_this.props.mapBbox.bounds:null;_this.props.iface.getFeatures(currentEditConfig,_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,"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 mapPrefix=(currentEditConfig.editDataset.match(/^[^.]+\./)||[""])[0];var dataset=currentEditConfig.editDataset;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){filterExpr=parseExpression(field.filterExpression,feature,dataset,_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,fitParent:true,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:dataset,disabled:disabled,fieldId:field.id,iface:_this.props.iface,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
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 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{FeatureCache,KeyValCache,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",onPointerDown:function onPointerDown(ev){return _this.resizeTable(ev,col,true)}})});_defineProperty(_this,"renderRowResizeHandle",function(row,pos){return/*#__PURE__*/React.createElement("span",{className:"attribtable-table-"+pos+"draghandle",onPointerDown:function onPointerDown(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;var editConfig=_this.props.theme.editConfig||{};var currentEditConfig=editConfig[selectedLayer];KeyValCache.clear();FeatureCache.clear();var bbox=_this.state.limitToExtent?_this.props.mapBbox.bounds:null;_this.props.iface.getFeatures(currentEditConfig,_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,"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 mapPrefix=(currentEditConfig.editDataset.match(/^[^.]+\./)||[""])[0];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){filterExpr=parseExpression(field.filterExpression,feature,currentEditConfig,_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,fitParent:true,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:currentEditConfig.editDataset,disabled:disabled,fieldId:field.id,iface:_this.props.iface,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
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});var selectedLayer=state.selectedLayer;var editConfig=_this.props.theme.editConfig||{};var currentEditConfig=editConfig[selectedLayer];features.forEach(function(feature){_this.props.iface.deleteFeature(currentEditConfig,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
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 editConfig=_this.props.theme.editConfig||{};var currentEditConfig=editConfig[_this.state.loadedLayer];Object.keys(feature.properties||{}).forEach(function(name){var _currentEditConfig$fi,_currentEditConfig$fi2,_currentEditConfig$fi3;var fieldConfig=(_currentEditConfig$fi=(_currentEditConfig$fi2=currentEditConfig.fields)===null||_currentEditConfig$fi2===void 0||(_currentEditConfig$fi3=_currentEditConfig$fi2.find)===null||_currentEditConfig$fi3===void 0?void 0:_currentEditConfig$fi3.call(_currentEditConfig$fi2,function(f){return f.id===name}))!==null&&_currentEditConfig$fi!==void 0?_currentEditConfig$fi:{};if(fieldConfig.expression){// Skip virtual fields
12
12
  delete feature.properties[name]}});// Omit geometry if it is read-only
13
13
  var canEditGeometry=["Point","LineString","Polygon"].includes((currentEditConfig.geomType||"").replace(/^Multi/,"").replace(/Z$/,""));if(!canEditGeometry){delete feature.geometry}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(currentEditConfig,_this.props.mapCrs,featureData,function(success,result){return _this.featureCommited(success,result)})}else{_this.props.iface.editFeatureMultipart(currentEditConfig,_this.props.mapCrs,feature.id,featureData,function(success,result){return _this.featureCommited(success,result)})}});_defineProperty(_this,"featureCommited",function(success,result){if(!success){// eslint-disable-next-line
14
14
  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
15
15
  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
16
- 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("pointermove",resizeDo);ev.view.addEventListener("pointerup",function(event){event.view.document.body.removeChild(eventShield);event.view.removeEventListener("pointermove",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
16
+ 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(_this.props.iface,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("pointermove",resizeDo);ev.view.addEventListener("pointerup",function(event){event.view.document.body.removeChild(eventShield);event.view.removeEventListener("pointermove",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
17
17
  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
18
18
  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 _match$sublayer$title,_match$sublayer;var layerName=editConfig[layerId].layerName;var match=LayerUtils.searchLayer(_this2.props.layers,_this2.props.theme.url,layerName);return/*#__PURE__*/React.createElement("option",{key:layerId,value:layerId},(_match$sublayer$title=match===null||match===void 0||(_match$sublayer=match.sublayer)===null||_match$sublayer===void 0?void 0:_match$sublayer.title)!==null&&_match$sublayer$title!==void 0?_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);
@@ -1,11 +1,11 @@
1
- var _KeyValCache;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 _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 _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 _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 _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}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)}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 _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
2
  * Copyright 2024 Sourcepole AG
3
3
  * All rights reserved.
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 PropTypes from"prop-types";import{v5 as uuidv5}from"uuid";import LocaleUtils from"../utils/LocaleUtils";import"./style/EditComboField.css";var UUID_NS="5ae5531d-8e21-4456-b45d-77e9840a5bb7";export var KeyValCache=/*#__PURE__*/_createClass(function KeyValCache(){_classCallCheck(this,KeyValCache)});_KeyValCache=KeyValCache;_defineProperty(KeyValCache,"store",{});_defineProperty(KeyValCache,"requests",{});_defineProperty(KeyValCache,"get",function(editIface,keyvalrel,filterExpr,callback){var key=keyvalrel+uuidv5(JSON.stringify(filterExpr!==null&&filterExpr!==void 0?filterExpr:null),UUID_NS);if(key in _KeyValCache.store){callback(_KeyValCache.store[key])}else if(key in _KeyValCache.requests){_KeyValCache.requests[key].push(callback)}else{_KeyValCache.requests[key]=[callback];editIface.getKeyValues(keyvalrel,function(result){if(key in _KeyValCache.requests){var dataSet=keyvalrel.split(":")[0];if(result.keyvalues&&result.keyvalues[dataSet]){var values=result.keyvalues[dataSet].map(function(entry){return{value:entry.key,label:entry.value}});_KeyValCache.store[key]=values}else{_KeyValCache.store[key]=[]}_KeyValCache.requests[key].forEach(function(cb){return cb(_KeyValCache.store[key])});delete _KeyValCache.requests[key]}},filterExpr?[filterExpr]:null)}});_defineProperty(KeyValCache,"getSync",function(keyvalrel,filterExpr){var key=keyvalrel+uuidv5(JSON.stringify(filterExpr!==null&&filterExpr!==void 0?filterExpr:null),UUID_NS);if(key in _KeyValCache.store){return _KeyValCache.store[key]}else{return[]}});_defineProperty(KeyValCache,"clear",function(){_KeyValCache.store={};_KeyValCache.requests={}});var EditComboField=/*#__PURE__*/function(_React$Component){function EditComboField(){var _this;_classCallCheck(this,EditComboField);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,EditComboField,[].concat(args));_defineProperty(_this,"state",{showPlaceholder:true,values:[]});_defineProperty(_this,"hasEmptyValue",function(values){for(var i=0;i<values.length;++i){if(typeof values[i]==="string"){if(values[i]===""){return true}}else if(values[i].value===""){return true}}return false});_defineProperty(_this,"renderMultiSelect",function(){var items=new Set;try{items=new Set(JSON.parse("["+_this.props.value.slice(1,-1)+"]"))}catch(e){// pass
7
+ */import React from"react";import PropTypes from"prop-types";import{KeyValCache}from"../utils/EditingUtils";import LocaleUtils from"../utils/LocaleUtils";import"./style/EditComboField.css";var EditComboField=/*#__PURE__*/function(_React$Component){function EditComboField(){var _this;_classCallCheck(this,EditComboField);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,EditComboField,[].concat(args));_defineProperty(_this,"state",{showPlaceholder:true,values:[]});_defineProperty(_this,"hasEmptyValue",function(values){for(var i=0;i<values.length;++i){if(typeof values[i]==="string"){if(values[i]===""){return true}}else if(values[i].value===""){return true}}return false});_defineProperty(_this,"renderMultiSelect",function(){var items=new Set;try{items=new Set(JSON.parse("["+_this.props.value.slice(1,-1)+"]"))}catch(e){// pass
8
8
  }var serializeValue=function serializeValue(value,enabled){if(enabled){return"{"+JSON.stringify(_toConsumableArray(items).concat([value])).slice(1,-1)+"}"}else{return"{"+JSON.stringify(_toConsumableArray(items).filter(function(x){return x!==value})).slice(1,-1)+"}"}};return/*#__PURE__*/React.createElement("div",{className:"edit-multi-select"},_this.state.values.map(function(item,index){var _this$itemValueLabel=_this.itemValueLabel(item),value=_this$itemValueLabel.value,label=_this$itemValueLabel.label;return/*#__PURE__*/React.createElement("div",{key:_this.props.fieldId+index},/*#__PURE__*/React.createElement("label",null,/*#__PURE__*/React.createElement("input",{checked:items.has(value),onChange:function onChange(ev){return _this.props.updateField(_this.props.fieldId,serializeValue(value,ev.target.checked))},type:"checkbox"}),label))}))});_defineProperty(_this,"renderComboSelect",function(){var _this$props$placehold;return/*#__PURE__*/React.createElement("select",{disabled:_this.props.readOnly,name:_this.props.name,onChange:function onChange(ev){return _this.props.updateField(_this.props.fieldId,ev.target.selectedIndex===0&&_this.state.showPlaceholder?null:ev.target.value)},required:_this.props.required,style:_this.props.style,value:String(_this.props.value)},_this.state.showPlaceholder?/*#__PURE__*/React.createElement("option",{disabled:_this.props.required,value:""},(_this$props$placehold=_this.props.placeholder)!==null&&_this$props$placehold!==void 0?_this$props$placehold:LocaleUtils.tr("editing.select")):null,_this.state.values.map(function(item,index){var _this$itemValueLabel2=_this.itemValueLabel(item),value=_this$itemValueLabel2.value,label=_this$itemValueLabel2.label;return/*#__PURE__*/React.createElement("option",{key:_this.props.fieldId+index,value:String(value)},label)}))});_defineProperty(_this,"itemValueLabel",function(item){var value="";var label="";if(typeof item==="string"){value=label=item}else{value=item.value;label=item.label}return{value:value,label:label}});return _this}_inherits(EditComboField,_React$Component);return _createClass(EditComboField,[{key:"componentDidMount",value:function componentDidMount(){var _this2=this;if(this.props.values){// eslint-disable-next-line
9
- this.setState({values:this.props.values,showPlaceholder:!this.hasEmptyValue(this.props.values)})}else if(this.props.keyvalrel){var _this$props$filterExp;KeyValCache.get(this.props.editIface,this.props.keyvalrel,(_this$props$filterExp=this.props.filterExpr)!==null&&_this$props$filterExp!==void 0?_this$props$filterExp:null,function(values){// eslint-disable-next-line
10
- _this2.setState({values:values,showPlaceholder:!_this2.hasEmptyValue(values)})})}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this3=this;if(this.props.keyvalrel&&this.props.filterExpr!==prevProps.filterExpr){var _this$props$filterExp2;KeyValCache.get(this.props.editIface,this.props.keyvalrel,(_this$props$filterExp2=this.props.filterExpr)!==null&&_this$props$filterExp2!==void 0?_this$props$filterExp2:null,function(values){// eslint-disable-next-line
9
+ this.setState({values:this.props.values,showPlaceholder:!this.hasEmptyValue(this.props.values)})}else if(this.props.keyvalrel){var _this$props$filterExp;KeyValCache.get(this.props.editIface,this.props.keyvalrel,(_this$props$filterExp=this.props.filterExpr)!==null&&_this$props$filterExp!==void 0?_this$props$filterExp:null).then(function(values){// eslint-disable-next-line
10
+ _this2.setState({values:values,showPlaceholder:!_this2.hasEmptyValue(values)})})}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this3=this;if(this.props.keyvalrel&&this.props.filterExpr!==prevProps.filterExpr){var _this$props$filterExp2;KeyValCache.get(this.props.editIface,this.props.keyvalrel,(_this$props$filterExp2=this.props.filterExpr)!==null&&_this$props$filterExp2!==void 0?_this$props$filterExp2:null).then(function(values){// eslint-disable-next-line
11
11
  _this3.setState({values:values,showPlaceholder:!_this3.hasEmptyValue(values)})})}}},{key:"render",value:function render(){if(this.props.multiSelect){return this.renderMultiSelect()}else{return this.renderComboSelect()}}}])}(React.Component);_defineProperty(EditComboField,"propTypes",{editIface:PropTypes.object,fieldId:PropTypes.string,filterExpr:PropTypes.array,keyvalrel:PropTypes.string,multiSelect:PropTypes.bool,name:PropTypes.string,placeholder:PropTypes.string,readOnly:PropTypes.bool,required:PropTypes.bool,style:PropTypes.object,updateField:PropTypes.func,value:PropTypes.oneOfType([PropTypes.string,PropTypes.number]),values:PropTypes.array});export{EditComboField as default};
@@ -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{XMLParser}from"fast-xml-parser";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{v1 as uuidv1}from"uuid";import ConfigUtils from"../utils/ConfigUtils";import{parseExpression,ExpressionFeatureCache}from"../utils/EditingUtils";import LocaleUtils from"../utils/LocaleUtils";import MiscUtils from"../utils/MiscUtils";import EditComboField,{KeyValCache}from"./EditComboField";import EditUploadField from"./EditUploadField";import Icon from"./Icon";import ButtonBar from"./widgets/ButtonBar";import DateTimeInput from"./widgets/DateTimeInput";import NumberInput from"./widgets/NumberInput";import Spinner from"./widgets/Spinner";import TextInput from"./widgets/TextInput";import"./style/QtDesignerForm.css";var FormPreprocessors={};/* editLayerId: <mapname>.<datasetname>
7
+ */import React from"react";import{connect}from"react-redux";import axios from"axios";import{XMLParser}from"fast-xml-parser";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{v1 as uuidv1}from"uuid";import ConfigUtils from"../utils/ConfigUtils";import{parseExpression,FeatureCache,KeyValCache}from"../utils/EditingUtils";import LocaleUtils from"../utils/LocaleUtils";import MiscUtils from"../utils/MiscUtils";import EditComboField from"./EditComboField";import EditUploadField from"./EditUploadField";import Icon from"./Icon";import ButtonBar from"./widgets/ButtonBar";import DateTimeInput from"./widgets/DateTimeInput";import NumberInput from"./widgets/NumberInput";import Spinner from"./widgets/Spinner";import TextInput from"./widgets/TextInput";import"./style/QtDesignerForm.css";var FormPreprocessors={};/* editDataset: <mapname>.<layername>
8
8
  preprocessor: function(formData, feature, callback)
9
9
  formData: {
10
10
  fields: { dict of fields },
@@ -13,18 +13,18 @@ preprocessor: function(formData, feature, callback)
13
13
  }
14
14
  feature: The feature for which the form is being displayed
15
15
  callback: function(formData), return the updated formData
16
- */export function registerFormPreprocessor(editLayerId,preprocessor){FormPreprocessors[editLayerId]=preprocessor}export function removeFormPreprocessor(editLayerId){delete FormPreprocessors[editLayerId]}var hFitWidgets=["QLabel","QCheckBox","QRadioButton","Line","QDateTimeEdit","QDateEdit","QTimeEdit"];var vFitWidgets=["QLabel","QCheckBox","QRadioButton","Line","QDateTimeEdit","QDateEdit","QTimeEdit","QPushButton","QComboBox","QLineEdit","QSpinBox","QDoubleSpinBox","QSlider"];var QtDesignerForm=/*#__PURE__*/function(_React$Component){function QtDesignerForm(props){var _this;_classCallCheck(this,QtDesignerForm);_this=_callSuper(this,QtDesignerForm,[props]);_defineProperty(_this,"state",{reevaluate:0});_defineProperty(_this,"renderLayout",function(layout,feature,dataset,updateField){var nametransform=arguments.length>4&&arguments[4]!==undefined?arguments[4]:function(name){return name};var visible=arguments.length>5&&arguments[5]!==undefined?arguments[5]:true;var containerClass="";var itemStyle=function itemStyle(){return{}};var sortKey=function sortKey(item,idx){return idx};var containerStyle={};if(!layout){return null}else if(layout["class"]==="QGridLayout"||layout["class"]==="QFormLayout"){containerClass="qt-designer-layout-grid";containerStyle={gridTemplateColumns:_this.computeLayoutColumns(layout.item).join(" "),gridTemplateRows:_this.computeLayoutRows(layout.item).join(" ")};itemStyle=function itemStyle(item){return{gridArea:1+parseInt(item.row,10)+"/"+(1+parseInt(item.column,10))+"/ span "+parseInt(item.rowspan||1,10)+"/ span "+parseInt(item.colspan||1,10)}};sortKey=function sortKey(item){return item.row}}else if(layout["class"]==="QVBoxLayout"){containerClass="qt-designer-layout-grid";itemStyle=function itemStyle(item,idx){return{gridArea:1+idx+"/1/ span 1/ span 1"}};sortKey=function sortKey(item,idx){return idx}}else if(layout["class"]==="QHBoxLayout"){containerClass="qt-designer-layout-grid";containerStyle={gridTemplateColumns:_this.computeLayoutColumns(layout.item,true).join(" ")};itemStyle=function itemStyle(item,idx){return{gridArea:"1/"+(1+idx)+"/ span 1/ span 1"}};sortKey=function sortKey(item,idx){return idx}}else{return null}if(!visible){containerStyle.display="none"}if(layout.item.find(function(item){return item.spacer&&(item.spacer.property||{}).orientation==="Qt::Vertical"})){containerStyle.height="100%"}return/*#__PURE__*/React.createElement("div",{className:containerClass,key:layout.name,style:containerStyle},layout.item.sort(function(a,b){return sortKey(a)-sortKey(b)}).map(function(item,idx){var child=null;if(item.widget){child=_this.renderWidget(item.widget,feature,dataset,_this.props.fields,updateField,nametransform,false)}else if(item.layout){child=_this.renderLayout(item.layout,feature,dataset,updateField,nametransform)}else if(item.spacer){child=/*#__PURE__*/React.createElement("div",null)}else{return null}return/*#__PURE__*/React.createElement("div",{key:"i"+idx,style:itemStyle(item,idx)},child)}))});_defineProperty(_this,"computeLayoutColumns",function(items){var useIndex=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var columns=[];var hasAuto=false;var hasSpacer=items.find(function(item){var _item$spacer;return((_item$spacer=item.spacer)===null||_item$spacer===void 0||(_item$spacer=_item$spacer.property)===null||_item$spacer===void 0?void 0:_item$spacer.orientation)==="Qt::Horizontal"});items.forEach(function(item,index){var _item$spacer2,_item$widget;var col=useIndex?index:parseInt(item.column,10)||0;var colSpan=useIndex?1:parseInt(item.colspan,10)||1;if(((_item$spacer2=item.spacer)===null||_item$spacer2===void 0||(_item$spacer2=_item$spacer2.property)===null||_item$spacer2===void 0?void 0:_item$spacer2.orientation)==="Qt::Horizontal"){columns[col]="auto";hasAuto=true}else if(!hasSpacer&&!hFitWidgets.includes((_item$widget=item.widget)===null||_item$widget===void 0?void 0:_item$widget["class"])&&colSpan===1){columns[col]="auto";hasAuto=true}else{var _columns$col;columns[col]=(_columns$col=columns[col])!==null&&_columns$col!==void 0?_columns$col:null;// Placeholder replaced by fit-content below
16
+ */export function registerFormPreprocessor(editDataset,preprocessor){FormPreprocessors[editDataset]=preprocessor}export function removeFormPreprocessor(editDataset){delete FormPreprocessors[editDataset]}var hFitWidgets=["QLabel","QCheckBox","QRadioButton","Line","QDateTimeEdit","QDateEdit","QTimeEdit"];var vFitWidgets=["QLabel","QCheckBox","QRadioButton","Line","QDateTimeEdit","QDateEdit","QTimeEdit","QPushButton","QComboBox","QLineEdit","QSpinBox","QDoubleSpinBox","QSlider"];var QtDesignerForm=/*#__PURE__*/function(_React$Component){function QtDesignerForm(props){var _this;_classCallCheck(this,QtDesignerForm);_this=_callSuper(this,QtDesignerForm,[props]);_defineProperty(_this,"state",{reevaluate:0});_defineProperty(_this,"renderLayout",function(layout,feature,editConfig,updateField){var _this$props$editConfi;var nametransform=arguments.length>4&&arguments[4]!==undefined?arguments[4]:function(name){return name};var visible=arguments.length>5&&arguments[5]!==undefined?arguments[5]:true;var containerClass="";var itemStyle=function itemStyle(){return{}};var sortKey=function sortKey(item,idx){return idx};var containerStyle={};if(!layout){return null}else if(layout["class"]==="QGridLayout"||layout["class"]==="QFormLayout"){containerClass="qt-designer-layout-grid";containerStyle={gridTemplateColumns:_this.computeLayoutColumns(layout.item).join(" "),gridTemplateRows:_this.computeLayoutRows(layout.item).join(" ")};itemStyle=function itemStyle(item){return{gridArea:1+parseInt(item.row,10)+"/"+(1+parseInt(item.column,10))+"/ span "+parseInt(item.rowspan||1,10)+"/ span "+parseInt(item.colspan||1,10)}};sortKey=function sortKey(item){return item.row}}else if(layout["class"]==="QVBoxLayout"){containerClass="qt-designer-layout-grid";itemStyle=function itemStyle(item,idx){return{gridArea:1+idx+"/1/ span 1/ span 1"}};sortKey=function sortKey(item,idx){return idx}}else if(layout["class"]==="QHBoxLayout"){containerClass="qt-designer-layout-grid";containerStyle={gridTemplateColumns:_this.computeLayoutColumns(layout.item,true).join(" ")};itemStyle=function itemStyle(item,idx){return{gridArea:"1/"+(1+idx)+"/ span 1/ span 1"}};sortKey=function sortKey(item,idx){return idx}}else{return null}if(!visible){containerStyle.display="none"}if(layout.item.find(function(item){return item.spacer&&(item.spacer.property||{}).orientation==="Qt::Vertical"})){containerStyle.height="100%"}var fields=((_this$props$editConfi=_this.props.editConfig.fields)!==null&&_this$props$editConfi!==void 0?_this$props$editConfi:[]).reduce(function(res,field){return _objectSpread(_objectSpread({},res),{},_defineProperty({},field.id,field))},{});return/*#__PURE__*/React.createElement("div",{className:containerClass,key:layout.name,style:containerStyle},layout.item.sort(function(a,b){return sortKey(a)-sortKey(b)}).map(function(item,idx){var child=null;if(item.widget){child=_this.renderWidget(item.widget,feature,editConfig,fields,updateField,nametransform,false)}else if(item.layout){child=_this.renderLayout(item.layout,feature,editConfig,updateField,nametransform)}else if(item.spacer){child=/*#__PURE__*/React.createElement("div",null)}else{return null}return/*#__PURE__*/React.createElement("div",{key:"i"+idx,style:itemStyle(item,idx)},child)}))});_defineProperty(_this,"computeLayoutColumns",function(items){var useIndex=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var columns=[];var hasAuto=false;var hasSpacer=items.find(function(item){var _item$spacer;return((_item$spacer=item.spacer)===null||_item$spacer===void 0||(_item$spacer=_item$spacer.property)===null||_item$spacer===void 0?void 0:_item$spacer.orientation)==="Qt::Horizontal"});items.forEach(function(item,index){var _item$spacer2,_item$widget;var col=useIndex?index:parseInt(item.column,10)||0;var colSpan=useIndex?1:parseInt(item.colspan,10)||1;if(((_item$spacer2=item.spacer)===null||_item$spacer2===void 0||(_item$spacer2=_item$spacer2.property)===null||_item$spacer2===void 0?void 0:_item$spacer2.orientation)==="Qt::Horizontal"){columns[col]="auto";hasAuto=true}else if(!hasSpacer&&!hFitWidgets.includes((_item$widget=item.widget)===null||_item$widget===void 0?void 0:_item$widget["class"])&&colSpan===1){columns[col]="auto";hasAuto=true}else{var _columns$col;columns[col]=(_columns$col=columns[col])!==null&&_columns$col!==void 0?_columns$col:null;// Placeholder replaced by fit-content below
17
17
  }});var fit="fit-content("+Math.round(1/columns.length*100)+"%)";for(var col=0;col<columns.length;++col){columns[col]=hasAuto?columns[col]||fit:"auto"}return columns});_defineProperty(_this,"computeLayoutRows",function(items){var useIndex=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var rows=[];var hasSpacer=items.find(function(item){var _item$spacer3;return((_item$spacer3=item.spacer)===null||_item$spacer3===void 0||(_item$spacer3=_item$spacer3.property)===null||_item$spacer3===void 0?void 0:_item$spacer3.orientation)==="Qt::Vertical"});items.forEach(function(item,index){var _item$spacer4,_item$widget2,_item$widget2$startsW,_item$widget$layout,_item$widget3,_item$widget5;var row=useIndex?index:parseInt(item.row,10)||0;var rowSpan=useIndex?1:parseInt(item.rowspan,10)||1;if(((_item$spacer4=item.spacer)===null||_item$spacer4===void 0||(_item$spacer4=_item$spacer4.property)===null||_item$spacer4===void 0?void 0:_item$spacer4.orientation)==="Qt::Vertical"||(_item$widget2=item.widget)!==null&&_item$widget2!==void 0&&(_item$widget2=_item$widget2.name)!==null&&_item$widget2!==void 0&&(_item$widget2$startsW=_item$widget2.startsWith)!==null&&_item$widget2$startsW!==void 0&&_item$widget2$startsW.call(_item$widget2,"nrel_")){rows[row]="auto"}else if((_item$widget$layout=(_item$widget3=item.widget)===null||_item$widget3===void 0?void 0:_item$widget3.layout)!==null&&_item$widget$layout!==void 0?_item$widget$layout:item.layout){var _item$widget4,_item$layout;rows[row]=(_item$widget4=item.widget)!==null&&_item$widget4!==void 0&&(_item$widget4=_item$widget4.layout)!==null&&_item$widget4!==void 0&&_item$widget4.verticalFill||(_item$layout=item.layout)!==null&&_item$layout!==void 0&&_item$layout.verticalFill?"auto":null;// Placeholder replaced by fit-content below
18
18
  }else if(!hasSpacer&&!vFitWidgets.includes((_item$widget5=item.widget)===null||_item$widget5===void 0?void 0:_item$widget5["class"])&&rowSpan===1){rows[row]="auto"}else{var _rows$row;rows[row]=(_rows$row=rows[row])!==null&&_rows$row!==void 0?_rows$row:null;// Placeholder replaced by fit-content below
19
- }});var fit="fit-content("+Math.round(1/rows.length*100)+"%)";for(var row=0;row<rows.length;++row){rows[row]=rows[row]||fit}return rows});_defineProperty(_this,"renderWidget",function(widget,feature,dataset,fields,updateField){var _widget$name;var nametransform=arguments.length>5&&arguments[5]!==undefined?arguments[5]:function(name){return name};var isRelWidget=arguments.length>6?arguments[6]:undefined;var disabled=arguments.length>7&&arguments[7]!==undefined?arguments[7]:false;var value=(_widget$name=(feature.properties||{})[widget.name])!==null&&_widget$name!==void 0?_widget$name:"";var prop=widget.property||{};if(String(prop.visible)==="false"){return null}var attr=widget.attribute||{};var fieldname=widget.name.replace(/kvrel__/,"").split("__")[isRelWidget?1:0];var field=fields[fieldname];var fieldConstraints=(field===null||field===void 0?void 0:field.constraints)||{};var inputConstraints={};inputConstraints.readOnly=_this.props.readOnly||String(prop.readOnly)==="true"||String(prop.enabled)==="false"||fieldConstraints.readOnly===true||disabled;inputConstraints.required=!inputConstraints.readOnly&&(String(prop.required)==="true"||String(fieldConstraints.required)==="true");inputConstraints.placeholder=prop.placeholderText||fieldConstraints.placeholder||"";var fontProps=prop.font||{};var fontStyle={fontWeight:String(fontProps.bold)==="true"?"bold":"normal",fontStyle:String(fontProps.italic)==="true"?"italic":"normal",textDecoration:[String(fontProps.underline)==="true"?"underline":"",String(fontProps.strikeout)==="true"?"line-through":""].join(" "),fontSize:Math.round((fontProps.pointsize||9)/9*100)+"%",textAlign:"left"};if(prop.alignment){if(prop.alignment.includes("Qt::AlignRight")){fontStyle.textAlign="right"}else if(prop.alignment.includes("Qt::AlignCenter")){fontStyle.textAlign="center"}}var elname=undefined;if(widget.name.startsWith("ext__")){updateField=null;value=_this.state.formData.externalFields[widget.name.slice(5)];inputConstraints.readOnly=true}else{elname=nametransform(widget.name)}if(widget["class"]==="QLabel"){if(widget.name.startsWith("img__")){var _widget$name$split$;value=(_widget$name$split$=(feature.properties||[])[widget.name.split("__")[1]])!==null&&_widget$name$split$!==void 0?_widget$name$split$:widget.property.text;return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-image"},/*#__PURE__*/React.createElement("a",{href:value,rel:"noreferrer",target:"_blank"},/*#__PURE__*/React.createElement("img",{src:value})))}else{var text=widget.name.startsWith("ext__")?value:widget.property.text;return/*#__PURE__*/React.createElement("div",{style:fontStyle},text)}}else if(widget["class"]==="Line"){var _widget$property;var linetype=((_widget$property=widget.property)===null||_widget$property===void 0?void 0:_widget$property.orientation)==="Qt::Vertical"?"vline":"hline";return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-"+linetype})}else if(widget["class"]==="QFrame"){if(widget.property.visibilityExpression){var exprResult=parseExpression(widget.property.visibilityExpression,feature,dataset,_this.props.iface,_this.props.mapPrefix,_this.props.mapCrs,function(){return _this.setState({reevaluate:+new Date})});if(exprResult===false||exprResult===0){return null}}return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-container"},/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-frame"},widget.name.startsWith("nrel__")?_this.renderNRelation(widget):_this.renderLayout(widget.layout,feature,dataset,updateField,nametransform)))}else if(widget["class"]==="QGroupBox"){if(widget.property.visibilityExpression){var _exprResult=parseExpression(widget.property.visibilityExpression,feature,dataset,_this.props.iface,_this.props.mapPrefix,_this.props.mapCrs,function(){return _this.setState({reevaluate:+new Date})});if(_exprResult===false||_exprResult===0){return null}}return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-container"},/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-frame-title",style:fontStyle},prop.title),/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-frame"},widget.name.startsWith("nrel__")?_this.renderNRelation(widget):_this.renderLayout(widget.layout,feature,dataset,updateField,nametransform)))}else if(widget["class"]==="QTabWidget"){var tabwidgets=(widget.widget||[]).filter(function(child){var exprResult=parseExpression(child.property.visibilityExpression,feature,dataset,_this.props.iface,_this.props.mapPrefix,_this.props.mapCrs,function(){return _this.setState({reevaluate:+new Date})});return exprResult!==false&&exprResult!==0});if(isEmpty(tabwidgets)){return null}var activetab=_this.state.activetabs[widget.name]||tabwidgets[0].name;var tabs=tabwidgets.map(function(tab){return{key:tab.name,label:tab.attribute.title}});return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-container"},/*#__PURE__*/React.createElement(ButtonBar,{active:activetab,buttons:tabs,className:"qt-designer-form-tabbar",onClick:function onClick(key){return _this.setState(function(state){return{activetabs:_objectSpread(_objectSpread({},state.activetabs),{},_defineProperty({},widget.name,key))}})}}),/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-frame"},tabwidgets.filter(function(child){return child.layout}).map(function(child){return _this.renderLayout(child.layout,feature,dataset,updateField,nametransform,child.name===activetab)})))}else if(widget["class"]==="QTextEdit"||widget["class"]==="QTextBrowser"||widget["class"]==="QPlainTextEdit"){var _feature$properties$w,_feature$properties;if(((_feature$properties$w=(_feature$properties=feature.properties)===null||_feature$properties===void 0?void 0:_feature$properties[widget.name])!==null&&_feature$properties$w!==void 0?_feature$properties$w:null)===null){var _ConfigUtils$getConfi;value=(_ConfigUtils$getConfi=ConfigUtils.getConfigProp("editTextNullValue"))!==null&&_ConfigUtils$getConfi!==void 0?_ConfigUtils$getConfi:""}if(_this.props.report){return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-textarea"},value)}else{var addLinkAnchors=ConfigUtils.getConfigProp("editingAddLinkAnchors")!==false;return/*#__PURE__*/React.createElement(TextInput,_extends({addLinkAnchors:addLinkAnchors,multiline:true,name:elname,onChange:function onChange(val){return updateField(widget.name,val)}},inputConstraints,{style:fontStyle,value:String(value)}))}}else if(widget["class"]==="QLineEdit"){if(widget.name.endsWith("__upload")){var _feature$properties2;var fieldId=widget.name.replace(/__upload/,"");var uploadValue=((_feature$properties2=feature.properties)===null||_feature$properties2===void 0?void 0:_feature$properties2[fieldId])||"";var uploadElName=elname.replace(/__upload/,"");var constraints={accept:prop.text||"",required:inputConstraints.required};return/*#__PURE__*/React.createElement(EditUploadField,{constraints:constraints,dataset:dataset,disabled:inputConstraints.readOnly,fieldId:fieldId,iface:_this.props.iface,name:uploadElName,report:_this.props.report,updateField:updateField,value:uploadValue})}else{var _feature$properties$w2,_feature$properties3;if(fieldConstraints.prec!==undefined&&typeof value==="number"){value=value.toFixed(fieldConstraints.prec)}else if(((_feature$properties$w2=(_feature$properties3=feature.properties)===null||_feature$properties3===void 0?void 0:_feature$properties3[widget.name])!==null&&_feature$properties$w2!==void 0?_feature$properties$w2:null)===null){var _ConfigUtils$getConfi2;value=(_ConfigUtils$getConfi2=ConfigUtils.getConfigProp("editTextNullValue"))!==null&&_ConfigUtils$getConfi2!==void 0?_ConfigUtils$getConfi2:""}if(_this.props.report){return/*#__PURE__*/React.createElement("div",{style:fontStyle},value||inputConstraints.placeholder)}else{var _addLinkAnchors=ConfigUtils.getConfigProp("editingAddLinkAnchors")!==false;var editTextNullValue=ConfigUtils.getConfigProp("editTextNullValue");return/*#__PURE__*/React.createElement(TextInput,_extends({addLinkAnchors:_addLinkAnchors,clearValue:editTextNullValue,name:elname,onChange:function onChange(val){return updateField(widget.name,val)}},inputConstraints,{style:fontStyle,value:String(value)}))}}}else if(widget["class"]==="QCheckBox"||widget["class"]==="QRadioButton"){var _this$props$feature$p;var type=widget["class"]==="QCheckBox"?"checkbox":"radio";var inGroup=attr.buttonGroup;var checked=inGroup?((_this$props$feature$p=_this.props.feature.properties)===null||_this$props$feature$p===void 0?void 0:_this$props$feature$p[_this.groupOrName(widget)])===widget.name:value;return/*#__PURE__*/React.createElement("label",{style:fontStyle},/*#__PURE__*/React.createElement("input",_extends({checked:checked,disabled:inputConstraints.readOnly,name:nametransform(_this.groupOrName(widget)),onChange:function onChange(ev){return updateField(_this.groupOrName(widget),inGroup?widget.name:ev.target.checked)}},inputConstraints,{type:type,value:widget.name})),widget.property.text)}else if(widget["class"]==="QComboBox"){var parts=widget.name.split("__");if((parts.length===5||parts.length===6)&&parts[0]==="kvrel"){var _fieldId2;// kvrel__attrname__datatable__keyfield__valuefield
19
+ }});var fit="fit-content("+Math.round(1/rows.length*100)+"%)";for(var row=0;row<rows.length;++row){rows[row]=rows[row]||fit}return rows});_defineProperty(_this,"renderWidget",function(widget,feature,editConfig,fields,updateField){var _widget$name;var nametransform=arguments.length>5&&arguments[5]!==undefined?arguments[5]:function(name){return name};var isRelWidget=arguments.length>6?arguments[6]:undefined;var disabled=arguments.length>7&&arguments[7]!==undefined?arguments[7]:false;var value=(_widget$name=(feature.properties||{})[widget.name])!==null&&_widget$name!==void 0?_widget$name:"";var prop=widget.property||{};if(String(prop.visible)==="false"){return null}var attr=widget.attribute||{};var fieldname=widget.name.replace(/kvrel__/,"").split("__")[isRelWidget?1:0];var field=fields[fieldname];var fieldConstraints=(field===null||field===void 0?void 0:field.constraints)||{};var inputConstraints={};inputConstraints.readOnly=_this.props.readOnly||String(prop.readOnly)==="true"||String(prop.enabled)==="false"||fieldConstraints.readOnly===true||disabled;inputConstraints.required=!inputConstraints.readOnly&&(String(prop.required)==="true"||String(fieldConstraints.required)==="true");inputConstraints.placeholder=prop.placeholderText||fieldConstraints.placeholder||"";var fontProps=prop.font||{};var fontStyle={fontWeight:String(fontProps.bold)==="true"?"bold":"normal",fontStyle:String(fontProps.italic)==="true"?"italic":"normal",textDecoration:[String(fontProps.underline)==="true"?"underline":"",String(fontProps.strikeout)==="true"?"line-through":""].join(" "),fontSize:Math.round((fontProps.pointsize||9)/9*100)+"%",textAlign:"left"};if(prop.alignment){if(prop.alignment.includes("Qt::AlignRight")){fontStyle.textAlign="right"}else if(prop.alignment.includes("Qt::AlignCenter")){fontStyle.textAlign="center"}}var elname=undefined;if(widget.name.startsWith("ext__")){updateField=null;value=_this.state.formData.externalFields[widget.name.slice(5)];inputConstraints.readOnly=true}else{elname=nametransform(widget.name)}if(widget["class"]==="QLabel"){if(widget.name.startsWith("img__")){var _widget$name$split$;value=(_widget$name$split$=(feature.properties||[])[widget.name.split("__")[1]])!==null&&_widget$name$split$!==void 0?_widget$name$split$:widget.property.text;return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-image"},/*#__PURE__*/React.createElement("a",{href:value,rel:"noreferrer",target:"_blank"},/*#__PURE__*/React.createElement("img",{src:value})))}else{var text=widget.name.startsWith("ext__")?value:widget.property.text;return/*#__PURE__*/React.createElement("div",{style:fontStyle},text)}}else if(widget["class"]==="Line"){var _widget$property;var linetype=((_widget$property=widget.property)===null||_widget$property===void 0?void 0:_widget$property.orientation)==="Qt::Vertical"?"vline":"hline";return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-"+linetype})}else if(widget["class"]==="QFrame"){if(widget.property.visibilityExpression){var exprResult=parseExpression(widget.property.visibilityExpression,feature,editConfig,_this.props.iface,_this.props.mapPrefix,_this.props.mapCrs,function(){return _this.setState({reevaluate:+new Date})});if(exprResult===false||exprResult===0){return null}}return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-container"},/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-frame"},widget.name.startsWith("nrel__")?_this.renderNRelation(widget):_this.renderLayout(widget.layout,feature,editConfig,updateField,nametransform)))}else if(widget["class"]==="QGroupBox"){if(widget.property.visibilityExpression){var _exprResult=parseExpression(widget.property.visibilityExpression,feature,editConfig,_this.props.iface,_this.props.mapPrefix,_this.props.mapCrs,function(){return _this.setState({reevaluate:+new Date})});if(_exprResult===false||_exprResult===0){return null}}return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-container"},/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-frame-title",style:fontStyle},prop.title),/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-frame"},widget.name.startsWith("nrel__")?_this.renderNRelation(widget):_this.renderLayout(widget.layout,feature,editConfig,updateField,nametransform)))}else if(widget["class"]==="QTabWidget"){var tabwidgets=(widget.widget||[]).filter(function(child){var exprResult=parseExpression(child.property.visibilityExpression,feature,editConfig,_this.props.iface,_this.props.mapPrefix,_this.props.mapCrs,function(){return _this.setState({reevaluate:+new Date})});return exprResult!==false&&exprResult!==0});if(isEmpty(tabwidgets)){return null}var activetab=_this.state.activetabs[widget.name]||tabwidgets[0].name;var tabs=tabwidgets.map(function(tab){return{key:tab.name,label:tab.attribute.title}});return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-container"},/*#__PURE__*/React.createElement(ButtonBar,{active:activetab,buttons:tabs,className:"qt-designer-form-tabbar",onClick:function onClick(key){return _this.setState(function(state){return{activetabs:_objectSpread(_objectSpread({},state.activetabs),{},_defineProperty({},widget.name,key))}})}}),/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-frame"},tabwidgets.filter(function(child){return child.layout}).map(function(child){return _this.renderLayout(child.layout,feature,editConfig,updateField,nametransform,child.name===activetab)})))}else if(widget["class"]==="QTextEdit"||widget["class"]==="QTextBrowser"||widget["class"]==="QPlainTextEdit"){var _feature$properties$w,_feature$properties;if(((_feature$properties$w=(_feature$properties=feature.properties)===null||_feature$properties===void 0?void 0:_feature$properties[widget.name])!==null&&_feature$properties$w!==void 0?_feature$properties$w:null)===null){var _ConfigUtils$getConfi;value=(_ConfigUtils$getConfi=ConfigUtils.getConfigProp("editTextNullValue"))!==null&&_ConfigUtils$getConfi!==void 0?_ConfigUtils$getConfi:""}if(_this.props.report){return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-textarea"},value)}else{var addLinkAnchors=ConfigUtils.getConfigProp("editingAddLinkAnchors")!==false;return/*#__PURE__*/React.createElement(TextInput,_extends({addLinkAnchors:addLinkAnchors,multiline:true,name:elname,onChange:function onChange(val){return updateField(widget.name,val)}},inputConstraints,{style:fontStyle,value:String(value)}))}}else if(widget["class"]==="QLineEdit"){if(widget.name.endsWith("__upload")){var _feature$properties2;var fieldId=widget.name.replace(/__upload/,"");var uploadValue=((_feature$properties2=feature.properties)===null||_feature$properties2===void 0?void 0:_feature$properties2[fieldId])||"";var uploadElName=elname.replace(/__upload/,"");var constraints={accept:prop.text||"",required:inputConstraints.required};return/*#__PURE__*/React.createElement(EditUploadField,{constraints:constraints,dataset:editConfig.editDataset,disabled:inputConstraints.readOnly,fieldId:fieldId,iface:_this.props.iface,name:uploadElName,report:_this.props.report,updateField:updateField,value:uploadValue})}else{var _feature$properties$w2,_feature$properties3;if(fieldConstraints.prec!==undefined&&typeof value==="number"){value=value.toFixed(fieldConstraints.prec)}else if(((_feature$properties$w2=(_feature$properties3=feature.properties)===null||_feature$properties3===void 0?void 0:_feature$properties3[widget.name])!==null&&_feature$properties$w2!==void 0?_feature$properties$w2:null)===null){var _ConfigUtils$getConfi2;value=(_ConfigUtils$getConfi2=ConfigUtils.getConfigProp("editTextNullValue"))!==null&&_ConfigUtils$getConfi2!==void 0?_ConfigUtils$getConfi2:""}if(_this.props.report){return/*#__PURE__*/React.createElement("div",{style:fontStyle},value||inputConstraints.placeholder)}else{var _addLinkAnchors=ConfigUtils.getConfigProp("editingAddLinkAnchors")!==false;var editTextNullValue=ConfigUtils.getConfigProp("editTextNullValue");return/*#__PURE__*/React.createElement(TextInput,_extends({addLinkAnchors:_addLinkAnchors,clearValue:editTextNullValue,name:elname,onChange:function onChange(val){return updateField(widget.name,val)}},inputConstraints,{style:fontStyle,value:String(value)}))}}}else if(widget["class"]==="QCheckBox"||widget["class"]==="QRadioButton"){var _this$props$feature$p;var type=widget["class"]==="QCheckBox"?"checkbox":"radio";var inGroup=attr.buttonGroup;var checked=inGroup?((_this$props$feature$p=_this.props.feature.properties)===null||_this$props$feature$p===void 0?void 0:_this$props$feature$p[_this.groupOrName(widget)])===widget.name:value;return/*#__PURE__*/React.createElement("label",{style:fontStyle},/*#__PURE__*/React.createElement("input",_extends({checked:checked,disabled:inputConstraints.readOnly,name:nametransform(_this.groupOrName(widget)),onChange:function onChange(ev){return updateField(_this.groupOrName(widget),inGroup?widget.name:ev.target.checked)}},inputConstraints,{type:type,value:widget.name})),widget.property.text)}else if(widget["class"]==="QComboBox"){var parts=widget.name.split("__");if((parts.length===5||parts.length===6)&&parts[0]==="kvrel"){var _fieldId2;// kvrel__attrname__datatable__keyfield__valuefield
20
20
  // kvrel__reltablename__attrname__datatable__keyfield__valuefield
21
- var count=parts.length;var _fieldId=parts.slice(1,count-3).join("__");value=(_fieldId2=(feature.properties||[])[_fieldId])!==null&&_fieldId2!==void 0?_fieldId2:"";var keyvalrel=_this.props.mapPrefix+parts[count-3]+":"+parts[count-2]+":"+parts[count-1];var filterExpr=null;if(field!==null&&field!==void 0&&field.filterExpression){filterExpr=parseExpression(field.filterExpression,feature,dataset,_this.props.iface,_this.props.mapPrefix,_this.props.mapCrs,function(){return _this.setState({reevaluate:+new Date})},true)}return/*#__PURE__*/React.createElement(EditComboField,{editIface:_this.props.iface,fieldId:_fieldId,filterExpr:filterExpr,key:_fieldId,keyvalrel:keyvalrel,multiSelect:widget.allowMulti==="true",name:nametransform(_fieldId),placeholder:inputConstraints.placeholder,readOnly:inputConstraints.readOnly||fieldConstraints.readOnly,required:inputConstraints.required||fieldConstraints.required,style:fontStyle,updateField:updateField,value:value})}else{var values=MiscUtils.ensureArray(widget.item||[]).map(function(item){var _item$property$value;return{label:item.property.text,value:(_item$property$value=item.property.value)!==null&&_item$property$value!==void 0?_item$property$value:item.property.text}});return/*#__PURE__*/React.createElement(EditComboField,{editIface:_this.props.iface,fieldId:widget.name,key:widget.name,name:elname,placeholder:inputConstraints.placeholder,readOnly:inputConstraints.readOnly||inputConstraints.readOnly,required:inputConstraints.required||inputConstraints.required,style:fontStyle,updateField:updateField,value:value,values:values})}}else if(widget["class"]==="QSpinBox"||widget["class"]==="QDoubleSpinBox"||widget["class"]==="QSlider"){var _prop$minimum,_prop$maximum,_ref,_prop$singleStep,_prop$decimals;var floatConstraint=function floatConstraint(x){var f=parseFloat(x);return isNaN(f)?undefined:f};var min=floatConstraint((_prop$minimum=prop.minimum)!==null&&_prop$minimum!==void 0?_prop$minimum:fieldConstraints.min);var max=floatConstraint((_prop$maximum=prop.maximum)!==null&&_prop$maximum!==void 0?_prop$maximum:fieldConstraints.max);var step=(_ref=(_prop$singleStep=prop.singleStep)!==null&&_prop$singleStep!==void 0?_prop$singleStep:fieldConstraints.step)!==null&&_ref!==void 0?_ref:1;var precision=(_prop$decimals=prop.decimals)!==null&&_prop$decimals!==void 0?_prop$decimals:0;if(widget["class"]==="QSlider"){return/*#__PURE__*/React.createElement("input",_extends({max:max,min:min,name:elname,onChange:function onChange(ev){return updateField(widget.name,ev.target.value)}},inputConstraints,{size:5,step:step,style:fontStyle,type:"range",value:value}))}else{return/*#__PURE__*/React.createElement(NumberInput,_extends({decimals:precision,max:max,min:min,name:elname,onChange:function onChange(val){return updateField(widget.name,val)}},inputConstraints,{step:step,style:fontStyle,value:value}))}}else if(widget["class"]==="QDateEdit"){var _min=prop.minimumDate?_this.dateConstraint(prop.minimumDate):"1600-01-01";var _max=prop.maximumDate?_this.dateConstraint(prop.maximumDate):"9999-12-31";return/*#__PURE__*/React.createElement("input",_extends({max:_max,min:_min,name:elname,onChange:function onChange(ev){return updateField(widget.name,ev.target.value)}},inputConstraints,{style:fontStyle,type:"date",value:value}))}else if(widget["class"]==="QTimeEdit"){return/*#__PURE__*/React.createElement("input",_extends({name:elname,onChange:function onChange(ev){return updateField(widget.name,ev.target.value)}},inputConstraints,{style:fontStyle,type:"time",value:value}))}else if(widget["class"]==="QDateTimeEdit"){var _min2=prop.minimumDate?_this.dateConstraint(prop.minimumDate):"1600-01-01";var _max2=prop.maximumDate?_this.dateConstraint(prop.maximumDate):"9999-12-31";return/*#__PURE__*/React.createElement(DateTimeInput,{maxDate:_max2,minDate:_min2,name:elname,onChange:function onChange(val){return updateField(widget.name,val)},readOnly:inputConstraints.readOnly,required:inputConstraints.required,style:fontStyle,value:value})}else if(widget["class"]==="QWidget"){if(widget.name.startsWith("nrel__")){return _this.renderNRelation(widget)}else if(widget.name.startsWith("ext__")){return value}else{return _this.renderLayout(widget.layout,feature,dataset,updateField,nametransform)}}else if(widget["class"]==="QPushButton"){if(widget.name.startsWith("btn__")&&widget.onClick){return/*#__PURE__*/React.createElement("button",{className:"button",disabled:inputConstraints.readOnly,onClick:function onClick(){return widget.onClick(_this.props.setFormBusy)},type:"button"},widget.property.text)}else if(widget.name.startsWith("featurelink__")){var _parts=widget.name.split("__");// featurelink__layer__attrname
21
+ var count=parts.length;var _fieldId=parts.slice(1,count-3).join("__");value=(_fieldId2=(feature.properties||[])[_fieldId])!==null&&_fieldId2!==void 0?_fieldId2:"";var keyvalrel=_this.props.mapPrefix+parts[count-3]+":"+parts[count-2]+":"+parts[count-1];var filterExpr=null;if(field!==null&&field!==void 0&&field.filterExpression){filterExpr=parseExpression(field.filterExpression,feature,editConfig,_this.props.iface,_this.props.mapPrefix,_this.props.mapCrs,function(){return _this.setState({reevaluate:+new Date})},true)}return/*#__PURE__*/React.createElement(EditComboField,{editIface:_this.props.iface,fieldId:_fieldId,filterExpr:filterExpr,key:_fieldId,keyvalrel:keyvalrel,multiSelect:widget.allowMulti==="true",name:nametransform(_fieldId),placeholder:inputConstraints.placeholder,readOnly:inputConstraints.readOnly||fieldConstraints.readOnly,required:inputConstraints.required||fieldConstraints.required,style:fontStyle,updateField:updateField,value:value})}else{var values=MiscUtils.ensureArray(widget.item||[]).map(function(item){var _item$property$value;return{label:item.property.text,value:(_item$property$value=item.property.value)!==null&&_item$property$value!==void 0?_item$property$value:item.property.text}});return/*#__PURE__*/React.createElement(EditComboField,{editIface:_this.props.iface,fieldId:widget.name,key:widget.name,name:elname,placeholder:inputConstraints.placeholder,readOnly:inputConstraints.readOnly||inputConstraints.readOnly,required:inputConstraints.required||inputConstraints.required,style:fontStyle,updateField:updateField,value:value,values:values})}}else if(widget["class"]==="QSpinBox"||widget["class"]==="QDoubleSpinBox"||widget["class"]==="QSlider"){var _prop$minimum,_prop$maximum,_ref,_prop$singleStep,_prop$decimals;var floatConstraint=function floatConstraint(x){var f=parseFloat(x);return isNaN(f)?undefined:f};var min=floatConstraint((_prop$minimum=prop.minimum)!==null&&_prop$minimum!==void 0?_prop$minimum:fieldConstraints.min);var max=floatConstraint((_prop$maximum=prop.maximum)!==null&&_prop$maximum!==void 0?_prop$maximum:fieldConstraints.max);var step=(_ref=(_prop$singleStep=prop.singleStep)!==null&&_prop$singleStep!==void 0?_prop$singleStep:fieldConstraints.step)!==null&&_ref!==void 0?_ref:1;var precision=(_prop$decimals=prop.decimals)!==null&&_prop$decimals!==void 0?_prop$decimals:0;if(widget["class"]==="QSlider"){return/*#__PURE__*/React.createElement("input",_extends({max:max,min:min,name:elname,onChange:function onChange(ev){return updateField(widget.name,ev.target.value)}},inputConstraints,{size:5,step:step,style:fontStyle,type:"range",value:value}))}else{return/*#__PURE__*/React.createElement(NumberInput,_extends({decimals:precision,max:max,min:min,name:elname,onChange:function onChange(val){return updateField(widget.name,val)}},inputConstraints,{step:step,style:fontStyle,value:value}))}}else if(widget["class"]==="QDateEdit"){var _min=prop.minimumDate?_this.dateConstraint(prop.minimumDate):"1600-01-01";var _max=prop.maximumDate?_this.dateConstraint(prop.maximumDate):"9999-12-31";return/*#__PURE__*/React.createElement("input",_extends({max:_max,min:_min,name:elname,onChange:function onChange(ev){return updateField(widget.name,ev.target.value)}},inputConstraints,{style:fontStyle,type:"date",value:value}))}else if(widget["class"]==="QTimeEdit"){return/*#__PURE__*/React.createElement("input",_extends({name:elname,onChange:function onChange(ev){return updateField(widget.name,ev.target.value)}},inputConstraints,{style:fontStyle,type:"time",value:value}))}else if(widget["class"]==="QDateTimeEdit"){var _min2=prop.minimumDate?_this.dateConstraint(prop.minimumDate):"1600-01-01";var _max2=prop.maximumDate?_this.dateConstraint(prop.maximumDate):"9999-12-31";return/*#__PURE__*/React.createElement(DateTimeInput,{maxDate:_max2,minDate:_min2,name:elname,onChange:function onChange(val){return updateField(widget.name,val)},readOnly:inputConstraints.readOnly,required:inputConstraints.required,style:fontStyle,value:value})}else if(widget["class"]==="QWidget"){if(widget.name.startsWith("nrel__")){return _this.renderNRelation(widget)}else if(widget.name.startsWith("ext__")){return value}else{return _this.renderLayout(widget.layout,feature,editConfig,updateField,nametransform)}}else if(widget["class"]==="QPushButton"){if(widget.name.startsWith("btn__")&&widget.onClick){return/*#__PURE__*/React.createElement("button",{className:"button",disabled:inputConstraints.readOnly,onClick:function onClick(){return widget.onClick(_this.props.setFormBusy)},type:"button"},widget.property.text)}else if(widget.name.startsWith("featurelink__")){var _parts=widget.name.split("__");// featurelink__layer__attrname
22
22
  // featurelink__layer__reltable__attrname
23
23
  if(_parts.length===3||_parts.length===4){var _feature$properties4;var layer=_parts[1];var reltable=_parts.length===4?_parts[2]:"";var attrname=_parts.slice(2).join("__");value=(_feature$properties4=feature.properties)===null||_feature$properties4===void 0?void 0:_feature$properties4[attrname];if(layer===reltable){var index=parseInt(nametransform("").split("__")[1],10);// Ugh..
24
- var reldataset=_this.props.mapPrefix+reltable;var displayField=attrname.split("__")[1];if(feature.__status__!=="empty"){var featurebuttons=[{key:"Edit",icon:"editing",label:String(value!==null&&value!==void 0?value:"")}];return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-featurelink-buttons"},/*#__PURE__*/React.createElement(ButtonBar,{buttons:featurebuttons,forceLabel:true,onClick:function onClick(){return _this.props.editRelationRecord("Edit",reltable,reldataset,index,displayField)}}))}else{var _featurebuttons=[];if(feature.geometry!==null){_featurebuttons.push({key:"Pick",icon:"pick",label:LocaleUtils.tr("editing.pick")})}_featurebuttons.push({key:"Create",icon:"editdraw",label:LocaleUtils.tr("editing.create")});return/*#__PURE__*/React.createElement(ButtonBar,{buttons:_featurebuttons,forceLabel:true,onClick:function onClick(action){return _this.props.editRelationRecord(action,reltable,reldataset,index,displayField)}})}}else{if(value!==null){var _featurebuttons2=[{key:"Edit",icon:"editing",label:String(value!==null&&value!==void 0?value:"")}];return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-featurelink-buttons"},/*#__PURE__*/React.createElement(ButtonBar,{buttons:_featurebuttons2,onClick:function onClick(){return _this.props.switchEditContext("Edit",layer,value,function(v){return updateField(attrname,v)},attrname)}}),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return updateField(attrname,null)},type:"button"},/*#__PURE__*/React.createElement(Icon,{icon:"clear"})))}else{var _featurebuttons3=[{key:"Pick",icon:"pick",label:LocaleUtils.tr("editing.pick")},{key:"Create",icon:"editdraw",label:LocaleUtils.tr("editing.create")}];return/*#__PURE__*/React.createElement(ButtonBar,{buttons:_featurebuttons3,onClick:function onClick(action){return _this.props.switchEditContext(action,layer,null,function(v){return updateField(attrname,v)},attrname)}})}}}}}else if(widget["class"]==="QStackedWidget"){return _this.renderLayout(widget.widget[parseInt(widget.property.currentIndex,10)].layout,feature,dataset,updateField,nametransform)}return null});_defineProperty(_this,"renderNRelation",function(widget){var _widget$property2,_this$props$editConfi,_this$props$editConfi2,_this$props$feature$r;var parts=widget.name.split("__");if(parts.length<3){return null}var disabled=String((_widget$property2=widget.property)===null||_widget$property2===void 0?void 0:_widget$property2.enabled)==="false";var tablename=parts[1];var sortcol=parts[3]||null;var noreorder=parts[4]||false;var datasetname=_this.props.mapPrefix+tablename;var headerItems=widget.layout.item.filter(function(item){return item.widget&&item.widget.name.startsWith("header__")}).sort(function(a,b){return a.column-b.column});var widgetItems=widget.layout.item.filter(function(item){return!item.widget||!item.widget.name.startsWith("header__")}).sort(function(a,b){return a.column-b.column});var tableFitWidgets=["QLabel","QCheckBox","QRadioButton","QDateTimeEdit","QDateEdit","QTimeEdit"];var columnStyles=widgetItems.map(function(item){return item.widget&&tableFitWidgets.includes(item.widget["class"])?{width:"1px"}:{}});var fields=((_this$props$editConfi=(_this$props$editConfi2=_this.props.editConfigs[tablename])===null||_this$props$editConfi2===void 0?void 0:_this$props$editConfi2.fields)!==null&&_this$props$editConfi!==void 0?_this$props$editConfi:[]).reduce(function(res,field){return _objectSpread(_objectSpread({},res),{},_defineProperty({},field.id,field))},{});return/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation"},/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-table-container"},!_this.props.feature.relationValues?/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-table-loading"},/*#__PURE__*/React.createElement(Spinner,null)):null,/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,!isEmpty(headerItems)?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("th",null),headerItems.map(function(item){return/*#__PURE__*/React.createElement("th",{key:item.widget.name},item.widget.property.text)}),/*#__PURE__*/React.createElement("th",null)):null,(((_this$props$feature$r=_this.props.feature.relationValues)===null||_this$props$feature$r===void 0||(_this$props$feature$r=_this$props$feature$r[datasetname])===null||_this$props$feature$r===void 0?void 0:_this$props$feature$r.features)||[]).map(function(feature,idx){var updateField=function updateField(name,value){var fieldname=name.slice(tablename.length+2);// Strip <tablename>__ prefix
25
- _this.props.updateRelationField(datasetname,idx,fieldname,value)};var nametransform=function nametransform(name){return name+"__"+idx};var status=feature.__status__||"";var relFeature=_objectSpread(_objectSpread({},feature),{},{properties:Object.entries(feature.properties).reduce(function(res,_ref2){var _ref3=_slicedToArray(_ref2,2),key=_ref3[0],value=_ref3[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},tablename+"__"+key,value))},{})});var statusIcon=null;if(status==="empty"){// Pass
26
- }else if(status==="new"){statusIcon="new"}else if(status){statusIcon="edited"}var statusText="";if(feature.error){statusIcon="warning";statusText=_this.buildErrMsg(feature)}var extraClass=status.startsWith("deleted")?"qt-designer-widget-relation-record-deleted":"";return/*#__PURE__*/React.createElement("tr",{className:"qt-designer-widget-relation-record "+extraClass,key:datasetname+idx},/*#__PURE__*/React.createElement("td",{className:"qt-designer-widget-relation-record-icon"},statusIcon?/*#__PURE__*/React.createElement(Icon,{icon:statusIcon,title:statusText}):null),widgetItems.map(function(item,widx){if(item.widget){return/*#__PURE__*/React.createElement("td",{className:"qt-designer-widget-relation-row-widget",key:item.widget.name,style:columnStyles[widx]},_this.renderWidget(item.widget,relFeature,datasetname,fields,updateField,nametransform,true,disabled))}else if(item.spacer){return/*#__PURE__*/React.createElement("td",{key:"spacer_"+widx})}else{return null}}),!_this.props.readOnly&&!disabled&&sortcol&&!noreorder?/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement(Icon,{icon:"chevron-up",onClick:function onClick(){return _this.props.reorderRelationRecord(datasetname,idx,-1)}}),/*#__PURE__*/React.createElement("br",null),/*#__PURE__*/React.createElement(Icon,{icon:"chevron-down",onClick:function onClick(){return _this.props.reorderRelationRecord(datasetname,idx,1)}})):null,!_this.props.readOnly&&!disabled?/*#__PURE__*/React.createElement("td",{className:"qt-designer-widget-relation-record-icon"},/*#__PURE__*/React.createElement(Icon,{icon:"trash",onClick:function onClick(){return _this.props.removeRelationRecord(datasetname,idx)}})):null)})))),!_this.props.readOnly?/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-buttons"},/*#__PURE__*/React.createElement("button",{className:"button qt-designer-widget-relation-add",disabled:!_this.props.feature.relationValues,onClick:function onClick(ev){return _this.addRelationRecord(ev,datasetname)},type:"button"},LocaleUtils.tr("editing.add"))):null,/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-resize-handle",onPointerDown:_this.startRelationTableResize}))});_defineProperty(_this,"addRelationRecord",function(ev,datasetname){_this.setState({relationAddPressed:ev.target});_this.props.addRelationRecord(datasetname)});_defineProperty(_this,"startRelationTableResize",function(ev){var container=ev.target.parentElement.parentElement;if(!container){return}var startHeight=container.offsetHeight;var startMouseY=ev.clientY;var resizeInput=function resizeInput(event){container.style.height=Math.max(30,startHeight+(event.clientY-startMouseY))+"px"};ev.view.document.body.style.userSelect="none";ev.view.addEventListener("pointermove",resizeInput);ev.view.addEventListener("pointerup",function(){ev.view.document.body.style.userSelect="";ev.view.removeEventListener("pointermove",resizeInput)},{once:true})});_defineProperty(_this,"groupOrName",function(widget){return widget.attribute&&widget.attribute.buttonGroup?widget.attribute.buttonGroup._:widget.name});_defineProperty(_this,"dateConstraint",function(constr){return constr.year+"-"+("0"+constr.month).slice(-2)+"-"+("0"+constr.day).slice(-2)});_defineProperty(_this,"parseForm",function(data){var loadingReqId=uuidv1();_this.setState({loading:true,loadingReqId:loadingReqId});var parserOpts={isArray:function isArray(){return false},ignoreAttributes:false,attributeNamePrefix:""};var json=new XMLParser(parserOpts).parse(data);var relationTables={};var externalFields={};var widgets={};var fields={};var buttons={};var nrels={};var counters={widget:0,layout:0};_this.reformatWidget(json.ui.widget,relationTables,fields,buttons,nrels,externalFields,widgets,counters);// console.log(json);
27
- json.externalFields=externalFields;json.widgets=widgets;json.fields=fields;json.buttons=buttons;json.nrels=nrels;if(FormPreprocessors[_this.props.editLayerId]){FormPreprocessors[_this.props.editLayerId](json,_this.props.feature,function(formData){if(_this.state.loadingReqId===loadingReqId){_this.setState({formData:formData,loading:false,loadingReqId:null})}})}else{_this.setState({formData:json,loading:false,loadingReqId:null})}_this.props.setRelationTables(relationTables)});_defineProperty(_this,"reformatWidget",function(widget,relationTables,fields,buttons,nrels,externalFields,widgets,counters){if(widget.property){widget.property=MiscUtils.ensureArray(widget.property).reduce(function(res,prop){return _objectSpread(_objectSpread({},res),{},_defineProperty({},prop.name,prop[Object.keys(prop).find(function(key){return key!=="name"})]))},{})}else{widget.property={}}if(widget.attribute){widget.attribute=MiscUtils.ensureArray(widget.attribute).reduce(function(res,prop){return _objectSpread(_objectSpread({},res),{},_defineProperty({},prop.name,prop[Object.keys(prop).find(function(key){return key!=="name"})]))},{})}else{widget.attribute={}}var verticalFill=false;if(widget.item){MiscUtils.ensureArray(widget.item).forEach(function(item){verticalFill|=_this.reformatWidget(item,relationTables,fields,buttons,nrels,externalFields,widgets,counters)})}widget.name=widget.name||":widget_"+counters.widget++;if(widget.name in _this.props.fields){fields[widget.name]=widget}else if(widget.name.startsWith("kvrel__")||widget.name.startsWith("img__")){var _parts2=widget.name.split("__");if(_parts2[1]in _this.props.fields){fields[_parts2[1]]=widget}}else if(widget.name.startsWith("btn__")){buttons[widget.name.split("__")[1]]=widget}else if(widget.name.startsWith("nrel__")){nrels[widget.name.split("__")[1]]=widget}if(widget.name.startsWith("ext__")){externalFields[widget.name.slice(5)]=""}widgets[widget.name]=widget;if(widget.layout){verticalFill|=_this.reformatLayout(widget.layout,relationTables,fields,buttons,nrels,externalFields,widgets,counters)}if(widget.widget){widget.widget=Array.isArray(widget.widget)?widget.widget:[widget.widget];widget.widget.forEach(function(child){child.name=":widget_"+counters.widget++;verticalFill|=_this.reformatWidget(child,relationTables,fields,buttons,nrels,externalFields,widgets,counters)})}if(widget.name.startsWith("nrel__")||!widget.layout&&!vFitWidgets.includes(widget["class"])){verticalFill=true}var parts=widget.name.split("__");if(parts.length>=3&&parts[0]==="nrel"){relationTables[_this.props.mapPrefix+parts[1]]={fk:parts[2],sortcol:parts[3]||null,noreorder:parts[4]||false}}return verticalFill});_defineProperty(_this,"reformatLayout",function(layout,relationTables,fields,buttons,nrels,externalFields,widgets,counters){layout.item=MiscUtils.ensureArray(layout.item);layout.name=layout.name||":layout_"+counters.layout++;var verticalFill=false;layout.item.forEach(function(item){if(!item){return}else if(item.widget){verticalFill|=_this.reformatWidget(item.widget,relationTables,fields,buttons,nrels,externalFields,widgets,counters)}else if(item.spacer){item.spacer.property=MiscUtils.ensureArray(item.spacer.property).reduce(function(res,prop){return _objectSpread(_objectSpread({},res),{},_defineProperty({},prop.name,prop[Object.keys(prop).find(function(key){return key!=="name"})]))},{});if(item.spacer.property.orientation==="Qt::Vertical"){verticalFill=true}}else if(item.layout){verticalFill|=_this.reformatLayout(item.layout,relationTables,fields,buttons,nrels,externalFields,widgets,counters)}});layout.verticalFill=verticalFill;return verticalFill});_defineProperty(_this,"buildErrMsg",function(record){var message=record.error;var errorDetails=record.error_details||{};if(!isEmpty(errorDetails.geometry_errors)){message+=":\n";message+=errorDetails.geometry_errors.map(function(entry){return" - "+entry.reason+" at "+entry.location})}if(!isEmpty(errorDetails.data_errors)){message+=":\n - "+errorDetails.data_errors.join("\n - ")}if(!isEmpty(errorDetails.validation_errors)){message+=":\n - "+errorDetails.validation_errors.join("\n - ")}return message});_this.state=QtDesignerForm.defaultState;return _this}_inherits(QtDesignerForm,_React$Component);return _createClass(QtDesignerForm,[{key:"componentDidMount",value:function componentDidMount(){this.componentDidUpdate({})}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this2=this;// Query form
28
- if(this.props.form!==prevProps.form||this.props.feature.__version__!==prevProps.feature.__version__){this.setState(function(state){return _objectSpread(_objectSpread({},QtDesignerForm.defaultState),{},{activetabs:_this2.props.form===prevProps.form?state.activetabs:{}})});var url=MiscUtils.resolveAssetsPath(this.props.form);url+=(url.includes("?")?"&":"?")+"lang="+this.props.locale;axios.get(url).then(function(response){_this2.parseForm(response.data)})["catch"](function(e){// eslint-disable-next-line
24
+ var reldataset=_this.props.mapPrefix+reltable;var displayField=attrname.split("__")[1];if(feature.__status__!=="empty"){var featurebuttons=[{key:"Edit",icon:"editing",label:String(value!==null&&value!==void 0?value:"")}];return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-featurelink-buttons"},/*#__PURE__*/React.createElement(ButtonBar,{buttons:featurebuttons,forceLabel:true,onClick:function onClick(){return _this.props.editRelationRecord("Edit",reltable,reldataset,index,displayField)}}))}else{var _featurebuttons=[];if(feature.geometry!==null){_featurebuttons.push({key:"Pick",icon:"pick",label:LocaleUtils.tr("editing.pick")})}_featurebuttons.push({key:"Create",icon:"editdraw",label:LocaleUtils.tr("editing.create")});return/*#__PURE__*/React.createElement(ButtonBar,{buttons:_featurebuttons,forceLabel:true,onClick:function onClick(action){return _this.props.editRelationRecord(action,reltable,reldataset,index,displayField)}})}}else{if(value!==null){var _featurebuttons2=[{key:"Edit",icon:"editing",label:String(value!==null&&value!==void 0?value:"")}];return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-featurelink-buttons"},/*#__PURE__*/React.createElement(ButtonBar,{buttons:_featurebuttons2,onClick:function onClick(){return _this.props.switchEditContext("Edit",layer,value,function(v){return updateField(attrname,v)},attrname)}}),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return updateField(attrname,null)},type:"button"},/*#__PURE__*/React.createElement(Icon,{icon:"clear"})))}else{var _featurebuttons3=[{key:"Pick",icon:"pick",label:LocaleUtils.tr("editing.pick")},{key:"Create",icon:"editdraw",label:LocaleUtils.tr("editing.create")}];return/*#__PURE__*/React.createElement(ButtonBar,{buttons:_featurebuttons3,onClick:function onClick(action){return _this.props.switchEditContext(action,layer,null,function(v){return updateField(attrname,v)},attrname)}})}}}}}else if(widget["class"]==="QStackedWidget"){return _this.renderLayout(widget.widget[parseInt(widget.property.currentIndex,10)].layout,feature,editConfig,updateField,nametransform)}return null});_defineProperty(_this,"renderNRelation",function(widget){var _widget$property2,_editConfig$fields,_this$props$feature$r;var parts=widget.name.split("__");if(parts.length<3){return null}var disabled=String((_widget$property2=widget.property)===null||_widget$property2===void 0?void 0:_widget$property2.enabled)==="false";var tablename=parts[1];var sortcol=parts[3]||null;var noreorder=parts[4]||false;var headerItems=widget.layout.item.filter(function(item){return item.widget&&item.widget.name.startsWith("header__")}).sort(function(a,b){return a.column-b.column});var widgetItems=widget.layout.item.filter(function(item){return!item.widget||!item.widget.name.startsWith("header__")}).sort(function(a,b){return a.column-b.column});var tableFitWidgets=["QLabel","QCheckBox","QRadioButton","QDateTimeEdit","QDateEdit","QTimeEdit"];var columnStyles=widgetItems.map(function(item){return item.widget&&tableFitWidgets.includes(item.widget["class"])?{width:"1px"}:{}});var editConfig=_this.props.editConfigs[tablename]||{};var relDataset=editConfig.editDataset;var fields=((_editConfig$fields=editConfig.fields)!==null&&_editConfig$fields!==void 0?_editConfig$fields:[]).reduce(function(res,field){return _objectSpread(_objectSpread({},res),{},_defineProperty({},field.id,field))},{});return/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation"},/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-table-container"},!_this.props.feature.relationValues?/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-table-loading"},/*#__PURE__*/React.createElement(Spinner,null)):null,/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,!isEmpty(headerItems)?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("th",null),headerItems.map(function(item){return/*#__PURE__*/React.createElement("th",{key:item.widget.name},item.widget.property.text)}),/*#__PURE__*/React.createElement("th",null)):null,(((_this$props$feature$r=_this.props.feature.relationValues)===null||_this$props$feature$r===void 0||(_this$props$feature$r=_this$props$feature$r[relDataset])===null||_this$props$feature$r===void 0?void 0:_this$props$feature$r.features)||[]).map(function(feature,idx){var updateField=function updateField(name,value){var fieldname=name.slice(tablename.length+2);// Strip <tablename>__ prefix
25
+ _this.props.updateRelationField(relDataset,idx,fieldname,value)};var nametransform=function nametransform(name){return name+"__"+idx};var status=feature.__status__||"";var relFeature=_objectSpread(_objectSpread({},feature),{},{properties:Object.entries(feature.properties).reduce(function(res,_ref2){var _ref3=_slicedToArray(_ref2,2),key=_ref3[0],value=_ref3[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},tablename+"__"+key,value))},{})});var statusIcon=null;if(status==="empty"){// Pass
26
+ }else if(status==="new"){statusIcon="new"}else if(status){statusIcon="edited"}var statusText="";if(feature.error){statusIcon="warning";statusText=_this.buildErrMsg(feature)}var extraClass=status.startsWith("deleted")?"qt-designer-widget-relation-record-deleted":"";return/*#__PURE__*/React.createElement("tr",{className:"qt-designer-widget-relation-record "+extraClass,key:relDataset+idx},/*#__PURE__*/React.createElement("td",{className:"qt-designer-widget-relation-record-icon"},statusIcon?/*#__PURE__*/React.createElement(Icon,{icon:statusIcon,title:statusText}):null),widgetItems.map(function(item,widx){if(item.widget){return/*#__PURE__*/React.createElement("td",{className:"qt-designer-widget-relation-row-widget",key:item.widget.name,style:columnStyles[widx]},_this.renderWidget(item.widget,relFeature,editConfig,fields,updateField,nametransform,true,disabled))}else if(item.spacer){return/*#__PURE__*/React.createElement("td",{key:"spacer_"+widx})}else{return null}}),!_this.props.readOnly&&!disabled&&sortcol&&!noreorder?/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement(Icon,{icon:"chevron-up",onClick:function onClick(){return _this.props.reorderRelationRecord(relDataset,idx,-1)}}),/*#__PURE__*/React.createElement("br",null),/*#__PURE__*/React.createElement(Icon,{icon:"chevron-down",onClick:function onClick(){return _this.props.reorderRelationRecord(relDataset,idx,1)}})):null,!_this.props.readOnly&&!disabled?/*#__PURE__*/React.createElement("td",{className:"qt-designer-widget-relation-record-icon"},/*#__PURE__*/React.createElement(Icon,{icon:"trash",onClick:function onClick(){return _this.props.removeRelationRecord(relDataset,idx)}})):null)})))),!_this.props.readOnly?/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-buttons"},/*#__PURE__*/React.createElement("button",{className:"button qt-designer-widget-relation-add",disabled:!_this.props.feature.relationValues,onClick:function onClick(ev){return _this.addRelationRecord(ev,relDataset)},type:"button"},LocaleUtils.tr("editing.add"))):null,/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-resize-handle",onPointerDown:_this.startRelationTableResize}))});_defineProperty(_this,"addRelationRecord",function(ev,datasetname){_this.setState({relationAddPressed:ev.target});_this.props.addRelationRecord(datasetname)});_defineProperty(_this,"startRelationTableResize",function(ev){var container=ev.target.parentElement.parentElement;if(!container){return}var startHeight=container.offsetHeight;var startMouseY=ev.clientY;var resizeInput=function resizeInput(event){container.style.height=Math.max(30,startHeight+(event.clientY-startMouseY))+"px"};ev.view.document.body.style.userSelect="none";ev.view.addEventListener("pointermove",resizeInput);ev.view.addEventListener("pointerup",function(){ev.view.document.body.style.userSelect="";ev.view.removeEventListener("pointermove",resizeInput)},{once:true})});_defineProperty(_this,"groupOrName",function(widget){return widget.attribute&&widget.attribute.buttonGroup?widget.attribute.buttonGroup._:widget.name});_defineProperty(_this,"dateConstraint",function(constr){return constr.year+"-"+("0"+constr.month).slice(-2)+"-"+("0"+constr.day).slice(-2)});_defineProperty(_this,"parseForm",function(data){var loadingReqId=uuidv1();_this.setState({loading:true,loadingReqId:loadingReqId});var parserOpts={isArray:function isArray(){return false},ignoreAttributes:false,attributeNamePrefix:""};var json=new XMLParser(parserOpts).parse(data);var relationTables={};var externalFields={};var widgets={};var fields={};var buttons={};var nrels={};var counters={widget:0,layout:0};_this.reformatWidget(json.ui.widget,relationTables,fields,buttons,nrels,externalFields,widgets,counters);// console.log(json);
27
+ json.externalFields=externalFields;json.widgets=widgets;json.fields=fields;json.buttons=buttons;json.nrels=nrels;if(FormPreprocessors[_this.props.editConfig.editDataset]){FormPreprocessors[_this.props.editConfig.editDataset](json,_this.props.feature,function(formData){if(_this.state.loadingReqId===loadingReqId){_this.setState({formData:formData,loading:false,loadingReqId:null})}})}else{_this.setState({formData:json,loading:false,loadingReqId:null})}_this.props.setRelationTables(relationTables)});_defineProperty(_this,"reformatWidget",function(widget,relationTables,fields,buttons,nrels,externalFields,widgets,counters){if(widget.property){widget.property=MiscUtils.ensureArray(widget.property).reduce(function(res,prop){return _objectSpread(_objectSpread({},res),{},_defineProperty({},prop.name,prop[Object.keys(prop).find(function(key){return key!=="name"})]))},{})}else{widget.property={}}if(widget.attribute){widget.attribute=MiscUtils.ensureArray(widget.attribute).reduce(function(res,prop){return _objectSpread(_objectSpread({},res),{},_defineProperty({},prop.name,prop[Object.keys(prop).find(function(key){return key!=="name"})]))},{})}else{widget.attribute={}}var verticalFill=false;if(widget.item){MiscUtils.ensureArray(widget.item).forEach(function(item){verticalFill|=_this.reformatWidget(item,relationTables,fields,buttons,nrels,externalFields,widgets,counters)})}widget.name=widget.name||":widget_"+counters.widget++;var fieldNames=_this.props.editConfig.fields.map(function(field){return field.id});if(fieldNames.includes(widget.name)){fields[widget.name]=widget}else if(widget.name.startsWith("kvrel__")||widget.name.startsWith("img__")){var _parts2=widget.name.split("__");if(fieldNames.includes(_parts2[1])){fields[_parts2[1]]=widget}}else if(widget.name.startsWith("btn__")){buttons[widget.name.split("__")[1]]=widget}else if(widget.name.startsWith("nrel__")){nrels[widget.name.split("__")[1]]=widget}if(widget.name.startsWith("ext__")){externalFields[widget.name.slice(5)]=""}widgets[widget.name]=widget;if(widget.layout){verticalFill|=_this.reformatLayout(widget.layout,relationTables,fields,buttons,nrels,externalFields,widgets,counters)}if(widget.widget){widget.widget=Array.isArray(widget.widget)?widget.widget:[widget.widget];widget.widget.forEach(function(child){child.name=":widget_"+counters.widget++;verticalFill|=_this.reformatWidget(child,relationTables,fields,buttons,nrels,externalFields,widgets,counters)})}if(widget.name.startsWith("nrel__")||!widget.layout&&!vFitWidgets.includes(widget["class"])){verticalFill=true}var parts=widget.name.split("__");if(parts.length>=3&&parts[0]==="nrel"){relationTables[_this.props.mapPrefix+parts[1]]={fk:parts[2],sortcol:parts[3]||null,noreorder:parts[4]||false}}return verticalFill});_defineProperty(_this,"reformatLayout",function(layout,relationTables,fields,buttons,nrels,externalFields,widgets,counters){layout.item=MiscUtils.ensureArray(layout.item);layout.name=layout.name||":layout_"+counters.layout++;var verticalFill=false;layout.item.forEach(function(item){if(!item){return}else if(item.widget){verticalFill|=_this.reformatWidget(item.widget,relationTables,fields,buttons,nrels,externalFields,widgets,counters)}else if(item.spacer){item.spacer.property=MiscUtils.ensureArray(item.spacer.property).reduce(function(res,prop){return _objectSpread(_objectSpread({},res),{},_defineProperty({},prop.name,prop[Object.keys(prop).find(function(key){return key!=="name"})]))},{});if(item.spacer.property.orientation==="Qt::Vertical"){verticalFill=true}}else if(item.layout){verticalFill|=_this.reformatLayout(item.layout,relationTables,fields,buttons,nrels,externalFields,widgets,counters)}});layout.verticalFill=verticalFill;return verticalFill});_defineProperty(_this,"buildErrMsg",function(record){var message=record.error;var errorDetails=record.error_details||{};if(!isEmpty(errorDetails.geometry_errors)){message+=":\n";message+=errorDetails.geometry_errors.map(function(entry){return" - "+entry.reason+" at "+entry.location})}if(!isEmpty(errorDetails.data_errors)){message+=":\n - "+errorDetails.data_errors.join("\n - ")}if(!isEmpty(errorDetails.validation_errors)){message+=":\n - "+errorDetails.validation_errors.join("\n - ")}return message});_this.state=QtDesignerForm.defaultState;return _this}_inherits(QtDesignerForm,_React$Component);return _createClass(QtDesignerForm,[{key:"componentDidMount",value:function componentDidMount(){this.componentDidUpdate({})}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _prevProps$editConfig,_prevProps$feature,_this2=this;// Query form
28
+ if(this.props.editConfig.form!==((_prevProps$editConfig=prevProps.editConfig)===null||_prevProps$editConfig===void 0?void 0:_prevProps$editConfig.form)||this.props.feature.__version__!==((_prevProps$feature=prevProps.feature)===null||_prevProps$feature===void 0?void 0:_prevProps$feature.__version__)){this.setState(function(state){var _prevProps$editConfig2;return _objectSpread(_objectSpread({},QtDesignerForm.defaultState),{},{activetabs:_this2.props.editConfig.form===((_prevProps$editConfig2=prevProps.editConfig)===null||_prevProps$editConfig2===void 0?void 0:_prevProps$editConfig2.form)?state.activetabs:{}})});var url=MiscUtils.resolveAssetsPath(this.props.editConfig.form);url+=(url.includes("?")?"&":"?")+"lang="+this.props.locale;axios.get(url).then(function(response){_this2.parseForm(response.data)})["catch"](function(e){// eslint-disable-next-line
29
29
  console.log(e)})}// As soon as relation value is added, scroll to bottom of list
30
- if(this.state.relationAddPressed&&this.props.feature.relationValues!==prevProps.feature.relationValues){var relationWidget=this.state.relationAddPressed.parentNode.previousSibling;relationWidget.scrollTo(0,relationWidget.scrollHeight);this.setState({relationAddPressed:null})}}},{key:"componentWillUnmount",value:function componentWillUnmount(){KeyValCache.clear();ExpressionFeatureCache.clear()}},{key:"render",value:function render(){if(this.state.loading){return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-loading"},/*#__PURE__*/React.createElement(Spinner,null),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("qtdesignerform.loading")))}else if(this.state.formData){var root=this.state.formData.ui.widget;return/*#__PURE__*/React.createElement("div",{className:this.props.report?"qt-designer-report":"qt-designer-form"},this.renderLayout(root.layout,this.props.feature,this.props.editLayerId,this.props.updateField))}else{return null}}}])}(React.Component);_defineProperty(QtDesignerForm,"propTypes",{addRelationRecord:PropTypes.func,editConfigs:PropTypes.object,editLayerId:PropTypes.string,editRelationRecord:PropTypes.func,feature:PropTypes.object,fields:PropTypes.object,form:PropTypes.string,iface:PropTypes.object,locale:PropTypes.string,mapCrs:PropTypes.string,mapPrefix:PropTypes.string,readOnly:PropTypes.bool,removeRelationRecord:PropTypes.func,reorderRelationRecord:PropTypes.func,report:PropTypes.bool,setFormBusy:PropTypes.func,setRelationTables:PropTypes.func,switchEditContext:PropTypes.func,updateField:PropTypes.func,updateRelationField:PropTypes.func});_defineProperty(QtDesignerForm,"defaultState",{activetabs:{},formdata:null,loading:false,loadingReqId:null,relationAddPressed:null});export default connect(function(state){return{locale:state.locale.current}},{})(QtDesignerForm);
30
+ if(this.state.relationAddPressed&&this.props.feature.relationValues!==prevProps.feature.relationValues){var relationWidget=this.state.relationAddPressed.parentNode.previousSibling;relationWidget.scrollTo(0,relationWidget.scrollHeight);this.setState({relationAddPressed:null})}}},{key:"componentWillUnmount",value:function componentWillUnmount(){KeyValCache.clear();FeatureCache.clear()}},{key:"render",value:function render(){if(this.state.loading){return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-loading"},/*#__PURE__*/React.createElement(Spinner,null),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("qtdesignerform.loading")))}else if(this.state.formData){var root=this.state.formData.ui.widget;return/*#__PURE__*/React.createElement("div",{className:this.props.report?"qt-designer-report":"qt-designer-form"},this.renderLayout(root.layout,this.props.feature,this.props.editConfig,this.props.updateField))}else{return null}}}])}(React.Component);_defineProperty(QtDesignerForm,"propTypes",{addRelationRecord:PropTypes.func,editConfig:PropTypes.object,editConfigs:PropTypes.object,editLayerId:PropTypes.string,editRelationRecord:PropTypes.func,feature:PropTypes.object,iface:PropTypes.object,locale:PropTypes.string,mapCrs:PropTypes.string,mapPrefix:PropTypes.string,readOnly:PropTypes.bool,removeRelationRecord:PropTypes.func,reorderRelationRecord:PropTypes.func,report:PropTypes.bool,setFormBusy:PropTypes.func,setRelationTables:PropTypes.func,switchEditContext:PropTypes.func,updateField:PropTypes.func,updateRelationField:PropTypes.func});_defineProperty(QtDesignerForm,"defaultState",{activetabs:{},formdata:null,loading:false,loadingReqId:null,relationAddPressed:null});export default connect(function(state){return{locale:state.locale.current}},{})(QtDesignerForm);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qwc2",
3
- "version": "2025.07.22",
3
+ "version": "2025.07.23",
4
4
  "description": "QGIS Web Client",
5
5
  "author": "Sourcepole AG",
6
6
  "license": "BSD-2-Clause",
@@ -86,6 +86,7 @@
86
86
  "three": "^0.170.0",
87
87
  "three-csg-ts": "^3.2.0",
88
88
  "three.meshline": "^1.4.0",
89
+ "toposort": "^2.0.2",
89
90
  "url": "^0.11.4",
90
91
  "utif": "^3.1.0",
91
92
  "uuid": "^11.0.3"
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Тема",
31
31
  "AttributeTable": "Таблица на атрибутите",
32
32
  "AuthenticationLogin": "Вход",
33
- "AuthenticationLogout": "Излизане от системата",
33
+ "AuthenticationLogout": "Излизане от системата - {0}",
34
34
  "Cyclomedia": "Cyclomedia",
35
35
  "Draw3D": "Начертайте",
36
36
  "FeatureForm": "Формуляр за функция",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Tema",
31
31
  "AttributeTable": "Taula d'atributs",
32
32
  "AuthenticationLogin": "Inicio de sessió",
33
- "AuthenticationLogout": "Tancament de sessió",
33
+ "AuthenticationLogout": "Tancament de sessió - {0}",
34
34
  "Cyclomedia": "Visor Cyclomedia",
35
35
  "Draw3D": "Dibuixar",
36
36
  "FeatureForm": "Formulari d'element",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Téma",
31
31
  "AttributeTable": "Atributy",
32
32
  "AuthenticationLogin": "Přihlášení",
33
- "AuthenticationLogout": "Odhlášení",
33
+ "AuthenticationLogout": "Odhlášení - {0}",
34
34
  "Cyclomedia": "Cyclomedia",
35
35
  "Draw3D": "",
36
36
  "FeatureForm": "Editační formulář",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Themen",
31
31
  "AttributeTable": "Attributtabelle",
32
32
  "AuthenticationLogin": "Anmelden",
33
- "AuthenticationLogout": "Abmelden",
33
+ "AuthenticationLogout": "Abmelden - {0}",
34
34
  "Cyclomedia": "Cyclomedia",
35
35
  "Draw3D": "Zeichnen",
36
36
  "FeatureForm": "Objektformular",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Themen",
31
31
  "AttributeTable": "Attributtabelle",
32
32
  "AuthenticationLogin": "Anmelden",
33
- "AuthenticationLogout": "Abmelden",
33
+ "AuthenticationLogout": "Abmelden - {0}",
34
34
  "Cyclomedia": "Cyclomedia",
35
35
  "Draw3D": "Zeichnen",
36
36
  "FeatureForm": "Objektformular",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Theme",
31
31
  "AttributeTable": "Attribute Table",
32
32
  "AuthenticationLogin": "Login",
33
- "AuthenticationLogout": "Logout",
33
+ "AuthenticationLogout": "Logout - {0}",
34
34
  "Cyclomedia": "Cyclomedia",
35
35
  "Draw3D": "Draw",
36
36
  "FeatureForm": "Feature Form",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Tema",
31
31
  "AttributeTable": "Tabla de Atributos",
32
32
  "AuthenticationLogin": "Inicio de sesión",
33
- "AuthenticationLogout": "Cierre de sesión",
33
+ "AuthenticationLogout": "Cierre de sesión - {0}",
34
34
  "Cyclomedia": "Visor Cyclomedia",
35
35
  "Draw3D": "Dibujar",
36
36
  "FeatureForm": "Formulario de Elemento",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Teema",
31
31
  "AttributeTable": "",
32
32
  "AuthenticationLogin": "Kirjaudu",
33
- "AuthenticationLogout": "Kirjaudu ulos",
33
+ "AuthenticationLogout": "Kirjaudu ulos - {0}",
34
34
  "Cyclomedia": "",
35
35
  "Draw3D": "",
36
36
  "FeatureForm": "",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Thèmes",
31
31
  "AttributeTable": "Table d'attributs",
32
32
  "AuthenticationLogin": "Connexion",
33
- "AuthenticationLogout": "Déconnexion",
33
+ "AuthenticationLogout": "Déconnexion - {0}",
34
34
  "Cyclomedia": "Cyclomedia",
35
35
  "Draw3D": "Dessiner",
36
36
  "FeatureForm": "Formulaire d'objet",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Temi",
31
31
  "AttributeTable": "Tabella attributi",
32
32
  "AuthenticationLogin": "Accedi",
33
- "AuthenticationLogout": "Disconnetti",
33
+ "AuthenticationLogout": "Disconnetti - {0}",
34
34
  "Cyclomedia": "Cyclomedia",
35
35
  "Draw3D": "Disegnare",
36
36
  "FeatureForm": "Formulario oggetto",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "テーマ",
31
31
  "AttributeTable": "属性テーブル",
32
32
  "AuthenticationLogin": "ログイン",
33
- "AuthenticationLogout": "ログアウト",
33
+ "AuthenticationLogout": "ログアウト - {0}",
34
34
  "Cyclomedia": "Cyclomedia",
35
35
  "Draw3D": "作図",
36
36
  "FeatureForm": "地物フォーム",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Kaartselectie",
31
31
  "AttributeTable": "Attributentabel",
32
32
  "AuthenticationLogin": "Inloggen",
33
- "AuthenticationLogout": "Uitloggen",
33
+ "AuthenticationLogout": "Uitloggen - {0}",
34
34
  "Cyclomedia": "Cyclomedia",
35
35
  "Draw3D": "",
36
36
  "FeatureForm": "Objectgegevens",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Tema",
31
31
  "AttributeTable": "",
32
32
  "AuthenticationLogin": "Logg inn",
33
- "AuthenticationLogout": "Logg ut",
33
+ "AuthenticationLogout": "Logg ut - {0}",
34
34
  "Cyclomedia": "",
35
35
  "Draw3D": "",
36
36
  "FeatureForm": "",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Motyw",
31
31
  "AttributeTable": "",
32
32
  "AuthenticationLogin": "Zaloguj",
33
- "AuthenticationLogout": "Wyloguj",
33
+ "AuthenticationLogout": "Wyloguj - {0}",
34
34
  "Cyclomedia": "",
35
35
  "Draw3D": "",
36
36
  "FeatureForm": "",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Tema",
31
31
  "AttributeTable": "Tabela de atributos",
32
32
  "AuthenticationLogin": "Inicio da sessão",
33
- "AuthenticationLogout": "Fim da sessão",
33
+ "AuthenticationLogout": "Fim da sessão - {0}",
34
34
  "Cyclomedia": "Cyclomedia",
35
35
  "Draw3D": "",
36
36
  "FeatureForm": "Atributos da feição",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Tema",
31
31
  "AttributeTable": "Tabela de Atributos",
32
32
  "AuthenticationLogin": "Iniciar Sessão",
33
- "AuthenticationLogout": "Terminar Sessão",
33
+ "AuthenticationLogout": "Terminar Sessão - {0}",
34
34
  "Cyclomedia": "Cyclomedia",
35
35
  "Draw3D": "",
36
36
  "FeatureForm": "Formulário de Recurso",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Hărți tematice",
31
31
  "AttributeTable": "Tabela de atribute",
32
32
  "AuthenticationLogin": "Conectează-te",
33
- "AuthenticationLogout": "Deconectează-te",
33
+ "AuthenticationLogout": "Deconectează-te - {0}",
34
34
  "Cyclomedia": "Cyclomedia",
35
35
  "Draw3D": "",
36
36
  "FeatureForm": "Editare atribute",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Tema",
31
31
  "AttributeTable": "",
32
32
  "AuthenticationLogin": "Logga in",
33
- "AuthenticationLogout": "Logga ut",
33
+ "AuthenticationLogout": "Logga ut - {0}",
34
34
  "Cyclomedia": "",
35
35
  "Draw3D": "",
36
36
  "FeatureForm": "",
@@ -30,7 +30,7 @@
30
30
  "ThemeSwitcher": "Tema",
31
31
  "AttributeTable": "Öznitelik Tablosu",
32
32
  "AuthenticationLogin": "Giriş",
33
- "AuthenticationLogout": "Çıkış",
33
+ "AuthenticationLogout": "Çıkış - {0}",
34
34
  "Cyclomedia": "Siklomedya",
35
35
  "Draw3D": "Çizim",
36
36
  "FeatureForm": "Obje Formu",
@@ -81,15 +81,11 @@ var tol=10/dpi*0.0254*mapScale;var bbox=mapPos[0]-tol+","+(mapPos[1]-tol)+","+(m
81
81
  * @param tables Comma separated string of relation table names
82
82
  * @param editConfigs The theme editConfig block, containing all theme dataset edit configs
83
83
  * @param callback Callback invoked with the relation values, taking `{<tablename>: {<relation_values>}}` on success and `{}` on failure
84
- */getRelations:function getRelations(editConfig,featureId,mapCrs,tables,editConfigs,callback){var editServiceUrl=ConfigUtils.getConfigProp("editServiceUrl").replace(/\/$/,"");var req=editServiceUrl+"/"+editConfig.editDataset+"/"+featureId+"/relations";var params={tables:tables,crs:mapCrs};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){Promise.all(Object.entries(response.data).map(function(_ref){var _ref2=_slicedToArray(_ref,2),reldataset=_ref2[0],relvalues=_ref2[1];return new Promise(function(resolveTable){Promise.all(relvalues.features.map(function(feature){return new Promise(function(resolveFeature){var relEditConfig=Object.values(editConfigs).find(function(entry){return entry.editDataset===reldataset});computeExpressionFields(relEditConfig,feature,EditingInterface,mapCrs,resolveFeature)})})).then(function(newfeatures){return resolveTable([reldataset,_objectSpread(_objectSpread({},relvalues),{},{features:newfeatures})])})})})).then(function(entries){return callback(Object.fromEntries(entries))})})["catch"](function(){return callback({})})},/*
85
- keyvalues: <dataset>:<key_column>:<value_column>,<dataset>:<key_column>:<value_column>,...
86
- callback: function(result), result is a {"keyvalues": {"<dataset>": [{"key": <key>, "value": <value}, ...]}}
87
- filter: the filter expression as [[["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...]] (one filter expr per keyvalue entry), or null
88
- *//**
84
+ */getRelations:function getRelations(editConfig,featureId,mapCrs,tables,editConfigs,callback){var editServiceUrl=ConfigUtils.getConfigProp("editServiceUrl").replace(/\/$/,"");var req=editServiceUrl+"/"+editConfig.editDataset+"/"+featureId+"/relations";var params={tables:tables,crs:mapCrs};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){Promise.all(Object.entries(response.data).map(function(_ref){var _ref2=_slicedToArray(_ref,2),reldataset=_ref2[0],relvalues=_ref2[1];return new Promise(function(resolveTable){Promise.all(relvalues.features.map(function(feature){return new Promise(function(resolveFeature){var relEditConfig=Object.values(editConfigs).find(function(entry){return entry.editDataset===reldataset});computeExpressionFields(relEditConfig,feature,EditingInterface,mapCrs,resolveFeature)})})).then(function(newfeatures){return resolveTable([reldataset,_objectSpread(_objectSpread({},relvalues),{},{features:newfeatures})])})})})).then(function(entries){return callback(Object.fromEntries(entries))})})["catch"](function(){return callback({})})},/**
89
85
  * Query key-value-pairs of a key-value-relation
90
- * @param {*} keyvalues The keyval string `<keyvaldataset>:<keyfield>:<valuefield>`
91
- * @param {*} callback Callback invoked with the key-value pairs, taking `{keyvalues: {<keyvaldataset>: [{key: <key>, value: <value>}]}}` on success and `{}` on failure
92
- * @param {*} filter
86
+ * @param keyvalues The keyval string `<keyvaldataset>:<keyfield>:<valuefield>`
87
+ * @param callback Callback invoked with the key-value pairs, taking `{keyvalues: {<keyvaldataset>: [{key: <key>, value: <value>}]}}` on success and `{}` on failure
88
+ * @param filter An optional filter expression, as `[[["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...]]` (one filter expr per keyvalue entry)
93
89
  */getKeyValues:function getKeyValues(keyvalues,callback){var filter=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var editServiceUrl=ConfigUtils.getConfigProp("editServiceUrl").replace(/\/$/,"");var req=editServiceUrl+"/"+"keyvals?tables="+keyvalues;var params={filter:filter?JSON.stringify(filter):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){callback(response.data)})["catch"](function(){return callback({})})},/**
94
90
  * Resolve an attachment value to a full URL
95
91
  *
@@ -1,13 +1,17 @@
1
- var _ExpressionFeatureCache;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 _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 _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}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
+ var _FeatureCache,_KeyValCache;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 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 _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 _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}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
2
  * Copyright 2024 Sourcepole AG
3
3
  * All rights reserved.
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 nearley from"nearley";import StandardApp from"../components/StandardApp";import ConfigUtils from"./ConfigUtils";import LocaleUtils from"./LocaleUtils";import grammar from"./expr_grammar/grammar";export var ExpressionFeatureCache=/*#__PURE__*/_createClass(function ExpressionFeatureCache(){_classCallCheck(this,ExpressionFeatureCache)});_ExpressionFeatureCache=ExpressionFeatureCache;_defineProperty(ExpressionFeatureCache,"store",{});_defineProperty(ExpressionFeatureCache,"requests",new Set);_defineProperty(ExpressionFeatureCache,"get",function(editIface,layerName,mapCrs,attr,value,promises){var key=layerName+":"+attr+":"+value;if(key in _ExpressionFeatureCache.store){return _ExpressionFeatureCache.store[key]}else if(!_ExpressionFeatureCache.requests.has(key)){_ExpressionFeatureCache.requests.add(key);promises.push(new Promise(function(accept){var _StandardApp$store$ge,_StandardApp$store$ge2;var editConfig=(_StandardApp$store$ge=(_StandardApp$store$ge2=StandardApp.store.getState().theme.current.editConfig)===null||_StandardApp$store$ge2===void 0?void 0:_StandardApp$store$ge2[layerName])!==null&&_StandardApp$store$ge!==void 0?_StandardApp$store$ge:{};editIface.getFeatures(editConfig,mapCrs,function(result){if(_ExpressionFeatureCache.requests.has(key)){if(((result===null||result===void 0?void 0:result.features)||[]).length===1){_ExpressionFeatureCache.store[key]=result.features[0]}else{_ExpressionFeatureCache.store[key]=null}_ExpressionFeatureCache.requests["delete"](key)}accept()},null,[[attr,"=",value]])}))}return null});_defineProperty(ExpressionFeatureCache,"clear",function(){_ExpressionFeatureCache.store={};_ExpressionFeatureCache.requests=new Set});export function parseExpression(expr,feature,dataset,editIface,mapPrefix,mapCrs,reevaluateCallback){var asFilter=arguments.length>7&&arguments[7]!==undefined?arguments[7]:false;var reevaluate=arguments.length>8&&arguments[8]!==undefined?arguments[8]:false;var parser=new nearley.Parser(nearley.Grammar.fromCompiled(grammar));var promises=[];window.qwc2ExpressionParserContext={feature:feature,getFeature:function getFeature(layerName,attr,value){return ExpressionFeatureCache.get(editIface,layerName,mapCrs,attr,value,promises)},asFilter:asFilter,username:ConfigUtils.getConfigProp("username"),layer:dataset.startsWith(mapPrefix)?dataset.substr(mapPrefix.length):dataset,projection:mapCrs,mapPrefix:mapPrefix,lang:LocaleUtils.lang()};var result=null;try{parser.feed(expr.replace(/\n/," "));result=parser.results[0]}catch(e){/* eslint-disable-next-line */console.warn("Failed to evaluate expression "+expr.replace(/\n/," "))}delete window.qwc2ExpressionParserContext;if(promises.length>0){// Expression evaluation is incomplete due to pending feature requests, reevaluate when promises are resolved
8
- Promise.all(promises).then(function(){return parseExpression(expr,feature,dataset,editIface,mapPrefix,mapCrs,reevaluateCallback,asFilter,true)});return null}else{if(reevaluate){reevaluateCallback()}if(asFilter){result=[result]}return result}}export function parseExpressionsAsync(expressions,feature,dataset,editIface,mapPrefix,mapCrs,asFilter){var promises=[];return new Promise(function(resolve){window.qwc2ExpressionParserContext={feature:feature,getFeature:function getFeature(layerName,attr,value){return ExpressionFeatureCache.get(editIface,layerName,mapCrs,attr,value,promises)},asFilter:asFilter,username:ConfigUtils.getConfigProp("username"),layer:dataset.startsWith(mapPrefix)?dataset.substr(mapPrefix.length):dataset,projection:mapCrs,mapPrefix:mapPrefix,lang:LocaleUtils.lang()};var results=Object.entries(expressions).reduce(function(res,_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],expr=_ref2[1];var parser=new nearley.Parser(nearley.Grammar.fromCompiled(grammar));try{parser.feed(expr.replace(/\n/," "));return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,parser.results[0]))}catch(e){/* eslint-disable-next-line */console.warn("Failed to evaluate expression "+expr.replace(/\n/," "));return res}},{});delete window.qwc2ExpressionParserContext;if(promises.length>0){// Expression evaluation is incomplete due to pending feature requests, reevaluate when promises are resolved
9
- Promise.all(promises).then(parseExpressionsAsync(expressions,feature,dataset,editIface,mapPrefix,mapCrs,asFilter).then(resolve(results)))}else{resolve(results)}})}var FeatureTemplateFactories={};export function setFeatureTemplateFactory(dataset,factory){FeatureTemplateFactories[dataset]=factory}export function getFeatureTemplate(editConfig,feature,editIface,mapPrefix,mapCrs,callback){if(editConfig.editDataset in FeatureTemplateFactories){feature=FeatureTemplateFactories[editConfig.editDataset](feature)}// Apply default values
10
- var defaultFieldExpressions=editConfig.fields.reduce(function(res,field){if(field.defaultValue){return _objectSpread(_objectSpread({},res),{},_defineProperty({},field.id,field.defaultValue.replace(/^expr:/,"")))}return res},{});ExpressionFeatureCache.clear();parseExpressionsAsync(defaultFieldExpressions,feature,editConfig.editDataset,editIface,mapPrefix,mapCrs).then(function(result){// Adjust values based on field type
11
- editConfig.fields.forEach(function(field){if(field.id in result&&field.type==="date"){result[field.id]=result[field.id].split("T")[0]}});callback(_objectSpread(_objectSpread({},feature),{},{properties:_objectSpread(_objectSpread({},feature.properties),result)}))})}export function computeExpressionFields(editConfig,feature,editIface,mapCrs,callback){// Apply default values
12
- var fieldExpressions=editConfig.fields.reduce(function(res,field){if(field.expression){return _objectSpread(_objectSpread({},res),{},_defineProperty({},field.id,field.expression))}return res},{});ExpressionFeatureCache.clear();var mapPrefix=(editConfig.editDataset.match(/^[^.]+\./)||[""])[0];parseExpressionsAsync(fieldExpressions,feature,editConfig.editDataset,editIface,mapPrefix,mapCrs).then(function(result){// Adjust values based on field type
7
+ */import nearley from"nearley";import toposort from"toposort";import{v5 as uuidv5}from"uuid";import StandardApp from"../components/StandardApp";import ConfigUtils from"./ConfigUtils";import LocaleUtils from"./LocaleUtils";import grammar from"./expr_grammar/grammar";var UUID_NS="5ae5531d-8e21-4456-b45d-77e9840a5bb7";export var FeatureCache=/*#__PURE__*/_createClass(function FeatureCache(){_classCallCheck(this,FeatureCache)});_FeatureCache=FeatureCache;_defineProperty(FeatureCache,"store",{});_defineProperty(FeatureCache,"requestPromises",{});_defineProperty(FeatureCache,"get",function(editIface,layerName,mapCrs,filterExpr){var key=layerName+uuidv5(JSON.stringify(filterExpr!==null&&filterExpr!==void 0?filterExpr:null),UUID_NS);if(key in _FeatureCache.store){return new Promise(function(resolve){return resolve(_FeatureCache.store[key])})}else if(key in _FeatureCache.requestPromises){return _FeatureCache.requestPromises[key]}else{_FeatureCache.requestPromises[key]=new Promise(function(resolve){var _StandardApp$store$ge,_StandardApp$store$ge2;var editConfig=(_StandardApp$store$ge=(_StandardApp$store$ge2=StandardApp.store.getState().theme.current.editConfig)===null||_StandardApp$store$ge2===void 0?void 0:_StandardApp$store$ge2[layerName])!==null&&_StandardApp$store$ge!==void 0?_StandardApp$store$ge:{};editIface.getFeatures(editConfig,mapCrs,function(result){if(key in _FeatureCache.requestPromises){if(((result===null||result===void 0?void 0:result.features)||[]).length===1){_FeatureCache.store[key]=result.features[0]}else{_FeatureCache.store[key]=null}if(key in _FeatureCache.requestPromises){resolve(_FeatureCache.store[key]);delete _FeatureCache.requestPromises[key]}}else{resolve(null)}},null,filterExpr)});return _FeatureCache.requestPromises[key]}});_defineProperty(FeatureCache,"getSync",function(editIface,layerName,mapCrs,filterExpr){var promises=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];var key=layerName+uuidv5(JSON.stringify(filterExpr!==null&&filterExpr!==void 0?filterExpr:null),UUID_NS);if(key in _FeatureCache.store){return _FeatureCache.store[key]}else{promises.push(_FeatureCache.get(editIface,layerName,mapCrs,filterExpr));return null}});_defineProperty(FeatureCache,"clear",function(){_FeatureCache.store={};_FeatureCache.requests=new Set});export var KeyValCache=/*#__PURE__*/_createClass(function KeyValCache(){_classCallCheck(this,KeyValCache)});_KeyValCache=KeyValCache;_defineProperty(KeyValCache,"store",{});_defineProperty(KeyValCache,"requestPromises",{});_defineProperty(KeyValCache,"get",function(editIface,keyvalrel,filterExpr){var key=keyvalrel+uuidv5(JSON.stringify(filterExpr!==null&&filterExpr!==void 0?filterExpr:null),UUID_NS);if(key in _KeyValCache.store){return new Promise(function(resolve){return resolve(_KeyValCache.store[key])})}else if(key in _KeyValCache.requestPromises){return _KeyValCache.requestPromises[key]}else{_KeyValCache.requestPromises[key]=new Promise(function(resolve){editIface.getKeyValues(keyvalrel,function(result){if(key in _KeyValCache.requestPromises){var dataSet=keyvalrel.split(":")[0];if(result.keyvalues&&result.keyvalues[dataSet]){var values=result.keyvalues[dataSet].map(function(entry){return{value:entry.key,label:entry.value}});_KeyValCache.store[key]=values}else{_KeyValCache.store[key]=[]}resolve(_KeyValCache.store[key]);delete _KeyValCache.requestPromises[key]}else{resolve([])}},filterExpr?[filterExpr]:null)});return _KeyValCache.requestPromises[key]}});_defineProperty(KeyValCache,"getSync",function(editIface,keyvalrel,filterExpr){var promises=arguments.length>3&&arguments[3]!==undefined?arguments[3]:[];var key=keyvalrel+uuidv5(JSON.stringify(filterExpr!==null&&filterExpr!==void 0?filterExpr:null),UUID_NS);if(key in _KeyValCache.store){return _KeyValCache.store[key]}else{promises.push(_KeyValCache.get(editIface,keyvalrel,filterExpr));return[]}});_defineProperty(KeyValCache,"clear",function(){_KeyValCache.store={};_KeyValCache.requestPromises={}});function _representValue(attr,editConfig,editIface,promises){var _window$qwc2Expressio,_field$constraints;// Resolve kvrel
8
+ var field=(editConfig.fields||[]).find(function(f){return f.id===attr});var value=(_window$qwc2Expressio=window.qwc2ExpressionParserContext.feature)===null||_window$qwc2Expressio===void 0||(_window$qwc2Expressio=_window$qwc2Expressio.properties)===null||_window$qwc2Expressio===void 0?void 0:_window$qwc2Expressio[attr];var keyvalrel=field===null||field===void 0||(_field$constraints=field.constraints)===null||_field$constraints===void 0?void 0:_field$constraints.keyvalrel;if(!keyvalrel){return value}var keyvals=KeyValCache.getSync(editIface,keyvalrel,null,promises).reduce(function(res,entry){return _objectSpread(_objectSpread({},res),{},_defineProperty({},entry.value,entry.label))},{});if(field.constraints.allowMulti){return"{"+_toConsumableArray(new Set(JSON.parse("["+value.slice(1,-1)+"]"))).map(function(x){var _keyvals$x;return(_keyvals$x=keyvals[x])!==null&&_keyvals$x!==void 0?_keyvals$x:x}).join(", ")+"}"}else{var _keyvals$value;return(_keyvals$value=keyvals[value])!==null&&_keyvals$value!==void 0?_keyvals$value:value}}export function parseExpression(expr,feature,editConfig,editIface,mapPrefix,mapCrs,reevaluateCallback){var asFilter=arguments.length>7&&arguments[7]!==undefined?arguments[7]:false;var reevaluate=arguments.length>8&&arguments[8]!==undefined?arguments[8]:false;var parser=new nearley.Parser(nearley.Grammar.fromCompiled(grammar));var promises=[];window.qwc2ExpressionParserContext={feature:feature,getFeature:function getFeature(layerName,attr,value){return FeatureCache.getSync(editIface,layerName,mapCrs,[[attr,"=",value]],promises)},representValue:function representValue(attr){return _representValue(attr,editConfig,editIface,promises)},asFilter:asFilter,username:ConfigUtils.getConfigProp("username"),layer:editConfig.layerName,projection:mapCrs,mapPrefix:mapPrefix,lang:LocaleUtils.lang()};var result=null;try{parser.feed(expr.replace(/\n/," "));result=parser.results[0]}catch(e){/* eslint-disable-next-line */console.warn("Failed to evaluate expression "+expr.replace(/\n/," "))}delete window.qwc2ExpressionParserContext;if(promises.length>0){// Expression evaluation is incomplete due to pending feature requests, reevaluate when promises are resolved
9
+ Promise.all(promises).then(function(){return parseExpression(expr,feature,editConfig,editIface,mapPrefix,mapCrs,reevaluateCallback,asFilter,true)});return null}else{if(reevaluate){reevaluateCallback()}if(asFilter){result=[result]}return result}}export function parseExpressionsAsync(fieldExpressions,feature,editConfig,editIface,mapPrefix,mapCrs,asFilter){var promises=[];return new Promise(function(resolve){var newfeature=_objectSpread(_objectSpread({},feature),{},{properties:_objectSpread({},feature.properties)});window.qwc2ExpressionParserContext={feature:newfeature,getFeature:function getFeature(layerName,attr,value){return FeatureCache.getSync(editIface,layerName,mapCrs,[[attr,"=",value]],promises)},representValue:function representValue(attr){return _representValue(attr,editConfig,editIface,promises)},asFilter:asFilter,username:ConfigUtils.getConfigProp("username"),layer:editConfig.layerName,projection:mapCrs,mapPrefix:mapPrefix,lang:LocaleUtils.lang()};var results=fieldExpressions.reduce(function(res,_ref){var field=_ref.field,expression=_ref.expression;var parser=new nearley.Parser(nearley.Grammar.fromCompiled(grammar));try{parser.feed(expression.replace(/\n/," "));// NOTE: include intermediate results in next context feature
10
+ newfeature.properties[field]=parser.results[0];return _objectSpread(_objectSpread({},res),{},_defineProperty({},field,parser.results[0]))}catch(e){/* eslint-disable-next-line */console.warn("Failed to evaluate expression "+expr.replace(/\n/," "));return res}},{});delete window.qwc2ExpressionParserContext;if(promises.length>0){// Expression evaluation is incomplete due to pending feature requests, reevaluate when promises are resolved
11
+ Promise.all(promises).then(function(){parseExpressionsAsync(fieldExpressions,newfeature,editConfig,editIface,mapPrefix,mapCrs,asFilter).then(function(results2){return resolve(results2)})})}else{resolve(results)}})}var FeatureTemplateFactories={};export function setFeatureTemplateFactory(dataset,factory){FeatureTemplateFactories[dataset]=factory}export function getFeatureTemplate(editConfig,feature,editIface,mapPrefix,mapCrs,callback){if(editConfig.editDataset in FeatureTemplateFactories){feature=FeatureTemplateFactories[editConfig.editDataset](feature)}// Apply default values
12
+ var defaultFieldExpressions=editConfig.fields.reduce(function(res,field){if(field.defaultValue){return[].concat(_toConsumableArray(res),[{field:field.id,expression:field.defaultValue.replace(/^expr:/,"")}])}return res},[]);FeatureCache.clear();parseExpressionsAsync(defaultFieldExpressions,feature,editConfig,editIface,mapPrefix,mapCrs).then(function(result){// Adjust values based on field type
13
+ editConfig.fields.forEach(function(field){if(field.id in result&&field.type==="date"){result[field.id]=result[field.id].split("T")[0]}});callback(_objectSpread(_objectSpread({},feature),{},{properties:_objectSpread(_objectSpread({},feature.properties),result)}))})}export function computeExpressionFields(editConfig,feature,editIface,mapCrs,callback){// Collect field expressions and dependencies
14
+ var dependencies={};var fieldExpressions=editConfig.fields.reduce(function(res,field){if(field.expression){var matches=_toConsumableArray(field.expression.matchAll(/"([^"]+)"/g)).map(function(m){return m[1]});dependencies[field.id]=_toConsumableArray(new Set(matches));return _objectSpread(_objectSpread({},res),{},_defineProperty({},field.id,field.expression))}return res},{});// Topologically sort expressions so that fields depending on other fields are evaluated later
15
+ var edges=[];Object.entries(dependencies).forEach(function(_ref2){var _ref3=_slicedToArray(_ref2,2),parent=_ref3[0],children=_ref3[1];children.forEach(function(child){return edges.push([child,parent])})});try{var sortededges=toposort(edges);fieldExpressions=sortededges.reduce(function(res,field){if(field in fieldExpressions){return[].concat(_toConsumableArray(res),[{field:field,expression:fieldExpressions[field]}])}else{return res}},[])}catch(e){/* eslint-disable-next-line */console.warn("Failed to sort expressions, they probably contain cyclic dependencies");fieldExpressions=Object.entries(fieldExpressions).map(function(res,_ref4){var _ref5=_slicedToArray(_ref4,2),field=_ref5[0],expression=_ref5[1];return[].concat(_toConsumableArray(res),[{field:field,expression:expression}])},{})}// Evaluate expressions
16
+ FeatureCache.clear();var mapPrefix=(editConfig.editDataset.match(/^[^.]+\./)||[""])[0];parseExpressionsAsync(fieldExpressions,feature,editConfig,editIface,mapPrefix,mapCrs).then(function(result){// Adjust values based on field type
13
17
  editConfig.fields.forEach(function(field){if(field.id in result&&field.type==="date"){result[field.id]=result[field.id].split("T")[0]}});callback(_objectSpread(_objectSpread({},feature),{},{properties:_objectSpread(_objectSpread({},feature.properties),result)}))})}
@@ -1,3 +1,3 @@
1
1
  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 _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)}// Generated automatically by nearley, version 2.20.1
2
2
  // http://github.com/Hardmath123/nearley
3
- (function(){function id(x){return x[0]}if(typeof window==="undefined"){window=global}function asFilter(d){return window.qwc2ExpressionParserContext.asFilter&&["string","object"].includes(_typeof(d[0]))}function generateUUID(){var d=new Date().getTime();var d2=typeof performance!=="undefined"&&performance.now&&performance.now()*1000||0;var result="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(c){var r=Math.random()*16;if(d>0){r=(d+r)%16|0;d=Math.floor(d/16)}else{r=(d2+r)%16|0;d2=Math.floor(d2/16)}return(c==="x"?r:r&3|8).toString(16)});return"{"+result+"}"}var grammar={Lexer:undefined,ParserRules:[{"name":"dqstring$ebnf$1","symbols":[]},{"name":"dqstring$ebnf$1","symbols":["dqstring$ebnf$1","dstrchar"],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"dqstring","symbols":[{"literal":"\""},"dqstring$ebnf$1",{"literal":"\""}],"postprocess":function postprocess(d){return d[1].join("")}},{"name":"sqstring$ebnf$1","symbols":[]},{"name":"sqstring$ebnf$1","symbols":["sqstring$ebnf$1","sstrchar"],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"sqstring","symbols":[{"literal":"'"},"sqstring$ebnf$1",{"literal":"'"}],"postprocess":function postprocess(d){return d[1].join("")}},{"name":"btstring$ebnf$1","symbols":[]},{"name":"btstring$ebnf$1","symbols":["btstring$ebnf$1",/[^`]/],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"btstring","symbols":[{"literal":"`"},"btstring$ebnf$1",{"literal":"`"}],"postprocess":function postprocess(d){return d[1].join("")}},{"name":"dstrchar","symbols":[/[^\\"\n]/],"postprocess":id},{"name":"dstrchar","symbols":[{"literal":"\\"},"strescape"],"postprocess":function postprocess(d){return JSON.parse("\""+d.join("")+"\"")}},{"name":"sstrchar","symbols":[/[^\\'\n]/],"postprocess":id},{"name":"sstrchar","symbols":[{"literal":"\\"},"strescape"],"postprocess":function postprocess(d){return JSON.parse("\""+d.join("")+"\"")}},{"name":"sstrchar$string$1","symbols":[{"literal":"\\"},{"literal":"'"}],"postprocess":function joiner(d){return d.join("")}},{"name":"sstrchar","symbols":["sstrchar$string$1"],"postprocess":function postprocess(d){return"'"}},{"name":"strescape","symbols":[/["\\/bfnrt]/],"postprocess":id},{"name":"strescape","symbols":[{"literal":"u"},/[a-fA-F0-9]/,/[a-fA-F0-9]/,/[a-fA-F0-9]/,/[a-fA-F0-9]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"main","symbols":["_","P0","_"],"postprocess":function postprocess(d){return d[1]}},{"name":"P0$subexpression$1","symbols":[/[oO]/,/[rR]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P0","symbols":["P0","_","P0$subexpression$1","_","P1"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]||d[4]}},{"name":"P0","symbols":["P1"],"postprocess":id},{"name":"P1$subexpression$1","symbols":[/[aA]/,/[nN]/,/[dD]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P1","symbols":["P1","_","P1$subexpression$1","_","P2"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]&&d[4]}},{"name":"P1","symbols":["P2"],"postprocess":id},{"name":"P2","symbols":["P2","_",{"literal":"<"},"_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]<d[4]}},{"name":"P2","symbols":["P2","_",{"literal":">"},"_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]>d[4]}},{"name":"P2$string$1","symbols":[{"literal":">"},{"literal":"="}],"postprocess":function joiner(d){return d.join("")}},{"name":"P2","symbols":["P2","_","P2$string$1","_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]>=d[4]}},{"name":"P2$string$2","symbols":[{"literal":"<"},{"literal":"="}],"postprocess":function joiner(d){return d.join("")}},{"name":"P2","symbols":["P2","_","P2$string$2","_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]<=d[4]}},{"name":"P2","symbols":["P2","_",{"literal":"="},"_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]==d[4]}},{"name":"P2$string$3","symbols":[{"literal":"<"},{"literal":">"}],"postprocess":function joiner(d){return d.join("")}},{"name":"P2","symbols":["P2","_","P2$string$3","_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],"!=",d[4]]:d[0]!=d[4]}},{"name":"P2","symbols":["P3"],"postprocess":id},{"name":"P3","symbols":["P3","_",{"literal":"+"},"_","P4"],"postprocess":function postprocess(d){return d[0]+d[4]}},{"name":"P3","symbols":["P3","_",{"literal":"-"},"_","P4"],"postprocess":function postprocess(d){return d[0]-d[4]}},{"name":"P3","symbols":["P4"],"postprocess":id},{"name":"P4","symbols":["P4","_",{"literal":"*"},"_","P5"],"postprocess":function postprocess(d){return d[0]*d[4]}},{"name":"P4","symbols":["P4","_",{"literal":"/"},"_","P5"],"postprocess":function postprocess(d){return d[0]/d[4]}},{"name":"P4","symbols":["P5"],"postprocess":id},{"name":"P5","symbols":["P6","_",{"literal":"^"},"_","P5"],"postprocess":function postprocess(d){return Math.pow(d[0],d[4])}},{"name":"P5$subexpression$1","symbols":[/[iI]/,/[sS]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P5","symbols":["P5","__","P5$subexpression$1","__","P6"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],"=",d[4]]:d[0]===d[4]}},{"name":"P5$subexpression$2","symbols":[/[iI]/,/[sS]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P5$subexpression$3","symbols":[/[nN]/,/[oO]/,/[tT]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P5","symbols":["P5","__","P5$subexpression$2","__","P5$subexpression$3","__","P6"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],"!=",d[6]]:d[0]!==d[6]}},{"name":"P5","symbols":["P6"],"postprocess":id},{"name":"P6","symbols":[{"literal":"-"},"_","P6"],"postprocess":function postprocess(d){return-d[2]}},{"name":"P6","symbols":[{"literal":"+"},"_","P6"],"postprocess":function postprocess(d){return d[2]}},{"name":"P6","symbols":[{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return d[2]}},{"name":"P6","symbols":["N"],"postprocess":id},{"name":"N","symbols":["float"],"postprocess":id},{"name":"N","symbols":["sqstring"],"postprocess":id},{"name":"N","symbols":["dqstring"],"postprocess":function postprocess(d){var _window$qwc2Expressio,_window$qwc2Expressio2;return asFilter(d)?d[0]:(_window$qwc2Expressio=(_window$qwc2Expressio2=window.qwc2ExpressionParserContext.feature.properties)===null||_window$qwc2Expressio2===void 0?void 0:_window$qwc2Expressio2[d[0]])!==null&&_window$qwc2Expressio!==void 0?_window$qwc2Expressio:null}},{"name":"N$string$1","symbols":[{"literal":"u"},{"literal":"u"},{"literal":"i"},{"literal":"d"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$1","_",{"literal":"("},"_",{"literal":")"}],"postprocess":function postprocess(d){return generateUUID()}},{"name":"N$string$2","symbols":[{"literal":"n"},{"literal":"o"},{"literal":"w"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$2","_",{"literal":"("},"_",{"literal":")"}],"postprocess":function postprocess(d){return new Date().toISOString()}},{"name":"N$string$3","symbols":[{"literal":"s"},{"literal":"i"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$3","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.sin(d[4])}},{"name":"N$string$4","symbols":[{"literal":"c"},{"literal":"o"},{"literal":"s"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$4","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.cos(d[4])}},{"name":"N$string$5","symbols":[{"literal":"t"},{"literal":"a"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$5","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.tan(d[4])}},{"name":"N$string$6","symbols":[{"literal":"a"},{"literal":"s"},{"literal":"i"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$6","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.asin(d[4])}},{"name":"N$string$7","symbols":[{"literal":"a"},{"literal":"c"},{"literal":"o"},{"literal":"s"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$7","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.acos(d[4])}},{"name":"N$string$8","symbols":[{"literal":"a"},{"literal":"t"},{"literal":"a"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$8","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.atan(d[4])}},{"name":"N$string$9","symbols":[{"literal":"s"},{"literal":"q"},{"literal":"r"},{"literal":"t"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$9","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.sqrt(d[4])}},{"name":"N$string$10","symbols":[{"literal":"l"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$10","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.log(d[4])}},{"name":"N$string$11","symbols":[{"literal":"a"},{"literal":"t"},{"literal":"a"},{"literal":"n"},{"literal":"2"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$11","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.atan2(d[4],d[8])}},{"name":"N$string$12","symbols":[{"literal":"p"},{"literal":"o"},{"literal":"w"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$12","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.pow(d[4],d[8])}},{"name":"N$string$13","symbols":[{"literal":"C"},{"literal":"A"},{"literal":"S"},{"literal":"E"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N$string$14","symbols":[{"literal":"E"},{"literal":"L"},{"literal":"S"},{"literal":"E"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N$string$15","symbols":[{"literal":"E"},{"literal":"N"},{"literal":"D"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$13","_","when_args","_","N$string$14","_","P0","_","N$string$15"],"postprocess":function postprocess(d){return d[2]!==undefined?d[2]:d[6]}},{"name":"N$string$16","symbols":[{"literal":"c"},{"literal":"o"},{"literal":"a"},{"literal":"l"},{"literal":"e"},{"literal":"s"},{"literal":"c"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$16","_",{"literal":"("},"_","var_args","_",{"literal":")"}],"postprocess":function postprocess(d){var _d$4$find;return(_d$4$find=d[4].find(function(x){return x!==null}))!==null&&_d$4$find!==void 0?_d$4$find:null}},{"name":"N$string$17","symbols":[{"literal":"i"},{"literal":"f"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$17","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return d[4]?d[8]:d[12]}},{"name":"N$string$18","symbols":[{"literal":"n"},{"literal":"u"},{"literal":"l"},{"literal":"l"},{"literal":"i"},{"literal":"f"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$18","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return d[4]===d[8]?null:d[4]}},{"name":"N$string$19","symbols":[{"literal":"r"},{"literal":"e"},{"literal":"g"},{"literal":"e"},{"literal":"x"},{"literal":"p"},{"literal":"_"},{"literal":"m"},{"literal":"a"},{"literal":"t"},{"literal":"c"},{"literal":"h"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$19","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return d[4].search(new RegExp(d[8]))+1}},{"name":"N$string$20","symbols":[{"literal":"a"},{"literal":"t"},{"literal":"t"},{"literal":"r"},{"literal":"i"},{"literal":"b"},{"literal":"u"},{"literal":"t"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$20","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){var _window$qwc2Expressio3,_window$qwc2Expressio4;return(_window$qwc2Expressio3=(_window$qwc2Expressio4=window.qwc2ExpressionParserContext.feature.properties)===null||_window$qwc2Expressio4===void 0?void 0:_window$qwc2Expressio4[d[4]])!==null&&_window$qwc2Expressio3!==void 0?_window$qwc2Expressio3:null}},{"name":"N$string$21","symbols":[{"literal":"c"},{"literal":"u"},{"literal":"r"},{"literal":"r"},{"literal":"e"},{"literal":"n"},{"literal":"t"},{"literal":"_"},{"literal":"v"},{"literal":"a"},{"literal":"l"},{"literal":"u"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$21","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){var _window$qwc2Expressio5,_window$qwc2Expressio6;return(_window$qwc2Expressio5=(_window$qwc2Expressio6=window.qwc2ExpressionParserContext.feature.properties)===null||_window$qwc2Expressio6===void 0?void 0:_window$qwc2Expressio6[d[4]])!==null&&_window$qwc2Expressio5!==void 0?_window$qwc2Expressio5:null}},{"name":"N$string$22","symbols":[{"literal":"a"},{"literal":"t"},{"literal":"t"},{"literal":"r"},{"literal":"i"},{"literal":"b"},{"literal":"u"},{"literal":"t"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$22","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){var _d$4$properties$d$,_d$;return(_d$4$properties$d$=(_d$=d[4])===null||_d$===void 0||(_d$=_d$.properties)===null||_d$===void 0?void 0:_d$[d[8]])!==null&&_d$4$properties$d$!==void 0?_d$4$properties$d$:null}},{"name":"N$string$23","symbols":[{"literal":"g"},{"literal":"e"},{"literal":"t"},{"literal":"_"},{"literal":"f"},{"literal":"e"},{"literal":"a"},{"literal":"t"},{"literal":"u"},{"literal":"r"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$23","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.getFeature(d[4],d[8],d[12])}},{"name":"N$string$24","symbols":[{"literal":"g"},{"literal":"e"},{"literal":"t"},{"literal":"_"},{"literal":"f"},{"literal":"e"},{"literal":"a"},{"literal":"t"},{"literal":"u"},{"literal":"r"},{"literal":"e"},{"literal":"_"},{"literal":"b"},{"literal":"y"},{"literal":"_"},{"literal":"i"},{"literal":"d"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$24","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.getFeature(d[4],"id",d[8])}},{"name":"N$subexpression$1","symbols":[/[pP]/,/[iI]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$1"],"postprocess":function postprocess(d){return Math.PI}},{"name":"N$subexpression$2","symbols":[/[eE]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$2"],"postprocess":function postprocess(d){return Math.E}},{"name":"N$subexpression$3","symbols":[/[nN]/,/[uU]/,/[lL]/,/[lL]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$3"],"postprocess":function postprocess(d){return null}},{"name":"N$subexpression$4","symbols":[/[fF]/,/[aA]/,/[lL]/,/[sS]/,/[eE]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$4"],"postprocess":function postprocess(d){return false}},{"name":"N$subexpression$5","symbols":[/[tT]/,/[rR]/,/[uU]/,/[eE]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$5"],"postprocess":function postprocess(d){return true}},{"name":"N$string$25","symbols":[{"literal":"@"},{"literal":"f"},{"literal":"e"},{"literal":"a"},{"literal":"t"},{"literal":"u"},{"literal":"r"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$25"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.feature}},{"name":"N$string$26","symbols":[{"literal":"@"},{"literal":"g"},{"literal":"e"},{"literal":"o"},{"literal":"m"},{"literal":"e"},{"literal":"t"},{"literal":"r"},{"literal":"y"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$26"],"postprocess":function postprocess(d){var _window$qwc2Expressio7;return(_window$qwc2Expressio7=window.qwc2ExpressionParserContext.feature)===null||_window$qwc2Expressio7===void 0?void 0:_window$qwc2Expressio7.geometry}},{"name":"N$string$27","symbols":[{"literal":"@"},{"literal":"i"},{"literal":"d"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$27"],"postprocess":function postprocess(d){var _window$qwc2Expressio8;return(_window$qwc2Expressio8=window.qwc2ExpressionParserContext.feature)===null||_window$qwc2Expressio8===void 0?void 0:_window$qwc2Expressio8.id}},{"name":"N$string$28","symbols":[{"literal":"@"},{"literal":"l"},{"literal":"a"},{"literal":"y"},{"literal":"e"},{"literal":"r"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$28"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.layer}},{"name":"N$string$29","symbols":[{"literal":"@"},{"literal":"l"},{"literal":"a"},{"literal":"y"},{"literal":"e"},{"literal":"r"},{"literal":"_"},{"literal":"n"},{"literal":"a"},{"literal":"m"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$29"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.layer}},{"name":"N$string$30","symbols":[{"literal":"@"},{"literal":"l"},{"literal":"a"},{"literal":"y"},{"literal":"e"},{"literal":"r"},{"literal":"_"},{"literal":"c"},{"literal":"r"},{"literal":"s"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$30"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.projection}},{"name":"N$string$31","symbols":[{"literal":"@"},{"literal":"p"},{"literal":"r"},{"literal":"o"},{"literal":"j"},{"literal":"e"},{"literal":"c"},{"literal":"t"},{"literal":"_"},{"literal":"b"},{"literal":"a"},{"literal":"s"},{"literal":"e"},{"literal":"n"},{"literal":"a"},{"literal":"m"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$31"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.mapPrefix}},{"name":"N$string$32","symbols":[{"literal":"@"},{"literal":"p"},{"literal":"r"},{"literal":"o"},{"literal":"j"},{"literal":"e"},{"literal":"c"},{"literal":"t"},{"literal":"_"},{"literal":"c"},{"literal":"r"},{"literal":"s"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$32"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.projection}},{"name":"N$string$33","symbols":[{"literal":"@"},{"literal":"q"},{"literal":"g"},{"literal":"i"},{"literal":"s"},{"literal":"_"},{"literal":"l"},{"literal":"o"},{"literal":"c"},{"literal":"a"},{"literal":"l"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$33"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.lang}},{"name":"N$string$34","symbols":[{"literal":"@"},{"literal":"u"},{"literal":"s"},{"literal":"e"},{"literal":"r"},{"literal":"_"},{"literal":"a"},{"literal":"c"},{"literal":"c"},{"literal":"o"},{"literal":"u"},{"literal":"n"},{"literal":"t"},{"literal":"_"},{"literal":"n"},{"literal":"a"},{"literal":"m"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$34"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.username}},{"name":"N$string$35","symbols":[{"literal":"@"},{"literal":"c"},{"literal":"l"},{"literal":"o"},{"literal":"u"},{"literal":"d"},{"literal":"_"},{"literal":"u"},{"literal":"s"},{"literal":"e"},{"literal":"r"},{"literal":"n"},{"literal":"a"},{"literal":"m"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$35"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.username}},{"name":"var_args","symbols":["P0"],"postprocess":function postprocess(d){return[d[0]]}},{"name":"var_args","symbols":["var_args","_",{"literal":","},"_","P0"],"postprocess":function postprocess(d){return[].concat(_toConsumableArray(d[0]),[d[4]])}},{"name":"when_args$string$1","symbols":[{"literal":"W"},{"literal":"H"},{"literal":"E"},{"literal":"N"}],"postprocess":function joiner(d){return d.join("")}},{"name":"when_args$string$2","symbols":[{"literal":"T"},{"literal":"H"},{"literal":"E"},{"literal":"N"}],"postprocess":function joiner(d){return d.join("")}},{"name":"when_args","symbols":["when_args$string$1","_","P0","_","when_args$string$2","_","P0"],"postprocess":function postprocess(d){return d[2]?d[6]:undefined}},{"name":"when_args$string$3","symbols":[{"literal":"W"},{"literal":"H"},{"literal":"E"},{"literal":"N"}],"postprocess":function joiner(d){return d.join("")}},{"name":"when_args$string$4","symbols":[{"literal":"T"},{"literal":"H"},{"literal":"E"},{"literal":"N"}],"postprocess":function joiner(d){return d.join("")}},{"name":"when_args","symbols":["when_args","_","when_args$string$3","_","P0","_","when_args$string$4","_","P0"],"postprocess":function postprocess(d){return d[0]!==undefined?d[0]:d[4]?d[8]:undefined}},{"name":"float","symbols":["int",{"literal":"."},"int"],"postprocess":function postprocess(d){return parseFloat(d[0]+d[1]+d[2])}},{"name":"float","symbols":["int"],"postprocess":function postprocess(d){return parseInt(d[0])}},{"name":"int$ebnf$1","symbols":[/[0-9]/]},{"name":"int$ebnf$1","symbols":["int$ebnf$1",/[0-9]/],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"int","symbols":["int$ebnf$1"],"postprocess":function postprocess(d){return d[0].join("")}},{"name":"_$ebnf$1","symbols":[]},{"name":"_$ebnf$1","symbols":["_$ebnf$1",/[\s]/],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"_","symbols":["_$ebnf$1"],"postprocess":function postprocess(d){return null}},{"name":"__$ebnf$1","symbols":[/[\s]/]},{"name":"__$ebnf$1","symbols":["__$ebnf$1",/[\s]/],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"__","symbols":["__$ebnf$1"],"postprocess":function postprocess(d){return null}}],ParserStart:"main"};if(typeof module!=="undefined"&&typeof module.exports!=="undefined"){module.exports=grammar}else{window.grammar=grammar}})();
3
+ (function(){function id(x){return x[0]}if(typeof window==="undefined"){window=global}function asFilter(d){return window.qwc2ExpressionParserContext.asFilter&&["string","object"].includes(_typeof(d[0]))}function generateUUID(){var d=new Date().getTime();var d2=typeof performance!=="undefined"&&performance.now&&performance.now()*1000||0;var result="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(c){var r=Math.random()*16;if(d>0){r=(d+r)%16|0;d=Math.floor(d/16)}else{r=(d2+r)%16|0;d2=Math.floor(d2/16)}return(c==="x"?r:r&3|8).toString(16)});return"{"+result+"}"}var grammar={Lexer:undefined,ParserRules:[{"name":"dqstring$ebnf$1","symbols":[]},{"name":"dqstring$ebnf$1","symbols":["dqstring$ebnf$1","dstrchar"],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"dqstring","symbols":[{"literal":"\""},"dqstring$ebnf$1",{"literal":"\""}],"postprocess":function postprocess(d){return d[1].join("")}},{"name":"sqstring$ebnf$1","symbols":[]},{"name":"sqstring$ebnf$1","symbols":["sqstring$ebnf$1","sstrchar"],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"sqstring","symbols":[{"literal":"'"},"sqstring$ebnf$1",{"literal":"'"}],"postprocess":function postprocess(d){return d[1].join("")}},{"name":"btstring$ebnf$1","symbols":[]},{"name":"btstring$ebnf$1","symbols":["btstring$ebnf$1",/[^`]/],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"btstring","symbols":[{"literal":"`"},"btstring$ebnf$1",{"literal":"`"}],"postprocess":function postprocess(d){return d[1].join("")}},{"name":"dstrchar","symbols":[/[^\\"\n]/],"postprocess":id},{"name":"dstrchar","symbols":[{"literal":"\\"},"strescape"],"postprocess":function postprocess(d){return JSON.parse("\""+d.join("")+"\"")}},{"name":"sstrchar","symbols":[/[^\\'\n]/],"postprocess":id},{"name":"sstrchar","symbols":[{"literal":"\\"},"strescape"],"postprocess":function postprocess(d){return JSON.parse("\""+d.join("")+"\"")}},{"name":"sstrchar$string$1","symbols":[{"literal":"\\"},{"literal":"'"}],"postprocess":function joiner(d){return d.join("")}},{"name":"sstrchar","symbols":["sstrchar$string$1"],"postprocess":function postprocess(d){return"'"}},{"name":"strescape","symbols":[/["\\/bfnrt]/],"postprocess":id},{"name":"strescape","symbols":[{"literal":"u"},/[a-fA-F0-9]/,/[a-fA-F0-9]/,/[a-fA-F0-9]/,/[a-fA-F0-9]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"main","symbols":["_","P0","_"],"postprocess":function postprocess(d){return d[1]}},{"name":"P0$subexpression$1","symbols":[/[oO]/,/[rR]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P0","symbols":["P0","_","P0$subexpression$1","_","P1"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]||d[4]}},{"name":"P0","symbols":["P1"],"postprocess":id},{"name":"P1$subexpression$1","symbols":[/[aA]/,/[nN]/,/[dD]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P1","symbols":["P1","_","P1$subexpression$1","_","P2"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]&&d[4]}},{"name":"P1","symbols":["P2"],"postprocess":id},{"name":"P2","symbols":["P2","_",{"literal":"<"},"_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]<d[4]}},{"name":"P2","symbols":["P2","_",{"literal":">"},"_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]>d[4]}},{"name":"P2$string$1","symbols":[{"literal":">"},{"literal":"="}],"postprocess":function joiner(d){return d.join("")}},{"name":"P2","symbols":["P2","_","P2$string$1","_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]>=d[4]}},{"name":"P2$string$2","symbols":[{"literal":"<"},{"literal":"="}],"postprocess":function joiner(d){return d.join("")}},{"name":"P2","symbols":["P2","_","P2$string$2","_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]<=d[4]}},{"name":"P2","symbols":["P2","_",{"literal":"="},"_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]==d[4]}},{"name":"P2$string$3","symbols":[{"literal":"<"},{"literal":">"}],"postprocess":function joiner(d){return d.join("")}},{"name":"P2","symbols":["P2","_","P2$string$3","_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],"!=",d[4]]:d[0]!=d[4]}},{"name":"P2","symbols":["P3"],"postprocess":id},{"name":"P3","symbols":["P3","_",{"literal":"+"},"_","P4"],"postprocess":function postprocess(d){return d[0]+d[4]}},{"name":"P3","symbols":["P3","_",{"literal":"-"},"_","P4"],"postprocess":function postprocess(d){return d[0]-d[4]}},{"name":"P3$string$1","symbols":[{"literal":"|"},{"literal":"|"}],"postprocess":function joiner(d){return d.join("")}},{"name":"P3","symbols":["P3","_","P3$string$1","_","P4"],"postprocess":function postprocess(d){return d[0]+d[4]}},{"name":"P3","symbols":["P4"],"postprocess":id},{"name":"P4","symbols":["P4","_",{"literal":"*"},"_","P5"],"postprocess":function postprocess(d){return d[0]*d[4]}},{"name":"P4","symbols":["P4","_",{"literal":"/"},"_","P5"],"postprocess":function postprocess(d){return d[0]/d[4]}},{"name":"P4","symbols":["P5"],"postprocess":id},{"name":"P5","symbols":["P6","_",{"literal":"^"},"_","P5"],"postprocess":function postprocess(d){return Math.pow(d[0],d[4])}},{"name":"P5$subexpression$1","symbols":[/[iI]/,/[sS]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P5","symbols":["P5","__","P5$subexpression$1","__","P6"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],"=",d[4]]:d[0]===d[4]}},{"name":"P5$subexpression$2","symbols":[/[iI]/,/[sS]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P5$subexpression$3","symbols":[/[nN]/,/[oO]/,/[tT]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P5","symbols":["P5","__","P5$subexpression$2","__","P5$subexpression$3","__","P6"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],"!=",d[6]]:d[0]!==d[6]}},{"name":"P5","symbols":["P6"],"postprocess":id},{"name":"P6","symbols":[{"literal":"-"},"_","P6"],"postprocess":function postprocess(d){return-d[2]}},{"name":"P6","symbols":[{"literal":"+"},"_","P6"],"postprocess":function postprocess(d){return d[2]}},{"name":"P6","symbols":[{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return d[2]}},{"name":"P6","symbols":["N"],"postprocess":id},{"name":"N","symbols":["float"],"postprocess":id},{"name":"N","symbols":["sqstring"],"postprocess":id},{"name":"N","symbols":["dqstring"],"postprocess":function postprocess(d){var _window$qwc2Expressio,_window$qwc2Expressio2;return asFilter(d)?d[0]:(_window$qwc2Expressio=(_window$qwc2Expressio2=window.qwc2ExpressionParserContext.feature.properties)===null||_window$qwc2Expressio2===void 0?void 0:_window$qwc2Expressio2[d[0]])!==null&&_window$qwc2Expressio!==void 0?_window$qwc2Expressio:null}},{"name":"N$string$1","symbols":[{"literal":"u"},{"literal":"u"},{"literal":"i"},{"literal":"d"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$1","_",{"literal":"("},"_",{"literal":")"}],"postprocess":function postprocess(d){return generateUUID()}},{"name":"N$string$2","symbols":[{"literal":"n"},{"literal":"o"},{"literal":"w"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$2","_",{"literal":"("},"_",{"literal":")"}],"postprocess":function postprocess(d){return new Date().toISOString()}},{"name":"N$string$3","symbols":[{"literal":"s"},{"literal":"i"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$3","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.sin(d[4])}},{"name":"N$string$4","symbols":[{"literal":"c"},{"literal":"o"},{"literal":"s"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$4","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.cos(d[4])}},{"name":"N$string$5","symbols":[{"literal":"t"},{"literal":"a"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$5","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.tan(d[4])}},{"name":"N$string$6","symbols":[{"literal":"a"},{"literal":"s"},{"literal":"i"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$6","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.asin(d[4])}},{"name":"N$string$7","symbols":[{"literal":"a"},{"literal":"c"},{"literal":"o"},{"literal":"s"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$7","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.acos(d[4])}},{"name":"N$string$8","symbols":[{"literal":"a"},{"literal":"t"},{"literal":"a"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$8","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.atan(d[4])}},{"name":"N$string$9","symbols":[{"literal":"s"},{"literal":"q"},{"literal":"r"},{"literal":"t"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$9","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.sqrt(d[4])}},{"name":"N$string$10","symbols":[{"literal":"l"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$10","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.log(d[4])}},{"name":"N$string$11","symbols":[{"literal":"a"},{"literal":"t"},{"literal":"a"},{"literal":"n"},{"literal":"2"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$11","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.atan2(d[4],d[8])}},{"name":"N$string$12","symbols":[{"literal":"p"},{"literal":"o"},{"literal":"w"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$12","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.pow(d[4],d[8])}},{"name":"N$string$13","symbols":[{"literal":"C"},{"literal":"A"},{"literal":"S"},{"literal":"E"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N$string$14","symbols":[{"literal":"E"},{"literal":"L"},{"literal":"S"},{"literal":"E"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N$string$15","symbols":[{"literal":"E"},{"literal":"N"},{"literal":"D"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$13","_","when_args","_","N$string$14","_","P0","_","N$string$15"],"postprocess":function postprocess(d){return d[2]!==undefined?d[2]:d[6]}},{"name":"N$string$16","symbols":[{"literal":"c"},{"literal":"o"},{"literal":"a"},{"literal":"l"},{"literal":"e"},{"literal":"s"},{"literal":"c"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$16","_",{"literal":"("},"_","var_args","_",{"literal":")"}],"postprocess":function postprocess(d){var _d$4$find;return(_d$4$find=d[4].find(function(x){return x!==null}))!==null&&_d$4$find!==void 0?_d$4$find:null}},{"name":"N$string$17","symbols":[{"literal":"i"},{"literal":"f"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$17","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return d[4]?d[8]:d[12]}},{"name":"N$string$18","symbols":[{"literal":"n"},{"literal":"u"},{"literal":"l"},{"literal":"l"},{"literal":"i"},{"literal":"f"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$18","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return d[4]===d[8]?null:d[4]}},{"name":"N$string$19","symbols":[{"literal":"r"},{"literal":"e"},{"literal":"g"},{"literal":"e"},{"literal":"x"},{"literal":"p"},{"literal":"_"},{"literal":"m"},{"literal":"a"},{"literal":"t"},{"literal":"c"},{"literal":"h"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$19","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return d[4].search(new RegExp(d[8]))+1}},{"name":"N$string$20","symbols":[{"literal":"a"},{"literal":"t"},{"literal":"t"},{"literal":"r"},{"literal":"i"},{"literal":"b"},{"literal":"u"},{"literal":"t"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$20","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){var _window$qwc2Expressio3,_window$qwc2Expressio4;return(_window$qwc2Expressio3=(_window$qwc2Expressio4=window.qwc2ExpressionParserContext.feature.properties)===null||_window$qwc2Expressio4===void 0?void 0:_window$qwc2Expressio4[d[4]])!==null&&_window$qwc2Expressio3!==void 0?_window$qwc2Expressio3:null}},{"name":"N$string$21","symbols":[{"literal":"c"},{"literal":"u"},{"literal":"r"},{"literal":"r"},{"literal":"e"},{"literal":"n"},{"literal":"t"},{"literal":"_"},{"literal":"v"},{"literal":"a"},{"literal":"l"},{"literal":"u"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$21","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){var _window$qwc2Expressio5,_window$qwc2Expressio6;return(_window$qwc2Expressio5=(_window$qwc2Expressio6=window.qwc2ExpressionParserContext.feature.properties)===null||_window$qwc2Expressio6===void 0?void 0:_window$qwc2Expressio6[d[4]])!==null&&_window$qwc2Expressio5!==void 0?_window$qwc2Expressio5:null}},{"name":"N$string$22","symbols":[{"literal":"a"},{"literal":"t"},{"literal":"t"},{"literal":"r"},{"literal":"i"},{"literal":"b"},{"literal":"u"},{"literal":"t"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$22","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){var _d$4$properties$d$,_d$;return(_d$4$properties$d$=(_d$=d[4])===null||_d$===void 0||(_d$=_d$.properties)===null||_d$===void 0?void 0:_d$[d[8]])!==null&&_d$4$properties$d$!==void 0?_d$4$properties$d$:null}},{"name":"N$string$23","symbols":[{"literal":"g"},{"literal":"e"},{"literal":"t"},{"literal":"_"},{"literal":"f"},{"literal":"e"},{"literal":"a"},{"literal":"t"},{"literal":"u"},{"literal":"r"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$23","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.getFeature(d[4],d[8],d[12])}},{"name":"N$string$24","symbols":[{"literal":"g"},{"literal":"e"},{"literal":"t"},{"literal":"_"},{"literal":"f"},{"literal":"e"},{"literal":"a"},{"literal":"t"},{"literal":"u"},{"literal":"r"},{"literal":"e"},{"literal":"_"},{"literal":"b"},{"literal":"y"},{"literal":"_"},{"literal":"i"},{"literal":"d"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$24","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.getFeature(d[4],"id",d[8])}},{"name":"N$string$25","symbols":[{"literal":"r"},{"literal":"e"},{"literal":"p"},{"literal":"r"},{"literal":"e"},{"literal":"s"},{"literal":"e"},{"literal":"n"},{"literal":"t"},{"literal":"_"},{"literal":"v"},{"literal":"a"},{"literal":"l"},{"literal":"u"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$25","_",{"literal":"("},"_","dqstring","_",{"literal":")"}],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.representValue(d[4])}},{"name":"N$subexpression$1","symbols":[/[pP]/,/[iI]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$1"],"postprocess":function postprocess(d){return Math.PI}},{"name":"N$subexpression$2","symbols":[/[eE]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$2"],"postprocess":function postprocess(d){return Math.E}},{"name":"N$subexpression$3","symbols":[/[nN]/,/[uU]/,/[lL]/,/[lL]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$3"],"postprocess":function postprocess(d){return null}},{"name":"N$subexpression$4","symbols":[/[fF]/,/[aA]/,/[lL]/,/[sS]/,/[eE]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$4"],"postprocess":function postprocess(d){return false}},{"name":"N$subexpression$5","symbols":[/[tT]/,/[rR]/,/[uU]/,/[eE]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$5"],"postprocess":function postprocess(d){return true}},{"name":"N$string$26","symbols":[{"literal":"@"},{"literal":"f"},{"literal":"e"},{"literal":"a"},{"literal":"t"},{"literal":"u"},{"literal":"r"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$26"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.feature}},{"name":"N$string$27","symbols":[{"literal":"@"},{"literal":"g"},{"literal":"e"},{"literal":"o"},{"literal":"m"},{"literal":"e"},{"literal":"t"},{"literal":"r"},{"literal":"y"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$27"],"postprocess":function postprocess(d){var _window$qwc2Expressio7;return(_window$qwc2Expressio7=window.qwc2ExpressionParserContext.feature)===null||_window$qwc2Expressio7===void 0?void 0:_window$qwc2Expressio7.geometry}},{"name":"N$string$28","symbols":[{"literal":"@"},{"literal":"i"},{"literal":"d"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$28"],"postprocess":function postprocess(d){var _window$qwc2Expressio8;return(_window$qwc2Expressio8=window.qwc2ExpressionParserContext.feature)===null||_window$qwc2Expressio8===void 0?void 0:_window$qwc2Expressio8.id}},{"name":"N$string$29","symbols":[{"literal":"@"},{"literal":"l"},{"literal":"a"},{"literal":"y"},{"literal":"e"},{"literal":"r"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$29"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.layer}},{"name":"N$string$30","symbols":[{"literal":"@"},{"literal":"l"},{"literal":"a"},{"literal":"y"},{"literal":"e"},{"literal":"r"},{"literal":"_"},{"literal":"n"},{"literal":"a"},{"literal":"m"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$30"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.layer}},{"name":"N$string$31","symbols":[{"literal":"@"},{"literal":"l"},{"literal":"a"},{"literal":"y"},{"literal":"e"},{"literal":"r"},{"literal":"_"},{"literal":"c"},{"literal":"r"},{"literal":"s"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$31"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.projection}},{"name":"N$string$32","symbols":[{"literal":"@"},{"literal":"p"},{"literal":"r"},{"literal":"o"},{"literal":"j"},{"literal":"e"},{"literal":"c"},{"literal":"t"},{"literal":"_"},{"literal":"b"},{"literal":"a"},{"literal":"s"},{"literal":"e"},{"literal":"n"},{"literal":"a"},{"literal":"m"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$32"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.mapPrefix}},{"name":"N$string$33","symbols":[{"literal":"@"},{"literal":"p"},{"literal":"r"},{"literal":"o"},{"literal":"j"},{"literal":"e"},{"literal":"c"},{"literal":"t"},{"literal":"_"},{"literal":"c"},{"literal":"r"},{"literal":"s"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$33"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.projection}},{"name":"N$string$34","symbols":[{"literal":"@"},{"literal":"q"},{"literal":"g"},{"literal":"i"},{"literal":"s"},{"literal":"_"},{"literal":"l"},{"literal":"o"},{"literal":"c"},{"literal":"a"},{"literal":"l"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$34"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.lang}},{"name":"N$string$35","symbols":[{"literal":"@"},{"literal":"u"},{"literal":"s"},{"literal":"e"},{"literal":"r"},{"literal":"_"},{"literal":"a"},{"literal":"c"},{"literal":"c"},{"literal":"o"},{"literal":"u"},{"literal":"n"},{"literal":"t"},{"literal":"_"},{"literal":"n"},{"literal":"a"},{"literal":"m"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$35"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.username}},{"name":"N$string$36","symbols":[{"literal":"@"},{"literal":"c"},{"literal":"l"},{"literal":"o"},{"literal":"u"},{"literal":"d"},{"literal":"_"},{"literal":"u"},{"literal":"s"},{"literal":"e"},{"literal":"r"},{"literal":"n"},{"literal":"a"},{"literal":"m"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$36"],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.username}},{"name":"var_args","symbols":["P0"],"postprocess":function postprocess(d){return[d[0]]}},{"name":"var_args","symbols":["var_args","_",{"literal":","},"_","P0"],"postprocess":function postprocess(d){return[].concat(_toConsumableArray(d[0]),[d[4]])}},{"name":"when_args$string$1","symbols":[{"literal":"W"},{"literal":"H"},{"literal":"E"},{"literal":"N"}],"postprocess":function joiner(d){return d.join("")}},{"name":"when_args$string$2","symbols":[{"literal":"T"},{"literal":"H"},{"literal":"E"},{"literal":"N"}],"postprocess":function joiner(d){return d.join("")}},{"name":"when_args","symbols":["when_args$string$1","_","P0","_","when_args$string$2","_","P0"],"postprocess":function postprocess(d){return d[2]?d[6]:undefined}},{"name":"when_args$string$3","symbols":[{"literal":"W"},{"literal":"H"},{"literal":"E"},{"literal":"N"}],"postprocess":function joiner(d){return d.join("")}},{"name":"when_args$string$4","symbols":[{"literal":"T"},{"literal":"H"},{"literal":"E"},{"literal":"N"}],"postprocess":function joiner(d){return d.join("")}},{"name":"when_args","symbols":["when_args","_","when_args$string$3","_","P0","_","when_args$string$4","_","P0"],"postprocess":function postprocess(d){return d[0]!==undefined?d[0]:d[4]?d[8]:undefined}},{"name":"float","symbols":["int",{"literal":"."},"int"],"postprocess":function postprocess(d){return parseFloat(d[0]+d[1]+d[2])}},{"name":"float","symbols":["int"],"postprocess":function postprocess(d){return parseInt(d[0])}},{"name":"int$ebnf$1","symbols":[/[0-9]/]},{"name":"int$ebnf$1","symbols":["int$ebnf$1",/[0-9]/],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"int","symbols":["int$ebnf$1"],"postprocess":function postprocess(d){return d[0].join("")}},{"name":"_$ebnf$1","symbols":[]},{"name":"_$ebnf$1","symbols":["_$ebnf$1",/[\s]/],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"_","symbols":["_$ebnf$1"],"postprocess":function postprocess(d){return null}},{"name":"__$ebnf$1","symbols":[/[\s]/]},{"name":"__$ebnf$1","symbols":["__$ebnf$1",/[\s]/],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"__","symbols":["__$ebnf$1"],"postprocess":function postprocess(d){return null}}],ParserStart:"main"};if(typeof module!=="undefined"&&typeof module.exports!=="undefined"){module.exports=grammar}else{window.grammar=grammar}})();
@@ -45,9 +45,10 @@ P2 -> P2 _ "<" _ P3 {% function(d) { return asFilter(d) ? [d[0],
45
45
  | P2 _ "<>" _ P3 {% function(d) { return asFilter(d) ? [d[0], "!=", d[4]] : (d[0] != d[4]); } %}
46
46
  | P3 {% id %}
47
47
 
48
- # Priority-3 operators (addition, subtraction)
48
+ # Priority-3 operators (addition, subtraction, concatenation)
49
49
  P3 -> P3 _ "+" _ P4 {% function(d) { return d[0] + d[4]; } %}
50
50
  | P3 _ "-" _ P4 {% function(d) { return d[0] - d[4]; } %}
51
+ | P3 _ "||" _ P4 {% function(d) { return d[0] + d[4]; } %}
51
52
  | P4 {% id %}
52
53
 
53
54
  # Priority-4 operators (multiplication, division)
@@ -93,6 +94,7 @@ N -> float {% id %}
93
94
  | "attribute" _ "(" _ P0 _ "," _ P0 _ ")" {% function(d) { return d[4]?.properties?.[d[8]] ?? null; } %}
94
95
  | "get_feature" _ "(" _ P0 _ "," _ P0 _ "," _ P0 _ ")" {% function(d) { return window.qwc2ExpressionParserContext.getFeature(d[4], d[8], d[12]); } %}
95
96
  | "get_feature_by_id" _ "(" _ P0 _ "," _ P0 _ ")" {% function(d) { return window.qwc2ExpressionParserContext.getFeature(d[4], "id", d[8]); } %}
97
+ | "represent_value" _ "(" _ dqstring _ ")" {% function(d) { return window.qwc2ExpressionParserContext.representValue(d[4]); } %}
96
98
  | "PI"i {% function(d) { return Math.PI; } %}
97
99
  | "E"i {% function(d) { return Math.E; } %}
98
100
  | "NULL"i {% function(d) { return null; } %}
@@ -1,4 +1,4 @@
1
- /* This is just a scratch file for testing the expression grammar */var nearley=require("nearley");var grammar=require("./grammar.js");global.qwc2ExpressionParserContext={feature:{"type":"Feature","properties":{"listnr":1,"grpcode":2,"numcode":3}},getFeature:function getFeature(layerName,attr,value){return{"type":"Feature","id":210000,"geometry":null,"properties":{"id":2,"label":"ABLAGERUNGEN","code":"DBC","listnr":21,"grpcode":0,"numcode":0,"q1":null,"q1suff":null,"q2":null,"q2suff":null,"qsr":null,"z1":null,"z2":null,"l1":2,"l2":null,"lastlevel":null,"level":1,"tooltip":"Ablagerungen an der Schachtsohle oder an Auftritten.","id2":210000},"__version__":1711648978811}},asFilter:false,username:"testuser",layer:"layername"};// Create a Parser object from our grammar.
1
+ /* This is just a scratch file for testing the expression grammar */var nearley=require("nearley");var grammar=require("./grammar.js");global.qwc2ExpressionParserContext={feature:{"type":"Feature","properties":{"listnr":1,"grpcode":2,"numcode":3}},getFeature:function getFeature(layerName,attr,value){return{"type":"Feature","id":210000,"geometry":null,"properties":{"id":2,"label":"ABLAGERUNGEN","code":"DBC","listnr":21,"grpcode":0,"numcode":0,"q1":null,"q1suff":null,"q2":null,"q2suff":null,"qsr":null,"z1":null,"z2":null,"l1":2,"l2":null,"lastlevel":null,"level":1,"tooltip":"Ablagerungen an der Schachtsohle oder an Auftritten.","id2":210000},"__version__":1711648978811}},representValue:function representValue(attr){var _$2$3$4$value;console.log(attr);var value=global.qwc2ExpressionParserContext.feature.properties[attr];console.log(value);return(_$2$3$4$value={1:"One",2:"Two",3:"Three",4:"Four"}[value])!==null&&_$2$3$4$value!==void 0?_$2$3$4$value:value},asFilter:false,username:"testuser",layer:"layername"};// Create a Parser object from our grammar.
2
2
  var parser=new nearley.Parser(nearley.Grammar.fromCompiled(grammar));// Parse something!
3
3
  // parser.feed("attribute('txt') is not null and attribute('txt') <> ''")
4
4
  // parser.feed("attribute(get_feature('foo', 'asd', 3), 'asd')");
@@ -11,4 +11,6 @@ var parser=new nearley.Parser(nearley.Grammar.fromCompiled(grammar));// Parse so
11
11
  // parser.feed(' "listnr" =current_value(\'listnr\') and "grpcode" = current_value(\'grpcode\') and "numcode" >0 and "foo" = ((1<2) = true)')
12
12
  // parser.feed("if(3>2, 3, 4)")
13
13
  // parser.feed("nullif('a', 'b')")
14
- parser.feed("@user_account_name");console.log(JSON.stringify(parser.results));
14
+ // parser.feed("@user_account_name")
15
+ // parser.feed("'Hello' || ' ' || 'World'");
16
+ parser.feed("represent_value(\"numcode\")");console.log(JSON.stringify(parser.results));