class InteractionManager {
constructor(params) {
this.map = params.map;
this.interactions = {};
this.snappings = {};
this.snapDefault = params.snap || true;
}
/**
* Добавляет взаимодействие
* @param interactionObject
* @return {{interactionId: string, interaction, params: *}}
*/
addInteraction(interactionObject) {
let self = this;
self.removeInteractions();
let map = self.map;
let id = interactionObject.id;
let interactionType = interactionObject.type;
let interaction = interactionObject.interaction;
let key = id + "*" + interactionType;
this.interactions[key] = interaction;
map.addInteraction(interaction);
interactionObject.on("change-interactor", function (data) {
self.removeInteractions();
self.addInteraction(data);
});
return {
interactionId: key,
interaction: interaction,
params: interactionObject
}
}
/**
* Привязка к объектам слоя
* Прим.: в отличие от остальных взимсодействий не приводят к удалению из объекта snappings
* @param params
* @return {{interactionId: string, interaction, params: *}}
*/
addSnapInteraction(params) {
let self = this;
let map = self.map;
let id = params.id;
let interactionType = params.type;
let interaction = params.interaction;
let key = id + "*" + interactionType;
this.snappings[key] = interaction;
map.addInteraction(interaction);
return {
interactionId: key,
interaction: interaction,
params: params
}
}
/**
* Удаление привязки по layerId
* @param {string} layerId - идентификатор слоя
*/
removeSnapInteraction(layerId) {
let self = this;
let map = self.map;
let key = layerId + "*" + "snap";
let interaction = self.snappings[key];
map.removeInteraction(interaction);
delete self.interactions[key];
}
removeInteractions() {
let self = this;
let map = self.map;
let interactions = self.interactions;
for (let key in interactions) {
map.removeInteraction(interactions[key]);
delete self.interactions[key];
}
}
//todo
snapOnAll() {
let self = this;
let map = self.map;
}
//todo
snapOffAll() {
}
//todo
snapOn(layerId) {
}
//todo
snapOff(layerId) {
this.removeSnapInteraction(layerId)
}
setMap(map) {
this.map = map;
}
}
module.exports = InteractionManager;