qwc2 2025.5.21 → 2025.5.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/actions/layers.js +2 -2
  2. package/components/AttributeForm.js +3 -2
  3. package/components/AttributeTableWidget.js +3 -2
  4. package/components/QtDesignerForm.js +5 -5
  5. package/components/map/layers/WMSLayer.js +3 -2
  6. package/components/style/QtDesignerForm.css +1 -0
  7. package/components/style/SideBar.css +1 -0
  8. package/components/widgets/NumberInput.js +1 -1
  9. package/components/widgets/TextInput.js +2 -2
  10. package/components/widgets/style/TextInput.css +13 -0
  11. package/package.json +1 -1
  12. package/plugins/Editing.js +3 -4
  13. package/plugins/FeatureForm.js +1 -1
  14. package/plugins/LayerTree.js +5 -5
  15. package/plugins/Map.js +1 -1
  16. package/plugins/map/EditingSupport.js +1 -1
  17. package/plugins/style/LayerTree.css +47 -4
  18. package/reducers/editing.js +2 -2
  19. package/reducers/layers.js +2 -2
  20. package/static/translations/bg-BG.json +3 -1
  21. package/static/translations/ca-ES.json +3 -1
  22. package/static/translations/cs-CZ.json +2 -0
  23. package/static/translations/de-CH.json +3 -1
  24. package/static/translations/de-DE.json +3 -1
  25. package/static/translations/en-US.json +3 -1
  26. package/static/translations/es-ES.json +3 -1
  27. package/static/translations/fi-FI.json +2 -0
  28. package/static/translations/fr-FR.json +3 -1
  29. package/static/translations/hu-HU.json +2 -0
  30. package/static/translations/it-IT.json +3 -1
  31. package/static/translations/ja-JP.json +3 -1
  32. package/static/translations/nl-NL.json +3 -1
  33. package/static/translations/no-NO.json +2 -0
  34. package/static/translations/pl-PL.json +2 -0
  35. package/static/translations/pt-BR.json +3 -1
  36. package/static/translations/pt-PT.json +3 -1
  37. package/static/translations/ro-RO.json +3 -1
  38. package/static/translations/ru-RU.json +2 -0
  39. package/static/translations/sv-SE.json +2 -0
  40. package/static/translations/tr-TR.json +3 -1
  41. package/static/translations/tsconfig.json +2 -0
  42. package/utils/DxfUtils.js +8 -3
  43. package/utils/LayerUtils.js +5 -5
