feat(SW-552): poi stays active after list is toggled

This commit is contained in:
Fredrik Thorsson
2024-10-23 09:37:12 +02:00
parent af5d7c671a
commit 0d63abfa8b

View File

@@ -24,6 +24,7 @@ export default function Sidebar({
const intl = useIntl()
const map = useMap()
const [isFullScreenSidebar, setIsFullScreenSidebar] = useState(false)
const [isClicking, setIsClicking] = useState(false)
const poiGroups = new Set(pointsOfInterest.map(({ group }) => group))
const poisInGroups = Array.from(poiGroups).map((group) => ({
group,
@@ -45,10 +46,26 @@ export default function Sidebar({
}
}
function handleMouseEnter(poiName: string) {
if (!isClicking) {
onActivePoiChange(poiName)
}
}
function handleMouseLeave() {
if (!isClicking) {
onActivePoiChange(null)
}
}
function handlePoiClick(poiName: string, poiCoordinates: Coordinates) {
onActivePoiChange(activePoi === poiName ? null : poiName)
moveToPoi(poiCoordinates)
setIsClicking(true)
toggleFullScreenSidebar()
onActivePoiChange(poiName)
moveToPoi(poiCoordinates)
setTimeout(() => {
setIsClicking(false)
}, 200)
}
return (
@@ -98,8 +115,8 @@ export default function Sidebar({
<li key={poi.name} className={styles.poiItem}>
<button
className={`${styles.poiButton} ${activePoi === poi.name ? styles.active : ""}`}
onMouseEnter={() => onActivePoiChange(poi.name)}
onMouseLeave={() => onActivePoiChange(null)}
onMouseEnter={() => handleMouseEnter(poi.name)}
onMouseLeave={handleMouseLeave}
onClick={() => handlePoiClick(poi.name, poi.coordinates)}
>
<span>{poi.name}</span>