CartoDB/cartodb20

View on GitHub
lib/assets/javascripts/builder/editor/layers/operations/rename-layer.js

Summary

Maintainability
A
3 hrs
Test Coverage
var Notifier = require('builder/components/notifier/notifier');
var errorParser = require('builder/helpers/error-parser');
var utils = require('builder/helpers/utils');

module.exports = function (opts) {
  if (!opts.userActions) throw new Error('userActions is required');
  if (!opts.layerDefinitionModel) throw new Error('layerDefinitionModel is required');
  if (!opts.layerDefinitionsCollection) throw new Error('layerDefinitionsCollection is required');
  if (!opts.newName) throw new Error('newName is required');

  var layerDefinitionModel = opts.layerDefinitionModel;
  var successCallback = opts.onSuccess;
  var errorCallback = opts.onError;
  var newName = opts.newName;
  var oldName = layerDefinitionModel.getName();

  var notification = Notifier.addNotification({
    status: 'loading',
    info: _t('editor.layers.rename.loading'),
    closable: false
  });

  layerDefinitionModel.set('table_name_alias', newName);

  opts.userActions.saveLayer(layerDefinitionModel)
    .done(function () {
      successCallback && successCallback(newName);
      notification.set({
        status: 'success',
        info: _t('editor.layers.rename.success', {name: utils.escapeHTML(newName)}),
        closable: true
      });
    })
    .fail(function (e) {
      errorCallback && errorCallback(oldName);
      notification.set({
        status: 'error',
        info: _t('editor.layers.rename.error', {name: utils.escapeHTML(oldName), error: errorParser(e)}),
        closable: true
      });
    });
};