File

projects/rebirth-ng/src/lib/modal/modal.component.ts

Metadata

selector re-modal
templateUrl ./modal.component.html

Index

Properties
Methods
Inputs
Outputs

Constructor

constructor(renderer: Renderer2, documentRef: DocumentRef)
Parameters :
Name Type Optional
renderer Renderer2 no
documentRef DocumentRef no

Inputs

isOpen

Default value: false

modalOptions

Type: ModalOptions

Outputs

dismiss $event type: EventEmitter

Methods

addContent
addContent(options: ModalOptions, instanceCount: number)
Type parameters :
  • T
Parameters :
Name Type Optional
options ModalOptions no
instanceCount number no
Returns : EventEmitter<T>
cleanup
cleanup()
Returns : void
close
close()
Returns : Observable<any>
open
open()
Returns : void
Private toggleBodyClass
toggleBodyClass(isAdd: boolean)
Parameters :
Name Type Optional
isAdd boolean no
Returns : void

Properties

instanceCount
instanceCount: number
Type : number
Default value : 0
modalWindowComponent
modalWindowComponent: ModalWindowComponent
Type : ModalWindowComponent
Decorators : ViewChild
Static MODEL_OPEN_CSS
MODEL_OPEN_CSS: string
Type : string
Default value : 'modal-open'
import { Component, Input, ViewChild, EventEmitter, Output, Renderer2 } from '@angular/core';
import { ModalOptions } from './modal-options.model';
import { ModalWindowComponent } from './modal-window.component';
import { tap } from 'rxjs/operators';
import { Observable } from 'rxjs';
import { DocumentRef } from '../window-ref/document-ref.service';

@Component({
  selector: 're-modal',
  templateUrl: './modal.component.html'
})
export class ModalComponent {
  static MODEL_OPEN_CSS = 'modal-open';
  @Input() isOpen = false;
  @Output() dismiss = new EventEmitter<any>();
  @Input() modalOptions: ModalOptions;
  @ViewChild(ModalWindowComponent) modalWindowComponent: ModalWindowComponent;
  instanceCount = 0;

  constructor(private renderer: Renderer2, private documentRef: DocumentRef) {

  }

  open() {
    this.modalWindowComponent.open();
    this.isOpen = true;
    this.toggleBodyClass(true);
  }

  close(): Observable<any> {
    return this.modalWindowComponent.close()
      .pipe(tap(_ => this.isOpen = false));
  }

  cleanup() {
    this.toggleBodyClass(false);
  }

  addContent<T>(options: ModalOptions, instanceCount: number): EventEmitter<T> {
    this.modalOptions = options;
    this.instanceCount = instanceCount;
    this.modalWindowComponent.addContent(options, this.dismiss);
    return this.dismiss;
  }

  private toggleBodyClass(isAdd: boolean): void {
    if (isAdd) {
      this.renderer.addClass(this.documentRef.body, ModalComponent.MODEL_OPEN_CSS);
      return;
    }

    this.renderer.removeClass(this.documentRef.body, ModalComponent.MODEL_OPEN_CSS);
  }

}
<re-modal-window [instanceCount]="instanceCount" [isOpen]="isOpen" role="dialog"
                 class="modal fade {{modalOptions.modalClass? modalOptions.modalClass : ''}}"
                 [ngClass]="{'in': isOpen}"
                 [ngStyle]="{'display': isOpen ? 'block': 'none','z-index': 1050 + instanceCount *10}" tabindex="-1">

</re-modal-window>
<re-modal-backdrop [instanceCount]="instanceCount" [modalOptions]="modalOptions" [isOpen]="isOpen"
                   *ngIf="modalOptions.backdrop !== false"></re-modal-backdrop>

Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""