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.
- package/actions/layers.js +2 -2
- package/components/AttributeForm.js +3 -2
- package/components/AttributeTableWidget.js +3 -2
- package/components/QtDesignerForm.js +5 -5
- package/components/map/layers/WMSLayer.js +3 -2
- package/components/style/QtDesignerForm.css +1 -0
- package/components/style/SideBar.css +1 -0
- package/components/widgets/NumberInput.js +1 -1
- package/components/widgets/TextInput.js +2 -2
- package/components/widgets/style/TextInput.css +13 -0
- package/package.json +1 -1
- package/plugins/Editing.js +3 -4
- package/plugins/FeatureForm.js +1 -1
- package/plugins/LayerTree.js +5 -5
- package/plugins/Map.js +1 -1
- package/plugins/map/EditingSupport.js +1 -1
- package/plugins/style/LayerTree.css +47 -4
- package/reducers/editing.js +2 -2
- package/reducers/layers.js +2 -2
- package/static/translations/bg-BG.json +3 -1
- package/static/translations/ca-ES.json +3 -1
- package/static/translations/cs-CZ.json +2 -0
- package/static/translations/de-CH.json +3 -1
- package/static/translations/de-DE.json +3 -1
- package/static/translations/en-US.json +3 -1
- package/static/translations/es-ES.json +3 -1
- package/static/translations/fi-FI.json +2 -0
- package/static/translations/fr-FR.json +3 -1
- package/static/translations/hu-HU.json +2 -0
- package/static/translations/it-IT.json +3 -1
- package/static/translations/ja-JP.json +3 -1
- package/static/translations/nl-NL.json +3 -1
- package/static/translations/no-NO.json +2 -0
- package/static/translations/pl-PL.json +2 -0
- package/static/translations/pt-BR.json +3 -1
- package/static/translations/pt-PT.json +3 -1
- package/static/translations/ro-RO.json +3 -1
- package/static/translations/ru-RU.json +2 -0
- package/static/translations/sv-SE.json +2 -0
- package/static/translations/tr-TR.json +3 -1
- package/static/translations/tsconfig.json +2 -0
- package/utils/DxfUtils.js +8 -3
- package/utils/LayerUtils.js +5 -5
package/plugins/Editing.js
CHANGED
|
@@ -11,11 +11,10 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
|
|
|
11
11
|
*
|
|
12
12
|
* This plugin queries the dataset via the editing service specified by
|
|
13
13
|
* `editServiceUrl` in `config.json` (by default the `qwc-data-service`).
|
|
14
|
-
*/var Editing=/*#__PURE__*/function(_React$Component){function Editing(){var _this;_classCallCheck(this,Editing);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,Editing,[].concat(args));_defineProperty(_this,"state",{selectedLayer:null,selectedLayerVisibility:null,pickedFeatures:null,busy:false,minimized:false,drawPick:false});_defineProperty(_this,"onShow",function(){if(_this.props.taskData){_this.changeSelectedLayer(_this.props.taskData.layer,"Pick",_this.props.taskData.feature)}else{_this.changeSelectedLayer(_this.state.selectedLayer,"Pick")}_this.props.setSnappingConfig(_this.props.snapping,_this.props.snappingActive)});_defineProperty(_this,"onHide",function(){_this.props.clearEditContext("Editing");_this.setLayerVisibility(_this.state.selectedLayer,_this.state.selectedLayerVisibility);_this.setState({minimized:false,drawPick:false})});_defineProperty(_this,"renderBody",function(){if(!_this.props.theme||isEmpty(_this.props.theme.editConfig)){return/*#__PURE__*/React.createElement("div",{role:"body",style:{padding:"1em"}},LocaleUtils.tr("editing.noeditablelayers"))}var editConfig=_this.props.theme.editConfig;var curConfig=editConfig[_this.state.selectedLayer];if(!curConfig){return/*#__PURE__*/React.createElement("div",{role:"body",style:{padding:"1em"}},LocaleUtils.tr("editing.noeditablelayers"))}var editPermissions=curConfig.permissions||{};var actionButtons=[];actionButtons.push({key:"Pick",icon:"pick",label:LocaleUtils.tr("editing.pick"),data:{action:"Pick",
|
|
15
|
-
actionButtons.push({key:"Draw",icon:"editdraw",label:LocaleUtils.tr("editing.draw"),data:{action:"Draw",geomReadOnly:false}})}if(ConfigUtils.havePlugin("AttributeTable")){actionButtons.push({key:"AttribTable",icon:"editing",label:LocaleUtils.tr("editing.attrtable"),data:{action:"AttrTable"}})}var featureSelection=null;if(_this.state.pickedFeatures){var featureText=LocaleUtils.tr("editing.feature");featureSelection=/*#__PURE__*/React.createElement("div",{className:"editing-feature-selection"},/*#__PURE__*/React.createElement("select",{className:"combo editing-feature-select",disabled:_this.props.editContext.changed===true||_this.props.editContext.id!==_this.props.currentEditContext,onChange:function onChange(ev){return _this.setEditFeature(ev.target.value)},value:(_this.props.editContext.feature||{}).id||""},_this.state.pickedFeatures.map(function(feature){return/*#__PURE__*/React.createElement("option",{key:feature.id,value:feature.id},curConfig.displayField?feature.properties[curConfig.displayField]:featureText+" "+feature.id)})))}var pickBar=null;if(_this.props.allowCloneGeometry&&(_this.props.editContext.action==="Draw"||_this.state.drawPick)&&!(_this.props.editContext.feature||{}).geometry){var pickButtons=[{key:"DrawPick",icon:"pick",label:LocaleUtils.tr("editing.pickdrawfeature")}];pickBar=/*#__PURE__*/React.createElement(ButtonBar,{active:_this.state.drawPick?"DrawPick":null,buttons:pickButtons,onClick:_this.toggleDrawPick})}var attributeForm=null;if(_this.props.editContext.feature&&(_this.props.editContext.action==="Pick"||_this.props.editContext.feature.geometry)){attributeForm=/*#__PURE__*/React.createElement(AttributeForm,{editConfig:curConfig,editContext:_this.props.editContext,iface:_this.props.iface})}var themeSublayers=_this.props.layers.reduce(function(accum,layer){return layer.role===LayerRole.THEME?accum.concat(LayerUtils.getSublayerNames(layer)):accum},[]);return/*#__PURE__*/React.createElement("div",{className:"editing-body"},/*#__PURE__*/React.createElement("div",{className:"editing-layer-selection"},/*#__PURE__*/React.createElement("select",{className:"combo editing-layer-select",disabled:_this.props.editContext.changed===true||_this.props.editContext.id!==_this.props.currentEditContext,onChange:function onChange(ev){return _this.changeSelectedLayer(ev.target.value)},value:_this.state.selectedLayer||""},Object.keys(editConfig).filter(function(layerId){return themeSublayers.includes(layerId)}).map(function(layerId){var _match$sublayer$title,_match$sublayer;var layerName=editConfig[layerId].layerName;var match=LayerUtils.searchLayer(_this.props.layers,_this.props.theme.url,layerName);return/*#__PURE__*/React.createElement("option",{key:layerId,value:layerId},(_match$sublayer$title=match===null||match===void 0||(_match$sublayer=match.sublayer)===null||_match$sublayer===void 0?void 0:_match$sublayer.title)!==null&&_match$sublayer$title!==void 0?_match$sublayer$title:layerName)}))),/*#__PURE__*/React.createElement(ButtonBar,{active:_this.state.drawPick?"Draw":_this.props.editContext.action,buttons:actionButtons,disabled:_this.props.editContext.changed||_this.props.editContext.id!==_this.props.currentEditContext,onClick:_this.actionClicked}),featureSelection,pickBar,attributeForm)});_defineProperty(_this,"actionClicked",function(action,data){_this.setState({drawPick:false,pickedFeatures:null});if(action==="AttribTable"){_this.props.setCurrentTask("AttributeTable",null,null,{layer:_this.state.selectedLayer})}else if(action==="Draw"){var editConfig=_this.props.theme.editConfig;var curConfig=editConfig[_this.state.selectedLayer];var featureSkel={type:"Feature",properties:{}};var mapPrefix=(curConfig.editDataset.match(/^[^.]+\./)||[""])[0];getFeatureTemplate(curConfig,featureSkel,_this.props.iface,mapPrefix,_this.props.map.projection,function(feature){_this.props.setEditContext("Editing",_objectSpread(_objectSpread({},data),{},{feature:feature,geomReadOnly:false}))})}else{_this.props.setEditContext("Editing",_objectSpread({},data))}});_defineProperty(_this,"pickFilter",function(feature){var _this$props$theme$edi;var geomType=(_this$props$theme$edi=_this.props.theme.editConfig[_this.state.selectedLayer])===null||_this$props$theme$edi===void 0?void 0:_this$props$theme$edi.geomType;return feature.geometry&&(feature.geometry.type===geomType||"Multi"+feature.geometry.type===geomType||feature.geometry.type.replace(/^Multi/,"")===geomType&&feature.geometry.coordinates.length===1)});_defineProperty(_this,"geomPicked",function(layer,feature){var _this$props$theme$edi2;var geomType=(_this$props$theme$edi2=_this.props.theme.editConfig[_this.state.selectedLayer])===null||_this$props$theme$edi2===void 0?void 0:_this$props$theme$edi2.geomType;var geometry=feature.geometry;if(geometry.type!==geomType){if("Multi"+feature.geometry.type===geomType){// Convert picked geometry to multi-type
|
|
14
|
+
*/var Editing=/*#__PURE__*/function(_React$Component){function Editing(){var _this;_classCallCheck(this,Editing);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,Editing,[].concat(args));_defineProperty(_this,"state",{selectedLayer:null,selectedLayerVisibility:null,pickedFeatures:null,busy:false,minimized:false,drawPick:false});_defineProperty(_this,"onShow",function(){if(_this.props.taskData){_this.changeSelectedLayer(_this.props.taskData.layer,"Pick",_this.props.taskData.feature)}else{_this.changeSelectedLayer(_this.state.selectedLayer,"Pick")}_this.props.setSnappingConfig(_this.props.snapping,_this.props.snappingActive)});_defineProperty(_this,"onHide",function(){_this.props.clearEditContext("Editing");_this.setLayerVisibility(_this.state.selectedLayer,_this.state.selectedLayerVisibility);_this.setState({minimized:false,drawPick:false})});_defineProperty(_this,"renderBody",function(){if(!_this.props.theme||isEmpty(_this.props.theme.editConfig)){return/*#__PURE__*/React.createElement("div",{role:"body",style:{padding:"1em"}},LocaleUtils.tr("editing.noeditablelayers"))}var editConfig=_this.props.theme.editConfig;var curConfig=editConfig[_this.state.selectedLayer];if(!curConfig){return/*#__PURE__*/React.createElement("div",{role:"body",style:{padding:"1em"}},LocaleUtils.tr("editing.noeditablelayers"))}var editPermissions=curConfig.permissions||{};var actionButtons=[];actionButtons.push({key:"Pick",icon:"pick",label:LocaleUtils.tr("editing.pick"),data:{action:"Pick",feature:null}});if(editPermissions.creatable!==false&&!_this.props.editContext.geomReadOnly){actionButtons.push({key:"Draw",icon:"editdraw",label:LocaleUtils.tr("editing.draw"),data:{action:"Draw"}})}if(ConfigUtils.havePlugin("AttributeTable")){actionButtons.push({key:"AttribTable",icon:"editing",label:LocaleUtils.tr("editing.attrtable"),data:{action:"AttrTable"}})}var featureSelection=null;if(_this.state.pickedFeatures&&_this.state.pickedFeatures.length>1){var featureText=LocaleUtils.tr("editing.feature");featureSelection=/*#__PURE__*/React.createElement("div",{className:"editing-feature-selection"},/*#__PURE__*/React.createElement("select",{className:"combo editing-feature-select",disabled:_this.props.editContext.changed===true||_this.props.editContext.id!==_this.props.currentEditContext,onChange:function onChange(ev){return _this.setEditFeature(ev.target.value)},value:(_this.props.editContext.feature||{}).id||""},_this.state.pickedFeatures.map(function(feature){return/*#__PURE__*/React.createElement("option",{key:feature.id,value:feature.id},curConfig.displayField?feature.properties[curConfig.displayField]:featureText+" "+feature.id)})))}var pickBar=null;if(_this.props.allowCloneGeometry&&(_this.props.editContext.action==="Draw"||_this.state.drawPick)&&!(_this.props.editContext.feature||{}).geometry){var pickButtons=[{key:"DrawPick",icon:"pick",label:LocaleUtils.tr("editing.pickdrawfeature")}];pickBar=/*#__PURE__*/React.createElement(ButtonBar,{active:_this.state.drawPick?"DrawPick":null,buttons:pickButtons,onClick:_this.toggleDrawPick})}var attributeForm=null;if(_this.props.editContext.feature&&(_this.props.editContext.action==="Pick"||_this.props.editContext.feature.geometry)){attributeForm=/*#__PURE__*/React.createElement(AttributeForm,{editConfig:curConfig,editContext:_this.props.editContext,iface:_this.props.iface,onCommit:_this.updatePickedFeatures})}var themeSublayers=_this.props.layers.reduce(function(accum,layer){return layer.role===LayerRole.THEME?accum.concat(LayerUtils.getSublayerNames(layer)):accum},[]);return/*#__PURE__*/React.createElement("div",{className:"editing-body"},/*#__PURE__*/React.createElement("div",{className:"editing-layer-selection"},/*#__PURE__*/React.createElement("select",{className:"combo editing-layer-select",disabled:_this.props.editContext.changed===true||_this.props.editContext.id!==_this.props.currentEditContext,onChange:function onChange(ev){return _this.changeSelectedLayer(ev.target.value)},value:_this.state.selectedLayer||""},Object.keys(editConfig).filter(function(layerId){return themeSublayers.includes(layerId)}).map(function(layerId){var _match$sublayer$title,_match$sublayer;var layerName=editConfig[layerId].layerName;var match=LayerUtils.searchLayer(_this.props.layers,_this.props.theme.url,layerName);return/*#__PURE__*/React.createElement("option",{key:layerId,value:layerId},(_match$sublayer$title=match===null||match===void 0||(_match$sublayer=match.sublayer)===null||_match$sublayer===void 0?void 0:_match$sublayer.title)!==null&&_match$sublayer$title!==void 0?_match$sublayer$title:layerName)}))),/*#__PURE__*/React.createElement(ButtonBar,{active:_this.state.drawPick?"Draw":_this.props.editContext.action,buttons:actionButtons,disabled:_this.props.editContext.changed||_this.props.editContext.id!==_this.props.currentEditContext,onClick:_this.actionClicked}),featureSelection,pickBar,attributeForm)});_defineProperty(_this,"actionClicked",function(action,data){_this.setState({drawPick:false,pickedFeatures:null});if(action==="AttribTable"){_this.props.setCurrentTask("AttributeTable",null,null,{layer:_this.state.selectedLayer})}else if(action==="Draw"){var editConfig=_this.props.theme.editConfig;var curConfig=editConfig[_this.state.selectedLayer];var featureSkel={type:"Feature",properties:{}};var mapPrefix=(curConfig.editDataset.match(/^[^.]+\./)||[""])[0];getFeatureTemplate(curConfig,featureSkel,_this.props.iface,mapPrefix,_this.props.map.projection,function(feature){_this.props.setEditContext("Editing",_objectSpread(_objectSpread({},data),{},{feature:feature,geomReadOnly:false}))})}else{_this.props.setEditContext("Editing",_objectSpread({},data))}});_defineProperty(_this,"pickFilter",function(feature){var _this$props$theme$edi;var geomType=(_this$props$theme$edi=_this.props.theme.editConfig[_this.state.selectedLayer])===null||_this$props$theme$edi===void 0?void 0:_this$props$theme$edi.geomType;return feature.geometry&&(feature.geometry.type===geomType||"Multi"+feature.geometry.type===geomType||feature.geometry.type.replace(/^Multi/,"")===geomType&&feature.geometry.coordinates.length===1)});_defineProperty(_this,"geomPicked",function(layer,feature){var _this$props$theme$edi2;var geomType=(_this$props$theme$edi2=_this.props.theme.editConfig[_this.state.selectedLayer])===null||_this$props$theme$edi2===void 0?void 0:_this$props$theme$edi2.geomType;var geometry=feature.geometry;if(geometry.type!==geomType){if("Multi"+feature.geometry.type===geomType){// Convert picked geometry to multi-type
|
|
16
15
|
geometry={type:"Multi"+geometry.type,coordinates:[geometry.coordinates]}}else if(geometry.type.replace(/^Multi/,"")===geomType&&geometry.coordinates.length===1){// Convert picked geometry to single type
|
|
17
16
|
geometry={type:geometry.type.replace(/^Multi/,""),coordinates:geometry.coordinates[0]}}else{// Should not happen, mismatching geometries should already have been filtered from the list of choices
|
|
18
|
-
return}}var editFeature={type:"Feature",geometry:geometry,id:uuidv1()};_this.props.setEditContext("Editing",{action:"Draw",feature:editFeature,changed:true});_this.setState({drawPick:false})});_defineProperty(_this,"setLayerVisibility",function(selectedLayer,visibility){if(selectedLayer!==null){var path=[];var sublayer=null;var layer=_this.props.layers.find(function(l){return l.role===LayerRole.THEME&&(sublayer=LayerUtils.searchSubLayer(l,"name",selectedLayer,path))});if(layer&&sublayer){var oldvisibility=sublayer.visibility;if(oldvisibility!==visibility&&visibility!==null){var recurseDirection=!oldvisibility?"both":"children";_this.props.changeLayerProperty(layer.id,"visibility",visibility,path,recurseDirection)}return oldvisibility}}return null});_defineProperty(_this,"changeSelectedLayer",function(selectedLayer){var action=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var feature=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var curConfig=_this.props.theme&&_this.props.theme.editConfig&&selectedLayer?_this.props.theme.editConfig[selectedLayer]:null;var editPermissions=curConfig?curConfig.permissions||{}:{};_this.props.setEditContext("Editing",{action:action||(_this.state.drawPick?"Draw":_this.props.editContext.action),feature:feature,geomType:curConfig?curConfig.geomType
|
|
17
|
+
return}}var editFeature={type:"Feature",geometry:geometry,id:uuidv1()};_this.props.setEditContext("Editing",{action:"Draw",feature:editFeature,changed:true});_this.setState({drawPick:false})});_defineProperty(_this,"setLayerVisibility",function(selectedLayer,visibility){if(selectedLayer!==null){var path=[];var sublayer=null;var layer=_this.props.layers.find(function(l){return l.role===LayerRole.THEME&&(sublayer=LayerUtils.searchSubLayer(l,"name",selectedLayer,path))});if(layer&&sublayer){var oldvisibility=sublayer.visibility;if(oldvisibility!==visibility&&visibility!==null){var recurseDirection=!oldvisibility?"both":"children";_this.props.changeLayerProperty(layer.id,"visibility",visibility,path,recurseDirection)}return oldvisibility}}return null});_defineProperty(_this,"changeSelectedLayer",function(selectedLayer){var action=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var feature=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var curConfig=_this.props.theme&&_this.props.theme.editConfig&&selectedLayer?_this.props.theme.editConfig[selectedLayer]:null;var editPermissions=curConfig?curConfig.permissions||{}:{};var canEditGeometry=["Point","LineString","Polygon"].includes(((curConfig===null||curConfig===void 0?void 0:curConfig.geomType)||"").replace(/^Multi/,"").replace(/Z$/,""));var geomReadOnly=editPermissions.updatable===false||!canEditGeometry;if(geomReadOnly){action="Pick"}_this.props.setEditContext("Editing",{action:action||(_this.state.drawPick?"Draw":_this.props.editContext.action),feature:feature,geomType:(curConfig===null||curConfig===void 0?void 0:curConfig.geomType)||null,geomReadOnly:geomReadOnly});var prevLayerVisibility=null;if(_this.state.selectedLayer!==null){_this.setLayerVisibility(_this.state.selectedLayer,_this.state.selectedLayerVisibility);prevLayerVisibility=_this.setLayerVisibility(selectedLayer,true)}_this.setState({selectedLayer:selectedLayer,selectedLayerVisibility:prevLayerVisibility,drawPick:false})});_defineProperty(_this,"setEditFeature",function(featureId){var feature=_this.state.pickedFeatures.find(function(f){return f.id.toString()===featureId});_this.props.setEditContext("Editing",{feature:feature,changed:false})});_defineProperty(_this,"toggleDrawPick",function(){_this.setState(function(state){var pickActive=!state.drawPick;_this.props.setEditContext("Editing",{action:pickActive?null:"Draw"});return{drawPick:pickActive}})});_defineProperty(_this,"updatePickedFeatures",function(newfeature){if(_this.state.pickedFeatures){_this.setState(function(state){return{pickedFeatures:state.pickedFeatures.map(function(feature){return feature.id===newfeature.id?newfeature:feature})}})}});return _this}_inherits(Editing,_React$Component);return _createClass(Editing,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){var _this2=this;var themeSublayers=this.props.layers.reduce(function(accum,layer){return layer.role===LayerRole.THEME?accum.concat(LayerUtils.getSublayerNames(layer)):accum},[]);// Update selected layer on layers change
|
|
19
18
|
if(this.props.enabled&&(this.props.layers!==prevProps.layers||!prevProps.enabled)){var layerIds=Object.keys(this.props.theme&&this.props.theme.editConfig||{}).filter(function(layerId){return themeSublayers.includes(layerId)});if(!isEmpty(layerIds)){if(!layerIds.includes(this.state.selectedLayer)){this.changeSelectedLayer(layerIds[0],"Pick")}}else if(this.state.selectedLayer){this.changeSelectedLayer(null)}}// If click point changed and in pick mode with a selected layer, trigger a pick
|
|
20
|
-
var isCurrentContext=this.props.editContext.id===this.props.currentEditContext;if(this.props.enabled&&isCurrentContext&&this.props.editContext.action==="Pick"&&this.state.selectedLayer&&!this.props.editContext.changed){var newPoint=this.props.map.click||{};var oldPoint=prevProps.map.click||{};if(newPoint.coordinate&&!isEqual(newPoint.coordinate,oldPoint.coordinate)){var _this$props$filter$fi;var scale=Math.round(MapUtils.computeForZoom(this.props.map.scales,this.props.map.zoom));var editConfig=this.props.theme.editConfig[this.state.selectedLayer];var
|
|
19
|
+
var isCurrentContext=this.props.editContext.id===this.props.currentEditContext;if(this.props.enabled&&isCurrentContext&&this.props.editContext.action==="Pick"&&this.state.selectedLayer&&!this.props.editContext.changed){var newPoint=this.props.map.click||{};var oldPoint=prevProps.map.click||{};if(newPoint.coordinate&&!isEqual(newPoint.coordinate,oldPoint.coordinate)){var _this$props$filter$fi;var scale=Math.round(MapUtils.computeForZoom(this.props.map.scales,this.props.map.zoom));var editConfig=this.props.theme.editConfig[this.state.selectedLayer];var editDataset=editConfig.editDataset;this.props.iface.getFeature(editDataset,newPoint.coordinate,this.props.map.projection,scale,96,function(featureCollection){var features=featureCollection?featureCollection.features:null;_this2.setState({pickedFeatures:features});var feature=features?features[0]:null;_this2.props.setEditContext("Editing",{feature:feature,changed:false})},(_this$props$filter$fi=this.props.filter.filterParams)===null||_this$props$filter$fi===void 0?void 0:_this$props$filter$fi[this.state.selectedLayer],this.props.filter.filterGeom)}}if(prevProps.editContext.changed!==this.props.editContext.changed){this.props.setCurrentTaskBlocked(this.props.editContext.changed===true,LocaleUtils.tr("editing.unsavedchanged"))}if(!this.props.editContext.feature&&prevState.pickedFeatures){this.setState({pickedFeatures:null})}}},{key:"render",value:function render(){var _this3=this;var minMaxTooltip=this.state.minimized?LocaleUtils.tr("editing.maximize"):LocaleUtils.tr("editing.minimize");var extraTitlebarContent=/*#__PURE__*/React.createElement(Icon,{className:"editing-minimize-maximize",icon:this.state.minimized?"chevron-down":"chevron-up",onClick:function onClick(){return _this3.setState(function(state){return{minimized:!state.minimized}})},title:minMaxTooltip});var attribFormVisible=!!(this.props.editContext.feature&&(this.props.editContext.action==="Pick"||this.props.editContext.feature.geometry));return[/*#__PURE__*/React.createElement(SideBar,{extraTitlebarContent:extraTitlebarContent,heightResizeable:!this.state.minimized&&attribFormVisible,icon:"editing",id:"Editing",key:"EditingSidebar",onHide:this.onHide,onShow:this.onShow,side:this.props.side,title:LocaleUtils.tr("appmenu.items.Editing"),width:this.props.width},function(){return{body:_this3.state.minimized?null:_this3.renderBody()}}),this.state.drawPick?/*#__PURE__*/React.createElement(PickFeature,{featureFilter:this.pickFilter,featurePicked:this.geomPicked,key:"FeaturePicker"}):null]}}])}(React.Component);_defineProperty(Editing,"propTypes",{addLayerFeatures:PropTypes.func,/** Whether to enable the "Clone existing geometry" functionality. */allowCloneGeometry:PropTypes.bool,changeLayerProperty:PropTypes.func,clearEditContext:PropTypes.func,currentEditContext:PropTypes.string,editContext:PropTypes.object,enabled:PropTypes.bool,filter:PropTypes.object,iface:PropTypes.object,layers:PropTypes.array,map:PropTypes.object,refreshLayer:PropTypes.func,removeLayer:PropTypes.func,setCurrentTask:PropTypes.func,setCurrentTaskBlocked:PropTypes.func,setEditContext:PropTypes.func,setSnappingConfig:PropTypes.func,/** The side of the application on which to display the sidebar. */side:PropTypes.string,/** Whether snapping is available when editing. */snapping:PropTypes.bool,/** Whether snapping is enabled by default when editing.
|
|
21
20
|
* Either `false`, `edge`, `vertex` or `true` (i.e. both vertex and edge). */snappingActive:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),taskData:PropTypes.object,theme:PropTypes.object,/** The default width of the editing sidebar, as a CSS width string. */width:PropTypes.string});_defineProperty(Editing,"defaultProps",{width:"30em",side:"right",snapping:true,snappingActive:true,allowCloneGeometry:true});export default(function(){var iface=arguments.length>0&&arguments[0]!==undefined?arguments[0]:EditingInterface;return connect(function(state){return{enabled:state.task.id==="Editing",theme:state.theme.current,layers:state.layers.flat,filter:state.layers.filter,map:state.map,iface:iface,editContext:state.editing.contexts.Editing||{},currentEditContext:state.editing.currentContext,taskData:state.task.id==="Editing"?state.task.data:null}},{addLayerFeatures:addLayerFeatures,removeLayer:removeLayer,clearEditContext:clearEditContext,setEditContext:setEditContext,setSnappingConfig:setSnappingConfig,setCurrentTask:setCurrentTask,setCurrentTaskBlocked:setCurrentTaskBlocked,refreshLayer:refreshLayer,changeLayerProperty:changeLayerProperty})(Editing)});
|
package/plugins/FeatureForm.js
CHANGED
|
@@ -18,4 +18,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
|
|
|
18
18
|
*
|
|
19
19
|
* Can be used as default identify tool by setting `"identifyTool": "FeatureForm"` in `config.json`.
|
|
20
20
|
*/var FeatureForm=/*#__PURE__*/function(_React$Component){function FeatureForm(props){var _this;_classCallCheck(this,FeatureForm);_this=_callSuper(this,FeatureForm,[props]);_defineProperty(_this,"queryPoint",function(prevProps){if(_this.props.click.button!==0||_this.props.click===prevProps.click||(_this.props.click.features||[]).find(function(feature){return feature.id==="startupposmarker"})){return null}var searchMarker=(_this.props.click.features||[]).find(function(feature){return feature.id==="searchmarker"});if(searchMarker&&searchMarker.geometry.type==="Point"){return searchMarker.geometry.coordinates}return _this.props.click.coordinate});_defineProperty(_this,"queryFeatures",function(pos){var pendingRequests=0;Object.entries(_this.props.theme.editConfig||{}).forEach(function(_ref){var _this$props$filter$fi;var _ref2=_slicedToArray(_ref,2),layerId=_ref2[0],editConfig=_ref2[1];if(!editConfig.geomType){// Skip geometryless datasets
|
|
21
|
-
return}var path=[];var sublayer=null;var mapScale=MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom);var layer=_this.props.layers.find(function(l){return l.role===LayerRole.THEME&&(sublayer=LayerUtils.searchSubLayer(l,"name",layerId,path))});if(!layer||!sublayer||!LayerUtils.sublayerVisible(layer,path)||!LayerUtils.layerScaleInRange(sublayer,mapScale)){return}var layerOrder=layer.params.LAYERS.split(",");++pendingRequests;var editDataset=editConfig.editDataset||layerId;var scale=Math.round(MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom));_this.props.iface.getFeature(editDataset,pos,_this.props.map.projection,scale,96,function(featureCollection){if(featureCollection&&!isEmpty(featureCollection.features)){_this.setState(function(state){var newPickedFeatures=Object.fromEntries(Object.entries(_objectSpread(_objectSpread({},state.pickedFeatures),featureCollection.features.reduce(function(res,feature){return _objectSpread(_objectSpread({},res),{},_defineProperty({},layerId+"::"+feature.id,feature))},{}))).sort(function(a,b){var partsA=a[0].split("::");var partsB=b[0].split("::");var diff=layerOrder.indexOf(partsB[0])-layerOrder.indexOf(partsA[0]);return diff===0?partsA[1].localeCompare(partsB[1]):diff}));var selectedFeature=state.pendingRequests<=1&&!state.selectedFeature?Object.keys(newPickedFeatures)[0]:"";return{pickedFeatures:newPickedFeatures,pendingRequests:state.pendingRequests-1,selectedFeature:selectedFeature}})}else{_this.setState(function(state){var _Object$keys$;var selectedFeature=state.pendingRequests<=1&&!state.selectedFeature?(_Object$keys$=Object.keys(state.pickedFeatures)[0])!==null&&_Object$keys$!==void 0?_Object$keys$:"":"";return{pendingRequests:state.pendingRequests-1,selectedFeature:selectedFeature}})}},(_this$props$filter$fi=_this.props.filter.filterParams)===null||_this$props$filter$fi===void 0?void 0:_this$props$filter$fi[sublayer.name],_this.props.filter.filterGeom)});_this.setState({pendingRequests:pendingRequests,pickedFeatures:{},selectedFeature:""})});_defineProperty(_this,"setSelectedFeature",function(ev){_this.setState({selectedFeature:ev.target.value})});_defineProperty(_this,"onWindowClose",function(){_this.clearResults();if(_this.props.exitTaskOnResultsClose){_this.props.setCurrentTask(null)}});_defineProperty(_this,"clearResults",function(){if(!_this.props.editContext.changed){_this.setState(FeatureForm.defaultState)}});_this.state=FeatureForm.defaultState;return _this}_inherits(FeatureForm,_React$Component);return _createClass(FeatureForm,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.props.enabled&&!prevProps.enabled){this.props.setEditContext("FeatureForm",{action:"Pick"})}var isCurrentContext=this.props.editContext.id===this.props.currentEditContext;if(this.props.enabled&&isCurrentContext&&!this.props.editContext.changed&&this.state.pendingRequests===0){var clickPoint=this.queryPoint(prevProps);if(clickPoint){this.queryFeatures(clickPoint)}}if(this.props.enabled&&this.state.selectedFeature!==prevState.selectedFeature){var feature=this.state.pickedFeatures?this.state.pickedFeatures[this.state.selectedFeature]:null;var curLayerId=this.state.selectedFeature.split("::")[0];var curConfig=this.props.theme.editConfig[curLayerId]||{};var editPermissions=curConfig.permissions||{};this.props.setEditContext("FeatureForm",{action:"Pick",feature:feature,changed:false,geomType:curConfig.geomType||null,geomReadOnly:editPermissions.updatable===false})}if(!this.props.enabled&&prevProps.enabled){this.props.clearEditContext("FeatureForm");this.setState(FeatureForm.defaultState)}}},{key:"render",value:function render(){var _this2=this;var resultWindow=null;if(this.state.pickedFeatures!==null){var body=null;if(this.state.pendingRequests>0){body=/*#__PURE__*/React.createElement("div",{className:"feature-query-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("featureform.querying")))}else if(isEmpty(this.state.pickedFeatures)){body=/*#__PURE__*/React.createElement("div",{className:"feature-query-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("featureform.noresults")))}else{var featureText=LocaleUtils.tr("featureform.feature");var curLayerId=this.state.selectedFeature.split("::")[0];var curConfig=this.props.theme.editConfig[curLayerId];body=/*#__PURE__*/React.createElement("div",{className:"feature-query-body",role:"body"},Object.keys(this.state.pickedFeatures).length>1?/*#__PURE__*/React.createElement("div",{className:"feature-query-selection"},/*#__PURE__*/React.createElement("select",{onChange:this.setSelectedFeature,value:this.state.selectedFeature},Object.entries(this.state.pickedFeatures).map(function(
|
|
21
|
+
return}var path=[];var sublayer=null;var mapScale=MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom);var layer=_this.props.layers.find(function(l){return l.role===LayerRole.THEME&&(sublayer=LayerUtils.searchSubLayer(l,"name",layerId,path))});if(!layer||!sublayer||!LayerUtils.sublayerVisible(layer,path)||!LayerUtils.layerScaleInRange(sublayer,mapScale)){return}var layerOrder=layer.params.LAYERS.split(",");++pendingRequests;var editDataset=editConfig.editDataset||layerId;var scale=Math.round(MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom));_this.props.iface.getFeature(editDataset,pos,_this.props.map.projection,scale,96,function(featureCollection){if(featureCollection&&!isEmpty(featureCollection.features)){_this.setState(function(state){var newPickedFeatures=Object.fromEntries(Object.entries(_objectSpread(_objectSpread({},state.pickedFeatures),featureCollection.features.reduce(function(res,feature){return _objectSpread(_objectSpread({},res),{},_defineProperty({},layerId+"::"+feature.id,feature))},{}))).sort(function(a,b){var partsA=a[0].split("::");var partsB=b[0].split("::");var diff=layerOrder.indexOf(partsB[0])-layerOrder.indexOf(partsA[0]);return diff===0?partsA[1].localeCompare(partsB[1]):diff}));var selectedFeature=state.pendingRequests<=1&&!state.selectedFeature?Object.keys(newPickedFeatures)[0]:"";return{pickedFeatures:newPickedFeatures,pendingRequests:state.pendingRequests-1,selectedFeature:selectedFeature}})}else{_this.setState(function(state){var _Object$keys$;var selectedFeature=state.pendingRequests<=1&&!state.selectedFeature?(_Object$keys$=Object.keys(state.pickedFeatures)[0])!==null&&_Object$keys$!==void 0?_Object$keys$:"":"";return{pendingRequests:state.pendingRequests-1,selectedFeature:selectedFeature}})}},(_this$props$filter$fi=_this.props.filter.filterParams)===null||_this$props$filter$fi===void 0?void 0:_this$props$filter$fi[sublayer.name],_this.props.filter.filterGeom)});_this.setState({pendingRequests:pendingRequests,pickedFeatures:{},selectedFeature:""})});_defineProperty(_this,"setSelectedFeature",function(ev){_this.setState({selectedFeature:ev.target.value})});_defineProperty(_this,"onWindowClose",function(){_this.clearResults();if(_this.props.exitTaskOnResultsClose){_this.props.setCurrentTask(null)}});_defineProperty(_this,"clearResults",function(){if(!_this.props.editContext.changed){_this.setState(FeatureForm.defaultState)}});_defineProperty(_this,"updatePickedFeatures",function(newfeature){_this.setState(function(state){return{pickedFeatures:Object.entries(state.pickedFeatures).reduce(function(res,_ref3){var _ref4=_slicedToArray(_ref3,2),key=_ref4[0],feature=_ref4[1];res[key]=feature.id===newfeature.id?newfeature:feature;return res},{})}})});_this.state=FeatureForm.defaultState;return _this}_inherits(FeatureForm,_React$Component);return _createClass(FeatureForm,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.props.enabled&&!prevProps.enabled){this.props.setEditContext("FeatureForm",{action:"Pick"})}var isCurrentContext=this.props.editContext.id===this.props.currentEditContext;if(this.props.enabled&&isCurrentContext&&!this.props.editContext.changed&&this.state.pendingRequests===0){var clickPoint=this.queryPoint(prevProps);if(clickPoint){this.queryFeatures(clickPoint)}}if(this.props.enabled&&this.state.selectedFeature!==prevState.selectedFeature){var feature=this.state.pickedFeatures?this.state.pickedFeatures[this.state.selectedFeature]:null;var curLayerId=this.state.selectedFeature.split("::")[0];var curConfig=this.props.theme.editConfig[curLayerId]||{};var canEditGeometry=["Point","LineString","Polygon"].includes((curConfig.geomType||"").replace(/^Multi/,"").replace(/Z$/,""));var editPermissions=curConfig.permissions||{};this.props.setEditContext("FeatureForm",{action:"Pick",feature:feature,changed:false,geomType:curConfig.geomType||null,geomReadOnly:editPermissions.updatable===false||!canEditGeometry})}if(!this.props.enabled&&prevProps.enabled){this.props.clearEditContext("FeatureForm");this.setState(FeatureForm.defaultState)}}},{key:"render",value:function render(){var _this2=this;var resultWindow=null;if(this.state.pickedFeatures!==null){var body=null;if(this.state.pendingRequests>0){body=/*#__PURE__*/React.createElement("div",{className:"feature-query-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("featureform.querying")))}else if(isEmpty(this.state.pickedFeatures)){body=/*#__PURE__*/React.createElement("div",{className:"feature-query-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("featureform.noresults")))}else{var featureText=LocaleUtils.tr("featureform.feature");var curLayerId=this.state.selectedFeature.split("::")[0];var curConfig=this.props.theme.editConfig[curLayerId];body=/*#__PURE__*/React.createElement("div",{className:"feature-query-body",role:"body"},Object.keys(this.state.pickedFeatures).length>1?/*#__PURE__*/React.createElement("div",{className:"feature-query-selection"},/*#__PURE__*/React.createElement("select",{onChange:this.setSelectedFeature,value:this.state.selectedFeature},Object.entries(this.state.pickedFeatures).map(function(_ref5){var _match$sublayer$title,_match$sublayer;var _ref6=_slicedToArray(_ref5,2),id=_ref6[0],feature=_ref6[1];var _id$split=id.split("::"),_id$split2=_slicedToArray(_id$split,2),layerId=_id$split2[0],featureId=_id$split2[1];var editConfig=_this2.props.theme.editConfig[layerId];var match=LayerUtils.searchLayer(_this2.props.layers,_this2.props.theme.url,editConfig.layerName);var layerName=(_match$sublayer$title=match===null||match===void 0||(_match$sublayer=match.sublayer)===null||_match$sublayer===void 0?void 0:_match$sublayer.title)!==null&&_match$sublayer$title!==void 0?_match$sublayer$title:editConfig.layerName;var featureName=editConfig.displayField?feature.properties[editConfig.displayField]:featureText+" "+featureId;return/*#__PURE__*/React.createElement("option",{key:id,value:id},layerName+": "+featureName)}))):null,this.props.editContext.feature?/*#__PURE__*/React.createElement(AttributeForm,{editConfig:curConfig,editContext:this.props.editContext,iface:this.props.iface,onCommit:this.updatePickedFeatures}):null)}resultWindow=/*#__PURE__*/React.createElement(ResizeableWindow,{dockable:this.props.geometry.side,icon:"featureform",initialHeight:this.props.geometry.initialHeight,initialWidth:this.props.geometry.initialWidth,initialX:this.props.geometry.initialX,initialY:this.props.geometry.initialY,initiallyDocked:this.props.geometry.initiallyDocked,key:"FeatureForm",onClose:this.onWindowClose,title:LocaleUtils.tr("featureform.title")},body)}return[resultWindow,/*#__PURE__*/React.createElement(TaskBar,{key:"FeatureFormTaskBar",task:"FeatureForm"},function(){return{body:LocaleUtils.tr("infotool.clickhelpPoint")}})]}}])}(React.Component);_defineProperty(FeatureForm,"propTypes",{clearEditContext:PropTypes.func,click:PropTypes.object,currentEditContext:PropTypes.string,editContext:PropTypes.object,enabled:PropTypes.bool,/** Whether to clear the task when the results window is closed. */exitTaskOnResultsClose:PropTypes.bool,filter:PropTypes.object,/** Default window geometry with size, position and docking status. Positive position values (including '0') are related to top (InitialY) and left (InitialX), negative values (including '-0') to bottom (InitialY) and right (InitialX). */geometry:PropTypes.shape({initialWidth:PropTypes.number,initialHeight:PropTypes.number,initialX:PropTypes.number,initialY:PropTypes.number,initiallyDocked:PropTypes.bool,side:PropTypes.string}),iface:PropTypes.object,layers:PropTypes.array,map:PropTypes.object,setCurrentTask:PropTypes.func,setEditContext:PropTypes.func,theme:PropTypes.object});_defineProperty(FeatureForm,"defaultProps",{geometry:{initialWidth:320,initialHeight:480,initialX:0,initialY:0,initiallyDocked:false,side:"left"}});_defineProperty(FeatureForm,"defaultState",{pendingRequests:0,pickedFeatures:null,selectedFeature:""});export default(function(){var iface=arguments.length>0&&arguments[0]!==undefined?arguments[0]:EditingInterface;return connect(function(state){var enabled=state.task.id==="FeatureForm"||state.task.identifyEnabled&&ConfigUtils.getConfigProp("identifyTool",state.theme.current,"Identify")==="FeatureForm";return{click:state.map.click||{modifiers:{}},enabled:enabled,editContext:state.editing.contexts.FeatureForm||{},currentEditContext:state.editing.currentContext,iface:iface,layers:state.layers.flat,filter:state.layers.filter,map:state.map,theme:state.theme.current}},{setCurrentTask:setCurrentTask,clearEditContext:clearEditContext,setEditContext:setEditContext})(FeatureForm)});
|
package/plugins/LayerTree.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
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 _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function
|
|
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 _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _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 2016-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{connect}from"react-redux";import Sortable from"react-sortablejs";import classnames from"classnames";import FileSaver from"file-saver";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{setActiveLayerInfo}from"../actions/layerinfo";import{LayerRole,changeLayerProperty,removeLayer,reorderLayer,setSwipe,addLayerSeparator}from"../actions/layers";import{toggleMapTips,zoomToExtent}from"../actions/map";import{setActiveServiceInfo}from"../actions/serviceinfo";import{setCurrentTask}from"../actions/task";import Icon from"../components/Icon";import ImportLayer from"../components/ImportLayer";import LayerInfoWindow from"../components/LayerInfoWindow";import ResizeableWindow from"../components/ResizeableWindow";import ServiceInfoWindow from"../components/ServiceInfoWindow";import SideBar from"../components/SideBar";import{Image}from"../components/widgets/Primitives";import Spinner from"../components/widgets/Spinner";import ConfigUtils from"../utils/ConfigUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import MiscUtils from"../utils/MiscUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import"./style/LayerTree.css";/**
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import Sortable from"react-sortablejs";import classnames from"classnames";import FileSaver from"file-saver";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{setActiveLayerInfo}from"../actions/layerinfo";import{LayerRole,changeLayerProperty,removeLayer,reorderLayer,setSwipe,addLayerSeparator,setThemeLayersVisibilityPreset}from"../actions/layers";import{toggleMapTips,zoomToExtent}from"../actions/map";import{setActiveServiceInfo}from"../actions/serviceinfo";import{setCurrentTask}from"../actions/task";import Icon from"../components/Icon";import ImportLayer from"../components/ImportLayer";import LayerInfoWindow from"../components/LayerInfoWindow";import ResizeableWindow from"../components/ResizeableWindow";import ServiceInfoWindow from"../components/ServiceInfoWindow";import SideBar from"../components/SideBar";import{Image}from"../components/widgets/Primitives";import Spinner from"../components/widgets/Spinner";import ConfigUtils from"../utils/ConfigUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import MiscUtils from"../utils/MiscUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import"./style/LayerTree.css";/**
|
|
8
8
|
* Displays the map layer tree in a sidebar.
|
|
9
9
|
*
|
|
10
10
|
* The print legend functionality requires a template located by default at assets/templates/legendprint.html
|
|
11
11
|
* with containing a container element with id=legendcontainer.
|
|
12
|
-
*/var LayerTree=/*#__PURE__*/function(_React$Component){function LayerTree(props){var _this;_classCallCheck(this,LayerTree);_this=_callSuper(this,LayerTree,[props]);_defineProperty(_this,"state",{activemenu:null,activestylemenu:null,legendTooltip:null,sidebarwidth:null,importvisible:false,filtervisiblelayers:false,legendPrintVisible:false});_defineProperty(_this,"renderSubLayers",function(layer,group,path,enabled){var inMutuallyExclusiveGroup=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;return(group.sublayers||[]).map(function(sublayer,idx){var subpath=[].concat(_toConsumableArray(path),[idx]);if(sublayer.sublayers){return _this.renderLayerGroup(layer,sublayer,subpath,enabled,inMutuallyExclusiveGroup)}else{return _this.renderLayer(layer,sublayer,subpath,enabled,inMutuallyExclusiveGroup)}})});_defineProperty(_this,"renderLayerGroup",function(layer,group,path,enabled){var inMutuallyExclusiveGroup=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;var flattenGroups=ConfigUtils.getConfigProp("flattenLayerTreeGroups",_this.props.theme)||_this.props.flattenGroups;if(flattenGroups){return _this.renderSubLayers(layer,group,path,enabled,false)}var subtreevisibility=LayerUtils.computeLayerVisibility(group);if(subtreevisibility===0&&_this.state.filtervisiblelayers){return null}var groupId=layer.id+":"+group.name;var visibility=true;var checkboxstate="";if(_this.props.groupTogglesSublayers&&!inMutuallyExclusiveGroup){visibility=subtreevisibility>0;if(subtreevisibility===1){checkboxstate="checked"}else if(subtreevisibility===0){checkboxstate="unchecked"}else{checkboxstate="tristate"}}else{visibility=group.visibility===undefined?subtreevisibility>0:group.visibility;if(visibility){checkboxstate=subtreevisibility===1?"checked":"tristate"}else{checkboxstate="unchecked"}}var omitqueryable;var identifyableClassName="";var subtreequeryable=LayerUtils.computeLayerQueryable(group);if(subtreequeryable===1){identifyableClassName="layertree-item-identifyable-checked";omitqueryable=false}else if(subtreequeryable===0){identifyableClassName="layertree-item-identifyable-unchecked";omitqueryable=true}else{identifyableClassName="layertree-item-identifyable-tristate";omitqueryable=true}if(inMutuallyExclusiveGroup){checkboxstate="radio_"+checkboxstate}var expanderstate=group.expanded?"tree_minus":"tree_plus";var showExpander=!_this.props.onlyGroups||(group.sublayers||[]).some(function(sublayer){return sublayer.sublayers});var itemclasses={"layertree-item":true,"layertree-item-disabled":!_this.props.groupTogglesSublayers&&!enabled||_this.props.grayUnchecked&&!visibility};var sublayersContent=null;if(group.expanded){sublayersContent=_this.renderSubLayers(layer,group,path,enabled&&visibility,group.mutuallyExclusive===true)}var optMenuClasses=classnames({"layertree-item-menubutton":true,"layertree-item-menubutton-active":_this.state.activemenu===groupId});var styleMenuClasses=classnames({"layertree-item-menubutton":true,"layertree-item-menubutton-active":_this.state.activestylemenu===groupId});var allowRemove=ConfigUtils.getConfigProp("allowRemovingThemeLayers",_this.props.theme)===true||layer.role!==LayerRole.THEME;var allowReordering=ConfigUtils.getConfigProp("allowReorderingLayers",_this.props.theme)===true&&!_this.state.filtervisiblelayers;var sortable=allowReordering&&ConfigUtils.getConfigProp("preventSplittingGroupsWhenReordering",_this.props.theme)===true;var styles=layer.type==="wms"&&path.length===0?_this.getLayerStyles(layer):null;return/*#__PURE__*/React.createElement("div",{className:"layertree-item-container","data-id":JSON.stringify({layer:layer.id,path:path}),key:groupId},/*#__PURE__*/React.createElement("div",{className:classnames(itemclasses)},showExpander?/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-expander",icon:expanderstate,onClick:function onClick(){return _this.groupExpandedToggled(layer,path,group.expanded)}}):/*#__PURE__*/React.createElement("span",{className:"layertree-item-expander"}),/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-checkbox",icon:checkboxstate,onClick:function onClick(){return _this.itemVisibilityToggled(layer,path,visibility)}}),/*#__PURE__*/React.createElement("span",{className:"layertree-item-title",onClick:function onClick(){return _this.itemVisibilityToggled(layer,path,visibility)},title:group.title},group.title),LayerUtils.hasQueryableSublayers(group)&&_this.props.allowSelectIdentifyableLayers?/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-identifyable "+identifyableClassName,icon:"info-sign",onClick:function onClick(){return _this.itemOmitQueryableToggled(layer,path,omitqueryable)}}):null,/*#__PURE__*/React.createElement("span",{className:"layertree-item-spacer"}),!isEmpty(styles)?/*#__PURE__*/React.createElement(Icon,{className:styleMenuClasses,icon:"paint",onClick:function onClick(){return _this.layerStyleMenuToggled(groupId)}}):null,/*#__PURE__*/React.createElement(Icon,{className:optMenuClasses,icon:"cog",onClick:function onClick(){return _this.layerMenuToggled(groupId)}}),allowRemove?/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-remove",icon:"trash",onClick:function onClick(){return _this.props.removeLayer(layer.id,path)}}):null),_this.state.activemenu===groupId?_this.renderOptionsMenu(layer,group,path,allowRemove):null,_this.state.activestylemenu===groupId?_this.renderStyleMenu(styles,_this.getSelectedStyles(layer),function(style){return _this.applyLayerStyle(style,layer)}):null,/*#__PURE__*/React.createElement(Sortable,{onChange:_this.onSortChange,options:{disabled:sortable===false,ghostClass:"drop-ghost",delay:200,forceFallback:_this.props.fallbackDrag}},sublayersContent))});_defineProperty(_this,"renderLayer",function(layer,sublayer,path){var enabled=arguments.length>3&&arguments[3]!==undefined?arguments[3]:true;var inMutuallyExclusiveGroup=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;var skipExpanderPlaceholder=arguments.length>5&&arguments[5]!==undefined?arguments[5]:false;if(_this.props.onlyGroups){return null}if(_this.state.filtervisiblelayers&&!sublayer.visibility){return null}if(Array.isArray(layer.layerTreeHiddenSublayers)&&layer.layerTreeHiddenSublayers.includes(sublayer.name)){return null}var sublayerId=layer.id+":"+sublayer.name;var allowRemove=ConfigUtils.getConfigProp("allowRemovingThemeLayers",_this.props.theme)===true||layer.role!==LayerRole.THEME;var allowReordering=ConfigUtils.getConfigProp("allowReorderingLayers",_this.props.theme)===true;var checkboxstate=sublayer.visibility===true?"checked":"unchecked";if(inMutuallyExclusiveGroup){checkboxstate="radio_"+checkboxstate}var optMenuClasses=classnames({"layertree-item-menubutton":true,"layertree-item-menubutton-active":_this.state.activemenu===sublayerId});var styleMenuClasses=classnames({"layertree-item-menubutton":true,"layertree-item-menubutton-active":_this.state.activestylemenu===sublayerId});var itemclasses={"layertree-item":true,"layertree-item-disabled":layer.type!=="separator"&&(!_this.props.groupTogglesSublayers&&!enabled||_this.props.grayUnchecked&&!sublayer.visibility),"layertree-item-separator":layer.type==="separator","layertree-item-outsidescalerange":sublayer.minScale!==undefined&&_this.props.mapScale<sublayer.minScale||sublayer.maxScale!==undefined&&_this.props.mapScale>sublayer.maxScale};var infoButton=null;if(layer.type==="wms"||layer.type==="wfs"||layer.type==="wmts"){infoButton=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-metadata",icon:"info-sign",onClick:function onClick(){return _this.props.setActiveLayerInfo(layer,sublayer)}})}var legendicon=null;if(_this.props.showLegendIcons){var legendUrl=LayerUtils.getLegendUrl(layer,sublayer,_this.props.mapScale,_this.props.map,_this.props.bboxDependentLegend,_this.props.scaleDependentLegend,_this.props.extraLegendParameters);if(legendUrl){legendicon=/*#__PURE__*/React.createElement(Image,{className:"layertree-item-legend-thumbnail",onMouseOut:_this.hideLegendTooltip,onMouseOver:function onMouseOver(ev){return _this.showLegendTooltip(ev,legendUrl)},onTouchStart:function onTouchStart(ev){return _this.showLegendTooltip(ev,legendUrl)},src:legendUrl+"&TYPE=thumbnail"})}else if(layer.color){legendicon=/*#__PURE__*/React.createElement("span",{className:"layertree-item-legend-coloricon",style:{backgroundColor:layer.color}})}}var checkbox=null;if(layer.type==="placeholder"){checkbox=/*#__PURE__*/React.createElement(Spinner,null)}else if(layer.type==="separator"){checkbox=null}else{checkbox=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-checkbox",icon:checkboxstate,onClick:function onClick(){return _this.itemVisibilityToggled(layer,path,sublayer.visibility)}})}var title=null;if(layer.type==="separator"){title=/*#__PURE__*/React.createElement("input",{onChange:function onChange(ev){return _this.props.changeLayerProperty(layer.id,"title",ev.target.value)},value:sublayer.title})}else{title=/*#__PURE__*/React.createElement("span",{className:"layertree-item-title",onClick:function onClick(){return _this.itemVisibilityToggled(layer,path,sublayer.visibility)},title:sublayer.title},sublayer.title)}var queryableicon=null;if(_this.props.allowSelectIdentifyableLayers){var identifyableClassName=!sublayer.omitFromQueryLayers?"layertree-item-identifyable-checked":"layertree-item-identifyable-unchecked";queryableicon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-identifyable "+identifyableClassName,icon:"info-sign",onClick:function onClick(){return _this.itemOmitQueryableToggled(layer,path,sublayer.omitFromQueryLayers)}})}else{queryableicon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-queryable",icon:"info-sign"})}var allowOptions=layer.type!=="placeholder"&&layer.type!=="separator";var flattenGroups=ConfigUtils.getConfigProp("flattenLayerTreeGroups",_this.props.theme)||_this.props.flattenGroups;var allowSeparators=flattenGroups&&allowReordering&&ConfigUtils.getConfigProp("allowLayerTreeSeparators",_this.props.theme);var separatorTitle=LocaleUtils.tr("layertree.separator");var separatorTooltip=LocaleUtils.tr("layertree.separatortooltip");return/*#__PURE__*/React.createElement("div",{className:"layertree-item-container","data-id":JSON.stringify({layer:layer.id,path:path}),key:sublayerId},allowSeparators?/*#__PURE__*/React.createElement("div",{className:"layertree-item-addsep",onClick:function onClick(){return _this.props.addLayerSeparator(separatorTitle,layer.id,path)},title:separatorTooltip}):null,/*#__PURE__*/React.createElement("div",{className:classnames(itemclasses)},flattenGroups||skipExpanderPlaceholder?null:/*#__PURE__*/React.createElement("span",{className:"layertree-item-expander"}),checkbox,legendicon,title,sublayer.queryable&&_this.props.showQueryableIcon?queryableicon:null,sublayer.name in(_this.props.filter.filterParams||{})||_this.props.filter.filterGeom?/*#__PURE__*/React.createElement(Icon,{icon:"filter"}):null,_this.props.loadingLayers.includes(layer.id)?/*#__PURE__*/React.createElement(Spinner,null):null,/*#__PURE__*/React.createElement("span",{className:"layertree-item-spacer"}),allowOptions&&!_this.props.infoInSettings?infoButton:null,Object.keys(sublayer.styles||{}).length>1?/*#__PURE__*/React.createElement(Icon,{className:styleMenuClasses,icon:"paint",onClick:function onClick(){return _this.layerStyleMenuToggled(sublayerId)}}):null,allowOptions?/*#__PURE__*/React.createElement(Icon,{className:optMenuClasses,icon:"cog",onClick:function onClick(){return _this.layerMenuToggled(sublayerId)}}):null,allowRemove?/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-remove",icon:"trash",onClick:function onClick(){return _this.props.removeLayer(layer.id,path)}}):null),_this.state.activemenu===sublayerId?_this.renderOptionsMenu(layer,sublayer,path,allowRemove):null,_this.state.activestylemenu===sublayerId?_this.renderStyleMenu(sublayer.styles,[sublayer.style],function(style){return _this.layerStyleChanged(layer,path,style)}):null)});_defineProperty(_this,"renderOptionsMenu",function(layer,sublayer,path){var marginRight=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var allowReordering=ConfigUtils.getConfigProp("allowReorderingLayers",_this.props.theme)===true;var reorderButtons=null;if(allowReordering&&!_this.state.filtervisiblelayers){reorderButtons=[/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-move",icon:"arrow-down",key:"layertree-item-move-down",onClick:function onClick(){return _this.props.reorderLayer(layer,path,+1)}}),/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-move",icon:"arrow-up",key:"layertree-item-move-up",onClick:function onClick(){return _this.props.reorderLayer(layer,path,-1)}})]}var zoomToLayerButton=null;if(sublayer.bbox&&sublayer.bbox.bounds){var zoomToLayerTooltip=LocaleUtils.tr("layertree.zoomtolayer");var crs=sublayer.bbox.crs||_this.props.map.projection;zoomToLayerButton=/*#__PURE__*/React.createElement(Icon,{icon:"zoom",onClick:function onClick(){return _this.props.zoomToExtent(sublayer.bbox.bounds,crs)},title:zoomToLayerTooltip})}var infoButton=null;if(_this.props.infoInSettings&&(layer.type==="wms"||layer.type==="wfs"||layer.type==="wmts")){infoButton=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-metadata",icon:"info-sign",onClick:function onClick(){return _this.props.setActiveLayerInfo(layer,sublayer)}})}var attrTableButton=null;if(_this.props.showAttributeTableLink&&ConfigUtils.havePlugin("AttributeTable")&&layer.role===LayerRole.THEME&&_this.props.theme.editConfig[sublayer.name]){attrTableButton=/*#__PURE__*/React.createElement(Icon,{icon:"editing",onClick:function onClick(){return _this.props.setCurrentTask("AttributeTable",null,null,{layer:sublayer.name})}})}return/*#__PURE__*/React.createElement("div",{className:"layertree-item-optionsmenu",onMouseDown:_this.preventLayerTreeItemDrag,style:{marginRight:marginRight*1.75+"em"}},zoomToLayerButton,_this.props.transparencyIcon?/*#__PURE__*/React.createElement(Icon,{icon:"transparency"}):LocaleUtils.tr("layertree.transparency"),/*#__PURE__*/React.createElement("input",{className:"layertree-item-transparency-slider",max:"255",min:"0",onChange:function onChange(ev){return _this.layerTransparencyChanged(layer,path,ev.target.value,!isEmpty(sublayer.sublayers)?"children":null)},step:"1",type:"range",value:255-LayerUtils.computeLayerOpacity(sublayer)}),reorderButtons,infoButton,attrTableButton,layer.type==="vector"?/*#__PURE__*/React.createElement(Icon,{icon:"export",onClick:function onClick(){return _this.exportRedliningLayer(layer)}}):null)});_defineProperty(_this,"renderStyleMenu",function(styles,selectedStyles,onStyleChange){var marginRight=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var checkedIcon=selectedStyles.length===1?"radio_checked":"radio_tristate";return/*#__PURE__*/React.createElement("div",{className:"layertree-item-stylemenu",style:{marginRight:marginRight*1.75+"em"}},Object.entries(styles).map(function(_ref){var _ref2=_slicedToArray(_ref,2),name=_ref2[0],title=_ref2[1];return/*#__PURE__*/React.createElement("div",{key:name,onClick:function onClick(){return onStyleChange(name)}},/*#__PURE__*/React.createElement(Icon,{icon:selectedStyles.includes(name)?checkedIcon:"radio_unchecked"}),/*#__PURE__*/React.createElement("div",null,title))}))});_defineProperty(_this,"preventLayerTreeItemDrag",function(ev){var draggableEl=ev.currentTarget.parentNode;if(draggableEl.draggable){draggableEl.draggable=false;document.addEventListener("mouseup",function(){draggableEl.draggable=true},{once:true})}});_defineProperty(_this,"renderLayerTree",function(layers){var flattenGroups=ConfigUtils.getConfigProp("flattenLayerTreeGroups",_this.props.theme)||_this.props.flattenGroups;var haveGroups=!flattenGroups&&layers.find(function(layer){if(!_this.props.showRootEntry){return(layer.sublayers||[]).find(function(sublayer){return!isEmpty(sublayer.sublayers)})}else{return!isEmpty(layer.sublayers)}});return layers.map(function(layer){if(isEmpty(layer.sublayers)&&layer.role!==LayerRole.THEME){return _this.renderLayer(layer,layer,[],layer.visibility,false,!haveGroups)}else if(_this.props.showRootEntry){return _this.renderLayerGroup(layer,layer,[],layer.visibility)}else{return layer.sublayers.map(function(sublayer,idx){var subpath=[idx];if(sublayer.sublayers){return _this.renderLayerGroup(layer,sublayer,subpath,layer.visibility)}else{return _this.renderLayer(layer,sublayer,subpath,layer.visibility,false,!haveGroups)}})}})});_defineProperty(_this,"renderBody",function(){var maptipcheckboxstate=_this.props.mapTipsEnabled===true?"checked":"unchecked";var maptipCheckbox=null;var maptipsEnabled=false;if(_this.props.theme.mapTips!==undefined){maptipsEnabled=_this.props.theme.mapTips!==null&&_this.props.allowMapTips}else{maptipsEnabled=_this.props.allowMapTips}if(!ConfigUtils.isMobile()&&maptipsEnabled){maptipCheckbox=/*#__PURE__*/React.createElement("div",{className:"layertree-option"},/*#__PURE__*/React.createElement(Icon,{icon:maptipcheckboxstate,onClick:_this.toggleMapTips}),/*#__PURE__*/React.createElement("span",{onClick:_this.toggleMapTips},LocaleUtils.tr("layertree.maptip")))}var allowReordering=ConfigUtils.getConfigProp("allowReorderingLayers",_this.props.theme)===true&&!_this.state.filtervisiblelayers;var haveMapCompare=ConfigUtils.havePlugin("MapCompare");var compareCheckbox=null;if(haveMapCompare&&_this.props.allowCompare&&allowReordering){var swipecheckboxstate=_this.props.swipe||_this.props.swipe===0?"checked":"unchecked";compareCheckbox=/*#__PURE__*/React.createElement("div",{className:"layertree-option"},/*#__PURE__*/React.createElement(Icon,{icon:swipecheckboxstate,onClick:_this.toggleSwipe}),/*#__PURE__*/React.createElement("span",{onClick:_this.toggleSwipe},LocaleUtils.tr("layertree.compare")))}var layerImportExpander=null;if(_this.props.allowImport){layerImportExpander=/*#__PURE__*/React.createElement("div",{className:"layertree-option",onClick:_this.toggleImportLayers},/*#__PURE__*/React.createElement(Icon,{icon:_this.state.importvisible?"collapse":"expand"})," ",LocaleUtils.tr("layertree.importlayer"))}var flattenGroups=ConfigUtils.getConfigProp("flattenLayerTreeGroups",_this.props.theme)||_this.props.flattenGroups;var sortable=allowReordering&&(ConfigUtils.getConfigProp("preventSplittingGroupsWhenReordering",_this.props.theme)===true||flattenGroups===true);var treelayers=_this.props.layers.filter(function(layer){return layer.role!==LayerRole.BACKGROUND&&!layer.layertreehidden});return/*#__PURE__*/React.createElement("div",{className:"layertree-container-wrapper",role:"body"},/*#__PURE__*/React.createElement("div",{className:"layertree-container"},/*#__PURE__*/React.createElement("div",{className:"layertree-tree",onContextMenuCapture:function onContextMenuCapture(ev){// Prevent context menu on drag-sort
|
|
12
|
+
*/var LayerTree=/*#__PURE__*/function(_React$Component){function LayerTree(props){var _this;_classCallCheck(this,LayerTree);_this=_callSuper(this,LayerTree,[props]);_defineProperty(_this,"state",{activemenu:null,activestylemenu:null,legendTooltip:null,sidebarwidth:null,importvisible:false,filterinvisiblelayers:false,legendPrintVisible:false,visibilityMenu:false,activePreset:null});_defineProperty(_this,"renderSubLayers",function(layer,group,path,enabled){var inMutuallyExclusiveGroup=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;return(group.sublayers||[]).map(function(sublayer,idx){var subpath=[].concat(_toConsumableArray(path),[idx]);if(sublayer.sublayers){return _this.renderLayerGroup(layer,sublayer,subpath,enabled,inMutuallyExclusiveGroup)}else{return _this.renderLayer(layer,sublayer,subpath,enabled,inMutuallyExclusiveGroup)}})});_defineProperty(_this,"renderLayerGroup",function(layer,group,path,enabled){var inMutuallyExclusiveGroup=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;var flattenGroups=ConfigUtils.getConfigProp("flattenLayerTreeGroups",_this.props.theme)||_this.props.flattenGroups;if(flattenGroups){return _this.renderSubLayers(layer,group,path,enabled,false)}var subtreevisibility=LayerUtils.computeLayerVisibility(group);if(subtreevisibility===0&&_this.state.filterinvisiblelayers){return null}var groupId=layer.id+":"+group.name;var visibility=true;var checkboxstate="";if(_this.props.groupTogglesSublayers&&!inMutuallyExclusiveGroup){visibility=subtreevisibility>0;if(subtreevisibility===1){checkboxstate="checked"}else if(subtreevisibility===0){checkboxstate="unchecked"}else{checkboxstate="tristate"}}else{visibility=group.visibility===undefined?subtreevisibility>0:group.visibility;if(visibility){checkboxstate=subtreevisibility===1?"checked":"tristate"}else{checkboxstate="unchecked"}}var omitqueryable;var identifyableClassName="";var subtreequeryable=LayerUtils.computeLayerQueryable(group);if(subtreequeryable===1){identifyableClassName="layertree-item-identifyable-checked";omitqueryable=false}else if(subtreequeryable===0){identifyableClassName="layertree-item-identifyable-unchecked";omitqueryable=true}else{identifyableClassName="layertree-item-identifyable-tristate";omitqueryable=true}if(inMutuallyExclusiveGroup){checkboxstate="radio_"+checkboxstate}var expanderstate=group.expanded?"tree_minus":"tree_plus";var showExpander=!_this.props.onlyGroups||(group.sublayers||[]).some(function(sublayer){return sublayer.sublayers});var itemclasses={"layertree-item":true,"layertree-item-disabled":!_this.props.groupTogglesSublayers&&!enabled||_this.props.grayUnchecked&&!visibility};var sublayersContent=null;if(group.expanded){sublayersContent=_this.renderSubLayers(layer,group,path,enabled&&visibility,group.mutuallyExclusive===true)}var optMenuClasses=classnames({"layertree-item-menubutton":true,"layertree-item-menubutton-active":_this.state.activemenu===groupId});var styleMenuClasses=classnames({"layertree-item-menubutton":true,"layertree-item-menubutton-active":_this.state.activestylemenu===groupId});var allowRemove=ConfigUtils.getConfigProp("allowRemovingThemeLayers",_this.props.theme)===true||layer.role!==LayerRole.THEME;var allowReordering=ConfigUtils.getConfigProp("allowReorderingLayers",_this.props.theme)===true&&!_this.state.filterinvisiblelayers;var sortable=allowReordering&&ConfigUtils.getConfigProp("preventSplittingGroupsWhenReordering",_this.props.theme)===true;var styles=layer.type==="wms"&&path.length===0?_this.getLayerStyles(layer):null;return/*#__PURE__*/React.createElement("div",{className:"layertree-item-container","data-id":JSON.stringify({layer:layer.id,path:path}),key:groupId},/*#__PURE__*/React.createElement("div",{className:classnames(itemclasses)},showExpander?/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-expander",icon:expanderstate,onClick:function onClick(){return _this.groupExpandedToggled(layer,path,group.expanded)}}):/*#__PURE__*/React.createElement("span",{className:"layertree-item-expander"}),/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-checkbox",icon:checkboxstate,onClick:function onClick(){return _this.itemVisibilityToggled(layer,path,visibility)}}),/*#__PURE__*/React.createElement("span",{className:"layertree-item-title",onClick:function onClick(){return _this.itemVisibilityToggled(layer,path,visibility)},title:group.title},group.title),LayerUtils.hasQueryableSublayers(group)&&_this.props.allowSelectIdentifyableLayers?/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-identifyable "+identifyableClassName,icon:"info-sign",onClick:function onClick(){return _this.itemOmitQueryableToggled(layer,path,omitqueryable)}}):null,/*#__PURE__*/React.createElement("span",{className:"layertree-item-spacer"}),!isEmpty(styles)?/*#__PURE__*/React.createElement(Icon,{className:styleMenuClasses,icon:"paint",onClick:function onClick(){return _this.layerStyleMenuToggled(groupId)}}):null,/*#__PURE__*/React.createElement(Icon,{className:optMenuClasses,icon:"cog",onClick:function onClick(){return _this.layerMenuToggled(groupId)}}),allowRemove?/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-remove",icon:"trash",onClick:function onClick(){return _this.props.removeLayer(layer.id,path)}}):null),_this.state.activemenu===groupId?_this.renderOptionsMenu(layer,group,path,allowRemove):null,_this.state.activestylemenu===groupId?_this.renderStyleMenu(styles,_this.getSelectedStyles(layer),function(style){return _this.applyLayerStyle(style,layer)}):null,/*#__PURE__*/React.createElement(Sortable,{onChange:_this.onSortChange,options:{disabled:sortable===false,ghostClass:"drop-ghost",delay:200,forceFallback:_this.props.fallbackDrag}},sublayersContent))});_defineProperty(_this,"renderLayer",function(layer,sublayer,path){var enabled=arguments.length>3&&arguments[3]!==undefined?arguments[3]:true;var inMutuallyExclusiveGroup=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;var skipExpanderPlaceholder=arguments.length>5&&arguments[5]!==undefined?arguments[5]:false;if(_this.props.onlyGroups){return null}if(_this.state.filterinvisiblelayers&&!sublayer.visibility){return null}if(Array.isArray(layer.layerTreeHiddenSublayers)&&layer.layerTreeHiddenSublayers.includes(sublayer.name)){return null}var sublayerId=layer.id+":"+sublayer.name;var allowRemove=ConfigUtils.getConfigProp("allowRemovingThemeLayers",_this.props.theme)===true||layer.role!==LayerRole.THEME;var allowReordering=ConfigUtils.getConfigProp("allowReorderingLayers",_this.props.theme)===true;var checkboxstate=sublayer.visibility===true?"checked":"unchecked";if(inMutuallyExclusiveGroup){checkboxstate="radio_"+checkboxstate}var optMenuClasses=classnames({"layertree-item-menubutton":true,"layertree-item-menubutton-active":_this.state.activemenu===sublayerId});var styleMenuClasses=classnames({"layertree-item-menubutton":true,"layertree-item-menubutton-active":_this.state.activestylemenu===sublayerId});var itemclasses={"layertree-item":true,"layertree-item-disabled":layer.type!=="separator"&&(!_this.props.groupTogglesSublayers&&!enabled||_this.props.grayUnchecked&&!sublayer.visibility),"layertree-item-separator":layer.type==="separator","layertree-item-outsidescalerange":sublayer.minScale!==undefined&&_this.props.mapScale<sublayer.minScale||sublayer.maxScale!==undefined&&_this.props.mapScale>sublayer.maxScale};var infoButton=null;if(layer.type==="wms"||layer.type==="wfs"||layer.type==="wmts"){infoButton=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-metadata",icon:"info-sign",onClick:function onClick(){return _this.props.setActiveLayerInfo(layer,sublayer)}})}var legendicon=null;if(_this.props.showLegendIcons){var legendUrl=LayerUtils.getLegendUrl(layer,sublayer,_this.props.mapScale,_this.props.map,_this.props.bboxDependentLegend,_this.props.scaleDependentLegend,_this.props.extraLegendParameters);if(legendUrl){legendicon=/*#__PURE__*/React.createElement(Image,{className:"layertree-item-legend-thumbnail",onMouseOut:_this.hideLegendTooltip,onMouseOver:function onMouseOver(ev){return _this.showLegendTooltip(ev,legendUrl)},onTouchStart:function onTouchStart(ev){return _this.showLegendTooltip(ev,legendUrl)},src:legendUrl+"&TYPE=thumbnail"})}else if(layer.color){legendicon=/*#__PURE__*/React.createElement("span",{className:"layertree-item-legend-coloricon",style:{backgroundColor:layer.color}})}}var checkbox=null;if(layer.type==="placeholder"){checkbox=/*#__PURE__*/React.createElement(Spinner,null)}else if(layer.type==="separator"){checkbox=null}else{checkbox=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-checkbox",icon:checkboxstate,onClick:function onClick(){return _this.itemVisibilityToggled(layer,path,sublayer.visibility)}})}var title=null;if(layer.type==="separator"){title=/*#__PURE__*/React.createElement("input",{onChange:function onChange(ev){return _this.props.changeLayerProperty(layer.id,"title",ev.target.value)},value:sublayer.title})}else{title=/*#__PURE__*/React.createElement("span",{className:"layertree-item-title",onClick:function onClick(){return _this.itemVisibilityToggled(layer,path,sublayer.visibility)},title:sublayer.title},sublayer.title)}var queryableicon=null;if(_this.props.allowSelectIdentifyableLayers){var identifyableClassName=!sublayer.omitFromQueryLayers?"layertree-item-identifyable-checked":"layertree-item-identifyable-unchecked";queryableicon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-identifyable "+identifyableClassName,icon:"info-sign",onClick:function onClick(){return _this.itemOmitQueryableToggled(layer,path,sublayer.omitFromQueryLayers)}})}else{queryableicon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-queryable",icon:"info-sign"})}var allowOptions=layer.type!=="placeholder"&&layer.type!=="separator";var flattenGroups=ConfigUtils.getConfigProp("flattenLayerTreeGroups",_this.props.theme)||_this.props.flattenGroups;var allowSeparators=flattenGroups&&allowReordering&&ConfigUtils.getConfigProp("allowLayerTreeSeparators",_this.props.theme);var separatorTitle=LocaleUtils.tr("layertree.separator");var separatorTooltip=LocaleUtils.tr("layertree.separatortooltip");return/*#__PURE__*/React.createElement("div",{className:"layertree-item-container","data-id":JSON.stringify({layer:layer.id,path:path}),key:sublayerId},allowSeparators?/*#__PURE__*/React.createElement("div",{className:"layertree-item-addsep",onClick:function onClick(){return _this.props.addLayerSeparator(separatorTitle,layer.id,path)},title:separatorTooltip}):null,/*#__PURE__*/React.createElement("div",{className:classnames(itemclasses)},flattenGroups||skipExpanderPlaceholder?null:/*#__PURE__*/React.createElement("span",{className:"layertree-item-expander"}),checkbox,legendicon,title,sublayer.queryable&&_this.props.showQueryableIcon?queryableicon:null,sublayer.name in(_this.props.filter.filterParams||{})||_this.props.filter.filterGeom?/*#__PURE__*/React.createElement(Icon,{icon:"filter"}):null,_this.props.loadingLayers.includes(layer.id)?/*#__PURE__*/React.createElement(Spinner,null):null,/*#__PURE__*/React.createElement("span",{className:"layertree-item-spacer"}),allowOptions&&!_this.props.infoInSettings?infoButton:null,Object.keys(sublayer.styles||{}).length>1?/*#__PURE__*/React.createElement(Icon,{className:styleMenuClasses,icon:"paint",onClick:function onClick(){return _this.layerStyleMenuToggled(sublayerId)}}):null,allowOptions?/*#__PURE__*/React.createElement(Icon,{className:optMenuClasses,icon:"cog",onClick:function onClick(){return _this.layerMenuToggled(sublayerId)}}):null,allowRemove?/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-remove",icon:"trash",onClick:function onClick(){return _this.props.removeLayer(layer.id,path)}}):null),_this.state.activemenu===sublayerId?_this.renderOptionsMenu(layer,sublayer,path,allowRemove):null,_this.state.activestylemenu===sublayerId?_this.renderStyleMenu(sublayer.styles,[sublayer.style],function(style){return _this.layerStyleChanged(layer,path,style)}):null)});_defineProperty(_this,"renderOptionsMenu",function(layer,sublayer,path){var marginRight=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var allowReordering=ConfigUtils.getConfigProp("allowReorderingLayers",_this.props.theme)===true;var reorderButtons=null;if(allowReordering&&!_this.state.filterinvisiblelayers){reorderButtons=[/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-move",icon:"arrow-down",key:"layertree-item-move-down",onClick:function onClick(){return _this.props.reorderLayer(layer,path,+1)}}),/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-move",icon:"arrow-up",key:"layertree-item-move-up",onClick:function onClick(){return _this.props.reorderLayer(layer,path,-1)}})]}var zoomToLayerButton=null;if(sublayer.bbox&&sublayer.bbox.bounds){var zoomToLayerTooltip=LocaleUtils.tr("layertree.zoomtolayer");var crs=sublayer.bbox.crs||_this.props.map.projection;zoomToLayerButton=/*#__PURE__*/React.createElement(Icon,{icon:"zoom",onClick:function onClick(){return _this.props.zoomToExtent(sublayer.bbox.bounds,crs)},title:zoomToLayerTooltip})}var infoButton=null;if(_this.props.infoInSettings&&(layer.type==="wms"||layer.type==="wfs"||layer.type==="wmts")){infoButton=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-metadata",icon:"info-sign",onClick:function onClick(){return _this.props.setActiveLayerInfo(layer,sublayer)}})}var attrTableButton=null;if(_this.props.showAttributeTableLink&&ConfigUtils.havePlugin("AttributeTable")&&layer.role===LayerRole.THEME&&_this.props.theme.editConfig[sublayer.name]){attrTableButton=/*#__PURE__*/React.createElement(Icon,{icon:"editing",onClick:function onClick(){return _this.props.setCurrentTask("AttributeTable",null,null,{layer:sublayer.name})}})}return/*#__PURE__*/React.createElement("div",{className:"layertree-item-optionsmenu",onMouseDown:_this.preventLayerTreeItemDrag,style:{marginRight:marginRight*1.75+"em"}},zoomToLayerButton,_this.props.transparencyIcon?/*#__PURE__*/React.createElement(Icon,{icon:"transparency"}):LocaleUtils.tr("layertree.transparency"),/*#__PURE__*/React.createElement("input",{className:"layertree-item-transparency-slider",max:"255",min:"0",onChange:function onChange(ev){return _this.layerTransparencyChanged(layer,path,ev.target.value,!isEmpty(sublayer.sublayers)?"children":null)},step:"1",type:"range",value:255-LayerUtils.computeLayerOpacity(sublayer)}),reorderButtons,infoButton,attrTableButton,layer.type==="vector"?/*#__PURE__*/React.createElement(Icon,{icon:"export",onClick:function onClick(){return _this.exportRedliningLayer(layer)}}):null)});_defineProperty(_this,"renderStyleMenu",function(styles,selectedStyles,onStyleChange){var marginRight=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var checkedIcon=selectedStyles.length===1?"radio_checked":"radio_tristate";return/*#__PURE__*/React.createElement("div",{className:"layertree-item-stylemenu",style:{marginRight:marginRight*1.75+"em"}},Object.entries(styles).map(function(_ref){var _ref2=_slicedToArray(_ref,2),name=_ref2[0],title=_ref2[1];return/*#__PURE__*/React.createElement("div",{key:name,onClick:function onClick(){return onStyleChange(name)}},/*#__PURE__*/React.createElement(Icon,{icon:selectedStyles.includes(name)?checkedIcon:"radio_unchecked"}),/*#__PURE__*/React.createElement("div",null,title))}))});_defineProperty(_this,"preventLayerTreeItemDrag",function(ev){var draggableEl=ev.currentTarget.parentNode;if(draggableEl.draggable){draggableEl.draggable=false;document.addEventListener("mouseup",function(){draggableEl.draggable=true},{once:true})}});_defineProperty(_this,"renderLayerTree",function(layers){var flattenGroups=ConfigUtils.getConfigProp("flattenLayerTreeGroups",_this.props.theme)||_this.props.flattenGroups;var haveGroups=!flattenGroups&&layers.find(function(layer){if(layer.role===LayerRole.THEME&&!_this.props.showRootEntry){return(layer.sublayers||[]).find(function(sublayer){return!isEmpty(sublayer.sublayers)})}else{return!isEmpty(layer.sublayers)}});return layers.map(function(layer){if(isEmpty(layer.sublayers)&&layer.role!==LayerRole.THEME){return _this.renderLayer(layer,layer,[],layer.visibility,false,!haveGroups)}else if(_this.props.showRootEntry||layer.role!==LayerRole.THEME){return _this.renderLayerGroup(layer,layer,[],layer.visibility)}else{return layer.sublayers.map(function(sublayer,idx){var subpath=[idx];if(sublayer.sublayers){return _this.renderLayerGroup(layer,sublayer,subpath,layer.visibility)}else{return _this.renderLayer(layer,sublayer,subpath,layer.visibility,false,!haveGroups)}})}})});_defineProperty(_this,"renderBody",function(){var maptipcheckboxstate=_this.props.mapTipsEnabled===true?"checked":"unchecked";var maptipCheckbox=null;var maptipsEnabled=false;if(_this.props.theme.mapTips!==undefined){maptipsEnabled=_this.props.theme.mapTips!==null&&_this.props.allowMapTips}else{maptipsEnabled=_this.props.allowMapTips}if(!ConfigUtils.isMobile()&&maptipsEnabled){maptipCheckbox=/*#__PURE__*/React.createElement("div",{className:"layertree-option"},/*#__PURE__*/React.createElement(Icon,{icon:maptipcheckboxstate,onClick:_this.toggleMapTips}),/*#__PURE__*/React.createElement("span",{onClick:_this.toggleMapTips},LocaleUtils.tr("layertree.maptip")))}var allowReordering=ConfigUtils.getConfigProp("allowReorderingLayers",_this.props.theme)===true&&!_this.state.filterinvisiblelayers;var haveMapCompare=ConfigUtils.havePlugin("MapCompare");var compareCheckbox=null;if(haveMapCompare&&_this.props.allowCompare&&allowReordering){var swipecheckboxstate=_this.props.swipe||_this.props.swipe===0?"checked":"unchecked";compareCheckbox=/*#__PURE__*/React.createElement("div",{className:"layertree-option"},/*#__PURE__*/React.createElement(Icon,{icon:swipecheckboxstate,onClick:_this.toggleSwipe}),/*#__PURE__*/React.createElement("span",{onClick:_this.toggleSwipe},LocaleUtils.tr("layertree.compare")))}var layerImportExpander=null;if(_this.props.allowImport){layerImportExpander=/*#__PURE__*/React.createElement("div",{className:"layertree-option",onClick:_this.toggleImportLayers},/*#__PURE__*/React.createElement(Icon,{icon:_this.state.importvisible?"collapse":"expand"})," ",LocaleUtils.tr("layertree.importlayer"))}var flattenGroups=ConfigUtils.getConfigProp("flattenLayerTreeGroups",_this.props.theme)||_this.props.flattenGroups;var sortable=allowReordering&&(ConfigUtils.getConfigProp("preventSplittingGroupsWhenReordering",_this.props.theme)===true||flattenGroups===true);var treelayers=_this.props.layers.filter(function(layer){return layer.role!==LayerRole.BACKGROUND&&!layer.layertreehidden});return/*#__PURE__*/React.createElement("div",{className:"layertree-container-wrapper",role:"body"},/*#__PURE__*/React.createElement("div",{className:"layertree-container"},/*#__PURE__*/React.createElement("div",{className:"layertree-tree",onContextMenuCapture:function onContextMenuCapture(ev){// Prevent context menu on drag-sort
|
|
13
13
|
ev.stopPropagation();ev.preventDefault();return false},onTouchEnd:function onTouchEnd(ev){var target=ev.currentTarget;clearTimeout(target.preventScrollTimeout);target.preventScrollTimeout=null;target.removeEventListener("touchmove",MiscUtils.killEvent)},onTouchStart:function onTouchStart(ev){// Prevent touch-scroll after sortable trigger delay
|
|
14
|
-
var target=ev.currentTarget;target.preventScrollTimeout=setTimeout(function(){target.addEventListener("touchmove",MiscUtils.killEvent,{passive:false})},200)},ref:MiscUtils.setupKillTouchEvents},/*#__PURE__*/React.createElement(Sortable,{onChange:_this.onSortChange,options:{disabled:sortable===false,ghostClass:"drop-ghost",delay:200,forceFallback:_this.props.fallbackDrag}},_this.renderLayerTree(treelayers))),maptipCheckbox,compareCheckbox,layerImportExpander,_this.state.importvisible?/*#__PURE__*/React.createElement(ImportLayer,{theme:_this.props.theme}):null))});_defineProperty(_this,"renderLegendPrintWindow",function(){if(!_this.state.legendPrintVisible){return null}var setLegendPrintContents=function setLegendPrintContents(el){if(!el){return}el.addEventListener("load",function(){var container=el.contentWindow.document.getElementById("legendcontainer");if(container){var body="<p id=\"legendcontainerbody\">";body+=_this.props.layers.map(function(layer){if(!layer.visibility){return""}else if(layer.legendUrl){return _this.printLayerLegend(layer,layer)}else if(layer.color){return"<div class=\"legend-entry\"><span style=\"display: inline-block; width: 1em; height: 1em; box-shadow: inset 0 0 0 1000px "+layer.color+"; margin: 0.25em; border: 1px solid black;\"> </span>"+(layer.title||layer.name)+"</div>"}else{return""}}).join("");body+="</p>";container.innerHTML=body}else{_this.legendPrintWindow.document.body.innerHTML="Broken template. An element with id=legendcontainer must exist."}})};var printLegend=function printLegend(ev){ev.target.parentElement.parentElement.getElementsByTagName("iframe")[0].contentWindow.print()};return/*#__PURE__*/React.createElement(ResizeableWindow,{icon:"print",initialHeight:0.75*window.innerHeight,initialWidth:0.5*window.innerWidth,onClose:function onClose(){return _this.setState({legendPrintVisible:false})},title:LocaleUtils.tr("layertree.printlegend")},/*#__PURE__*/React.createElement("div",{className:"layertree-legend-print-body",role:"body"},/*#__PURE__*/React.createElement("iframe",{ref:setLegendPrintContents,src:MiscUtils.resolveAssetsPath(_this.props.templatePath)}),/*#__PURE__*/React.createElement("div",{className:"layertree-legend-print-body-buttonbar"},/*#__PURE__*/React.createElement("button",{onClick:printLegend},LocaleUtils.tr("layertree.printlegend")))))});_defineProperty(_this,"legendTooltipLoaded",function(ev){if(ev.target.naturalWidth>1){ev.target.style.visibility="visible"}});_defineProperty(_this,"onSortChange",function(order,sortable,ev){var moved=JSON.parse(order[ev.newIndex]);var layer=_this.props.layers.find(function(l){return l.id===moved.layer});if(layer){_this.props.reorderLayer(layer,moved.path,ev.newIndex-ev.oldIndex)}});_defineProperty(_this,"toggleImportLayers",function(){_this.setState(function(state){var visible=!state.importvisible;return{importvisible:visible,sidebarwidth:visible?"40em":null}})});_defineProperty(_this,"propagateOptions",function(layer,options){var path=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;if(layer.sublayers){layer.sublayers=layer.sublayers.map(function(sublayer,idx){if(path===null||!isEmpty(path)&&path[0]===idx){var newsublayer=_objectSpread(_objectSpread({},sublayer),options);_this.propagateOptions(newsublayer,options,path?path.slice(1):null);return newsublayer}else{return sublayer}})}});_defineProperty(_this,"groupExpandedToggled",function(layer,grouppath,oldexpanded){_this.props.changeLayerProperty(layer.id,"expanded",!oldexpanded,grouppath)});_defineProperty(_this,"itemVisibilityToggled",function(layer,grouppath,oldvisibility){var recurseDirection=null;// If item becomes visible, also make parents visible
|
|
15
|
-
if(_this.props.groupTogglesSublayers){recurseDirection=!oldvisibility?"both":"children"}else{recurseDirection=!oldvisibility?"parents":null}_this.props.changeLayerProperty(layer.id,"visibility",!oldvisibility,grouppath,recurseDirection)});_defineProperty(_this,"itemOmitQueryableToggled",function(layer,grouppath,oldomitqueryable){_this.props.changeLayerProperty(layer.id,"omitFromQueryLayers",!oldomitqueryable,grouppath,"children")});_defineProperty(_this,"layerTransparencyChanged",function(layer,sublayerpath,value){var recurse=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;_this.props.changeLayerProperty(layer.id,"opacity",Math.max(1,255-value),sublayerpath,recurse)});_defineProperty(_this,"layerStyleChanged",function(layer,sublayerpath,value){var recurseDirection=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;_this.props.changeLayerProperty(layer.id,"style",value,sublayerpath,recurseDirection)});_defineProperty(_this,"layerMenuToggled",function(sublayerid){_this.setState(function(state){return{activemenu:state.activemenu===sublayerid?null:sublayerid,activestylemenu:null}})});_defineProperty(_this,"layerStyleMenuToggled",function(sublayerid){_this.setState(function(state){return{activestylemenu:state.activestylemenu===sublayerid?null:sublayerid,activemenu:null}})});_defineProperty(_this,"showLegendTooltip",function(ev,request){_this.setState({legendTooltip:{x:ev.target.getBoundingClientRect().right,y:ev.target.getBoundingClientRect().top,img:request+"&TYPE=tooltip"}})});_defineProperty(_this,"hideLegendTooltip",function(){_this.setState({legendTooltip:undefined})});_defineProperty(_this,"toggleMapTips",function(){_this.props.toggleMapTips(!_this.props.mapTipsEnabled)});_defineProperty(_this,"toggleSwipe",function(){_this.props.setSwipe(_this.props.swipe!==null?null:50)});_defineProperty(_this,"printLayerLegend",function(layer,sublayer){var body="";if(sublayer.sublayers){if(sublayer.visibility){body="<div class=\"legend-group\">"+"<h3 class=\"legend-group-title\">"+(sublayer.title||sublayer.name)+"</h3>"+"<div class=\"legend-group-body\">"+sublayer.sublayers.map(function(subsublayer){return _this.printLayerLegend(layer,subsublayer)}).join("\n")+"</div>"+"</div>"}}else{if(sublayer.visibility&&LayerUtils.layerScaleInRange(sublayer,_this.props.mapScale)){var request=LayerUtils.getLegendUrl(layer,{name:sublayer.name},_this.props.mapScale,_this.props.map,_this.props.bboxDependentLegend,_this.props.scaleDependentLegend,_this.props.extraLegendParameters);body=request?"<div class=\"legend-entry\"><img src=\""+request+"\" /></div>":""}}return body});_defineProperty(_this,"deleteAllLayers",function(){var _iterator=_createForOfIteratorHelper(_this.props.layers),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var layer=_step.value;if(layer.role===LayerRole.THEME){var sublayers=layer.sublayers||[];for(var i=sublayers.length-1;i>=0;--i){_this.props.removeLayer(layer.id,[i])}}else if(layer.role===LayerRole.USERLAYER){_this.props.removeLayer(layer.id)}}}catch(err){_iterator.e(err)}finally{_iterator.f()}});_defineProperty(_this,"toggleLayerTreeVisibility",function(visibile){var _iterator2=_createForOfIteratorHelper(_this.props.layers),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var layer=_step2.value;if(layer.role===LayerRole.THEME||layer.role===LayerRole.USERLAYER){_this.props.changeLayerProperty(layer.id,"visibility",visibile,[],_this.props.groupTogglesSublayers?"children":null)}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}});_defineProperty(_this,"exportRedliningLayer",function(layer){var data=JSON.stringify({type:"FeatureCollection",features:layer.features.map(function(feature){var newFeature=_objectSpread(_objectSpread({},feature),{},{geometry:VectorLayerUtils.reprojectGeometry(feature.geometry,feature.crs||_this.props.map.projection,"EPSG:4326")});delete newFeature.crs;return newFeature})},null," ");FileSaver.saveAs(new Blob([data],{type:"text/plain;charset=utf-8"}),layer.title+".json")});_defineProperty(_this,"getSelectedStyles",function(layer){var _layer$params;return _toConsumableArray(new Set((((_layer$params=layer.params)===null||_layer$params===void 0?void 0:_layer$params.STYLES)||"").split(",").filter(Boolean)))});_defineProperty(_this,"getLayerStyles",function(layer){var _layer$sublayers;return layer===null||layer===void 0||(_layer$sublayers=layer.sublayers)===null||_layer$sublayers===void 0?void 0:_layer$sublayers.reduce(function(styleList,sublayer){Object.assign(styleList,_this.getLayerStyles(sublayer.sublayers));return Object.assign(styleList,sublayer.styles)},{})});_defineProperty(_this,"applyLayerStyle",function(style,layer){var path=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];var layerId=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;layerId=layerId!==null&&layerId!==void 0?layerId:layer.id;(layer.sublayers||[]).forEach(function(sublayer,idx){_this.applyLayerStyle(style,sublayer,[].concat(_toConsumableArray(path),[idx]),layerId);if(style in(sublayer.styles||{})){_this.props.changeLayerProperty(layerId,"style",style,[].concat(_toConsumableArray(path),[idx]))}})});_this.legendPrintWindow=null;window.addEventListener("beforeunload",function(){if(_this.legendPrintWindow&&!_this.legendPrintWindow.closed){_this.legendPrintWindow.close()}});return _this}_inherits(LayerTree,_React$Component);return _createClass(LayerTree,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.theme.mapTips!==undefined&&this.props.theme.mapTips!==prevProps.theme.mapTips){this.props.toggleMapTips(this.props.theme.mapTips&&!ConfigUtils.isMobile())}}},{key:"render",value:function render(){var _this2=this;var legendTooltip=null;if(this.state.legendTooltip){var style={left:this.state.legendTooltip.x,top:this.state.legendTooltip.y,maxWidth:window.innerWidth-this.state.legendTooltip.x-2,maxHeight:window.innerHeight-this.state.legendTooltip.y-2,visibility:"hidden"};legendTooltip=/*#__PURE__*/React.createElement(Image,{className:"layertree-item-legend-tooltip",onLoad:this.legendTooltipLoaded,onTouchStart:this.hideLegendTooltip,src:this.state.legendTooltip.img,style:style})}var legendPrintIcon=null;if(this.props.enableLegendPrint){legendPrintIcon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-print-legend",icon:"print",onClick:function onClick(){return _this2.setState({legendPrintVisible:true})},title:LocaleUtils.tr("layertree.printlegend")})}var visibleFilterIcon=null;if(this.props.enableVisibleFilter){var visibleFilterTooltip=LocaleUtils.tr("layertree.visiblefilter");var classes=classnames({"layertree-visible-filter":true,"layertree-visible-filter-active":this.state.filtervisiblelayers});visibleFilterIcon=/*#__PURE__*/React.createElement(Icon,{className:classes,icon:"eye",onClick:function onClick(){return _this2.setState(function(state){return{filtervisiblelayers:!state.filtervisiblelayers}})},title:visibleFilterTooltip})}var deleteAllLayersIcon=null;if(ConfigUtils.getConfigProp("allowRemovingThemeLayers")===true){var deleteAllLayersTooltip=LocaleUtils.tr("layertree.deletealllayers");deleteAllLayersIcon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-delete-legend",icon:"trash",onClick:this.deleteAllLayers,title:deleteAllLayersTooltip})}var serviceInfoIcon=null;if(this.props.enableServiceInfo){serviceInfoIcon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-theme-metadata",icon:"info-sign",onClick:function onClick(){return _this2.props.setActiveServiceInfo(_this2.props.theme)}})}var extraTitlebarContent=null;if(legendPrintIcon||deleteAllLayersIcon||visibleFilterIcon){extraTitlebarContent=/*#__PURE__*/React.createElement("span",null,legendPrintIcon,visibleFilterIcon,deleteAllLayersIcon,serviceInfoIcon)}var visibilities=[];var _iterator3=_createForOfIteratorHelper(this.props.layers),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var layer=_step3.value;if(layer.role===LayerRole.THEME||layer.role===LayerRole.USERLAYER){visibilities.push(LayerUtils.computeLayerVisibility(layer))}}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}var vis=visibilities.reduce(function(sum,x){return sum+x},0)/(visibilities.length||1);var visibilityIcon="tristate";if(vis===0){visibilityIcon="unchecked"}else if(vis===1){visibilityIcon="checked"}var visibilityCheckbox=this.props.showToggleAllLayersCheckbox?/*#__PURE__*/React.createElement(Icon,{className:"layertree-tree-visibility",icon:visibilityIcon,onClick:function onClick(){return _this2.toggleLayerTreeVisibility(vis===0)}}):null;return/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement(SideBar,{extraBeforeContent:visibilityCheckbox,extraTitlebarContent:extraTitlebarContent,icon:"layers",id:"LayerTree",onHide:this.hideLegendTooltip,side:this.props.side,title:LocaleUtils.tr("appmenu.items.LayerTree"),width:this.state.sidebarwidth||this.props.width},function(){return{body:_this2.renderBody()}}),legendTooltip,this.renderLegendPrintWindow(),/*#__PURE__*/React.createElement(LayerInfoWindow,{bboxDependentLegend:this.props.bboxDependentLegend,layerInfoGeometry:this.props.layerInfoGeometry,scaleDependentLegend:this.props.scaleDependentLegend}),/*#__PURE__*/React.createElement(ServiceInfoWindow,{layerInfoGeometry:this.props.layerInfoGeometry}))}}])}(React.Component);_defineProperty(LayerTree,"propTypes",{/** Whether to allow adding separator entries in the layer tree, useful for organizing the tree. */addLayerSeparator:PropTypes.func,/** Whether to enable the compare function. Requires the `MapCompare` plugin. */allowCompare:PropTypes.bool,/** Whether to allow importing external layers. */allowImport:PropTypes.bool,/** Whether to allow enabling map tips. */allowMapTips:PropTypes.bool,/** Whether to allow selection of identifyable layers. The `showQueryableIcon` property should be `true` to be able to select identifyable layers. */allowSelectIdentifyableLayers:PropTypes.bool,/** Whether to display a BBOX dependent legend. Can be `true|false|"theme"`, latter means only for theme layers. */bboxDependentLegend:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),changeLayerProperty:PropTypes.func,/** Whether to enable the legend print functionality. */enableLegendPrint:PropTypes.bool,/** Whether to display a service info button to display the WMS service metadata. */enableServiceInfo:PropTypes.bool,/** Whether to display a button to filter invisible layers from the layertree. */enableVisibleFilter:PropTypes.bool,/** Additional parameters to pass to the GetLegendGraphics request. */extraLegendParameters:PropTypes.string,/** Whether to use the fallback logic for drag-and-drop. */fallbackDrag:PropTypes.bool,filter:PropTypes.object,/** Whether to display a flat layer tree, omitting any groups. */flattenGroups:PropTypes.bool,/** Whether to display unchecked layers gray in the layertree. */grayUnchecked:PropTypes.bool,/** Whether toggling a group also toggles all sublayers. */groupTogglesSublayers:PropTypes.bool,/** Whether to display the layer info button inside the layer settings menu rather than next to the layer title. */infoInSettings:PropTypes.bool,/** Default layer info window geometry with size, position and docking status. */layerInfoGeometry:PropTypes.shape({initialWidth:PropTypes.number,initialHeight:PropTypes.number,initialX:PropTypes.number,initialY:PropTypes.number,initiallyDocked:PropTypes.bool}),layers:PropTypes.array,loadingLayers:PropTypes.array,map:PropTypes.object,mapScale:PropTypes.number,mapTipsEnabled:PropTypes.bool,mobile:PropTypes.bool,/** Whether to only display layer groups but not individual layers in layertree. */onlyGroups:PropTypes.bool,removeLayer:PropTypes.func,reorderLayer:PropTypes.func,/** Whether to display a scale dependent legend. Can be `true|false|"theme"`, latter means only for theme layers. */scaleDependentLegend:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),setActiveLayerInfo:PropTypes.func,setActiveServiceInfo:PropTypes.func,setCurrentTask:PropTypes.func,setSwipe:PropTypes.func,/** Whether to display an icon linking to the layer attribute table in the layer options menu. */showAttributeTableLink:PropTypes.bool,/** Whether to display legend icons. */showLegendIcons:PropTypes.bool,/** Whether to display the queryable icon to indicate that a layer is identifyable. */showQueryableIcon:PropTypes.bool,/** Whether to display the root entry of the layertree. */showRootEntry:PropTypes.bool,/** Whether to display a checkbox to toggle all layers. */showToggleAllLayersCheckbox:PropTypes.bool,/** The side of the application on which to display the sidebar. */side:PropTypes.string,swipe:PropTypes.number,/** Template location for the legend print functionality */templatePath:PropTypes.string,theme:PropTypes.object,toggleMapTips:PropTypes.func,transparencyIcon:PropTypes.bool,/** The initial width of the layertree, as a CSS width string. */width:PropTypes.string,zoomToExtent:PropTypes.func});_defineProperty(LayerTree,"defaultProps",{layers:[],showLegendIcons:true,showRootEntry:true,showQueryableIcon:true,allowMapTips:true,allowCompare:true,allowImport:true,allowSelectIdentifyableLayers:false,groupTogglesSublayers:false,grayUnchecked:true,layerInfoGeometry:{initialWidth:480,initialHeight:480,initialX:null,initialY:null,initiallyDocked:false},bboxDependentLegend:false,flattenGroups:false,onlyGroups:false,width:"25em",enableLegendPrint:true,enableVisibleFilter:true,enableServiceInfo:true,infoInSettings:true,showToggleAllLayersCheckbox:true,transparencyIcon:true,side:"right",templatePath:":/templates/legendprint.html"});var selector=function selector(state){return{layers:state.layers.flat,filter:state.layers.filter,loadingLayers:state.layers.loading,map:state.map,mapScale:MapUtils.computeForZoom(state.map.scales,state.map.zoom),swipe:state.layers.swipe,theme:state.theme.current||{},mapTipsEnabled:state.map.maptips}};export default connect(selector,{addLayerSeparator:addLayerSeparator,changeLayerProperty:changeLayerProperty,removeLayer:removeLayer,reorderLayer:reorderLayer,toggleMapTips:toggleMapTips,setSwipe:setSwipe,setActiveLayerInfo:setActiveLayerInfo,setActiveServiceInfo:setActiveServiceInfo,setCurrentTask:setCurrentTask,zoomToExtent:zoomToExtent})(LayerTree);
|
|
14
|
+
var target=ev.currentTarget;target.preventScrollTimeout=setTimeout(function(){target.addEventListener("touchmove",MiscUtils.killEvent,{passive:false})},200)},ref:MiscUtils.setupKillTouchEvents},/*#__PURE__*/React.createElement(Sortable,{onChange:_this.onSortChange,options:{disabled:sortable===false,ghostClass:"drop-ghost",delay:200,forceFallback:_this.props.fallbackDrag}},_this.renderLayerTree(treelayers))),maptipCheckbox,compareCheckbox,layerImportExpander,_this.state.importvisible?/*#__PURE__*/React.createElement(ImportLayer,{theme:_this.props.theme}):null))});_defineProperty(_this,"renderVisibilityButton",function(){if(!_this.props.showToggleAllLayersCheckbox&&!_this.props.enableVisibleFilter&&isEmpty(_this.props.theme.visibilityPresets)){return null}var vis=0;var count=0;var _iterator=_createForOfIteratorHelper(_this.props.layers),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var layer=_step.value;if(layer.role===LayerRole.THEME||layer.role===LayerRole.USERLAYER){count+=1;vis+=layer.visibility}}}catch(err){_iterator.e(err)}finally{_iterator.f()}vis/=Math.min(1,count);var buttonClasses=classnames({"layertree-visibility-button":true,"layertree-visibility-button-active":_this.state.visibilityMenu});return/*#__PURE__*/React.createElement("span",{className:buttonClasses,onClick:function onClick(){return _this.setState(function(state){return{visibilityMenu:!state.visibilityMenu}})}},/*#__PURE__*/React.createElement(Icon,{icon:"eye"}),/*#__PURE__*/React.createElement(Icon,{icon:"chevron-down"}),_this.state.visibilityMenu?/*#__PURE__*/React.createElement("div",{className:"layertree-visibility-menu"},_this.props.showToggleAllLayersCheckbox?/*#__PURE__*/React.createElement("div",{onClick:function onClick(){return _this.toggleLayerTreeVisibility(vis===0)}},/*#__PURE__*/React.createElement(Icon,{icon:vis===0?"checked":"unchecked"})," ",LocaleUtils.tr("layertree.hidealllayers")):null,_this.props.enableVisibleFilter?/*#__PURE__*/React.createElement("div",{onClick:function onClick(){return _this.setState(function(state){return{filterinvisiblelayers:!state.filterinvisiblelayers}})}},/*#__PURE__*/React.createElement(Icon,{icon:_this.state.filterinvisiblelayers?"checked":"unchecked"})," ",LocaleUtils.tr("layertree.visiblefilter")):null,Object.entries(_this.props.theme.visibilityPresets||{}).map(function(_ref3,idx){var _ref4=_slicedToArray(_ref3,2),name=_ref4[0],preset=_ref4[1];return/*#__PURE__*/React.createElement("div",{className:idx===0?"layertree-visibility-menu-sep":"",key:name,onClick:function onClick(){return _this.props.setThemeLayersVisibilityPreset(preset)}},/*#__PURE__*/React.createElement(Icon,{icon:_this.state.activePreset===name?"radio_checked":"radio_unchecked"})," ",name)})):null)});_defineProperty(_this,"renderLegendPrintWindow",function(){if(!_this.state.legendPrintVisible){return null}var setLegendPrintContents=function setLegendPrintContents(el){if(!el){return}el.addEventListener("load",function(){var container=el.contentWindow.document.getElementById("legendcontainer");if(container){var body="<p id=\"legendcontainerbody\">";body+=_this.props.layers.map(function(layer){if(!layer.visibility){return""}else if(layer.legendUrl){return _this.printLayerLegend(layer,layer)}else if(layer.color){return"<div class=\"legend-entry\"><span style=\"display: inline-block; width: 1em; height: 1em; box-shadow: inset 0 0 0 1000px "+layer.color+"; margin: 0.25em; border: 1px solid black;\"> </span>"+(layer.title||layer.name)+"</div>"}else{return""}}).join("");body+="</p>";container.innerHTML=body}else{_this.legendPrintWindow.document.body.innerHTML="Broken template. An element with id=legendcontainer must exist."}})};var printLegend=function printLegend(ev){ev.target.parentElement.parentElement.getElementsByTagName("iframe")[0].contentWindow.print()};return/*#__PURE__*/React.createElement(ResizeableWindow,{icon:"print",initialHeight:0.75*window.innerHeight,initialWidth:0.5*window.innerWidth,onClose:function onClose(){return _this.setState({legendPrintVisible:false})},title:LocaleUtils.tr("layertree.printlegend")},/*#__PURE__*/React.createElement("div",{className:"layertree-legend-print-body",role:"body"},/*#__PURE__*/React.createElement("iframe",{ref:setLegendPrintContents,src:MiscUtils.resolveAssetsPath(_this.props.templatePath)}),/*#__PURE__*/React.createElement("div",{className:"layertree-legend-print-body-buttonbar"},/*#__PURE__*/React.createElement("button",{onClick:printLegend},LocaleUtils.tr("layertree.printlegend")))))});_defineProperty(_this,"legendTooltipLoaded",function(ev){if(ev.target.naturalWidth>1){ev.target.style.visibility="visible"}});_defineProperty(_this,"onSortChange",function(order,sortable,ev){var moved=JSON.parse(order[ev.newIndex]);var layer=_this.props.layers.find(function(l){return l.id===moved.layer});if(layer){_this.props.reorderLayer(layer,moved.path,ev.newIndex-ev.oldIndex)}});_defineProperty(_this,"toggleImportLayers",function(){_this.setState(function(state){var visible=!state.importvisible;return{importvisible:visible,sidebarwidth:visible?"40em":null}})});_defineProperty(_this,"propagateOptions",function(layer,options){var path=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;if(layer.sublayers){layer.sublayers=layer.sublayers.map(function(sublayer,idx){if(path===null||!isEmpty(path)&&path[0]===idx){var newsublayer=_objectSpread(_objectSpread({},sublayer),options);_this.propagateOptions(newsublayer,options,path?path.slice(1):null);return newsublayer}else{return sublayer}})}});_defineProperty(_this,"groupExpandedToggled",function(layer,grouppath,oldexpanded){_this.props.changeLayerProperty(layer.id,"expanded",!oldexpanded,grouppath)});_defineProperty(_this,"itemVisibilityToggled",function(layer,grouppath,oldvisibility){var recurseDirection=null;// If item becomes visible, also make parents visible
|
|
15
|
+
if(_this.props.groupTogglesSublayers){recurseDirection=!oldvisibility?"both":"children"}else{recurseDirection=!oldvisibility?"parents":null}_this.props.changeLayerProperty(layer.id,"visibility",!oldvisibility,grouppath,recurseDirection)});_defineProperty(_this,"itemOmitQueryableToggled",function(layer,grouppath,oldomitqueryable){_this.props.changeLayerProperty(layer.id,"omitFromQueryLayers",!oldomitqueryable,grouppath,"children")});_defineProperty(_this,"layerTransparencyChanged",function(layer,sublayerpath,value){var recurse=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;_this.props.changeLayerProperty(layer.id,"opacity",Math.max(1,255-value),sublayerpath,recurse)});_defineProperty(_this,"layerStyleChanged",function(layer,sublayerpath,value){var recurseDirection=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;_this.props.changeLayerProperty(layer.id,"style",value,sublayerpath,recurseDirection)});_defineProperty(_this,"layerMenuToggled",function(sublayerid){_this.setState(function(state){return{activemenu:state.activemenu===sublayerid?null:sublayerid,activestylemenu:null}})});_defineProperty(_this,"layerStyleMenuToggled",function(sublayerid){_this.setState(function(state){return{activestylemenu:state.activestylemenu===sublayerid?null:sublayerid,activemenu:null}})});_defineProperty(_this,"showLegendTooltip",function(ev,request){_this.setState({legendTooltip:{x:ev.target.getBoundingClientRect().right,y:ev.target.getBoundingClientRect().top,img:request+"&TYPE=tooltip"}})});_defineProperty(_this,"onHide",function(){_this.setState({legendTooltip:undefined,visibilityMenu:false})});_defineProperty(_this,"hideLegendTooltip",function(){_this.setState({legendTooltip:undefined})});_defineProperty(_this,"toggleMapTips",function(){_this.props.toggleMapTips(!_this.props.mapTipsEnabled)});_defineProperty(_this,"toggleSwipe",function(){_this.props.setSwipe(_this.props.swipe!==null?null:50)});_defineProperty(_this,"printLayerLegend",function(layer,sublayer){var body="";if(sublayer.sublayers){if(sublayer.visibility){body="<div class=\"legend-group\">"+"<h3 class=\"legend-group-title\">"+(sublayer.title||sublayer.name)+"</h3>"+"<div class=\"legend-group-body\">"+sublayer.sublayers.map(function(subsublayer){return _this.printLayerLegend(layer,subsublayer)}).join("\n")+"</div>"+"</div>"}}else{if(sublayer.visibility&&LayerUtils.layerScaleInRange(sublayer,_this.props.mapScale)){var request=LayerUtils.getLegendUrl(layer,{name:sublayer.name},_this.props.mapScale,_this.props.map,_this.props.bboxDependentLegend,_this.props.scaleDependentLegend,_this.props.extraLegendParameters);body=request?"<div class=\"legend-entry\"><img src=\""+request+"\" /></div>":""}}return body});_defineProperty(_this,"deleteAllLayers",function(){var _iterator2=_createForOfIteratorHelper(_this.props.layers),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var layer=_step2.value;if(layer.role===LayerRole.THEME){var sublayers=layer.sublayers||[];for(var i=sublayers.length-1;i>=0;--i){_this.props.removeLayer(layer.id,[i])}}else if(layer.role===LayerRole.USERLAYER){_this.props.removeLayer(layer.id)}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}});_defineProperty(_this,"toggleLayerTreeVisibility",function(visibile){var _iterator3=_createForOfIteratorHelper(_this.props.layers),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var layer=_step3.value;if(layer.role===LayerRole.THEME||layer.role===LayerRole.USERLAYER){_this.props.changeLayerProperty(layer.id,"visibility",visibile,[],null)}}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}});_defineProperty(_this,"exportRedliningLayer",function(layer){var data=JSON.stringify({type:"FeatureCollection",features:layer.features.map(function(feature){var newFeature=_objectSpread(_objectSpread({},feature),{},{geometry:VectorLayerUtils.reprojectGeometry(feature.geometry,feature.crs||_this.props.map.projection,"EPSG:4326")});delete newFeature.crs;return newFeature})},null," ");FileSaver.saveAs(new Blob([data],{type:"text/plain;charset=utf-8"}),layer.title+".json")});_defineProperty(_this,"getSelectedStyles",function(layer){var _layer$params;return _toConsumableArray(new Set((((_layer$params=layer.params)===null||_layer$params===void 0?void 0:_layer$params.STYLES)||"").split(",").filter(Boolean)))});_defineProperty(_this,"getLayerStyles",function(layer){var _layer$sublayers;return layer===null||layer===void 0||(_layer$sublayers=layer.sublayers)===null||_layer$sublayers===void 0?void 0:_layer$sublayers.reduce(function(styleList,sublayer){Object.assign(styleList,_this.getLayerStyles(sublayer.sublayers));return Object.assign(styleList,sublayer.styles)},{})});_defineProperty(_this,"applyLayerStyle",function(style,layer){var path=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];var layerId=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;layerId=layerId!==null&&layerId!==void 0?layerId:layer.id;(layer.sublayers||[]).forEach(function(sublayer,idx){_this.applyLayerStyle(style,sublayer,[].concat(_toConsumableArray(path),[idx]),layerId);if(style in(sublayer.styles||{})){_this.props.changeLayerProperty(layerId,"style",style,[].concat(_toConsumableArray(path),[idx]))}})});_this.legendPrintWindow=null;window.addEventListener("beforeunload",function(){if(_this.legendPrintWindow&&!_this.legendPrintWindow.closed){_this.legendPrintWindow.close()}});return _this}_inherits(LayerTree,_React$Component);return _createClass(LayerTree,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.theme.mapTips!==undefined&&this.props.theme.mapTips!==prevProps.theme.mapTips){this.props.toggleMapTips(this.props.theme.mapTips&&!ConfigUtils.isMobile())}if(this.props.layers!==prevProps.layers){this.setState({activePreset:LayerUtils.getActiveVisibilityPreset(this.props.layers,this.props.theme.visibilityPresets)})}}},{key:"render",value:function render(){var _this2=this;var legendTooltip=null;if(this.state.legendTooltip){var style={left:this.state.legendTooltip.x,top:this.state.legendTooltip.y,maxWidth:window.innerWidth-this.state.legendTooltip.x-2,maxHeight:window.innerHeight-this.state.legendTooltip.y-2,visibility:"hidden"};legendTooltip=/*#__PURE__*/React.createElement(Image,{className:"layertree-item-legend-tooltip",onLoad:this.legendTooltipLoaded,onTouchStart:this.hideLegendTooltip,src:this.state.legendTooltip.img,style:style})}var legendPrintIcon=null;if(this.props.enableLegendPrint){legendPrintIcon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-print-legend",icon:"print",onClick:function onClick(){return _this2.setState({legendPrintVisible:true})},title:LocaleUtils.tr("layertree.printlegend")})}var deleteAllLayersIcon=null;if(ConfigUtils.getConfigProp("allowRemovingThemeLayers")===true){var deleteAllLayersTooltip=LocaleUtils.tr("layertree.deletealllayers");deleteAllLayersIcon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-delete-legend",icon:"trash",onClick:this.deleteAllLayers,title:deleteAllLayersTooltip})}var serviceInfoIcon=null;if(this.props.enableServiceInfo){var serviceInfoTooltip=LocaleUtils.tr("serviceinfo.title");serviceInfoIcon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-theme-metadata",icon:"info-sign",onClick:function onClick(){return _this2.props.setActiveServiceInfo(_this2.props.theme)},title:serviceInfoTooltip})}var extraTitlebarContent=/*#__PURE__*/React.createElement("span",null,this.renderVisibilityButton(),legendPrintIcon,deleteAllLayersIcon,serviceInfoIcon);return/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement(SideBar,{extraTitlebarContent:extraTitlebarContent,icon:"layers",id:"LayerTree",onHide:this.onHide,side:this.props.side,title:LocaleUtils.tr("appmenu.items.LayerTree"),width:this.state.sidebarwidth||this.props.width},function(){return{body:_this2.renderBody()}}),legendTooltip,this.renderLegendPrintWindow(),/*#__PURE__*/React.createElement(LayerInfoWindow,{bboxDependentLegend:this.props.bboxDependentLegend,layerInfoGeometry:this.props.layerInfoGeometry,scaleDependentLegend:this.props.scaleDependentLegend}),/*#__PURE__*/React.createElement(ServiceInfoWindow,{layerInfoGeometry:this.props.layerInfoGeometry}))}}])}(React.Component);_defineProperty(LayerTree,"propTypes",{/** Whether to allow adding separator entries in the layer tree, useful for organizing the tree. */addLayerSeparator:PropTypes.func,/** Whether to enable the compare function. Requires the `MapCompare` plugin. */allowCompare:PropTypes.bool,/** Whether to allow importing external layers. */allowImport:PropTypes.bool,/** Whether to allow enabling map tips. */allowMapTips:PropTypes.bool,/** Whether to allow selection of identifyable layers. The `showQueryableIcon` property should be `true` to be able to select identifyable layers. */allowSelectIdentifyableLayers:PropTypes.bool,/** Whether to display a BBOX dependent legend. Can be `true|false|"theme"`, latter means only for theme layers. */bboxDependentLegend:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),changeLayerProperty:PropTypes.func,/** Whether to enable the legend print functionality. */enableLegendPrint:PropTypes.bool,/** Whether to display a service info button to display the WMS service metadata. */enableServiceInfo:PropTypes.bool,/** Whether to display a button to filter invisible layers from the layertree. */enableVisibleFilter:PropTypes.bool,/** Additional parameters to pass to the GetLegendGraphics request. */extraLegendParameters:PropTypes.string,/** Whether to use the fallback logic for drag-and-drop. */fallbackDrag:PropTypes.bool,filter:PropTypes.object,/** Whether to display a flat layer tree, omitting any groups. */flattenGroups:PropTypes.bool,/** Whether to display unchecked layers gray in the layertree. */grayUnchecked:PropTypes.bool,/** Whether toggling a group also toggles all sublayers. */groupTogglesSublayers:PropTypes.bool,/** Whether to display the layer info button inside the layer settings menu rather than next to the layer title. */infoInSettings:PropTypes.bool,/** Default layer info window geometry with size, position and docking status. */layerInfoGeometry:PropTypes.shape({initialWidth:PropTypes.number,initialHeight:PropTypes.number,initialX:PropTypes.number,initialY:PropTypes.number,initiallyDocked:PropTypes.bool}),layers:PropTypes.array,loadingLayers:PropTypes.array,map:PropTypes.object,mapScale:PropTypes.number,mapTipsEnabled:PropTypes.bool,mobile:PropTypes.bool,/** Whether to only display layer groups but not individual layers in layertree. */onlyGroups:PropTypes.bool,removeLayer:PropTypes.func,reorderLayer:PropTypes.func,/** Whether to display a scale dependent legend. Can be `true|false|"theme"`, latter means only for theme layers. */scaleDependentLegend:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),setActiveLayerInfo:PropTypes.func,setActiveServiceInfo:PropTypes.func,setCurrentTask:PropTypes.func,setSwipe:PropTypes.func,setThemeLayersVisibilityPreset:PropTypes.func,/** Whether to display an icon linking to the layer attribute table in the layer options menu. */showAttributeTableLink:PropTypes.bool,/** Whether to display legend icons. */showLegendIcons:PropTypes.bool,/** Whether to display the queryable icon to indicate that a layer is identifyable. */showQueryableIcon:PropTypes.bool,/** Whether to display the root entry of the layertree. */showRootEntry:PropTypes.bool,/** Whether to display a checkbox to toggle all layers. */showToggleAllLayersCheckbox:PropTypes.bool,/** The side of the application on which to display the sidebar. */side:PropTypes.string,swipe:PropTypes.number,/** Template location for the legend print functionality */templatePath:PropTypes.string,theme:PropTypes.object,toggleMapTips:PropTypes.func,transparencyIcon:PropTypes.bool,/** The initial width of the layertree, as a CSS width string. */width:PropTypes.string,zoomToExtent:PropTypes.func});_defineProperty(LayerTree,"defaultProps",{layers:[],showLegendIcons:true,showRootEntry:true,showQueryableIcon:true,allowMapTips:true,allowCompare:true,allowImport:true,allowSelectIdentifyableLayers:false,groupTogglesSublayers:false,grayUnchecked:true,layerInfoGeometry:{initialWidth:480,initialHeight:480,initialX:null,initialY:null,initiallyDocked:false},bboxDependentLegend:false,flattenGroups:false,onlyGroups:false,width:"25em",enableLegendPrint:true,enableVisibleFilter:true,enableServiceInfo:true,infoInSettings:true,showToggleAllLayersCheckbox:true,transparencyIcon:true,side:"right",templatePath:":/templates/legendprint.html"});var selector=function selector(state){return{layers:state.layers.flat,filter:state.layers.filter,loadingLayers:state.layers.loading,map:state.map,mapScale:MapUtils.computeForZoom(state.map.scales,state.map.zoom),swipe:state.layers.swipe,theme:state.theme.current||{},mapTipsEnabled:state.map.maptips}};export default connect(selector,{addLayerSeparator:addLayerSeparator,changeLayerProperty:changeLayerProperty,removeLayer:removeLayer,reorderLayer:reorderLayer,toggleMapTips:toggleMapTips,setSwipe:setSwipe,setActiveLayerInfo:setActiveLayerInfo,setActiveServiceInfo:setActiveServiceInfo,setCurrentTask:setCurrentTask,setThemeLayersVisibilityPreset:setThemeLayersVisibilityPreset,zoomToExtent:zoomToExtent})(LayerTree);
|
package/plugins/Map.js
CHANGED
|
@@ -19,4 +19,4 @@ var swipeLayer=null;var swipeLayerNameBlacklist=this.props.swipeLayerNameBlackli
|
|
|
19
19
|
},_ret2;for(var j=paramLayers.length-1;j>=0;--j){_ret2=_loop2();if(_ret2===0)continue;if(_ret2===1)break}}else{if(swipeLayerNameBlacklist.find(function(entry){return layer.name.match(entry)})){return 0;// continue
|
|
20
20
|
}if(_this2.props.swipeGeometryTypeBlacklist.includes((layer.geometryType||"").replace(/[ZM]+$/,""))){return 0;// continue
|
|
21
21
|
}swipeLayer=layer}},_ret;// Pick candidate swipe layer according to rules
|
|
22
|
-
for(var i=renderLayers.length-1;swipeLayer===null&&i>=0;--i){_ret=_loop();if(_ret===0)continue}}this.setState({renderLayers:renderLayers,swipeLayer:swipeLayer})}}},{key:"render",value:function render(){var _this3=this,_this$props$theme;var loadingIndicator=null;if(this.props.showLoading&&!isEmpty(this.props.loadingLayers)){var left="calc(".concat(this.props.mapMargins.left,"px + 0.25em");loadingIndicator=/*#__PURE__*/React.createElement("span",{className:"map-loading-indicator",key:"map-loading",ref:function ref(el){_this3.loadingEl=el},style:{left:left}},/*#__PURE__*/React.createElement(Spinner,{className:"spinner"}),LocaleUtils.tr("map.loading"));setTimeout(function(){if(_this3.loadingEl){_this3.loadingEl.style.opacity=1}},1000)}return[/*#__PURE__*/React.createElement(OlMap,_extends({id:"map",key:"map",mapOptions:this.props.mapOptions},this.props.map,{fullExtent:(_this$props$theme=this.props.theme)===null||_this$props$theme===void 0?void 0:_this$props$theme.bbox}),this.renderLayers(),this.renderSupportTools()),loadingIndicator]}}])}(React.Component);_defineProperty(MapPlugin,"propTypes",{layers:PropTypes.array,loadingLayers:PropTypes.array,map:PropTypes.object,mapMargins:PropTypes.object,/** Zoom duration in ms, rotation in degrees, panStepSize and panPageSize as fraction of map width/height. */mapOptions:PropTypes.shape({zoomDuration:PropTypes.number,enableRotation:PropTypes.bool,rotation:PropTypes.number,panStepSize:PropTypes.number,panPageSize:PropTypes.number,constrainExtent:PropTypes.bool,kineticPanParams:PropTypes.object}),/** Whether to display the loading spinner when layers are loading. */showLoading:PropTypes.bool,swipe:PropTypes.number,/** A list of layer geometry types to ignore when determining the top-most layer to compare. */swipeGeometryTypeBlacklist:PropTypes.arrayOf(PropTypes.string),/** A list of layer names to ignore when determining the top-most layer to compare. You can use `*` as a
|
|
22
|
+
for(var i=renderLayers.length-1;swipeLayer===null&&i>=0;--i){_ret=_loop();if(_ret===0)continue}}this.setState({renderLayers:renderLayers,swipeLayer:swipeLayer})}}},{key:"render",value:function render(){var _this3=this,_this$props$theme;var loadingIndicator=null;if(this.props.showLoading&&!isEmpty(this.props.loadingLayers)){var left="calc(".concat(this.props.mapMargins.left,"px + 0.25em");loadingIndicator=/*#__PURE__*/React.createElement("span",{className:"map-loading-indicator",key:"map-loading",ref:function ref(el){_this3.loadingEl=el},style:{left:left}},/*#__PURE__*/React.createElement(Spinner,{className:"spinner"}),LocaleUtils.tr("map.loading"));setTimeout(function(){if(_this3.loadingEl){_this3.loadingEl.style.opacity=1}},1000)}return[/*#__PURE__*/React.createElement(OlMap,_extends({id:"map",key:"map",mapOptions:this.props.mapOptions},this.props.map,{fullExtent:(_this$props$theme=this.props.theme)===null||_this$props$theme===void 0?void 0:_this$props$theme.bbox}),this.renderLayers(),this.renderSupportTools()),loadingIndicator]}}])}(React.Component);_defineProperty(MapPlugin,"propTypes",{layers:PropTypes.array,loadingLayers:PropTypes.array,map:PropTypes.object,mapMargins:PropTypes.object,/** Zoom duration in ms, rotation in degrees, panStepSize and panPageSize as fraction of map width/height. */mapOptions:PropTypes.shape({zoomDuration:PropTypes.number,enableRotation:PropTypes.bool,rotation:PropTypes.number,panStepSize:PropTypes.number,panPageSize:PropTypes.number,constrainExtent:PropTypes.bool,kineticPanParams:PropTypes.object}),/** Whether to display the loading spinner when layers are loading. */showLoading:PropTypes.bool,swipe:PropTypes.number,/** A list of layer geometry types to ignore when determining the top-most layer to compare. */swipeGeometryTypeBlacklist:PropTypes.arrayOf(PropTypes.string),/** A list of layer names to ignore when determining the top-most layer to compare. You can use `*` as a wildcard character. */swipeLayerNameBlacklist:PropTypes.arrayOf(PropTypes.string),theme:PropTypes.object,tools:PropTypes.object,/** Map tool configuraiton options. Refer to the sample config.json. */toolsOptions:PropTypes.object});_defineProperty(MapPlugin,"defaultProps",{mapOptions:{},showLoading:true,swipeGeometryTypeBlacklist:[],swipeLayerNameBlacklist:[],tools:{},toolsOptions:{}});export default(function(tools){return connect(function(state){return{map:state.map,layers:state.layers.flat,loadingLayers:state.layers.loading,mapMargins:state.windows.mapMargins,swipe:state.layers.swipe,theme:state.theme.current,tools:tools}})(MapPlugin)});
|
|
@@ -7,7 +7,7 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
|
|
|
7
7
|
*/import React from"react";import{connect}from"react-redux";import ol from"openlayers";import PropTypes from"prop-types";import{setEditContext}from"../../actions/editing";import FeatureStyles from"../../utils/FeatureStyles";/**
|
|
8
8
|
* Editing support for the map component.
|
|
9
9
|
*/var EditingSupport=/*#__PURE__*/function(_React$Component){function EditingSupport(props){var _this;_classCallCheck(this,EditingSupport);_this=_callSuper(this,EditingSupport,[props]);_defineProperty(_this,"editStyle",function(){var geometryFunction=function geometryFunction(feature){if(feature.getGeometry().getType()==="Point"){return new ol.geom.MultiPoint([feature.getGeometry().getCoordinates()])}else if(feature.getGeometry().getType()==="LineString"){return new ol.geom.MultiPoint(feature.getGeometry().getCoordinates())}else if(feature.getGeometry().getType()==="Polygon"){return new ol.geom.MultiPoint(feature.getGeometry().getCoordinates()[0])}else if(feature.getGeometry().getType()==="MultiPoint"){return feature.getGeometry()}else if(feature.getGeometry().getType()==="MultiLineString"){return new ol.geom.MultiPoint(feature.getGeometry().getCoordinates()[0])}else if(feature.getGeometry().getType()==="MultiPolygon"){return new ol.geom.MultiPoint(feature.getGeometry().getCoordinates()[0][0])}return feature.getGeometry()};return[FeatureStyles.interaction(_this.props.editContext.geometryStyle),FeatureStyles.interactionVertex(_objectSpread({geometryFunction:geometryFunction},_this.props.editContext.vertexStyle))]});_defineProperty(_this,"createLayer",function(){var source=new ol.source.Vector;_this.layer=new ol.layer.Vector({source:source,zIndex:1000000,style:_this.editStyle()});_this.props.map.addLayer(_this.layer)});_defineProperty(_this,"addDrawInteraction",function(){_this.reset();_this.createLayer();var drawInteraction=new ol.interaction.Draw({stopClick:true,type:_this.props.editContext.geomType.replace(/Z$/,""),source:_this.layer.getSource(),condition:function condition(event){return event.originalEvent.buttons===1},style:_this.editStyle()});drawInteraction.on("drawstart",function(evt){_this.currentFeature=evt.feature},_this);drawInteraction.on("drawend",function(){_this.commitCurrentFeature();_this.props.map.removeInteraction(drawInteraction)},_this);_this.props.map.addInteraction(drawInteraction);_this.interaction=drawInteraction});_defineProperty(_this,"addEditInteraction",function(){_this.reset();_this.createLayer();var format=new ol.format.GeoJSON;_this.currentFeature=format.readFeature(_this.props.editContext.feature);_this.layer.getSource().addFeature(_this.currentFeature);var modifyInteraction=new ol.interaction.Modify({features:new ol.Collection([_this.currentFeature]),condition:function condition(event){return event.originalEvent.buttons===1},deleteCondition:function deleteCondition(event){// delete vertices on SHIFT + click
|
|
10
|
-
if(event.type==="pointerdown"&&ol.events.condition.shiftKeyOnly(event)){_this.props.map.setIgnoreNextClick(true)}return ol.events.condition.shiftKeyOnly(event)&&ol.events.condition.singleClick(event)},style:FeatureStyles.sketchInteraction()});modifyInteraction.on("modifyend",function(){_this.commitCurrentFeature()},_this);modifyInteraction.setActive(
|
|
10
|
+
if(event.type==="pointerdown"&&ol.events.condition.shiftKeyOnly(event)){_this.props.map.setIgnoreNextClick(true)}return ol.events.condition.shiftKeyOnly(event)&&ol.events.condition.singleClick(event)},style:FeatureStyles.sketchInteraction()});modifyInteraction.on("modifyend",function(){_this.commitCurrentFeature()},_this);modifyInteraction.setActive(_this.props.editContext.geomType&&!_this.props.editContext.geomReadOnly&&!_this.props.editContext.geomNonZeroZ);_this.props.map.addInteraction(modifyInteraction);_this.interaction=modifyInteraction});_defineProperty(_this,"commitCurrentFeature",function(){if(!_this.currentFeature){return}var format=new ol.format.GeoJSON;var feature=format.writeFeatureObject(_this.currentFeature);if(_this.props.editContext.feature){feature=_objectSpread(_objectSpread({},_this.props.editContext.feature),{},{geometry:feature.geometry})}var _addZCoordinateIfNeeded=function addZCoordinateIfNeeded(entry){return Array.isArray(entry[0])?entry.map(_addZCoordinateIfNeeded):[].concat(_toConsumableArray(entry.slice(0,2)),[0])};if(_this.props.editContext.geomType.endsWith("Z")){feature.geometry.coordinates=_addZCoordinateIfNeeded(feature.geometry.coordinates)}_this.props.setEditContext(_this.props.editContext.id,{feature:feature,changed:true})});_defineProperty(_this,"reset",function(){if(_this.interaction){_this.props.map.removeInteraction(_this.interaction)}_this.interaction=null;_this.currentFeature=null;if(_this.layer){_this.props.map.removeLayer(_this.layer)}_this.layer=null});_this.interaction=null;_this.layer=null;_this.currentFeature=null;return _this}_inherits(EditingSupport,_React$Component);return _createClass(EditingSupport,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.editContext===prevProps.editContext){// pass
|
|
11
11
|
}else if(this.props.editContext.action==="Pick"&&this.props.editContext.feature){// If a feature without geometry was picked, enter draw mode, otherwise enter edit mode
|
|
12
12
|
if(!this.props.editContext.feature.geometry&&this.props.editContext.geomType){this.addDrawInteraction()}else{this.addEditInteraction()}}else if(this.props.editContext.action==="Draw"&&this.props.editContext.geomType){// Usually, draw mode starts without a feature, but draw also can start with a pre-set geometry
|
|
13
13
|
if(!(this.props.editContext.feature||{}).geometry||prevProps.editContext.geomType!==this.props.editContext.geomType){this.addDrawInteraction()}else if((this.props.editContext.feature||{}).geometry){this.addEditInteraction()}}else{this.reset()}}},{key:"render",value:function render(){return null}}])}(React.Component);_defineProperty(EditingSupport,"propTypes",{editContext:PropTypes.object,map:PropTypes.object,setEditContext:PropTypes.func});export default connect(function(state){return{editContext:state.editing.contexts[state.editing.currentContext]||{}}},{setEditContext:setEditContext})(EditingSupport);
|
|
@@ -1,12 +1,55 @@
|
|
|
1
|
-
#LayerTree span.layertree-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
#LayerTree span.layertree-visibility-button {
|
|
2
|
+
padding: 0.25em 1em 0.25em 0.25em;
|
|
3
|
+
position: relative;
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: start;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
cursor: pointer;
|
|
4
8
|
}
|
|
5
9
|
|
|
6
|
-
#LayerTree span.layertree-
|
|
10
|
+
#LayerTree span.layertree-visibility-button:hover,
|
|
11
|
+
#LayerTree span.layertree-visibility-button-active {
|
|
12
|
+
color: var(--titlebar-bg-color);
|
|
7
13
|
background-color: var(--titlebar-text-color);
|
|
8
14
|
}
|
|
9
15
|
|
|
16
|
+
#LayerTree span.layertree-visibility-button > span.icon-chevron-down {
|
|
17
|
+
position: absolute;
|
|
18
|
+
bottom: -1px;
|
|
19
|
+
right: 0;
|
|
20
|
+
font-size: 80%;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
#LayerTree div.layertree-visibility-menu {
|
|
24
|
+
position: absolute;
|
|
25
|
+
top: 100%;
|
|
26
|
+
left: 0;
|
|
27
|
+
border: 1px solid var(--border-color);
|
|
28
|
+
background-color: var(--list-bg-color);
|
|
29
|
+
color: var(--text-color);
|
|
30
|
+
cursor: default;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
#LayerTree div.layertree-visibility-menu > div {
|
|
34
|
+
white-space: nowrap;
|
|
35
|
+
padding: 0.25em 1em 0.25em 0.5em;
|
|
36
|
+
display: flex;
|
|
37
|
+
align-items: start;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
#LayerTree div.layertree-visibility-menu > div:hover {
|
|
41
|
+
background-color: var(--list-item-bg-color-hover);
|
|
42
|
+
color: var(--list-item-text-color-hover);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
#LayerTree div.layertree-visibility-menu > div > span.icon {
|
|
46
|
+
margin-right: 0.5em;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#LayerTree div.layertree-visibility-menu-sep:not(:first-child) {
|
|
50
|
+
border-top: 1px solid var(--border-color);
|
|
51
|
+
}
|
|
52
|
+
|
|
10
53
|
#LayerTree span.layertree-print-legend,
|
|
11
54
|
#LayerTree span.layertree-visible-filter,
|
|
12
55
|
#LayerTree span.layertree-delete-legend,
|
package/reducers/editing.js
CHANGED
|
@@ -4,5 +4,5 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
|
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under the BSD-style license found in the
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/import{SET_EDIT_CONTEXT,CLEAR_EDIT_CONTEXT}from"../actions/editing";var defaultState={contexts:{},currentContext:null};var _nonZeroZCoordinate=function nonZeroZCoordinate(coordinates){return coordinates.find(function(entry){return Array.isArray(entry[0])?_nonZeroZCoordinate(entry):entry.length>=3&&entry[2]!==0})};var
|
|
8
|
-
if(!
|
|
7
|
+
*/import{SET_EDIT_CONTEXT,CLEAR_EDIT_CONTEXT}from"../actions/editing";var defaultState={contexts:{},currentContext:null};var _nonZeroZCoordinate=function nonZeroZCoordinate(coordinates){return coordinates.find(function(entry){return Array.isArray(entry[0])?_nonZeroZCoordinate(entry):entry.length>=3&&entry[2]!==0})};var checkNonZeroZ=function checkNonZeroZ(oldState,newState,fallback){var _oldState$feature;// Only recompute if feature id in state changes
|
|
8
|
+
if(!newState.feature){return false}else if(newState.feature.id!==(oldState===null||oldState===void 0||(_oldState$feature=oldState.feature)===null||_oldState$feature===void 0?void 0:_oldState$feature.id)){var _newState$feature$geo;return _nonZeroZCoordinate([((_newState$feature$geo=newState.feature.geometry)===null||_newState$feature$geo===void 0?void 0:_newState$feature$geo.coordinates)||[]])!==undefined}return(oldState===null||oldState===void 0?void 0:oldState.geomNonZeroZ)||false};export default function editing(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:defaultState;var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case SET_EDIT_CONTEXT:{return{contexts:_objectSpread(_objectSpread({},state.contexts),{},_defineProperty({},action.contextId,_objectSpread(_objectSpread(_objectSpread({action:null,feature:null,geomType:null,changed:false,geomReadOnly:false},state.contexts[action.contextId]),action.editContext),{},{geomNonZeroZ:checkNonZeroZ(state.contexts[action.contextId],action.editContext),id:action.contextId}))),currentContext:action.contextId}}case CLEAR_EDIT_CONTEXT:{var newState={contexts:_objectSpread({},state.contexts),currentContext:state.currentContext===action.contextId?action.newActiveContextId:state.currentContext};delete newState.contexts[action.contextId];return newState}default:return state}}
|
package/reducers/layers.js
CHANGED
|
@@ -5,7 +5,7 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
|
|
|
5
5
|
*
|
|
6
6
|
* This source code is licensed under the BSD-style license found in the
|
|
7
7
|
* LICENSE file in the root directory of this source tree.
|
|
8
|
-
*/import isEmpty from"lodash.isempty";import{v4 as uuidv4}from"uuid";import{LayerRole,SET_LAYER_LOADING,ADD_LAYER,ADD_LAYER_SEPARATOR,REMOVE_LAYER,REORDER_LAYER,CHANGE_LAYER_PROPERTY,SET_LAYER_DIMENSIONS,ADD_LAYER_FEATURES,REMOVE_LAYER_FEATURES,CLEAR_LAYER,ADD_THEME_SUBLAYER,REFRESH_LAYER,REMOVE_ALL_LAYERS,REPLACE_PLACEHOLDER_LAYER,SET_SWIPE,SET_FILTER}from"../actions/layers";import LayerUtils from"../utils/LayerUtils";import{UrlParams}from"../utils/PermaLinkUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";var defaultState={flat:[],loading:[],swipe:null,filter:{filterParams:null,filterGeom:null,timeRange:null}};export default function layers(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:defaultState;var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case SET_LAYER_LOADING:{var loading=state.loading.filter(function(layerId){return layerId!==action.layerId});if(action.loading){loading.push(action.layerId)}return _objectSpread(_objectSpread({},state),{},{loading:loading})}case CHANGE_LAYER_PROPERTY:{var targetLayer=state.flat.find(function(layer){return layer.id===action.layerId});if(!targetLayer){return state}var backgroundVisibilityChanged=targetLayer.role===LayerRole.BACKGROUND&&action.property==="visibility";var parent=targetLayer;var parentPath=action.sublayerpath.slice(0,action.sublayerpath.length-1);parentPath.forEach(function(idx){parent=parent.sublayers[idx]});var mutexVisibilityChanged=parent.mutuallyExclusive&&action.property==="visibility";if(mutexVisibilityChanged&&action.newvalue===false){// Don't allow explicitly hiding item in mutex group - need to toggle other item
|
|
8
|
+
*/import isEmpty from"lodash.isempty";import{v4 as uuidv4}from"uuid";import{LayerRole,SET_LAYER_LOADING,ADD_LAYER,ADD_LAYER_SEPARATOR,REMOVE_LAYER,REORDER_LAYER,CHANGE_LAYER_PROPERTY,SET_LAYER_DIMENSIONS,ADD_LAYER_FEATURES,REMOVE_LAYER_FEATURES,CLEAR_LAYER,ADD_THEME_SUBLAYER,REFRESH_LAYER,REMOVE_ALL_LAYERS,REPLACE_PLACEHOLDER_LAYER,SET_SWIPE,SET_FILTER,SET_THEME_LAYERS_VISIBILITY_PRESET}from"../actions/layers";import LayerUtils from"../utils/LayerUtils";import{UrlParams}from"../utils/PermaLinkUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";var defaultState={flat:[],loading:[],swipe:null,filter:{filterParams:null,filterGeom:null,timeRange:null}};export default function layers(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:defaultState;var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case SET_LAYER_LOADING:{var loading=state.loading.filter(function(layerId){return layerId!==action.layerId});if(action.loading){loading.push(action.layerId)}return _objectSpread(_objectSpread({},state),{},{loading:loading})}case CHANGE_LAYER_PROPERTY:{var targetLayer=state.flat.find(function(layer){return layer.id===action.layerId});if(!targetLayer){return state}var backgroundVisibilityChanged=targetLayer.role===LayerRole.BACKGROUND&&action.property==="visibility";var parent=targetLayer;var parentPath=action.sublayerpath.slice(0,action.sublayerpath.length-1);parentPath.forEach(function(idx){parent=parent.sublayers[idx]});var mutexVisibilityChanged=parent.mutuallyExclusive&&action.property==="visibility";if(mutexVisibilityChanged&&action.newvalue===false){// Don't allow explicitly hiding item in mutex group - need to toggle other item
|
|
9
9
|
return state}var newLayers=(state.flat||[]).map(function(layer){if(layer.id===action.layerId){var _LayerUtils$cloneLaye=LayerUtils.cloneLayer(layer,action.sublayerpath||[]),newlayer=_LayerUtils$cloneLaye.newlayer,newsublayer=_LayerUtils$cloneLaye.newsublayer;newsublayer[action.property]=action.newvalue;var recurseDirection=action.recurseDirection;// Handle mutually exclusive groups
|
|
10
10
|
if(mutexVisibilityChanged){var newParent=newlayer;parentPath.forEach(function(index){newParent=newParent.sublayers[index]});var targetIdx=action.sublayerpath[action.sublayerpath.length-1];newParent.sublayers=newParent.sublayers.map(function(l,idx){return _objectSpread(_objectSpread({},l),{},{visibility:idx===targetIdx})})}if(["children","both"].includes(recurseDirection)){// recurse to children (except visibility to children in mutex case)
|
|
11
11
|
LayerUtils.propagateLayerProperty(newsublayer,action.property,action.newvalue)}if(["parents","both"].includes(recurseDirection)){// recurse to parents
|
|
@@ -13,4 +13,4 @@ LayerUtils.propagateLayerProperty(newlayer,action.property,action.newvalue,actio
|
|
|
13
13
|
var layerUrl=(_state$flat$find=state.flat.find(function(layer){return layer.id===action.layerId}))===null||_state$flat$find===void 0?void 0:_state$flat$find.url;if(!layerUrl){return""}var _newLayers=(state.flat||[]).map(function(layer){if(layer.url===layerUrl){var newLayer=_objectSpread(_objectSpread({},layer),{},{dimensionValues:action.dimensions});Object.assign(newLayer,LayerUtils.buildWMSLayerParams(newLayer,state.filter));return newLayer}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers})}case ADD_LAYER:{var _action$layer$visibil,_action$layer$opacity;var _newLayers2=(state.flat||[]).concat();var layerId=action.layer.id||uuidv4();var newLayer=_objectSpread(_objectSpread({},action.layer),{},{id:layerId,name:action.layer.name||layerId,role:action.layer.role||LayerRole.USERLAYER,queryable:action.layer.queryable||false,visibility:(_action$layer$visibil=action.layer.visibility)!==null&&_action$layer$visibil!==void 0?_action$layer$visibil:true,opacity:(_action$layer$opacity=action.layer.opacity)!==null&&_action$layer$opacity!==void 0?_action$layer$opacity:255,layertreehidden:action.layer.layertreehidden||action.layer.role>LayerRole.USERLAYER});if(action.beforename){_newLayers2=LayerUtils.insertLayer(_newLayers2,newLayer,"name",action.beforename)}else{var inspos=0;if(action.pos===null){for(;inspos<_newLayers2.length&&newLayer.role<_newLayers2[inspos].role;++inspos);}else{inspos=action.pos}_newLayers2.splice(inspos,0,newLayer);// Compress layers if possible
|
|
14
14
|
_newLayers2=LayerUtils.implodeLayers(LayerUtils.explodeLayers(_newLayers2))}var _iterator=_createForOfIteratorHelper(_newLayers2),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var lyr=_step.value;if(lyr.type==="wms"){Object.assign(lyr,LayerUtils.buildWMSLayerParams(lyr,state.filter))}}}catch(err){_iterator.e(err)}finally{_iterator.f()}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers2)});if(newLayer.role===LayerRole.BACKGROUND&&newLayer.visibility){UrlParams.updateParams({bl:newLayer.name})}return _objectSpread(_objectSpread({},state),{},{flat:_newLayers2})}case ADD_LAYER_SEPARATOR:{var _newLayers3=LayerUtils.insertSeparator(state.flat,action.title,action.afterLayerId,action.afterSublayerPath);var _iterator2=_createForOfIteratorHelper(_newLayers3),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var layer=_step2.value;if(layer.type==="wms"){Object.assign(layer,LayerUtils.buildWMSLayerParams(layer,state.filter))}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers3)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers3})}case REMOVE_LAYER:{var _layer=state.flat.find(function(l){return l.id===action.layerId});if(!_layer){return state}var _newLayers4=state.flat;if(_layer.role===LayerRole.BACKGROUND||isEmpty(action.sublayerpath)){var position=state.flat.findIndex(function(l){return l.id===action.layerId});_newLayers4=_toConsumableArray(_newLayers4);_newLayers4.splice(position,1);if(position>0&&position<_newLayers4.length&&_newLayers4[position-1].id===_newLayers4[position].id){// Compress layers
|
|
15
15
|
_newLayers4=LayerUtils.implodeLayers(LayerUtils.explodeLayers(_newLayers4))}}else{_newLayers4=LayerUtils.removeLayer(state.flat,_layer,action.sublayerpath).map(function(l){if(l.type==="wms"){return _objectSpread(_objectSpread({},l),LayerUtils.buildWMSLayerParams(l,state.filter))}else{return l}})}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers4)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers4})}case ADD_LAYER_FEATURES:{var _layerId=action.layer.id||uuidv4();var _newLayers5=(state.flat||[]).concat();var idx=_newLayers5.findIndex(function(layer){return layer.id===_layerId});if(idx===-1){var newFeatures=action.features.map(function(f){return _objectSpread(_objectSpread({},f),{},{id:f.id||(f.properties||{}).id||uuidv4()})});var _newLayer=_objectSpread(_objectSpread({},action.layer),{},{id:_layerId,type:"vector",name:action.layer.name||_layerId,features:newFeatures,role:action.layer.role||LayerRole.USERLAYER,queryable:action.layer.queryable||false,visibility:action.layer.visibility||true,opacity:action.layer.opacity||255,layertreehidden:action.layer.layertreehidden||action.layer.role>LayerRole.USERLAYER,bbox:VectorLayerUtils.computeFeaturesBBox(action.features)});var _inspos=0;for(;_inspos<_newLayers5.length&&_newLayer.role<_newLayers5[_inspos].role;++_inspos);_newLayers5.splice(_inspos,0,_newLayer)}else{var addFeatures=action.features.map(function(f){return _objectSpread(_objectSpread({},f),{},{id:f.id||(f.properties||{}).id||uuidv4()})});var _newFeatures=action.clear?addFeatures:[].concat(_toConsumableArray((_newLayers5[idx].features||[]).filter(function(f){return!addFeatures.find(function(g){return g.id===f.id})})),_toConsumableArray(addFeatures));_newLayers5[idx]=_objectSpread(_objectSpread({},_newLayers5[idx]),{},{features:_newFeatures,bbox:VectorLayerUtils.computeFeaturesBBox(_newFeatures),rev:action.layer.rev})}return _objectSpread(_objectSpread({},state),{},{flat:_newLayers5})}case REMOVE_LAYER_FEATURES:{var changed=false;var _newLayers6=(state.flat||[]).reduce(function(result,layer){if(layer.id===action.layerId){var _newFeatures2=(layer.features||[]).filter(function(f){return action.featureIds.includes(f.id)===false});if(!isEmpty(_newFeatures2)||action.keepEmptyLayer){result.push(_objectSpread(_objectSpread({},layer),{},{features:_newFeatures2,bbox:VectorLayerUtils.computeFeaturesBBox(_newFeatures2)}))}changed=true}else{result.push(layer)}return result},[]);if(changed){return _objectSpread(_objectSpread({},state),{},{flat:_newLayers6})}else{return state}}case CLEAR_LAYER:{var _newLayers7=(state.flat||[]).map(function(layer){if(layer.id===action.layerId){return _objectSpread(_objectSpread({},layer),{},{features:[],bbox:null})}else{return layer}});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers7})}case ADD_THEME_SUBLAYER:{var themeLayerIdx=state.flat.findIndex(function(layer){return layer.role===LayerRole.THEME});if(themeLayerIdx>=0){var _newLayers8=state.flat.slice(0);_newLayers8[themeLayerIdx]=LayerUtils.mergeSubLayers(state.flat[themeLayerIdx],action.layer);_newLayers8[themeLayerIdx].visibility=true;Object.assign(_newLayers8[themeLayerIdx],LayerUtils.buildWMSLayerParams(_newLayers8[themeLayerIdx],state.filter));UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers8)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers8})}return state}case REFRESH_LAYER:{var _newLayers9=(state.flat||[]).map(function(layer){if(action.filter(layer)){return _objectSpread(_objectSpread({},layer),{},{rev:+new Date})}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers9})}case REMOVE_ALL_LAYERS:{return defaultState}case REORDER_LAYER:{var _newLayers10=LayerUtils.reorderLayer(state.flat,action.layer,action.sublayerpath,action.direction,action.preventSplittingGroups).map(function(layer){if(layer.type==="wms"){return _objectSpread(_objectSpread({},layer),LayerUtils.buildWMSLayerParams(layer,state.filter))}else{return layer}});UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers10)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers10})}case REPLACE_PLACEHOLDER_LAYER:{var _newLayers11=state.flat||[];if(action.layer){_newLayers11=_newLayers11.map(function(layer){if(layer.type==="placeholder"&&layer.id===action.id){var _newLayer2=_objectSpread(_objectSpread(_objectSpread({},layer),action.layer),{},{role:layer.role,id:layer.id});// For background layers, preserve any custom title/attribution
|
|
16
|
-
if(layer.role===LayerRole.BACKGROUND){_newLayer2.title=layer.title||action.layer.title;_newLayer2.attribution=layer.attribution||action.layer.attribution}delete _newLayer2.loading;if(_newLayer2.type==="wms"){Object.assign(_newLayer2,LayerUtils.buildWMSLayerParams(_newLayer2,state.filter))}return _newLayer2}else{return layer}})}else{_newLayers11=_newLayers11.filter(function(layer){return!(layer.type==="placeholder"&&layer.id===action.id)})}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers11)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers11})}case SET_SWIPE:{return _objectSpread(_objectSpread({},state),{},{swipe:action.swipe})}case SET_FILTER:{var filter={filterParams:action.filter,filterGeom:action.filterGeom,timeRange:action.timeRange};var _newLayers12=state.flat.map(function(layer){if(layer.type==="wms"){return _objectSpread(_objectSpread({},layer),LayerUtils.buildWMSLayerParams(layer,filter))}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers12,filter:filter})}default:return state}}
|
|
16
|
+
if(layer.role===LayerRole.BACKGROUND){_newLayer2.title=layer.title||action.layer.title;_newLayer2.attribution=layer.attribution||action.layer.attribution}delete _newLayer2.loading;if(_newLayer2.type==="wms"){Object.assign(_newLayer2,LayerUtils.buildWMSLayerParams(_newLayer2,state.filter))}return _newLayer2}else{return layer}})}else{_newLayers11=_newLayers11.filter(function(layer){return!(layer.type==="placeholder"&&layer.id===action.id)})}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers11)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers11})}case SET_SWIPE:{return _objectSpread(_objectSpread({},state),{},{swipe:action.swipe})}case SET_FILTER:{var filter={filterParams:action.filter,filterGeom:action.filterGeom,timeRange:action.timeRange};var _newLayers12=state.flat.map(function(layer){if(layer.type==="wms"){return _objectSpread(_objectSpread({},layer),LayerUtils.buildWMSLayerParams(layer,filter))}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers12,filter:filter})}case SET_THEME_LAYERS_VISIBILITY_PRESET:{var _newLayers13=state.flat.map(function(layer){if(layer.role===LayerRole.THEME){var _newLayer3=LayerUtils.applyVisibilityPreset(layer,action.preset);return _objectSpread(_objectSpread({},_newLayer3),LayerUtils.buildWMSLayerParams(_newLayer3,state.filter))}else{return layer}});UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers13)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers13})}default:return state}}
|
|
@@ -167,7 +167,8 @@
|
|
|
167
167
|
"discard": "Изхвърляне",
|
|
168
168
|
"draw": "Начертайте",
|
|
169
169
|
"feature": "Функции",
|
|
170
|
-
"
|
|
170
|
+
"geomnonzeroz": "Геометрията съдържа ненулеви стойности на Z и следователно е само за четене.",
|
|
171
|
+
"geomreadonly": "",
|
|
171
172
|
"invalidform": "Невалиден формуляр",
|
|
172
173
|
"maximize": "Увеличете максимално",
|
|
173
174
|
"minimize": "Минимизиране на",
|
|
@@ -289,6 +290,7 @@
|
|
|
289
290
|
"layertree": {
|
|
290
291
|
"compare": "Сравнете горния слой",
|
|
291
292
|
"deletealllayers": "Премахване на всички слоеве",
|
|
293
|
+
"hidealllayers": "",
|
|
292
294
|
"importlayer": "Импортиране на слой",
|
|
293
295
|
"maptip": "Показване на съвети за картата на слоевете",
|
|
294
296
|
"printlegend": "Легенда за печат",
|
|
@@ -167,7 +167,8 @@
|
|
|
167
167
|
"discard": "Descartar",
|
|
168
168
|
"draw": "Traçar",
|
|
169
169
|
"feature": "Element",
|
|
170
|
-
"
|
|
170
|
+
"geomnonzeroz": "La geometria conté valors Z diferents de zero, per tant és de només lectura",
|
|
171
|
+
"geomreadonly": "",
|
|
171
172
|
"invalidform": "Formulari invàlid",
|
|
172
173
|
"maximize": "Maximitzar",
|
|
173
174
|
"minimize": "Minimitzar",
|
|
@@ -289,6 +290,7 @@
|
|
|
289
290
|
"layertree": {
|
|
290
291
|
"compare": "Comparar amb la capa superior",
|
|
291
292
|
"deletealllayers": "Eliminar todas las capas",
|
|
293
|
+
"hidealllayers": "",
|
|
292
294
|
"importlayer": "Importar capa",
|
|
293
295
|
"maptip": "Mostrar suggerències de capes en el mapa",
|
|
294
296
|
"printlegend": "Imprimir llegenda",
|