mirror of
https://github.com/Mintplex-Labs/express-admin.git
synced 2026-07-19 13:34:42 -04:00
File structure reorganization
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
|
||||
exports = module.exports = {
|
||||
tbl: require('./tbl'),
|
||||
otm: require('./otm'),
|
||||
mtm: require('./mtm'),
|
||||
stc: require('./stc'),
|
||||
list: require('./list'),
|
||||
pagination: require('./pagination')
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
|
||||
var qb = require('../qb'),
|
||||
format = require('./format');
|
||||
format = require('../format');
|
||||
|
||||
|
||||
exports = module.exports = function (args, cb) {
|
||||
exports.get = function (args, done) {
|
||||
var columns = args.config.columns;
|
||||
|
||||
var visible = [],
|
||||
@@ -18,7 +18,7 @@ exports = module.exports = function (args, cb) {
|
||||
qb.lst.create(args);
|
||||
|
||||
args.db.client.query(args.query, function (err, rows) {
|
||||
if (err) return cb(err);
|
||||
if (err) return done(err);
|
||||
var records = [];
|
||||
for (var i=0; i < rows.length; i++) {
|
||||
var pk = {
|
||||
@@ -28,12 +28,12 @@ exports = module.exports = function (args, cb) {
|
||||
var values = [];
|
||||
for (var j=1; j < columns.length; j++) {
|
||||
var value = rows[i][columns[j].name];
|
||||
value = format.value(columns[j], value);
|
||||
value = format.list.value(columns[j], value);
|
||||
if (columns[j].manyToMany && value) value = {mtm: value.split(',')}
|
||||
values.push(value);
|
||||
}
|
||||
records.push({pk: pk, values: values});
|
||||
}
|
||||
cb(null, {columns: names, records: records});
|
||||
done(null, {columns: names, records: records});
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
|
||||
var async = require('async');
|
||||
var qb = require('../qb');
|
||||
|
||||
|
||||
// modifies `rows.columns` with manyToMany columns on select
|
||||
// modifies `rows` with ids on post
|
||||
|
||||
// return an array of all child ids linked to this record's pk
|
||||
function getIds (args, column, pk, done) {
|
||||
var str = qb.mtm.select(args, column, pk);
|
||||
args.db.client.query(str, function (err, rows) {
|
||||
if (err) return done(err);
|
||||
var result = [];
|
||||
for (var i=0; i < rows.length; i++) {
|
||||
result.push(rows[i][Object.keys(rows[i])[0]]);
|
||||
}
|
||||
done(err, result);
|
||||
});
|
||||
}
|
||||
|
||||
function loopColumns (args, row, done) {
|
||||
row.ids = {};
|
||||
async.each(args.config.columns, function (column, done) {
|
||||
if (!column.manyToMany) return done();
|
||||
|
||||
// after select this column practically doesn't exists
|
||||
if (row.columns[column.name] === undefined)
|
||||
row.columns[column.name] = [];
|
||||
|
||||
var pk = row.pk || row.columns['__pk'];
|
||||
if (!pk) return done();
|
||||
|
||||
getIds(args, column, pk, function (err, ids) {
|
||||
if (err) return done(err);
|
||||
args.post
|
||||
// save the ids from the database
|
||||
? row.ids[column.name] = ids
|
||||
// selecting
|
||||
: row.columns[column.name] = ids;
|
||||
|
||||
done();
|
||||
});
|
||||
}, done);
|
||||
}
|
||||
|
||||
// loopRecords
|
||||
exports.get = function (args, rows, done) {
|
||||
async.each(rows, function (row, done) {
|
||||
loopColumns(args, row, done);
|
||||
}, done);
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
|
||||
var async = require('async');
|
||||
var qb = require('../qb');
|
||||
|
||||
|
||||
// modifies `args.config.columns` with `value`
|
||||
|
||||
function getData (args, ref, done) {
|
||||
var str = qb.otm.select(args, ref);
|
||||
args.db.client.query(str, function (err, rows) {
|
||||
if (err) return done(err);
|
||||
done(null, rows);
|
||||
});
|
||||
}
|
||||
|
||||
exports.get = function (args, done) {
|
||||
async.each(args.config.columns, function (column, done) {
|
||||
if ((!column.oneToMany && !column.manyToMany) || !column.control.select)
|
||||
return done();
|
||||
var ref = column.oneToMany ? column.oneToMany : column.manyToMany.ref;
|
||||
getData(args, ref, function (err, rows) {
|
||||
if (err) return done(err);
|
||||
column.value = rows;
|
||||
done();
|
||||
});
|
||||
}, done);
|
||||
}
|
||||
@@ -3,13 +3,13 @@ var pagination = require('sr-pagination');
|
||||
var qb = require('../qb')
|
||||
|
||||
|
||||
exports.get = function (args, cb) {
|
||||
exports.get = function (args, done) {
|
||||
var str = qb.lst.pagination(args);
|
||||
args.db.client.query(str, function (err, rows) {
|
||||
if (err) return cb(err);
|
||||
if (err) return done(err);
|
||||
var total = parseInt(rows[0].count),
|
||||
rows = args.config.listview.page,
|
||||
page = parseInt(args.page || 1);
|
||||
cb(null, pagination({page: page, links: 9, rows: rows, total: total}));
|
||||
done(null, pagination({page: page, links: 9, rows: rows, total: total}));
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
// load static values from settings
|
||||
// modifies `args.config.columns` with `value`
|
||||
|
||||
function getSelect (options) {
|
||||
var values = [];
|
||||
for (var i=0; i < options.length; i++) {
|
||||
if ('string' === typeof options[i]) {
|
||||
values.push({__pk: options[i], __text: options[i]});
|
||||
}
|
||||
else if ('object' === typeof options[i]) {
|
||||
var value = Object.keys(options[i])[0],
|
||||
text = options[i][value];
|
||||
values.push({__pk: value, __text: text});
|
||||
}
|
||||
}
|
||||
return values;
|
||||
}
|
||||
|
||||
function getRadio (options) {
|
||||
return [
|
||||
{text: options[0], value: 1},
|
||||
{text: options[1], value: 0}
|
||||
];
|
||||
}
|
||||
|
||||
exports.get = function (args) {
|
||||
var columns = args.config.columns;
|
||||
for (var i=0; i < columns.length; i++) {
|
||||
var control = columns[i].control;
|
||||
if (!(control.options instanceof Array)) continue;
|
||||
|
||||
if (control.select) {
|
||||
columns[i].value = getSelect(control.options);
|
||||
}
|
||||
else if (control.radio) {
|
||||
columns[i].value = getRadio(control.options);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
var qb = require('../qb');
|
||||
|
||||
|
||||
// get table records
|
||||
|
||||
exports.get = function (args, done) {
|
||||
if (args.post) {
|
||||
var table = args.config.table,
|
||||
rows = args.post[table.name].records || [];
|
||||
return done(null, rows);
|
||||
}
|
||||
|
||||
var str = qb.tbl.select(args);
|
||||
args.db.client.query(str, function (err, rows) {
|
||||
if (err) return done(err);
|
||||
var result = [];
|
||||
for (var i=0; i < rows.length; i++) {
|
||||
result.push({columns: rows[i]});
|
||||
}
|
||||
done(null, result);
|
||||
});
|
||||
}
|
||||
@@ -1,137 +0,0 @@
|
||||
|
||||
var async = require('async');
|
||||
var qb = require('../qb');
|
||||
|
||||
|
||||
// modifies `args.config.columns` with `value`
|
||||
var otm = {
|
||||
_getData: function (args, ref, done) {
|
||||
var str = qb.otm.select(args, ref);
|
||||
args.db.client.query(str, function (err, rows) {
|
||||
if (err) return done(err);
|
||||
done(null, rows);
|
||||
});
|
||||
},
|
||||
get: function (args, done) {
|
||||
async.each(args.config.columns, function (column, done) {
|
||||
if ((!column.oneToMany && !column.manyToMany) || !column.control.select)
|
||||
return done();
|
||||
var ref = column.oneToMany ? column.oneToMany : column.manyToMany.ref;
|
||||
otm._getData(args, ref, function (err, rows) {
|
||||
if (err) return done(err);
|
||||
column.value = rows;
|
||||
done();
|
||||
});
|
||||
}, done);
|
||||
}
|
||||
};
|
||||
|
||||
// load static values from settings
|
||||
// modifies `args.config.columns` with `value`
|
||||
var stc = {
|
||||
getSelect: function (options) {
|
||||
var values = [];
|
||||
for (var i=0; i < options.length; i++) {
|
||||
if ('string' === typeof options[i]) {
|
||||
values.push({__pk: options[i], __text: options[i]});
|
||||
}
|
||||
else if ('object' === typeof options[i]) {
|
||||
var value = Object.keys(options[i])[0],
|
||||
text = options[i][value];
|
||||
values.push({__pk: value, __text: text});
|
||||
}
|
||||
}
|
||||
return values;
|
||||
},
|
||||
getRadio: function (options) {
|
||||
return [
|
||||
{text: options[0], value: 1},
|
||||
{text: options[1], value: 0}
|
||||
];
|
||||
},
|
||||
// loopColumns
|
||||
get: function (args) {
|
||||
var columns = args.config.columns;
|
||||
for (var i=0; i < columns.length; i++) {
|
||||
var control = columns[i].control;
|
||||
if (!(control.options instanceof Array)) continue;
|
||||
|
||||
if (control.select) {
|
||||
columns[i].value = stc.getSelect(control.options);
|
||||
}
|
||||
else if (control.radio) {
|
||||
columns[i].value = stc.getRadio(control.options);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// get table records
|
||||
var tbl = {
|
||||
get: function (args, done) {
|
||||
if (args.post) {
|
||||
var table = args.config.table,
|
||||
rows = args.post[table.name].records || [];
|
||||
return done(null, rows);
|
||||
}
|
||||
|
||||
var str = qb.tbl.select(args);
|
||||
args.db.client.query(str, function (err, rows) {
|
||||
if (err) return done(err);
|
||||
var result = [];
|
||||
for (var i=0; i < rows.length; i++) {
|
||||
result.push({columns: rows[i]});
|
||||
}
|
||||
done(null, result);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// modifies `rows.columns` with manyToMany columns on select
|
||||
// modifies `rows` with ids on post
|
||||
var mtm = {
|
||||
// return an array of all child ids linked to this record's pk
|
||||
getIds: function (args, column, pk, done) {
|
||||
var str = qb.mtm.select(args, column, pk);
|
||||
args.db.client.query(str, function (err, rows) {
|
||||
if (err) return done(err);
|
||||
var result = [];
|
||||
for (var i=0; i < rows.length; i++) {
|
||||
result.push(rows[i][Object.keys(rows[i])[0]]);
|
||||
}
|
||||
done(err, result);
|
||||
});
|
||||
},
|
||||
loopColumns: function (args, row, done) {
|
||||
row.ids = {};
|
||||
async.each(args.config.columns, function (column, done) {
|
||||
if (!column.manyToMany) return done();
|
||||
|
||||
// after select this column practically doesn't exists
|
||||
if (row.columns[column.name] === undefined)
|
||||
row.columns[column.name] = [];
|
||||
|
||||
var pk = row.pk || row.columns['__pk'];
|
||||
if (!pk) return done();
|
||||
|
||||
mtm.getIds(args, column, pk, function (err, ids) {
|
||||
if (err) return done(err);
|
||||
args.post
|
||||
// save the ids from the database
|
||||
? row.ids[column.name] = ids
|
||||
// selecting
|
||||
: row.columns[column.name] = ids;
|
||||
|
||||
done();
|
||||
});
|
||||
}, done);
|
||||
},
|
||||
// loopRecords
|
||||
get: function (args, rows, done) {
|
||||
async.each(rows, function (row, done) {
|
||||
mtm.loopColumns(args, row, done);
|
||||
}, done);
|
||||
}
|
||||
};
|
||||
|
||||
exports = module.exports = {tbl: tbl, otm: otm, mtm: mtm, stc: stc};
|
||||
@@ -2,8 +2,8 @@
|
||||
var async = require('async'),
|
||||
dcopy = require('deep-copy');
|
||||
var upload = require('./upload'),
|
||||
data = require('./data'),
|
||||
params = require('./params');
|
||||
data = require('../data'),
|
||||
template = require('../template');
|
||||
|
||||
|
||||
function removeHidden (columns) {
|
||||
@@ -27,7 +27,7 @@ function getData (args, done) {
|
||||
if (err) return done(err);
|
||||
upload.loopRecords(args, function (err) {
|
||||
if (err) return done(err);
|
||||
done(null, params.get(args, rows));
|
||||
done(null, template.table.get(args, rows));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
|
||||
exports = module.exports = {
|
||||
list: require('./list'),
|
||||
form: require('./form')
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
exports = module.exports = {
|
||||
table: require('./table')
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
var dcopy = require('deep-copy');
|
||||
var validate = require('./validate'),
|
||||
format = require('./format');
|
||||
var validate = require('../editview/validate'),
|
||||
format = require('../format');
|
||||
|
||||
|
||||
exports.blank = function (args) {
|
||||
@@ -65,7 +65,7 @@ exports.records = function (args, rows) {
|
||||
|
||||
var value = values[column.name];
|
||||
column.error = validate.value(column, value);
|
||||
column.value = format.value(column, value);
|
||||
column.value = format.form.value(column, value);
|
||||
args.error = column.error ? true : args.error;
|
||||
}
|
||||
records.push({pk: pk, columns: columns, insert: insert, remove: remove});
|
||||
+16
-24
@@ -1,17 +1,9 @@
|
||||
|
||||
var dcopy = require('deep-copy');
|
||||
var qb = require('../lib/qb');
|
||||
// listview
|
||||
var listview = {
|
||||
data: require('../lib/listview/data')},
|
||||
pagination = require('../lib/listview/pagination'),
|
||||
filter = require('../lib/listview/filter');
|
||||
// editview
|
||||
var editview = {
|
||||
otm: require('../lib/editview/data').otm,
|
||||
stc: require('../lib/editview/data').stc,
|
||||
format: require('../lib/editview/format')
|
||||
};
|
||||
var qb = require('../lib/qb'),
|
||||
data = require('../lib/data'),
|
||||
format = require('../lib/format');
|
||||
var filter = require('../lib/listview/filter');
|
||||
|
||||
|
||||
function getArgs (req, res) {
|
||||
@@ -30,14 +22,14 @@ function getArgs (req, res) {
|
||||
}
|
||||
|
||||
exports.get = function (req, res, next) {
|
||||
data(req, res, next);
|
||||
_data(req, res, next);
|
||||
}
|
||||
|
||||
exports.post = function (req, res, next) {
|
||||
data(req, res, next);
|
||||
_data(req, res, next);
|
||||
}
|
||||
|
||||
function data (req, res, next) {
|
||||
function _data (req, res, next) {
|
||||
var args = getArgs(req, res),
|
||||
events = res.locals._admin.events;
|
||||
|
||||
@@ -45,33 +37,33 @@ function data (req, res, next) {
|
||||
qb.lst.select(args);
|
||||
|
||||
events.preList(req, res, args, function () {
|
||||
listview.data(args, function (err, data) {
|
||||
data.list.get(args, function (err, ddata) {
|
||||
if (err) return next(err);
|
||||
pagination.get(args, function (err, pager) {
|
||||
data.pagination.get(args, function (err, pager) {
|
||||
if (err) return next(err);
|
||||
// always should be in front of filter.getColumns
|
||||
// as it may reduce args.config.columns
|
||||
var order = filter.getOrderColumns(req, args);
|
||||
args.config.columns = filter.getColumns(args);
|
||||
|
||||
editview.otm.get(args, function (err) {
|
||||
data.otm.get(args, function (err) {
|
||||
if (err) return next(err);
|
||||
editview.stc.get(args);
|
||||
data.stc.get(args);
|
||||
|
||||
render(req, res, args, data, pager, order, next);
|
||||
render(req, res, args, ddata, pager, order, next);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function render (req, res, args, data, pager, order, next) {
|
||||
function render (req, res, args, ddata, pager, order, next) {
|
||||
// set filter active items
|
||||
for (var i=0; i < args.config.columns.length; i++) {
|
||||
var column = args.config.columns[i],
|
||||
value = args.filter.columns[column.name];
|
||||
column.defaultValue = null;
|
||||
column.value = editview.format.value(column, value);
|
||||
column.value = format.form.value(column, value);
|
||||
}
|
||||
|
||||
res.locals.view = {
|
||||
@@ -110,8 +102,8 @@ function render (req, res, args, data, pager, order, next) {
|
||||
res.locals.collapsed = args.filter.show;
|
||||
res.locals.or = args.filter.or;
|
||||
|
||||
res.locals.columns = data.columns;
|
||||
res.locals.records = data.records;
|
||||
res.locals.columns = ddata.columns;
|
||||
res.locals.records = ddata.records;
|
||||
res.locals.pagination = pager;
|
||||
|
||||
res.locals.partials = {
|
||||
|
||||
Reference in New Issue
Block a user