projects/rebirth-ng/src/lib/modal/modal.component.ts
selector | re-modal |
templateUrl | ./modal.component.html |
Properties |
Methods |
|
Inputs |
Outputs |
constructor(renderer: Renderer2, documentRef: DocumentRef)
|
|||||||||
Parameters :
|
isOpen
|
Default value: |
modalOptions
|
Type: |
dismiss
|
$event type: EventEmitter
|
addContent | |||||||||
addContent(options: ModalOptions, instanceCount: number)
|
|||||||||
Type parameters :
|
|||||||||
Parameters :
Returns :
EventEmitter<T>
|
cleanup |
cleanup()
|
Returns :
void
|
close |
close()
|
Returns :
Observable<any>
|
open |
open()
|
Returns :
void
|
Private toggleBodyClass | ||||||
toggleBodyClass(isAdd: boolean)
|
||||||
Parameters :
Returns :
void
|
instanceCount |
instanceCount:
|
Type : number
|
Default value : 0
|
modalWindowComponent |
modalWindowComponent:
|
Type : ModalWindowComponent
|
Decorators : ViewChild
|
Static MODEL_OPEN_CSS |
MODEL_OPEN_CSS:
|
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>