package/actions/layers.js CHANGED
@@ -4,5 +4,5 @@
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 ReducerIndex from"../reducers/index";import layersReducer from"../reducers/layers";ReducerIndex.register("layers",layersReducer);import ConfigUtils from"../utils/ConfigUtils";export var SET_LAYER_LOADING="SET_LAYER_LOADING";export var ADD_LAYER="ADD_LAYER";export var ADD_LAYER_SEPARATOR="ADD_LAYER_SEPARATOR";export var REMOVE_LAYER="REMOVE_LAYER";export var REORDER_LAYER="REORDER_LAYER";export var ADD_LAYER_FEATURES="ADD_LAYER_FEATURES";export var ADD_THEME_SUBLAYER="ADD_THEME_SUBLAYER";export var REMOVE_LAYER_FEATURES="REMOVE_LAYER_FEATURES";export var CLEAR_LAYER="CLEAR_LAYER";export var CHANGE_LAYER_PROPERTY="CHANGE_LAYER_PROPERTY";export var SET_LAYER_DIMENSIONS="SET_LAYER_DIMENSIONS";export var REFRESH_LAYER="REFRESH_LAYER";export var REMOVE_ALL_LAYERS="REMOVE_ALL_LAYERS";export var REPLACE_PLACEHOLDER_LAYER="REPLACE_PLACEHOLDER_LAYER";export var SET_SWIPE="SET_SWIPE";export var SET_FILTER="SET_FILTER";export var LayerRole={BACKGROUND:1,THEME:2,USERLAYER:3,SELECTION:4,MARKER:5};export function addLayer(layer){var pos=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var beforename=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;return{type:ADD_LAYER,layer:layer,pos:pos,beforename:beforename}}export function addLayerSeparator(title,afterLayerId,afterSublayerPath){return{type:ADD_LAYER_SEPARATOR,title:title,afterLayerId:afterLayerId,afterSublayerPath:afterSublayerPath}}export function removeLayer(layerId){var sublayerpath=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];return{type:REMOVE_LAYER,layerId:layerId,sublayerpath:sublayerpath}}export function reorderLayer(layer,sublayerpath,direction){return function(dispatch,getState){dispatch({type:REORDER_LAYER,layer:layer,sublayerpath:sublayerpath,direction:direction,preventSplittingGroups:ConfigUtils.getConfigProp("preventSplittingGroupsWhenReordering",getState().theme.current)})}}export function addLayerFeatures(layer,features){var clear=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return{type:ADD_LAYER_FEATURES,layer:layer,features:features,clear:clear}}export function removeLayerFeatures(layerId,featureIds){var keepEmptyLayer=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return{type:REMOVE_LAYER_FEATURES,layerId:layerId,featureIds:featureIds,keepEmptyLayer:keepEmptyLayer}}export function clearLayer(layerId){return{type:CLEAR_LAYER,layerId:layerId}}export function addThemeSublayer(layer){return{type:ADD_THEME_SUBLAYER,layer:layer}}// recurseDirection: null (don't recurse), 'parents', 'children', 'both'
8
- export function changeLayerProperty(layerId,property,newvalue){var sublayerpath=arguments.length>3&&arguments[3]!==undefined?arguments[3]:[];var recurseDirection=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;return{type:CHANGE_LAYER_PROPERTY,layerId:layerId,property:property,newvalue:newvalue,sublayerpath:sublayerpath,recurseDirection:recurseDirection}}export function setLayerDimensions(layerId,dimensions){return{type:SET_LAYER_DIMENSIONS,layerId:layerId,dimensions:dimensions}}export function setLayerLoading(layerId,loading){return{type:SET_LAYER_LOADING,layerId:layerId,loading:loading}}export function addMarker(id,point){var label=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"";var crs=arguments.length>3&&arguments[3]!==undefined?arguments[3]:"EPSG:4326";var zIndex=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;var layer={id:"markers",role:LayerRole.MARKER,zIndex:zIndex};var feature={id:id,geometry:{type:"Point",coordinates:point},properties:{label:label},crs:crs,styleName:"marker"};return addLayerFeatures(layer,[feature])}export function removeMarker(id){return removeLayerFeatures("markers",[id])}export function refreshLayer(filter){return{type:REFRESH_LAYER,filter:filter}}export function removeAllLayers(){return{type:REMOVE_ALL_LAYERS}}export function replacePlaceholderLayer(id,layer){return{type:REPLACE_PLACEHOLDER_LAYER,id:id,layer:layer}}export function setSwipe(swipe){return{type:SET_SWIPE,swipe:swipe}}export function setFilter(filter,filterGeom,timeRange){return{type:SET_FILTER,filter:filter,filterGeom:filterGeom,timeRange:timeRange}}
7
+ */import ReducerIndex from"../reducers/index";import layersReducer from"../reducers/layers";ReducerIndex.register("layers",layersReducer);import ConfigUtils from"../utils/ConfigUtils";export var SET_LAYER_LOADING="SET_LAYER_LOADING";export var ADD_LAYER="ADD_LAYER";export var ADD_LAYER_SEPARATOR="ADD_LAYER_SEPARATOR";export var REMOVE_LAYER="REMOVE_LAYER";export var REORDER_LAYER="REORDER_LAYER";export var ADD_LAYER_FEATURES="ADD_LAYER_FEATURES";export var ADD_THEME_SUBLAYER="ADD_THEME_SUBLAYER";export var REMOVE_LAYER_FEATURES="REMOVE_LAYER_FEATURES";export var CLEAR_LAYER="CLEAR_LAYER";export var CHANGE_LAYER_PROPERTY="CHANGE_LAYER_PROPERTY";export var SET_LAYER_DIMENSIONS="SET_LAYER_DIMENSIONS";export var REFRESH_LAYER="REFRESH_LAYER";export var REMOVE_ALL_LAYERS="REMOVE_ALL_LAYERS";export var REPLACE_PLACEHOLDER_LAYER="REPLACE_PLACEHOLDER_LAYER";export var SET_SWIPE="SET_SWIPE";export var SET_FILTER="SET_FILTER";export var SET_THEME_LAYERS_VISIBILITY_PRESET="SET_THEME_LAYERS_VISIBILITY_PRESET";export var LayerRole={BACKGROUND:1,THEME:2,USERLAYER:3,SELECTION:4,MARKER:5};export function addLayer(layer){var pos=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var beforename=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;return{type:ADD_LAYER,layer:layer,pos:pos,beforename:beforename}}export function addLayerSeparator(title,afterLayerId,afterSublayerPath){return{type:ADD_LAYER_SEPARATOR,title:title,afterLayerId:afterLayerId,afterSublayerPath:afterSublayerPath}}export function removeLayer(layerId){var sublayerpath=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];return{type:REMOVE_LAYER,layerId:layerId,sublayerpath:sublayerpath}}export function reorderLayer(layer,sublayerpath,direction){return function(dispatch,getState){dispatch({type:REORDER_LAYER,layer:layer,sublayerpath:sublayerpath,direction:direction,preventSplittingGroups:ConfigUtils.getConfigProp("preventSplittingGroupsWhenReordering",getState().theme.current)})}}export function addLayerFeatures(layer,features){var clear=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return{type:ADD_LAYER_FEATURES,layer:layer,features:features,clear:clear}}export function removeLayerFeatures(layerId,featureIds){var keepEmptyLayer=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return{type:REMOVE_LAYER_FEATURES,layerId:layerId,featureIds:featureIds,keepEmptyLayer:keepEmptyLayer}}export function clearLayer(layerId){return{type:CLEAR_LAYER,layerId:layerId}}export function addThemeSublayer(layer){return{type:ADD_THEME_SUBLAYER,layer:layer}}// recurseDirection: null (don't recurse), 'parents', 'children', 'both'
8
+ export function changeLayerProperty(layerId,property,newvalue){var sublayerpath=arguments.length>3&&arguments[3]!==undefined?arguments[3]:[];var recurseDirection=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;return{type:CHANGE_LAYER_PROPERTY,layerId:layerId,property:property,newvalue:newvalue,sublayerpath:sublayerpath,recurseDirection:recurseDirection}}export function setLayerDimensions(layerId,dimensions){return{type:SET_LAYER_DIMENSIONS,layerId:layerId,dimensions:dimensions}}export function setLayerLoading(layerId,loading){return{type:SET_LAYER_LOADING,layerId:layerId,loading:loading}}export function addMarker(id,point){var label=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"";var crs=arguments.length>3&&arguments[3]!==undefined?arguments[3]:"EPSG:4326";var zIndex=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;var layer={id:"markers",role:LayerRole.MARKER,zIndex:zIndex};var feature={id:id,geometry:{type:"Point",coordinates:point},properties:{label:label},crs:crs,styleName:"marker"};return addLayerFeatures(layer,[feature])}export function removeMarker(id){return removeLayerFeatures("markers",[id])}export function refreshLayer(filter){return{type:REFRESH_LAYER,filter:filter}}export function removeAllLayers(){return{type:REMOVE_ALL_LAYERS}}export function replacePlaceholderLayer(id,layer){return{type:REPLACE_PLACEHOLDER_LAYER,id:id,layer:layer}}export function setSwipe(swipe){return{type:SET_SWIPE,swipe:swipe}}export function setFilter(filter,filterGeom,timeRange){return{type:SET_FILTER,filter:filter,filterGeom:filterGeom,timeRange:timeRange}}export function setThemeLayersVisibilityPreset(preset){return{type:SET_THEME_LAYERS_VISIBILITY_PRESET,preset:preset}};
@@ -5,14 +5,15 @@ 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")})}return/*#__PURE__*/React.createElement("div",{className:"AttributeForm"},_this.props.editContext.geomReadOnly&&!readOnly?/*#__PURE__*/React.createElement("div",{className:"attrib-form-geom-readonly"},LocaleUtils.tr("editing.geomreadonly")):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,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.editDataset,feature.id,relTables,_this.props.map.projection,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.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.editDataset,feature.id,relTables,_this.props.map.projection,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.editDataset,_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
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(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
15
- feature=_objectSpread(_objectSpread({},feature),{},{type:"Feature",properties:_objectSpread({},feature.properties||{}),crs:{type:"name",properties:{name:CoordinatesUtils.toOgcUrnCrs(_this.props.map.projection)}}});var curConfig=_this.props.editConfig;var mapPrefix=_this.editMapPrefix();var textNullValue=ConfigUtils.getConfigProp("editTextNullValue");// Keep relation values separate
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
+ 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
16
17
  var relationValues=clone(feature.relationValues||{});delete feature.relationValues;var relationUploads={};var featureUploads={};// Collect all values from form fields
17
18
  var fieldnames=Array.from(_this.form.elements).map(function(element){return element.name}).filter(function(x){return x&&x!=="g-recaptcha-response"});fieldnames.forEach(function(name){var fieldConfig=(curConfig.fields||[]).find(function(field){return field.id===name})||{};var element=_this.form.elements.namedItem(name);if(element){var parts=name.split("__");var value=element.type==="radio"||element.type==="checkbox"?element.checked:element.value;var nullElements=["date","number","radio"];var nullFieldTypes=["date","number"];if(parts.length>=3){var _nrelFieldConfig$data;// Relation value
18
19
  // Usually <table>__<field>__<index>, but <field> might also contain __ (i.e. upload__user)
@@ -5,10 +5,11 @@ 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 FileSaver from"file-saver";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{LayerRole,addLayerFeatures,removeLayer}from"../actions/layers";import{zoomToExtent,zoomToPoint}from"../actions/map";import{setCurrentTask,setCurrentTaskBlocked}from"../actions/task";import EditComboField,{KeyValCache}from"../components/EditComboField";import EditUploadField from"../components/EditUploadField";import Icon from"../components/Icon";import NavBar from"../components/widgets/NavBar";import NumberInput from"../components/widgets/NumberInput";import ReCaptchaWidget from"../components/widgets/ReCaptchaWidget";import Spinner from"../components/widgets/Spinner";import TextInput from"../components/widgets/TextInput";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import{ExpressionFeatureCache,parseExpression,getFeatureTemplate}from"../utils/EditingUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import"./style/AttributeTableWidget.css";var AttributeTableWidget=/*#__PURE__*/function(_React$Component){function AttributeTableWidget(props){var _this;_classCallCheck(this,AttributeTableWidget);_this=_callSuper(this,AttributeTableWidget,[props]);_defineProperty(_this,"renderSortIndicator",function(field){if(_this.state.sortField&&_this.state.sortField.field===field){return/*#__PURE__*/React.createElement(Icon,{icon:_this.state.sortField.dir>0?"chevron-down":"chevron-up"})}else{return null}});_defineProperty(_this,"renderColumnResizeHandle",function(col,pos){return/*#__PURE__*/React.createElement("span",{className:"attribtable-table-"+pos+"draghandle",onMouseDown:function onMouseDown(ev){return _this.resizeTable(ev,col,true)}})});_defineProperty(_this,"renderRowResizeHandle",function(row,pos){return/*#__PURE__*/React.createElement("span",{className:"attribtable-table-"+pos+"draghandle",onMouseDown:function onMouseDown(ev){return _this.resizeTable(ev,row,false)}})});_defineProperty(_this,"changeSelectedLayer",function(value){_this.setState({selectedLayer:value})});_defineProperty(_this,"reload",function(){var layerName=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;_this.setState(function(state){var _this$props$filter$fi;var selectedLayer=layerName||state.selectedLayer;KeyValCache.clear();ExpressionFeatureCache.clear();var bbox=_this.state.limitToExtent?_this.props.mapBbox.bounds:null;_this.props.iface.getFeatures(_this.editLayerId(selectedLayer),_this.props.mapCrs,function(result){if(result){var features=result.features||[];_this.setState(function(state2){return{loading:false,features:features,filteredSortedFeatures:_this.filteredSortedFeatures(features,state2),loadedLayer:selectedLayer}})}else{// eslint-disable-next-line
8
- alert(LocaleUtils.tr("attribtable.loadfailed"));_this.setState({loading:false,features:[],filteredSortedFeatures:[],loadedLayer:""})}},bbox,(_this$props$filter$fi=_this.props.filter.filterParams)===null||_this$props$filter$fi===void 0?void 0:_this$props$filter$fi[selectedLayer],_this.props.filter.filterGeom);return _objectSpread(_objectSpread({},AttributeTableWidget.defaultState),{},{loading:true,selectedLayer:selectedLayer,limitToExtent:state.limitToExtent})})});_defineProperty(_this,"sortBy",function(field){var newState={};if(_this.state.sortField&&_this.state.sortField.field===field){newState={sortField:{field:field,dir:-_this.state.sortField.dir}}}else{newState={sortField:{field:field,dir:1}}}newState.filteredSortedFeatures=_this.filteredSortedFeatures(_this.state.features,_objectSpread(_objectSpread({},_this.state),newState));_this.setState(newState)});_defineProperty(_this,"editLayerId",function(layerId){if(_this.props.theme&&_this.props.theme.editConfig&&_this.props.theme.editConfig[layerId]){return _this.props.theme.editConfig[layerId].editDataset||layerId}return layerId});_defineProperty(_this,"renderField",function(currentEditConfig,field,featureidx,filteredIndex,fielddisabled){var feature=_this.state.features[featureidx];var value=feature.properties[field.id];if(value===undefined||value===null){value=""}var updateField=function updateField(fieldid,val){var emptynull=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return _this.updateField(featureidx,filteredIndex,fieldid,val,emptynull)};var constraints=field.constraints||{};var disabled=constraints.readOnly||fielddisabled;var input=null;if(field.type==="boolean"||field.type==="bool"){input=/*#__PURE__*/React.createElement("input",_extends({name:field.id},constraints,{checked:value,disabled:disabled,onChange:function onChange(ev){return updateField(field.id,ev.target.checked)},type:"checkbox"}))}else if(constraints.values||constraints.keyvalrel){var filterExpr=null;if(field.filterExpression){var mapPrefix=(currentEditConfig.editDataset.match(/^[^.]+\./)||[""])[0];filterExpr=parseExpression(field.filterExpression,feature,_this.editLayerId(_this.state.selectedLayer),_this.props.iface,mapPrefix,_this.props.mapCrs,function(){return _this.setState({reevaluate:+new Date})},true)}input=/*#__PURE__*/React.createElement(EditComboField,{editIface:_this.props.iface,fieldId:field.id,filterExpr:filterExpr,keyvalrel:constraints.keyvalrel,name:field.id,readOnly:constraints.readOnly||disabled,required:constraints.required,updateField:updateField,value:value,values:constraints.values})}else if(field.type==="number"){var _constraints$prec,_constraints$step;var precision=(_constraints$prec=constraints.prec)!==null&&_constraints$prec!==void 0?_constraints$prec:0;var step=(_constraints$step=constraints.step)!==null&&_constraints$step!==void 0?_constraints$step:1;input=/*#__PURE__*/React.createElement(NumberInput,{decimals:precision,disabled:disabled,max:constraints.max,min:constraints.min,name:field.id,onChange:function onChange(v){return updateField(field.id,v,true)},readOnly:constraints.readOnly,required:constraints.required,step:step,value:value})}else if(field.type==="date"){// Truncate time portion of ISO date string
8
+ alert(LocaleUtils.tr("attribtable.loadfailed"));_this.setState({loading:false,features:[],filteredSortedFeatures:[],loadedLayer:""})}},bbox,(_this$props$filter$fi=_this.props.filter.filterParams)===null||_this$props$filter$fi===void 0?void 0:_this$props$filter$fi[selectedLayer],_this.props.filter.filterGeom);return _objectSpread(_objectSpread({},AttributeTableWidget.defaultState),{},{loading:true,selectedLayer:selectedLayer,limitToExtent:state.limitToExtent})})});_defineProperty(_this,"sortBy",function(field){var newState={};if(_this.state.sortField&&_this.state.sortField.field===field){newState={sortField:{field:field,dir:-_this.state.sortField.dir}}}else{newState={sortField:{field:field,dir:1}}}newState.filteredSortedFeatures=_this.filteredSortedFeatures(_this.state.features,_objectSpread(_objectSpread({},_this.state),newState));_this.setState(newState)});_defineProperty(_this,"editLayerId",function(layerId){if(_this.props.theme&&_this.props.theme.editConfig&&_this.props.theme.editConfig[layerId]){return _this.props.theme.editConfig[layerId].editDataset||layerId}return layerId});_defineProperty(_this,"renderField",function(currentEditConfig,field,featureidx,filteredIndex,fielddisabled){var feature=_this.state.features[featureidx];var value=feature.properties[field.id];if(value===undefined||value===null){value=""}var updateField=function updateField(fieldid,val){var emptynull=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return _this.updateField(featureidx,filteredIndex,fieldid,val,emptynull)};var constraints=field.constraints||{};var disabled=constraints.readOnly||fielddisabled;var input=null;if(field.type==="boolean"||field.type==="bool"){input=/*#__PURE__*/React.createElement("input",_extends({name:field.id},constraints,{checked:value,disabled:disabled,onChange:function onChange(ev){return updateField(field.id,ev.target.checked)},type:"checkbox"}))}else if(constraints.values||constraints.keyvalrel){var filterExpr=null;if(field.filterExpression){var mapPrefix=(currentEditConfig.editDataset.match(/^[^.]+\./)||[""])[0];filterExpr=parseExpression(field.filterExpression,feature,_this.editLayerId(_this.state.selectedLayer),_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
9
  value=value.substr(0,10);input=/*#__PURE__*/React.createElement("input",_extends({disabled:disabled,name:field.id,type:field.type},constraints,{onChange:function onChange(ev){return updateField(field.id,ev.target.value,true)},value:value}))}else if(field.type==="file"){return/*#__PURE__*/React.createElement(EditUploadField,{constraints:constraints,dataset:_this.editLayerId(_this.state.selectedLayer),disabled:disabled,fieldId:field.id,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});features.forEach(function(feature){_this.props.iface.deleteFeature(_this.editLayerId(state.selectedLayer),feature.id,function(success){_this.setState(function(state2){var newState={deleteTask:_objectSpread(_objectSpread({},state2.deleteTask),{},{pending:state2.deleteTask.pending.filter(function(entry){return entry!==feature.id}),failed:success?state2.deleteTask.failed:[].concat(_toConsumableArray(state2.deleteTask.failed),[feature.id]),deleted:!success?state2.deleteTask.deleted:[].concat(_toConsumableArray(state2.deleteTask.deleted),[feature.id])})};if(isEmpty(newState.deleteTask.pending)){newState.features=state.features.filter(function(f){return!newState.deleteTask.deleted.includes(f.id)});newState.filteredSortedFeatures=_this.filteredSortedFeatures(newState.features,state);if(!isEmpty(newState.deleteTask.failed)){// eslint-disable-next-line
11
- alert(LocaleUtils.tr("attribtable.deletefailed"))}newState.deleteTask=null;newState.currentPage=Math.floor((newState.features.length-1)/state.pageSize);newState.selectedFeatures={};newState.confirmDelete=false}return newState})},state.captchaResponse)});return{deleteTask:{pending:features.map(function(feature){return feature.id}),failed:[],deleted:[]}}})});_defineProperty(_this,"updateField",function(featureidx,filteredIdx,fieldid,value,emptynull){_this.props.setCurrentTaskBlocked(true,LocaleUtils.tr("editing.unsavedchanged"));_this.setState(function(state){value=value===""&&emptynull?null:value;var newFeatures=_toConsumableArray(state.features);newFeatures[featureidx]=_objectSpread({},newFeatures[featureidx]);newFeatures[featureidx].properties=_objectSpread(_objectSpread({},newFeatures[featureidx].properties),{},_defineProperty({},fieldid,value));var newfilteredSortedFeatures=_toConsumableArray(state.filteredSortedFeatures);newfilteredSortedFeatures[filteredIdx]=_objectSpread({},newfilteredSortedFeatures[filteredIdx]);newfilteredSortedFeatures[filteredIdx].properties=_objectSpread(_objectSpread({},newfilteredSortedFeatures[filteredIdx].properties),{},_defineProperty({},fieldid,value));var originalFeatureProps=state.originalFeatureProps||_objectSpread({},state.features[featureidx].properties);return{features:newFeatures,filteredSortedFeatures:newfilteredSortedFeatures,changedFeatureIdx:featureidx,originalFeatureProps:originalFeatureProps}})});_defineProperty(_this,"commit",function(){var feature=_objectSpread(_objectSpread({},_this.state.features[_this.state.changedFeatureIdx]),{},{crs:{type:"name",properties:{name:CoordinatesUtils.toOgcUrnCrs(_this.props.mapCrs)}}});var featureData=new FormData;featureData.set("feature",JSON.stringify(feature));Object.entries(_this.changedFiles).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],value=_ref2[1];return featureData.set("file:"+key,value)});if(_this.state.captchaResponse){featureData.set("g-recaptcha-response",_this.state.captchaResponse)}if(_this.state.newFeature){_this.props.iface.addFeatureMultipart(_this.editLayerId(_this.state.selectedLayer),featureData,function(success,result){return _this.featureCommited(success,result)})}else{_this.props.iface.editFeatureMultipart(_this.editLayerId(_this.state.loadedLayer),feature.id,featureData,function(success,result){return _this.featureCommited(success,result)})}});_defineProperty(_this,"featureCommited",function(success,result){if(!success){// eslint-disable-next-line
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)}}});// Omit geometry if it is read-only
12
+ var editConfig=_this.props.theme.editConfig||{};var currentEditConfig=editConfig[_this.state.loadedLayer];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(_this.editLayerId(_this.state.selectedLayer),featureData,function(success,result){return _this.featureCommited(success,result)})}else{_this.props.iface.editFeatureMultipart(_this.editLayerId(_this.state.loadedLayer),feature.id,featureData,function(success,result){return _this.featureCommited(success,result)})}});_defineProperty(_this,"featureCommited",function(success,result){if(!success){// eslint-disable-next-line
12
13
  alert(result)}else{_this.changedFiles={};_this.setState(function(state){var newFeatures=_toConsumableArray(state.features);newFeatures[state.changedFeatureIdx]=result;return{features:newFeatures,filteredSortedFeatures:_this.filteredSortedFeatures(newFeatures,state),changedFeatureIdx:null,originalFeatureProps:null,newFeature:false}})}_this.props.setCurrentTaskBlocked(false)});_defineProperty(_this,"discard",function(){var newFeatures=_toConsumableArray(_this.state.features);if(_this.state.newFeature){newFeatures.splice(_this.state.changedFeatureIdx,1)}else{var featureidx=_this.state.changedFeatureIdx;newFeatures[featureidx]=_objectSpread({},newFeatures[featureidx]);newFeatures[featureidx].properties=_this.state.originalFeatureProps}_this.changedFiles={};_this.setState(function(state){return{features:newFeatures,filteredSortedFeatures:_this.filteredSortedFeatures(newFeatures,state),changedFeatureIdx:null,originalFeatureProps:null,newFeature:false}});_this.props.setCurrentTaskBlocked(false)});_defineProperty(_this,"highlightFeatures",function(){var features=[];if(_this.state.highlightedFeature){features.push(_this.state.highlightedFeature)}else if(_this.state.filterVal){features.push.apply(features,_toConsumableArray(Object.values(_this.state.filteredSortedFeatures)))}var layer={id:"__attributetablehighlight",role:LayerRole.SELECTION};_this.props.addLayerFeatures(layer,features.map(function(f){return{id:f.id,geometry:f.geometry}}),true)});_defineProperty(_this,"zoomToSelection",function(){var collection={type:"FeatureCollection",features:_this.state.filteredSortedFeatures.filter(function(feature){return _this.state.selectedFeatures[feature.id]===true&&feature.geometry})};if(!isEmpty(collection.features)){if(collection.features.length===1&&collection.features[0].geometry.type==="Point"){var zoom=MapUtils.computeZoom(_this.props.mapScales,_this.props.zoomLevel);_this.props.zoomToPoint(collection.features[0].geometry.coordinates,zoom,_this.props.mapCrs)}else{_this.props.zoomToExtent(VectorLayerUtils.computeFeatureBBox(collection),_this.props.mapCrs)}}});_defineProperty(_this,"switchToFormEditMode",function(){var editConfig=_this.props.theme.editConfig||{};var currentEditConfig=editConfig[_this.state.loadedLayer];var hasGeometry=(currentEditConfig||{}).geomType!==null;if(!hasGeometry){// eslint-disable-next-line
13
14
  alert(LocaleUtils.tr("attribtable.nogeomnoform"));return}var feature=_this.state.filteredSortedFeatures.find(function(f){return _this.state.selectedFeatures[f.id]===true});_this.props.setCurrentTask("Editing",null,null,{layer:_this.state.loadedLayer,feature:feature})});_defineProperty(_this,"updateFilter",function(field,val){var resetPage=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;_this.setState(function(state){return _defineProperty(_defineProperty(_defineProperty({},field,val),"currentPage",resetPage?0:state.currentPage),"filteredSortedFeatures",_this.filteredSortedFeatures(state.features,_objectSpread(_objectSpread({},state),{},_defineProperty({},field,val))))})});_defineProperty(_this,"filteredSortedFeatures",function(features,state){var filteredFeatures=[];if(!state.filterVal){filteredFeatures=features.map(function(feature,idx){return _objectSpread(_objectSpread({},feature),{},{originalIndex:idx})})}else{var filterVal=state.filterVal.toLowerCase();var test=null;if(state.filterOp==="~"){test=function test(x){return String(x).toLowerCase().includes(filterVal)}}else if(state.filterOp==="="){test=function test(x){return String(x).toLowerCase()===filterVal}}else if(state.filterOp===">"){test=function test(x){return Number(x)>Number(filterVal)}}else if(state.filterOp===">="){test=function test(x){return Number(x)>=Number(filterVal)}}else if(state.filterOp==="<="){test=function test(x){return Number(x)<=Number(filterVal)}}else if(state.filterOp==="<"){test=function test(x){return Number(x)<Number(filterVal)}}// Build value relation lookup
14
15
  var editConfig=_this.props.theme.editConfig||{};var currentEditConfig=editConfig[_this.state.loadedLayer];var valueLookup=currentEditConfig.fields.reduce(function(res,field){if(field.constraints&&field.constraints.values){res[field.id]=field.constraints.values.reduce(function(res2,constraint){res2[constraint.value]=constraint.label;return res2},{})}else if(field.constraints&&field.constraints.keyvalrel){res[field.id]=KeyValCache.getSync(field.constraints.keyvalrel).reduce(function(res2,entry){res2[entry.value]=entry.label;return res2},{})}return res},{});var filterFieldValue=state.filterField==="id"?function(feature){return feature.id}:function(feature){var value=feature.properties[state.filterField];return valueLookup[state.filterField]?valueLookup[state.filterField][value]:value};filteredFeatures=features.reduce(function(res,feature,idx){if(test(filterFieldValue(feature))){res.push(_objectSpread(_objectSpread({},feature),{},{originalIndex:idx}))}return res},[])}if(state.sortField){var sortFieldValue=state.sortField.field==="id"?function(feature){return feature.id}:function(feature){return feature.properties[state.sortField.field]};return filteredFeatures.sort(function(f1,f2){var v1=String(sortFieldValue(f1));var v2=String(sortFieldValue(f2));return v1.localeCompare(v2,undefined,{numeric:true,sensitivity:"base"})*state.sortField.dir})}else{return filteredFeatures}});_defineProperty(_this,"resizeTable",function(ev,index,resizeCol){if(_this.table){var element=_this.table.getElementsByTagName(resizeCol?"th":"tr")[index];var initial=0;if(resizeCol){initial=parseFloat(element.style.minWidth.replace(/px$/,""))||element.clientWidth}else{initial=parseFloat(element.style.height.replace(/px$/,""))||element.clientHeight}var resize={anchor:resizeCol?ev.clientX:ev.clientY,element:element,initial:initial};var resizeDo=resizeCol?function(event){var delta=event.clientX-resize.anchor;resize.element.style.minWidth=Math.max(resize.initial+delta,16)+"px";resize.element.style.width=Math.max(resize.initial+delta,16)+"px"}:function(event){var delta=event.clientY-resize.anchor;resize.element.style.height=Math.max(resize.initial+delta,16)+"px"};var eventShield=ev.view.document.createElement("div");eventShield.className="__event_shield";ev.view.document.body.appendChild(eventShield);ev.view.document.body.classList.add(resizeCol?"ewresizing":"nsresizing");ev.view.addEventListener("mousemove",resizeDo);ev.view.addEventListener("mouseup",function(event){event.view.document.body.removeChild(eventShield);event.view.removeEventListener("mousemove",resizeDo);event.view.document.body.classList.remove(resizeCol?"ewresizing":"nsresizing")},{once:true})}});_defineProperty(_this,"csvExport",function(){var editConfig=_this.props.theme.editConfig||{};var currentEditConfig=editConfig[_this.state.loadedLayer];if(!currentEditConfig){return}var fields=currentEditConfig.fields.filter(function(field){return field.id!=="id"});var data="";data+="id,"+fields.map(function(field){return"\"".concat(field.name.replaceAll("\"","\"\""),"\"")}).join(",")+"\n";_this.state.features.forEach(function(feature){data+=feature.id+","+fields.map(function(field){var value=feature.properties[field.id];if(value===null||value===undefined){return"null"}else{return"\"".concat(String(feature.properties[field.id]).replaceAll("\"","\"\""),"\"")}}).join(",")+"\n"});FileSaver.saveAs(new Blob([data],{type:"text/plain;charset=utf-8"}),_this.state.loadedLayer+".csv")});_this.changedFiles={};_this.state=AttributeTableWidget.defaultState;_this.table=null;_this.attribTableContents=null;return _this}_inherits(AttributeTableWidget,_React$Component);return _createClass(AttributeTableWidget,[{key:"componentDidMount",value:function componentDidMount(){if(this.props.initialLayer){this.reload(this.props.initialLayer)}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.state.newFeature&&!prevState.newFeature){if(this.attribTableContents){this.attribTableContents.scrollTop=this.attribTableContents.scrollHeight}}// Reload conditions when limited to extent
@@ -16,15 +16,15 @@ preprocessor: function(formData, feature, callback)
16
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,updateField,nametransform)}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
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,updateField){var _widget$name,_this$props$fields$wi;var nametransform=arguments.length>4&&arguments[4]!==undefined?arguments[4]:function(name){return name};var disabled=arguments.length>5&&arguments[5]!==undefined?arguments[5]: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 fieldConstraints=((_this$props$fields$wi=_this.props.fields[widget.name])===null||_this$props$fields$wi===void 0?void 0:_this$props$fields$wi.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"){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"){if(isEmpty(widget.widget)){return null}var activetab=_this.state.activetabs[widget.name]||widget.widget[0].name;var tabs=widget.widget.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"},widget.widget.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: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: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 _this$props$fields$at,_attrname,_this$props$fields$at2;// 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,dataset,updateField){var _widget$name,_this$props$fields$wi;var nametransform=arguments.length>4&&arguments[4]!==undefined?arguments[4]:function(name){return name};var disabled=arguments.length>5&&arguments[5]!==undefined?arguments[5]: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 fieldConstraints=((_this$props$fields$wi=_this.props.fields[widget.name])===null||_this$props$fields$wi===void 0?void 0:_this$props$fields$wi.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"){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"){if(isEmpty(widget.widget)){return null}var activetab=_this.state.activetabs[widget.name]||widget.widget[0].name;var tabs=widget.widget.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"},widget.widget.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,_currentEditConfig$fi,_currentEditConfig$fi2;// kvrel__attrname__datatable__keyfield__valuefield
20
20
  // kvrel__reltablename__attrname__datatable__keyfield__valuefield
21
- var count=parts.length;var attrname=parts.slice(1,count-3).join("__");var comboFieldConstraints=((_this$props$fields$at=_this.props.fields[attrname])===null||_this$props$fields$at===void 0?void 0:_this$props$fields$at.constraints)||{};value=(_attrname=(feature.properties||[])[attrname])!==null&&_attrname!==void 0?_attrname:"";var _fieldId=parts.slice(1,count-3).join("__");var keyvalrel=_this.props.mapPrefix+parts[count-3]+":"+parts[count-2]+":"+parts[count-1];var filterExpr=null;if((_this$props$fields$at2=_this.props.fields[attrname])!==null&&_this$props$fields$at2!==void 0&&_this$props$fields$at2.filterExpression){filterExpr=parseExpression(_this.props.fields[attrname].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(attrname),placeholder:inputConstraints.placeholder,readOnly:inputConstraints.readOnly||comboFieldConstraints.readOnly,required:inputConstraints.required||comboFieldConstraints.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{var _feature$properties$w3,_feature$properties4;value=(_feature$properties$w3=(_feature$properties4=feature.properties)===null||_feature$properties4===void 0?void 0:_feature$properties4[widget.name])!==null&&_feature$properties$w3!==void 0?_feature$properties$w3:null;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 isRelAttr=count===6;var attrname=parts[isRelAttr?2:1];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;var currentLayerId=isRelAttr?parts[1]:_this.props.editLayerId.split(".")[1];var currentEditConfig=_this.props.editConfig[currentLayerId];var comboFieldConstraints=((_currentEditConfig$fi=currentEditConfig.fields.find(function(field){return field.id===attrname}))===null||_currentEditConfig$fi===void 0?void 0:_currentEditConfig$fi.constraints)||{};if((_currentEditConfig$fi2=currentEditConfig.fields.find(function(field){return field.id===attrname}))!==null&&_currentEditConfig$fi2!==void 0&&_currentEditConfig$fi2.filterExpression){filterExpr=parseExpression(currentEditConfig.fields.find(function(field){return field.id===attrname}).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||comboFieldConstraints.readOnly,required:inputConstraints.required||comboFieldConstraints.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{var _feature$properties$w3,_feature$properties4;value=(_feature$properties$w3=(_feature$properties4=feature.properties)===null||_feature$properties4===void 0?void 0:_feature$properties4[widget.name])!==null&&_feature$properties$w3!==void 0?_feature$properties$w3:null;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
22
22
  // featurelink__layer__reltable__attrname
23
- if(_parts.length===3||_parts.length===4){var _feature$properties5;var layer=_parts[1];var reltable=_parts.length===4?_parts[2]:"";var _attrname2=_parts.slice(2).join("__");value=(_feature$properties5=feature.properties)===null||_feature$properties5===void 0?void 0:_feature$properties5[_attrname2];if(layer===reltable){var index=parseInt(nametransform("").split("__")[1],10);// Ugh..
24
- var reldataset=_this.props.mapPrefix+reltable;var displayField=_attrname2.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(_attrname2,v)},_attrname2)}}),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return updateField(_attrname2,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(_attrname2,v)},_attrname2)}})}}}}}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$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"}:{}});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
23
+ if(_parts.length===3||_parts.length===4){var _feature$properties5;var layer=_parts[1];var reltable=_parts.length===4?_parts[2]:"";var _attrname=_parts.slice(2).join("__");value=(_feature$properties5=feature.properties)===null||_feature$properties5===void 0?void 0:_feature$properties5[_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$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"}:{}});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
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
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,updateField,nametransform,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",onMouseDown:_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("mousemove",resizeInput);ev.view.addEventListener("mouseup",function(){ev.view.document.body.style.userSelect="";ev.view.removeEventListener("mousemove",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
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
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
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,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();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,editConfig: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);
@@ -7,5 +7,6 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
7
7
  * LICENSE file in the root directory of this source tree.
8
8
  */import axios from"axios";import ol from"openlayers";import url from"url";import ConfigUtils from"../../../utils/ConfigUtils";import CoordinatesUtils from"../../../utils/CoordinatesUtils";import MiscUtils from"../../../utils/MiscUtils";export function wmsImageLoadFunction(image,src){var maxUrlLength=ConfigUtils.getConfigProp("wmsMaxGetUrlLength",null,2048);var postOrigins=ConfigUtils.getConfigProp("wmsPostOrigins",null,[]);var reqOrigin=new URL(src,location.href).origin;if(src.length>maxUrlLength&&(location.origin===reqOrigin||postOrigins.includes(reqOrigin))){// Switch to POST if url is too long
9
9
  var urlParts=src.split("?");urlParts[1]+="&csrf_token="+MiscUtils.getCsrfToken();var options={headers:{"content-type":"application/x-www-form-urlencoded"},responseType:"blob"};axios.post(urlParts[0],urlParts[1],options).then(function(response){var reader=new FileReader;reader.readAsDataURL(response.data);reader.onload=function(){image.src=reader.result}})["catch"](function(){// Fall back to GET
10
- image.src=src})}else{image.src=src}}export function wmsToOpenlayersOptions(options){var _ref3,_urlParams$TILED;var urlParams=Object.entries(url.parse(options.url,true).query).reduce(function(res,_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],val=_ref2[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},key.toUpperCase(),val))},{});return _objectSpread(_objectSpread({},urlParams),{},{LAYERS:options.name,STYLES:options.style||"",FORMAT:options.format||"image/png",TRANSPARENT:options.transparent!==undefined?options.transparent:true,SRS:options.projection,CRS:options.projection,TILED:String((_ref3=(_urlParams$TILED=urlParams.TILED)!==null&&_urlParams$TILED!==void 0?_urlParams$TILED:options.tiled)!==null&&_ref3!==void 0?_ref3:false).toLowerCase()==="true",VERSION:options.version,DPI:options.serverType==="qgis"?options.dpi||ConfigUtils.getConfigProp("wmsDpi")||96:undefined},options.params)}export function getClientSideOpacity(queryParameters){var _queryParameters$OPAC;// If WMS parameters contain only one opacity value, set opacity client side (as some WMS servers don't support opacity)
11
- var opacities=((_queryParameters$OPAC=queryParameters.OPACITIES)!==null&&_queryParameters$OPAC!==void 0?_queryParameters$OPAC:"255").split(",");if(opacities.length===1){queryParameters.OPACITIES="255";return parseInt(opacities[0],10)/255}return undefined}export default{create:function create(options,map){var queryParameters=_objectSpread(_objectSpread({},wmsToOpenlayersOptions(options)),{},{__t:+new Date});var clientSideOpacity=getClientSideOpacity(queryParameters);if(queryParameters.TILED&&!options.bbox){/* eslint-disable-next-line */console.warn("Tiled WMS requested without specifying bounding box, falling back to non-tiled.")}var layer=null;if(!queryParameters.TILED||!options.bbox){layer=new ol.layer.Image(_objectSpread({minResolution:options.minResolution,maxResolution:options.maxResolution,source:new ol.source.ImageWMS(_objectSpread({url:options.url.split("?")[0],serverType:options.serverType,params:queryParameters,ratio:options.ratio||1,hidpi:ConfigUtils.getConfigProp("wmsHidpi")!==false?true:false,imageLoadFunction:function imageLoadFunction(image,src){return wmsImageLoadFunction(image.getImage(),src)}},options.sourceConfig||{}))},options.layerConfig||{}))}else{var extent=CoordinatesUtils.reprojectBbox(options.bbox.bounds,options.bbox.crs,options.projection);var tileGrid=new ol.tilegrid.TileGrid({extent:extent,tileSize:options.tileSize||256,maxZoom:map.getView().getResolutions().length,resolutions:map.getView().getResolutions()});layer=new ol.layer.Tile(_objectSpread({minResolution:options.minResolution,maxResolution:options.maxResolution,preload:ConfigUtils.getConfigProp("tilePreloadLevels",null,0),source:new ol.source.TileWMS(_objectSpread({urls:[options.url.split("?")[0]],params:queryParameters,serverType:options.serverType,tileGrid:tileGrid,hidpi:ConfigUtils.getConfigProp("wmsHidpi")!==false?true:false,tileLoadFunction:function tileLoadFunction(imageTile,src){return wmsImageLoadFunction(imageTile.getImage(),src)}},options.sourceConfig||{}))},options.layerConfig||{}))}layer.setVisible(queryParameters.LAYERS&&options.visibility);layer.setOpacity(clientSideOpacity!==null&&clientSideOpacity!==void 0?clientSideOpacity:100);return layer},update:function update(layer,newOptions,oldOptions){var _layer$getSource;if(oldOptions&&layer!==null&&layer!==void 0&&(_layer$getSource=layer.getSource())!==null&&_layer$getSource!==void 0&&_layer$getSource.updateParams){var changed=(oldOptions.rev||0)!==(newOptions.rev||0);var oldParams=wmsToOpenlayersOptions(oldOptions);getClientSideOpacity(oldParams);var newParams=wmsToOpenlayersOptions(newOptions);var clientSideOpacity=getClientSideOpacity(newParams);Object.keys(oldParams).forEach(function(key){if(!(key in newParams)){newParams[key]=undefined}});if(!changed){changed=Object.keys(newParams).find(function(key){return newParams[key]!==oldParams[key]})!==undefined}changed|=newOptions.visibility!==oldOptions.visibility;if(changed){var queryParameters=_objectSpread(_objectSpread({},newParams),{},{__t:+new Date});if(layer.get("updateTimeout")){clearTimeout(layer.get("updateTimeout"))}if(!newOptions.visibility||!queryParameters.LAYERS){layer.setVisible(false)}layer.setOpacity(clientSideOpacity!==null&&clientSideOpacity!==void 0?clientSideOpacity:100);layer.set("updateTimeout",setTimeout(function(){layer.setVisible(queryParameters.LAYERS&&newOptions.visibility);layer.getSource().updateParams(queryParameters);layer.getSource().changed();layer.set("updateTimeout",null)},500))}else{layer.setOpacity(clientSideOpacity!==null&&clientSideOpacity!==void 0?clientSideOpacity:100)}}}};
10
+ image.src=src})}else{image.src=src}}export function wmsToOpenlayersOptions(options){var _ref3,_urlParams$TILED;var urlParams=Object.entries(url.parse(options.url,true).query).reduce(function(res,_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],val=_ref2[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},key.toUpperCase(),val))},{});return _objectSpread(_objectSpread({},urlParams),{},{LAYERS:options.name,STYLES:options.style||"",FORMAT:options.format||"image/png",TRANSPARENT:options.transparent!==undefined?options.transparent:true,SRS:options.projection,CRS:options.projection,TILED:String((_ref3=(_urlParams$TILED=urlParams.TILED)!==null&&_urlParams$TILED!==void 0?_urlParams$TILED:options.tiled)!==null&&_ref3!==void 0?_ref3:false).toLowerCase()==="true",VERSION:options.version,DPI:options.serverType==="qgis"?options.dpi||ConfigUtils.getConfigProp("wmsDpi")||96:undefined},options.params)}export function getClientSideOpacity(options,queryParameters){var _queryParameters$OPAC;// If no OPACITIES in WMS params, just return options.opacity
11
+ if(!queryParameters.OPACITIES){var _options$opacity;return((_options$opacity=options.opacity)!==null&&_options$opacity!==void 0?_options$opacity:255)/255}// If WMS parameters contain only one opacity value, set opacity client side (as some WMS servers don't support opacity)
12
+ var opacities=((_queryParameters$OPAC=queryParameters.OPACITIES)!==null&&_queryParameters$OPAC!==void 0?_queryParameters$OPAC:"255").split(",");if(opacities.length===1){queryParameters.OPACITIES="255";return parseInt(opacities[0],10)/255}return undefined}export default{create:function create(options,map){var queryParameters=_objectSpread(_objectSpread({},wmsToOpenlayersOptions(options)),{},{__t:+new Date});var clientSideOpacity=getClientSideOpacity(options,queryParameters);if(queryParameters.TILED&&!options.bbox){/* eslint-disable-next-line */console.warn("Tiled WMS requested without specifying bounding box, falling back to non-tiled.")}var layer=null;if(!queryParameters.TILED||!options.bbox){layer=new ol.layer.Image(_objectSpread({minResolution:options.minResolution,maxResolution:options.maxResolution,source:new ol.source.ImageWMS(_objectSpread({url:options.url.split("?")[0],serverType:options.serverType,params:queryParameters,ratio:options.ratio||1,hidpi:ConfigUtils.getConfigProp("wmsHidpi")!==false?true:false,imageLoadFunction:function imageLoadFunction(image,src){return wmsImageLoadFunction(image.getImage(),src)}},options.sourceConfig||{}))},options.layerConfig||{}))}else{var extent=CoordinatesUtils.reprojectBbox(options.bbox.bounds,options.bbox.crs,options.projection);var tileGrid=new ol.tilegrid.TileGrid({extent:extent,tileSize:options.tileSize||256,maxZoom:map.getView().getResolutions().length,resolutions:map.getView().getResolutions()});layer=new ol.layer.Tile(_objectSpread({minResolution:options.minResolution,maxResolution:options.maxResolution,preload:ConfigUtils.getConfigProp("tilePreloadLevels",null,0),source:new ol.source.TileWMS(_objectSpread({urls:[options.url.split("?")[0]],params:queryParameters,serverType:options.serverType,tileGrid:tileGrid,hidpi:ConfigUtils.getConfigProp("wmsHidpi")!==false?true:false,tileLoadFunction:function tileLoadFunction(imageTile,src){return wmsImageLoadFunction(imageTile.getImage(),src)}},options.sourceConfig||{}))},options.layerConfig||{}))}layer.setVisible(queryParameters.LAYERS&&options.visibility);layer.setOpacity(clientSideOpacity!==null&&clientSideOpacity!==void 0?clientSideOpacity:100);return layer},update:function update(layer,newOptions,oldOptions){var _layer$getSource;if(oldOptions&&layer!==null&&layer!==void 0&&(_layer$getSource=layer.getSource())!==null&&_layer$getSource!==void 0&&_layer$getSource.updateParams){var changed=(oldOptions.rev||0)!==(newOptions.rev||0);var oldParams=wmsToOpenlayersOptions(oldOptions);getClientSideOpacity(oldOptions,oldParams);var newParams=wmsToOpenlayersOptions(newOptions);var clientSideOpacity=getClientSideOpacity(newOptions,newParams);Object.keys(oldParams).forEach(function(key){if(!(key in newParams)){newParams[key]=undefined}});if(!changed){changed=Object.keys(newParams).find(function(key){return newParams[key]!==oldParams[key]})!==undefined}changed|=newOptions.visibility!==oldOptions.visibility;if(changed){var queryParameters=_objectSpread(_objectSpread({},newParams),{},{__t:+new Date});if(layer.get("updateTimeout")){clearTimeout(layer.get("updateTimeout"))}if(!newOptions.visibility||!queryParameters.LAYERS){layer.setVisible(false)}layer.setOpacity(clientSideOpacity!==null&&clientSideOpacity!==void 0?clientSideOpacity:100);layer.set("updateTimeout",setTimeout(function(){layer.setVisible(queryParameters.LAYERS&&newOptions.visibility);layer.getSource().updateParams(queryParameters);layer.getSource().changed();layer.set("updateTimeout",null)},500))}else{layer.setOpacity(clientSideOpacity!==null&&clientSideOpacity!==void 0?clientSideOpacity:100)}}}};
@@ -1,5 +1,6 @@
1
1
  div.qt-designer-form {
2
2
  overflow: auto;
3
+ margin-bottom: 0.25em;
3
4
  }
