diff --git a/components/ImportDVDComponent.html b/components/ImportDVDComponent.html index 9cf38ccf..208b2fc8 100644 --- a/components/ImportDVDComponent.html +++ b/components/ImportDVDComponent.html @@ -157,14 +157,18 @@

Metadata

imports - RouterOutlet - MatListModule + FormsModule + MatFormField + MatInput + MatLabel + ReactiveFormsModule + MatButton styleUrls - ./import-dvd.component.css + ./import-dvd.component.scss @@ -185,6 +189,59 @@

Metadata

+
+

Index

+ + + + + + + + + + + + + + + + + + + + + +
+
Properties
+
+ +
+
Methods
+
+ +
+

Constructor

@@ -192,15 +249,69 @@

Constructor

-constructor() +constructor(userService: UserService, cobblerApiService: CobblerApiService, _snackBar: MatSnackBar) -
Defined in projects/cobbler-frontend/src/app/actions/import-dvd/import-dvd.component.ts:11
+
Defined in projects/cobbler-frontend/src/app/actions/import-dvd/import-dvd.component.ts:34
+ + +
+ Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeOptional
userService + UserService + + No +
cobblerApiService + CobblerApiService + + No +
_snackBar + MatSnackBar + + No +
+
+ +
@@ -209,25 +320,285 @@

Constructor

+
+ +

+ Methods +

+ + + + + + + + + + + + + + + + + + + +
+ + + runImport + + +
+runImport() +
+ +
+ +
+ Returns : void + +
+
+ + + + + + + + + + + + + + + + + +
+ + + toHTML + + +
+toHTML(input: string) +
+ +
+ +
+ Parameters : + + + + + + + + + + + + + + + + + + + +
NameTypeOptional
input + string + + No +
+
+
+ Returns : any + +
+
+ +
+
+
+
+ +

+ 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: '', + }) +
+ +
+ + + + + + + + + + + + + + +
+ + + Public + userService + + +
+ Type : UserService + +
+ +
+
+
-
import {Component} from '@angular/core';
-import { MatListModule } from '@angular/material/list';
-import { RouterOutlet } from '@angular/router';
+        
import {Component, inject} 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 {UserService} from '../../services/user.service';
 
 @Component({
   selector: 'cobbler-import-dvd',
   templateUrl: './import-dvd.component.html',
-  styleUrls: ['./import-dvd.component.css'], standalone: true,
-  imports: [RouterOutlet, MatListModule],
+  styleUrls: ['./import-dvd.component.scss'], standalone: true,
+  imports: [
+    FormsModule,
+    MatFormField,
+    MatInput,
+    MatLabel,
+    ReactiveFormsModule,
+    MatButton
+  ],
 })
 export class ImportDVDComponent {
+  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
+  ) {
+  }
 
-  constructor() {
+  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).subscribe(
+      value => {
+        // TODO
+      },
+      error => {
+        // HTML encode the error message since it originates from XML
+        this._snackBar.open(this.toHTML(error.message), 'Close');
+      });
+  }
+
+  toHTML(input: string): any {
+    // FIXME: Deduplicate method
+    return new DOMParser().parseFromString(input, 'text/html').documentElement.textContent;
   }
 
 }
@@ -235,27 +606,60 @@ 

Constructor

-
<div class="right-column" id="dataScreen">
-  <router-outlet></router-outlet>
-  <div class="ImportDVD-div">
-    <h1 class="title">IMPORT DVD</h1>
-    <div class="list-group">
-      <mat-list>
-        <mat-list-item>data 01</mat-list-item>
-        <mat-list-item>data 02</mat-list-item>
-        <mat-list-item>data 03</mat-list-item>
-      </mat-list>
-    </div>
-  </div>
-</div>
+        
<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.css + ./import-dvd.component.scss

-
+
.form-replicate {
+  min-width: 150px;
+  max-width: 600px;
+  width: 100%;
+}
+
+.form-field-full-width {
+  width: 100%;
+}
+
@@ -283,7 +687,7 @@

Constructor