({
- position: null,
- popup: null,
- info: null,
- });
+ }>(INITIAL_PROJECTS_POPUP);
const { [id]: map } = useMap();
const { push } = useRouter();
@@ -149,54 +150,92 @@ export default function MapContainer() {
const handleMouseMove = useCallback(
(e: MapLayerMouseEvent) => {
- 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,
- });
+ setLocationPopUp(INITIAL_PROJECTS_POPUP);
}
if (!ProjectsLayer && map && hoveredStateIdProjectsCircle) {
- map.setFeatureState(
+ map?.setFeatureState(
{
sourceLayer: 'areas_centroids_c',
source: 'projects',
@@ -206,10 +245,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;