Skip to content

Commit a5e5753

Browse files
committed
Use LastLineHook in click event
1 parent 9013b52 commit a5e5753

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

google-maps/src/Map/Map.tsx

+27-4
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ type GoogleMap = google.maps.Map;
1818
type GoogleMarker = google.maps.Marker;
1919
type GooglePolyline = google.maps.Polyline;
2020

21-
let lastLine:GooglePolyline;
22-
2321
const Map: React.FC<IMap> = ({ mapType, mapTypeControl = false, setDistanceInKm}) => {
2422

2523
const ref = useRef<HTMLDivElement>(null);
2624
const [map, setMap] = useState<GoogleMap>();
2725
const [marker, setMarker] = useState<IMarker>();
2826
const [homeMarker, setHomeMarker] = useState<GoogleMarker>();
2927
const [googleMarkers, setGoogleMarkers] = useState<GoogleMarker[]>([]);
28+
const [listenerIdArray, setListenerIdArray] = useState<any[]>([]);
29+
const [LastLineHook, setLastLineHook] = useState<GooglePolyline>();
3030

3131
const startMap = (): void => {
3232
if (!map) {
@@ -80,14 +80,18 @@ const Map: React.FC<IMap> = ({ mapType, mapTypeControl = false, setDistanceInKm}
8080

8181
setGoogleMarkers(googleMarkers => [...googleMarkers, marker]);
8282

83-
marker.addListener('click', () => {
83+
const listenerId = marker.addListener('click', () => {
8484
const homePos = homeMarker?.getPosition();
8585
const markerPos = marker.getPosition();
8686
if (homePos && markerPos) {
8787
const distanceInMeters = google.maps.geometry.spherical.computeDistanceBetween(homePos, markerPos);
8888
setDistanceInKm(Math.round(distanceInMeters / 1000));
8989

90-
lastLine = new google.maps.Polyline({
90+
if (LastLineHook) {
91+
LastLineHook.setMap(null);
92+
}
93+
94+
const line = new google.maps.Polyline({
9195
path: [
9296
{ lat: homePos.lat(), lng: homePos.lng()},
9397
{ lat: markerPos.lat(), lng: markerPos.lng()},
@@ -102,10 +106,29 @@ const Map: React.FC<IMap> = ({ mapType, mapTypeControl = false, setDistanceInKm}
102106
],
103107
map: map,
104108
});
109+
110+
setLastLineHook(line);
105111
}
106112
});
113+
114+
setListenerIdArray(listenerIdArray => [...listenerIdArray, listenerId]);
107115
};
108116

117+
useEffect(() => {
118+
listenerIdArray.forEach((listenerId) => {
119+
google.maps.event.removeListener(listenerId);
120+
});
121+
122+
setListenerIdArray([]);
123+
setGoogleMarkers([]);
124+
googleMarkers.forEach((googleMarker) => {
125+
const markerPosition = googleMarker.getPosition();
126+
if (markerPosition) {
127+
addMarker(markerPosition);
128+
}
129+
});
130+
}, [LastLineHook]);
131+
109132
const addHomeMarker = (location: GoogleLatLng): GoogleMarker => {
110133
const homeMarkerConst:GoogleMarker = new google.maps.Marker({
111134
position: location,

0 commit comments

Comments
 (0)