// ═══════════════════════════════════════════════════════════════════ // 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 = `
${cols.map(col => { const colIssues = issues.filter(i => i.status === col.key); return `
${col.icon} ${col.label}
${colIssues.length}
${colIssues.length === 0 ? `
📭
Tidak ada issue
` : colIssues.map(i => renderIssueCard(i)).join('') }
`; }).join('')}
`; } function renderIssueCard(issue) { const prog = getProgramById(issue.programId); const survCount = issue.surveyIds.length; const escCount = issue.escalationIds.length; return `
${issue.id} ${getSevBadge(issue.severity)}
${getProgramBadge(issue.programId)} 📍 ${issue.daerah}
${issue.judul}
${issue.deskripsi}
👤 ${issue.assignee}
`; } // ─── LIST / TABLE VIEW ──────────────────────────────────────────── function renderListView(issues) { document.getElementById('issues-body').innerHTML = `
${issues.length === 0 ? `
🔍
Tidak ada issue
Tidak ada issue yang cocok dengan filter yang dipilih
` : `
${issues.map(i => ` `).join('')}
ID Judul Issue Program Daerah Keparahan Status Ditugaskan ke Tanggal
${i.id}
${i.judul}
${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 ? `🔺` : ''}
` }
`; }