vue3-openlayers
Version:
OpenLayers Wrapper for Vue3
79 lines (78 loc) • 2.39 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
const vue = require("vue");
const Map = require("ol/Map");
const Bar = require("ol-ext/control/Bar");
const composables_useOpenLayersEvents = require("./useOpenLayersEvents.js");
function useControl(ControlType, properties, attrs, eventsToHandle = []) {
const map = vue.inject("map");
const controlBar = vue.inject(
"controlBar",
null
);
const parent = controlBar !== null ? controlBar?.value : map;
const control = vue.computed(
() => new ControlType({ ...properties })
);
composables_useOpenLayersEvents.useOpenLayersEvents(control, eventsToHandle);
control.value.set("order", attrs.order === void 0 ? 0 : attrs.order);
vue.watch(control, (newVal, oldVal) => {
if (parent) {
if (parent instanceof Map) {
parent.removeControl(oldVal);
parent.addControl(newVal);
} else if (parent instanceof Bar) {
if (parent?.controls_) {
const index = parent?.controls_.findIndex((a) => a === control.value);
if (index) {
parent?.controls_.splice(index, 1);
}
}
parent.addControl(newVal);
}
map?.changed();
}
});
vue.onMounted(() => {
if (parent && (parent instanceof Map || parent instanceof Bar)) {
parent.addControl(control.value);
}
if (parent?.controls_ !== void 0) {
const sortedControls = [...parent.controls_];
sortedControls.sort(
(a, b) => a.get("order") - b.get("order")
);
parent.controls_ = [];
if (parent && (parent instanceof Map || parent instanceof Bar)) {
sortedControls.forEach((c) => {
parent.addControl(c);
});
}
parent.changed();
}
map?.changed();
});
vue.onUnmounted(() => {
if (parent && parent instanceof Map) {
parent?.getControls().getArray().forEach((c) => {
if (c instanceof ControlType) {
parent.removeControl(c);
}
});
} else {
if (parent?.controls_) {
const index = parent?.controls_.findIndex((a) => a === control.value);
if (index) {
parent?.controls_.splice(index, 1);
}
}
}
control.value.dispose();
map?.changed();
});
return {
map,
control
};
}
exports.default = useControl;