export function renderHeader(currentHandle: string, isLoggedIn: boolean, userHandle?: string): string { const loginBtn = isLoggedIn ? `` : `` // Use logged-in user's handle for input if available const inputHandle = isLoggedIn && userHandle ? userHandle : currentHandle return `
${loginBtn}
` } export interface HeaderCallbacks { onBrowse: (handle: string) => void onLogin: () => void onLogout: () => void } export function mountHeader( container: HTMLElement, currentHandle: string, isLoggedIn: boolean, userHandle: string | undefined, callbacks: HeaderCallbacks, isStatic: boolean = false ): void { // For static pages, only update if login state requires it const existingLoginBtn = container.querySelector('#login-btn') const existingUserBtn = container.querySelector('#user-btn') const needsUpdate = !isStatic || (isLoggedIn && existingLoginBtn) || // Need to show user button (!isLoggedIn && existingUserBtn) // Need to show login button if (needsUpdate) { container.innerHTML = renderHeader(currentHandle, isLoggedIn, userHandle) } const form = document.getElementById('header-form') as HTMLFormElement const input = document.getElementById('header-input') as HTMLInputElement if (!form) return form.addEventListener('submit', (e) => { e.preventDefault() const handle = input.value.trim() if (handle) { callbacks.onBrowse(handle) } }) if (isLoggedIn) { const userBtn = document.getElementById('user-btn') userBtn?.addEventListener('click', async (e) => { e.preventDefault() e.stopPropagation() if (confirm('Logout?')) { await callbacks.onLogout() } }) } else { const loginBtn = document.getElementById('login-btn') loginBtn?.addEventListener('click', (e) => { e.preventDefault() e.stopPropagation() callbacks.onLogin() }) } }