vue3-openlayers
Version:
OpenLayers Wrapper for Vue3
64 lines (63 loc) • 2.18 kB
JavaScript
;
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;