let ol = require('openlayers');
let DrawResult = require('./drawResult');
class Draw {
constructor(params) {
let interaction = new ol.interaction.Draw(params);
this.interaction = interaction;
this.layerId = params.layerId;
this.id = params.layerId;
this.fields = params.fields;
this.type = "draw";
this.events={};
this.initEvents(params);
}
initEvents(params) {
let self = this;
let layerId = self.layerId;
let template = params.template;
let source = params.dataSource;
// закончено рисование на слое
self.interaction.on("drawend", (data) => {
let actionResult = new DrawResult({
feature: data.feature,
target: data.target,
layerId: layerId
});
if (source) {
let feature = data.feature;
if (self.fields) {
let fields = Object.assign({}, self.fields.getObject());
delete fields["geometry"];
delete fields["geom"];
for (let key in fields) {
feature.set(fields[key].name, undefined);
}
}
if (template) {
for (let key in template) {
feature.set(key, template[key]);
}
}
feature.set("__SAVED__", false);
source.addFeature(feature);
}
if (params.func) params.func(actionResult);
})
}
/**
* Подписка на события
* @param eventName
* @param listener
*/
on(eventName, listener) {
let self = this;
let eventStore = self.events;
eventStore[eventName] = listener;
}
/**
* Выключение подписки на событие
* @param eventName
*/
off(eventName) {
let self = this;
let eventStore = self.events;
if (eventStore[eventName]) delete eventStore[eventName];
}
/**
* Инициация события с контекстом
* @param eventName
* @param context
*/
emit(eventName, context) {
let self = this;
let eventStore = self.events;
let listener = eventStore[eventName];
if (listener && typeof listener === "function") {
listener(context);
}
}
}
module.exports = Draw;