56 lines
1.4 KiB
TypeScript
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>
|
|
`;
|
|
}
|
|
} |