41 lines
963 B
TypeScript
41 lines
963 B
TypeScript
import { APIClient } from "../ApiClient";
|
|
|
|
export type SpaceHierarchy = Map<string, string[]>;
|
|
|
|
export class MatrixApiSpace {
|
|
/**
|
|
* Request Matrix space hierarchy
|
|
*/
|
|
static async Hierarchy(): Promise<SpaceHierarchy> {
|
|
const hierarchy = new Map(
|
|
Object.entries(
|
|
(
|
|
await APIClient.exec({
|
|
method: "GET",
|
|
uri: "/matrix/space/hierarchy",
|
|
})
|
|
).data as { [s: string]: string[] }
|
|
)
|
|
) as SpaceHierarchy;
|
|
|
|
// Simplify hierarchy
|
|
while (true) {
|
|
let changed = false;
|
|
for (const [roomid, children] of hierarchy) {
|
|
for (const child of children) {
|
|
if (!hierarchy.has(child)) continue;
|
|
hierarchy.set(roomid, [
|
|
...hierarchy.get(roomid)!,
|
|
...hierarchy.get(child)!,
|
|
]);
|
|
hierarchy.delete(child);
|
|
changed = true;
|
|
}
|
|
}
|
|
if (!changed) break;
|
|
}
|
|
|
|
return hierarchy;
|
|
}
|
|
}
|