From d552bd0c09a53c7dc13eb815eb0c5102b44c27f9 Mon Sep 17 00:00:00 2001 From: Bastian Wagner Date: Fri, 13 Sep 2024 21:29:41 +0200 Subject: [PATCH] bundle size --- client/angular.json | 8 +++--- client/src/app/core/auth/auth.service.ts | 8 ++++-- .../src/app/core/layout/layout.component.html | 4 +-- .../src/app/core/layout/layout.component.ts | 7 +++++- .../modules/auth/login/login.component.html | 9 ++++++- .../modules/auth/login/login.component.scss | 23 ++++++++++++++++++ client/src/assets/img/key.jpg | Bin 0 -> 144872 bytes client/src/assets/img/key_2.webp | Bin 0 -> 181020 bytes 8 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 client/src/assets/img/key.jpg create mode 100644 client/src/assets/img/key_2.webp diff --git a/client/angular.json b/client/angular.json index 4617cdd..02c5ba5 100644 --- a/client/angular.json +++ b/client/angular.json @@ -44,13 +44,13 @@ "budgets": [ { "type": "initial", - "maximumWarning": "500kB", - "maximumError": "1MB" + "maximumWarning": "5000kB", + "maximumError": "10MB" }, { "type": "anyComponentStyle", - "maximumWarning": "2kB", - "maximumError": "4kB" + "maximumWarning": "20kB", + "maximumError": "40kB" } ], "outputHashing": "all" diff --git a/client/src/app/core/auth/auth.service.ts b/client/src/app/core/auth/auth.service.ts index 227ad15..8351257 100644 --- a/client/src/app/core/auth/auth.service.ts +++ b/client/src/app/core/auth/auth.service.ts @@ -1,9 +1,10 @@ import { HttpClient } from '@angular/common/http'; import { inject, Injectable } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject, Observable, tap, of, catchError } from 'rxjs'; import { IUser } from '../../model/interface/user.interface'; import { environment } from '../../../environments/environment.development'; +import { HotToastService } from '@ngxpert/hot-toast'; @Injectable({ providedIn: 'root' @@ -13,7 +14,8 @@ export class AuthService { private accessTokenSubject = new BehaviorSubject(null); private refreshToken: string | null = null; private http: HttpClient = inject(HttpClient); - private route: ActivatedRoute = inject(ActivatedRoute); + private router: Router = inject(Router); + private toast: HotToastService = inject(HotToastService); private user: IUser | null = null; @@ -99,6 +101,8 @@ export class AuthService { this.refreshToken = null; localStorage.removeItem('accessToken_vault'); localStorage.removeItem('refreshToken_vault'); + this.router.navigateByUrl('/login'); + this.toast.show('Du wurdest ausgeloggt.') } public routeToLogin() { diff --git a/client/src/app/core/layout/layout.component.html b/client/src/app/core/layout/layout.component.html index f34319c..eb9d634 100644 --- a/client/src/app/core/layout/layout.component.html +++ b/client/src/app/core/layout/layout.component.html @@ -7,8 +7,8 @@ - diff --git a/client/src/app/core/layout/layout.component.ts b/client/src/app/core/layout/layout.component.ts index 33274e2..67e21c3 100644 --- a/client/src/app/core/layout/layout.component.ts +++ b/client/src/app/core/layout/layout.component.ts @@ -1,9 +1,10 @@ -import { Component } from '@angular/core'; +import { Component, inject } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; import { MatSidenavModule } from '@angular/material/sidenav'; import { MatToolbarModule } from '@angular/material/toolbar'; import { RouterModule } from '@angular/router'; +import { AuthService } from '../auth/auth.service'; @Component({ selector: 'app-layout', @@ -13,5 +14,9 @@ import { RouterModule } from '@angular/router'; styleUrl: './layout.component.scss' }) export class LayoutComponent { + private authService: AuthService = inject(AuthService); + logout(){ + this.authService.logout(); + } } diff --git a/client/src/app/modules/auth/login/login.component.html b/client/src/app/modules/auth/login/login.component.html index 6e2f42f..8ad5d48 100644 --- a/client/src/app/modules/auth/login/login.component.html +++ b/client/src/app/modules/auth/login/login.component.html @@ -1 +1,8 @@ - \ No newline at end of file +
+

+ Du bist nicht eingeloggt. Logge dich ein um zu Beginnen. +

+
+ +
+
\ No newline at end of file diff --git a/client/src/app/modules/auth/login/login.component.scss b/client/src/app/modules/auth/login/login.component.scss index e69de29..111c9bc 100644 --- a/client/src/app/modules/auth/login/login.component.scss +++ b/client/src/app/modules/auth/login/login.component.scss @@ -0,0 +1,23 @@ +:host { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; + width: 100vw; + background-image: url("../../../../assets/img/key_2.webp"); + background-size: cover; +} + +.container { + padding: 36px; + // border: 1px solid #ccc; + border-radius: 24px; + display: flex; + flex-direction: column; + align-items: center; + color: white; + gap: 24px; + background: rgba(50, 50, 50, 0.4); /* halbtransparentes Weiß */ + backdrop-filter: blur(5px); /* Unschärfe */ +} \ No newline at end of file diff --git a/client/src/assets/img/key.jpg b/client/src/assets/img/key.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d318751579d4398a7c49ab66c93a40442dbb4380 GIT binary patch literal 144872 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