import { makeObservable, observable, action, reaction } from 'mobx';
export class Notifications {
lastMessages = new Map();
lastMessage; roomDisposers = new Map();
constructor(rooms) {
makeObservable(this, {
lastMessages: observable,
updateLastMessage: action,
addRoom: action,
removeRoom: action,
});
rooms.forEach(room => this.addRoom(room));
}
addRoom(room) {
const disposer = reaction(
() => room.lastMessage,
(message) => {
if (message) {
this.updateLastMessage(room.name, message);
}
}
);
this.roomDisposers.set(room.name, disposer);
}
removeRoom(roomName) {
if (this.roomDisposers.has(roomName)) {
this.roomDisposers.get(roomName)();
this.roomDisposers.delete(roomName);
this.lastMessages.delete(roomName);
}
}
updateLastMessage(roomName, message) {
this.lastMessages.set(roomName, message);
}
}