140 lines
4.2 KiB
JavaScript
140 lines
4.2 KiB
JavaScript
|
var _ = require('underscore');
|
||
|
var Notifier = require('builder/components/notifier/notifier');
|
||
|
var errorParser = require('builder/helpers/error-parser');
|
||
|
|
||
|
var NOTIFICATION_ERROR_TEMPLATE = _.template("<span class='u-errorTextColor'><%- title %></span>");
|
||
|
var ADD_NOTIFICATION_ID = 'add-notification';
|
||
|
var NOTIFICATION_STATUS = {
|
||
|
loading: 'loading',
|
||
|
updating: 'loading',
|
||
|
added: 'success',
|
||
|
removed: 'success',
|
||
|
replaced: 'success',
|
||
|
error: 'error'
|
||
|
};
|
||
|
|
||
|
var WidgetsNotifications = {
|
||
|
|
||
|
track: function (widgetsCollection) {
|
||
|
this._widgetDefinitionsCollection = widgetsCollection;
|
||
|
this._widgetDefinitionsCollection.on('successAdd', this._showAddNotification, this);
|
||
|
this._widgetDefinitionsCollection.on('successReplace', this._showReplaceNotification, this);
|
||
|
this._widgetDefinitionsCollection.on('destroy', this._showRemoveNotification, this);
|
||
|
this._widgetDefinitionsCollection.on('errorAdd', this._showErrorNotification, this);
|
||
|
this._widgetDefinitionsCollection.on('loading', this._showLoadingNotification, this);
|
||
|
this._widgetDefinitionsCollection.on('updating', this._showUpdatingNotification, this);
|
||
|
},
|
||
|
|
||
|
_showLoadingNotification: function (widgets) {
|
||
|
var notificationAttrs = {
|
||
|
status: NOTIFICATION_STATUS.loading,
|
||
|
info: _t('notifications.widgets.loading_pluralize', {
|
||
|
smart_count: widgets && widgets.length ? widgets.length : 1
|
||
|
}),
|
||
|
closable: false
|
||
|
};
|
||
|
|
||
|
this._addNotification(ADD_NOTIFICATION_ID, notificationAttrs);
|
||
|
},
|
||
|
|
||
|
_showUpdatingNotification: function (widgets) {
|
||
|
var notificationAttrs = {
|
||
|
status: NOTIFICATION_STATUS.updating,
|
||
|
info: _t('notifications.widgets.updating_pluralize', {
|
||
|
smart_count: widgets && widgets.length ? widgets.length : 1
|
||
|
}),
|
||
|
closable: false
|
||
|
};
|
||
|
|
||
|
this._addNotification(ADD_NOTIFICATION_ID, notificationAttrs);
|
||
|
},
|
||
|
|
||
|
_showRemoveNotification: function (widgetModel) {
|
||
|
if (widgetModel.get('avoidNotification') === true) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var notificationAttrs = {
|
||
|
status: NOTIFICATION_STATUS.removed,
|
||
|
info: _t('notifications.widgets.delete_pluralize', {
|
||
|
smart_count: 1
|
||
|
}),
|
||
|
closable: true,
|
||
|
delay: Notifier.DEFAULT_DELAY
|
||
|
};
|
||
|
|
||
|
this._addNotification(ADD_NOTIFICATION_ID, notificationAttrs);
|
||
|
},
|
||
|
|
||
|
_showAddNotification: function (widgets) {
|
||
|
var notificationAttrs = {
|
||
|
status: NOTIFICATION_STATUS.added,
|
||
|
info: _t('notifications.widgets.add_pluralize', {
|
||
|
smart_count: widgets && widgets.length ? widgets.length : 1
|
||
|
}),
|
||
|
closable: true
|
||
|
};
|
||
|
|
||
|
this._addOrUpdateNotification(ADD_NOTIFICATION_ID, notificationAttrs);
|
||
|
},
|
||
|
|
||
|
_showReplaceNotification: function (widgets) {
|
||
|
var notificationAttrs = {
|
||
|
status: NOTIFICATION_STATUS.replaced,
|
||
|
info: _t('notifications.widgets.replace_pluralize', {
|
||
|
smart_count: widgets && widgets.length ? widgets.length : 1
|
||
|
}),
|
||
|
closable: true
|
||
|
};
|
||
|
|
||
|
this._addOrUpdateNotification(ADD_NOTIFICATION_ID, notificationAttrs);
|
||
|
},
|
||
|
|
||
|
_showErrorNotification: function (data, error) {
|
||
|
if (this._isAbortion(error)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var notificationAttrs = {
|
||
|
status: NOTIFICATION_STATUS.error,
|
||
|
info: _t('notifications.widgets.error.body', {
|
||
|
body: NOTIFICATION_ERROR_TEMPLATE({
|
||
|
title: _t('notifications.widgets.error.title')
|
||
|
}),
|
||
|
error: errorParser(error)
|
||
|
}),
|
||
|
closable: true
|
||
|
};
|
||
|
|
||
|
this._addOrUpdateNotification(ADD_NOTIFICATION_ID, notificationAttrs);
|
||
|
},
|
||
|
|
||
|
_addOrUpdateNotification: function (notificationId, notificationAttrs) {
|
||
|
var notification = this._getNotification(notificationId);
|
||
|
|
||
|
if (notification) {
|
||
|
notification.set(notificationAttrs);
|
||
|
} else {
|
||
|
this._addNotification(notificationId, notificationAttrs);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
_addNotification: function (notificationId, notificationAttrs) {
|
||
|
notificationAttrs = _.extend({
|
||
|
id: notificationId
|
||
|
}, notificationAttrs);
|
||
|
|
||
|
Notifier.addNotification(notificationAttrs);
|
||
|
},
|
||
|
|
||
|
_getNotification: function (notificationId) {
|
||
|
return Notifier.getNotification(notificationId);
|
||
|
},
|
||
|
|
||
|
_isAbortion: function (error) {
|
||
|
return (error.status === 0 && error.statusText === 'abort');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
module.exports = WidgetsNotifications;
|