mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import React, {useCallback} from 'react'
2import {msg} from '@lingui/macro'
3import {useLingui} from '@lingui/react'
4
5import {logger} from '#/logger'
6import {useGetConvoForMembers} from '#/state/queries/messages/get-convo-for-members'
7import {logEvent} from 'lib/statsig/statsig'
8import {FAB} from '#/view/com/util/fab/FAB'
9import * as Toast from '#/view/com/util/Toast'
10import {useTheme} from '#/alf'
11import * as Dialog from '#/components/Dialog'
12import {PlusLarge_Stroke2_Corner0_Rounded as Plus} from '#/components/icons/Plus'
13import {SearchablePeopleList} from './SearchablePeopleList'
14
15export function NewChat({
16 control,
17 onNewChat,
18}: {
19 control: Dialog.DialogControlProps
20 onNewChat: (chatId: string) => void
21}) {
22 const t = useTheme()
23 const {_} = useLingui()
24
25 const {mutate: createChat} = useGetConvoForMembers({
26 onSuccess: data => {
27 onNewChat(data.convo.id)
28
29 if (!data.convo.lastMessage) {
30 logEvent('chat:create', {logContext: 'NewChatDialog'})
31 }
32 logEvent('chat:open', {logContext: 'NewChatDialog'})
33 },
34 onError: error => {
35 logger.error('Failed to create chat', {safeMessage: error})
36 Toast.show(_(msg`An issue occurred starting the chat`), 'xmark')
37 },
38 })
39
40 const onCreateChat = useCallback(
41 (did: string) => {
42 control.close(() => createChat([did]))
43 },
44 [control, createChat],
45 )
46
47 return (
48 <>
49 <FAB
50 testID="newChatFAB"
51 onPress={control.open}
52 icon={<Plus size="lg" fill={t.palette.white} />}
53 accessibilityRole="button"
54 accessibilityLabel={_(msg`New chat`)}
55 accessibilityHint=""
56 />
57
58 <Dialog.Outer
59 control={control}
60 testID="newChatDialog"
61 nativeOptions={{sheet: {snapPoints: ['100%']}}}>
62 <SearchablePeopleList
63 title={_(msg`Start a new chat`)}
64 onSelectChat={onCreateChat}
65 />
66 </Dialog.Outer>
67 </>
68 )
69}