fix: restore rooms and DMs after React Router 7 upgrade

Stop double-encoding Matrix IDs in pathUtils, decode route params on read, fix millify CJS import, and read space children from currentState so channels and joins work again.
This commit is contained in:
2026-07-09 02:35:04 +10:00
parent e058165830
commit b4258278d8
16 changed files with 110 additions and 51 deletions

View File

@@ -34,12 +34,20 @@ export const getStateEvent = (
room: Room,
eventType: StateEvent,
stateKey = ''
): MatrixEvent | undefined =>
room.getLiveTimeline().getState(EventTimeline.FORWARDS)?.getStateEvents(eventType, stateKey) ??
undefined;
): MatrixEvent | undefined => {
const fromCurrent = room.currentState?.getStateEvents(eventType, stateKey);
if (fromCurrent) return fromCurrent;
return (
room.getLiveTimeline().getState(EventTimeline.FORWARDS)?.getStateEvents(eventType, stateKey) ??
undefined
);
};
export const getStateEvents = (room: Room, eventType: StateEvent): MatrixEvent[] =>
room.getLiveTimeline().getState(EventTimeline.FORWARDS)?.getStateEvents(eventType) ?? [];
export const getStateEvents = (room: Room, eventType: StateEvent): MatrixEvent[] => {
const fromCurrent = room.currentState?.getStateEvents(eventType);
if (fromCurrent && fromCurrent.length > 0) return fromCurrent;
return room.getLiveTimeline().getState(EventTimeline.FORWARDS)?.getStateEvents(eventType) ?? [];
};
export const getAccountData = (
mx: MatrixClient,
@@ -170,10 +178,13 @@ export const isUnsupportedRoom = (room: Room | null): boolean => {
};
export function isValidChild(mEvent: MatrixEvent): boolean {
return (
mEvent.getType() === StateEvent.SpaceChild &&
Array.isArray(mEvent.getContent<{ via: string[] }>().via)
);
if (mEvent.getType() !== StateEvent.SpaceChild) return false;
const stateKey = mEvent.getStateKey();
if (!stateKey || !stateKey.startsWith('!')) return false;
const { via } = mEvent.getContent<{ via?: string[] }>();
// via is optional on m.space.child; only reject malformed values
if (via !== undefined && !Array.isArray(via)) return false;
return true;
}
export const getAllParents = (roomToParents: RoomToParents, roomId: string): Set<string> => {