matrix-react-sdk
Version:
SDK for matrix.org using React
95 lines (92 loc) • 10.1 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ListLayout = 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.
*/
const TILE_HEIGHT_PX = 44;
class ListLayout {
constructor(tagId) {
(0, _defineProperty2.default)(this, "_n", 0);
(0, _defineProperty2.default)(this, "_previews", false);
(0, _defineProperty2.default)(this, "_collapsed", false);
this.tagId = tagId;
const serialized = localStorage.getItem(this.key);
if (serialized) {
// We don't use the setters as they cause writes.
const parsed = JSON.parse(serialized);
this._n = parsed.numTiles;
this._previews = parsed.showPreviews;
this._collapsed = parsed.collapsed;
}
}
get isCollapsed() {
return this._collapsed;
}
set isCollapsed(v) {
this._collapsed = v;
this.save();
}
get showPreviews() {
return this._previews;
}
set showPreviews(v) {
this._previews = v;
this.save();
}
get tileHeight() {
return TILE_HEIGHT_PX;
}
get key() {
return `mx_sublist_layout_${this.tagId}_boxed`;
}
get visibleTiles() {
if (this._n === 0) return this.defaultVisibleTiles;
return Math.max(this._n, this.minVisibleTiles);
}
set visibleTiles(v) {
this._n = v;
this.save();
}
get minVisibleTiles() {
return 1;
}
get defaultVisibleTiles() {
// This number is what "feels right", and mostly subject to design's opinion.
return 8;
}
tilesWithPadding(n, paddingPx) {
return this.pixelsToTiles(this.tilesToPixelsWithPadding(n, paddingPx));
}
tilesToPixelsWithPadding(n, paddingPx) {
return this.tilesToPixels(n) + paddingPx;
}
tilesToPixels(n) {
return n * this.tileHeight;
}
pixelsToTiles(px) {
return px / this.tileHeight;
}
reset() {
localStorage.removeItem(this.key);
}
save() {
localStorage.setItem(this.key, JSON.stringify(this.serialize()));
}
serialize() {
return {
numTiles: this.visibleTiles,
showPreviews: this.showPreviews,
collapsed: this.isCollapsed
};
}
}
exports.ListLayout = ListLayout;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUSUxFX0hFSUdIVF9QWCIsIkxpc3RMYXlvdXQiLCJjb25zdHJ1Y3RvciIsInRhZ0lkIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJzZXJpYWxpemVkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImtleSIsInBhcnNlZCIsIkpTT04iLCJwYXJzZSIsIl9uIiwibnVtVGlsZXMiLCJfcHJldmlld3MiLCJzaG93UHJldmlld3MiLCJfY29sbGFwc2VkIiwiY29sbGFwc2VkIiwiaXNDb2xsYXBzZWQiLCJ2Iiwic2F2ZSIsInRpbGVIZWlnaHQiLCJ2aXNpYmxlVGlsZXMiLCJkZWZhdWx0VmlzaWJsZVRpbGVzIiwiTWF0aCIsIm1heCIsIm1pblZpc2libGVUaWxlcyIsInRpbGVzV2l0aFBhZGRpbmciLCJuIiwicGFkZGluZ1B4IiwicGl4ZWxzVG9UaWxlcyIsInRpbGVzVG9QaXhlbHNXaXRoUGFkZGluZyIsInRpbGVzVG9QaXhlbHMiLCJweCIsInJlc2V0IiwicmVtb3ZlSXRlbSIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJzZXJpYWxpemUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3Jlcy9yb29tLWxpc3QvTGlzdExheW91dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBUYWdJRCB9IGZyb20gXCIuL21vZGVsc1wiO1xuXG5jb25zdCBUSUxFX0hFSUdIVF9QWCA9IDQ0O1xuXG5pbnRlcmZhY2UgSVNlcmlhbGl6ZWRMaXN0TGF5b3V0IHtcbiAgICBudW1UaWxlczogbnVtYmVyO1xuICAgIHNob3dQcmV2aWV3czogYm9vbGVhbjtcbiAgICBjb2xsYXBzZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0TGF5b3V0IHtcbiAgICBwcml2YXRlIF9uID0gMDtcbiAgICBwcml2YXRlIF9wcmV2aWV3cyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NvbGxhcHNlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB0YWdJZDogVGFnSUQpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMua2V5KTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZWQpIHtcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IHVzZSB0aGUgc2V0dGVycyBhcyB0aGV5IGNhdXNlIHdyaXRlcy5cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IDxJU2VyaWFsaXplZExpc3RMYXlvdXQ+SlNPTi5wYXJzZShzZXJpYWxpemVkKTtcbiAgICAgICAgICAgIHRoaXMuX24gPSBwYXJzZWQubnVtVGlsZXM7XG4gICAgICAgICAgICB0aGlzLl9wcmV2aWV3cyA9IHBhcnNlZC5zaG93UHJldmlld3M7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSBwYXJzZWQuY29sbGFwc2VkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0NvbGxhcHNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxhcHNlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGlzQ29sbGFwc2VkKHY6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY29sbGFwc2VkID0gdjtcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzaG93UHJldmlld3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmV2aWV3cztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNob3dQcmV2aWV3cyh2OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3ByZXZpZXdzID0gdjtcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aWxlSGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBUSUxFX0hFSUdIVF9QWDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBrZXkoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGBteF9zdWJsaXN0X2xheW91dF8ke3RoaXMudGFnSWR9X2JveGVkYDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZpc2libGVUaWxlcygpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5fbiA9PT0gMCkgcmV0dXJuIHRoaXMuZGVmYXVsdFZpc2libGVUaWxlcztcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuX24sIHRoaXMubWluVmlzaWJsZVRpbGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHZpc2libGVUaWxlcyh2OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbiA9IHY7XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWluVmlzaWJsZVRpbGVzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdFZpc2libGVUaWxlcygpOiBudW1iZXIge1xuICAgICAgICAvLyBUaGlzIG51bWJlciBpcyB3aGF0IFwiZmVlbHMgcmlnaHRcIiwgYW5kIG1vc3RseSBzdWJqZWN0IHRvIGRlc2lnbidzIG9waW5pb24uXG4gICAgICAgIHJldHVybiA4O1xuICAgIH1cblxuICAgIHB1YmxpYyB0aWxlc1dpdGhQYWRkaW5nKG46IG51bWJlciwgcGFkZGluZ1B4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5waXhlbHNUb1RpbGVzKHRoaXMudGlsZXNUb1BpeGVsc1dpdGhQYWRkaW5nKG4sIHBhZGRpbmdQeCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0aWxlc1RvUGl4ZWxzV2l0aFBhZGRpbmcobjogbnVtYmVyLCBwYWRkaW5nUHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpbGVzVG9QaXhlbHMobikgKyBwYWRkaW5nUHg7XG4gICAgfVxuXG4gICAgcHVibGljIHRpbGVzVG9QaXhlbHMobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIG4gKiB0aGlzLnRpbGVIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHBpeGVsc1RvVGlsZXMocHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBweCAvIHRoaXMudGlsZUhlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMua2V5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmUoKTogdm9pZCB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMua2V5LCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlcmlhbGl6ZSgpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXJpYWxpemUoKTogSVNlcmlhbGl6ZWRMaXN0TGF5b3V0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG51bVRpbGVzOiB0aGlzLnZpc2libGVUaWxlcyxcbiAgICAgICAgICAgIHNob3dQcmV2aWV3czogdGhpcy5zaG93UHJldmlld3MsXG4gICAgICAgICAgICBjb2xsYXBzZWQ6IHRoaXMuaXNDb2xsYXBzZWQsXG4gICAgICAgIH07XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUlBLE1BQU1BLGNBQWMsR0FBRyxFQUFFO0FBUWxCLE1BQU1DLFVBQVUsQ0FBQztF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