Files
FlightScore-Frontend/flightscore/src/app-root.ts
T
2026-02-12 16:31:47 +01:00

56 lines
1.4 KiB
TypeScript

import { LitElement, html, css } from 'lit';
import { customElement } from 'lit/decorators.js';
import './pages/not-found-page';
import './components/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';
@customElement('app-root')
export class AppRoot extends LitElement {
private router!: Router;
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') },
]);
this.router.resolve();
this.addEventListener('nav', (e: any) => this.router.navigate(e.detail.path));
}
render() {
return html`
<nav-bar></nav-bar>
<main id="outlet"></main>
<footer-bar></footer-bar>
`;
}
}