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/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 setModal = useSetModal(); const { _id, name: previousName, statusType: previousStatusType } = data || {}; const [name, setName] = useState(() => data?.name ?? ''); const [statusType, setStatusType] = useState(() => data?.statusType ?? ''); 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 handleDeleteButtonClick = useCallback(() => { const handleClose = () => { setModal(null); close(); onChange(); }; const handleDelete = async () => { try { await deleteStatus(_id); setModal(() => ); } catch (error) { dispatchToastMessage({ type: 'error', message: error }); onChange(); } }; const handleCancel = () => { setModal(null); }; setModal(() => ); }, [_id, close, deleteStatus, dispatchToastMessage, onChange, setModal, t]); 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')}