matrix-react-sdk
Version:
SDK for matrix.org using React
79 lines (75 loc) • 9.22 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _events = _interopRequireDefault(require("events"));
/*
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.
*/
/**
* Holds the active toasts
*/
class ToastStore extends _events.default {
constructor(...args) {
super(...args);
(0, _defineProperty2.default)(this, "toasts", []);
// The count of toasts which have been seen & dealt with in this stack
// where the count resets when the stack of toasts clears.
(0, _defineProperty2.default)(this, "countSeen", 0);
}
static sharedInstance() {
if (!window.mxToastStore) window.mxToastStore = new ToastStore();
return window.mxToastStore;
}
reset() {
this.toasts = [];
this.countSeen = 0;
}
/**
* Add or replace a toast
* If a toast with the same toastKey already exists, the given toast will replace it
* Toasts are always added underneath any toasts of the same priority, so existing
* toasts stay at the top unless a higher priority one arrives (better to not change the
* toast unless necessary).
*
* @param {object} newToast The new toast
*/
addOrReplaceToast(newToast) {
const oldIndex = this.toasts.findIndex(t => t.key === newToast.key);
if (oldIndex === -1) {
let newIndex = this.toasts.length;
while (newIndex > 0 && this.toasts[newIndex - 1].priority < newToast.priority) --newIndex;
this.toasts.splice(newIndex, 0, newToast);
} else {
this.toasts[oldIndex] = newToast;
}
this.emit("update");
}
dismissToast(key) {
if (this.toasts[0] && this.toasts[0].key === key) {
this.countSeen++;
}
const length = this.toasts.length;
this.toasts = this.toasts.filter(t => t.key !== key);
if (length !== this.toasts.length) {
if (this.toasts.length === 0) {
this.countSeen = 0;
}
this.emit("update");
}
}
getToasts() {
return this.toasts;
}
getCountSeen() {
return this.countSeen;
}
}
exports.default = ToastStore;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJUb2FzdFN0b3JlIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJhcmdzIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJzaGFyZWRJbnN0YW5jZSIsIndpbmRvdyIsIm14VG9hc3RTdG9yZSIsInJlc2V0IiwidG9hc3RzIiwiY291bnRTZWVuIiwiYWRkT3JSZXBsYWNlVG9hc3QiLCJuZXdUb2FzdCIsIm9sZEluZGV4IiwiZmluZEluZGV4IiwidCIsImtleSIsIm5ld0luZGV4IiwibGVuZ3RoIiwicHJpb3JpdHkiLCJzcGxpY2UiLCJlbWl0IiwiZGlzbWlzc1RvYXN0IiwiZmlsdGVyIiwiZ2V0VG9hc3RzIiwiZ2V0Q291bnRTZWVuIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZXMvVG9hc3RTdG9yZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQ29tcG9uZW50Q2xhc3MgfSBmcm9tIFwiLi4vQHR5cGVzL2NvbW1vblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUb2FzdDxDIGV4dGVuZHMgQ29tcG9uZW50Q2xhc3M+IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICAvLyBoaWdoZXIgcHJpb3JpdHkgbnVtYmVyIHdpbGwgYmUgc2hvd24gb24gdG9wIG9mIGxvd2VyIHByaW9yaXR5XG4gICAgcHJpb3JpdHk6IG51bWJlcjtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIGNvbXBvbmVudDogQztcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgYm9keUNsYXNzTmFtZT86IHN0cmluZztcbiAgICBwcm9wcz86IE9taXQ8UmVhY3QuQ29tcG9uZW50UHJvcHM8Qz4sIFwidG9hc3RLZXlcIj47IC8vIHRvYXN0S2V5IGlzIGluamVjdGVkIGJ5IFRvYXN0Q29udGFpbmVyXG59XG5cbi8qKlxuICogSG9sZHMgdGhlIGFjdGl2ZSB0b2FzdHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9hc3RTdG9yZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSB0b2FzdHM6IElUb2FzdDxhbnk+W10gPSBbXTtcbiAgICAvLyBUaGUgY291bnQgb2YgdG9hc3RzIHdoaWNoIGhhdmUgYmVlbiBzZWVuICYgZGVhbHQgd2l0aCBpbiB0aGlzIHN0YWNrXG4gICAgLy8gd2hlcmUgdGhlIGNvdW50IHJlc2V0cyB3aGVuIHRoZSBzdGFjayBvZiB0b2FzdHMgY2xlYXJzLlxuICAgIHByaXZhdGUgY291bnRTZWVuID0gMDtcblxuICAgIHB1YmxpYyBzdGF0aWMgc2hhcmVkSW5zdGFuY2UoKTogVG9hc3RTdG9yZSB7XG4gICAgICAgIGlmICghd2luZG93Lm14VG9hc3RTdG9yZSkgd2luZG93Lm14VG9hc3RTdG9yZSA9IG5ldyBUb2FzdFN0b3JlKCk7XG4gICAgICAgIHJldHVybiB3aW5kb3cubXhUb2FzdFN0b3JlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2FzdHMgPSBbXTtcbiAgICAgICAgdGhpcy5jb3VudFNlZW4gPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBvciByZXBsYWNlIGEgdG9hc3RcbiAgICAgKiBJZiBhIHRvYXN0IHdpdGggdGhlIHNhbWUgdG9hc3RLZXkgYWxyZWFkeSBleGlzdHMsIHRoZSBnaXZlbiB0b2FzdCB3aWxsIHJlcGxhY2UgaXRcbiAgICAgKiBUb2FzdHMgYXJlIGFsd2F5cyBhZGRlZCB1bmRlcm5lYXRoIGFueSB0b2FzdHMgb2YgdGhlIHNhbWUgcHJpb3JpdHksIHNvIGV4aXN0aW5nXG4gICAgICogdG9hc3RzIHN0YXkgYXQgdGhlIHRvcCB1bmxlc3MgYSBoaWdoZXIgcHJpb3JpdHkgb25lIGFycml2ZXMgKGJldHRlciB0byBub3QgY2hhbmdlIHRoZVxuICAgICAqIHRvYXN0IHVubGVzcyBuZWNlc3NhcnkpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG5ld1RvYXN0IFRoZSBuZXcgdG9hc3RcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkT3JSZXBsYWNlVG9hc3Q8QyBleHRlbmRzIENvbXBvbmVudENsYXNzPihuZXdUb2FzdDogSVRvYXN0PEM+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZEluZGV4ID0gdGhpcy50b2FzdHMuZmluZEluZGV4KCh0KSA9PiB0LmtleSA9PT0gbmV3VG9hc3Qua2V5KTtcbiAgICAgICAgaWYgKG9sZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgbGV0IG5ld0luZGV4ID0gdGhpcy50b2FzdHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKG5ld0luZGV4ID4gMCAmJiB0aGlzLnRvYXN0c1tuZXdJbmRleCAtIDFdLnByaW9yaXR5IDwgbmV3VG9hc3QucHJpb3JpdHkpIC0tbmV3SW5kZXg7XG4gICAgICAgICAgICB0aGlzLnRvYXN0cy5zcGxpY2UobmV3SW5kZXgsIDAsIG5ld1RvYXN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RzW29sZEluZGV4XSA9IG5ld1RvYXN0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdChcInVwZGF0ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzbWlzc1RvYXN0KGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRvYXN0c1swXSAmJiB0aGlzLnRvYXN0c1swXS5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgdGhpcy5jb3VudFNlZW4rKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMudG9hc3RzLmxlbmd0aDtcbiAgICAgICAgdGhpcy50b2FzdHMgPSB0aGlzLnRvYXN0cy5maWx0ZXIoKHQpID0+IHQua2V5ICE9PSBrZXkpO1xuICAgICAgICBpZiAobGVuZ3RoICE9PSB0aGlzLnRvYXN0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRvYXN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50U2VlbiA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZW1pdChcInVwZGF0ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb2FzdHMoKTogSVRvYXN0PGFueT5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvYXN0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q291bnRTZWVuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50U2VlbjtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBbUJBO0FBQ0E7QUFDQTtBQUNlLE1BQU1DLFVBQVUsU0FBU0MsZUFBWSxDQUFDO0VBQUFDLFlBQUEsR0FBQUMsSUFBQTtJQUFBLFNBQUFBLElBQUE7SUFBQSxJQUFBQyxnQkFBQSxDQUFBQyxPQUFBLGtCQUNqQixFQUFFO0lBQ2xDO0lBQ0E7SUFBQSxJQUFBRCxnQkFBQSxDQUFBQyxPQUFBLHFCQUNvQixDQUFDO0VBQUE7RUFFckIsT0FBY0MsY0FBY0EsQ0FBQSxFQUFlO0lBQ3ZDLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxZQUFZLEVBQUVELE1BQU0sQ0FBQ0MsWUFBWSxHQUFHLElBQUlSLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLE9BQU9PLE1BQU0sQ0FBQ0MsWUFBWTtFQUM5QjtFQUVPQyxLQUFLQSxDQUFBLEVBQVM7SUFDakIsSUFBSSxDQUFDQyxNQUFNLEdBQUcsRUFBRTtJQUNoQixJQUFJLENBQUNDLFNBQVMsR0FBRyxDQUFDO0VBQ3RCOztFQUVBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNXQyxpQkFBaUJBLENBQTJCQyxRQUFtQixFQUFRO0lBQzFFLE1BQU1DLFFBQVEsR0FBRyxJQUFJLENBQUNKLE1BQU0sQ0FBQ0ssU0FBUyxDQUFFQyxDQUFDLElBQUtBLENBQUMsQ0FBQ0MsR0FBRyxLQUFLSixRQUFRLENBQUNJLEdBQUcsQ0FBQztJQUNyRSxJQUFJSCxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUU7TUFDakIsSUFBSUksUUFBUSxHQUFHLElBQUksQ0FBQ1IsTUFBTSxDQUFDUyxNQUFNO01BQ2pDLE9BQU9ELFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDUixNQUFNLENBQUNRLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQ0UsUUFBUSxHQUFHUCxRQUFRLENBQUNPLFFBQVEsRUFBRSxFQUFFRixRQUFRO01BQ3pGLElBQUksQ0FBQ1IsTUFBTSxDQUFDVyxNQUFNLENBQUNILFFBQVEsRUFBRSxDQUFDLEVBQUVMLFFBQVEsQ0FBQztJQUM3QyxDQUFDLE1BQU07TUFDSCxJQUFJLENBQUNILE1BQU0sQ0FBQ0ksUUFBUSxDQUFDLEdBQUdELFFBQVE7SUFDcEM7SUFDQSxJQUFJLENBQUNTLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDdkI7RUFFT0MsWUFBWUEsQ0FBQ04sR0FBVyxFQUFRO0lBQ25DLElBQUksSUFBSSxDQUFDUCxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDQSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNPLEdBQUcsS0FBS0EsR0FBRyxFQUFFO01BQzlDLElBQUksQ0FBQ04sU0FBUyxFQUFFO0lBQ3BCO0lBRUEsTUFBTVEsTUFBTSxHQUFHLElBQUksQ0FBQ1QsTUFBTSxDQUFDUyxNQUFNO0lBQ2pDLElBQUksQ0FBQ1QsTUFBTSxHQUFHLElBQUksQ0FBQ0EsTUFBTSxDQUFDYyxNQUFNLENBQUVSLENBQUMsSUFBS0EsQ0FBQyxDQUFDQyxHQUFHLEtBQUtBLEdBQUcsQ0FBQztJQUN0RCxJQUFJRSxNQUFNLEtBQUssSUFBSSxDQUFDVCxNQUFNLENBQUNTLE1BQU0sRUFBRTtNQUMvQixJQUFJLElBQUksQ0FBQ1QsTUFBTSxDQUFDUyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzFCLElBQUksQ0FBQ1IsU0FBUyxHQUFHLENBQUM7TUFDdEI7TUFFQSxJQUFJLENBQUNXLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkI7RUFDSjtFQUVPRyxTQUFTQSxDQUFBLEVBQWtCO0lBQzlCLE9BQU8sSUFBSSxDQUFDZixNQUFNO0VBQ3RCO0VBRU9nQixZQUFZQSxDQUFBLEVBQVc7SUFDMUIsT0FBTyxJQUFJLENBQUNmLFNBQVM7RUFDekI7QUFDSjtBQUFDZ0IsT0FBQSxDQUFBdEIsT0FBQSxHQUFBTCxVQUFBIiwiaWdub3JlTGlzdCI6W119