Skip to content

Commit 9a694f5

Browse files
author
Stuart McGrigor
committed
orderByExpression is back
1 parent 3304b5d commit 9a694f5

4 files changed

+33
-2
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ Attributes of angular treecontrol
135135
- `label` : inhject classes into the div element around the label
136136
- `labelSelected` : inject classes into the div element around the label only when the node is selected
137137
- `order-by` : value for ng-repeat to use for ordering sibling nodes
138+
- `order-by-expression` : an expression giving the value for ng-repeat to use for ordering sibling nodes
138139
- `reverse-order` : whether or not to reverse the ordering of sibling nodes based on the value of `order-by`
139140
- `filter-expression` : value for ng-repeat to use for filtering the sibling nodes
140141
- `filter-comparator` : value for ng-repeat to use for comparing nodes with the filter expression

angular-tree-control.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
menuId: "@",
3939
options: "=?",
4040
orderBy: "@",
41+
orderByExpression: "@?",
4142
reverseOrder: "@",
4243
filterExpression: "=?",
4344
filterComparator: "=?"
@@ -256,7 +257,12 @@
256257
};
257258

258259
//tree template
259-
var orderBy = $scope.orderBy ? ' | orderBy:orderBy:reverseOrder' : '';
260+
var orderBy = '';
261+
if ($scope.orderByExpression) {
262+
orderBy = ' | orderBy:' + $scope.orderByExpression + ':reverseOrder';
263+
} else if ($scope.orderBy) {
264+
orderBy = ' | orderBy:orderBy:reverseOrder';
265+
}
260266
var rcLabel = $scope.onRightClick ? ' tree-right-click="rightClickNodeLabel(node)"' : '';
261267
var ctxMenuId = $scope.menuId ? ' context-menu-id="'+ $scope.menuId+'"' : '';
262268

index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -943,7 +943,7 @@ <h1>Sorting tree nodes <small>(order-by, reverse-order)</small></h1>
943943
</div>
944944
</div>
945945
<div class="col-md-6">
946-
<p>The <code>order-by</code> and <code>reverse-order</code> properties allows
946+
<p>The <code>order-by</code>, <code>order-by-expression</code> and <code>reverse-order</code> properties allows
947947
controlling the sorting of the tree nodes.
948948
The value of those attributes is used with the <code>ng-repeat</code> orderBy filter -
949949
see more details at the <a href="https://code.angularjs.org/1.2.0-rc.3/docs/api/ng.filter:orderBy">Angular JS orderBy</a> docs.</p>

test/angular-tree-control-test.js

+24
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,30 @@ describe('treeControl', function() {
484484
expect(element.find('li:eq(2)').text()).toBe('a');
485485
});
486486

487+
it('should order sub-trees on different orders by expression', function() {
488+
$rootScope.treedata = [
489+
{ subTreeSortOrder:"-label", label: "a", children: [ {label:"a2", children:[]}, {label:"a3", children:[]}, {label:"a1", children:[]} ] },
490+
{ subTreeSortOrder:"label", label: "b", children: [ {label:"b2", children:[]}, {label:"b3", children:[]}, {label:"b1", children:[]} ] }
491+
];
492+
element = $compile('<treecontrol tree-model="treedata" order-by-expression="node.subTreeSortOrder">{{node.label}}</treecontrol>')($rootScope);
493+
$rootScope.$digest();
494+
element.find('li:eq(1) .tree-branch-head').click(); // expand 'b' sub-tree
495+
element.find('li:eq(0) .tree-branch-head').click(); // expand 'a' sub-tree
496+
expect(element.find('li').length).toBe(8);
497+
498+
// 'A' sub-tree is ordered by descending label
499+
expect(element.find('li:eq(0) div.tree-label:eq(0)').text()).toBe('a');
500+
expect(element.find('li:eq(1)').text()).toBe('a3');
501+
expect(element.find('li:eq(2)').text()).toBe('a2');
502+
expect(element.find('li:eq(3)').text()).toBe('a1');
503+
504+
// 'B' sub-tree is ordered by ascending label
505+
expect(element.find('li:eq(4) div.tree-label:eq(0)').text()).toBe('b');
506+
expect(element.find('li:eq(5)').text()).toBe('b1');
507+
expect(element.find('li:eq(6)').text()).toBe('b2');
508+
expect(element.find('li:eq(7)').text()).toBe('b3');
509+
});
510+
487511
it('should be able to accept alternative children variable name', function () {
488512
$rootScope.treedata = createSubTree(2, 2);
489513
$rootScope.treedata.push({kinder: [{}]});

0 commit comments

Comments
 (0)