UNPKG

vue3-openlayers

Version:
79 lines (78 loc) 2.39 kB
"use strict"; 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;