File

projects/cobbler-frontend/src/app/actions/import-dvd/import-dvd.component.ts

Implements

OnDestroy

Metadata

Index

Properties
Methods

Constructor

constructor(userService: UserService, cobblerApiService: CobblerApiService, _snackBar: MatSnackBar)
Parameters :
Name Type Optional
userService UserService No
cobblerApiService CobblerApiService No
_snackBar MatSnackBar No

Methods

ngOnDestroy
ngOnDestroy()
Returns : void
runImport
runImport()
Returns : void

Properties

Private Readonly _formBuilder
Default value : inject(FormBuilder)
importFormGroup
Default value : this._formBuilder.group({ path: '', name: '', available_as: '', autoinstall_file: '', rsync_flags: '', arch: '', breed: '', os_version: '', })
Private ngUnsubscribe
Default value : new Subject<void>()
Public userService
Type : UserService
import { Component, inject, OnDestroy } from '@angular/core';
import { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatButton } from '@angular/material/button';
import { MatFormField, MatLabel } from '@angular/material/form-field';
import { MatInput } from '@angular/material/input';
import { MatSnackBar } from '@angular/material/snack-bar';
import { CobblerApiService, BackgroundImportOptions } from 'cobbler-api';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { UserService } from '../../services/user.service';
import Utils from '../../utils';

@Component({
  selector: 'cobbler-import-dvd',
  templateUrl: './import-dvd.component.html',
  styleUrls: ['./import-dvd.component.scss'],
  standalone: true,
  imports: [
    FormsModule,
    MatFormField,
    MatInput,
    MatLabel,
    ReactiveFormsModule,
    MatButton,
  ],
})
export class ImportDVDComponent implements OnDestroy {
  // Unsubscribe
  private ngUnsubscribe = new Subject<void>();

  // Form
  private readonly _formBuilder = inject(FormBuilder);
  importFormGroup = this._formBuilder.group({
    path: '',
    name: '',
    available_as: '',
    autoinstall_file: '',
    rsync_flags: '',
    arch: '',
    breed: '',
    os_version: '',
  });

  constructor(
    public userService: UserService,
    private cobblerApiService: CobblerApiService,
    private _snackBar: MatSnackBar,
  ) {}

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

  runImport(): void {
    const importOptions: BackgroundImportOptions = {
      path: this.importFormGroup.controls.path.value,
      name: this.importFormGroup.controls.name.value,
      available_as: this.importFormGroup.controls.available_as.value,
      autoinstall_file: this.importFormGroup.controls.autoinstall_file.value,
      rsync_flags: this.importFormGroup.controls.rsync_flags.value,
      arch: this.importFormGroup.controls.arch.value,
      breed: this.importFormGroup.controls.breed.value,
      os_version: this.importFormGroup.controls.os_version.value,
    };
    if (this.importFormGroup.invalid) {
      this._snackBar.open('Please give all inputs a system name!', 'Close', {
        duration: 2000,
      });
      return;
    }
    this.cobblerApiService
      .background_import(importOptions, this.userService.token)
      .pipe(takeUntil(this.ngUnsubscribe))
      .subscribe(
        (value) => {
          // TODO
        },
        (error) => {
          // HTML encode the error message since it originates from XML
          this._snackBar.open(Utils.toHTML(error.message), 'Close');
        },
      );
  }
}
<h1 class="title">IMPORT DVD</h1>

<form class="form-replicate" [formGroup]="importFormGroup">
  <mat-form-field class="form-field-full-width">
    <mat-label>Path</mat-label>
    <input
      matInput
      type="text"
      required
      formControlName="path"
      placeholder="/mnt/cobbler-mounted/leap-15-4/"
    />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>Name</mat-label>
    <input
      matInput
      type="text"
      required
      formControlName="name"
      placeholder="my-distro"
    />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>Available as</mat-label>
    <input
      matInput
      type="text"
      formControlName="available_as"
      placeholder="my-distro"
    />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>Autoinstallation file</mat-label>
    <input
      matInput
      type="text"
      formControlName="autoinstall_file"
      placeholder="autoyast.xml"
    />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>rsync flags</mat-label>
    <input
      matInput
      type="text"
      formControlName="rsync_flags"
      placeholder="-v"
    />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>Architecture</mat-label>
    <input matInput type="text" formControlName="arch" placeholder="x86_64" />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>Operating System Breed</mat-label>
    <input matInput type="text" formControlName="breed" placeholder="suse" />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>Operating System Version</mat-label>
    <input
      matInput
      type="text"
      formControlName="os_version"
      placeholder="15.4"
    />
  </mat-form-field>
  <button mat-button (click)="runImport()">Run</button>
</form>

./import-dvd.component.scss

.form-replicate {
  min-width: 150px;
  max-width: 600px;
  width: 100%;
}

.form-field-full-width {
  width: 100%;
}
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""