]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/blob
7230c7707bd300f164fb6490533c8363fe045c22
[ceph-ci.git] /
1 import { Component, Inject, OnInit, Optional, TemplateRef, ViewChild } from '@angular/core';
2 import { UntypedFormControl, Validators } from '@angular/forms';
3
4 import { Observable } from 'rxjs';
5
6 import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
7 import { SubmitButtonComponent } from '../submit-button/submit-button.component';
8 import { BaseModal } from 'carbon-components-angular';
9
10 @Component({
11   selector: 'cd-deletion-modal',
12   templateUrl: './critical-confirmation-modal.component.html',
13   styleUrls: ['./critical-confirmation-modal.component.scss']
14 })
15 export class CriticalConfirmationModalComponent extends BaseModal implements OnInit {
16   @ViewChild(SubmitButtonComponent, { static: true })
17   submitButton: SubmitButtonComponent;
18   deletionForm: CdFormGroup;
19
20   childFormGroup: CdFormGroup;
21   childFormGroupTemplate: TemplateRef<any>;
22
23   constructor(
24     @Optional() @Inject('itemDescription') public itemDescription: 'entry',
25     @Optional() @Inject('itemNames') public itemNames: string[],
26     @Optional() @Inject('actionDescription') public actionDescription = 'delete',
27     @Optional() @Inject('submitAction') public submitAction?: Function,
28     @Optional() @Inject('backAction') public backAction?: Function,
29     @Optional() @Inject('bodyTemplate') public bodyTemplate?: TemplateRef<any>,
30     @Optional() @Inject('bodyContext') public bodyContext?: object,
31     @Optional() @Inject('infoMessage') public infoMessage?: string,
32     @Optional()
33     @Inject('submitActionObservable')
34     public submitActionObservable?: () => Observable<any>,
35     @Optional()
36     @Inject('callBackAtionObservable')
37     public callBackAtionObservable?: () => Observable<any>
38   ) {
39     super();
40     this.actionDescription = actionDescription || 'delete';
41   }
42
43   ngOnInit() {
44     const controls = {
45       confirmation: new UntypedFormControl(false, [Validators.requiredTrue])
46     };
47     if (this.childFormGroup) {
48       controls['child'] = this.childFormGroup;
49     }
50     this.deletionForm = new CdFormGroup(controls);
51     if (!(this.submitAction || this.submitActionObservable)) {
52       throw new Error('No submit action defined');
53     }
54   }
55
56   callSubmitAction() {
57     if (this.submitActionObservable) {
58       this.submitActionObservable().subscribe({
59         error: this.stopLoadingSpinner.bind(this),
60         complete: this.hideModal.bind(this)
61       });
62     } else {
63       this.submitAction();
64     }
65   }
66
67   callBackAction() {
68     if (this.callBackAtionObservable) {
69       this.callBackAtionObservable().subscribe({
70         error: this.stopLoadingSpinner.bind(this),
71         complete: this.hideModal.bind(this)
72       });
73     } else {
74       this.backAction();
75     }
76   }
77
78   hideModal() {
79     this.closeModal();
80   }
81
82   stopLoadingSpinner() {
83     this.deletionForm.setErrors({ cdSubmitButton: true });
84   }
85 }