let ol = require('openlayers');
let SelectResult = require('./selectResult');
class Select {
constructor(params) {
let interaction = new ol.interaction.Select(params);
this.interaction = interaction;
this.type = "select";
this.id = "map";
this.events = {};
this.initEvents(params);
}
initEvents(params) {
let self = this;
let interaction = self.interaction;
self.interaction.on("select", (data) => {
let result = data.selected.map((selectedFeature, index) => {
let geometry = Object.assign({}, selectedFeature.getGeometry());
let store = params.store;
let layers = store.layers;
let attributes = Object.assign({}, selectedFeature.getProperties());
delete attributes.geometry;
let layerId = interaction.getLayer(selectedFeature).getProperties().id;
let layer = layers[layerId];
let layerName = layer === undefined ? layerId : layer.store.alias;
let fieldName = layer.getDisplayField();
let title = selectedFeature.get(fieldName) || "-";
let item = new SelectResult({
layer: layer,
layerId: layerId,
layerName: layerName,
queryGeometry: geometry,
geometry: geometry,
attributes: attributes,
dirtyData: selectedFeature,
title: title
});
item.index = index;
return item;
});
if (params.func) params.func(result);
})
}
/**
* Подписка на события
* @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 = Select;