Add rooms hierarchy class

Signed-off-by: ajbura <ajbura@gmail.com>
This commit is contained in:
ajbura 2022-02-10 20:56:23 +05:30
parent e93f429906
commit 8ddbc24dd4

View file

@ -0,0 +1,46 @@
import { RoomHierarchy } from 'matrix-js-sdk/lib/room-hierarchy';
class RoomsHierarchy {
constructor(matrixClient, limit = 20, maxDepth = 1, suggestedOnly = false) {
this.matrixClient = matrixClient;
this._maxDepth = maxDepth;
this._suggestedOnly = suggestedOnly;
this._limit = limit;
this.roomIdToHierarchy = new Map();
}
getHierarchy(roomId) {
return this.roomIdToHierarchy.get(roomId);
}
removeHierarchy(roomId) {
return this.roomIdToHierarchy.delete(roomId);
}
canLoadMore(roomId) {
const roomHierarchy = this.getHierarchy(roomId);
if (!roomHierarchy) return true;
return roomHierarchy.canLoadMore;
}
async load(roomId, limit = this._limit) {
let roomHierarchy = this.getHierarchy(roomId);
if (!roomHierarchy) {
const room = this.matrixClient.getRoom(roomId);
if (!room) return null;
roomHierarchy = new RoomHierarchy(room, limit, this._maxDepth, this._suggestedOnly);
this.roomIdToHierarchy.set(roomId, roomHierarchy);
}
try {
await roomHierarchy.load(limit);
return roomHierarchy.rooms;
} catch {
return roomHierarchy.rooms;
}
}
}
export default RoomsHierarchy;