import React, { useCallback, useState, useMemo, useEffect } from 'react'; import { Button, ButtonGroup, TextInput, Field, Select, Icon } from '@rocket.chat/fuselage'; import { useTranslation } from '../../contexts/TranslationContext'; import { useMethod } from '../../contexts/ServerContext'; import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext'; import { useSetModal } from '../../contexts/ModalContext'; import VerticalBar from '../../components/basic/VerticalBar'; import DeleteSuccessModal from '../../components/DeleteSuccessModal'; import DeleteWarningModal from '../../components/DeleteWarningModal'; export function EditCustomUserStatus({ close, onChange, data, ...props }) { const t = useTranslation(); const dispatchToastMessage = useToastMessageDispatch(); const { _id, name: previousName, statusType: previousStatusType } = data || {}; const [name, setName] = useState(''); const [statusType, setStatusType] = useState(''); const setModal = useSetModal(); useEffect(() => { setName(previousName || ''); setStatusType(previousStatusType || ''); }, [previousName, previousStatusType, _id]); const saveStatus = useMethod('insertOrUpdateUserStatus'); const deleteStatus = useMethod('deleteCustomUserStatus'); const hasUnsavedChanges = useMemo(() => previousName !== name || previousStatusType !== statusType, [name, previousName, previousStatusType, statusType]); const handleSave = useCallback(async () => { try { await saveStatus({ _id, previousName, previousStatusType, name, statusType, }); dispatchToastMessage({ type: 'success', message: t('Custom_User_Status_Updated_Successfully') }); onChange(); } catch (error) { dispatchToastMessage({ type: 'error', message: error }); } }, [saveStatus, _id, previousName, previousStatusType, name, statusType, dispatchToastMessage, t, onChange]); const onDeleteConfirm = useCallback(async () => { try { await deleteStatus(_id); setModal(() => { setModal(undefined); close(); onChange(); }} />); } catch (error) { dispatchToastMessage({ type: 'error', message: error }); onChange(); } }, [_id, close, deleteStatus, dispatchToastMessage, onChange]); const openConfirmDelete = () => setModal(() => setModal(undefined)} />); const presenceOptions = [ ['online', t('Online')], ['busy', t('Busy')], ['away', t('Away')], ['offline', t('Offline')], ]; return {t('Name')} setName(e.currentTarget.value)} placeholder={t('Name')} /> {t('Presence')}