114 lines
4.1 KiB
PHP
114 lines
4.1 KiB
PHP
<script>
|
|
// Sidebar functionality
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const sidebar = document.getElementById('sidebar');
|
|
const sidebarToggle = document.getElementById('sidebar-toggle');
|
|
const sidebarClose = document.getElementById('sidebar-close');
|
|
const sidebarOverlay = document.getElementById('sidebar-overlay');
|
|
|
|
// Toggle sidebar on mobile
|
|
if (sidebarToggle) {
|
|
sidebarToggle.addEventListener('click', function() {
|
|
sidebar.classList.remove('-translate-x-full');
|
|
sidebarOverlay.classList.remove('hidden');
|
|
});
|
|
}
|
|
|
|
// Close sidebar on mobile
|
|
if (sidebarClose) {
|
|
sidebarClose.addEventListener('click', function() {
|
|
sidebar.classList.add('-translate-x-full');
|
|
sidebarOverlay.classList.add('hidden');
|
|
});
|
|
}
|
|
|
|
// Close sidebar when clicking overlay
|
|
if (sidebarOverlay) {
|
|
sidebarOverlay.addEventListener('click', function() {
|
|
sidebar.classList.add('-translate-x-full');
|
|
sidebarOverlay.classList.add('hidden');
|
|
});
|
|
}
|
|
|
|
// Close sidebar on escape key
|
|
document.addEventListener('keydown', function(e) {
|
|
if (e.key === 'Escape') {
|
|
sidebar.classList.add('-translate-x-full');
|
|
sidebarOverlay.classList.add('hidden');
|
|
}
|
|
});
|
|
|
|
// Mobile menu dropdown functionality
|
|
const mobileMenuButton = document.getElementById('mobile-menu-button');
|
|
const mobileMenu = document.getElementById('mobile-menu');
|
|
|
|
if (mobileMenuButton && mobileMenu) {
|
|
mobileMenuButton.addEventListener('click', function(e) {
|
|
e.stopPropagation();
|
|
mobileMenu.classList.toggle('hidden');
|
|
});
|
|
|
|
// Close mobile menu when clicking outside
|
|
document.addEventListener('click', function(e) {
|
|
if (!mobileMenuButton.contains(e.target) && !mobileMenu.contains(e.target)) {
|
|
mobileMenu.classList.add('hidden');
|
|
}
|
|
});
|
|
|
|
// Close mobile menu on escape key
|
|
document.addEventListener('keydown', function(e) {
|
|
if (e.key === 'Escape') {
|
|
mobileMenu.classList.add('hidden');
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
// Logout confirmation
|
|
function confirmLogout() {
|
|
Swal.fire({
|
|
title: 'Konfirmasi Logout',
|
|
text: 'Apakah Anda yakin ingin keluar dari sistem?',
|
|
icon: 'warning',
|
|
showCancelButton: true,
|
|
confirmButtonColor: '#d33',
|
|
cancelButtonColor: '#3085d6',
|
|
confirmButtonText: 'Ya, Keluar',
|
|
cancelButtonText: 'Batal',
|
|
customClass: {
|
|
popup: 'rounded-lg',
|
|
confirmButton: 'btn btn-danger px-4 py-2 rounded-md',
|
|
cancelButton: 'btn btn-secondary px-4 py-2 rounded-md'
|
|
}
|
|
}).then((result) => {
|
|
if (result.isConfirmed) {
|
|
// Show loading
|
|
Swal.fire({
|
|
title: 'Logging out...',
|
|
text: 'Mohon tunggu sebentar',
|
|
icon: 'info',
|
|
allowOutsideClick: false,
|
|
showConfirmButton: false,
|
|
willOpen: () => {
|
|
Swal.showLoading();
|
|
}
|
|
});
|
|
|
|
// Create and submit logout form
|
|
const form = document.createElement('form');
|
|
form.method = 'POST';
|
|
form.action = '{{ route('logout') }}';
|
|
|
|
const csrfToken = document.createElement('input');
|
|
csrfToken.type = 'hidden';
|
|
csrfToken.name = '_token';
|
|
csrfToken.value = '{{ csrf_token() }}';
|
|
|
|
form.appendChild(csrfToken);
|
|
document.body.appendChild(form);
|
|
form.submit();
|
|
}
|
|
});
|
|
}
|
|
</script>
|