UNPKG

matrix-react-sdk

Version:
62 lines (56 loc) 5.12 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.MarkedExecution = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); /* 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. */ /** * A utility to ensure that a function is only called once triggered with * a mark applied. Multiple marks can be applied to the function, however * the function will only be called once upon trigger(). * * The function starts unmarked. */ class MarkedExecution { /** * Creates a MarkedExecution for the provided function. * @param {Function} fn The function to be called upon trigger if marked. * @param {Function} onMarkCallback A function that is called when a new mark is made. Not * called if a mark is already flagged. */ constructor(fn, onMarkCallback) { (0, _defineProperty2.default)(this, "marked", false); this.fn = fn; this.onMarkCallback = onMarkCallback; } /** * Resets the mark without calling the function. */ reset() { this.marked = false; } /** * Marks the function to be called upon trigger(). */ mark() { if (!this.marked) this.onMarkCallback?.(); this.marked = true; } /** * If marked, the function will be called, otherwise this does nothing. */ trigger() { if (!this.marked) return; this.reset(); // reset first just in case the fn() causes a trigger() this.fn(); } } exports.MarkedExecution = MarkedExecution; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXJrZWRFeGVjdXRpb24iLCJjb25zdHJ1Y3RvciIsImZuIiwib25NYXJrQ2FsbGJhY2siLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsInJlc2V0IiwibWFya2VkIiwibWFyayIsInRyaWdnZXIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL01hcmtlZEV4ZWN1dGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG4vKipcbiAqIEEgdXRpbGl0eSB0byBlbnN1cmUgdGhhdCBhIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uY2UgdHJpZ2dlcmVkIHdpdGhcbiAqIGEgbWFyayBhcHBsaWVkLiBNdWx0aXBsZSBtYXJrcyBjYW4gYmUgYXBwbGllZCB0byB0aGUgZnVuY3Rpb24sIGhvd2V2ZXJcbiAqIHRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgYmUgY2FsbGVkIG9uY2UgdXBvbiB0cmlnZ2VyKCkuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHN0YXJ0cyB1bm1hcmtlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hcmtlZEV4ZWN1dGlvbiB7XG4gICAgcHJpdmF0ZSBtYXJrZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBNYXJrZWRFeGVjdXRpb24gZm9yIHRoZSBwcm92aWRlZCBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHVwb24gdHJpZ2dlciBpZiBtYXJrZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25NYXJrQ2FsbGJhY2sgQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgbmV3IG1hcmsgaXMgbWFkZS4gTm90XG4gICAgICogY2FsbGVkIGlmIGEgbWFyayBpcyBhbHJlYWR5IGZsYWdnZWQuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGZuOiAoKSA9PiB2b2lkLFxuICAgICAgICBwcml2YXRlIG9uTWFya0NhbGxiYWNrPzogKCkgPT4gdm9pZCxcbiAgICApIHt9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIG1hcmsgd2l0aG91dCBjYWxsaW5nIHRoZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWFya2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFya3MgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB1cG9uIHRyaWdnZXIoKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFyaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hcmtlZCkgdGhpcy5vbk1hcmtDYWxsYmFjaz8uKCk7XG4gICAgICAgIHRoaXMubWFya2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiBtYXJrZWQsIHRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCwgb3RoZXJ3aXNlIHRoaXMgZG9lcyBub3RoaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubWFya2VkKSByZXR1cm47XG4gICAgICAgIHRoaXMucmVzZXQoKTsgLy8gcmVzZXQgZmlyc3QganVzdCBpbiBjYXNlIHRoZSBmbigpIGNhdXNlcyBhIHRyaWdnZXIoKVxuICAgICAgICB0aGlzLmZuKCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUEsZUFBZSxDQUFDO0VBR3pCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNXQyxXQUFXQSxDQUNOQyxFQUFjLEVBQ2RDLGNBQTJCLEVBQ3JDO0lBQUEsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQSxrQkFYZSxLQUFLO0lBQUEsS0FTVkgsRUFBYyxHQUFkQSxFQUFjO0lBQUEsS0FDZEMsY0FBMkIsR0FBM0JBLGNBQTJCO0VBQ3BDOztFQUVIO0FBQ0o7QUFDQTtFQUNXRyxLQUFLQSxDQUFBLEVBQVM7SUFDakIsSUFBSSxDQUFDQyxNQUFNLEdBQUcsS0FBSztFQUN2Qjs7RUFFQTtBQUNKO0FBQ0E7RUFDV0MsSUFBSUEsQ0FBQSxFQUFTO0lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUNELE1BQU0sRUFBRSxJQUFJLENBQUNKLGNBQWMsR0FBRyxDQUFDO0lBQ3pDLElBQUksQ0FBQ0ksTUFBTSxHQUFHLElBQUk7RUFDdEI7O0VBRUE7QUFDSjtBQUNBO0VBQ1dFLE9BQU9BLENBQUEsRUFBUztJQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDRixNQUFNLEVBQUU7SUFDbEIsSUFBSSxDQUFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxJQUFJLENBQUNKLEVBQUUsQ0FBQyxDQUFDO0VBQ2I7QUFDSjtBQUFDUSxPQUFBLENBQUFWLGVBQUEsR0FBQUEsZUFBQSIsImlnbm9yZUxpc3QiOltdfQ==