import {Component} from '../../vues6.js' import {EventBus} from '../service/EventBus.service.js' const template = ` ` export class MessageContainerComponent extends Component { static get selector() { return 'cobalt-messages' } static get template() { return template } static get props() { return [] } constructor() { super() this.messages = [] this.modals = [] } vue_on_create() { EventBus.get() .event('message.alert') .subscribe(({ message, type = 'info', timeout = 0, onDismiss = () => {} }) => { this.createAlert(message, type, timeout, onDismiss) }) EventBus.get() .event('message.modal') .subscribe(({ title, message, buttons = [], inputs = [] }) => { this.createModal(title, message, buttons, inputs) }) } createAlert(message, type, timeout, onDismiss = () => {}) { const msg = { message, onDismiss, type: type.startsWith('alert-') ? 'type' : `alert-${type}`, } this.messages.push(msg) if ( timeout > 0 ) { setTimeout(() => { this.dismissAlert(undefined, msg) }, timeout) } } dismissAlert($event, message) { this.messages = this.messages.filter(x => x !== message) message.onDismiss($event) } createModal(title, message, buttons = [], inputs = []) { const index = this.modals.length const modal = { title, message, buttons, inputs, data: {}, } this.modals.push(modal) this.$nextTick(() => { $(this.$refs.modal[index]).modal() }) } modalButtonClick($event, modal, button) { if ( typeof button.onClick === 'function' ) { button.onClick($event, modal.data) } } }