import { LitElement, html, css } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import './pages/not-found-page'; import './components/nav-bar'; import './components/cc/cc-nav-bar'; import './components/footer-bar'; import { Router } from './router/router'; import './pages/home-page'; import './pages/competition-page'; import './pages/auth/login-page'; import './pages/auth/register-page'; import './pages/cc/cc-home-page'; @customElement('app-root') export class AppRoot extends LitElement { private router!: Router; @state() private isCompetitionCenter = false; static styles = css` :host { display: flex; flex-direction: column; min-height: 100vh; } nav-bar { flex: 0 0 auto; } main { flex: 1 0 auto; display: flex; flex-direction: column; } footer-bar { flex: 0 0 auto; } ` firstUpdated() { const outlet = this.shadowRoot?.getElementById('outlet') as HTMLElement; this.router = new Router(outlet, [ { path: '/', view: () => document.createElement('home-page') }, { path: '/competitions', view: () => document.createElement('competition-page') }, { path: '/login', view: () => document.createElement('login-page') }, { path: '/register', view: () => document.createElement('register-page') }, { path: '/cc/', view: () => document.createElement('cc-home-page') }, ]); this.router.onRouteChange = (path: string) => { this.isCompetitionCenter = path.startsWith('/cc'); }; this.router.resolve(); this.addEventListener('nav', (e: any) => this.router.navigate(e.detail.path)); } render() { return html` ${this.isCompetitionCenter ? html`` : html``}
`; } }