RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/views/omnichannel/agents/hooks/useRemoveAgent.tsx

Summary

Maintainability
A
2 hrs
Test Coverage
import type { ILivechatAgent } from '@rocket.chat/core-typings';
import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
import { useSetModal, useToastMessageDispatch, useTranslation, useRouter, useEndpoint } from '@rocket.chat/ui-contexts';
import { useQueryClient } from '@tanstack/react-query';
import React from 'react';

import GenericModal from '../../../../components/GenericModal';

export const useRemoveAgent = (uid: ILivechatAgent['_id']) => {
    const t = useTranslation();
    const router = useRouter();
    const setModal = useSetModal();
    const queryClient = useQueryClient();
    const dispatchToastMessage = useToastMessageDispatch();

    const deleteAction = useEndpoint('DELETE', '/v1/livechat/users/agent/:_id', { _id: uid });

    const handleDelete = useMutableCallback(() => {
        const onDeleteAgent = async () => {
            try {
                await deleteAction();
                dispatchToastMessage({ type: 'success', message: t('Agent_removed') });
                router.navigate('/omnichannel/agents');
                queryClient.invalidateQueries(['livechat-agents']);
            } catch (error) {
                dispatchToastMessage({ type: 'error', message: error });
            } finally {
                setModal();
            }
        };

        setModal(
            <GenericModal
                data-qa-id='remove-agent-modal'
                variant='danger'
                onConfirm={onDeleteAgent}
                onCancel={() => setModal()}
                confirmText={t('Delete')}
            />,
        );
    });

    return handleDelete;
};