Files
cinny/src/app/pages/client/direct/DirectCreate.tsx
T

76 lines
2.4 KiB
TypeScript
Raw Normal View History

2024-07-30 17:48:59 +05:30
import React, { useEffect } from 'react';
import { useNavigate, useSearchParams } from 'react-router-dom';
2025-08-24 18:10:44 +05:30
import { Box, Icon, IconButton, Icons, Scroll } from 'folds';
2024-07-30 17:48:59 +05:30
import { useMatrixClient } from '../../../hooks/useMatrixClient';
import { getDirectCreateSearchParams } from '../../pathSearchParam';
2025-08-24 18:10:44 +05:30
import { getDirectRoomPath } from '../../pathUtils';
2024-07-30 17:48:59 +05:30
import { getDMRoomFor } from '../../../utils/matrix';
import { useDirectRooms } from './useDirectRooms';
2025-08-24 18:10:44 +05:30
import { ScreenSize, useScreenSizeContext } from '../../../hooks/useScreenSize';
import {
Page,
PageContent,
PageContentCenter,
PageHeader,
PageHero,
PageHeroSection,
} from '../../../components/page';
import { BackRouteHandler } from '../../../components/BackRouteHandler';
import { CreateChat } from '../../../features/create-chat';
2024-07-30 17:48:59 +05:30
export function DirectCreate() {
const mx = useMatrixClient();
2025-08-24 18:10:44 +05:30
const screenSize = useScreenSizeContext();
2024-07-30 17:48:59 +05:30
const navigate = useNavigate();
const [searchParams] = useSearchParams();
const { userId } = getDirectCreateSearchParams(searchParams);
2025-08-24 18:10:44 +05:30
2024-07-30 17:48:59 +05:30
const directs = useDirectRooms();
useEffect(() => {
if (userId) {
2025-08-24 18:10:44 +05:30
const roomId = getDMRoomFor(mx, userId)?.roomId;
2024-07-30 17:48:59 +05:30
if (roomId && directs.includes(roomId)) {
navigate(getDirectRoomPath(roomId), { replace: true });
}
}
}, [mx, navigate, directs, userId]);
2025-08-24 18:10:44 +05:30
return (
<Page>
{screenSize === ScreenSize.Mobile && (
<PageHeader balance outlined={false}>
<Box grow="Yes" alignItems="Center" gap="200">
<BackRouteHandler>
{(onBack) => (
<IconButton onClick={onBack}>
<Icon src={Icons.ArrowLeft} />
</IconButton>
)}
</BackRouteHandler>
</Box>
</PageHeader>
)}
<Box grow="Yes">
<Scroll hideTrack visibility="Hover">
<PageContent>
<PageContentCenter>
<PageHeroSection>
<Box direction="Column" gap="700">
<PageHero
icon={<Icon size="600" src={Icons.Mention} />}
title="Create Chat"
subTitle="Start a private, encrypted chat by entering a user ID."
/>
<CreateChat defaultUserId={userId} />
</Box>
</PageHeroSection>
</PageContentCenter>
</PageContent>
</Scroll>
</Box>
</Page>
);
2024-07-30 17:48:59 +05:30
}