open-learning-exchange/planet

View on GitHub
src/app/shared/submit.directive.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { Directive, HostListener, Input, OnChanges, OnDestroy } from '@angular/core';
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
import { DialogsLoadingComponent } from './dialogs/dialogs-loading.component';

@Directive({
  selector: '[planetSubmit]'
})
export class SubmitDirective implements OnChanges, OnDestroy {

  constructor(public dialog: MatDialog) { }

  @Input('planetSubmit') validSubmit: boolean;
  spinnerDialog: MatDialogRef<DialogsLoadingComponent>;

  @HostListener('click') submit() {
    if (this.validSubmit) {
      this.spinnerDialog = this.dialog.open(DialogsLoadingComponent, {
        disableClose: true
      });
    }
  }

  ngOnChanges() {
    if (this.validSubmit === false) {
      this.closeSpinner();
    }
  }

  ngOnDestroy() {
    this.closeSpinner();
  }

  closeSpinner() {
    for (const entry of this.dialog.openDialogs) {
      if (entry === this.spinnerDialog) {
        this.spinnerDialog.close();
      }
    }
  }

}