import { getState, setState } from '../state/store.js'; export interface NavItem { id: string; label: string; icon?: string; requiresAdmin?: boolean; } const defaultNav: NavItem[] = [ { id: 'overview', label: 'Uebersicht', icon: '[*]' }, { id: 'tickets', label: 'Ticketsystem', icon: '[*]' }, { id: 'modules', label: 'Module', icon: '[*]' }, { id: 'settings', label: 'Einstellungen', icon: '[*]' }, { id: 'events', label: 'Events', icon: '[*]' }, { id: 'admin', label: 'Admin', icon: '[*]', requiresAdmin: true } ]; export function renderSidebar(container: HTMLElement, isAdmin: boolean) { container.innerHTML = ''; const brand = document.createElement('div'); brand.className = 'brand'; brand.textContent = 'Papo Control'; const nav = document.createElement('div'); nav.className = 'nav'; defaultNav.forEach((item) => { if (item.requiresAdmin && !isAdmin) return; const a = document.createElement('a'); a.href = `#${item.id}`; a.dataset.target = item.id; a.innerHTML = `${item.icon || ''}${item.label}`; nav.appendChild(a); }); container.appendChild(brand); container.appendChild(nav); } export function initNavigation(onChange: (section: string) => void) { const navLinks = Array.from(document.querySelectorAll('.nav a')); const activate = (section: string) => { navLinks.forEach((link) => link.classList.toggle('active', link.dataset.target === section)); document.querySelectorAll('.section').forEach((sec) => { sec.classList.toggle('active', sec.id === `section-${section}`); }); setState({}); // trigger listeners for potential observers onChange(section); }; navLinks.forEach((link) => { link.addEventListener('click', (e) => { e.preventDefault(); const target = link.dataset.target || 'overview'; history.replaceState(null, '', `#${target}`); activate(target); }); }); const initial = (location.hash || '#overview').replace('#', ''); activate(initial); window.addEventListener('hashchange', () => { const section = (location.hash || '#overview').replace('#', ''); activate(section); }); }