import type { IOmnichannelRoom } from '@rocket.chat/core-typings'; import { Field, FieldGroup, TextAreaInput, Box, Divider, FieldLabel, FieldRow } from '@rocket.chat/fuselage'; import { GenericModal } from '@rocket.chat/ui-client'; import { useEndpoint, useRouter, useSetting, useToastMessageDispatch } from '@rocket.chat/ui-contexts'; import { useCallback, useEffect, useId } from 'react'; import { Controller, useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { LegacyRoomManager } from '../../../lib/LegacyRoomManager'; import AutoCompleteAgent from '../components/AutoCompleteAgent'; import AutoCompleteDepartment from '../components/AutoCompleteDepartment'; type ForwardChatModalFormData = { comment: string; department: string; username: string; }; export type ForwardChatModalProps = { room: IOmnichannelRoom; onCancel: () => void; }; const ForwardChatModal = ({ room, onCancel }: ForwardChatModalProps) => { const { t } = useTranslation(); const router = useRouter(); const dispatchToastMessage = useToastMessageDispatch(); const getUserData = useEndpoint('GET', '/v1/users.info'); const idleAgentsAllowedForForwarding = useSetting('Livechat_enabled_when_agent_idle', true); const departmentFieldId = useId(); const userFieldId = useId(); const commentFieldId = useId(); const { handleSubmit, setFocus, control, watch, formState: { isSubmitting }, } = useForm(); useEffect(() => { setFocus('department'); }, [setFocus]); const department = watch('department'); const username = watch('username'); const forwardChat = useEndpoint('POST', '/v1/livechat/room.forward'); const handleForwardChat = useCallback( async ({ department: departmentId, username, comment }: ForwardChatModalFormData) => { try { let userId; if (username) { const { user } = await getUserData({ username }); userId = user?._id; } if (departmentId && userId) { return; } const payload: { roomId: string; departmentId?: string; userId?: string; comment?: string; clientAction: boolean; } = { roomId: room._id, comment, clientAction: true, }; if (departmentId) { payload.departmentId = departmentId; } if (userId) { payload.userId = userId; } await forwardChat(payload); dispatchToastMessage({ type: 'success', message: t('Transferred') }); router.navigate('/home'); LegacyRoomManager.close(room.t + room._id); } catch (error) { dispatchToastMessage({ type: 'error', message: error }); } finally { onCancel(); } }, [room._id, room.t, getUserData, forwardChat, dispatchToastMessage, t, router, onCancel], ); return ( {t('Forward_to_department')} ( )} /> {t('or')} {t('Forward_to_user')} ( )} /> {t('Leave_a_comment')} ({t('Optional')}) } /> ); }; export default ForwardChatModal;