67 lines
1.2 KiB
JavaScript
67 lines
1.2 KiB
JavaScript
|
var dot = require('dot');
|
||
|
dot.templateSettings.strip = false;
|
||
|
|
||
|
var BaseWidget = require('./base');
|
||
|
|
||
|
var TYPE = 'list';
|
||
|
|
||
|
var listSqlTpl = dot.template('select {{=it._columns}} from ({{=it._query}}) as _cdb_list');
|
||
|
|
||
|
/**
|
||
|
{
|
||
|
type: 'list',
|
||
|
options: {
|
||
|
columns: ['name', 'description']
|
||
|
}
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
function List(query, options) {
|
||
|
options = options || {};
|
||
|
|
||
|
if (!Array.isArray(options.columns)) {
|
||
|
throw new Error('List expects `columns` array in widget options');
|
||
|
}
|
||
|
|
||
|
BaseWidget.apply(this);
|
||
|
|
||
|
this.query = query;
|
||
|
this.columns = options.columns;
|
||
|
}
|
||
|
|
||
|
List.prototype = new BaseWidget();
|
||
|
List.prototype.constructor = List;
|
||
|
|
||
|
module.exports = List;
|
||
|
|
||
|
List.prototype.sql = function(psql, filters, override, callback) {
|
||
|
if (!callback) {
|
||
|
callback = override;
|
||
|
}
|
||
|
|
||
|
var listSql = listSqlTpl({
|
||
|
_query: this.query,
|
||
|
_columns: this.columns.join(', ')
|
||
|
});
|
||
|
|
||
|
return callback(null, listSql);
|
||
|
};
|
||
|
|
||
|
List.prototype.format = function(result) {
|
||
|
return {
|
||
|
rows: result.rows
|
||
|
};
|
||
|
};
|
||
|
|
||
|
List.prototype.getType = function() {
|
||
|
return TYPE;
|
||
|
};
|
||
|
|
||
|
List.prototype.toString = function() {
|
||
|
return JSON.stringify({
|
||
|
_type: TYPE,
|
||
|
_query: this.query,
|
||
|
_columns: this.columns.join(', ')
|
||
|
});
|
||
|
};
|