import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import logoImage from '../assets/images/logo.jpg'; import '../Styles.css'; const Header = ({ authStatus }) => { const navigate = useNavigate(); // State Modal & Logout const [showProfileModal, setShowProfileModal] = useState(false); const [showLogoutConfirm, setShowLogoutConfirm] = useState(false); // State Mode Edit const [editMode, setEditMode] = useState('none'); // 'none', 'name', 'password' const [tempName, setTempName] = useState(''); const [passData, setPassData] = useState({ newPass: '', confirmPass: '' }); const [isLoading, setIsLoading] = useState(false); const safeAuth = authStatus || {}; const isLoggedIn = safeAuth.isLoggedIn || false; const user = safeAuth.user || { name: 'Pengguna', role: 'user' }; // Gunakan email asli jika ada, jika tidak kosong const userEmail = localStorage.getItem('user_email') || ""; const openModal = () => { setTempName(user.name); setEditMode('none'); setPassData({ newPass: '', confirmPass: '' }); setShowProfileModal(true); }; const onLogoutClick = () => { setShowProfileModal(false); setShowLogoutConfirm(true); }; const confirmLogout = () => { localStorage.removeItem('token'); localStorage.removeItem('user_fullname'); localStorage.removeItem('user_role'); localStorage.removeItem('user_email'); setShowLogoutConfirm(false); window.location.href = '/'; }; const getInitials = (name) => { return name ? name.charAt(0).toUpperCase() : 'U'; }; const handleMainNavigation = () => { if (!isLoggedIn) { navigate('/login'); } else if (user.role === 'admin') { navigate('/admin'); } else { navigate('/diagnosis'); } }; const handleSaveChanges = async () => { setIsLoading(true); const token = localStorage.getItem('token'); let payload = {}; if (editMode === 'name') { if (!tempName.trim()) { alert("Nama tidak boleh kosong"); setIsLoading(false); return; } payload = { full_name: tempName }; } else if (editMode === 'password') { if (passData.newPass.length < 6) { alert("Password minimal 6 karakter"); setIsLoading(false); return; } if (passData.newPass !== passData.confirmPass) { alert("Konfirmasi password tidak cocok"); setIsLoading(false); return; } payload = { new_password: passData.newPass }; } try { const response = await fetch('/api/users/me', { method: 'PUT', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify(payload) }); if (response.ok) { alert("Berhasil diperbarui! Silakan login ulang untuk melihat perubahan."); confirmLogout(); } else { alert("Gagal memperbarui profil."); } } catch (error) { console.error(error); alert("Terjadi kesalahan koneksi."); } finally { setIsLoading(false); } }; return ( <>
navigate('/')} style={{cursor:'pointer'}}> MediChat Logo
navigate('/')} style={{cursor:'pointer'}}>Home
{isLoggedIn && user.role === 'admin' ? "Dashboard Admin" : "Diagnosa"}
{isLoggedIn ? ( ) : ( )}
{/* --- MODAL PROFIL (DESAIN FINAL) --- */} {showProfileModal && (
setShowProfileModal(false)}>
e.stopPropagation()}>
{/* KIRI: Avatar */}
📷
{/* KANAN: Form & Actions */}
{/* Nama Lengkap */}
setTempName(e.target.value)} className={`profile-input ${editMode === 'name' ? 'editable' : ''}`} /> {/* Ikon Pensil untuk Edit Nama */} {editMode === 'none' && ( setEditMode('name')} title="Edit Nama">✏️ )}
{/* Email */}
{/* Area Password (Tampil jika mode password) */} {editMode === 'password' && ( <>
setPassData({...passData, newPass: e.target.value})} />
setPassData({...passData, confirmPass: e.target.value})} />
)} {/* Tombol Aksi */}
{editMode === 'none' ? ( ) : ( <> {/* Simpan Perubahan: Warna Biru Tema */} )}

{/* Footer: Bahasa & Logout di Bawah Kanan */}
Bahasa
{/* Tombol Logout dipindah ke sini */}
)} {/* --- POPUP LOGOUT --- */} {showLogoutConfirm && (
setShowLogoutConfirm(false)}>
e.stopPropagation()}>

Konfirmasi Keluar

Apakah Anda yakin ingin keluar dari sesi ini?

)} ); }; export default Header;