1 line
5.4 KiB
JavaScript
1 line
5.4 KiB
JavaScript
import{j as e,a as p}from"./vendor-react-BHG7lGYR.js";import{c as N,u as y}from"./vendor-router-D-s5vIeO.js";import{A as v,a as P}from"./AuthButton-ByJY1yM3.js";import{u as L,A as j}from"./usePasswordReset-CY5zVo2R.js";import{E as q}from"./index-BWcMVITa.js";import"./vendor-IYr-MHu4.js";import"./vendor-tanstack-BzWBL1hV.js";import"./vendor-utils-CgOSfOkx.js";import"./vendor-icons-DaGlTw4_.js";function A({message:n,className:d,id:c}){return n?e.jsx("div",{id:c,children:e.jsx(q,{error:n,variant:"inline",severity:"error",className:d,context:{action:"authenticating",resource:"auth"},dismissible:!1})}):null}function E({password:n}){const d=a=>{const r=[];let o=0;a.length>=12?o++:r.push(`Au moins 12 caractères (${a.length}/12)`),/[a-z]/.test(a)&&/[A-Z]/.test(a)?o++:(/[a-z]/.test(a)||r.push("Une minuscule"),/[A-Z]/.test(a)||r.push("Une majuscule")),/\d/.test(a)?o++:r.push("Un chiffre"),/[^a-zA-Z\d]/.test(a)?o++:r.push("Un caractère spécial (!@#$%^&*...)");let t,i;return o<=1?(t="Très faible",i="bg-kodo-red"):o===2?(t="Faible",i="bg-kodo-gold"):o===3?(t="Moyen",i="bg-kodo-gold"):o===4?(t="Fort",i="bg-kodo-lime/100"):(t="Très fort",i="bg-kodo-lime"),{level:o,label:t,color:i,requirements:r}};if(!n)return null;const{level:c,label:f,color:h,requirements:u}=d(n),x=c/4*100;return e.jsxs("div",{className:"mt-2 space-y-2",role:"status","aria-live":"polite","aria-atomic":"true",children:[e.jsxs("div",{children:[e.jsx("div",{className:"w-full bg-kodo-slate rounded-full h-2",role:"progressbar","aria-valuenow":c,"aria-valuemin":0,"aria-valuemax":4,"aria-label":`Force du mot de passe: ${f}`,children:e.jsx("div",{className:`${h} h-2 rounded-full transition-all`,style:{width:`${x}%`},"aria-hidden":"true"})}),e.jsxs("p",{className:"text-xs text-kodo-content-dim mt-1",id:"password-strength-label",children:["Force: ",e.jsx("span",{"aria-live":"polite",children:f})]})]}),u.length>0&&e.jsxs("div",{className:"text-xs text-kodo-content-dim",children:[e.jsx("p",{className:"font-medium mb-1",children:"Requis :"}),e.jsx("ul",{className:"list-disc list-inside space-y-0.5",children:u.map((a,r)=>e.jsx("li",{className:"text-kodo-red",children:a},r))})]})]})}function B(){const[n]=N(),d=y(),{handleReset:c,loading:f,error:h,success:u}=L(),[x,a]=p.useState(null),[r,o]=p.useState({token:"",password:"",confirmPassword:""}),[t,i]=p.useState({});p.useEffect(()=>{const s=n.get("token");s&&(a(s),o(l=>({...l,token:s})))},[n]),p.useEffect(()=>{if(u){const s=setTimeout(()=>{d("/login",{replace:!0})},3e3);return()=>clearTimeout(s)}},[u,d]);const w=()=>{const s={};return r.password?r.password.length<8&&(s.password="Le mot de passe doit contenir au moins 8 caractères"):s.password="Mot de passe requis",r.confirmPassword?r.password!==r.confirmPassword&&(s.confirmPassword="Les mots de passe ne correspondent pas"):s.confirmPassword="Confirmation du mot de passe requise",i(s),Object.keys(s).length===0},g=(s,l)=>{o({...r,[s]:l}),t[s]&&i({...t,[s]:void 0})},b=s=>{const l=r[s];let m;s==="password"?l?l.length<8&&(m="Le mot de passe doit contenir au moins 8 caractères"):m="Mot de passe requis":s==="confirmPassword"&&(l?r.password!==l&&(m="Les mots de passe ne correspondent pas"):m="Confirmation du mot de passe requise"),i(m?{...t,[s]:m}:{...t,[s]:void 0})},k=async s=>{s.preventDefault(),x&&w()&&await c(r)};return x?u?e.jsx(v,{title:"Mot de passe réinitialisé",subtitle:"Votre mot de passe a été modifié avec succès",footerLinks:[{label:"Retour à la connexion",to:"/login"}],children:e.jsx("div",{className:"text-center space-y-4",role:"status","aria-live":"polite",children:e.jsxs("div",{className:"bg-kodo-lime/10 border border-kodo-lime text-kodo-lime px-4 py-4 rounded",role:"alert",children:[e.jsx("p",{className:"font-medium",children:"Succès !"}),e.jsx("p",{className:"text-sm mt-1",children:"Votre mot de passe a été réinitialisé avec succès. Vous allez être redirigé vers la page de connexion..."})]})})}):e.jsx(v,{title:"Réinitialiser le mot de passe",subtitle:"Entrez votre nouveau mot de passe",footerLinks:[{label:"Retour à la connexion",to:"/login"}],children:e.jsxs("form",{onSubmit:k,className:"space-y-4","aria-label":"Formulaire de réinitialisation de mot de passe",children:[h&&e.jsx(A,{message:h.message}),e.jsx(j,{type:"password",label:"Nouveau mot de passe",value:r.password,onChange:s=>g("password",s.target.value),onBlur:()=>b("password"),error:t.password,required:!0,autoComplete:"new-password"}),e.jsx("div",{"aria-live":"polite","aria-atomic":"true",children:e.jsx(E,{password:r.password})}),e.jsx(j,{type:"password",label:"Confirmer le mot de passe",value:r.confirmPassword,onChange:s=>g("confirmPassword",s.target.value),onBlur:()=>b("confirmPassword"),error:t.confirmPassword,required:!0,autoComplete:"new-password"}),e.jsx(P,{type:"submit",loading:f,children:"Réinitialiser le mot de passe"})]})}):e.jsx(v,{title:"Lien de réinitialisation invalide",subtitle:"Le lien de réinitialisation est invalide ou a expiré",footerLinks:[{label:"Demander un nouveau lien",to:"/forgot-password"},{label:"Retour à la connexion",to:"/login"}],children:e.jsx("div",{className:"text-center space-y-4",role:"alert","aria-live":"assertive",children:e.jsxs("div",{className:"bg-kodo-red/10 border border-kodo-red text-kodo-red px-4 py-4 rounded",children:[e.jsx("p",{className:"font-medium",children:"Lien invalide"}),e.jsx("p",{className:"text-sm mt-1",children:"Le lien de réinitialisation est invalide ou a expiré. Veuillez demander un nouveau lien."})]})})})}export{B as ResetPasswordPage,B as default};
|