Can delete account
This commit is contained in:
		
							
								
								
									
										80
									
								
								geneit_app/src/routes/DeleteAccountRoute.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								geneit_app/src/routes/DeleteAccountRoute.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
import { Button, Typography } from "@mui/material";
 | 
			
		||||
import { Link, useLocation, useNavigate } from "react-router-dom";
 | 
			
		||||
import { useAlert } from "../widgets/AlertDialogProvider";
 | 
			
		||||
import { useConfirm } from "../widgets/ConfirmDialogProvider";
 | 
			
		||||
import { DeleteAccountTokenInfo, UserApi } from "../api/UserApi";
 | 
			
		||||
import React from "react";
 | 
			
		||||
import { AsyncWidget } from "../widgets/AsyncWidget";
 | 
			
		||||
import { AuthApi } from "../api/AuthApi";
 | 
			
		||||
 | 
			
		||||
export function DeleteAccountRoute(): React.ReactElement {
 | 
			
		||||
  const alert = useAlert();
 | 
			
		||||
  const confirm = useConfirm();
 | 
			
		||||
  const navigate = useNavigate();
 | 
			
		||||
 | 
			
		||||
  const { hash } = useLocation();
 | 
			
		||||
  const token = hash.substring(1);
 | 
			
		||||
 | 
			
		||||
  const [info, setInfo] = React.useState<DeleteAccountTokenInfo>();
 | 
			
		||||
 | 
			
		||||
  const checkToken = async () => {
 | 
			
		||||
    setInfo(await UserApi.CheckDeleteAccountToken(token));
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const doDelete = async () => {
 | 
			
		||||
    try {
 | 
			
		||||
      if (
 | 
			
		||||
        !(await confirm.confirm(
 | 
			
		||||
          "Voulez-vous vraiment supprimer votre compte ?",
 | 
			
		||||
          undefined,
 | 
			
		||||
          "Supprimer mon compte"
 | 
			
		||||
        ))
 | 
			
		||||
      )
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
      await UserApi.DeleteAccount(token);
 | 
			
		||||
      AuthApi.RemoveAuthToken();
 | 
			
		||||
 | 
			
		||||
      await alert.alert("Votre compte a été supprimé avec succès !");
 | 
			
		||||
 | 
			
		||||
      navigate("/");
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      console.error(e);
 | 
			
		||||
      alert.alert("Echec de la suppression du compte !");
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <AsyncWidget
 | 
			
		||||
      errMsg="Echec de la validation du jeton de suppression de compte !"
 | 
			
		||||
      load={checkToken}
 | 
			
		||||
      loadKey={token}
 | 
			
		||||
      build={() => (
 | 
			
		||||
        <div
 | 
			
		||||
          style={{
 | 
			
		||||
            height: "100vh",
 | 
			
		||||
            backgroundColor: "#b23c17",
 | 
			
		||||
            color: "white",
 | 
			
		||||
            display: "flex",
 | 
			
		||||
            justifyContent: "center",
 | 
			
		||||
            alignItems: "center",
 | 
			
		||||
            flexDirection: "column",
 | 
			
		||||
          }}
 | 
			
		||||
        >
 | 
			
		||||
          <Typography variant="h3">Suppression de compte</Typography>
 | 
			
		||||
          <p>{info?.email}</p>
 | 
			
		||||
          <p>
 | 
			
		||||
            Voulez-vous vraiment supprimer votre compte ? Cette opération est
 | 
			
		||||
            irréversible !
 | 
			
		||||
          </p>
 | 
			
		||||
          <Button onClick={doDelete} color="inherit">
 | 
			
		||||
            Supprimer mon compte
 | 
			
		||||
          </Button>
 | 
			
		||||
          <Link to="/" style={{ color: "inherit", textDecoration: "none" }}>
 | 
			
		||||
            <Button color="inherit">Annuler</Button>
 | 
			
		||||
          </Link>
 | 
			
		||||
        </div>
 | 
			
		||||
      )}
 | 
			
		||||
    />
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
@@ -274,7 +274,7 @@ function DeleteAccountButton(): React.ReactElement {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div style={{ textAlign: "center" }}>
 | 
			
		||||
    <div style={{ textAlign: "center", margin: "15px 0px" }}>
 | 
			
		||||
      <Button onClick={requestDelete} color="error">
 | 
			
		||||
        Supprimer mon compte
 | 
			
		||||
      </Button>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user