Can update profile information
This commit is contained in:
		@@ -1,25 +1,129 @@
 | 
			
		||||
import React, { useRef } from "react";
 | 
			
		||||
import { AsyncWidget } from "../widgets/AsyncWidget";
 | 
			
		||||
import { User, UserApi } from "../api/UserApi";
 | 
			
		||||
import {
 | 
			
		||||
  Alert,
 | 
			
		||||
  Box,
 | 
			
		||||
  Button,
 | 
			
		||||
  Card,
 | 
			
		||||
  CardActions,
 | 
			
		||||
  CardContent,
 | 
			
		||||
  Checkbox,
 | 
			
		||||
  FormControlLabel,
 | 
			
		||||
  TextField,
 | 
			
		||||
  Typography,
 | 
			
		||||
} from "@mui/material";
 | 
			
		||||
import { TimeWidget, formatDate } from "../widgets/TimeWidget";
 | 
			
		||||
import { ServerApi } from "../api/ServerApi";
 | 
			
		||||
 | 
			
		||||
export function ProfileRoute(): React.ReactElement {
 | 
			
		||||
  const [user, setUser] = React.useState<null | User>(null);
 | 
			
		||||
  const [newName, setNewName] = React.useState("");
 | 
			
		||||
 | 
			
		||||
  const [error, setError] = React.useState<string | null>(null);
 | 
			
		||||
  const [success, setSuccess] = React.useState<string | null>(null);
 | 
			
		||||
 | 
			
		||||
  const load = async () => {
 | 
			
		||||
    setUser(await UserApi.GetUserInfo());
 | 
			
		||||
    const u = await UserApi.GetUserInfo();
 | 
			
		||||
    setUser(u);
 | 
			
		||||
    setNewName(u.name);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const counter = useRef(0);
 | 
			
		||||
 | 
			
		||||
  const updateProfile = async () => {
 | 
			
		||||
    try {
 | 
			
		||||
      setSuccess(null);
 | 
			
		||||
      setError(null);
 | 
			
		||||
 | 
			
		||||
      await UserApi.UpdateProfile(newName);
 | 
			
		||||
 | 
			
		||||
      counter.current += 1;
 | 
			
		||||
      setSuccess("Informations du profil mises à jour avec succès !");
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      console.error(e);
 | 
			
		||||
      setError("Echec de la mise à jour du profil !");
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <AsyncWidget
 | 
			
		||||
      loadKey={counter.current}
 | 
			
		||||
      load={load}
 | 
			
		||||
      errMsg="Echec du chargement des informations du compte utilisateur !"
 | 
			
		||||
      build={() => (
 | 
			
		||||
        <>
 | 
			
		||||
          <p>ready !!! {user!.name}</p>
 | 
			
		||||
        </>
 | 
			
		||||
        <div style={{ maxWidth: "500px", margin: "auto" }}>
 | 
			
		||||
          <Typography variant="h3">Profil</Typography>
 | 
			
		||||
 | 
			
		||||
          {error && <Alert severity="error">{error}</Alert>}
 | 
			
		||||
          {success && <Alert severity="success">{success}</Alert>}
 | 
			
		||||
 | 
			
		||||
          <Card style={{ marginTop: "10px" }}>
 | 
			
		||||
            <CardContent>
 | 
			
		||||
              <Typography gutterBottom variant="h5" component="div">
 | 
			
		||||
                Paramètres du compte
 | 
			
		||||
              </Typography>
 | 
			
		||||
 | 
			
		||||
              <Box
 | 
			
		||||
                component="form"
 | 
			
		||||
                sx={{
 | 
			
		||||
                  "& .MuiTextField-root": { m: 1 },
 | 
			
		||||
                }}
 | 
			
		||||
                noValidate
 | 
			
		||||
                autoComplete="off"
 | 
			
		||||
              >
 | 
			
		||||
                <TextField
 | 
			
		||||
                  disabled
 | 
			
		||||
                  fullWidth
 | 
			
		||||
                  label="Identifiant"
 | 
			
		||||
                  value={user?.id}
 | 
			
		||||
                />
 | 
			
		||||
 | 
			
		||||
                <TextField
 | 
			
		||||
                  disabled
 | 
			
		||||
                  fullWidth
 | 
			
		||||
                  label="Création du compte"
 | 
			
		||||
                  value={formatDate(user!.time_create)}
 | 
			
		||||
                />
 | 
			
		||||
 | 
			
		||||
                <TextField
 | 
			
		||||
                  disabled
 | 
			
		||||
                  fullWidth
 | 
			
		||||
                  label="Activation du compte"
 | 
			
		||||
                  value={formatDate(user!.time_activate)}
 | 
			
		||||
                />
 | 
			
		||||
 | 
			
		||||
                <TextField
 | 
			
		||||
                  disabled
 | 
			
		||||
                  fullWidth
 | 
			
		||||
                  label="Adresse mail"
 | 
			
		||||
                  value={user?.email}
 | 
			
		||||
                />
 | 
			
		||||
 | 
			
		||||
                <TextField
 | 
			
		||||
                  fullWidth
 | 
			
		||||
                  label="Nom d'utilisateur"
 | 
			
		||||
                  value={newName}
 | 
			
		||||
                  onChange={(e) => setNewName(e.target.value)}
 | 
			
		||||
                  inputProps={{
 | 
			
		||||
                    maxLength: ServerApi.Config.constraints.user_name_len.max,
 | 
			
		||||
                  }}
 | 
			
		||||
                />
 | 
			
		||||
 | 
			
		||||
                <FormControlLabel
 | 
			
		||||
                  disabled
 | 
			
		||||
                  control={<Checkbox checked={user!.admin} />}
 | 
			
		||||
                  label="Compte administrateur"
 | 
			
		||||
                />
 | 
			
		||||
              </Box>
 | 
			
		||||
            </CardContent>
 | 
			
		||||
            <CardActions>
 | 
			
		||||
              <Button onClick={updateProfile} style={{ marginLeft: "auto" }}>
 | 
			
		||||
                Enregistrer
 | 
			
		||||
              </Button>
 | 
			
		||||
            </CardActions>
 | 
			
		||||
          </Card>
 | 
			
		||||
        </div>
 | 
			
		||||
      )}
 | 
			
		||||
    />
 | 
			
		||||
  );
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user