@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.
Files changed (50) hide show
  1. package/.npmignore +6 -0
  2. package/config/deploy.js +2 -2
  3. package/config/karma.conf.js +5 -0
  4. package/package.json +2 -1
  5. package/release/components/body/body-group-header.directive.d.ts +4 -5
  6. package/release/components/body/body-group-header.directive.js +4 -5
  7. package/release/components/body/body-group-header.directive.js.map +1 -1
  8. package/release/components/body/body-row.component.js +1 -1
  9. package/release/components/body/body-row.component.js.map +1 -1
  10. package/release/components/body/body.component.d.ts +1 -1
  11. package/release/components/body/body.component.js +9 -6
  12. package/release/components/body/body.component.js.map +1 -1
  13. package/release/components/datatable.component.css +7 -2
  14. package/release/components/datatable.component.d.ts +1 -1
  15. package/release/components/footer/pager.component.js +1 -1
  16. package/release/components/footer/pager.component.js.map +1 -1
  17. package/release/components/footer/pager.component.metadata.json +1 -1
  18. package/release/components/header/header-cell.component.js +2 -1
  19. package/release/components/header/header-cell.component.js.map +1 -1
  20. package/release/components/header/header-cell.component.metadata.json +1 -1
  21. package/release/components/header/header.component.js +1 -0
  22. package/release/components/header/header.component.js.map +1 -1
  23. package/release/directives/resizeable.directive.js +5 -2
  24. package/release/directives/resizeable.directive.js.map +1 -1
  25. package/release/index.css +8 -3
  26. package/release/index.js +51 -54
  27. package/release/index.min.js +1 -1
  28. package/release/index.min.js.map +1 -1
  29. package/release/utils/column.d.ts +0 -4
  30. package/release/utils/column.js +0 -10
  31. package/release/utils/column.js.map +1 -1
  32. package/release/utils/column.metadata.json +1 -1
  33. package/release/utils/math.js +1 -1
  34. package/release/utils/math.js.map +1 -1
  35. package/src/components/body/body-group-header.directive.ts +5 -6
  36. package/src/components/body/body-row.component.ts +2 -2
  37. package/src/components/body/body.component.ts +8 -6
  38. package/src/components/datatable.component.scss +14 -1
  39. package/src/components/datatable.component.ts +2 -2
  40. package/src/components/footer/footer.component.spec.ts +329 -47
  41. package/src/components/footer/pager.component.ts +10 -0
  42. package/src/components/header/header-cell.component.ts +2 -1
  43. package/src/components/header/header.component.ts +1 -0
  44. package/src/directives/resizeable.directive.ts +4 -2
  45. package/src/utils/column-prop-getters.spec.ts +44 -0
  46. package/src/utils/column.ts +0 -12
  47. package/src/utils/math.ts +1 -1
  48. package/test/index.ts +1 -0
  49. package/test/jasmine-matchers.d.ts +12 -0
  50. package/test/jasmine-matchers.ts +70 -0
@@ -27,7 +27,3 @@ export declare function columnsByPinArr(val: any): {
27
27
  type: string;
28
28
  columns: any;
29
29
  }[];
