diff --git a/src/app/components/room-card/RoomCard.tsx b/src/app/components/room-card/RoomCard.tsx index ccbd297f..517a0ee3 100644 --- a/src/app/components/room-card/RoomCard.tsx +++ b/src/app/components/room-card/RoomCard.tsx @@ -176,6 +176,7 @@ export const RoomCard = as<'div', RoomCardProps>( ( diff --git a/src/app/features/join-before-navigate/JoinBeforeNavigate.tsx b/src/app/features/join-before-navigate/JoinBeforeNavigate.tsx new file mode 100644 index 00000000..2b9c3e50 --- /dev/null +++ b/src/app/features/join-before-navigate/JoinBeforeNavigate.tsx @@ -0,0 +1,61 @@ +import React from 'react'; +import { Box, Scroll, Text, toRem } from 'folds'; +import { useAtomValue } from 'jotai'; +import { RoomCard } from '../../components/room-card'; +import { RoomTopicViewer } from '../../components/room-topic-viewer'; +import { Page, PageHeader } from '../../components/page'; +import { RoomSummaryLoader } from '../../components/RoomSummaryLoader'; +import { useRoomNavigate } from '../../hooks/useRoomNavigate'; +import { useMatrixClient } from '../../hooks/useMatrixClient'; +import { allRoomsAtom } from '../../state/room-list/roomList'; + +type JoinBeforeNavigateProps = { roomIdOrAlias: string }; +export function JoinBeforeNavigate({ roomIdOrAlias }: JoinBeforeNavigateProps) { + const mx = useMatrixClient(); + const allRooms = useAtomValue(allRoomsAtom); + const { navigateRoom, navigateSpace } = useRoomNavigate(); + + const handleView = (roomId: string) => { + if (mx.getRoom(roomId)?.isSpaceRoom()) { + navigateSpace(roomId); + return; + } + navigateRoom(roomId); + }; + + return ( + + + + + {roomIdOrAlias} + + + + + + + + {(summary) => ( + ( + + )} + onView={handleView} + /> + )} + + + + + + ); +} diff --git a/src/app/features/join-before-navigate/index.ts b/src/app/features/join-before-navigate/index.ts new file mode 100644 index 00000000..9093325c --- /dev/null +++ b/src/app/features/join-before-navigate/index.ts @@ -0,0 +1 @@ +export * from './JoinBeforeNavigate'; diff --git a/src/app/organisms/room/Room.tsx b/src/app/organisms/room/Room.tsx index 2afe3d99..f26b2572 100644 --- a/src/app/organisms/room/Room.tsx +++ b/src/app/organisms/room/Room.tsx @@ -17,6 +17,7 @@ import { } from '../../state/typingMembers'; import { useMatrixClient } from '../../hooks/useMatrixClient'; import { useSelectedRoom } from '../../hooks/router/useSelectedRoom'; +import { JoinBeforeNavigate } from '../../features/join-before-navigate'; export type RoomBaseViewProps = { room: Room; @@ -51,11 +52,12 @@ export function RoomBaseView({ room, eventId }: RoomBaseViewProps) { export function RoomViewer() { const mx = useMatrixClient(); + const { roomIdOrAlias } = useParams(); const roomId = useSelectedRoom(); const room = mx.getRoom(roomId); const { eventId } = useParams(); - if (!room || !roomId) return

try joining this room

; + if (!room || !roomId) return ; return ; } diff --git a/src/app/pages/client/space/SpaceProvider.tsx b/src/app/pages/client/space/SpaceProvider.tsx index 5365b78b..b107cc61 100644 --- a/src/app/pages/client/space/SpaceProvider.tsx +++ b/src/app/pages/client/space/SpaceProvider.tsx @@ -1,20 +1,22 @@ import React from 'react'; -import { Outlet } from 'react-router-dom'; +import { Outlet, useParams } from 'react-router-dom'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; import { useSpaces } from '../../../state/hooks/roomList'; import { allRoomsAtom } from '../../../state/room-list/roomList'; import { useSelectedSpace } from '../../../hooks/router/useSelectedSpace'; import { SpaceProvider } from '../../../hooks/useSpace'; +import { JoinBeforeNavigate } from '../../../features/join-before-navigate'; export function RouteSpaceProvider() { const mx = useMatrixClient(); const joinedSpaces = useSpaces(mx, allRoomsAtom); + const { spaceIdOrAlias } = useParams(); const selectedSpaceId = useSelectedSpace(); const space = mx.getRoom(selectedSpaceId); if (!space || !joinedSpaces.includes(space.roomId)) { - return

TODO: join space screen

; + return ; } return (