gabriel / musehub public
sessions.ts typescript
36 lines 1.3 KB
Raw
sha256:e519738f2102d625d47828a17d113283cd744577b43551013cb668fd04f1c3fe chore(mwp8/phase5): tick all RG checkboxes; close-out doc (… Sonnet 4.6 18 days ago
1 /**
2 * sessions.ts — MuseHub sessions page module.
3 */
4
5 export function initSessions(): void {
6 const filterTabs = document.querySelectorAll<HTMLAnchorElement>('.sess-filter-tab');
7 const searchInput = document.getElementById('sess-search') as HTMLInputElement | null;
8 const list = document.getElementById('session-rows');
9 let activeFilter = 'all';
10
11 function applyFilters(): void {
12 const q = searchInput ? searchInput.value.toLowerCase() : '';
13 const cards = list ? list.querySelectorAll<HTMLElement>('.sess-card') : [];
14 cards.forEach(card => {
15 const status = (card.dataset.status || '').toLowerCase();
16 const text = (card.dataset.intent || '').toLowerCase() + ' ' + (card.dataset.location || '').toLowerCase();
17 const statusMatch = activeFilter === 'all' || status === activeFilter;
18 const searchMatch = !q || text.includes(q);
19 card.style.display = statusMatch && searchMatch ? '' : 'none';
20 });
21 }
22
23 filterTabs.forEach(tab => {
24 tab.addEventListener('click', e => {
25 e.preventDefault();
26 filterTabs.forEach(t => t.classList.remove('active'));
27 tab.classList.add('active');
28 activeFilter = tab.dataset.filter || 'all';
29 applyFilters();
30 });
31 });
32
33 if (searchInput) {
34 searchInput.addEventListener('input', applyFilters);
35 }
36 }
File History 2 commits
sha256:e519738f2102d625d47828a17d113283cd744577b43551013cb668fd04f1c3fe chore(mwp8/phase5): tick all RG checkboxes; close-out doc (… Sonnet 4.6 18 days ago
sha256:0e5174da777684df43b2db71f282079030ef28bacffb93e19c29ee712b2a8bc4 test(mwp8/phase0): audit — repair+force-push leave stale ca… Sonnet 4.6 20 days ago