import React, { useCallback, useState, useMemo, useEffect } from 'react'; import { Box, Button, ButtonGroup, TextInput, Field, Select, Icon, Skeleton, Throbber, InputBox } from '@rocket.chat/fuselage'; import { useTranslation } from '../../contexts/TranslationContext'; import { useMethod } from '../../contexts/ServerContext'; import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext'; import { Modal } from '../../components/basic/Modal'; import { useEndpointDataExperimental, ENDPOINT_STATES } from '../../hooks/useEndpointDataExperimental'; import VerticalBar from '../../components/basic/VerticalBar'; const DeleteWarningModal = ({ onDelete, onCancel, ...props }) => { const t = useTranslation(); return {t('Are_you_sure')} {t('Custom_User_Status_Delete_Warning')} ; }; const SuccessModal = ({ onClose, ...props }) => { const t = useTranslation(); return {t('Deleted')} {t('Custom_User_Status_Has_Been_Deleted')} ; }; export function EditCustomUserStatusWithData({ _id, cache, ...props }) { const t = useTranslation(); const query = useMemo(() => ({ query: JSON.stringify({ _id }), // TODO: remove cache. Is necessary for data invalidation }), [_id, cache]); const { data, state, error } = useEndpointDataExperimental('custom-user-status.list', query); if (state === ENDPOINT_STATES.LOADING) { return ; } if (error || !data || data.statuses.length < 1) { return {t('Custom_User_Status_Error_Invalid_User_Status')}; } return ; } 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 [modal, setModal] = useState(); 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')}