]> git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component.ts
406f992a9df22a7aeed2ea3264044b8023e013d1
[ceph.git] / ceph / src / pybind / mgr / dashboard / frontend / src / app / shared / components / critical-confirmation-modal / critical-confirmation-modal.component.ts
1 import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
2 import { UntypedFormControl, Validators } from '@angular/forms';
3
4 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
5 import { Observable } from 'rxjs';
6
7 import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
8 import { SubmitButtonComponent } from '../submit-button/submit-button.component';
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 implements OnInit {
16 @ViewChild(SubmitButtonComponent, { static: true })
17 submitButton: SubmitButtonComponent;
18 bodyTemplate: TemplateRef<any>;
19 bodyContext: object;
20 submitActionObservable: () => Observable<any>;
21 callBackAtionObservable: () => Observable<any>;
22 submitAction: Function;
23 backAction: Function;
24 deletionForm: CdFormGroup;
25 itemDescription: 'entry';
26 itemNames: string[];
27 actionDescription = 'delete';
28
29 childFormGroup: CdFormGroup;
30 childFormGroupTemplate: TemplateRef<any>;
31
32 constructor(public activeModal: NgbActiveModal) {}
33
34 ngOnInit() {
35 const controls = {
36 confirmation: new UntypedFormControl(false, [Validators.requiredTrue])
37 };
38 if (this.childFormGroup) {
39 controls['child'] = this.childFormGroup;
40 }
41 this.deletionForm = new CdFormGroup(controls);
42 if (!(this.submitAction || this.submitActionObservable)) {
43 throw new Error('No submit action defined');
44 }
45 }
46
47 callSubmitAction() {
48 if (this.submitActionObservable) {
49 this.submitActionObservable().subscribe({
50 error: this.stopLoadingSpinner.bind(this),
51 complete: this.hideModal.bind(this)
52 });
53 } else {
54 this.submitAction();
55 }
56 }
57
58 callBackAction() {
59 if (this.callBackAtionObservable) {
60 this.callBackAtionObservable().subscribe({
61 error: this.stopLoadingSpinner.bind(this),
62 complete: this.hideModal.bind(this)
63 });
64 } else {
65 this.backAction();
66 }
67 }
68
69 hideModal() {
70 this.activeModal.close();
71 }
72
73 stopLoadingSpinner() {
74 this.deletionForm.setErrors({ cdSubmitButton: true });
75 }
76 }