Skip to content

Commit bbf56ce

Browse files
committed
add orderObjectBy filter
1 parent 69bada0 commit bbf56ce

File tree

7 files changed

+168
-3
lines changed

7 files changed

+168
-3
lines changed

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"main": [
44
"dist/dtrw.filters.js"
55
],
6-
"version": "1.0.4",
6+
"version": "1.0.5",
77
"description": "Provides common angular filters used in DevTRW projects",
88
"authors": [
99
"Steven Nance <steven@devtrw.com>"

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "angular-devtrw-filters",
3-
"version": "1.0.4",
3+
"version": "1.0.5",
44
"author": "Steven Nance <steven@devtrw.com>",
55
"homepage": "https://github.com/devtrw/patient-forms",
66
"repository": {
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
function orderObjectByFilter() {
2+
return (items, field, reverse) => {
3+
var filtered = [];
4+
angular.forEach(items, function (item) {
5+
filtered.push(item);
6+
});
7+
function index(obj, i) {
8+
return obj[i];
9+
}
10+
11+
filtered.sort(function (a, b) {
12+
var comparator;
13+
var reducedA = field.split('.').reduce(index, a);
14+
var reducedB = field.split('.').reduce(index, b);
15+
if (reducedA === reducedB) {
16+
comparator = 0;
17+
} else {
18+
comparator = (reducedA > reducedB ? 1 : -1);
19+
}
20+
return comparator;
21+
});
22+
if (reverse) {
23+
filtered.reverse();
24+
}
25+
return filtered;
26+
};
27+
}
28+
29+
export default orderObjectByFilter;
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
import ngModule from './order-object-by';
2+
3+
describe(ngModule.name, function () { // jshint ignore:line
4+
5+
// load the filter's module
6+
beforeEach(window.module(ngModule.name));
7+
8+
// initialize a new instance of the filter before each test
9+
var orderObjectBy;
10+
var obj = {
11+
person_1: {
12+
name: 'Amelia',
13+
age: 30,
14+
pet: 'cat',
15+
grades: {
16+
math: 90,
17+
physics: 80,
18+
computerScience: 50
19+
}
20+
},
21+
person_2: {
22+
name: 'Bernardette',
23+
age: 20,
24+
pet: 'cat',
25+
grades: {
26+
math: 80,
27+
physics: 90,
28+
computerScience: 100
29+
}
30+
},
31+
person_3: {
32+
name: 'Carol',
33+
age: 40,
34+
pet: 'hedgehog',
35+
grades: {
36+
math: 100,
37+
physics: 50,
38+
computerScience: 100
39+
}
40+
}
41+
};
42+
beforeEach(inject(function ($filter) {
43+
orderObjectBy = $filter('orderObjectBy');
44+
}));
45+
46+
it('should sort by the name field', function () {
47+
assert.deepEqual(
48+
orderObjectBy(obj, 'name'),
49+
[obj.person_1, obj.person_2, obj.person_3]
50+
);
51+
});
52+
53+
it('should sort by name field reverted', function () {
54+
assert.deepEqual(
55+
orderObjectBy(obj, 'name', true),
56+
[obj.person_3, obj.person_2, obj.person_1]
57+
);
58+
});
59+
60+
it('should sort by age field', function () {
61+
assert.deepEqual(
62+
orderObjectBy(obj, 'age'),
63+
[obj.person_2, obj.person_1, obj.person_3]
64+
);
65+
});
66+
67+
it('should sort by age field reverted', function () {
68+
assert.deepEqual(
69+
orderObjectBy(obj, 'age', true),
70+
[obj.person_3, obj.person_1, obj.person_2]
71+
);
72+
});
73+
74+
it('should sort by pet field', function () {
75+
assert.deepEqual(
76+
orderObjectBy(obj, 'pet'),
77+
[obj.person_1, obj.person_2, obj.person_3]
78+
);
79+
});
80+
81+
it('should sort by grades.math', function () {
82+
assert.deepEqual(
83+
orderObjectBy(obj, 'grades.math'),
84+
[obj.person_2, obj.person_1, obj.person_3]
85+
);
86+
});
87+
88+
it('should sort by grades.math reverted', function () {
89+
assert.deepEqual(
90+
orderObjectBy(obj, 'grades.math', true),
91+
[obj.person_3, obj.person_1, obj.person_2]
92+
);
93+
});
94+
95+
it('should sort by grades.physics', function () {
96+
assert.deepEqual(
97+
orderObjectBy(obj, 'grades.physics'),
98+
[obj.person_3, obj.person_1, obj.person_2]
99+
);
100+
});
101+
102+
it('should sort by grades.physics reverted', function () {
103+
assert.deepEqual(
104+
orderObjectBy(obj, 'grades.physics', true),
105+
[obj.person_2, obj.person_1, obj.person_3]
106+
);
107+
});
108+
109+
it('should sort by grades.computerScience', function () {
110+
assert.deepEqual(
111+
orderObjectBy(obj, 'grades.computerScience'),
112+
[obj.person_1, obj.person_2, obj.person_3]
113+
);
114+
});
115+
116+
it('should sort by grades.computerScience reverted', function () {
117+
assert.deepEqual(
118+
orderObjectBy(obj, 'grades.computerScience', true),
119+
[obj.person_3, obj.person_2, obj.person_1]
120+
);
121+
});
122+
123+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import filter from './order-object-by-filter';
2+
3+
const ngModule = angular.module('dtrw.filters.order-object-by', []);
4+
5+
ngModule.filter('orderObjectBy', filter);
6+
7+
export default ngModule;

src/filters.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import hyphenatedToCamelCase from './components/hyphenated-to-camel-case/hyphenated-to-camel-case';
2+
import orderObjectBy from './components/order-object-by/order-object-by';
23
import ucFirst from './components/uc-first/uc-first';
34

45
const ngModule = angular.module('dtrw.filters', [
56
hyphenatedToCamelCase.name,
7+
orderObjectBy.name,
68
ucFirst.name
79
]);
810

src/filters_test.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import 'angular-mocks/angular-mocks';
22

3-
import './components/uc-first/uc-first-filter_test';
43
import './components/hyphenated-to-camel-case/hyphenated-to-camel-case-filter_test';
4+
import './components/order-object-by/order-object-by-filter_test';
5+
import './components/uc-first/uc-first-filter_test';
56

67
import filters from './filters';
78

@@ -21,4 +22,7 @@ describe(filters.name, () => {
2122
it('should have the hyphenatedToCamelCase filter defined', () => {
2223
assert.isFunction($filter('hyphenatedToCamelCase'));
2324
});
25+
it('should have the orderObjectBy filter', () => {
26+
assert.isFunction($filter('orderObjectBy'));
27+
});
2428
});

0 commit comments

Comments
 (0)