import { Field, TextInput, FieldGroup, Modal, Icon, ButtonGroup, Button } from '@rocket.chat/fuselage'; import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; import React, { ReactElement, useState, ChangeEvent, useCallback } from 'react'; import { IUser } from '../../../definition/IUser'; import { USER_STATUS_TEXT_MAX_LENGTH } from '../../components/UserStatus'; import UserStatusMenu from '../../components/UserStatusMenu'; import { useMethod } from '../../contexts/ServerContext'; import { useSetting } from '../../contexts/SettingsContext'; import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext'; import { useTranslation } from '../../contexts/TranslationContext'; type EditStatusModalProps = { onClose: () => void; userStatus: IUser['status']; userStatusText: IUser['statusText']; }; const EditStatusModal = ({ onClose, userStatus, userStatusText }: EditStatusModalProps): ReactElement => { const allowUserStatusMessageChange = useSetting('Accounts_AllowUserStatusMessageChange'); const setUserStatus = useMethod('setUserStatus'); const dispatchToastMessage = useToastMessageDispatch(); const t = useTranslation(); const [statusText, setStatusText] = useState(userStatusText); const [statusType, setStatusType] = useState(userStatus); const [statusTextError, setStatusTextError] = useState(); const handleStatusText = useMutableCallback((e: ChangeEvent): void => { setStatusText(e.currentTarget.value); if (statusText && statusText.length > USER_STATUS_TEXT_MAX_LENGTH) { return setStatusTextError(t('Max_length_is', USER_STATUS_TEXT_MAX_LENGTH)); } return setStatusTextError(undefined); }); const handleStatusType = (type: IUser['status']): void => setStatusType(type); const handleSaveStatus = useCallback(async () => { try { await setUserStatus(statusType, statusText); dispatchToastMessage({ type: 'success', message: t('StatusMessage_Changed_Successfully') }); } catch (error) { dispatchToastMessage({ type: 'error', message: error }); } onClose(); }, [dispatchToastMessage, statusType, statusText, setUserStatus, onClose, t]); return ( {t('Edit_Status')} {t('StatusMessage')} } /> {!allowUserStatusMessageChange && {t('StatusMessage_Change_Disabled')}} {statusTextError} ); }; export default EditStatusModal;