91 lines
2.9 KiB
JavaScript
91 lines
2.9 KiB
JavaScript
document.addEventListener('DOMContentLoaded', function () {
|
|
if (!window.Echo) return;
|
|
if (!window.__authUser) return;
|
|
|
|
var userId = window.__authUser.id;
|
|
var userRole = window.__authUser.role;
|
|
|
|
window.Echo.private('user.' + userId)
|
|
.listen('.NotifikasiCreated', function (e) {
|
|
updateNotifBadge(e.unread_count);
|
|
showToast(e.judul, e.pesan);
|
|
refreshCurrentPage();
|
|
})
|
|
.listen('.PengajuanIzinUpdated', function () {
|
|
refreshCurrentPage();
|
|
})
|
|
.listen('.SuratIzinUpdated', function () {
|
|
refreshCurrentPage();
|
|
})
|
|
.listen('.PresensiUpdated', function () {
|
|
refreshCurrentPage();
|
|
})
|
|
.listen('.LemburUpdated', function () {
|
|
refreshCurrentPage();
|
|
})
|
|
.listen('.PenggunaanPoinUpdated', function () {
|
|
refreshCurrentPage();
|
|
})
|
|
.listen('.CutiUpdated', function () {
|
|
refreshCurrentPage();
|
|
})
|
|
.listen('.TukarShiftUpdated', function () {
|
|
refreshCurrentPage();
|
|
})
|
|
.listen('.JadwalUpdated', function () {
|
|
refreshCurrentPage();
|
|
})
|
|
.listen('.FaceEnrollmentUpdated', function () {
|
|
refreshCurrentPage();
|
|
});
|
|
|
|
if (userRole === 'hrd' || userRole === 'super_admin') {
|
|
window.Echo.private('hrd')
|
|
.listen('.PengajuanBaru', function (e) {
|
|
showToast('Pengajuan Baru', e.namaPegawai + ' - ' + e.detail);
|
|
refreshCurrentPage();
|
|
})
|
|
.listen('.PresensiMasuk', function (e) {
|
|
showToast('Presensi Masuk', e.namaPegawai + ' absen masuk jam ' + e.jamMasuk);
|
|
});
|
|
}
|
|
|
|
window.Echo.channel('pengumuman')
|
|
.listen('.PengumumanCreated', function (e) {
|
|
showToast('📢 Pengumuman', e.judul);
|
|
refreshCurrentPage();
|
|
});
|
|
|
|
function updateNotifBadge(count) {
|
|
var badge = document.getElementById('notif-badge');
|
|
if (!badge) return;
|
|
if (count > 0) {
|
|
badge.textContent = count > 99 ? '99+' : count;
|
|
badge.classList.remove('hidden');
|
|
} else {
|
|
badge.classList.add('hidden');
|
|
}
|
|
}
|
|
|
|
function showToast(title, message) {
|
|
if (typeof Swal === 'undefined') return;
|
|
Swal.fire({
|
|
toast: true,
|
|
position: 'top-end',
|
|
icon: 'info',
|
|
title: title,
|
|
html: '<div style="font-size: 0.875rem; color: #64748b; margin-top: 0.25rem;">' + message + '</div>',
|
|
showConfirmButton: false,
|
|
timer: 4000,
|
|
timerProgressBar: true,
|
|
padding: '1em',
|
|
});
|
|
}
|
|
|
|
function refreshCurrentPage() {
|
|
if (window.Turbo) {
|
|
window.Turbo.visit(window.location.href, { action: 'replace' });
|
|
}
|
|
}
|
|
});
|