qwc2 2025.10.8 → 2025.10.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/IdentifyViewer.js +3 -3
- package/components/MapSelection.js +1 -1
- package/components/SearchBox.js +2 -2
- package/components/map3d/Map3D.js +6 -6
- package/package.json +1 -1
- package/plugins/FeatureSearch.js +2 -2
- package/plugins/Identify.js +1 -1
- package/plugins/LayerCatalog.js +1 -1
- package/plugins/Redlining.js +3 -3
- package/plugins/TopBar.js +3 -3
- package/plugins/View3D.js +1 -1
- package/plugins/map/RedliningSupport.js +1 -1
- package/plugins/style/FeatureSearch.css +6 -1
- package/plugins/style/Redlining.css +5 -0
- package/reducers/redlining.js +1 -1
- package/static/translations/bg-BG.json +2 -3
- package/static/translations/ca-ES.json +2 -3
- package/static/translations/cs-CZ.json +2 -3
- package/static/translations/de-CH.json +2 -3
- package/static/translations/de-DE.json +2 -3
- package/static/translations/en-US.json +2 -3
- package/static/translations/es-ES.json +2 -3
- package/static/translations/fi-FI.json +2 -3
- package/static/translations/fr-FR.json +2 -3
- package/static/translations/hu-HU.json +2 -3
- package/static/translations/it-IT.json +3 -4
- package/static/translations/ja-JP.json +2 -3
- package/static/translations/nl-NL.json +2 -3
- package/static/translations/no-NO.json +2 -3
- package/static/translations/pl-PL.json +2 -3
- package/static/translations/pt-BR.json +2 -3
- package/static/translations/pt-PT.json +2 -3
- package/static/translations/ro-RO.json +2 -3
- package/static/translations/ru-RU.json +2 -3
- package/static/translations/sv-SE.json +2 -3
- package/static/translations/tr-TR.json +2 -3
- package/static/translations/tsconfig.json +1 -2
- package/static/translations/uk-UA.json +2 -3
- package/utils/SearchProviders.js +1 -1
- package/utils/VectorLayerUtils.js +1 -1
|
@@ -6,6 +6,6 @@ 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 axios from"axios";import clone from"clone";import DOMPurify from"dompurify";import FileSaver from"file-saver";import htmlReactParser,{domToReact}from"html-react-parser";import JSZip from"jszip";import isEmpty from"lodash.isempty";import omit from"lodash.omit";import PropTypes from"prop-types";import{setActiveLayerInfo}from"../actions/layerinfo";import{LayerRole,addLayerFeatures,removeLayer,changeLayerProperty}from"../actions/layers";import{zoomToPoint}from"../actions/map";import{openExternalUrl}from"../actions/windows";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 MiscUtils from"../utils/MiscUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import Icon from"./Icon";import Spinner from"./widgets/Spinner";import"./style/IdentifyViewer.css";var EXCLUDE_PROPS=["featurereport","displayfield","layername","layertitle","layerinfo","attribnames","clickPos","displayname","bbox"];var EXCLUDE_ATTRS=["htmlContent","htmlContentInline"];var BuiltinExporters=[{id:"json",title:"json",allowClipboard:true,"export":function _export(json,callback){var data=JSON.stringify(json,null," ");callback({data:data,type:"text/plain;charset=utf-8",filename:"results.json"})}},{id:"geojson",title:"geojson",allowClipboard:true,"export":function _export(json,callback){var featureCollection={type:"FeatureCollection",features:Object.values(json).flat().map(function(entry){var feature=omit(entry,EXCLUDE_PROPS);feature.properties=omit(feature.properties,EXCLUDE_ATTRS);if(feature.geometry){feature.crs={type:"name",properties:{name:CoordinatesUtils.toOgcUrnCrs(entry.crs)}}}return feature})};var data=JSON.stringify(featureCollection,null," ");callback({data:data,type:"application/geo+json;charset=utf-8",filename:"results.json"})}},{id:"csv",title:"CSV",allowClipboard:true,"export":function _export(json,callback){var dataset=[];Object.entries(json).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),layerName=_ref2[0],features=_ref2[1];features.forEach(function(feature){dataset.push([feature.layertitle+": "+feature.displayname]);Object.entries(feature.properties||{}).forEach(function(_ref3){var _ref4=_slicedToArray(_ref3,2),attrib=_ref4[0],value=_ref4[1];if(!EXCLUDE_ATTRS.includes(attrib)){dataset.push(["",attrib,String(value)])}});if(feature.geometry){dataset.push(["","geometry",VectorLayerUtils.geoJSONGeomToWkt(feature.geometry)])}})});var csv=dataset.map(function(row){return row.map(function(field){return field?"\"".concat(field.replace("\"","\"\""),"\""):""}).join("\t")}).join("\n");callback({data:csv,type:"text/plain;charset=utf-8",filename:"results.csv"})}},{id:"csvzip",title:"CSV+ZIP",allowClipboard:false,"export":function _export(json,callback){var data=[];var filenames=[];Object.entries(json).forEach(function(_ref5){var _features$0$propertie,_features$;var _ref6=_slicedToArray(_ref5,2),layerName=_ref6[0],features=_ref6[1];var exportAttrs=Object.keys((_features$0$propertie=(_features$=features[0])===null||_features$===void 0?void 0:_features$.properties)!==null&&_features$0$propertie!==void 0?_features$0$propertie:{}).filter(function(attr){return!EXCLUDE_ATTRS.includes(attr)});var dataset=[_toConsumableArray(exportAttrs)];if(features[0].geometry){dataset[0].push("geometry")}features.forEach(function(feature){var row=exportAttrs.map(function(attr){return String(feature.properties[attr])});if(feature.geometry){row.push(VectorLayerUtils.geoJSONGeomToWkt(feature.geometry))}dataset.push(row)});var csv=dataset.map(function(row){return row.map(function(field){return"\"".concat(field.replace("\"","\"\""),"\"")}).join(";")}).join("\n");data.push(csv);filenames.push(features[0].layername)});if(data.length>1){var zip=new JSZip;for(var i=0;i<data.length;i++){var blob=new Blob([data[i]],{type:"text/csv;charset=utf-8"});zip.file(filenames[i]+".csv",blob)}zip.generateAsync({type:"arraybuffer"}).then(function(result){callback({data:result,type:"application/zip",filename:"results.zip"})})}else{callback({data:data[0],type:"text/csv;charset=utf-8",filename:filenames[0]+".csv"})}}},{id:"shapefile",title:"Shapefile",allowClipboard:false,"export":function _export(json,callback){import("@mapbox/shp-write").then(function(shpwriteMod){var shpwrite=shpwriteMod["default"];var layers=Object.entries(json);var options={outputType:"arraybuffer",types:{point:"points",polygon:"polygons",polyline:"lines"}};var promises=layers.map(function(_ref7){var _features$2;var _ref8=_slicedToArray(_ref7,2),layerName=_ref8[0],features=_ref8[1];var geojson={type:"FeatureCollection",features:features.map(function(entry){return omit(entry,EXCLUDE_PROPS)})};var layerOptions=_objectSpread(_objectSpread({},options),{},{folder:layerName});var crs=(_features$2=features[0])===null||_features$2===void 0?void 0:_features$2.crs;if(crs){var wkt=CoordinatesUtils.getEsriWktFromCrs(crs);if(wkt){layerOptions.prj=wkt}}return shpwrite.zip(geojson,layerOptions).then(function(shpData){return{layerName:layerName,shpData:shpData}})});Promise.all(promises).then(function(results){if(results.length===1){callback({data:results[0].shpData,type:"application/zip",filename:results[0].layerName+".zip"})}else{var zip=new JSZip;results.forEach(function(_ref9){var layerName=_ref9.layerName,shpData=_ref9.shpData;zip.file(layerName+".zip",shpData)});zip.generateAsync({type:"arraybuffer"}).then(function(result){callback({data:result,type:"application/zip",filename:"shapefiles.zip"})})}})})}},{id:"xlsx",title:"XLSX",allowClipboard:false,"export":function _export(json,callback){import("xlsx").then(function(xlsx){var document=xlsx.utils.book_new();Object.entries(json).forEach(function(_ref10){var _features$0$propertie2,_features$3;var _ref11=_slicedToArray(_ref10,2),layerName=_ref11[0],features=_ref11[1];var exportAttrs=Object.keys((_features$0$propertie2=(_features$3=features[0])===null||_features$3===void 0?void 0:_features$3.properties)!==null&&_features$0$propertie2!==void 0?_features$0$propertie2:{}).filter(function(attr){return!EXCLUDE_ATTRS.includes(attr)});var dataset=[_toConsumableArray(exportAttrs)];if(features[0].geometry){dataset[0].push("geometry")}features.forEach(function(feature){var row=exportAttrs.map(function(attr){return feature.properties[attr]});if(feature.geometry){var geomWkt=VectorLayerUtils.geoJSONGeomToWkt(feature.geometry);if(geomWkt.length<32768){row.push(geomWkt)}else{row.push("Geometry too large")}}dataset.push(row)});var worksheet=xlsx.utils.aoa_to_sheet(dataset);var sheetName=features[0].layertitle.slice(0,30).replace(/[\\/?*[]]?/g,"_");xlsx.utils.book_append_sheet(document,worksheet,sheetName)});var data=xlsx.write(document,{type:"buffer"});callback({data:data,type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",filename:"results.xlsx"})})}}];var IdentifyViewer=/*#__PURE__*/function(_React$Component){function IdentifyViewer(props){var _this;_classCallCheck(this,IdentifyViewer);_this=_callSuper(this,IdentifyViewer,[props]);_defineProperty(_this,"state",{expanded:{},expandedResults:{},resultTree:{},reports:{},currentResult:null,currentLayer:null,exportFormat:"geojson",selectedAggregatedReport:"",generatingReport:false,selectedLayer:""});_defineProperty(_this,"updateResultTree",function(){var layers=Object.keys(_this.props.identifyResults);var currentResult=null;var currentLayer=null;if(layers.length===1&&_this.props.identifyResults[layers[0]].length===1){currentLayer=layers[0];currentResult=_this.props.identifyResults[layers[0]][0]}_this.setState({resultTree:clone(_this.props.identifyResults),currentResult:currentResult,currentLayer:currentLayer,reports:LayerUtils.collectFeatureReports(_this.props.layers)})});_defineProperty(_this,"setHighlightedResults",function(results,resultTree){if(!results&&_this.props.highlightAllResults){var selectedLayer=_this.state.selectedLayer||"";results=Object.keys(resultTree).reduce(function(res,layer){var layerData=resultTree[selectedLayer||layer];return res.concat(layerData.map(function(result){return _objectSpread(_objectSpread({},result),{},{id:"".concat(selectedLayer||layer,".").concat(result.id)})}))},[])}results=(results||[]).filter(function(result){return result.type.toLowerCase()==="feature"}).map(function(feature){var newFeature=_objectSpread(_objectSpread({},feature),{},{properties:{}});// Ensure selection style is used
|
|
8
8
|
delete newFeature.styleName;delete newFeature.styleOptions;return newFeature});if(!isEmpty(results)){var layer={id:"__identifyviewerhighlight",role:LayerRole.SELECTION};_this.props.addLayerFeatures(layer,results,true)}else{_this.props.removeLayer("__identifyviewerhighlight")}});_defineProperty(_this,"getExpandedClass",function(path,deflt){var expanded=_this.state.expanded[path]!==undefined?_this.state.expanded[path]:deflt;return expanded?"identify-layer-expandable identify-layer-expanded":"identify-layer-expandable"});_defineProperty(_this,"toggleExpanded",function(path,deflt){var newstate=_this.state.expanded[path]!==undefined?!_this.state.expanded[path]:!deflt;var diff={};diff[path]=newstate;if(_this.state.currentLayer===path&&!newstate){_this.setState(function(state){return _objectSpread(_objectSpread({},state),{},{expanded:_objectSpread(_objectSpread({},state.expanded),diff),currentResult:null,currentLayer:null})})}else{_this.setState(function(state){return _objectSpread(_objectSpread({},state),{},{expanded:_objectSpread(_objectSpread({},state.expanded),diff)})})}});_defineProperty(_this,"setCurrentResult",function(layer,result){if(_this.state.currentResult===result){_this.setState({currentResult:null,currentLayer:null})}else{_this.setState({currentResult:result,currentLayer:layer});_this.scrollIntoView=true}});_defineProperty(_this,"removeResultLayer",function(layer){_this.setState(function(state){var newResultTree=_objectSpread({},state.resultTree);delete newResultTree[layer];_this.setState({resultTree:newResultTree,currentResult:state.currentLayer===layer?null:state.currentResult,currentLayer:state.currentLayer===layer?null:state.currentLayer})})});_defineProperty(_this,"removeResult",function(layer,result){_this.setState(function(state){var newResultTree=_objectSpread({},state.resultTree);newResultTree[layer]=state.resultTree[layer].filter(function(item){return item!==result});if(isEmpty(newResultTree[layer])){delete newResultTree[layer]}var selectedLayer=isEmpty(newResultTree[layer])?"":state.selectedLayer;return{resultTree:newResultTree,currentResult:state.currentResult===result?null:state.currentResult,selectedLayer:selectedLayer}})});_defineProperty(_this,"exportResults",function(){var clipboard=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;var filteredResults={};Object.keys(_this.state.selectedLayer!==""?_defineProperty({},_this.state.selectedLayer,_this.state.resultTree[_this.state.selectedLayer]):_this.state.resultTree).map(function(key){if(!isEmpty(_this.state.resultTree[key])){filteredResults[key]=_this.state.resultTree[key]}});_this["export"](filteredResults,clipboard)});_defineProperty(_this,"exportResultLayer",function(layer){_this["export"](_defineProperty({},layer,_this.state.resultTree[layer]))});_defineProperty(_this,"exportResult",function(layer,result){_this["export"](_defineProperty({},layer,[result]))});_defineProperty(_this,"export",function(json){var clipboard=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var exporter=_this.getExporters().find(function(entry){return entry.id===_this.state.exportFormat});if(exporter){if(!_this.props.exportGeometry){json=Object.entries(json).reduce(function(res,_ref13){var _ref14=_slicedToArray(_ref13,2),layerId=_ref14[0],features=_ref14[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},layerId,features.map(function(feature){return omit(feature,["geometry"])})))},{})}exporter["export"](json,function(result){if(clipboard&&exporter.allowClipboard){navigator.clipboard.writeText(result.data)}else{FileSaver.saveAs(new Blob([result.data],{type:result.type}),result.filename)}})}});_defineProperty(_this,"renderLayer",function(layer){var results=_this.state.resultTree[layer];if(results.length===0){return null}return/*#__PURE__*/React.createElement("div",{className:_this.getExpandedClass(layer,true),key:layer},/*#__PURE__*/React.createElement("div",{className:"identify-result-entry",onMouseEnter:function onMouseEnter(){return _this.setHighlightedResults(results,_this.state.resultTree)},onMouseLeave:function onMouseLeave(){return _this.setHighlightedResults(_this.state.currentResult===null?null:[_this.state.currentResult],_this.state.resultTree)}},/*#__PURE__*/React.createElement("span",{className:"clickable",onClick:function onClick(){return _this.toggleExpanded(layer,true)}},/*#__PURE__*/React.createElement("b",null,results[0].layertitle)),/*#__PURE__*/React.createElement(Icon,{className:"identify-remove-result",icon:"minus-sign",onClick:function onClick(){return _this.removeResultLayer(layer)}}),_this.props.enableExport===true||!isEmpty(_this.props.enableExport)?/*#__PURE__*/React.createElement(Icon,{className:"identify-export-result",icon:"export",onClick:function onClick(){return _this.exportResultLayer(layer)}}):null),/*#__PURE__*/React.createElement("div",{className:"identify-layer-entries"},results.map(function(result){return _this.renderResult(layer,result)})))});_defineProperty(_this,"renderResult",function(layer,result){var ref=_this.state.currentResult===result&&_this.scrollIntoView?function(el){_this.currentResultElRef=el}:null;return/*#__PURE__*/React.createElement("div",{className:"identify-result-entry",key:result.id,onMouseEnter:function onMouseEnter(){return _this.setHighlightedResults([result],_this.state.resultTree)},onMouseLeave:function onMouseLeave(){return _this.setHighlightedResults(_this.state.currentResult===null?null:[_this.state.currentResult],_this.state.resultTree)}},/*#__PURE__*/React.createElement("span",{className:_this.state.currentResult===result?"active clickable":"clickable",onClick:function onClick(){return _this.setCurrentResult(layer,result)},ref:ref},result.displayname),/*#__PURE__*/React.createElement(Icon,{className:"identify-remove-result",icon:"minus-sign",onClick:function onClick(){return _this.removeResult(layer,result)}}),_this.props.enableExport===true||!isEmpty(_this.props.enableExport)?/*#__PURE__*/React.createElement(Icon,{className:"identify-export-result",icon:"export",onClick:function onClick(){return _this.exportResult(layer,result)}}):null)});_defineProperty(_this,"renderResultAttributes",function(layer,result,resultClass){if(!result){return null}var resultbox=null;var extraattribs=null;var inlineExtaAttribs=false;var featureReports=_this.state.reports[layer]||[];if(result.featureReport){featureReports.push({title:result.layertitle,template:result.featureReport})}if(result.type==="text"){resultbox=/*#__PURE__*/React.createElement("pre",{className:"identify-result-box"},result.text)}else if(result.type==="html"){resultbox=/*#__PURE__*/React.createElement("iframe",{className:"identify-result-box",onLoad:function onLoad(ev){return _this.setIframeContent(ev.target,result.text)},ref:function ref(el){return _this.pollIframe(el,result.text)}})}else if(result.properties.htmlContent){if(result.properties.htmlContentInline){resultbox=/*#__PURE__*/React.createElement("div",{className:"identify-result-box"},_this.parsedContent(result.properties.htmlContent))}else{resultbox=/*#__PURE__*/React.createElement("iframe",{className:"identify-result-box",onLoad:function onLoad(ev){return _this.setIframeContent(ev.target,result.properties.htmlContent)},ref:function ref(el){return _this.pollIframe(el,result.properties.htmlContent)}})}}else{var _rows;inlineExtaAttribs=true;var properties=Object.keys(result.properties)||[];var rows=[];if(properties.length===1&&result.properties.maptip){rows=properties.map(function(attrib){return/*#__PURE__*/React.createElement("tr",{key:attrib},/*#__PURE__*/React.createElement("td",{className:"identify-attr-value"},_this.attribValue(result.properties[attrib],attrib,layer,result)))})}else{rows=properties.map(function(attrib){if(_this.props.theme.skipEmptyFeatureAttributes&&(result.properties[attrib]===""||result.properties[attrib]===null||result.properties[attrib]==="NULL")){return null}return/*#__PURE__*/React.createElement("tr",{key:attrib},/*#__PURE__*/React.createElement("td",{className:"identify-attr-title "+_this.props.longAttributesDisplay},/*#__PURE__*/React.createElement("i",null,attrib)),/*#__PURE__*/React.createElement("td",{className:"identify-attr-value "+_this.props.longAttributesDisplay},_this.attribValue(result.properties[attrib],attrib,layer,result)))})}(_rows=rows).push.apply(_rows,_toConsumableArray(_this.computeExtraAttributes(layer,result)));featureReports.forEach(function(report,idx){rows.push(/*#__PURE__*/React.createElement("tr",{key:"__featurereport"+idx},/*#__PURE__*/React.createElement("td",{className:"identify-attr-title "+_this.props.longAttributesDisplay},/*#__PURE__*/React.createElement("i",null,LocaleUtils.tr("identify.featureReport")+": "+report.title)),/*#__PURE__*/React.createElement("td",{className:"identify-attr-value "+_this.props.longAttributesDisplay},/*#__PURE__*/React.createElement("a",{href:_this.getFeatureReportUrl(report,result)},LocaleUtils.tr("identify.link")))))});if(isEmpty(rows)){rows=/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",{className:"identify-attr-value"},/*#__PURE__*/React.createElement("i",null,LocaleUtils.tr("identify.noattributes"))))}resultbox=/*#__PURE__*/React.createElement("div",{className:"identify-result-box"},/*#__PURE__*/React.createElement("table",{className:"attribute-list"},/*#__PURE__*/React.createElement("tbody",null,rows)))}if(!inlineExtaAttribs&&(_this.props.attributeCalculator||!isEmpty(_this.state.reports[layer]))){extraattribs=/*#__PURE__*/React.createElement("div",{className:"identify-result-box"},/*#__PURE__*/React.createElement("table",{className:"attribute-list"},/*#__PURE__*/React.createElement("tbody",null,_this.computeExtraAttributes(layer,result),featureReports.map(function(report,idx){return/*#__PURE__*/React.createElement("tr",{key:"report"+idx},/*#__PURE__*/React.createElement("td",{className:"identify-attr-title "+_this.props.longAttributesDisplay},/*#__PURE__*/React.createElement("i",null,LocaleUtils.tr("identify.featureReport")+": "+report.title)),/*#__PURE__*/React.createElement("td",{className:"identify-attr-value "+_this.props.longAttributesDisplay},/*#__PURE__*/React.createElement("a",{href:_this.getFeatureReportUrl(report,result),rel:"noreferrer",target:"_blank"},LocaleUtils.tr("identify.link"))))}))))}var zoomToFeatureButton=null;if(result.bbox&&result.crs){zoomToFeatureButton=/*#__PURE__*/React.createElement(Icon,{icon:"zoom",onClick:function onClick(){return _this.zoomToResult(result)}})}var key=result+":"+result.id;var expanded=_this.state.expandedResults[key];return/*#__PURE__*/React.createElement("div",{className:resultClass,key:"results-attributes"},/*#__PURE__*/React.createElement("div",{className:"identify-result-title"},_this.props.collapsible?/*#__PURE__*/React.createElement(Icon,{icon:expanded?"triangle-down":"triangle-right",onClick:function onClick(){return _this.setState(function(state){return{expandedResults:_objectSpread(_objectSpread({},state.expandedResults),{},_defineProperty({},key,!expanded))}})}}):null,/*#__PURE__*/React.createElement("span",null,(_this.props.showLayerTitles?result.layertitle+": ":"")+result.displayname),zoomToFeatureButton,/*#__PURE__*/React.createElement(Icon,{icon:"info-sign",onClick:function onClick(){return _this.showLayerInfo(layer)}}),/*#__PURE__*/React.createElement(Icon,{icon:"trash",onClick:function onClick(){return _this.removeResult(layer,result)}})),_this.props.collapsible&&!expanded?null:/*#__PURE__*/React.createElement("div",{className:"identify-result-container"},resultbox,extraattribs))});_defineProperty(_this,"computeExtraAttributes",function(layer,result){var _window$qwc;var rows=[];Object.values(((_window$qwc=window.qwc2)===null||_window$qwc===void 0?void 0:_window$qwc.__attributeCalculators)||{}).forEach(function(calc,idx){var row=calc(layer,result);if(row.length===2){rows.push(/*#__PURE__*/React.createElement("tr",{key:"custom-attr-"+idx},/*#__PURE__*/React.createElement("td",{className:"identify-attr-title"},/*#__PURE__*/React.createElement("i",null,row[0])),/*#__PURE__*/React.createElement("td",{className:"identify-attr-value"},row[1])))}else if(row.length===1){rows.push(/*#__PURE__*/React.createElement("tr",{key:"custom-attr-"+idx},/*#__PURE__*/React.createElement("td",{colSpan:"2"},row[0])))}});if(_this.props.attributeCalculator){rows.push.apply(rows,_toConsumableArray(_this.props.attributeCalculator(layer,result)))}return rows});_defineProperty(_this,"getExporters",function(){var _window$qwc2;return[].concat(BuiltinExporters,_toConsumableArray(_this.props.customExporters),_toConsumableArray(Object.values(((_window$qwc2=window.qwc2)===null||_window$qwc2===void 0?void 0:_window$qwc2.__identifyExportes)||[])))});_defineProperty(_this,"setIframeContent",function(iframe,html){if(iframe.getAttribute("identify-content-set")){return}iframe.setAttribute("identify-content-set",true);iframe.contentWindow.document.open();iframe.contentWindow.document.write(html);iframe.contentWindow.document.close()});_defineProperty(_this,"pollIframe",function(iframe,html){if(iframe&&!iframe.getAttribute("identify-content-set")){var interval=setInterval(function(){if(iframe.getAttribute("identify-content-set")){return clearInterval(interval)}if(iframe.contentWindow&&iframe.contentWindow.document){iframe.setAttribute("identify-content-set",true);iframe.contentWindow.document.open();iframe.contentWindow.document.write(html);iframe.contentWindow.document.close();clearInterval(interval)}return true},500)}});_defineProperty(_this,"collectFeatureReportTemplates",function(entry){var reports={};if(entry.sublayers){var _iterator=_createForOfIteratorHelper(entry.sublayers),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var sublayer=_step.value;reports=_objectSpread(_objectSpread({},reports),_this.collectFeatureReportTemplates(sublayer))}}catch(err){_iterator.e(err)}finally{_iterator.f()}}else if(entry.featureReport){reports[entry.name]=entry.featureReport}return reports});_defineProperty(_this,"findFeatureReportTemplate",function(layer){var reports={};_this.props.layers.filter(function(l){return l.role===LayerRole.THEME}).forEach(function(themeLayer){reports=_objectSpread(_objectSpread({},reports),_this.collectFeatureReportTemplates(themeLayer))});return reports[layer]||null});_defineProperty(_this,"getFeatureReportUrl",function(report,result){var serviceUrl=ConfigUtils.getConfigProp("documentServiceUrl").replace(/\/$/,"");var params={feature:result.id,x:result.clickPos[0],y:result.clickPos[1],crs:_this.props.map.projection,single_report:report.single_report||false};var path="/"+report.template+"."+(report.format||"pdf");var query=Object.keys(params).map(function(key){return encodeURIComponent(key)+"="+encodeURIComponent(params[key])}).join("&");return serviceUrl+path+"?"+query});_defineProperty(_this,"downloadAggregatedReport",function(){var _this$state$selectedA=_this.state.selectedAggregatedReport.split("::"),_this$state$selectedA2=_slicedToArray(_this$state$selectedA,2),layername=_this$state$selectedA2[0],idx=_this$state$selectedA2[1];var report=_this.state.reports[layername][idx];var results=_this.state.resultTree[layername];var serviceUrl=ConfigUtils.getConfigProp("documentServiceUrl").replace(/\/$/,"");var params={feature:results.map(function(result){return result.id}).join(","),x:results[0].clickPos[0],y:results[0].clickPos[1],crs:_this.props.map.projection,single_report:report.single_report||false};_this.setState({generatingReport:true});var url=serviceUrl+"/"+report.template;axios.get(url,{params:params,responseType:"arraybuffer"}).then(function(response){var filename=(report.filename||report.title.replace(" ","_"))+"."+(report.format||"pdf");FileSaver.saveAs(new Blob([response.data],{type:"application/pdf"}),filename);_this.setState({generatingReport:false})})["catch"](function(){/* eslint-disable-next-line */alert(LocaleUtils.tr("identify.reportfail"));_this.setState({generatingReport:false})})});_defineProperty(_this,"showLayerInfo",function(layer){var _layer$split=layer.split("#"),_layer$split2=_slicedToArray(_layer$split,2),layerUrl=_layer$split2[0],layerName=_layer$split2[1];var match=LayerUtils.searchLayer(_this.props.layers,layerUrl,layerName);if(match){_this.props.setActiveLayerInfo(match.layer,match.sublayer)}});_defineProperty(_this,"attribValue",function(text,attrName,layer,result){if(_typeof(text)==="object"){text=JSON.stringify(text)}if(_this.props.replaceImageUrls&&/^https?:\/\/.*\.(jpg|jpeg|png|bmp)$/i.exec(text)){return/*#__PURE__*/React.createElement("a",{href:text,rel:"noreferrer",target:"_blank"},/*#__PURE__*/React.createElement("img",{src:text}))}text=""+text;// Ensure text is a string
|
|
9
|
-
text=_this.props.attributeTransform(attrName,text,layer,result);text=MiscUtils.addLinkAnchors(text);return _this.parsedContent(text)});_defineProperty(_this,"parsedContent",function(text){text=DOMPurify.sanitize(text,{ADD_ATTR:["target"]}).replace(" ","<br />");var options={replace:function replace(node){if(node.name==="a"){return/*#__PURE__*/React.createElement("a",{href:node.attribs.href,onClick:_this.attributeLinkClicked,target:node.attribs.target||"_blank"},domToReact(node.children,options))}return undefined}};return htmlReactParser(text,options)});_defineProperty(_this,"attributeLinkClicked",function(ev){_this.props.openExternalUrl(ev.target.href,ev.target.target,{docked:_this.props.iframeDialogsInitiallyDocked});ev.preventDefault()});_defineProperty(_this,"zoomToResult",function(result){var zoom=0;var maxZoom=MapUtils.computeZoom(_this.props.map.scales,_this.props.theme.minSearchScaleDenom||1000);if(result.bbox[0]!==result.bbox[2]&&result.bbox[1]!==result.bbox[3]){zoom=Math.max(0,MapUtils.getZoomForExtent(result.bbox,_this.props.map.resolutions,_this.props.map.size,0,maxZoom+1)-1)}else{zoom=maxZoom}var x=0.5*(result.bbox[0]+result.bbox[2]);var y=0.5*(result.bbox[1]+result.bbox[3]);_this.props.zoomToPoint([x,y],zoom,_this.props.map.projection);var path=[];var sublayer=null;var layer=_this.props.layers.find(function(l){return l.role===LayerRole.THEME&&(sublayer=LayerUtils.searchSubLayer(l,"name",result.layername,path))});if(layer&&sublayer){_this.props.changeLayerProperty(layer.id,"visibility",true,path)}});_this.currentResultElRef=null;_this.scrollIntoView=false;_this.state.exportFormat=!Array.isArray(props.enableExport)
|
|
10
|
-
if(this.state.currentResult&&this.state.currentResult!==prevState.currentResult&&this.currentResultElRef&&this.scrollIntoView){this.currentResultElRef.parentNode.scrollTop=this.currentResultElRef.offsetTop-this.currentResultElRef.parentNode.offsetTop;this.scrollIntoView=false;this.currentResultElRef=null}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.props.removeLayer("__identifyviewerhighlight")}},{key:"render",value:function render(){var _this2=this,_exporters$
|
|
11
|
-
var exporters=this.getExporters();var clipboardExportDisabled=((_exporters$
|
|
9
|
+
text=_this.props.attributeTransform(attrName,text,layer,result);text=MiscUtils.addLinkAnchors(text);return _this.parsedContent(text)});_defineProperty(_this,"parsedContent",function(text){text=DOMPurify.sanitize(text,{ADD_ATTR:["target"]}).replace(" ","<br />");var options={replace:function replace(node){if(node.name==="a"){return/*#__PURE__*/React.createElement("a",{href:node.attribs.href,onClick:_this.attributeLinkClicked,target:node.attribs.target||"_blank"},domToReact(node.children,options))}return undefined}};return htmlReactParser(text,options)});_defineProperty(_this,"attributeLinkClicked",function(ev){_this.props.openExternalUrl(ev.target.href,ev.target.target,{docked:_this.props.iframeDialogsInitiallyDocked});ev.preventDefault()});_defineProperty(_this,"zoomToResult",function(result){var zoom=0;var maxZoom=MapUtils.computeZoom(_this.props.map.scales,_this.props.theme.minSearchScaleDenom||1000);if(result.bbox[0]!==result.bbox[2]&&result.bbox[1]!==result.bbox[3]){zoom=Math.max(0,MapUtils.getZoomForExtent(result.bbox,_this.props.map.resolutions,_this.props.map.size,0,maxZoom+1)-1)}else{zoom=maxZoom}var x=0.5*(result.bbox[0]+result.bbox[2]);var y=0.5*(result.bbox[1]+result.bbox[3]);_this.props.zoomToPoint([x,y],zoom,_this.props.map.projection);var path=[];var sublayer=null;var layer=_this.props.layers.find(function(l){return l.role===LayerRole.THEME&&(sublayer=LayerUtils.searchSubLayer(l,"name",result.layername,path))});if(layer&&sublayer){_this.props.changeLayerProperty(layer.id,"visibility",true,path)}});_this.currentResultElRef=null;_this.scrollIntoView=false;_this.state.exportFormat=!Array.isArray(props.enableExport)?"geojson":props.enableExport[0];return _this}_inherits(IdentifyViewer,_React$Component);return _createClass(IdentifyViewer,[{key:"componentDidMount",value:function componentDidMount(){this.updateResultTree()}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.props.identifyResults!==prevProps.identifyResults){this.updateResultTree()}if(prevState.currentResult!==this.state.currentResult||prevState.resultTree!==this.state.resultTree){this.setHighlightedResults(this.state.currentResult===null?null:[this.state.currentResult],this.state.resultTree)}// Scroll to selected result
|
|
10
|
+
if(this.state.currentResult&&this.state.currentResult!==prevState.currentResult&&this.currentResultElRef&&this.scrollIntoView){this.currentResultElRef.parentNode.scrollTop=this.currentResultElRef.offsetTop-this.currentResultElRef.parentNode.offsetTop;this.scrollIntoView=false;this.currentResultElRef=null}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.props.removeLayer("__identifyviewerhighlight")}},{key:"render",value:function render(){var _this2=this,_exporters$this$state;var tree=this.props.displayResultTree;var body=null;if(tree){var contents=Object.keys(this.state.resultTree).map(function(layer){return _this2.renderLayer(layer)});var attributes=this.renderResultAttributes(this.state.currentLayer,this.state.currentResult,"identify-result-tree-frame");var resultsContainerStyle={maxHeight:attributes?"10em":"initial"};body=[/*#__PURE__*/React.createElement("div",{className:"identify-results-container",key:"results-container",style:resultsContainerStyle},contents),attributes]}else{body=/*#__PURE__*/React.createElement("div",{className:"identify-flat-results-list"},this.props.showLayerSelector?/*#__PURE__*/React.createElement("div",{className:"identify-selectbox"},/*#__PURE__*/React.createElement("select",{className:"identify-layer-select",onChange:function onChange(e){var selectedLayer=e.target.value;_this2.setState({selectedLayer:selectedLayer})}},/*#__PURE__*/React.createElement("option",{value:""},LocaleUtils.tr("identify.layerall")),Object.keys(this.state.resultTree).filter(function(key){return _this2.state.resultTree[key].length}).map(function(layer){return/*#__PURE__*/React.createElement("option",{key:layer,value:layer},_this2.state.resultTree[layer][0].layertitle)})),/*#__PURE__*/React.createElement("span",{className:"identify-buttonbox-spacer"}),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("identify.featurecount"),": ",Object.values(this.state.selectedLayer!==""?this.state.resultTree[this.state.selectedLayer]:this.state.resultTree).flat().length)):null,Object.keys(this.state.selectedLayer!==""?_defineProperty({},this.state.selectedLayer,this.state.resultTree[this.state.selectedLayer]):this.state.resultTree).map(function(layer){var layerResults=_this2.state.resultTree[layer];return layerResults.map(function(result){var resultClass=_this2.state.currentResult===result?"identify-result-frame-highlighted":"identify-result-frame-normal";return/*#__PURE__*/React.createElement("div",{key:result.id,onMouseEnter:function onMouseEnter(){return _this2.setState({currentResult:result,currentLayer:layer})},onMouseLeave:function onMouseLeave(){return _this2.setState({currentResult:null,currentLayer:null})}},_this2.renderResultAttributes(layer,result,resultClass))})}))}// "el.style.background='inherit'": HACK to trigger an additional repaint, since Safari/Chrome on iOS render the element cut off the first time
|
|
11
|
+
var exporters=Object.fromEntries(this.getExporters().map(function(exporter){return[exporter.id,exporter]}));var enabledExporters=Array.isArray(this.props.enableExport)?this.props.enableExport:Object.keys(exporters);var clipboardExportDisabled=((_exporters$this$state=exporters[this.state.exportFormat])===null||_exporters$this$state===void 0?void 0:_exporters$this$state.allowClipboard)!==true;return/*#__PURE__*/React.createElement("div",{className:"identify-body",ref:function ref(el){if(el)el.style.background="inherit"}},body,this.props.enableExport===true||!isEmpty(this.props.enableExport)?/*#__PURE__*/React.createElement("div",{className:"identify-buttonbox"},/*#__PURE__*/React.createElement("span",{className:"identify-buttonbox-spacer"}),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("identify.export"),":\xA0"),/*#__PURE__*/React.createElement("div",{className:"controlgroup"},/*#__PURE__*/React.createElement("select",{className:"combo identify-export-format",onChange:function onChange(ev){return _this2.setState({exportFormat:ev.target.value})},value:this.state.exportFormat},enabledExporters.map(function(id){var _exporters$id$title;return/*#__PURE__*/React.createElement("option",{key:id,value:id},(_exporters$id$title=exporters[id].title)!==null&&_exporters$id$title!==void 0?_exporters$id$title:LocaleUtils.tr(exporters[id].titleMsgId))})),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this2.exportResults()},title:LocaleUtils.tr("identify.download")},/*#__PURE__*/React.createElement(Icon,{icon:"export"})),/*#__PURE__*/React.createElement("button",{className:"button",disabled:clipboardExportDisabled,onClick:function onClick(){return _this2.exportResults(true)},title:LocaleUtils.tr("identify.clipboard")},/*#__PURE__*/React.createElement(Icon,{icon:"copy"})))):null,this.props.enableAggregatedReports&&Object.keys(this.state.reports).length>0?/*#__PURE__*/React.createElement("div",{className:"identify-buttonbox"},/*#__PURE__*/React.createElement("span",{className:"identify-buttonbox-spacer"}),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("identify.aggregatedreport"),":\xA0"),/*#__PURE__*/React.createElement("div",{className:"controlgroup"},/*#__PURE__*/React.createElement("select",{className:"combo identify-export-format",onChange:function onChange(ev){return _this2.setState({selectedAggregatedReport:ev.target.value})},value:this.state.selectedAggregatedReport},/*#__PURE__*/React.createElement("option",{disabled:true,value:""},LocaleUtils.tr("identify.selectreport")),Object.entries(this.state.reports).map(function(_ref16){var _ref17=_slicedToArray(_ref16,2),layername=_ref17[0],reports=_ref17[1];return reports.map(function(report,idx){return/*#__PURE__*/React.createElement("option",{key:layername+"::"+idx,value:layername+"::"+idx},report.title)})})),/*#__PURE__*/React.createElement("button",{className:"button",disabled:!this.state.selectedAggregatedReport||this.state.generatingReport,onClick:this.downloadAggregatedReport},this.state.generatingReport?/*#__PURE__*/React.createElement(Spinner,null):/*#__PURE__*/React.createElement(Icon,{icon:"report"})))):null)}}])}(React.Component);_defineProperty(IdentifyViewer,"propTypes",{addLayerFeatures:PropTypes.func,attributeCalculator:PropTypes.func,attributeTransform:PropTypes.func,changeLayerProperty:PropTypes.func,collapsible:PropTypes.bool,customExporters:PropTypes.array,displayResultTree:PropTypes.bool,enableAggregatedReports:PropTypes.bool,enableExport:PropTypes.oneOfType([PropTypes.bool,PropTypes.array]),exportGeometry:PropTypes.bool,highlightAllResults:PropTypes.bool,identifyResults:PropTypes.object,iframeDialogsInitiallyDocked:PropTypes.bool,layers:PropTypes.array,longAttributesDisplay:PropTypes.oneOf(["ellipsis","wrap"]),map:PropTypes.object,openExternalUrl:PropTypes.func,removeLayer:PropTypes.func,replaceImageUrls:PropTypes.bool,setActiveLayerInfo:PropTypes.func,showLayerSelector:PropTypes.bool,showLayerTitles:PropTypes.bool,theme:PropTypes.object,zoomToPoint:PropTypes.func});_defineProperty(IdentifyViewer,"defaultProps",{longAttributesDisplay:"ellipsis",customExporters:[],displayResultTree:true,attributeCalculator:function attributeCalculator(/* layer, feature */){return[]},attributeTransform:function attributeTransform(name,value/* , layer, feature */){return value},enableAggregatedReports:true,showLayerTitles:true,showLayerSelector:true,highlightAllResults:true});var selector=function selector(state){return{theme:state.theme.current,layers:state.layers.flat,map:state.map}};export default connect(selector,{addLayerFeatures:addLayerFeatures,changeLayerProperty:changeLayerProperty,removeLayer:removeLayer,setActiveLayerInfo:setActiveLayerInfo,openExternalUrl:openExternalUrl,zoomToPoint:zoomToPoint})(IdentifyViewer);
|
|
@@ -10,4 +10,4 @@ return}// create an interaction to draw with
|
|
|
10
10
|
_this.drawInteraction=new ol.interaction.Draw({stopClick:true,source:_this.selectionLayer.getSource(),condition:_this.props.drawCondition,type:typeMap[_this.props.geomType],style:function style(feature){return FeatureStyles[_this.props.styleName](feature,_objectSpread(_objectSpread({},_this.props.styleOptions),{},{circleRadius:0}))},geometryFunction:_this.props.geomType==="Box"?ol.interaction.createBox():undefined});_this.drawInteraction.on("drawstart",function(evt){// clear previous sketches
|
|
11
11
|
_this.selectionLayer.getSource().clear();evt.feature.on("change",function(){return _this.updateMeasurements(evt.feature)})},_this);_this.drawInteraction.on("drawend",function(evt){_this.updateSelectionState(evt.feature.getGeometry())},_this)}_this.map.addInteraction(_this.drawInteraction);window.addEventListener("keydown",_this.checkModifier);window.addEventListener("keyup",_this.checkModifier);if(_this.props.cursor){_this.map.getViewport().style.cursor=_this.props.cursor}});_defineProperty(_this,"removeDrawInteraction",function(){if(_this.drawInteraction!==null){_this.map.removeInteraction(_this.drawInteraction);_this.drawInteraction=null}window.removeEventListener("keydown",_this.checkModifier);window.removeEventListener("keyup",_this.checkModifier);_this.map.getViewport().style.cursor=""});_defineProperty(_this,"checkModifier",function(ev){var down=ev.type==="keydown";_this.setState(function(state){return{modifiers:{alt:ev.key==="Alt"?down:state.modifiers.alt,ctrl:ev.key==="Control"?down:state.modifiers.ctrl,shift:ev.key==="Shift"?down:state.modifiers.shift}}})});_defineProperty(_this,"updateSelectionState",function(geometry){if(!geometry){return}var coords=_this.props.geomType==="Circle"?null:geometry.getCoordinates();if(_this.props.geomType==="Circle"){// Also store poligonized circle
|
|
12
12
|
var center=geometry.getCenter();var radius=geometry.getRadius();var deg2rad=Math.PI/180;var polycords=[Array.apply(null,Array(91)).map(function(item,index){return[center[0]+radius*Math.cos(4*index*deg2rad),center[1]+radius*Math.sin(4*index*deg2rad)]})];_this.setState({geometry:{type:"Polygon",coordinates:polycords,center:center,radius:radius}})}else if(_this.props.geomType==="DragBox"||_this.props.geomType==="Box"){var boxcoords=[[Math.min(coords[0][0][0],coords[0][2][0]),Math.min(coords[0][0][1],coords[0][2][1]),Math.max(coords[0][0][0],coords[0][2][0]),Math.max(coords[0][0][1],coords[0][2][1])]];_this.setState({geometry:{type:"Polygon",coordinates:boxcoords}})}else{_this.setState({geometry:{type:_this.props.geomType,coordinates:coords}})}});_defineProperty(_this,"updateMeasurements",function(feature){if(!_this.props.measure){return}var settings={lenUnit:"metric",areaUnit:"metric"};MeasureUtils.updateFeatureMeasurements(feature,_this.props.geomType,_this.props.projection,settings)});_this.drawInteraction=null;_this.map=MapUtils.getHook(MapUtils.GET_MAP);// create a layer to draw on
|
|
13
|
-
_this.selectionLayer=new ol.layer.Vector({source:new ol.source.Vector,zIndex:1000000,style:function style(feature){return FeatureStyles[_this.props.styleName](feature,_this.props.styleOptions)}});_this.
|
|
13
|
+
_this.selectionLayer=new ol.layer.Vector({source:new ol.source.Vector,zIndex:1000000,style:function style(feature){return FeatureStyles[_this.props.styleName](feature,_this.props.styleOptions)}});_this.selectionLayer.setVisible(!_this.props.hideGeometry);return _this}_inherits(MapSelection,_React$Component);return _createClass(MapSelection,[{key:"componentDidMount",value:function componentDidMount(){this.map.addLayer(this.selectionLayer);if(this.props.active){this.addDrawInteraction()}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.props.hideGeometry!==prevProps.hideGeometry){this.selectionLayer.setVisible(!this.props.hideGeometry)}if(this.props.geomType!==prevProps.geomType){this.selectionLayer.getSource().clear()}if(this.props.active&&!prevProps.active||this.props.active&&this.props.geomType!==prevProps.geomType){this.addDrawInteraction()}else if(!this.props.active&&prevProps.active){this.removeDrawInteraction()}if(this.state.geometry!==prevState.geometry){if(this.state.geometry!==this.props.geometry){this.props.geometryChanged(this.state.geometry,_objectSpread({},this.state.modifiers))}}if(this.props.geometry!==prevProps.geometry&&this.props.geometry!==this.state.geometry){if(!this.props.geometry){this.selectionLayer.getSource().clear()}else{var feature=this.selectionLayer.getSource().getFeatures()[0];if(!feature){feature=new ol.Feature;this.selectionLayer.getSource().addFeature(feature)}if(this.props.geometry.type==="Point"){feature.setGeometry(new ol.geom.Point(this.props.geometry.coordinates))}else if(this.props.geometry.type==="MultiPoint"){feature.setGeometry(new ol.geom.Multi(this.props.geometry.coordinates))}else if(this.props.geometry.type==="LineString"){feature.setGeometry(new ol.geom.LineString(this.props.geometry.coordinates))}else if(this.props.geometry.type==="MultiLineString"){feature.setGeometry(new ol.geom.MultiLineString(this.props.geometry.coordinates))}else if(this.props.geometry.type==="Polygon"){if(this.props.geometry.center&&this.props.geometry.radius){feature.setGeometry(new ol.geom.Circle(this.props.geometry.center,this.props.geometry.radius))}else{feature.setGeometry(new ol.geom.Polygon(this.props.geometry.coordinates))}}else if(this.props.geometry.type==="MultiPolygon"){feature.setGeometry(new ol.geom.MultiPolygon(this.props.geometry.coordinates))}this.setState({geometry:this.props.geometry})}}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.map.removeLayer(this.selectionLayer);this.removeDrawInteraction()}},{key:"render",value:function render(){return null}}])}(React.Component);_defineProperty(MapSelection,"propTypes",{/** Whether the selection tool is active */active:PropTypes.bool,/** Optional, a css-cursor to use when drawing */cursor:PropTypes.string,/** The draw interaction condition. */drawCondition:PropTypes.func,/** The selection geometry type (Point, LineString, Polygon, Circle, DragBox, Box) */geomType:PropTypes.string,/** Initial geometry or geometry to update. */geometry:PropTypes.object,/** The callback which is invoked with a drawn geometry. */geometryChanged:PropTypes.func,/** Whether to hide the current selection (except while drawing). */hideGeometry:PropTypes.bool,/** Whether to show measurements while drawing. */measure:PropTypes.bool,projection:PropTypes.string,/** Optional: the selection feature style name. */styleName:PropTypes.string,/** Optional: the selection feature style options. */styleOptions:PropTypes.object});_defineProperty(MapSelection,"defaultProps",{drawCondition:function drawCondition(event){return event.originalEvent.buttons===1},styleName:"default",styleOptions:{}});export default connect(function(state){return{projection:state.map.projection}},{})(MapSelection);
|
package/components/SearchBox.js
CHANGED
|
@@ -4,14 +4,14 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
|
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under the BSD-style license found in the
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/import React from"react";import{connect}from"react-redux";import axios from"axios";import classnames from"classnames";import DOMPurify from"dompurify";import isEmpty from"lodash.isempty";import pointInPolygon from"point-in-polygon";import polygonIntersectTest from"polygon-intersect-test";import PropTypes from"prop-types";import{createSelector}from"reselect";import{v4 as uuidv4}from"uuid";import{LayerRole,addLayerFeatures,addThemeSublayer,changeLayerProperty,removeLayer,replacePlaceholderLayer,addLayer}from"../actions/layers";import{logAction}from"../actions/logging";import{panTo,zoomToExtent,zoomToPoint}from"../actions/map";import{setCurrentSearchResult}from"../actions/search";import{setCurrentTask}from"../actions/task";import{setCurrentTheme}from"../actions/theme";import{openExternalUrl,showNotification}from"../actions/windows";import searchProvidersSelector from"../selectors/searchproviders";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 MiscUtils from"../utils/MiscUtils";import{UrlParams}from"../utils/PermaLinkUtils";import{FulltextSearch,SearchResultType}from"../utils/SearchProviders";import ServiceLayerUtils from"../utils/ServiceLayerUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import Icon from"./Icon";import MapSelection from"./MapSelection";import ButtonBar from"./widgets/ButtonBar";import ComboBox from"./widgets/ComboBox";import InputContainer from"./widgets/InputContainer";import NumberInput from"./widgets/NumberInput";import Spinner from"./widgets/Spinner";import"./style/SearchBox.css";var SearchBox=/*#__PURE__*/function(_React$Component){function SearchBox(props){var _this;_classCallCheck(this,SearchBox);_this=_callSuper(this,SearchBox,[props]);_defineProperty(_this,"state",{searchText:"",searchSession:null,pendingSearches:[],recentSearches:[],searchResults:{},resultsVisible:false,collapsedSections:{},expandedLayerGroup:null,activeLayerInfo:null,filterOptionsVisible:false,searchFilterRegions:null,selectedProvider:"",filterRegionName:"",filterGeomType:null,filterGeometry:null});_defineProperty(_this,"loadFilterRegions",function(){var searchRegions=ConfigUtils.getConfigProp("searchFilterRegions",_this.props.theme);if(Array.isArray(searchRegions)){_this.setState({searchFilterRegions:searchRegions})}else if(typeof searchRegions==="string"){axios.get(searchRegions).then(function(response){_this.setState({searchFilterRegions:response.data})})["catch"](function(){_this.setState({searchFilterRegions:null})})}else{_this.setState({searchFilterRegions:null})}});_defineProperty(_this,"renderFilterOptions",function(){var _this$state$filterGeo;if(!_this.state.filterOptionsVisible){return null}var providerSelection=/*#__PURE__*/React.createElement(ComboBox,{onChange:function onChange(value){return _this.setState({selectedProvider:value})},value:_this.state.selectedProvider},/*#__PURE__*/React.createElement("div",{value:""},LocaleUtils.tr("search.all")),Object.entries(_this.props.searchProviders).map(function(_ref){var _prov$params,_prov$label;var _ref2=_slicedToArray(_ref,2),key=_ref2[0],prov=_ref2[1];return/*#__PURE__*/React.createElement("div",{key:key,value:key},(prov===null||prov===void 0||(_prov$params=prov.params)===null||_prov$params===void 0?void 0:_prov$params.title)||((_prov$label=prov.label)!==null&&_prov$label!==void 0?_prov$label:LocaleUtils.tr(prov.labelmsgid)))}));var searchRegionSelection=null;if(Array.isArray(_this.state.searchFilterRegions)){searchRegionSelection=/*#__PURE__*/React.createElement(ComboBox,{onChange:function onChange(value){return _this.setFilterRegion(value,_this.state.searchFilterRegions)},value:_this.state.filterRegionName},/*#__PURE__*/React.createElement("div",{value:""},LocaleUtils.tr("search.none")),_this.state.searchFilterRegions.map(function(group,gidx){return[/*#__PURE__*/React.createElement("div",{"data-group-header":gidx,disabled:true,key:"group"+gidx},group.name)].concat(_toConsumableArray(group.items.map(function(item,idx){return/*#__PURE__*/React.createElement("div",{"data-group":gidx,key:item.name,value:gidx+":"+idx+":"+item.name},item.name)})))}))}var filterButtons=[{key:"Polygon",tooltip:LocaleUtils.tr("redlining.polygon"),icon:"polygon",label:LocaleUtils.tr("redlining.polygon")},{key:"Circle",tooltip:LocaleUtils.tr("redlining.circle"),icon:"circle",label:LocaleUtils.tr("redlining.circle")}];return/*#__PURE__*/React.createElement("div",{className:"searchbox-filter-options"},/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("search.providerselection"),":"),/*#__PURE__*/React.createElement("td",null,providerSelection)),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("search.limittoarea"),":"),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("div",{className:"searchbox-filter-options-geometry controlgroup"},/*#__PURE__*/React.createElement(ButtonBar,{active:_this.state.filterGeomType,buttons:filterButtons,onClick:_this.setFilterGeomType}),searchRegionSelection,/*#__PURE__*/React.createElement("button",{className:"button",onClick:_this.clearFilter,title:LocaleUtils.tr("search.clearfilter")},/*#__PURE__*/React.createElement(Icon,{icon:"clear"}))))),_this.state.filterGeomType==="Circle"?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("search.circleradius"),":"),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement(NumberInput,{disabled:!_this.state.filterGeometry,min:1,mobile:true,onChange:_this.setCircleRadius,suffix:" m",value:((_this$state$filterGeo=_this.state.filterGeometry)===null||_this$state$filterGeo===void 0?void 0:_this$state$filterGeo.radius)||0}))):null)))});_defineProperty(_this,"setFilterGeomType",function(geomType){_this.setState({filterGeomType:geomType,filterRegionName:"",filterGeometry:null})});_defineProperty(_this,"setFilterRegion",function(value,searchRegions){if(value){var parts=value.split(":");var item=searchRegions[parts[0]].items[parts[1]];var geometry={type:"Polygon",coordinates:[item.coordinates]};var mapGeometry=VectorLayerUtils.reprojectGeometry(geometry,item.crs,_this.props.map.projection);_this.setState({filterGeomType:null,filterRegionName:value,filterGeometry:mapGeometry})}else{_this.setState({filterGeomType:null,filterRegionName:"",filterGeometry:null})}});_defineProperty(_this,"setCircleRadius",function(value){_this.setState(function(state){return{filterGeometry:_objectSpread(_objectSpread({},state.filterGeometry),{},{radius:value})}})});_defineProperty(_this,"clearFilter",function(){_this.setState({filterGeomType:null,filterRegionName:"",filterGeometry:null})});_defineProperty(_this,"renderResultsMenu",function(){if(!_this.state.resultsVisible){return false}var children=[_this.renderRecentResults(),_this.renderFilters(),_this.renderResults()];children=children.filter(function(child){return!isEmpty(child)});if(isEmpty(children)){if(isEmpty(_this.state.pendingSearches)&&_this.state.searchResults.query_text){children=/*#__PURE__*/React.createElement("div",{className:"searchbox-noresults"},LocaleUtils.tr("search.noresults"))}else{return null}}return/*#__PURE__*/React.createElement("div",{className:"searchbox-results",onMouseDown:_this.setPreventBlur,ref:MiscUtils.setupKillTouchEvents},children)});_defineProperty(_this,"renderRecentResults",function(){var recentSearches=_this.state.recentSearches.filter(function(entry){return entry.toLowerCase().includes(_this.state.searchText.toLowerCase())});if(isEmpty(recentSearches)||recentSearches.length===1&&recentSearches[0].toLowerCase()===_this.state.searchText.toLowerCase()){return null}return/*#__PURE__*/React.createElement("div",{key:"recent"},/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-title",onClick:function onClick(){return _this.toggleSection("recent")},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement(Icon,{icon:_this.isCollapsed("recent")?"expand":"collapse"}),LocaleUtils.tr("search.recent")),!_this.isCollapsed("recent")?/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-body"},recentSearches.map(function(entry,idx){return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:"r"+idx,onClick:function onClick(){return _this.searchTextChanged(entry)},onMouseDown:MiscUtils.killEvent},entry)})):null)});_defineProperty(_this,"renderFilters",function(){return Object.entries(_this.state.searchResults).map(function(_ref3){var _ref4=_slicedToArray(_ref3,2),provider=_ref4[0],results=_ref4[1];if(isEmpty(results.result_counts)||results.result_counts.length<2){return null}var collapsed=_this.isCollapsed("filter",false);var values=results.result_counts.map(function(entry){return entry.filterword+": "+_this.state.searchResults.query_text});values.sort(function(a,b){return a.localeCompare(b)});return/*#__PURE__*/React.createElement("div",{key:"filter"},/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-title",onClick:function onClick(){return _this.toggleSection("filter")},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement(Icon,{icon:collapsed?"expand":"collapse"}),LocaleUtils.tr("search.filter")),!collapsed?/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-body"},values.map(function(value,idx){return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:"f"+idx,onClick:function onClick(){return _this.searchTextChanged(value,true,provider)},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label"},value))})):null)}).filter(Boolean)});_defineProperty(_this,"renderResults",function(){var resultRenderers=_defineProperty(_defineProperty(_defineProperty(_defineProperty({},SearchResultType.PLACE,_this.renderPlaceResult),SearchResultType.THEMELAYER,_this.renderLayerResult),SearchResultType.EXTERNALLAYER,_this.renderLayerResult),SearchResultType.THEME,_this.renderThemeResult);var layersBeforePlaces=_this.props.searchOptions.showLayerResultsBeforePlaces;var priorities=_defineProperty(_defineProperty(_defineProperty(_defineProperty({},SearchResultType.PLACE,layersBeforePlaces?0:3),SearchResultType.THEMELAYER,layersBeforePlaces?2:1),SearchResultType.EXTERNALLAYER,layersBeforePlaces?3:2),SearchResultType.THEME,layersBeforePlaces?1:0);var results=Object.keys(_this.props.searchProviders).reduce(function(result,provider){if(!_this.state.searchResults[provider]){return result}return result.concat(_this.state.searchResults[provider].results.map(function(group){var _group$type,_group$type2,_group$title,_group$title2;var sectionId=provider+":"+group.id;var moreLabel=null;if(group.resultCount>0&&group.resultCount>group.items.length){moreLabel=LocaleUtils.tr("search.more",group.resultCount-group.items.length)}else if(group.resultCount===-1){moreLabel=LocaleUtils.tr("search.unknownmore")}if(group.items.length===0){return null}var renderer=resultRenderers[(_group$type=group.type)!==null&&_group$type!==void 0?_group$type:SearchResultType.PLACE];if(!renderer){return null}var priority=priorities[(_group$type2=group.type)!==null&&_group$type2!==void 0?_group$type2:SearchResultType.PLACE];return{priority:priority*1000000+(group.priority||0),title:(_group$title=group.title)!==null&&_group$title!==void 0?_group$title:LocaleUtils.tr(group.titlemsgid),tree:/*#__PURE__*/React.createElement("div",{key:sectionId},/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-title",onClick:function onClick(){return _this.toggleSection(sectionId)},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement(Icon,{icon:_this.isCollapsed(sectionId)?"expand":"collapse"}),/*#__PURE__*/React.createElement("span",null,(_group$title2=group.title)!==null&&_group$title2!==void 0?_group$title2:LocaleUtils.tr(group.titlemsgid))),!_this.isCollapsed(sectionId)?/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-body"},group.items.map(function(entry){return renderer(provider,group,entry)}),moreLabel?/*#__PURE__*/React.createElement("div",{className:"searchbox-more-results"},moreLabel):null):null)}}))},[]).filter(Boolean);results.sort(function(a,b){if(b.priority!==a.priority){return b.priority-a.priority}else{return b.title.localeCompare(a.title)}});return isEmpty(results)?null:results.map(function(entry){return entry.tree})});_defineProperty(_this,"renderPlaceResult",function(provider,group,result){var _result$label;var key=provider+":"+group.id+":"+result.id;return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:key,onClick:function onClick(){_this.selectPlaceResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},result.thumbnail?/*#__PURE__*/React.createElement("img",{className:"searchbox-result-thumbnail",onError:function onError(ev){return _this.loadFallbackResultImage(ev,group.type)},src:result.thumbnail}):null,/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label",dangerouslySetInnerHTML:{__html:DOMPurify.sanitize(result.text).replace(/<br\s*\/>/ig," ")},title:(_result$label=result.label)!==null&&_result$label!==void 0?_result$label:result.text}),result.externalLink?/*#__PURE__*/React.createElement(Icon,{icon:"info-sign",onClick:function onClick(ev){var _result$label2;MiscUtils.killEvent(ev);_this.openUrl(result.externalLink,result.target,(_result$label2=result.label)!==null&&_result$label2!==void 0?_result$label2:result.text)}}):null)});_defineProperty(_this,"renderLayerResult",function(provider,group,result){var _result$label3,_result$layer;var parent=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var key=provider+":"+group.id+":"+result.id;var addThemes=ConfigUtils.getConfigProp("allowAddingOtherThemes",_this.props.theme);var icon=null;if(result.sublayers){var toggleLayerGroup=function toggleLayerGroup(){_this.setState(function(state){return{expandedLayerGroup:state.expandedLayerGroup===key?null:key}})};icon=/*#__PURE__*/React.createElement(Icon,{icon:_this.state.expandedLayerGroup===key?"minus":"plus",onClick:function onClick(ev){MiscUtils.killEvent(ev);toggleLayerGroup()}})}else if(result.thumbnail){icon=/*#__PURE__*/React.createElement("img",{className:"searchbox-result-thumbnail",onError:function onError(ev){return _this.loadFallbackResultImage(ev,group.type)},src:result.thumbnail})}var selectResult=result.theme?_this.selectThemeResult:_this.selectLayerResult;return/*#__PURE__*/React.createElement("div",{key:key},/*#__PURE__*/React.createElement("div",{className:"searchbox-result",onClick:function onClick(){selectResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},icon,result.theme?/*#__PURE__*/React.createElement(Icon,{className:"searchbox-result-openicon",icon:"open"}):null,/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label",dangerouslySetInnerHTML:{__html:DOMPurify.sanitize(result.text).replace(/<br\s*\/>/ig," ")},title:(_result$label3=result.label)!==null&&_result$label3!==void 0?_result$label3:result.text}),result.theme&&addThemes?/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.selectLayerResult(provider,group,result);_this.blur()},title:LocaleUtils.tr("themeswitcher.addtotheme")}):null,result.sublayers?/*#__PURE__*/React.createElement(Icon,{icon:"group",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.selectLayerResult(provider,group,result,true)},title:LocaleUtils.tr("importlayer.asgroup")}):null,result.info?/*#__PURE__*/React.createElement(Icon,{icon:"info-sign",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.toggleLayerInfo(provider,group,result,key,parent)}}):null),_this.state.activeLayerInfo===key?/*#__PURE__*/React.createElement("div",{className:"searchbox-result-abstract",dangerouslySetInnerHTML:{__html:MiscUtils.addLinkAnchors(DOMPurify.sanitize(((_result$layer=result.layer)===null||_result$layer===void 0?void 0:_result$layer["abstract"])||""))||LocaleUtils.tr("search.nodescription")}}):null,_this.state.expandedLayerGroup===key?/*#__PURE__*/React.createElement("div",{className:"searchbox-result-group"},result.sublayers.map(function(sublayer){return _this.renderLayerResult(provider,group,sublayer,result.id)})):null)});_defineProperty(_this,"renderThemeResult",function(provider,group,result){var _result$label4;var addThemes=ConfigUtils.getConfigProp("allowAddingOtherThemes",_this.props.theme);return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:provider+":"+group.id+":"+result.id,onClick:function onClick(){_this.selectThemeResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},result.thumbnail?/*#__PURE__*/React.createElement("img",{className:"searchbox-result-thumbnail",onError:function onError(ev){return _this.loadFallbackResultImage(ev,group.type)},src:result.thumbnail}):null,/*#__PURE__*/React.createElement(Icon,{className:"searchbox-result-openicon",icon:"open"}),/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label",dangerouslySetInnerHTML:{__html:DOMPurify.sanitize(result.text).replace(/<br\s*\/>/ig," ")},title:(_result$label4=result.label)!==null&&_result$label4!==void 0?_result$label4:result.text}),result.theme&&addThemes?/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.addThemeLayers(result.layer);_this.blur()},title:LocaleUtils.tr("themeswitcher.addtotheme")}):null)});_defineProperty(_this,"selectPlaceResult",function(provider,group,result){var resultText=result.text.replace(/<\/?\w+\s*\/?>/g,"");if(_this.props.searchOptions.showResultInSearchText!==false){// Show selected result text in search field
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import axios from"axios";import classnames from"classnames";import DOMPurify from"dompurify";import isEmpty from"lodash.isempty";import pointInPolygon from"point-in-polygon";import polygonIntersectTest from"polygon-intersect-test";import PropTypes from"prop-types";import{createSelector}from"reselect";import{v4 as uuidv4}from"uuid";import{LayerRole,addLayerFeatures,addThemeSublayer,changeLayerProperty,removeLayer,replacePlaceholderLayer,addLayer}from"../actions/layers";import{logAction}from"../actions/logging";import{panTo,zoomToExtent,zoomToPoint}from"../actions/map";import{setCurrentSearchResult}from"../actions/search";import{setCurrentTask}from"../actions/task";import{setCurrentTheme}from"../actions/theme";import{openExternalUrl,showNotification}from"../actions/windows";import searchProvidersSelector from"../selectors/searchproviders";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 MiscUtils from"../utils/MiscUtils";import{UrlParams}from"../utils/PermaLinkUtils";import{FulltextSearch,SearchResultType}from"../utils/SearchProviders";import ServiceLayerUtils from"../utils/ServiceLayerUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import Icon from"./Icon";import MapSelection from"./MapSelection";import ButtonBar from"./widgets/ButtonBar";import ComboBox from"./widgets/ComboBox";import InputContainer from"./widgets/InputContainer";import NumberInput from"./widgets/NumberInput";import Spinner from"./widgets/Spinner";import"./style/SearchBox.css";var SearchBox=/*#__PURE__*/function(_React$Component){function SearchBox(props){var _this;_classCallCheck(this,SearchBox);_this=_callSuper(this,SearchBox,[props]);_defineProperty(_this,"state",{searchText:"",searchSession:null,pendingSearches:[],recentSearches:[],searchResults:{},resultsVisible:false,collapsedSections:{},expandedLayerGroup:null,activeLayerInfo:null,filterOptionsVisible:false,searchFilterRegions:null,selectedProvider:"",filterRegionName:"",filterGeomType:null,filterGeometry:null});_defineProperty(_this,"loadFilterRegions",function(){var searchRegions=ConfigUtils.getConfigProp("searchFilterRegions",_this.props.theme);if(Array.isArray(searchRegions)){_this.setState({searchFilterRegions:searchRegions})}else if(typeof searchRegions==="string"){axios.get(searchRegions).then(function(response){_this.setState({searchFilterRegions:response.data})})["catch"](function(){_this.setState({searchFilterRegions:null})})}else{_this.setState({searchFilterRegions:null})}});_defineProperty(_this,"renderFilterOptions",function(){var _this$state$filterGeo;if(!_this.state.filterOptionsVisible){return null}var providerSelection=/*#__PURE__*/React.createElement(ComboBox,{onChange:function onChange(value){return _this.setState({selectedProvider:value})},value:_this.state.selectedProvider},/*#__PURE__*/React.createElement("div",{value:""},LocaleUtils.tr("search.all")),Object.entries(_this.props.searchProviders).map(function(_ref){var _prov$params,_prov$label;var _ref2=_slicedToArray(_ref,2),key=_ref2[0],prov=_ref2[1];return/*#__PURE__*/React.createElement("div",{key:key,value:key},(prov===null||prov===void 0||(_prov$params=prov.params)===null||_prov$params===void 0?void 0:_prov$params.title)||((_prov$label=prov.label)!==null&&_prov$label!==void 0?_prov$label:LocaleUtils.tr(prov.labelmsgid)))}));var searchRegionSelection=null;if(Array.isArray(_this.state.searchFilterRegions)){searchRegionSelection=/*#__PURE__*/React.createElement(ComboBox,{onChange:function onChange(value){return _this.setFilterRegion(value,_this.state.searchFilterRegions)},value:_this.state.filterRegionName},/*#__PURE__*/React.createElement("div",{value:""},LocaleUtils.tr("search.none")),_this.state.searchFilterRegions.map(function(group,gidx){return[/*#__PURE__*/React.createElement("div",{"data-group-header":gidx,disabled:true,key:"group"+gidx},group.name)].concat(_toConsumableArray(group.items.map(function(item,idx){return/*#__PURE__*/React.createElement("div",{"data-group":gidx,key:item.name,value:gidx+":"+idx+":"+item.name},item.name)})))}))}var filterButtons=[{key:"Polygon",tooltip:LocaleUtils.tr("redlining.polygon"),icon:"polygon",label:LocaleUtils.tr("redlining.polygon")},{key:"Circle",tooltip:LocaleUtils.tr("redlining.circle"),icon:"circle",label:LocaleUtils.tr("redlining.circle")}];return/*#__PURE__*/React.createElement("div",{className:"searchbox-filter-options"},/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("search.providerselection"),":"),/*#__PURE__*/React.createElement("td",null,providerSelection)),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("search.limittoarea"),":"),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("div",{className:"searchbox-filter-options-geometry controlgroup"},/*#__PURE__*/React.createElement(ButtonBar,{active:_this.state.filterGeomType,buttons:filterButtons,onClick:_this.setFilterGeomType}),searchRegionSelection,/*#__PURE__*/React.createElement("button",{className:"button",onClick:_this.clearFilter,title:LocaleUtils.tr("search.clearfilter")},/*#__PURE__*/React.createElement(Icon,{icon:"clear"}))))),_this.state.filterGeomType==="Circle"?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("search.circleradius"),":"),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement(NumberInput,{disabled:!_this.state.filterGeometry,min:1,mobile:true,onChange:_this.setCircleRadius,suffix:" m",value:((_this$state$filterGeo=_this.state.filterGeometry)===null||_this$state$filterGeo===void 0?void 0:_this$state$filterGeo.radius)||0}))):null)))});_defineProperty(_this,"setFilterGeomType",function(geomType){_this.setState({filterGeomType:geomType,filterRegionName:"",filterGeometry:null})});_defineProperty(_this,"setFilterRegion",function(value,searchRegions){if(value){var parts=value.split(":");var item=searchRegions[parts[0]].items[parts[1]];var geometry={type:"Polygon",coordinates:[item.coordinates]};var mapGeometry=VectorLayerUtils.reprojectGeometry(geometry,item.crs,_this.props.map.projection);_this.setState({filterGeomType:null,filterRegionName:value,filterGeometry:mapGeometry})}else{_this.setState({filterGeomType:null,filterRegionName:"",filterGeometry:null})}});_defineProperty(_this,"setCircleRadius",function(value){_this.setState(function(state){return{filterGeometry:_objectSpread(_objectSpread({},state.filterGeometry),{},{radius:value})}})});_defineProperty(_this,"clearFilter",function(){_this.setState({filterGeomType:null,filterRegionName:"",filterGeometry:null})});_defineProperty(_this,"renderResultsMenu",function(){if(!_this.state.resultsVisible){return false}var children=[_this.renderRecentResults(),_this.renderFilters(),_this.renderResults()];children=children.filter(function(child){return!isEmpty(child)});if(isEmpty(children)){if(isEmpty(_this.state.pendingSearches)&&_this.state.searchResults.query_text){children=/*#__PURE__*/React.createElement("div",{className:"searchbox-noresults"},LocaleUtils.tr("search.noresults"))}else{return null}}return/*#__PURE__*/React.createElement("div",{className:"searchbox-results",onMouseDown:_this.setPreventBlur,ref:MiscUtils.setupKillTouchEvents},children)});_defineProperty(_this,"renderRecentResults",function(){var recentSearches=_this.state.recentSearches.filter(function(entry){return entry.toLowerCase().includes(_this.state.searchText.toLowerCase())});if(isEmpty(recentSearches)||recentSearches.length===1&&recentSearches[0].toLowerCase()===_this.state.searchText.toLowerCase()){return null}return/*#__PURE__*/React.createElement("div",{key:"recent"},/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-title",onClick:function onClick(){return _this.toggleSection("recent")},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement(Icon,{icon:_this.isCollapsed("recent")?"expand":"collapse"}),LocaleUtils.tr("search.recent")),!_this.isCollapsed("recent")?/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-body"},recentSearches.map(function(entry,idx){return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:"r"+idx,onClick:function onClick(){return _this.searchTextChanged(entry)},onMouseDown:MiscUtils.killEvent},entry)})):null)});_defineProperty(_this,"renderFilters",function(){return Object.entries(_this.state.searchResults).map(function(_ref3){var _ref4=_slicedToArray(_ref3,2),provider=_ref4[0],results=_ref4[1];if(isEmpty(results.result_counts)||results.result_counts.length<2){return null}var collapsed=_this.isCollapsed("filter",false);var values=results.result_counts.map(function(entry){return entry.filterword+": "+_this.state.searchResults.query_text});values.sort(function(a,b){return a.localeCompare(b)});return/*#__PURE__*/React.createElement("div",{key:"filter"},/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-title",onClick:function onClick(){return _this.toggleSection("filter")},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement(Icon,{icon:collapsed?"expand":"collapse"}),LocaleUtils.tr("search.filter")),!collapsed?/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-body"},values.map(function(value,idx){return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:"f"+idx,onClick:function onClick(){return _this.searchTextChanged(value,true,provider)},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label"},value))})):null)}).filter(Boolean)});_defineProperty(_this,"renderResults",function(){var resultRenderers=_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({},SearchResultType.PLACE,_this.renderPlaceResult),SearchResultType.THEMELAYER,_this.renderLayerResult),SearchResultType.EXTERNALLAYER,_this.renderLayerResult),SearchResultType.THEME,_this.renderThemeResult),SearchResultType.TASK,_this.renderTaskResult);var layersBeforePlaces=_this.props.searchOptions.showLayerResultsBeforePlaces;var priorities=_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({},SearchResultType.PLACE,layersBeforePlaces?0:3),SearchResultType.THEMELAYER,layersBeforePlaces?2:1),SearchResultType.EXTERNALLAYER,layersBeforePlaces?3:2),SearchResultType.THEME,layersBeforePlaces?1:0),SearchResultType.TASK,4);var results=Object.keys(_this.props.searchProviders).reduce(function(result,provider){if(!_this.state.searchResults[provider]){return result}return result.concat(_this.state.searchResults[provider].results.map(function(group){var _group$type,_group$type2,_group$title,_group$title2;var sectionId=provider+":"+group.id;var moreLabel=null;if(group.resultCount>0&&group.resultCount>group.items.length){moreLabel=LocaleUtils.tr("search.more",group.resultCount-group.items.length)}else if(group.resultCount===-1){moreLabel=LocaleUtils.tr("search.unknownmore")}if(group.items.length===0){return null}var renderer=resultRenderers[(_group$type=group.type)!==null&&_group$type!==void 0?_group$type:SearchResultType.PLACE];if(!renderer){return null}var priority=priorities[(_group$type2=group.type)!==null&&_group$type2!==void 0?_group$type2:SearchResultType.PLACE];return{priority:priority*1000000+(group.priority||0),title:(_group$title=group.title)!==null&&_group$title!==void 0?_group$title:LocaleUtils.tr(group.titlemsgid),tree:/*#__PURE__*/React.createElement("div",{key:sectionId},/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-title",onClick:function onClick(){return _this.toggleSection(sectionId)},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement(Icon,{icon:_this.isCollapsed(sectionId)?"expand":"collapse"}),/*#__PURE__*/React.createElement("span",null,(_group$title2=group.title)!==null&&_group$title2!==void 0?_group$title2:LocaleUtils.tr(group.titlemsgid))),!_this.isCollapsed(sectionId)?/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-body"},group.items.map(function(entry){return renderer(provider,group,entry)}),moreLabel?/*#__PURE__*/React.createElement("div",{className:"searchbox-more-results"},moreLabel):null):null)}}))},[]).filter(Boolean);results.sort(function(a,b){if(b.priority!==a.priority){return b.priority-a.priority}else{return b.title.localeCompare(a.title)}});return isEmpty(results)?null:results.map(function(entry){return entry.tree})});_defineProperty(_this,"renderPlaceResult",function(provider,group,result){var _result$label;var key=provider+":"+group.id+":"+result.id;return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:key,onClick:function onClick(){_this.selectPlaceResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},result.thumbnail?/*#__PURE__*/React.createElement("img",{className:"searchbox-result-thumbnail",onError:function onError(ev){return _this.loadFallbackResultImage(ev,group.type)},src:result.thumbnail}):null,/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label",dangerouslySetInnerHTML:{__html:DOMPurify.sanitize(result.text).replace(/<br\s*\/>/ig," ")},title:(_result$label=result.label)!==null&&_result$label!==void 0?_result$label:result.text}),result.externalLink?/*#__PURE__*/React.createElement(Icon,{icon:"info-sign",onClick:function onClick(ev){var _result$label2;MiscUtils.killEvent(ev);_this.openUrl(result.externalLink,result.target,(_result$label2=result.label)!==null&&_result$label2!==void 0?_result$label2:result.text)}}):null)});_defineProperty(_this,"renderLayerResult",function(provider,group,result){var _result$label3,_result$layer;var parent=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var key=provider+":"+group.id+":"+result.id;var addThemes=ConfigUtils.getConfigProp("allowAddingOtherThemes",_this.props.theme);var icon=null;if(result.sublayers){var toggleLayerGroup=function toggleLayerGroup(){_this.setState(function(state){return{expandedLayerGroup:state.expandedLayerGroup===key?null:key}})};icon=/*#__PURE__*/React.createElement(Icon,{icon:_this.state.expandedLayerGroup===key?"minus":"plus",onClick:function onClick(ev){MiscUtils.killEvent(ev);toggleLayerGroup()}})}else if(result.thumbnail){icon=/*#__PURE__*/React.createElement("img",{className:"searchbox-result-thumbnail",onError:function onError(ev){return _this.loadFallbackResultImage(ev,group.type)},src:result.thumbnail})}var selectResult=result.theme?_this.selectThemeResult:_this.selectLayerResult;return/*#__PURE__*/React.createElement("div",{key:key},/*#__PURE__*/React.createElement("div",{className:"searchbox-result",onClick:function onClick(){selectResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},icon,result.theme?/*#__PURE__*/React.createElement(Icon,{className:"searchbox-result-openicon",icon:"open"}):null,/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label",dangerouslySetInnerHTML:{__html:DOMPurify.sanitize(result.text).replace(/<br\s*\/>/ig," ")},title:(_result$label3=result.label)!==null&&_result$label3!==void 0?_result$label3:result.text}),result.theme&&addThemes?/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.selectLayerResult(provider,group,result);_this.blur()},title:LocaleUtils.tr("themeswitcher.addtotheme")}):null,result.sublayers?/*#__PURE__*/React.createElement(Icon,{icon:"group",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.selectLayerResult(provider,group,result,true)},title:LocaleUtils.tr("importlayer.asgroup")}):null,result.info?/*#__PURE__*/React.createElement(Icon,{icon:"info-sign",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.toggleLayerInfo(provider,group,result,key,parent)}}):null),_this.state.activeLayerInfo===key?/*#__PURE__*/React.createElement("div",{className:"searchbox-result-abstract",dangerouslySetInnerHTML:{__html:MiscUtils.addLinkAnchors(DOMPurify.sanitize(((_result$layer=result.layer)===null||_result$layer===void 0?void 0:_result$layer["abstract"])||""))||LocaleUtils.tr("search.nodescription")}}):null,_this.state.expandedLayerGroup===key?/*#__PURE__*/React.createElement("div",{className:"searchbox-result-group"},result.sublayers.map(function(sublayer){return _this.renderLayerResult(provider,group,sublayer,result.id)})):null)});_defineProperty(_this,"renderThemeResult",function(provider,group,result){var _result$label4;var addThemes=ConfigUtils.getConfigProp("allowAddingOtherThemes",_this.props.theme);return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:provider+":"+group.id+":"+result.id,onClick:function onClick(){_this.selectThemeResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},result.thumbnail?/*#__PURE__*/React.createElement("img",{className:"searchbox-result-thumbnail",onError:function onError(ev){return _this.loadFallbackResultImage(ev,group.type)},src:result.thumbnail}):null,/*#__PURE__*/React.createElement(Icon,{className:"searchbox-result-openicon",icon:"open"}),/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label",dangerouslySetInnerHTML:{__html:DOMPurify.sanitize(result.text).replace(/<br\s*\/>/ig," ")},title:(_result$label4=result.label)!==null&&_result$label4!==void 0?_result$label4:result.text}),result.theme&&addThemes?/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.addThemeLayers(result.layer);_this.blur()},title:LocaleUtils.tr("themeswitcher.addtotheme")}):null)});_defineProperty(_this,"renderTaskResult",function(provider,group,result){return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:provider+":"+group.id+":"+result.id,onClick:function onClick(){_this.selectTaskResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},result.task.icon?/*#__PURE__*/React.createElement(Icon,{icon:result.task.icon}):null,/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label"},result.text))});_defineProperty(_this,"selectPlaceResult",function(provider,group,result){var resultText=result.text.replace(/<\/?\w+\s*\/?>/g,"");if(_this.props.searchOptions.showResultInSearchText!==false){// Show selected result text in search field
|
|
8
8
|
_this.setState({searchText:resultText,searchResults:_defineProperty({query_text:resultText},provider,{results:[_objectSpread(_objectSpread({},group),{},{items:[result]})],tot_result_count:1})})}_this.updateRecentSearches();if(result.geometry){_this.showResultGeometry(result,{feature:{type:"Feature",geometry:result.geometry},crs:result.crs})}else if(_this.props.searchProviders[provider].getResultGeometry){_this.props.searchProviders[provider].getResultGeometry(result,function(response){_this.showResultGeometry(result,response)},axios)}else{// Display marker
|
|
9
9
|
_this.showResultGeometry(result,{feature:{type:"Feature",geometry:{type:"Point",coordinates:[result.x,result.y]}},crs:result.crs})}if(result.dataproduct_id){var quot=typeof result.id==="string"?"\"":"";var filter="[[\"".concat(result.id_field_name,"\",\"=\", ").concat(quot).concat(result.id).concat(quot,"]]");UrlParams.updateParams({hp:result.dataproduct_id,hf:filter,st:resultText})}else{UrlParams.updateParams({hp:undefined,hf:undefined,st:resultText})}_this.props.logAction("SEARCH_TEXT",{searchText:_this.state.searchText});_this.props.logAction("SEARCH_RESULT_SELECTED",{place:resultText});// Enable layer
|
|
10
10
|
if(result.layername){var path=[];var sublayer=null;var layer=_this.props.layers.find(function(l){return l.role===LayerRole.THEME&&(sublayer=LayerUtils.searchSubLayer(l,"name",result.layername,path))});if(layer&&sublayer){_this.props.changeLayerProperty(layer.id,"visibility",true,path,"both")}}});_defineProperty(_this,"selectLayerResult",function(provider,group,result){var asGroup=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;if(result.layer){if(result.theme){_this.addThemeLayers(result.layer)}else if(group.type===SearchResultType.THEMELAYER){_this.props.addThemeSublayer(result.layer)}else if(group.type===SearchResultType.EXTERNALLAYER){_this.addExternalLayer(result.layer,asGroup)}// Show layer tree to notify user that something has happened
|
|
11
11
|
_this.props.setCurrentTask("LayerTree")}else if(_this.props.searchProviders[provider].getLayerDefinition){_this.props.searchProviders[provider].getLayerDefinition(result,function(layer){if(layer){if(result.theme){_this.addThemeLayers(layer)}else if(group.type===SearchResultType.THEMELAYER){_this.props.addThemeSublayer({sublayers:[layer]})}else if(group.type===SearchResultType.EXTERNALLAYER){_this.addExternalLayer(layer,asGroup)}// Show layer tree to notify user that something has happened
|
|
12
12
|
_this.props.setCurrentTask("LayerTree")}},axios)}});_defineProperty(_this,"addExternalLayer",function(entry){var asGroup=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(entry.resource){var _entry$title;var params=LayerUtils.splitLayerUrlParam(entry.resource);// Create placeholder layer
|
|
13
13
|
_this.props.addLayer({id:params.id,type:"placeholder",name:params.name,title:(_entry$title=entry.title)!==null&&_entry$title!==void 0?_entry$title:params.name,role:params.USERLAYER,loading:true});ServiceLayerUtils.findLayers(params.type,params.url,[params],_this.props.map.projection,function(id,layer){if(layer){if(!asGroup){layer.sublayers=null}LayerUtils.propagateLayerProperty(layer,"opacity",params.opacity);_this.props.replacePlaceholderLayer(params.id,layer)}else{// eslint-disable-next-line
|
|
14
|
-
alert(LocaleUtils.tr("importlayer.addfailed"));_this.props.removeLayer(params.id)}})}else if(entry.type==="wms"||entry.type==="wfs"||entry.type==="wmts"){if(asGroup){_this.props.addLayer(entry)}else{_this.props.addLayer(_objectSpread(_objectSpread({},entry),{},{sublayers:null}))}}});_defineProperty(_this,"selectThemeResult",function(provider,group,result){_this.props.setCurrentTheme(result.theme,_this.props.themes);if(_this.props.searchOptions.showLayerAfterChangeTheme){_this.props.setCurrentTask("LayerTree")}});_defineProperty(_this,"loadFallbackResultImage",function(ev,type){if(type===SearchResultType.PLACE){var iconPath=ConfigUtils.getAssetsPath()+"/img/search/";if(!ev.target.src.endsWith(iconPath+"feature.svg")){ev.target.src=iconPath+"feature.svg"}}else{ev.target.style.display="none"}});_defineProperty(_this,"toggleLayerInfo",function(provider,group,result,key,parent){var setResultLayerAndActiveInfo=function setResultLayerAndActiveInfo(layer){// Embed returned layer into result item, so that layer info is read from item.layer.abstract
|
|
14
|
+
alert(LocaleUtils.tr("importlayer.addfailed"));_this.props.removeLayer(params.id)}})}else if(entry.type==="wms"||entry.type==="wfs"||entry.type==="wmts"){if(asGroup){_this.props.addLayer(entry)}else{_this.props.addLayer(_objectSpread(_objectSpread({},entry),{},{sublayers:null}))}}});_defineProperty(_this,"selectThemeResult",function(provider,group,result){_this.props.setCurrentTheme(result.theme,_this.props.themes);if(_this.props.searchOptions.showLayerAfterChangeTheme){_this.props.setCurrentTask("LayerTree")}});_defineProperty(_this,"selectTaskResult",function(provider,group,result){if(result.task.url){_this.props.openExternalUrl(result.task.url,result.task.target,result.text,result.task.icon)}else{_this.props.setCurrentTask(result.task.task||result.task.key,result.task.mode,result.task.mapClickAction||(result.task.identifyEnabled?"identify":null))}});_defineProperty(_this,"loadFallbackResultImage",function(ev,type){if(type===SearchResultType.PLACE){var iconPath=ConfigUtils.getAssetsPath()+"/img/search/";if(!ev.target.src.endsWith(iconPath+"feature.svg")){ev.target.src=iconPath+"feature.svg"}}else{ev.target.style.display="none"}});_defineProperty(_this,"toggleLayerInfo",function(provider,group,result,key,parent){var setResultLayerAndActiveInfo=function setResultLayerAndActiveInfo(layer){// Embed returned layer into result item, so that layer info is read from item.layer.abstract
|
|
15
15
|
_this.setState(function(state){return{searchResults:_objectSpread(_objectSpread({},state.searchResults),{},_defineProperty({},provider,_objectSpread(_objectSpread({},state.searchResults[provider]),{},{results:state.searchResults[provider].results.map(function(g){if(g.id===group.id){return _objectSpread(_objectSpread({},g),{},{items:g.items.map(function(item){if(item.id===result.id){return _objectSpread(_objectSpread({},item),{},{layer:layer})}else if(item.id===parent){return _objectSpread(_objectSpread({},item),{},{sublayers:item.sublayers.map(function(sublayer){if(sublayer.id===result.id){return _objectSpread(_objectSpread({},sublayer),{},{layer:layer})}else{return sublayer}})})}else{return item}})})}else{return g}})}))),activeLayerInfo:key}})};_this.setState(function(state){if(state.activeLayerInfo===key){return{activeLayerInfo:null}}else{if(!result.layer&&_this.props.searchProviders[provider].getLayerDefinition){_this.props.searchProviders[provider].getLayerDefinition(result,setResultLayerAndActiveInfo,axios);return{}}else{return{activeLayerInfo:key}}}})});_defineProperty(_this,"setPreventBlur",function(){_this.preventBlur=true;setTimeout(function(){_this.preventBlur=false;return false},100)});_defineProperty(_this,"toggleSection",function(key){return _this.setState(function(state){var _newCollapsedSections;var newCollapsedSections=_objectSpread({},state.collapsedSections);var deflt=_this.props.searchOptions.sectionsDefaultCollapsed||false;newCollapsedSections[key]=!((_newCollapsedSections=newCollapsedSections[key])!==null&&_newCollapsedSections!==void 0?_newCollapsedSections:deflt);return{collapsedSections:newCollapsedSections}})});_defineProperty(_this,"isCollapsed",function(section){var _this$state$collapsed;var deflt=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;deflt=deflt!==null&&deflt!==void 0?deflt:_this.props.searchOptions.sectionsDefaultCollapsed||false;return(_this$state$collapsed=_this.state.collapsedSections[section])!==null&&_this$state$collapsed!==void 0?_this$state$collapsed:deflt});_defineProperty(_this,"toggleFilterOptions",function(visible){_this.setState({filterOptionsVisible:visible})});_defineProperty(_this,"searchTextChanged",function(text){var expandSections=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var provider=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;if(_this.props.layers.find(function(layer){return layer.id==="searchselection"})){_this.props.removeLayer("searchselection")}var newState={searchText:text,expandedLayerGroup:null,activeLayerInfo:null,pendingSearches:[],searchSession:null};if(expandSections){newState.collapsedSections={}}_this.setState(newState);clearTimeout(_this.searchTimeout);_this.searchTimeout=setTimeout(function(){return _this.startSearch(provider)},250)});_defineProperty(_this,"onFocus",function(){_this.setState({resultsVisible:true});if(_this.searchBox){_this.searchBox.select()}if(isEmpty(_this.state.searchResults)&&_this.props.theme){_this.startSearch()}if(_this.props.searchOptions.allowSearchFilters){_this.toggleFilterOptions(false)}});_defineProperty(_this,"onBlur",function(){if(_this.preventBlur&&_this.searchBox){_this.searchBox.focus()}else{_this.setState({resultsVisible:false,collapsedSections:{},expandedLayerGroup:null,activeLayerInfo:null})}});_defineProperty(_this,"clear",function(){_this.props.setCurrentSearchResult(null);_this.blur();_this.setState({searchText:"",searchResults:{},selectedProvider:"",filterRegionName:"",filterGeometry:null});_this.props.removeLayer("searchselection");UrlParams.updateParams({hp:undefined,hf:undefined,st:undefined})});_defineProperty(_this,"startSearch",function(){var _this$state$filterGeo2;var provider=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;var uniquePlaceResult=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var availableProviders=_this.props.searchProviders;var selectedProvider=provider!==null&&provider!==void 0?provider:_this.state.selectedProvider;if(selectedProvider){availableProviders=_defineProperty({},selectedProvider,_this.props.searchProviders[selectedProvider])}// eslint-disable-next-line
|
|
16
16
|
var searchText=_this.state.searchText.trim();if(isEmpty(searchText)){_this.setState({searchResults:{}});return}var searchSession=uuidv4();_this.setState({searchResults:{query_text:searchText},searchSession:searchSession,pendingSearches:Object.keys(availableProviders)});var searchParams={mapcrs:_this.props.map.projection,displaycrs:_this.props.map.displayCrs,lang:LocaleUtils.lang(),limit:_this.props.searchOptions.resultLimit,filterPoly:(_this$state$filterGeo2=_this.state.filterGeometry)===null||_this$state$filterGeo2===void 0||(_this$state$filterGeo2=_this$state$filterGeo2.coordinates)===null||_this$state$filterGeo2===void 0?void 0:_this$state$filterGeo2[0],filterBBox:_this.state.filterGeometry?VectorLayerUtils.computeFeatureBBox(_this.state.filterGeometry):null};Object.entries(availableProviders).forEach(function(_ref5){var _ref6=_slicedToArray(_ref5,2),provKey=_ref6[0],prov=_ref6[1];prov.onSearch(searchText,_objectSpread(_objectSpread({cfgParams:prov.cfgParams},prov.params),searchParams),function(response){var results=prov.handlesGeomFilter?response.results:_this.filterProviderResults(response.results);var totResultCount=results.reduce(function(tot,group){var _group$resultCount;return tot+((_group$resultCount=group.resultCount)!==null&&_group$resultCount!==void 0?_group$resultCount:group.items.length)},0);if(uniquePlaceResult){// If looking for unique place result, filter non-place results
|
|
17
17
|
results=results.filter(function(group){var _group$type3;return((_group$type3=group.type)!==null&&_group$type3!==void 0?_group$type3:SearchResultType.PLACE)===SearchResultType.PLACE})}_this.setState(function(state){if(searchSession!==state.searchSession){return{}}var searchResults=_objectSpread(_objectSpread({},state.searchResults),{},_defineProperty({},provKey,{results:results,result_counts:response.result_counts,tot_result_count:totResultCount}));var newPendingSearches=state.pendingSearches.filter(function(entry){return entry!==provKey});if(isEmpty(newPendingSearches)&&uniquePlaceResult){var providersWithResults=Object.entries(searchResults).filter(function(_ref7){var _ref8=_slicedToArray(_ref7,2),_=_ref8[0],providerResults=_ref8[1];return providerResults.tot_result_count>0});if(providersWithResults.length===1&&providersWithResults[0][1].tot_result_count===1){var group=providersWithResults[0][1].results[0];// Avoid warning about setState called in setState
|
|
@@ -12,19 +12,19 @@ Object.entries(prevColorLayers).forEach(function(_ref3){var _ref4=_slicedToArray
|
|
|
12
12
|
tiles.tiles.addEventListener("load-tile-set",function(_ref7){var tileSet=_ref7.tileSet;if(tileSet.root.parent===null){var bbox=new Box3;tiles.tiles.getBoundingBox(bbox);var center=bbox.getCenter(new Vector3);tiles.tiles.group.position.sub(center);if(matrix){tiles.tiles.group.parent.applyMatrix4(matrix)}else{tiles.tiles.group.parent.position.copy(center)}tiles.tiles.group.parent.updateMatrixWorld(true);if(label){tiles.tiles.group.parent.userData.label=label;updateObjectLabel(tiles.tiles.group.parent,_this2.state.sceneContext)}}_this2.instance.notifyChange(tiles);if(showEditTool){_this2.props.setCurrentTask("EditDataset3D",null,null,{objectId:name})}});tiles.tiles.addEventListener("needs-update",function(){_this2.instance.notifyChange(tiles)});// Apply style when loading tile
|
|
13
13
|
tiles.tiles.addEventListener("load-model",function(_ref8){var scene=_ref8.scene;scene.userData.tilesetName=name;scene.userData.featureIdAttr="id";Tiles3DStyle.applyTileStyle(scene,_this2.state.sceneContext.sceneObjects[name],_this2.state.sceneContext);_this2.instance.notifyChange(tiles)});// Show/hide labels when tile visibility changes
|
|
14
14
|
tiles.tiles.addEventListener("tile-visibility-change",function(_ref9){var _scene$userData$tileL,_scene$userData;var scene=_ref9.scene,visible=_ref9.visible;Object.values((_scene$userData$tileL=scene===null||scene===void 0||(_scene$userData=scene.userData)===null||_scene$userData===void 0?void 0:_scene$userData.tileLabels)!==null&&_scene$userData$tileL!==void 0?_scene$userData$tileL:{}).forEach(function(l){l.labelObject.visible=visible;l.labelObject.element.style.display=visible?"initial":"none"})});tiles.castShadow=true;tiles.receiveShadow=true;tiles.userData.layertree=true;_this2.instance.add(tiles);_this2.objectMap[name]=tiles;_this2.setState(function(state){var objectState=_objectSpread({imported:true,visibility:true,opacity:255,layertree:true,title:name},options);return{sceneContext:_objectSpread(_objectSpread({},state.sceneContext),{},{sceneObjects:_objectSpread(_objectSpread({},state.sceneContext.sceneObjects),{},_defineProperty({},name,objectState))})}})});_defineProperty(_this2,"addSceneObject",function(objectId,object){var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var showEditTool=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;_this2.sceneObjectGroup.add(object);_this2.objectMap[objectId]=object;_this2.instance.notifyChange(object);_this2.setState(function(state){var objectState=_objectSpread({visibility:true,opacity:255,layertree:false},options);return{sceneContext:_objectSpread(_objectSpread({},state.sceneContext),{},{sceneObjects:_objectSpread(_objectSpread({},state.sceneContext.sceneObjects),{},_defineProperty({},objectId,objectState))})}});if(showEditTool){_this2.props.setCurrentTask("EditDataset3D",null,null,{objectId:objectId})}});_defineProperty(_this2,"getSceneObject",function(objectId){return _this2.objectMap[objectId]});_defineProperty(_this2,"removeSceneObject",function(objectId){var callback=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined;var object=_this2.objectMap[objectId];if(!object){return}// Ensure labels are removed
|
|
15
|
-
object.traverse(function(c){if(c.isCSS2DObject){c.element.parentNode.removeChild(c.element)}});if(object.tiles){_this2.instance.remove(object)}else{_this2.sceneObjectGroup.remove(object)}delete _this2.objectMap[objectId];_this2.instance.notifyChange();_this2.setState(function(state){var newSceneObjects=_objectSpread({},state.sceneContext.sceneObjects);delete newSceneObjects[objectId];return{sceneContext:_objectSpread(_objectSpread({},state.sceneContext),{},{sceneObjects:newSceneObjects})}},callback)});_defineProperty(_this2,"updateSceneObject",function(objectId,options){_this2.setState(function(state){return{sceneContext:_objectSpread(_objectSpread({},state.sceneContext),{},{sceneObjects:_objectSpread(_objectSpread({},state.sceneContext.sceneObjects),{},_defineProperty({},objectId,_objectSpread(_objectSpread({},state.sceneContext.sceneObjects[objectId]),options)))})}})});_defineProperty(_this2,"zoomToObject",function(objectId){var margin=arguments.length>1&&arguments[1]!==undefined?arguments[1]:20;var obj=_this2.state.sceneContext.getSceneObject(objectId);var bbox=new Box3;if(obj!==null&&obj!==void 0&&obj.tiles){obj.tiles.getBoundingBox(bbox)}else{bbox.setFromObject(obj)}if(!bbox.isEmpty()){var bounds=[bbox.min.x-margin,bbox.min.y-margin,bbox.max.x+margin,bbox.max.y+margin];_this2.state.sceneContext.setViewToExtent(bounds,0)}});_defineProperty(_this2,"getMap",function(){return _this2.map});_defineProperty(_this2,"setupContainer",function(el){if(el){_this2.container=el;el.resizeObserver=new ResizeObserver(function(entries){var rect=entries[0].contentRect;_this2.state.sceneContext.scene.view.dispatchEvent({type:"view-resized",width:rect.width,height:rect.height})});el.resizeObserver.observe(el);_this2.setupInstance()}});_defineProperty(_this2,"setupInstance",function(){var _this2$props$theme$ma,_this2$props$theme$ma2,_this2$props$theme$ma3,_this2$props$theme$
|
|
15
|
+
object.traverse(function(c){if(c.isCSS2DObject){c.element.parentNode.removeChild(c.element)}});if(object.tiles){_this2.instance.remove(object)}else{_this2.sceneObjectGroup.remove(object)}delete _this2.objectMap[objectId];_this2.instance.notifyChange();_this2.setState(function(state){var newSceneObjects=_objectSpread({},state.sceneContext.sceneObjects);delete newSceneObjects[objectId];return{sceneContext:_objectSpread(_objectSpread({},state.sceneContext),{},{sceneObjects:newSceneObjects})}},callback)});_defineProperty(_this2,"updateSceneObject",function(objectId,options){_this2.setState(function(state){return{sceneContext:_objectSpread(_objectSpread({},state.sceneContext),{},{sceneObjects:_objectSpread(_objectSpread({},state.sceneContext.sceneObjects),{},_defineProperty({},objectId,_objectSpread(_objectSpread({},state.sceneContext.sceneObjects[objectId]),options)))})}})});_defineProperty(_this2,"zoomToObject",function(objectId){var margin=arguments.length>1&&arguments[1]!==undefined?arguments[1]:20;var obj=_this2.state.sceneContext.getSceneObject(objectId);var bbox=new Box3;if(obj!==null&&obj!==void 0&&obj.tiles){obj.tiles.getBoundingBox(bbox)}else{bbox.setFromObject(obj)}if(!bbox.isEmpty()){var bounds=[bbox.min.x-margin,bbox.min.y-margin,bbox.max.x+margin,bbox.max.y+margin];_this2.state.sceneContext.setViewToExtent(bounds,0)}});_defineProperty(_this2,"getMap",function(){return _this2.map});_defineProperty(_this2,"setupContainer",function(el){if(el){_this2.container=el;el.resizeObserver=new ResizeObserver(function(entries){var rect=entries[0].contentRect;_this2.state.sceneContext.scene.view.dispatchEvent({type:"view-resized",width:rect.width,height:rect.height})});el.resizeObserver.observe(el);_this2.setupInstance()}});_defineProperty(_this2,"setupInstance",function(){var _this2$props$theme$ma,_this2$props$theme$ma2,_this2$props$theme$ma3,_this2$props$theme$ma4,_this2$props$theme$ma5,_this2$props$theme$ma8,_this2$props$theme$ma9,_this2$props$theme$ma10;if(_this2.instance){_this2.disposeInstance()}if(!_this2.props.theme){return}var projection=_this2.props.theme.mapCrs;// Setup instance
|
|
16
16
|
_this2.instance=new Instance({target:_this2.container,crs:projection,renderer:{clearColor:0,preserveDrawingBuffer:true}});_this2.sceneObjectGroup=new Group;_this2.instance.add(_this2.sceneObjectGroup);// Setup map
|
|
17
|
-
var
|
|
17
|
+
var initialBbox=(_this2$props$theme$ma=(_this2$props$theme$ma2=_this2.props.theme.map3d)===null||_this2$props$theme$ma2===void 0?void 0:_this2$props$theme$ma2.extent)!==null&&_this2$props$theme$ma!==void 0?_this2$props$theme$ma:_this2.props.theme.initialBbox;var bounds=CoordinatesUtils.reprojectBbox(initialBbox.bounds,initialBbox.crs,projection);var extent=new Extent(crs,bounds[0],bounds[2],bounds[1],bounds[3]);_this2.map=new Map({extent:extent,backgroundColor:"white"});_this2.instance.add(_this2.map);// Setup camera
|
|
18
18
|
var center=extent.center();_this2.instance.view.camera.position.set(center.x,center.y,0.5*(extent.east-extent.west));// Skybox
|
|
19
19
|
var cubeTextureLoader=new CubeTextureLoader;cubeTextureLoader.setPath(ConfigUtils.getAssetsPath()+"/3d/skybox/");var cubeTexture=cubeTextureLoader.load(["px.jpg","nx.jpg","py.jpg","ny.jpg","pz.jpg","nz.jpg"]);_this2.instance.scene.background=cubeTexture;// Setup elevation
|
|
20
|
-
var demUrl=MiscUtils.resolveAssetsPath((_this2$props$theme$
|
|
21
|
-
var externalLayers={};var baseLayers=ThemeUtils.createThemeBackgroundLayers(((_this2$props$theme$
|
|
20
|
+
var demUrl=MiscUtils.resolveAssetsPath((_this2$props$theme$ma3=(_this2$props$theme$ma4=_this2.props.theme.map3d)===null||_this2$props$theme$ma4===void 0||(_this2$props$theme$ma4=_this2$props$theme$ma4.dtm)===null||_this2$props$theme$ma4===void 0?void 0:_this2$props$theme$ma4.url)!==null&&_this2$props$theme$ma3!==void 0?_this2$props$theme$ma3:"");var demCrs=((_this2$props$theme$ma5=_this2.props.theme.map3d)===null||_this2$props$theme$ma5===void 0||(_this2$props$theme$ma5=_this2$props$theme$ma5.dtm)===null||_this2$props$theme$ma5===void 0?void 0:_this2$props$theme$ma5.crs)||"EPSG:3857";if(demUrl){var _this2$props$theme$ma6,_this2$props$theme$ma7;var demSource=new GeoTIFFSource({url:demUrl,crs:demCrs});var demMin=(_this2$props$theme$ma6=_this2.props.theme.map3d.dtm.min)!==null&&_this2$props$theme$ma6!==void 0?_this2$props$theme$ma6:undefined;var demMax=(_this2$props$theme$ma7=_this2.props.theme.map3d.dtm.max)!==null&&_this2$props$theme$ma7!==void 0?_this2$props$theme$ma7:undefined;var elevationLayer=new ElevationLayer({name:"dem",extent:extent,source:demSource,minmax:demMin!==undefined&&demMax!==undefined?{demMin:demMin,demMax:demMax}:undefined});_this2.addLayer("__dtm",elevationLayer)}// Collect baselayers
|
|
21
|
+
var externalLayers={};var baseLayers=ThemeUtils.createThemeBackgroundLayers(((_this2$props$theme$ma8=_this2.props.theme.map3d)===null||_this2$props$theme$ma8===void 0?void 0:_this2$props$theme$ma8.basemaps)||[],_this2.props.themes,null,externalLayers);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],projection,function(id,layer){// Don't expose sublayers
|
|
22
22
|
if(layer){layer.sublayers=null}_this2.setState(function(state){return{sceneContext:_objectSpread(_objectSpread({},state.sceneContext),{},{baseLayers:LayerUtils.replacePlaceholderLayer(state.sceneContext.baseLayers,id,layer)})}})})}// Collect color layers
|
|
23
23
|
var colorLayers=_this2.collectColorLayers([],[]);var sceneObjects={};_this2.objectMap={};// Add 3d tiles
|
|
24
|
-
(((_this2$props$theme$
|
|
24
|
+
(((_this2$props$theme$ma9=_this2.props.theme.map3d)===null||_this2$props$theme$ma9===void 0?void 0:_this2$props$theme$ma9.tiles3d)||[]).forEach(function(entry){var _entry$title;var tiles=new Tiles3D({url:MiscUtils.resolveAssetsPath(entry.url),errorTarget:32});tiles.tiles.addEventListener("load-tile-set",function(){_this2.instance.notifyChange(tiles)});tiles.tiles.addEventListener("needs-update",function(){_this2.instance.notifyChange(tiles)});// Apply style when loading tile
|
|
25
25
|
tiles.tiles.addEventListener("load-model",function(_ref10){var _entry$idAttr;var scene=_ref10.scene;scene.userData.tilesetName=entry.name;scene.userData.featureIdAttr=(_entry$idAttr=entry.idAttr)!==null&&_entry$idAttr!==void 0?_entry$idAttr:"id";Tiles3DStyle.applyTileStyle(scene,_this2.state.sceneContext.sceneObjects[entry.name],_this2.state.sceneContext);_this2.instance.notifyChange(tiles)});// Show/hide labels when tile visibility changes
|
|
26
26
|
tiles.tiles.addEventListener("tile-visibility-change",function(_ref11){var _scene$userData$tileL2,_scene$userData2;var scene=_ref11.scene,visible=_ref11.visible;Object.values((_scene$userData$tileL2=scene===null||scene===void 0||(_scene$userData2=scene.userData)===null||_scene$userData2===void 0?void 0:_scene$userData2.tileLabels)!==null&&_scene$userData$tileL2!==void 0?_scene$userData$tileL2:{}).forEach(function(label){label.labelObject.visible=visible;label.labelObject.element.style.display=visible?"initial":"none"})});tiles.castShadow=true;tiles.receiveShadow=true;tiles.userData.layertree=true;_this2.instance.add(tiles);_this2.objectMap[entry.name]=tiles;sceneObjects[entry.name]={visibility:true,opacity:255,layertree:true,title:(_entry$title=entry.title)!==null&&_entry$title!==void 0?_entry$title:entry.name,baseColor:entry.baseColor,styles:entry.styles,style:entry.style||Object.keys(entry.styles||{})[0]||null,tilesetStyle:null,idAttr:entry.idAttr,colorAttr:entry.colorAttr,alphaAttr:entry.alphaAttr,labelAttr:entry.labelAttr}});// Add other objects
|
|
27
|
-
(((_this2$props$theme$
|
|
27
|
+
(((_this2$props$theme$ma10=_this2.props.theme.map3d)===null||_this2$props$theme$ma10===void 0?void 0:_this2$props$theme$ma10.objects3d)||[]).forEach(function(entry){importGltf(MiscUtils.resolveAssetsPath(entry.url),entry.name,_this2.state.sceneContext)});_this2.setState(function(state){return{sceneContext:_objectSpread(_objectSpread({},state.sceneContext),{},{scene:_this2.instance,map:_this2.map,mapCrs:projection,dtmUrl:demUrl,dtmCrs:demCrs,baseLayers:baseLayers,colorLayers:colorLayers,sceneObjects:sceneObjects}),sceneId:uuidv4()}});// Inspector
|
|
28
28
|
if(["1","true"].includes((UrlParams.getParam("inspector")||"").toLowerCase())){var inspectorContainer=document.createElement("div");inspectorContainer.className="map3d-inspector";_this2.container.appendChild(inspectorContainer);_this2.inspector=new Inspector(inspectorContainer,_this2.instance)}_this2.instance.addEventListener("update-start",_this2.instanceOnUpdateStart);_this2.instance.addEventListener("update-end",_this2.instanceOnUpdateEnd);_this2.instance.addEventListener("before-entity-update",_this2.instanceOnBeforeEntityUpdate);_this2.instance.addEventListener("after-entity-update",_this2.instanceOnAfterEntityUpdate)});_defineProperty(_this2,"instanceOnUpdateStart",function(){var camera=_this2.instance.view.camera;var quality=_this2.state.sceneContext.settings.sceneQuality;var isFirstPerson=_this2.state.sceneContext.scene.view.controls.isFirstPerson;var maxDistance=isFirstPerson?200+20*quality:500+quality*quality;// Hide scene objects according to scene quality
|
|
29
29
|
Object.entries(_this2.state.sceneContext.sceneObjects).forEach(function(_ref12){var _ref13=_slicedToArray(_ref12,2),objId=_ref13[0],options=_ref13[1];var object=_this2.objectMap[objId];if(options.layertree&&object.isObject3D&&object.visible){object.children.forEach(function(child){if(child.geometry){if(!child.geometry.boundingBox){child.geometry.computeBoundingBox()}var localCenter=child.geometry.boundingBox.getCenter(new Vector3);var worldCenter=localCenter.applyMatrix4(child.matrixWorld);var distance=camera.position.distanceTo(worldCenter);child.userData.__wasVisible=child.visible;if(distance>maxDistance){child.visible=false}}})}})});_defineProperty(_this2,"instanceOnUpdateEnd",function(){Object.entries(_this2.state.sceneContext.sceneObjects).forEach(function(_ref14){var _ref15=_slicedToArray(_ref14,2),objId=_ref15[0],options=_ref15[1];var object=_this2.objectMap[objId];if(options.layertree&&object.isObject3D){object.children.forEach(function(child){child.visible=child.userData.__wasVisible;delete child.userData.__wasVisible})}})});_defineProperty(_this2,"instanceOnBeforeEntityUpdate",function(_ref16){var entity=_ref16.entity;if(entity!==_this2.map){_this2.instance.view.camera.userData.__previousFar=_this2.instance.view.camera.far;var quality=_this2.state.sceneContext.settings.sceneQuality;var isFirstPerson=_this2.state.sceneContext.scene.view.controls.isFirstPerson;_this2.instance.view.camera.far=isFirstPerson?200+20*quality:500+quality*quality;_this2.instance.view.camera.updateProjectionMatrix()}});_defineProperty(_this2,"instanceOnAfterEntityUpdate",function(_ref17){var entity=_ref17.entity;if(entity!==_this2.map){_this2.instance.view.camera.far=_this2.instance.view.camera.userData.__previousFar;delete _this2.instance.view.camera.userData.__previousFar;_this2.instance.view.camera.updateProjectionMatrix()}});_defineProperty(_this2,"loadTilesetStyle",function(objectId,options){var _options$styles;var url=(_options$styles=options.styles)===null||_options$styles===void 0?void 0:_options$styles[options.style];if(_this2.tilesetStyles[url]){_this2.updateSceneObject(objectId,{tilesetStyle:_this2.tilesetStyles[url]})}else if(url){var fullUrl=MiscUtils.resolveAssetsPath(url);axios.get(fullUrl).then(function(response){_this2.tilesetStyles[url]=response.data;_this2.updateSceneObject(objectId,{tilesetStyle:_this2.tilesetStyles[url]})})["catch"](function(){_this2.tilesetStyles[url]={};_this2.updateSceneObject(objectId,{tilesetStyle:_this2.tilesetStyles[url]})})}else{_this2.tilesetStyles[url]=null;_this2.updateSceneObject(objectId,{tilesetStyle:_this2.tilesetStyles[url]})}});_defineProperty(_this2,"disposeInstance",function(){_this2.instance.removeEventListener("update-start",_this2.instanceOnUpdateStart);_this2.instance.removeEventListener("update-end",_this2.instanceOnUpdateEnd);_this2.instance.removeEventListener("before-entity-update",_this2.instanceOnBeforeEntityUpdate);_this2.instance.removeEventListener("after-entity-update",_this2.instanceOnAfterEntityUpdate);if(_this2.inspector){_this2.inspector.detach()}_this2.map.dispose({disposeLayers:true});Object.values(_this2.objectMap).forEach(function(object){_this2.instance.remove(object)});_this2.instance.dispose();_this2.inspector=null;_this2.map=null;_this2.objectMap={};_this2.sceneObjectGroup=null;_this2.instance=null;_this2.setState(function(state){return{sceneContext:_objectSpread(_objectSpread({},state.sceneContext),Map3D.defaultSceneState)}});_this2.props.setCurrentTask(null)});_defineProperty(_this2,"onUnload",function(key){// Ensure scene has not already been disposed
|
|
30
30
|
if(_this2.state.sceneId===key){_this2.disposeInstance()}});_defineProperty(_this2,"setupControls",function(instance){_this2.setState(function(state){return{sceneContext:_objectSpread(_objectSpread({},state.sceneContext),{},{setViewToExtent:instance===null||instance===void 0?void 0:instance.setViewToExtent,restoreView:instance===null||instance===void 0?void 0:instance.restoreView})}},_this2.props.onMapInitialized)});_defineProperty(_this2,"getTerrainHeightFromDTM",function(scenePos){var returnArray=true;if(!Array.isArray(scenePos[0])){returnArray=false;scenePos=[scenePos]}var dtmPos=scenePos.map(function(p){return CoordinatesUtils.reproject(p,_this2.state.sceneContext.mapCrs,_this2.state.sceneContext.dtmCrs)});var dtmExt=[Infinity,Infinity,-Infinity,-Infinity];dtmPos.forEach(function(p){dtmExt[0]=Math.min(dtmExt[0],p[0]);dtmExt[1]=Math.min(dtmExt[1],p[1]);dtmExt[2]=Math.max(dtmExt[2],p[0]);dtmExt[3]=Math.max(dtmExt[3],p[1])});return new Promise(function(resolve){if(!_this2.state.sceneContext.dtmUrl){resolve(returnArray?scenePos.map(function(x){return 0}):0);return}fromUrl(_this2.state.sceneContext.dtmUrl).then(function(tiff){tiff.getImage().then(function(image){var _image$fileDirectory=image.fileDirectory,ModelTiepoint=_image$fileDirectory.ModelTiepoint,ModelPixelScale=_image$fileDirectory.ModelPixelScale;// Extract scale and tiepoint values
|
package/package.json
CHANGED
package/plugins/FeatureSearch.js
CHANGED
|
@@ -4,8 +4,8 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
|
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under the BSD-style license found in the
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/import React from"react";import{connect}from"react-redux";import axios from"axios";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{v4 as uuidv4}from"uuid";import IdentifyViewer from"../components/IdentifyViewer";import SideBar from"../components/SideBar";import Spinner from"../components/widgets/Spinner";import IdentifyUtils from"../utils/IdentifyUtils";import LocaleUtils from"../utils/LocaleUtils";import"./style/FeatureSearch.css";/**
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import axios from"axios";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{v4 as uuidv4}from"uuid";import Icon from"../components/Icon";import IdentifyViewer from"../components/IdentifyViewer";import SideBar from"../components/SideBar";import InputContainer from"../components/widgets/InputContainer";import Spinner from"../components/widgets/Spinner";import IdentifyUtils from"../utils/IdentifyUtils";import LocaleUtils from"../utils/LocaleUtils";import"./style/FeatureSearch.css";/**
|
|
8
8
|
* Displays a dialog with a search form for configured QGIS feature searches with one or more input fields.
|
|
9
9
|
*
|
|
10
10
|
* See [Configuring the QGIS feature search](../../topics/Search/#configuring-the-qgis-feature-search).
|
|
11
|
-
*/var FeatureSearch=/*#__PURE__*/function(_React$Component){function FeatureSearch(){var _this;_classCallCheck(this,FeatureSearch);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,FeatureSearch,[].concat(args));_defineProperty(_this,"state",{busy:false,searchProviders:{},providerGroups:{},selectedProvider:"",formValues:{},providerSelectOptions:{},searchResults:null});_defineProperty(_this,"onHide",function(){_this.setState({searchResults:null})});_defineProperty(_this,"renderBody",function(){return/*#__PURE__*/React.createElement("div",{className:"feature-search-body"},/*#__PURE__*/React.createElement("div",{className:"feature-search-selection"},/*#__PURE__*/React.createElement("select",{onChange:_this.selectProvider,value:_this.state.selectedProvider},/*#__PURE__*/React.createElement("option",{disabled:true,value:""},LocaleUtils.tr("featuresearch.select")),Object.entries(_this.state.providerGroups).map(function(_ref){var _ref2=_slicedToArray(_ref,2),group=_ref2[0],entries=_ref2[1];return[group!==""?/*#__PURE__*/React.createElement("option",{disabled:true,key:group,value:group},group):null,entries.map(function(providerId){return/*#__PURE__*/React.createElement("option",{key:providerId,value:providerId},_this.state.searchProviders[providerId].params.title)})]}))),_this.renderSearchForm(),_this.renderSearchResults())});_defineProperty(_this,"renderSearchForm",function(){var provider=_this.state.searchProviders[_this.state.selectedProvider];if(!provider){return null}return/*#__PURE__*/React.createElement("form",{className:"feature-search-form",disabled:_this.state.busy,onChange:function onChange(){return _this.setState({searchResults:null})},onSubmit:_this.search},/*#__PURE__*/React.createElement("fieldset",{disabled:_this.state.busy},provider.params.description?/*#__PURE__*/React.createElement("div",{className:"feature-search-form-descr"},provider.params.description):null,/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,Object.entries(provider.params.fields).map(function(_ref3){var _value$label;var _ref4=_slicedToArray(_ref3,2),key=_ref4[0],value=_ref4[1];return/*#__PURE__*/React.createElement("tr",{key:key},/*#__PURE__*/React.createElement("td",null,(_value$label=value.label)!==null&&_value$label!==void 0?_value$label:LocaleUtils.tr(value.labelmsgid),":"),/*#__PURE__*/React.createElement("td",null,_this.renderField(key,value)))})))),/*#__PURE__*/React.createElement("div",{className:"feature-search-bar"},/*#__PURE__*/React.createElement("button",{className:"button",disabled:_this.state.busy,type:"submit"},_this.state.busy?/*#__PURE__*/React.createElement(Spinner,null):null,LocaleUtils.tr("search.search"))))});_defineProperty(_this,"renderField",function(fieldname,fieldcfg){var onChange=function onChange(ev){return _this.setState(function(state){return{formValues:_objectSpread(_objectSpread({},state.formValues),{},_defineProperty({},fieldname,ev.target.value))}})};if(fieldcfg.type==="select"){var _this$state$providerS,_this$state$providerS2;var options=(_this$state$providerS=(_this$state$providerS2=_this.state.providerSelectOptions[fieldname])===null||_this$state$providerS2===void 0?void 0:_this$state$providerS2.options)!==null&&_this$state$providerS!==void 0?_this$state$providerS:fieldcfg.options;return/*#__PURE__*/React.createElement("select",{name:fieldname,onChange:onChange},options.map(function(entry){var _entry$value,_entry$value2,_entry$label;return/*#__PURE__*/React.createElement("option",{key:(_entry$value=entry.value)!==null&&_entry$value!==void 0?_entry$value:entry,value:(_entry$value2=entry.value)!==null&&_entry$value2!==void 0?_entry$value2:entry},(_entry$label=entry.label)!==null&&_entry$label!==void 0?_entry$label:entry.labelmsgid?LocaleUtils.tr(entry.labelmsgid):entry)}))}else{return/*#__PURE__*/React.createElement("input",_extends({name:fieldname,onChange:onChange,type:fieldcfg.type||"text"},fieldcfg.options))}});_defineProperty(_this,"renderSearchResults",function(){if(!_this.state.searchResults){return null}var provider=_this.state.searchProviders[_this.state.selectedProvider];return/*#__PURE__*/React.createElement("div",{className:"feature-search-results"},isEmpty(_this.state.searchResults)?/*#__PURE__*/React.createElement("div",{className:"feature-search-noresults"},LocaleUtils.tr("featuresearch.noresults")):/*#__PURE__*/React.createElement(IdentifyViewer,{collapsible:true,displayResultTree:false,enableExport:true,identifyResults:_this.state.searchResults,showLayerTitles:!provider.params.resultTitle}))});_defineProperty(_this,"selectProvider",function(ev){_this.setState({selectedProvider:ev.target.value,searchResults:null,providerSelectOptions:{},formValues:{}})});_defineProperty(_this,"search",function(ev){ev.preventDefault();var provider=_this.state.searchProviders[_this.state.selectedProvider];if(!provider){return}var form=ev.target;var filter=_objectSpread({},provider.params.expression);var values={};Object.keys(provider.params.fields).forEach(function(fieldname){values[fieldname]=form.elements[fieldname].value});var params={SERVICE:"WMS",VERSION:_this.props.theme.version,REQUEST:"GetFeatureInfo",CRS:_this.props.theme.mapCrs,WIDTH:100,HEIGHT:100,LAYERS:[],FILTER:[],WITH_GEOMETRY:true,WITH_MAPTIP:false,feature_count:provider.params.featureCount||100,info_format:"text/xml"};Object.keys(filter).forEach(function(layer){Object.entries(values).forEach(function(_ref5){var _ref6=_slicedToArray(_ref5,2),key=_ref6[0],value=_ref6[1];filter[layer]=filter[layer].replaceAll("$".concat(key,"$"),value.replace("'","\\'"))});params.LAYERS.push(layer);params.FILTER.push(layer+":"+filter[layer])});params.QUERY_LAYERS=params.LAYERS=params.LAYERS.join(",");params.FILTER=params.FILTER.join(";");_this.setState({busy:true,searchResults:null});axios.get(_this.props.theme.featureInfoUrl,{params:params}).then(function(response){var results=IdentifyUtils.parseResponse(response.data,_this.props.theme,"text/xml",null,_this.props.map.projection);if(provider.params.resultTitle){Object.entries(results).forEach(function(_ref7){var _ref8=_slicedToArray(_ref7,2),layername=_ref8[0],features=_ref8[1];features.forEach(function(feature){var formatValues=_objectSpread(_objectSpread({},feature.properties),{},{id:feature.id,layername:layername});feature.displayname=provider.params.resultTitle.replace(/{([^}]+)}/g,function(match){return formatValues[match.slice(1,-1)]})})})}_this.setState({busy:false,searchResults:results})})["catch"](function(){_this.setState({busy:false,searchResults:{}})})});_defineProperty(_this,"reloadSelectOptions",function(){var _this$state$searchPro,_this$state$searchPro2;Object.entries((_this$state$searchPro=(_this$state$searchPro2=_this.state.searchProviders[_this.state.selectedProvider])===null||_this$state$searchPro2===void 0||(_this$state$searchPro2=_this$state$searchPro2.params)===null||_this$state$searchPro2===void 0?void 0:_this$state$searchPro2.fields)!==null&&_this$state$searchPro!==void 0?_this$state$searchPro:{}).forEach(function(_ref9){var _ref10=_slicedToArray(_ref9,2),name=_ref10[0],fieldcfg=_ref10[1];if(fieldcfg.type==="select"){if(fieldcfg.options_query){var _this$state$providerS3;var url=fieldcfg.options_query;Object.entries(_this.state.formValues).forEach(function(_ref11){var _ref12=_slicedToArray(_ref11,2),key=_ref12[0],value=_ref12[1];url=url.replace("$".concat(key,"$"),value)});if(((_this$state$providerS3=_this.state.providerSelectOptions[name])===null||_this$state$providerS3===void 0?void 0:_this$state$providerS3.source)!==url){axios.get(url).then(function(response){var options=[];if(response.data.type==="FeatureCollection"){options=Object.entries(response.data.features.reduce(function(res,feature){var value=fieldcfg.value_field==="id"?feature.id:feature.properties[fieldcfg.value_field];var label=fieldcfg.label_field==="id"?feature.id:feature.properties[fieldcfg.label_field];return _objectSpread(_objectSpread({},res),{},_defineProperty({},value,label))},{})).map(function(entry){return{value:entry[0],label:entry[1]}})}else if(Array.isArray(response.data)){options=response.data.map(function(entry){return{value:entry.key,label:entry.value}})}_this.setState(function(state){return{providerSelectOptions:_objectSpread(_objectSpread({},state.providerSelectOptions),{},_defineProperty({},name,{source:url,options:options}))}})})["catch"](function(){/* eslint-disable-next-line */console.warn("Failed to query options for field ".concat(name));_this.setState(function(state){return{providerSelectOptions:_objectSpread(_objectSpread({},state.providerSelectOptions),{},_defineProperty({},name,{source:url,options:[]}))}})})}}else if(fieldcfg.options&&!_this.state.providerSelectOptions[name]){_this.setState(function(state){return{providerSelectOptions:_objectSpread(_objectSpread({},state.providerSelectOptions),{},_defineProperty({},name,{source:"static",options:fieldcfg.options}))}})}}})});return _this}_inherits(FeatureSearch,_React$Component);return _createClass(FeatureSearch,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.props.theme!==prevProps.theme){var _this$props$theme;var defaultProvider="";var providerGroups={};var searchProviders=(((_this$props$theme=this.props.theme)===null||_this$props$theme===void 0?void 0:_this$props$theme.searchProviders)||[]).reduce(function(res,entry){if(entry.provider==="qgis"&&entry.params){var providerDef=_objectSpread({},entry);if(!providerDef.params.fields){providerDef.params=_objectSpread({},providerDef.params);providerDef.params.fields={TEXT:{label:LocaleUtils.tr("featuresearch.query"),type:"text"}}}if(providerDef.params.titlemsgid){providerDef.params.title=LocaleUtils.tr(providerDef.params.titlemsgid)}var providerId=uuidv4();res[providerId]=providerDef;if(providerDef.params["default"]){defaultProvider=providerId}var group=providerDef.params.group||"";providerGroups[group]=[].concat(_toConsumableArray(providerGroups[group]||[]),[providerId])}return res},{});var sortedProviderGroups=Object.keys(providerGroups).sort().reduce(function(res,group){res[group]=providerGroups[group].sort(function(a,b){return searchProviders[a].params.title.localeCompare(searchProviders[b].params.title)});return res},{});this.setState({searchProviders:searchProviders,selectedProvider:defaultProvider,providerGroups:sortedProviderGroups})}if(this.state.selectedProvider!==prevState.selectedProvider){this.setState(function(state){var _state$searchProvider;return{formValues:Object.entries(((_state$searchProvider=state.searchProviders[state.selectedProvider])===null||_state$searchProvider===void 0||(_state$searchProvider=_state$searchProvider.params)===null||_state$searchProvider===void 0?void 0:_state$searchProvider.fields)||[]).reduce(function(res,_ref13){var _ref15,_cfg$options$0$value,_cfg$options,_cfg$options2;var _ref14=_slicedToArray(_ref13,2),field=_ref14[0],cfg=_ref14[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},field,(_ref15=(_cfg$options$0$value=(_cfg$options=cfg.options)===null||_cfg$options===void 0||(_cfg$options=_cfg$options[0])===null||_cfg$options===void 0?void 0:_cfg$options.value)!==null&&_cfg$options$0$value!==void 0?_cfg$options$0$value:(_cfg$options2=cfg.options)===null||_cfg$options2===void 0?void 0:_cfg$options2[0])!==null&&_ref15!==void 0?_ref15:""))},{})}})}else if(this.state.formValues!==prevState.formValues){this.reloadSelectOptions()}}},{key:"render",value:function render(){var _this2=this;return/*#__PURE__*/React.createElement(SideBar,{icon:"search",id:"FeatureSearch",onHide:this.onHide,side:this.props.side,title:LocaleUtils.tr("featuresearch.title"),width:"20em"},function(){return{body:_this2.renderBody()}})}}])}(React.Component);_defineProperty(FeatureSearch,"propTypes",{map:PropTypes.object,/** The side of the application on which to display the sidebar. */side:PropTypes.string,theme:PropTypes.object});_defineProperty(FeatureSearch,"defaultProps",{side:"right"});export default connect(function(state){return{map:state.map,theme:state.theme.current}},{})(FeatureSearch);
|
|
11
|
+
*/var FeatureSearch=/*#__PURE__*/function(_React$Component){function FeatureSearch(){var _this;_classCallCheck(this,FeatureSearch);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,FeatureSearch,[].concat(args));_defineProperty(_this,"state",{busy:false,searchProviders:{},providerGroups:{},selectedProvider:"",formValues:{},providerSelectOptions:{},searchResults:null});_defineProperty(_this,"onHide",function(){_this.setState({searchResults:null})});_defineProperty(_this,"renderBody",function(){return/*#__PURE__*/React.createElement("div",{className:"feature-search-body"},/*#__PURE__*/React.createElement("div",{className:"feature-search-selection"},/*#__PURE__*/React.createElement("select",{onChange:_this.selectProvider,value:_this.state.selectedProvider},/*#__PURE__*/React.createElement("option",{disabled:true,value:""},LocaleUtils.tr("featuresearch.select")),Object.entries(_this.state.providerGroups).map(function(_ref){var _ref2=_slicedToArray(_ref,2),group=_ref2[0],entries=_ref2[1];return[group!==""?/*#__PURE__*/React.createElement("option",{disabled:true,key:group,value:group},group):null,entries.map(function(providerId){return/*#__PURE__*/React.createElement("option",{key:providerId,value:providerId},_this.state.searchProviders[providerId].params.title)})]}))),_this.renderSearchForm(),_this.renderSearchResults())});_defineProperty(_this,"renderSearchForm",function(){var provider=_this.state.searchProviders[_this.state.selectedProvider];if(!provider){return null}var fields=Object.entries(provider.params.fields).map(function(_ref3,idx){var _value$order;var _ref4=_slicedToArray(_ref3,2),key=_ref4[0],value=_ref4[1];return _objectSpread(_objectSpread({key:key},value),{},{order:(_value$order=value.order)!==null&&_value$order!==void 0?_value$order:idx})}).sort(function(a,b){return a.order-b.order});return/*#__PURE__*/React.createElement("form",{className:"feature-search-form",disabled:_this.state.busy,onChange:function onChange(){return _this.setState({searchResults:null})},onSubmit:_this.search},/*#__PURE__*/React.createElement("fieldset",{disabled:_this.state.busy},provider.params.description?/*#__PURE__*/React.createElement("div",{className:"feature-search-form-descr"},provider.params.description):null,/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,fields.map(function(field){var _field$label;return/*#__PURE__*/React.createElement("tr",{key:field.key},/*#__PURE__*/React.createElement("td",null,(_field$label=field.label)!==null&&_field$label!==void 0?_field$label:LocaleUtils.tr(field.labelmsgid),":"),/*#__PURE__*/React.createElement("td",null,_this.renderField(field.key,field)))})))),/*#__PURE__*/React.createElement("div",{className:"feature-search-bar"},/*#__PURE__*/React.createElement("button",{className:"button",disabled:_this.state.busy,type:"submit"},_this.state.busy?/*#__PURE__*/React.createElement(Spinner,null):null,LocaleUtils.tr("search.search"))))});_defineProperty(_this,"renderField",function(fieldname,fieldcfg){var onChange=function onChange(ev){return _this.setState(function(state){return{formValues:_objectSpread(_objectSpread({},state.formValues),{},_defineProperty({},fieldname,ev.target.value))}})};if(fieldcfg.type==="select"){var _ref5,_this$state$providerS,_this$state$providerS2;var options=(_ref5=(_this$state$providerS=(_this$state$providerS2=_this.state.providerSelectOptions[fieldname])===null||_this$state$providerS2===void 0?void 0:_this$state$providerS2.options)!==null&&_this$state$providerS!==void 0?_this$state$providerS:fieldcfg.options)!==null&&_ref5!==void 0?_ref5:[];return/*#__PURE__*/React.createElement(InputContainer,null,/*#__PURE__*/React.createElement("select",{defaultValue:"",name:fieldname,onChange:onChange,role:"input"},/*#__PURE__*/React.createElement("option",{disabled:true,value:""},LocaleUtils.tr("featuresearch.select")),options.map(function(entry){var _entry$value,_entry$value2,_entry$label;return/*#__PURE__*/React.createElement("option",{key:(_entry$value=entry.value)!==null&&_entry$value!==void 0?_entry$value:entry,value:(_entry$value2=entry.value)!==null&&_entry$value2!==void 0?_entry$value2:entry},(_entry$label=entry.label)!==null&&_entry$label!==void 0?_entry$label:entry.labelmsgid?LocaleUtils.tr(entry.labelmsgid):entry)})),/*#__PURE__*/React.createElement(Icon,{icon:"clear",onClick:function onClick(ev){return _this.clearField(ev,fieldname)},role:"suffix"}))}else{return/*#__PURE__*/React.createElement("input",_extends({name:fieldname,onChange:onChange,type:fieldcfg.type||"text"},fieldcfg.options))}});_defineProperty(_this,"renderSearchResults",function(){if(!_this.state.searchResults){return null}var provider=_this.state.searchProviders[_this.state.selectedProvider];return/*#__PURE__*/React.createElement("div",{className:"feature-search-results"},isEmpty(_this.state.searchResults)?/*#__PURE__*/React.createElement("div",{className:"feature-search-noresults"},LocaleUtils.tr("featuresearch.noresults")):/*#__PURE__*/React.createElement(IdentifyViewer,{collapsible:true,displayResultTree:false,enableExport:true,identifyResults:_this.state.searchResults,showLayerTitles:!provider.params.resultTitle}))});_defineProperty(_this,"selectProvider",function(ev){_this.setState({selectedProvider:ev.target.value,searchResults:null,providerSelectOptions:{},formValues:{}})});_defineProperty(_this,"search",function(ev){ev.preventDefault();var provider=_this.state.searchProviders[_this.state.selectedProvider];if(!provider){return}var form=ev.target;var filter=_objectSpread({},provider.params.expression);var values={};Object.keys(provider.params.fields).forEach(function(fieldname){values[fieldname]=form.elements[fieldname].value});var params={SERVICE:"WMS",VERSION:_this.props.theme.version,REQUEST:"GetFeatureInfo",CRS:_this.props.theme.mapCrs,WIDTH:100,HEIGHT:100,LAYERS:[],FILTER:[],WITH_GEOMETRY:true,WITH_MAPTIP:false,feature_count:provider.params.featureCount||100,info_format:"text/xml"};Object.keys(filter).forEach(function(layer){Object.entries(values).forEach(function(_ref6){var _ref7=_slicedToArray(_ref6,2),key=_ref7[0],value=_ref7[1];filter[layer]=filter[layer].replaceAll("$".concat(key,"$"),value.replace("'","\\'"))});params.LAYERS.push(layer);params.FILTER.push(layer+":"+filter[layer])});params.QUERY_LAYERS=params.LAYERS=params.LAYERS.join(",");params.FILTER=params.FILTER.join(";");_this.setState({busy:true,searchResults:null});axios.get(_this.props.theme.featureInfoUrl,{params:params}).then(function(response){var results=IdentifyUtils.parseResponse(response.data,_this.props.theme,"text/xml",null,_this.props.map.projection);if(provider.params.resultTitle){Object.entries(results).forEach(function(_ref8){var _ref9=_slicedToArray(_ref8,2),layername=_ref9[0],features=_ref9[1];features.forEach(function(feature){var formatValues=_objectSpread(_objectSpread({},feature.properties),{},{id:feature.id,layername:layername});feature.displayname=provider.params.resultTitle.replace(/{([^}]+)}/g,function(match){return formatValues[match.slice(1,-1)]})})})}_this.setState({busy:false,searchResults:results})})["catch"](function(){_this.setState({busy:false,searchResults:{}})})});_defineProperty(_this,"clearField",function(ev,fieldname){ev.target.previousElementSibling.value="";_this.setState(function(state){return{formValues:_objectSpread(_objectSpread({},state.formValues),{},_defineProperty({},fieldname,ev.target.value))}})});_defineProperty(_this,"reloadSelectOptions",function(){var _this$state$searchPro,_this$state$searchPro2;Object.entries((_this$state$searchPro=(_this$state$searchPro2=_this.state.searchProviders[_this.state.selectedProvider])===null||_this$state$searchPro2===void 0||(_this$state$searchPro2=_this$state$searchPro2.params)===null||_this$state$searchPro2===void 0?void 0:_this$state$searchPro2.fields)!==null&&_this$state$searchPro!==void 0?_this$state$searchPro:{}).forEach(function(_ref10){var _ref11=_slicedToArray(_ref10,2),name=_ref11[0],fieldcfg=_ref11[1];if(fieldcfg.type==="select"){if(fieldcfg.options_query){var _this$state$providerS3;var url=fieldcfg.options_query;Object.entries(_this.state.formValues).forEach(function(_ref12){var _ref13=_slicedToArray(_ref12,2),key=_ref13[0],value=_ref13[1];url=url.replace("$".concat(key,"$"),value)});if(((_this$state$providerS3=_this.state.providerSelectOptions[name])===null||_this$state$providerS3===void 0?void 0:_this$state$providerS3.source)!==url){axios.get(url).then(function(response){var options=[];if(response.data.type==="FeatureCollection"){options=Object.entries(response.data.features.reduce(function(res,feature){var value=fieldcfg.value_field==="id"?feature.id:feature.properties[fieldcfg.value_field];var label=fieldcfg.label_field==="id"?feature.id:feature.properties[fieldcfg.label_field];return _objectSpread(_objectSpread({},res),{},_defineProperty({},value,label))},{})).map(function(entry){return{value:entry[0],label:entry[1]}})}else if(Array.isArray(response.data)){options=response.data.map(function(entry){return{value:entry.key,label:entry.value}})}_this.setState(function(state){return{providerSelectOptions:_objectSpread(_objectSpread({},state.providerSelectOptions),{},_defineProperty({},name,{source:url,options:options}))}})})["catch"](function(){/* eslint-disable-next-line */console.warn("Failed to query options for field ".concat(name));_this.setState(function(state){return{providerSelectOptions:_objectSpread(_objectSpread({},state.providerSelectOptions),{},_defineProperty({},name,{source:url,options:[]}))}})})}}else if(fieldcfg.options&&!_this.state.providerSelectOptions[name]){_this.setState(function(state){return{providerSelectOptions:_objectSpread(_objectSpread({},state.providerSelectOptions),{},_defineProperty({},name,{source:"static",options:fieldcfg.options}))}})}}})});return _this}_inherits(FeatureSearch,_React$Component);return _createClass(FeatureSearch,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.props.theme!==prevProps.theme){var _this$props$theme;var defaultProvider="";var providerGroups={};var searchProviders=(((_this$props$theme=this.props.theme)===null||_this$props$theme===void 0?void 0:_this$props$theme.searchProviders)||[]).reduce(function(res,entry){if(entry.provider==="qgis"&&entry.params){var providerDef=_objectSpread({},entry);if(!providerDef.params.fields){providerDef.params=_objectSpread({},providerDef.params);providerDef.params.fields={TEXT:{label:LocaleUtils.tr("featuresearch.query"),type:"text"}}}if(providerDef.params.titlemsgid){providerDef.params.title=LocaleUtils.tr(providerDef.params.titlemsgid)}var providerId=uuidv4();res[providerId]=providerDef;if(providerDef.params["default"]){defaultProvider=providerId}var group=providerDef.params.group||"";providerGroups[group]=[].concat(_toConsumableArray(providerGroups[group]||[]),[providerId])}return res},{});var sortedProviderGroups=Object.keys(providerGroups).sort().reduce(function(res,group){res[group]=providerGroups[group].sort(function(a,b){return searchProviders[a].params.title.localeCompare(searchProviders[b].params.title)});return res},{});this.setState({searchProviders:searchProviders,selectedProvider:defaultProvider,providerGroups:sortedProviderGroups})}if(this.state.selectedProvider!==prevState.selectedProvider){this.setState(function(state){var _state$searchProvider;return{formValues:Object.entries(((_state$searchProvider=state.searchProviders[state.selectedProvider])===null||_state$searchProvider===void 0||(_state$searchProvider=_state$searchProvider.params)===null||_state$searchProvider===void 0?void 0:_state$searchProvider.fields)||[]).reduce(function(res,_ref14){var _ref15=_slicedToArray(_ref14,2),field=_ref15[0],cfg=_ref15[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},field,""))},{})}})}else if(this.state.formValues!==prevState.formValues){this.reloadSelectOptions()}}},{key:"render",value:function render(){var _this2=this;return/*#__PURE__*/React.createElement(SideBar,{icon:"search",id:"FeatureSearch",onHide:this.onHide,side:this.props.side,title:LocaleUtils.tr("featuresearch.title"),width:"20em"},function(){return{body:_this2.renderBody()}})}}])}(React.Component);_defineProperty(FeatureSearch,"propTypes",{map:PropTypes.object,/** The side of the application on which to display the sidebar. */side:PropTypes.string,theme:PropTypes.object});_defineProperty(FeatureSearch,"defaultProps",{side:"right"});export default connect(function(state){return{map:state.map,theme:state.theme.current}},{})(FeatureSearch);
|
package/plugins/Identify.js
CHANGED
|
@@ -15,4 +15,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
|
|
|
15
15
|
* for customized queries and templates for the result presentation.
|
|
16
16
|
*/var Identify=/*#__PURE__*/function(_React$Component){function Identify(){var _this;_classCallCheck(this,Identify);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,Identify,[].concat(args));_defineProperty(_this,"state",{mode:"Point",identifyResults:null,pendingRequests:0,radius:0,radiusUnits:_this.props.initialRadiusUnits,exitTaskOnResultsClose:null,filterGeom:null,filterGeomModifiers:{}});_defineProperty(_this,"identifyPoint",function(clickPoint){if(clickPoint){_this.setState(function(state){// Remove any search selection layer to avoid confusion
|
|
17
17
|
_this.props.removeLayer("searchselection");var pendingRequests=0;var identifyResults=_this.props.click.modifiers.ctrl!==true?{}:state.identifyResults;var queryableLayers=[];queryableLayers=IdentifyUtils.getQueryLayers(_this.props.layers,_this.props.map);queryableLayers.forEach(function(l){var request=IdentifyUtils.buildRequest(l,l.queryLayers.join(","),clickPoint,_this.props.map,_this.props.params);++pendingRequests;IdentifyUtils.sendRequest(request,function(response){_this.setState(function(state2){return{pendingRequests:state2.pendingRequests-1}});if(response){_this.parseResult(response,l,request.params.info_format,clickPoint)}})});if(!isEmpty(_this.props.click.features)){_this.props.click.features.forEach(function(feature){var layer=_this.props.layers.find(function(l){return l.id===feature.layerId});if((layer===null||layer===void 0?void 0:layer.role)===LayerRole.USERLAYER){var _layer$features$find,_layer$features,_layer$features$find2,_layer$projection;var queryFeature=_objectSpread({},(_layer$features$find=(_layer$features=layer.features)===null||_layer$features===void 0||(_layer$features$find2=_layer$features.find)===null||_layer$features$find2===void 0?void 0:_layer$features$find2.call(_layer$features,function(f){return f.id===feature.id}))!==null&&_layer$features$find!==void 0?_layer$features$find:feature);if(!(queryFeature!==null&&queryFeature!==void 0&&queryFeature.properties)){return}if(!identifyResults[layer.name]){identifyResults[layer.name]=[]}queryFeature.crs=(_layer$projection=layer.projection)!==null&&_layer$projection!==void 0?_layer$projection:_this.props.map.projection;queryFeature.displayname=queryFeature.properties.name||queryFeature.properties.Name||queryFeature.properties.NAME||queryFeature.properties.label||queryFeature.properties.id||queryFeature.id;queryFeature.layertitle=layer.title||layer.name||layer.id;queryFeature.properties=Object.entries(queryFeature.properties).reduce(function(res,_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],val=_ref2[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,_typeof(val)==="object"?JSON.stringify(val):val))},{});identifyResults[layer.name].push(queryFeature)}})}_this.props.addMarker("identify",clickPoint,"",_this.props.map.projection);return{identifyResults:identifyResults,pendingRequests:pendingRequests}})}});_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,"identifyRegion",function(){var queryableLayers=IdentifyUtils.getQueryLayers(_this.props.layers,_this.props.map);var poly=_this.state.filterGeom.coordinates[0];if(poly.length<3||isEmpty(queryableLayers)){return}var identifyResults=_this.state.filterGeomModifiers.ctrl!==true?{}:_this.state.identifyResults;var center=[0,0];poly.forEach(function(point){center[0]+=point[0];center[1]+=point[1]});center[0]/=poly.length;center[1]/=poly.length;var filter=VectorLayerUtils.geoJSONGeomToWkt(_this.state.filterGeom);var pendingRequests=0;var params=_objectSpread({},_this.props.params);if(_this.props.params.region_feature_count){params.feature_count=_this.props.params.region_feature_count;delete params.region_feature_count}queryableLayers.forEach(function(layer){var request=IdentifyUtils.buildFilterRequest(layer,layer.queryLayers.join(","),filter,_this.props.map,params);++pendingRequests;IdentifyUtils.sendRequest(request,function(response){_this.setState(function(state){return{pendingRequests:state.pendingRequests-1}});if(response){_this.parseResult(response,layer,request.params.info_format,center)}});_this.setState({identifyResults:identifyResults,pendingRequests:pendingRequests})})});_defineProperty(_this,"identifyRadius",function(){var clickPoint=_this.state.filterGeom.center;var queryableLayers=IdentifyUtils.getQueryLayers(_this.props.layers,_this.props.map);if(isEmpty(queryableLayers)){return}var identifyResults=_this.state.filterGeomModifiers.ctrl!==true?{}:_this.state.identifyResults;var filter=VectorLayerUtils.geoJSONGeomToWkt(_this.state.filterGeom);var pendingRequests=0;var params=_objectSpread({},_this.props.params);if(_this.props.params.radius_feature_count){params.feature_count=_this.props.params.radius_feature_count;delete params.radius_feature_count}queryableLayers.forEach(function(layer){var request=IdentifyUtils.buildFilterRequest(layer,layer.queryLayers.join(","),filter,_this.props.map,params);++pendingRequests;IdentifyUtils.sendRequest(request,function(response){_this.setState(function(state){return{pendingRequests:state.pendingRequests-1}});if(response){_this.parseResult(response,layer,request.params.info_format,clickPoint)}});_this.setState({identifyResults:identifyResults,pendingRequests:pendingRequests})});_this.props.addMarker("identify",clickPoint,"",_this.props.map.projection)});_defineProperty(_this,"changeBufferUnit",function(ev){_this.setState({radiusUnits:ev.target.value})});_defineProperty(_this,"parseResult",function(response,layer,format,clickPoint){var newResults=IdentifyUtils.parseResponse(response,layer,format,clickPoint,_this.props.map.projection,_this.props.featureInfoReturnsLayerName);// Merge with previous
|
|
18
|
-
_this.setState(function(state){var identifyResults=_objectSpread({},state.identifyResults);Object.entries(newResults).forEach(function(_ref3){var _ref4=_slicedToArray(_ref3,2),layername=_ref4[0],features=_ref4[1];var key=layer.url+"#"+layername;identifyResults[key]=features.reduce(function(result,feature){if(result.find(function(f){return f.id===feature.id})===undefined){result.push(feature)}return result},identifyResults[key]||[])});return{identifyResults:identifyResults}})});_defineProperty(_this,"onShow",function(mode,data){_this.setState({mode:mode||"Point",exitTaskOnResultsClose:data===null||data===void 0?void 0:data.exitTaskOnResultsClose});if(mode==="Point"&&data!==null&&data!==void 0&&data.pos){_this.identifyPoint(data.pos)}});_defineProperty(_this,"onToolClose",function(){_this.setState({mode:"Point",exitTaskOnResultsClose:null,filterGeom:null});if(_this.props.clearResultsOnClose){_this.clearResults()}});_defineProperty(_this,"onWindowClose",function(){_this.clearResults();if(_this.state.exitTaskOnResultsClose||_this.props.exitTaskOnResultsClose){_this.props.setCurrentTask(null)}});_defineProperty(_this,"clearResults",function(){_this.props.removeMarker("identify");_this.props.removeLayer("identifyslection");_this.props.removeLayer("identifyradiusbuffer");_this.setState({identifyResults:null,pendingRequests:0})});_defineProperty(_this,"updateRadius",function(radius,units){_this.setState(function(state){return{radius:radius,radiusUnits:units,filterGeom:_objectSpread(_objectSpread({},state.filterGeom),{},{radius:MeasureUtils.convertLength(radius,units,"m")})}})});_defineProperty(_this,"renderBody",function(){if(_this.state.mode==="Point"){return LocaleUtils.tr("infotool.clickhelpPoint")}else if(_this.state.mode==="Region"){return LocaleUtils.tr("infotool.clickhelpPolygon")}else if(_this.state.mode==="Radius"){var text=LocaleUtils.tr("infotool.clickhelpRadius");return/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("div",null,text),/*#__PURE__*/React.createElement("div",{className:"identify-radius-controls controlgroup"},/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("infotool.radius"),":\xA0"),/*#__PURE__*/React.createElement(NumberInput,{disabled:!_this.state.filterGeom,max:1000000,min:1,mobile:true,onChange:function onChange(rad){return _this.updateRadius(rad,_this.state.radiusUnits)},value:_this.state.radius}),/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.updateRadius(_this.state.radius,ev.target.value)},value:_this.state.radiusUnits},/*#__PURE__*/React.createElement("option",{value:"m"},"m"),/*#__PURE__*/React.createElement("option",{value:"ft"},"ft"),/*#__PURE__*/React.createElement("option",{value:"km"},"km"),/*#__PURE__*/React.createElement("option",{value:"mi"},"mi"))))}return null});return _this}_inherits(Identify,_React$Component);return _createClass(Identify,[{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.identifyPoint(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){if(this.state.mode==="Point"){var clickPoint=this.queryPoint(prevProps);this.identifyPoint(clickPoint)}else if(this.state.mode==="Region"){if(this.state.filterGeom&&this.state.filterGeom!==prevState.filterGeom){this.identifyRegion()}}else if(this.state.mode==="Radius"){if(this.state.filterGeom&&this.state.filterGeom!==prevState.filterGeom){this.setState(function(state){return{radius:MeasureUtils.convertLength(state.filterGeom.radius,"m",state.radiusUnits)}});this.identifyRadius()}}}}},{key:"render",value:function render(){var _this2=this;var resultWindow=null;if(this.state.pendingRequests>0||this.state.identifyResults!==null){var body=null;if(isEmpty(this.state.identifyResults)){if(this.state.pendingRequests>0){body=/*#__PURE__*/React.createElement("div",{className:"identify-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("identify.querying")))}else{body=/*#__PURE__*/React.createElement("div",{className:"identify-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("identify.noresults")))}}else{body=/*#__PURE__*/React.createElement(IdentifyViewer,{attributeCalculator:this.props.attributeCalculator,attributeTransform:this.props.attributeTransform,customExporters:this.props.customExporters,displayResultTree:this.props.displayResultTree,enableAggregatedReports:this.props.enableAggregatedReports,enableExport:this.props.enableExport,exportGeometry:this.props.exportGeometry,highlightAllResults:this.props.highlightAllResults,identifyResults:this.state.identifyResults,iframeDialogsInitiallyDocked:this.props.iframeDialogsInitiallyDocked,longAttributesDisplay:this.props.longAttributesDisplay,replaceImageUrls:this.props.replaceImageUrls,role:"body",showLayerSelector:this.props.showLayerSelector})}resultWindow=/*#__PURE__*/React.createElement(ResizeableWindow,{busyIcon:this.state.pendingRequests>0,dockable:this.props.geometry.side,icon:"info-sign",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:"IdentifyWindow",onClose:this.onWindowClose,title:LocaleUtils.tr("identify.title")},body)}return[resultWindow,/*#__PURE__*/React.createElement(TaskBar,{key:"IdentifyTaskBar",onHide:this.onToolClose,onShow:this.onShow,task:"Identify"},function(){return{body:_this2.renderBody()}}),this.state.mode==="Region"||this.state.mode==="Radius"?/*#__PURE__*/React.createElement(MapSelection,{active:true,geomType:this.state.mode==="Radius"?"Circle":"Polygon",geometry:this.state.filterGeom,geometryChanged:function geometryChanged(geom,mod){return _this2.setState({filterGeom:geom,filterGeomModifiers:mod})},key:"MapSelection",measure:this.state.mode==="Radius"}):null]}}])}(React.Component);_defineProperty(Identify,"propTypes",{addLayerFeatures:PropTypes.func,addMarker:PropTypes.func,/** Optional function for computing derived attributes. See js/IdentifyExtensions.js for details. This prop can be specified in the appConfig.js cfg section. */attributeCalculator:PropTypes.func,/** Optional function for transforming attribute values. See js/IdentifyExtensions.js for details. This prop can be specified in the appConfig.js cfg section. */attributeTransform:PropTypes.func,/** Whether to clear the identify results when exiting the identify tool. */clearResultsOnClose:PropTypes.bool,click:PropTypes.object,currentIdentifyTool:PropTypes.string,currentTask:PropTypes.string,/** Optional list of custom exporters to offer along with the built-in exporters. See js/IdentifyExtensions.js for details. This prop can be specified in the appConfig.js cfg section. */customExporters:PropTypes.array,/** Whether to display a tree overview of results (as opposed to a flat list of results). */displayResultTree:PropTypes.bool,/** Whether to enable the aggregated report download button. */enableAggregatedReports:PropTypes.bool,/** Whether to enable the export functionality. Either `true|false` or a list of single allowed formats (builtin formats: `json`, `geojson`, `csv`, `csvzip`) */enableExport:PropTypes.oneOfType([PropTypes.bool,PropTypes.array]),enabled:PropTypes.bool,/** Whether to clear the task when the results window is closed. */exitTaskOnResultsClose:PropTypes.bool,/** Whether to include the geometry in exported features. Default: `true`. */exportGeometry:PropTypes.bool,/** Whether to assume that XML GetFeatureInfo responses specify the technical layer name in the `name` attribute, rather than the layer title. */featureInfoReturnsLayerName:PropTypes.bool,/** 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}),/** Whether to highlight all results if no result is hovered */highlightAllResults:PropTypes.bool,iframeDialogsInitiallyDocked:PropTypes.bool,/** The initial radius units of the identify dialog in radius mode. One of 'm', 'ft', 'km', 'mi'. */initialRadiusUnits:PropTypes.string,layers:PropTypes.array,longAttributesDisplay:PropTypes.string,map:PropTypes.object,/** Extra params to append to the GetFeatureInfo request (i.e. `FI_POINT_TOLERANCE`, `FI_LINE_TOLERANCE`, `feature_count`, ...). Additionally, `region_feature_count` and `radius_feature_count` are supported. */params:PropTypes.object,removeLayer:PropTypes.func,removeMarker:PropTypes.func,/** Whether to replace an attribute value containing an URL to an image with an inline image. */replaceImageUrls:PropTypes.bool,selection:PropTypes.object,setCurrentTask:PropTypes.func,/** Whether to show a layer selector to filter the identify results by layer. */showLayerSelector:PropTypes.bool,startupParams:PropTypes.object,theme:PropTypes.object});_defineProperty(Identify,"defaultProps",{enableAggregatedReports:true,enableExport:true,exportGeometry:true,clearResultsOnClose:true,customExporters:[],longAttributesDisplay:"ellipsis",displayResultTree:true,replaceImageUrls:true,featureInfoReturnsLayerName:true,geometry:{initialWidth:240,initialHeight:320,initialX:0,initialY:0,initiallyDocked:false,side:"left"},initialRadiusUnits:"m",highlightAllResults:true,showLayerSelector:true});export default connect(function(state){var enabled=state.task.id==="Identify"||state.task.identifyEnabled&&ConfigUtils.getConfigProp("identifyTool",state.theme.current,"Identify")==="Identify";return{click:state.map.click||{modifiers:{}},enabled:enabled,layers:state.layers.flat,map:state.map,selection:state.selection,theme:state.theme.current,startupParams:state.localConfig.startupParams}},{addLayerFeatures:addLayerFeatures,addMarker:addMarker,removeMarker:removeMarker,removeLayer:removeLayer,setCurrentTask:setCurrentTask})(Identify);
|
|
18
|
+
_this.setState(function(state){var identifyResults=_objectSpread({},state.identifyResults);Object.entries(newResults).forEach(function(_ref3){var _ref4=_slicedToArray(_ref3,2),layername=_ref4[0],features=_ref4[1];var key=layer.url+"#"+layername;identifyResults[key]=features.reduce(function(result,feature){if(result.find(function(f){return f.id===feature.id})===undefined){result.push(feature)}return result},identifyResults[key]||[])});return{identifyResults:identifyResults}})});_defineProperty(_this,"onShow",function(mode,data){_this.setState({mode:mode||"Point",exitTaskOnResultsClose:data===null||data===void 0?void 0:data.exitTaskOnResultsClose});if(mode==="Point"&&data!==null&&data!==void 0&&data.pos){_this.identifyPoint(data.pos)}});_defineProperty(_this,"onToolClose",function(){_this.setState({mode:"Point",exitTaskOnResultsClose:null,filterGeom:null});if(_this.props.clearResultsOnClose){_this.clearResults()}});_defineProperty(_this,"onWindowClose",function(){_this.clearResults();if(_this.state.exitTaskOnResultsClose||_this.props.exitTaskOnResultsClose){_this.props.setCurrentTask(null)}});_defineProperty(_this,"clearResults",function(){_this.props.removeMarker("identify");_this.props.removeLayer("identifyslection");_this.props.removeLayer("identifyradiusbuffer");_this.setState({identifyResults:null,pendingRequests:0})});_defineProperty(_this,"updateRadius",function(radius,units){_this.setState(function(state){return{radius:radius,radiusUnits:units,filterGeom:_objectSpread(_objectSpread({},state.filterGeom),{},{radius:MeasureUtils.convertLength(radius,units,"m")})}})});_defineProperty(_this,"renderBody",function(){if(_this.state.mode==="Point"){return LocaleUtils.tr("infotool.clickhelpPoint")}else if(_this.state.mode==="Region"){return LocaleUtils.tr("infotool.clickhelpPolygon")}else if(_this.state.mode==="Radius"){var text=LocaleUtils.tr("infotool.clickhelpRadius");return/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("div",null,text),/*#__PURE__*/React.createElement("div",{className:"identify-radius-controls controlgroup"},/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("infotool.radius"),":\xA0"),/*#__PURE__*/React.createElement(NumberInput,{disabled:!_this.state.filterGeom,max:1000000,min:1,mobile:true,onChange:function onChange(rad){return _this.updateRadius(rad,_this.state.radiusUnits)},value:_this.state.radius}),/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.updateRadius(_this.state.radius,ev.target.value)},value:_this.state.radiusUnits},/*#__PURE__*/React.createElement("option",{value:"m"},"m"),/*#__PURE__*/React.createElement("option",{value:"ft"},"ft"),/*#__PURE__*/React.createElement("option",{value:"km"},"km"),/*#__PURE__*/React.createElement("option",{value:"mi"},"mi"))))}return null});return _this}_inherits(Identify,_React$Component);return _createClass(Identify,[{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.identifyPoint(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){if(this.state.mode==="Point"){var clickPoint=this.queryPoint(prevProps);this.identifyPoint(clickPoint)}else if(this.state.mode==="Region"){if(this.state.filterGeom&&this.state.filterGeom!==prevState.filterGeom){this.identifyRegion()}}else if(this.state.mode==="Radius"){if(this.state.filterGeom&&this.state.filterGeom!==prevState.filterGeom){this.setState(function(state){return{radius:MeasureUtils.convertLength(state.filterGeom.radius,"m",state.radiusUnits)}});this.identifyRadius()}}}}},{key:"render",value:function render(){var _this2=this;var resultWindow=null;if(this.state.pendingRequests>0||this.state.identifyResults!==null){var body=null;if(isEmpty(this.state.identifyResults)){if(this.state.pendingRequests>0){body=/*#__PURE__*/React.createElement("div",{className:"identify-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("identify.querying")))}else{body=/*#__PURE__*/React.createElement("div",{className:"identify-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("identify.noresults")))}}else{body=/*#__PURE__*/React.createElement(IdentifyViewer,{attributeCalculator:this.props.attributeCalculator,attributeTransform:this.props.attributeTransform,customExporters:this.props.customExporters,displayResultTree:this.props.displayResultTree,enableAggregatedReports:this.props.enableAggregatedReports,enableExport:this.props.enableExport,exportGeometry:this.props.exportGeometry,highlightAllResults:this.props.highlightAllResults,identifyResults:this.state.identifyResults,iframeDialogsInitiallyDocked:this.props.iframeDialogsInitiallyDocked,longAttributesDisplay:this.props.longAttributesDisplay,replaceImageUrls:this.props.replaceImageUrls,role:"body",showLayerSelector:this.props.showLayerSelector})}resultWindow=/*#__PURE__*/React.createElement(ResizeableWindow,{busyIcon:this.state.pendingRequests>0,dockable:this.props.geometry.side,icon:"info-sign",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:"IdentifyWindow",onClose:this.onWindowClose,title:LocaleUtils.tr("identify.title")},body)}return[resultWindow,/*#__PURE__*/React.createElement(TaskBar,{key:"IdentifyTaskBar",onHide:this.onToolClose,onShow:this.onShow,task:"Identify"},function(){return{body:_this2.renderBody()}}),this.state.mode==="Region"||this.state.mode==="Radius"?/*#__PURE__*/React.createElement(MapSelection,{active:true,geomType:this.state.mode==="Radius"?"Circle":"Polygon",geometry:this.state.filterGeom,geometryChanged:function geometryChanged(geom,mod){return _this2.setState({filterGeom:geom,filterGeomModifiers:mod})},key:"MapSelection",measure:this.state.mode==="Radius"}):null]}}])}(React.Component);_defineProperty(Identify,"propTypes",{addLayerFeatures:PropTypes.func,addMarker:PropTypes.func,/** Optional function for computing derived attributes. See js/IdentifyExtensions.js for details. This prop can be specified in the appConfig.js cfg section. */attributeCalculator:PropTypes.func,/** Optional function for transforming attribute values. See js/IdentifyExtensions.js for details. This prop can be specified in the appConfig.js cfg section. */attributeTransform:PropTypes.func,/** Whether to clear the identify results when exiting the identify tool. */clearResultsOnClose:PropTypes.bool,click:PropTypes.object,currentIdentifyTool:PropTypes.string,currentTask:PropTypes.string,/** Optional list of custom exporters to offer along with the built-in exporters. See js/IdentifyExtensions.js for details. This prop can be specified in the appConfig.js cfg section. */customExporters:PropTypes.array,/** Whether to display a tree overview of results (as opposed to a flat list of results). */displayResultTree:PropTypes.bool,/** Whether to enable the aggregated report download button. */enableAggregatedReports:PropTypes.bool,/** Whether to enable the export functionality. Either `true|false` or a list of single allowed formats (builtin formats: `json`, `geojson`, `csv`, `csvzip`, `shapefile`, `xlsx`). If a list is provided, the export formats will be sorted according to that list, and the default format will be the first format of the list. */enableExport:PropTypes.oneOfType([PropTypes.bool,PropTypes.array]),enabled:PropTypes.bool,/** Whether to clear the task when the results window is closed. */exitTaskOnResultsClose:PropTypes.bool,/** Whether to include the geometry in exported features. Default: `true`. */exportGeometry:PropTypes.bool,/** Whether to assume that XML GetFeatureInfo responses specify the technical layer name in the `name` attribute, rather than the layer title. */featureInfoReturnsLayerName:PropTypes.bool,/** 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}),/** Whether to highlight all results if no result is hovered */highlightAllResults:PropTypes.bool,iframeDialogsInitiallyDocked:PropTypes.bool,/** The initial radius units of the identify dialog in radius mode. One of 'm', 'ft', 'km', 'mi'. */initialRadiusUnits:PropTypes.string,layers:PropTypes.array,longAttributesDisplay:PropTypes.string,map:PropTypes.object,/** Extra params to append to the GetFeatureInfo request (i.e. `FI_POINT_TOLERANCE`, `FI_LINE_TOLERANCE`, `feature_count`, ...). Additionally, `region_feature_count` and `radius_feature_count` are supported. */params:PropTypes.object,removeLayer:PropTypes.func,removeMarker:PropTypes.func,/** Whether to replace an attribute value containing an URL to an image with an inline image. */replaceImageUrls:PropTypes.bool,selection:PropTypes.object,setCurrentTask:PropTypes.func,/** Whether to show a layer selector to filter the identify results by layer. */showLayerSelector:PropTypes.bool,startupParams:PropTypes.object,theme:PropTypes.object});_defineProperty(Identify,"defaultProps",{enableAggregatedReports:true,enableExport:true,exportGeometry:true,clearResultsOnClose:true,customExporters:[],longAttributesDisplay:"ellipsis",displayResultTree:true,replaceImageUrls:true,featureInfoReturnsLayerName:true,geometry:{initialWidth:240,initialHeight:320,initialX:0,initialY:0,initiallyDocked:false,side:"left"},initialRadiusUnits:"m",highlightAllResults:true,showLayerSelector:true});export default connect(function(state){var enabled=state.task.id==="Identify"||state.task.identifyEnabled&&ConfigUtils.getConfigProp("identifyTool",state.theme.current,"Identify")==="Identify";return{click:state.map.click||{modifiers:{}},enabled:enabled,layers:state.layers.flat,map:state.map,selection:state.selection,theme:state.theme.current,startupParams:state.localConfig.startupParams}},{addLayerFeatures:addLayerFeatures,addMarker:addMarker,removeMarker:removeMarker,removeLayer:removeLayer,setCurrentTask:setCurrentTask})(Identify);
|
package/plugins/LayerCatalog.js
CHANGED
|
@@ -42,4 +42,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
|
|
|
42
42
|
* }
|
|
43
43
|
* ```
|
|
44
44
|
*/var LayerCatalog=/*#__PURE__*/function(_React$Component){function LayerCatalog(){var _this;_classCallCheck(this,LayerCatalog);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,LayerCatalog,[].concat(args));_defineProperty(_this,"state",{catalog:null,visible:false});_defineProperty(_this,"onClose",function(){_this.setState({visible:false})});_defineProperty(_this,"searchCatalog",function(text,searchParams,callback){var filter=new RegExp(removeDiacritics(text).replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&"),"i");var results=[];if(_this.state.catalog){_this.searchCatalogGroup(results,filter,_this.state.catalog)}if(results.length>0){callback({results:[{id:"cataloglayers",title:LocaleUtils.tr("layercatalog.windowtitle"),type:SearchResultType.EXTERNALLAYER,items:results}]})}else{callback({results:[]})}});_defineProperty(_this,"searchCatalogGroup",function(results,filter,group){group.forEach(function(entry){var type=entry.resource?entry.resource.slice(0,entry.resource.indexOf(":")):entry.type;if(entry.sublayers){_this.searchCatalogGroup(results,filter,entry.sublayers)}if(entry.sublayers&&type!=="wms"){return}if(removeDiacritics(entry.title).match(filter)){var _entry$sublayers,_entry$sublayers$map;results.push({id:"cataloglayer:"+results.length,text:entry.title,layer:entry,sublayers:(_entry$sublayers=entry.sublayers)===null||_entry$sublayers===void 0||(_entry$sublayers$map=_entry$sublayers.map)===null||_entry$sublayers$map===void 0?void 0:_entry$sublayers$map.call(_entry$sublayers,function(sublayer,idx){return{id:"cataloglayer:"+results.length+":"+idx,text:sublayer.title,layer:sublayer}})})}})});return _this}_inherits(LayerCatalog,_React$Component);return _createClass(LayerCatalog,[{key:"componentDidMount",value:function componentDidMount(){var _this2=this;if(this.props.catalogUrl){axios.get(MiscUtils.resolveAssetsPath(this.props.catalogUrl)).then(function(response){_this2.setState({catalog:response.data.catalog||[]})})["catch"](function(e){_this2.setState({catalog:[]});// eslint-disable-next-line
|
|
45
|
-
console.warn("Failed to load catalog: "+e)})}registerSearchProvider("catalogsearch",{label:LocaleUtils.tr("layercatalog.windowtitle"),onSearch:this.searchCatalog})}},{key:"componentWillUnmount",value:function componentWillUnmount(){unregisterSearchProvider("catalogsearch")}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.active&&!prevProps.active){this.setState({visible:true});this.props.setCurrentTask("LayerTree")}}},{key:"render",value:function render(){if(!this.state.visible){return null}return/*#__PURE__*/React.createElement(ResizeableWindow,{dockable:this.props.geometry.side,icon:"catalog",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,onClose:this.onClose,title:LocaleUtils.tr("layercatalog.windowtitle")},/*#__PURE__*/React.createElement("div",{className:"layer-catalog",role:"body"},/*#__PURE__*/React.createElement(LayerCatalogWidget,{addLayer:this.props.addLayer,catalog:this.state.catalog,levelBasedIndentSize:this.props.levelBasedIndentSize,pendingRequests:0,removeLayer:this.props.removeLayer,replacePlaceholderLayer:this.props.replacePlaceholderLayer})))}}])}(React.Component);_defineProperty(LayerCatalog,"propTypes",{active:PropTypes.bool,addLayer:PropTypes.func,/** The URL to the catalog JSON file. */catalogUrl:PropTypes.string,/** 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}),/** Whether to increase the indent size dynamically according to the current level (`true`) or keep the indent size constant (`false`). */levelBasedIndentSize:PropTypes.bool,removeLayer:PropTypes.func,replacePlaceholderLayer:PropTypes.func,setCurrentTask:PropTypes.func});_defineProperty(LayerCatalog,"defaultProps",{geometry:{initialWidth:320,initialHeight:320,initialX:0,initialY:0,initiallyDocked:false,side:"left"},levelBasedIndentSize:true});export default connect(function(state){return{active:state.task.id==="LayerCatalog"}},{addLayer:addLayer,removeLayer:removeLayer,replacePlaceholderLayer:replacePlaceholderLayer,setCurrentTask:setCurrentTask})(LayerCatalog);
|
|
45
|
+
console.warn("Failed to load catalog: "+e)})}if(this.props.registerCatalogSearchProvider){registerSearchProvider("catalogsearch",{label:LocaleUtils.tr("layercatalog.windowtitle"),onSearch:this.searchCatalog})}}},{key:"componentWillUnmount",value:function componentWillUnmount(){if(this.props.registerCatalogSearchProvider){unregisterSearchProvider("catalogsearch")}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.active&&!prevProps.active){this.setState({visible:true});this.props.setCurrentTask("LayerTree")}}},{key:"render",value:function render(){if(!this.state.visible){return null}return/*#__PURE__*/React.createElement(ResizeableWindow,{dockable:this.props.geometry.side,icon:"catalog",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,onClose:this.onClose,title:LocaleUtils.tr("layercatalog.windowtitle")},/*#__PURE__*/React.createElement("div",{className:"layer-catalog",role:"body"},/*#__PURE__*/React.createElement(LayerCatalogWidget,{addLayer:this.props.addLayer,catalog:this.state.catalog,levelBasedIndentSize:this.props.levelBasedIndentSize,pendingRequests:0,removeLayer:this.props.removeLayer,replacePlaceholderLayer:this.props.replacePlaceholderLayer})))}}])}(React.Component);_defineProperty(LayerCatalog,"propTypes",{active:PropTypes.bool,addLayer:PropTypes.func,/** The URL to the catalog JSON file. */catalogUrl:PropTypes.string,/** 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}),/** Whether to increase the indent size dynamically according to the current level (`true`) or keep the indent size constant (`false`). */levelBasedIndentSize:PropTypes.bool,/** Whether to register a search provider which allows searching catalog layers through the global search field. */registerCatalogSearchProvider:PropTypes.bool,removeLayer:PropTypes.func,replacePlaceholderLayer:PropTypes.func,setCurrentTask:PropTypes.func});_defineProperty(LayerCatalog,"defaultProps",{geometry:{initialWidth:320,initialHeight:320,initialX:0,initialY:0,initiallyDocked:false,side:"left"},levelBasedIndentSize:true,registerCatalogSearchProvider:true});export default connect(function(state){return{active:state.task.id==="LayerCatalog"}},{addLayer:addLayer,removeLayer:removeLayer,replacePlaceholderLayer:replacePlaceholderLayer,setCurrentTask:setCurrentTask})(LayerCatalog);
|