matrix-react-sdk
Version:
SDK for matrix.org using React
62 lines (56 loc) • 5.12 kB
JavaScript
;
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==