UNPKG

vue3-openlayers

Version:
64 lines (63 loc) 2.18 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); const vue = require("vue"); const composables_usePropsAsObjectProperties = require("./usePropsAsObjectProperties.js"); const composables_useOpenLayersEvents = require("./useOpenLayersEvents.js"); function useLayer(LayerClass, props, eventsToHandle = []) { const properties = composables_usePropsAsObjectProperties.default(props); const layer = vue.shallowRef(new LayerClass(properties)); composables_useOpenLayersEvents.useOpenLayersEvents(layer, [...composables_useOpenLayersEvents.LAYER_EVENTS, ...eventsToHandle]); const map = vue.inject("map"); const layerGroup = vue.inject("layerGroup", null); const overviewMap = vue.inject( "overviewMap", null ); const layerAdded = vue.ref(false); function updateLayers() { for (const key in properties) { const keyInObj = key; if (properties[keyInObj] !== void 0) { layer.value.set(key, properties[keyInObj]); } } layer.value.setOpacity(properties.opacity ?? 1); layer.value.setVisible(properties.visible ?? true); if (!layerAdded.value) { if (layerGroup) { const layerCollection = layerGroup.getLayers(); layerCollection.push(layer.value); layerGroup.setLayers(layerCollection); } else if (overviewMap?.value) { overviewMap.value?.getOverviewMap().addLayer(layer.value); } else { map?.addLayer(layer.value); } layerAdded.value = true; } } function removeLayer() { if (layerGroup) { layerGroup.getLayers().remove(layer.value); } else if (overviewMap?.value) { overviewMap.value?.getOverviewMap().removeLayer(layer.value); overviewMap.value?.changed(); } else { map?.removeLayer(layer.value); } layerAdded.value = false; } vue.onUnmounted(removeLayer); vue.watch(() => properties, updateLayers, { deep: true, immediate: true }); if (overviewMap?.value) { vue.watch(overviewMap, () => { removeLayer(); updateLayers(); }); } return { layer, map }; } exports.default = useLayer;