From c97383686104ee19791ab7cc8e4f3c07661c98b0 Mon Sep 17 00:00:00 2001 From: mluena Date: Wed, 10 Apr 2024 15:10:47 +0200 Subject: [PATCH] projects layer width --- client/src/containers/charts/single-bar.tsx | 6 +- .../datasets/layers/projects/hooks.tsx | 9 +- client/src/containers/map/index.tsx | 122 ++++++++++++------ client/src/containers/panel/index.tsx | 2 +- 4 files changed, 89 insertions(+), 50 deletions(-) diff --git a/client/src/containers/charts/single-bar.tsx b/client/src/containers/charts/single-bar.tsx index d7ba9565..42febfa6 100644 --- a/client/src/containers/charts/single-bar.tsx +++ b/client/src/containers/charts/single-bar.tsx @@ -21,11 +21,11 @@ export default function SingleBar({ {formatCompactNumber(data['value'].total_funding || 0)}

-
+
{ - const findLayer = (layerId: string) => e?.features?.find(({ layer }) => layer.id === layerId); - const ProjectsLayer = findLayer('projects_circle'); - const ProjectsFillLayer = findLayer('projects_fill'); - - const handleLayerInteraction = ( - layer: MapboxGeoJSONFeature | undefined, - sourceLayer: string, - stateIdVar: any | null - ) => { - if (layer && map) { - setCursor('pointer'); - - const projectCode = layer.properties?.project_code; - setHoveredProjectMap(projectCode); - setLocationPopUp({ - popup: [e?.lngLat.lat, e?.lngLat.lng], - position: { x: e.point.x, y: e.point.y }, - info: projectCode, - }); - - if (stateIdVar !== null) { - map.setFeatureState( - { sourceLayer, source: 'projects', id: stateIdVar }, - { hover: false } - ); - } - - stateIdVar = projectCode; - map.setFeatureState({ sourceLayer, source: 'projects', id: stateIdVar }, { hover: true }); + const ProjectsLayer = + e?.features && e?.features.find(({ layer }) => layer.id === 'projects_circle'); + const ProjectsFillLayer = + e?.features && e?.features.find(({ layer }) => layer.id === 'projects_fill'); + // *ON MOUSE ENTER + if (e.features && map && ProjectsLayer) { + setCursor('pointer'); + setHoveredProjectMap(ProjectsLayer.properties?.project_code); + setLocationPopUp({ + popup: [e?.lngLat.lat, e?.lngLat.lng], + position: { + x: e.point.x, + y: e.point.y, + }, + info: ProjectsLayer.properties?.project_code, + }); + } + + if (e.features && map && ProjectsFillLayer) { + setCursor('pointer'); + setHoveredProjectMap(ProjectsFillLayer.properties?.project_code); + setLocationPopUp({ + popup: [e?.lngLat.lat, e?.lngLat.lng], + position: { + x: e.point.x, + y: e.point.y, + }, + info: ProjectsFillLayer.properties?.project_code, + }); + } + + if (ProjectsLayer && map) { + if (hoveredStateIdProjectsCircle !== null) { + map?.setFeatureState( + { + sourceLayer: 'areas_centroids_c', + source: 'projects', + id: hoveredStateIdProjectsCircle, + }, + { hover: false } + ); + } + + hoveredStateIdProjectsCircle = ProjectsLayer?.properties?.project_code as string; + map?.setFeatureState( + { + sourceLayer: 'areas_centroids_c', + source: 'projects', + id: hoveredStateIdProjectsCircle, + }, + { hover: true } + ); + } + if (ProjectsFillLayer && map) { + if (hoveredStateIdProjectsFill !== null) { + map?.setFeatureState( + { + sourceLayer: 'areas_centroids_l', + source: 'projects', + id: hoveredStateIdProjectsFill, + }, + { hover: false } + ); } - }; - handleLayerInteraction(ProjectsLayer, 'areas_centroids_c', hoveredStateIdProjectsCircle); - handleLayerInteraction(ProjectsFillLayer, 'areas_centroids_l', hoveredStateIdProjectsFill); + hoveredStateIdProjectsFill = ProjectsFillLayer?.properties?.project_code as string; + map?.setFeatureState( + { + sourceLayer: 'areas_centroids_l', + source: 'projects', + id: hoveredStateIdProjectsFill, + }, + { hover: true } + ); + } // *ON MOUSE LEAVE + if (e.features?.length === 0) { setCursor('grab'); setHoveredProjectMap(null); - setLocationPopUp({ - popup: null, - position: null, - info: null, - }); } if (!ProjectsLayer && map && hoveredStateIdProjectsCircle) { - map.setFeatureState( + map?.setFeatureState( { sourceLayer: 'areas_centroids_c', source: 'projects', @@ -206,10 +243,13 @@ export default function MapContainer() { ); hoveredStateIdProjectsCircle = null; } - if (!ProjectsFillLayer && map && hoveredStateIdProjectsFill) { - map.setFeatureState( - { sourceLayer: 'areas_centroids_l', source: 'projects', id: hoveredStateIdProjectsFill }, + map?.setFeatureState( + { + sourceLayer: 'areas_centroids_l', + source: 'projects', + id: hoveredStateIdProjectsFill, + }, { hover: false } ); hoveredStateIdProjectsFill = null; diff --git a/client/src/containers/panel/index.tsx b/client/src/containers/panel/index.tsx index 70743926..45ff42e2 100644 --- a/client/src/containers/panel/index.tsx +++ b/client/src/containers/panel/index.tsx @@ -62,7 +62,7 @@ export default function Panel({ children }: { children: React.ReactNode }) {