🏡 index : cold-air-networks/mirror-jetstream.git

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);
    }
}