diff --git a/components/password/new-password.js b/components/password/new-password.js new file mode 100644 index 0000000..8588d2c --- /dev/null +++ b/components/password/new-password.js @@ -0,0 +1,202 @@ +import {useState, forwardRef} from 'react' +import PropTypes from 'prop-types' +import axios from 'axios' +import {useRouter} from 'next/router' + +import {FormControl, Snackbar, IconButton, Button, Input, InputAdornment, InputLabel, Box, Container, Typography, LinearProgress} from '@mui/material' +import MuiAlert from '@mui/material/Alert' +import Visibility from '@mui/icons-material/Visibility' +import VisibilityOff from '@mui/icons-material/VisibilityOff' +import Link from '@mui/material/Link' + +const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:1337' + +const Alert = forwardRef(function Alert(props, ref) { + return +}) + +export default function NewPassword({code}) { + const router = useRouter() + const [showPassword, setShowPassword] = useState('') + const [showPasswordConfirmation, setShowPasswordConfirmation] = useState('') + const [password, setPassword] = useState('') + const [passwordConfirmation, setPasswordConfirmation] = useState('') + const [loading, setLoading] = useState(false) + const [error, setError] = useState('') + const [open, setOpen] = useState(true) + const [passwordSuccess, setPasswordSuccess] = useState(false) + + const resetForm = () => { + setPassword('') + setPasswordConfirmation('') + } + + const changePassword = async () => { + setLoading(true) + try { + await axios.post(`${API_URL}/auth/reset-password`, { + code, + password, + passwordConfirmation + }) + setLoading(false) + setPasswordSuccess(true) + setTimeout(() => { + router.push('/soumet') + }, 10_000) + } catch { + setOpen(true) + setError('Une erreur s’est produite. Veuillez réessayer ultérieurement') + } + } + + const handleMouseDownPassword = event => { + event.preventDefault() + } + + const handleMouseDownPasswordConfirmation = event => { + event.preventDefault() + } + + const handleKeyUpPassword = event => { + if (event.keyCode === 13) { + handleClick() + } + } + + const handleKeyUpPasswordConfirmation = event => { + if (event.keyCode === 13) { + handleClick() + } + } + + const handleClick = async () => { + if (password !== passwordConfirmation) { + setOpen(true) + setError('Les 2 mots de passe de correspondent pas') + return + } + + if (password.length < 6) { + setOpen(true) + setError('Le mot de passe est trop court, 6 caratères minimum') + return + } + + await changePassword() + setLoading(false) + resetForm() + } + + const handleClose = (event, reason) => { + if (reason === 'clickaway') { + return + } + + setOpen(false) + setError('') + } + + return ( + + + Nouveau mot de passe + + Mot de passe + + setShowPassword(!showPassword)} + onMouseDown={handleMouseDownPassword} + > + {showPassword ? : } + + + } + onChange={event => setPassword(event.target.value)} + onKeyUp={handleKeyUpPassword} + /> + + + Vérification du mot de passe + + setShowPasswordConfirmation(!showPassword)} + onMouseDown={handleMouseDownPasswordConfirmation} + > + {showPasswordConfirmation ? : } + + + } + onChange={event => setPasswordConfirmation(event.target.value)} + onKeyUp={handleKeyUpPasswordConfirmation} + /> + + + + + + {loading && } + + {error && ( + + {error} + + )} + + {passwordSuccess && ( + + Votre changement de mot de passe a été pris en compte. Vous serez redirigé vers la page de connexion. Cliquez ici si vous n’êtes pas redirigé vers la page de connexion + + )} + + ) +} + +NewPassword.propTypes = { + code: PropTypes.string.isRequired +}