File

projects/cobbler-frontend/src/app/settings/view/settings-view.component.ts

Index

Properties

Properties

name
name: string
Type : string
type
type: any
Type : any
value
value: any
Type : any
import { AfterViewInit, Component, OnDestroy, ViewChild } from '@angular/core';
import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { MatSort, MatSortModule } from '@angular/material/sort';
import { Settings } from '../../../../../cobbler-api/src/lib/custom-types/settings';
import { ItemSettingsService } from '../../services/item-settings.service';
import { RouterOutlet } from '@angular/router';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
import { MatListModule } from '@angular/material/list';
import { ViewableTreeComponent } from '../../common/viewable-tree/viewable-tree.component';
import { MatInputModule } from '@angular/material/input';
import { MatButtonModule } from '@angular/material/button';
import { MatTooltipModule } from '@angular/material/tooltip';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';

interface SettingsTableRowData {
  name: string;
  value: any;
  type: any;
}

@Component({
  selector: 'cobbler-settings-view',
  templateUrl: './settings-view.component.html',
  styleUrls: ['./settings-view.component.css'],

  standalone: true,
  imports: [
    RouterOutlet,
    MatFormFieldModule,
    MatPaginatorModule,
    MatIconModule,
    MatSlideToggleModule,
    MatListModule,
    MatInputModule,
    MatTableModule,
    MatButtonModule,
    ViewableTreeComponent,
    MatTooltipModule,
    MatSortModule,
  ],
})
export class SettingsViewComponent implements AfterViewInit, OnDestroy {
  // Unsubscribe
  private ngUnsubscribe = new Subject<void>();

  // Table
  data = new MatTableDataSource<SettingsTableRowData>([]);
  displayedColumns: string[] = ['name', 'value', 'actions'];

  @ViewChild(MatPaginator) paginator: MatPaginator;
  @ViewChild(MatSort) sort: MatSort;

  constructor(service: ItemSettingsService) {
    service
      .getAll()
      .pipe(takeUntil(this.ngUnsubscribe))
      .subscribe((data: Settings) => {
        const settings_data: SettingsTableRowData[] = [];
        for (const key in data) {
          settings_data.push({
            name: key,
            value: data[key],
            type: typeof data[key],
          });
        }
        this.data.data = settings_data;
      });
  }

  ngAfterViewInit() {
    this.data.paginator = this.paginator;
    this.data.sort = this.sort;
  }

  ngOnDestroy() {
    this.ngUnsubscribe.next();
    this.ngUnsubscribe.complete();
  }

  applyFilter(event: Event) {
    const filterValue = (event.target as HTMLInputElement).value;
    this.data.filter = filterValue.trim().toLowerCase();

    if (this.data.paginator) {
      this.data.paginator.firstPage();
    }
  }

  isArray(input: any): boolean {
    return Array.isArray(input);
  }
}

results matching ""

    No results matching ""