import delve from "dlv"; import axios from "axios"; import {FieldError, SubmitHandler, useForm} from "react-hook-form"; import SeoConfig from "../../components/seo-config/seo-config"; import Layout from "../../components/layout/layout"; import {environment} from "../../environments/environment"; import {ResetPasswordInputs} from "../../libs/api"; import styles from './index.module.scss'; import {useRouter} from "next/router"; import {useState} from "react"; import {resetPasswordStrapi} from "../../libs/auth"; const getPageMetadata = async (path) => { try { return await axios.get(`${environment.strapiApiUrl}/pages?filters[slug]=${path === '/' ? 'home' : path.slice(1, path.length)}&populate=deep`); } catch (e) { console.error(e); return Promise.resolve({}) } } export const getServerSideProps = async (context) => { const path = context.resolvedUrl; const menuHeader = await axios.get(`${environment.strapiApiUrl}/menus/1?nested&populate=deep`); const menuFooter = await axios.get(`${environment.strapiApiUrl}/menus/2?nested&populate=deep`); const page = await getPageMetadata(path); return { props: { menuHeaders: delve(menuHeader, 'data.data.attributes.items.data', []), menuFooter: delve(menuFooter, 'data.data.attributes.items.data', []), page: delve(page, "data.data.0.attributes", {}), seo: delve(page, "data.data.0.attributes.seo", {}) } } } export function ResetPassword({menuHeaders, menuFooter, page, seo}) { const router = useRouter(); const [success, setSuccess] = useState(null); const {register, handleSubmit, getValues, formState: {errors}} = useForm({ defaultValues: { password: null, passwordConfirmation: null, code: router.query ? router.query.code : null } }); const onSubmit: SubmitHandler = async (data: ResetPasswordInputs) => { try { const result = await resetPasswordStrapi({ password: data.password, passwordConfirmation: data.passwordConfirmation, code: data.code }); setSuccess(result); setTimeout(() => router.push('/sign-in'), 5000); } catch (e) { setSuccess(false); } } const hasErrors = () => Object.keys(errors).length > 0; const isBoolean = (val) => typeof val === "boolean"; return ( <>
Phone image

Changer votre mot de passe

Indiquez votre nouveau mot de passe

{isBoolean(success) && success ? (
Mot de passe changé ! vous allez être redirigé vers la page de connexion.
) : ('')} {isBoolean(success) && !success ? (
Oups ! Une erreur est survenue durant le changement du mot de passe. Rapprochez vous de nos équipes pour en savoir plus.
) : ('')}
{errors.password && errors.password.type !== "minLength" && (

{(errors.password as FieldError).message}

)} {errors.password && errors.password.type === "minLength" && (

Le mot de passe doit avoir une longueur minimum de 8 charactères

)}
{ const {password} = getValues(); return password === value || "Les mots de passe ne correspondent pas"; } } })} className={errors.password ? 'bg-red-50 border border-red-500 text-red-900 placeholder-red-700 text-sm rounded-lg focus:ring-red-500 dark:bg-gray-700 focus:border-red-500 block w-full p-2.5 dark:text-red-500 dark:placeholder-red-500 dark:border-red-500' : 'bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full pr-10 p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:placeholder-gray-400 dark:text-white'}/> {errors.passwordConfirmation && (

{(errors.passwordConfirmation as FieldError).message}

)}
); } export default ResetPassword;