cartodb-4.42/lib/assets/javascripts/builder/components/modals/add-widgets/time-series/time-series-option-model.js
2024-04-06 05:25:13 +00:00

82 lines
2.5 KiB
JavaScript
Executable File

var _ = require('underscore');
var WidgetOptionModel = require('builder/components/modals/add-widgets/widget-option-model');
var WidgetDefinitionModel = require('builder/data/widget-definition-model');
var TIME_SERIES_TYPE = 'time-series';
module.exports = WidgetOptionModel.extend({
defaults: _.defaults({type: TIME_SERIES_TYPE}, WidgetOptionModel.defaults),
save: function (widgetDefinitionsCollection) {
var model = this;
var columnName = this.columnName();
var layerId = this.layerDefinitionModel().id;
var attrs = {
type: TIME_SERIES_TYPE,
layer_id: layerId,
source: {
id: this.analysisDefinitionNodeModel().id
},
options: {
column: columnName,
title: this.get('title')
},
style: {
widget_style: {
definition: WidgetDefinitionModel.getDefaultWidgetStyle(TIME_SERIES_TYPE)
}
}
};
var attrsSave = {
type: TIME_SERIES_TYPE,
layer_id: layerId,
source: this.analysisDefinitionNodeModel().id,
column: columnName,
title: this.get('title'),
widget_style_definition: WidgetDefinitionModel.getDefaultWidgetStyle(TIME_SERIES_TYPE)
};
// Depending on column type, widget should have bins or aggregation
if (this.get('aggregation')) {
attrs.options.aggregation = this.get('aggregation');
attrsSave.aggregation = this.get('aggregation');
} else if (this.get('bins')) {
attrs.options.bins = this.get('bins');
attrsSave.bins = this.get('bins');
}
var successReplaceHandler = function () {
widgetDefinitionsCollection.trigger('successReplace', model);
};
var errorHandler = function (model, e) {
widgetDefinitionsCollection.trigger('error', model, e);
};
var createUpdatingNotification = function () {
widgetDefinitionsCollection.trigger('updating', model);
};
var existingModel = widgetDefinitionsCollection.find(this._isTimesSeries);
if (existingModel) {
// Update existing widget, but only if the column or layer differs
if (existingModel.get('column') !== columnName || existingModel.get('layer_id') !== layerId) {
createUpdatingNotification();
return existingModel.save(attrsSave, {
wait: true,
success: successReplaceHandler,
error: errorHandler
});
}
} else {
return widgetDefinitionsCollection.addWidget(model, attrs);
}
},
_isTimesSeries: function (model) {
return model.get('type') === TIME_SERIES_TYPE;
}
});