File
Implements
Methods
ngOnDestroy
|
ngOnDestroy()
|
|
|
cobblerEvents
|
Default value : new MatTableDataSource<Event>([])
|
|
displayedColumns
|
Type : string[]
|
Default value : [
'name',
'state',
'statetime',
'readByWho',
'actions',
]
|
|
Private
ngUnsubscribe
|
Default value : new Subject<void>()
|
|
import { CommonModule, DatePipe } from '@angular/common';
import { Component, Inject, OnDestroy, OnInit } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
import { MatListModule } from '@angular/material/list';
import { MatMenuModule } from '@angular/material/menu';
import { RouterOutlet } from '@angular/router';
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { MatDialog } from '@angular/material/dialog';
import { CobblerApiService, Event } from 'cobbler-api';
import { DialogBoxTextConfirmComponent } from '../common/dialog-box-text-confirm/dialog-box-text-confirm';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
@Component({
selector: 'cobbler-app-events',
templateUrl: './app-events.component.html',
styleUrls: ['./app-events.component.css'],
standalone: true,
imports: [
RouterOutlet,
MatListModule,
MatTableModule,
MatButtonModule,
MatMenuModule,
MatIconModule,
DatePipe,
CommonModule,
],
})
export class AppEventsComponent implements OnInit, OnDestroy {
// Unsubscribe
private ngUnsubscribe = new Subject<void>();
// Table
displayedColumns: string[] = [
'name',
'state',
'statetime',
'readByWho',
'actions',
];
cobblerEvents = new MatTableDataSource<Event>([]);
constructor(
@Inject(MatDialog) readonly dialog: MatDialog,
private cobblerApiService: CobblerApiService,
) {}
ngOnInit(): void {
this.cobblerApiService
.get_events('')
.pipe(takeUntil(this.ngUnsubscribe))
.subscribe((value: Array<Event>) => {
this.cobblerEvents.data = value;
});
}
ngOnDestroy() {
this.ngUnsubscribe.next();
this.ngUnsubscribe.complete();
}
showLogs(eventId: string, name: string) {
this.cobblerApiService
.get_event_log(eventId)
.pipe(takeUntil(this.ngUnsubscribe))
.subscribe((value: string) => {
const dialogRef = this.dialog.open(DialogBoxTextConfirmComponent, {
data: {
eventId: eventId,
name: name,
eventLog: value,
},
});
dialogRef.afterClosed().subscribe();
});
}
}
<div class="right-column" id="dataScreen">
<router-outlet></router-outlet>
<div class="AppEvents-div">
<h1 class="title">EVENTS</h1>
<table mat-table [dataSource]="cobblerEvents">
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef>Name</th>
<td mat-cell *matCellDef="let element">{{ element.name }}</td>
</ng-container>
<ng-container matColumnDef="state">
<th mat-header-cell *matHeaderCellDef>State</th>
<td mat-cell *matCellDef="let element">{{ element.state }}</td>
</ng-container>
<ng-container matColumnDef="statetime">
<th mat-header-cell *matHeaderCellDef>Date</th>
<td mat-cell *matCellDef="let element">
{{ element.statetime * 1000 | date: "long" }}
</td>
</ng-container>
<ng-container matColumnDef="readByWho">
<th mat-header-cell *matHeaderCellDef>Read by</th>
<td mat-cell *matCellDef="let element">
<ng-container *ngIf="element.readByWho.length > 0">
-
<ng-container *ngFor="let item of element.readByWho">
{{ item }} -
</ng-container>
-
</ng-container>
<ng-container *ngIf="element.readByWho.length === 0">
-
</ng-container>
</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef></th>
<td mat-cell *matCellDef="let element">
<button mat-icon-button [matMenuTriggerFor]="menu">
<mat-icon>more_vert</mat-icon>
</button>
<mat-menu #menu="matMenu">
<button mat-menu-item (click)="showLogs(element.id, element.name)">
<mat-icon>description</mat-icon>
<span>Show Logs</span>
</button>
</mat-menu>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
</div>
</div>
Legend
Html element with directive