projects/rebirth-ng/src/lib/modal/modal-window.component.ts
| host | { | 
            
| selector | re-modal-window | 
            
| templateUrl | ./modal-window.component.html | 
            
                        Properties | 
                
                        Methods | 
                
                        Inputs | 
                
                        Outputs | 
                
                        HostListeners | 
                
constructor(elementRef: ElementRef)
                     | 
                ||||||
| 
                             
                                    Parameters :
                                     
                    
  | 
                
                        
                        instanceCount
                     | 
                    
                         
                            Default value:   | 
                
                        
                        isOpen
                     | 
                    
                         
                            Default value:   | 
                
                        
                        animationDone
                     | 
                    
                        $event type:    EventEmitter
                     | 
                
| click | 
                            Arguments : '$event' 
                         | 
                    
click($event: Event)
                     | 
                
| keyup.esc | 
                            Arguments : '$event' 
                         | 
                    
keyup.esc($event: KeyboardEvent)
                     | 
                
| addContent | |||||||||
addContent(options: ModalOptions, dismiss: EventEmitter
                     | 
                |||||||||
                                Type parameters :
                                
  | 
                        |||||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                EventEmitter<T>
                             | 
                
| close | 
close()
                     | 
                
| 
                             
                                Returns :      
                    Observable<any>
                             | 
                
| onAnimationDone | ||||
onAnimationDone($event: )
                     | 
                ||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                void
                             | 
                
| onAnimationStart | ||||
onAnimationStart($event: )
                     | 
                ||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                void
                             | 
                
| open | 
open()
                     | 
                
| 
                             
                                Returns :      
                    Observable<any>
                             | 
                
| animateState | 
                        animateState:     
                     | 
                
                            Type :     string
                         | 
                    
| dismiss | 
                        dismiss:     
                     | 
                
                            Type :     EventEmitter<any>
                         | 
                    
| isInAnimationDone | 
                        isInAnimationDone:     
                     | 
                
                            Type :     boolean
                         | 
                    
| modalContent | 
                        modalContent:     
                     | 
                
                            Type :     ModalContentComponent
                         | 
                    
                            Decorators : ViewChild
                         | 
                    
| modalOptions | 
                        modalOptions:     
                     | 
                
                            Type :     ModalOptions
                         | 
                    
import {
  Component,
  Input,
  ViewChild,
  HostListener,
  EventEmitter,
  ElementRef,
  Output
} from '@angular/core';
import { ModalContentComponent } from './modal-content.component';
import { ModalOptions } from './modal-options.model';
import { ModalDismissReasons } from './modal-dismiss-reasons.model';
import { trigger, state, style, transition, animate } from '@angular/animations';
import { filter } from 'rxjs/operators';
import { Observable } from 'rxjs';
@Component({
  selector: 're-modal-window',
  templateUrl: './modal-window.component.html',
  host: {
    '[@flyInOut]': 'animateState',
    '(@flyInOut.start)': 'onAnimationStart($event)',
    '(@flyInOut.done)': 'onAnimationDone($event)'
  },
  animations: [
    trigger('flyInOut', [
      state('void', style({ top: '-100%', opacity: 0 })),
      state('in', style({ top: '10%', opacity: 1 })),
      transition('void => in', animate('0.2s ease-in-out')),
      transition('in => void', animate('0.2s ease-in-out')),
    ])
  ]
})
export class ModalWindowComponent {
  @Input() isOpen = false;
  @Input() instanceCount = 0;
  @Output() animationDone = new EventEmitter<any>();
  @ViewChild(ModalContentComponent) modalContent: ModalContentComponent;
  dismiss: EventEmitter<any>;
  modalOptions: ModalOptions;
  animateState: string;
  isInAnimationDone: boolean;
  constructor(private elementRef: ElementRef) {
  }
  open(): Observable<any> {
    this.isOpen = true;
    if (this.modalOptions.animation) {
      this.animateState = 'in';
    } else {
      setTimeout(() => this.onAnimationDone({ toState: 'in' }));
    }
    return this.animationDone
      .pipe(filter(event => event.toState === 'in'));
  }
  close(): Observable<any> {
    this.isOpen = false;
    if (this.modalOptions.animation) {
      this.animateState = 'void';
    } else {
      setTimeout(() => this.onAnimationDone({ toState: 'void' }));
    }
    return this.animationDone
      .pipe(filter(event => event.toState === 'void'));
  }
  onAnimationStart($event) {
    this.isInAnimationDone = true;
  }
  onAnimationDone($event) {
    this.isInAnimationDone = false;
    this.animationDone.emit($event);
  }
  @HostListener('click', ['$event'])
  onBackdropClick($event: Event) {
    if (!this.modalOptions.modal && !this.isInAnimationDone && this.elementRef.nativeElement === $event.target) {
      this.dismiss.error(ModalDismissReasons.BACKDROP_CLICK);
    }
  }
  @HostListener('keyup.esc', ['$event'])
  onEscKeyUp($event: KeyboardEvent) {
    if (this.modalOptions.keyboard !== false) {
      this.dismiss.error(ModalDismissReasons.ESC_KEY);
    }
  }
  addContent<T>(options: ModalOptions, dismiss: EventEmitter<T>): EventEmitter<T> {
    this.modalOptions = options;
    this.dismiss = dismiss;
    this.modalContent.addContent(options, this.dismiss);
    return this.dismiss;
  }
}
    <div class="modal-dialog {{(modalOptions.size ? ' modal-' + modalOptions.size : '')}}" role="document">
  <div class="modal-content">
    <re-modal-content #modalContent></re-modal-content>
  </div>
</div>