From aedf213973e30d38e225ecfede407eec1f45fbc9 Mon Sep 17 00:00:00 2001 From: Claudia Ifrim Date: Mon, 21 Sep 2020 21:26:07 +0300 Subject: [PATCH] zoom to filtered features --- .../DiscodataOpenlayersMapBlock/View.jsx | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/components/manage/Blocks/DiscodataOpenlayersMapBlock/View.jsx b/src/components/manage/Blocks/DiscodataOpenlayersMapBlock/View.jsx index 4b97096..966eac8 100644 --- a/src/components/manage/Blocks/DiscodataOpenlayersMapBlock/View.jsx +++ b/src/components/manage/Blocks/DiscodataOpenlayersMapBlock/View.jsx @@ -145,6 +145,7 @@ const OpenlayersMapView = (props) => { ? state.map.element.getView().getZoom() : null; let queryParams; + if (filterSource === 'query_params') { try { queryParams = JSON.parse(props.data?.query?.value)?.properties; @@ -394,6 +395,12 @@ const OpenlayersMapView = (props) => { } else if (locationTerm?.text) { updateMapPosition = 'byLocationTerm'; } + } else if ( + filterSource !== 'query_params' && + sitesSourceQuery.where !== state.map.sitesSourceQuery.where && + props.discodata_query.search.advancedFiltering + ) { + updateMapPosition = 'byAdvancedFilters'; } else if (filterSource === 'query_params') { if (siteTerm) { updateMapPosition = 'bySiteTerm'; @@ -544,6 +551,11 @@ const OpenlayersMapView = (props) => { if (stateRef.current.updateMapPosition === 'byLocationTerm') { getLocation(options); } + if (stateRef.current.updateMapPosition === 'byAdvancedFilters') { + stateRef.current.map.element + .getView() + .fit(stateRef.current.map.sitesSourceLayer.getSource().getExtent()); + } // UPDATE OLD FILTERS if ( stateRef.current.map.sitesSourceQuery.where !== @@ -707,6 +719,13 @@ const OpenlayersMapView = (props) => { extent[3] + ',"spatialReference":{"wkid":102100}}', )}&geometryType=esriGeometryEnvelope&inSR=102100&outFields=*&outSR=102100`; + + if (stateRef.current.map.sitesSourceQuery.where) { + url = + 'https://services.arcgis.com/LcQjj2sL7Txk9Lag/arcgis/rest/services/SiteMap/FeatureServer/0/query/?f=json&' + + 'returnGeometry=true&spatialRel=esriSpatialRelIntersects&geometryType=esriGeometryEnvelope&inSR=102100&outFields=*' + + '&outSR=102100'; + } reqs++; jsonp( url, @@ -729,9 +748,8 @@ const OpenlayersMapView = (props) => { }); if (features.length > 0) { sitesSource.addFeatures(features); - } else { - // setLoader(false); } + sitesSource.dispatchEvent( new VectorSourceEvent('updateFilters'), );