matrix-react-sdk
Version:
SDK for matrix.org using React
64 lines (60 loc) • 9.38 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SpaceWatcher = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _SpaceFilterCondition = require("./filters/SpaceFilterCondition");
var _SpaceStore = _interopRequireDefault(require("../spaces/SpaceStore"));
var _spaces = require("../spaces");
/*
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.
*/
/**
* Watches for changes in spaces to manage the filter on the provided RoomListStore
*/
class SpaceWatcher {
constructor(store) {
(0, _defineProperty2.default)(this, "filter", new _SpaceFilterCondition.SpaceFilterCondition());
// we track these separately to the SpaceStore as we need to observe transitions
(0, _defineProperty2.default)(this, "activeSpace", _SpaceStore.default.instance.activeSpace);
(0, _defineProperty2.default)(this, "allRoomsInHome", _SpaceStore.default.instance.allRoomsInHome);
(0, _defineProperty2.default)(this, "onSelectedSpaceUpdated", (activeSpace, allRoomsInHome = this.allRoomsInHome) => {
if (activeSpace === this.activeSpace && allRoomsInHome === this.allRoomsInHome) return; // nop
const neededFilter = SpaceWatcher.needsFilter(this.activeSpace, this.allRoomsInHome);
const needsFilter = SpaceWatcher.needsFilter(activeSpace, allRoomsInHome);
this.activeSpace = activeSpace;
this.allRoomsInHome = allRoomsInHome;
if (needsFilter) {
this.updateFilter();
}
if (!neededFilter && needsFilter) {
this.store.addFilter(this.filter);
} else if (neededFilter && !needsFilter) {
this.store.removeFilter(this.filter);
}
});
(0, _defineProperty2.default)(this, "onHomeBehaviourUpdated", allRoomsInHome => {
this.onSelectedSpaceUpdated(this.activeSpace, allRoomsInHome);
});
(0, _defineProperty2.default)(this, "updateFilter", () => {
this.filter.updateSpace(this.activeSpace);
});
this.store = store;
if (SpaceWatcher.needsFilter(this.activeSpace, this.allRoomsInHome)) {
this.updateFilter();
store.addFilter(this.filter);
}
_SpaceStore.default.instance.on(_spaces.UPDATE_SELECTED_SPACE, this.onSelectedSpaceUpdated);
_SpaceStore.default.instance.on(_spaces.UPDATE_HOME_BEHAVIOUR, this.onHomeBehaviourUpdated);
}
static needsFilter(spaceKey, allRoomsInHome) {
return !(spaceKey === _spaces.MetaSpace.Home && allRoomsInHome);
}
}
exports.SpaceWatcher = SpaceWatcher;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfU3BhY2VGaWx0ZXJDb25kaXRpb24iLCJyZXF1aXJlIiwiX1NwYWNlU3RvcmUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3NwYWNlcyIsIlNwYWNlV2F0Y2hlciIsImNvbnN0cnVjdG9yIiwic3RvcmUiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsIlNwYWNlRmlsdGVyQ29uZGl0aW9uIiwiU3BhY2VTdG9yZSIsImluc3RhbmNlIiwiYWN0aXZlU3BhY2UiLCJhbGxSb29tc0luSG9tZSIsIm5lZWRlZEZpbHRlciIsIm5lZWRzRmlsdGVyIiwidXBkYXRlRmlsdGVyIiwiYWRkRmlsdGVyIiwiZmlsdGVyIiwicmVtb3ZlRmlsdGVyIiwib25TZWxlY3RlZFNwYWNlVXBkYXRlZCIsInVwZGF0ZVNwYWNlIiwib24iLCJVUERBVEVfU0VMRUNURURfU1BBQ0UiLCJVUERBVEVfSE9NRV9CRUhBVklPVVIiLCJvbkhvbWVCZWhhdmlvdXJVcGRhdGVkIiwic3BhY2VLZXkiLCJNZXRhU3BhY2UiLCJIb21lIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yZXMvcm9vbS1saXN0L1NwYWNlV2F0Y2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMSBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBSb29tTGlzdFN0b3JlIGFzIEludGVyZmFjZSB9IGZyb20gXCIuL0ludGVyZmFjZVwiO1xuaW1wb3J0IHsgU3BhY2VGaWx0ZXJDb25kaXRpb24gfSBmcm9tIFwiLi9maWx0ZXJzL1NwYWNlRmlsdGVyQ29uZGl0aW9uXCI7XG5pbXBvcnQgU3BhY2VTdG9yZSBmcm9tIFwiLi4vc3BhY2VzL1NwYWNlU3RvcmVcIjtcbmltcG9ydCB7IE1ldGFTcGFjZSwgU3BhY2VLZXksIFVQREFURV9IT01FX0JFSEFWSU9VUiwgVVBEQVRFX1NFTEVDVEVEX1NQQUNFIH0gZnJvbSBcIi4uL3NwYWNlc1wiO1xuXG4vKipcbiAqIFdhdGNoZXMgZm9yIGNoYW5nZXMgaW4gc3BhY2VzIHRvIG1hbmFnZSB0aGUgZmlsdGVyIG9uIHRoZSBwcm92aWRlZCBSb29tTGlzdFN0b3JlXG4gKi9cbmV4cG9ydCBjbGFzcyBTcGFjZVdhdGNoZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyID0gbmV3IFNwYWNlRmlsdGVyQ29uZGl0aW9uKCk7XG4gICAgLy8gd2UgdHJhY2sgdGhlc2Ugc2VwYXJhdGVseSB0byB0aGUgU3BhY2VTdG9yZSBhcyB3ZSBuZWVkIHRvIG9ic2VydmUgdHJhbnNpdGlvbnNcbiAgICBwcml2YXRlIGFjdGl2ZVNwYWNlOiBTcGFjZUtleSA9IFNwYWNlU3RvcmUuaW5zdGFuY2UuYWN0aXZlU3BhY2U7XG4gICAgcHJpdmF0ZSBhbGxSb29tc0luSG9tZTogYm9vbGVhbiA9IFNwYWNlU3RvcmUuaW5zdGFuY2UuYWxsUm9vbXNJbkhvbWU7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmIChTcGFjZVdhdGNoZXIubmVlZHNGaWx0ZXIodGhpcy5hY3RpdmVTcGFjZSwgdGhpcy5hbGxSb29tc0luSG9tZSkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyKCk7XG4gICAgICAgICAgICBzdG9yZS5hZGRGaWx0ZXIodGhpcy5maWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIFNwYWNlU3RvcmUuaW5zdGFuY2Uub24oVVBEQVRFX1NFTEVDVEVEX1NQQUNFLCB0aGlzLm9uU2VsZWN0ZWRTcGFjZVVwZGF0ZWQpO1xuICAgICAgICBTcGFjZVN0b3JlLmluc3RhbmNlLm9uKFVQREFURV9IT01FX0JFSEFWSU9VUiwgdGhpcy5vbkhvbWVCZWhhdmlvdXJVcGRhdGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBuZWVkc0ZpbHRlcihzcGFjZUtleTogU3BhY2VLZXksIGFsbFJvb21zSW5Ib21lOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKHNwYWNlS2V5ID09PSBNZXRhU3BhY2UuSG9tZSAmJiBhbGxSb29tc0luSG9tZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNlbGVjdGVkU3BhY2VVcGRhdGVkID0gKGFjdGl2ZVNwYWNlOiBTcGFjZUtleSwgYWxsUm9vbXNJbkhvbWUgPSB0aGlzLmFsbFJvb21zSW5Ib21lKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChhY3RpdmVTcGFjZSA9PT0gdGhpcy5hY3RpdmVTcGFjZSAmJiBhbGxSb29tc0luSG9tZSA9PT0gdGhpcy5hbGxSb29tc0luSG9tZSkgcmV0dXJuOyAvLyBub3BcblxuICAgICAgICBjb25zdCBuZWVkZWRGaWx0ZXIgPSBTcGFjZVdhdGNoZXIubmVlZHNGaWx0ZXIodGhpcy5hY3RpdmVTcGFjZSwgdGhpcy5hbGxSb29tc0luSG9tZSk7XG4gICAgICAgIGNvbnN0IG5lZWRzRmlsdGVyID0gU3BhY2VXYXRjaGVyLm5lZWRzRmlsdGVyKGFjdGl2ZVNwYWNlLCBhbGxSb29tc0luSG9tZSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVTcGFjZSA9IGFjdGl2ZVNwYWNlO1xuICAgICAgICB0aGlzLmFsbFJvb21zSW5Ib21lID0gYWxsUm9vbXNJbkhvbWU7XG5cbiAgICAgICAgaWYgKG5lZWRzRmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFuZWVkZWRGaWx0ZXIgJiYgbmVlZHNGaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuYWRkRmlsdGVyKHRoaXMuZmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChuZWVkZWRGaWx0ZXIgJiYgIW5lZWRzRmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnJlbW92ZUZpbHRlcih0aGlzLmZpbHRlcik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkhvbWVCZWhhdmlvdXJVcGRhdGVkID0gKGFsbFJvb21zSW5Ib21lOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMub25TZWxlY3RlZFNwYWNlVXBkYXRlZCh0aGlzLmFjdGl2ZVNwYWNlLCBhbGxSb29tc0luSG9tZSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgdXBkYXRlRmlsdGVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlci51cGRhdGVTcGFjZSh0aGlzLmFjdGl2ZVNwYWNlKTtcbiAgICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNBLElBQUFBLHFCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFPQTtBQUNBO0FBQ0E7QUFDTyxNQUFNSSxZQUFZLENBQUM7RUFNZkMsV0FBV0EsQ0FBU0MsS0FBZ0IsRUFBRTtJQUFBLElBQUFDLGdCQUFBLENBQUFDLE9BQUEsa0JBTG5CLElBQUlDLDBDQUFvQixDQUFDLENBQUM7SUFDcEQ7SUFBQSxJQUFBRixnQkFBQSxDQUFBQyxPQUFBLHVCQUNnQ0UsbUJBQVUsQ0FBQ0MsUUFBUSxDQUFDQyxXQUFXO0lBQUEsSUFBQUwsZ0JBQUEsQ0FBQUMsT0FBQSwwQkFDN0JFLG1CQUFVLENBQUNDLFFBQVEsQ0FBQ0UsY0FBYztJQUFBLElBQUFOLGdCQUFBLENBQUFDLE9BQUEsa0NBZW5DLENBQUNJLFdBQXFCLEVBQUVDLGNBQWMsR0FBRyxJQUFJLENBQUNBLGNBQWMsS0FBVztNQUNwRyxJQUFJRCxXQUFXLEtBQUssSUFBSSxDQUFDQSxXQUFXLElBQUlDLGNBQWMsS0FBSyxJQUFJLENBQUNBLGNBQWMsRUFBRSxPQUFPLENBQUM7O01BRXhGLE1BQU1DLFlBQVksR0FBR1YsWUFBWSxDQUFDVyxXQUFXLENBQUMsSUFBSSxDQUFDSCxXQUFXLEVBQUUsSUFBSSxDQUFDQyxjQUFjLENBQUM7TUFDcEYsTUFBTUUsV0FBVyxHQUFHWCxZQUFZLENBQUNXLFdBQVcsQ0FBQ0gsV0FBVyxFQUFFQyxjQUFjLENBQUM7TUFFekUsSUFBSSxDQUFDRCxXQUFXLEdBQUdBLFdBQVc7TUFDOUIsSUFBSSxDQUFDQyxjQUFjLEdBQUdBLGNBQWM7TUFFcEMsSUFBSUUsV0FBVyxFQUFFO1FBQ2IsSUFBSSxDQUFDQyxZQUFZLENBQUMsQ0FBQztNQUN2QjtNQUVBLElBQUksQ0FBQ0YsWUFBWSxJQUFJQyxXQUFXLEVBQUU7UUFDOUIsSUFBSSxDQUFDVCxLQUFLLENBQUNXLFNBQVMsQ0FBQyxJQUFJLENBQUNDLE1BQU0sQ0FBQztNQUNyQyxDQUFDLE1BQU0sSUFBSUosWUFBWSxJQUFJLENBQUNDLFdBQVcsRUFBRTtRQUNyQyxJQUFJLENBQUNULEtBQUssQ0FBQ2EsWUFBWSxDQUFDLElBQUksQ0FBQ0QsTUFBTSxDQUFDO01BQ3hDO0lBQ0osQ0FBQztJQUFBLElBQUFYLGdCQUFBLENBQUFDLE9BQUEsa0NBRWlDSyxjQUF1QixJQUFXO01BQ2hFLElBQUksQ0FBQ08sc0JBQXNCLENBQUMsSUFBSSxDQUFDUixXQUFXLEVBQUVDLGNBQWMsQ0FBQztJQUNqRSxDQUFDO0lBQUEsSUFBQU4sZ0JBQUEsQ0FBQUMsT0FBQSx3QkFFc0IsTUFBWTtNQUMvQixJQUFJLENBQUNVLE1BQU0sQ0FBQ0csV0FBVyxDQUFDLElBQUksQ0FBQ1QsV0FBVyxDQUFDO0lBQzdDLENBQUM7SUFBQSxLQXZDMEJOLEtBQWdCLEdBQWhCQSxLQUFnQjtJQUN2QyxJQUFJRixZQUFZLENBQUNXLFdBQVcsQ0FBQyxJQUFJLENBQUNILFdBQVcsRUFBRSxJQUFJLENBQUNDLGNBQWMsQ0FBQyxFQUFFO01BQ2pFLElBQUksQ0FBQ0csWUFBWSxDQUFDLENBQUM7TUFDbkJWLEtBQUssQ0FBQ1csU0FBUyxDQUFDLElBQUksQ0FBQ0MsTUFBTSxDQUFDO0lBQ2hDO0lBQ0FSLG1CQUFVLENBQUNDLFFBQVEsQ0FBQ1csRUFBRSxDQUFDQyw2QkFBcUIsRUFBRSxJQUFJLENBQUNILHNCQUFzQixDQUFDO0lBQzFFVixtQkFBVSxDQUFDQyxRQUFRLENBQUNXLEVBQUUsQ0FBQ0UsNkJBQXFCLEVBQUUsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQztFQUM5RTtFQUVBLE9BQWVWLFdBQVdBLENBQUNXLFFBQWtCLEVBQUViLGNBQXVCLEVBQVc7SUFDN0UsT0FBTyxFQUFFYSxRQUFRLEtBQUtDLGlCQUFTLENBQUNDLElBQUksSUFBSWYsY0FBYyxDQUFDO0VBQzNEO0FBNkJKO0FBQUNnQixPQUFBLENBQUF6QixZQUFBLEdBQUFBLFlBQUEiLCJpZ25vcmVMaXN0IjpbXX0=