From 194d0502b0c042c0f640cd8ab55da5efb86d14c9 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 31 Jul 2022 16:58:39 -0700 Subject: Deselect on map click --- modern/src/map/MapPositions.js | 10 ++++++++++ modern/src/other/ReplayPage.js | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/modern/src/map/MapPositions.js b/modern/src/map/MapPositions.js index 847b231a..1cf8e0b8 100644 --- a/modern/src/map/MapPositions.js +++ b/modern/src/map/MapPositions.js @@ -29,7 +29,14 @@ const MapPositions = ({ positions, onClick, showStatus }) => { const onMouseEnter = () => map.getCanvas().style.cursor = 'pointer'; const onMouseLeave = () => map.getCanvas().style.cursor = ''; + const onMapClick = useCallback((event) => { + if (!event.defaultPrevented) { + onClick(); + } + }, [onClick]); + const onMarkerClick = useCallback((event) => { + event.preventDefault(); const feature = event.features[0]; if (onClick) { onClick(feature.properties.id, feature.properties.deviceId); @@ -37,6 +44,7 @@ const MapPositions = ({ positions, onClick, showStatus }) => { }, [onClick]); const onClusterClick = useCallback((event) => { + event.preventDefault(); const features = map.queryRenderedFeatures(event.point, { layers: [clusters], }); @@ -101,6 +109,7 @@ const MapPositions = ({ positions, onClick, showStatus }) => { map.on('mouseleave', clusters, onMouseLeave); map.on('click', id, onMarkerClick); map.on('click', clusters, onClusterClick); + map.on('click', onMapClick); return () => { map.off('mouseenter', id, onMouseEnter); @@ -109,6 +118,7 @@ const MapPositions = ({ positions, onClick, showStatus }) => { map.off('mouseleave', clusters, onMouseLeave); map.off('click', id, onMarkerClick); map.off('click', clusters, onClusterClick); + map.off('click', onMapClick); if (map.getLayer(id)) { map.removeLayer(id); diff --git a/modern/src/other/ReplayPage.js b/modern/src/other/ReplayPage.js index aaffc889..e49835d6 100644 --- a/modern/src/other/ReplayPage.js +++ b/modern/src/other/ReplayPage.js @@ -98,7 +98,9 @@ const ReplayPage = () => { }); const onClick = useCallback((positionId) => { - navigate(`/position/${positionId}`); + if (positionId) { + navigate(`/position/${positionId}`); + } }, [navigate]); useEffect(() => { -- cgit v1.2.3