164 lines
5.0 KiB
JavaScript
164 lines
5.0 KiB
JavaScript
var cdb = require('cartodb.js-v3');
|
|
var BaseDialog = require('../views/base_dialog/view');
|
|
var pluralizeString = require('../view_helpers/pluralize_string');
|
|
var randomQuote = require('../view_helpers/random_quote');
|
|
var MapCardPreview = require('../views/mapcard_preview');
|
|
var $ = require('jquery-cdb-v3');
|
|
var moment = require('moment-v3');
|
|
|
|
var AFFECTED_ENTITIES_SAMPLE_COUNT = 3;
|
|
var AFFECTED_VIS_COUNT = 3;
|
|
|
|
/**
|
|
* Delete items dialog
|
|
*/
|
|
module.exports = BaseDialog.extend({
|
|
|
|
initialize: function() {
|
|
this.elder('initialize');
|
|
if (!this.options.viewModel) {
|
|
throw new TypeError('viewModel is required');
|
|
}
|
|
if (!this.options.user) {
|
|
throw new TypeError('user is required');
|
|
}
|
|
|
|
this._viewModel = this.options.viewModel;
|
|
this._viewModel.loadPrerequisites();
|
|
this._viewModel.bind('change', function() {
|
|
if (this._viewModel.state() === 'DeleteItemsDone') {
|
|
this.close();
|
|
} else {
|
|
this.render();
|
|
}
|
|
}, this);
|
|
this.add_related_model(this._viewModel);
|
|
},
|
|
|
|
render: function() {
|
|
BaseDialog.prototype.render.call(this);
|
|
this._loadMapPreviews();
|
|
return this;
|
|
},
|
|
|
|
/**
|
|
* @implements cdb.ui.common.Dialog.prototype.render_content
|
|
*/
|
|
render_content: function() {
|
|
return this['_render' + this._viewModel.state()]();
|
|
},
|
|
|
|
_renderLoadingPrerequisites: function() {
|
|
return cdb.templates.getTemplate('common/templates/loading')({
|
|
title: 'Checking what consequences deleting the selected ' + this._pluralizedContentType() + ' would have...',
|
|
quote: randomQuote()
|
|
});
|
|
},
|
|
|
|
_renderLoadPrerequisitesFail: function() {
|
|
return cdb.templates.getTemplate('common/templates/fail')({
|
|
msg: 'Failed to check consequences of deleting the selected ' + this._pluralizedContentType()
|
|
});
|
|
},
|
|
|
|
_renderConfirmDeletion: function() {
|
|
// An entity can be an User or Organization
|
|
var affectedEntities = this._viewModel.affectedEntities();
|
|
var affectedVisData = this._viewModel.affectedVisData();
|
|
|
|
return cdb.templates.getTemplate('common/dialogs/delete_items_view_template')({
|
|
firstItemName: this._getFirstItemName(),
|
|
selectedCount: this._viewModel.length,
|
|
isDatasets: this._viewModel.isDeletingDatasets(),
|
|
pluralizedContentType: this._pluralizedContentType(),
|
|
affectedEntitiesCount: affectedEntities.length,
|
|
affectedEntitiesSample: affectedEntities.slice(0, AFFECTED_ENTITIES_SAMPLE_COUNT),
|
|
affectedEntitiesSampleCount: AFFECTED_ENTITIES_SAMPLE_COUNT,
|
|
affectedVisCount: affectedVisData.length,
|
|
pluralizedMaps: pluralizeString('map', affectedVisData.length),
|
|
affectedVisVisibleCount: AFFECTED_VIS_COUNT,
|
|
visibleAffectedVis: this._prepareVisibleAffectedVisForTemplate(affectedVisData.slice(0, AFFECTED_VIS_COUNT))
|
|
});
|
|
},
|
|
|
|
_prepareVisibleAffectedVisForTemplate: function(visibleAffectedVisData) {
|
|
return visibleAffectedVisData.map(function(visData) {
|
|
var vis = new cdb.admin.Visualization(visData);
|
|
var owner = vis.permission.owner;
|
|
return {
|
|
visId: vis.get('id'),
|
|
name: vis.get('name'),
|
|
url: vis.viewUrl(this.options.user).edit(),
|
|
owner: owner,
|
|
ownerName: owner.get('username'),
|
|
isOwner: vis.permission.isOwner(this.options.user),
|
|
showPermissionIndicator: !vis.permission.hasWriteAccess(this.options.user),
|
|
timeDiff: moment(vis.get('updated_at')).fromNow(),
|
|
authTokens: vis.get('auth_tokens').join(';')
|
|
};
|
|
}, this);
|
|
},
|
|
|
|
/**
|
|
* @overrides BaseDialog.prototype.ok
|
|
*/
|
|
ok: function() {
|
|
this._viewModel.deleteItems();
|
|
this.render();
|
|
},
|
|
|
|
_loadMapPreviews: function() {
|
|
var self = this;
|
|
|
|
this.$el.find('.MapCard').each(function() {
|
|
var username = $(this).data('visOwnerName');
|
|
var mapCardPreview = new MapCardPreview({
|
|
el: $(this).find('.js-header'),
|
|
width: 298,
|
|
height: 130,
|
|
mapsApiResource: cdb.config.getMapsResourceName(username),
|
|
visId: $(this).data('visId'),
|
|
username: username,
|
|
authTokens: $(this).data('visAuthTokens').split(';')
|
|
}).load();
|
|
|
|
self.addView(mapCardPreview);
|
|
});
|
|
},
|
|
|
|
_renderDeletingItems: function() {
|
|
return cdb.templates.getTemplate('common/templates/loading')({
|
|
title: 'Deleting the selected ' + this._pluralizedContentType() + '...',
|
|
quote: randomQuote()
|
|
});
|
|
},
|
|
|
|
_renderDeleteItemsFail: function() {
|
|
var message = this._viewModel.errorMessage().replace(/\n/g, '<br>');
|
|
if (message === 'something failed') {
|
|
message = '';
|
|
}
|
|
return cdb.templates.getTemplate('common/templates/fail')({
|
|
msg: 'Failed to delete the selected ' + this._pluralizedContentType() + '. ' + message
|
|
});
|
|
},
|
|
|
|
_pluralizedContentType: function() {
|
|
return pluralizeString(
|
|
this._viewModel.isDeletingDatasets() ? 'dataset' : 'map',
|
|
this._viewModel.length
|
|
);
|
|
},
|
|
|
|
_getFirstItemName: function() {
|
|
if (!this.options.viewModel) return;
|
|
|
|
var firstItem = this.options.viewModel.at(0);
|
|
|
|
if (firstItem) {
|
|
return firstItem.get("name");
|
|
}
|
|
}
|
|
|
|
});
|