qwc2 2025.7.29 → 2025.8.6

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/theme.js CHANGED
@@ -4,21 +4,21 @@ 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 ReducerIndex from"../reducers/index";import themeReducer from"../reducers/theme";ReducerIndex.register("theme",themeReducer);import isEmpty from"lodash.isempty";import{setCurrentTask}from"../actions/task";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import{UrlParams}from"../utils/PermaLinkUtils";import ServiceLayerUtils from"../utils/ServiceLayerUtils";import ThemeUtils from"../utils/ThemeUtils";import{View3DMode}from"./display";import{LayerRole,addLayer,removeLayer,removeAllLayers,replacePlaceholderLayer,setSwipe}from"./layers";import{configureMap}from"./map";import{showNotification,NotificationType}from"./windows";export var THEMES_LOADED="THEMES_LOADED";export var SET_THEME_LAYERS_LIST="SET_THEME_LAYERS_LIST";export var SET_CURRENT_THEME="SET_CURRENT_THEME";export var SWITCHING_THEME="SWITCHING_THEME";export function themesLoaded(themes){return{type:THEMES_LOADED,themes:themes}}export function setThemeLayersList(theme){return{type:SET_THEME_LAYERS_LIST,themelist:theme}}export function finishThemeSetup(dispatch,theme,themes,layerConfigs,insertPos,permalinkLayers,externalLayerRestorer,visibleBgLayer,initialTheme){var _theme$config;// Create layer
7
+ */import ReducerIndex from"../reducers/index";import themeReducer from"../reducers/theme";ReducerIndex.register("theme",themeReducer);import isEmpty from"lodash.isempty";import{setView3dMode,View3DMode}from"../actions/display";import{setCurrentTask}from"../actions/task";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import{UrlParams}from"../utils/PermaLinkUtils";import ServiceLayerUtils from"../utils/ServiceLayerUtils";import ThemeUtils from"../utils/ThemeUtils";import{LayerRole,addLayer,removeLayer,removeAllLayers,replacePlaceholderLayer,setSwipe}from"./layers";import{configureMap}from"./map";import{showNotification,NotificationType}from"./windows";export var THEMES_LOADED="THEMES_LOADED";export var SET_THEME_LAYERS_LIST="SET_THEME_LAYERS_LIST";export var SET_CURRENT_THEME="SET_CURRENT_THEME";export var SWITCHING_THEME="SWITCHING_THEME";export function themesLoaded(themes){return{type:THEMES_LOADED,themes:themes}}export function setThemeLayersList(theme){return{type:SET_THEME_LAYERS_LIST,themelist:theme}}export function finishThemeSetup(dispatch,theme,themes,layerConfigs,insertPos,permalinkLayers,externalLayerRestorer,visibleBgLayer,initialTheme){var _theme$config;var initialView=arguments.length>9&&arguments[9]!==undefined?arguments[9]:null;// Create layer
8
8
  var themeLayer=ThemeUtils.createThemeLayer(theme,themes);var layers=[themeLayer];// Restore theme layer configuration, create placeholders for missing layers
9
9
  var externalLayers={};if(!isEmpty(permalinkLayers)&&ConfigUtils.getConfigProp("storeAllLayersInPermalink")){layers=permalinkLayers}else{if(layerConfigs){if(ConfigUtils.getConfigProp("allowReorderingLayers",theme)!==true){layers=LayerUtils.restoreLayerParams(themeLayer,layerConfigs,permalinkLayers,externalLayers)}else{layers=LayerUtils.restoreOrderedLayerParams(themeLayer,layerConfigs,permalinkLayers,externalLayers)}}if(isEmpty(layers)){layers=[_objectSpread(_objectSpread({},themeLayer),{},{sublayers:[]})]}}// Add background layers for theme
10
10
  var haveVisibleBg=false;var bgLayers=ThemeUtils.createThemeBackgroundLayers(theme.backgroundLayers||[],themes,visibleBgLayer,externalLayers);if(initialTheme&&visibleBgLayer){var _bgLayers$find;var visibleLayer=(_bgLayers$find=bgLayers.find(function(entry){return entry.visibility}))===null||_bgLayers$find===void 0?void 0:_bgLayers$find.name;if(visibleLayer!==visibleBgLayer){dispatch(showNotification("missingbglayer",LocaleUtils.tr("app.missingbg",visibleBgLayer),NotificationType.WARN,true))}}var _iterator=_createForOfIteratorHelper(bgLayers),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var bgLayer=_step.value;haveVisibleBg|=bgLayer.visibility;dispatch(addLayer(bgLayer))}}catch(err){_iterator.e(err)}finally{_iterator.f()}if(!haveVisibleBg){UrlParams.updateParams({bl:""})}var _iterator2=_createForOfIteratorHelper(layers.reverse()),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var layer=_step2.value;dispatch(addLayer(layer,insertPos))}// Restore external layers
11
11
  }catch(err){_iterator2.e(err)}finally{_iterator2.f()}if(externalLayerRestorer){externalLayerRestorer(externalLayers,themes,function(source,layer){dispatch(replacePlaceholderLayer(source,layer))})}else{for(var _i=0,_Object$keys=Object.keys(externalLayers);_i<_Object$keys.length;_i++){var key=_Object$keys[_i];var idx=key.indexOf(":");var service=key.slice(0,idx);var serviceUrl=key.slice(idx+1);ServiceLayerUtils.findLayers(service,serviceUrl,externalLayers[key],theme.mapCrs,function(id,layer){// Don't expose sublayers
12
- if(layer){layer.sublayers=null}dispatch(replacePlaceholderLayer(id,layer))})}}dispatch({type:SET_CURRENT_THEME,theme:theme,layer:themeLayer.id});dispatch({type:SWITCHING_THEME,switching:false});var task=(_theme$config=theme.config)===null||_theme$config===void 0?void 0:_theme$config.startupTask;if(task){var mapClickAction=ConfigUtils.getPluginConfig(task.key).mapClickAction;dispatch(setCurrentTask(task.key,task.mode,mapClickAction))}}export function setCurrentTheme(theme,themes){var preserve=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;var initialView=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var layerParams=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;var visibleBgLayer=arguments.length>5&&arguments[5]!==undefined?arguments[5]:null;var permalinkLayers=arguments.length>6&&arguments[6]!==undefined?arguments[6]:null;var themeLayerRestorer=arguments.length>7&&arguments[7]!==undefined?arguments[7]:null;var externalLayerRestorer=arguments.length>8&&arguments[8]!==undefined?arguments[8]:null;return function(dispatch,getState){var _getState$layers;var curLayers=((_getState$layers=getState().layers)===null||_getState$layers===void 0?void 0:_getState$layers.flat)||[];var mapCrs=theme.mapCrs||themes.defaultMapCrs||"EPSG:3857";if(!(mapCrs in CoordinatesUtils.getAvailableCRS())){dispatch(showNotification("missingprojection",LocaleUtils.tr("app.missingprojection",theme.title,mapCrs),NotificationType.WARN,true));return}var initialTheme=!getState().theme.current;dispatch({type:SWITCHING_THEME,switching:true});// Get current background layer if it needs to be preserved
12
+ if(layer){layer.sublayers=null}dispatch(replacePlaceholderLayer(id,layer))})}}dispatch({type:SET_CURRENT_THEME,theme:theme,layer:themeLayer.id});if(initialView===null){if(theme.startupView==="2d"){dispatch(setView3dMode(View3DMode.DISABLED))}else if(theme.startupView==="3d2d"){dispatch(setView3dMode(View3DMode.SPLITSCREEN))}else if(theme.startupView==="3d"){dispatch(setView3dMode(View3DMode.FULLSCREEN))}}dispatch({type:SWITCHING_THEME,switching:false});var task=(_theme$config=theme.config)===null||_theme$config===void 0?void 0:_theme$config.startupTask;if(task){var mapClickAction=ConfigUtils.getPluginConfig(task.key).mapClickAction;dispatch(setCurrentTask(task.key,task.mode,mapClickAction))}}export function setCurrentTheme(theme,themes){var preserve=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;var initialExtent=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var layerParams=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;var visibleBgLayer=arguments.length>5&&arguments[5]!==undefined?arguments[5]:null;var permalinkLayers=arguments.length>6&&arguments[6]!==undefined?arguments[6]:null;var themeLayerRestorer=arguments.length>7&&arguments[7]!==undefined?arguments[7]:null;var externalLayerRestorer=arguments.length>8&&arguments[8]!==undefined?arguments[8]:null;var initialView=arguments.length>9&&arguments[9]!==undefined?arguments[9]:null;return function(dispatch,getState){var _getState$layers;var curLayers=((_getState$layers=getState().layers)===null||_getState$layers===void 0?void 0:_getState$layers.flat)||[];var mapCrs=theme.mapCrs||themes.defaultMapCrs||"EPSG:3857";if(!(mapCrs in CoordinatesUtils.getAvailableCRS())){dispatch(showNotification("missingprojection",LocaleUtils.tr("app.missingprojection",theme.title,mapCrs),NotificationType.WARN,true));return}var initialTheme=!getState().theme.current;dispatch({type:SWITCHING_THEME,switching:true});// Get current background layer if it needs to be preserved
13
13
  if(preserve&&visibleBgLayer===null&&ConfigUtils.getConfigProp("preserveBackgroundOnThemeSwitch",theme)===true){var curBgLayer=curLayers.find(function(layer){return layer.role===LayerRole.BACKGROUND&&layer.visibility===true});visibleBgLayer=curBgLayer?curBgLayer.name:null}// Remove old layers
14
14
  var insertPos=0;if(preserve&&ConfigUtils.getConfigProp("preserveNonThemeLayersOnThemeSwitch",theme)===true){// Compute insertion position of new theme layers by counting how many non-theme layers remain
15
15
  insertPos=curLayers.filter(function(layer){return layer.role===LayerRole.USERLAYER}).length;var removeLayers=curLayers.filter(function(layer){return layer.role!==LayerRole.USERLAYER}).map(function(layer){return layer.id});var _iterator3=_createForOfIteratorHelper(removeLayers),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var layerId=_step3.value;dispatch(removeLayer(layerId))}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}else{dispatch(removeAllLayers())}dispatch(setSwipe(null));if(!theme){dispatch({type:SWITCHING_THEME,switching:false});return}// Inherit defaults if necessary
16
16
  theme=_objectSpread(_objectSpread({},theme),{},{mapCrs:mapCrs,version:theme.version||themes.defaultWMSVersion||"1.3.0",scales:theme.scales||themes.defaultScales||MapUtils.getGoogleMercatorScales(0,21),printScales:theme.printScales||themes.defaultPrintScales||undefined,printResolutions:theme.printResolutions||themes.defaultPrintResolutions||undefined,printGrid:theme.printGrid||themes.defaultPrintGrid||undefined,searchProviders:theme.searchProviders||themes.defaultSearchProviders||undefined,backgroundLayers:theme.backgroundLayers||themes.defaultBackgroundLayers||[],defaultDisplayCrs:theme.defaultDisplayCrs||themes.defaultDisplayCrs||undefined});// Preserve extent if desired and possible
17
- if(getState().display.view3dMode!==View3DMode.FULLSCREEN){var curCrs=getState().map.projection;if(preserve&&!initialView&&curCrs===theme.mapCrs){var curBounds=getState().map.bbox.bounds;if(ConfigUtils.getConfigProp("preserveExtentOnThemeSwitch",theme)===true){// If theme bbox (b1) includes current bbox (b2), keep current extent
17
+ if(getState().display.view3dMode!==View3DMode.FULLSCREEN){var curCrs=getState().map.projection;if(preserve&&!initialExtent&&curCrs===theme.mapCrs){var curBounds=getState().map.bbox.bounds;if(ConfigUtils.getConfigProp("preserveExtentOnThemeSwitch",theme)===true){// If theme bbox (b1) includes current bbox (b2), keep current extent
18
18
  var b1=CoordinatesUtils.reprojectBbox(theme.bbox.bounds,theme.bbox.crs,curCrs);var b2=curBounds;if(b2[0]>=b1[0]&&b2[1]>=b1[1]&&b2[2]<=b1[2]&&b2[3]<=b1[3]){// theme bbox (b1) includes current bbox (b2)
19
- initialView={bounds:curBounds,crs:curCrs}}}else if(ConfigUtils.getConfigProp("preserveExtentOnThemeSwitch",theme)==="force"){initialView={bounds:curBounds,crs:curCrs}}}}// Reconfigure map
20
- dispatch(configureMap(theme.mapCrs,theme.scales,initialView||theme.initialBbox,theme.defaultDisplayCrs));var layerConfigs=layerParams?layerParams.map(function(param){return LayerUtils.splitLayerUrlParam(param)}):null;if(layerConfigs){layerConfigs=LayerUtils.replaceLayerGroups(layerConfigs,theme)}// Restore missing theme layers
19
+ initialExtent={bounds:curBounds,crs:curCrs}}}else if(ConfigUtils.getConfigProp("preserveExtentOnThemeSwitch",theme)==="force"){initialExtent={bounds:curBounds,crs:curCrs}}}}// Reconfigure map
20
+ dispatch(configureMap(theme.mapCrs,theme.scales,initialExtent||theme.initialBbox,theme.defaultDisplayCrs));var layerConfigs=layerParams?layerParams.map(function(param){return LayerUtils.splitLayerUrlParam(param)}):null;if(layerConfigs){layerConfigs=LayerUtils.replaceLayerGroups(layerConfigs,theme)}// Restore missing theme layers
21
21
  var missingThemeLayers=null;if(layerConfigs){var layerNames=LayerUtils.getSublayerNames(theme);missingThemeLayers=layerConfigs.reduce(function(missing,layerConfig){if(layerConfig.type==="theme"&&!layerNames.includes(layerConfig.name)){return _objectSpread(_objectSpread({},missing),{},_defineProperty({},layerConfig.name,layerConfig))}else{return missing}},{})}if(themeLayerRestorer&&!isEmpty(missingThemeLayers)){themeLayerRestorer(Object.keys(missingThemeLayers),theme,function(newLayers,newLayerNames){var newTheme=LayerUtils.mergeSubLayers(theme,{sublayers:newLayers});if(newLayerNames){layerConfigs=layerConfigs.reduce(function(res,layerConfig){if(layerConfig.name in newLayerNames){// If layerConfig exactly matches a restored theme layer, return unchanged config
22
22
  if(newLayerNames[layerConfig.name].length===1&&newLayerNames[layerConfig.name][0]===layerConfig.name){return[].concat(_toConsumableArray(res),[layerConfig])}// Else, in case multiple theme layers were returned (i.e. layerConfig.name specifies a group)
23
23
  // generate layerConfigs based on the group layerConfig, preserving the opacity/visibility/etc of the sublayer
24
- return[].concat(_toConsumableArray(res),_toConsumableArray(newLayerNames[layerConfig.name].map(function(sublayername){var _sublayer$opacity,_sublayer$visibility;var sublayer=LayerUtils.searchSubLayer({sublayers:newLayers},"name",sublayername);return _objectSpread(_objectSpread({},layerConfig),{},{name:sublayername,opacity:(_sublayer$opacity=sublayer.opacity)!==null&&_sublayer$opacity!==void 0?_sublayer$opacity:255,visibility:(_sublayer$visibility=sublayer.visibility)!==null&&_sublayer$visibility!==void 0?_sublayer$visibility:true,tristate:sublayer.tristate||false,style:sublayer.style})})))}else{return[].concat(_toConsumableArray(res),[layerConfig])}},[]);var diff=Object.keys(missingThemeLayers).filter(function(entry){return isEmpty(newLayerNames[entry])});if(!isEmpty(diff)){dispatch(showNotification("missinglayers",LocaleUtils.tr("app.missinglayers",diff.join(", ")),NotificationType.WARN,true))}}finishThemeSetup(dispatch,newTheme,themes,layerConfigs,insertPos,permalinkLayers,externalLayerRestorer,visibleBgLayer,initialTheme)})}else{if(!isEmpty(missingThemeLayers)){dispatch(showNotification("missinglayers",LocaleUtils.tr("app.missinglayers",Object.keys(missingThemeLayers).join(", ")),NotificationType.WARN,true))}finishThemeSetup(dispatch,theme,themes,layerConfigs,insertPos,permalinkLayers,externalLayerRestorer,visibleBgLayer,initialTheme)}}}
24
+ return[].concat(_toConsumableArray(res),_toConsumableArray(newLayerNames[layerConfig.name].map(function(sublayername){var _sublayer$opacity,_sublayer$visibility;var sublayer=LayerUtils.searchSubLayer({sublayers:newLayers},"name",sublayername);return _objectSpread(_objectSpread({},layerConfig),{},{name:sublayername,opacity:(_sublayer$opacity=sublayer.opacity)!==null&&_sublayer$opacity!==void 0?_sublayer$opacity:255,visibility:(_sublayer$visibility=sublayer.visibility)!==null&&_sublayer$visibility!==void 0?_sublayer$visibility:true,tristate:sublayer.tristate||false,style:sublayer.style})})))}else{return[].concat(_toConsumableArray(res),[layerConfig])}},[]);var diff=Object.keys(missingThemeLayers).filter(function(entry){return isEmpty(newLayerNames[entry])});if(!isEmpty(diff)){dispatch(showNotification("missinglayers",LocaleUtils.tr("app.missinglayers",diff.join(", ")),NotificationType.WARN,true))}}finishThemeSetup(dispatch,newTheme,themes,layerConfigs,insertPos,permalinkLayers,externalLayerRestorer,visibleBgLayer,initialTheme,initialView)})}else{if(!isEmpty(missingThemeLayers)){dispatch(showNotification("missinglayers",LocaleUtils.tr("app.missinglayers",Object.keys(missingThemeLayers).join(", ")),NotificationType.WARN,true))}finishThemeSetup(dispatch,theme,themes,layerConfigs,insertPos,permalinkLayers,externalLayerRestorer,visibleBgLayer,initialTheme,initialView)}}}
@@ -5,7 +5,7 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
5
5
  * This source code is licensed under the BSD-style license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */import React from"react";import PropTypes from"prop-types";import{KeyValCache}from"../utils/EditingUtils";import LocaleUtils from"../utils/LocaleUtils";import"./style/EditComboField.css";var EditComboField=/*#__PURE__*/function(_React$Component){function EditComboField(){var _this;_classCallCheck(this,EditComboField);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,EditComboField,[].concat(args));_defineProperty(_this,"state",{showPlaceholder:true,values:[]});_defineProperty(_this,"hasEmptyValue",function(values){for(var i=0;i<values.length;++i){if(typeof values[i]==="string"){if(values[i]===""){return true}}else if(values[i].value===""){return true}}return false});_defineProperty(_this,"renderMultiSelect",function(){var items=new Set;try{items=new Set(JSON.parse("["+_this.props.value.slice(1,-1)+"]"))}catch(e){// pass
8
- }var serializeValue=function serializeValue(value,enabled){if(enabled){return"{"+JSON.stringify(_toConsumableArray(items).concat([value])).slice(1,-1)+"}"}else{return"{"+JSON.stringify(_toConsumableArray(items).filter(function(x){return x!==value})).slice(1,-1)+"}"}};return/*#__PURE__*/React.createElement("div",{className:"edit-multi-select"},_this.state.values.map(function(item,index){var _this$itemValueLabel=_this.itemValueLabel(item),value=_this$itemValueLabel.value,label=_this$itemValueLabel.label;return/*#__PURE__*/React.createElement("div",{key:_this.props.fieldId+index},/*#__PURE__*/React.createElement("label",null,/*#__PURE__*/React.createElement("input",{checked:items.has(value),onChange:function onChange(ev){return _this.props.updateField(_this.props.fieldId,serializeValue(value,ev.target.checked))},type:"checkbox"}),label))}))});_defineProperty(_this,"renderComboSelect",function(){var _this$props$placehold;return/*#__PURE__*/React.createElement("select",{disabled:_this.props.readOnly,name:_this.props.name,onChange:function onChange(ev){return _this.props.updateField(_this.props.fieldId,ev.target.selectedIndex===0&&_this.state.showPlaceholder?null:ev.target.value)},required:_this.props.required,style:_this.props.style,value:String(_this.props.value)},_this.state.showPlaceholder?/*#__PURE__*/React.createElement("option",{disabled:_this.props.required,value:""},(_this$props$placehold=_this.props.placeholder)!==null&&_this$props$placehold!==void 0?_this$props$placehold:LocaleUtils.tr("editing.select")):null,_this.state.values.map(function(item,index){var _this$itemValueLabel2=_this.itemValueLabel(item),value=_this$itemValueLabel2.value,label=_this$itemValueLabel2.label;return/*#__PURE__*/React.createElement("option",{key:_this.props.fieldId+index,value:String(value)},label)}))});_defineProperty(_this,"itemValueLabel",function(item){var value="";var label="";if(typeof item==="string"){value=label=item}else{value=item.value;label=item.label}return{value:value,label:label}});return _this}_inherits(EditComboField,_React$Component);return _createClass(EditComboField,[{key:"componentDidMount",value:function componentDidMount(){var _this2=this;if(this.props.values){// eslint-disable-next-line
8
+ }var serializeValue=function serializeValue(value,enabled){if(enabled){return"{"+JSON.stringify(_toConsumableArray(items).concat([value])).slice(1,-1)+"}"}else{return"{"+JSON.stringify(_toConsumableArray(items).filter(function(x){return x!==value})).slice(1,-1)+"}"}};return/*#__PURE__*/React.createElement("div",{className:"edit-multi-select"},_this.state.values.map(function(item,index){var _this$itemValueLabel=_this.itemValueLabel(item),value=_this$itemValueLabel.value,label=_this$itemValueLabel.label;return/*#__PURE__*/React.createElement("div",{key:_this.props.fieldId+index},/*#__PURE__*/React.createElement("label",null,/*#__PURE__*/React.createElement("input",{checked:items.has(value),disabled:_this.props.readOnly,onChange:function onChange(ev){return _this.props.updateField(_this.props.fieldId,serializeValue(value,ev.target.checked))},type:"checkbox"}),label))}))});_defineProperty(_this,"renderComboSelect",function(){var _this$props$placehold;return/*#__PURE__*/React.createElement("select",{disabled:_this.props.readOnly,name:_this.props.name,onChange:function onChange(ev){return _this.props.updateField(_this.props.fieldId,ev.target.selectedIndex===0&&_this.state.showPlaceholder?null:ev.target.value)},required:_this.props.required,style:_this.props.style,value:String(_this.props.value)},_this.state.showPlaceholder?/*#__PURE__*/React.createElement("option",{disabled:_this.props.required,value:""},(_this$props$placehold=_this.props.placeholder)!==null&&_this$props$placehold!==void 0?_this$props$placehold:LocaleUtils.tr("editing.select")):null,_this.state.values.map(function(item,index){var _this$itemValueLabel2=_this.itemValueLabel(item),value=_this$itemValueLabel2.value,label=_this$itemValueLabel2.label;return/*#__PURE__*/React.createElement("option",{key:_this.props.fieldId+index,value:String(value)},label)}))});_defineProperty(_this,"itemValueLabel",function(item){var value="";var label="";if(typeof item==="string"){value=label=item}else{value=item.value;label=item.label}return{value:value,label:label}});return _this}_inherits(EditComboField,_React$Component);return _createClass(EditComboField,[{key:"componentDidMount",value:function componentDidMount(){var _this2=this;if(this.props.values){// eslint-disable-next-line
9
9
  this.setState({values:this.props.values,showPlaceholder:!this.hasEmptyValue(this.props.values)})}else if(this.props.keyvalrel){var _this$props$filterExp;KeyValCache.get(this.props.editIface,this.props.keyvalrel,(_this$props$filterExp=this.props.filterExpr)!==null&&_this$props$filterExp!==void 0?_this$props$filterExp:null).then(function(values){// eslint-disable-next-line
10
10
  _this2.setState({values:values,showPlaceholder:!_this2.hasEmptyValue(values)})})}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this3=this;if(this.props.keyvalrel&&this.props.filterExpr!==prevProps.filterExpr){var _this$props$filterExp2;KeyValCache.get(this.props.editIface,this.props.keyvalrel,(_this$props$filterExp2=this.props.filterExpr)!==null&&_this$props$filterExp2!==void 0?_this$props$filterExp2:null).then(function(values){// eslint-disable-next-line
11
11
  _this3.setState({values:values,showPlaceholder:!_this3.hasEmptyValue(values)})})}}},{key:"render",value:function render(){if(this.props.multiSelect){return this.renderMultiSelect()}else{return this.renderComboSelect()}}}])}(React.Component);_defineProperty(EditComboField,"propTypes",{editIface:PropTypes.object,fieldId:PropTypes.string,filterExpr:PropTypes.array,keyvalrel:PropTypes.string,multiSelect:PropTypes.bool,name:PropTypes.string,placeholder:PropTypes.string,readOnly:PropTypes.bool,required:PropTypes.bool,style:PropTypes.object,updateField:PropTypes.func,value:PropTypes.oneOfType([PropTypes.string,PropTypes.number]),values:PropTypes.array});export{EditComboField as default};
