File

projects/cobbler-frontend/src/app/app-events/app-events.component.ts

Implements

OnInit OnDestroy

Metadata

Index

Properties
Methods

Constructor

constructor(dialog: MatDialog, cobblerApiService: CobblerApiService)
Parameters :
Name Type Optional
dialog MatDialog No
cobblerApiService CobblerApiService No

Methods

ngOnDestroy
ngOnDestroy()
Returns : void
ngOnInit
ngOnInit()
Returns : void
showLogs
showLogs(eventId: string, name: string)
Parameters :
Name Type Optional
eventId string No
name string No
Returns : void

Properties

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>

./app-events.component.css

table {
  width: 100%;
}
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""