UNPKG

matrix-react-sdk

Version:
90 lines (84 loc) 8.13 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.Whenable = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _logger = require("matrix-js-sdk/src/logger"); var _arrays = require("./arrays"); /* 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. */ /** * Whenables are a cheap way to have Observable patterns mixed with typical * usage of Promises, without having to tear down listeners or calls. Whenables * are intended to be used when a condition will be met multiple times and * the consumer needs to know *when* that happens. */ class Whenable { constructor() { (0, _defineProperty2.default)(this, "listeners", []); } /** * Sets up a call to `fn` *when* the `condition` is met. * @param condition The condition to match. * @param fn The function to call. * @returns This. */ when(condition, fn) { this.listeners.push({ condition, fn }); return this; } /** * Sets up a call to `fn` *when* any of the `conditions` are met. * @param conditions The conditions to match. * @param fn The function to call. * @returns This. */ whenAnyOf(conditions, fn) { for (const condition of conditions) { this.when(condition, fn); } return this; } /** * Sets up a call to `fn` *when* any condition is met. * @param fn The function to call. * @returns This. */ whenAnything(fn) { this.listeners.push({ condition: null, fn }); return this; } /** * Notifies all the listeners of a given condition. * @param condition The new condition that has been met. */ notifyCondition(condition) { const listeners = (0, _arrays.arrayFastClone)(this.listeners); // clone just in case the handler modifies us for (const listener of listeners) { if (listener.condition === null || listener.condition === condition) { try { listener.fn(this); } catch (e) { _logger.logger.error(`Error calling whenable listener for ${condition}:`, e); } } } } destroy() { this.listeners = []; } } exports.Whenable = Whenable; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwicmVxdWlyZSIsIl9hcnJheXMiLCJXaGVuYWJsZSIsImNvbnN0cnVjdG9yIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJ3aGVuIiwiY29uZGl0aW9uIiwiZm4iLCJsaXN0ZW5lcnMiLCJwdXNoIiwid2hlbkFueU9mIiwiY29uZGl0aW9ucyIsIndoZW5Bbnl0aGluZyIsIm5vdGlmeUNvbmRpdGlvbiIsImFycmF5RmFzdENsb25lIiwibGlzdGVuZXIiLCJlIiwibG9nZ2VyIiwiZXJyb3IiLCJkZXN0cm95IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9XaGVuYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbG9nZ2VyXCI7XG5cbmltcG9ydCB7IElEZXN0cm95YWJsZSB9IGZyb20gXCIuL0lEZXN0cm95YWJsZVwiO1xuaW1wb3J0IHsgYXJyYXlGYXN0Q2xvbmUgfSBmcm9tIFwiLi9hcnJheXNcIjtcblxuZXhwb3J0IHR5cGUgV2hlbkZuPFQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXI+ID0gKHc6IFdoZW5hYmxlPFQ+KSA9PiB2b2lkO1xuXG4vKipcbiAqIFdoZW5hYmxlcyBhcmUgYSBjaGVhcCB3YXkgdG8gaGF2ZSBPYnNlcnZhYmxlIHBhdHRlcm5zIG1peGVkIHdpdGggdHlwaWNhbFxuICogdXNhZ2Ugb2YgUHJvbWlzZXMsIHdpdGhvdXQgaGF2aW5nIHRvIHRlYXIgZG93biBsaXN0ZW5lcnMgb3IgY2FsbHMuIFdoZW5hYmxlc1xuICogYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgd2hlbiBhIGNvbmRpdGlvbiB3aWxsIGJlIG1ldCBtdWx0aXBsZSB0aW1lcyBhbmRcbiAqIHRoZSBjb25zdW1lciBuZWVkcyB0byBrbm93ICp3aGVuKiB0aGF0IGhhcHBlbnMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBXaGVuYWJsZTxUIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyPiBpbXBsZW1lbnRzIElEZXN0cm95YWJsZSB7XG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnM6IHsgY29uZGl0aW9uOiBUIHwgbnVsbDsgZm46IFdoZW5GbjxUPiB9W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdXAgYSBjYWxsIHRvIGBmbmAgKndoZW4qIHRoZSBgY29uZGl0aW9uYCBpcyBtZXQuXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIG1hdGNoLlxuICAgICAqIEBwYXJhbSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aGVuKGNvbmRpdGlvbjogVCwgZm46IFdoZW5GbjxUPik6IFdoZW5hYmxlPFQ+IHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh7IGNvbmRpdGlvbiwgZm4gfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdXAgYSBjYWxsIHRvIGBmbmAgKndoZW4qIGFueSBvZiB0aGUgYGNvbmRpdGlvbnNgIGFyZSBtZXQuXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbnMgVGhlIGNvbmRpdGlvbnMgdG8gbWF0Y2guXG4gICAgICogQHBhcmFtIGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsLlxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgcHVibGljIHdoZW5BbnlPZihjb25kaXRpb25zOiBUW10sIGZuOiBXaGVuRm48VD4pOiBXaGVuYWJsZTxUPiB7XG4gICAgICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMud2hlbihjb25kaXRpb24sIGZuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHVwIGEgY2FsbCB0byBgZm5gICp3aGVuKiBhbnkgY29uZGl0aW9uIGlzIG1ldC5cbiAgICAgKiBAcGFyYW0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2hlbkFueXRoaW5nKGZuOiBXaGVuRm48VD4pOiBXaGVuYWJsZTxUPiB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2goeyBjb25kaXRpb246IG51bGwsIGZuIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb3RpZmllcyBhbGwgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGNvbmRpdGlvbi5cbiAgICAgKiBAcGFyYW0gY29uZGl0aW9uIFRoZSBuZXcgY29uZGl0aW9uIHRoYXQgaGFzIGJlZW4gbWV0LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBub3RpZnlDb25kaXRpb24oY29uZGl0aW9uOiBUKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGFycmF5RmFzdENsb25lKHRoaXMubGlzdGVuZXJzKTsgLy8gY2xvbmUganVzdCBpbiBjYXNlIHRoZSBoYW5kbGVyIG1vZGlmaWVzIHVzXG4gICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgbGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBpZiAobGlzdGVuZXIuY29uZGl0aW9uID09PSBudWxsIHx8IGxpc3RlbmVyLmNvbmRpdGlvbiA9PT0gY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuZm4odGhpcyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIGNhbGxpbmcgd2hlbmFibGUgbGlzdGVuZXIgZm9yICR7Y29uZGl0aW9ufTpgLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBR0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBZUUsUUFBUSxDQUFvRDtFQUFBQyxZQUFBO0lBQUEsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQSxxQkFDaEIsRUFBRTtFQUFBO0VBRWhFO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNXQyxJQUFJQSxDQUFDQyxTQUFZLEVBQUVDLEVBQWEsRUFBZTtJQUNsRCxJQUFJLENBQUNDLFNBQVMsQ0FBQ0MsSUFBSSxDQUFDO01BQUVILFNBQVM7TUFBRUM7SUFBRyxDQUFDLENBQUM7SUFDdEMsT0FBTyxJQUFJO0VBQ2Y7O0VBRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ1dHLFNBQVNBLENBQUNDLFVBQWUsRUFBRUosRUFBYSxFQUFlO0lBQzFELEtBQUssTUFBTUQsU0FBUyxJQUFJSyxVQUFVLEVBQUU7TUFDaEMsSUFBSSxDQUFDTixJQUFJLENBQUNDLFNBQVMsRUFBRUMsRUFBRSxDQUFDO0lBQzVCO0lBQ0EsT0FBTyxJQUFJO0VBQ2Y7O0VBRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtFQUNXSyxZQUFZQSxDQUFDTCxFQUFhLEVBQWU7SUFDNUMsSUFBSSxDQUFDQyxTQUFTLENBQUNDLElBQUksQ0FBQztNQUFFSCxTQUFTLEVBQUUsSUFBSTtNQUFFQztJQUFHLENBQUMsQ0FBQztJQUM1QyxPQUFPLElBQUk7RUFDZjs7RUFFQTtBQUNKO0FBQ0E7QUFDQTtFQUNjTSxlQUFlQSxDQUFDUCxTQUFZLEVBQVE7SUFDMUMsTUFBTUUsU0FBUyxHQUFHLElBQUFNLHNCQUFjLEVBQUMsSUFBSSxDQUFDTixTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xELEtBQUssTUFBTU8sUUFBUSxJQUFJUCxTQUFTLEVBQUU7TUFDOUIsSUFBSU8sUUFBUSxDQUFDVCxTQUFTLEtBQUssSUFBSSxJQUFJUyxRQUFRLENBQUNULFNBQVMsS0FBS0EsU0FBUyxFQUFFO1FBQ2pFLElBQUk7VUFDQVMsUUFBUSxDQUFDUixFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxPQUFPUyxDQUFDLEVBQUU7VUFDUkMsY0FBTSxDQUFDQyxLQUFLLENBQUMsdUNBQXVDWixTQUFTLEdBQUcsRUFBRVUsQ0FBQyxDQUFDO1FBQ3hFO01BQ0o7SUFDSjtFQUNKO0VBRU9HLE9BQU9BLENBQUEsRUFBUztJQUNuQixJQUFJLENBQUNYLFNBQVMsR0FBRyxFQUFFO0VBQ3ZCO0FBQ0o7QUFBQ1ksT0FBQSxDQUFBbkIsUUFBQSxHQUFBQSxRQUFBIiwiaWdub3JlTGlzdCI6W119