improve parent selection when opening a room (#2388)

when a room has more than one orphan parent, we will select parent which has highest number of special users who have special powers in selected room.
This commit is contained in:
Ajay Bura 2025-07-11 16:33:55 +05:30 committed by GitHub
parent 6b81401e2d
commit fbd7e0a14b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 53 additions and 12 deletions

View file

@ -9,7 +9,7 @@ import {
getSpaceRoomPath,
} from '../pages/pathUtils';
import { useMatrixClient } from './useMatrixClient';
import { getOrphanParents } from '../utils/room';
import { getOrphanParents, guessPerfectParent } from '../utils/room';
import { roomToParentsAtom } from '../state/room/roomToParents';
import { mDirectAtom } from '../state/mDirectList';
import { useSelectedSpace } from './router/useSelectedSpace';
@ -39,19 +39,19 @@ export const useRoomNavigate = () => {
const orphanParents = openSpaceTimeline ? [roomId] : getOrphanParents(roomToParents, roomId);
if (orphanParents.length > 0) {
const pSpaceIdOrAlias = getCanonicalAliasOrRoomId(
mx,
spaceSelectedId && orphanParents.includes(spaceSelectedId)
? spaceSelectedId
: orphanParents[0] // TODO: better orphan parent selection.
);
if (openSpaceTimeline) {
navigate(getSpaceRoomPath(pSpaceIdOrAlias, roomId, eventId), opts);
return;
let parentSpace: string;
if (spaceSelectedId && orphanParents.includes(spaceSelectedId)) {
parentSpace = spaceSelectedId;
} else {
parentSpace = guessPerfectParent(mx, roomId, orphanParents) ?? orphanParents[0];
}
navigate(getSpaceRoomPath(pSpaceIdOrAlias, roomIdOrAlias, eventId), opts);
const pSpaceIdOrAlias = getCanonicalAliasOrRoomId(mx, parentSpace);
navigate(
getSpaceRoomPath(pSpaceIdOrAlias, openSpaceTimeline ? roomId : roomIdOrAlias, eventId),
opts
);
return;
}