UNPKG

matrix-react-sdk

Version:
82 lines (73 loc) 9.04 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.OrderingAlgorithm = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _logger = require("matrix-js-sdk/src/logger"); var _models = require("../models"); /* Copyright 2024 New Vector Ltd. Copyright 2020 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. */ /** * Represents a list ordering algorithm. Subclasses should populate the * `cachedOrderedRooms` field. */ class OrderingAlgorithm { constructor(tagId, initialSortingAlgorithm) { (0, _defineProperty2.default)(this, "cachedOrderedRooms", []); // set by setSortAlgorithm() in ctor (0, _defineProperty2.default)(this, "sortingAlgorithm", void 0); this.tagId = tagId; // noinspection JSIgnoredPromiseFromCall this.setSortAlgorithm(initialSortingAlgorithm); // we use the setter for validation } /** * The rooms as ordered by the algorithm. */ get orderedRooms() { return this.cachedOrderedRooms; } get isMutedToBottom() { return this.sortingAlgorithm === _models.SortAlgorithm.Recent; } /** * Sets the sorting algorithm to use within the list. * @param newAlgorithm The new algorithm. Must be defined. * @returns Resolves when complete. */ setSortAlgorithm(newAlgorithm) { if (!newAlgorithm) throw new Error("A sorting algorithm must be defined"); this.sortingAlgorithm = newAlgorithm; // Force regeneration of the rooms this.setRooms(this.orderedRooms); } /** * Sets the rooms the algorithm should be handling, implying a reconstruction * of the ordering. * @param rooms The rooms to use going forward. */ /** * Handle a room update. The Algorithm will only call this for causes which * the list ordering algorithm can handle within the same tag. For example, * tag changes will not be sent here. * @param room The room where the update happened. * @param cause The cause of the update. * @returns True if the update requires the Algorithm to update the presentation layers. */ getRoomIndex(room) { let roomIdx = this.cachedOrderedRooms.indexOf(room); if (roomIdx === -1) { // can only happen if the js-sdk's store goes sideways. _logger.logger.warn(`Degrading performance to find missing room in "${this.tagId}": ${room.roomId}`); roomIdx = this.cachedOrderedRooms.findIndex(r => r.roomId === room.roomId); } return roomIdx; } } exports.OrderingAlgorithm = OrderingAlgorithm; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwicmVxdWlyZSIsIl9tb2RlbHMiLCJPcmRlcmluZ0FsZ29yaXRobSIsImNvbnN0cnVjdG9yIiwidGFnSWQiLCJpbml0aWFsU29ydGluZ0FsZ29yaXRobSIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0Iiwic2V0U29ydEFsZ29yaXRobSIsIm9yZGVyZWRSb29tcyIsImNhY2hlZE9yZGVyZWRSb29tcyIsImlzTXV0ZWRUb0JvdHRvbSIsInNvcnRpbmdBbGdvcml0aG0iLCJTb3J0QWxnb3JpdGhtIiwiUmVjZW50IiwibmV3QWxnb3JpdGhtIiwiRXJyb3IiLCJzZXRSb29tcyIsImdldFJvb21JbmRleCIsInJvb20iLCJyb29tSWR4IiwiaW5kZXhPZiIsImxvZ2dlciIsIndhcm4iLCJyb29tSWQiLCJmaW5kSW5kZXgiLCJyIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zdG9yZXMvcm9vbS1saXN0L2FsZ29yaXRobXMvbGlzdC1vcmRlcmluZy9PcmRlcmluZ0FsZ29yaXRobS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBSb29tIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL2xvZ2dlclwiO1xuXG5pbXBvcnQgeyBSb29tVXBkYXRlQ2F1c2UsIFRhZ0lEIH0gZnJvbSBcIi4uLy4uL21vZGVsc1wiO1xuaW1wb3J0IHsgU29ydEFsZ29yaXRobSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbGlzdCBvcmRlcmluZyBhbGdvcml0aG0uIFN1YmNsYXNzZXMgc2hvdWxkIHBvcHVsYXRlIHRoZVxuICogYGNhY2hlZE9yZGVyZWRSb29tc2AgZmllbGQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPcmRlcmluZ0FsZ29yaXRobSB7XG4gICAgcHJvdGVjdGVkIGNhY2hlZE9yZGVyZWRSb29tczogUm9vbVtdID0gW107XG5cbiAgICAvLyBzZXQgYnkgc2V0U29ydEFsZ29yaXRobSgpIGluIGN0b3JcbiAgICBwcm90ZWN0ZWQgc29ydGluZ0FsZ29yaXRobSE6IFNvcnRBbGdvcml0aG07XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCB0YWdJZDogVGFnSUQsXG4gICAgICAgIGluaXRpYWxTb3J0aW5nQWxnb3JpdGhtOiBTb3J0QWxnb3JpdGhtLFxuICAgICkge1xuICAgICAgICAvLyBub2luc3BlY3Rpb24gSlNJZ25vcmVkUHJvbWlzZUZyb21DYWxsXG4gICAgICAgIHRoaXMuc2V0U29ydEFsZ29yaXRobShpbml0aWFsU29ydGluZ0FsZ29yaXRobSk7IC8vIHdlIHVzZSB0aGUgc2V0dGVyIGZvciB2YWxpZGF0aW9uXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHJvb21zIGFzIG9yZGVyZWQgYnkgdGhlIGFsZ29yaXRobS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG9yZGVyZWRSb29tcygpOiBSb29tW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRPcmRlcmVkUm9vbXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc011dGVkVG9Cb3R0b20oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvcnRpbmdBbGdvcml0aG0gPT09IFNvcnRBbGdvcml0aG0uUmVjZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNvcnRpbmcgYWxnb3JpdGhtIHRvIHVzZSB3aXRoaW4gdGhlIGxpc3QuXG4gICAgICogQHBhcmFtIG5ld0FsZ29yaXRobSBUaGUgbmV3IGFsZ29yaXRobS4gTXVzdCBiZSBkZWZpbmVkLlxuICAgICAqIEByZXR1cm5zIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAgICovXG4gICAgcHVibGljIHNldFNvcnRBbGdvcml0aG0obmV3QWxnb3JpdGhtOiBTb3J0QWxnb3JpdGhtKTogdm9pZCB7XG4gICAgICAgIGlmICghbmV3QWxnb3JpdGhtKSB0aHJvdyBuZXcgRXJyb3IoXCJBIHNvcnRpbmcgYWxnb3JpdGhtIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgdGhpcy5zb3J0aW5nQWxnb3JpdGhtID0gbmV3QWxnb3JpdGhtO1xuXG4gICAgICAgIC8vIEZvcmNlIHJlZ2VuZXJhdGlvbiBvZiB0aGUgcm9vbXNcbiAgICAgICAgdGhpcy5zZXRSb29tcyh0aGlzLm9yZGVyZWRSb29tcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcm9vbXMgdGhlIGFsZ29yaXRobSBzaG91bGQgYmUgaGFuZGxpbmcsIGltcGx5aW5nIGEgcmVjb25zdHJ1Y3Rpb25cbiAgICAgKiBvZiB0aGUgb3JkZXJpbmcuXG4gICAgICogQHBhcmFtIHJvb21zIFRoZSByb29tcyB0byB1c2UgZ29pbmcgZm9yd2FyZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3Qgc2V0Um9vbXMocm9vbXM6IFJvb21bXSk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgYSByb29tIHVwZGF0ZS4gVGhlIEFsZ29yaXRobSB3aWxsIG9ubHkgY2FsbCB0aGlzIGZvciBjYXVzZXMgd2hpY2hcbiAgICAgKiB0aGUgbGlzdCBvcmRlcmluZyBhbGdvcml0aG0gY2FuIGhhbmRsZSB3aXRoaW4gdGhlIHNhbWUgdGFnLiBGb3IgZXhhbXBsZSxcbiAgICAgKiB0YWcgY2hhbmdlcyB3aWxsIG5vdCBiZSBzZW50IGhlcmUuXG4gICAgICogQHBhcmFtIHJvb20gVGhlIHJvb20gd2hlcmUgdGhlIHVwZGF0ZSBoYXBwZW5lZC5cbiAgICAgKiBAcGFyYW0gY2F1c2UgVGhlIGNhdXNlIG9mIHRoZSB1cGRhdGUuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdXBkYXRlIHJlcXVpcmVzIHRoZSBBbGdvcml0aG0gdG8gdXBkYXRlIHRoZSBwcmVzZW50YXRpb24gbGF5ZXJzLlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBoYW5kbGVSb29tVXBkYXRlKHJvb206IFJvb20sIGNhdXNlOiBSb29tVXBkYXRlQ2F1c2UpOiBib29sZWFuO1xuXG4gICAgcHJvdGVjdGVkIGdldFJvb21JbmRleChyb29tOiBSb29tKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHJvb21JZHggPSB0aGlzLmNhY2hlZE9yZGVyZWRSb29tcy5pbmRleE9mKHJvb20pO1xuICAgICAgICBpZiAocm9vbUlkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUganMtc2RrJ3Mgc3RvcmUgZ29lcyBzaWRld2F5cy5cbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBEZWdyYWRpbmcgcGVyZm9ybWFuY2UgdG8gZmluZCBtaXNzaW5nIHJvb20gaW4gXCIke3RoaXMudGFnSWR9XCI6ICR7cm9vbS5yb29tSWR9YCk7XG4gICAgICAgICAgICByb29tSWR4ID0gdGhpcy5jYWNoZWRPcmRlcmVkUm9vbXMuZmluZEluZGV4KChyKSA9PiByLnJvb21JZCA9PT0gcm9vbS5yb29tSWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb29tSWR4O1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFTQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFHQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQWVFLGlCQUFpQixDQUFDO0VBTTFCQyxXQUFXQSxDQUNQQyxLQUFZLEVBQ3RCQyx1QkFBc0MsRUFDeEM7SUFBQSxJQUFBQyxnQkFBQSxDQUFBQyxPQUFBLDhCQVJxQyxFQUFFO0lBRXpDO0lBQUEsSUFBQUQsZ0JBQUEsQ0FBQUMsT0FBQTtJQUFBLEtBSWNILEtBQVksR0FBWkEsS0FBWTtJQUd0QjtJQUNBLElBQUksQ0FBQ0ksZ0JBQWdCLENBQUNILHVCQUF1QixDQUFDLENBQUMsQ0FBQztFQUNwRDs7RUFFQTtBQUNKO0FBQ0E7RUFDSSxJQUFXSSxZQUFZQSxDQUFBLEVBQVc7SUFDOUIsT0FBTyxJQUFJLENBQUNDLGtCQUFrQjtFQUNsQztFQUVBLElBQVdDLGVBQWVBLENBQUEsRUFBWTtJQUNsQyxPQUFPLElBQUksQ0FBQ0MsZ0JBQWdCLEtBQUtDLHFCQUFhLENBQUNDLE1BQU07RUFDekQ7O0VBRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtFQUNXTixnQkFBZ0JBLENBQUNPLFlBQTJCLEVBQVE7SUFDdkQsSUFBSSxDQUFDQSxZQUFZLEVBQUUsTUFBTSxJQUFJQyxLQUFLLENBQUMscUNBQXFDLENBQUM7SUFDekUsSUFBSSxDQUFDSixnQkFBZ0IsR0FBR0csWUFBWTs7SUFFcEM7SUFDQSxJQUFJLENBQUNFLFFBQVEsQ0FBQyxJQUFJLENBQUNSLFlBQVksQ0FBQztFQUNwQzs7RUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztFQUdJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBR2NTLFlBQVlBLENBQUNDLElBQVUsRUFBVTtJQUN2QyxJQUFJQyxPQUFPLEdBQUcsSUFBSSxDQUFDVixrQkFBa0IsQ0FBQ1csT0FBTyxDQUFDRixJQUFJLENBQUM7SUFDbkQsSUFBSUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFO01BQ2hCO01BQ0FFLGNBQU0sQ0FBQ0MsSUFBSSxDQUFDLGtEQUFrRCxJQUFJLENBQUNuQixLQUFLLE1BQU1lLElBQUksQ0FBQ0ssTUFBTSxFQUFFLENBQUM7TUFDNUZKLE9BQU8sR0FBRyxJQUFJLENBQUNWLGtCQUFrQixDQUFDZSxTQUFTLENBQUVDLENBQUMsSUFBS0EsQ0FBQyxDQUFDRixNQUFNLEtBQUtMLElBQUksQ0FBQ0ssTUFBTSxDQUFDO0lBQ2hGO0lBQ0EsT0FBT0osT0FBTztFQUNsQjtBQUNKO0FBQUNPLE9BQUEsQ0FBQXpCLGlCQUFBLEdBQUFBLGlCQUFBIiwiaWdub3JlTGlzdCI6W119