export default class Navbar {
constructor(navigateCallback, isUserLoggedIn) {
this.navigateCallback = navigateCallback;
this.isUserLoggedIn = isUserLoggedIn;
}
render() {
const navbarElement = document.createElement('header');
navbarElement.className = 'navbar';
const menuItems = this.isUserLoggedIn
? ['','register', 'backend', 'logout']
: ['login','register'];
menuItems.forEach(item => {
const linkElement = document.createElement('a');
linkElement.href = '#';
linkElement.textContent = item.charAt(0).toUpperCase() + item.slice(1);
linkElement.dataset.link = item;
linkElement.addEventListener('click', (event) => this.onNavigate(event, item));
navbarElement.appendChild(linkElement);
});
const hamburgerIcon = document.createElement('span');
hamburgerIcon.className = 'hamburger-icon';
hamburgerIcon.innerHTML = '☰';
hamburgerIcon.addEventListener('click', this.toggleHamburgerMenu);
navbarElement.appendChild(hamburgerIcon);
return navbarElement;
}
onNavigate(event, link) {
event.preventDefault();
this.navigateCallback(link);
}
toggleHamburgerMenu() {
const navbarElement = document.querySelector('.navbar');
navbarElement.classList.toggle('responsive');
}
update(isUserLoggedIn) {
this.isUserLoggedIn = isUserLoggedIn;
const navbarElement = this.render();
document.body.replaceChild(navbarElement, document.querySelector('header'));
}
}
|