kelompok06-2048/Logout.js
Evelyn Sucitro 05623f58df Update
2025-12-15 23:56:52 +07:00

167 lines
5.6 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(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();
})();