@swimlane/ngx-datatable 16.1.1 → 19.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/assets/icons-reference.html +2 -2
- package/assets/icons.css +39 -19
- package/bundles/swimlane-ngx-datatable.umd.js +1663 -5743
- package/bundles/swimlane-ngx-datatable.umd.js.map +1 -1
- package/bundles/swimlane-ngx-datatable.umd.min.js +1 -1
- package/bundles/swimlane-ngx-datatable.umd.min.js.map +1 -1
- package/esm2015/lib/components/body/body-cell.component.js +5 -235
- package/esm2015/lib/components/body/body-group-header-template.directive.js +1 -13
- package/esm2015/lib/components/body/body-group-header.directive.js +1 -28
- package/esm2015/lib/components/body/body-row-wrapper.component.js +4 -86
- package/esm2015/lib/components/body/body-row.component.js +2 -153
- package/esm2015/lib/components/body/body.component.js +71 -303
- package/esm2015/lib/components/body/progress-bar.component.js +2 -6
- package/esm2015/lib/components/body/scroller.component.js +6 -82
- package/esm2015/lib/components/body/selection.component.js +7 -112
- package/esm2015/lib/components/body/summary/summary-row.component.js +10 -100
- package/esm2015/lib/components/columns/column-cell.directive.js +1 -13
- package/esm2015/lib/components/columns/column-header.directive.js +1 -13
- package/esm2015/lib/components/columns/column.directive.js +1 -89
- package/esm2015/lib/components/columns/tree.directive.js +1 -13
- package/esm2015/lib/components/datatable.component.js +49 -570
- package/esm2015/lib/components/footer/footer-template.directive.js +1 -13
- package/esm2015/lib/components/footer/footer.component.js +2 -41
- package/esm2015/lib/components/footer/footer.directive.js +2 -29
- package/esm2015/lib/components/footer/pager.component.js +3 -77
- package/esm2015/lib/components/header/header-cell.component.js +11 -130
- package/esm2015/lib/components/header/header.component.js +20 -193
- package/esm2015/lib/components/row-detail/row-detail-template.directive.js +1 -13
- package/esm2015/lib/components/row-detail/row-detail.directive.js +1 -29
- package/esm2015/lib/directives/draggable.directive.js +4 -72
- package/esm2015/lib/directives/long-press.directive.js +8 -88
- package/esm2015/lib/directives/orderable.directive.js +11 -104
- package/esm2015/lib/directives/resizeable.directive.js +14 -81
- package/esm2015/lib/directives/visibility.directive.js +9 -64
- package/esm2015/lib/events.js +6 -13
- package/esm2015/lib/ngx-datatable.module.js +2 -16
- package/esm2015/lib/services/column-changes.service.js +1 -18
- package/esm2015/lib/services/dimensions-helper.service.js +1 -9
- package/esm2015/lib/services/scrollbar-helper.service.js +1 -25
- package/esm2015/lib/types/click.type.js +6 -11
- package/esm2015/lib/types/column-mode.type.js +7 -12
- package/esm2015/lib/types/contextmenu.type.js +6 -11
- package/esm2015/lib/types/selection.type.js +9 -14
- package/esm2015/lib/types/sort-direction.type.js +6 -11
- package/esm2015/lib/types/sort-prop-dir.type.js +2 -15
- package/esm2015/lib/types/sort.type.js +6 -11
- package/esm2015/lib/types/table-column.type.js +2 -217
- package/esm2015/lib/utils/camel-case.js +4 -26
- package/esm2015/lib/utils/column-helper.js +1 -18
- package/esm2015/lib/utils/column-prop-getters.js +6 -21
- package/esm2015/lib/utils/column.js +1 -28
- package/esm2015/lib/utils/elm-from-point.js +3 -15
- package/esm2015/lib/utils/id.js +1 -6
- package/esm2015/lib/utils/keys.js +10 -21
- package/esm2015/lib/utils/math.js +4 -51
- package/esm2015/lib/utils/prefixes.js +5 -24
- package/esm2015/lib/utils/row-height-cache.js +6 -46
- package/esm2015/lib/utils/selection.js +1 -25
- package/esm2015/lib/utils/sort.js +9 -50
- package/esm2015/lib/utils/throttle.js +7 -41
- package/esm2015/lib/utils/translate.js +1 -17
- package/esm2015/lib/utils/tree.js +7 -56
- package/esm2015/public-api.js +56 -60
- package/esm2015/swimlane-ngx-datatable.js +2 -6
- package/fesm2015/swimlane-ngx-datatable.js +308 -3513
- package/fesm2015/swimlane-ngx-datatable.js.map +1 -1
- package/index.css +1 -1
- package/index.scss +1 -1
- package/lib/components/body/body-cell.component.d.ts +23 -14
- package/lib/components/body/body-group-header.directive.d.ts +1 -1
- package/lib/components/body/body-row-wrapper.component.d.ts +4 -2
- package/lib/components/body/body-row.component.d.ts +8 -5
- package/lib/components/body/body.component.d.ts +17 -10
- package/lib/components/columns/column.directive.d.ts +3 -3
- package/lib/components/datatable.component.d.ts +45 -38
- package/lib/components/footer/footer.component.d.ts +2 -2
- package/lib/components/footer/footer.directive.d.ts +1 -1
- package/lib/components/footer/pager.component.d.ts +7 -4
- package/lib/components/header/header-cell.component.d.ts +14 -9
- package/lib/components/header/header.component.d.ts +14 -7
- package/lib/components/row-detail/row-detail.directive.d.ts +1 -1
- package/lib/directives/long-press.directive.d.ts +2 -2
- package/lib/directives/resizeable.directive.d.ts +1 -0
- package/lib/ngx-datatable.module.d.ts +1 -1
- package/lib/services/column-changes.service.d.ts +1 -1
- package/lib/utils/throttle.d.ts +1 -1
- package/package.json +10 -13
- package/swimlane-ngx-datatable.metadata.json +1 -1
- package/themes/material.css +53 -51
- package/themes/material.scss +4 -2
- package/esm5/lib/components/body/body-cell.component.js +0 -667
- package/esm5/lib/components/body/body-group-header-template.directive.js +0 -26
- package/esm5/lib/components/body/body-group-header.directive.js +0 -109
- package/esm5/lib/components/body/body-row-wrapper.component.js +0 -181
- package/esm5/lib/components/body/body-row.component.js +0 -409
- package/esm5/lib/components/body/body.component.js +0 -1148
- package/esm5/lib/components/body/progress-bar.component.js +0 -19
- package/esm5/lib/components/body/scroller.component.js +0 -172
- package/esm5/lib/components/body/selection.component.js +0 -289
- package/esm5/lib/components/body/summary/summary-row.component.js +0 -179
- package/esm5/lib/components/columns/column-cell.directive.js +0 -24
- package/esm5/lib/components/columns/column-header.directive.js +0 -24
- package/esm5/lib/components/columns/column.directive.js +0 -167
- package/esm5/lib/components/columns/tree.directive.js +0 -24
- package/esm5/lib/components/datatable.component.js +0 -1848
- package/esm5/lib/components/footer/footer-template.directive.js +0 -24
- package/esm5/lib/components/footer/footer.component.js +0 -88
- package/esm5/lib/components/footer/footer.directive.js +0 -57
- package/esm5/lib/components/footer/pager.component.js +0 -214
- package/esm5/lib/components/header/header-cell.component.js +0 -351
- package/esm5/lib/components/header/header.component.js +0 -502
- package/esm5/lib/components/row-detail/row-detail-template.directive.js +0 -26
- package/esm5/lib/components/row-detail/row-detail.directive.js +0 -111
- package/esm5/lib/directives/draggable.directive.js +0 -194
- package/esm5/lib/directives/long-press.directive.js +0 -220
- package/esm5/lib/directives/orderable.directive.js +0 -274
- package/esm5/lib/directives/resizeable.directive.js +0 -178
- package/esm5/lib/directives/visibility.directive.js +0 -129
- package/esm5/lib/events.js +0 -14
- package/esm5/lib/ngx-datatable.module.js +0 -123
- package/esm5/lib/services/column-changes.service.js +0 -47
- package/esm5/lib/services/dimensions-helper.service.js +0 -30
- package/esm5/lib/services/scrollbar-helper.service.js +0 -60
- package/esm5/lib/types/click.type.js +0 -11
- package/esm5/lib/types/column-mode.type.js +0 -12
- package/esm5/lib/types/contextmenu.type.js +0 -11
- package/esm5/lib/types/selection.type.js +0 -14
- package/esm5/lib/types/sort-direction.type.js +0 -11
- package/esm5/lib/types/sort-prop-dir.type.js +0 -15
- package/esm5/lib/types/sort.type.js +0 -11
- package/esm5/lib/types/table-column.type.js +0 -217
- package/esm5/lib/utils/camel-case.js +0 -50
- package/esm5/lib/utils/column-helper.js +0 -145
- package/esm5/lib/utils/column-prop-getters.js +0 -111
- package/esm5/lib/utils/column.js +0 -130
- package/esm5/lib/utils/elm-from-point.js +0 -50
- package/esm5/lib/utils/id.js +0 -13
- package/esm5/lib/utils/keys.js +0 -21
- package/esm5/lib/utils/math.js +0 -271
- package/esm5/lib/utils/prefixes.js +0 -59
- package/esm5/lib/utils/row-height-cache.js +0 -264
- package/esm5/lib/utils/selection.js +0 -64
- package/esm5/lib/utils/sort.js +0 -180
- package/esm5/lib/utils/throttle.js +0 -94
- package/esm5/lib/utils/translate.js +0 -41
- package/esm5/lib/utils/tree.js +0 -157
- package/esm5/public-api.js +0 -68
- package/esm5/swimlane-ngx-datatable.js +0 -9
- package/fesm5/swimlane-ngx-datatable.js +0 -9695
- package/fesm5/swimlane-ngx-datatable.js.map +0 -1
- package/lib/test/jasmine-matchers.d.ts +0 -12
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* @param {?} selected
|
|
7
|
-
* @param {?} row
|
|
8
|
-
* @param {?} comparefn
|
|
9
|
-
* @return {?}
|
|
10
|
-
*/
|
|
11
|
-
export function selectRows(selected, row, comparefn) {
|
|
12
|
-
/** @type {?} */
|
|
13
|
-
var selectedIndex = comparefn(row, selected);
|
|
14
|
-
if (selectedIndex > -1) {
|
|
15
|
-
selected.splice(selectedIndex, 1);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
selected.push(row);
|
|
19
|
-
}
|
|
20
|
-
return selected;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* @param {?} selected
|
|
24
|
-
* @param {?} rows
|
|
25
|
-
* @param {?} index
|
|
26
|
-
* @param {?} prevIndex
|
|
27
|
-
* @param {?} comparefn
|
|
28
|
-
* @return {?}
|
|
29
|
-
*/
|
|
30
|
-
export function selectRowsBetween(selected, rows, index, prevIndex, comparefn) {
|
|
31
|
-
/** @type {?} */
|
|
32
|
-
var reverse = index < prevIndex;
|
|
33
|
-
for (var i = 0; i < rows.length; i++) {
|
|
34
|
-
/** @type {?} */
|
|
35
|
-
var row = rows[i];
|
|
36
|
-
/** @type {?} */
|
|
37
|
-
var greater = i >= prevIndex && i <= index;
|
|
38
|
-
/** @type {?} */
|
|
39
|
-
var lesser = i <= prevIndex && i >= index;
|
|
40
|
-
/** @type {?} */
|
|
41
|
-
var range = { start: 0, end: 0 };
|
|
42
|
-
if (reverse) {
|
|
43
|
-
range = {
|
|
44
|
-
start: index,
|
|
45
|
-
end: prevIndex
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
range = {
|
|
50
|
-
start: prevIndex,
|
|
51
|
-
end: index + 1
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
if ((reverse && lesser) || (!reverse && greater)) {
|
|
55
|
-
// if in the positive range to be added to `selected`, and
|
|
56
|
-
// not already in the selected array, add it
|
|
57
|
-
if (i >= range.start && i <= range.end) {
|
|
58
|
-
selected.push(row);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return selected;
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN3aW1sYW5lL25neC1kYXRhdGFibGUvIiwic291cmNlcyI6WyJsaWIvdXRpbHMvc2VsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxNQUFNLFVBQVUsVUFBVSxDQUFDLFFBQWUsRUFBRSxHQUFRLEVBQUUsU0FBYzs7UUFDNUQsYUFBYSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO0lBRTlDLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ3RCLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ25DO1NBQU07UUFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQzs7Ozs7Ozs7O0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixRQUFlLEVBQ2YsSUFBVyxFQUNYLEtBQWEsRUFDYixTQUFpQixFQUNqQixTQUFjOztRQUVSLE9BQU8sR0FBRyxLQUFLLEdBQUcsU0FBUztJQUVqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs7WUFDOUIsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7O1lBQ2IsT0FBTyxHQUFHLENBQUMsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLEtBQUs7O1lBQ3RDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxLQUFLOztZQUV2QyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7UUFDaEMsSUFBSSxPQUFPLEVBQUU7WUFDWCxLQUFLLEdBQUc7Z0JBQ04sS0FBSyxFQUFFLEtBQUs7Z0JBQ1osR0FBRyxFQUFFLFNBQVM7YUFDZixDQUFDO1NBQ0g7YUFBTTtZQUNMLEtBQUssR0FBRztnQkFDTixLQUFLLEVBQUUsU0FBUztnQkFDaEIsR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDO2FBQ2YsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxFQUFFO1lBQ2hELDBEQUEwRDtZQUMxRCw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwQjtTQUNGO0tBQ0Y7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdFJvd3Moc2VsZWN0ZWQ6IGFueVtdLCByb3c6IGFueSwgY29tcGFyZWZuOiBhbnkpIHtcbiAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IGNvbXBhcmVmbihyb3csIHNlbGVjdGVkKTtcblxuICBpZiAoc2VsZWN0ZWRJbmRleCA+IC0xKSB7XG4gICAgc2VsZWN0ZWQuc3BsaWNlKHNlbGVjdGVkSW5kZXgsIDEpO1xuICB9IGVsc2Uge1xuICAgIHNlbGVjdGVkLnB1c2gocm93KTtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdFJvd3NCZXR3ZWVuKFxuICBzZWxlY3RlZDogYW55W10sXG4gIHJvd3M6IGFueVtdLFxuICBpbmRleDogbnVtYmVyLFxuICBwcmV2SW5kZXg6IG51bWJlcixcbiAgY29tcGFyZWZuOiBhbnlcbik6IGFueVtdIHtcbiAgY29uc3QgcmV2ZXJzZSA9IGluZGV4IDwgcHJldkluZGV4O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJvdyA9IHJvd3NbaV07XG4gICAgY29uc3QgZ3JlYXRlciA9IGkgPj0gcHJldkluZGV4ICYmIGkgPD0gaW5kZXg7XG4gICAgY29uc3QgbGVzc2VyID0gaSA8PSBwcmV2SW5kZXggJiYgaSA+PSBpbmRleDtcblxuICAgIGxldCByYW5nZSA9IHsgc3RhcnQ6IDAsIGVuZDogMCB9O1xuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICByYW5nZSA9IHtcbiAgICAgICAgc3RhcnQ6IGluZGV4LFxuICAgICAgICBlbmQ6IHByZXZJbmRleFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UgPSB7XG4gICAgICAgIHN0YXJ0OiBwcmV2SW5kZXgsXG4gICAgICAgIGVuZDogaW5kZXggKyAxXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgocmV2ZXJzZSAmJiBsZXNzZXIpIHx8ICghcmV2ZXJzZSAmJiBncmVhdGVyKSkge1xuICAgICAgLy8gaWYgaW4gdGhlIHBvc2l0aXZlIHJhbmdlIHRvIGJlIGFkZGVkIHRvIGBzZWxlY3RlZGAsIGFuZFxuICAgICAgLy8gbm90IGFscmVhZHkgaW4gdGhlIHNlbGVjdGVkIGFycmF5LCBhZGQgaXRcbiAgICAgIGlmIChpID49IHJhbmdlLnN0YXJ0ICYmIGkgPD0gcmFuZ2UuZW5kKSB7XG4gICAgICAgIHNlbGVjdGVkLnB1c2gocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2VsZWN0ZWQ7XG59XG4iXX0=
|
package/esm5/lib/utils/sort.js
DELETED
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
import * as tslib_1 from "tslib";
|
|
6
|
-
import { getterForProp } from './column-prop-getters';
|
|
7
|
-
import { SortType } from '../types/sort.type';
|
|
8
|
-
import { SortDirection } from '../types/sort-direction.type';
|
|
9
|
-
/**
|
|
10
|
-
* Gets the next sort direction
|
|
11
|
-
* @param {?} sortType
|
|
12
|
-
* @param {?} current
|
|
13
|
-
* @return {?}
|
|
14
|
-
*/
|
|
15
|
-
export function nextSortDir(sortType, current) {
|
|
16
|
-
if (sortType === SortType.single) {
|
|
17
|
-
if (current === SortDirection.asc) {
|
|
18
|
-
return SortDirection.desc;
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
return SortDirection.asc;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
if (!current) {
|
|
26
|
-
return SortDirection.asc;
|
|
27
|
-
}
|
|
28
|
-
else if (current === SortDirection.asc) {
|
|
29
|
-
return SortDirection.desc;
|
|
30
|
-
}
|
|
31
|
-
else if (current === SortDirection.desc) {
|
|
32
|
-
return undefined;
|
|
33
|
-
}
|
|
34
|
-
// avoid TS7030: Not all code paths return a value.
|
|
35
|
-
return undefined;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Adapted from fueld-ui on 6/216
|
|
40
|
-
* https://github.com/FuelInteractive/fuel-ui/tree/master/src/pipes/OrderBy
|
|
41
|
-
* @param {?} a
|
|
42
|
-
* @param {?} b
|
|
43
|
-
* @return {?}
|
|
44
|
-
*/
|
|
45
|
-
export function orderByComparator(a, b) {
|
|
46
|
-
if (a === null || typeof a === 'undefined')
|
|
47
|
-
a = 0;
|
|
48
|
-
if (b === null || typeof b === 'undefined')
|
|
49
|
-
b = 0;
|
|
50
|
-
if (a instanceof Date && b instanceof Date) {
|
|
51
|
-
if (a < b)
|
|
52
|
-
return -1;
|
|
53
|
-
if (a > b)
|
|
54
|
-
return 1;
|
|
55
|
-
}
|
|
56
|
-
else if (isNaN(parseFloat(a)) || !isFinite(a) || (isNaN(parseFloat(b)) || !isFinite(b))) {
|
|
57
|
-
// Convert to string in case of a=0 or b=0
|
|
58
|
-
a = String(a);
|
|
59
|
-
b = String(b);
|
|
60
|
-
// Isn't a number so lowercase the string to properly compare
|
|
61
|
-
if (a.toLowerCase() < b.toLowerCase())
|
|
62
|
-
return -1;
|
|
63
|
-
if (a.toLowerCase() > b.toLowerCase())
|
|
64
|
-
return 1;
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
// Parse strings as numbers to compare properly
|
|
68
|
-
if (parseFloat(a) < parseFloat(b))
|
|
69
|
-
return -1;
|
|
70
|
-
if (parseFloat(a) > parseFloat(b))
|
|
71
|
-
return 1;
|
|
72
|
-
}
|
|
73
|
-
// equal each other
|
|
74
|
-
return 0;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* creates a shallow copy of the `rows` input and returns the sorted copy. this function
|
|
78
|
-
* does not sort the `rows` argument in place
|
|
79
|
-
* @param {?} rows
|
|
80
|
-
* @param {?} columns
|
|
81
|
-
* @param {?} dirs
|
|
82
|
-
* @return {?}
|
|
83
|
-
*/
|
|
84
|
-
export function sortRows(rows, columns, dirs) {
|
|
85
|
-
if (!rows)
|
|
86
|
-
return [];
|
|
87
|
-
if (!dirs || !dirs.length || !columns)
|
|
88
|
-
return tslib_1.__spread(rows);
|
|
89
|
-
/**
|
|
90
|
-
* record the row ordering of results from prior sort operations (if applicable)
|
|
91
|
-
* this is necessary to guarantee stable sorting behavior
|
|
92
|
-
* @type {?}
|
|
93
|
-
*/
|
|
94
|
-
var rowToIndexMap = new Map();
|
|
95
|
-
rows.forEach((/**
|
|
96
|
-
* @param {?} row
|
|
97
|
-
* @param {?} index
|
|
98
|
-
* @return {?}
|
|
99
|
-
*/
|
|
100
|
-
function (row, index) { return rowToIndexMap.set(row, index); }));
|
|
101
|
-
/** @type {?} */
|
|
102
|
-
var temp = tslib_1.__spread(rows);
|
|
103
|
-
/** @type {?} */
|
|
104
|
-
var cols = columns.reduce((/**
|
|
105
|
-
* @param {?} obj
|
|
106
|
-
* @param {?} col
|
|
107
|
-
* @return {?}
|
|
108
|
-
*/
|
|
109
|
-
function (obj, col) {
|
|
110
|
-
if (col.comparator && typeof col.comparator === 'function') {
|
|
111
|
-
obj[col.prop] = col.comparator;
|
|
112
|
-
}
|
|
113
|
-
return obj;
|
|
114
|
-
}), {});
|
|
115
|
-
// cache valueGetter and compareFn so that they
|
|
116
|
-
// do not need to be looked-up in the sort function body
|
|
117
|
-
/** @type {?} */
|
|
118
|
-
var cachedDirs = dirs.map((/**
|
|
119
|
-
* @param {?} dir
|
|
120
|
-
* @return {?}
|
|
121
|
-
*/
|
|
122
|
-
function (dir) {
|
|
123
|
-
/** @type {?} */
|
|
124
|
-
var prop = dir.prop;
|
|
125
|
-
return {
|
|
126
|
-
prop: prop,
|
|
127
|
-
dir: dir.dir,
|
|
128
|
-
valueGetter: getterForProp(prop),
|
|
129
|
-
compareFn: cols[prop] || orderByComparator
|
|
130
|
-
};
|
|
131
|
-
}));
|
|
132
|
-
return temp.sort((/**
|
|
133
|
-
* @param {?} rowA
|
|
134
|
-
* @param {?} rowB
|
|
135
|
-
* @return {?}
|
|
136
|
-
*/
|
|
137
|
-
function (rowA, rowB) {
|
|
138
|
-
var e_1, _a;
|
|
139
|
-
try {
|
|
140
|
-
for (var cachedDirs_1 = tslib_1.__values(cachedDirs), cachedDirs_1_1 = cachedDirs_1.next(); !cachedDirs_1_1.done; cachedDirs_1_1 = cachedDirs_1.next()) {
|
|
141
|
-
var cachedDir = cachedDirs_1_1.value;
|
|
142
|
-
// Get property and valuegetters for column to be sorted
|
|
143
|
-
var prop = cachedDir.prop, valueGetter = cachedDir.valueGetter;
|
|
144
|
-
// Get A and B cell values from rows based on properties of the columns
|
|
145
|
-
/** @type {?} */
|
|
146
|
-
var propA = valueGetter(rowA, prop);
|
|
147
|
-
/** @type {?} */
|
|
148
|
-
var propB = valueGetter(rowB, prop);
|
|
149
|
-
// Compare function gets five parameters:
|
|
150
|
-
// Two cell values to be compared as propA and propB
|
|
151
|
-
// Two rows corresponding to the cells as rowA and rowB
|
|
152
|
-
// Direction of the sort for this column as SortDirection
|
|
153
|
-
// Compare can be a standard JS comparison function (a,b) => -1|0|1
|
|
154
|
-
// as additional parameters are silently ignored. The whole row and sort
|
|
155
|
-
// direction enable more complex sort logic.
|
|
156
|
-
/** @type {?} */
|
|
157
|
-
var comparison = cachedDir.dir !== SortDirection.desc
|
|
158
|
-
? cachedDir.compareFn(propA, propB, rowA, rowB, cachedDir.dir)
|
|
159
|
-
: -cachedDir.compareFn(propA, propB, rowA, rowB, cachedDir.dir);
|
|
160
|
-
// Don't return 0 yet in case of needing to sort by next property
|
|
161
|
-
if (comparison !== 0)
|
|
162
|
-
return comparison;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
166
|
-
finally {
|
|
167
|
-
try {
|
|
168
|
-
if (cachedDirs_1_1 && !cachedDirs_1_1.done && (_a = cachedDirs_1.return)) _a.call(cachedDirs_1);
|
|
169
|
-
}
|
|
170
|
-
finally { if (e_1) throw e_1.error; }
|
|
171
|
-
}
|
|
172
|
-
if (!(rowToIndexMap.has(rowA) && rowToIndexMap.has(rowB)))
|
|
173
|
-
return 0;
|
|
174
|
-
/**
|
|
175
|
-
* all else being equal, preserve original order of the rows (stable sort)
|
|
176
|
-
*/
|
|
177
|
-
return rowToIndexMap.get(rowA) < rowToIndexMap.get(rowB) ? -1 : 1;
|
|
178
|
-
}));
|
|
179
|
-
}
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bzd2ltbGFuZS9uZ3gtZGF0YXRhYmxlLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL3NvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7OztBQUs3RCxNQUFNLFVBQVUsV0FBVyxDQUFDLFFBQWtCLEVBQUUsT0FBc0I7SUFDcEUsSUFBSSxRQUFRLEtBQUssUUFBUSxDQUFDLE1BQU0sRUFBRTtRQUNoQyxJQUFJLE9BQU8sS0FBSyxhQUFhLENBQUMsR0FBRyxFQUFFO1lBQ2pDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztTQUMzQjthQUFNO1lBQ0wsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDO1NBQzFCO0tBQ0Y7U0FBTTtRQUNMLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUM7U0FDMUI7YUFBTSxJQUFJLE9BQU8sS0FBSyxhQUFhLENBQUMsR0FBRyxFQUFFO1lBQ3hDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztTQUMzQjthQUFNLElBQUksT0FBTyxLQUFLLGFBQWEsQ0FBQyxJQUFJLEVBQUU7WUFDekMsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxtREFBbUQ7UUFDbkQsT0FBTyxTQUFTLENBQUM7S0FDbEI7QUFDSCxDQUFDOzs7Ozs7OztBQU1ELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxDQUFNLEVBQUUsQ0FBTTtJQUM5QyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssV0FBVztRQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FB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QUFFO2dCQUEvQixJQUFNLFNBQVMsdUJBQUE7O2dCQUVWLElBQUEscUJBQUksRUFBRSxtQ0FBVzs7O29CQUVuQixLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7O29CQUMvQixLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7Ozs7Ozs7OztvQkFTL0IsVUFBVSxHQUNkLFNBQVMsQ0FBQyxHQUFHLEtBQUssYUFBYSxDQUFDLElBQUk7b0JBQ2xDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO29CQUM5RCxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO2dCQUVuRSxpRUFBaUU7Z0JBQ2pFLElBQUksVUFBVSxLQUFLLENBQUM7b0JBQUUsT0FBTyxVQUFVLENBQUM7YUFDekM7Ozs7Ozs7OztRQUVELElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXBFOztXQUVHO1FBQ0gsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQyxFQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0dGVyRm9yUHJvcCB9IGZyb20gJy4vY29sdW1uLXByb3AtZ2V0dGVycyc7XG5pbXBvcnQgeyBTb3J0VHlwZSB9IGZyb20gJy4uL3R5cGVzL3NvcnQudHlwZSc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMvc29ydC1kaXJlY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBTb3J0UHJvcERpciB9IGZyb20gJy4uL3R5cGVzL3NvcnQtcHJvcC1kaXIudHlwZSc7XG4vKipcbiAqIEdldHMgdGhlIG5leHQgc29ydCBkaXJlY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRTb3J0RGlyKHNvcnRUeXBlOiBTb3J0VHlwZSwgY3VycmVudDogU29ydERpcmVjdGlvbik6IFNvcnREaXJlY3Rpb24gfCB1bmRlZmluZWQge1xuICBpZiAoc29ydFR5cGUgPT09IFNvcnRUeXBlLnNpbmdsZSkge1xuICAgIGlmIChjdXJyZW50ID09PSBTb3J0RGlyZWN0aW9uLmFzYykge1xuICAgICAgcmV0dXJuIFNvcnREaXJlY3Rpb24uZGVzYztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFNvcnREaXJlY3Rpb24uYXNjO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgIHJldHVybiBTb3J0RGlyZWN0aW9uLmFzYztcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT09IFNvcnREaXJlY3Rpb24uYXNjKSB7XG4gICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5kZXNjO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PT0gU29ydERpcmVjdGlvbi5kZXNjKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBhdm9pZCBUUzcwMzA6IE5vdCBhbGwgY29kZSBwYXRocyByZXR1cm4gYSB2YWx1ZS5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQWRhcHRlZCBmcm9tIGZ1ZWxkLXVpIG9uIDYvMjE2XG4gKiBodHRwczovL2dpdGh1Yi5jb20vRnVlbEludGVyYWN0aXZlL2Z1ZWwtdWkvdHJlZS9tYXN0ZXIvc3JjL3BpcGVzL09yZGVyQnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9yZGVyQnlDb21wYXJhdG9yKGE6IGFueSwgYjogYW55KTogbnVtYmVyIHtcbiAgaWYgKGEgPT09IG51bGwgfHwgdHlwZW9mIGEgPT09ICd1bmRlZmluZWQnKSBhID0gMDtcbiAgaWYgKGIgPT09IG51bGwgfHwgdHlwZW9mIGIgPT09ICd1bmRlZmluZWQnKSBiID0gMDtcbiAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgfSBlbHNlIGlmIChpc05hTihwYXJzZUZsb2F0KGEpKSB8fCAhaXNGaW5pdGUoYSkgfHwgKGlzTmFOKHBhcnNlRmxvYXQoYikpIHx8ICFpc0Zpbml0ZShiKSkpIHtcbiAgICAvLyBDb252ZXJ0IHRvIHN0cmluZyBpbiBjYXNlIG9mIGE9MCBvciBiPTBcbiAgICBhID0gU3RyaW5nKGEpO1xuICAgIGIgPSBTdHJpbmcoYik7XG4gICAgLy8gSXNuJ3QgYSBudW1iZXIgc28gbG93ZXJjYXNlIHRoZSBzdHJpbmcgdG8gcHJvcGVybHkgY29tcGFyZVxuICAgIGlmIChhLnRvTG93ZXJDYXNlKCkgPCBiLnRvTG93ZXJDYXNlKCkpIHJldHVybiAtMTtcbiAgICBpZiAoYS50b0xvd2VyQ2FzZSgpID4gYi50b0xvd2VyQ2FzZSgpKSByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQYXJzZSBzdHJpbmdzIGFzIG51bWJlcnMgdG8gY29tcGFyZSBwcm9wZXJseVxuICAgIGlmIChwYXJzZUZsb2F0KGEpIDwgcGFyc2VGbG9hdChiKSkgcmV0dXJuIC0xO1xuICAgIGlmIChwYXJzZUZsb2F0KGEpID4gcGFyc2VGbG9hdChiKSkgcmV0dXJuIDE7XG4gIH1cblxuICAvLyBlcXVhbCBlYWNoIG90aGVyXG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGByb3dzYCBpbnB1dCBhbmQgcmV0dXJucyB0aGUgc29ydGVkIGNvcHkuIHRoaXMgZnVuY3Rpb25cbiAqIGRvZXMgbm90IHNvcnQgdGhlIGByb3dzYCBhcmd1bWVudCBpbiBwbGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFJvd3Mocm93czogYW55W10sIGNvbHVtbnM6IGFueVtdLCBkaXJzOiBTb3J0UHJvcERpcltdKTogYW55W10ge1xuICBpZiAoIXJvd3MpIHJldHVybiBbXTtcbiAgaWYgKCFkaXJzIHx8ICFkaXJzLmxlbmd0aCB8fCAhY29sdW1ucykgcmV0dXJuIFsuLi5yb3dzXTtcblxuICAvKipcbiAgICogcmVjb3JkIHRoZSByb3cgb3JkZXJpbmcgb2YgcmVzdWx0cyBmcm9tIHByaW9yIHNvcnQgb3BlcmF0aW9ucyAoaWYgYXBwbGljYWJsZSlcbiAgICogdGhpcyBpcyBuZWNlc3NhcnkgdG8gZ3VhcmFudGVlIHN0YWJsZSBzb3J0aW5nIGJlaGF2aW9yXG4gICAqL1xuICBjb25zdCByb3dUb0luZGV4TWFwID0gbmV3IE1hcDxhbnksIG51bWJlcj4oKTtcbiAgcm93cy5mb3JFYWNoKChyb3csIGluZGV4KSA9PiByb3dUb0luZGV4TWFwLnNldChyb3csIGluZGV4KSk7XG5cbiAgY29uc3QgdGVtcCA9IFsuLi5yb3dzXTtcbiAgY29uc3QgY29scyA9IGNvbHVtbnMucmVkdWNlKChvYmosIGNvbCkgPT4ge1xuICAgIGlmIChjb2wuY29tcGFyYXRvciAmJiB0eXBlb2YgY29sLmNvbXBhcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9ialtjb2wucHJvcF0gPSBjb2wuY29tcGFyYXRvcjtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSwge30pO1xuXG4gIC8vIGNhY2hlIHZhbHVlR2V0dGVyIGFuZCBjb21wYXJlRm4gc28gdGhhdCB0aGV5XG4gIC8vIGRvIG5vdCBuZWVkIHRvIGJlIGxvb2tlZC11cCBpbiB0aGUgc29ydCBmdW5jdGlvbiBib2R5XG4gIGNvbnN0IGNhY2hlZERpcnMgPSBkaXJzLm1hcChkaXIgPT4ge1xuICAgIGNvbnN0IHByb3AgPSBkaXIucHJvcDtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcCxcbiAgICAgIGRpcjogZGlyLmRpcixcbiAgICAgIHZhbHVlR2V0dGVyOiBnZXR0ZXJGb3JQcm9wKHByb3ApLFxuICAgICAgY29tcGFyZUZuOiBjb2xzW3Byb3BdIHx8IG9yZGVyQnlDb21wYXJhdG9yXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlbXAuc29ydChmdW5jdGlvbihyb3dBOiBhbnksIHJvd0I6IGFueSkge1xuICAgIGZvciAoY29uc3QgY2FjaGVkRGlyIG9mIGNhY2hlZERpcnMpIHtcbiAgICAgIC8vIEdldCBwcm9wZXJ0eSBhbmQgdmFsdWVnZXR0ZXJzIGZvciBjb2x1bW4gdG8gYmUgc29ydGVkXG4gICAgICBjb25zdCB7IHByb3AsIHZhbHVlR2V0dGVyIH0gPSBjYWNoZWREaXI7XG4gICAgICAvLyBHZXQgQSBhbmQgQiBjZWxsIHZhbHVlcyBmcm9tIHJvd3MgYmFzZWQgb24gcHJvcGVydGllcyBvZiB0aGUgY29sdW1uc1xuICAgICAgY29uc3QgcHJvcEEgPSB2YWx1ZUdldHRlcihyb3dBLCBwcm9wKTtcbiAgICAgIGNvbnN0IHByb3BCID0gdmFsdWVHZXR0ZXIocm93QiwgcHJvcCk7XG5cbiAgICAgIC8vIENvbXBhcmUgZnVuY3Rpb24gZ2V0cyBmaXZlIHBhcmFtZXRlcnM6XG4gICAgICAvLyBUd28gY2VsbCB2YWx1ZXMgdG8gYmUgY29tcGFyZWQgYXMgcHJvcEEgYW5kIHByb3BCXG4gICAgICAvLyBUd28gcm93cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjZWxscyBhcyByb3dBIGFuZCByb3dCXG4gICAgICAvLyBEaXJlY3Rpb24gb2YgdGhlIHNvcnQgZm9yIHRoaXMgY29sdW1uIGFzIFNvcnREaXJlY3Rpb25cbiAgICAgIC8vIENvbXBhcmUgY2FuIGJlIGEgc3RhbmRhcmQgSlMgY29tcGFyaXNvbiBmdW5jdGlvbiAoYSxiKSA9PiAtMXwwfDFcbiAgICAgIC8vIGFzIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgc2lsZW50bHkgaWdub3JlZC4gVGhlIHdob2xlIHJvdyBhbmQgc29ydFxuICAgICAgLy8gZGlyZWN0aW9uIGVuYWJsZSBtb3JlIGNvbXBsZXggc29ydCBsb2dpYy5cbiAgICAgIGNvbnN0IGNvbXBhcmlzb24gPVxuICAgICAgICBjYWNoZWREaXIuZGlyICE9PSBTb3J0RGlyZWN0aW9uLmRlc2NcbiAgICAgICAgICA/IGNhY2hlZERpci5jb21wYXJlRm4ocHJvcEEsIHByb3BCLCByb3dBLCByb3dCLCBjYWNoZWREaXIuZGlyKVxuICAgICAgICAgIDogLWNhY2hlZERpci5jb21wYXJlRm4ocHJvcEEsIHByb3BCLCByb3dBLCByb3dCLCBjYWNoZWREaXIuZGlyKTtcblxuICAgICAgLy8gRG9uJ3QgcmV0dXJuIDAgeWV0IGluIGNhc2Ugb2YgbmVlZGluZyB0byBzb3J0IGJ5IG5leHQgcHJvcGVydHlcbiAgICAgIGlmIChjb21wYXJpc29uICE9PSAwKSByZXR1cm4gY29tcGFyaXNvbjtcbiAgICB9XG5cbiAgICBpZiAoIShyb3dUb0luZGV4TWFwLmhhcyhyb3dBKSAmJiByb3dUb0luZGV4TWFwLmhhcyhyb3dCKSkpIHJldHVybiAwO1xuXG4gICAgLyoqXG4gICAgICogYWxsIGVsc2UgYmVpbmcgZXF1YWwsIHByZXNlcnZlIG9yaWdpbmFsIG9yZGVyIG9mIHRoZSByb3dzIChzdGFibGUgc29ydClcbiAgICAgKi9cbiAgICByZXR1cm4gcm93VG9JbmRleE1hcC5nZXQocm93QSkgPCByb3dUb0luZGV4TWFwLmdldChyb3dCKSA/IC0xIDogMTtcbiAgfSk7XG59XG4iXX0=
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Throttle a function
|
|
7
|
-
* @param {?} func
|
|
8
|
-
* @param {?} wait
|
|
9
|
-
* @param {?=} options
|
|
10
|
-
* @return {?}
|
|
11
|
-
*/
|
|
12
|
-
export function throttle(func, wait, options) {
|
|
13
|
-
options = options || {};
|
|
14
|
-
/** @type {?} */
|
|
15
|
-
var context;
|
|
16
|
-
/** @type {?} */
|
|
17
|
-
var args;
|
|
18
|
-
/** @type {?} */
|
|
19
|
-
var result;
|
|
20
|
-
/** @type {?} */
|
|
21
|
-
var timeout = null;
|
|
22
|
-
/** @type {?} */
|
|
23
|
-
var previous = 0;
|
|
24
|
-
/**
|
|
25
|
-
* @return {?}
|
|
26
|
-
*/
|
|
27
|
-
function later() {
|
|
28
|
-
previous = options.leading === false ? 0 : +new Date();
|
|
29
|
-
timeout = null;
|
|
30
|
-
result = func.apply(context, args);
|
|
31
|
-
}
|
|
32
|
-
return (/**
|
|
33
|
-
* @this {?}
|
|
34
|
-
* @return {?}
|
|
35
|
-
*/
|
|
36
|
-
function () {
|
|
37
|
-
/** @type {?} */
|
|
38
|
-
var now = +new Date();
|
|
39
|
-
if (!previous && options.leading === false) {
|
|
40
|
-
previous = now;
|
|
41
|
-
}
|
|
42
|
-
/** @type {?} */
|
|
43
|
-
var remaining = wait - (now - previous);
|
|
44
|
-
context = this;
|
|
45
|
-
args = arguments;
|
|
46
|
-
if (remaining <= 0) {
|
|
47
|
-
clearTimeout(timeout);
|
|
48
|
-
timeout = null;
|
|
49
|
-
previous = now;
|
|
50
|
-
result = func.apply(context, args);
|
|
51
|
-
}
|
|
52
|
-
else if (!timeout && options.trailing !== false) {
|
|
53
|
-
timeout = setTimeout(later, remaining);
|
|
54
|
-
}
|
|
55
|
-
return result;
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Throttle decorator
|
|
60
|
-
*
|
|
61
|
-
* class MyClass {
|
|
62
|
-
* throttleable(10)
|
|
63
|
-
* myFn() { ... }
|
|
64
|
-
* }
|
|
65
|
-
* @param {?} duration
|
|
66
|
-
* @param {?=} options
|
|
67
|
-
* @return {?}
|
|
68
|
-
*/
|
|
69
|
-
export function throttleable(duration, options) {
|
|
70
|
-
return (/**
|
|
71
|
-
* @param {?} target
|
|
72
|
-
* @param {?} key
|
|
73
|
-
* @param {?} descriptor
|
|
74
|
-
* @return {?}
|
|
75
|
-
*/
|
|
76
|
-
function innerDecorator(target, key, descriptor) {
|
|
77
|
-
return {
|
|
78
|
-
configurable: true,
|
|
79
|
-
enumerable: descriptor.enumerable,
|
|
80
|
-
get: (/**
|
|
81
|
-
* @return {?}
|
|
82
|
-
*/
|
|
83
|
-
function getter() {
|
|
84
|
-
Object.defineProperty(this, key, {
|
|
85
|
-
configurable: true,
|
|
86
|
-
enumerable: descriptor.enumerable,
|
|
87
|
-
value: throttle(descriptor.value, duration, options)
|
|
88
|
-
});
|
|
89
|
-
return this[key];
|
|
90
|
-
})
|
|
91
|
-
};
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyb3R0bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3dpbWxhbmUvbmd4LWRhdGF0YWJsZS8iLCJzb3VyY2VzIjpbImxpYi91dGlscy90aHJvdHRsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBUyxFQUFFLElBQVksRUFBRSxPQUFhO0lBQzdELE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDOztRQUNwQixPQUFZOztRQUNaLElBQVM7O1FBQ1QsTUFBVzs7UUFDWCxPQUFPLEdBQVEsSUFBSTs7UUFDbkIsUUFBUSxHQUFHLENBQUM7Ozs7SUFFaEIsU0FBUyxLQUFLO1FBQ1osUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2RCxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7OztJQUFPOztZQUNDLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFO1FBRXZCLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7WUFDMUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztTQUNoQjs7WUFFSyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztRQUN6QyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUVqQixJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDZixRQUFRLEdBQUcsR0FBRyxDQUFDO1lBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3BDO2FBQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtZQUNqRCxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN4QztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsRUFBQztBQUNKLENBQUM7Ozs7Ozs7Ozs7OztBQVVELE1BQU0sVUFBVSxZQUFZLENBQUMsUUFBZ0IsRUFBRSxPQUFhO0lBQzFEOzs7Ozs7SUFBTyxTQUFTLGNBQWMsQ0FBQyxNQUFXLEVBQUUsR0FBZ0IsRUFBRSxVQUE4QjtRQUMxRixPQUFPO1lBQ0wsWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO1lBQ2pDLEdBQUc7OztZQUFFLFNBQVMsTUFBTTtnQkFDbEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO29CQUMvQixZQUFZLEVBQUUsSUFBSTtvQkFDbEIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO29CQUNqQyxLQUFLLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztpQkFDckQsQ0FBQyxDQUFDO2dCQUVILE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FBQTtTQUNGLENBQUM7SUFDSixDQUFDLEVBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaHJvdHRsZSBhIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvdHRsZShmdW5jOiBhbnksIHdhaXQ6IG51bWJlciwgb3B0aW9ucz86IGFueSkge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGV0IGNvbnRleHQ6IGFueTtcbiAgbGV0IGFyZ3M6IGFueTtcbiAgbGV0IHJlc3VsdDogYW55O1xuICBsZXQgdGltZW91dDogYW55ID0gbnVsbDtcbiAgbGV0IHByZXZpb3VzID0gMDtcblxuICBmdW5jdGlvbiBsYXRlcigpIHtcbiAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogK25ldyBEYXRlKCk7XG4gICAgdGltZW91dCA9IG51bGw7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICBjb25zdCBub3cgPSArbmV3IERhdGUoKTtcblxuICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkge1xuICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgfVxuXG4gICAgY29uc3QgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgY29udGV4dCA9IHRoaXM7XG4gICAgYXJncyA9IGFyZ3VtZW50cztcblxuICAgIGlmIChyZW1haW5pbmcgPD0gMCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqXG4gKiAgY2xhc3MgTXlDbGFzcyB7XG4gKiAgICB0aHJvdHRsZWFibGUoMTApXG4gKiAgICBteUZuKCkgeyAuLi4gfVxuICogIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm90dGxlYWJsZShkdXJhdGlvbjogbnVtYmVyLCBvcHRpb25zPzogYW55KSB7XG4gIHJldHVybiBmdW5jdGlvbiBpbm5lckRlY29yYXRvcih0YXJnZXQ6IGFueSwga2V5OiBQcm9wZXJ0eUtleSwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0dGVyKCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZSxcbiAgICAgICAgICB2YWx1ZTogdGhyb3R0bGUoZGVzY3JpcHRvci52YWx1ZSwgZHVyYXRpb24sIG9wdGlvbnMpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzW2tleV07XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
import { getVendorPrefixedName } from './prefixes';
|
|
6
|
-
import { camelCase } from './camel-case';
|
|
7
|
-
// browser detection and prefixing tools
|
|
8
|
-
/** @type {?} */
|
|
9
|
-
var transform = typeof window !== 'undefined' ? getVendorPrefixedName('transform') : undefined;
|
|
10
|
-
/** @type {?} */
|
|
11
|
-
var backfaceVisibility = typeof window !== 'undefined' ? getVendorPrefixedName('backfaceVisibility') : undefined;
|
|
12
|
-
/** @type {?} */
|
|
13
|
-
var hasCSSTransforms = typeof window !== 'undefined' ? !!getVendorPrefixedName('transform') : undefined;
|
|
14
|
-
/** @type {?} */
|
|
15
|
-
var hasCSS3DTransforms = typeof window !== 'undefined' ? !!getVendorPrefixedName('perspective') : undefined;
|
|
16
|
-
/** @type {?} */
|
|
17
|
-
var ua = typeof window !== 'undefined' ? window.navigator.userAgent : 'Chrome';
|
|
18
|
-
/** @type {?} */
|
|
19
|
-
var isSafari = /Safari\//.test(ua) && !/Chrome\//.test(ua);
|
|
20
|
-
/**
|
|
21
|
-
* @param {?} styles
|
|
22
|
-
* @param {?} x
|
|
23
|
-
* @param {?} y
|
|
24
|
-
* @return {?}
|
|
25
|
-
*/
|
|
26
|
-
export function translateXY(styles, x, y) {
|
|
27
|
-
if (typeof transform !== 'undefined' && hasCSSTransforms) {
|
|
28
|
-
if (!isSafari && hasCSS3DTransforms) {
|
|
29
|
-
styles[transform] = "translate3d(" + x + "px, " + y + "px, 0)";
|
|
30
|
-
styles[backfaceVisibility] = 'hidden';
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
styles[camelCase(transform)] = "translate(" + x + "px, " + y + "px)";
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
styles.top = y + "px";
|
|
38
|
-
styles.left = x + "px";
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN3aW1sYW5lL25neC1kYXRhdGFibGUvIiwic291cmNlcyI6WyJsaWIvdXRpbHMvdHJhbnNsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7O0lBR25DLFNBQVMsR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTOztJQUMxRixrQkFBa0IsR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7O0lBQzVHLGdCQUFnQixHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTOztJQUNuRyxrQkFBa0IsR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUzs7SUFDdkcsRUFBRSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVE7O0lBQzFFLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Ozs7Ozs7QUFFNUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFXLEVBQUUsQ0FBUyxFQUFFLENBQVM7SUFDM0QsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksZ0JBQWdCLEVBQUU7UUFDeEQsSUFBSSxDQUFDLFFBQVEsSUFBSSxrQkFBa0IsRUFBRTtZQUNuQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsaUJBQWUsQ0FBQyxZQUFPLENBQUMsV0FBUSxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQztTQUN2QzthQUFNO1lBQ0wsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLGVBQWEsQ0FBQyxZQUFPLENBQUMsUUFBSyxDQUFDO1NBQzVEO0tBQ0Y7U0FBTTtRQUNMLE1BQU0sQ0FBQyxHQUFHLEdBQU0sQ0FBQyxPQUFJLENBQUM7UUFDdEIsTUFBTSxDQUFDLElBQUksR0FBTSxDQUFDLE9BQUksQ0FBQztLQUN4QjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRWZW5kb3JQcmVmaXhlZE5hbWUgfSBmcm9tICcuL3ByZWZpeGVzJztcbmltcG9ydCB7IGNhbWVsQ2FzZSB9IGZyb20gJy4vY2FtZWwtY2FzZSc7XG5cbi8vIGJyb3dzZXIgZGV0ZWN0aW9uIGFuZCBwcmVmaXhpbmcgdG9vbHNcbmNvbnN0IHRyYW5zZm9ybSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gZ2V0VmVuZG9yUHJlZml4ZWROYW1lKCd0cmFuc2Zvcm0nKSA6IHVuZGVmaW5lZDtcbmNvbnN0IGJhY2tmYWNlVmlzaWJpbGl0eSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gZ2V0VmVuZG9yUHJlZml4ZWROYW1lKCdiYWNrZmFjZVZpc2liaWxpdHknKSA6IHVuZGVmaW5lZDtcbmNvbnN0IGhhc0NTU1RyYW5zZm9ybXMgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/ICEhZ2V0VmVuZG9yUHJlZml4ZWROYW1lKCd0cmFuc2Zvcm0nKSA6IHVuZGVmaW5lZDtcbmNvbnN0IGhhc0NTUzNEVHJhbnNmb3JtcyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gISFnZXRWZW5kb3JQcmVmaXhlZE5hbWUoJ3BlcnNwZWN0aXZlJykgOiB1bmRlZmluZWQ7XG5jb25zdCB1YSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQgOiAnQ2hyb21lJztcbmNvbnN0IGlzU2FmYXJpID0gL1NhZmFyaVxcLy8udGVzdCh1YSkgJiYgIS9DaHJvbWVcXC8vLnRlc3QodWEpO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlWFkoc3R5bGVzOiBhbnksIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gIGlmICh0eXBlb2YgdHJhbnNmb3JtICE9PSAndW5kZWZpbmVkJyAmJiBoYXNDU1NUcmFuc2Zvcm1zKSB7XG4gICAgaWYgKCFpc1NhZmFyaSAmJiBoYXNDU1MzRFRyYW5zZm9ybXMpIHtcbiAgICAgIHN0eWxlc1t0cmFuc2Zvcm1dID0gYHRyYW5zbGF0ZTNkKCR7eH1weCwgJHt5fXB4LCAwKWA7XG4gICAgICBzdHlsZXNbYmFja2ZhY2VWaXNpYmlsaXR5XSA9ICdoaWRkZW4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZXNbY2FtZWxDYXNlKHRyYW5zZm9ybSldID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzdHlsZXMudG9wID0gYCR7eX1weGA7XG4gICAgc3R5bGVzLmxlZnQgPSBgJHt4fXB4YDtcbiAgfVxufVxuIl19
|
package/esm5/lib/utils/tree.js
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
import * as tslib_1 from "tslib";
|
|
6
|
-
import { getterForProp } from './column-prop-getters';
|
|
7
|
-
/**
|
|
8
|
-
* @param {?} prop
|
|
9
|
-
* @return {?}
|
|
10
|
-
*/
|
|
11
|
-
export function optionalGetterForProp(prop) {
|
|
12
|
-
return prop && ((/**
|
|
13
|
-
* @param {?} row
|
|
14
|
-
* @return {?}
|
|
15
|
-
*/
|
|
16
|
-
function (row) { return getterForProp(prop)(row, prop); }));
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* This functions rearrange items by their parents
|
|
20
|
-
* Also sets the level value to each of the items
|
|
21
|
-
*
|
|
22
|
-
* Note: Expecting each item has a property called parentId
|
|
23
|
-
* Note: This algorithm will fail if a list has two or more items with same ID
|
|
24
|
-
* NOTE: This algorithm will fail if there is a deadlock of relationship
|
|
25
|
-
*
|
|
26
|
-
* For example,
|
|
27
|
-
*
|
|
28
|
-
* Input
|
|
29
|
-
*
|
|
30
|
-
* id -> parent
|
|
31
|
-
* 1 -> 0
|
|
32
|
-
* 2 -> 0
|
|
33
|
-
* 3 -> 1
|
|
34
|
-
* 4 -> 1
|
|
35
|
-
* 5 -> 2
|
|
36
|
-
* 7 -> 8
|
|
37
|
-
* 6 -> 3
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* Output
|
|
41
|
-
* id -> level
|
|
42
|
-
* 1 -> 0
|
|
43
|
-
* --3 -> 1
|
|
44
|
-
* ----6 -> 2
|
|
45
|
-
* --4 -> 1
|
|
46
|
-
* 2 -> 0
|
|
47
|
-
* --5 -> 1
|
|
48
|
-
* 7 -> 8
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* @param {?} rows
|
|
52
|
-
*
|
|
53
|
-
* @param {?=} from
|
|
54
|
-
* @param {?=} to
|
|
55
|
-
* @return {?}
|
|
56
|
-
*/
|
|
57
|
-
export function groupRowsByParents(rows, from, to) {
|
|
58
|
-
if (from && to) {
|
|
59
|
-
/** @type {?} */
|
|
60
|
-
var nodeById = {};
|
|
61
|
-
/** @type {?} */
|
|
62
|
-
var l = rows.length;
|
|
63
|
-
/** @type {?} */
|
|
64
|
-
var node = null;
|
|
65
|
-
nodeById[0] = new TreeNode(); // that's the root node
|
|
66
|
-
// that's the root node
|
|
67
|
-
/** @type {?} */
|
|
68
|
-
var uniqIDs = rows.reduce((/**
|
|
69
|
-
* @param {?} arr
|
|
70
|
-
* @param {?} item
|
|
71
|
-
* @return {?}
|
|
72
|
-
*/
|
|
73
|
-
function (arr, item) {
|
|
74
|
-
/** @type {?} */
|
|
75
|
-
var toValue = to(item);
|
|
76
|
-
if (arr.indexOf(toValue) === -1) {
|
|
77
|
-
arr.push(toValue);
|
|
78
|
-
}
|
|
79
|
-
return arr;
|
|
80
|
-
}), []);
|
|
81
|
-
for (var i = 0; i < l; i++) {
|
|
82
|
-
// make TreeNode objects for each item
|
|
83
|
-
nodeById[to(rows[i])] = new TreeNode(rows[i]);
|
|
84
|
-
}
|
|
85
|
-
for (var i = 0; i < l; i++) {
|
|
86
|
-
// link all TreeNode objects
|
|
87
|
-
node = nodeById[to(rows[i])];
|
|
88
|
-
/** @type {?} */
|
|
89
|
-
var parent_1 = 0;
|
|
90
|
-
/** @type {?} */
|
|
91
|
-
var fromValue = from(node.row);
|
|
92
|
-
if (!!fromValue && uniqIDs.indexOf(fromValue) > -1) {
|
|
93
|
-
parent_1 = fromValue;
|
|
94
|
-
}
|
|
95
|
-
node.parent = nodeById[parent_1];
|
|
96
|
-
node.row['level'] = node.parent.row['level'] + 1;
|
|
97
|
-
node.parent.children.push(node);
|
|
98
|
-
}
|
|
99
|
-
/** @type {?} */
|
|
100
|
-
var resolvedRows_1 = [];
|
|
101
|
-
nodeById[0].flatten((/**
|
|
102
|
-
* @return {?}
|
|
103
|
-
*/
|
|
104
|
-
function () {
|
|
105
|
-
resolvedRows_1 = tslib_1.__spread(resolvedRows_1, [this.row]);
|
|
106
|
-
}), true);
|
|
107
|
-
return resolvedRows_1;
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
return rows;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
var TreeNode = /** @class */ (function () {
|
|
114
|
-
function TreeNode(row) {
|
|
115
|
-
if (row === void 0) { row = null; }
|
|
116
|
-
if (!row) {
|
|
117
|
-
row = {
|
|
118
|
-
level: -1,
|
|
119
|
-
treeStatus: 'expanded'
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
this.row = row;
|
|
123
|
-
this.parent = null;
|
|
124
|
-
this.children = [];
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* @param {?} f
|
|
128
|
-
* @param {?} recursive
|
|
129
|
-
* @return {?}
|
|
130
|
-
*/
|
|
131
|
-
TreeNode.prototype.flatten = /**
|
|
132
|
-
* @param {?} f
|
|
133
|
-
* @param {?} recursive
|
|
134
|
-
* @return {?}
|
|
135
|
-
*/
|
|
136
|
-
function (f, recursive) {
|
|
137
|
-
if (this.row['treeStatus'] === 'expanded') {
|
|
138
|
-
for (var i = 0, l = this.children.length; i < l; i++) {
|
|
139
|
-
/** @type {?} */
|
|
140
|
-
var child = this.children[i];
|
|
141
|
-
f.apply(child, Array.prototype.slice.call(arguments, 2));
|
|
142
|
-
if (recursive)
|
|
143
|
-
child.flatten.apply(child, arguments);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
return TreeNode;
|
|
148
|
-
}());
|
|
149
|
-
if (false) {
|
|
150
|
-
/** @type {?} */
|
|
151
|
-
TreeNode.prototype.row;
|
|
152
|
-
/** @type {?} */
|
|
153
|
-
TreeNode.prototype.parent;
|
|
154
|
-
/** @type {?} */
|
|
155
|
-
TreeNode.prototype.children;
|
|
156
|
-
}
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bzd2ltbGFuZS9uZ3gtZGF0YXRhYmxlLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7O0FBSXRELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxJQUFxQjtJQUN6RCxPQUFPLElBQUksSUFBSTs7OztJQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBOUIsQ0FBOEIsRUFBQyxDQUFDO0FBQ3pELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQ0QsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQVcsRUFBRSxJQUEwQixFQUFFLEVBQXdCO0lBQ2xHLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTs7WUFDUixRQUFRLEdBQUcsRUFBRTs7WUFDYixDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU07O1lBQ2pCLElBQUksR0FBb0IsSUFBSTtRQUVoQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLHVCQUF1Qjs7O1lBRS9DLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTTs7Ozs7UUFBQyxVQUFDLEdBQUcsRUFBRSxJQUFJOztnQkFDOUIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDeEIsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ25CO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEdBQUUsRUFBRSxDQUFDO1FBRU4sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixzQ0FBc0M7WUFDdEMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9DO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQiw0QkFBNEI7WUFDNUIsSUFBSSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Z0JBQ3pCLFFBQU0sR0FBRyxDQUFDOztnQkFDUixTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDaEMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xELFFBQU0sR0FBRyxTQUFTLENBQUM7YUFDcEI7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxRQUFNLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7O1lBRUcsY0FBWSxHQUFVLEVBQUU7UUFDNUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87OztRQUFDO1lBQ2xCLGNBQVksb0JBQU8sY0FBWSxHQUFFLElBQUksQ0FBQyxHQUFHLEVBQUMsQ0FBQztRQUM3QyxDQUFDLEdBQUUsSUFBSSxDQUFDLENBQUM7UUFFVCxPQUFPLGNBQVksQ0FBQztLQUNyQjtTQUFNO1FBQ0wsT0FBTyxJQUFJLENBQUM7S0FDYjtBQUNILENBQUM7QUFFRDtJQUtFLGtCQUFZLEdBQXNCO1FBQXRCLG9CQUFBLEVBQUEsVUFBc0I7UUFDaEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLEdBQUcsR0FBRztnQkFDSixLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNULFVBQVUsRUFBRSxVQUFVO2FBQ3ZCLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQzs7Ozs7O0lBRUQsMEJBQU87Ozs7O0lBQVAsVUFBUSxDQUFNLEVBQUUsU0FBa0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLFVBQVUsRUFBRTtZQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTs7b0JBQzlDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLFNBQVM7b0JBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ3REO1NBQ0Y7SUFDSCxDQUFDO0lBQ0gsZUFBQztBQUFELENBQUMsQUExQkQsSUEwQkM7OztJQXpCQyx1QkFBZ0I7O0lBQ2hCLDBCQUFtQjs7SUFDbkIsNEJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0dGVyRm9yUHJvcCB9IGZyb20gJy4vY29sdW1uLXByb3AtZ2V0dGVycyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtblByb3AgfSBmcm9tICcuLi90eXBlcy90YWJsZS1jb2x1bW4udHlwZSc7XG5cbmV4cG9ydCB0eXBlIE9wdGlvbmFsVmFsdWVHZXR0ZXIgPSAocm93OiBhbnkpID0+IGFueSB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbEdldHRlckZvclByb3AocHJvcDogVGFibGVDb2x1bW5Qcm9wKTogT3B0aW9uYWxWYWx1ZUdldHRlciB7XG4gIHJldHVybiBwcm9wICYmIChyb3cgPT4gZ2V0dGVyRm9yUHJvcChwcm9wKShyb3csIHByb3ApKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9ucyByZWFycmFuZ2UgaXRlbXMgYnkgdGhlaXIgcGFyZW50c1xuICogQWxzbyBzZXRzIHRoZSBsZXZlbCB2YWx1ZSB0byBlYWNoIG9mIHRoZSBpdGVtc1xuICpcbiAqIE5vdGU6IEV4cGVjdGluZyBlYWNoIGl0ZW0gaGFzIGEgcHJvcGVydHkgY2FsbGVkIHBhcmVudElkXG4gKiBOb3RlOiBUaGlzIGFsZ29yaXRobSB3aWxsIGZhaWwgaWYgYSBsaXN0IGhhcyB0d28gb3IgbW9yZSBpdGVtcyB3aXRoIHNhbWUgSURcbiAqIE5PVEU6IFRoaXMgYWxnb3JpdGhtIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBhIGRlYWRsb2NrIG9mIHJlbGF0aW9uc2hpcFxuICpcbiAqIEZvciBleGFtcGxlLFxuICpcbiAqIElucHV0XG4gKlxuICogaWQgLT4gcGFyZW50XG4gKiAxICAtPiAwXG4gKiAyICAtPiAwXG4gKiAzICAtPiAxXG4gKiA0ICAtPiAxXG4gKiA1ICAtPiAyXG4gKiA3ICAtPiA4XG4gKiA2ICAtPiAzXG4gKlxuICpcbiAqIE91dHB1dFxuICogaWQgLT4gbGV2ZWxcbiAqIDEgICAgICAtPiAwXG4gKiAtLTMgICAgLT4gMVxuICogLS0tLTYgIC0+IDJcbiAqIC0tNCAgICAtPiAxXG4gKiAyICAgICAgLT4gMFxuICogLS01ICAgIC0+IDFcbiAqIDcgICAgIC0+IDhcbiAqXG4gKlxuICogQHBhcmFtIHJvd3NcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncm91cFJvd3NCeVBhcmVudHMocm93czogYW55W10sIGZyb20/OiBPcHRpb25hbFZhbHVlR2V0dGVyLCB0bz86IE9wdGlvbmFsVmFsdWVHZXR0ZXIpOiBhbnlbXSB7XG4gIGlmIChmcm9tICYmIHRvKSB7XG4gICAgY29uc3Qgbm9kZUJ5SWQgPSB7fTtcbiAgICBjb25zdCBsID0gcm93cy5sZW5ndGg7XG4gICAgbGV0IG5vZGU6IFRyZWVOb2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgICBub2RlQnlJZFswXSA9IG5ldyBUcmVlTm9kZSgpOyAvLyB0aGF0J3MgdGhlIHJvb3Qgbm9kZVxuXG4gICAgY29uc3QgdW5pcUlEcyA9IHJvd3MucmVkdWNlKChhcnIsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHRvVmFsdWUgPSB0byhpdGVtKTtcbiAgICAgIGlmIChhcnIuaW5kZXhPZih0b1ZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgYXJyLnB1c2godG9WYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0sIFtdKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAvLyBtYWtlIFRyZWVOb2RlIG9iamVjdHMgZm9yIGVhY2ggaXRlbVxuICAgICAgbm9kZUJ5SWRbdG8ocm93c1tpXSldID0gbmV3IFRyZWVOb2RlKHJvd3NbaV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAvLyBsaW5rIGFsbCBUcmVlTm9kZSBvYmplY3RzXG4gICAgICBub2RlID0gbm9kZUJ5SWRbdG8ocm93c1tpXSldO1xuICAgICAgbGV0IHBhcmVudCA9IDA7XG4gICAgICBjb25zdCBmcm9tVmFsdWUgPSBmcm9tKG5vZGUucm93KTtcbiAgICAgIGlmICghIWZyb21WYWx1ZSAmJiB1bmlxSURzLmluZGV4T2YoZnJvbVZhbHVlKSA+IC0xKSB7XG4gICAgICAgIHBhcmVudCA9IGZyb21WYWx1ZTtcbiAgICAgIH1cbiAgICAgIG5vZGUucGFyZW50ID0gbm9kZUJ5SWRbcGFyZW50XTtcbiAgICAgIG5vZGUucm93WydsZXZlbCddID0gbm9kZS5wYXJlbnQucm93WydsZXZlbCddICsgMTtcbiAgICAgIG5vZGUucGFyZW50LmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVkUm93czogYW55W10gPSBbXTtcbiAgICBub2RlQnlJZFswXS5mbGF0dGVuKGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZWRSb3dzID0gWy4uLnJlc29sdmVkUm93cywgdGhpcy5yb3ddO1xuICAgIH0sIHRydWUpO1xuXG4gICAgcmV0dXJuIHJlc29sdmVkUm93cztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcm93cztcbiAgfVxufVxuXG5jbGFzcyBUcmVlTm9kZSB7XG4gIHB1YmxpYyByb3c6IGFueTtcbiAgcHVibGljIHBhcmVudDogYW55O1xuICBwdWJsaWMgY2hpbGRyZW46IGFueVtdO1xuXG4gIGNvbnN0cnVjdG9yKHJvdzogYW55IHwgbnVsbCA9IG51bGwpIHtcbiAgICBpZiAoIXJvdykge1xuICAgICAgcm93ID0ge1xuICAgICAgICBsZXZlbDogLTEsXG4gICAgICAgIHRyZWVTdGF0dXM6ICdleHBhbmRlZCdcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMucm93ID0gcm93O1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gIH1cblxuICBmbGF0dGVuKGY6IGFueSwgcmVjdXJzaXZlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMucm93Wyd0cmVlU3RhdHVzJ10gPT09ICdleHBhbmRlZCcpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICBmLmFwcGx5KGNoaWxkLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKTtcbiAgICAgICAgaWYgKHJlY3Vyc2l2ZSkgY2hpbGQuZmxhdHRlbi5hcHBseShjaGlsZCwgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|