UNPKG

matrix-react-sdk

Version:
88 lines (84 loc) 11.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.ListNotificationState = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _NotificationLevel = require("./NotificationLevel"); var _arrays = require("../../utils/arrays"); var _NotificationState = require("./NotificationState"); /* Copyright 2024 New Vector Ltd. Copyright 2020-2022 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ class ListNotificationState extends _NotificationState.NotificationState { constructor(byTileCount = false, getRoomFn) { super(); (0, _defineProperty2.default)(this, "rooms", []); (0, _defineProperty2.default)(this, "states", {}); (0, _defineProperty2.default)(this, "onRoomNotificationStateUpdate", () => { this.calculateTotalState(); }); this.byTileCount = byTileCount; this.getRoomFn = getRoomFn; } get symbol() { return this._level === _NotificationLevel.NotificationLevel.Unsent ? "!" : null; } setRooms(rooms) { // If we're only concerned about the tile count, don't bother setting up listeners. if (this.byTileCount) { this.rooms = rooms; this.calculateTotalState(); return; } const oldRooms = this.rooms; const diff = (0, _arrays.arrayDiff)(oldRooms, rooms); this.rooms = [...rooms]; for (const oldRoom of diff.removed) { const state = this.states[oldRoom.roomId]; if (!state) continue; // We likely just didn't have a badge (race condition) delete this.states[oldRoom.roomId]; state.off(_NotificationState.NotificationStateEvents.Update, this.onRoomNotificationStateUpdate); } for (const newRoom of diff.added) { const state = this.getRoomFn(newRoom); state.on(_NotificationState.NotificationStateEvents.Update, this.onRoomNotificationStateUpdate); this.states[newRoom.roomId] = state; } this.calculateTotalState(); } getForRoom(room) { const state = this.states[room.roomId]; if (!state) throw new Error("Unknown room for notification state"); return state; } destroy() { super.destroy(); for (const state of Object.values(this.states)) { state.off(_NotificationState.NotificationStateEvents.Update, this.onRoomNotificationStateUpdate); } this.states = {}; } calculateTotalState() { const snapshot = this.snapshot(); if (this.byTileCount) { this._level = _NotificationLevel.NotificationLevel.Highlight; this._count = this.rooms.length; } else { this._count = 0; this._level = _NotificationLevel.NotificationLevel.None; for (const state of Object.values(this.states)) { this._count += state.count; this._level = Math.max(this.level, state.level); } } // finally, publish an update if needed this.emitIfUpdated(snapshot); } } exports.ListNotificationState = ListNotificationState; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfTm90aWZpY2F0aW9uTGV2ZWwiLCJyZXF1aXJlIiwiX2FycmF5cyIsIl9Ob3RpZmljYXRpb25TdGF0ZSIsIkxpc3ROb3RpZmljYXRpb25TdGF0ZSIsIk5vdGlmaWNhdGlvblN0YXRlIiwiY29uc3RydWN0b3IiLCJieVRpbGVDb3VudCIsImdldFJvb21GbiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiY2FsY3VsYXRlVG90YWxTdGF0ZSIsInN5bWJvbCIsIl9sZXZlbCIsIk5vdGlmaWNhdGlvbkxldmVsIiwiVW5zZW50Iiwic2V0Um9vbXMiLCJyb29tcyIsIm9sZFJvb21zIiwiZGlmZiIsImFycmF5RGlmZiIsIm9sZFJvb20iLCJyZW1vdmVkIiwic3RhdGUiLCJzdGF0ZXMiLCJyb29tSWQiLCJvZmYiLCJOb3RpZmljYXRpb25TdGF0ZUV2ZW50cyIsIlVwZGF0ZSIsIm9uUm9vbU5vdGlmaWNhdGlvblN0YXRlVXBkYXRlIiwibmV3Um9vbSIsImFkZGVkIiwib24iLCJnZXRGb3JSb29tIiwicm9vbSIsIkVycm9yIiwiZGVzdHJveSIsIk9iamVjdCIsInZhbHVlcyIsInNuYXBzaG90IiwiSGlnaGxpZ2h0IiwiX2NvdW50IiwibGVuZ3RoIiwiTm9uZSIsImNvdW50IiwiTWF0aCIsIm1heCIsImxldmVsIiwiZW1pdElmVXBkYXRlZCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RvcmVzL25vdGlmaWNhdGlvbnMvTGlzdE5vdGlmaWNhdGlvblN0YXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIwLTIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgUm9vbSB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcblxuaW1wb3J0IHsgTm90aWZpY2F0aW9uTGV2ZWwgfSBmcm9tIFwiLi9Ob3RpZmljYXRpb25MZXZlbFwiO1xuaW1wb3J0IHsgYXJyYXlEaWZmIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2FycmF5c1wiO1xuaW1wb3J0IHsgUm9vbU5vdGlmaWNhdGlvblN0YXRlIH0gZnJvbSBcIi4vUm9vbU5vdGlmaWNhdGlvblN0YXRlXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TdGF0ZSwgTm90aWZpY2F0aW9uU3RhdGVFdmVudHMgfSBmcm9tIFwiLi9Ob3RpZmljYXRpb25TdGF0ZVwiO1xuXG5leHBvcnQgdHlwZSBGZXRjaFJvb21GbiA9IChyb29tOiBSb29tKSA9PiBSb29tTm90aWZpY2F0aW9uU3RhdGU7XG5cbmV4cG9ydCBjbGFzcyBMaXN0Tm90aWZpY2F0aW9uU3RhdGUgZXh0ZW5kcyBOb3RpZmljYXRpb25TdGF0ZSB7XG4gICAgcHJpdmF0ZSByb29tczogUm9vbVtdID0gW107XG4gICAgcHJpdmF0ZSBzdGF0ZXM6IHsgW3Jvb21JZDogc3RyaW5nXTogUm9vbU5vdGlmaWNhdGlvblN0YXRlIH0gPSB7fTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBieVRpbGVDb3VudCA9IGZhbHNlLFxuICAgICAgICBwcml2YXRlIGdldFJvb21GbjogRmV0Y2hSb29tRm4sXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzeW1ib2woKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZXZlbCA9PT0gTm90aWZpY2F0aW9uTGV2ZWwuVW5zZW50ID8gXCIhXCIgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRSb29tcyhyb29tczogUm9vbVtdKTogdm9pZCB7XG4gICAgICAgIC8vIElmIHdlJ3JlIG9ubHkgY29uY2VybmVkIGFib3V0IHRoZSB0aWxlIGNvdW50LCBkb24ndCBib3RoZXIgc2V0dGluZyB1cCBsaXN0ZW5lcnMuXG4gICAgICAgIGlmICh0aGlzLmJ5VGlsZUNvdW50KSB7XG4gICAgICAgICAgICB0aGlzLnJvb21zID0gcm9vbXM7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9sZFJvb21zID0gdGhpcy5yb29tcztcbiAgICAgICAgY29uc3QgZGlmZiA9IGFycmF5RGlmZihvbGRSb29tcywgcm9vbXMpO1xuICAgICAgICB0aGlzLnJvb21zID0gWy4uLnJvb21zXTtcbiAgICAgICAgZm9yIChjb25zdCBvbGRSb29tIG9mIGRpZmYucmVtb3ZlZCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlc1tvbGRSb29tLnJvb21JZF07XG4gICAgICAgICAgICBpZiAoIXN0YXRlKSBjb250aW51ZTsgLy8gV2UgbGlrZWx5IGp1c3QgZGlkbid0IGhhdmUgYSBiYWRnZSAocmFjZSBjb25kaXRpb24pXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdGF0ZXNbb2xkUm9vbS5yb29tSWRdO1xuICAgICAgICAgICAgc3RhdGUub2ZmKE5vdGlmaWNhdGlvblN0YXRlRXZlbnRzLlVwZGF0ZSwgdGhpcy5vblJvb21Ob3RpZmljYXRpb25TdGF0ZVVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBuZXdSb29tIG9mIGRpZmYuYWRkZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRSb29tRm4obmV3Um9vbSk7XG4gICAgICAgICAgICBzdGF0ZS5vbihOb3RpZmljYXRpb25TdGF0ZUV2ZW50cy5VcGRhdGUsIHRoaXMub25Sb29tTm90aWZpY2F0aW9uU3RhdGVVcGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZXNbbmV3Um9vbS5yb29tSWRdID0gc3RhdGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsU3RhdGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9yUm9vbShyb29tOiBSb29tKTogUm9vbU5vdGlmaWNhdGlvblN0YXRlIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlc1tyb29tLnJvb21JZF07XG4gICAgICAgIGlmICghc3RhdGUpIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gcm9vbSBmb3Igbm90aWZpY2F0aW9uIHN0YXRlXCIpO1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICAgICAgZm9yIChjb25zdCBzdGF0ZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3RhdGVzKSkge1xuICAgICAgICAgICAgc3RhdGUub2ZmKE5vdGlmaWNhdGlvblN0YXRlRXZlbnRzLlVwZGF0ZSwgdGhpcy5vblJvb21Ob3RpZmljYXRpb25TdGF0ZVVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZXMgPSB7fTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uUm9vbU5vdGlmaWNhdGlvblN0YXRlVXBkYXRlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsU3RhdGUoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVUb3RhbFN0YXRlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzbmFwc2hvdCA9IHRoaXMuc25hcHNob3QoKTtcblxuICAgICAgICBpZiAodGhpcy5ieVRpbGVDb3VudCkge1xuICAgICAgICAgICAgdGhpcy5fbGV2ZWwgPSBOb3RpZmljYXRpb25MZXZlbC5IaWdobGlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9jb3VudCA9IHRoaXMucm9vbXMubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY291bnQgPSAwO1xuICAgICAgICAgICAgdGhpcy5fbGV2ZWwgPSBOb3RpZmljYXRpb25MZXZlbC5Ob25lO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdGF0ZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3RhdGVzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvdW50ICs9IHN0YXRlLmNvdW50O1xuICAgICAgICAgICAgICAgIHRoaXMuX2xldmVsID0gTWF0aC5tYXgodGhpcy5sZXZlbCwgc3RhdGUubGV2ZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmluYWxseSwgcHVibGlzaCBhbiB1cGRhdGUgaWYgbmVlZGVkXG4gICAgICAgIHRoaXMuZW1pdElmVXBkYXRlZChzbmFwc2hvdCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVVBLElBQUFBLGtCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxrQkFBQSxHQUFBRixPQUFBO0FBYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBV08sTUFBTUcscUJBQXFCLFNBQVNDLG9DQUFpQixDQUFDO0VBSWxEQyxXQUFXQSxDQUNOQyxXQUFXLEdBQUcsS0FBSyxFQUNuQkMsU0FBc0IsRUFDaEM7SUFDRSxLQUFLLENBQUMsQ0FBQztJQUFDLElBQUFDLGdCQUFBLENBQUFDLE9BQUEsaUJBUFksRUFBRTtJQUFBLElBQUFELGdCQUFBLENBQUFDLE9BQUEsa0JBQ29DLENBQUMsQ0FBQztJQUFBLElBQUFELGdCQUFBLENBQUFDLE9BQUEseUNBcUR4QixNQUFZO01BQ2hELElBQUksQ0FBQ0MsbUJBQW1CLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQUEsS0FwRFdKLFdBQVcsR0FBWEEsV0FBVztJQUFBLEtBQ1hDLFNBQXNCLEdBQXRCQSxTQUFzQjtFQUdsQztFQUVBLElBQVdJLE1BQU1BLENBQUEsRUFBa0I7SUFDL0IsT0FBTyxJQUFJLENBQUNDLE1BQU0sS0FBS0Msb0NBQWlCLENBQUNDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSTtFQUNoRTtFQUVPQyxRQUFRQSxDQUFDQyxLQUFhLEVBQVE7SUFDakM7SUFDQSxJQUFJLElBQUksQ0FBQ1YsV0FBVyxFQUFFO01BQ2xCLElBQUksQ0FBQ1UsS0FBSyxHQUFHQSxLQUFLO01BQ2xCLElBQUksQ0FBQ04sbUJBQW1CLENBQUMsQ0FBQztNQUMxQjtJQUNKO0lBRUEsTUFBTU8sUUFBUSxHQUFHLElBQUksQ0FBQ0QsS0FBSztJQUMzQixNQUFNRSxJQUFJLEdBQUcsSUFBQUMsaUJBQVMsRUFBQ0YsUUFBUSxFQUFFRCxLQUFLLENBQUM7SUFDdkMsSUFBSSxDQUFDQSxLQUFLLEdBQUcsQ0FBQyxHQUFHQSxLQUFLLENBQUM7SUFDdkIsS0FBSyxNQUFNSSxPQUFPLElBQUlGLElBQUksQ0FBQ0csT0FBTyxFQUFFO01BQ2hDLE1BQU1DLEtBQUssR0FBRyxJQUFJLENBQUNDLE1BQU0sQ0FBQ0gsT0FBTyxDQUFDSSxNQUFNLENBQUM7TUFDekMsSUFBSSxDQUFDRixLQUFLLEVBQUUsU0FBUyxDQUFDO01BQ3RCLE9BQU8sSUFBSSxDQUFDQyxNQUFNLENBQUNILE9BQU8sQ0FBQ0ksTUFBTSxDQUFDO01BQ2xDRixLQUFLLENBQUNHLEdBQUcsQ0FBQ0MsMENBQXVCLENBQUNDLE1BQU0sRUFBRSxJQUFJLENBQUNDLDZCQUE2QixDQUFDO0lBQ2pGO0lBQ0EsS0FBSyxNQUFNQyxPQUFPLElBQUlYLElBQUksQ0FBQ1ksS0FBSyxFQUFFO01BQzlCLE1BQU1SLEtBQUssR0FBRyxJQUFJLENBQUNmLFNBQVMsQ0FBQ3NCLE9BQU8sQ0FBQztNQUNyQ1AsS0FBSyxDQUFDUyxFQUFFLENBQUNMLDBDQUF1QixDQUFDQyxNQUFNLEVBQUUsSUFBSSxDQUFDQyw2QkFBNkIsQ0FBQztNQUM1RSxJQUFJLENBQUNMLE1BQU0sQ0FBQ00sT0FBTyxDQUFDTCxNQUFNLENBQUMsR0FBR0YsS0FBSztJQUN2QztJQUVBLElBQUksQ0FBQ1osbUJBQW1CLENBQUMsQ0FBQztFQUM5QjtFQUVPc0IsVUFBVUEsQ0FBQ0MsSUFBVSxFQUF5QjtJQUNqRCxNQUFNWCxLQUFLLEdBQUcsSUFBSSxDQUFDQyxNQUFNLENBQUNVLElBQUksQ0FBQ1QsTUFBTSxDQUFDO0lBQ3RDLElBQUksQ0FBQ0YsS0FBSyxFQUFFLE1BQU0sSUFBSVksS0FBSyxDQUFDLHFDQUFxQyxDQUFDO0lBQ2xFLE9BQU9aLEtBQUs7RUFDaEI7RUFFT2EsT0FBT0EsQ0FBQSxFQUFTO0lBQ25CLEtBQUssQ0FBQ0EsT0FBTyxDQUFDLENBQUM7SUFDZixLQUFLLE1BQU1iLEtBQUssSUFBSWMsTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDZCxNQUFNLENBQUMsRUFBRTtNQUM1Q0QsS0FBSyxDQUFDRyxHQUFHLENBQUNDLDBDQUF1QixDQUFDQyxNQUFNLEVBQUUsSUFBSSxDQUFDQyw2QkFBNkIsQ0FBQztJQUNqRjtJQUNBLElBQUksQ0FBQ0wsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUNwQjtFQU1RYixtQkFBbUJBLENBQUEsRUFBUztJQUNoQyxNQUFNNEIsUUFBUSxHQUFHLElBQUksQ0FBQ0EsUUFBUSxDQUFDLENBQUM7SUFFaEMsSUFBSSxJQUFJLENBQUNoQyxXQUFXLEVBQUU7TUFDbEIsSUFBSSxDQUFDTSxNQUFNLEdBQUdDLG9DQUFpQixDQUFDMEIsU0FBUztNQUN6QyxJQUFJLENBQUNDLE1BQU0sR0FBRyxJQUFJLENBQUN4QixLQUFLLENBQUN5QixNQUFNO0lBQ25DLENBQUMsTUFBTTtNQUNILElBQUksQ0FBQ0QsTUFBTSxHQUFHLENBQUM7TUFDZixJQUFJLENBQUM1QixNQUFNLEdBQUdDLG9DQUFpQixDQUFDNkIsSUFBSTtNQUNwQyxLQUFLLE1BQU1wQixLQUFLLElBQUljLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLElBQUksQ0FBQ2QsTUFBTSxDQUFDLEVBQUU7UUFDNUMsSUFBSSxDQUFDaUIsTUFBTSxJQUFJbEIsS0FBSyxDQUFDcUIsS0FBSztRQUMxQixJQUFJLENBQUMvQixNQUFNLEdBQUdnQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxJQUFJLENBQUNDLEtBQUssRUFBRXhCLEtBQUssQ0FBQ3dCLEtBQUssQ0FBQztNQUNuRDtJQUNKOztJQUVBO0lBQ0EsSUFBSSxDQUFDQyxhQUFhLENBQUNULFFBQVEsQ0FBQztFQUNoQztBQUNKO0FBQUNVLE9BQUEsQ0FBQTdDLHFCQUFBLEdBQUFBLHFCQUFBIiwiaWdub3JlTGlzdCI6W119