import { makeObservable, observable, action, reaction } from 'mobx'; export class Notifications { lastMessages = new Map(); // Map lastMessage; roomDisposers = new Map(); // 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)(); // Dispose the reaction this.roomDisposers.delete(roomName); this.lastMessages.delete(roomName); } } updateLastMessage(roomName, message) { this.lastMessages.set(roomName, message); } }