2017-08-15 13:54:22 +02:00
|
|
|
// @flow
|
|
|
|
|
import {remove} from "../common/utils/ArrayUtils"
|
|
|
|
|
import {TypeRef} from "../common/EntityFunctions"
|
|
|
|
|
import {assertMainOrNode} from "../Env"
|
2017-12-05 18:41:38 +01:00
|
|
|
import type {LoginController} from "./LoginController"
|
2017-08-15 13:54:22 +02:00
|
|
|
|
|
|
|
|
assertMainOrNode()
|
|
|
|
|
|
|
|
|
|
export class EntityEventController {
|
|
|
|
|
|
|
|
|
|
_listeners: Array<EntityEventReceived>;
|
2018-02-08 13:36:05 +01:00
|
|
|
_logins: LoginController;
|
2017-08-15 13:54:22 +02:00
|
|
|
|
2017-12-05 18:41:38 +01:00
|
|
|
constructor(logins: LoginController) {
|
2018-02-08 13:36:05 +01:00
|
|
|
this._listeners = []
|
|
|
|
|
this._logins = logins
|
2017-08-15 13:54:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
addListener(listener: EntityEventReceived) {
|
|
|
|
|
this._listeners.push(listener)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
removeListener(listener: EntityEventReceived) {
|
|
|
|
|
remove(this._listeners, listener)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
notificationReceived(entityUpdate: EntityUpdate) {
|
|
|
|
|
let typeRef = new TypeRef(entityUpdate.application, entityUpdate.type)
|
2018-02-08 13:36:05 +01:00
|
|
|
let promise = Promise.resolve()
|
|
|
|
|
if (this._logins.isUserLoggedIn()) {
|
|
|
|
|
// the UserController must be notified first as other event receivers depend on it to be up-to-date
|
2018-07-26 17:37:44 +02:00
|
|
|
promise = this._logins.getUserController()
|
|
|
|
|
.entityEventReceived(typeRef, entityUpdate.instanceListId, entityUpdate.instanceId, entityUpdate.operation)
|
2018-02-08 13:36:05 +01:00
|
|
|
}
|
|
|
|
|
promise.then(() => {
|
|
|
|
|
this._listeners.forEach(listener => {
|
|
|
|
|
listener(typeRef, entityUpdate.instanceListId, entityUpdate.instanceId, entityUpdate.operation);
|
|
|
|
|
})
|
2017-08-15 13:54:22 +02:00
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|