diff --git a/povertymap/index.html b/povertymap/index.html index 6391da0..9170c8d 100644 --- a/povertymap/index.html +++ b/povertymap/index.html @@ -11,7 +11,7 @@ - +
@@ -433,6 +433,9 @@ await fetch(API.auth + '?action=logout', { method: 'POST', credentials: 'include' }); currentUser = null; + if (location.hash) { + history.replaceState(null, null, ' '); + } document.getElementById('login-screen').classList.remove('hidden'); document.getElementById('app').classList.add('hidden'); document.getElementById('login-user').value = ''; @@ -473,9 +476,12 @@ buildNav(); window.scrollTo(0, 0); - // Load data dulu, baru render dashboard sekali (mencegah double render) + // Load data dulu await loadAll(); - switchPage('dashboard'); + const hashPage = location.hash.replace('#', ''); + const validPages = getNavItems(currentUser.role).map(item => item.id); + const targetPage = validPages.includes(hashPage) ? hashPage : 'dashboard'; + switchPage(targetPage); } // -- NAV @@ -543,8 +549,23 @@ else cancelAddMode(); renderPage(page); window.scrollTo(0, 0); + + // Update URL hash + if (location.hash !== '#' + page) { + location.hash = page; + } } + // Global listener for SPA back/forward browser buttons + window.addEventListener('hashchange', () => { + if (!currentUser) return; + const hashPage = location.hash.replace('#', ''); + const validPages = getNavItems(currentUser.role).map(item => item.id); + if (validPages.includes(hashPage) && currentPage !== hashPage) { + switchPage(hashPage); + } + }); + // -- RENDER PAGES --------------------------- function renderPage(page) { const area = document.getElementById('page-content'); @@ -1409,6 +1430,8 @@ // -- VERIFY (Table layout) ------------------ let _verifyData = { ibadah: [], warga: [] }; let _verifyTab = 'ibadah'; // active tab: 'ibadah' | 'warga' + let _verifyPage = 1; + let _verifyPerPage = 10; async function renderVerify(area) { area.innerHTML = 'Memuat data pending...
Semua data sudah diverifikasi!
Tidak ada data pending.
Gagal memuat data. Coba refresh.
Tidak ada data yang cocok dengan pencarian.
Tidak ada data yang cocok dengan pencarian.
| Foto | @@ -1503,7 +1553,7 @@Aksi | ||
|---|---|---|---|
| ${ib.foto_path @@ -1512,7 +1562,7 @@ |
${h(ib.nama)}
- ${ib.alamat ? `${h(ib.alamat.substring(0, 45))}${ib.alamat.length > 45 ? ' ' : ''} ` : ''}
+ ${ib.alamat ? `${h(ib.alamat.substring(0, 45))}${ib.alamat.length > 45 ? '...' : ''} ` : ''}
|
${h(ib.jenis)} | ${ib.kecamatan ? 'Kec. ' + h(ib.kecamatan) : ' '} |
@@ -1534,21 +1584,9 @@
Tidak ada data yang cocok dengan pencarian.
| Foto | @@ -1562,7 +1600,7 @@Aksi | |
|---|---|---|
| ${w.foto_path @@ -1571,8 +1609,8 @@ |
${h(w.nama_kk)}
- ${w.alamat ? `${h(w.alamat.substring(0, 45))}${w.alamat.length > 45 ? ' ' : ''} ` : ''}
- ${w.keterangan ? `${h(w.keterangan.substring(0, 40))}${w.keterangan.length > 40 ? ' ' : ''} ` : ''}
+ ${w.alamat ? `${h(w.alamat.substring(0, 45))}${w.alamat.length > 45 ? '...' : ''} ` : ''}
+ ${w.keterangan ? `${h(w.keterangan.substring(0, 40))}${w.keterangan.length > 40 ? '...' : ''} ` : ''}
|
${h(w.nik || ' ')}
@@ -1601,6 +1639,38 @@
|