export function mountAppBar({ onManageAccess } = {}) {
const header = document.querySelector('#site-header');
if (!header) throw new Error('Global app bar mount point is missing.');
header.innerHTML = `
ORA
Our Recipe Atlas
`;
header.insertAdjacentHTML('afterend', `
`);
const elements = {
menuButton: document.querySelector('#access-menu-button'),
profileImage: document.querySelector('#profile-image'),
profileName: document.querySelector('#profile-name'),
drawer: document.querySelector('#access-drawer'),
closeButton: document.querySelector('#close-access-drawer'),
backdrop: document.querySelector('#drawer-backdrop'),
manageAccessButton: document.querySelector('#open-access-overlay'),
drawerUserName: document.querySelector('#drawer-user-name'),
drawerUserEmail: document.querySelector('#drawer-user-email'),
};
function setOpen(open) {
elements.menuButton.setAttribute('aria-expanded', String(open));
elements.drawer.setAttribute('aria-hidden', String(!open));
elements.drawer.hidden = !open;
elements.backdrop.hidden = !open;
document.body.classList.toggle('drawer-open', open);
if (open) elements.closeButton.focus();
else elements.menuButton.focus();
}
elements.menuButton.addEventListener('click', () => setOpen(true));
elements.closeButton.addEventListener('click', () => setOpen(false));
elements.backdrop.addEventListener('click', () => setOpen(false));
elements.manageAccessButton.addEventListener('click', () => {
setOpen(false);
if (onManageAccess) onManageAccess();
else window.location.assign('/?manage-access=1');
});
document.addEventListener('keydown', (event) => {
if (event.key === 'Escape' && !elements.drawer.hidden) setOpen(false);
});
return {
focusMenuButton() {
elements.menuButton.focus();
},
setUser(user) {
elements.profileName.textContent = user.name || user.email;
if (user.picture) {
elements.profileImage.src = user.picture;
elements.profileImage.alt = `${user.name || user.email} 프로필`;
elements.profileImage.hidden = false;
}
elements.drawerUserName.textContent = user.name || user.email;
elements.drawerUserEmail.textContent = user.email;
elements.manageAccessButton.hidden = !user.canManageAccess;
},
};
}