matrix-react-sdk
Version:
SDK for matrix.org using React
92 lines (89 loc) • 12.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.UI_EVENTS = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _events = _interopRequireDefault(require("events"));
/*
Copyright 2024 New Vector Ltd.
Copyright 2021 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.
*/
let UI_EVENTS = exports.UI_EVENTS = /*#__PURE__*/function (UI_EVENTS) {
UI_EVENTS["Resize"] = "resize";
return UI_EVENTS;
}({});
class UIStore extends _events.default {
constructor() {
super();
// eslint-disable-next-line no-restricted-properties
(0, _defineProperty2.default)(this, "resizeObserver", void 0);
(0, _defineProperty2.default)(this, "uiElementDimensions", new Map());
(0, _defineProperty2.default)(this, "trackedUiElements", new Map());
(0, _defineProperty2.default)(this, "windowWidth", void 0);
(0, _defineProperty2.default)(this, "windowHeight", void 0);
(0, _defineProperty2.default)(this, "resizeObserverCallback", entries => {
const windowEntry = entries.find(entry => entry.target === document.body);
if (windowEntry) {
this.windowWidth = windowEntry.contentRect.width;
this.windowHeight = windowEntry.contentRect.height;
}
entries.forEach(entry => {
const trackedElementName = this.trackedUiElements.get(entry.target);
if (trackedElementName) {
this.uiElementDimensions.set(trackedElementName, entry.contentRect);
this.emit(trackedElementName, UI_EVENTS.Resize, entry);
}
});
this.emit(UI_EVENTS.Resize, entries);
});
this.windowWidth = window.innerWidth;
// eslint-disable-next-line no-restricted-properties
this.windowHeight = window.innerHeight;
this.resizeObserver = new ResizeObserver(this.resizeObserverCallback);
this.resizeObserver.observe(document.body);
}
static get instance() {
if (!UIStore._instance) {
UIStore._instance = new UIStore();
}
return UIStore._instance;
}
static destroy() {
if (UIStore._instance) {
UIStore._instance.resizeObserver.disconnect();
UIStore._instance.removeAllListeners();
UIStore._instance = null;
}
}
getElementDimensions(name) {
return this.uiElementDimensions.get(name);
}
trackElementDimensions(name, element) {
this.trackedUiElements.set(element, name);
this.resizeObserver.observe(element);
}
stopTrackingElementDimensions(name) {
let trackedElement;
this.trackedUiElements.forEach((trackedElementName, element) => {
if (trackedElementName === name) {
trackedElement = element;
}
});
if (trackedElement) {
this.resizeObserver.unobserve(trackedElement);
this.uiElementDimensions.delete(name);
this.trackedUiElements.delete(trackedElement);
}
}
isTrackingElementDimensions(name) {
return this.uiElementDimensions.has(name);
}
}
exports.default = UIStore;
(0, _defineProperty2.default)(UIStore, "_instance", null);
window.mxUIStore = UIStore.instance;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJVSV9FVkVOVFMiLCJleHBvcnRzIiwiVUlTdG9yZSIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJNYXAiLCJlbnRyaWVzIiwid2luZG93RW50cnkiLCJmaW5kIiwiZW50cnkiLCJ0YXJnZXQiLCJkb2N1bWVudCIsImJvZHkiLCJ3aW5kb3dXaWR0aCIsImNvbnRlbnRSZWN0Iiwid2lkdGgiLCJ3aW5kb3dIZWlnaHQiLCJoZWlnaHQiLCJmb3JFYWNoIiwidHJhY2tlZEVsZW1lbnROYW1lIiwidHJhY2tlZFVpRWxlbWVudHMiLCJnZXQiLCJ1aUVsZW1lbnREaW1lbnNpb25zIiwic2V0IiwiZW1pdCIsIlJlc2l6ZSIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsInJlc2l6ZU9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJyZXNpemVPYnNlcnZlckNhbGxiYWNrIiwib2JzZXJ2ZSIsImluc3RhbmNlIiwiX2luc3RhbmNlIiwiZGVzdHJveSIsImRpc2Nvbm5lY3QiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJnZXRFbGVtZW50RGltZW5zaW9ucyIsIm5hbWUiLCJ0cmFja0VsZW1lbnREaW1lbnNpb25zIiwiZWxlbWVudCIsInN0b3BUcmFja2luZ0VsZW1lbnREaW1lbnNpb25zIiwidHJhY2tlZEVsZW1lbnQiLCJ1bm9ic2VydmUiLCJkZWxldGUiLCJpc1RyYWNraW5nRWxlbWVudERpbWVuc2lvbnMiLCJoYXMiLCJteFVJU3RvcmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmVzL1VJU3RvcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5cbmV4cG9ydCBlbnVtIFVJX0VWRU5UUyB7XG4gICAgUmVzaXplID0gXCJyZXNpemVcIixcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUlTdG9yZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBVSVN0b3JlIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcblxuICAgIHByaXZhdGUgdWlFbGVtZW50RGltZW5zaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBET01SZWN0UmVhZE9ubHk+KCk7XG4gICAgcHJpdmF0ZSB0cmFja2VkVWlFbGVtZW50cyA9IG5ldyBNYXA8RWxlbWVudCwgc3RyaW5nPigpO1xuXG4gICAgcHVibGljIHdpbmRvd1dpZHRoOiBudW1iZXI7XG4gICAgcHVibGljIHdpbmRvd0hlaWdodDogbnVtYmVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy53aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG4gICAgICAgIHRoaXMud2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5yZXNpemVPYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGluc3RhbmNlKCk6IFVJU3RvcmUge1xuICAgICAgICBpZiAoIVVJU3RvcmUuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICBVSVN0b3JlLl9pbnN0YW5jZSA9IG5ldyBVSVN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFVJU3RvcmUuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKFVJU3RvcmUuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICBVSVN0b3JlLl9pbnN0YW5jZS5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICBVSVN0b3JlLl9pbnN0YW5jZS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIFVJU3RvcmUuX2luc3RhbmNlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFbGVtZW50RGltZW5zaW9ucyhuYW1lOiBzdHJpbmcpOiBET01SZWN0UmVhZE9ubHkgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy51aUVsZW1lbnREaW1lbnNpb25zLmdldChuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhY2tFbGVtZW50RGltZW5zaW9ucyhuYW1lOiBzdHJpbmcsIGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50cmFja2VkVWlFbGVtZW50cy5zZXQoZWxlbWVudCwgbmFtZSk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcFRyYWNraW5nRWxlbWVudERpbWVuc2lvbnMobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCB0cmFja2VkRWxlbWVudDogRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy50cmFja2VkVWlFbGVtZW50cy5mb3JFYWNoKCh0cmFja2VkRWxlbWVudE5hbWUsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0cmFja2VkRWxlbWVudE5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICB0cmFja2VkRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHJhY2tlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKHRyYWNrZWRFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMudWlFbGVtZW50RGltZW5zaW9ucy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICB0aGlzLnRyYWNrZWRVaUVsZW1lbnRzLmRlbGV0ZSh0cmFja2VkRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNUcmFja2luZ0VsZW1lbnREaW1lbnNpb25zKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy51aUVsZW1lbnREaW1lbnNpb25zLmhhcyhuYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyQ2FsbGJhY2sgPSAoZW50cmllczogUmVzaXplT2JzZXJ2ZXJFbnRyeVtdKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHdpbmRvd0VudHJ5ID0gZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkudGFyZ2V0ID09PSBkb2N1bWVudC5ib2R5KTtcblxuICAgICAgICBpZiAod2luZG93RW50cnkpIHtcbiAgICAgICAgICAgIHRoaXMud2luZG93V2lkdGggPSB3aW5kb3dFbnRyeS5jb250ZW50UmVjdC53aWR0aDtcbiAgICAgICAgICAgIHRoaXMud2luZG93SGVpZ2h0ID0gd2luZG93RW50cnkuY29udGVudFJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhY2tlZEVsZW1lbnROYW1lID0gdGhpcy50cmFja2VkVWlFbGVtZW50cy5nZXQoZW50cnkudGFyZ2V0KTtcbiAgICAgICAgICAgIGlmICh0cmFja2VkRWxlbWVudE5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVpRWxlbWVudERpbWVuc2lvbnMuc2V0KHRyYWNrZWRFbGVtZW50TmFtZSwgZW50cnkuY29udGVudFJlY3QpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCh0cmFja2VkRWxlbWVudE5hbWUsIFVJX0VWRU5UUy5SZXNpemUsIGVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5lbWl0KFVJX0VWRU5UUy5SZXNpemUsIGVudHJpZXMpO1xuICAgIH07XG59XG5cbndpbmRvdy5teFVJU3RvcmUgPSBVSVN0b3JlLmluc3RhbmNlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQVJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEsSUFVWUMsU0FBUyxHQUFBQyxPQUFBLENBQUFELFNBQUEsMEJBQVRBLFNBQVM7RUFBVEEsU0FBUztFQUFBLE9BQVRBLFNBQVM7QUFBQTtBQUlOLE1BQU1FLE9BQU8sU0FBU0MsZUFBWSxDQUFDO0VBV3ZDQyxXQUFXQSxDQUFBLEVBQUc7SUFDakIsS0FBSyxDQUFDLENBQUM7O0lBRVA7SUFBQSxJQUFBQyxnQkFBQSxDQUFBQyxPQUFBO0lBQUEsSUFBQUQsZ0JBQUEsQ0FBQUMsT0FBQSwrQkFUMEIsSUFBSUMsR0FBRyxDQUEwQixDQUFDO0lBQUEsSUFBQUYsZ0JBQUEsQ0FBQUMsT0FBQSw2QkFDcEMsSUFBSUMsR0FBRyxDQUFrQixDQUFDO0lBQUEsSUFBQUYsZ0JBQUEs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