167 lines
5.6 KiB
JavaScript
167 lines
5.6 KiB
JavaScript
(function() {
|
||
'use strict';
|
||
|
||
// CHECK LOGIN STATUS
|
||
function checkLoginStatus() {
|
||
const loggedInUser = sessionStorage.getItem("loggedInUser");
|
||
const loginBtn = document.querySelector('.btn-login');
|
||
|
||
if (loggedInUser && loginBtn) {
|
||
// Mengubah button login menjadi logout
|
||
loginBtn.textContent = 'Logout';
|
||
loginBtn.classList.remove('btn-login');
|
||
loginBtn.classList.add('btn-logout');
|
||
loginBtn.href = '#';
|
||
loginBtn.replaceWith(loginBtn.cloneNode(true));
|
||
|
||
const newLogoutBtn = document.querySelector('.btn-logout');
|
||
if (newLogoutBtn) {
|
||
newLogoutBtn.addEventListener('click', handleLogoutClick);
|
||
}
|
||
|
||
console.log('✅ User logged in:', loggedInUser);
|
||
} else {
|
||
console.log('ℹ️ No user logged in');
|
||
}
|
||
}
|
||
|
||
// LOGOUT CLICK HANDLER
|
||
// Mencegah halaman refresh secara otomatis dan langsung menampilkan jendela pop-up konfirmasi logout
|
||
function handleLogoutClick(e) {
|
||
e.preventDefault();
|
||
showLogoutModal();
|
||
}
|
||
|
||
// SHOW LOGOUT CONFIRMATION MODAL
|
||
function showLogoutModal() {
|
||
const overlay = document.getElementById('logout-overlay');
|
||
if (overlay) {
|
||
overlay.style.display = 'flex';
|
||
setTimeout(() => overlay.classList.add('active'), 10);
|
||
setupModalButtons();
|
||
}
|
||
}
|
||
|
||
// SETUP MODAL BUTTONS
|
||
function setupModalButtons() {
|
||
const cancelBtn = document.getElementById('btn-logout-cancel');
|
||
const confirmBtn = document.getElementById('btn-logout-confirm');
|
||
const overlay = document.getElementById('logout-overlay');
|
||
|
||
// Remove previous listeners (mencegah error double click)
|
||
if (cancelBtn) {
|
||
const newCancelBtn = cancelBtn.cloneNode(true);
|
||
cancelBtn.replaceWith(newCancelBtn);
|
||
newCancelBtn.onclick = closeLogoutModal;
|
||
}
|
||
|
||
if (confirmBtn) {
|
||
const newConfirmBtn = confirmBtn.cloneNode(true);
|
||
confirmBtn.replaceWith(newConfirmBtn);
|
||
newConfirmBtn.onclick = confirmLogout;
|
||
}
|
||
|
||
// Close on overlay click (area gelap)
|
||
if (overlay) {
|
||
overlay.onclick = function(e) {
|
||
if (e.target === overlay) {
|
||
closeLogoutModal();
|
||
}
|
||
};
|
||
}
|
||
|
||
// Aktifkan tombol escape untuk menutup modal
|
||
document.addEventListener('keydown', handleEscapeKey);
|
||
}
|
||
|
||
// HANDLE ESCAPE KEY
|
||
// Menutup jendela pop-up (modal) logout menggunakan tombol keyboard Esc
|
||
function handleEscapeKey(e) {
|
||
if (e.key === 'Escape') {
|
||
const overlay = document.getElementById('logout-overlay');
|
||
if (overlay && overlay.classList.contains('active')) {
|
||
closeLogoutModal();
|
||
}
|
||
}
|
||
}
|
||
|
||
// CLOSE LOGOUT MODAL
|
||
function closeLogoutModal() {
|
||
const overlay = document.getElementById('logout-overlay');
|
||
if (overlay) {
|
||
overlay.classList.remove('active');
|
||
setTimeout(() => {
|
||
overlay.style.display = 'none';
|
||
}, 300);
|
||
}
|
||
|
||
// Remove escape key listener
|
||
document.removeEventListener('keydown', handleEscapeKey);
|
||
}
|
||
|
||
// CONFIRM LOGOUT
|
||
function confirmLogout() {
|
||
console.log("Mencoba logout ke server..."); // Debugging
|
||
|
||
// Panggil PHP untuk hancurkan sesi server
|
||
fetch('Logout.php')
|
||
.then(response => {
|
||
console.log("Respon server:", response);
|
||
return response.json(); // Ubah ke JSON biar bisa dicek
|
||
})
|
||
.then(data => {
|
||
console.log("Status Logout:", data);
|
||
|
||
// Hapus data di browser (Session Storage)
|
||
sessionStorage.removeItem("loggedInUser");
|
||
sessionStorage.removeItem("authToken");
|
||
sessionStorage.clear(); // Bersihkan semuanya biar aman
|
||
|
||
// Tutup Modal & Redirect
|
||
closeLogoutModal();
|
||
showSuccessModal();
|
||
|
||
setTimeout(() => {
|
||
// Redirect ke Homepage
|
||
window.location.replace('Homepage.html');
|
||
}, 1500);
|
||
})
|
||
.catch(error => {
|
||
console.error('Logout error:', error);
|
||
// Fallback: Kalau server error, tetap paksa keluar di tampilan
|
||
sessionStorage.clear();
|
||
window.location.replace('Homepage.html');
|
||
});
|
||
}
|
||
|
||
// SHOW SUCCESS MODAL
|
||
function showSuccessModal() {
|
||
const successOverlay = document.getElementById('logout-success-overlay');
|
||
if (successOverlay) {
|
||
successOverlay.style.display = 'flex';
|
||
setTimeout(() => successOverlay.classList.add('active'), 10);
|
||
|
||
// Auto close after 1.3 seconds
|
||
setTimeout(() => {
|
||
successOverlay.classList.remove('active');
|
||
setTimeout(() => {
|
||
successOverlay.style.display = 'none';
|
||
}, 300);
|
||
}, 1300);
|
||
}
|
||
}
|
||
|
||
|
||
// INITIALIZE
|
||
// Menjamin agar kode tidak mencuri start sebelum elemen HTML tersedia.
|
||
function init() {
|
||
if (document.readyState === 'loading') {
|
||
document.addEventListener('DOMContentLoaded', checkLoginStatus);
|
||
} else {
|
||
checkLoginStatus();
|
||
}
|
||
}
|
||
|
||
init();
|
||
|
||
})(); |