UNPKG

qwc2-lts

Version:
67 lines 11.5 kB
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _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 2017-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. *//** * NOTE: This sample editing interface is designed to work with the counterpart at * https://github.com/qwc-services/qwc-data-service * * You can use any other editing backend by implementing the getFeature, addFeature, * editFeature and deleteFeature methods as necessary. */import axios from"axios";import isEmpty from"lodash.isempty";import ConfigUtils from"./ConfigUtils";import LocaleUtils from"./LocaleUtils";function buildErrMsg(err){var message=LocaleUtils.tr("editing.commitfailed");if(err.response&&err.response.data&&err.response.data.message){message=err.response.data.message;if(!isEmpty(err.response.data.geometry_errors)){message+=":\n";message+=err.response.data.geometry_errors.map(function(entry){var entrymsg=" - "+entry.reason;if(entry.location){entrymsg+=" at "+entry.location}return entrymsg})}if(!isEmpty(err.response.data.data_errors)){message+=":\n - "+err.response.data.data_errors.join("\n - ")}if(!isEmpty(err.response.data.validation_errors)){message+=":\n - "+err.response.data.validation_errors.join("\n - ")}if(!isEmpty(err.response.data.attachment_errors)){message+=":\n - "+err.response.data.attachment_errors.join("\n - ")}}else if(err.response&&err.response.statusText){message+=": "+err.response.statusText}return message}/* layerId: The edit layer id mapPos: the map position mapCrs: the map crs mapScale: the map scale denominator dpi: the map resolution callback: function(result), on success result is a collection of features, on failure, result is null filter: the filter expression as [["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...], or null filterGeom: the filter geometry, as a GeoJSON gemetry, or null */function getFeature(layerId,mapPos,mapCrs,mapScale,dpi,callback){var filter=arguments.length>6&&arguments[6]!==undefined?arguments[6]:null;var filterGeom=arguments.length>7&&arguments[7]!==undefined?arguments[7]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/";// 10px tolerance var tol=10/dpi*0.0254*mapScale;var bbox=mapPos[0]-tol+","+(mapPos[1]-tol)+","+(mapPos[0]+tol)+","+(mapPos[1]+tol);var params={bbox:bbox,crs:mapCrs,filter:filter?JSON.stringify(filter):undefined,filter_geom:filterGeom?JSON.stringify(_objectSpread(_objectSpread({},filterGeom),{},{crs:{type:"name",properties:{name:mapCrs}}})):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){if(response.data&&!isEmpty(response.data.features)){var version=+new Date;response.data.features.forEach(function(feature){feature.__version__=version});callback(response.data)}else{callback(null)}})["catch"](function(){return callback(null)})}/* layerId: The edit layer id featureId: The feature id mapCrs: the map crs callback: function(result), on success result is a feature, on failure, result is null */function getFeatureById(layerId,featureId,mapCrs,callback){var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/"+featureId;var params={crs:mapCrs};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){response.data.__version__=+new Date;callback(response.data)})["catch"](function(){return callback(null)})}/* layerId: The edit layer id mapCrs: the map crs callback: function(result), on success result is a collection of features, on failure, result is null bbox: the filter bounding box as [xmin, xmax, ymin, xmax], or null filter: the filter expression as [["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...], or null filterGeom: the filter geometry, as a GeoJSON gemetry, or null */function getFeatures(layerId,mapCrs,callback){var bbox=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var filter=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;var filterGeom=arguments.length>5&&arguments[5]!==undefined?arguments[5]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/";var params={crs:mapCrs,bbox:bbox?bbox.join(","):undefined,filter:filter?JSON.stringify(filter):undefined,filter_geom:filterGeom?JSON.stringify(_objectSpread(_objectSpread({},filterGeom),{},{crs:{type:"name",properties:{name:mapCrs}}})):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){if(response.data&&Array.isArray(response.data.features)){var version=+new Date;response.data.features.forEach(function(feature){feature.__version__=version});callback(response.data)}else{callback(null)}})["catch"](function(){return callback(null)})}/* layerId: The edit layer id mapCrs: the map crs callback: function(result), on success result is a {"bbox": [xmin, ymin, xmax, ymax]} object, on failure, result is null filter: the filter expression as [["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...], or null filterGeom: the filter geometry, as a GeoJSON gemetry, or null */function getExtent(layerId,mapCrs,callback){var filter=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var filterGeom=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/extent";var params={crs:mapCrs,filter:filter?JSON.stringify(filter):undefined,filter_geom:filterGeom?JSON.stringify(_objectSpread(_objectSpread({},filterGeom),{},{crs:{type:"name",properties:{name:mapCrs}}})):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){callback(response.data)})["catch"](function(){return callback(null)})}/* layerId: The edit layer id featureData: a FormData instance, with: - A 'feature' entry containing the GeoJSON serialized feature - Zero or more 'file:' prefixed file upload entries - Zero or more 'relfile:' prefixed file upload entries - Optionally a 'g-recaptcha-response' entry with the captcha response callback: function(success, result), if success = true, result is the committed GeoJSON feature, if success = false, result is an error message */function addFeatureMultipart(layerId,featureData,callback){var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/multipart";var headers={"Content-Type":"multipart/form-data","Accept-Language":LocaleUtils.lang()};axios.post(req,featureData,{headers:headers}).then(function(response){response.data.__version__=+new Date;callback(true,response.data)})["catch"](function(err){return callback(false,buildErrMsg(err))})}/* layerId: The edit layer id featureId: The id of the feature to edit featureData: a FormData instance, with: - A 'feature' entry containing the GeoJSON serialized feature - Zero or more 'file:' prefixed file upload entries - Zero or more 'relfile:' prefixed file upload entries - Optionally a 'g-recaptcha-response' entry with the captcha response callback: function(success, result), if success = true, result is the committed GeoJSON feature, if success = false, result is an error message */function editFeatureMultipart(layerId,featureId,featureData,callback){var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/multipart/"+featureId;var headers={"Content-Type":"multipart/form-data","Accept-Language":LocaleUtils.lang()};axios.put(req,featureData,{headers:headers}).then(function(response){response.data.__version__=+new Date;callback(true,response.data)})["catch"](function(err){return callback(false,buildErrMsg(err))})}/* layerId: The edit layer id featureId: The id of the feature to delete callback: function(success, result), if success = true, result is null, if success = false, result is an error message recaptchaResponse: Optional, captcha challenge response */function deleteFeature(layerId,featureId,callback){var recaptchaResponse=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/"+featureId;var headers={"Accept-Language":LocaleUtils.lang()};var data={};if(recaptchaResponse){data["g-recaptcha-response"]=recaptchaResponse}axios["delete"](req,{headers:headers,data:data}).then(function(){callback(true,featureId)})["catch"](function(err){return callback(false,buildErrMsg(err))})}function getRelations(layerId,featureId,tables,mapCrs,callback){var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/"+featureId+"/relations";var params={tables:tables,crs:mapCrs};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){callback(response.data)})["catch"](function(){return callback({})})}/* keyvalues: <dataset>:<key_column>:<value_column>,<dataset>:<key_column>:<value_column>,... callback: function(result), result is a {"keyvalues": {"<dataset>": [{"key": <key>, "value": <value}, ...]}} filter: the filter expression as [[["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...]] (one filter expr per keyvalue entry), or null */function getKeyValues(keyvalues,callback){var filter=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+"keyvals?tables="+keyvalues;var params={filter:filter?JSON.stringify(filter):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){callback(response.data)})["catch"](function(){return callback({})})}export default{getFeature:getFeature,getFeatureById:getFeatureById,getFeatures:getFeatures,getExtent:getExtent,addFeatureMultipart:addFeatureMultipart,editFeatureMultipart:editFeatureMultipart,deleteFeature:deleteFeature,getRelations:getRelations,getKeyValues:getKeyValues};