diff --git a/lib/cartodb/controllers/map.js b/lib/cartodb/controllers/map.js index 96844ecf..342fdeb2 100644 --- a/lib/cartodb/controllers/map.js +++ b/lib/cartodb/controllers/map.js @@ -84,6 +84,7 @@ MapController.prototype.register = function(app) { this.prepareContext, prepareJsonTemplateParams, this.getTemplate.bind(this), + this.createLayergroupFromTemplate.bind(this), this.jsonp.bind(this), mapErrorMiddleware({ label: 'NAMED MAP LAYERGROUP' @@ -96,6 +97,7 @@ MapController.prototype.register = function(app) { this.prepareContext, prepareTemplateParams, this.getTemplate.bind(this), + this.createLayergroupFromTemplate.bind(this), this.instantiate.bind(this), mapErrorMiddleware({ label: 'NAMED MAP LAYERGROUP' @@ -264,7 +266,7 @@ MapController.prototype.getTemplate = function(req, res, next) { const templateParams = req.body; const { user } = res.locals; - const mapConfigProvider = res.locals.mapconfigProvider = new NamedMapMapConfigProvider( + const mapconfigProvider = new NamedMapMapConfigProvider( this.templateMaps, this.pgConnection, this.metadataBackend, @@ -277,13 +279,37 @@ MapController.prototype.getTemplate = function(req, res, next) { res.locals ); - mapConfigProvider.getMapConfig((err, mapconfig, rendererParams) => { + mapconfigProvider.getMapConfig((err, mapconfig, rendererParams) => { if (err) { return next(err); } res.locals.mapconfig = mapconfig; res.locals.rendererParams = rendererParams; + res.locals.mapconfigProvider = mapconfigProvider; + + next(); + }); +}; + +MapController.prototype.createLayergroupFromTemplate = function(req, res, next) { + const { user, mapconfig, rendererParams } = res.locals; + const mapconfigProvider = new CreateLayergroupMapConfigProvider(mapconfig, user, this.userLimitsApi, rendererParams); + + this.mapBackend.createLayergroup(mapconfig, rendererParams, mapconfigProvider, (err, layergroup) => { + if (err) { + return next(err); + } + + res.locals.layergroup = layergroup; + + // TODO: Do not provide shortcuts + const { mapconfigProvider } = res.locals; + + res.locals.analysesResults = mapconfigProvider.analysesResults; + res.locals.template = mapconfigProvider.template; + res.locals.templateName = mapconfigProvider.getTemplateName(); + res.locals.context = mapconfigProvider.context; next(); }); @@ -293,27 +319,7 @@ MapController.prototype.instantiateTemplate = function(req, res, next) { var self = this; step( - function createLayergroup() { - const { user, mapconfig, rendererParams } = res.locals; - - self.mapBackend.createLayergroup( - mapconfig, rendererParams, - new CreateLayergroupMapConfigProvider(mapconfig, user, self.userLimitsApi, rendererParams), - this - ); - }, - function afterLayergroupCreate(err, layergroup) { - assert.ifError(err); - - res.locals.layergroup = layergroup; - - const { mapconfigProvider } = res.locals; - - res.locals.analysesResults = mapconfigProvider.analysesResults; - res.locals.template = mapconfigProvider.template; - res.locals.templateName = mapconfigProvider.getTemplateName(); - res.locals.context = mapconfigProvider.context; - + function afterLayergroupCreate() { const afterLayergroupCreate = self.afterLayergroupCreateBuilder({ useTemplateHash: true });