blob: ef13bbf9c0db82685264b436440ef33833e7fd94 [file] [log] [blame] [edit]
import { makeObservable, observable, action, reaction } from 'mobx';
export class Notifications {
lastMessages = new Map(); // Map<string, Message>
lastMessage; roomDisposers = new Map(); // Map<string, Function>
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)(); // Dispose the reaction
this.roomDisposers.delete(roomName);
this.lastMessages.delete(roomName);
}
}
updateLastMessage(roomName, message) {
this.lastMessages.set(roomName, message);
}
}