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 `
`
}
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()
})
}
}