@acorex/components 20.4.7 → 20.4.9

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.
@@ -37,6 +37,12 @@ class AXBaseDataTable extends MXBaseComponent {
37
37
  * @defaultValue `parentId`
38
38
  */
39
39
  this.parentField = undefined;
40
+ /**
41
+ * Field name on each row that indicates whether the row has children (for showing expand icon).
42
+ *
43
+ * @defaultValue `hasChild`
44
+ */
45
+ this.hasChildrenField = 'hasChild';
40
46
  this.selectedRowsChange = new EventEmitter();
41
47
  this._selectedRows = signal([], ...(ngDevMode ? [{ debugName: "_selectedRows" }] : []));
42
48
  }
@@ -140,6 +146,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
140
146
  type: Input
141
147
  }], parentField: [{
142
148
  type: Input
149
+ }], hasChildrenField: [{
150
+ type: Input
143
151
  }], rowDetailsTemplate: [{
144
152
  type: Input
145
153
  }], selectedRowsChange: [{
@@ -361,7 +369,7 @@ class AXDataTableTextColumnComponent extends AXDataTableColumnComponent {
361
369
  <ng-template #header>{{ caption }}</ng-template>
362
370
  <ng-template #cell let-row>
363
371
  <div class="ax-flex ax-items-center ax-gap-2">
364
- @if (expandHandler) {
372
+ @if (expandHandler && (row.data?.[grid.hasChildrenField] !== false || (row.data?.children?.length ?? 0) > 0)) {
365
373
  <div
366
374
  (click)="handleExpandRow(row)"
367
375
  class="ax-expand-handler"
@@ -399,7 +407,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
399
407
  <ng-template #header>{{ caption }}</ng-template>
400
408
  <ng-template #cell let-row>
401
409
  <div class="ax-flex ax-items-center ax-gap-2">
402
- @if (expandHandler) {
410
+ @if (expandHandler && (row.data?.[grid.hasChildrenField] !== false || (row.data?.children?.length ?? 0) > 0)) {
403
411
  <div
404
412
  (click)="handleExpandRow(row)"
405
413
  class="ax-expand-handler"
@@ -1016,6 +1024,7 @@ class AXRowExpandColumnComponent extends AXDataTableColumnComponent {
1016
1024
  ], viewQueries: [{ propertyName: "_cellTemplate", first: true, predicate: ["cell"], descendants: true }, { propertyName: "_contentHeaderTemplate", first: true, predicate: ["header"], descendants: true }, { propertyName: "_contentFooterTemplate", first: true, predicate: ["footer"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
1017
1025
  <ng-template #header></ng-template>
1018
1026
  <ng-template #cell let-row>
1027
+ @if (row.data?.[grid.hasChildrenField] !== false || (row.data?.children?.length ?? 0) > 0) {
1019
1028
  <div
1020
1029
  (click)="handleExpandRow(row)"
1021
1030
  class="ax-expand-handler"
@@ -1031,6 +1040,7 @@ class AXRowExpandColumnComponent extends AXDataTableColumnComponent {
1031
1040
  }
1032
1041
  }
1033
1042
  </div>
1043
+ }
1034
1044
  </ng-template>
1035
1045
  <ng-template #footer></ng-template>
1036
1046
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
@@ -1042,6 +1052,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
1042
1052
  template: `
1043
1053
  <ng-template #header></ng-template>
1044
1054
  <ng-template #cell let-row>
1055
+ @if (row.data?.[grid.hasChildrenField] !== false || (row.data?.children?.length ?? 0) > 0) {
1045
1056
  <div
1046
1057
  (click)="handleExpandRow(row)"
1047
1058
  class="ax-expand-handler"
@@ -1057,6 +1068,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
1057
1068
  }
1058
1069
  }
1059
1070
  </div>
1071
+ }
1060
1072
  </ng-template>
1061
1073
  <ng-template #footer></ng-template>
1062
1074
  `,
@@ -1747,10 +1759,12 @@ class AXDataTableComponent extends AXBaseDataTable {
1747
1759
  });
1748
1760
  if (expandedItem[this.getDataSourceKey()] === item[this.getDataSourceKey()]) {
1749
1761
  const isExpanded = !item?.__meta__?.expanded;
1762
+ const nextChildren = children ? this.toggleExpanded(children, expandedItem, item.children || []) : null;
1750
1763
  return {
1751
1764
  ...item,
1752
1765
  __meta__: { expanded: isExpanded, level: expandedItem?.__meta__?.level ?? 0 },
1753
- children: children ? this.toggleExpanded(children, expandedItem, item.children || []) : null,
1766
+ children: nextChildren,
1767
+ [this.hasChildrenField]: nextChildren != null && nextChildren.length > 0,
1754
1768
  };
1755
1769
  }
1756
1770
  else if (item.children) {
@@ -1773,7 +1787,11 @@ class AXDataTableComponent extends AXBaseDataTable {
1773
1787
  newChildren.forEach((child) => {
1774
1788
  child.__meta__ = { ...child.__meta__, level: (item.__meta__?.level || 0) + 1 };
1775
1789
  });
1776
- return { ...item, children: cloneDeep(newChildren) };
1790
+ return {
1791
+ ...item,
1792
+ children: cloneDeep(newChildren),
1793
+ [this.hasChildrenField]: newChildren.length > 0,
1794
+ };
1777
1795
  }
1778
1796
  else if (item.children) {
1779
1797
  return { ...item, children: this.updateChildren(item.children, id, newChildren) };
@@ -2178,7 +2196,7 @@ class AXDataTableComponent extends AXBaseDataTable {
2178
2196
  }
2179
2197
  }
2180
2198
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDataTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2181
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXDataTableComponent, isStandalone: true, selector: "ax-data-table", inputs: { dataSource: "dataSource", selectedRows: "selectedRows", parentField: "parentField", rowDetailsTemplate: "rowDetailsTemplate", title: "title", rowTemplate: "rowTemplate", emptyTemplate: "emptyTemplate", noDataTemplate: "noDataTemplate", alternative: "alternative", showHeader: "showHeader", fixedHeader: "fixedHeader", showFooter: "showFooter", fixedFooter: "fixedFooter", itemHeight: "itemHeight", allowReordering: "allowReordering", paging: "paging", fetchDataMode: "fetchDataMode", loading: "loading", focusedRow: "focusedRow" }, outputs: { selectedRowsChange: "selectedRowsChange", focusedRowChange: "focusedRowChange", onRowClick: "onRowClick", onRowDbClick: "onRowDbClick", onColumnsOrderChanged: "onColumnsOrderChanged", onColumnSizeChanged: "onColumnSizeChanged", onPageChanged: "onPageChanged" }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [
2199
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXDataTableComponent, isStandalone: true, selector: "ax-data-table", inputs: { dataSource: "dataSource", selectedRows: "selectedRows", parentField: "parentField", hasChildrenField: "hasChildrenField", rowDetailsTemplate: "rowDetailsTemplate", title: "title", rowTemplate: "rowTemplate", emptyTemplate: "emptyTemplate", noDataTemplate: "noDataTemplate", alternative: "alternative", showHeader: "showHeader", fixedHeader: "fixedHeader", showFooter: "showFooter", fixedFooter: "fixedFooter", itemHeight: "itemHeight", allowReordering: "allowReordering", paging: "paging", fetchDataMode: "fetchDataMode", loading: "loading", focusedRow: "focusedRow" }, outputs: { selectedRowsChange: "selectedRowsChange", focusedRowChange: "focusedRowChange", onRowClick: "onRowClick", onRowDbClick: "onRowDbClick", onColumnsOrderChanged: "onColumnsOrderChanged", onColumnSizeChanged: "onColumnSizeChanged", onPageChanged: "onPageChanged" }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [
2182
2200
  { provide: AXBaseDataTable, useExisting: AXDataTableComponent },
2183
2201
  AXUnsubscriber,
2184
2202
  { provide: AXComponent, useExisting: AXDataTableComponent },
@@ -2186,7 +2204,7 @@ class AXDataTableComponent extends AXBaseDataTable {
2186
2204
  }
2187
2205
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDataTableComponent, decorators: [{
2188
2206
  type: Component,
2189
- args: [{ selector: 'ax-data-table', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { ngSkipHydration: 'true' }, inputs: ['dataSource', 'selectedRows', 'parentField', 'rowDetailsTemplate', 'title'], outputs: ['selectedRowsChange'], providers: [
2207
+ args: [{ selector: 'ax-data-table', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { ngSkipHydration: 'true' }, inputs: ['dataSource', 'selectedRows', 'parentField', 'hasChildrenField', 'rowDetailsTemplate', 'title'], outputs: ['selectedRowsChange'], providers: [
2190
2208
  { provide: AXBaseDataTable, useExisting: AXDataTableComponent },
2191
2209
  AXUnsubscriber,
2192
2210
  { provide: AXComponent, useExisting: AXDataTableComponent },