const TYPE_FILTER_KEY = 'bugmedley.ui.typeFilters.v1'; let issueSearchTerm = ''; let issueTypeFilters = loadTypeFilters(); function loadTypeFilters() { try { const saved = localStorage.getItem(TYPE_FILTER_KEY); if (saved) { const parsed = JSON.parse(saved); if (typeof parsed.addressed === 'boolean' && typeof parsed.known === 'boolean') { return parsed; } } } catch (_) {} return { addressed: true, known: true }; } function saveTypeFilters() { try { localStorage.setItem(TYPE_FILTER_KEY, JSON.stringify(issueTypeFilters)); } catch (_) {} } export function initializeUI({ onSelectionChange }) { initializeIssueSearch(); initializeIssueTypeFilters(onSelectionChange); updateIssueSectionVisibility(); updateIssueCounts(); } export function getIssueTypeFilters() { return issueTypeFilters; } export function applyIssueSearchFilter() { const issueItems = document.querySelectorAll('.issue-search-item'); issueItems.forEach(item => { const itemText = item.textContent.toLowerCase(); const matches = issueSearchTerm === '' || itemText.includes(issueSearchTerm); if (item.tagName === 'TR') { item.style.display = matches ? 'table-row' : 'none'; } else { item.style.display = matches ? '' : 'none'; } }); updateIssueCounts(); } function initializeIssueSearch() { const searchInput = document.getElementById('issue-search'); searchInput.addEventListener('input', () => { issueSearchTerm = searchInput.value.trim().toLowerCase(); applyIssueSearchFilter(); }); } function initializeIssueTypeFilters(onSelectionChange) { const addressedFilter = document.getElementById('filter-addressed'); const knownFilter = document.getElementById('filter-known'); // Restore checkbox state from persisted filters addressedFilter.checked = issueTypeFilters.addressed; knownFilter.checked = issueTypeFilters.known; addressedFilter.addEventListener('change', () => { if (!addressedFilter.checked && !knownFilter.checked) { addressedFilter.checked = true; } issueTypeFilters = { addressed: addressedFilter.checked, known: knownFilter.checked }; saveTypeFilters(); updateIssueSectionVisibility(); if (typeof onSelectionChange === 'function') { onSelectionChange(); } }); knownFilter.addEventListener('change', () => { if (!knownFilter.checked && !addressedFilter.checked) { knownFilter.checked = true; } issueTypeFilters = { addressed: addressedFilter.checked, known: knownFilter.checked }; saveTypeFilters(); updateIssueSectionVisibility(); if (typeof onSelectionChange === 'function') { onSelectionChange(); } }); } function updateIssueSectionVisibility() { const addressedSection = document.getElementById('addressed-section'); const knownSection = document.getElementById('known-section'); addressedSection.style.display = issueTypeFilters.addressed ? 'block' : 'none'; knownSection.style.display = issueTypeFilters.known ? 'block' : 'none'; } function updateIssueCounts() { const addressedCount = countVisibleIssueItems('addressed-issues'); const knownCount = countVisibleIssueItems('known-issues'); const addressedCountEl = document.getElementById('addressed-count'); const knownCountEl = document.getElementById('known-count'); if (addressedCountEl) { addressedCountEl.textContent = `(${addressedCount})`; } if (knownCountEl) { knownCountEl.textContent = `(${knownCount})`; } } function countVisibleIssueItems(containerId) { const container = document.getElementById(containerId); if (!container) { return 0; } const items = container.querySelectorAll('.issue-search-item'); return Array.from(items).filter(item => item.style.display !== 'none').length; }