2 Component, OnInit, TemplateRef, ViewChild
3 } from '@angular/core';
4 import { FormControl, FormGroup, Validators } from '@angular/forms';
6 import { BsModalRef } from 'ngx-bootstrap';
7 import { Observable } from 'rxjs/Observable';
9 import { SubmitButtonComponent } from '../submit-button/submit-button.component';
12 selector: 'cd-deletion-modal',
13 templateUrl: './deletion-modal.component.html',
14 styleUrls: ['./deletion-modal.component.scss']
16 export class DeletionModalComponent implements OnInit {
17 @ViewChild(SubmitButtonComponent) submitButton: SubmitButtonComponent;
18 description: TemplateRef<any>;
21 deletionObserver: () => Observable<any>;
22 deletionMethod: Function;
25 deletionForm: FormGroup;
26 confirmation: FormControl;
28 // Parameters are destructed here than assigned to specific types and marked as optional
29 setUp({modalRef, metaType, deletionMethod, pattern, deletionObserver, description}:
30 { modalRef: BsModalRef, metaType: string, deletionMethod?: Function, pattern?: string,
31 deletionObserver?: () => Observable<any>, description?: TemplateRef<any>}) {
33 throw new Error('No modal reference');
34 } else if (!metaType) {
35 throw new Error('No meta type');
36 } else if (!(deletionMethod || deletionObserver)) {
37 throw new Error('No deletion method');
39 this.metaType = metaType;
40 this.modalRef = modalRef;
41 this.deletionMethod = deletionMethod;
42 this.pattern = pattern || this.pattern;
43 this.deletionObserver = deletionObserver;
44 this.description = description;
48 this.confirmation = new FormControl('', {
54 this.deletionForm = new FormGroup({
55 confirmation: this.confirmation
59 invalidControl(submitted: boolean, error?: string): boolean {
60 const control = this.confirmation;
62 (submitted || control.dirty) &&
64 (error ? control.errors[error] : true)
68 updateConfirmation($e) {
69 if ($e.key !== 'Enter') {
72 this.confirmation.setValue($e.target.value);
73 this.confirmation.markAsDirty();
74 this.confirmation.updateValueAndValidity();
78 this.submitButton.submit();
82 if (this.deletionObserver) {
83 this.deletionObserver().subscribe(
85 this.stopLoadingSpinner.bind(this),
86 this.hideModal.bind(this)
89 this.deletionMethod();
97 stopLoadingSpinner() {
98 this.deletionForm.setErrors({'cdSubmitButton': true});