149 lines
4.6 KiB
TypeScript
149 lines
4.6 KiB
TypeScript
import { inject } from '@angular/core';
|
|
import { TranslateService } from '@ngx-translate/core';
|
|
import { Component, Inject, OnInit } from '@angular/core';
|
|
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
|
import { HttpClient } from '@angular/common/http';
|
|
import { ToastrService } from 'ngx-toastr';
|
|
import { FormBuilder, FormGroup, Validators } from "@angular/forms";
|
|
import { DataService } from "../data.service";
|
|
import { ConfigService } from '@services/config.service';
|
|
|
|
@Component({
|
|
selector: 'app-create-image',
|
|
templateUrl: './create-image.component.html',
|
|
styleUrls: ['./create-image.component.css']
|
|
})
|
|
export class CreateImageComponent implements OnInit {
|
|
public translate = inject(TranslateService);
|
|
baseUrl: string;
|
|
imageForm: FormGroup<any>;
|
|
imageId: string | null = null;
|
|
softwareProfiles: any[] = [];
|
|
repositories: any[] = [];
|
|
loading: boolean = false;
|
|
isEditMode: boolean = false;
|
|
partitionInfo: { [key: string]: string } = {};
|
|
showWarning: boolean = false;
|
|
|
|
constructor(
|
|
private fb: FormBuilder,
|
|
private http: HttpClient,
|
|
public dialogRef: MatDialogRef<CreateImageComponent>,
|
|
private toastService: ToastrService,
|
|
private configService: ConfigService,
|
|
private dataService: DataService,
|
|
@Inject(MAT_DIALOG_DATA) public data: any
|
|
) {
|
|
this.baseUrl = this.configService.apiUrl;
|
|
this.imageForm = this.fb.group({
|
|
name: ['', Validators.required],
|
|
description: [''],
|
|
comments: [''],
|
|
remotePc: [false],
|
|
isGlobal: [false],
|
|
softwareProfile: [''],
|
|
imageRepositories: [[], Validators.required],
|
|
});
|
|
}
|
|
|
|
ngOnInit() {
|
|
this.loading = true;
|
|
if (this.data) {
|
|
this.isEditMode = true;
|
|
this.load();
|
|
} else {
|
|
this.loading = false;
|
|
}
|
|
this.fetchSoftwareProfiles();
|
|
this.fetchRepositories();
|
|
}
|
|
|
|
load(): void {
|
|
this.dataService.getImage(this.data).subscribe({
|
|
next: (response) => {
|
|
this.imageForm.patchValue({
|
|
name: response.name,
|
|
description: response.description,
|
|
comments: response.comments,
|
|
remotePc: response.remotePc,
|
|
isGlobal: response.isGlobal,
|
|
softwareProfile: response.softwareProfile ? response.softwareProfile['@id'] : null,
|
|
imageRepositories: response.imageRepositories ? response.imageRepositories.map((r: any) => r.imageRepository['@id']) : [],
|
|
});
|
|
this.imageId = response['@id'];
|
|
this.partitionInfo = response.partitionInfo;
|
|
this.loading = false;
|
|
},
|
|
error: (err) => {
|
|
console.error(this.translate.instant('errorFetchingRemoteCalendar'), err);
|
|
this.loading = false;
|
|
}
|
|
});
|
|
}
|
|
|
|
changeIsGlobal() {
|
|
this.showWarning = this.imageForm.get('isGlobal')?.value;
|
|
}
|
|
|
|
fetchSoftwareProfiles() {
|
|
const url = `${this.baseUrl}/software-profiles`;
|
|
this.http.get(url).subscribe({
|
|
next: (response: any) => {
|
|
this.softwareProfiles = response['hydra:member'];
|
|
},
|
|
error: (error) => {
|
|
this.toastService.error(this.translate.instant('errorGettingProfiles'));
|
|
}
|
|
});
|
|
}
|
|
|
|
fetchRepositories() {
|
|
const url = `${this.baseUrl}/image-repositories`;
|
|
this.http.get(url).subscribe({
|
|
next: (response: any) => {
|
|
this.repositories = response['hydra:member'];
|
|
},
|
|
error: (error) => {
|
|
this.toastService.error(this.translate.instant('errorGettingRepositories'));
|
|
}
|
|
});
|
|
}
|
|
|
|
saveImage(): void {
|
|
const payload: any = {
|
|
name: this.imageForm.value.name,
|
|
description: this.imageForm.value.description,
|
|
comments: this.imageForm.value.comments,
|
|
remotePc: this.imageForm.value.remotePc,
|
|
isGlobal: this.imageForm.value.isGlobal,
|
|
imageRepositories: this.imageForm.value.imageRepositories,
|
|
...(this.imageForm.value.softwareProfile ? { softwareProfile: this.imageForm.value.softwareProfile } : {}),
|
|
};
|
|
|
|
if (this.imageId) {
|
|
this.http.put(`${this.baseUrl}${this.imageId}`, payload).subscribe(
|
|
(response) => {
|
|
this.toastService.success(this.translate.instant('successfullyEditedImage'));
|
|
this.dialogRef.close();
|
|
},
|
|
(error) => {
|
|
this.toastService.error(error['error']['hydra:description']);
|
|
}
|
|
);
|
|
} else {
|
|
this.http.post(`${this.baseUrl}/images`, payload).subscribe(
|
|
(response) => {
|
|
this.toastService.success(this.translate.instant('imageAddedSuccessfully'));
|
|
this.dialogRef.close();
|
|
},
|
|
(error) => {
|
|
this.toastService.error(error['error']['hydra:description']);
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
close(): void {
|
|
this.dialogRef.close();
|
|
}
|
|
} |