diff options
Diffstat (limited to 'src/pybind/mgr/dashboard/frontend/src/app/shared/components/confirmation-modal/confirmation-modal.component.ts')
-rw-r--r-- | src/pybind/mgr/dashboard/frontend/src/app/shared/components/confirmation-modal/confirmation-modal.component.ts | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/components/confirmation-modal/confirmation-modal.component.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/components/confirmation-modal/confirmation-modal.component.ts new file mode 100644 index 000000000..608f9b762 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/components/confirmation-modal/confirmation-modal.component.ts @@ -0,0 +1,66 @@ +import { Component, OnDestroy, OnInit, TemplateRef } from '@angular/core'; +import { UntypedFormGroup } from '@angular/forms'; + +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + selector: 'cd-confirmation-modal', + templateUrl: './confirmation-modal.component.html', + styleUrls: ['./confirmation-modal.component.scss'] +}) +export class ConfirmationModalComponent implements OnInit, OnDestroy { + // Needed + buttonText: string; + titleText: string; + onSubmit: Function; + + // One of them is needed + bodyTpl?: TemplateRef<any>; + description?: TemplateRef<any>; + + // Optional + warning = false; + bodyData?: object; + onCancel?: Function; + bodyContext?: object; + showSubmit = true; + showCancel = true; + + // Component only + boundCancel = this.cancel.bind(this); + confirmationForm: UntypedFormGroup; + private canceled = false; + + constructor(public activeModal: NgbActiveModal) { + this.confirmationForm = new UntypedFormGroup({}); + } + + ngOnInit() { + this.bodyContext = this.bodyContext || {}; + this.bodyContext['$implicit'] = this.bodyData; + if (!this.onSubmit) { + throw new Error('No submit action defined'); + } else if (!this.buttonText) { + throw new Error('No action name defined'); + } else if (!this.titleText) { + throw new Error('No title defined'); + } else if (!this.bodyTpl && !this.description) { + throw new Error('No description defined'); + } + } + + ngOnDestroy() { + if (this.onCancel && this.canceled) { + this.onCancel(); + } + } + + cancel() { + this.canceled = true; + this.activeModal.close(); + } + + stopLoadingSpinner() { + this.confirmationForm.setErrors({ cdSubmitButton: true }); + } +} |