DataTables-based dropdown

This commit is contained in:
Tomas Bures 2017-07-10 17:37:56 +02:00
parent 0c860456a6
commit 38cf3e49c0
7 changed files with 332 additions and 105 deletions

View file

@ -6,46 +6,56 @@ async function ajaxList(params, queryFun, columns) {
return await knex.transaction(async (tx) => {
const query = queryFun(tx);
const recordsTotalQuery = query.clone().count('* as recordsTotal').first();
const recordsTotal = (await recordsTotalQuery).recordsTotal;
if (params.operation === 'getBy') {
query.whereIn(columns[parseInt(params.column)], params.values);
query.select(columns);
query.where(function() {
let searchVal = '%' + params.search.value.replace(/\\/g, '\\\\').replace(/([%_])/g, '\\$1') + '%';
for (let colIdx = 0; colIdx < params.columns.length; colIdx++) {
const col = params.columns[colIdx];
if (col.searchable === 'true') {
this.orWhere(columns[parseInt(col.data)], 'like', searchVal);
const rows = await query;
const rowsOfArray = rows.map(row => Object.keys(row).map(key => row[key]));
return rowsOfArray;
} else {
const recordsTotalQuery = query.clone().count('* as recordsTotal').first();
const recordsTotal = (await recordsTotalQuery).recordsTotal;
query.where(function() {
let searchVal = '%' + params.search.value.replace(/\\/g, '\\\\').replace(/([%_])/g, '\\$1') + '%';
for (let colIdx = 0; colIdx < params.columns.length; colIdx++) {
const col = params.columns[colIdx];
if (col.searchable) {
this.orWhere(columns[parseInt(col.data)], 'like', searchVal);
}
}
});
const recordsFilteredQuery = query.clone().count('* as recordsFiltered').first();
const recordsFiltered = (await recordsFilteredQuery).recordsFiltered;
query.offset(parseInt(params.start));
const limit = parseInt(params.length);
if (limit >= 0) {
query.limit(limit);
}
});
const recordsFilteredQuery = query.clone().count('* as recordsFiltered').first();
const recordsFiltered = (await recordsFilteredQuery).recordsFiltered;
query.select(columns);
query.offset(parseInt(params.start));
for (const order of params.order) {
query.orderBy(columns[params.columns[order.column].data], order.dir);
}
const limit = parseInt(params.length);
if (limit >= 0) {
query.limit(limit);
const rows = await query;
const rowsOfArray = rows.map(row => Object.keys(row).map(field => row[field]));
const result = {
draw: params.draw,
recordsTotal,
recordsFiltered,
data: rowsOfArray
};
return result;
}
query.select(columns);
for (const order of params.order) {
query.orderBy(columns[params.columns[order.column].data], order.dir);
}
const rows = await query;
const rowsOfArray = rows.map(row => Object.keys(row).map(key => row[key]));
const result = {
draw: params.draw,
recordsTotal,
recordsFiltered,
data: rowsOfArray
};
return result;
});
}