2021-05-07 11:59:43 +02:00

67 lines
1.8 KiB
JavaScript

import Notifications from './Notifications.vue'
const NotificationStore = {
state: [], // here the notifications will be added
settings: {
overlap: false,
verticalAlign: 'top',
horizontalAlign: 'right',
type: 'info',
timeout: 5000,
closeOnClick: true,
showClose: true,
},
setOptions(options) {
this.settings = Object.assign(this.settings, options)
},
removeNotification(timestamp) {
const indexToDelete = this.state.findIndex((n) => n.timestamp === timestamp)
if (indexToDelete !== -1) {
this.state.splice(indexToDelete, 1)
}
},
addNotification(notification) {
if (typeof notification === 'string' || notification instanceof String) {
notification = { message: notification }
}
notification.timestamp = new Date()
notification.timestamp.setMilliseconds(
notification.timestamp.getMilliseconds() + this.state.length,
)
notification = Object.assign({}, this.settings, notification)
this.state.push(notification)
},
notify(notification) {
if (Array.isArray(notification)) {
notification.forEach((notificationInstance) => {
this.addNotification(notificationInstance)
})
} else {
this.addNotification(notification)
}
},
}
const NotificationsPlugin = {
install(Vue, options) {
const app = new Vue({
data: {
notificationStore: NotificationStore,
},
methods: {
notify(notification) {
this.notificationStore.notify(notification)
},
},
})
Vue.prototype.$notify = app.notify
Vue.prototype.$notifications = app.notificationStore
Vue.component('Notifications', Notifications)
if (options) {
NotificationStore.setOptions(options)
}
},
}
export default NotificationsPlugin