Source: interactions/abstract.js

/**
 * Created by lomteva.aa on 24.10.2017.
 */
class AbstractInteraction {
  constructor(params) {
    this.events = {};
    this.interaction = params.interaction;
    this.type = "";
    this.id = params.id || params.layerId;
    this.initEvents();
  }

  initEvents() {
    let self = this;
    self.interaction.on("modifyend", (data) => {
      self.emit("modifyend", data);
    });
  }

  /**
   * Подписка на события
   * @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 = AbstractInteraction;