mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-03-13 06:30:01 +01:00
* 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
66 lines
2.4 KiB
TypeScript
66 lines
2.4 KiB
TypeScript
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; eventId?: string; viaServers?: string[] };
|
|
export function JoinBeforeNavigate({
|
|
roomIdOrAlias,
|
|
eventId,
|
|
viaServers,
|
|
}: 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, eventId);
|
|
};
|
|
|
|
return (
|
|
<Page>
|
|
<PageHeader>
|
|
<Box grow="Yes" justifyContent="Center" alignItems="Center" gap="200">
|
|
<Text size="H3" truncate>
|
|
{roomIdOrAlias}
|
|
</Text>
|
|
</Box>
|
|
</PageHeader>
|
|
<Box grow="Yes">
|
|
<Scroll hideTrack visibility="Hover" size="0">
|
|
<Box style={{ height: '100%' }} grow="Yes" alignItems="Center" justifyContent="Center">
|
|
<RoomSummaryLoader roomIdOrAlias={roomIdOrAlias}>
|
|
{(summary) => (
|
|
<RoomCard
|
|
style={{ maxWidth: toRem(364), width: '100%' }}
|
|
roomIdOrAlias={roomIdOrAlias}
|
|
allRooms={allRooms}
|
|
avatarUrl={summary?.avatar_url}
|
|
name={summary?.name}
|
|
topic={summary?.topic}
|
|
memberCount={summary?.num_joined_members}
|
|
roomType={summary?.room_type}
|
|
viaServers={viaServers}
|
|
renderTopicViewer={(name, topic, requestClose) => (
|
|
<RoomTopicViewer name={name} topic={topic} requestClose={requestClose} />
|
|
)}
|
|
onView={handleView}
|
|
/>
|
|
)}
|
|
</RoomSummaryLoader>
|
|
</Box>
|
|
</Scroll>
|
|
</Box>
|
|
</Page>
|
|
);
|
|
}
|