UNPKG

3.04 kBJavaScriptView Raw
1import * as ng1 from 'angular';
2import { convertSortToOrderBy, isGroupingFun } from '../util';
3ngTableDefaultGetGroups.$inject = ['$q', 'ngTableDefaultGetData'];
4/**
5 * Implementation of the {@link IDefaultGetData IDefaultGetData} interface
6 *
7 * @ngdoc service
8 */
9export 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 // currently support for only one group implemented
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 // restore the real options
57 settings.dataOptions = originalDataOptions;
58 });
59 }
60}
61/**
62 * @private
63 */
64function getPath(obj, ks) {
65 // origianl source https://github.com/documentcloud/underscore-contrib
66 var keys;
67 if (typeof ks === "string") {
68 keys = ks.split(".");
69 }
70 else {
71 keys = ks;
72 }
73 // If we have reached an undefined property
74 // then stop executing and return undefined
75 if (obj === undefined)
76 return void 0;
77 // If the path array has no more elements, we've reached
78 // the intended property and return its value
79 if (keys.length === 0)
80 return obj;
81 // If we still have elements in the path array and the current
82 // value is null, stop executing and return undefined
83 if (obj === null)
84 return void 0;
85 return getPath(obj[keys[0]], keys.slice(1));
86}
87//# sourceMappingURL=ngTableDefaultGetGroups.js.map
\No newline at end of file