// ═══════════════════════════════════════════════════════════════════ // ISSUES PAGE — Kanban + List view for issue management // ═══════════════════════════════════════════════════════════════════ let _issueView = 'kanban'; // 'kanban' | 'list' function renderIssuesPage() { const filtered = getFilteredIssues(); if (_issueView === 'kanban') renderKanbanView(filtered); else renderListView(filtered); } function applyIssueFilters() { renderIssuesPage(); } function switchIssueView(view) { _issueView = view; document.getElementById('kanban-view-btn').classList.toggle('active', view === 'kanban'); document.getElementById('list-view-btn').classList.toggle('active', view === 'list'); renderIssuesPage(); } function getFilteredIssues() { const search = (document.getElementById('issues-search')?.value || '').toLowerCase().trim(); const program = document.getElementById('issues-filter-program')?.value || 'all'; const severity= document.getElementById('issues-filter-severity')?.value || 'all'; return APP_STATE.issues.filter(i => { const matchSearch = !search || i.judul.toLowerCase().includes(search) || i.daerah.toLowerCase().includes(search) || i.provinsi.toLowerCase().includes(search) || i.id.toLowerCase().includes(search); const matchProg = program === 'all' || i.programId === program; const matchSev = severity === 'all' || i.severity === severity; return matchSearch && matchProg && matchSev; }); } // ─── KANBAN VIEW ───────────────────────────────────────────────── function renderKanbanView(issues) { const cols = [ { key: 'open', label: 'Terbuka', icon: '🔴', color: 'var(--red)' }, { key: 'in_progress', label: 'Diproses', icon: '🔵', color: 'var(--blue)' }, { key: 'resolved', label: 'Selesai', icon: '✅', color: 'var(--green)' } ]; document.getElementById('issues-body').innerHTML = `
| ID | Judul Issue | Program | Daerah | Keparahan | Status | Ditugaskan ke | Tanggal | |
|---|---|---|---|---|---|---|---|---|
| ${i.id} | ${getProgramBadge(i.programId)} |
${i.daerah}
${i.provinsi}
|
${getSevBadge(i.severity)} | ${getStatBadge(i.status)} | ${i.assignee} | ${formatDate(i.createdAt)} |
${i.surveyIds.length > 0 ? `📋` : ''}
${i.escalationIds.length > 0 ? `🔺` : ''}
|