68 lines
1.7 KiB
JavaScript
68 lines
1.7 KiB
JavaScript
|
var CoreView = require('backbone/core-view');
|
||
|
var _ = require('underscore');
|
||
|
var errorButtonTemplate = require('./widget-error-button-template.tpl');
|
||
|
var errorTextTemplate = require('./widget-error-text-template.tpl');
|
||
|
|
||
|
/**
|
||
|
* Default widget error view:
|
||
|
*
|
||
|
* It will listen or not to dataviewModel changes when first load is done.
|
||
|
*/
|
||
|
module.exports = CoreView.extend({
|
||
|
className: 'CDB-Widget-body is-hidden',
|
||
|
|
||
|
events: {
|
||
|
'click .js-refresh': '_onRefreshClick'
|
||
|
},
|
||
|
|
||
|
initialize: function (opts) {
|
||
|
this._title = opts.title;
|
||
|
this._errorModel = opts.errorModel;
|
||
|
|
||
|
this.listenTo(this._errorModel, 'change', this._onErrorModelChanged);
|
||
|
},
|
||
|
|
||
|
render: function () {
|
||
|
var error = this._errorModel.get('error');
|
||
|
|
||
|
if (error) {
|
||
|
var placeholderTemplate = this._errorModel.get('placeholder');
|
||
|
var placeholder = _.isFunction(placeholderTemplate) ? placeholderTemplate() : '';
|
||
|
this.$el.addClass('CDB-Widget--' + error.level);
|
||
|
|
||
|
var body = error.type
|
||
|
? errorTextTemplate({
|
||
|
placeholder: placeholder,
|
||
|
error: error.error,
|
||
|
title: this._title,
|
||
|
message: error.message,
|
||
|
refresh: error.refresh
|
||
|
})
|
||
|
: errorButtonTemplate({ placeholder: placeholder });
|
||
|
|
||
|
this.$el.html(body);
|
||
|
}
|
||
|
|
||
|
return this;
|
||
|
},
|
||
|
|
||
|
_onErrorModelChanged: function () {
|
||
|
this._reset();
|
||
|
|
||
|
_.isEmpty(this._errorModel.get('error'))
|
||
|
? this.$el.addClass('is-hidden')
|
||
|
: this.$el.removeClass('is-hidden');
|
||
|
|
||
|
this.render();
|
||
|
},
|
||
|
|
||
|
_onRefreshClick: function () {
|
||
|
this._errorModel.get('model').refresh();
|
||
|
},
|
||
|
|
||
|
_reset: function () {
|
||
|
this.$el.removeClass('CDB-Widget--alert CDB-Widget--error');
|
||
|
this.$el.html('');
|
||
|
}
|
||
|
});
|