Skip to content

Commit 83aa891

Browse files
author
Tom Bertrand
authored
Merge pull request #458 from mthorzen/sort_display_key_null
Sorting when display key value is null.
2 parents 6731d9c + c313760 commit 83aa891

File tree

2 files changed

+129
-1
lines changed

2 files changed

+129
-1
lines changed

src/jquery.typeahead.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2055,7 +2055,11 @@
20552055
displayKeys,
20562056
scope.options.order === "asc",
20572057
function (a) {
2058-
return a.toString().toUpperCase();
2058+
if (a) {
2059+
return a.toString().toUpperCase();
2060+
} else {
2061+
return "";
2062+
}
20592063
}
20602064
)
20612065
);

test/option/order.test.js

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
const $ = require('jquery');
2+
const Typeahead = require('../../src/jquery.typeahead');
3+
4+
describe('Typeahead order option Tests', () => {
5+
'use strict';
6+
7+
let myTypeahead;
8+
9+
describe('order defined as asc', () => {
10+
beforeAll(() => {
11+
document.body.innerHTML = '<input class="js-typeahead">';
12+
13+
myTypeahead = $.typeahead({
14+
input: '.js-typeahead',
15+
minLength: 0,
16+
order: 'asc',
17+
display: ['name', 'id'],
18+
source: {
19+
myGroup: {
20+
data: [
21+
{ name: 'DEF', id: '1' },
22+
{ name: 'HIJ', id: '2' },
23+
{ name: 'ABC', id: '3' },
24+
{ name: null, id: '4' },
25+
{ name: false, id: '5' },
26+
{ name: 0, id: '6' },
27+
],
28+
},
29+
},
30+
});
31+
});
32+
33+
it('Should order the items ASC', () => {
34+
myTypeahead.node.val('').trigger('input');
35+
36+
expect(myTypeahead.result).toEqual([
37+
{ group: 'myGroup', id: '4', matchedKey: 'id', name: null },
38+
{ group: 'myGroup', id: '5', matchedKey: 'name', name: false },
39+
{ group: 'myGroup', id: '6', matchedKey: 'name', name: 0 },
40+
{ group: 'myGroup', id: '3', matchedKey: 'name', name: 'ABC' },
41+
{ group: 'myGroup', id: '1', matchedKey: 'name', name: 'DEF' },
42+
{ group: 'myGroup', id: '2', matchedKey: 'name', name: 'HIJ' },
43+
]);
44+
});
45+
});
46+
47+
describe('order defined as desc', () => {
48+
beforeAll(() => {
49+
document.body.innerHTML = '<input class="js-typeahead">';
50+
51+
myTypeahead = $.typeahead({
52+
input: '.js-typeahead',
53+
minLength: 0,
54+
order: 'desc',
55+
display: ['name', 'id'],
56+
source: {
57+
myGroup: {
58+
data: [
59+
{ name: 'DEF', id: '1' },
60+
{ name: 'HIJ', id: '2' },
61+
{ name: 'ABC', id: '3' },
62+
{ name: null, id: '4' },
63+
{ name: false, id: '5' },
64+
{ name: 0, id: '6' },
65+
],
66+
},
67+
},
68+
});
69+
});
70+
71+
it('Should order the items DESC', () => {
72+
myTypeahead.node.val('').trigger('input');
73+
74+
expect(myTypeahead.result).toEqual([
75+
{ group: 'myGroup', id: '2', matchedKey: 'name', name: 'HIJ' },
76+
{ group: 'myGroup', id: '1', matchedKey: 'name', name: 'DEF' },
77+
{ group: 'myGroup', id: '3', matchedKey: 'name', name: 'ABC' },
78+
{ group: 'myGroup', id: '4', matchedKey: 'id', name: null },
79+
{ group: 'myGroup', id: '5', matchedKey: 'name', name: false },
80+
{ group: 'myGroup', id: '6', matchedKey: 'name', name: 0 },
81+
]);
82+
});
83+
});
84+
85+
describe('order defined as asc while filtering out the empty values', () => {
86+
beforeAll(() => {
87+
document.body.innerHTML = '<input class="js-typeahead">';
88+
89+
myTypeahead = $.typeahead({
90+
input: '.js-typeahead',
91+
minLength: 0,
92+
order: 'asc',
93+
display: ['name', 'id'],
94+
filter: function(item, displayKey) {
95+
if (displayKey) {
96+
return true;
97+
}
98+
},
99+
source: {
100+
myGroup: {
101+
data: [
102+
{ name: 'DEF', id: '1' },
103+
{ name: 'HIJ', id: '2' },
104+
{ name: 'ABC', id: '3' },
105+
{ name: null, id: '4' },
106+
{ name: false, id: '5' },
107+
{ name: 0, id: '6' },
108+
],
109+
},
110+
},
111+
});
112+
});
113+
114+
it('Should order the items ASC', () => {
115+
myTypeahead.node.val('').trigger('input');
116+
117+
expect(myTypeahead.result).toEqual([
118+
{ group: 'myGroup', id: '3', matchedKey: 'name', name: 'ABC' },
119+
{ group: 'myGroup', id: '1', matchedKey: 'name', name: 'DEF' },
120+
{ group: 'myGroup', id: '2', matchedKey: 'name', name: 'HIJ' },
121+
]);
122+
});
123+
});
124+
});

0 commit comments

Comments
 (0)