import type { IMessage, IRoom, IUser } from '@rocket.chat/core-typings'; import { Modal, Field, FieldGroup, ToggleSwitch, TextInput, TextAreaInput, Button, Icon, Box } from '@rocket.chat/fuselage'; import { useTranslation, useEndpoint } from '@rocket.chat/ui-contexts'; import { useMutation } from '@tanstack/react-query'; import type { ComponentProps, ReactElement } from 'react'; import React from 'react'; import { useForm, Controller } from 'react-hook-form'; import { goToRoomById } from '../../lib/utils/goToRoomById'; import RoomAutoComplete from '../RoomAutoComplete'; import UserAutoCompleteMultiple from '../UserAutoCompleteMultiple'; import DefaultParentRoomField from './DefaultParentRoomField'; type CreateDiscussionFormValues = { name: string; parentRoom: IRoom['_id']; encrypted: boolean; usernames: Array; firstMessage: string; }; type CreateDiscussionProps = { parentMessageId?: IMessage['_id']; onClose: () => void; defaultParentRoom?: IRoom['_id']; nameSuggestion?: string; }; const CreateDiscussion = ({ onClose, defaultParentRoom, parentMessageId, nameSuggestion }: CreateDiscussionProps): ReactElement => { const t = useTranslation(); const { register, formState: { isDirty, errors }, handleSubmit, control, watch, } = useForm({ defaultValues: { name: nameSuggestion || '', parentRoom: '', encrypted: false, usernames: [], firstMessage: '', }, }); const { encrypted } = watch(); const createDiscussion = useEndpoint('POST', '/v1/rooms.createDiscussion'); const createDiscussionMutation = useMutation({ mutationFn: createDiscussion, onSuccess: ({ discussion }) => { goToRoomById(discussion._id); onClose(); }, }); const handleCreate = async ({ name, parentRoom, encrypted, usernames, firstMessage }: CreateDiscussionFormValues) => { createDiscussionMutation.mutate({ prid: defaultParentRoom || parentRoom, t_name: name, users: usernames, reply: encrypted ? undefined : firstMessage, ...(parentMessageId && { pmid: parentMessageId }), }); }; return ( ) => } > {t('Discussion_title')} {t('Discussion_description')} {t('Discussion_target_channel')} {defaultParentRoom && ( } /> )} {!defaultParentRoom && ( ( )} /> )} {errors.parentRoom && {errors.parentRoom.message}} {t('Encrypted')} ( )} /> {t('Discussion_name')} } /> {errors.name && {errors.name.message}} {t('Invite_Users')} ( )} /> {t('Discussion_first_message_title')} {encrypted && {t('Discussion_first_message_disabled_due_to_e2e')}} ); }; export default CreateDiscussion;