* support room via server params and eventId * change copy link to matrix.to links * display matrix.to links in messages as pill and stop generating url previews for them * improve editor mention to include viaServers and eventId * fix mention custom attributes * always try to open room in current space * jump to latest remove target eventId from url * add create direct search options to open/create dm with url
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import React, { ReactNode } from 'react';
|
|
import { useParams } from 'react-router-dom';
|
|
import { useAtomValue } from 'jotai';
|
|
import { useSelectedRoom } from '../../../hooks/router/useSelectedRoom';
|
|
import { RoomProvider } from '../../../hooks/useRoom';
|
|
import { useMatrixClient } from '../../../hooks/useMatrixClient';
|
|
import { JoinBeforeNavigate } from '../../../features/join-before-navigate';
|
|
import { useSpace } from '../../../hooks/useSpace';
|
|
import { getAllParents } from '../../../utils/room';
|
|
import { roomToParentsAtom } from '../../../state/room/roomToParents';
|
|
import { allRoomsAtom } from '../../../state/room-list/roomList';
|
|
import { useSearchParamsViaServers } from '../../../hooks/router/useSearchParamsViaServers';
|
|
|
|
export function SpaceRouteRoomProvider({ children }: { children: ReactNode }) {
|
|
const mx = useMatrixClient();
|
|
const space = useSpace();
|
|
const roomToParents = useAtomValue(roomToParentsAtom);
|
|
const allRooms = useAtomValue(allRoomsAtom);
|
|
|
|
const { roomIdOrAlias, eventId } = useParams();
|
|
const viaServers = useSearchParamsViaServers();
|
|
const roomId = useSelectedRoom();
|
|
const room = mx.getRoom(roomId);
|
|
|
|
if (
|
|
!room ||
|
|
room.isSpaceRoom() ||
|
|
!allRooms.includes(room.roomId) ||
|
|
!getAllParents(roomToParents, room.roomId).has(space.roomId)
|
|
) {
|
|
return (
|
|
<JoinBeforeNavigate
|
|
roomIdOrAlias={roomIdOrAlias!}
|
|
eventId={eventId}
|
|
viaServers={viaServers}
|
|
/>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<RoomProvider key={room.roomId} value={room}>
|
|
{children}
|
|
</RoomProvider>
|
|
);
|
|
}
|