Source: interactions/select.js

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;