@@ -21,7 +21,8 @@ preprocessor: function(formData, feature, callback)
21
21
  var count=parts.length;var _fieldId=parts.slice(1,count-3).join("__");value=(_fieldId2=(feature.properties||[])[_fieldId])!==null&&_fieldId2!==void 0?_fieldId2:"";var keyvalrel=_this.props.mapPrefix+parts[count-3]+":"+parts[count-2]+":"+parts[count-1];var filterExpr=null;if(field!==null&&field!==void 0&&field.filterExpression){filterExpr=parseExpression(field.filterExpression,feature,editConfig,_this.props.iface,_this.props.mapPrefix,_this.props.mapCrs,function(){return _this.setState({reevaluate:+new Date})},true)}return/*#__PURE__*/React.createElement(EditComboField,{editIface:_this.props.iface,fieldId:_fieldId,filterExpr:filterExpr,key:_fieldId,keyvalrel:keyvalrel,multiSelect:widget.allowMulti==="true",name:nametransform(_fieldId),placeholder:inputConstraints.placeholder,readOnly:inputConstraints.readOnly||fieldConstraints.readOnly,required:inputConstraints.required||fieldConstraints.required,style:fontStyle,updateField:updateField,value:value})}else{var values=MiscUtils.ensureArray(widget.item||[]).map(function(item){var _item$property$value;return{label:item.property.text,value:(_item$property$value=item.property.value)!==null&&_item$property$value!==void 0?_item$property$value:item.property.text}});return/*#__PURE__*/React.createElement(EditComboField,{editIface:_this.props.iface,fieldId:widget.name,key:widget.name,name:elname,placeholder:inputConstraints.placeholder,readOnly:inputConstraints.readOnly||inputConstraints.readOnly,required:inputConstraints.required||inputConstraints.required,style:fontStyle,updateField:updateField,value:value,values:values})}}else if(widget["class"]==="QSpinBox"||widget["class"]==="QDoubleSpinBox"||widget["class"]==="QSlider"){var _prop$minimum,_prop$maximum,_ref,_prop$singleStep,_prop$decimals;var floatConstraint=function floatConstraint(x){var f=parseFloat(x);return isNaN(f)?undefined:f};var min=floatConstraint((_prop$minimum=prop.minimum)!==null&&_prop$minimum!==void 0?_prop$minimum:fieldConstraints.min);var max=floatConstraint((_prop$maximum=prop.maximum)!==null&&_prop$maximum!==void 0?_prop$maximum:fieldConstraints.max);var step=(_ref=(_prop$singleStep=prop.singleStep)!==null&&_prop$singleStep!==void 0?_prop$singleStep:fieldConstraints.step)!==null&&_ref!==void 0?_ref:1;var precision=(_prop$decimals=prop.decimals)!==null&&_prop$decimals!==void 0?_prop$decimals:0;if(widget["class"]==="QSlider"){return/*#__PURE__*/React.createElement("input",_extends({max:max,min:min,name:elname,onChange:function onChange(ev){return updateField(widget.name,ev.target.value)}},inputConstraints,{size:5,step:step,style:fontStyle,type:"range",value:value}))}else{return/*#__PURE__*/React.createElement(NumberInput,_extends({decimals:precision,max:max,min:min,name:elname,onChange:function onChange(val){return updateField(widget.name,val)}},inputConstraints,{step:step,style:fontStyle,value:value}))}}else if(widget["class"]==="QDateEdit"){var _min=prop.minimumDate?_this.dateConstraint(prop.minimumDate):"1600-01-01";var _max=prop.maximumDate?_this.dateConstraint(prop.maximumDate):"9999-12-31";return/*#__PURE__*/React.createElement("input",_extends({max:_max,min:_min,name:elname,onChange:function onChange(ev){return updateField(widget.name,ev.target.value)}},inputConstraints,{style:fontStyle,type:"date",value:value}))}else if(widget["class"]==="QTimeEdit"){return/*#__PURE__*/React.createElement("input",_extends({name:elname,onChange:function onChange(ev){return updateField(widget.name,ev.target.value)}},inputConstraints,{style:fontStyle,type:"time",value:value}))}else if(widget["class"]==="QDateTimeEdit"){var _min2=prop.minimumDate?_this.dateConstraint(prop.minimumDate):"1600-01-01";var _max2=prop.maximumDate?_this.dateConstraint(prop.maximumDate):"9999-12-31";return/*#__PURE__*/React.createElement(DateTimeInput,{maxDate:_max2,minDate:_min2,name:elname,onChange:function onChange(val){return updateField(widget.name,val)},readOnly:inputConstraints.readOnly,required:inputConstraints.required,style:fontStyle,value:value})}else if(widget["class"]==="QWidget"){if(widget.name.startsWith("nrel__")){return _this.renderNRelation(widget)}else if(widget.name.startsWith("ext__")){return value}else{return _this.renderLayout(widget.layout,feature,editConfig,updateField,nametransform)}}else if(widget["class"]==="QPushButton"){if(widget.name.startsWith("btn__")&&widget.onClick){return/*#__PURE__*/React.createElement("button",{className:"button",disabled:inputConstraints.readOnly,onClick:function onClick(){return widget.onClick(_this.props.setFormBusy)},type:"button"},widget.property.text)}else if(widget.name.startsWith("featurelink__")){var _parts=widget.name.split("__");// featurelink__layer__attrname
22
22
  // featurelink__layer__reltable__attrname
23
23
  if(_parts.length===3||_parts.length===4){var _feature$properties4;var layer=_parts[1];var reltable=_parts.length===4?_parts[2]:"";var attrname=_parts.slice(2).join("__");value=(_feature$properties4=feature.properties)===null||_feature$properties4===void 0?void 0:_feature$properties4[attrname];if(layer===reltable){var index=parseInt(nametransform("").split("__")[1],10);// Ugh..
24
- var reldataset=_this.props.mapPrefix+reltable;var displayField=attrname.split("__")[1];if(feature.__status__!=="empty"){var featurebuttons=[{key:"Edit",icon:"editing",label:String(value!==null&&value!==void 0?value:"")}];return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-featurelink-buttons"},/*#__PURE__*/React.createElement(ButtonBar,{buttons:featurebuttons,forceLabel:true,onClick:function onClick(){return _this.props.editRelationRecord("Edit",reltable,reldataset,index,displayField)}}))}else{var _featurebuttons=[];if(feature.geometry!==null){_featurebuttons.push({key:"Pick",icon:"pick",label:LocaleUtils.tr("editing.pick")})}_featurebuttons.push({key:"Create",icon:"editdraw",label:LocaleUtils.tr("editing.create")});return/*#__PURE__*/React.createElement(ButtonBar,{buttons:_featurebuttons,forceLabel:true,onClick:function onClick(action){return _this.props.editRelationRecord(action,reltable,reldataset,index,displayField)}})}}else{if(value!==null){var _featurebuttons2=[{key:"Edit",icon:"editing",label:String(value!==null&&value!==void 0?value:"")}];return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-featurelink-buttons"},/*#__PURE__*/React.createElement(ButtonBar,{buttons:_featurebuttons2,onClick:function onClick(){return _this.props.switchEditContext("Edit",layer,value,function(v){return updateField(attrname,v)},attrname)}}),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return updateField(attrname,null)},type:"button"},/*#__PURE__*/React.createElement(Icon,{icon:"clear"})))}else{var _featurebuttons3=[{key:"Pick",icon:"pick",label:LocaleUtils.tr("editing.pick")},{key:"Create",icon:"editdraw",label:LocaleUtils.tr("editing.create")}];return/*#__PURE__*/React.createElement(ButtonBar,{buttons:_featurebuttons3,onClick:function onClick(action){return _this.props.switchEditContext(action,layer,null,function(v){return updateField(attrname,v)},attrname)}})}}}}}else if(widget["class"]==="QStackedWidget"){return _this.renderLayout(widget.widget[parseInt(widget.property.currentIndex,10)].layout,feature,editConfig,updateField,nametransform)}return null});_defineProperty(_this,"renderNRelation",function(widget){var _widget$property2,_editConfig$fields,_this$props$feature$r;var parts=widget.name.split("__");if(parts.length<3){return null}var disabled=String((_widget$property2=widget.property)===null||_widget$property2===void 0?void 0:_widget$property2.enabled)==="false";var tablename=parts[1];var sortcol=parts[3]||null;var noreorder=parts[4]||false;var headerItems=widget.layout.item.filter(function(item){return item.widget&&item.widget.name.startsWith("header__")}).sort(function(a,b){return a.column-b.column});var widgetItems=widget.layout.item.filter(function(item){return!item.widget||!item.widget.name.startsWith("header__")}).sort(function(a,b){return a.column-b.column});var tableFitWidgets=["QLabel","QCheckBox","QRadioButton","QDateTimeEdit","QDateEdit","QTimeEdit"];var columnStyles=widgetItems.map(function(item){return item.widget&&tableFitWidgets.includes(item.widget["class"])?{width:"1px"}:{}});var editConfig=_this.props.editConfigs[tablename]||{};var relDataset=editConfig.editDataset;var fields=((_editConfig$fields=editConfig.fields)!==null&&_editConfig$fields!==void 0?_editConfig$fields:[]).reduce(function(res,field){return _objectSpread(_objectSpread({},res),{},_defineProperty({},field.id,field))},{});return/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation"},/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-table-container"},!_this.props.feature.relationValues?/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-table-loading"},/*#__PURE__*/React.createElement(Spinner,null)):null,/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,!isEmpty(headerItems)?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("th",null),headerItems.map(function(item){return/*#__PURE__*/React.createElement("th",{key:item.widget.name},item.widget.property.text)}),/*#__PURE__*/React.createElement("th",null)):null,(((_this$props$feature$r=_this.props.feature.relationValues)===null||_this$props$feature$r===void 0||(_this$props$feature$r=_this$props$feature$r[relDataset])===null||_this$props$feature$r===void 0?void 0:_this$props$feature$r.features)||[]).map(function(feature,idx){var updateField=function updateField(name,value){var fieldname=name.slice(tablename.length+2);// Strip <tablename>__ prefix
24
+ var reldataset=_this.props.mapPrefix+reltable;var displayField=attrname.split("__")[1];if(feature.__status__!=="empty"){var featurebuttons=[{key:"Edit",icon:"editing",label:String(value!==null&&value!==void 0?value:"")}];return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-featurelink-buttons"},/*#__PURE__*/React.createElement(ButtonBar,{buttons:featurebuttons,forceLabel:true,onClick:function onClick(){return _this.props.editRelationRecord("Edit",reltable,reldataset,index,displayField)}}))}else{var _featurebuttons=[];if(feature.geometry!==null){_featurebuttons.push({key:"Pick",icon:"pick",label:LocaleUtils.tr("editing.pick")})}_featurebuttons.push({key:"Create",icon:"editdraw",label:LocaleUtils.tr("editing.create")});return/*#__PURE__*/React.createElement(ButtonBar,{buttons:_featurebuttons,forceLabel:true,onClick:function onClick(action){return _this.props.editRelationRecord(action,reltable,reldataset,index,displayField)}})}}else{if(value!==null){var _featurebuttons2=[{key:"Edit",icon:"editing",label:String(value!==null&&value!==void 0?value:"")}];return/*#__PURE__*/React.createElement("div",{className:"qt-designer-form-featurelink-buttons"},/*#__PURE__*/React.createElement(ButtonBar,{buttons:_featurebuttons2,onClick:function onClick(){return _this.props.switchEditContext("Edit",layer,value,function(v){return updateField(attrname,v)},attrname)}}),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return updateField(attrname,null)},type:"button"},/*#__PURE__*/React.createElement(Icon,{icon:"clear"})))}else{var _featurebuttons3=[{key:"Pick",icon:"pick",label:LocaleUtils.tr("editing.pick")},{key:"Create",icon:"editdraw",label:LocaleUtils.tr("editing.create")}];return/*#__PURE__*/React.createElement(ButtonBar,{buttons:_featurebuttons3,onClick:function onClick(action){return _this.props.switchEditContext(action,layer,null,function(v){return updateField(attrname,v)},attrname)}})}}}}}else if(widget["class"]==="QStackedWidget"){return _this.renderLayout(widget.widget[parseInt(widget.property.currentIndex,10)].layout,feature,editConfig,updateField,nametransform)}return null});_defineProperty(_this,"renderNRelation",function(widget){var _widget$property2,_editConfig$fields,_this$props$feature$r;var parts=widget.name.split("__");if(parts.length<3){return null}var disabled=String((_widget$property2=widget.property)===null||_widget$property2===void 0?void 0:_widget$property2.enabled)==="false";var tablename=parts[1];var sortcol=parts[3]||null;var noreorder=parts[4]||false;var headerItems=widget.layout.item.filter(function(item){return item.widget&&item.widget.name.startsWith("header__")}).sort(function(a,b){return a.column-b.column});var widgetItems=widget.layout.item.filter(function(item){return!item.widget||!item.widget.name.startsWith("header__")}).sort(function(a,b){return a.column-b.column});var tableFitWidgets=["QLabel","QCheckBox","QRadioButton","QDateTimeEdit","QDateEdit","QTimeEdit"];var columnStyles=widgetItems.map(function(item){return item.widget&&tableFitWidgets.includes(item.widget["class"])?{width:"1px"}:{}});var editConfig=_this.props.editConfigs[tablename];if(!editConfig){// Relation dataset not permitted / no edit config available
25
+ return null}var relDataset=editConfig.editDataset;var fields=((_editConfig$fields=editConfig.fields)!==null&&_editConfig$fields!==void 0?_editConfig$fields:[]).reduce(function(res,field){return _objectSpread(_objectSpread({},res),{},_defineProperty({},field.id,field))},{});return/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation"},/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-table-container"},!_this.props.feature.relationValues?/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-table-loading"},/*#__PURE__*/React.createElement(Spinner,null)):null,/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,!isEmpty(headerItems)?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("th",null),headerItems.map(function(item){return/*#__PURE__*/React.createElement("th",{key:item.widget.name},item.widget.property.text)}),/*#__PURE__*/React.createElement("th",null)):null,(((_this$props$feature$r=_this.props.feature.relationValues)===null||_this$props$feature$r===void 0||(_this$props$feature$r=_this$props$feature$r[relDataset])===null||_this$props$feature$r===void 0?void 0:_this$props$feature$r.features)||[]).map(function(feature,idx){var updateField=function updateField(name,value){var fieldname=name.slice(tablename.length+2);// Strip <tablename>__ prefix
25
26
  _this.props.updateRelationField(relDataset,idx,fieldname,value)};var nametransform=function nametransform(name){return name+"__"+idx};var status=feature.__status__||"";var relFeature=_objectSpread(_objectSpread({},feature),{},{properties:Object.entries(feature.properties).reduce(function(res,_ref2){var _ref3=_slicedToArray(_ref2,2),key=_ref3[0],value=_ref3[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},tablename+"__"+key,value))},{})});var statusIcon=null;if(status==="empty"){// Pass
26
27
  }else if(status==="new"){statusIcon="new"}else if(status){statusIcon="edited"}var statusText="";if(feature.error){statusIcon="warning";statusText=_this.buildErrMsg(feature)}var extraClass=status.startsWith("deleted")?"qt-designer-widget-relation-record-deleted":"";return/*#__PURE__*/React.createElement("tr",{className:"qt-designer-widget-relation-record "+extraClass,key:relDataset+idx},/*#__PURE__*/React.createElement("td",{className:"qt-designer-widget-relation-record-icon"},statusIcon?/*#__PURE__*/React.createElement(Icon,{icon:statusIcon,title:statusText}):null),widgetItems.map(function(item,widx){if(item.widget){return/*#__PURE__*/React.createElement("td",{className:"qt-designer-widget-relation-row-widget",key:item.widget.name,style:columnStyles[widx]},_this.renderWidget(item.widget,relFeature,editConfig,fields,updateField,nametransform,true,disabled))}else if(item.spacer){return/*#__PURE__*/React.createElement("td",{key:"spacer_"+widx})}else{return null}}),!_this.props.readOnly&&!disabled&&sortcol&&!noreorder?/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement(Icon,{icon:"chevron-up",onClick:function onClick(){return _this.props.reorderRelationRecord(relDataset,idx,-1)}}),/*#__PURE__*/React.createElement("br",null),/*#__PURE__*/React.createElement(Icon,{icon:"chevron-down",onClick:function onClick(){return _this.props.reorderRelationRecord(relDataset,idx,1)}})):null,!_this.props.readOnly&&!disabled?/*#__PURE__*/React.createElement("td",{className:"qt-designer-widget-relation-record-icon"},/*#__PURE__*/React.createElement(Icon,{icon:"trash",onClick:function onClick(){return _this.props.removeRelationRecord(relDataset,idx)}})):null)})))),!_this.props.readOnly?/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-buttons"},/*#__PURE__*/React.createElement("button",{className:"button qt-designer-widget-relation-add",disabled:!_this.props.feature.relationValues,onClick:function onClick(ev){return _this.addRelationRecord(ev,relDataset)},type:"button"},LocaleUtils.tr("editing.add"))):null,/*#__PURE__*/React.createElement("div",{className:"qt-designer-widget-relation-resize-handle",onPointerDown:_this.startRelationTableResize}))});_defineProperty(_this,"addRelationRecord",function(ev,datasetname){_this.setState({relationAddPressed:ev.target});_this.props.addRelationRecord(datasetname)});_defineProperty(_this,"startRelationTableResize",function(ev){var container=ev.target.parentElement.parentElement;if(!container){return}var startHeight=container.offsetHeight;var startMouseY=ev.clientY;var resizeInput=function resizeInput(event){container.style.height=Math.max(30,startHeight+(event.clientY-startMouseY))+"px"};ev.view.document.body.style.userSelect="none";ev.view.addEventListener("pointermove",resizeInput);ev.view.addEventListener("pointerup",function(){ev.view.document.body.style.userSelect="";ev.view.removeEventListener("pointermove",resizeInput)},{once:true})});_defineProperty(_this,"groupOrName",function(widget){return widget.attribute&&widget.attribute.buttonGroup?widget.attribute.buttonGroup._:widget.name});_defineProperty(_this,"dateConstraint",function(constr){return constr.year+"-"+("0"+constr.month).slice(-2)+"-"+("0"+constr.day).slice(-2)});_defineProperty(_this,"parseForm",function(data){var loadingReqId=uuidv1();_this.setState({loading:true,loadingReqId:loadingReqId});var parserOpts={isArray:function isArray(){return false},ignoreAttributes:false,attributeNamePrefix:""};var json=new XMLParser(parserOpts).parse(data);var relationTables={};var externalFields={};var widgets={};var fields={};var buttons={};var nrels={};var counters={widget:0,layout:0};_this.reformatWidget(json.ui.widget,relationTables,fields,buttons,nrels,externalFields,widgets,counters);// console.log(json);
27
28
  json.externalFields=externalFields;json.widgets=widgets;json.fields=fields;json.buttons=buttons;json.nrels=nrels;if(FormPreprocessors[_this.props.editConfig.editDataset]){FormPreprocessors[_this.props.editConfig.editDataset](json,_this.props.feature,function(formData){if(_this.state.loadingReqId===loadingReqId){_this.setState({formData:formData,loading:false,loadingReqId:null})}})}else{_this.setState({formData:json,loading:false,loadingReqId:null})}_this.props.setRelationTables(relationTables)});_defineProperty(_this,"reformatWidget",function(widget,relationTables,fields,buttons,nrels,externalFields,widgets,counters){if(widget.property){widget.property=MiscUtils.ensureArray(widget.property).reduce(function(res,prop){return _objectSpread(_objectSpread({},res),{},_defineProperty({},prop.name,prop[Object.keys(prop).find(function(key){return key!=="name"})]))},{})}else{widget.property={}}if(widget.attribute){widget.attribute=MiscUtils.ensureArray(widget.attribute).reduce(function(res,prop){return _objectSpread(_objectSpread({},res),{},_defineProperty({},prop.name,prop[Object.keys(prop).find(function(key){return key!=="name"})]))},{})}else{widget.attribute={}}var verticalFill=false;if(widget.item){MiscUtils.ensureArray(widget.item).forEach(function(item){verticalFill|=_this.reformatWidget(item,relationTables,fields,buttons,nrels,externalFields,widgets,counters)})}widget.name=widget.name||":widget_"+counters.widget++;var fieldNames=_this.props.editConfig.fields.map(function(field){return field.id});if(fieldNames.includes(widget.name)){fields[widget.name]=widget}else if(widget.name.startsWith("kvrel__")||widget.name.startsWith("img__")){var _parts2=widget.name.split("__");if(fieldNames.includes(_parts2[1])){fields[_parts2[1]]=widget}}else if(widget.name.startsWith("btn__")){buttons[widget.name.split("__")[1]]=widget}else if(widget.name.startsWith("nrel__")){nrels[widget.name.split("__")[1]]=widget}if(widget.name.startsWith("ext__")){externalFields[widget.name.slice(5)]=""}widgets[widget.name]=widget;if(widget.layout){verticalFill|=_this.reformatLayout(widget.layout,relationTables,fields,buttons,nrels,externalFields,widgets,counters)}if(widget.widget){widget.widget=Array.isArray(widget.widget)?widget.widget:[widget.widget];widget.widget.forEach(function(child){child.name=":widget_"+counters.widget++;verticalFill|=_this.reformatWidget(child,relationTables,fields,buttons,nrels,externalFields,widgets,counters)})}if(widget.name.startsWith("nrel__")||!widget.layout&&!vFitWidgets.includes(widget["class"])){verticalFill=true}var parts=widget.name.split("__");if(parts.length>=3&&parts[0]==="nrel"){relationTables[_this.props.mapPrefix+parts[1]]={fk:parts[2],sortcol:parts[3]||null,noreorder:parts[4]||false}}return verticalFill});_defineProperty(_this,"reformatLayout",function(layout,relationTables,fields,buttons,nrels,externalFields,widgets,counters){layout.item=MiscUtils.ensureArray(layout.item);layout.name=layout.name||":layout_"+counters.layout++;var verticalFill=false;layout.item.forEach(function(item){if(!item){return}else if(item.widget){verticalFill|=_this.reformatWidget(item.widget,relationTables,fields,buttons,nrels,externalFields,widgets,counters)}else if(item.spacer){item.spacer.property=MiscUtils.ensureArray(item.spacer.property).reduce(function(res,prop){return _objectSpread(_objectSpread({},res),{},_defineProperty({},prop.name,prop[Object.keys(prop).find(function(key){return key!=="name"})]))},{});if(item.spacer.property.orientation==="Qt::Vertical"){verticalFill=true}}else if(item.layout){verticalFill|=_this.reformatLayout(item.layout,relationTables,fields,buttons,nrels,externalFields,widgets,counters)}});layout.verticalFill=verticalFill;return verticalFill});_defineProperty(_this,"buildErrMsg",function(record){var message=record.error;var errorDetails=record.error_details||{};if(!isEmpty(errorDetails.geometry_errors)){message+=":\n";message+=errorDetails.geometry_errors.map(function(entry){return" - "+entry.reason+" at "+entry.location})}if(!isEmpty(errorDetails.data_errors)){message+=":\n - "+errorDetails.data_errors.join("\n - ")}if(!isEmpty(errorDetails.validation_errors)){message+=":\n - "+errorDetails.validation_errors.join("\n - ")}return message});_this.state=QtDesignerForm.defaultState;return _this}_inherits(QtDesignerForm,_React$Component);return _createClass(QtDesignerForm,[{key:"componentDidMount",value:function componentDidMount(){this.componentDidUpdate({})}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _prevProps$editConfig,_prevProps$feature,_this2=this;// Query form
@@ -9,8 +9,8 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
9
9
  // Warn if permalink key is invalid
10
10
  if(permalinkInvalid){_this.props.showNotification("missingtheme",LocaleUtils.tr("app.missingpermalink"),NotificationType.WARN,true)}// Load themes.json
11
11
  axios.get("themes.json").then(function(response){var _this$props$appConfig,_this$props$appConfig2,_theme;var themes=response.data.themes||{};(_this$props$appConfig=(_this$props$appConfig2=_this.props.appConfig).themePreprocessor)===null||_this$props$appConfig===void 0||_this$props$appConfig.call(_this$props$appConfig2,themes);_this.props.themesLoaded(themes);var theme=ThemeUtils.getThemeById(themes,params.t);if((!theme||theme.restricted)&&!ConfigUtils.getConfigProp("dontLoadDefaultTheme")){if(params.t){_this.props.showNotification("missingtheme",LocaleUtils.tr("app.missingtheme",params.t),NotificationType.WARN,true);params.l=undefined}var defaultTheme=Object.fromEntries(_this.props.defaultUrlParams.split("&").map(function(x){return x.split("=")})).t||themes.defaultTheme;theme=ThemeUtils.getThemeById(themes,defaultTheme);params.t=defaultTheme}if(theme){var _params$bl;// Compute initial view
12
- var initialView=null;if(params.c&&params.s!==undefined){var coords=params.c.split(/[;,]/g).map(function(x){return parseFloat(x)||0});var scales=theme.scales||themes.defaultScales;var zoom=MapUtils.computeZoom(scales,params.s);if(coords.length===2){var p=CoordinatesUtils.reproject(coords,params.crs||theme.mapCrs,theme.bbox.crs);var bounds=theme.bbox.bounds;// Only accept c if it is within the theme bounds
13
- if(bounds[0]<=p[0]&&p[0]<=bounds[2]&&bounds[1]<=p[1]&&p[1]<=bounds[3]){initialView={center:coords,zoom:zoom,crs:params.crs||theme.mapCrs}}else{initialView={center:[0.5*(bounds[0]+bounds[2]),0.5*(bounds[1]+bounds[3])],zoom:zoom,crs:theme.bbox.crs}}}}else if(params.e){var _bounds=params.e.split(/[;,]/g).map(function(x){return parseFloat(x)||0});if(CoordinatesUtils.isValidExtent(_bounds)){initialView={bounds:_bounds,crs:params.crs||theme.mapCrs}}}var layerParams=params.l!==undefined?params.l.split(",").filter(function(entry){return entry}):null;if(layerParams&&ConfigUtils.getConfigProp("urlReverseLayerOrder")){layerParams.reverse()}_this.props.setCurrentTheme(theme,themes,false,initialView,layerParams,(_params$bl=params.bl)!==null&&_params$bl!==void 0?_params$bl:null,state.layers,_this.props.appConfig.themeLayerRestorer,_this.props.appConfig.externalLayerRestorer)}var task=ConfigUtils.getConfigProp("startupTask");if(task&&!((_theme=theme)!==null&&_theme!==void 0&&(_theme=_theme.config)!==null&&_theme!==void 0&&_theme.startupTask)){var mapClickAction=ConfigUtils.getPluginConfig(task.key).mapClickAction;_this.props.setCurrentTask(task.key,task.mode,mapClickAction)}})});_this.themesLoaded=false;// Set initial bottom/topbar height to zero in case not topbar/bottombar is enabled
12
+ var initialView=params.v;var initialExtent=null;if(params.c&&params.s!==undefined){var coords=params.c.split(/[;,]/g).map(function(x){return parseFloat(x)||0});var scales=theme.scales||themes.defaultScales;var zoom=MapUtils.computeZoom(scales,params.s);if(coords.length===2){var p=CoordinatesUtils.reproject(coords,params.crs||theme.mapCrs,theme.bbox.crs);var bounds=theme.bbox.bounds;// Only accept c if it is within the theme bounds
13
+ if(bounds[0]<=p[0]&&p[0]<=bounds[2]&&bounds[1]<=p[1]&&p[1]<=bounds[3]){initialExtent={center:coords,zoom:zoom,crs:params.crs||theme.mapCrs}}else{initialExtent={center:[0.5*(bounds[0]+bounds[2]),0.5*(bounds[1]+bounds[3])],zoom:zoom,crs:theme.bbox.crs}}}}else if(params.e){var _bounds=params.e.split(/[;,]/g).map(function(x){return parseFloat(x)||0});if(CoordinatesUtils.isValidExtent(_bounds)){initialExtent={bounds:_bounds,crs:params.crs||theme.mapCrs}}}var layerParams=params.l!==undefined?params.l.split(",").filter(function(entry){return entry}):null;if(layerParams&&ConfigUtils.getConfigProp("urlReverseLayerOrder")){layerParams.reverse()}_this.props.setCurrentTheme(theme,themes,false,initialExtent,layerParams,(_params$bl=params.bl)!==null&&_params$bl!==void 0?_params$bl:null,state.layers,_this.props.appConfig.themeLayerRestorer,_this.props.appConfig.externalLayerRestorer,initialView)}var task=ConfigUtils.getConfigProp("startupTask");if(task&&!((_theme=theme)!==null&&_theme!==void 0&&(_theme=_theme.config)!==null&&_theme!==void 0&&_theme.startupTask)){var mapClickAction=ConfigUtils.getPluginConfig(task.key).mapClickAction;_this.props.setCurrentTask(task.key,task.mode,mapClickAction)}})});_this.themesLoaded=false;// Set initial bottom/topbar height to zero in case not topbar/bottombar is enabled
14
14
  // The components will set the proper height if and when initialized
