UNPKG

nuxt-mapbox

Version:

Elegant Mapbox GL JS integration with Nuxt

41 lines (40 loc) 1.38 kB
import { useMapboxInstance, initMapbox, _useMapboxInstances, ref, shallowReactive, triggerRef, toRef } from "#imports"; import { default as mapboxgl } from "mapbox-gl"; export function defineMapboxInstance(key, options = { container: key }) { initMapbox(); const mapbox_instances = _useMapboxInstances(); if (!mapbox_instances) return ref(); if (mapbox_instances.value[key]) { console.warn(`Mapbox instance with key '${key}' was initialized multiple times. This can cause unexpected behaviour.`); return useMapboxInstance(key); } mapbox_instances.value[key] = shallowReactive({ map: new mapboxgl.Map(options), loaded: false }); const mapInstance = mapbox_instances.value[key]; mapInstance.map.on("load", () => { mapInstance.loaded = true; triggerRef(mapbox_instances); if (mapInstance) { triggerRef(toRef(mapInstance)); } }); mapInstance.map.on("style.load", () => { mapInstance.loaded = true; triggerRef(mapbox_instances); if (mapInstance) { triggerRef(toRef(mapInstance)); } }); mapInstance.map.on("idle", () => { triggerRef(mapbox_instances); if (mapInstance) { triggerRef(toRef(mapInstance)); } }); mapInstance.map.on("data", () => { triggerRef(mapbox_instances); if (mapInstance) { triggerRef(toRef(mapInstance)); } }); return useMapboxInstance(key); }