export default class EventRegister {
static _Single;
static Get() {
if (this._Single == null || this._Single == undefined) {
this._Single = new EventRegister();
}
return this._Single;
}
constructor() {
this.Events = [
//Изменение состояния авторизации пользователя
"OnAuthChange",
//Изменение ID активной папки в основном окне
"OnItemsChange_Main",
//Информация об активной папке в основном окне была загружена
"OnItemsChange_MainExplorer_InfoLoaded",
//Изменение ID активной папки в окне перемещения
"OnItemsChange_Move",
//Информация об активной папке в окне перемещения была загружена (Не реализовано)
"OnItemsChange_MoveExplorer_InfoLoaded",
//Изменение данных на странице администрирования
"OnHaveDataChange"
];
this.Listeners = {};
this.Events.map(function (event) {
this.Listeners[event] = [];
}.bind(this));
}
RegisterListener(Event, control) {
if (!this.Events.includes(Event))
throw "Event not found";
if (control["Event_" + Event] == undefined)
throw "Control not implement event function";
this.Listeners[Event].push(control);
//Флаг используется в BaseControl,
//чтобы при уничтожении контрола
//инициировать удаление из EventRegister listeners
control.IsEventListener = true;
}
UnregistListener(control) {
Object
.keys(this.Listeners)
.map(
function (e) {
let pos = this.Listeners[e].findIndex(e2 => e2.ID === control.ID);
if (pos != -1) {
this.Listeners[e].splice(pos, 1);
}
}
.bind(this)
);
}
EventAction(Event, params) {
if (!this.Events.includes(Event)) {
throw "Event not found";
}
this
.Listeners[Event]
.map(
function (e) {
e["Event_" + Event](params);
}
);
}
}