Switch to config object instead of millions of params

This commit is contained in:
Arik Fraimovich
2014-03-04 11:09:04 +02:00
parent 68482afa5c
commit 3320de07f2
4 changed files with 30 additions and 15 deletions

View File

@@ -2,25 +2,24 @@
var VisualizationProvider = function() {
this.visualizations = {};
this.visualizationTypes = {};
var defaultConfig = {
defaultOptions: {},
skipTypes: false,
editorTemplate: null
}
this.registerVisualization = function(type, name, rendererTemplate, editorTemplate, defaultOptions, skipTypes) {
var visualization = {
rendererTemplate: rendererTemplate,
editorTemplate: editorTemplate,
type: type,
name: name,
defaultOptions: defaultOptions || {}
};
this.registerVisualization = function(config) {
var visualization = _.extend({}, defaultConfig, config);
// TODO: this is prone to errors; better refactor.
if (_.isEmpty(this.visualizations)) {
this.defaultVisualization = visualization;
}
this.visualizations[type] = visualization;
this.visualizations[config.type] = visualization;
if (!skipTypes) {
this.visualizationTypes[name] = type;
if (!config.skipTypes) {
this.visualizationTypes[config.name] = config.type;
};
};
@@ -47,7 +46,7 @@
var Visualization = $resource('/api/visualizations/:id', {id: '@id'});
Visualization.visualizations = this.visualizations;
Visualization.visualizationTypes = this.visualizationTypes;
Visualization.renderVisualizationsTemplate = this.getSwitchTemplate('rendererTemplate');
Visualization.renderVisualizationsTemplate = this.getSwitchTemplate('renderTemplate');
Visualization.editorTemplate = this.getSwitchTemplate('editorTemplate');
Visualization.defaultVisualization = this.defaultVisualization;

View File

@@ -10,7 +10,14 @@
'stacking': null
}
};
VisualizationProvider.registerVisualization('CHART', 'Chart', renderTemplate, editTemplate, defaultOptions);
VisualizationProvider.registerVisualization({
type: 'CHART',
name: 'Chart',
renderTemplate: renderTemplate,
editorTemplate: editTemplate,
defaultOptions: defaultOptions
});
}]);
chartVisualization.directive('chartRenderer', function () {

View File

@@ -2,7 +2,11 @@
var cohortVisualization = angular.module('redash.visualization');
cohortVisualization.config(['VisualizationProvider', function(VisualizationProvider) {
VisualizationProvider.registerVisualization('COHORT', 'Cohort', '<cohort-renderer options="visualization.options" query-result="queryResult"></cohort-renderer>', null);
VisualizationProvider.registerVisualization({
type: 'COHORT',
name: 'Cohort',
renderTemplate: '<cohort-renderer options="visualization.options" query-result="queryResult"></cohort-renderer>'
});
}]);
cohortVisualization.directive('cohortRenderer', function() {

View File

@@ -2,7 +2,12 @@
var tableVisualization = angular.module('redash.visualization');
tableVisualization.config(['VisualizationProvider', function(VisualizationProvider) {
VisualizationProvider.registerVisualization('TABLE', 'Table', '<grid-renderer options="visualization.options" query-result="queryResult"></grid-renderer>', null, {}, true);
VisualizationProvider.registerVisualization({
type: 'TABLE',
name: 'Table',
renderTemplate: '<grid-renderer options="visualization.options" query-result="queryResult"></grid-renderer>',
skipTypes: true
});
}]);
tableVisualization.directive('gridRenderer', function () {