mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-05-27 12:55:20 -07:00
51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
import {
|
|
filterSessionHelpSections,
|
|
getSessionHelpSectionTabId,
|
|
SESSION_HELP_TABS,
|
|
type SessionHelpSection,
|
|
type SessionHelpTabId,
|
|
} from './session-help-sections';
|
|
|
|
function countRows(sections: SessionHelpSection[]): number {
|
|
return sections.reduce((count, section) => count + section.rows.length, 0);
|
|
}
|
|
|
|
function sectionMatchesTab(section: SessionHelpSection, tabId: SessionHelpTabId): boolean {
|
|
return getSessionHelpSectionTabId(section) === tabId;
|
|
}
|
|
|
|
export function buildVisibleSessionHelpSections(
|
|
sections: SessionHelpSection[],
|
|
tabId: SessionHelpTabId,
|
|
query: string,
|
|
): SessionHelpSection[] {
|
|
if (query.trim()) return filterSessionHelpSections(sections, query);
|
|
return sections.filter((section) => sectionMatchesTab(section, tabId));
|
|
}
|
|
|
|
export function createSessionHelpTabBar(
|
|
sections: SessionHelpSection[],
|
|
activeTabId: SessionHelpTabId,
|
|
onSelect: (tabId: SessionHelpTabId) => void,
|
|
): HTMLElement {
|
|
const tabBar = document.createElement('div');
|
|
tabBar.className = 'session-help-tabs';
|
|
|
|
for (const tab of SESSION_HELP_TABS) {
|
|
const tabSections = sections.filter((section) => sectionMatchesTab(section, tab.id));
|
|
if (tabSections.length === 0) continue;
|
|
|
|
const button = document.createElement('button');
|
|
button.type = 'button';
|
|
button.className = 'session-help-tab';
|
|
button.dataset.sessionHelpTab = tab.id;
|
|
button.setAttribute('aria-pressed', String(tab.id === activeTabId));
|
|
if (tab.id === activeTabId) button.classList.add('active');
|
|
button.textContent = `${tab.label} ${countRows(tabSections)}`;
|
|
button.addEventListener('click', () => onSelect(tab.id));
|
|
tabBar.appendChild(button);
|
|
}
|
|
|
|
return tabBar;
|
|
}
|