Add rooms hierarchy class
Signed-off-by: ajbura <ajbura@gmail.com>
This commit is contained in:
parent
e93f429906
commit
8ddbc24dd4
1 changed files with 46 additions and 0 deletions
46
src/client/state/RoomsHierarchy.js
Normal file
46
src/client/state/RoomsHierarchy.js
Normal 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;
|
Loading…
Reference in a new issue