import { Modal, Field, FieldGroup, ToggleSwitch, TextInput, TextAreaInput, ButtonGroup, Button, Icon, Box } from '@rocket.chat/fuselage'; import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; import React, { ReactElement } from 'react'; import { IMessage } from '../../../definition/IMessage'; import { IRoom } from '../../../definition/IRoom'; import { IUser } from '../../../definition/IUser'; import { useTranslation } from '../../contexts/TranslationContext'; import { useEndpointActionExperimental } from '../../hooks/useEndpointActionExperimental'; import { useForm } from '../../hooks/useForm'; 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 { values, handlers } = useForm({ name: nameSuggestion || '', parentRoom: '', encrypted: false, usernames: [], firstMessage: '', }); const { name, parentRoom, encrypted, usernames, firstMessage } = values as CreateDiscussionFormValues; const { handleName, handleParentRoom, handleEncrypted, handleUsernames, handleFirstMessage } = handlers; const canCreate = (parentRoom || defaultParentRoom) && name; const createDiscussion = useEndpointActionExperimental('POST', 'rooms.createDiscussion'); const create = useMutableCallback(async (): Promise => { try { const result = await createDiscussion({ prid: defaultParentRoom || parentRoom, // eslint-disable-next-line @typescript-eslint/camelcase t_name: name, users: usernames, reply: encrypted ? undefined : firstMessage, ...(parentMessageId && { pmid: parentMessageId }), }); goToRoomById(result.discussion._id); onClose(); } catch (error) { console.warn(error); } }); const onChangeUsers = useMutableCallback((value, action) => { if (!action) { if (usernames.includes(value)) { return; } return handleUsernames([...usernames, value]); } handleUsernames(usernames.filter((current) => current !== value)); }); return ( {t('Discussion_title')} {t('Discussion_description')} {t('Discussion_target_channel')} {defaultParentRoom && } {!defaultParentRoom && ( )} {t('Encrypted')} {t('Discussion_name')} } placeholder={t('New_discussion_name')} /> {t('Invite_Users')} {t('Discussion_first_message_title')} {encrypted && {t('Discussion_first_message_disabled_due_to_e2e')}} ); }; export default CreateDiscussion;