cartodb/lib/assets/javascripts/builder/dataset/dataset-unlock-modal-view.js
2020-06-15 10:58:47 +08:00

116 lines
2.5 KiB
JavaScript
Executable File

var CoreView = require('backbone/core-view');
var $ = require('jquery');
var _ = require('underscore');
var errorParser = require('builder/helpers/error-parser');
var template = require('./dataset-unlock-modal.tpl');
var renderLoading = require('builder/components/loading/render-loading');
var ErrorView = require('builder/components/error/error-view');
var REQUIRED_OPTS = [
'tableName',
'visModel',
'configModel',
'modalModel'
];
/**
* Remove confirmation dialog
*/
module.exports = CoreView.extend({
className: 'Dialog-content',
events: {
'click .js-confirm': '_onConfirm',
'click .js-cancel': '_onCancel'
},
initialize: function (opts) {
_.each(REQUIRED_OPTS, function (item) {
if (!opts[item]) throw new Error(item + ' is required');
this['_' + item] = opts[item];
}, this);
this._onKeyDown = this._onKeyDown.bind(this);
this._initBinds();
},
render: function () {
this.clearSubViews();
this.$el.html(
template({
tableName: this._tableName
})
);
return this;
},
_initBinds: function () {
$(document).bind('keydown', this._onKeyDown);
this._modalModel.bind('change:show', function () {
if (this._visModel.get('locked')) {
this._onCancel();
}
}, this);
this.add_related_model(this._modalModel);
},
_disableBinds: function () {
$(document).unbind('keydown', this._onKeyDown);
},
_onKeyDown: function (ev) {
var keyCode = ev.which;
if (keyCode === $.ui.keyCode.ENTER) {
this._onConfirm();
}
},
_renderLoadingView: function () {
this.$el.html(
renderLoading({
title: _t('dataset.unlock.loading', { tableName: this._tableName })
})
);
},
_renderErrorView: function (errorMessage) {
var errorView = new ErrorView({
title: _t('dataset.unlock.error', { tableName: this._tableName }),
desc: errorMessage
});
this.$el.html(errorView.render().el);
this.addView(errorView);
},
_$content: function () {
return this.$('.js-content');
},
_onConfirm: function () {
this._renderLoadingView();
this._visModel.save({
locked: false
}, {
wait: true,
success: function () {
this._modalModel.destroy();
}.bind(this),
error: function (mdl, e) {
this._renderErrorView(errorParser(e));
}.bind(this)
});
},
_onCancel: function () {
window.location = this._configModel.get('base_url');
},
clean: function () {
this._disableBinds();
CoreView.prototype.clean.apply(this);
}
});