import {NgModule,Component,OnInit,OnDestroy,Input,Output,EventEmitter,Optional} from '@angular/core'; import {CommonModule} from '@angular/common'; import {Message} from '../common/message'; import {MessageService} from '../common/messageservice'; import {Subscription} from 'rxjs/Subscription'; @Component({ selector: 'p-messages', template: `
` }) export class Messages implements OnInit, OnDestroy { @Input() value: Message[]; @Input() closable: boolean = true; @Input() style: any; @Input() styleClass: string; @Input() enableService: boolean = true; @Input() key: string; @Output() valueChange: EventEmitter = new EventEmitter(); subscription: Subscription; constructor(@Optional() public messageService: MessageService) {} ngOnInit() { if(this.messageService && this.enableService) { this.subscription = this.messageService.messageObserver.subscribe((messages: any) => { if(messages) { if(messages instanceof Array) { let filteredMessages = messages.filter(m => this.key === m.key); this.value = this.value ? [...this.value, ...filteredMessages] : [...filteredMessages]; } else if (this.key === messages.key) { this.value = this.value ? [...this.value, ...[messages]] : [messages]; } } else { this.value = null; } }); } } hasMessages() { return this.value && this.value.length > 0; } getSeverityClass() { return this.value[0].severity; } clear(event) { this.value = []; this.valueChange.emit(this.value); event.preventDefault(); } get icon(): string { let icon: string = null; if(this.hasMessages()) { let msg = this.value[0]; switch(msg.severity) { case 'success': icon = 'ion-checkmark-round'; break; case 'info': icon = 'ion-information-circled'; break; case 'error': icon = 'ion-close-round'; break; case 'warn': icon = 'ion-alert-circled'; break; default: icon = 'ion-information-circled'; break; } } return icon; } ngOnDestroy() { if(this.subscription) { this.subscription.unsubscribe(); } } } @NgModule({ imports: [CommonModule], exports: [Messages], declarations: [Messages] }) export class MessagesModule { }