15
15
  props.setTopbarHeight(0);props.setBottombarHeight(0);return _this}_inherits(AppContainerComponent,_React$Component);return _createClass(AppContainerComponent,[{key:"componentDidMount",value:function componentDidMount(){var _this2=this;window.addEventListener("QWC2ApiReady",function(){var _window$qwc;// Warn about non-existing plugins
16
16
  var plugins=_objectSpread(_objectSpread({},_this2.props.appConfig.pluginsDef.plugins),(_window$qwc=window.qwc2)===null||_window$qwc===void 0?void 0:_window$qwc.__customPlugins);var mode=ConfigUtils.isMobile()?"mobile":"desktop";_this2.props.localConfig.plugins[mode].filter(function(entry){return!plugins[entry.name+"Plugin"]}).forEach(function(entry){// eslint-disable-next-line
@@ -4,4 +4,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
4
4
  *
5
5
  * This source code is licensed under the BSD-style license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import{setView3dMode,View3DMode}from"../../actions/display";import Icon from"../Icon";import MapButton from"../MapButton";import"./style/View3DSwitcher.css";var View3DSwitcher=/*#__PURE__*/function(_React$Component){function View3DSwitcher(){var _this;_classCallCheck(this,View3DSwitcher);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,View3DSwitcher,[].concat(args));_defineProperty(_this,"state",{expanded:false});_defineProperty(_this,"render",function(){var _activeButton$icon;var buttons=[{mode:View3DMode.DISABLED,icon:"2d"},{mode:View3DMode.FULLSCREEN,icon:"3d"},{mode:View3DMode.SPLITSCREEN,icon:"3d2d"}];var activeButton=buttons.splice(_this.props.view3dMode,1)[0];return/*#__PURE__*/React.createElement(MapButton,{active:_this.state.expanded,busy:_this.props.view3dMode===View3DMode.DISABLING,icon:(_activeButton$icon=activeButton===null||activeButton===void 0?void 0:activeButton.icon)!==null&&_activeButton$icon!==void 0?_activeButton$icon:"",iconSize:"xlarge",onClick:function onClick(){return _this.setState(function(state){return{expanded:!state.expanded}})},position:_this.props.position},/*#__PURE__*/React.createElement("div",{className:"view3d-switcher-buttons"+(_this.state.expanded?" view3d-switcher-buttons-expanded":"")},buttons.map(function(button){return/*#__PURE__*/React.createElement("button",{className:"map-button",key:button.icon,onClick:function onClick(){return _this.switchMode(button.mode)}},/*#__PURE__*/React.createElement(Icon,{icon:button.icon,size:"xlarge"}))})))});_defineProperty(_this,"switchMode",function(mode){_this.props.setView3dMode(mode===View3DMode.DISABLED?View3DMode.DISABLING:mode);_this.setState({expanded:false})});return _this}_inherits(View3DSwitcher,_React$Component);return _createClass(View3DSwitcher)}(React.Component);_defineProperty(View3DSwitcher,"propTypes",{position:PropTypes.number,setView3dMode:PropTypes.func,switchTo:PropTypes.string,view3dMode:PropTypes.number});export default connect(function(state){return{view3dMode:state.display.view3dMode}},{setView3dMode:setView3dMode})(View3DSwitcher);
7
+ */import React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import{setView3dMode,View3DMode}from"../../actions/display";import Icon from"../Icon";import MapButton from"../MapButton";import"./style/View3DSwitcher.css";var View3DSwitcher=/*#__PURE__*/function(_React$Component){function View3DSwitcher(){var _this;_classCallCheck(this,View3DSwitcher);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,View3DSwitcher,[].concat(args));_defineProperty(_this,"state",{expanded:false});_defineProperty(_this,"render",function(){var buttons=[{mode:View3DMode.DISABLED,icon:"2d"},{mode:View3DMode.FULLSCREEN,icon:"3d"},{mode:View3DMode.SPLITSCREEN,icon:"3d2d"}];return/*#__PURE__*/React.createElement(MapButton,{active:_this.state.expanded,busy:_this.props.view3dMode===View3DMode.DISABLING,icon:"view",iconSize:"xlarge",onClick:function onClick(){return _this.setState(function(state){return{expanded:!state.expanded}})},position:_this.props.position},/*#__PURE__*/React.createElement("div",{className:"view3d-switcher-buttons"+(_this.state.expanded?" view3d-switcher-buttons-expanded":"")},buttons.map(function(button){return/*#__PURE__*/React.createElement("button",{className:"map-button"+(button.mode===_this.props.view3dMode?" map-button-active":""),key:button.icon,onClick:function onClick(){return _this.switchMode(button.mode)}},/*#__PURE__*/React.createElement(Icon,{icon:button.icon,size:"xlarge"}))})))});_defineProperty(_this,"switchMode",function(mode){_this.props.setView3dMode(mode===View3DMode.DISABLED?View3DMode.DISABLING:mode);_this.setState({expanded:false})});return _this}_inherits(View3DSwitcher,_React$Component);return _createClass(View3DSwitcher)}(React.Component);_defineProperty(View3DSwitcher,"propTypes",{position:PropTypes.number,setView3dMode:PropTypes.func,switchTo:PropTypes.string,view3dMode:PropTypes.number});export default connect(function(state){return{view3dMode:state.display.view3dMode}},{setView3dMode:setView3dMode})(View3DSwitcher);
@@ -13,3 +13,7 @@ div.view3d-switcher-buttons-expanded > button:nth-child(1) {
13
13
  div.view3d-switcher-buttons-expanded > button:nth-child(2) {
14
14
  right: 7em;
15
15
  }
16
+
17
+ div.view3d-switcher-buttons-expanded > button:nth-child(3) {
18
+ right: 10.5em;
19
+ }
@@ -4,5 +4,5 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
4
4
  *
5
5
  * This source code is licensed under the BSD-style license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import PropTypes from"prop-types";import InputContainer from"./InputContainer";var DateTimeInput=/*#__PURE__*/function(_React$Component){function DateTimeInput(){var _this;_classCallCheck(this,DateTimeInput);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,DateTimeInput,[].concat(args));_defineProperty(_this,"valueChanged",function(date,time){if(time&&time.length===5){time+=":00"}if(date&&time){_this.props.onChange(date+"T"+time)}else if(date){_this.props.onChange(date)}else{_this.props.onChange("")}});return _this}_inherits(DateTimeInput,_React$Component);return _createClass(DateTimeInput,[{key:"render",value:function render(){var _this2=this;var parts=(this.props.value||"T").split("T");parts[1]=(parts[1]||"").replace(/\.\d+$/,"");// Strip milliseconds
8
- return/*#__PURE__*/React.createElement(InputContainer,null,/*#__PURE__*/React.createElement("input",{max:this.props.maxDate,min:this.props.minDate,onChange:function onChange(ev){return _this2.valueChanged(ev.target.value,parts[1])},readOnly:this.props.readOnly,required:this.props.required,role:"input",style:this.props.style,type:"date",value:parts[0]}),/*#__PURE__*/React.createElement("input",{disabled:!parts[0],onChange:function onChange(ev){return _this2.valueChanged(parts[0],ev.target.value)},readOnly:this.props.readOnly,required:this.props.required,role:"input",step:"1",style:_objectSpread(_objectSpread({},this.props.style),{},{maxWidth:"8em"}),type:"time",value:parts[1]}),/*#__PURE__*/React.createElement("input",{name:this.props.name,role:"input",type:"hidden",value:this.props.value}))}}])}(React.Component);_defineProperty(DateTimeInput,"propTypes",{maxDate:PropTypes.string,minDate:PropTypes.string,name:PropTypes.string,onChange:PropTypes.func,readOnly:PropTypes.bool,required:PropTypes.bool,style:PropTypes.object,value:PropTypes.string});export{DateTimeInput as default};
7
+ */import React from"react";import PropTypes from"prop-types";import InputContainer from"./InputContainer";import"./style/DateTimeInput.css";var DateTimeInput=/*#__PURE__*/function(_React$Component){function DateTimeInput(){var _this;_classCallCheck(this,DateTimeInput);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,DateTimeInput,[].concat(args));_defineProperty(_this,"valueChanged",function(date,time){if(time&&time.length===5){time+=":00"}if(date&&time){_this.props.onChange(date+"T"+time)}else if(date){_this.props.onChange(date)}else{_this.props.onChange("")}});return _this}_inherits(DateTimeInput,_React$Component);return _createClass(DateTimeInput,[{key:"render",value:function render(){var _this2=this;var parts=(this.props.value||"T").split("T");parts[1]=(parts[1]||"").replace(/\.\d+$/,"");// Strip milliseconds
8
+ return/*#__PURE__*/React.createElement(InputContainer,{className:"DateTimeInput"},/*#__PURE__*/React.createElement("input",{max:this.props.maxDate,min:this.props.minDate,onChange:function onChange(ev){return _this2.valueChanged(ev.target.value,parts[1])},readOnly:this.props.readOnly,required:this.props.required,role:"input",style:this.props.style,type:"date",value:parts[0]}),/*#__PURE__*/React.createElement("input",{disabled:!parts[0],onChange:function onChange(ev){return _this2.valueChanged(parts[0],ev.target.value)},readOnly:this.props.readOnly,required:this.props.required,role:"input",step:"1",style:_objectSpread(_objectSpread({},this.props.style),{},{maxWidth:"8em"}),type:"time",value:parts[1]}),/*#__PURE__*/React.createElement("input",{name:this.props.name,role:"input",type:"hidden",value:this.props.value}))}}])}(React.Component);_defineProperty(DateTimeInput,"propTypes",{maxDate:PropTypes.string,minDate:PropTypes.string,name:PropTypes.string,onChange:PropTypes.func,readOnly:PropTypes.bool,required:PropTypes.bool,style:PropTypes.object,value:PropTypes.string});export{DateTimeInput as default};
@@ -4,4 +4,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
4
4
  *
5
5
  * This source code is licensed under the BSD-style license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import classNames from"classnames";import PropTypes from"prop-types";import LocaleUtils from"../../utils/LocaleUtils";import MiscUtils from"../../utils/MiscUtils";import Icon from"../Icon";import"./style/TextInput.css";var TextInput=/*#__PURE__*/function(_React$Component){function TextInput(props){var _this;_classCallCheck(this,TextInput);_this=_callSuper(this,TextInput,[props]);_defineProperty(_this,"state",{focus:false,value:"",valueRev:0,curValue:"",changed:false});_defineProperty(_this,"setDefaultValue",function(value,valueRev,prevValueRef){if(valueRev>prevValueRef){_this.input.innerHTML=value}});_defineProperty(_this,"onCopy",function(ev,cut){ev.preventDefault();var selection=window.getSelection();var plainText=selection.toString();if(ev.clipboardData){ev.clipboardData.setData("text/plain",plainText)}if(cut){_this.clear()}});_defineProperty(_this,"clear",function(){var clearValue=_this.props.clearValue;_this.props.onChange(clearValue);_this.setState(function(state){return{curValue:_this.props.clearValue,changed:state.value!==clearValue}});_this.input.innerHTML=clearValue});_defineProperty(_this,"onChange",function(ev){var curValue=ev.target.innerText.replace(/<br\s*\/?>$/,"").replace(/\n$/,"");if(!_this.props.multiline){curValue=curValue.replace("\n","")}_this.setState({curValue:curValue,changed:true})});_defineProperty(_this,"onBlur",function(){_this.setState({focus:false});if(!_this.skipNextCommitOnBlur){_this.commit()}});_defineProperty(_this,"onFocus",function(ev){_this.setState({focus:true});window.setTimeout(function(){if(window.getSelection&&document.createRange){var range=document.createRange();range.selectNodeContents(ev.target);var sel=window.getSelection();sel.removeAllRanges();sel.addRange(range)}else if(document.body.createTextRange){var _range=document.body.createTextRange();_range.moveToElementText(ev.target);_range.select()}},1)});_defineProperty(_this,"onMouseDown",function(ev){var el=document.elementFromPoint(ev.clientX,ev.clientY);if((el===null||el===void 0?void 0:el.nodeName)==="A"&&ev.ctrlKey){window.open(el.href,el.target)}});_defineProperty(_this,"onMouseMove",function(ev){var isTouch="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0;clearTimeout(_this.tooltipTimeout);var editable=!_this.props.disabled&&!_this.props.readOnly;if(!isTouch&&editable&&ev.target.nodeName==="A"){var rect=ev.target.getBoundingClientRect();var left=rect.left+window.scrollX;var bottom=rect.bottom+window.scrollY+2;_this.tooltipTimeout=setTimeout(function(){if(!_this.tooltipEl){_this.tooltipEl=document.createElement("span");_this.tooltipEl.className="text-input-link-tooltip";_this.tooltipEl.innerHTML=LocaleUtils.tr("misc.ctrlclickhint");_this.tooltipEl.style.position="absolute";_this.tooltipEl.style.zIndex=10000000000;document.body.appendChild(_this.tooltipEl)}_this.tooltipEl.style.left=left+"px";_this.tooltipEl.style.top=bottom+"px";_this.tooltipTimeout=null},250)}else if(_this.tooltipEl){document.body.removeChild(_this.tooltipEl);_this.tooltipEl=null}});_defineProperty(_this,"onMouseLeave",function(){clearTimeout(_this.tooltipTimeout);if(_this.tooltipEl){document.body.removeChild(_this.tooltipEl);_this.tooltipEl=null}});_defineProperty(_this,"onKeyDown",function(ev){if(ev.key==="Enter"&&!_this.props.multiline){ev.preventDefault();_this.commit()}else if(ev.key==="Escape"){_this.setState(function(state){return{value:_this.props.value,valueRev:state.valueRev+1,curValue:_this.props.value||"",changed:false}});_this.skipNextCommitOnBlur=true;ev.target.blur()}});_defineProperty(_this,"commit",function(){if(_this.state.changed){if(_this.props.addLinkAnchors){var valueWithLinks=MiscUtils.addLinkAnchors(_this.state.curValue);_this.props.onChange(valueWithLinks)}else{_this.props.onChange(_this.state.curValue)}}});_defineProperty(_this,"storeInitialHeight",function(el){if(el){_this.initialHeight=el.offsetHeight}});_defineProperty(_this,"startResize",function(ev){var container=ev.target.parentElement;if(!container){return}var startHeight=container.offsetHeight;var startMouseY=ev.clientY;var resizeInput=function resizeInput(event){container.style.height=Math.max(_this.initialHeight,startHeight+(event.clientY-startMouseY))+"px"};document.body.style.userSelect="none";ev.view.addEventListener("pointermove",resizeInput);ev.view.addEventListener("pointerup",function(){document.body.style.userSelect="";ev.view.removeEventListener("pointermove",resizeInput)},{once:true})});_this.skipNextCommitOnBlur=false;_this.focusEnterClick=false;_this.initialHeight=null;_this.input=null;_this.tooltipEl=null;_this.tooltipTimeout=null;return _this}_inherits(TextInput,_React$Component);return _createClass(TextInput,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){this.setDefaultValue(this.state.value,this.state.valueRev,prevState.valueRev)}},{key:"render",value:function render(){var _this2=this;var wrapperClassName=classNames({"TextInput":true,"text-input-wrapper":true,"text-input-wrapper-multiline":this.props.multiline,"text-input-wrapper-focused":this.state.focus});var preClassName=classNames({"text-input":true,"text-input-disabled":this.props.disabled,"text-input-readonly":this.props.readOnly||!this.state.curValue,"text-input-invalid":this.props.required&&!this.state.curValue});var showClear=this.state.focus&&!this.props.multiline&&!this.props.disabled&&!this.props.readOnly&&this.state.curValue;var style=_objectSpread({},this.props.style);if(showClear){style.marginRight="1.5em"}return/*#__PURE__*/React.createElement("div",{className:wrapperClassName+" "+(this.props.className||""),ref:this.storeInitialHeight},this.props.name?/*#__PURE__*/React.createElement("textarea",{className:"text-input-form-el",name:this.props.name,onChange:function onChange(){},required:this.props.required,tabIndex:"-1",value:this.state.curValue}):null,/*#__PURE__*/React.createElement("pre",{className:preClassName,contentEditable:!this.props.disabled&&!this.props.readOnly,dangerouslySetInnerHTML:{__html:this.state.value},onBlur:this.onBlur,onChange:this.onChange,onCopy:function onCopy(ev){return _this2.onCopy(ev,false)},onCut:function onCut(ev){return _this2.onCopy(ev,true)},onFocus:this.onFocus,onInput:this.onChange,onKeyDown:this.onKeyDown,onMouseDown:this.onMouseDown,onMouseLeave:this.onMouseLeave,onMouseMove:this.onMouseMove,ref:function ref(el){_this2.input=el},style:style}),!this.state.curValue?/*#__PURE__*/React.createElement("div",{className:"text-input-placeholder"},this.props.placeholder):null,this.props.multiline?/*#__PURE__*/React.createElement("div",{className:"text-input-resize-handle",onPointerDown:this.startResize}):null,showClear?/*#__PURE__*/React.createElement("div",{className:"text-input-clear-icon"},/*#__PURE__*/React.createElement(Icon,{icon:"clear",onClick:this.clear,onMouseDown:MiscUtils.killEvent})):null)}}],[{key:"getDerivedStateFromProps",value:function getDerivedStateFromProps(nextProps,state){if(state.value!==nextProps.value){return{value:nextProps.value,valueRev:state.valueRev+1,curValue:nextProps.value||"",changed:false}}return null}}])}(React.Component);_defineProperty(TextInput,"propTypes",{addLinkAnchors:PropTypes.bool,className:PropTypes.string,clearValue:PropTypes.string,disabled:PropTypes.bool,multiline:PropTypes.bool,name:PropTypes.string,onChange:PropTypes.func,placeholder:PropTypes.string,readOnly:PropTypes.bool,required:PropTypes.bool,style:PropTypes.object,value:PropTypes.string});_defineProperty(TextInput,"defaultProps",{clearValue:"",placeholder:""});export{TextInput as default};
7
+ */import React from"react";import classNames from"classnames";import PropTypes from"prop-types";import LocaleUtils from"../../utils/LocaleUtils";import MiscUtils from"../../utils/MiscUtils";import Icon from"../Icon";import"./style/TextInput.css";var TextInput=/*#__PURE__*/function(_React$Component){function TextInput(props){var _this;_classCallCheck(this,TextInput);_this=_callSuper(this,TextInput,[props]);_defineProperty(_this,"state",{focus:false,value:"",valueRev:0,curValue:"",changed:false});_defineProperty(_this,"setDefaultValue",function(value,valueRev,prevValueRef){if(valueRev>prevValueRef){_this.input.innerHTML=value.replaceAll("\n",_this.props.multiline?"<br />":"")}});_defineProperty(_this,"onCopy",function(ev,cut){ev.preventDefault();var selection=window.getSelection();var plainText=selection.toString();if(ev.clipboardData){ev.clipboardData.setData("text/plain",plainText)}if(cut){_this.clear()}});_defineProperty(_this,"clear",function(){var clearValue=_this.props.clearValue;_this.props.onChange(clearValue);_this.setState(function(state){return{curValue:_this.props.clearValue,changed:state.value!==clearValue}});_this.input.innerHTML=clearValue});_defineProperty(_this,"onChange",function(ev){var curValue=ev.target.innerText.replace(/<br\s*\/?>$/,"").replace(/\n$/,"");if(!_this.props.multiline){curValue=curValue.replace("\n","")}_this.setState({curValue:curValue,changed:true})});_defineProperty(_this,"onBlur",function(){_this.setState({focus:false});if(!_this.skipNextCommitOnBlur){_this.commit()}});_defineProperty(_this,"onFocus",function(ev){_this.setState({focus:true});window.setTimeout(function(){if(window.getSelection&&document.createRange){var range=document.createRange();range.selectNodeContents(ev.target);var sel=window.getSelection();sel.removeAllRanges();sel.addRange(range)}else if(document.body.createTextRange){var _range=document.body.createTextRange();_range.moveToElementText(ev.target);_range.select()}},1)});_defineProperty(_this,"onMouseDown",function(ev){var el=document.elementFromPoint(ev.clientX,ev.clientY);if((el===null||el===void 0?void 0:el.nodeName)==="A"&&ev.ctrlKey){window.open(el.href,el.target)}});_defineProperty(_this,"onMouseMove",function(ev){var isTouch="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0;clearTimeout(_this.tooltipTimeout);var editable=!_this.props.disabled&&!_this.props.readOnly;if(!isTouch&&editable&&ev.target.nodeName==="A"){var rect=ev.target.getBoundingClientRect();var left=rect.left+window.scrollX;var bottom=rect.bottom+window.scrollY+2;_this.tooltipTimeout=setTimeout(function(){if(!_this.tooltipEl){_this.tooltipEl=document.createElement("span");_this.tooltipEl.className="text-input-link-tooltip";_this.tooltipEl.innerHTML=LocaleUtils.tr("misc.ctrlclickhint");_this.tooltipEl.style.position="absolute";_this.tooltipEl.style.zIndex=10000000000;document.body.appendChild(_this.tooltipEl)}_this.tooltipEl.style.left=left+"px";_this.tooltipEl.style.top=bottom+"px";_this.tooltipTimeout=null},250)}else if(_this.tooltipEl){document.body.removeChild(_this.tooltipEl);_this.tooltipEl=null}});_defineProperty(_this,"onMouseLeave",function(){clearTimeout(_this.tooltipTimeout);if(_this.tooltipEl){document.body.removeChild(_this.tooltipEl);_this.tooltipEl=null}});_defineProperty(_this,"onKeyDown",function(ev){if(ev.key==="Enter"&&!_this.props.multiline){ev.preventDefault();_this.commit()}else if(ev.key==="Escape"){_this.setState(function(state){return{value:_this.props.value,valueRev:state.valueRev+1,curValue:_this.props.value||"",changed:false}});_this.skipNextCommitOnBlur=true;ev.target.blur()}});_defineProperty(_this,"commit",function(){if(_this.state.changed){if(_this.props.addLinkAnchors){var valueWithLinks=MiscUtils.addLinkAnchors(_this.state.curValue);_this.props.onChange(valueWithLinks)}else{_this.props.onChange(_this.state.curValue)}}});_defineProperty(_this,"storeInitialHeight",function(el){if(el){_this.initialHeight=el.offsetHeight}});_defineProperty(_this,"startResize",function(ev){var container=ev.target.parentElement;if(!container){return}var startHeight=container.offsetHeight;var startMouseY=ev.clientY;var resizeInput=function resizeInput(event){container.style.height=Math.max(_this.initialHeight,startHeight+(event.clientY-startMouseY))+"px"};document.body.style.userSelect="none";ev.view.addEventListener("pointermove",resizeInput);ev.view.addEventListener("pointerup",function(){document.body.style.userSelect="";ev.view.removeEventListener("pointermove",resizeInput)},{once:true})});_this.skipNextCommitOnBlur=false;_this.focusEnterClick=false;_this.initialHeight=null;_this.input=null;_this.tooltipEl=null;_this.tooltipTimeout=null;return _this}_inherits(TextInput,_React$Component);return _createClass(TextInput,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){this.setDefaultValue(this.state.value,this.state.valueRev,prevState.valueRev)}},{key:"render",value:function render(){var _this2=this;var wrapperClassName=classNames({"TextInput":true,"text-input-wrapper":true,"text-input-wrapper-multiline":this.props.multiline,"text-input-wrapper-focused":this.state.focus});var preClassName=classNames({"text-input":true,"text-input-disabled":this.props.disabled,"text-input-readonly":this.props.readOnly||!this.state.curValue,"text-input-invalid":this.props.required&&!this.state.curValue});var showClear=this.state.focus&&!this.props.multiline&&!this.props.disabled&&!this.props.readOnly&&this.state.curValue;var style=_objectSpread({},this.props.style);if(showClear){style.marginRight="1.5em"}return/*#__PURE__*/React.createElement("div",{className:wrapperClassName+" "+(this.props.className||""),ref:this.storeInitialHeight},this.props.name?/*#__PURE__*/React.createElement("textarea",{className:"text-input-form-el",name:this.props.name,onChange:function onChange(){},required:this.props.required,tabIndex:"-1",value:this.state.curValue}):null,/*#__PURE__*/React.createElement("pre",{className:preClassName,contentEditable:!this.props.disabled&&!this.props.readOnly,dangerouslySetInnerHTML:{__html:this.state.value.replaceAll("\n",this.props.multiline?"<br />":"")},onBlur:this.onBlur,onChange:this.onChange,onCopy:function onCopy(ev){return _this2.onCopy(ev,false)},onCut:function onCut(ev){return _this2.onCopy(ev,true)},onFocus:this.onFocus,onInput:this.onChange,onKeyDown:this.onKeyDown,onMouseDown:this.onMouseDown,onMouseLeave:this.onMouseLeave,onMouseMove:this.onMouseMove,ref:function ref(el){_this2.input=el},style:style}),!this.state.curValue?/*#__PURE__*/React.createElement("div",{className:"text-input-placeholder"},this.props.placeholder):null,this.props.multiline?/*#__PURE__*/React.createElement("div",{className:"text-input-resize-handle",onPointerDown:this.startResize}):null,showClear?/*#__PURE__*/React.createElement("div",{className:"text-input-clear-icon"},/*#__PURE__*/React.createElement(Icon,{icon:"clear",onClick:this.clear,onMouseDown:MiscUtils.killEvent})):null)}}],[{key:"getDerivedStateFromProps",value:function getDerivedStateFromProps(nextProps,state){if(state.value!==nextProps.value){return{value:nextProps.value,valueRev:state.valueRev+1,curValue:nextProps.value||"",changed:false}}return null}}])}(React.Component);_defineProperty(TextInput,"propTypes",{addLinkAnchors:PropTypes.bool,className:PropTypes.string,clearValue:PropTypes.string,disabled:PropTypes.bool,multiline:PropTypes.bool,name:PropTypes.string,onChange:PropTypes.func,placeholder:PropTypes.string,readOnly:PropTypes.bool,required:PropTypes.bool,style:PropTypes.object,value:PropTypes.string});_defineProperty(TextInput,"defaultProps",{clearValue:"",placeholder:""});export{TextInput as default};
@@ -0,0 +1,7 @@
1
+ div.DateTimeInput > input[type=date] {
2
+ min-width: 16ch;
3
+ }
4
+
5
+ div.DateTimeInput > input[type=time] {
6
+ min-width: 11ch;
7
+ }
@@ -21,6 +21,11 @@ div.number-input > input {
21
21
  text-align: right;
22
22
  }
23
23
 
24
+ div.number-input > input:read-only {
25
+ outline: none;
26
+ caret-color: transparent;
27
+ }
28
+
24
29
  div.number-input-disabled > span.icon {
25
30
  color: var(--text-color-disabled);
26
31
  cursor: default;
package/icons/view.svg ADDED
@@ -0,0 +1,90 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ version="1.1"
4
+ width="24"
5
+ height="24"
6
+ viewBox="0 0 24 24"
7
+ id="svg6"
8
+ sodipodi:docname="view.svg"
9
+ inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
10
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
11
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ xmlns:svg="http://www.w3.org/2000/svg"
14
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
15
+ xmlns:cc="http://creativecommons.org/ns#"
16
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
17
+ <metadata
18
+ id="metadata12">
19
+ <rdf:RDF>
20
+ <cc:Work
21
+ rdf:about="">
22
+ <dc:format>image/svg+xml</dc:format>
23
+ <dc:type
24
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
25
+ <dc:title>uniE251</dc:title>
26
+ </cc:Work>
27
+ </rdf:RDF>
28
+ </metadata>
29
+ <defs
30
+ id="defs10" />
31
+ <sodipodi:namedview
32
+ pagecolor="#ffffff"
33
+ bordercolor="#666666"
34
+ borderopacity="1"
35
+ objecttolerance="10"
36
+ gridtolerance="10"
37
+ guidetolerance="10"
38
+ inkscape:pageopacity="0"
39
+ inkscape:pageshadow="2"
40
+ inkscape:window-width="1920"
41
+ inkscape:window-height="1052"
42
+ id="namedview8"
43
+ showgrid="true"
44
+ inkscape:zoom="23.40103"
45
+ inkscape:cx="13.354113"
46
+ inkscape:cy="14.080577"
47
+ inkscape:window-x="0"
48
+ inkscape:window-y="0"
49
+ inkscape:window-maximized="1"
50
+ inkscape:current-layer="g7"
51
+ inkscape:document-rotation="0"
52
+ inkscape:showpageshadow="2"
53
+ inkscape:pagecheckerboard="0"
54
+ inkscape:deskcolor="#d1d1d1">
55
+ <inkscape:grid
56
+ type="xygrid"
57
+ id="grid831"
58
+ originx="0"
59
+ originy="0"
60
+ spacingy="1"
61
+ spacingx="1"
62
+ units="px" />
63
+ </sodipodi:namedview>
64
+ <title
65
+ id="title2">uniE251</title>
66
+ <g
67
+ id="path3"
68
+ style="opacity:1">
69
+ <path
70
+ id="path9"
71
+ style="baseline-shift:baseline;display:inline;overflow:visible;vector-effect:none;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
72
+ d="m 12,1.449 a 0.525,0.525 0 0 0 -0.46875,0.2890624 l -1.6875,3.3730469 a 0.6489357,0.6489357 0 0 0 0.582031,0.9394531 H 11.25 V 9.095484 L 1.4414062,13.999781 5.8828125,16.220484 4,17.16189 3.4355469,16.822047 C 3.0226479,16.572585 2.5234985,16.344832 2.3359375,16.722437 l -1.2617187,2.615235 c -0.1879551,0.389661 -0.00868,0.898731 0.4199218,0.839843 l 4.3691406,-0.599609 c 0.714357,-0.09815 1.2799462,-0.516611 0.5800782,-0.939453 L 5.5175781,18.079859 7.5605469,17.058375 12,19.279078 l 4.439453,-2.220703 2.042969,1.021484 -0.925781,0.558594 c -0.699868,0.422842 -0.134279,0.841303 0.580078,0.939453 l 4.36914,0.599609 c 0.4286,0.05889 0.607877,-0.450182 0.419922,-0.839843 l -1.261719,-2.615235 c -0.18756,-0.377605 -0.68671,-0.149852 -1.099609,0.09961 L 20,17.16189 18.117188,16.220484 22.558594,13.999781 12.75,9.095484 V 6.0505624 h 0.824219 A 0.6489357,0.6489357 0 0 0 14.15625,5.1111093 L 12.46875,1.7380624 A 0.525,0.525 0 0 0 12,1.449 Z M 11.25,9.654078 V 13.53689 L 6.4414062,15.941187 6.1113281,15.777125 2.5566406,13.999781 Z m 1.5,0 8.693359,4.345703 -3.554687,1.777344 -0.330078,0.164062 L 12.75,13.53689 Z M 12,14.837672 15.882812,16.779078 12,18.720484 8.1171875,16.779078 Z" />
73
+ <g
74
+ id="g7" />
75
+ </g>
76
+ <g
77
+ id="path3-1-9"
78
+ style="opacity:1">
79
+ <g
80
+ id="g5"
81
+ transform="translate(-0.19985636)" />
82
+ </g>
83
+ <g
84
+ id="path3-1-9-6"
85
+ transform="matrix(-1,0,0,1,24.000001,0)">
86
+ <g
87
+ id="g5-6"
88
+ transform="translate(-0.19985636)" />
89
+ </g>
90
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qwc2",
3
- "version": "2025.07.29",
3
+ "version": "2025.08.06",
4
4
  "description": "QGIS Web Client",
5
5
  "author": "Sourcepole AG",
6
6
  "license": "BSD-2-Clause",
@@ -11,10 +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",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
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,_this.props.taskData.feature)}else{_this.changeSelectedLayer(_this.state.selectedLayer)}_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
15
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
16
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
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
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
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 feature=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var curConfig=_this.props.theme&&_this.props.theme.editConfig&&selectedLayer?_this.props.theme.editConfig[selectedLayer]:null;_this.props.setEditContext("Editing",{action:"Pick",feature:feature,geomType:(curConfig===null||curConfig===void 0?void 0:curConfig.geomType)||null,permissions:(curConfig===null||curConfig===void 0?void 0:curConfig.permissions)||{}});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
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])}}else if(this.state.selectedLayer){this.changeSelectedLayer(null)}}// If click point changed and in pick mode with a selected layer, trigger a pick
19
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];this.props.iface.getFeature(editConfig,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.
20
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)});
@@ -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 scale=Math.round(MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom));_this.props.iface.getFeature(editConfig,pos,_this.props.map.projection,scale,96,function(featureCollection){if(featureCollection&&!isEmpty(featureCollection.features)){_this.setState(function(state){var newPickedFeatures=Object.fromEntries(Object.entries(_objectSpread(_objectSpread({},state.pickedFeatures),featureCollection.features.reduce(function(res,feature){return _objectSpread(_objectSpread({},res),{},_defineProperty({},layerId+"::"+feature.id,feature))},{}))).sort(function(a,b){var partsA=a[0].split("::");var partsB=b[0].split("::");var diff=layerOrder.indexOf(partsB[0])-layerOrder.indexOf(partsA[0]);return diff===0?partsA[1].localeCompare(partsB[1]):diff}));var selectedFeature=state.pendingRequests<=1&&!state.selectedFeature?Object.keys(newPickedFeatures)[0]:"";return{pickedFeatures:newPickedFeatures,pendingRequests:state.pendingRequests-1,selectedFeature:selectedFeature}})}else{_this.setState(function(state){var _Object$keys$;var selectedFeature=state.pendingRequests<=1&&!state.selectedFeature?(_Object$keys$=Object.keys(state.pickedFeatures)[0])!==null&&_Object$keys$!==void 0?_Object$keys$:"":"";return{pendingRequests:state.pendingRequests-1,selectedFeature:selectedFeature}})}},(_this$props$filter$fi=_this.props.filter.filterParams)===null||_this$props$filter$fi===void 0?void 0:_this$props$filter$fi[sublayer.name],_this.props.filter.filterGeom)});_this.setState({pendingRequests:pendingRequests,pickedFeatures:{},selectedFeature:""})});_defineProperty(_this,"setSelectedFeature",function(ev){_this.setState({selectedFeature:ev.target.value})});_defineProperty(_this,"onWindowClose",function(){_this.clearResults();if(_this.props.exitTaskOnResultsClose){_this.props.setCurrentTask(null)}});_defineProperty(_this,"clearResults",function(){if(!_this.props.editContext.changed){_this.setState(FeatureForm.defaultState)}});_defineProperty(_this,"updatePickedFeatures",function(newfeature){_this.setState(function(state){return{pickedFeatures:Object.entries(state.pickedFeatures).reduce(function(res,_ref3){var _ref4=_slicedToArray(_ref3,2),key=_ref4[0],feature=_ref4[1];res[key]=feature.id===newfeature.id?newfeature:feature;return res},{})}})});_this.state=FeatureForm.defaultState;return _this}_inherits(FeatureForm,_React$Component);return _createClass(FeatureForm,[{key:"componentDidMount",value:function componentDidMount(){if(this.props.enabled){this.props.setEditContext("FeatureForm",{action:"Pick"})}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.props.enabled&&this.props.theme&&!prevProps.theme){var startupParams=this.props.startupParams;var haveIc=["1","true"].includes((startupParams.ic||"").toLowerCase());var c=(startupParams.c||"").split(/[;,]/g).map(function(x){return parseFloat(x)||0});if(haveIc&&c.length===2){var mapCrs=this.props.theme.mapCrs;this.queryFeatures(CoordinatesUtils.reproject(c,startupParams.crs||mapCrs,mapCrs))}}else if(this.props.theme!==prevProps.theme){this.clearResults()}else if(!this.props.enabled&&prevProps.enabled){if(this.props.clearResultsOnClose){this.clearResults()}}if(this.props.enabled&&!prevProps.enabled){this.props.setEditContext("FeatureForm",{action:"Pick"})}var isCurrentContext=this.props.editContext.id===this.props.currentEditContext;if(this.props.enabled&&isCurrentContext&&!this.props.editContext.changed&&this.state.pendingRequests===0){var clickPoint=this.queryPoint(prevProps);if(clickPoint){this.queryFeatures(clickPoint)}}if(this.props.enabled&&this.state.selectedFeature!==prevState.selectedFeature){var feature=this.state.pickedFeatures?this.state.pickedFeatures[this.state.selectedFeature]:null;var curLayerId=this.state.selectedFeature.split("::")[0];var curConfig=this.props.theme.editConfig[curLayerId]||{};var canEditGeometry=["Point","LineString","Polygon"].includes((curConfig.geomType||"").replace(/^Multi/,"").replace(/Z$/,""));var editPermissions=curConfig.permissions||{};this.props.setEditContext("FeatureForm",{action:"Pick",feature:feature,changed:false,geomType:curConfig.geomType||null,geomReadOnly:editPermissions.updatable===false||!canEditGeometry})}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,/** Whether to clear the identify results when exiting the identify tool. */clearResultsOnClose:PropTypes.bool,click:PropTypes.object,currentEditContext:PropTypes.string,editContext:PropTypes.object,enabled:PropTypes.bool,/** Whether to clear the task when the results window is closed. */exitTaskOnResultsClose:PropTypes.bool,filter:PropTypes.object,/** Default window geometry with size, position and docking status. Positive position values (including '0') are related to top (InitialY) and left (InitialX), negative values (including '-0') to bottom (InitialY) and right (InitialX). */geometry:PropTypes.shape({initialWidth:PropTypes.number,initialHeight:PropTypes.number,initialX:PropTypes.number,initialY:PropTypes.number,initiallyDocked:PropTypes.bool,side:PropTypes.string}),iface:PropTypes.object,layers:PropTypes.array,map:PropTypes.object,setCurrentTask:PropTypes.func,setEditContext:PropTypes.func,startupParams:PropTypes.object,theme:PropTypes.object});_defineProperty(FeatureForm,"defaultProps",{clearResultsOnClose:true,geometry:{initialWidth:320,initialHeight:480,initialX:0,initialY:0,initiallyDocked:false,side:"left"}});_defineProperty(FeatureForm,"defaultState",{pendingRequests:0,pickedFeatures:null,selectedFeature:""});export default(function(){var iface=arguments.length>0&&arguments[0]!==undefined?arguments[0]:EditingInterface;return connect(function(state){var enabled=state.task.id==="FeatureForm"||state.task.identifyEnabled&&ConfigUtils.getConfigProp("identifyTool",state.theme.current,"Identify")==="FeatureForm";return{click:state.map.click||{modifiers:{}},enabled:enabled,editContext:state.editing.contexts.FeatureForm||{},currentEditContext:state.editing.currentContext,iface:iface,layers:state.layers.flat,filter:state.layers.filter,map:state.map,theme:state.theme.current,startupParams:state.localConfig.startupParams}},{setCurrentTask:setCurrentTask,clearEditContext:clearEditContext,setEditContext:setEditContext})(FeatureForm)});
21
+ return}var path=[];var sublayer=null;var mapScale=MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom);var layer=_this.props.layers.find(function(l){return l.role===LayerRole.THEME&&(sublayer=LayerUtils.searchSubLayer(l,"name",layerId,path))});if(!layer||!sublayer||!LayerUtils.sublayerVisible(layer,path)||!LayerUtils.layerScaleInRange(sublayer,mapScale)){return}var layerOrder=layer.params.LAYERS.split(",");++pendingRequests;var scale=Math.round(MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom));_this.props.iface.getFeature(editConfig,pos,_this.props.map.projection,scale,96,function(featureCollection){if(featureCollection&&!isEmpty(featureCollection.features)){_this.setState(function(state){var newPickedFeatures=Object.fromEntries(Object.entries(_objectSpread(_objectSpread({},state.pickedFeatures),featureCollection.features.reduce(function(res,feature){return _objectSpread(_objectSpread({},res),{},_defineProperty({},layerId+"::"+feature.id,feature))},{}))).sort(function(a,b){var partsA=a[0].split("::");var partsB=b[0].split("::");var diff=layerOrder.indexOf(partsB[0])-layerOrder.indexOf(partsA[0]);return diff===0?partsA[1].localeCompare(partsB[1]):diff}));var selectedFeature=state.pendingRequests<=1&&!state.selectedFeature?Object.keys(newPickedFeatures)[0]:"";return{pickedFeatures:newPickedFeatures,pendingRequests:state.pendingRequests-1,selectedFeature:selectedFeature}})}else{_this.setState(function(state){var _Object$keys$;var selectedFeature=state.pendingRequests<=1&&!state.selectedFeature?(_Object$keys$=Object.keys(state.pickedFeatures)[0])!==null&&_Object$keys$!==void 0?_Object$keys$:"":"";return{pendingRequests:state.pendingRequests-1,selectedFeature:selectedFeature}})}},(_this$props$filter$fi=_this.props.filter.filterParams)===null||_this$props$filter$fi===void 0?void 0:_this$props$filter$fi[sublayer.name],_this.props.filter.filterGeom)});_this.setState({pendingRequests:pendingRequests,pickedFeatures:{},selectedFeature:""})});_defineProperty(_this,"setSelectedFeature",function(ev){_this.setState({selectedFeature:ev.target.value})});_defineProperty(_this,"onWindowClose",function(){_this.clearResults();if(_this.props.exitTaskOnResultsClose){_this.props.setCurrentTask(null)}});_defineProperty(_this,"clearResults",function(){if(!_this.props.editContext.changed){_this.setState(FeatureForm.defaultState)}});_defineProperty(_this,"updatePickedFeatures",function(newfeature){_this.setState(function(state){return{pickedFeatures:Object.entries(state.pickedFeatures).reduce(function(res,_ref3){var _ref4=_slicedToArray(_ref3,2),key=_ref4[0],feature=_ref4[1];res[key]=feature.id===newfeature.id?newfeature:feature;return res},{})}})});_this.state=FeatureForm.defaultState;return _this}_inherits(FeatureForm,_React$Component);return _createClass(FeatureForm,[{key:"componentDidMount",value:function componentDidMount(){if(this.props.enabled){this.props.setEditContext("FeatureForm",{action:"Pick"})}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.props.enabled&&this.props.theme&&!prevProps.theme){var startupParams=this.props.startupParams;var haveIc=["1","true"].includes((startupParams.ic||"").toLowerCase());var c=(startupParams.c||"").split(/[;,]/g).map(function(x){return parseFloat(x)||0});if(haveIc&&c.length===2){var mapCrs=this.props.theme.mapCrs;this.queryFeatures(CoordinatesUtils.reproject(c,startupParams.crs||mapCrs,mapCrs))}}else if(this.props.theme!==prevProps.theme){this.clearResults()}else if(!this.props.enabled&&prevProps.enabled){if(this.props.clearResultsOnClose){this.clearResults()}}if(this.props.enabled&&!prevProps.enabled){this.props.setEditContext("FeatureForm",{action:"Pick"})}var isCurrentContext=this.props.editContext.id===this.props.currentEditContext;if(this.props.enabled&&isCurrentContext&&!this.props.editContext.changed&&this.state.pendingRequests===0){var clickPoint=this.queryPoint(prevProps);if(clickPoint){this.queryFeatures(clickPoint)}}if(this.props.enabled&&this.state.selectedFeature!==prevState.selectedFeature){var feature=this.state.pickedFeatures?this.state.pickedFeatures[this.state.selectedFeature]:null;var curLayerId=this.state.selectedFeature.split("::")[0];var curConfig=this.props.theme.editConfig[curLayerId]||{};var canEditGeometry=["Point","LineString","Polygon"].includes((curConfig.geomType||"").replace(/^Multi/,"").replace(/Z$/,""));var editPermissions=curConfig.permissions||{};this.props.setEditContext("FeatureForm",{action:"Pick",feature:feature,changed:false,geomType:curConfig.geomType||null,geomReadOnly:editPermissions.updatable===false||!canEditGeometry,permissions:(curConfig===null||curConfig===void 0?void 0:curConfig.permissions)||{}})}if(!this.props.enabled&&prevProps.enabled){this.props.clearEditContext("FeatureForm");this.setState(FeatureForm.defaultState)}}},{key:"render",value:function render(){var _this2=this;var resultWindow=null;if(this.state.pickedFeatures!==null){var body=null;if(this.state.pendingRequests>0){body=/*#__PURE__*/React.createElement("div",{className:"feature-query-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("featureform.querying")))}else if(isEmpty(this.state.pickedFeatures)){body=/*#__PURE__*/React.createElement("div",{className:"feature-query-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("featureform.noresults")))}else{var featureText=LocaleUtils.tr("featureform.feature");var curLayerId=this.state.selectedFeature.split("::")[0];var curConfig=this.props.theme.editConfig[curLayerId];body=/*#__PURE__*/React.createElement("div",{className:"feature-query-body",role:"body"},Object.keys(this.state.pickedFeatures).length>1?/*#__PURE__*/React.createElement("div",{className:"feature-query-selection"},/*#__PURE__*/React.createElement("select",{onChange:this.setSelectedFeature,value:this.state.selectedFeature},Object.entries(this.state.pickedFeatures).map(function(_ref5){var _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,/** Whether to clear the identify results when exiting the identify tool. */clearResultsOnClose:PropTypes.bool,click:PropTypes.object,currentEditContext:PropTypes.string,editContext:PropTypes.object,enabled:PropTypes.bool,/** Whether to clear the task when the results window is closed. */exitTaskOnResultsClose:PropTypes.bool,filter:PropTypes.object,/** Default window geometry with size, position and docking status. Positive position values (including '0') are related to top (InitialY) and left (InitialX), negative values (including '-0') to bottom (InitialY) and right (InitialX). */geometry:PropTypes.shape({initialWidth:PropTypes.number,initialHeight:PropTypes.number,initialX:PropTypes.number,initialY:PropTypes.number,initiallyDocked:PropTypes.bool,side:PropTypes.string}),iface:PropTypes.object,layers:PropTypes.array,map:PropTypes.object,setCurrentTask:PropTypes.func,setEditContext:PropTypes.func,startupParams:PropTypes.object,theme:PropTypes.object});_defineProperty(FeatureForm,"defaultProps",{clearResultsOnClose:true,geometry:{initialWidth:320,initialHeight:480,initialX:0,initialY:0,initiallyDocked:false,side:"left"}});_defineProperty(FeatureForm,"defaultState",{pendingRequests:0,pickedFeatures:null,selectedFeature:""});export default(function(){var iface=arguments.length>0&&arguments[0]!==undefined?arguments[0]:EditingInterface;return connect(function(state){var enabled=state.task.id==="FeatureForm"||state.task.identifyEnabled&&ConfigUtils.getConfigProp("identifyTool",state.theme.current,"Identify")==="FeatureForm";return{click:state.map.click||{modifiers:{}},enabled:enabled,editContext:state.editing.contexts.FeatureForm||{},currentEditContext:state.editing.currentContext,iface:iface,layers:state.layers.flat,filter:state.layers.filter,map:state.map,theme:state.theme.current,startupParams:state.localConfig.startupParams}},{setCurrentTask:setCurrentTask,clearEditContext:clearEditContext,setEditContext:setEditContext})(FeatureForm)});
@@ -9,7 +9,7 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
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,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",onPointerDown:_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("pointerup",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
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"}),Object.keys(styles||{}).length>1?/*#__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",onPointerDown:_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("pointerup",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
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});var style={};if(_this.props.side==="left"){style.left=0}else{style.right=0}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",style:style},_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;\">&nbsp;</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
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+"\" style=\"max-width: 100%\"/></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);
@@ -1,4 +1,4 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _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 ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
1
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _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 2017-2024 Sourcepole AG
3
3
  * All rights reserved.
4
4
  *
@@ -6,20 +6,21 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */import React from"react";import{connect}from"react-redux";import{TextEncoder,TextDecoder}from"@kayahr/text-encoding";import axios from"axios";import dayjs from"dayjs";import FileSaver from"file-saver";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{LayerRole}from"../actions/layers";import{setSnappingConfig}from"../actions/map";import Icon from"../components/Icon";import PrintSelection from"../components/PrintSelection";import SideBar from"../components/SideBar";import NumberInput from"../components/widgets/NumberInput";import Spinner from"../components/widgets/Spinner";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import{explodeDxf,implodeDxf,mergeDxf}from"../utils/DxfUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import"./style/MapExport.css";import"@kayahr/text-encoding/encodings/windows-1252";/**
8
8
  * Allows exporting a selected portion of the map to a variety of formats.
9
- */var MapExport=/*#__PURE__*/function(_React$Component){function MapExport(props){var _this;_classCallCheck(this,MapExport);_this=_callSuper(this,MapExport,[props]);_defineProperty(_this,"state",{extents:[],exporting:false,availableFormats:[],selectedFormat:null,selectedFormatConfiguration:"",exportProjection:null,scale:null,pageSize:null,dpi:96});_defineProperty(_this,"changeFormat",function(ev){var _this$props$formatCon,_formatConfigurations,_formatConfigurations2;var selectedFormat=ev.target.value;var formatConfigurations=((_this$props$formatCon=_this.props.formatConfiguration)===null||_this$props$formatCon===void 0?void 0:_this$props$formatCon[selectedFormat.split(";")[0]])||[];_this.setState({selectedFormat:selectedFormat,selectedFormatConfiguration:(_formatConfigurations=formatConfigurations[0])===null||_formatConfigurations===void 0?void 0:_formatConfigurations.name,exportProjection:_this.getExportProjection((_formatConfigurations2=formatConfigurations[0])===null||_formatConfigurations2===void 0?void 0:_formatConfigurations2.projections)})});_defineProperty(_this,"setSelectedFormatConfiguration",function(ev){var _this$props$formatCon2;var selectedFormatConfiguration=ev.target.value;var formatConfigurations=((_this$props$formatCon2=_this.props.formatConfiguration)===null||_this$props$formatCon2===void 0?void 0:_this$props$formatCon2[_this.state.selectedFormat.split(";")[0]])||[];var formatConfiguration=formatConfigurations.find(function(entry){return entry.name===selectedFormatConfiguration});_this.setState({selectedFormatConfiguration:selectedFormatConfiguration,exportProjection:_this.getExportProjection(formatConfiguration.projections)})});_defineProperty(_this,"getExportProjection",function(projections){if(isEmpty(projections)){return _this.props.map.projection}else{return projections.indexOf(_this.props.map.projection)!==-1?_this.props.map.projection:projections[0]}});_defineProperty(_this,"changeScale",function(value){_this.setState({scale:Math.max(1,parseInt(value,10)||0)})});_defineProperty(_this,"changeResolution",function(ev){_this.setState({dpi:parseInt(ev.target.value,10)||0})});_defineProperty(_this,"renderBody",function(){var _this$props$formatCon3;if(!_this.props.theme||!_this.state.selectedFormat){return null}var formatMap={"image/jpeg":"JPEG","image/png":"PNG","image/png; mode=16bit":"PNG 16bit","image/png; mode=8bit":"PNG 8bit","image/png; mode=1bit":"PNG 1bit","image/geotiff":"GeoTIFF","image/tiff":"GeoTIFF","application/dxf":"DXF","application/pdf":"GeoPDF"};var formatConfigurations=((_this$props$formatCon3=_this.props.formatConfiguration)===null||_this$props$formatCon3===void 0?void 0:_this$props$formatCon3[_this.state.selectedFormat.split(";")[0]])||[];var formatConfiguration=formatConfigurations.find(function(entry){return entry.name===_this.state.selectedFormatConfiguration});var scaleChooser=null;if(!isEmpty(_this.props.allowedScales)){scaleChooser=/*#__PURE__*/React.createElement("select",{onChange:_this.changeScale,value:_this.state.scale||""},/*#__PURE__*/React.createElement("option",{hidden:true,value:_this.state.scale||""},_this.state.scale||""),_this.props.allowedScales.map(function(scale){return/*#__PURE__*/React.createElement("option",{key:scale,value:scale},"1 : ",scale)}))}else if(_this.props.allowedScales!==false){scaleChooser=/*#__PURE__*/React.createElement(NumberInput,{min:1,mobile:true,onChange:_this.changeScale,prefix:"1 : ",value:_this.state.scale||null})}return/*#__PURE__*/React.createElement("div",{className:"mapexport-body"},/*#__PURE__*/React.createElement("form",{action:"#",method:"POST",onSubmit:_this["export"],ref:function ref(el){_this.form=el}},/*#__PURE__*/React.createElement("table",{className:"options-table"},/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.format")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:_this.changeFormat,value:_this.state.selectedFormat},_this.state.availableFormats.map(function(format){return/*#__PURE__*/React.createElement("option",{key:format,value:format},formatMap[format]||format)})))),formatConfigurations.length>1?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.configuration")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:_this.setSelectedFormatConfiguration,value:_this.state.selectedFormatConfiguration},formatConfigurations.map(function(config){return/*#__PURE__*/React.createElement("option",{key:config.name,value:config.name},config.labelMsgId?LocaleUtils.tr(config.labelMsgId):config.name)})))):null,!isEmpty(_this.props.pageSizes)?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.size")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.setState({pageSize:ev.target.value||null})},value:_this.state.pageSize||""},/*#__PURE__*/React.createElement("option",{value:""},LocaleUtils.tr("mapexport.usersize")),_this.props.pageSizes.map(function(entry,idx){return/*#__PURE__*/React.createElement("option",{key:"size_"+idx,value:idx},entry.name)})))):null,scaleChooser&&_this.state.pageSize!==null?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.scale")),/*#__PURE__*/React.createElement("td",null,scaleChooser)):null,_this.props.dpis?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.resolution")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:_this.changeResolution,value:_this.state.dpi},_this.props.dpis.map(function(dpi){return/*#__PURE__*/React.createElement("option",{key:dpi+"dpi",value:dpi},dpi+" dpi")})))):null,((formatConfiguration===null||formatConfiguration===void 0?void 0:formatConfiguration.projections)||[]).length>1?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.projection")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.setState({exportProjection:ev.target.value})},value:_this.state.exportProjection},formatConfiguration.projections.map(function(proj){return/*#__PURE__*/React.createElement("option",{key:proj,value:proj},proj)})))):null)),/*#__PURE__*/React.createElement("div",{className:"button-bar"},/*#__PURE__*/React.createElement("button",{className:"button",disabled:_this.state.exporting||isEmpty(_this.state.extents),type:"submit"},_this.state.exporting?/*#__PURE__*/React.createElement("span",{className:"mapexport-wait"},/*#__PURE__*/React.createElement(Spinner,null)," ",LocaleUtils.tr("mapexport.wait")):LocaleUtils.tr("mapexport.submit")))))});_defineProperty(_this,"renderPrintSelection",function(){if(_this.state.pageSize!==null){var pageSize=_this.props.pageSizes[_this.state.pageSize];var frame={width:pageSize.width,height:pageSize.height};return/*#__PURE__*/React.createElement(PrintSelection,{allowRotation:false,allowScaling:_this.props.allowedScales!==false,center:_this.props.map.center,fixedFrame:frame,geometryChanged:_this.geometryChanged,key:"PrintSelection",scale:_this.state.scale})}else{return/*#__PURE__*/React.createElement(PrintSelection,{allowRotation:false,geometryChanged:_this.geometryChanged,key:"PrintSelection"})}});_defineProperty(_this,"onShow",function(){var _this$props$formatCon4,_formatConfigurations3,_formatConfigurations4;var scale=Math.round(MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom)*_this.props.defaultScaleFactor);if(!isEmpty(_this.props.allowedScales)){var closestVal=Math.abs(scale-_this.props.allowedScales[0]);var closestIdx=0;for(var i=1;i<_this.props.allowedScales.length;++i){var currVal=Math.abs(scale-_this.props.allowedScales[i]);if(currVal<closestVal){closestVal=currVal;closestIdx=i}}scale=_this.props.allowedScales[closestIdx]}var availableFormats=_this.props.theme.availableFormats;if(!isEmpty(_this.props.allowedFormats)){availableFormats=_this.props.allowedFormats.filter(function(fmt){return availableFormats.includes(fmt)})}var selectedFormat=_this.props.defaultFormat&&availableFormats.includes(_this.props.defaultFormat)?_this.props.defaultFormat:availableFormats[0];var formatConfigurations=((_this$props$formatCon4=_this.props.formatConfiguration)===null||_this$props$formatCon4===void 0?void 0:_this$props$formatCon4[selectedFormat.split(";")[0]])||[];_this.setState({scale:scale,availableFormats:availableFormats,selectedFormat:selectedFormat,selectedFormatConfiguration:(_formatConfigurations3=formatConfigurations[0])===null||_formatConfigurations3===void 0?void 0:_formatConfigurations3.name,exportProjection:_this.getExportProjection((_formatConfigurations4=formatConfigurations[0])===null||_formatConfigurations4===void 0?void 0:_formatConfigurations4.projections)});_this.props.setSnappingConfig(false,false)});_defineProperty(_this,"onHide",function(){_this.setState({extents:[],width:0,height:0,scale:null,pageSize:null})});_defineProperty(_this,"geometryChanged",function(center,extents,rotation,scale){_this.setState(function(state){return{extents:extents,scale:scale!==null&&scale!==void 0?scale:state.scale}})});_defineProperty(_this,"export",function(ev){var _this$props$formatCon5,_this$state$extents$a;ev.preventDefault();_this.setState({exporting:true});var format=_this.state.selectedFormat.split(";")[0];var formatConfiguration=(((_this$props$formatCon5=_this.props.formatConfiguration)===null||_this$props$formatCon5===void 0?void 0:_this$props$formatCon5[format])||[]).find(function(entry){return entry.name===_this.state.selectedFormatConfiguration});var version=_this.props.theme.version;var crs=_this.state.exportProjection;var extent=CoordinatesUtils.reprojectBbox((_this$state$extents$a=_this.state.extents.at(0))!==null&&_this$state$extents$a!==void 0?_this$state$extents$a:[0,0,0,0],_this.props.map.projection,crs);var formattedExtent=CoordinatesUtils.getAxisOrder(crs).substring(0,2)==="ne"&&version==="1.3.0"?extent[1]+","+extent[0]+","+extent[3]+","+extent[2]:extent.join(",");var getPixelFromCoordinate=MapUtils.getHook(MapUtils.GET_PIXEL_FROM_COORDINATES_HOOK);var p1=getPixelFromCoordinate(extent.slice(0,2));var p2=getPixelFromCoordinate(extent.slice(2,4));var width=Math.round(Math.abs(p1[0]-p2[0])*_this.state.dpi/96);var height=Math.round(Math.abs(p1[1]-p2[1])*_this.state.dpi/96);var ext=format.split("/").pop();var timestamp=dayjs(new Date).format("YYYYMMDD_HHmmss");var fileName=_this.props.fileNameTemplate.replace("{username}",ConfigUtils.getConfigProp("username",null,"")).replace("{tenant}",ConfigUtils.getConfigProp("tenant",null,"")).replace("{theme}",_this.props.theme.id).replace("{themeTitle}",_this.props.theme.title||"").replace("{timestamp}",timestamp)+"."+ext;var params={};// Base request params
9
+ */var MapExport=/*#__PURE__*/function(_React$Component){function MapExport(props){var _this;_classCallCheck(this,MapExport);_this=_callSuper(this,MapExport,[props]);_defineProperty(_this,"state",{extents:[],exporting:false,availableFormats:[],selectedFormat:null,selectedFormatConfiguration:"",exportProjection:null,scale:null,pageSize:null,dpi:96});_defineProperty(_this,"changeFormat",function(ev){var _this$props$formatCon,_formatConfigurations,_formatConfigurations2;var selectedFormat=ev.target.value;var formatConfigurations=((_this$props$formatCon=_this.props.formatConfiguration)===null||_this$props$formatCon===void 0?void 0:_this$props$formatCon[selectedFormat.split(";")[0]])||[];_this.setState({selectedFormat:selectedFormat,selectedFormatConfiguration:(_formatConfigurations=formatConfigurations[0])===null||_formatConfigurations===void 0?void 0:_formatConfigurations.name,exportProjection:_this.getExportProjection((_formatConfigurations2=formatConfigurations[0])===null||_formatConfigurations2===void 0?void 0:_formatConfigurations2.projections)})});_defineProperty(_this,"setSelectedFormatConfiguration",function(ev){var _this$props$formatCon2;var selectedFormatConfiguration=ev.target.value;var formatConfigurations=((_this$props$formatCon2=_this.props.formatConfiguration)===null||_this$props$formatCon2===void 0?void 0:_this$props$formatCon2[_this.state.selectedFormat.split(";")[0]])||[];var formatConfiguration=formatConfigurations.find(function(entry){return entry.name===selectedFormatConfiguration});_this.setState({selectedFormatConfiguration:selectedFormatConfiguration,exportProjection:_this.getExportProjection(formatConfiguration.projections)})});_defineProperty(_this,"getExportProjection",function(projections){if(isEmpty(projections)){return _this.props.map.projection}else{return projections.indexOf(_this.props.map.projection)!==-1?_this.props.map.projection:projections[0]}});_defineProperty(_this,"changeScale",function(value){_this.setState({scale:Math.max(1,parseInt(value,10)||0)})});_defineProperty(_this,"changeResolution",function(ev){_this.setState({dpi:parseInt(ev.target.value,10)||0})});_defineProperty(_this,"renderBody",function(){var _this$props$formatCon3;if(!_this.props.theme||!_this.state.selectedFormat){return null}var formatMap={"image/jpeg":"JPEG","image/png":"PNG","image/png; mode=16bit":"PNG 16bit","image/png; mode=8bit":"PNG 8bit","image/png; mode=1bit":"PNG 1bit","image/geotiff":"GeoTIFF","image/tiff":"GeoTIFF","application/dxf":"DXF","application/pdf":"GeoPDF"};var formatConfigurations=((_this$props$formatCon3=_this.props.formatConfiguration)===null||_this$props$formatCon3===void 0?void 0:_this$props$formatCon3[_this.state.selectedFormat.split(";")[0]])||[];var formatConfiguration=formatConfigurations.find(function(entry){return entry.name===_this.state.selectedFormatConfiguration});var scaleChooser=null;if(!isEmpty(_this.props.allowedScales)){scaleChooser=/*#__PURE__*/React.createElement("select",{onChange:_this.changeScale,value:_this.state.scale||""},/*#__PURE__*/React.createElement("option",{hidden:true,value:_this.state.scale||""},_this.state.scale||""),_this.props.allowedScales.map(function(scale){return/*#__PURE__*/React.createElement("option",{key:scale,value:scale},"1 : ",scale)}))}else if(_this.props.allowedScales!==false){scaleChooser=/*#__PURE__*/React.createElement(NumberInput,{min:1,mobile:true,onChange:_this.changeScale,prefix:"1 : ",value:_this.state.scale||null})}return/*#__PURE__*/React.createElement("div",{className:"mapexport-body"},/*#__PURE__*/React.createElement("form",{action:"#",method:"POST",onSubmit:_this["export"],ref:function ref(el){_this.form=el}},/*#__PURE__*/React.createElement("table",{className:"options-table"},/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.format")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:_this.changeFormat,value:_this.state.selectedFormat},_this.state.availableFormats.map(function(format){return/*#__PURE__*/React.createElement("option",{key:format,value:format},formatMap[format]||format)})))),formatConfigurations.length>1?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.configuration")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:_this.setSelectedFormatConfiguration,value:_this.state.selectedFormatConfiguration},formatConfigurations.map(function(config){return/*#__PURE__*/React.createElement("option",{key:config.name,value:config.name},config.labelMsgId?LocaleUtils.tr(config.labelMsgId):config.name)})))):null,!isEmpty(_this.props.pageSizes)?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.size")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.setState({pageSize:ev.target.value||null})},value:_this.state.pageSize||""},/*#__PURE__*/React.createElement("option",{value:""},LocaleUtils.tr("mapexport.usersize")),_this.props.pageSizes.map(function(entry,idx){return/*#__PURE__*/React.createElement("option",{key:"size_"+idx,value:idx},entry.name)})))):null,scaleChooser&&_this.state.pageSize!==null?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.scale")),/*#__PURE__*/React.createElement("td",null,scaleChooser)):null,_this.props.dpis&&_this.state.selectedFormat!=="application/dxf"?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.resolution")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:_this.changeResolution,value:_this.state.dpi},_this.props.dpis.map(function(dpi){return/*#__PURE__*/React.createElement("option",{key:dpi+"dpi",value:dpi},dpi+" dpi")})))):null,((formatConfiguration===null||formatConfiguration===void 0?void 0:formatConfiguration.projections)||[]).length>1?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.projection")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.setState({exportProjection:ev.target.value})},value:_this.state.exportProjection},formatConfiguration.projections.map(function(proj){return/*#__PURE__*/React.createElement("option",{key:proj,value:proj},proj)})))):null)),/*#__PURE__*/React.createElement("div",{className:"button-bar"},/*#__PURE__*/React.createElement("button",{className:"button",disabled:_this.state.exporting||isEmpty(_this.state.extents),type:"submit"},_this.state.exporting?/*#__PURE__*/React.createElement("span",{className:"mapexport-wait"},/*#__PURE__*/React.createElement(Spinner,null)," ",LocaleUtils.tr("mapexport.wait")):LocaleUtils.tr("mapexport.submit")))))});_defineProperty(_this,"renderPrintSelection",function(){if(_this.state.pageSize!==null){var pageSize=_this.props.pageSizes[_this.state.pageSize];var frame={width:pageSize.width,height:pageSize.height};return/*#__PURE__*/React.createElement(PrintSelection,{allowRotation:false,allowScaling:_this.props.allowedScales!==false,center:_this.props.map.center,fixedFrame:frame,geometryChanged:_this.geometryChanged,key:"PrintSelection",scale:_this.state.scale})}else{return/*#__PURE__*/React.createElement(PrintSelection,{allowRotation:false,geometryChanged:_this.geometryChanged,key:"PrintSelection"})}});_defineProperty(_this,"onShow",function(){var _this$props$formatCon4,_formatConfigurations3,_formatConfigurations4;var scale=Math.round(MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom)*_this.props.defaultScaleFactor);if(!isEmpty(_this.props.allowedScales)){var closestVal=Math.abs(scale-_this.props.allowedScales[0]);var closestIdx=0;for(var i=1;i<_this.props.allowedScales.length;++i){var currVal=Math.abs(scale-_this.props.allowedScales[i]);if(currVal<closestVal){closestVal=currVal;closestIdx=i}}scale=_this.props.allowedScales[closestIdx]}var availableFormats=_toConsumableArray(_this.props.theme.availableFormats);(_this.props.forceAvailableFormats||[]).forEach(function(format){if(!availableFormats.includes(format)){availableFormats.push(format)}});if(!isEmpty(_this.props.allowedFormats)){availableFormats=_this.props.allowedFormats.filter(function(fmt){return availableFormats.includes(fmt)})}var selectedFormat=_this.props.defaultFormat&&availableFormats.includes(_this.props.defaultFormat)?_this.props.defaultFormat:availableFormats[0];var formatConfigurations=((_this$props$formatCon4=_this.props.formatConfiguration)===null||_this$props$formatCon4===void 0?void 0:_this$props$formatCon4[selectedFormat.split(";")[0]])||[];_this.setState({scale:scale,availableFormats:availableFormats,selectedFormat:selectedFormat,selectedFormatConfiguration:(_formatConfigurations3=formatConfigurations[0])===null||_formatConfigurations3===void 0?void 0:_formatConfigurations3.name,exportProjection:_this.getExportProjection((_formatConfigurations4=formatConfigurations[0])===null||_formatConfigurations4===void 0?void 0:_formatConfigurations4.projections)});_this.props.setSnappingConfig(false,false)});_defineProperty(_this,"onHide",function(){_this.setState({extents:[],width:0,height:0,scale:null,pageSize:null})});_defineProperty(_this,"geometryChanged",function(center,extents,rotation,scale){_this.setState(function(state){return{extents:extents,scale:scale!==null&&scale!==void 0?scale:state.scale}})});_defineProperty(_this,"export",function(ev){var _this$props$formatCon5,_this$state$extents$a;ev.preventDefault();_this.setState({exporting:true});var format=_this.state.selectedFormat.split(";")[0];var formatConfiguration=(((_this$props$formatCon5=_this.props.formatConfiguration)===null||_this$props$formatCon5===void 0?void 0:_this$props$formatCon5[format])||[]).find(function(entry){return entry.name===_this.state.selectedFormatConfiguration});var version=_this.props.theme.version;var crs=_this.state.exportProjection;var extent=CoordinatesUtils.reprojectBbox((_this$state$extents$a=_this.state.extents.at(0))!==null&&_this$state$extents$a!==void 0?_this$state$extents$a:[0,0,0,0],_this.props.map.projection,crs);var formattedExtent=CoordinatesUtils.getAxisOrder(crs).substring(0,2)==="ne"&&version==="1.3.0"?extent[1]+","+extent[0]+","+extent[3]+","+extent[2]:extent.join(",");var getPixelFromCoordinate=MapUtils.getHook(MapUtils.GET_PIXEL_FROM_COORDINATES_HOOK);var p1=getPixelFromCoordinate(extent.slice(0,2));var p2=getPixelFromCoordinate(extent.slice(2,4));var width=Math.round(Math.abs(p1[0]-p2[0])*_this.state.dpi/96);var height=Math.round(Math.abs(p1[1]-p2[1])*_this.state.dpi/96);var ext=format.split("/").pop();var timestamp=dayjs(new Date).format("YYYYMMDD_HHmmss");var fileName=_this.props.fileNameTemplate.replace("{username}",ConfigUtils.getConfigProp("username",null,"")).replace("{tenant}",ConfigUtils.getConfigProp("tenant",null,"")).replace("{theme}",_this.props.theme.id).replace("{themeTitle}",_this.props.theme.title||"").replace("{timestamp}",timestamp)+"."+ext;var params={};// Base request params
10
10
  params.SERVICE="WMS";params.VERSION=version;params.REQUEST="GetMap";params.FORMAT=_this.state.selectedFormat;params.DPI=_this.state.dpi;params.TRANSPARENT=true;params.TILED=false;params.CRS=crs;params.BBOX=formattedExtent;params.WIDTH=width;params.HEIGHT=height;params.filename=fileName;// Dimension values
11
11
  _this.props.layers.forEach(function(layer){if(layer.role===LayerRole.THEME){Object.entries(layer.dimensionValues||{}).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],value=_ref2[1];if(value!==undefined){params[key]=value}})}});// Add parameters from custom format configuration
