toast-message.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import Ember from 'ember';
  2. import ENV from '../config/environment';
  3. export default Ember.Service.extend({
  4. id: null,
  5. type: null,
  6. message: null,
  7. isVisible: false,
  8. isInfo: Ember.computed.equal('type', 'info'),
  9. isSuccess: Ember.computed.equal('type', 'success'),
  10. isWarning: Ember.computed.equal('type', 'warning'),
  11. isError: Ember.computed.equal('type', 'error'),
  12. _showToast: function(type, message) {
  13. var toastId = this.incrementProperty('id');
  14. this.set('type', type);
  15. this.set('message', message);
  16. this.set('isVisible', true);
  17. var displayTime = ENV.APP.TOAST_BASE_DISPLAY_TIME;
  18. displayTime += message.length * ENV.APP.TOAST_LENGTH_FACTOR;
  19. var self = this;
  20. Ember.run.later(function () {
  21. if (self.get('id') === toastId) {
  22. self.set('isVisible', false);
  23. }
  24. }, displayTime);
  25. },
  26. _setToast: function(type, message) {
  27. var self = this;
  28. if (this.get('isVisible')) {
  29. this.set('isVisible', false);
  30. Ember.run.later(function () {
  31. self._showToast(type, message);
  32. }, ENV.APP.TOAST_HIDE_ANIMATION_LENGTH);
  33. } else {
  34. this._showToast(type, message);
  35. }
  36. },
  37. // Public api
  38. info: function(message) {
  39. this._setToast('info', message);
  40. },
  41. success: function(message) {
  42. this._setToast('success', message);
  43. },
  44. warning: function(message) {
  45. this._setToast('warning', message);
  46. },
  47. error: function(message) {
  48. this._setToast('error', message);
  49. }
  50. });