main #13

Merged
jank merged 4 commits from main into prod 2025-01-21 14:39:33 +00:00
7 changed files with 84 additions and 20 deletions
Showing only changes of commit ba520eea10 - Show all commits

View file

@ -1,15 +1,16 @@
<div class="mx-auto container">
<app-navbar></app-navbar>
<div class="overflow-x-auto">
<button
mat-flat-button
color="secondary"
class="my-3"
(click)="createLink()"
>
<div class="">
<div class="flex flex-row">
<button mat-flat-button color="secondary" class="my-3" (click)="createLink()">
Create new Link
</button>
<div class="ml-auto my-3">
<app-options-menu></app-options-menu>
</div>
</div>
<mat-card appearance="outlined">
<mat-card-content>
<table mat-table [dataSource]="links" class="mat-elevation-z8">
@ -42,11 +43,7 @@
<ng-container matColumnDef="shortLink">
<th mat-header-cell *matHeaderCellDef>Short link</th>
<td mat-cell *matCellDef="let element">
<button
mat-flat-button
class="my-3"
(click)="copyLink(element.id)"
>
<button mat-flat-button class="my-3" (click)="copyLink(element.id)">
Copy short link
</button>
</td>
@ -55,11 +52,7 @@
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef>Actions</th>
<td mat-cell *matCellDef="let element">
<button
mat-flat-button
color="warn"
(click)="deleteLink(element)"
>
<button mat-flat-button color="warn" (click)="deleteLink(element)">
Delete
</button>
</td>

View file

@ -10,10 +10,12 @@ import { MatButtonModule } from '@angular/material/button';
import { MatDialog, MatDialogModule } from '@angular/material/dialog';
import { ConfirmationModalComponent } from '../confirmation-modal/confirmation-modal.component';
import { MatSnackBar } from '@angular/material/snack-bar';
import { OptionsMenuComponent } from '../options-menu/options-menu.component';
import { LogoutService } from '../service/logout.service';
@Component({
selector: 'app-dashboard',
imports: [NavbarComponent, MatTableModule, MatCardModule, MatButtonModule],
imports: [NavbarComponent, MatTableModule, MatCardModule, MatButtonModule, OptionsMenuComponent],
templateUrl: './dashboard.component.html',
styleUrl: './dashboard.component.css',
})

View file

@ -0,0 +1,9 @@
<button mat-icon-button [matMenuTriggerFor]="menu" aria-label="Example icon-button with a menu">
<mat-icon>more_vert</mat-icon>
</button>
<mat-menu #menu="matMenu">
<button (click)="logout()" mat-menu-item>
<mat-icon>logout</mat-icon>
<span>Logout</span>
</button>
</mat-menu>

View file

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

View file

@ -0,0 +1,19 @@
import { Component } from '@angular/core';
import {MatIconModule} from '@angular/material/icon';
import {MatMenuModule} from '@angular/material/menu';
import {MatButtonModule} from '@angular/material/button';
import { LogoutService } from '../service/logout.service';
@Component({
selector: 'app-options-menu',
imports: [MatIconModule, MatMenuModule, MatButtonModule],
templateUrl: './options-menu.component.html',
styleUrl: './options-menu.component.css'
})
export class OptionsMenuComponent {
constructor(private logoutService: LogoutService) {}
logout() {
this.logoutService.logout();
}
}

View file

@ -0,0 +1,18 @@
import { Injectable } from "@angular/core";
import PocketBase from 'pocketbase';
import { environment } from "../../environments/environment";
import { Router } from "@angular/router";
@Injectable({
providedIn: 'root',
})
export class LogoutService {
private pb = new PocketBase(environment.POCKETBASE);
constructor(private router: Router) { }
logout() {
this.pb.authStore.clear();
this.router.navigate(['']);
}
}