'use client'; import React, { useState } from 'react'; import { useRouter } from 'next/navigation'; import { changePassword } from '../../API/profile/updateProfile'; import ForgotPasswordModal from '../../components/auth/ForgotPasswordModal'; import './password.scss'; const PasswordChangePage = () => { const router = useRouter(); const [currentPassword, setCurrentPassword] = useState(''); const [newPassword, setNewPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); const [showPassword, setShowPassword] = useState({ current: false, new: false, confirm: false }); const [passwordStrength, setPasswordStrength] = useState(0); const [showForgotModal, setShowForgotModal] = useState(false); const checkPasswordStrength = (password: string) => { let strength = 0; if (password.length >= 8) strength += 1; if (/[A-Z]/.test(password)) strength += 1; if (/[0-9]/.test(password)) strength += 1; if (/[^A-Za-z0-9]/.test(password)) strength += 1; setPasswordStrength(strength); }; const handleNewPasswordChange = (e: React.ChangeEvent) => { const password = e.target.value; setNewPassword(password); checkPasswordStrength(password); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); if (newPassword !== confirmPassword) { setError("New passwords don't match"); return; } if (newPassword.length < 8) { setError("Password must be at least 8 characters long"); return; } setLoading(true); try { const response = await changePassword(currentPassword, newPassword); if (response.status === 'success') { setSuccess(true); setCurrentPassword(''); setNewPassword(''); setConfirmPassword(''); setPasswordStrength(0); setTimeout(() => router.push('/profile'), 2000); } else { throw new Error(response.message || 'Failed to change password'); } } catch (err: any) { setError(err.message || 'Failed to change password'); } finally { setLoading(false); } }; const getStrengthColor = () => { switch (passwordStrength) { case 0: return 'bg-danger'; case 1: return 'bg-warning'; case 2: return 'bg-info'; case 3: return 'bg-primary'; case 4: return 'bg-success'; default: return 'bg-danger'; } }; const getStrengthText = () => { switch (passwordStrength) { case 0: return 'Very Weak'; case 1: return 'Weak'; case 2: return 'Medium'; case 3: return 'Strong'; case 4: return 'Very Strong'; default: return 'Very Weak'; } }; return (

Change Password

Update your password to keep your account secure

{error && (
{error}
)} {success && (
Password changed successfully! Redirecting...
)}
setCurrentPassword(e.target.value)} required />
Password Strength: = 3 ? 'success' : passwordStrength === 2 ? 'info' : 'danger'}`}> {getStrengthText()}
Password requirements:
  • = 8 ? 'text-success' : ''}> = 8 ? 'bi-check-circle-fill' : 'bi-circle'} me-1`}> At least 8 characters
  • One uppercase letter
  • One number
  • One special character
setConfirmPassword(e.target.value)} required />
{confirmPassword && confirmPassword !== newPassword && (
Passwords don't match
)}
{/* Forgot Password Modal */} setShowForgotModal(false)} isProfileContext={true} />
); }; export default PasswordChangePage;