cartodb-4.42/lib/assets/javascripts/cartodb/common/dialogs/delete_items_view.js
2024-04-06 05:25:13 +00:00

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");
}
}
});