qwc2
Version:
QGIS Web Client
12 lines • 16.7 kB
JavaScript
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n2=0,F=function F(){};return{s:F,n:function n(){return _n2>=r.length?{done:!0}:{done:!1,value:r[_n2++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
* Copyright 2020-2024 Sourcepole AG
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/import React from"react";import{connect}from"react-redux";import axios from"axios";import{remove as removeDiacritics}from"diacritics";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{setActiveLayerInfo}from"../actions/layerinfo";import{LayerRole,addLayer}from"../actions/layers";import{setUserInfoFields}from"../actions/localConfig";import{setCurrentTask}from"../actions/task";import{setCurrentTheme,setThemeLayersList}from"../actions/theme";import ConfigUtils from"../utils/ConfigUtils";import LocaleUtils from"../utils/LocaleUtils";import ThemeUtils from"../utils/ThemeUtils";import Icon from"./Icon";import"./style/ThemeList.css";var ThemeList=/*#__PURE__*/function(_React$Component){function ThemeList(){var _this;_classCallCheck(this,ThemeList);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,ThemeList,[].concat(args));_defineProperty(_this,"state",{expandedGroups:[],visibleThemeInfoMenu:null});_defineProperty(_this,"groupMatchesFilter",function(group,filter){if(group&&group.items){for(var i=0,n=group.items.length;i<n;++i){if(removeDiacritics(group.items[i].title).match(filter)||removeDiacritics(group.items[i].keywords||"").match(filter)||removeDiacritics(group.items[i]["abstract"]||"").match(filter)){return true}}}if(group&&group.subdirs){for(var _i=0,_n=group.subdirs.length;_i<_n;++_i){if(_this.groupMatchesFilter(group.subdirs[_i],filter)){return true}}}return false});_defineProperty(_this,"renderThemeGroup",function(group,filter){var assetsPath=ConfigUtils.getAssetsPath();var subdirs=group&&group.subdirs?group.subdirs:[];if(filter){subdirs=subdirs.filter(function(subdir){return _this.groupMatchesFilter(subdir,filter)})}var subtree=subdirs.map(function(subdir){var expanded=!_this.props.collapsibleGroups||filter||_this.state.expandedGroups.includes(subdir.id)||_this.props.activeTheme&&_this.groupContainsActiveTheme(subdir);if(isEmpty(subdir.items)&&isEmpty(subdir.subdirs)){return null}return/*#__PURE__*/React.createElement("li",{className:"theme-group-header "+(expanded?"theme-group-header-expanded":""),key:subdir.id},/*#__PURE__*/React.createElement("span",{onClick:function onClick(){return _this.setState(function(state){return{expandedGroups:expanded?state.expandedGroups.filter(function(id){return id!==subdir.id}):[].concat(_toConsumableArray(state.expandedGroups),[subdir.id])}})}},_this.props.collapsibleGroups?/*#__PURE__*/React.createElement(Icon,{icon:expanded?"collapse":"expand"}):null," ",subdir.title),expanded?_this.renderThemeGroup(subdir,filter):null)});var activeThemeId=_this.props.activeTheme?_this.props.activeTheme.id:null;var addLayersTitle=LocaleUtils.tr("themeswitcher.addlayerstotheme");var addTitle=LocaleUtils.tr("themeswitcher.addtotheme");var changeDefaultUrlTitle=LocaleUtils.tr("themeswitcher.changedefaulttheme");var openTabTitle=LocaleUtils.tr("themeswitcher.openintab");var username=ConfigUtils.getConfigProp("username");return/*#__PURE__*/React.createElement("ul",{className:"theme-group-body"},(!isEmpty(group.items)?group.items:[]).map(function(item){var infoLinks=(item.themeInfoLinks&&item.themeInfoLinks.entries||[]).map(function(name){return _this.props.themes.themeInfoLinks.find(function(entry){return entry.name===name})}).filter(function(entry){return entry});var matches=[];if(filter){var match=null;if(match=removeDiacritics(item.title).match(filter)){matches.push([LocaleUtils.tr("themeswitcher.match.title"),_this.extractSubstr(match,item.title),item.title])}if(match=removeDiacritics(item.keywords||"").match(filter)){matches.push([LocaleUtils.tr("themeswitcher.match.keywords"),_this.extractSubstr(match,item.keywords),item.keywords])}if(match=removeDiacritics(item["abstract"]||"").match(filter)){matches.push([LocaleUtils.tr("themeswitcher.match.abstract"),_this.extractSubstr(match,item["abstract"]),item["abstract"]])}if(isEmpty(matches)){return null}}var title=item["abstract"];if(title&&item.keywords){title+="\n\n"}if(item.keywords){title+=LocaleUtils.tr("themeswitcher.match.keywords")+": "+item.keywords}return/*#__PURE__*/React.createElement("li",{className:activeThemeId===item.id?"theme-item theme-item-active":"theme-item",key:item.id,onClick:function onClick(){return _this.setTheme(item)},title:title},/*#__PURE__*/React.createElement("div",{className:"theme-item-title",title:item.title},/*#__PURE__*/React.createElement("span",null,item.title)),!isEmpty(infoLinks)?/*#__PURE__*/React.createElement("div",{className:"theme-item-info-menu "+(_this.state.visibleThemeInfoMenu?"theme-item-info-menu-active":""),onClick:function onClick(ev){return _this.toggleThemeInfoMenu(ev,item.id)}},/*#__PURE__*/React.createElement(Icon,{icon:"info"}),item.themeInfoLinks.title?/*#__PURE__*/React.createElement("span",null,item.themeInfoLinks.title):LocaleUtils.tr(item.themeInfoLinks.titleMsgId),/*#__PURE__*/React.createElement(Icon,{icon:"triangle-down"}),_this.state.visibleThemeInfoMenu===item.id?/*#__PURE__*/React.createElement("div",{className:"theme-item-info-links",onClick:function onClick(ev){return ev.stopPropagation()}},infoLinks.map(function(link){return/*#__PURE__*/React.createElement("a",{href:link.url,key:link.name,target:link.target},link.title)})):null):null,/*#__PURE__*/React.createElement("div",{className:"theme-item-body"},item.description?/*#__PURE__*/React.createElement("div",{className:"theme-item-description",dangerouslySetInnerHTML:{__html:item.description}}):null,/*#__PURE__*/React.createElement("img",{className:"theme-item-thumbnail",src:assetsPath+"/"+item.thumbnail})),!item.restricted?/*#__PURE__*/React.createElement("div",{className:"theme-item-icons"},_this.props.allowAddingOtherThemeLayers?/*#__PURE__*/React.createElement(Icon,{icon:"layers",onClick:function onClick(ev){return _this.getThemeLayersToList(ev,item)},title:addLayersTitle}):null,_this.props.allowAddingOtherThemes?/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(ev){return _this.addThemeLayers(ev,item)},title:addTitle}):null,/*#__PURE__*/React.createElement(Icon,{icon:"open_link",onClick:function onClick(ev){return _this.openInTab(ev,item.id)},title:openTabTitle}),_this.props.showDefaultThemeSelector&&username?/*#__PURE__*/React.createElement(Icon,{className:_this.extractThemeId(_this.props.defaultUrlParams)===item.id?"icon-active":"",icon:"new",onClick:function onClick(ev){return _this.changeDefaultUrlParams(ev,item.id)},title:changeDefaultUrlTitle}):null):/*#__PURE__*/React.createElement("div",{className:"theme-item-restricted-overlay"},/*#__PURE__*/React.createElement(Icon,{icon:"lock"})),isEmpty(matches)?null:/*#__PURE__*/React.createElement("div",{className:"theme-item-filterinfo-overlay"},matches.map(function(match){return/*#__PURE__*/React.createElement("div",{key:match[0],title:match[2]},/*#__PURE__*/React.createElement("i",null,match[0],":"),/*#__PURE__*/React.createElement("br",null),match[1][0],/*#__PURE__*/React.createElement("b",null,match[1][1]),match[1][2])})))}),subtree)});_defineProperty(_this,"groupContainsActiveTheme",function(group){var _iterator=_createForOfIteratorHelper(group.items||[]),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var item=_step.value;if(item.id===_this.props.activeTheme.id){return true}}}catch(err){_iterator.e(err)}finally{_iterator.f()}var _iterator2=_createForOfIteratorHelper(group.subdirs||[]),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var subdir=_step2.value;if(_this.groupContainsActiveTheme(subdir)){return true}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return false});_defineProperty(_this,"extractSubstr",function(match,text){var cleanText=removeDiacritics(text);var cleanFilter=removeDiacritics(_this.props.filter);var padding=Math.round((20-cleanFilter.length)/2);// Add unused right padding to left
padding+=-Math.min(cleanText.length-(match.index+cleanFilter.length)-padding,0);var leftStart=Math.max(match.index-padding,0);var leftLen=Math.min(match.index,padding);return[(leftStart>0?"\u2026":"")+cleanText.substr(leftStart,leftLen),cleanText.substr(match.index,cleanFilter.length),cleanText.substr(match.index+cleanFilter.length)]});_defineProperty(_this,"extractThemeId",function(text){return Object.fromEntries(text.split("&").map(function(x){return x.split("=")})).t});_defineProperty(_this,"setTheme",function(theme){if(theme.restricted){// eslint-disable-next-line
alert(LocaleUtils.tr("themeswitcher.restrictedthemeinfo"));return}var hasUserLayer=_this.props.layers.find(function(layer){return layer.role===LayerRole.USERLAYER});var preserveNonThemeLayers=ConfigUtils.getConfigProp("preserveNonThemeLayersOnThemeSwitch",_this.props.activeTheme);// eslint-disable-next-line
if(hasUserLayer&&!preserveNonThemeLayers&&!confirm(LocaleUtils.tr("themeswitcher.confirmswitch"))){return}_this.props.setActiveLayerInfo(null,null);if(_this.props.showLayerAfterChangeTheme){_this.props.setCurrentTask("LayerTree")}else{_this.props.setCurrentTask(null)}_this.props.changeTheme(theme,_this.props.themes,!_this.props.dontPreserveSettingsOnSwitch)});_defineProperty(_this,"toggleThemeInfoMenu",function(ev,themeId){ev.stopPropagation();_this.setState(function(state){return{visibleThemeInfoMenu:state.visibleThemeInfoMenu===themeId?null:themeId}})});_defineProperty(_this,"addThemeLayers",function(ev,theme){ev.stopPropagation();_this.props.addLayer(ThemeUtils.createThemeLayer(theme,_this.props.themes,LayerRole.USERLAYER));// Show layer tree to notify user that something has happened
_this.props.setCurrentTask("LayerTree")});_defineProperty(_this,"getThemeLayersToList",function(ev,theme){ev.stopPropagation();_this.props.setThemeLayersList(theme);// Show layer tree to notify user that something has happened
_this.props.setCurrentTask("LayerTree")});_defineProperty(_this,"openInTab",function(ev,themeid){ev.stopPropagation();var url=location.href.split("?")[0]+"?t="+themeid;window.open(url,"_blank")});_defineProperty(_this,"changeDefaultUrlParams",function(ev,themeid){ev.stopPropagation();var params={default_url_params:"t="+themeid};var baseurl=location.href.split("?")[0].replace(/\/$/,"");axios.get(baseurl+"/setuserinfo",{params:params}).then(function(response){if(!response.data.success){/* eslint-disable-next-line */alert(LocaleUtils.tr("settings.defaultthemefailed",response.data.error))}else{_this.props.setUserInfoFields(response.data.fields)}})["catch"](function(e){/* eslint-disable-next-line */alert(LocaleUtils.tr("settings.defaultthemefailed",String(e)))})});return _this}_inherits(ThemeList,_React$Component);return _createClass(ThemeList,[{key:"render",value:function render(){var filter=this.props.filter?new RegExp(removeDiacritics(this.props.filter).replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&"),"i"):null;return/*#__PURE__*/React.createElement("div",{className:"ThemeList"},this.renderThemeGroup(this.props.themes,filter))}}])}(React.Component);_defineProperty(ThemeList,"propTypes",{activeTheme:PropTypes.object,addLayer:PropTypes.func,allowAddingOtherThemeLayers:PropTypes.bool,allowAddingOtherThemes:PropTypes.bool,changeTheme:PropTypes.func,collapsibleGroups:PropTypes.bool,defaultUrlParams:PropTypes.string,dontPreserveSettingsOnSwitch:PropTypes.bool,filter:PropTypes.string,layers:PropTypes.array,mapConfig:PropTypes.object,setActiveLayerInfo:PropTypes.func,setCurrentTask:PropTypes.func,setThemeLayersList:PropTypes.func,setUserInfoFields:PropTypes.func,showDefaultThemeSelector:PropTypes.bool,showLayerAfterChangeTheme:PropTypes.bool,themes:PropTypes.object});var selector=function selector(state){var _state$localConfig$us;return{themes:state.theme.themes||{},layers:state.layers.flat,mapConfig:state.map,defaultUrlParams:((_state$localConfig$us=state.localConfig.user_infos)===null||_state$localConfig$us===void 0?void 0:_state$localConfig$us.default_url_params)||""}};export default connect(selector,{changeTheme:setCurrentTheme,setCurrentTask:setCurrentTask,addLayer:addLayer,setActiveLayerInfo:setActiveLayerInfo,setThemeLayersList:setThemeLayersList,setUserInfoFields:setUserInfoFields})(ThemeList);