]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/blob
6ea38bfc323a1c92701c2de5ea219bc0260fe743
[ceph-ci.git] /
1 import { Component, OnInit } from '@angular/core';
2 import { FormControl, Validators } from '@angular/forms';
3 import { Observable } from 'rxjs';
4
5 import { Icons } from '~/app/shared/enum/icons.enum';
6 import { Permission } from '~/app/shared/models/permissions';
7 import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
8 import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
9 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
10 import { UpgradeService } from '~/app/shared/api/upgrade.service';
11 import { UpgradeInfoInterface } from '~/app/shared/models/upgrade.interface';
12 import { NotificationType } from '~/app/shared/enum/notification-type.enum';
13 import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
14 import { NotificationService } from '~/app/shared/services/notification.service';
15
16 @Component({
17   selector: 'cd-upgrade-start-modal.component',
18   templateUrl: './upgrade-start-modal.component.html',
19   styleUrls: ['./upgrade-start-modal.component.scss']
20 })
21 export class UpgradeStartModalComponent implements OnInit {
22   permission: Permission;
23   upgradeInfoError$: Observable<any>;
24   upgradeInfo$: Observable<UpgradeInfoInterface>;
25   upgradeForm: CdFormGroup;
26   icons = Icons;
27   versions: string[];
28
29   showImageField = false;
30
31   constructor(
32     public actionLabels: ActionLabelsI18n,
33     private authStorageService: AuthStorageService,
34     public activeModal: NgbActiveModal,
35     private upgradeService: UpgradeService,
36     private notificationService: NotificationService
37   ) {
38     this.permission = this.authStorageService.getPermissions().configOpt;
39   }
40
41   ngOnInit() {
42     this.upgradeForm = new CdFormGroup({
43       availableVersions: new FormControl(null, [Validators.required]),
44       useImage: new FormControl(false),
45       customImageName: new FormControl(null)
46     });
47   }
48
49   startUpgrade() {
50     const version = this.upgradeForm.getValue('availableVersions');
51     const image = this.upgradeForm.getValue('customImageName');
52     this.upgradeService.start(version, image).subscribe({
53       next: () => {
54         this.notificationService.show(
55           NotificationType.success,
56           $localize`Started upgrading the cluster`
57         );
58       },
59       error: (error) => {
60         this.upgradeForm.setErrors({ cdSubmitButton: true });
61         this.notificationService.show(
62           NotificationType.error,
63           $localize`Failed to start the upgrade`,
64           error
65         );
66       },
67       complete: () => {
68         this.activeModal.close();
69       }
70     });
71   }
72
73   useImage() {
74     this.showImageField = !this.showImageField;
75     const availableVersionsControl = this.upgradeForm.get('availableVersions');
76     const customImageNameControl = this.upgradeForm.get('customImageName');
77
78     if (this.showImageField) {
79       availableVersionsControl.disable();
80       availableVersionsControl.clearValidators();
81
82       customImageNameControl.setValidators(Validators.required);
83       customImageNameControl.updateValueAndValidity();
84     } else {
85       availableVersionsControl.enable();
86       availableVersionsControl.setValidators(Validators.required);
87       availableVersionsControl.updateValueAndValidity();
88
89       customImageNameControl.clearValidators();
90     }
91   }
92 }