82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
| 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) {
 | |
|         let 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;
 |