gabriel / musehub public
branches.ts typescript
38 lines 1.3 KB
Raw
sha256:3ff9c9863a9891bdcde71b4a43228f66d0493e38b7cc1d09fe9eb7de774046b2 feat: add repair-commit wire endpoint (API parity with repa… Opus 4.8 minor ⚠ breaking 1 day 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 1 commit
sha256:3ff9c9863a9891bdcde71b4a43228f66d0493e38b7cc1d09fe9eb7de774046b2 feat: add repair-commit wire endpoint (API parity with repa… Opus 4.8 minor 1 day ago