Skip to content

Commit dd6936d

Browse files
committed
Added support to sort by order and columns
1 parent 9da6368 commit dd6936d

File tree

3 files changed

+42
-2
lines changed

3 files changed

+42
-2
lines changed

example/index.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ var app = express();
99

1010
app.use(express.static(__dirname + '/bower_components'));
1111
app.use(express.static(__dirname + '/public'));
12-
app.use(bodyParser.urlencoded({ extended: false }));
12+
app.use(bodyParser.json());
13+
app.use(bodyParser.urlencoded({
14+
extended: true
15+
}));
1316

1417

1518
mongoose.connect('mongodb://localhost/mongoose-datatables-example', function (err) {
@@ -31,7 +34,9 @@ mongoose.connect('mongodb://localhost/mongoose-datatables-example', function (er
3134
app.post('/', function (req, res) {
3235
User.dataTables({
3336
limit: req.body.length,
34-
skip: req.body.start
37+
skip: req.body.start,
38+
order: req.body.order,
39+
columns: req.body.columns
3540
}).then(function (table) {
3641
res.json({
3742
data: table.data,

lib/mongoose-datatables.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ function dataTablesPlugin (schema, options) {
2121
var find = params.find || {}
2222
var sort = params.sort || {}
2323
var search = params.search || {}
24+
var order = params.order || [];
25+
var columns = params.columns || [];
2426
var formatter = params.formatter
2527

2628
if (search && search.value && search.fields && search.fields.length) {
@@ -43,6 +45,18 @@ function dataTablesPlugin (schema, options) {
4345
}
4446
}
4547

48+
if (order && columns) {
49+
const sortByOrder = order.reduce((memo, ordr) => {
50+
const column = columns[ordr.column];
51+
memo[column.data] = ordr.dir === 'asc' ? 1 : -1;
52+
return memo;
53+
}, {});
54+
55+
if (Object.keys(sortByOrder).length) {
56+
sort = sortByOrder;
57+
}
58+
}
59+
4660
var query = thisSchema
4761
.find(find)
4862
.select(select)

test/index.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,27 @@ describe('mongoose-datatables', function () {
8383
}).catch(done)
8484
})
8585

86+
it('sort using order and columns params', function (done) {
87+
User.dataTables({
88+
skip: 0,
89+
limit: 10,
90+
columns: [
91+
{ data: 'first_name' },
92+
{ data: 'last_name' },
93+
{ data: 'username' },
94+
],
95+
order: [
96+
{
97+
column: 0,
98+
dir: 'asc'
99+
}
100+
]
101+
}).then(table => {
102+
expect(table.data[0].first_name).equal('Antonio')
103+
done()
104+
}).catch(done)
105+
});
106+
86107
it('search', function (done) {
87108
User.dataTables({
88109
skip: 0,

0 commit comments

Comments
 (0)