52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
import PropTypes from 'prop-types';
|
|
import * as React from 'react';
|
|
import { useNavigate } from 'react-router-dom';
|
|
|
|
import * as URLS from 'config/urls';
|
|
import ConfirmationDialog from 'components/ConfirmationDialog';
|
|
import apolloClient from 'graphql/client';
|
|
import useAuthentication from 'hooks/useAuthentication';
|
|
import useFormatMessage from 'hooks/useFormatMessage';
|
|
import useCurrentUser from 'hooks/useCurrentUser';
|
|
import useDeleteCurrentUser from 'hooks/useDeleteCurrentUser';
|
|
|
|
function DeleteAccountDialog(props) {
|
|
const formatMessage = useFormatMessage();
|
|
const { data } = useCurrentUser();
|
|
const currentUser = data?.data;
|
|
|
|
const { mutateAsync: deleteCurrentUser } = useDeleteCurrentUser(
|
|
currentUser.id,
|
|
);
|
|
|
|
const authentication = useAuthentication();
|
|
const navigate = useNavigate();
|
|
|
|
const handleConfirm = React.useCallback(async () => {
|
|
await deleteCurrentUser();
|
|
|
|
authentication.removeToken();
|
|
|
|
await apolloClient.clearStore();
|
|
|
|
navigate(URLS.LOGIN);
|
|
}, [deleteCurrentUser, authentication, navigate]);
|
|
|
|
return (
|
|
<ConfirmationDialog
|
|
title={formatMessage('deleteAccountDialog.title')}
|
|
description={formatMessage('deleteAccountDialog.description')}
|
|
onClose={props.onClose}
|
|
onConfirm={handleConfirm}
|
|
cancelButtonChildren={formatMessage('deleteAccountDialog.cancel')}
|
|
confirmButtonChildren={formatMessage('deleteAccountDialog.confirm')}
|
|
/>
|
|
);
|
|
}
|
|
|
|
DeleteAccountDialog.propTypes = {
|
|
onClose: PropTypes.func.isRequired,
|
|
};
|
|
|
|
export default DeleteAccountDialog;
|