Skip to content

Commit 53bb530

Browse files
committed
fix(ScriptGoogleMaps): clean up map markers properly
Fixes #397
1 parent 06c757c commit 53bb530

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

src/runtime/components/ScriptGoogleMaps.vue

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,18 @@ function isLocationQuery(s: string | any) {
135135
return typeof s === 'string' && (s.split(',').length > 2 || s.includes('+'))
136136
}
137137
138+
function resetMapMarkerMap(_marker: google.maps.marker.AdvancedMarkerElement | Promise<google.maps.marker.AdvancedMarkerElement>) {
139+
// eslint-disable-next-line no-async-promise-executor
140+
return new Promise<void>(async (resolve) => {
141+
const marker = _marker instanceof Promise ? await _marker : _marker
142+
if (marker) {
143+
// @ts-expect-error broken type
144+
marker.setMap(null)
145+
}
146+
resolve()
147+
})
148+
}
149+
138150
async function createAdvancedMapMarker(_options: google.maps.marker.AdvancedMarkerElementOptions | `${string},${string}`) {
139151
const key = hash(_options)
140152
if (mapMarkers.value.has(key))
@@ -266,10 +278,10 @@ onMounted(() => {
266278
}
267279
const marker = await mapMarkers.value.get(key)
268280
if (marker) {
269-
// @ts-expect-error broken type
270-
marker.setMap(null)
271-
// make sure it gets removed from map
272-
mapMarkers.value.delete(key)
281+
resetMapMarkerMap(marker)
282+
.then(() => {
283+
mapMarkers.value.delete(key)
284+
})
273285
}
274286
}
275287
for (const k of toAdd) {
@@ -298,9 +310,12 @@ onMounted(() => {
298310
}
299311
if (prev[0]) {
300312
const prevCenterHash = hash({ position: prev[0] })
301-
// @ts-expect-error broken upstream type
302-
mapMarkers.value.get(prevCenterHash)?.setMap(null)
303-
mapMarkers.value.delete(prevCenterHash)
313+
if (mapMarkers.value.has(prevCenterHash)) {
314+
resetMapMarkerMap(mapMarkers.value.get(prevCenterHash)!)
315+
.then(() => {
316+
mapMarkers.value.delete(prevCenterHash)
317+
})
318+
}
304319
}
305320
createAdvancedMapMarker({ position: center })
306321
}
@@ -427,13 +442,7 @@ const rootAttrs = computed(() => {
427442
const ScriptLoadingIndicator = resolveComponent('ScriptLoadingIndicator')
428443
429444
onBeforeUnmount(async () => {
430-
await Promise.all([...mapMarkers.value.entries()].map(async (_marker) => {
431-
const marker = await _marker
432-
if (marker) {
433-
// @ts-expect-error broken type
434-
marker.setMap(null)
435-
}
436-
}))
445+
await Promise.all([...mapMarkers.value.entries()].map(([,marker]) => resetMapMarkerMap(marker)))
437446
mapMarkers.value.clear()
438447
map.value?.unbindAll()
439448
map.value = undefined

0 commit comments

Comments
 (0)