gabriel / musehub public
branches.ts typescript
38 lines 1.3 KB
Raw
sha256:1dd27e6d5c24550177b01b0a171e8375c07cf046b549e7683364706b6522d3bc docs(#139): mark all 11 checklist items resolved, document … Sonnet 5 12 days ago
1 /**
2 * branches.ts — MuseHub branches page module.
3 *
4 * Handles client-side filtering (by type tab) and search across branch rows.
5 */
6
7 export function initBranches(): void {
8 const searchInput = document.getElementById('branch-search') as HTMLInputElement | null;
9 const branchList = document.getElementById('branch-list');
10 const typeTabs = document.querySelectorAll<HTMLAnchorElement>('.br-tab');
11 let activeFilter = 'all';
12
13 function applyFilters(): void {
14 const q = searchInput ? searchInput.value.toLowerCase() : '';
15 const rows = branchList ? branchList.querySelectorAll<HTMLElement>('.br-row') : [];
16 rows.forEach(row => {
17 const name = (row.dataset['branchName'] || '').toLowerCase();
18 const type = (row.dataset['branchType'] || '').toLowerCase();
19 const nameMatch = !q || name.includes(q);
20 const typeMatch = activeFilter === 'all' || type === activeFilter;
21 row.style.display = nameMatch && typeMatch ? '' : 'none';
22 });
23 }
24
25 if (searchInput) {
26 searchInput.addEventListener('input', applyFilters);
27 }
28
29 typeTabs.forEach(tab => {
30 tab.addEventListener('click', e => {
31 e.preventDefault();
32 typeTabs.forEach(t => t.classList.remove('br-tab--active'));
33 tab.classList.add('br-tab--active');
34 activeFilter = tab.dataset['filter'] || 'all';
35 applyFilters();
36 });
37 });
38 }
File History 2 commits
sha256:1dd27e6d5c24550177b01b0a171e8375c07cf046b549e7683364706b6522d3bc docs(#139): mark all 11 checklist items resolved, document … Sonnet 5 12 days ago
sha256:649011bedd713e22f7dca4c4be94bdefbf3b10950d9fc80235928d0b0b823be8 docs: track issue #139 (two-column app-shell refactor) plan… Sonnet 5 12 days ago