12
- if(formatConfiguration){var _formatConfiguration$;var keyCaseMap=Object.keys(params).reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key.toLowerCase(),key))},{});(formatConfiguration.extraQuery||"").split(/[?&]/).filter(Boolean).forEach(function(entry){var _entry$split=entry.split("="),_entry$split2=_slicedToArray(_entry$split,2),key=_entry$split2[0],value=_entry$split2[1];var caseKey=keyCaseMap[key.toLowerCase()]||key;params[caseKey]=value!==null&&value!==void 0?value:""});params.FORMAT_OPTIONS=(_formatConfiguration$=formatConfiguration.formatOptions)!==null&&_formatConfiguration$!==void 0?_formatConfiguration$:"";if(formatConfiguration.baseLayer){var layers=params[keyCaseMap.layers].split(",");if(!layers.includes(formatConfiguration.baseLayer)){params[keyCaseMap.layers]=[formatConfiguration.baseLayer].concat(_toConsumableArray(layers))}}}if(_this.state.selectedFormat==="application/dxf"){_this.dxfExport(params,fileName)}else{_this.genericExport(params,fileName,formatConfiguration)}});_defineProperty(_this,"genericExport",function(params,fileName,formatConfiguration){// Layer params
12
+ if(formatConfiguration){var _formatConfiguration$;var keyCaseMap=Object.keys(params).reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key.toLowerCase(),key))},{});(formatConfiguration.extraQuery||"").split(/[?&]/).filter(Boolean).forEach(function(entry){var _entry$split=entry.split("="),_entry$split2=_slicedToArray(_entry$split,2),key=_entry$split2[0],value=_entry$split2[1];var caseKey=keyCaseMap[key.toLowerCase()]||key;params[caseKey]=value!==null&&value!==void 0?value:""});params.FORMAT_OPTIONS=(_formatConfiguration$=formatConfiguration.formatOptions)!==null&&_formatConfiguration$!==void 0?_formatConfiguration$:"";if(formatConfiguration.baseLayer){var layers=params[keyCaseMap.layers].split(",");if(!layers.includes(formatConfiguration.baseLayer)){params[keyCaseMap.layers]=[formatConfiguration.baseLayer].concat(_toConsumableArray(layers))}}}if(_this.state.selectedFormat==="application/dxf"){_this.dxfExport(params,fileName,formatConfiguration)}else{_this.genericExport(params,fileName,formatConfiguration)}});_defineProperty(_this,"genericExport",function(params,fileName,formatConfiguration){var _formatConfiguration$2;// Layer params
13
13
  var exportExternalLayers=_this.props.exportExternalLayers&&ConfigUtils.getConfigProp("qgisServerVersion",null,3)>=3;var exportParams=LayerUtils.collectPrintParams(_this.props.layers,_this.props.theme,_this.state.scale,_this.state.exportProjection,exportExternalLayers,!!(formatConfiguration!==null&&formatConfiguration!==void 0&&formatConfiguration.baseLayer));Object.assign(params,exportParams);// Highlight params
14
14
  var highlightParams=VectorLayerUtils.createPrintHighlighParams(_this.props.layers,_this.state.exportProjection,_this.state.scale,_this.state.dpi);params.HIGHLIGHT_GEOM=highlightParams.geoms.join(";");params.HIGHLIGHT_SYMBOL=highlightParams.styles.join(";");params.HIGHLIGHT_LABELSTRING=highlightParams.labels.join(";");params.HIGHLIGHT_LABELCOLOR=highlightParams.labelFillColors.join(";");params.HIGHLIGHT_LABELBUFFERCOLOR=highlightParams.labelOutlineColors.join(";");params.HIGHLIGHT_LABELBUFFERSIZE=highlightParams.labelOutlineSizes.join(";");params.HIGHLIGHT_LABELSIZE=highlightParams.labelSizes.join(";");params.HIGHLIGHT_LABEL_DISTANCE=highlightParams.labelDist.join(";");params.HIGHLIGHT_LABEL_ROTATION=highlightParams.labelRotations.join(";");// Watermark params
15
- Object.keys(_this.props.theme.watermark||{}).forEach(function(key){params["WATERMARK_"+key.toUpperCase()]=_this.props.theme.watermark[key]});var data=Object.entries(params).map(function(pair){return pair.map(function(entry){return encodeURIComponent(entry).replace(/%20/g,"+")}).join("=")}).join("&");var config={headers:{"Content-Type":"application/x-www-form-urlencoded"},responseType:"arraybuffer"};axios.post(_this.props.theme.url,data,config).then(function(response){_this.setState({exporting:false});var contentType=response.headers["content-type"];FileSaver.saveAs(new Blob([response.data],{type:contentType}),fileName)})["catch"](function(e){_this.setState({exporting:false});if(e.response){/* eslint-disable-next-line */console.log(new TextDecoder().decode(e.response.data))}/* eslint-disable-next-line */alert("Export failed")})});_defineProperty(_this,"dxfExport",function(baseParams,fileName){var promises=_this.props.layers.filter(function(layer){var _layer$mapFormats;return layer.type==="wms"&&layer.role>LayerRole.BACKGROUND&&((_layer$mapFormats=layer.mapFormats)===null||_layer$mapFormats===void 0?void 0:_layer$mapFormats.includes("application/dxf"))}).reverse().map(function(layer){var _layer$params$FILTER,_layer$params$FILTER_;var params=_objectSpread(_objectSpread({},baseParams),{},{LAYERS:layer.params.LAYERS,OPACITIES:layer.params.OPACITIES,STYLES:layer.params.STYLES,FILTER:(_layer$params$FILTER=layer.params.FILTER)!==null&&_layer$params$FILTER!==void 0?_layer$params$FILTER:"",FILTER_GEOM:(_layer$params$FILTER_=layer.params.FILTER_GEOM)!==null&&_layer$params$FILTER_!==void 0?_layer$params$FILTER_:""});var data=Object.entries(params).map(function(pair){return pair.map(function(entry){return encodeURIComponent(entry).replace(/%20/g,"+")}).join("=")}).join("&");var config={headers:{"Content-Type":"application/x-www-form-urlencoded"},responseType:"arraybuffer"};return new Promise(function(resolve,reject){axios.post(layer.url,data,config).then(function(response){resolve(response)})["catch"](function(e){/* eslint-disable-next-line */console.warn(e);resolve(null)})})});Promise.all(promises).then(function(responses){var decoder=new TextDecoder("iso-8859-1");var dxfDocuments=responses.filter(function(response){return response.headers["content-type"]==="application/dxf"}).map(function(response){return explodeDxf(decoder.decode(response.data))});var dxfDocument=mergeDxf(dxfDocuments);var result=implodeDxf(dxfDocument);var encoder=new TextEncoder("iso-8859-1");FileSaver.saveAs(new Blob([encoder.encode(result)],{type:"application/dxf"}),fileName);/*
15
+ Object.keys(_this.props.theme.watermark||{}).forEach(function(key){params["WATERMARK_"+key.toUpperCase()]=_this.props.theme.watermark[key]});var data=Object.entries(params).map(function(pair){return pair.map(function(entry){return encodeURIComponent(entry).replace(/%20/g,"+")}).join("=")}).join("&");var config={headers:{"Content-Type":"application/x-www-form-urlencoded"},responseType:"arraybuffer"};axios.post((_formatConfiguration$2=formatConfiguration.serviceUrl)!==null&&_formatConfiguration$2!==void 0?_formatConfiguration$2:_this.props.theme.url,data,config).then(function(response){_this.setState({exporting:false});var contentType=response.headers["content-type"];FileSaver.saveAs(new Blob([response.data],{type:contentType}),fileName)})["catch"](function(e){_this.setState({exporting:false});if(e.response){/* eslint-disable-next-line */console.log(new TextDecoder().decode(e.response.data))}/* eslint-disable-next-line */alert("Export failed")})});_defineProperty(_this,"dxfExport",function(baseParams,fileName,formatConfiguration){var promises=_this.props.layers.filter(function(layer){var _layer$mapFormats;return layer.type==="wms"&&layer.role>LayerRole.BACKGROUND&&((_layer$mapFormats=layer.mapFormats)===null||_layer$mapFormats===void 0?void 0:_layer$mapFormats.includes("application/dxf"))}).reverse().map(function(layer){var _layer$params$FILTER,_layer$params$FILTER_;var params=_objectSpread(_objectSpread({},baseParams),{},{LAYERS:layer.params.LAYERS,OPACITIES:layer.params.OPACITIES,STYLES:layer.params.STYLES,FILTER:(_layer$params$FILTER=layer.params.FILTER)!==null&&_layer$params$FILTER!==void 0?_layer$params$FILTER:"",FILTER_GEOM:(_layer$params$FILTER_=layer.params.FILTER_GEOM)!==null&&_layer$params$FILTER_!==void 0?_layer$params$FILTER_:""});var data=Object.entries(params).map(function(pair){return pair.map(function(entry){return encodeURIComponent(entry).replace(/%20/g,"+")}).join("=")}).join("&");var config={headers:{"Content-Type":"application/x-www-form-urlencoded"},responseType:"arraybuffer"};return new Promise(function(resolve,reject){var _formatConfiguration$3;axios.post((_formatConfiguration$3=formatConfiguration.serviceUrl)!==null&&_formatConfiguration$3!==void 0?_formatConfiguration$3:layer.url,data,config).then(function(response){resolve(response)})["catch"](function(e){/* eslint-disable-next-line */console.warn(e);resolve(null)})})});Promise.all(promises).then(function(responses){var decoder=new TextDecoder("iso-8859-1");var dxfDocuments=responses.filter(function(response){return response.headers["content-type"]==="application/dxf"}).map(function(response){return explodeDxf(decoder.decode(response.data))});var dxfDocument=mergeDxf(dxfDocuments);var result=implodeDxf(dxfDocument);var encoder=new TextEncoder("iso-8859-1");FileSaver.saveAs(new Blob([encoder.encode(result)],{type:"application/dxf"}),fileName);/*
16
16
  responses.forEach((response, idx) => {
17
17
  FileSaver.saveAs(new Blob([response.data], {type: "application/dxf"}), "orig_" + idx + "_" + fileName);
18
18
  });
19
- */_this.setState({exporting:false})})});_this.form=null;_this.state.dpi=(props.dpis||[])[0]||96;return _this}_inherits(MapExport,_React$Component);return _createClass(MapExport,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.state.pageSize===null&&prevState.pageSize!==null){this.setState({extents:[]})}}},{key:"render",value:function render(){var _this2=this;var minMaxTooltip=this.state.minimized?LocaleUtils.tr("print.maximize"):LocaleUtils.tr("print.minimize");var extraTitlebarContent=/*#__PURE__*/React.createElement(Icon,{className:"mapexport-minimize-maximize",icon:this.state.minimized?"chevron-down":"chevron-up",onClick:function onClick(){return _this2.setState(function(state){return{minimized:!state.minimized}})},title:minMaxTooltip});return/*#__PURE__*/React.createElement(SideBar,{extraClasses:"MapExport",extraTitlebarContent:extraTitlebarContent,icon:"rasterexport",id:"MapExport",key:"MapExport",onHide:this.onHide,onShow:this.onShow,side:this.props.side,title:LocaleUtils.tr("appmenu.items.MapExport"),width:"20em"},function(){return{body:_this2.state.minimized?null:_this2.renderBody(),extra:[_this2.renderPrintSelection()]}})}}])}(React.Component);_defineProperty(MapExport,"propTypes",{/** Whitelist of allowed export format mimetypes. If empty, supported formats are listed. */allowedFormats:PropTypes.arrayOf(PropTypes.string),/** List of scales at which to export the map. If empty, scale can be freely specified. If `false`, the map can only be exported at the current scale. */allowedScales:PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number),PropTypes.bool]),/** Default export format mimetype. If empty, first available format is used. */defaultFormat:PropTypes.string,/** The factor to apply to the map scale to determine the initial export map scale (if `allowedScales` is not `false`). */defaultScaleFactor:PropTypes.number,/** List of dpis at which to export the map. If empty, the default server dpi is used. */dpis:PropTypes.arrayOf(PropTypes.number),/** Whether to include external layers in the image. Requires QGIS Server 3.x! */exportExternalLayers:PropTypes.bool,/** Template for the name of the generated files when downloading. Can contain the placeholders `{username}`, `{tenant}`, `{theme}`, `{themeTitle}`, `{timestamp}`. */fileNameTemplate:PropTypes.string,/** Custom export configuration per format.
19
+ */_this.setState({exporting:false})})});_this.form=null;_this.state.dpi=(props.dpis||[])[0]||96;return _this}_inherits(MapExport,_React$Component);return _createClass(MapExport,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.state.pageSize===null&&prevState.pageSize!==null){this.setState({extents:[]})}}},{key:"render",value:function render(){var _this2=this;var minMaxTooltip=this.state.minimized?LocaleUtils.tr("print.maximize"):LocaleUtils.tr("print.minimize");var extraTitlebarContent=/*#__PURE__*/React.createElement(Icon,{className:"mapexport-minimize-maximize",icon:this.state.minimized?"chevron-down":"chevron-up",onClick:function onClick(){return _this2.setState(function(state){return{minimized:!state.minimized}})},title:minMaxTooltip});return/*#__PURE__*/React.createElement(SideBar,{extraClasses:"MapExport",extraTitlebarContent:extraTitlebarContent,icon:"rasterexport",id:"MapExport",key:"MapExport",onHide:this.onHide,onShow:this.onShow,side:this.props.side,title:LocaleUtils.tr("appmenu.items.MapExport"),width:"20em"},function(){return{body:_this2.state.minimized?null:_this2.renderBody(),extra:[_this2.renderPrintSelection()]}})}}])}(React.Component);_defineProperty(MapExport,"propTypes",{/** Whitelist of allowed export format mimetypes. If empty, supported formats are listed. */allowedFormats:PropTypes.arrayOf(PropTypes.string),/** List of scales at which to export the map. If empty, scale can be freely specified. If `false`, the map can only be exported at the current scale. */allowedScales:PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number),PropTypes.bool]),/** Default export format mimetype. If empty, first available format is used. */defaultFormat:PropTypes.string,/** The factor to apply to the map scale to determine the initial export map scale (if `allowedScales` is not `false`). */defaultScaleFactor:PropTypes.number,/** List of dpis at which to export the map. If empty, the default server dpi is used. */dpis:PropTypes.arrayOf(PropTypes.number),/** Whether to include external layers in the image. Requires QGIS Server 3.x! */exportExternalLayers:PropTypes.bool,/** Template for the name of the generated files when downloading. Can contain the placeholders `{username}`, `{tenant}`, `{theme}`, `{themeTitle}`, `{timestamp}`. */fileNameTemplate:PropTypes.string,/** Formats to force as available even if the map capabilities report otherwise. Useful if a serviceUrl is defined in a format configuration. */forceAvailableFormats:PropTypes.array,/** Custom export configuration per format.
20
20
  * If more than one configuration per format is provided, a selection combo will be displayed.
21
21
  * `labelMsgId` is a translation string message id for the combo label. If not defined, `name` will be displayed.
22
22
  * `extraQuery` will be appended to the query string (replacing any existing parameters).
23
23
  * `formatOptions` will be passed as FORMAT_OPTIONS.
24
24
  * `baseLayer` will be appended to the LAYERS instead of the background layer.
25
- * `projections` is a list of export projections. If empty, the map projection is automatically used. */formatConfiguration:PropTypes.shape({format:PropTypes.arrayOf(PropTypes.shape({name:PropTypes.string,labelMsgId:PropTypes.string,extraQuery:PropTypes.string,formatOptions:PropTypes.string,baseLayer:PropTypes.string,projections:PropTypes.array}))}),layers:PropTypes.array,map:PropTypes.object,/** List of image sizes to offer, in addition to the free-hand selection. The width and height are in millimeters. */pageSizes:PropTypes.arrayOf(PropTypes.shape({name:PropTypes.string,width:PropTypes.number,height:PropTypes.number})),setIdentifyEnabled:PropTypes.func,setSnappingConfig:PropTypes.func,/** The side of the application on which to display the sidebar. */side:PropTypes.string,theme:PropTypes.object});_defineProperty(MapExport,"defaultProps",{defaultScaleFactor:1,exportExternalLayers:true,fileNameTemplate:"{theme}_{timestamp}",side:"right",pageSizes:[]});var selector=function selector(state){return{theme:state.theme.current,map:state.map,layers:state.layers.flat}};export default connect(selector,{setSnappingConfig:setSnappingConfig})(MapExport);
25
+ * `projections` is a list of export projections. If empty, the map projection is automatically used.
26
+ * `serviceUrl` is the address of a custom service to use instead of the layer OWS service url. */formatConfiguration:PropTypes.shape({format:PropTypes.arrayOf(PropTypes.shape({name:PropTypes.string,labelMsgId:PropTypes.string,extraQuery:PropTypes.string,formatOptions:PropTypes.string,baseLayer:PropTypes.string,projections:PropTypes.array,serviceUrl:PropTypes.string}))}),layers:PropTypes.array,map:PropTypes.object,/** List of image sizes to offer, in addition to the free-hand selection. The width and height are in millimeters. */pageSizes:PropTypes.arrayOf(PropTypes.shape({name:PropTypes.string,width:PropTypes.number,height:PropTypes.number})),setIdentifyEnabled:PropTypes.func,setSnappingConfig:PropTypes.func,/** The side of the application on which to display the sidebar. */side:PropTypes.string,theme:PropTypes.object});_defineProperty(MapExport,"defaultProps",{defaultScaleFactor:1,exportExternalLayers:true,fileNameTemplate:"{theme}_{timestamp}",side:"right",pageSizes:[]});var selector=function selector(state){return{theme:state.theme.current,map:state.map,layers:state.layers.flat}};export default connect(selector,{setSnappingConfig:setSnappingConfig})(MapExport);
package/plugins/TopBar.js CHANGED
@@ -4,9 +4,9 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
4
4
  *
