@swimlane/ngx-datatable 11.1.7 → 11.2.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/.npmignore +6 -0
- package/config/deploy.js +2 -2
- package/config/karma.conf.js +5 -0
- package/package.json +2 -1
- package/release/components/body/body-group-header.directive.d.ts +4 -5
- package/release/components/body/body-group-header.directive.js +4 -5
- package/release/components/body/body-group-header.directive.js.map +1 -1
- package/release/components/body/body-row.component.js +1 -1
- package/release/components/body/body-row.component.js.map +1 -1
- package/release/components/body/body.component.d.ts +1 -1
- package/release/components/body/body.component.js +9 -6
- package/release/components/body/body.component.js.map +1 -1
- package/release/components/datatable.component.css +7 -2
- package/release/components/datatable.component.d.ts +1 -1
- package/release/components/footer/pager.component.js +1 -1
- package/release/components/footer/pager.component.js.map +1 -1
- package/release/components/footer/pager.component.metadata.json +1 -1
- package/release/components/header/header-cell.component.js +2 -1
- package/release/components/header/header-cell.component.js.map +1 -1
- package/release/components/header/header-cell.component.metadata.json +1 -1
- package/release/components/header/header.component.js +1 -0
- package/release/components/header/header.component.js.map +1 -1
- package/release/directives/resizeable.directive.js +5 -2
- package/release/directives/resizeable.directive.js.map +1 -1
- package/release/index.css +8 -3
- package/release/index.js +51 -54
- package/release/index.min.js +1 -1
- package/release/index.min.js.map +1 -1
- package/release/utils/column.d.ts +0 -4
- package/release/utils/column.js +0 -10
- package/release/utils/column.js.map +1 -1
- package/release/utils/column.metadata.json +1 -1
- package/release/utils/math.js +1 -1
- package/release/utils/math.js.map +1 -1
- package/src/components/body/body-group-header.directive.ts +5 -6
- package/src/components/body/body-row.component.ts +2 -2
- package/src/components/body/body.component.ts +8 -6
- package/src/components/datatable.component.scss +14 -1
- package/src/components/datatable.component.ts +2 -2
- package/src/components/footer/footer.component.spec.ts +329 -47
- package/src/components/footer/pager.component.ts +10 -0
- package/src/components/header/header-cell.component.ts +2 -1
- package/src/components/header/header.component.ts +1 -0
- package/src/directives/resizeable.directive.ts +4 -2
- package/src/utils/column-prop-getters.spec.ts +44 -0
- package/src/utils/column.ts +0 -12
- package/src/utils/math.ts +1 -1
- package/test/index.ts +1 -0
- package/test/jasmine-matchers.d.ts +12 -0
- package/test/jasmine-matchers.ts +70 -0
package/release/utils/column.js
CHANGED
|
@@ -76,14 +76,4 @@ function columnsByPinArr(val) {
|
|
|
76
76
|
return colsByPinArr;
|
|
77
77
|
}
|
|
78
78
|
exports.columnsByPinArr = columnsByPinArr;
|
|
79
|
-
function allColumnsByPinArr(val) {
|
|
80
|
-
var colsByPinArr = [];
|
|
81
|
-
var colsByPin = columnsByPin(val);
|
|
82
|
-
var colsTest = [];
|
|
83
|
-
colsByPinArr.push({ type: 'left', columns: colsByPin['left'] });
|
|
84
|
-
colsByPinArr.push({ type: 'center', columns: colsByPin['center'] });
|
|
85
|
-
colsByPinArr.push({ type: 'right', columns: colsByPin['right'] });
|
|
86
|
-
return colsByPinArr;
|
|
87
|
-
}
|
|
88
|
-
exports.allColumnsByPinArr = allColumnsByPinArr;
|
|
89
79
|
//# sourceMappingURL=column.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../build/utils/column.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../build/utils/column.ts"],"names":[],"mappings":"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","file":"column.js","sourceRoot":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":3,"metadata":{"columnsByPin":{"__symbolic":"function"},"columnGroupWidths":{"__symbolic":"function","parameters":["groups","all"],"value":{"left":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"columnTotalWidth"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"groups"},"member":"left"}]},"center":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"columnTotalWidth"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"groups"},"member":"center"}]},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"columnTotalWidth"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"groups"},"member":"right"}]},"total":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Math"},"member":"floor"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"columnTotalWidth"},"arguments":[{"__symbolic":"reference","name":"all"}]}]}}},"columnTotalWidth":{"__symbolic":"function"},"columnsTotalWidth":{"__symbolic":"function"},"columnsByPinArr":{"__symbolic":"function"}
|
|
1
|
+
[{"__symbolic":"module","version":3,"metadata":{"columnsByPin":{"__symbolic":"function"},"columnGroupWidths":{"__symbolic":"function","parameters":["groups","all"],"value":{"left":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"columnTotalWidth"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"groups"},"member":"left"}]},"center":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"columnTotalWidth"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"groups"},"member":"center"}]},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"columnTotalWidth"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"groups"},"member":"right"}]},"total":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Math"},"member":"floor"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"columnTotalWidth"},"arguments":[{"__symbolic":"reference","name":"all"}]}]}}},"columnTotalWidth":{"__symbolic":"function"},"columnsTotalWidth":{"__symbolic":"function"},"columnsByPinArr":{"__symbolic":"function"}}},{"__symbolic":"module","version":1,"metadata":{"columnsByPin":{"__symbolic":"function"},"columnGroupWidths":{"__symbolic":"function","parameters":["groups","all"],"value":{"left":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"columnTotalWidth"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"groups"},"member":"left"}]},"center":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"columnTotalWidth"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"groups"},"member":"center"}]},"right":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"columnTotalWidth"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"groups"},"member":"right"}]},"total":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Math"},"member":"floor"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"reference","name":"columnTotalWidth"},"arguments":[{"__symbolic":"reference","name":"all"}]}]}}},"columnTotalWidth":{"__symbolic":"function"},"columnsTotalWidth":{"__symbolic":"function"},"columnsByPinArr":{"__symbolic":"function"}}}]
|
package/release/utils/math.js
CHANGED
|
@@ -36,7 +36,7 @@ function scaleColumns(colsByGroup, maxWidth, totalFlexGrow) {
|
|
|
36
36
|
var column = _a[_i];
|
|
37
37
|
if (!column.canAutoResize) {
|
|
38
38
|
maxWidth -= column.width;
|
|
39
|
-
totalFlexGrow -= column.flexGrow;
|
|
39
|
+
totalFlexGrow -= column.flexGrow ? column.flexGrow : 0;
|
|
40
40
|
}
|
|
41
41
|
else {
|
|
42
42
|
column.width = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../build/utils/math.ts"],"names":[],"mappings":";;AAAA,mCAA2D;AAE3D;;GAEG;AACH,0BAAiC,OAAc;IAC7C,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,GAAG,CAAC,CAAY,UAAO,EAAP,mBAAO,EAAP,qBAAO,EAAP,IAAO;QAAlB,IAAM,CAAC,gBAAA;QACV,aAAa,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;KAClC;IAED,MAAM,CAAC,aAAa,CAAC;AACvB,CAAC;AARD,4CAQC;AAED;;;GAGG;AACH,4BAAmC,UAAe,EAAE,aAAkB;IACpE,IAAM,YAAY,GAAG,0BAAiB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAM,WAAW,GAAG,qBAAY,CAAC,UAAU,CAAC,CAAC;IAE7C,EAAE,CAAC,CAAC,YAAY,KAAK,aAAa,CAAC,CAAC,CAAC;QACnC,YAAY,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AARD,gDAQC;AAED;;GAEG;AACH,sBAAsB,WAAgB,EAAE,QAAa,EAAE,aAAkB;IACvE,6EAA6E;IAC7E,GAAG,CAAA,CAAC,IAAM,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;QAC9B,GAAG,CAAA,CAAiB,UAAiB,EAAjB,KAAA,WAAW,CAAC,IAAI,CAAC,EAAjB,cAAiB,EAAjB,IAAiB;YAAjC,IAAM,MAAM,SAAA;YACd,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC1B,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC;gBACzB,aAAa,IAAI,MAAM,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"sources":["../../build/utils/math.ts"],"names":[],"mappings":"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","file":"math.js","sourceRoot":""}
|
|
@@ -5,17 +5,16 @@ import { DatatableGroupHeaderTemplateDirective } from './body-group-header-templ
|
|
|
5
5
|
export class DatatableGroupHeaderDirective {
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
* when virtual scroll is enabled.
|
|
8
|
+
* Row height is required when virtual scroll is enabled.
|
|
10
9
|
*/
|
|
11
10
|
@Input() rowHeight: (number | ((group?: any, index?: number) => number)) = 0;
|
|
12
11
|
|
|
13
12
|
@Input()
|
|
14
|
-
@ContentChild(DatatableGroupHeaderTemplateDirective, { read: TemplateRef })
|
|
13
|
+
@ContentChild(DatatableGroupHeaderTemplateDirective, { read: TemplateRef })
|
|
15
14
|
template: TemplateRef<any>;
|
|
16
15
|
|
|
17
16
|
/**
|
|
18
|
-
*
|
|
17
|
+
* Track toggling of group visibility
|
|
19
18
|
*/
|
|
20
19
|
@Output() toggle: EventEmitter<any> = new EventEmitter();
|
|
21
20
|
|
|
@@ -30,7 +29,7 @@ export class DatatableGroupHeaderDirective {
|
|
|
30
29
|
}
|
|
31
30
|
|
|
32
31
|
/**
|
|
33
|
-
*
|
|
32
|
+
* Expand all groups
|
|
34
33
|
*/
|
|
35
34
|
expandAllGroups(): void {
|
|
36
35
|
this.toggle.emit({
|
|
@@ -40,7 +39,7 @@ export class DatatableGroupHeaderDirective {
|
|
|
40
39
|
}
|
|
41
40
|
|
|
42
41
|
/**
|
|
43
|
-
*
|
|
42
|
+
* Collapse all groups
|
|
44
43
|
*/
|
|
45
44
|
collapseAllGroups(): void {
|
|
46
45
|
this.toggle.emit({
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from '@angular/core';
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
|
-
|
|
7
|
+
columnsByPin, columnGroupWidths, columnsByPinArr, translateXY, Keys
|
|
8
8
|
} from '../../utils';
|
|
9
9
|
import { ScrollbarHelper } from '../../services';
|
|
10
10
|
import { MouseEvent, KeyboardEvent, Event } from '../../events';
|
|
@@ -215,7 +215,7 @@ export class DataTableBodyRowComponent implements DoCheck {
|
|
|
215
215
|
recalculateColumns(val: any[] = this.columns): void {
|
|
216
216
|
this._columns = val;
|
|
217
217
|
const colsByPin = columnsByPin(this._columns);
|
|
218
|
-
this._columnsByPin =
|
|
218
|
+
this._columnsByPin = columnsByPinArr(this._columns);
|
|
219
219
|
this._columnGroupWidths = columnGroupWidths(colsByPin, this._columns);
|
|
220
220
|
}
|
|
221
221
|
|
|
@@ -95,7 +95,7 @@ export class DataTableBodyComponent implements OnInit, OnDestroy {
|
|
|
95
95
|
@Input() scrollbarH: boolean;
|
|
96
96
|
@Input() loadingIndicator: boolean;
|
|
97
97
|
@Input() externalPaging: boolean;
|
|
98
|
-
@Input() rowHeight: number;
|
|
98
|
+
@Input() rowHeight: number | ((row: any) => number);
|
|
99
99
|
@Input() offsetX: number;
|
|
100
100
|
@Input() emptyMessage: string;
|
|
101
101
|
@Input() selectionType: SelectionType;
|
|
@@ -207,7 +207,7 @@ export class DataTableBodyComponent implements OnInit, OnDestroy {
|
|
|
207
207
|
* calculate scroll height automatically (as height will be undefined).
|
|
208
208
|
*/
|
|
209
209
|
get scrollHeight(): number | undefined {
|
|
210
|
-
if (this.scrollbarV) {
|
|
210
|
+
if (this.scrollbarV && this.rowCount) {
|
|
211
211
|
return this.rowHeightsCache.query(this.rowCount - 1);
|
|
212
212
|
}
|
|
213
213
|
// avoid TS7030: Not all code paths return a value.
|
|
@@ -400,14 +400,16 @@ export class DataTableBodyComponent implements OnInit, OnDestroy {
|
|
|
400
400
|
* Get the row height
|
|
401
401
|
*/
|
|
402
402
|
getRowHeight(row: any): number {
|
|
403
|
-
let
|
|
403
|
+
let height;
|
|
404
404
|
|
|
405
405
|
// if its a function return it
|
|
406
406
|
if (typeof this.rowHeight === 'function') {
|
|
407
|
-
|
|
407
|
+
height = this.rowHeight(row);
|
|
408
|
+
} else {
|
|
409
|
+
height = this.rowHeight;
|
|
408
410
|
}
|
|
409
411
|
|
|
410
|
-
return
|
|
412
|
+
return height;
|
|
411
413
|
}
|
|
412
414
|
|
|
413
415
|
/**
|
|
@@ -525,7 +527,7 @@ export class DataTableBodyComponent implements OnInit, OnDestroy {
|
|
|
525
527
|
// If virtual rows are not needed
|
|
526
528
|
// We render all in one go
|
|
527
529
|
first = 0;
|
|
528
|
-
last = this.rowCount
|
|
530
|
+
last = this.rowCount;
|
|
529
531
|
}
|
|
530
532
|
} else {
|
|
531
533
|
// The server is handling paging and will pass an array that begins with the
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
cursor: pointer;
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
.resize-handle{
|
|
159
|
+
.resize-handle, .resize-handle--not-resizable {
|
|
160
160
|
display: inline-block;
|
|
161
161
|
position: absolute;
|
|
162
162
|
right: 0;
|
|
@@ -165,6 +165,9 @@
|
|
|
165
165
|
width: 5px;
|
|
166
166
|
padding: 0 4px;
|
|
167
167
|
visibility: hidden;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.resize-handle {
|
|
168
171
|
cursor: ew-resize;
|
|
169
172
|
}
|
|
170
173
|
|
|
@@ -173,6 +176,16 @@
|
|
|
173
176
|
visibility: visible;
|
|
174
177
|
}
|
|
175
178
|
}
|
|
179
|
+
|
|
180
|
+
&:hover {
|
|
181
|
+
.resize-handle--not-resizable {
|
|
182
|
+
visibility: visible;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.datatable-header-cell-template-wrap {
|
|
187
|
+
height: inherit;
|
|
188
|
+
}
|
|
176
189
|
}
|
|
177
190
|
}
|
|
178
191
|
|
|
@@ -118,7 +118,7 @@ export class DatatableComponent implements OnInit, DoCheck, AfterViewInit {
|
|
|
118
118
|
if (val) {
|
|
119
119
|
this._internalRows = [...val];
|
|
120
120
|
}
|
|
121
|
-
|
|
121
|
+
|
|
122
122
|
// auto sort on new updates
|
|
123
123
|
if (!this.externalSorting) {
|
|
124
124
|
this._internalRows = sortRows(this._internalRows, this._internalColumns, this.sorts);
|
|
@@ -307,7 +307,7 @@ export class DatatableComponent implements OnInit, DoCheck, AfterViewInit {
|
|
|
307
307
|
*
|
|
308
308
|
* - `single`
|
|
309
309
|
* - `multi`
|
|
310
|
-
* - `
|
|
310
|
+
* - `checkbox`
|
|
311
311
|
* - `multiClick`
|
|
312
312
|
* - `cell`
|
|
313
313
|
*
|
|
@@ -1,76 +1,358 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
Component,
|
|
3
|
+
DebugElement,
|
|
4
|
+
Input,
|
|
5
|
+
Output,
|
|
6
|
+
EventEmitter,
|
|
7
|
+
ViewChild,
|
|
8
|
+
TemplateRef
|
|
9
|
+
} from '@angular/core';
|
|
10
|
+
import { async, TestBed, ComponentFixture } from '@angular/core/testing';
|
|
11
|
+
import { By } from '@angular/platform-browser';
|
|
5
12
|
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
import { DataTableFooterComponent, DataTablePagerComponent } from '.';
|
|
14
|
+
import { addMatchers } from '../../../test';
|
|
15
|
+
|
|
16
|
+
let fixture: ComponentFixture<TestFixtureComponent>;
|
|
17
|
+
let component: TestFixtureComponent;
|
|
18
|
+
let page: Page;
|
|
11
19
|
|
|
12
20
|
describe('DataTableFooterComponent', () => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
beforeAll(addMatchers);
|
|
22
|
+
|
|
23
|
+
beforeEach(async(setupTest));
|
|
24
|
+
|
|
25
|
+
describe('div.datatable-footer-inner', () => {
|
|
26
|
+
it(`should have a height`, () => {
|
|
27
|
+
component.footerHeight = 123;
|
|
28
|
+
page.detectChangesAndRunQueries();
|
|
29
|
+
|
|
30
|
+
expect(page.datatableFooterInner.nativeElement.style.height).toEqual(
|
|
31
|
+
'123px'
|
|
32
|
+
);
|
|
24
33
|
});
|
|
25
|
-
});
|
|
26
34
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
35
|
+
it('should have `.selected-count` class when selectedMessage is set', () => {
|
|
36
|
+
component.selectedMessage = 'selected';
|
|
37
|
+
component.selectedCount = 1;
|
|
38
|
+
page.detectChangesAndRunQueries();
|
|
39
|
+
|
|
40
|
+
expect(page.datatableFooterInner.nativeElement).toHaveCssClass(
|
|
41
|
+
'selected-count'
|
|
42
|
+
);
|
|
32
43
|
});
|
|
33
|
-
}));
|
|
34
44
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
45
|
+
it('should not have `.selected-count` class if selectedMessage is not set', () => {
|
|
46
|
+
component.selectedMessage = undefined;
|
|
47
|
+
page.detectChangesAndRunQueries();
|
|
48
|
+
|
|
49
|
+
expect(page.datatableFooterInner.nativeElement).not.toHaveCssClass(
|
|
50
|
+
'selected-count'
|
|
51
|
+
);
|
|
38
52
|
});
|
|
39
53
|
});
|
|
40
54
|
|
|
41
|
-
describe('when
|
|
55
|
+
describe('when there is no template', () => {
|
|
56
|
+
it('should not render a template', () => {
|
|
57
|
+
component.footerTemplate = undefined;
|
|
58
|
+
page.detectChangesAndRunQueries();
|
|
42
59
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
component.rowCount = 9;
|
|
60
|
+
expect(page.templateList).toBeNull();
|
|
61
|
+
});
|
|
46
62
|
|
|
63
|
+
it('should display the selected count and total if selectedMessage set', () => {
|
|
64
|
+
component.footerTemplate = undefined;
|
|
47
65
|
component.selectedMessage = 'selected';
|
|
48
|
-
component.selectedCount =
|
|
66
|
+
component.selectedCount = 7;
|
|
67
|
+
component.rowCount = 10;
|
|
68
|
+
component.totalMessage = 'total';
|
|
69
|
+
page.detectChangesAndRunQueries();
|
|
70
|
+
|
|
71
|
+
expect(page.pageCount.nativeElement.innerText).toEqual(
|
|
72
|
+
'7 selected / 10 total'
|
|
73
|
+
);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('should display only the total if selectedMessage is not set', () => {
|
|
77
|
+
component.footerTemplate = undefined;
|
|
78
|
+
component.selectedMessage = undefined;
|
|
79
|
+
component.rowCount = 100;
|
|
80
|
+
component.totalMessage = 'total';
|
|
81
|
+
page.detectChangesAndRunQueries();
|
|
82
|
+
|
|
83
|
+
expect(page.pageCount.nativeElement.innerText).toEqual('100 total');
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('should render a DataTablePagerComponent', () => {
|
|
87
|
+
component.footerTemplate = undefined;
|
|
88
|
+
page.detectChangesAndRunQueries();
|
|
89
|
+
|
|
90
|
+
expect(page.datatablePager).not.toBeNull();
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it('should propagate page change events upward from the DataTablePagerComponent', () => {
|
|
94
|
+
component.footerTemplate = undefined;
|
|
95
|
+
page.detectChangesAndRunQueries();
|
|
96
|
+
const spy = spyOn(component, 'onPageEvent');
|
|
97
|
+
const pageChangeEvent = { page: 7 };
|
|
98
|
+
const datatablePagerComponent: DataTablePagerComponent =
|
|
99
|
+
page.datatablePager.componentInstance;
|
|
100
|
+
// mimic the act of changing the page through the datatable pager
|
|
101
|
+
datatablePagerComponent.change.emit(pageChangeEvent);
|
|
102
|
+
|
|
103
|
+
expect(spy).toHaveBeenCalledWith(pageChangeEvent);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it('should bind to DataTablePagerComponent pagerLeftArrowIcon input', () => {
|
|
107
|
+
component.pagerLeftArrowIcon = 'pager-left-arrow-icon';
|
|
108
|
+
page.detectChangesAndRunQueries();
|
|
109
|
+
const datatablePagerComponent: DataTablePagerComponent =
|
|
110
|
+
page.datatablePager.componentInstance;
|
|
111
|
+
|
|
112
|
+
expect(datatablePagerComponent.pagerLeftArrowIcon).toBe(
|
|
113
|
+
component.pagerLeftArrowIcon
|
|
114
|
+
);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('should bind to DataTablePagerComponent pagerRightArrowIcon input', () => {
|
|
118
|
+
component.pagerRightArrowIcon = 'pager-right-arrow-icon';
|
|
119
|
+
page.detectChangesAndRunQueries();
|
|
120
|
+
const datatablePagerComponent: DataTablePagerComponent =
|
|
121
|
+
page.datatablePager.componentInstance;
|
|
122
|
+
|
|
123
|
+
expect(datatablePagerComponent.pagerRightArrowIcon).toBe(
|
|
124
|
+
component.pagerRightArrowIcon
|
|
125
|
+
);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('should bind to DataTablePagerComponent pagerNextIcon input', () => {
|
|
129
|
+
component.pagerNextIcon = 'pager-next-icon';
|
|
130
|
+
page.detectChangesAndRunQueries();
|
|
131
|
+
const datatablePagerComponent: DataTablePagerComponent =
|
|
132
|
+
page.datatablePager.componentInstance;
|
|
49
133
|
|
|
50
|
-
|
|
134
|
+
expect(datatablePagerComponent.pagerNextIcon).toBe(
|
|
135
|
+
component.pagerNextIcon
|
|
136
|
+
);
|
|
51
137
|
});
|
|
52
138
|
|
|
53
|
-
it('
|
|
54
|
-
|
|
139
|
+
it('should bind to DataTablePagerComponent pagerPreviousIcon input', () => {
|
|
140
|
+
component.pagerPreviousIcon = 'pager-previous-icon';
|
|
141
|
+
page.detectChangesAndRunQueries();
|
|
142
|
+
const datatablePagerComponent: DataTablePagerComponent =
|
|
143
|
+
page.datatablePager.componentInstance;
|
|
55
144
|
|
|
56
|
-
expect(
|
|
145
|
+
expect(datatablePagerComponent.pagerPreviousIcon).toBe(
|
|
146
|
+
component.pagerPreviousIcon
|
|
147
|
+
);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it('should bind to DataTablePagerComponent size input', () => {
|
|
151
|
+
component.pageSize = 4;
|
|
152
|
+
page.detectChangesAndRunQueries();
|
|
153
|
+
const datatablePagerComponent: DataTablePagerComponent =
|
|
154
|
+
page.datatablePager.componentInstance;
|
|
155
|
+
|
|
156
|
+
expect(datatablePagerComponent.size).toBe(component.pageSize);
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it('should bind to DataTablePagerComponent count input', () => {
|
|
160
|
+
component.rowCount = 40;
|
|
161
|
+
page.detectChangesAndRunQueries();
|
|
162
|
+
const datatablePagerComponent: DataTablePagerComponent =
|
|
163
|
+
page.datatablePager.componentInstance;
|
|
164
|
+
|
|
165
|
+
expect(datatablePagerComponent.count).toBe(component.rowCount);
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it('should bind to DataTablePagerComponent page input', () => {
|
|
169
|
+
component.offset = 200;
|
|
170
|
+
page.detectChangesAndRunQueries();
|
|
171
|
+
const datatablePagerComponent: DataTablePagerComponent =
|
|
172
|
+
page.datatablePager.componentInstance;
|
|
173
|
+
|
|
174
|
+
expect(datatablePagerComponent.page).toBe(201);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it('should show & hide the DataTablePagerComponent', () => {
|
|
178
|
+
component.rowCount = 200;
|
|
179
|
+
component.pageSize = 5;
|
|
180
|
+
page.detectChangesAndRunQueries();
|
|
181
|
+
|
|
182
|
+
expect(page.datatablePager.nativeElement.hidden).toBe(
|
|
183
|
+
false,
|
|
184
|
+
'DataTablePagerComponent should be hidden'
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
component.rowCount = 1;
|
|
188
|
+
component.pageSize = 2;
|
|
189
|
+
page.detectChangesAndRunQueries();
|
|
190
|
+
|
|
191
|
+
expect(page.datatablePager.nativeElement.hidden).toBe(
|
|
192
|
+
true,
|
|
193
|
+
'DataTablePagerComponent should not be hidden'
|
|
194
|
+
);
|
|
57
195
|
});
|
|
58
196
|
});
|
|
59
197
|
|
|
60
|
-
describe('when
|
|
198
|
+
describe('when there is a template', () => {
|
|
199
|
+
it('should not render div.page-count or DatatablePagerComponent', () => {
|
|
200
|
+
component.footerTemplate = { template: component.testTemplate };
|
|
201
|
+
page.detectChangesAndRunQueries();
|
|
61
202
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
203
|
+
expect(page.pageCount).toBeNull();
|
|
204
|
+
expect(page.datatablePager).toBeNull();
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it('should render the template', () => {
|
|
208
|
+
page.detectChangesAndRunQueries();
|
|
209
|
+
component.footerTemplate = { template: component.testTemplate };
|
|
210
|
+
page.detectChangesAndRunQueries();
|
|
66
211
|
|
|
67
|
-
|
|
212
|
+
expect(page.templateList).not.toBeNull();
|
|
68
213
|
});
|
|
69
214
|
|
|
70
|
-
it('
|
|
71
|
-
|
|
215
|
+
it('should give the template proper context', () => {
|
|
216
|
+
component.footerTemplate = { template: component.testTemplate };
|
|
217
|
+
component.rowCount = 12;
|
|
218
|
+
component.pageSize = 1;
|
|
219
|
+
component.selectedCount = 4;
|
|
220
|
+
component.offset = 0;
|
|
221
|
+
page.detectChangesAndRunQueries();
|
|
222
|
+
const listItems = page.templateList.queryAll(By.css('li'));
|
|
72
223
|
|
|
73
|
-
expect(
|
|
224
|
+
expect(listItems[0].nativeElement).toHaveText('rowCount 12');
|
|
225
|
+
expect(listItems[1].nativeElement).toHaveText('pageSize 1');
|
|
226
|
+
expect(listItems[2].nativeElement).toHaveText('selectedCount 4');
|
|
227
|
+
expect(listItems[3].nativeElement).toHaveText('curPage 1');
|
|
228
|
+
expect(listItems[4].nativeElement).toHaveText('offset 0');
|
|
74
229
|
});
|
|
75
230
|
});
|
|
76
231
|
});
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* we test DatatableFooterComponent by embedding it in a
|
|
235
|
+
* test host component
|
|
236
|
+
*/
|
|
237
|
+
@Component({
|
|
238
|
+
template: `
|
|
239
|
+
<datatable-footer
|
|
240
|
+
[rowCount]="rowCount"
|
|
241
|
+
[pageSize]="pageSize"
|
|
242
|
+
[offset]="offset"
|
|
243
|
+
[footerHeight]="footerHeight"
|
|
244
|
+
[footerTemplate]="footerTemplate"
|
|
245
|
+
[totalMessage]="totalMessage"
|
|
246
|
+
[pagerLeftArrowIcon]="pagerLeftArrowIcon"
|
|
247
|
+
[pagerRightArrowIcon]="pagerRightArrowIcon"
|
|
248
|
+
[pagerPreviousIcon]="pagerPreviousIcon"
|
|
249
|
+
[selectedCount]="selectedCount"
|
|
250
|
+
[selectedMessage]="selectedMessage"
|
|
251
|
+
[pagerNextIcon]="pagerNextIcon"
|
|
252
|
+
(page)="onPageEvent($event)">
|
|
253
|
+
</datatable-footer>
|
|
254
|
+
|
|
255
|
+
<ng-template
|
|
256
|
+
#testTemplate
|
|
257
|
+
let-rowCount="rowCount"
|
|
258
|
+
let-pageSize="pageSize"
|
|
259
|
+
let-selectedCount="selectedCount"
|
|
260
|
+
let-curPage="curPage"
|
|
261
|
+
let-offset="offset">
|
|
262
|
+
<ul id="template-list">
|
|
263
|
+
<li>rowCount {{rowCount}}</li>
|
|
264
|
+
<li>pageSize {{pageSize}}</li>
|
|
265
|
+
<li>selectedCount {{selectedCount}}</li>
|
|
266
|
+
<li>curPage {{curPage}}</li>
|
|
267
|
+
<li>offset {{offset}}</li>
|
|
268
|
+
</ul>
|
|
269
|
+
</ng-template>
|
|
270
|
+
`
|
|
271
|
+
})
|
|
272
|
+
class TestFixtureComponent {
|
|
273
|
+
footerHeight: number;
|
|
274
|
+
rowCount: number = 100;
|
|
275
|
+
pageSize = 1;
|
|
276
|
+
offset = 0;
|
|
277
|
+
pagerLeftArrowIcon: string;
|
|
278
|
+
pagerRightArrowIcon: string;
|
|
279
|
+
pagerPreviousIcon: string;
|
|
280
|
+
pagerNextIcon: string;
|
|
281
|
+
totalMessage: string;
|
|
282
|
+
footerTemplate: { template: TemplateRef<any> };
|
|
283
|
+
selectedCount: number;
|
|
284
|
+
selectedMessage: string;
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* establishes a reference to a test template that can
|
|
288
|
+
* selectively be passed to the DatatableFooterComponent
|
|
289
|
+
* in these unit tests
|
|
290
|
+
*/
|
|
291
|
+
@ViewChild('testTemplate', { read: TemplateRef })
|
|
292
|
+
testTemplate: TemplateRef<any>;
|
|
293
|
+
|
|
294
|
+
onPageEvent() {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* we use a mock DataTablePagerComponent when testing
|
|
301
|
+
* the DataTableFooterComponent
|
|
302
|
+
*/
|
|
303
|
+
@Component({
|
|
304
|
+
selector: 'datatable-pager',
|
|
305
|
+
template: ''
|
|
306
|
+
})
|
|
307
|
+
class DataTablePagerComponentMock {
|
|
308
|
+
@Input() pagerLeftArrowIcon: string;
|
|
309
|
+
@Input() pagerRightArrowIcon: string;
|
|
310
|
+
@Input() pagerPreviousIcon: string;
|
|
311
|
+
@Input() pagerNextIcon: string;
|
|
312
|
+
@Input() page: number;
|
|
313
|
+
@Input() size: number;
|
|
314
|
+
@Input() count: number;
|
|
315
|
+
|
|
316
|
+
@Output() change: EventEmitter<any> = new EventEmitter();
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
function setupTest() {
|
|
320
|
+
return TestBed.configureTestingModule({
|
|
321
|
+
declarations: [
|
|
322
|
+
TestFixtureComponent,
|
|
323
|
+
DataTableFooterComponent,
|
|
324
|
+
DataTablePagerComponentMock
|
|
325
|
+
]
|
|
326
|
+
})
|
|
327
|
+
.compileComponents()
|
|
328
|
+
.then(() => {
|
|
329
|
+
fixture = TestBed.createComponent(TestFixtureComponent);
|
|
330
|
+
component = fixture.componentInstance;
|
|
331
|
+
page = new Page();
|
|
332
|
+
page.detectChangesAndRunQueries();
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* a Page is a collection of references to DebugElements. it
|
|
338
|
+
* makes for cleaner testing
|
|
339
|
+
*/
|
|
340
|
+
class Page {
|
|
341
|
+
datatableFooter: DebugElement;
|
|
342
|
+
datatableFooterInner: DebugElement;
|
|
343
|
+
templateList: DebugElement;
|
|
344
|
+
pageCount: DebugElement;
|
|
345
|
+
datatablePager: DebugElement;
|
|
346
|
+
|
|
347
|
+
detectChangesAndRunQueries() {
|
|
348
|
+
fixture.detectChanges();
|
|
349
|
+
|
|
350
|
+
const de = fixture.debugElement;
|
|
351
|
+
|
|
352
|
+
this.datatableFooter = de.query(By.css('datatable-footer'));
|
|
353
|
+
this.datatableFooterInner = de.query(By.css('.datatable-footer-inner'));
|
|
354
|
+
this.templateList = de.query(By.css('#template-list'));
|
|
355
|
+
this.pageCount = de.query(By.css('.page-count'));
|
|
356
|
+
this.datatablePager = de.query(By.css('datatable-pager'));
|
|
357
|
+
}
|
|
358
|
+
}
|