matrix-react-sdk
Version:
SDK for matrix.org using React
51 lines (47 loc) • 6.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.flattenSpaceHierarchyWithCache = exports.flattenSpaceHierarchy = void 0;
/*
Copyright 2024 New Vector Ltd.
Copyright 2022 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 traverseSpaceDescendants = (spaceDescendantMap, spaceId, flatSpace = new Set()) => {
flatSpace.add(spaceId);
const descendentSpaces = spaceDescendantMap.get(spaceId);
descendentSpaces?.forEach(descendantSpaceId => {
if (!flatSpace.has(descendantSpaceId)) {
traverseSpaceDescendants(spaceDescendantMap, descendantSpaceId, flatSpace);
}
});
return flatSpace;
};
/**
* Helper function to traverse space hierarchy and flatten
* @param spaceEntityMap ie map of rooms or dm userIds
* @param spaceDescendantMap map of spaces and their children
* @returns set of all rooms
*/
const flattenSpaceHierarchy = (spaceEntityMap, spaceDescendantMap, spaceId) => {
const flattenedSpaceIds = traverseSpaceDescendants(spaceDescendantMap, spaceId);
const flattenedRooms = new Set();
flattenedSpaceIds.forEach(id => {
const roomIds = spaceEntityMap.get(id);
roomIds?.forEach(flattenedRooms.add, flattenedRooms);
});
return flattenedRooms;
};
exports.flattenSpaceHierarchy = flattenSpaceHierarchy;
const flattenSpaceHierarchyWithCache = cache => (spaceEntityMap, spaceDescendantMap, spaceId, useCache = true) => {
if (useCache && cache.has(spaceId)) {
return cache.get(spaceId);
}
const result = flattenSpaceHierarchy(spaceEntityMap, spaceDescendantMap, spaceId);
cache.set(spaceId, result);
return result;
};
exports.flattenSpaceHierarchyWithCache = flattenSpaceHierarchyWithCache;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0cmF2ZXJzZVNwYWNlRGVzY2VuZGFudHMiLCJzcGFjZURlc2NlbmRhbnRNYXAiLCJzcGFjZUlkIiwiZmxhdFNwYWNlIiwiU2V0IiwiYWRkIiwiZGVzY2VuZGVudFNwYWNlcyIsImdldCIsImZvckVhY2giLCJkZXNjZW5kYW50U3BhY2VJZCIsImhhcyIsImZsYXR0ZW5TcGFjZUhpZXJhcmNoeSIsInNwYWNlRW50aXR5TWFwIiwiZmxhdHRlbmVkU3BhY2VJZHMiLCJmbGF0dGVuZWRSb29tcyIsImlkIiwicm9vbUlkcyIsImV4cG9ydHMiLCJmbGF0dGVuU3BhY2VIaWVyYXJjaHlXaXRoQ2FjaGUiLCJjYWNoZSIsInVzZUNhY2hlIiwicmVzdWx0Iiwic2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3Jlcy9zcGFjZXMvZmxhdHRlblNwYWNlSGllcmFyY2h5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIyIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IFNwYWNlS2V5IH0gZnJvbSBcIi5cIjtcblxuZXhwb3J0IHR5cGUgU3BhY2VFbnRpdHlNYXAgPSBNYXA8U3BhY2VLZXksIFNldDxzdHJpbmc+PjtcbmV4cG9ydCB0eXBlIFNwYWNlRGVzY2VuZGFudE1hcCA9IE1hcDxTcGFjZUtleSwgU2V0PFNwYWNlS2V5Pj47XG5cbmNvbnN0IHRyYXZlcnNlU3BhY2VEZXNjZW5kYW50cyA9IChcbiAgICBzcGFjZURlc2NlbmRhbnRNYXA6IFNwYWNlRGVzY2VuZGFudE1hcCxcbiAgICBzcGFjZUlkOiBTcGFjZUtleSxcbiAgICBmbGF0U3BhY2UgPSBuZXcgU2V0PFNwYWNlS2V5PigpLFxuKTogU2V0PFNwYWNlS2V5PiA9PiB7XG4gICAgZmxhdFNwYWNlLmFkZChzcGFjZUlkKTtcbiAgICBjb25zdCBkZXNjZW5kZW50U3BhY2VzID0gc3BhY2VEZXNjZW5kYW50TWFwLmdldChzcGFjZUlkKTtcbiAgICBkZXNjZW5kZW50U3BhY2VzPy5mb3JFYWNoKChkZXNjZW5kYW50U3BhY2VJZCkgPT4ge1xuICAgICAgICBpZiAoIWZsYXRTcGFjZS5oYXMoZGVzY2VuZGFudFNwYWNlSWQpKSB7XG4gICAgICAgICAgICB0cmF2ZXJzZVNwYWNlRGVzY2VuZGFudHMoc3BhY2VEZXNjZW5kYW50TWFwLCBkZXNjZW5kYW50U3BhY2VJZCwgZmxhdFNwYWNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZsYXRTcGFjZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHRyYXZlcnNlIHNwYWNlIGhpZXJhcmNoeSBhbmQgZmxhdHRlblxuICogQHBhcmFtIHNwYWNlRW50aXR5TWFwIGllIG1hcCBvZiByb29tcyBvciBkbSB1c2VySWRzXG4gKiBAcGFyYW0gc3BhY2VEZXNjZW5kYW50TWFwIG1hcCBvZiBzcGFjZXMgYW5kIHRoZWlyIGNoaWxkcmVuXG4gKiBAcmV0dXJucyBzZXQgb2YgYWxsIHJvb21zXG4gKi9cbmV4cG9ydCBjb25zdCBmbGF0dGVuU3BhY2VIaWVyYXJjaHkgPSAoXG4gICAgc3BhY2VFbnRpdHlNYXA6IFNwYWNlRW50aXR5TWFwLFxuICAgIHNwYWNlRGVzY2VuZGFudE1hcDogU3BhY2VEZXNjZW5kYW50TWFwLFxuICAgIHNwYWNlSWQ6IFNwYWNlS2V5LFxuKTogU2V0PHN0cmluZz4gPT4ge1xuICAgIGNvbnN0IGZsYXR0ZW5lZFNwYWNlSWRzID0gdHJhdmVyc2VTcGFjZURlc2NlbmRhbnRzKHNwYWNlRGVzY2VuZGFudE1hcCwgc3BhY2VJZCk7XG4gICAgY29uc3QgZmxhdHRlbmVkUm9vbXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGZsYXR0ZW5lZFNwYWNlSWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvb21JZHMgPSBzcGFjZUVudGl0eU1hcC5nZXQoaWQpO1xuICAgICAgICByb29tSWRzPy5mb3JFYWNoKGZsYXR0ZW5lZFJvb21zLmFkZCwgZmxhdHRlbmVkUm9vbXMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZsYXR0ZW5lZFJvb21zO1xufTtcblxuZXhwb3J0IGNvbnN0IGZsYXR0ZW5TcGFjZUhpZXJhcmNoeVdpdGhDYWNoZSA9XG4gICAgKGNhY2hlOiBTcGFjZUVudGl0eU1hcCkgPT5cbiAgICAoXG4gICAgICAgIHNwYWNlRW50aXR5TWFwOiBTcGFjZUVudGl0eU1hcCxcbiAgICAgICAgc3BhY2VEZXNjZW5kYW50TWFwOiBTcGFjZURlc2NlbmRhbnRNYXAsXG4gICAgICAgIHNwYWNlSWQ6IFNwYWNlS2V5LFxuICAgICAgICB1c2VDYWNoZSA9IHRydWUsXG4gICAgKTogU2V0PHN0cmluZz4gPT4ge1xuICAgICAgICBpZiAodXNlQ2FjaGUgJiYgY2FjaGUuaGFzKHNwYWNlSWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KHNwYWNlSWQpITtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuU3BhY2VIaWVyYXJjaHkoc3BhY2VFbnRpdHlNYXAsIHNwYWNlRGVzY2VuZGFudE1hcCwgc3BhY2VJZCk7XG4gICAgICAgIGNhY2hlLnNldChzcGFjZUlkLCByZXN1bHQpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBT0EsTUFBTUEsd0JBQXdCLEdBQUdBLENBQzdCQyxrQkFBc0MsRUFDdENDLE9BQWlCLEVBQ2pCQyxTQUFTLEdBQUcsSUFBSUMsR0FBRyxDQUFXLENBQUMsS0FDZjtFQUNoQkQsU0FBUyxDQUFDRSxHQUFHLENBQUNILE9BQU8sQ0FBQztFQUN0QixNQUFNSSxnQkFBZ0IsR0FBR0wsa0JBQWtCLENBQUNNLEdBQUcsQ0FBQ0wsT0FBTyxDQUFDO0VBQ3hESSxnQkFBZ0IsRUFBRUUsT0FBTyxDQUFFQyxpQkFBaUIsSUFBSztJQUM3QyxJQUFJLENBQUNOLFNBQVMsQ0FBQ08sR0FBRyxDQUFDRCxpQkFBaUIsQ0FBQyxFQUFFO01BQ25DVCx3QkFBd0IsQ0FBQ0Msa0JBQWtCLEVBQUVRLGlCQUFpQixFQUFFTixTQUFTLENBQUM7SUFDOUU7RUFDSixDQUFDLENBQUM7RUFFRixPQUFPQSxTQUFTO0FBQ3BCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTVEscUJBQXFCLEdBQUdBLENBQ2pDQyxjQUE4QixFQUM5Qlgsa0JBQXNDLEVBQ3RDQyxPQUFpQixLQUNIO0VBQ2QsTUFBTVcsaUJBQWlCLEdBQUdiLHdCQUF3QixDQUFDQyxrQkFBa0IsRUFBRUMsT0FBTyxDQUFDO0VBQy9FLE1BQU1ZLGNBQWMsR0FBRyxJQUFJVixHQUFHLENBQVMsQ0FBQztFQUV4Q1MsaUJBQWlCLENBQUNMLE9BQU8sQ0FBRU8sRUFBRSxJQUFLO0lBQzlCLE1BQU1DLE9BQU8sR0FBR0osY0FBYyxDQUFDTCxHQUFHLENBQUNRLEVBQUUsQ0FBQztJQUN0Q0MsT0FBTyxFQUFFUixPQUFPLENBQUNNLGNBQWMsQ0FBQ1QsR0FBRyxFQUFFUyxjQUFjLENBQUM7RUFDeEQsQ0FBQyxDQUFDO0VBRUYsT0FBT0EsY0FBYztBQUN6QixDQUFDO0FBQUNHLE9BQUEsQ0FBQU4scUJBQUEsR0FBQUEscUJBQUE7QUFFSyxNQUFNTyw4QkFBOEIsR0FDdENDLEtBQXFCLElBQ3RCLENBQ0lQLGNBQThCLEVBQzlCWCxrQkFBc0MsRUFDdENDLE9BQWlCLEVBQ2pCa0IsUUFBUSxHQUFHLElBQUksS0FDRDtFQUNkLElBQUlBLFFBQVEsSUFBSUQsS0FBSyxDQUFDVCxHQUFHLENBQUNSLE9BQU8sQ0FBQyxFQUFFO0lBQ2hDLE9BQU9pQixLQUFLLENBQUNaLEdBQUcsQ0FBQ0wsT0FBTyxDQUFDO0VBQzdCO0VBQ0EsTUFBTW1CLE1BQU0sR0FBR1YscUJBQXFCLENBQUNDLGNBQWMsRUFBRVgsa0JBQWtCLEVBQUVDLE9BQU8sQ0FBQztFQUNqRmlCLEtBQUssQ0FBQ0csR0FBRyxDQUFDcEIsT0FBTyxFQUFFbUIsTUFBTSxDQUFDO0VBRTFCLE9BQU9BLE1BQU07QUFDakIsQ0FBQztBQUFDSixPQUFBLENBQUFDLDhCQUFBLEdBQUFBLDhCQUFBIiwiaWdub3JlTGlzdCI6W119