5
5
  * This source code is licensed under the BSD-style license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import{connect}from"react-redux";import classnames from"classnames";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{toggleFullscreen}from"../actions/display";import{openExternalUrl,setTopbarHeight}from"../actions/windows";import{Swipeable}from"../components/Swipeable";import ConfigUtils from"../utils/ConfigUtils";import LocaleUtils from"../utils/LocaleUtils";import ThemeUtils from"../utils/ThemeUtils";import"./style/TopBar.css";/**
7
+ */import React from"react";import{connect}from"react-redux";import classnames from"classnames";import PropTypes from"prop-types";import{toggleFullscreen}from"../actions/display";import{openExternalUrl,setTopbarHeight}from"../actions/windows";import{Swipeable}from"../components/Swipeable";import ConfigUtils from"../utils/ConfigUtils";import LocaleUtils from"../utils/LocaleUtils";import ThemeUtils from"../utils/ThemeUtils";import"./style/TopBar.css";/**
8
8
  * Top bar, containing the logo, searchbar, task buttons and app menu.
9
- */var TopBar=/*#__PURE__*/function(_React$Component){function TopBar(){var _this;_classCallCheck(this,TopBar);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,TopBar,[].concat(args));_defineProperty(_this,"state",{allowedMenuItems:[],allowedToolbarItems:[]});_defineProperty(_this,"openUrl",function(url,target,title,icon){if(target==="iframe"){target=":iframedialog:externallinkiframe"}_this.props.openExternalUrl(url,target,{title:title,icon:icon})});_defineProperty(_this,"storeHeight",function(el){if(el){_this.props.setTopbarHeight(el.clientHeight)}});_defineProperty(_this,"allowedItems",function(items){return items.map(function(item){if(item.subitems){var subitems=_this.allowedItems(item.subitems);if(!isEmpty(subitems)){return _objectSpread(_objectSpread({},item),{},{subitems:subitems})}else{return null}}else if(_this.props.currentTheme){if(!ThemeUtils.themeFlagsAllowed(_this.props.currentTheme,item.themeFlagWhitelist,item.themeFlagBlacklist)){return null}if(item.themeBlacklist&&(item.themeBlacklist.includes(_this.props.currentTheme.title)||item.themeBlacklist.includes(_this.props.currentTheme.name))){return null}if(item.themeWhitelist&&!(item.themeWhitelist.includes(_this.props.currentTheme.title)||item.themeWhitelist.includes(_this.props.currentTheme.name))){return null}if(item.requireAuth&&!ConfigUtils.getConfigProp("username")){return null}}return item}).filter(Boolean)});return _this}_inherits(TopBar,_React$Component);return _createClass(TopBar,[{key:"componentDidMount",value:function componentDidMount(){this.setState({allowedToolbarItems:this.allowedItems(this.props.toolbarItems),allowedMenuItems:this.allowedItems(this.props.menuItems)})}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.currentTheme!==prevProps.currentTheme){this.setState({allowedToolbarItems:this.allowedItems(this.props.toolbarItems),allowedMenuItems:this.allowedItems(this.props.menuItems)})}}},{key:"render",value:function render(){var _this2=this;var logo;var assetsPath=ConfigUtils.getAssetsPath();var isMobile=ConfigUtils.isMobile();if(isMobile||this.props.appMenuCompact){logo=assetsPath+"/img/logo-mobile."+this.props.logoFormat}else{logo=assetsPath+"/img/logo."+this.props.logoFormat}var classes=classnames({TopBar:true,mobile:isMobile,fullscreen:this.props.fullscreen});var logoEl=/*#__PURE__*/React.createElement("img",{className:"topbar-logo",src:this.props.logoSrc||logo});if(this.props.logoUrl){logoEl=/*#__PURE__*/React.createElement("a",{href:this.props.logoUrl,rel:"noreferrer",target:"_blank"},logoEl)}// Convert legacy minScale option to minScaleDenom
9
+ */var TopBar=/*#__PURE__*/function(_React$Component){function TopBar(){var _this;_classCallCheck(this,TopBar);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,TopBar,[].concat(args));_defineProperty(_this,"state",{allowedMenuItems:[],allowedToolbarItems:[]});_defineProperty(_this,"openUrl",function(url,target,title,icon){if(target==="iframe"){target=":iframedialog:externallinkiframe"}_this.props.openExternalUrl(url,target,{title:title,icon:icon})});_defineProperty(_this,"storeHeight",function(el){if(el){_this.props.setTopbarHeight(el.clientHeight)}});return _this}_inherits(TopBar,_React$Component);return _createClass(TopBar,[{key:"componentDidMount",value:function componentDidMount(){this.setState({allowedToolbarItems:ThemeUtils.allowedItems(this.props.toolbarItems,this.props.currentTheme),allowedMenuItems:ThemeUtils.allowedItems(this.props.menuItems,this.props.currentTheme)})}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.currentTheme!==prevProps.currentTheme){this.setState({allowedToolbarItems:ThemeUtils.allowedItems(this.props.toolbarItems,this.props.currentTheme),allowedMenuItems:ThemeUtils.allowedItems(this.props.menuItems,this.props.currentTheme)})}}},{key:"render",value:function render(){var _this2=this;var logo;var assetsPath=ConfigUtils.getAssetsPath();var isMobile=ConfigUtils.isMobile();if(isMobile||this.props.appMenuCompact){logo=assetsPath+"/img/logo-mobile."+this.props.logoFormat}else{logo=assetsPath+"/img/logo."+this.props.logoFormat}var classes=classnames({TopBar:true,mobile:isMobile,fullscreen:this.props.fullscreen});var logoEl=/*#__PURE__*/React.createElement("img",{className:"topbar-logo",src:this.props.logoSrc||logo});if(this.props.logoUrl){logoEl=/*#__PURE__*/React.createElement("a",{href:this.props.logoUrl,rel:"noreferrer",target:"_blank"},logoEl)}// Convert legacy minScale option to minScaleDenom
10
10
  var searchOptions=_objectSpread(_objectSpread({},TopBar.defaultProps.searchOptions),this.props.searchOptions);searchOptions.minScaleDenom=searchOptions.minScaleDenom||searchOptions.minScale;delete searchOptions.minScale;// Menu compact only available for desktop client
11
11
  var menuCompact=!isMobile?this.props.appMenuCompact:false;// Keep menu open when appMenu is in compact mode (Visible on Hover)
12
12
  var keepMenuOpen=menuCompact;// Menu should be visible on startup when appMenu is in compact mode (Visible on Hover)
@@ -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(_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
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.permissions.updatable&&!_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);
@@ -5,4 +5,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
5
5
  * This source code is licensed under the BSD-style license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */import{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}}
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};var checkGeomReadOnly=function checkGeomReadOnly(geomType){return(geomType!==null&&geomType!==void 0?geomType:null)!==null&&!["Point","LineString","Polygon"].includes((geomType||"").replace(/^Multi/,"").replace(/Z$/,""))};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:{var _action$editContext$g,_state$contexts$actio;return{contexts:_objectSpread(_objectSpread({},state.contexts),{},_defineProperty({},action.contextId,_objectSpread(_objectSpread(_objectSpread({action:null,feature:null,geomType:null,changed:false,permissions:{}},state.contexts[action.contextId]),action.editContext),{},{geomNonZeroZ:checkNonZeroZ(state.contexts[action.contextId],action.editContext),geomReadOnly:checkGeomReadOnly((_action$editContext$g=action.editContext.geomType)!==null&&_action$editContext$g!==void 0?_action$editContext$g:(_state$contexts$actio=state.contexts[action.contextId])===null||_state$contexts$actio===void 0?void 0:_state$contexts$actio.geomType),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}}
@@ -22,7 +22,7 @@ visibleLayers.push(layer.Name)}layerEntry.queryable=layer.$_queryable==="1";if(l
22
22
  if(layer.EX_GeographicBoundingBox){layerEntry.bbox={crs:"EPSG:4326",bounds:[parseFloat(layer.EX_GeographicBoundingBox.westBoundLongitude),parseFloat(layer.EX_GeographicBoundingBox.southBoundLatitude),parseFloat(layer.EX_GeographicBoundingBox.eastBoundLongitude),parseFloat(layer.EX_GeographicBoundingBox.northBoundLatitude)]}}if(featureReports[layer.Name]){layerEntry.featureReport=featureReports[layer.Name]}layerEntry.dimensions=[];toArray(layer.Dimension).forEach(function(dim){layerEntry.dimensions.push({units:dim.$_units,name:dim.$_name,multiple:dim.$_multipleValues==="1",value:dim._,fieldName:dim.$_fieldName,endFieldName:dim.$_endFieldName})})}else{// group
23
23
  layerEntry.mutuallyExclusive=layer.$_mutuallyExclusive==="1";if(layer.$_visibilityChecked!==undefined){layerEntry.visibility=layer.$_visibilityChecked==="1"}else{layerEntry.visibility=layer.$_visible==="1"}layerEntry.sublayers=[];if(layer.$_expanded==="0"||collapseBelowLevel>=0&&level>=collapseBelowLevel){layerEntry.expanded=false}else{layerEntry.expanded=true}var _iterator2=_createForOfIteratorHelper(toArray(layer.Layer)),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var subLayer=_step2.value;getLayerTree(subLayer,layerEntry.sublayers,visibleLayers,printLayers,level+1,collapseBelowLevel,titleNameMap,featureReports,externalLayers)}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}if(layerEntry.sublayers.length===0){// skip empty groups
24
24
  return}}resultLayers.push(layerEntry);titleNameMap[layer.TreeName]=layer.Name}function flatLayers(layer){var result=[layer];(layer.Layer||[]).forEach(function(sublayer){return result.push(sublayer)});return result}// parse GetCapabilities for theme
25
- function getTheme(config,configItem,result,resultItem,proxy){if(configItem.disabled){/* eslint-disable-next-line no-console */console.log("Item ".concat(configItem.url)+(configItem.title?" (".concat(configItem.title,")"):"")+" has been disabled");return}var parsedUrl=urlUtil.parse(urlUtil.resolve(hostFqdn,configItem.url),true);parsedUrl.search="";parsedUrl.query.SERVICE="WMS";parsedUrl.query.VERSION="1.3.0";parsedUrl.query.REQUEST="GetProjectSettings";var getCapabilitiesUrl=urlUtil.format(parsedUrl);return new Promise(function(resolve,reject){axios.get(getCapabilitiesUrl,{proxy:proxy,auth:configItem.wmsBasicAuth}).then(function(response){var _XMLParser$parse;// parse capabilities
25
+ function getTheme(config,configItem,result,resultItem,proxy){if(configItem.disabled){/* eslint-disable-next-line no-console */console.log("Item ".concat(configItem.url)+(configItem.title?" (".concat(configItem.title,")"):"")+" has been disabled");return null}var parsedUrl=urlUtil.parse(urlUtil.resolve(hostFqdn,configItem.url),true);parsedUrl.search="";parsedUrl.query.SERVICE="WMS";parsedUrl.query.VERSION="1.3.0";parsedUrl.query.REQUEST="GetProjectSettings";var getCapabilitiesUrl=urlUtil.format(parsedUrl);return new Promise(function(resolve,reject){axios.get(getCapabilitiesUrl,{proxy:proxy,auth:configItem.wmsBasicAuth}).then(function(response){var _XMLParser$parse;// parse capabilities
26
26
  var parseOptions={removeNSPrefix:true,isArray:function isArray(){return false},ignoreAttributes:false,attributeNamePrefix:"$_",textNodeName:"_"};var capabilities=(_XMLParser$parse=new XMLParser(parseOptions).parse(response.data))===null||_XMLParser$parse===void 0?void 0:_XMLParser$parse.WMS_Capabilities;if(capabilities===undefined){// show response data on parse error
27
27
  throw new Error(response.data)}/* eslint-disable-next-line */console.log("Parsing WMS GetProjectSettings of "+configItem.url+(configItem.title?" (".concat(configItem.title,")"):""));var topLayer=capabilities.Capability.Layer;var wmsName=configItem.url.replace(/.*\//,"").replace(/\?^/,"");// use name from config or fallback to WMS title
28
28
  var wmsTitle=configItem.title||capabilities.Service.Title||topLayer.Title||wmsName;// keywords
@@ -37,12 +37,12 @@ resultItem.url=configItem.url;resultItem.id=uniqueThemeId(configItem.id||wmsName
37
37
  resultItem["abstract"]=capabilities.Service.Abstract||"";resultItem.keywords=keywords.join(", ");resultItem.onlineResource=capabilities.Service.OnlineResource.$_href;resultItem.contact={person:objectPath.get(capabilities,"Service.ContactInformation.ContactPersonPrimary.ContactPerson",""),organization:objectPath.get(capabilities,"Service.ContactInformation.ContactPersonPrimary.ContactOrganization",""),position:objectPath.get(capabilities,"Service.ContactInformation.ContactPosition",""),phone:objectPath.get(capabilities,"Service.ContactInformation.ContactVoiceTelephone",""),email:objectPath.get(capabilities,"Service.ContactInformation.ContactElectronicMailAddress","")};resultItem.format=configItem.format;resultItem.availableFormats=capabilities.Capability.Request.GetMap.Format;resultItem.tiled=configItem.tiled;resultItem.tileSize=configItem.tileSize;resultItem.version=configItem.version?configItem.version:config.defaultWMSVersion;resultItem.infoFormats=capabilities.Capability.Request.GetFeatureInfo.Format;// use geographic bounding box for theme, as default CRS may have inverted axis order with WMS 1.3.0
38
38
  var bounds=[parseFloat(topLayer.EX_GeographicBoundingBox.westBoundLongitude),parseFloat(topLayer.EX_GeographicBoundingBox.southBoundLatitude),parseFloat(topLayer.EX_GeographicBoundingBox.eastBoundLongitude),parseFloat(topLayer.EX_GeographicBoundingBox.northBoundLatitude)];resultItem.bbox={crs:"EPSG:4326",bounds:bounds};if(configItem.extent){resultItem.initialBbox={crs:configItem.mapCrs||result.themes.defaultMapCrs,bounds:configItem.extent}}else{resultItem.initialBbox=resultItem.bbox}resultItem.scales=configItem.scales;resultItem.printScales=configItem.printScales;resultItem.printResolutions=configItem.printResolutions;resultItem.printGrid=configItem.printGrid;// NOTE: skip root WMS layer
39
39
  resultItem.sublayers=isEmpty(layerTree)?[]:layerTree[0].sublayers;resultItem.expanded=true;resultItem.externalLayers=externalLayers;resultItem.backgroundLayers=configItem.backgroundLayers;resultItem.searchProviders=configItem.searchProviders;resultItem.additionalMouseCrs=configItem.additionalMouseCrs;resultItem.mapCrs=configItem.mapCrs||result.themes.defaultMapCrs;resultItem.defaultDisplayCrs=configItem.defaultDisplayCrs;if(printTemplates.length>0){resultItem.print=printTemplates}resultItem.drawingOrder=drawingOrder;if(configItem.extraDxfParameters){resultItem.extraDxfParameters=configItem.extraDxfParameters}if(configItem.extraPrintParameters){resultItem.extraPrintParameters=configItem.extraPrintParameters}if(configItem.legendUrl){resultItem.legendUrl=configItem.legendUrl}else{resultItem.legendUrl=capabilities.Capability.Request.GetLegendGraphic.DCPType.HTTP.Get.OnlineResource.$_href.replace(/\?$/,"")+"?"+(configItem.extraLegendParameters?configItem.extraLegendParameters:"")}if(configItem.featureInfoUrl){resultItem.featureInfoUrl=configItem.featureInfoUrl}else{resultItem.featureInfoUrl=capabilities.Capability.Request.GetFeatureInfo.DCPType.HTTP.Get.OnlineResource.$_href.replace(/\?$/,"")+"?"}if(configItem.printUrl){resultItem.printUrl=configItem.printUrl}else{resultItem.printUrl=capabilities.Capability.Request.GetPrint.DCPType.HTTP.Get.OnlineResource.$_href.replace(/\?$/,"")+"?"}if(configItem.printLabelForSearchResult){resultItem.printLabelForSearchResult=configItem.printLabelForSearchResult}if(configItem.printLabelForAttribution){resultItem.printLabelForAttribution=configItem.printLabelForAttribution}if(configItem.printLabelConfig){resultItem.printLabelConfig=configItem.printLabelConfig}if(configItem.watermark){resultItem.watermark=configItem.watermark}if(configItem.pluginData){resultItem.pluginData=configItem.pluginData}if(configItem.predefinedFilters){resultItem.predefinedFilters=configItem.predefinedFilters}if(configItem.snapping){resultItem.snapping=configItem.snapping}if(configItem.minSearchScaleDenom){resultItem.minSearchScaleDenom=configItem.minSearchScaleDenom}else if(configItem.minSearchScale){// Legacy name
40
- resultItem.minSearchScaleDenom=configItem.minSearchScale}if(configItem.themeInfoLinks){resultItem.themeInfoLinks=configItem.themeInfoLinks}if(configItem.layerTreeHiddenSublayers){resultItem.layerTreeHiddenSublayers=configItem.layerTreeHiddenSublayers}resultItem.skipEmptyFeatureAttributes=configItem.skipEmptyFeatureAttributes;resultItem.config=configItem.config;resultItem.flags=configItem.flags;resultItem.mapTips=configItem.mapTips;resultItem.userMap=configItem.userMap;resultItem.map3d=configItem.map3d;resultItem.editConfig=getEditConfig(configItem.editConfig);// set default theme
40
+ resultItem.minSearchScaleDenom=configItem.minSearchScale}if(configItem.themeInfoLinks){resultItem.themeInfoLinks=configItem.themeInfoLinks}if(configItem.layerTreeHiddenSublayers){resultItem.layerTreeHiddenSublayers=configItem.layerTreeHiddenSublayers}resultItem.skipEmptyFeatureAttributes=configItem.skipEmptyFeatureAttributes;resultItem.config=configItem.config;resultItem.flags=configItem.flags;resultItem.mapTips=configItem.mapTips;resultItem.userMap=configItem.userMap;resultItem.map3d=configItem.map3d;resultItem.viewMode=configItem.viewMode;resultItem.editConfig=getEditConfig(configItem.editConfig);// set default theme
41
41
  if(configItem["default"]||!result.themes.defaultTheme){result.themes.defaultTheme=resultItem.id}// get thumbnail asynchronously
42
42
  getThumbnail(configItem,resultItem,visibleLayers,crs,extent,resolve,proxy)})["catch"](function(error){/* eslint-disable-next-line */console.error("ERROR reading WMS GetProjectSettings of "+configItem.url+":\n",error);resultItem.error="Could not read GetProjectSettings";resultItem.title="Error";// finish task
43
43
  reject(resultItem.error)})})}// asynchronous tasks
44
44
  var tasks=[];// recursively get themes for groups
45
- function getGroupThemes(config,configGroup,result,resultGroup,proxy,groupCounter){var _iterator5=_createForOfIteratorHelper(configGroup.items),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var item=_step5.value;var itemEntry={};tasks.push(getTheme(config,item,result,itemEntry,proxy));resultGroup.items.push(itemEntry)}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}if(configGroup.groups!==undefined){var _iterator6=_createForOfIteratorHelper(configGroup.groups),_step6;try{for(_iterator6.s();!(_step6=_iterator6.n()).done;){var group=_step6.value;var groupEntry={id:"g"+ ++groupCounter,title:group.title,items:[],subdirs:[]};getGroupThemes(config,group,result,groupEntry,proxy,groupCounter);resultGroup.subdirs.push(groupEntry)}}catch(err){_iterator6.e(err)}finally{_iterator6.f()}}}function genThemes(themesConfig){// load themesConfig.json
45
+ function getGroupThemes(config,configGroup,result,resultGroup,proxy,groupCounter){var _iterator5=_createForOfIteratorHelper(configGroup.items),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var item=_step5.value;var itemEntry={};var task=getTheme(config,item,result,itemEntry,proxy);if(task){tasks.push(task);resultGroup.items.push(itemEntry)}}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}if(configGroup.groups!==undefined){var _iterator6=_createForOfIteratorHelper(configGroup.groups),_step6;try{for(_iterator6.s();!(_step6=_iterator6.n()).done;){var group=_step6.value;var groupEntry={id:"g"+ ++groupCounter,title:group.title,items:[],subdirs:[]};getGroupThemes(config,group,result,groupEntry,proxy,groupCounter);resultGroup.subdirs.push(groupEntry)}}catch(err){_iterator6.e(err)}finally{_iterator6.f()}}}function genThemes(themesConfig){// load themesConfig.json
46
46
  var config=JSON.parse(fs.readFileSync(process.cwd()+"/"+themesConfig,"utf8"));var result={themes:{title:"root",subdirs:[],items:[],defaultTheme:config.defaultTheme,defaultMapCrs:config.defaultMapCrs||"EPSG:3857",defaultDisplayCrs:config.defaultDisplayCrs,defaultScales:config.defaultScales,defaultPrintScales:config.defaultPrintScales,defaultPrintResolutions:config.defaultPrintResolutions,defaultPrintGrid:config.defaultPrintGrid,defaultSearchProviders:config.defaultSearchProviders,defaultBackgroundLayers:config.defaultBackgroundLayers||[],externalLayers:config.themes.externalLayers||[],pluginData:config.themes.pluginData,themeInfoLinks:config.themes.themeInfoLinks,backgroundLayers:config.themes.backgroundLayers.map(function(bglayer){bglayer.attribution={Title:bglayer.attribution,OnlineResource:bglayer.attributionUrl};delete bglayer.attributionUrl;return bglayer}),defaultWMSVersion:config.defaultWMSVersion}};var proxy=config.proxy||null;var groupCounter=0;getGroupThemes(config,config.themes,result,result.themes,proxy,groupCounter);Promise.all(tasks).then(function(){for(var _i=0,_autogenExternalLayer=autogenExternalLayers;_i<_autogenExternalLayer.length;_i++){var entry=_autogenExternalLayer[_i];var cpos=entry.indexOf(":");var hpos=entry.lastIndexOf("#");var type=entry.slice(0,cpos);var url=entry.slice(cpos+1,hpos);var layername=entry.slice(hpos+1);result.themes.externalLayers.push({name:entry,type:type,url:url,params:{LAYERS:layername},infoFormats:["text/plain"]})}if(result.themes.backgroundLayers!==undefined){// get thumbnails for background layers
47
47
  result.themes.backgroundLayers.map(function(backgroundLayer){var imgPath="img/mapthumbs/"+backgroundLayer.thumbnail;if(!fs.existsSync("./static/assets/"+imgPath)){imgPath="img/mapthumbs/default.jpg"}backgroundLayer.thumbnail=imgPath})}// write config file
48
48
  fs.writeFile(process.cwd()+"/static/themes.json",JSON.stringify(result,null,2),function(error){if(error){/* eslint-disable-next-line */console.error("ERROR:",error);process.exit(1)}else{/* eslint-disable-next-line */console.log("\nCreated themes.json\n\n")}})})["catch"](function(error){/* eslint-disable-next-line */console.error("ERROR:",error);process.exit(1)});return result}lookup(os.hostname(),{hints:dns.ADDRCONFIG}).then(function(result){return lookupService(result.address,0)}).then(function(result){hostFqdn="http://"+result.hostname;/* eslint-disable-next-line */console.log("Reading "+themesConfigPath);genThemes(themesConfigPath)})["catch"](function(error){process.nextTick(function(){throw error})});
@@ -540,6 +540,8 @@ def getTheme(config, configItem, result, resultItem):
540
540
 
541
541
  if "map3d" in configItem:
542
542
  resultItem["map3d"] = configItem["map3d"]
543
+ if "viewMode" in configItem:
544
+ resultItem["viewMode"] = configItem["viewMode"]
543
545
 
544
546
  resultItem["editConfig"] = getEditConfig(configItem["editConfig"] if "editConfig" in configItem else None)
545
547
 
@@ -7,7 +7,7 @@ var _FeatureCache,_KeyValCache;function _typeof(o){"@babel/helpers - typeof";ret
7
7
  */import nearley from"nearley";import toposort from"toposort";import{v5 as uuidv5}from"uuid";import StandardApp from"../components/StandardApp";import ConfigUtils from"./ConfigUtils";import LocaleUtils from"./LocaleUtils";import grammar from"./expr_grammar/grammar";var UUID_NS="5ae5531d-8e21-4456-b45d-77e9840a5bb7";export var FeatureCache=/*#__PURE__*/_createClass(function FeatureCache(){_classCallCheck(this,FeatureCache)});_FeatureCache=FeatureCache;_defineProperty(FeatureCache,"store",{});_defineProperty(FeatureCache,"requestPromises",{});_defineProperty(FeatureCache,"get",function(editIface,layerName,mapCrs,filterExpr){var key=layerName+uuidv5(JSON.stringify(filterExpr!==null&&filterExpr!==void 0?filterExpr:null),UUID_NS);if(key in _FeatureCache.store){return new Promise(function(resolve){return resolve(_FeatureCache.store[key])})}else if(key in _FeatureCache.requestPromises){return _FeatureCache.requestPromises[key]}else{_FeatureCache.requestPromises[key]=new Promise(function(resolve){var _StandardApp$store$ge,_StandardApp$store$ge2;var editConfig=(_StandardApp$store$ge=(_StandardApp$store$ge2=StandardApp.store.getState().theme.current.editConfig)===null||_StandardApp$store$ge2===void 0?void 0:_StandardApp$store$ge2[layerName])!==null&&_StandardApp$store$ge!==void 0?_StandardApp$store$ge:{};editIface.getFeatures(editConfig,mapCrs,function(result){if(key in _FeatureCache.requestPromises){if(((result===null||result===void 0?void 0:result.features)||[]).length===1){_FeatureCache.store[key]=result.features[0]}else{_FeatureCache.store[key]=null}if(key in _FeatureCache.requestPromises){resolve(_FeatureCache.store[key]);delete _FeatureCache.requestPromises[key]}}else{resolve(null)}},null,filterExpr)});return _FeatureCache.requestPromises[key]}});_defineProperty(FeatureCache,"getSync",function(editIface,layerName,mapCrs,filterExpr){var promises=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];var key=layerName+uuidv5(JSON.stringify(filterExpr!==null&&filterExpr!==void 0?filterExpr:null),UUID_NS);if(key in _FeatureCache.store){return _FeatureCache.store[key]}else{promises.push(_FeatureCache.get(editIface,layerName,mapCrs,filterExpr));return null}});_defineProperty(FeatureCache,"clear",function(){_FeatureCache.store={};_FeatureCache.requests=new Set});export var KeyValCache=/*#__PURE__*/_createClass(function KeyValCache(){_classCallCheck(this,KeyValCache)});_KeyValCache=KeyValCache;_defineProperty(KeyValCache,"store",{});_defineProperty(KeyValCache,"requestPromises",{});_defineProperty(KeyValCache,"get",function(editIface,keyvalrel,filterExpr){var key=keyvalrel+uuidv5(JSON.stringify(filterExpr!==null&&filterExpr!==void 0?filterExpr:null),UUID_NS);if(key in _KeyValCache.store){return new Promise(function(resolve){return resolve(_KeyValCache.store[key])})}else if(key in _KeyValCache.requestPromises){return _KeyValCache.requestPromises[key]}else{_KeyValCache.requestPromises[key]=new Promise(function(resolve){editIface.getKeyValues(keyvalrel,function(result){if(key in _KeyValCache.requestPromises){var dataSet=keyvalrel.split(":")[0];if(result.keyvalues&&result.keyvalues[dataSet]){var values=result.keyvalues[dataSet].map(function(entry){return{value:entry.key,label:entry.value}});_KeyValCache.store[key]=values}else{_KeyValCache.store[key]=[]}resolve(_KeyValCache.store[key]);delete _KeyValCache.requestPromises[key]}else{resolve([])}},filterExpr?[filterExpr]:null)});return _KeyValCache.requestPromises[key]}});_defineProperty(KeyValCache,"getSync",function(editIface,keyvalrel,filterExpr){var promises=arguments.length>3&&arguments[3]!==undefined?arguments[3]:[];var key=keyvalrel+uuidv5(JSON.stringify(filterExpr!==null&&filterExpr!==void 0?filterExpr:null),UUID_NS);if(key in _KeyValCache.store){return _KeyValCache.store[key]}else{promises.push(_KeyValCache.get(editIface,keyvalrel,filterExpr));return[]}});_defineProperty(KeyValCache,"clear",function(){_KeyValCache.store={};_KeyValCache.requestPromises={}});function _representValue(attr,editConfig,editIface,promises){var _window$qwc2Expressio,_field$constraints;// Resolve kvrel
8
8
  var field=(editConfig.fields||[]).find(function(f){return f.id===attr});var value=(_window$qwc2Expressio=window.qwc2ExpressionParserContext.feature)===null||_window$qwc2Expressio===void 0||(_window$qwc2Expressio=_window$qwc2Expressio.properties)===null||_window$qwc2Expressio===void 0?void 0:_window$qwc2Expressio[attr];var keyvalrel=field===null||field===void 0||(_field$constraints=field.constraints)===null||_field$constraints===void 0?void 0:_field$constraints.keyvalrel;if(!keyvalrel){return value}var keyvals=KeyValCache.getSync(editIface,keyvalrel,null,promises).reduce(function(res,entry){return _objectSpread(_objectSpread({},res),{},_defineProperty({},entry.value,entry.label))},{});if(field.constraints.allowMulti){return"{"+_toConsumableArray(new Set(JSON.parse("["+value.slice(1,-1)+"]"))).map(function(x){var _keyvals$x;return(_keyvals$x=keyvals[x])!==null&&_keyvals$x!==void 0?_keyvals$x:x}).join(", ")+"}"}else{var _keyvals$value;return(_keyvals$value=keyvals[value])!==null&&_keyvals$value!==void 0?_keyvals$value:value}}export function parseExpression(expr,feature,editConfig,editIface,mapPrefix,mapCrs,reevaluateCallback){var asFilter=arguments.length>7&&arguments[7]!==undefined?arguments[7]:false;var reevaluate=arguments.length>8&&arguments[8]!==undefined?arguments[8]:false;var parser=new nearley.Parser(nearley.Grammar.fromCompiled(grammar));var promises=[];window.qwc2ExpressionParserContext={feature:feature,getFeature:function getFeature(layerName,attr,value){return FeatureCache.getSync(editIface,layerName,mapCrs,[[attr,"=",value]],promises)},representValue:function representValue(attr){return _representValue(attr,editConfig,editIface,promises)},asFilter:asFilter,username:ConfigUtils.getConfigProp("username"),layer:editConfig.layerName,projection:mapCrs,mapPrefix:mapPrefix,lang:LocaleUtils.lang()};var result=null;try{parser.feed(expr.replace(/\n/," "));result=parser.results[0]}catch(e){/* eslint-disable-next-line */console.warn("Failed to evaluate expression "+expr.replace(/\n/," "))}delete window.qwc2ExpressionParserContext;if(promises.length>0){// Expression evaluation is incomplete due to pending feature requests, reevaluate when promises are resolved
9
9
  Promise.all(promises).then(function(){return parseExpression(expr,feature,editConfig,editIface,mapPrefix,mapCrs,reevaluateCallback,asFilter,true)});return null}else{if(reevaluate){reevaluateCallback()}if(asFilter){result=[result]}return result}}export function parseExpressionsAsync(fieldExpressions,feature,editConfig,editIface,mapPrefix,mapCrs,asFilter){var promises=[];return new Promise(function(resolve){var newfeature=_objectSpread(_objectSpread({},feature),{},{properties:_objectSpread({},feature.properties)});window.qwc2ExpressionParserContext={feature:newfeature,getFeature:function getFeature(layerName,attr,value){return FeatureCache.getSync(editIface,layerName,mapCrs,[[attr,"=",value]],promises)},representValue:function representValue(attr){return _representValue(attr,editConfig,editIface,promises)},asFilter:asFilter,username:ConfigUtils.getConfigProp("username"),layer:editConfig.layerName,projection:mapCrs,mapPrefix:mapPrefix,lang:LocaleUtils.lang()};var results=fieldExpressions.reduce(function(res,_ref){var field=_ref.field,expression=_ref.expression;var parser=new nearley.Parser(nearley.Grammar.fromCompiled(grammar));try{parser.feed(expression.replace(/\n/," "));// NOTE: include intermediate results in next context feature
10
- newfeature.properties[field]=parser.results[0];return _objectSpread(_objectSpread({},res),{},_defineProperty({},field,parser.results[0]))}catch(e){/* eslint-disable-next-line */console.warn("Failed to evaluate expression "+expr.replace(/\n/," "));return res}},{});delete window.qwc2ExpressionParserContext;if(promises.length>0){// Expression evaluation is incomplete due to pending feature requests, reevaluate when promises are resolved
10
+ newfeature.properties[field]=parser.results[0];return _objectSpread(_objectSpread({},res),{},_defineProperty({},field,parser.results[0]))}catch(e){/* eslint-disable-next-line */console.warn("Failed to evaluate expression "+expression.replace(/\n/," "));return res}},{});delete window.qwc2ExpressionParserContext;if(promises.length>0){// Expression evaluation is incomplete due to pending feature requests, reevaluate when promises are resolved
11
11
  Promise.all(promises).then(function(){parseExpressionsAsync(fieldExpressions,newfeature,editConfig,editIface,mapPrefix,mapCrs,asFilter).then(function(results2){return resolve(results2)})})}else{resolve(results)}})}var FeatureTemplateFactories={};export function setFeatureTemplateFactory(dataset,factory){FeatureTemplateFactories[dataset]=factory}export function getFeatureTemplate(editConfig,feature,editIface,mapPrefix,mapCrs,callback){if(editConfig.editDataset in FeatureTemplateFactories){feature=FeatureTemplateFactories[editConfig.editDataset](feature)}// Apply default values
12
12
  var defaultFieldExpressions=editConfig.fields.reduce(function(res,field){if(field.defaultValue){return[].concat(_toConsumableArray(res),[{field:field.id,expression:field.defaultValue.replace(/^expr:/,"")}])}return res},[]);FeatureCache.clear();parseExpressionsAsync(defaultFieldExpressions,feature,editConfig,editIface,mapPrefix,mapCrs).then(function(result){// Adjust values based on field type
13
13
  editConfig.fields.forEach(function(field){if(field.id in result&&field.type==="date"){result[field.id]=result[field.id].split("T")[0]}});callback(_objectSpread(_objectSpread({},feature),{},{properties:_objectSpread(_objectSpread({},feature.properties),result)}))})}export function computeExpressionFields(editConfig,feature,editIface,mapCrs,callback){// Collect field expressions and dependencies
@@ -7,6 +7,6 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
7
7
  */import axios from"axios";import geojsonBbox from"geojson-bounding-box";import isEmpty from"lodash.isempty";import ol from"openlayers";import url from"url";import{v1 as uuidv1}from"uuid";import{LayerRole}from"../actions/layers";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import LayerUtils from"../utils/LayerUtils";import MapUtils from"../utils/MapUtils";import VectorLayerUtils from"./VectorLayerUtils";function identifyRequestParams(layer,queryLayers,projection,params){var _layer$format;var format="text/plain";var infoFormats=layer.infoFormats||[];if(infoFormats.includes("text/xml")&&(layer.serverType==="qgis"||infoFormats.length===1)){format="text/xml"}else if(infoFormats.includes("application/geojson")){format="application/geojson"}else if(infoFormats.includes("application/geo+json")){format="application/geo+json"}else if(infoFormats.includes("application/json")){format="application/json"}else if(infoFormats.includes("text/xml;subtype=gml/3.2.1")){format="text/xml;subtype=gml/3.2.1"}else if(infoFormats.includes("text/xml;subtype=gml/3.2.0")){format="text/xml;subtype=gml/3.2.0"}else if(infoFormats.includes("text/xml;subtype=gml/3.2")){format="text/xml;subtype=gml/3.2"}else if(infoFormats.includes("text/xml;subtype=gml/3.1.1")){format="text/xml;subtype=gml/3.1.1"}else if(infoFormats.includes("text/xml;subtype=gml/3.1.0")){format="text/xml;subtype=gml/3.1.0"}else if(infoFormats.includes("text/xml;subtype=gml/3.1")){format="text/xml;subtype=gml/3.1"}else if(infoFormats.includes("text/xml;subtype=gml/3.0")){format="text/xml;subtype=gml/3.0"}else if(infoFormats.includes("text/html")){format="text/html"}else if(infoFormats.includes("application/vnd.ogc.gml")){format="application/vnd.ogc.gml"}var styles=(layer.params.STYLES||"").split(",");var styleMap=layer.params.LAYERS.split(",").reduce(function(res,lyr,idx){var _styles$idx;return _objectSpread(_objectSpread({},res),{},_defineProperty({},lyr,(_styles$idx=styles[idx])!==null&&_styles$idx!==void 0?_styles$idx:""))});var queryStyles=queryLayers.split(",").map(function(lyr){var _styleMap$lyr;return(_styleMap$lyr=styleMap[lyr])!==null&&_styleMap$lyr!==void 0?_styleMap$lyr:""}).join(",");return{url:layer.featureInfoUrl.split("?")[0],params:_objectSpread(_objectSpread(_objectSpread({},url.parse(layer.featureInfoUrl,true).query),{},{service:"WMS",version:layer.version,request:"GetFeatureInfo",id:layer.id,layers:queryLayers,query_layers:queryLayers,styles:queryStyles,srs:projection,crs:projection,format:(_layer$format=layer.format)!==null&&_layer$format!==void 0?_layer$format:"image/png",info_format:format,with_geometry:true,with_maptip:false},layer.dimensionValues),params)}}var IdentifyUtils={getQueryLayers:function getQueryLayers(maplayers,map){var queryableLayers=maplayers.filter(function(l){// All non-background WMS layers with a non-empty queryLayers list
8
8
  return l.visibility&&l.type==="wms"&&l.role!==LayerRole.BACKGROUND&&(l.queryLayers||[]).length>0});var mapScale=MapUtils.computeForZoom(map.scales,map.zoom);var result=[];queryableLayers.forEach(function(layer){var layers=[];var queryLayers=layer.queryLayers;for(var i=0;i<queryLayers.length;++i){if(layer.externalLayerMap&&layer.externalLayerMap[queryLayers[i]]){var sublayer=LayerUtils.searchSubLayer(layer,"name",queryLayers[i]);var sublayerVisible=LayerUtils.layerScaleInRange(sublayer,mapScale);if(!isEmpty(layer.externalLayerMap[queryLayers[i]].queryLayers)&&sublayerVisible){layers.push(layer.externalLayerMap[queryLayers[i]])}}else if(layers.length>0&&layers[layers.length-1].id===layer.id){layers[layers.length-1].queryLayers.push(queryLayers[i])}else{layers.push(_objectSpread(_objectSpread({},layer),{},{queryLayers:[queryLayers[i]]}))}}result=result.concat(layers)});return result},buildRequest:function buildRequest(layer,queryLayers,center,map){var _layer$params$FILTER;var options=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};var size=[101,101];var resolution=MapUtils.computeForZoom(map.resolutions,map.zoom);var dx=0.5*resolution*size[0];var dy=0.5*resolution*size[1];var version=layer.version;var bbox=[center[0]-dx,center[1]-dy,center[0]+dx,center[1]+dy];if(CoordinatesUtils.getAxisOrder(map.projection).substr(0,2)==="ne"&&version==="1.3.0"){bbox=[center[1]-dx,center[0]-dy,center[1]+dx,center[0]+dy]}var params=_objectSpread({height:size[0],width:size[1],feature_count:100,x:Math.round(size[0]*0.5),y:Math.round(size[1]*0.5),i:Math.round(size[0]*0.5),j:Math.round(size[1]*0.5),bbox:bbox.join(","),filter:(_layer$params$FILTER=layer.params.FILTER)!==null&&_layer$params$FILTER!==void 0?_layer$params$FILTER:""},options);return identifyRequestParams(layer,queryLayers,map.projection,params)},buildFilterRequest:function buildFilterRequest(layer,queryLayers,filterGeom,map){var options=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};var params=_objectSpread({feature_count:100,FILTER_GEOM:filterGeom},options);return identifyRequestParams(layer,queryLayers,map.projection,params)},sendRequest:function sendRequest(request,responseHandler){var urlParts=url.parse(request.url,true);urlParts.query=_objectSpread(_objectSpread({},urlParts.query),request.params);delete urlParts.search;var requestUrl=url.format(urlParts);var maxUrlLength=ConfigUtils.getConfigProp("wmsMaxGetUrlLength",null,2048);if(requestUrl.length>maxUrlLength){// Switch to POST if url is too long
9
9
  var reqUrlParts=requestUrl.split("?");var options={headers:{"content-type":"application/x-www-form-urlencoded"}};axios.post(reqUrlParts[0],reqUrlParts[1],options).then(function(postResp){responseHandler(postResp.data)})["catch"](function(){axios.get(request.url,{params:request.params}).then(function(getResp){responseHandler(getResp.data)})["catch"](function(){responseHandler(null)})})}else{axios.get(request.url,{params:request.params}).then(function(getResp){responseHandler(getResp.data)})["catch"](function(){responseHandler(null)})}},parseResponse:function parseResponse(response,layer,format,clickPoint,projection,featureInfoReturnsLayerName){var decimals=CoordinatesUtils.getPrecision(projection);var posstr=clickPoint?clickPoint[0].toFixed(decimals)+", "+clickPoint[1].toFixed(decimals):"";var results={};if(["application/json","application/geojson","application/geo+json","GeoJSON"].includes(format)){results=IdentifyUtils.parseGeoJSONResponse(response,projection,layer)}else if(format==="text/xml"){results=IdentifyUtils.parseXmlResponse(response,projection,layer,posstr,featureInfoReturnsLayerName)}else if(format==="application/vnd.ogc.gml"){results=IdentifyUtils.parseGmlResponse(response,projection,layer,posstr)}else if(format.startsWith("text/xml;subtype=gml/3.1")||format.startsWith("text/xml;subtype=gml/3.0")){results=IdentifyUtils.parseGml3Response(response,projection,layer)}else if(format.startsWith("text/xml;subtype=gml/3.2")){results=IdentifyUtils.parseGml32Response(response,projection,layer)}else if(format==="text/plain"){results[layer.name]=[{type:"text",text:response,id:posstr,layername:layer.name,layertitle:layer.title}]}else if(format==="text/html"){results[layer.name]=[{type:"html",text:response,id:posstr,layername:layer.name,layertitle:layer.title}]}// Add clickPos, bounding box, displayname and layer name / title
10
- for(var _i=0,_Object$keys=Object.keys(results);_i<_Object$keys.length;_i++){var layername=_Object$keys[_i];var _iterator=_createForOfIteratorHelper(results[layername]),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var _item$layertitle;var item=_step.value;if(item.type==="Feature"&&!item.bbox&&item.geometry){item.crs=projection;item.bbox=geojsonBbox(item)}item.clickPos=clickPoint;item.displayname=IdentifyUtils.determineDisplayName(layer,layername,item);item.layertitle=(_item$layertitle=item.layertitle)!==null&&_item$layertitle!==void 0?_item$layertitle:layername}}catch(err){_iterator.e(err)}finally{_iterator.f()}}return results},determineDisplayName:function determineDisplayName(layer,layername,item){var properties=item.properties||{};if(item.displayfield){if(properties[item.displayfield]&&properties[item.displayfield][0]!=="<"){return properties[item.displayfield]}}var sublayer=LayerUtils.searchSubLayer(layer,"name",layername);if(sublayer&&sublayer.displayField){if(properties[sublayer.displayField]&&properties[sublayer.displayField][0]!=="<"){return properties[sublayer.displayField]}}return properties.name||properties.Name||properties.NAME||item.id},parseXmlFeature:function parseXmlFeature(feature,geometrycrs,id,featurereport,displayfield,layername,layertitle,layerinfo){var featureResult={};featureResult.type="Feature";featureResult.id=id;featureResult.featurereport=featurereport;featureResult.displayfield=displayfield;featureResult.layername=layername;featureResult.layertitle=layertitle;featureResult.layerinfo=layerinfo;var bboxes=feature.getElementsByTagName("BoundingBox");if(bboxes.length>0){var bbox=bboxes[0];var crs=bbox.attributes.CRS?bbox.attributes.CRS.value:bbox.attributes.SRS.value;featureResult.bbox=[parseFloat(bbox.attributes.minx.value),parseFloat(bbox.attributes.miny.value),parseFloat(bbox.attributes.maxx.value),parseFloat(bbox.attributes.maxy.value)];featureResult.crs=crs}featureResult.properties={};var attrmapping={};var attributes=feature.getElementsByTagName("Attribute");for(var i=0;i<attributes.length;++i){var attribute=attributes[i];if(attribute.attributes.name.value==="geometry"){var wkt=attribute.attributes.value.value;var geoJsonFeature=VectorLayerUtils.wktToGeoJSON(wkt,geometrycrs,featureResult.crs);if(geoJsonFeature){featureResult.geometry=geoJsonFeature.geometry}}else{featureResult.properties[attribute.attributes.name.value]=attribute.attributes.value.value;if(attribute.attributes.attrname){attrmapping[attribute.attributes.name.value]=attribute.attributes.attrname.value}}}var htmlContent=feature.getElementsByTagName("HtmlContent");if(htmlContent.length>0){featureResult.properties.htmlContent=htmlContent[0].textContent;featureResult.properties.htmlContentInline=htmlContent[0].getAttribute("inline")==="1"||htmlContent[0].getAttribute("inline")==="true"}if(!isEmpty(attrmapping)){featureResult.attribnames=attrmapping}return featureResult},parseXmlResponse:function parseXmlResponse(response,geometrycrs,layer){var _this=this;var posstr=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var featureInfoReturnsLayerName=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;var mapLayers=arguments.length>5&&arguments[5]!==undefined?arguments[5]:null;var parser=new DOMParser;var doc=parser.parseFromString(response,"text/xml");var layersEl=[].slice.call(doc.firstChild.getElementsByTagName("Layer"));var result={};var idcounter=0;var _iterator2=_createForOfIteratorHelper(layersEl),_step2;try{var _loop=function _loop(){var layerEl=_step2.value;var featurereport=layerEl.attributes.featurereport?layerEl.attributes.featurereport.value:null;var displayfield=layerEl.attributes.displayfield?layerEl.attributes.displayfield.value:null;var layername="";var layertitle="";if(layerEl.attributes.layername){layername=layerEl.attributes.layername.value;layertitle=layerEl.attributes.name.value}else if(featureInfoReturnsLayerName){var _LayerUtils$searchSub,_LayerUtils$searchSub2;layername=layerEl.attributes.name.value;layertitle=(_LayerUtils$searchSub=(_LayerUtils$searchSub2=LayerUtils.searchSubLayer(layer,"name",layername))===null||_LayerUtils$searchSub2===void 0?void 0:_LayerUtils$searchSub2.title)!==null&&_LayerUtils$searchSub!==void 0?_LayerUtils$searchSub:layername}else{var _LayerUtils$searchSub3,_LayerUtils$searchSub4;layertitle=layerEl.attributes.name.value;layername=(_LayerUtils$searchSub3=(_LayerUtils$searchSub4=LayerUtils.searchSubLayer(layer,"title",layertitle))===null||_LayerUtils$searchSub4===void 0?void 0:_LayerUtils$searchSub4.name)!==null&&_LayerUtils$searchSub3!==void 0?_LayerUtils$searchSub3:layertitle}var layerinfo=layerEl.attributes.layerinfo?layerEl.attributes.layerinfo.value:null;var features=[].slice.call(layerEl.getElementsByTagName("Feature"));if(features.length>0){result[layername]=features.map(function(feature){return _this.parseXmlFeature(feature,geometrycrs,feature.attributes.id.value,featurereport,displayfield,layername,layertitle,layerinfo)})}else{var attributes=[].slice.call(layerEl.getElementsByTagName("Attribute"));if(attributes.length>0){var id=posstr||""+idcounter++;result[layername]=[_this.parseXmlFeature(layerEl,geometrycrs,id,featurereport,displayfield,layername,layertitle,layerinfo)]}}};for(_iterator2.s();!(_step2=_iterator2.n()).done;){_loop()}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return result},parseGeoJSONResponse:function parseGeoJSONResponse(response,geometrycrs,layer){var result={};(response.features||[]).map(function(feature){// Deduce layer name as far as possible from feature id
10
+ for(var _i=0,_Object$keys=Object.keys(results);_i<_Object$keys.length;_i++){var layername=_Object$keys[_i];var _iterator=_createForOfIteratorHelper(results[layername]),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var _item$layertitle;var item=_step.value;if(item.type==="Feature"&&!item.bbox&&item.geometry){item.crs=projection;item.bbox=geojsonBbox(item)}item.clickPos=clickPoint;item.displayname=IdentifyUtils.determineDisplayName(layer,layername,item);item.layertitle=(_item$layertitle=item.layertitle)!==null&&_item$layertitle!==void 0?_item$layertitle:layername}}catch(err){_iterator.e(err)}finally{_iterator.f()}}return results},determineDisplayName:function determineDisplayName(layer,layername,item){var properties=item.properties||{};if(item.displayfield){if(properties[item.displayfield]&&properties[item.displayfield][0]!=="<"){return properties[item.displayfield]}}var sublayer=LayerUtils.searchSubLayer(layer,"name",layername);if(sublayer&&sublayer.displayField){if(properties[sublayer.displayField]&&properties[sublayer.displayField][0]!=="<"){return properties[sublayer.displayField]}}return properties.name||properties.Name||properties.NAME||item.id},parseXmlFeature:function parseXmlFeature(feature,geometrycrs,id,featurereport,displayfield,layername,layertitle,layerinfo){var featureResult={};featureResult.type="Feature";featureResult.id=id;featureResult.featurereport=featurereport;featureResult.displayfield=displayfield;featureResult.layername=layername;featureResult.layertitle=layertitle;featureResult.layerinfo=layerinfo;var bboxes=feature.getElementsByTagName("BoundingBox");if(bboxes.length>0){var bbox=bboxes[0];var crs=bbox.attributes.CRS?bbox.attributes.CRS.value:bbox.attributes.SRS.value;featureResult.bbox=[parseFloat(bbox.attributes.minx.value),parseFloat(bbox.attributes.miny.value),parseFloat(bbox.attributes.maxx.value),parseFloat(bbox.attributes.maxy.value)];featureResult.crs=crs}featureResult.properties={};var attrmapping={};var attributes=feature.getElementsByTagName("Attribute");for(var i=0;i<attributes.length;++i){var attribute=attributes[i];if(attribute.attributes.name.value==="geometry"){var wkt=attribute.attributes.value.value;var geoJsonFeature=VectorLayerUtils.wktToGeoJSON(wkt,geometrycrs,featureResult.crs);if(geoJsonFeature){featureResult.geometry=geoJsonFeature.geometry}}else{featureResult.properties[attribute.attributes.name.value]=attribute.attributes.value.value;if(attribute.attributes.attrname){attrmapping[attribute.attributes.name.value]=attribute.attributes.attrname.value}}}var htmlContent=feature.getElementsByTagName("HtmlContent");if(htmlContent.length>0){featureResult.properties.htmlContent=htmlContent[0].textContent;featureResult.properties.htmlContentInline=htmlContent[0].getAttribute("inline")==="1"||htmlContent[0].getAttribute("inline")==="true"}if(!isEmpty(attrmapping)){featureResult.attribnames=attrmapping}return featureResult},parseXmlResponse:function parseXmlResponse(response,geometrycrs,layer){var _doc$firstChild,_doc$firstChild$getEl,_this=this;var posstr=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var featureInfoReturnsLayerName=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;var mapLayers=arguments.length>5&&arguments[5]!==undefined?arguments[5]:null;var parser=new DOMParser;var doc=parser.parseFromString(response,"text/xml");var layersEl=[].slice.call(((_doc$firstChild=doc.firstChild)===null||_doc$firstChild===void 0||(_doc$firstChild$getEl=_doc$firstChild.getElementsByTagName)===null||_doc$firstChild$getEl===void 0?void 0:_doc$firstChild$getEl.call(_doc$firstChild,"Layer"))||[]);var result={};var idcounter=0;var _iterator2=_createForOfIteratorHelper(layersEl),_step2;try{var _loop=function _loop(){var layerEl=_step2.value;var featurereport=layerEl.attributes.featurereport?layerEl.attributes.featurereport.value:null;var displayfield=layerEl.attributes.displayfield?layerEl.attributes.displayfield.value:null;var layername="";var layertitle="";if(layerEl.attributes.layername){layername=layerEl.attributes.layername.value;layertitle=layerEl.attributes.name.value}else if(featureInfoReturnsLayerName){var _LayerUtils$searchSub,_LayerUtils$searchSub2;layername=layerEl.attributes.name.value;layertitle=(_LayerUtils$searchSub=(_LayerUtils$searchSub2=LayerUtils.searchSubLayer(layer,"name",layername))===null||_LayerUtils$searchSub2===void 0?void 0:_LayerUtils$searchSub2.title)!==null&&_LayerUtils$searchSub!==void 0?_LayerUtils$searchSub:layername}else{var _LayerUtils$searchSub3,_LayerUtils$searchSub4;layertitle=layerEl.attributes.name.value;layername=(_LayerUtils$searchSub3=(_LayerUtils$searchSub4=LayerUtils.searchSubLayer(layer,"title",layertitle))===null||_LayerUtils$searchSub4===void 0?void 0:_LayerUtils$searchSub4.name)!==null&&_LayerUtils$searchSub3!==void 0?_LayerUtils$searchSub3:layertitle}var layerinfo=layerEl.attributes.layerinfo?layerEl.attributes.layerinfo.value:null;var features=[].slice.call(layerEl.getElementsByTagName("Feature"));if(features.length>0){result[layername]=features.map(function(feature){return _this.parseXmlFeature(feature,geometrycrs,feature.attributes.id.value,featurereport,displayfield,layername,layertitle,layerinfo)})}else{var attributes=[].slice.call(layerEl.getElementsByTagName("Attribute"));if(attributes.length>0){var id=posstr||""+idcounter++;result[layername]=[_this.parseXmlFeature(layerEl,geometrycrs,id,featurereport,displayfield,layername,layertitle,layerinfo)]}}};for(_iterator2.s();!(_step2=_iterator2.n()).done;){_loop()}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return result},parseGeoJSONResponse:function parseGeoJSONResponse(response,geometrycrs,layer){var result={};(response.features||[]).map(function(feature){// Deduce layer name as far as possible from feature id
11
11
  var id=feature.id||(feature.properties||{}).OBJECTID||uuidv1();if(result[layer.name]===undefined){result[layer.name]=[]}var geometry=feature.geometry;if(geometry&&response.crs){var _response$crs$propert,_response$crs$propert2;// Reproject geometry only if there is crs information in GetFeatureInfo response
12
12
  geometry=VectorLayerUtils.reprojectGeometry(geometry,(_response$crs$propert=(_response$crs$propert2=response.crs.properties)===null||_response$crs$propert2===void 0?void 0:_response$crs$propert2.name)!==null&&_response$crs$propert!==void 0?_response$crs$propert:"EPSG:4326",geometrycrs)}result[layer.name].push(_objectSpread(_objectSpread({},feature),{},{id:id,geometry:geometry,layername:layer.name,layertitle:layer.title}))});return result},parseGmlResponse:function parseGmlResponse(response,geometrycrs,layer,posstr){var parser=new DOMParser;var doc=parser.parseFromString(response,"text/xml");var result={};var msGMLOutput=doc.getElementsByTagName("msGMLOutput")[0];if(msGMLOutput){var count=0;var _iterator3=_createForOfIteratorHelper([].slice.call(msGMLOutput.children)),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var layerEl=_step3.value;var layerName=layerEl.nodeName.replace(/_layer$/,"");var featureName=layerName+"_feature";result[layerName]=[];var _iterator4=_createForOfIteratorHelper([].slice.call(layerEl.getElementsByTagName(featureName))),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var featureEl=_step4.value;var context=[{featureType:featureName}];var feature=new ol.format.GeoJSON().writeFeatureObject(new ol.format.GML2().readFeatureElement(featureEl,context));feature.id=count++;feature.layername=layer.name;feature.layertitle=layer.title;delete feature.properties.boundedBy;result[layerName].push(feature)}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}else{result[layer.name]=[{type:"text",text:response,id:posstr}]}return result},parseGml3Response:function parseGml3Response(response,geometrycrs,layer){var _fmtGeoJson$writeFeat,_fmtGeoJson$writeFeat2;var fmtGml3=new ol.format.GML3;var fmtGeoJson=new ol.format.GeoJSON;return _defineProperty({},layer.name,(_fmtGeoJson$writeFeat=(_fmtGeoJson$writeFeat2=fmtGeoJson.writeFeaturesObject(fmtGml3.readFeatures(response)))===null||_fmtGeoJson$writeFeat2===void 0?void 0:_fmtGeoJson$writeFeat2.features)!==null&&_fmtGeoJson$writeFeat!==void 0?_fmtGeoJson$writeFeat:[])},parseGml32Response:function parseGml32Response(response,geometrycrs,layer){var _fmtGeoJson$writeFeat3,_fmtGeoJson$writeFeat4;var fmtGml32=new ol.format.GML32;var fmtGeoJson=new ol.format.GeoJSON;return _defineProperty({},layer.name,(_fmtGeoJson$writeFeat3=(_fmtGeoJson$writeFeat4=fmtGeoJson.writeFeaturesObject(fmtGml32.readFeatures(response)))===null||_fmtGeoJson$writeFeat4===void 0?void 0:_fmtGeoJson$writeFeat4.features)!==null&&_fmtGeoJson$writeFeat3!==void 0?_fmtGeoJson$writeFeat3:[])}};export default IdentifyUtils;
@@ -9,4 +9,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
9
9
  console.warn("Could not find background layer "+entry.name)}};for(_iterator.s();!(_step=_iterator.n()).done;){if(_loop())continue}}catch(err){_iterator.e(err)}finally{_iterator.f()}if(visibleIdx>=0){bgLayers[visibleIdx].visibility=true}else if(defaultVisibleIdx>=0&&visibleLayer!==""){bgLayers[defaultVisibleIdx].visibility=true}return bgLayers},createThemeLayer:function createThemeLayer(theme,themes){var role=arguments.length>2&&arguments[2]!==undefined?arguments[2]:LayerRole.THEME;var subLayers=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var urlParts=url.parse(theme.url,true);// Resolve relative urls
10
10
  if(!urlParts.host){var locationParts=url.parse(window.location.href);urlParts.protocol=locationParts.protocol;urlParts.host=locationParts.host}var sublayerNames=LayerUtils.getSublayerNames({sublayers:subLayers!==null&&subLayers!==void 0?subLayers:theme.sublayers});var baseParams=urlParts.query;var layer={type:"wms",id:theme.id,url:url.format(urlParts),version:theme.version||themes.defaultWMSVersion||"1.3.0",visibility:true,expanded:theme.expanded,name:theme.name,title:theme.title,bbox:theme.bbox,sublayers:subLayers!==null&&subLayers!==void 0?subLayers:theme.sublayers,tiled:theme.tiled,tileSize:theme.tileSize,ratio:!theme.tiled?1:undefined,serverType:"qgis",format:theme.format,rev:+new Date,role:role,attribution:theme.attribution,legendUrl:ThemeUtils.inheritBaseUrlParams(theme.legendUrl,theme.url,baseParams),printUrl:ThemeUtils.inheritBaseUrlParams(theme.printUrl,theme.url,baseParams),featureInfoUrl:ThemeUtils.inheritBaseUrlParams(theme.featureInfoUrl,theme.url,baseParams),infoFormats:theme.infoFormats,mapFormats:theme.availableFormats,layerTreeHiddenSublayers:theme.layerTreeHiddenSublayers,predefinedFilters:(theme.predefinedFilters||[]).filter(function(entry){return Object.keys(entry.filter).find(function(name){return sublayerNames.includes(name)})}),externalLayerMap:_objectSpread(_objectSpread({},theme.externalLayerMap),(theme.externalLayers||[]).reduce(function(res,cur){res[cur.internalLayer]=_objectSpread({},themes.externalLayers.find(function(entry){return entry.name===cur.name}));LayerUtils.completeExternalLayer(res[cur.internalLayer],LayerUtils.searchSubLayer(theme,"name",cur.internalLayer));return res},{}))};layer=LayerUtils.recomputeLayerBBox(layer);// Drawing order only makes sense if layer reordering is disabled
11
11
  if(ConfigUtils.getConfigProp("allowReorderingLayers",theme)!==true){layer.drawingOrder=theme.drawingOrder}return layer},inheritBaseUrlParams:function inheritBaseUrlParams(capabilityUrl,baseUrl,baseParams){if(!capabilityUrl){return baseUrl}if(capabilityUrl.split("?")[0]===baseUrl.split("?")[0]){var parts=url.parse(capabilityUrl,true);parts.query=_objectSpread(_objectSpread({},baseParams),parts.query);return url.format(parts)}return capabilityUrl},searchThemes:function searchThemes(themes,searchtext){var filter=new RegExp(removeDiacritics(searchtext).replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&"),"i");var matches=[];var _searchThemeGroup=function searchThemeGroup(themeGroup){(themeGroup.subdirs||[]).forEach(function(subdir){return _searchThemeGroup(subdir,filter)});matches.push.apply(matches,_toConsumableArray((themeGroup.items||[]).filter(function(item){return removeDiacritics(item.title).match(filter)||removeDiacritics(item.keywords||"").match(filter)||removeDiacritics(item["abstract"]||"").match(filter)})))};_searchThemeGroup(themes,filter);return isEmpty(matches)?[]:[{id:"themes",titlemsgid:"search.themes",type:SearchResultType.THEME,items:matches.map(function(theme){return{id:theme.id,text:theme.title,theme:theme,layer:ThemeUtils.createThemeLayer(theme,themes),thumbnail:ConfigUtils.getAssetsPath()+"/"+theme.thumbnail}})}]},searchThemeLayers:function searchThemeLayers(themes,searchtext){var filter=new RegExp(removeDiacritics(searchtext).replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&"),"i");var matches=[];var _searchLayer=function searchLayer(theme,layer){var path=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];(layer.sublayers||[]).forEach(function(sublayer,idx){var subpath=[].concat(_toConsumableArray(path),[idx]);if(removeDiacritics(sublayer.name).match(filter)||removeDiacritics(sublayer.title).match(filter)){// Clone theme, ensuring path to layer is visible
12
- var newtheme=_objectSpread({},theme);var cur=newtheme;var _loop2=function _loop2(i){var isMutuallyExclusive=cur.mutuallyExclusive;cur.sublayers=cur.sublayers.map(function(entry,j){return _objectSpread(_objectSpread({},entry),{},{visibility:j===subpath[i]||entry.visibility&&!isMutuallyExclusive})});cur=cur.sublayers[subpath[i]]};for(var i=0;i<subpath.length;++i){_loop2(i)}matches.push({theme:newtheme,layer:ThemeUtils.createThemeLayer(newtheme,themes,LayerRole.USERLAYER,[cur])})}_searchLayer(theme,sublayer,subpath)})};var _searchThemeGroup2=function searchThemeGroup(themeGroup){(themeGroup.subdirs||[]).forEach(function(subdir){return _searchThemeGroup2(subdir,filter)});(themeGroup.items||[]).forEach(function(item){return _searchLayer(item,item)})};_searchThemeGroup2(themes,filter);return isEmpty(matches)?[]:[{id:"themelayers",titlemsgid:"search.themelayers",type:SearchResultType.THEMELAYER,items:matches.map(function(result){return{id:result.layer.id+":"+result.layer.sublayers[0].name,text:result.layer.title+": "+result.layer.sublayers[0].title,layer:result.layer,theme:result.theme}})}]},getThemeNames:function getThemeNames(themes){var names=(themes.items||[]).reduce(function(res,theme){return _objectSpread(_objectSpread({},res),{},_defineProperty({},theme.id,theme.title))},{});(themes.subdirs||[]).forEach(function(group){Object.assign(names,ThemeUtils.getThemeNames(group))});return names},themeFlagsAllowed:function themeFlagsAllowed(theme,flagWhitelist,flagBlacklist){var themeFlags=(theme===null||theme===void 0?void 0:theme.flags)||[];if(flagBlacklist&&flagBlacklist.find(function(flag){return themeFlags.includes(flag)})!==undefined){return false}if(flagWhitelist&&flagWhitelist.find(function(flag){return themeFlags.includes(flag)})===undefined){return false}return true}};export default ThemeUtils;
12
+ var newtheme=_objectSpread({},theme);var cur=newtheme;var _loop2=function _loop2(i){var isMutuallyExclusive=cur.mutuallyExclusive;cur.sublayers=cur.sublayers.map(function(entry,j){return _objectSpread(_objectSpread({},entry),{},{visibility:j===subpath[i]||entry.visibility&&!isMutuallyExclusive})});cur=cur.sublayers[subpath[i]]};for(var i=0;i<subpath.length;++i){_loop2(i)}matches.push({theme:newtheme,layer:ThemeUtils.createThemeLayer(newtheme,themes,LayerRole.USERLAYER,[cur])})}_searchLayer(theme,sublayer,subpath)})};var _searchThemeGroup2=function searchThemeGroup(themeGroup){(themeGroup.subdirs||[]).forEach(function(subdir){return _searchThemeGroup2(subdir,filter)});(themeGroup.items||[]).forEach(function(item){return _searchLayer(item,item)})};_searchThemeGroup2(themes,filter);return isEmpty(matches)?[]:[{id:"themelayers",titlemsgid:"search.themelayers",type:SearchResultType.THEMELAYER,items:matches.map(function(result){return{id:result.layer.id+":"+result.layer.sublayers[0].name,text:result.layer.title+": "+result.layer.sublayers[0].title,layer:result.layer,theme:result.theme}})}]},getThemeNames:function getThemeNames(themes){var names=(themes.items||[]).reduce(function(res,theme){return _objectSpread(_objectSpread({},res),{},_defineProperty({},theme.id,theme.title))},{});(themes.subdirs||[]).forEach(function(group){Object.assign(names,ThemeUtils.getThemeNames(group))});return names},themeFlagsAllowed:function themeFlagsAllowed(theme,flagWhitelist,flagBlacklist){var themeFlags=(theme===null||theme===void 0?void 0:theme.flags)||[];if(flagBlacklist&&flagBlacklist.find(function(flag){return themeFlags.includes(flag)})!==undefined){return false}if(flagWhitelist&&flagWhitelist.find(function(flag){return themeFlags.includes(flag)})===undefined){return false}return true},allowedItems:function allowedItems(items,theme){var filter=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;return(items||[]).map(function(item){if(item.subitems){var subitems=ThemeUtils.allowedItems(item.subitems,items);if(!isEmpty(subitems)){return _objectSpread(_objectSpread({},item),{},{subitems:subitems})}else{return null}}else{if(filter&&!filter(item)){return null}if(theme){if(!ThemeUtils.themeFlagsAllowed(theme,item.themeFlagWhitelist,item.themeFlagBlacklist)){return null}if(item.themeBlacklist&&(item.themeBlacklist.includes(theme.title)||item.themeBlacklist.includes(theme.name))){return null}if(item.themeWhitelist&&!(item.themeWhitelist.includes(theme.title)||item.themeWhitelist.includes(theme.name))){return null}if(item.requireAuth&&!ConfigUtils.getConfigProp("username")){return null}}return item}}).filter(Boolean)}};export default ThemeUtils;