import React, { useState } from 'react'; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, Alert, CircularProgress, InputAdornment, IconButton } from '@mui/material'; import { Visibility, VisibilityOff } from '@mui/icons-material'; import { changePassword } from '../api/client'; const ChangePasswordModal = ({ open, onClose }) => { const [oldPassword, setOldPassword] = 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 [showOldPassword, setShowOldPassword] = useState(false); const [showNewPassword, setShowNewPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); const handleSubmit = async (e) => { e.preventDefault(); setError(null); setSuccess(false); if (newPassword !== confirmPassword) { setError("New passwords do not match"); return; } if (newPassword.length < 6) { setError("Password must be at least 6 characters"); return; } setLoading(true); try { await changePassword(oldPassword, newPassword); setSuccess(true); setOldPassword(''); setNewPassword(''); setConfirmPassword(''); setTimeout(() => { onClose(); setSuccess(false); }, 1500); } catch (err) { console.error(err); setError(err.response?.data?.detail || "Failed to change password"); } finally { setLoading(false); } }; const handleClose = () => { setError(null); setSuccess(false); onClose(); }; return ( Change Password
{error && {error}} {success && Password changed successfully!} setOldPassword(e.target.value)} required disabled={loading || success} InputProps={{ endAdornment: ( setShowOldPassword(!showOldPassword)} edge="end" > {showOldPassword ? : } ) }} /> setNewPassword(e.target.value)} required disabled={loading || success} InputProps={{ endAdornment: ( setShowNewPassword(!showNewPassword)} edge="end" > {showNewPassword ? : } ) }} /> setConfirmPassword(e.target.value)} required disabled={loading || success} InputProps={{ endAdornment: ( setShowConfirmPassword(!showConfirmPassword)} edge="end" > {showConfirmPassword ? : } ) }} />
); }; export default ChangePasswordModal;