30
- export declare function allColumnsByPinArr(val: any): {
31
- type: string;
32
- columns: any;
33
- }[];
@@ -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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","file":"column.js","sourceRoot":""}
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"},"allColumnsByPinArr":{"__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"},"allColumnsByPinArr":{"__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"}}}]
@@ -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":"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","file":"math.js","sourceRoot":""}
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,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;YACnB,CAAC;SACF;IACH,CAAC;IAED,IAAM,WAAW,GAAG,EAAE,CAAC;IACvB,IAAI,cAAc,GAAG,QAAQ,CAAC;IAE9B,0DAA0D;IAC1D,GAAG,CAAC;QACF,IAAM,iBAAiB,GAAG,cAAc,GAAG,aAAa,CAAC;QACzD,cAAc,GAAG,CAAC,CAAC;QAEnB,GAAG,CAAA,CAAC,IAAM,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;YAC9B,GAAG,CAAA,CAAiB,UAAiB,EAAjB,KAAA,WAAW,CAAC,IAAI,CAAC,EAAjB,cAAiB,EAAjB,IAAiB;gBAAjC,IAAM,MAAM,SAAA;gBACd,0EAA0E;gBAC1E,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACtD,IAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAI,MAAM,CAAC,QAAQ,GAAG,iBAAiB,CAAC;oBACrE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAChE,cAAc,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;wBAC7C,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;wBAC/B,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;oBAClC,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;oBAC1B,CAAC;gBACH,CAAC;aACF;QACH,CAAC;IACH,CAAC,QAAQ,cAAc,KAAK,CAAC,EAAE;AACjC,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,+BACE,UAAiB,EACjB,aAAqB,EACrB,QAAgB,EAChB,UAAmB,EACnB,eAA6B;IAA7B,gCAAA,EAAA,qBAA6B;IAE7B,IAAM,eAAe,GAAG,UAAU;SAC/B,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC;SACtC,MAAM,CAAC,UAAC,CAAC;QACR,MAAM,CAAC,CAAC,CAAC,aAAa,KAAK,KAAK,CAAC;IACnC,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,CAAiB,UAAe,EAAf,mCAAe,EAAf,6BAAe,EAAf,IAAe;QAA/B,IAAM,MAAM,wBAAA;QACf,EAAE,CAAA,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACtB,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;QACnC,CAAC;KACF;IAED,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAC/B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,YAAY,GAAG,eAAe,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAChE,IAAI,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;IAClD,IAAM,gBAAgB,GAAU,EAAE,CAAC;IAEnC,8BAA8B;IAC9B,GAAG,CAAC;QACF,sBAAsB,GAAG,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC;QACjE,aAAa,GAAG,YAAY,IAAI,aAAa,CAAC;QAE9C,GAAG,CAAC,CAAiB,UAAe,EAAf,mCAAe,EAAf,6BAAe,EAAf,IAAe;YAA/B,IAAM,MAAM,wBAAA;YACf,EAAE,CAAC,CAAC,aAAa,IAAI,UAAU,CAAC,CAAC,CAAC;gBAChC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC;YACtE,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,IAAM,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,GAAG,sBAAsB,CAAC;gBAE3E,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACjD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAC/B,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC;gBAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACxD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAC/B,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC;gBAAC,IAAI,CAAC,CAAC;oBACN,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;gBACzB,CAAC;YACH,CAAC;YAED,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;SAC1C;QAED,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAC3C,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;QAC9C,sBAAsB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;IAC5D,CAAC,QAAQ,cAAc,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/D,CAAC;AAtDD,sDAsDC;AAED;;GAEG;AACH,gCAAgC,eAAsB,EAAE,gBAAuB;IAC7E,GAAG,CAAA,CAAiB,UAAgB,EAAhB,qCAAgB,EAAhB,8BAAgB,EAAhB,IAAgB;QAAhC,IAAM,MAAM,yBAAA;QACd,IAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9C,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAClC;AACH,CAAC;AAED;;GAEG;AACH,yBAAyB,UAAe,EAAE,eAA6B;IAA7B,gCAAA,EAAA,qBAA6B;IACrE,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,GAAG,CAAA,CAAiB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU;QAA1B,IAAM,MAAM,mBAAA;QACZ,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;KACrD;IAED,MAAM,CAAC,YAAY,CAAC;AACtB,CAAC","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
- * The detail row height is required especially
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
- * Group visbility was toggled.
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
- * API method to expand all groups.
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
- * API method to collapse all groups.
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
- allColumnsByPinArr, columnsByPin, columnGroupWidths, columnsByPinArr, translateXY, Keys
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 = allColumnsByPinArr(this._columns);
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 rowHeight = this.rowHeight;
403
+ let height;
404
404
 
405
405
  // if its a function return it
406
406
  if (typeof this.rowHeight === 'function') {
407
- rowHeight = this.rowHeight(row);
407
+ height = this.rowHeight(row);
408
+ } else {
409
+ height = this.rowHeight;
408
410
  }
409
411
 
410
- return rowHeight;
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 - 1;
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
- * - `chkbox`
310
+ * - `checkbox`
311
311
  * - `multiClick`
312
312
  * - `cell`
313
313
  *
@@ -1,76 +1,358 @@
1
1
  import {
2
- async,
3
- TestBed
4
- } from '@angular/core/testing';
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
- DataTableFooterComponent,
8
- DataTablePagerComponent
9
- } from '.';
10
- import {By} from "@angular/platform-browser";
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
- let fixture: any;
14
- let component: DataTableFooterComponent;
15
- let element;
16
-
17
- // provide our implementations or mocks to the dependency injector
18
- beforeEach(() => {
19
- TestBed.configureTestingModule({
20
- declarations: [
21
- DataTableFooterComponent,
22
- DataTablePagerComponent
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
- beforeEach(async(() => {
28
- TestBed.compileComponents().then(() => {
29
- fixture = TestBed.createComponent(DataTableFooterComponent);
30
- component = fixture.componentInstance;
31
- element = fixture.nativeElement;
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
- describe('fixture', () => {
36
- it('component is created', () => {
37
- expect(component).toBeTruthy();
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 the component has a selectionMessage set', () => {
55
+ describe('when there is no template', () => {
56
+ it('should not render a template', () => {
57
+ component.footerTemplate = undefined;
58
+ page.detectChangesAndRunQueries();
42
59
 
43
- beforeEach(() => {
44
- // setup for the template
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 = 3;
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
- fixture.detectChanges();
134
+ expect(datatablePagerComponent.pagerNextIcon).toBe(
135
+ component.pagerNextIcon
136
+ );
51
137
  });
52
138
 
53
- it('then the selectionCount is shown', () => {
54
- let selectedElement = fixture.debugElement.query(By.css('.page-count>span'));
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(selectedElement.nativeElement.innerHTML.trim()).toBe('3 selected /');
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 the component does not have a selectionMessage set', () => {
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
- beforeEach(() => {
63
- // setup for the template
64
- component.rowCount = 9;
65
- component.selectedCount = 3;
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
- fixture.detectChanges();
212
+ expect(page.templateList).not.toBeNull();
68
213
  });
69
214
 
70
- it('then the selectionCount is shown', () => {
71
- let selectedElement = fixture.debugElement.query(By.css('.page-count>span'));
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(selectedElement).toBeNull();
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
+ }