4
5
 
5
6
  div.qt-designer-form textarea {
@@ -71,6 +71,7 @@ div.sidebar span.sidebar-titlebar-icon {
71
71
  div.sidebar span.sidebar-titlebar-title {
72
72
  font-weight: bold;
73
73
  flex: 0 0 auto;
74
+ margin-right: 0.25em;
74
75
  }
75
76
 
76
77
  div.sidebar span.sidebar-titlebar-spacer {
@@ -6,4 +6,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */import React from"react";import classNames from"classnames";import PropTypes from"prop-types";import Icon from"../Icon";import"./style/NumberInput.css";var NumberInput=/*#__PURE__*/function(_React$Component){function NumberInput(){var _this;_classCallCheck(this,NumberInput);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,NumberInput,[].concat(args));_defineProperty(_this,"state",{propValue:"",value:"",changed:false,valid:false});_defineProperty(_this,"onChange",function(ev){var len=ev.target.value.length;var value=ev.target.value.substring(_this.props.prefix.length,len-_this.props.suffix.length);_this.setState({value:value,changed:true})});_defineProperty(_this,"currentFloatValue",function(){var floatValue=parseFloat(_this.state.value);return isNaN(floatValue)?null:floatValue});_defineProperty(_this,"startStep",function(delta){if(_this.props.disabled||_this.props.readOnly){return}_this.props.onChange(_this.constrainValue(_this.currentFloatValue()+delta));var stepInterval=null;var stepTimeout=setTimeout(function(){stepInterval=setInterval(function(){_this.props.onChange(_this.constrainValue(_this.currentFloatValue()+delta))},50)},500);document.addEventListener("mouseup",function(){clearTimeout(stepTimeout);clearInterval(stepInterval)},{once:true})});_defineProperty(_this,"onKeyDown",function(ev){if(ev.key==="Enter"){_this.commit()}// Ensure prefix/suffix isn't changed
8
8
  var selStart=ev.target.selectionStart;var selEnd=ev.target.selectionEnd;var len=ev.target.value.length;var startOffset=ev.key==="Backspace"&&selStart===selEnd?1:0;var endOffset=ev.key==="Delete"&&selStart===selEnd?1:0;if(selStart<_this.props.prefix.length+startOffset||selEnd>len-_this.props.suffix.length-endOffset){ev.preventDefault()}});_defineProperty(_this,"commit",function(){if(_this.state.changed){var value=_this.constrainValue(_this.currentFloatValue());_this.setState({value:value===null?"":value.toFixed(_this.props.decimals)});_this.props.onChange(value)}});_defineProperty(_this,"constrainValue",function(value){if(value===null){return null}if(_this.props.min!==undefined){value=Math.max(_this.props.min,value)}if(_this.props.max!==undefined){value=Math.min(_this.props.max,value)}var k=Math.pow(10,_this.props.decimals);return Math.round(value*k)/k});_defineProperty(_this,"setupSelectionListener",function(event){var input=event.target;var selectionHandler=function selectionHandler(ev){if(ev.target===input){// Ensure prefix/suffix isn't selected
9
- var len=input.value.length;var prefixLen=_this.props.prefix.length;var suffixLen=_this.props.suffix.length;var selStart=Math.min(Math.max(input.selectionStart,prefixLen),len-suffixLen);var selEnd=Math.max(Math.min(input.selectionEnd,len-suffixLen),prefixLen);if(selStart!==input.selectionStart||selEnd!==input.selectionEnd){input.setSelectionRange(selStart,selEnd)}}};document.addEventListener("selectionchange",selectionHandler);input.addEventListener("blur",function(){document.removeEventListener("selectionchange",selectionHandler)},{once:true})});return _this}_inherits(NumberInput,_React$Component);return _createClass(NumberInput,[{key:"render",value:function render(){var _this$props$step,_this2=this;var className=classNames({"number-input":true,"number-input-mobile":this.props.mobile,"number-input-normal":!this.props.mobile,"number-input-disabled":this.props.disabled||this.props.readOnly,"number-input-invalid":this.props.required&&!this.state.value});var paddingLength=(this.props.mobile?4:1.5)+"em";var prefixSuffixLength=this.props.prefix.length+this.props.suffix.length+"ch";var numberLength=2+Math.max((this.props.min||0).toFixed(this.props.decimals).length,(this.props.max||0).toFixed(this.props.decimals).length)+"ch";var style={minWidth:"calc(".concat(paddingLength," + ").concat(prefixSuffixLength," + ").concat(numberLength,")")};var step=(_this$props$step=this.props.step)!==null&&_this$props$step!==void 0?_this$props$step:Math.pow(10,-this.props.decimals);var plusIcon=this.props.mobile?"plus":"chevron-up";var minusIcon=this.props.mobile?"minus":"chevron-down";return/*#__PURE__*/React.createElement("div",{className:className+" "+this.props.className},/*#__PURE__*/React.createElement("input",{disabled:this.props.disabled,onBlur:this.commit,onChange:this.onChange,onFocus:this.setupSelectionListener,onKeyDown:this.onKeyDown,placeholder:this.props.placeholder,readOnly:this.props.readOnly,required:this.props.required,style:style,type:"text",value:this.props.prefix+this.state.value+this.props.suffix}),/*#__PURE__*/React.createElement("input",{name:this.props.name,required:this.props.required,type:"hidden",value:this.state.value}),/*#__PURE__*/React.createElement(Icon,{icon:plusIcon,onMouseDown:function onMouseDown(){return _this2.startStep(+step)}}),/*#__PURE__*/React.createElement(Icon,{icon:minusIcon,onMouseDown:function onMouseDown(){return _this2.startStep(-step)}}))}}],[{key:"getDerivedStateFromProps",value:function getDerivedStateFromProps(nextProps,state){if(state.propValue!==nextProps.value){return{propValue:nextProps.value,value:typeof nextProps.value==="number"?nextProps.value.toFixed(nextProps.decimals):"",changed:false}}return null}}])}(React.Component);_defineProperty(NumberInput,"propTypes",{className:PropTypes.string,decimals:PropTypes.number,disabled:PropTypes.bool,max:PropTypes.number,min:PropTypes.number,mobile:PropTypes.bool,name:PropTypes.string,onChange:PropTypes.func,placeholder:PropTypes.string,prefix:PropTypes.string,readOnly:PropTypes.bool,required:PropTypes.bool,step:PropTypes.number,style:PropTypes.object,suffix:PropTypes.string,value:PropTypes.number});_defineProperty(NumberInput,"defaultProps",{className:"",decimals:0,mobile:false,prefix:"",suffix:""});export{NumberInput as default};
9
+ var len=input.value.length;var prefixLen=_this.props.prefix.length;var suffixLen=_this.props.suffix.length;var selStart=Math.min(Math.max(input.selectionStart,prefixLen),len-suffixLen);var selEnd=Math.max(Math.min(input.selectionEnd,len-suffixLen),prefixLen);if(selStart!==input.selectionStart||selEnd!==input.selectionEnd){input.setSelectionRange(selStart,selEnd)}}};document.addEventListener("selectionchange",selectionHandler);input.addEventListener("blur",function(){document.removeEventListener("selectionchange",selectionHandler)},{once:true})});return _this}_inherits(NumberInput,_React$Component);return _createClass(NumberInput,[{key:"render",value:function render(){var _this$props$step,_this2=this;var className=classNames({"number-input":true,"number-input-mobile":this.props.mobile,"number-input-normal":!this.props.mobile,"number-input-disabled":this.props.disabled||this.props.readOnly,"number-input-invalid":this.props.required&&!this.state.value});var style={};if(!this.props.fitParent){var paddingLength=(this.props.mobile?4:1.5)+"em";var prefixSuffixLength=this.props.prefix.length+this.props.suffix.length+"ch";var numberLength=2+Math.max((this.props.min||0).toFixed(this.props.decimals).length,(this.props.max||0).toFixed(this.props.decimals).length)+"ch";style.minWidth="calc(".concat(paddingLength," + ").concat(prefixSuffixLength," + ").concat(numberLength,")")}var step=(_this$props$step=this.props.step)!==null&&_this$props$step!==void 0?_this$props$step:Math.pow(10,-this.props.decimals);var plusIcon=this.props.mobile?"plus":"chevron-up";var minusIcon=this.props.mobile?"minus":"chevron-down";return/*#__PURE__*/React.createElement("div",{className:className+" "+this.props.className},/*#__PURE__*/React.createElement("input",{disabled:this.props.disabled,onBlur:this.commit,onChange:this.onChange,onFocus:this.setupSelectionListener,onKeyDown:this.onKeyDown,placeholder:this.props.placeholder,readOnly:this.props.readOnly,required:this.props.required,style:style,type:"text",value:this.props.prefix+this.state.value+this.props.suffix}),/*#__PURE__*/React.createElement("input",{name:this.props.name,required:this.props.required,type:"hidden",value:this.state.value}),/*#__PURE__*/React.createElement(Icon,{icon:plusIcon,onMouseDown:function onMouseDown(){return _this2.startStep(+step)}}),/*#__PURE__*/React.createElement(Icon,{icon:minusIcon,onMouseDown:function onMouseDown(){return _this2.startStep(-step)}}))}}],[{key:"getDerivedStateFromProps",value:function getDerivedStateFromProps(nextProps,state){if(state.propValue!==nextProps.value){return{propValue:nextProps.value,value:typeof nextProps.value==="number"?nextProps.value.toFixed(nextProps.decimals):"",changed:false}}return null}}])}(React.Component);_defineProperty(NumberInput,"propTypes",{className:PropTypes.string,decimals:PropTypes.number,disabled:PropTypes.bool,fitParent:PropTypes.bool,max:PropTypes.number,min:PropTypes.number,mobile:PropTypes.bool,name:PropTypes.string,onChange:PropTypes.func,placeholder:PropTypes.string,prefix:PropTypes.string,readOnly:PropTypes.bool,required:PropTypes.bool,step:PropTypes.number,style:PropTypes.object,suffix:PropTypes.string,value:PropTypes.number});_defineProperty(NumberInput,"defaultProps",{className:"",decimals:0,mobile:false,prefix:"",suffix:""});export{NumberInput as default};
@@ -1,7 +1,7 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
1
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
2
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 classNames from"classnames";import PropTypes from"prop-types";import LocaleUtils from"../../utils/LocaleUtils";import MiscUtils from"../../utils/MiscUtils";import Icon from"../Icon";import"./style/TextInput.css";var TextInput=/*#__PURE__*/function(_React$Component){function TextInput(props){var _this;_classCallCheck(this,TextInput);_this=_callSuper(this,TextInput,[props]);_defineProperty(_this,"state",{focus:false,value:"",valueRev:0,curValue:"",changed:false});_defineProperty(_this,"setDefaultValue",function(value,valueRev,prevValueRef){if(valueRev>prevValueRef){_this.input.innerHTML=value}});_defineProperty(_this,"onCopy",function(ev,cut){ev.preventDefault();var selection=window.getSelection();var plainText=selection.toString();if(ev.clipboardData){ev.clipboardData.setData("text/plain",plainText)}if(cut){_this.clear()}});_defineProperty(_this,"clear",function(){var clearValue=_this.props.clearValue;_this.props.onChange(clearValue);_this.setState(function(state){return{curValue:_this.props.clearValue,changed:state.value!==clearValue}});_this.input.innerHTML=clearValue});_defineProperty(_this,"onChange",function(ev){var curValue=ev.target.innerText.replace(/<br\s*\/?>$/,"").replace(/\n$/,"");if(!_this.props.multiline){curValue=curValue.replace("\n","")}_this.setState({curValue:curValue,changed:true})});_defineProperty(_this,"onBlur",function(){_this.setState({focus:false});if(!_this.skipNextCommitOnBlur){_this.commit()}});_defineProperty(_this,"onFocus",function(ev){_this.setState({focus:true});window.setTimeout(function(){if(window.getSelection&&document.createRange){var range=document.createRange();range.selectNodeContents(ev.target);var sel=window.getSelection();sel.removeAllRanges();sel.addRange(range)}else if(document.body.createTextRange){var _range=document.body.createTextRange();_range.moveToElementText(ev.target);_range.select()}},1)});_defineProperty(_this,"onMouseDown",function(ev){var el=document.elementFromPoint(ev.clientX,ev.clientY);if((el===null||el===void 0?void 0:el.nodeName)==="A"&&ev.ctrlKey){window.open(el.href,el.target)}});_defineProperty(_this,"onMouseMove",function(ev){var isTouch="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0;clearTimeout(_this.tooltipTimeout);var editable=!_this.props.disabled&&!_this.props.readOnly;if(!isTouch&&editable&&ev.target.nodeName==="A"){var rect=ev.target.getBoundingClientRect();var left=rect.left+window.scrollX;var bottom=rect.bottom+window.scrollY+2;_this.tooltipTimeout=setTimeout(function(){if(!_this.tooltipEl){_this.tooltipEl=document.createElement("span");_this.tooltipEl.className="text-input-link-tooltip";_this.tooltipEl.innerHTML=LocaleUtils.tr("misc.ctrlclickhint");_this.tooltipEl.style.position="absolute";_this.tooltipEl.style.zIndex=10000000000;document.body.appendChild(_this.tooltipEl)}_this.tooltipEl.style.left=left+"px";_this.tooltipEl.style.top=bottom+"px";_this.tooltipTimeout=null},250)}else if(_this.tooltipEl){document.body.removeChild(_this.tooltipEl);_this.tooltipEl=null}});_defineProperty(_this,"onMouseLeave",function(){clearTimeout(_this.tooltipTimeout);if(_this.tooltipEl){document.body.removeChild(_this.tooltipEl);_this.tooltipEl=null}});_defineProperty(_this,"onKeyDown",function(ev){if(ev.key==="Enter"&&!_this.props.multiline){ev.preventDefault();_this.commit()}else if(ev.key==="Escape"){_this.setState(function(state){return{value:_this.props.value,valueRev:state.valueRev+1,curValue:_this.props.value||"",changed:false}});_this.skipNextCommitOnBlur=true;ev.target.blur()}});_defineProperty(_this,"commit",function(){if(_this.state.changed){if(_this.props.addLinkAnchors){var valueWithLinks=MiscUtils.addLinkAnchors(_this.state.curValue);_this.props.onChange(valueWithLinks)}else{_this.props.onChange(_this.state.curValue)}}});_defineProperty(_this,"storeInitialHeight",function(el){if(el){_this.initialHeight=el.offsetHeight}});_defineProperty(_this,"startResize",function(ev){var container=ev.target.parentElement;if(!container){return}var startHeight=container.offsetHeight;var startMouseY=ev.clientY;var resizeInput=function resizeInput(event){container.style.height=Math.max(_this.initialHeight,startHeight+(event.clientY-startMouseY))+"px"};document.body.style.userSelect="none";ev.view.addEventListener("mousemove",resizeInput);ev.view.addEventListener("mouseup",function(){document.body.style.userSelect="";ev.view.removeEventListener("mousemove",resizeInput)},{once:true})});_this.skipNextCommitOnBlur=false;_this.focusEnterClick=false;_this.initialHeight=null;_this.input=null;_this.tooltipEl=null;_this.tooltipTimeout=null;return _this}_inherits(TextInput,_React$Component);return _createClass(TextInput,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){this.setDefaultValue(this.state.value,this.state.valueRev,prevState.valueRev)}},{key:"render",value:function render(){var _this2=this;var wrapperClassName=classNames({"TextInput":true,"text-input-wrapper":true,"text-input-wrapper-multiline":this.props.multiline});var preClassName=classNames({"text-input":true,"text-input-disabled":this.props.disabled,"text-input-readonly":this.props.readOnly||!this.state.curValue,"text-input-invalid":this.props.required&&!this.state.curValue});return/*#__PURE__*/React.createElement("div",{className:wrapperClassName+" "+(this.props.className||""),ref:this.storeInitialHeight},this.props.name?/*#__PURE__*/React.createElement("textarea",{className:"text-input-form-el",name:this.props.name,onChange:function onChange(){},required:this.props.required,tabIndex:"-1",value:this.state.curValue}):null,/*#__PURE__*/React.createElement("pre",{className:preClassName,contentEditable:!this.props.disabled&&!this.props.readOnly,dangerouslySetInnerHTML:{__html:this.state.value},onBlur:this.onBlur,onChange:this.onChange,onCopy:function onCopy(ev){return _this2.onCopy(ev,false)},onCut:function onCut(ev){return _this2.onCopy(ev,true)},onFocus:this.onFocus,onInput:this.onChange,onKeyDown:this.onKeyDown,onMouseDown:this.onMouseDown,onMouseLeave:this.onMouseLeave,onMouseMove:this.onMouseMove,ref:function ref(el){_this2.input=el},style:this.props.style}),!this.state.curValue?/*#__PURE__*/React.createElement("div",{className:"text-input-placeholder"},this.props.placeholder):null,this.props.multiline?/*#__PURE__*/React.createElement("div",{className:"text-input-resize-handle",onMouseDown:this.startResize}):null,this.state.focus&&!this.props.multiline&&!this.props.disabled&&!this.props.readOnly&&this.state.curValue?/*#__PURE__*/React.createElement("div",{className:"text-input-clear-icon"},/*#__PURE__*/React.createElement(Icon,{icon:"clear",onClick:this.clear,onMouseDown:MiscUtils.killEvent})):null)}}],[{key:"getDerivedStateFromProps",value:function getDerivedStateFromProps(nextProps,state){if(state.value!==nextProps.value){return{value:nextProps.value,valueRev:state.valueRev+1,curValue:nextProps.value||"",changed:false}}return null}}])}(React.Component);_defineProperty(TextInput,"propTypes",{addLinkAnchors:PropTypes.bool,className:PropTypes.string,clearValue:PropTypes.string,disabled:PropTypes.bool,multiline:PropTypes.bool,name:PropTypes.string,onChange:PropTypes.func,placeholder:PropTypes.string,readOnly:PropTypes.bool,required:PropTypes.bool,style:PropTypes.object,value:PropTypes.string});_defineProperty(TextInput,"defaultProps",{clearValue:"",placeholder:""});export{TextInput as default};
7
+ */import React from"react";import classNames from"classnames";import PropTypes from"prop-types";import LocaleUtils from"../../utils/LocaleUtils";import MiscUtils from"../../utils/MiscUtils";import Icon from"../Icon";import"./style/TextInput.css";var TextInput=/*#__PURE__*/function(_React$Component){function TextInput(props){var _this;_classCallCheck(this,TextInput);_this=_callSuper(this,TextInput,[props]);_defineProperty(_this,"state",{focus:false,value:"",valueRev:0,curValue:"",changed:false});_defineProperty(_this,"setDefaultValue",function(value,valueRev,prevValueRef){if(valueRev>prevValueRef){_this.input.innerHTML=value}});_defineProperty(_this,"onCopy",function(ev,cut){ev.preventDefault();var selection=window.getSelection();var plainText=selection.toString();if(ev.clipboardData){ev.clipboardData.setData("text/plain",plainText)}if(cut){_this.clear()}});_defineProperty(_this,"clear",function(){var clearValue=_this.props.clearValue;_this.props.onChange(clearValue);_this.setState(function(state){return{curValue:_this.props.clearValue,changed:state.value!==clearValue}});_this.input.innerHTML=clearValue});_defineProperty(_this,"onChange",function(ev){var curValue=ev.target.innerText.replace(/<br\s*\/?>$/,"").replace(/\n$/,"");if(!_this.props.multiline){curValue=curValue.replace("\n","")}_this.setState({curValue:curValue,changed:true})});_defineProperty(_this,"onBlur",function(){_this.setState({focus:false});if(!_this.skipNextCommitOnBlur){_this.commit()}});_defineProperty(_this,"onFocus",function(ev){_this.setState({focus:true});window.setTimeout(function(){if(window.getSelection&&document.createRange){var range=document.createRange();range.selectNodeContents(ev.target);var sel=window.getSelection();sel.removeAllRanges();sel.addRange(range)}else if(document.body.createTextRange){var _range=document.body.createTextRange();_range.moveToElementText(ev.target);_range.select()}},1)});_defineProperty(_this,"onMouseDown",function(ev){var el=document.elementFromPoint(ev.clientX,ev.clientY);if((el===null||el===void 0?void 0:el.nodeName)==="A"&&ev.ctrlKey){window.open(el.href,el.target)}});_defineProperty(_this,"onMouseMove",function(ev){var isTouch="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0;clearTimeout(_this.tooltipTimeout);var editable=!_this.props.disabled&&!_this.props.readOnly;if(!isTouch&&editable&&ev.target.nodeName==="A"){var rect=ev.target.getBoundingClientRect();var left=rect.left+window.scrollX;var bottom=rect.bottom+window.scrollY+2;_this.tooltipTimeout=setTimeout(function(){if(!_this.tooltipEl){_this.tooltipEl=document.createElement("span");_this.tooltipEl.className="text-input-link-tooltip";_this.tooltipEl.innerHTML=LocaleUtils.tr("misc.ctrlclickhint");_this.tooltipEl.style.position="absolute";_this.tooltipEl.style.zIndex=10000000000;document.body.appendChild(_this.tooltipEl)}_this.tooltipEl.style.left=left+"px";_this.tooltipEl.style.top=bottom+"px";_this.tooltipTimeout=null},250)}else if(_this.tooltipEl){document.body.removeChild(_this.tooltipEl);_this.tooltipEl=null}});_defineProperty(_this,"onMouseLeave",function(){clearTimeout(_this.tooltipTimeout);if(_this.tooltipEl){document.body.removeChild(_this.tooltipEl);_this.tooltipEl=null}});_defineProperty(_this,"onKeyDown",function(ev){if(ev.key==="Enter"&&!_this.props.multiline){ev.preventDefault();_this.commit()}else if(ev.key==="Escape"){_this.setState(function(state){return{value:_this.props.value,valueRev:state.valueRev+1,curValue:_this.props.value||"",changed:false}});_this.skipNextCommitOnBlur=true;ev.target.blur()}});_defineProperty(_this,"commit",function(){if(_this.state.changed){if(_this.props.addLinkAnchors){var valueWithLinks=MiscUtils.addLinkAnchors(_this.state.curValue);_this.props.onChange(valueWithLinks)}else{_this.props.onChange(_this.state.curValue)}}});_defineProperty(_this,"storeInitialHeight",function(el){if(el){_this.initialHeight=el.offsetHeight}});_defineProperty(_this,"startResize",function(ev){var container=ev.target.parentElement;if(!container){return}var startHeight=container.offsetHeight;var startMouseY=ev.clientY;var resizeInput=function resizeInput(event){container.style.height=Math.max(_this.initialHeight,startHeight+(event.clientY-startMouseY))+"px"};document.body.style.userSelect="none";ev.view.addEventListener("mousemove",resizeInput);ev.view.addEventListener("mouseup",function(){document.body.style.userSelect="";ev.view.removeEventListener("mousemove",resizeInput)},{once:true})});_this.skipNextCommitOnBlur=false;_this.focusEnterClick=false;_this.initialHeight=null;_this.input=null;_this.tooltipEl=null;_this.tooltipTimeout=null;return _this}_inherits(TextInput,_React$Component);return _createClass(TextInput,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){this.setDefaultValue(this.state.value,this.state.valueRev,prevState.valueRev)}},{key:"render",value:function render(){var _this2=this;var wrapperClassName=classNames({"TextInput":true,"text-input-wrapper":true,"text-input-wrapper-multiline":this.props.multiline,"text-input-wrapper-focused":this.state.focus});var preClassName=classNames({"text-input":true,"text-input-disabled":this.props.disabled,"text-input-readonly":this.props.readOnly||!this.state.curValue,"text-input-invalid":this.props.required&&!this.state.curValue});var showClear=this.state.focus&&!this.props.multiline&&!this.props.disabled&&!this.props.readOnly&&this.state.curValue;var style=_objectSpread({},this.props.style);if(showClear){style.marginRight="1.5em"}return/*#__PURE__*/React.createElement("div",{className:wrapperClassName+" "+(this.props.className||""),ref:this.storeInitialHeight},this.props.name?/*#__PURE__*/React.createElement("textarea",{className:"text-input-form-el",name:this.props.name,onChange:function onChange(){},required:this.props.required,tabIndex:"-1",value:this.state.curValue}):null,/*#__PURE__*/React.createElement("pre",{className:preClassName,contentEditable:!this.props.disabled&&!this.props.readOnly,dangerouslySetInnerHTML:{__html:this.state.value},onBlur:this.onBlur,onChange:this.onChange,onCopy:function onCopy(ev){return _this2.onCopy(ev,false)},onCut:function onCut(ev){return _this2.onCopy(ev,true)},onFocus:this.onFocus,onInput:this.onChange,onKeyDown:this.onKeyDown,onMouseDown:this.onMouseDown,onMouseLeave:this.onMouseLeave,onMouseMove:this.onMouseMove,ref:function ref(el){_this2.input=el},style:style}),!this.state.curValue?/*#__PURE__*/React.createElement("div",{className:"text-input-placeholder"},this.props.placeholder):null,this.props.multiline?/*#__PURE__*/React.createElement("div",{className:"text-input-resize-handle",onMouseDown:this.startResize}):null,showClear?/*#__PURE__*/React.createElement("div",{className:"text-input-clear-icon"},/*#__PURE__*/React.createElement(Icon,{icon:"clear",onClick:this.clear,onMouseDown:MiscUtils.killEvent})):null)}}],[{key:"getDerivedStateFromProps",value:function getDerivedStateFromProps(nextProps,state){if(state.value!==nextProps.value){return{value:nextProps.value,valueRev:state.valueRev+1,curValue:nextProps.value||"",changed:false}}return null}}])}(React.Component);_defineProperty(TextInput,"propTypes",{addLinkAnchors:PropTypes.bool,className:PropTypes.string,clearValue:PropTypes.string,disabled:PropTypes.bool,multiline:PropTypes.bool,name:PropTypes.string,onChange:PropTypes.func,placeholder:PropTypes.string,readOnly:PropTypes.bool,required:PropTypes.bool,style:PropTypes.object,value:PropTypes.string});_defineProperty(TextInput,"defaultProps",{clearValue:"",placeholder:""});export{TextInput as default};
@@ -4,6 +4,11 @@ div.text-input-wrapper {
4
4
  background-color: var(--input-bg-color);
5
5
  color: var(--text-color);
6
6
  min-height: 2em;
7
+ display: flex;
8
+ }
9
+
10
+ div.text-input-wrapper-focused {
11
+ outline: var(--focus-outline);
7
12
  }
8
13
 
9
14
  textarea.text-input-form-el {
@@ -27,6 +32,14 @@ pre.text-input {
27
32
  text-align: left;
28
33
  height: 100%;
29
34
  min-height: calc(2em - 2px);
35
+ white-space: nowrap;
36
+ outline: none;
37
+ width: 0;
38
+ flex: 1 1 auto;
39
+ }
40
+
41
+
42
+ text-input-wrapper-multiline > pre.text-input {
30
43
  white-space: pre-wrap;
31
44
  }
32
45
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qwc2",
3
- "version": "2025.05.21",
3
+ "version": "2025.05.26",
4
4
  "description": "QGIS Web Client",
5
5
  "author": "Sourcepole AG",
6
6
  "license": "BSD-2-Clause",