RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/views/room/contextualBar/RoomFiles/hooks/useDeleteFile.tsx

Summary

Maintainability
A
1 hr
Test Coverage
import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
import { useSetModal, useToastMessageDispatch, useMethod, useTranslation } from '@rocket.chat/ui-contexts';
import React from 'react';

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

export const useDeleteFile = (reload: () => void) => {
    const t = useTranslation();
    const setModal = useSetModal();
    const dispatchToastMessage = useToastMessageDispatch();
    const deleteFile = useMethod('deleteFileMessage');

    const handleDelete = useMutableCallback((_id) => {
        const onConfirm = async () => {
            try {
                await deleteFile(_id);
                dispatchToastMessage({ type: 'success', message: t('Deleted') });
                reload();
            } catch (error) {
                dispatchToastMessage({ type: 'error', message: error });
            } finally {
                setModal(null);
            }
        };

        setModal(
            <GenericModal variant='danger' onConfirm={onConfirm} onCancel={() => setModal(null)} confirmText={t('Delete')}>
                {t('Delete_File_Warning')}
            </GenericModal>,
        );
    });

    return handleDelete;
};