import { Alert, Box, Button, Card, CardActions, CardContent, Checkbox, FormControlLabel, TextField, Typography, } from "@mui/material"; import React from "react"; import { ServerApi } from "../api/ServerApi"; import { ReplacePasswordResponse, User, UserApi } from "../api/UserApi"; import { useAlert } from "../hooks/context_providers/AlertDialogProvider"; import { useUser } from "../widgets/BaseAuthenticatedPage"; import { useConfirm } from "../hooks/context_providers/ConfirmDialogProvider"; import { PasswordInput } from "../widgets/PasswordInput"; import { formatDate } from "../widgets/TimeWidget"; export function ProfileRoute(): React.ReactElement { const user = useUser(); return (
Profil user.reloadUserInfo()} /> {user.user.has_password && }
); } function ProfileSettingsCard(p: { user: User; onUpdate: () => void }) { const [newName, setNewName] = React.useState(p.user.name); const [error, setError] = React.useState(null); const [success, setSuccess] = React.useState(null); const updateProfile = async () => { try { setSuccess(null); setError(null); await UserApi.UpdateProfile(newName); p.onUpdate(); setSuccess("Informations du profil enregistrées avec succès !"); } catch (e) { console.error(e); setError("Echec de la mise à jour du profil !"); } }; return ( <> {error && {error}} {success && {success}} Paramètres du compte setNewName(e.target.value)} inputProps={{ maxLength: ServerApi.Config.constraints.user_name_len.max, }} /> } label="Compte administrateur" /> ); } function ChangePasswordCard(): React.ReactElement { const [loading, setLoading] = React.useState(false); const [error, setError] = React.useState(null); const [success, setSuccess] = React.useState(null); const [oldPassword, setOldpassword] = React.useState(""); const [newPassword, setNewpassword] = React.useState(""); const [confirmNewPassword, setConfirmNewpassword] = React.useState(""); const isValid = ServerApi.CheckPassword(newPassword) === null && oldPassword.length > 0 && confirmNewPassword === newPassword; const updatePassword = async (e: React.FormEvent) => { e.preventDefault(); if (!isValid || loading) return; setLoading(true); setSuccess(null); setError(null); try { const result = await UserApi.ReplacePassword(oldPassword, newPassword); switch (result) { case ReplacePasswordResponse.Error: setError("Echec du changement de mot de passe !"); break; case ReplacePasswordResponse.Success: setSuccess("Mot de passe changé avec succès !"); break; case ReplacePasswordResponse.InvalidOldPassword: setError("Ancien mot de passe saisi invalide !"); break; case ReplacePasswordResponse.InvalidNewPassword: setError("Nouveau mot de passe saisi invalide !"); break; case ReplacePasswordResponse.TooManyRequests: setError( "Trop de tentatives de changement de mot de passe, veuillez réessayer ultérieurement !" ); break; } } catch (e) { console.error(e); setError("Echec de la mise à jour du mot de passe !"); } setLoading(false); }; return ( <> {error && {error}} {success && {success}} Changement du mot de passe setOldpassword(e.target.value)} /> setNewpassword(n)} label={"Nouveau mot de passe"} /> setConfirmNewpassword(e.target.value)} /> {" "} ); } function DeleteAccountButton(): React.ReactElement { const alert = useAlert(); const confirm = useConfirm(); const requestDelete = async () => { try { if ( !(await confirm( "Voulez-vous initier la suppression de votre compte ?", "Suppression de compte" )) ) return; await UserApi.RequestAccountDeletion(); await alert( "Demande de suppression de compte enregistrée avec succès. Veuillez consulter votre boîte mail." ); } catch (e) { console.error(e); alert("Echec de la demande de suppression de compte !"); } }; return (
); }