feat(SW-552): add panTo function
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
"use client"
|
"use client"
|
||||||
|
|
||||||
|
import { useMap } from "@vis.gl/react-google-maps"
|
||||||
import { useCallback, useState } from "react"
|
import { useCallback, useState } from "react"
|
||||||
import { useIntl } from "react-intl"
|
import { useIntl } from "react-intl"
|
||||||
|
|
||||||
@@ -19,6 +20,7 @@ export default function Sidebar({
|
|||||||
onActivePoiChange,
|
onActivePoiChange,
|
||||||
}: SidebarProps) {
|
}: SidebarProps) {
|
||||||
const intl = useIntl()
|
const intl = useIntl()
|
||||||
|
const map = useMap()
|
||||||
const [isFullScreenSidebar, setIsFullScreenSidebar] = useState(false)
|
const [isFullScreenSidebar, setIsFullScreenSidebar] = useState(false)
|
||||||
const poiGroups = new Set(pointsOfInterest.map(({ group }) => group))
|
const poiGroups = new Set(pointsOfInterest.map(({ group }) => group))
|
||||||
const poisInGroups = Array.from(poiGroups).map((group) => ({
|
const poisInGroups = Array.from(poiGroups).map((group) => ({
|
||||||
@@ -31,11 +33,12 @@ export default function Sidebar({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handlePoiClick = useCallback(
|
const handlePoiClick = useCallback(
|
||||||
(poiName: string) => {
|
(poiName: string, coordinates: { lat: number; lng: number }) => {
|
||||||
onActivePoiChange(activePoi === poiName ? null : poiName)
|
onActivePoiChange(activePoi === poiName ? null : poiName)
|
||||||
|
map?.panTo(coordinates)
|
||||||
toggleFullScreenSidebar()
|
toggleFullScreenSidebar()
|
||||||
},
|
},
|
||||||
[activePoi, onActivePoiChange]
|
[activePoi, onActivePoiChange, map]
|
||||||
)
|
)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -87,7 +90,7 @@ export default function Sidebar({
|
|||||||
className={`${styles.poiButton} ${activePoi === poi.name ? styles.active : ""}`}
|
className={`${styles.poiButton} ${activePoi === poi.name ? styles.active : ""}`}
|
||||||
onMouseEnter={() => onActivePoiChange(poi.name)}
|
onMouseEnter={() => onActivePoiChange(poi.name)}
|
||||||
onMouseLeave={() => onActivePoiChange(null)}
|
onMouseLeave={() => onActivePoiChange(null)}
|
||||||
onClick={() => handlePoiClick(poi.name)}
|
onClick={() => handlePoiClick(poi.name, poi.coordinates)}
|
||||||
>
|
>
|
||||||
<span>{poi.name}</span>
|
<span>{poi.name}</span>
|
||||||
<span>{poi.distance} km</span>
|
<span>{poi.distance} km</span>
|
||||||
|
|||||||
@@ -79,7 +79,6 @@ export default function InteractiveMap({
|
|||||||
<PoiMarker
|
<PoiMarker
|
||||||
group={poi.group}
|
group={poi.group}
|
||||||
categoryName={poi.categoryName}
|
categoryName={poi.categoryName}
|
||||||
className={styles.poiMarker}
|
|
||||||
size={activePoi === poi.name ? 20 : 16}
|
size={activePoi === poi.name ? 20 : 16}
|
||||||
/>
|
/>
|
||||||
<Body className={styles.poiLabel} asChild>
|
<Body className={styles.poiLabel} asChild>
|
||||||
|
|||||||
Reference in New Issue
Block a user