1 | import * as ng1 from 'angular';
|
2 | import { convertSortToOrderBy, isGroupingFun } from '../util';
|
3 | ngTableDefaultGetGroups.$inject = ['$q', 'ngTableDefaultGetData'];
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | export function ngTableDefaultGetGroups($q, ngTableDefaultGetData) {
|
10 | return getGroups;
|
11 | function getGroups(params) {
|
12 | var group = params.group();
|
13 | var groupFn;
|
14 | var sortDirection = undefined;
|
15 | if (isGroupingFun(group)) {
|
16 | groupFn = group;
|
17 | sortDirection = group.sortDirection;
|
18 | }
|
19 | else {
|
20 |
|
21 | var groupField_1 = Object.keys(group)[0];
|
22 | sortDirection = group[groupField_1];
|
23 | groupFn = function (item) {
|
24 | return getPath(item, groupField_1);
|
25 | };
|
26 | }
|
27 | var settings = params.settings();
|
28 | var originalDataOptions = settings.dataOptions;
|
29 | settings.dataOptions = { applyPaging: false };
|
30 | var getData = settings.getData;
|
31 | var gotData = $q.when(getData(params));
|
32 | return gotData.then(function (data) {
|
33 | var groups = {};
|
34 | ng1.forEach(data, function (item) {
|
35 | var groupName = groupFn(item);
|
36 | groups[groupName] = groups[groupName] || {
|
37 | data: [],
|
38 | $hideRows: !settings.groupOptions.isExpanded,
|
39 | value: groupName
|
40 | };
|
41 | groups[groupName].data.push(item);
|
42 | });
|
43 | var result = [];
|
44 | for (var i in groups) {
|
45 | result.push(groups[i]);
|
46 | }
|
47 | if (sortDirection) {
|
48 | var orderByFn = ngTableDefaultGetData.getOrderByFn();
|
49 | var orderBy = convertSortToOrderBy({
|
50 | value: sortDirection
|
51 | });
|
52 | result = orderByFn(result, orderBy);
|
53 | }
|
54 | return ngTableDefaultGetData.applyPaging(result, params);
|
55 | }).finally(function () {
|
56 |
|
57 | settings.dataOptions = originalDataOptions;
|
58 | });
|
59 | }
|
60 | }
|
61 |
|
62 |
|
63 |
|
64 | function getPath(obj, ks) {
|
65 |
|
66 | var keys;
|
67 | if (typeof ks === "string") {
|
68 | keys = ks.split(".");
|
69 | }
|
70 | else {
|
71 | keys = ks;
|
72 | }
|
73 |
|
74 |
|
75 | if (obj === undefined)
|
76 | return void 0;
|
77 |
|
78 |
|
79 | if (keys.length === 0)
|
80 | return obj;
|
81 |
|
82 |
|
83 | if (obj === null)
|
84 | return void 0;
|
85 | return getPath(obj[keys[0]], keys.slice(1));
|
86 | }
|
87 |
|
\ | No newline at end of file |