Added login/logout button to topbar.

This commit is contained in:
Tom 2025-04-07 14:27:46 +00:00
parent 3e9a9f9dc5
commit b8a92534d9
11 changed files with 124 additions and 4 deletions

View File

@ -0,0 +1,6 @@
<button mat-icon-button
class="neutral"
matTooltip="Navigate to the log in page"
(click)="login()">
<mat-icon>login</mat-icon>
</button>

View File

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { LoginButtonComponent } from './login-button.component';
describe('LoginButtonComponent', () => {
let component: LoginButtonComponent;
let fixture: ComponentFixture<LoginButtonComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [LoginButtonComponent]
})
.compileComponents();
fixture = TestBed.createComponent(LoginButtonComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,28 @@
import { Component, inject } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatTooltipModule } from '@angular/material/tooltip';
import { ReactiveFormsModule } from '@angular/forms';
import { Router } from '@angular/router';
@Component({
selector: 'login-button',
standalone: true,
imports: [
MatButtonModule,
MatIconModule,
MatFormFieldModule,
MatTooltipModule,
ReactiveFormsModule,
],
templateUrl: './login-button.component.html',
styleUrl: './login-button.component.scss'
})
export class LoginButtonComponent {
private readonly router = inject(Router);
login() {
this.router.navigate(['login']);
}
}

View File

@ -0,0 +1,6 @@
<button mat-icon-button
class="danger"
matTooltip="Log off"
(click)="logoff()">
<mat-icon>logout</mat-icon>
</button>

View File

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { LogoffButtonComponent } from './logoff-button.component';
describe('LogoffButtonComponent', () => {
let component: LogoffButtonComponent;
let fixture: ComponentFixture<LogoffButtonComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [LogoffButtonComponent]
})
.compileComponents();
fixture = TestBed.createComponent(LogoffButtonComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,28 @@
import { Component, inject } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatTooltipModule } from '@angular/material/tooltip';
import { ReactiveFormsModule } from '@angular/forms';
import { ApiAuthenticationService } from '../../shared/services/api/api-authentication.service';
@Component({
selector: 'logoff-button',
standalone: true,
imports: [
MatButtonModule,
MatIconModule,
MatFormFieldModule,
MatTooltipModule,
ReactiveFormsModule,
],
templateUrl: './logoff-button.component.html',
styleUrl: './logoff-button.component.scss'
})
export class LogoffButtonComponent {
private readonly auth = inject(ApiAuthenticationService);
logoff() {
this.auth.logout();
}
}

View File

@ -31,10 +31,6 @@ export class ConnectionItemComponent {
constructor(@Inject(DOCUMENT) private document: Document) { } constructor(@Inject(DOCUMENT) private document: Document) { }
ngOnInit() {
console.log('coonnn', this.connection())
}
delete() { delete() {
this.client.deleteConnection(this.connection().name); this.client.deleteConnection(this.connection().name);
} }

View File

@ -28,4 +28,10 @@
</div> </div>
} }
<theme /> <theme />
@if (isLoggedIn) {
<logoff-button />
} @else {
<login-button />
}
</mat-toolbar> </mat-toolbar>

View File

@ -10,6 +10,8 @@ import { HermesClientService } from '../../hermes-client.service';
import EventService from '../../shared/services/EventService'; import EventService from '../../shared/services/EventService';
import { Subscription } from 'rxjs'; import { Subscription } from 'rxjs';
import { ThemeComponent } from "../../theme/theme.component"; import { ThemeComponent } from "../../theme/theme.component";
import { LogoffButtonComponent } from "../../auth/logoff-button/logoff-button.component";
import { LoginButtonComponent } from "../../auth/login-button/login-button.component";
@Component({ @Component({
selector: 'topbar', selector: 'topbar',
@ -21,6 +23,8 @@ import { ThemeComponent } from "../../theme/theme.component";
MatIconModule, MatIconModule,
MatToolbarModule, MatToolbarModule,
ThemeComponent, ThemeComponent,
LoginButtonComponent,
LogoffButtonComponent,
], ],
providers: [AuthVisitorGuard], providers: [AuthVisitorGuard],
templateUrl: './topbar.component.html', templateUrl: './topbar.component.html',