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 { }