You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
| /* global Whisper */
 | |
| 
 | |
| // eslint-disable-next-line func-names
 | |
| (function() {
 | |
|   'use strict';
 | |
| 
 | |
|   window.Whisper = window.Whisper || {};
 | |
| 
 | |
|   Whisper.SessionToastView = Whisper.View.extend({
 | |
|     initialize(options) {
 | |
|       this.props = {
 | |
|         title: options.title,
 | |
|         id: options.id,
 | |
|         description: options.description,
 | |
|         icon: options.icon,
 | |
|         fadeToast: this.fadeToast.bind(this),
 | |
|         closeToast: this.closeToast.bind(this),
 | |
|       };
 | |
|     },
 | |
| 
 | |
|     render() {
 | |
|       this.toastView = new Whisper.ReactWrapperView({
 | |
|         className: 'session-toast-wrapper',
 | |
|         Component: window.Signal.Components.SessionToast,
 | |
|         props: this.props,
 | |
|       });
 | |
| 
 | |
|       this.$el.prepend(this.toastView.el);
 | |
|     },
 | |
| 
 | |
|     update(options) {
 | |
|       this.props.title = options.title;
 | |
|       this.props.id = options.id;
 | |
|       this.props.description = options.description || '';
 | |
|       this.props.type = options.type || '';
 | |
|       this.props.icon = options.icon || '';
 | |
|       this.props.shouldFade = options.shouldFade !== false;
 | |
| 
 | |
|       this.toastView.update(this.props);
 | |
| 
 | |
|       this.showToast();
 | |
| 
 | |
|       if (this.timer) {
 | |
|         clearTimeout(this.timer);
 | |
|       }
 | |
|       if (this.props.shouldFade) {
 | |
|         this.timer = setTimeout(this.fadeToast.bind(this), 4000);
 | |
|       }
 | |
|     },
 | |
| 
 | |
|     showToast() {
 | |
|       this.toastView.$el.show();
 | |
|     },
 | |
| 
 | |
|     fadeToast() {
 | |
|       this.removeToast();
 | |
|       this.toastView.$el.fadeOut(500, () => {
 | |
|         this.toastView.remove();
 | |
|       });
 | |
|     },
 | |
| 
 | |
|     closeToast() {
 | |
|       this.removeToast();
 | |
|       this.toastView.$el.fadeOut(125, () => {
 | |
|         this.toastView.remove();
 | |
|       });
 | |
|     },
 | |
| 
 | |
|     removeToast() {
 | |
|       if (this.props.id) {
 | |
|         window.toasts.delete(this.props.id);
 | |
|       }
 | |
|     },
 | |
|   });
 | |
| })();
 |