@c10t/nice-component-library 0.0.22 → 0.0.24

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.
@@ -169,6 +169,8 @@ var AlignEnum;
169
169
  class ColumnModel {
170
170
  columnDef = '';
171
171
  header;
172
+ title = (e) => `${e}`;
173
+ cell = (e) => `${e}`;
172
174
  // set default theo ly thuyet, phai gan lai
173
175
  align = AlignEnum.LEFT;
174
176
  alignHeader;
@@ -203,8 +205,8 @@ class ColumnModel {
203
205
  displayKey;
204
206
  mappingConfig = {};
205
207
  searchFn;
206
- title = (e) => `${e}`;
207
- cell = (e) => `${e}`;
208
+ rowSpan = 1;
209
+ colSpan = 1;
208
210
  }
209
211
 
210
212
  class BaseModel {
@@ -954,6 +956,9 @@ class UtilsService {
954
956
  if (!!onErrorFunc) {
955
957
  onErrorFunc(error1);
956
958
  }
959
+ if (error1 === '0') {
960
+ this.showErrorToarst('error.serverNotResponse');
961
+ }
957
962
  else {
958
963
  this.showError(error1);
959
964
  }
@@ -1491,6 +1496,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
1491
1496
 
1492
1497
  class TableService {
1493
1498
  static DEFAULT_NO_IMAGE_AVAILABLE = 'data:image/png;base64, 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';
1499
+ static getRequired(column) {
1500
+ return typeof (column.isRequired) === 'function' ? column.isRequired() : (column.isRequired ?? false);
1501
+ }
1502
+ static getHeaderColumns(row, index, buttons) {
1503
+ let displayColumn = row.map(c => c.columnDef);
1504
+ if (index === 0 && buttons && buttons.length > 0) {
1505
+ displayColumn = displayColumn.concat(buttons.map(b => b.columnDef));
1506
+ }
1507
+ return displayColumn;
1508
+ }
1509
+ static toggleSelectAll(values, $event) {
1510
+ const checked = $event.$event.checked;
1511
+ values.forEach(v => {
1512
+ v.checked = checked;
1513
+ });
1514
+ if ($event.columnChange.onHeaderCellValueChange) {
1515
+ $event.columnChange.onHeaderCellValueChange(checked);
1516
+ }
1517
+ return checked;
1518
+ }
1494
1519
  static displayHeaderName(column, moduleName) {
1495
1520
  if (typeof (column.header) === 'string') {
1496
1521
  return moduleName + '.table.header.' + column.header;
@@ -1576,6 +1601,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
1576
1601
  args: [{ providedIn: 'root' }]
1577
1602
  }] });
1578
1603
 
1604
+ class CvaTableHeaderCellComponent {
1605
+ TableService = TableService;
1606
+ ColumnTypeEnum = ColumnTypeEnum;
1607
+ moduleName = '';
1608
+ column = new ColumnModel();
1609
+ selectAllChecked = false;
1610
+ changeSelectAll = new EventEmitter();
1611
+ ngOnChanges(changes) {
1612
+ if ('selectAllChecked' in changes) {
1613
+ this.selectAllChecked = changes['selectAllChecked'].currentValue;
1614
+ }
1615
+ }
1616
+ onSelectAllChange($event) {
1617
+ this.changeSelectAll.emit({ $event, columnChange: this.column });
1618
+ }
1619
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaTableHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1620
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaTableHeaderCellComponent, isStandalone: false, selector: "cva-table-header-cell", inputs: { moduleName: "moduleName", column: "column", selectAllChecked: "selectAllChecked" }, outputs: { changeSelectAll: "changeSelectAll" }, usesOnChanges: true, ngImport: i0, template: `
1621
+ <div [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
1622
+ fxLayout="row"
1623
+ [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
1624
+ <div class="header-text-area">
1625
+ {{ TableService.displayHeaderName(column, moduleName) | translate }}
1626
+ <span style="color: red">{{ TableService.getRequired(column) ? '*' : '' }}</span>
1627
+ </div>
1628
+ <mat-checkbox
1629
+ *ngIf="TableService.getColumnType(column, null)===ColumnTypeEnum.CHECKBOX && !column.isNotShowHeaderCheckbox"
1630
+ color="primary" class="box-select-all margin-right-5"
1631
+ [(ngModel)]="selectAllChecked"
1632
+ (change)="onSelectAllChange($event)">
1633
+ </mat-checkbox>
1634
+ </div>
1635
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
1636
+ }
1637
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaTableHeaderCellComponent, decorators: [{
1638
+ type: Component,
1639
+ args: [{
1640
+ selector: 'cva-table-header-cell',
1641
+ standalone: false,
1642
+ template: `
1643
+ <div [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
1644
+ fxLayout="row"
1645
+ [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
1646
+ <div class="header-text-area">
1647
+ {{ TableService.displayHeaderName(column, moduleName) | translate }}
1648
+ <span style="color: red">{{ TableService.getRequired(column) ? '*' : '' }}</span>
1649
+ </div>
1650
+ <mat-checkbox
1651
+ *ngIf="TableService.getColumnType(column, null)===ColumnTypeEnum.CHECKBOX && !column.isNotShowHeaderCheckbox"
1652
+ color="primary" class="box-select-all margin-right-5"
1653
+ [(ngModel)]="selectAllChecked"
1654
+ (change)="onSelectAllChange($event)">
1655
+ </mat-checkbox>
1656
+ </div>
1657
+ `,
1658
+ }]
1659
+ }], propDecorators: { moduleName: [{
1660
+ type: Input
1661
+ }], column: [{
1662
+ type: Input
1663
+ }], selectAllChecked: [{
1664
+ type: Input
1665
+ }], changeSelectAll: [{
1666
+ type: Output
1667
+ }] } });
1668
+
1579
1669
  class ValidatorService {
1580
1670
  static invalid(control) {
1581
1671
  if (!control || !control.dirty) {
@@ -2444,6 +2534,10 @@ class CvaTableComponent {
2444
2534
  config;
2445
2535
  cdRef;
2446
2536
  loaderService;
2537
+ ColumnTypeEnum = ColumnTypeEnum;
2538
+ AlignEnum = AlignEnum;
2539
+ IconTypeEnum = IconTypeEnum;
2540
+ TableService = TableService;
2447
2541
  moduleName = '';
2448
2542
  varPaging;
2449
2543
  results = new MatTableDataSource([]);
@@ -2451,6 +2545,7 @@ class CvaTableComponent {
2451
2545
  buttons = [];
2452
2546
  showTotalPages = 5;
2453
2547
  expandHeaderButton;
2548
+ superHeaders = [];
2454
2549
  pageSizeOptions;
2455
2550
  pagingChange = new EventEmitter(true);
2456
2551
  clickAction = new EventEmitter();
@@ -2483,28 +2578,6 @@ class CvaTableComponent {
2483
2578
  this.varPaging = value;
2484
2579
  }
2485
2580
  }
2486
- get displayedColumns() {
2487
- let columnsDef = this.columns.map(c => c.columnDef);
2488
- if (this.buttons) {
2489
- columnsDef = columnsDef.concat(this.buttons.map(b => b.columnDef));
2490
- }
2491
- // if (!!this.expandHeaderButton) {
2492
- // columnsDef = columnsDef.concat(this.expandHeaderButton.columnDef);
2493
- // }
2494
- return columnsDef;
2495
- }
2496
- get ColumnTypes() {
2497
- return ColumnTypeEnum;
2498
- }
2499
- get IconTypes() {
2500
- return IconTypeEnum;
2501
- }
2502
- get AlignEnum() {
2503
- return AlignEnum;
2504
- }
2505
- get TableService() {
2506
- return TableService;
2507
- }
2508
2581
  isExpandColumn(col) {
2509
2582
  return !!col.isExpandOptionColumn ? col.isExpandOptionColumn() : false;
2510
2583
  }
@@ -2543,14 +2616,6 @@ class CvaTableComponent {
2543
2616
  onDisplayCell(column, cell) {
2544
2617
  return TableService.onDisplayCell(column, cell) && !this.isExpandColumn(column);
2545
2618
  }
2546
- toggleSelectAll(val, col) {
2547
- this.results.data.forEach(v => {
2548
- v.checked = val.checked;
2549
- });
2550
- if (col.onHeaderCellValueChange) {
2551
- col.onHeaderCellValueChange(val.checked);
2552
- }
2553
- }
2554
2619
  toggleSelect(val, result, column) {
2555
2620
  let count = 0;
2556
2621
  this.results.data.forEach(v => {
@@ -2564,7 +2629,7 @@ class CvaTableComponent {
2564
2629
  }
2565
2630
  }
2566
2631
  ngAfterViewChecked() {
2567
- this.getHeaderButtonColspan();
2632
+ this.updateHeaderButtonColspan();
2568
2633
  this.cdRef.detectChanges();
2569
2634
  }
2570
2635
  hasData() {
@@ -2583,9 +2648,8 @@ class CvaTableComponent {
2583
2648
  this.getPage({ pageIndex: this.goToPageNumber - 1, pageSize: this.varPaging.pageSize });
2584
2649
  }
2585
2650
  }
2586
- getHeaderButtonColspan() {
2651
+ updateHeaderButtonColspan() {
2587
2652
  this.buttonColspan = TableService.getHeaderButtonColspan(this.buttons, this.results.data);
2588
- return this.buttonColspan;
2589
2653
  }
2590
2654
  onChangeGoToPageNumber($event) {
2591
2655
  if ($event === null || Number.isNaN($event) || !Number.isSafeInteger($event)) {
@@ -2604,201 +2668,212 @@ class CvaTableComponent {
2604
2668
  }
2605
2669
  }
2606
2670
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaTableComponent, deps: [{ token: InjectTokenNextSolutionsConfig }, { token: i0.ChangeDetectorRef }, { token: LoaderService }], target: i0.ɵɵFactoryTarget.Component });
2607
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaTableComponent, isStandalone: false, selector: "cva-table", inputs: { moduleName: "moduleName", results: "results", columns: "columns", buttons: "buttons", showTotalPages: "showTotalPages", expandHeaderButton: "expandHeaderButton", paging: "paging" }, outputs: { pagingChange: "pagingChange", clickAction: "clickAction", onRowClickAction: "onRowClickAction", onChangeDisplayColumn: "onChangeDisplayColumn" }, providers: [
2671
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaTableComponent, isStandalone: false, selector: "cva-table", inputs: { moduleName: "moduleName", results: "results", columns: "columns", buttons: "buttons", showTotalPages: "showTotalPages", expandHeaderButton: "expandHeaderButton", superHeaders: "superHeaders", paging: "paging" }, outputs: { pagingChange: "pagingChange", clickAction: "clickAction", onRowClickAction: "onRowClickAction", onChangeDisplayColumn: "onChangeDisplayColumn" }, providers: [
2608
2672
  { provide: MatPaginatorIntl, useClass: MultiLanguageTablePaginator },
2609
2673
  ], ngImport: i0, template: `
2610
- <div class="table-responsive">
2611
- <ng-container *ngIf="!!expandHeaderButton">
2612
- <cva-header-expand-button [moduleName]="moduleName" [expandHeaderButton]="expandHeaderButton"
2613
- [columns]="columns" (onChange)="this.onChangeDisplayColumn.emit($event)">
2614
- </cva-header-expand-button>
2615
- </ng-container>
2616
- <table mat-table #table [dataSource]="results" class="mat-elevation-z8 cva-table">
2617
- <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
2618
- <ng-container *matHeaderCellDef>
2619
- <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
2620
- *ngIf="onDisplayHeaderCell(column)"
2621
- [ngSwitch]="TableService.getColumnType(column, null)">
2622
- <div fxLayout="row" *ngSwitchDefault
2623
- class="viewData"
2624
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2625
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
2626
- {{ TableService.displayHeaderName(column, moduleName) | translate }}
2627
- </div>
2628
- <mat-checkbox *ngSwitchCase="ColumnTypes.CHECKBOX"
2629
- color="primary" class="box-select-all" [(ngModel)]="selectAllChecked"
2630
- (change)="toggleSelectAll($event, column)"
2631
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
2632
- </mat-checkbox>
2633
- </th>
2634
- </ng-container>
2635
- <ng-container *matCellDef="let result;">
2636
- <td mat-cell [ngClass]="TableService.getColumnClassName(column, result)"
2637
- *ngIf="onDisplayCell(column, result)"
2638
- [ngSwitch]="TableService.getColumnType(column, result)">
2639
- <div title="{{column.title(result)}}" *ngSwitchDefault
2640
- class="{{TableService.getColumnClassName(column, result)}} viewData"
2641
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
2642
- {{ column.cell(result) }}
2643
- </div>
2644
- <ng-container *ngSwitchCase="ColumnTypes.BUTTON">
2645
- <div *ngIf="!!column.button"
2646
- class="{{TableService.getColumnClassName(column, result)}}"
2647
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2648
- (click)="$event.stopPropagation()">
2649
- <button mat-icon-button color="{{column.button.color}}"
2650
- (click)="onClick(column.button.click, result)"
2651
- disabled="{{column.button.disabled ? column.button.disabled(result) : false}}"
2652
- matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
2653
- class="{{column.button.className}}" [ngSwitch]="TableService.getIconType(column.button)">
2654
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ column.button.icon }}</mat-icon>
2655
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{column.button.icon}}"></i>
2656
- </button>
2657
- </div>
2658
- </ng-container>
2659
- <div class="link viewData"
2660
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2661
- *ngSwitchCase="ColumnTypes.LINK"
2662
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2663
- title="{{column.title(result)}}">
2664
- <a [routerLink]="[column.link(result)]">{{ column.cell(result) }}</a>
2665
- </div>
2666
-
2667
- <div class="label-status viewData"
2668
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2669
- *ngSwitchCase="ColumnTypes.STYLE_CSS"
2670
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2671
- title="{{column.title(result)}}">
2672
- <span [style]="column.style(result)">{{ column.cell(result) }}</span>
2673
- </div>
2674
+ <div class="table-responsive">
2675
+ <ng-container *ngIf="!!expandHeaderButton">
2676
+ <cva-header-expand-button [moduleName]="moduleName" [expandHeaderButton]="expandHeaderButton"
2677
+ [columns]="columns" (onChange)="this.onChangeDisplayColumn.emit($event)">
2678
+ </cva-header-expand-button>
2679
+ </ng-container>
2680
+ <table mat-table #table [dataSource]="results" class="mat-elevation-z8 cva-table">
2681
+ <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
2682
+ <ng-container *matHeaderCellDef>
2683
+ <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
2684
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan"
2685
+ *ngIf="onDisplayHeaderCell(column)">
2686
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
2687
+ [selectAllChecked]="selectAllChecked"
2688
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(this.results.data, $event)">
2689
+ </cva-table-header-cell>
2690
+ </th>
2691
+ </ng-container>
2692
+ <ng-container *matCellDef="let result;">
2693
+ <td mat-cell [ngClass]="TableService.getColumnClassName(column, result)"
2694
+ *ngIf="onDisplayCell(column, result)"
2695
+ [ngSwitch]="TableService.getColumnType(column, result)">
2696
+ <div title="{{column.title(result)}}" *ngSwitchDefault
2697
+ class="{{TableService.getColumnClassName(column, result)}} viewData"
2698
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
2699
+ {{ column.cell(result) }}
2700
+ </div>
2701
+ <ng-container *ngSwitchCase="ColumnTypeEnum.BUTTON">
2702
+ <div *ngIf="!!column.button"
2703
+ class="{{TableService.getColumnClassName(column, result)}}"
2704
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2705
+ (click)="$event.stopPropagation()">
2706
+ <button mat-icon-button color="{{column.button.color}}"
2707
+ (click)="onClick(column.button.click, result)"
2708
+ disabled="{{column.button.disabled ? column.button.disabled(result) : false}}"
2709
+ matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
2710
+ class="{{column.button.className}}"
2711
+ [ngSwitch]="TableService.getIconType(column.button)">
2712
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ column.button.icon }}
2713
+ </mat-icon>
2714
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{column.button.icon}}"></i>
2715
+ </button>
2716
+ </div>
2717
+ </ng-container>
2718
+ <div class="link viewData"
2719
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2720
+ *ngSwitchCase="ColumnTypeEnum.LINK"
2721
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2722
+ title="{{column.title(result)}}">
2723
+ <a [routerLink]="[column?.link(result)]">{{ column.cell(result) }}</a>
2724
+ </div>
2674
2725
 
2675
- <div class="img-view viewData"
2676
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2677
- *ngSwitchCase="ColumnTypes.IMG"
2678
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2679
- title="{{column.title(result)}}">
2680
- <img [src]="column.cell(result) | secure | async" #imgRef
2681
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2682
- </div>
2683
- <div class="img-view viewData"
2684
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2685
- *ngSwitchCase="ColumnTypes.IMG_NO_SECURE"
2686
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2687
- title="{{column.title(result)}}">
2688
- <img [src]="column.cell(result)" #imgRef
2689
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2690
- </div>
2691
- <div *ngSwitchCase="ColumnTypes.BASE64"
2692
- class="img-view viewData"
2693
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2694
- title="{{column.title(result)}}">
2695
- <img [src]="'data:image/png;base64,'+column.cell(result)"
2696
- #base64ImgRef
2697
- (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2698
- </div>
2699
- <ng-container *ngSwitchCase="ColumnTypes.CHECKBOX">
2700
- <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
2701
- *ngIf="column.display ? column.display(result) : true"
2702
- [disabled]="column.disabled ? column.disabled(result) : false"
2703
- (change)="toggleSelect($event, result, column)"
2704
- [fxLayoutAlign]="TableService.alignCellContent(column)">
2705
- </mat-checkbox>
2706
- </ng-container>
2707
- </td>
2708
- </ng-container>
2709
- </ng-container>
2726
+ <div class="label-status viewData"
2727
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2728
+ *ngSwitchCase="ColumnTypeEnum.STYLE_CSS"
2729
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2730
+ title="{{column.title(result)}}">
2731
+ <span [style]="column?.style(result)">{{ column.cell(result) }}</span>
2732
+ </div>
2710
2733
 
2711
- <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
2712
- <ng-container *matHeaderCellDef="let header">
2713
- <!-- [fxFlex]="(isButtonHeader(button) ? headerButtonWidthDefault : getHeaderButtonWidth(i)) + 'px' "-->
2714
- <!-- [fxFlex]="getHeaderButtonWidth(i) + 'px' "-->
2715
- <th mat-header-cell [ngClass]="button.className"
2716
- *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
2717
- (click)="$event.stopPropagation()"
2718
- [attr.colspan]="buttonColspan"
2719
- >
2720
- <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
2721
- <button mat-icon-button
2722
- class="{{button.className}}"
2723
- *ngIf="((btnHeader && btnHeader.display) ? btnHeader.display(header) : false) "
2724
- [disabled]="((btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false) "
2725
- color="{{$any(btnHeader).color}}"
2726
- (click)="onClick($any(btnHeader).click, null)"
2727
- matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
2728
- [ngSwitch]="TableService.getIconType($any(btnHeader))">
2729
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ $any(btnHeader).icon }}</mat-icon>
2730
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
2731
- </button>
2732
- </ng-container>
2733
- <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
2734
- <div title="{{$any(btnHeader) | translate}}"
2735
- class="viewData"
2736
- fxLayout="row"
2737
- fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
2738
- {{ $any(btnHeader) | translate }}
2739
- </div>
2740
- </ng-container>
2741
- </th>
2734
+ <div class="img-view viewData"
2735
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2736
+ *ngSwitchCase="ColumnTypeEnum.IMG"
2737
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2738
+ title="{{column.title(result)}}">
2739
+ <img [src]="column.cell(result) | secure | async" #imgRef
2740
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
2741
+ </div>
2742
+ <div class="img-view viewData"
2743
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2744
+ *ngSwitchCase="ColumnTypeEnum.IMG_NO_SECURE"
2745
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2746
+ title="{{column.title(result)}}">
2747
+ <img [src]="column.cell(result)" #imgRef
2748
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
2749
+ </div>
2750
+ <div *ngSwitchCase="ColumnTypeEnum.BASE64"
2751
+ class="img-view viewData"
2752
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2753
+ title="{{column.title(result)}}">
2754
+ <img [src]="'data:image/png;base64,'+column.cell(result)"
2755
+ #base64ImgRef
2756
+ (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)"
2757
+ alt=""/>
2758
+ </div>
2759
+ <ng-container *ngSwitchCase="ColumnTypeEnum.CHECKBOX">
2760
+ <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
2761
+ *ngIf="column.display ? column.display(result) : true"
2762
+ [disabled]="column.disabled ? column.disabled(result) : false"
2763
+ (change)="toggleSelect($event, result, column)"
2764
+ [fxLayoutAlign]="TableService.alignCellContent(column)">
2765
+ </mat-checkbox>
2766
+ </ng-container>
2767
+ </td>
2768
+ </ng-container>
2769
+ </ng-container>
2742
2770
 
2743
- </ng-container>
2744
- <ng-container *matCellDef="let cell">
2745
- <!-- [fxFlex]="headerButtonWidthDefault + 'px'"-->
2746
- <td mat-cell [ngClass]="button.className"
2747
- *ngIf="TableService.onDisplayButtonCell(button, cell)"
2748
- (click)="$event.stopPropagation()">
2749
- <button mat-icon-button color="{{button.color}}"
2750
- (click)="onClick(button.click, cell)"
2751
- disabled="{{button.disabled ? button.disabled(cell) : false}}"
2752
- matTooltip="{{(button.title ? button.title : '') | translate}}"
2753
- class="{{button.className}}" [ngSwitch]="TableService.getIconType(button)">
2754
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ button.icon }}</mat-icon>
2755
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{button.icon}}"></i>
2756
- </button>
2757
- </td>
2758
- </ng-container>
2759
- </ng-container>
2771
+ <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
2772
+ <ng-container *matHeaderCellDef="let header">
2773
+ <th mat-header-cell [ngClass]="button.className"
2774
+ *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
2775
+ (click)="$event.stopPropagation()"
2776
+ [attr.colspan]="buttonColspan" [attr.rowspan]="superHeaders.length + 1">
2777
+ <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
2778
+ <button mat-icon-button
2779
+ class="{{button.className}}"
2780
+ *ngIf="((btnHeader && btnHeader.display) ? btnHeader.display(header) : false) "
2781
+ [disabled]="((btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false) "
2782
+ color="{{$any(btnHeader).color}}"
2783
+ (click)="onClick($any(btnHeader).click, null)"
2784
+ matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
2785
+ [ngSwitch]="TableService.getIconType($any(btnHeader))">
2786
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ $any(btnHeader).icon }}
2787
+ </mat-icon>
2788
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
2789
+ </button>
2790
+ </ng-container>
2791
+ <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
2792
+ <div title="{{$any(btnHeader) | translate}}"
2793
+ class="viewData"
2794
+ fxLayout="row"
2795
+ fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
2796
+ {{ $any(btnHeader) | translate }}
2797
+ </div>
2798
+ </ng-container>
2799
+ </th>
2800
+ </ng-container>
2801
+ <ng-container *matCellDef="let cell">
2802
+ <td mat-cell [ngClass]="button.className"
2803
+ *ngIf="TableService.onDisplayButtonCell(button, cell)"
2804
+ (click)="$event.stopPropagation()">
2805
+ <button mat-icon-button color="{{button.color}}"
2806
+ (click)="onClick(button.click, cell)"
2807
+ disabled="{{button.disabled ? button.disabled(cell) : false}}"
2808
+ matTooltip="{{(button.title ? button.title : '') | translate}}"
2809
+ class="{{button.className}}" [ngSwitch]="TableService.getIconType(button)">
2810
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ button.icon }}</mat-icon>
2811
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{button.icon}}"></i>
2812
+ </button>
2813
+ </td>
2814
+ </ng-container>
2815
+ </ng-container>
2760
2816
 
2817
+ <ng-container *ngFor="let row of superHeaders">
2818
+ <ng-container *ngFor="let column of row" matColumnDef="{{column.columnDef}}">
2819
+ <ng-container *ngIf="onDisplayHeaderCell(column)">
2820
+ <th mat-header-cell *matHeaderCellDef
2821
+ [ngClass]="TableService.getColumnHeaderClassName(column)"
2822
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan">
2823
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
2824
+ [selectAllChecked]="selectAllChecked"
2825
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(this.results.data, $event)">
2826
+ </cva-table-header-cell>
2827
+ </th>
2828
+ </ng-container>
2829
+ </ng-container>
2830
+ </ng-container>
2761
2831
 
2762
- <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
2763
- <tr mat-row *matRowDef="let result; columns: displayedColumns; let i = index"
2764
- [ngClass]="result.className"
2765
- (click)="onRowClick(result, i)"></tr>
2766
- </table>
2767
- <div *ngIf="!(loaderService.isLoading | async)">
2768
- <div class="paging"
2769
- *ngIf="hasData()"
2770
- fxLayout fxLayoutAlign="space-between center">
2771
- <mat-paginator style-paginator
2772
- [showTotalPages]="showTotalPages"
2773
- [paging]="varPaging"
2774
- (pagingChangeEvent)="getPage($event)"
2775
- [length]="varPaging.totalElements"
2776
- [pageSize]="varPaging.pageSize"
2777
- [pageSizeOptions]="pageSizeOptions"
2778
- [pageIndex]="varPaging.pageNumber - 1">
2779
- </mat-paginator>
2780
- <div class="go-to-page"
2781
- fxLayout fxLayoutGap="0.3rem" fxLayoutAlign="start baseline">
2782
- <mat-label>{{ 'common.gotopage' | translate }}</mat-label>
2783
- <cva-counter-input [(ngModel)]="goToPageNumber"
2784
- (ngModelChange)="onChangeGoToPageNumber($event)"
2785
- (onEnter)="goToPage()"
2786
- [max]="getTotalPage() ? getTotalPage() : 1"
2787
- [min]="1"
2788
- [isFloatLabel]="false"
2789
- [errorMessages]="errorMsg"
2790
- ></cva-counter-input>
2791
- <mat-label style="white-space: nowrap">{{ '/' + getTotalPage() }}</mat-label>
2792
- <button mat-flat-button
2793
- [disabled]="goToPageNumber < 1 || goToPageNumber > getTotalPage()"
2794
- (click)="goToPage()">{{ 'common.go' | translate }}
2795
- </button>
2796
- </div>
2797
- <h2 *ngIf="!hasData()">{{ 'common.no.records.found' | translate }}</h2>
2832
+ <ng-container *ngFor="let row of superHeaders; let rowIndex = index">
2833
+ <tr mat-header-row *matHeaderRowDef="TableService.getHeaderColumns(row, rowIndex, buttons)"></tr>
2834
+ </ng-container>
2835
+ <tr mat-header-row
2836
+ *matHeaderRowDef="TableService.getHeaderColumns(columns, superHeaders.length, buttons)"></tr>
2837
+ <tr mat-row
2838
+ *matRowDef="let result; columns: TableService.getHeaderColumns(columns, 0, buttons); let i = index"
2839
+ [ngClass]="result.className"
2840
+ (click)="onRowClick(result, i)"></tr>
2841
+ </table>
2842
+ <div *ngIf="!(loaderService.isLoading | async)">
2843
+ <div class="paging"
2844
+ *ngIf="hasData()"
2845
+ fxLayout fxLayoutAlign="space-between center">
2846
+ <mat-paginator style-paginator
2847
+ [showTotalPages]="showTotalPages"
2848
+ [paging]="varPaging"
2849
+ (pagingChangeEvent)="getPage($event)"
2850
+ [length]="varPaging.totalElements"
2851
+ [pageSize]="varPaging.pageSize"
2852
+ [pageSizeOptions]="pageSizeOptions"
2853
+ [pageIndex]="varPaging.pageNumber - 1">
2854
+ </mat-paginator>
2855
+ <div class="go-to-page"
2856
+ fxLayout fxLayoutGap="0.3rem" fxLayoutAlign="start baseline">
2857
+ <mat-label>{{ 'common.gotopage' | translate }}</mat-label>
2858
+ <cva-counter-input [(ngModel)]="goToPageNumber"
2859
+ (ngModelChange)="onChangeGoToPageNumber($event)"
2860
+ (onEnter)="goToPage()"
2861
+ [max]="getTotalPage() ? getTotalPage() : 1"
2862
+ [min]="1"
2863
+ [isFloatLabel]="false"
2864
+ [errorMessages]="errorMsg"
2865
+ ></cva-counter-input>
2866
+ <mat-label style="white-space: nowrap">{{ '/' + getTotalPage() }}</mat-label>
2867
+ <button mat-flat-button
2868
+ [disabled]="goToPageNumber < 1 || goToPageNumber > getTotalPage()"
2869
+ (click)="goToPage()">{{ 'common.go' | translate }}
2870
+ </button>
2871
+ </div>
2872
+ <h2 *ngIf="!hasData()">{{ 'common.no.records.found' | translate }}</h2>
2873
+ </div>
2874
+ </div>
2798
2875
  </div>
2799
- </div>
2800
- </div>
2801
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i1$5.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i8$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1$4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: CvaCounterInputComponent, selector: "cva-counter-input", inputs: ["label", "placeholder", "suffixText", "hint", "value", "disabled", "required", "errorMessages", "min", "max", "error", "isDecimal", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "alignNumber", "isFormControl"], outputs: ["onChange", "onEnter"] }, { kind: "directive", type: StylePaginatorDirective, selector: "[style-paginator]", inputs: ["showTotalPages", "paging"], outputs: ["pagingChangeEvent"] }, { kind: "component", type: CvaHeaderExpandButtonComponent, selector: "cva-header-expand-button", inputs: ["expandHeaderButton", "columns", "moduleName"], outputs: ["onChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: SecureImgPipe, name: "secure" }] });
2876
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i1$5.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i8$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1$4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: CvaTableHeaderCellComponent, selector: "cva-table-header-cell", inputs: ["moduleName", "column", "selectAllChecked"], outputs: ["changeSelectAll"] }, { kind: "component", type: CvaCounterInputComponent, selector: "cva-counter-input", inputs: ["label", "placeholder", "suffixText", "hint", "value", "disabled", "required", "errorMessages", "min", "max", "error", "isDecimal", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "alignNumber", "isFormControl"], outputs: ["onChange", "onEnter"] }, { kind: "directive", type: StylePaginatorDirective, selector: "[style-paginator]", inputs: ["showTotalPages", "paging"], outputs: ["pagingChangeEvent"] }, { kind: "component", type: CvaHeaderExpandButtonComponent, selector: "cva-header-expand-button", inputs: ["expandHeaderButton", "columns", "moduleName"], outputs: ["onChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: SecureImgPipe, name: "secure" }] });
2802
2877
  }
2803
2878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaTableComponent, decorators: [{
2804
2879
  type: Component,
@@ -2806,198 +2881,209 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
2806
2881
  selector: 'cva-table',
2807
2882
  standalone: false,
2808
2883
  template: `
2809
- <div class="table-responsive">
2810
- <ng-container *ngIf="!!expandHeaderButton">
2811
- <cva-header-expand-button [moduleName]="moduleName" [expandHeaderButton]="expandHeaderButton"
2812
- [columns]="columns" (onChange)="this.onChangeDisplayColumn.emit($event)">
2813
- </cva-header-expand-button>
2814
- </ng-container>
2815
- <table mat-table #table [dataSource]="results" class="mat-elevation-z8 cva-table">
2816
- <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
2817
- <ng-container *matHeaderCellDef>
2818
- <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
2819
- *ngIf="onDisplayHeaderCell(column)"
2820
- [ngSwitch]="TableService.getColumnType(column, null)">
2821
- <div fxLayout="row" *ngSwitchDefault
2822
- class="viewData"
2823
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2824
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
2825
- {{ TableService.displayHeaderName(column, moduleName) | translate }}
2826
- </div>
2827
- <mat-checkbox *ngSwitchCase="ColumnTypes.CHECKBOX"
2828
- color="primary" class="box-select-all" [(ngModel)]="selectAllChecked"
2829
- (change)="toggleSelectAll($event, column)"
2830
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
2831
- </mat-checkbox>
2832
- </th>
2833
- </ng-container>
2834
- <ng-container *matCellDef="let result;">
2835
- <td mat-cell [ngClass]="TableService.getColumnClassName(column, result)"
2836
- *ngIf="onDisplayCell(column, result)"
2837
- [ngSwitch]="TableService.getColumnType(column, result)">
2838
- <div title="{{column.title(result)}}" *ngSwitchDefault
2839
- class="{{TableService.getColumnClassName(column, result)}} viewData"
2840
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
2841
- {{ column.cell(result) }}
2842
- </div>
2843
- <ng-container *ngSwitchCase="ColumnTypes.BUTTON">
2844
- <div *ngIf="!!column.button"
2845
- class="{{TableService.getColumnClassName(column, result)}}"
2846
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2847
- (click)="$event.stopPropagation()">
2848
- <button mat-icon-button color="{{column.button.color}}"
2849
- (click)="onClick(column.button.click, result)"
2850
- disabled="{{column.button.disabled ? column.button.disabled(result) : false}}"
2851
- matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
2852
- class="{{column.button.className}}" [ngSwitch]="TableService.getIconType(column.button)">
2853
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ column.button.icon }}</mat-icon>
2854
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{column.button.icon}}"></i>
2855
- </button>
2856
- </div>
2857
- </ng-container>
2858
- <div class="link viewData"
2859
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2860
- *ngSwitchCase="ColumnTypes.LINK"
2861
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2862
- title="{{column.title(result)}}">
2863
- <a [routerLink]="[column.link(result)]">{{ column.cell(result) }}</a>
2864
- </div>
2884
+ <div class="table-responsive">
2885
+ <ng-container *ngIf="!!expandHeaderButton">
2886
+ <cva-header-expand-button [moduleName]="moduleName" [expandHeaderButton]="expandHeaderButton"
2887
+ [columns]="columns" (onChange)="this.onChangeDisplayColumn.emit($event)">
2888
+ </cva-header-expand-button>
2889
+ </ng-container>
2890
+ <table mat-table #table [dataSource]="results" class="mat-elevation-z8 cva-table">
2891
+ <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
2892
+ <ng-container *matHeaderCellDef>
2893
+ <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
2894
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan"
2895
+ *ngIf="onDisplayHeaderCell(column)">
2896
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
2897
+ [selectAllChecked]="selectAllChecked"
2898
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(this.results.data, $event)">
2899
+ </cva-table-header-cell>
2900
+ </th>
2901
+ </ng-container>
2902
+ <ng-container *matCellDef="let result;">
2903
+ <td mat-cell [ngClass]="TableService.getColumnClassName(column, result)"
2904
+ *ngIf="onDisplayCell(column, result)"
2905
+ [ngSwitch]="TableService.getColumnType(column, result)">
2906
+ <div title="{{column.title(result)}}" *ngSwitchDefault
2907
+ class="{{TableService.getColumnClassName(column, result)}} viewData"
2908
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
2909
+ {{ column.cell(result) }}
2910
+ </div>
2911
+ <ng-container *ngSwitchCase="ColumnTypeEnum.BUTTON">
2912
+ <div *ngIf="!!column.button"
2913
+ class="{{TableService.getColumnClassName(column, result)}}"
2914
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2915
+ (click)="$event.stopPropagation()">
2916
+ <button mat-icon-button color="{{column.button.color}}"
2917
+ (click)="onClick(column.button.click, result)"
2918
+ disabled="{{column.button.disabled ? column.button.disabled(result) : false}}"
2919
+ matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
2920
+ class="{{column.button.className}}"
2921
+ [ngSwitch]="TableService.getIconType(column.button)">
2922
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ column.button.icon }}
2923
+ </mat-icon>
2924
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{column.button.icon}}"></i>
2925
+ </button>
2926
+ </div>
2927
+ </ng-container>
2928
+ <div class="link viewData"
2929
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2930
+ *ngSwitchCase="ColumnTypeEnum.LINK"
2931
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2932
+ title="{{column.title(result)}}">
2933
+ <a [routerLink]="[column?.link(result)]">{{ column.cell(result) }}</a>
2934
+ </div>
2865
2935
 
2866
- <div class="label-status viewData"
2867
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2868
- *ngSwitchCase="ColumnTypes.STYLE_CSS"
2869
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2870
- title="{{column.title(result)}}">
2871
- <span [style]="column.style(result)">{{ column.cell(result) }}</span>
2872
- </div>
2936
+ <div class="label-status viewData"
2937
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2938
+ *ngSwitchCase="ColumnTypeEnum.STYLE_CSS"
2939
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2940
+ title="{{column.title(result)}}">
2941
+ <span [style]="column?.style(result)">{{ column.cell(result) }}</span>
2942
+ </div>
2873
2943
 
2874
- <div class="img-view viewData"
2875
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2876
- *ngSwitchCase="ColumnTypes.IMG"
2877
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2878
- title="{{column.title(result)}}">
2879
- <img [src]="column.cell(result) | secure | async" #imgRef
2880
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2881
- </div>
2882
- <div class="img-view viewData"
2883
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2884
- *ngSwitchCase="ColumnTypes.IMG_NO_SECURE"
2885
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2886
- title="{{column.title(result)}}">
2887
- <img [src]="column.cell(result)" #imgRef
2888
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2889
- </div>
2890
- <div *ngSwitchCase="ColumnTypes.BASE64"
2891
- class="img-view viewData"
2892
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2893
- title="{{column.title(result)}}">
2894
- <img [src]="'data:image/png;base64,'+column.cell(result)"
2895
- #base64ImgRef
2896
- (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2897
- </div>
2898
- <ng-container *ngSwitchCase="ColumnTypes.CHECKBOX">
2899
- <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
2900
- *ngIf="column.display ? column.display(result) : true"
2901
- [disabled]="column.disabled ? column.disabled(result) : false"
2902
- (change)="toggleSelect($event, result, column)"
2903
- [fxLayoutAlign]="TableService.alignCellContent(column)">
2904
- </mat-checkbox>
2905
- </ng-container>
2906
- </td>
2907
- </ng-container>
2908
- </ng-container>
2944
+ <div class="img-view viewData"
2945
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2946
+ *ngSwitchCase="ColumnTypeEnum.IMG"
2947
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2948
+ title="{{column.title(result)}}">
2949
+ <img [src]="column.cell(result) | secure | async" #imgRef
2950
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
2951
+ </div>
2952
+ <div class="img-view viewData"
2953
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2954
+ *ngSwitchCase="ColumnTypeEnum.IMG_NO_SECURE"
2955
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2956
+ title="{{column.title(result)}}">
2957
+ <img [src]="column.cell(result)" #imgRef
2958
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
2959
+ </div>
2960
+ <div *ngSwitchCase="ColumnTypeEnum.BASE64"
2961
+ class="img-view viewData"
2962
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2963
+ title="{{column.title(result)}}">
2964
+ <img [src]="'data:image/png;base64,'+column.cell(result)"
2965
+ #base64ImgRef
2966
+ (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)"
2967
+ alt=""/>
2968
+ </div>
2969
+ <ng-container *ngSwitchCase="ColumnTypeEnum.CHECKBOX">
2970
+ <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
2971
+ *ngIf="column.display ? column.display(result) : true"
2972
+ [disabled]="column.disabled ? column.disabled(result) : false"
2973
+ (change)="toggleSelect($event, result, column)"
2974
+ [fxLayoutAlign]="TableService.alignCellContent(column)">
2975
+ </mat-checkbox>
2976
+ </ng-container>
2977
+ </td>
2978
+ </ng-container>
2979
+ </ng-container>
2909
2980
 
2910
- <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
2911
- <ng-container *matHeaderCellDef="let header">
2912
- <!-- [fxFlex]="(isButtonHeader(button) ? headerButtonWidthDefault : getHeaderButtonWidth(i)) + 'px' "-->
2913
- <!-- [fxFlex]="getHeaderButtonWidth(i) + 'px' "-->
2914
- <th mat-header-cell [ngClass]="button.className"
2915
- *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
2916
- (click)="$event.stopPropagation()"
2917
- [attr.colspan]="buttonColspan"
2918
- >
2919
- <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
2920
- <button mat-icon-button
2921
- class="{{button.className}}"
2922
- *ngIf="((btnHeader && btnHeader.display) ? btnHeader.display(header) : false) "
2923
- [disabled]="((btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false) "
2924
- color="{{$any(btnHeader).color}}"
2925
- (click)="onClick($any(btnHeader).click, null)"
2926
- matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
2927
- [ngSwitch]="TableService.getIconType($any(btnHeader))">
2928
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ $any(btnHeader).icon }}</mat-icon>
2929
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
2930
- </button>
2931
- </ng-container>
2932
- <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
2933
- <div title="{{$any(btnHeader) | translate}}"
2934
- class="viewData"
2935
- fxLayout="row"
2936
- fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
2937
- {{ $any(btnHeader) | translate }}
2938
- </div>
2939
- </ng-container>
2940
- </th>
2941
-
2942
- </ng-container>
2943
- <ng-container *matCellDef="let cell">
2944
- <!-- [fxFlex]="headerButtonWidthDefault + 'px'"-->
2945
- <td mat-cell [ngClass]="button.className"
2946
- *ngIf="TableService.onDisplayButtonCell(button, cell)"
2947
- (click)="$event.stopPropagation()">
2948
- <button mat-icon-button color="{{button.color}}"
2949
- (click)="onClick(button.click, cell)"
2950
- disabled="{{button.disabled ? button.disabled(cell) : false}}"
2951
- matTooltip="{{(button.title ? button.title : '') | translate}}"
2952
- class="{{button.className}}" [ngSwitch]="TableService.getIconType(button)">
2953
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ button.icon }}</mat-icon>
2954
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{button.icon}}"></i>
2955
- </button>
2956
- </td>
2957
- </ng-container>
2958
- </ng-container>
2981
+ <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
2982
+ <ng-container *matHeaderCellDef="let header">
2983
+ <th mat-header-cell [ngClass]="button.className"
2984
+ *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
2985
+ (click)="$event.stopPropagation()"
2986
+ [attr.colspan]="buttonColspan" [attr.rowspan]="superHeaders.length + 1">
2987
+ <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
2988
+ <button mat-icon-button
2989
+ class="{{button.className}}"
2990
+ *ngIf="((btnHeader && btnHeader.display) ? btnHeader.display(header) : false) "
2991
+ [disabled]="((btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false) "
2992
+ color="{{$any(btnHeader).color}}"
2993
+ (click)="onClick($any(btnHeader).click, null)"
2994
+ matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
2995
+ [ngSwitch]="TableService.getIconType($any(btnHeader))">
2996
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ $any(btnHeader).icon }}
2997
+ </mat-icon>
2998
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
2999
+ </button>
3000
+ </ng-container>
3001
+ <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
3002
+ <div title="{{$any(btnHeader) | translate}}"
3003
+ class="viewData"
3004
+ fxLayout="row"
3005
+ fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
3006
+ {{ $any(btnHeader) | translate }}
3007
+ </div>
3008
+ </ng-container>
3009
+ </th>
3010
+ </ng-container>
3011
+ <ng-container *matCellDef="let cell">
3012
+ <td mat-cell [ngClass]="button.className"
3013
+ *ngIf="TableService.onDisplayButtonCell(button, cell)"
3014
+ (click)="$event.stopPropagation()">
3015
+ <button mat-icon-button color="{{button.color}}"
3016
+ (click)="onClick(button.click, cell)"
3017
+ disabled="{{button.disabled ? button.disabled(cell) : false}}"
3018
+ matTooltip="{{(button.title ? button.title : '') | translate}}"
3019
+ class="{{button.className}}" [ngSwitch]="TableService.getIconType(button)">
3020
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ button.icon }}</mat-icon>
3021
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{button.icon}}"></i>
3022
+ </button>
3023
+ </td>
3024
+ </ng-container>
3025
+ </ng-container>
2959
3026
 
3027
+ <ng-container *ngFor="let row of superHeaders">
3028
+ <ng-container *ngFor="let column of row" matColumnDef="{{column.columnDef}}">
3029
+ <ng-container *ngIf="onDisplayHeaderCell(column)">
3030
+ <th mat-header-cell *matHeaderCellDef
3031
+ [ngClass]="TableService.getColumnHeaderClassName(column)"
3032
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan">
3033
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
3034
+ [selectAllChecked]="selectAllChecked"
3035
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(this.results.data, $event)">
3036
+ </cva-table-header-cell>
3037
+ </th>
3038
+ </ng-container>
3039
+ </ng-container>
3040
+ </ng-container>
2960
3041
 
2961
- <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
2962
- <tr mat-row *matRowDef="let result; columns: displayedColumns; let i = index"
2963
- [ngClass]="result.className"
2964
- (click)="onRowClick(result, i)"></tr>
2965
- </table>
2966
- <div *ngIf="!(loaderService.isLoading | async)">
2967
- <div class="paging"
2968
- *ngIf="hasData()"
2969
- fxLayout fxLayoutAlign="space-between center">
2970
- <mat-paginator style-paginator
2971
- [showTotalPages]="showTotalPages"
2972
- [paging]="varPaging"
2973
- (pagingChangeEvent)="getPage($event)"
2974
- [length]="varPaging.totalElements"
2975
- [pageSize]="varPaging.pageSize"
2976
- [pageSizeOptions]="pageSizeOptions"
2977
- [pageIndex]="varPaging.pageNumber - 1">
2978
- </mat-paginator>
2979
- <div class="go-to-page"
2980
- fxLayout fxLayoutGap="0.3rem" fxLayoutAlign="start baseline">
2981
- <mat-label>{{ 'common.gotopage' | translate }}</mat-label>
2982
- <cva-counter-input [(ngModel)]="goToPageNumber"
2983
- (ngModelChange)="onChangeGoToPageNumber($event)"
2984
- (onEnter)="goToPage()"
2985
- [max]="getTotalPage() ? getTotalPage() : 1"
2986
- [min]="1"
2987
- [isFloatLabel]="false"
2988
- [errorMessages]="errorMsg"
2989
- ></cva-counter-input>
2990
- <mat-label style="white-space: nowrap">{{ '/' + getTotalPage() }}</mat-label>
2991
- <button mat-flat-button
2992
- [disabled]="goToPageNumber < 1 || goToPageNumber > getTotalPage()"
2993
- (click)="goToPage()">{{ 'common.go' | translate }}
2994
- </button>
2995
- </div>
2996
- <h2 *ngIf="!hasData()">{{ 'common.no.records.found' | translate }}</h2>
3042
+ <ng-container *ngFor="let row of superHeaders; let rowIndex = index">
3043
+ <tr mat-header-row *matHeaderRowDef="TableService.getHeaderColumns(row, rowIndex, buttons)"></tr>
3044
+ </ng-container>
3045
+ <tr mat-header-row
3046
+ *matHeaderRowDef="TableService.getHeaderColumns(columns, superHeaders.length, buttons)"></tr>
3047
+ <tr mat-row
3048
+ *matRowDef="let result; columns: TableService.getHeaderColumns(columns, 0, buttons); let i = index"
3049
+ [ngClass]="result.className"
3050
+ (click)="onRowClick(result, i)"></tr>
3051
+ </table>
3052
+ <div *ngIf="!(loaderService.isLoading | async)">
3053
+ <div class="paging"
3054
+ *ngIf="hasData()"
3055
+ fxLayout fxLayoutAlign="space-between center">
3056
+ <mat-paginator style-paginator
3057
+ [showTotalPages]="showTotalPages"
3058
+ [paging]="varPaging"
3059
+ (pagingChangeEvent)="getPage($event)"
3060
+ [length]="varPaging.totalElements"
3061
+ [pageSize]="varPaging.pageSize"
3062
+ [pageSizeOptions]="pageSizeOptions"
3063
+ [pageIndex]="varPaging.pageNumber - 1">
3064
+ </mat-paginator>
3065
+ <div class="go-to-page"
3066
+ fxLayout fxLayoutGap="0.3rem" fxLayoutAlign="start baseline">
3067
+ <mat-label>{{ 'common.gotopage' | translate }}</mat-label>
3068
+ <cva-counter-input [(ngModel)]="goToPageNumber"
3069
+ (ngModelChange)="onChangeGoToPageNumber($event)"
3070
+ (onEnter)="goToPage()"
3071
+ [max]="getTotalPage() ? getTotalPage() : 1"
3072
+ [min]="1"
3073
+ [isFloatLabel]="false"
3074
+ [errorMessages]="errorMsg"
3075
+ ></cva-counter-input>
3076
+ <mat-label style="white-space: nowrap">{{ '/' + getTotalPage() }}</mat-label>
3077
+ <button mat-flat-button
3078
+ [disabled]="goToPageNumber < 1 || goToPageNumber > getTotalPage()"
3079
+ (click)="goToPage()">{{ 'common.go' | translate }}
3080
+ </button>
3081
+ </div>
3082
+ <h2 *ngIf="!hasData()">{{ 'common.no.records.found' | translate }}</h2>
3083
+ </div>
3084
+ </div>
2997
3085
  </div>
2998
- </div>
2999
- </div>
3000
- `,
3086
+ `,
3001
3087
  providers: [
3002
3088
  { provide: MatPaginatorIntl, useClass: MultiLanguageTablePaginator },
3003
3089
  ],
@@ -3017,6 +3103,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
3017
3103
  type: Input
3018
3104
  }], expandHeaderButton: [{
3019
3105
  type: Input
3106
+ }], superHeaders: [{
3107
+ type: Input
3020
3108
  }], pagingChange: [{
3021
3109
  type: Output
3022
3110
  }], clickAction: [{
@@ -4970,10 +5058,15 @@ class CvaSmartTableComponent {
4970
5058
  ref;
4971
5059
  config;
4972
5060
  injector;
5061
+ ColumnTypeEnum = ColumnTypeEnum;
5062
+ IconTypeEnum = IconTypeEnum;
5063
+ AlignEnum = AlignEnum;
5064
+ TableService = TableService;
4973
5065
  cellComponents;
4974
5066
  moduleName = '';
4975
5067
  columns = [];
4976
5068
  buttons = [];
5069
+ superHeaders = [];
4977
5070
  value = [];
4978
5071
  minRow = 0;
4979
5072
  maxRow = 9999;
@@ -5002,24 +5095,6 @@ class CvaSmartTableComponent {
5002
5095
  ngControl.valueAccessor = this;
5003
5096
  }
5004
5097
  }
5005
- get AlignEnum() {
5006
- return AlignEnum;
5007
- }
5008
- get IconTypes() {
5009
- return IconTypeEnum;
5010
- }
5011
- get TableService() {
5012
- return TableService;
5013
- }
5014
- get displayedColumns() {
5015
- if (!this.$displayedColumns || this.$displayedColumns.length <= 0) {
5016
- this.$displayedColumns = this.columns.map((c) => c.columnDef);
5017
- if (this.buttons) {
5018
- this.$displayedColumns = this.$displayedColumns.concat(this.buttons.map((b) => b.columnDef));
5019
- }
5020
- }
5021
- return this.$displayedColumns;
5022
- }
5023
5098
  get displayedFooters() {
5024
5099
  if (!this.$displayedFooters || this.$displayedFooters.length <= 0) {
5025
5100
  for (const column of this.columns) {
@@ -5035,9 +5110,6 @@ class CvaSmartTableComponent {
5035
5110
  }
5036
5111
  return this.$displayedFooters;
5037
5112
  }
5038
- get ColumnTypes() {
5039
- return ColumnTypeEnum;
5040
- }
5041
5113
  propagateChange = (_) => {
5042
5114
  /*NON-EMPTY FOR COMPILE*/
5043
5115
  };
@@ -5100,16 +5172,6 @@ class CvaSmartTableComponent {
5100
5172
  this.callValidator();
5101
5173
  this.onChange.emit();
5102
5174
  }
5103
- toggleSelectAll(val, col) {
5104
- if (this.value) {
5105
- this.value.forEach(v => {
5106
- v.checked = val.checked;
5107
- });
5108
- }
5109
- if (col.onHeaderCellValueChange) {
5110
- col.onHeaderCellValueChange(val.checked);
5111
- }
5112
- }
5113
5175
  toggleSelect(val, result, column) {
5114
5176
  let count = 0;
5115
5177
  if (this.value && this.value.length > 0) {
@@ -5162,9 +5224,6 @@ class CvaSmartTableComponent {
5162
5224
  this.formControl.updateValueAndValidity();
5163
5225
  }
5164
5226
  }
5165
- getRequired(column) {
5166
- return typeof (column.isRequired) === 'function' ? column.isRequired() : (column.isRequired ?? false);
5167
- }
5168
5227
  getIsDecimal(column) {
5169
5228
  return column.isDecimal ? typeof (column.isDecimal) === 'boolean' ? column.isDecimal : column.isDecimal() : false;
5170
5229
  }
@@ -5212,253 +5271,270 @@ class CvaSmartTableComponent {
5212
5271
  }
5213
5272
  }
5214
5273
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaSmartTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: InjectTokenNextSolutionsConfig }, { token: i0.Injector }, { token: i1$2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
5215
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaSmartTableComponent, isStandalone: false, selector: "cva-smart-table", inputs: { moduleName: "moduleName", columns: "columns", buttons: "buttons", value: "value", minRow: "minRow", maxRow: "maxRow", errorMessages: "errorMessages", isFormControl: "isFormControl", isSticky: "isSticky", isStickyHeader: "isStickyHeader", isStickyFooter: "isStickyFooter", isExpandRowTable: "isExpandRowTable", expandRowProperty: "expandRowProperty" }, outputs: { clickAction: "clickAction", onChange: "onChange" }, viewQueries: [{ propertyName: "matTable", first: true, predicate: ["matTable"], descendants: true }, { propertyName: "cellComponents", predicate: ["cellComponentRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
5216
- <div class="table-responsive"
5217
- [ngClass]="{'fixed_header': isSticky||isStickyHeader, 'fixed_footer': isSticky||isStickyFooter}">
5218
- <table mat-table [dataSource]="datasource" #matTable class="mat-elevation-z8 cva-smart-table">
5219
- <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
5220
- <ng-container *matHeaderCellDef>
5221
- <th mat-header-cell class="{{TableService.getColumnHeaderClassName(column)}}"
5222
- *ngIf="onDisplayHeaderCell(column)">
5223
- <!-- *ngIf="getColumnType(column, result)!==ColumnTypes.CHECKBOX"-->
5224
- <div [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5225
- fxLayout="row"
5226
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
5227
- <mat-checkbox
5228
- *ngIf="TableService.getColumnType(column, null)===ColumnTypes.CHECKBOX && !column.isNotShowHeaderCheckbox"
5229
- color="primary" class="box-select-all margin-right-5" [(ngModel)]="selectAllChecked"
5230
- (change)="toggleSelectAll($event, column)">
5231
- </mat-checkbox>
5232
- {{ TableService.displayHeaderName(column, moduleName) | translate }}<span
5233
- style="color: red">{{ getRequired(column) ? '*' : '' }}</span>
5234
- </div>
5235
- </th>
5236
- </ng-container>
5237
- <ng-container *matCellDef="let result; let i = index">
5238
- <td mat-cell [ngClass]="TableService.getColumnClassName(column,result)"
5239
- *ngIf="TableService.onDisplayCell(column, result)"
5240
- [ngSwitch]="TableService.getColumnType(column, result)">
5241
- <div title="{{column.title(result)}}"
5242
- *ngSwitchCase="ColumnTypes.VIEW"
5243
- class="viewData {{TableService.getColumnClassName(column,result)}}"
5244
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
5245
- {{ column.cell(result) }}
5246
- </div>
5247
- <div class="link viewData"
5248
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5249
- *ngSwitchCase="ColumnTypes.LINK"
5250
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5251
- title="{{column.title(result)}}">
5252
- <a [routerLink]="[column.link ? column.link(result) : '']">{{ column.cell(result) }}</a>
5253
- </div>
5254
- <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5255
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5256
- *ngSwitchCase="ColumnTypes.IMG"
5257
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5258
- title="{{column.title(result)}}">
5259
- <img [src]="column.cell(result) | secure | async"
5260
- #imgRef
5261
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5262
- </div>
5263
- <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5264
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5265
- *ngSwitchCase="ColumnTypes.IMG_NO_SECURE"
5266
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5267
- title="{{column.title(result)}}">
5268
- <img [src]="column.cell(result)"
5269
- #imgRef
5270
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5271
- </div>
5272
- <div *ngSwitchCase="ColumnTypes.BASE64"
5273
- class="viewData img-view base64 {{TableService.getColumnClassName(column,result)}}"
5274
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5275
- title="{{column.title(result)}}">
5276
- <img [src]="'data:image/png;base64,'+column.cell(result)"
5277
- #base64ImgRef
5278
- (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5279
- </div>
5280
- <ng-container *ngSwitchCase="ColumnTypes.BUTTON">
5281
- <div *ngIf="!!column.button"
5282
- class="{{TableService.getColumnClassName(column, result)}}"
5283
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5284
- (click)="$event.stopPropagation()">
5285
- <button mat-icon-button type="button"
5286
- color="{{column.button.color}}"
5287
- [ngClass]="column.button.className"
5288
- (click)="onClick(column.button.click, result, i)"
5289
- disabled="{{column.button && column.button.disabled ? column.button.disabled(result) : false}}"
5290
- matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
5291
- [ngSwitch]="TableService.getIconType(column.button)">
5292
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ column.button.icon }}</mat-icon>
5293
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{column.button.icon}}"></i>
5294
- </button>
5295
- </div>
5296
- </ng-container>
5297
- <cva-counter-input *ngSwitchCase="ColumnTypes.INPUT_COUNTER"
5298
- #cellComponentRef
5299
- class="inputNumber" #nsCounterInput
5300
- [isFormControl]="false"
5301
- [alignNumber]="getAlign(column)"
5302
- [disabled]="column.disabled ? column.disabled(result) : false"
5303
- [value]="result[column.columnDef]"
5304
- [required]="getRequired(column)"
5305
- [errorMessages]="getErrorMessageMap(column)"
5306
- [isDecimal]="getIsDecimal(column)"
5307
- [min]="column.min ? column.min(result) : null"
5308
- [max]="column.max ? column.max(result) : null"
5309
- (onChange)="onCellValueChange(result, column, $event);">
5310
- </cva-counter-input>
5311
- <cva-input *ngSwitchCase="ColumnTypes.INPUT"
5312
- #cellComponentRef
5313
- [isFormControl]="false"
5314
- [alignText]="getAlign(column)"
5315
- [disabled]="column.disabled ? column.disabled(result) : false"
5316
- [text]="result[column.columnDef]"
5317
- [minLength]="column.min ? column.min(result) : undefined"
5318
- [maxLength]="column.max ? column.max(result) : undefined"
5319
- [required]="getRequired(column)"
5320
- [errorMessages]="getErrorMessageMap(column)"
5321
- (onChange)="onCellValueChange(result, column, $event);">
5322
- </cva-input>
5323
- <cva-input *ngSwitchCase="ColumnTypes.INPUT_CURRENCY"
5324
- #cellComponentRef
5325
- [isFormControl]="false"
5326
- [alignText]="getAlign(column)"
5327
- [disabled]="column.disabled ? column.disabled(result) : false"
5328
- [text]="result[column.columnDef]"
5329
- [minLength]="column.min ? column.min(result) : undefined"
5330
- [maxLength]="column.max ? column.max(result) : undefined"
5331
- [required]="getRequired(column)"
5332
- [errorMessages]="getErrorMessageMap(column)"
5333
- (onChange)="onCellValueChange(result, column, $event);"
5334
- [pattern]="getIsDecimal(column) ? '^\\d{0,15}(\\.\\d*)?$' : '^\\d{0,15}$'"
5335
- [formatFunc]="formatFunc">
5336
- </cva-input>
5337
- <cva-date-picker *ngSwitchCase="ColumnTypes.DATE_PICKER"
5338
- #cellComponentRef
5339
- [value]="result[column.columnDef]"
5340
- [isFormControl]="false"
5341
- [minDate]="column.min ? column.min(result) : null"
5342
- [maxDate]="column.max ? column.max(result) : null"
5343
- [required]="getRequired(column)"
5344
- [disabled]="column.disabled ? column.disabled(result) : false"
5345
- [errorMessages]="getErrorMessageMap(column)"
5346
- (onChange)="onCellValueChange(result, column, $event);">
5347
- </cva-date-picker>
5348
- <cva-multi-select-autocomplete [isFormControl]="false"
5274
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaSmartTableComponent, isStandalone: false, selector: "cva-smart-table", inputs: { moduleName: "moduleName", columns: "columns", buttons: "buttons", superHeaders: "superHeaders", value: "value", minRow: "minRow", maxRow: "maxRow", errorMessages: "errorMessages", isFormControl: "isFormControl", isSticky: "isSticky", isStickyHeader: "isStickyHeader", isStickyFooter: "isStickyFooter", isExpandRowTable: "isExpandRowTable", expandRowProperty: "expandRowProperty" }, outputs: { clickAction: "clickAction", onChange: "onChange" }, viewQueries: [{ propertyName: "matTable", first: true, predicate: ["matTable"], descendants: true }, { propertyName: "cellComponents", predicate: ["cellComponentRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
5275
+ <div class="table-responsive"
5276
+ [ngClass]="{'fixed_header': isSticky||isStickyHeader, 'fixed_footer': isSticky||isStickyFooter}">
5277
+ <table mat-table [dataSource]="datasource" #matTable class="mat-elevation-z8 cva-smart-table">
5278
+ <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
5279
+ <ng-container *matHeaderCellDef>
5280
+ <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
5281
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan"
5282
+ *ngIf="onDisplayHeaderCell(column)">
5283
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
5284
+ [selectAllChecked]="selectAllChecked"
5285
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(value, $event)">
5286
+ </cva-table-header-cell>
5287
+ </th>
5288
+ </ng-container>
5289
+ <ng-container *matCellDef="let result; let i = index">
5290
+ <td mat-cell [ngClass]="TableService.getColumnClassName(column,result)"
5291
+ *ngIf="TableService.onDisplayCell(column, result)"
5292
+ [ngSwitch]="TableService.getColumnType(column, result)">
5293
+ <div title="{{column.title(result)}}"
5294
+ *ngSwitchCase="ColumnTypeEnum.VIEW"
5295
+ class="viewData {{TableService.getColumnClassName(column,result)}}"
5296
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
5297
+ {{ column.cell(result) }}
5298
+ </div>
5299
+ <div class="link viewData"
5300
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5301
+ *ngSwitchCase="ColumnTypeEnum.LINK"
5302
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5303
+ title="{{column.title(result)}}">
5304
+ <a [routerLink]="[column.link ? column.link(result) : '']">{{ column.cell(result) }}</a>
5305
+ </div>
5306
+ <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5307
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5308
+ *ngSwitchCase="ColumnTypeEnum.IMG"
5309
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5310
+ title="{{column.title(result)}}">
5311
+ <img [src]="column.cell(result) | secure | async"
5312
+ #imgRef
5313
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
5314
+ </div>
5315
+ <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5316
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5317
+ *ngSwitchCase="ColumnTypeEnum.IMG_NO_SECURE"
5318
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5319
+ title="{{column.title(result)}}">
5320
+ <img [src]="column.cell(result)"
5321
+ #imgRef
5322
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
5323
+ </div>
5324
+ <div *ngSwitchCase="ColumnTypeEnum.BASE64"
5325
+ class="viewData img-view base64 {{TableService.getColumnClassName(column,result)}}"
5326
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5327
+ title="{{column.title(result)}}">
5328
+ <img [src]="'data:image/png;base64,'+column.cell(result)"
5329
+ #base64ImgRef
5330
+ (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)"
5331
+ alt=""/>
5332
+ </div>
5333
+ <ng-container *ngSwitchCase="ColumnTypeEnum.BUTTON">
5334
+ <div *ngIf="!!column.button"
5335
+ class="{{TableService.getColumnClassName(column, result)}}"
5336
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5337
+ (click)="$event.stopPropagation()">
5338
+ <button mat-icon-button type="button"
5339
+ color="{{column.button.color}}"
5340
+ [ngClass]="column.button.className"
5341
+ (click)="onClick(column.button.click, result, i)"
5342
+ disabled="{{column.button && column.button.disabled ? column.button.disabled(result) : false}}"
5343
+ matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
5344
+ [ngSwitch]="TableService.getIconType(column.button)">
5345
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ column.button.icon }}
5346
+ </mat-icon>
5347
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{column.button.icon}}"></i>
5348
+ </button>
5349
+ </div>
5350
+ </ng-container>
5351
+ <cva-counter-input *ngSwitchCase="ColumnTypeEnum.INPUT_COUNTER"
5352
+ #cellComponentRef
5353
+ class="inputNumber" #nsCounterInput
5354
+ [isFormControl]="false"
5355
+ [alignNumber]="getAlign(column)"
5356
+ [disabled]="column.disabled ? column.disabled(result) : false"
5357
+ [value]="result[column.columnDef]"
5358
+ [required]="TableService.getRequired(column)"
5359
+ [errorMessages]="getErrorMessageMap(column)"
5360
+ [isDecimal]="getIsDecimal(column)"
5361
+ [min]="column.min ? column.min(result) : null"
5362
+ [max]="column.max ? column.max(result) : null"
5363
+ (onChange)="onCellValueChange(result, column, $event);">
5364
+ </cva-counter-input>
5365
+ <cva-input *ngSwitchCase="ColumnTypeEnum.INPUT"
5366
+ #cellComponentRef
5367
+ [isFormControl]="false"
5368
+ [alignText]="getAlign(column)"
5369
+ [disabled]="column.disabled ? column.disabled(result) : false"
5370
+ [text]="result[column.columnDef]"
5371
+ [minLength]="column.min ? column.min(result) : undefined"
5372
+ [maxLength]="column.max ? column.max(result) : undefined"
5373
+ [required]="TableService.getRequired(column)"
5374
+ [errorMessages]="getErrorMessageMap(column)"
5375
+ (onChange)="onCellValueChange(result, column, $event);">
5376
+ </cva-input>
5377
+ <cva-input *ngSwitchCase="ColumnTypeEnum.INPUT_CURRENCY"
5378
+ #cellComponentRef
5379
+ [isFormControl]="false"
5380
+ [alignText]="getAlign(column)"
5381
+ [disabled]="column.disabled ? column.disabled(result) : false"
5382
+ [text]="result[column.columnDef]"
5383
+ [minLength]="column.min ? column.min(result) : undefined"
5384
+ [maxLength]="column.max ? column.max(result) : undefined"
5385
+ [required]="TableService.getRequired(column)"
5386
+ [errorMessages]="getErrorMessageMap(column)"
5387
+ (onChange)="onCellValueChange(result, column, $event);"
5388
+ [pattern]="getIsDecimal(column) ? '^\\d{0,15}(\\.\\d*)?$' : '^\\d{0,15}$'"
5389
+ [formatFunc]="formatFunc">
5390
+ </cva-input>
5391
+ <cva-date-picker *ngSwitchCase="ColumnTypeEnum.DATE_PICKER"
5349
5392
  #cellComponentRef
5350
- *ngSwitchCase="ColumnTypes.MULTI_SELECT_AUTOCOMPLETE"
5351
- class="multiSelectAutocomplete"
5352
- [isTree]="column.isTree??false"
5353
5393
  [value]="result[column.columnDef]"
5354
- [errorMessages]="getErrorMessageMap(column)"
5355
- [required]="getRequired(column)"
5394
+ [isFormControl]="false"
5395
+ [minDate]="column.min ? column.min(result) : null"
5396
+ [maxDate]="column.max ? column.max(result) : null"
5397
+ [required]="TableService.getRequired(column)"
5356
5398
  [disabled]="column.disabled ? column.disabled(result) : false"
5357
- [multiple]="column.isMultipleSelect??false"
5358
- [options]="column.optionValues ? column.optionValues(result) : []"
5359
- (selectionChange)="onCellValueChange(result, column, $event);">
5360
- </cva-multi-select-autocomplete>
5361
- <div class="checkbox-cell"
5362
- fxLayout="row"
5363
- [fxLayoutAlign]="TableService.alignCellContent(column)"
5364
- *ngSwitchCase="ColumnTypes.CHECKBOX">
5365
- <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
5366
- *ngIf="column.display ? column.display(result) : true"
5367
- [disabled]="column.disabled ? column.disabled(result) : false"
5368
- (change)="toggleSelect($event,result, column)">
5369
- </mat-checkbox>
5370
- </div>
5371
- <cva-live-searching *ngSwitchCase="ColumnTypes.LIVE_SEARCHING"
5372
- #cellComponentRef
5373
- [isFormControl]="false" [required]="getRequired(column)"
5374
- [row]="result" [columnDef]="column.columnDef"
5375
- [searchFn]="column.searchFn"
5376
- [mappingConfig]="column.mappingConfig"
5377
- [displayKey]="column.displayKey??''"
5378
- [errorMessages]="getErrorMessageMap(column)"
5379
- (onChange)="onCellValueChange(result, column, $event)">
5380
- </cva-live-searching>
5381
- </td>
5382
- </ng-container>
5383
- </ng-container>
5384
- <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
5385
- <ng-container *matHeaderCellDef="let header">
5386
- <th mat-header-cell
5387
- [ngClass]="button.className"
5388
- *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
5389
- (click)="$event.stopPropagation()"
5390
- [attr.colspan]="buttonColspan">
5391
- <!-- [fxFlex]="getHeaderButtonWidth(i) + 'px' "-->
5392
- <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
5393
- <button mat-icon-button type="button"
5394
- class="{{button.className}}"
5395
- color="{{$any(btnHeader).color}}"
5396
- (click)="onClick($any(btnHeader).click, null, null)"
5397
- [disabled]="(btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false"
5398
- *ngIf="(btnHeader && btnHeader.display) ? btnHeader.display(header) : false"
5399
- matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
5400
- [ngSwitch]="TableService.getIconType($any(btnHeader))">
5401
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ $any(btnHeader).icon }}</mat-icon>
5402
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
5403
- </button>
5404
- </ng-container>
5405
- <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
5406
- <div title="{{$any(btnHeader) | translate}}"
5407
- class="viewData"
5408
- fxLayout="row"
5409
- fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
5410
- {{ $any(btnHeader) | translate }}
5411
- </div>
5412
- </ng-container>
5413
- </th>
5414
- </ng-container>
5415
- <ng-container *matCellDef="let cell; let i = index">
5416
- <td mat-cell [ngClass]="button.className"
5417
- *ngIf="TableService.onDisplayButtonCell(button, cell)"
5418
- (click)="$event.stopPropagation()">
5419
- <button mat-icon-button type="button"
5420
- color="{{button.color}}"
5421
- [ngClass]="button.className"
5422
- (click)="onClick(button.click, cell, i)"
5423
- disabled="{{button && button.disabled ? button.disabled(cell) : false}}"
5424
- matTooltip="{{(button.title ? button.title : '') | translate}}"
5425
- [ngSwitch]="TableService.getIconType(button)">
5426
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ button.icon }}</mat-icon>
5427
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{button.icon}}"></i>
5428
- </button>
5429
- </td>
5430
- </ng-container>
5431
- </ng-container>
5432
- <ng-container *ngFor="let column of columns">
5433
- <ng-container *ngFor="let footer of column.footers; let i = index"
5434
- matColumnDef="{{i}}-{{column.columnDef}}">
5435
- <ng-container *matFooterCellDef>
5436
- <td mat-footer-cell *ngIf="onDisplayFooter(footer, datasource.data)"
5437
- [attr.colspan]="TableService.getColspan(footer, datasource.data)"
5438
- class="{{TableService.getColumnClassName(column,datasource.data)}} {{TableService.getColumnClassName(column.footer,datasource.data)}}">
5439
- <div title="{{footer.title(datasource.data)}}"
5440
- class="viewData {{TableService.getColumnClassName(column,datasource.data)}}"
5441
- fxLayout="row"
5442
- [fxLayoutAlign]="footer.align ? footer.align : AlignEnum.LEFT">
5443
- {{ footer.cell(datasource.data) }}
5444
- </div>
5445
- </td>
5446
- </ng-container>
5447
- </ng-container>
5448
- </ng-container>
5449
- <tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: isSticky||isStickyHeader"></tr>
5450
- <tr mat-row *matRowDef="let result; columns: displayedColumns;" class="{{result.className}}"
5451
- [ngClass]="{'childRow0': !!result.isChildRow && result.parentRowClassIndex === 0,
5399
+ [errorMessages]="getErrorMessageMap(column)"
5400
+ (onChange)="onCellValueChange(result, column, $event);">
5401
+ </cva-date-picker>
5402
+ <cva-multi-select-autocomplete [isFormControl]="false"
5403
+ #cellComponentRef
5404
+ *ngSwitchCase="ColumnTypeEnum.MULTI_SELECT_AUTOCOMPLETE"
5405
+ class="multiSelectAutocomplete"
5406
+ [isTree]="column.isTree??false"
5407
+ [value]="result[column.columnDef]"
5408
+ [errorMessages]="getErrorMessageMap(column)"
5409
+ [required]="TableService.getRequired(column)"
5410
+ [disabled]="column.disabled ? column.disabled(result) : false"
5411
+ [multiple]="column.isMultipleSelect??false"
5412
+ [options]="column.optionValues ? column.optionValues(result) : []"
5413
+ (selectionChange)="onCellValueChange(result, column, $event);">
5414
+ </cva-multi-select-autocomplete>
5415
+ <div class="checkbox-cell"
5416
+ fxLayout="row"
5417
+ [fxLayoutAlign]="TableService.alignCellContent(column)"
5418
+ *ngSwitchCase="ColumnTypeEnum.CHECKBOX">
5419
+ <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
5420
+ *ngIf="column.display ? column.display(result) : true"
5421
+ [disabled]="column.disabled ? column.disabled(result) : false"
5422
+ (change)="toggleSelect($event,result, column)">
5423
+ </mat-checkbox>
5424
+ </div>
5425
+ <cva-live-searching *ngSwitchCase="ColumnTypeEnum.LIVE_SEARCHING"
5426
+ #cellComponentRef
5427
+ [isFormControl]="false" [required]="TableService.getRequired(column)"
5428
+ [row]="result" [columnDef]="column.columnDef"
5429
+ [searchFn]="column.searchFn"
5430
+ [mappingConfig]="column.mappingConfig"
5431
+ [displayKey]="column.displayKey??''"
5432
+ [errorMessages]="getErrorMessageMap(column)"
5433
+ (onChange)="onCellValueChange(result, column, $event)">
5434
+ </cva-live-searching>
5435
+ </td>
5436
+ </ng-container>
5437
+ </ng-container>
5438
+ <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
5439
+ <ng-container *matHeaderCellDef="let header">
5440
+ <th mat-header-cell
5441
+ [ngClass]="button.className"
5442
+ *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
5443
+ (click)="$event.stopPropagation()"
5444
+ [attr.colspan]="buttonColspan" [attr.rowspan]="superHeaders.length + 1">
5445
+ <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
5446
+ <button mat-icon-button type="button"
5447
+ class="{{button.className}}"
5448
+ color="{{$any(btnHeader).color}}"
5449
+ (click)="onClick($any(btnHeader).click, null, null)"
5450
+ [disabled]="(btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false"
5451
+ *ngIf="(btnHeader && btnHeader.display) ? btnHeader.display(header) : false"
5452
+ matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
5453
+ [ngSwitch]="TableService.getIconType($any(btnHeader))">
5454
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ $any(btnHeader).icon }}
5455
+ </mat-icon>
5456
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
5457
+ </button>
5458
+ </ng-container>
5459
+ <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
5460
+ <div title="{{$any(btnHeader) | translate}}"
5461
+ class="viewData"
5462
+ fxLayout="row"
5463
+ fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
5464
+ {{ $any(btnHeader) | translate }}
5465
+ </div>
5466
+ </ng-container>
5467
+ </th>
5468
+ </ng-container>
5469
+ <ng-container *matCellDef="let cell; let i = index">
5470
+ <td mat-cell [ngClass]="button.className"
5471
+ *ngIf="TableService.onDisplayButtonCell(button, cell)"
5472
+ (click)="$event.stopPropagation()">
5473
+ <button mat-icon-button type="button"
5474
+ color="{{button.color}}"
5475
+ [ngClass]="button.className"
5476
+ (click)="onClick(button.click, cell, i)"
5477
+ disabled="{{button && button.disabled ? button.disabled(cell) : false}}"
5478
+ matTooltip="{{(button.title ? button.title : '') | translate}}"
5479
+ [ngSwitch]="TableService.getIconType(button)">
5480
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ button.icon }}</mat-icon>
5481
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{button.icon}}"></i>
5482
+ </button>
5483
+ </td>
5484
+ </ng-container>
5485
+ </ng-container>
5486
+ <ng-container *ngFor="let column of columns">
5487
+ <ng-container *ngFor="let footer of column.footers; let i = index"
5488
+ matColumnDef="{{i}}-{{column.columnDef}}">
5489
+ <ng-container *matFooterCellDef>
5490
+ <td mat-footer-cell *ngIf="onDisplayFooter(footer, datasource.data)"
5491
+ [attr.colspan]="TableService.getColspan(footer, datasource.data)"
5492
+ class="{{TableService.getColumnClassName(column,datasource.data)}} {{TableService.getColumnClassName(column.footer,datasource.data)}}">
5493
+ <div title="{{footer.title(datasource.data)}}"
5494
+ class="viewData {{TableService.getColumnClassName(column,datasource.data)}}"
5495
+ fxLayout="row"
5496
+ [fxLayoutAlign]="footer.align ? footer.align : AlignEnum.LEFT">
5497
+ {{ footer.cell(datasource.data) }}
5498
+ </div>
5499
+ </td>
5500
+ </ng-container>
5501
+ </ng-container>
5502
+ </ng-container>
5503
+
5504
+ <ng-container *ngFor="let row of superHeaders">
5505
+ <ng-container *ngFor="let column of row" matColumnDef="{{column.columnDef}}">
5506
+ <ng-container *ngIf="onDisplayHeaderCell(column)">
5507
+ <th mat-header-cell *matHeaderCellDef
5508
+ [ngClass]="TableService.getColumnHeaderClassName(column)"
5509
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan">
5510
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
5511
+ [selectAllChecked]="selectAllChecked"
5512
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(value, $event)">
5513
+ </cva-table-header-cell>
5514
+ </th>
5515
+ </ng-container>
5516
+ </ng-container>
5517
+ </ng-container>
5518
+
5519
+ <ng-container *ngFor="let row of superHeaders; let rowIndex = index">
5520
+ <tr mat-header-row
5521
+ *matHeaderRowDef="TableService.getHeaderColumns(row, rowIndex, buttons); sticky: isSticky||isStickyHeader"></tr>
5522
+ </ng-container>
5523
+ <tr mat-header-row
5524
+ *matHeaderRowDef="TableService.getHeaderColumns(columns, superHeaders.length, buttons); sticky: isSticky||isStickyHeader"></tr>
5525
+ <tr mat-row *matRowDef="let result; columns: TableService.getHeaderColumns(columns, 0, buttons);"
5526
+ class="{{result.className}}"
5527
+ [ngClass]="{'childRow0': !!result.isChildRow && result.parentRowClassIndex === 0,
5452
5528
  'parentRow0': !result.isChildRow && result.parentRowClassIndex === 0,
5453
5529
  'childRow1': !!result.isChildRow && result.parentRowClassIndex === 1,
5454
5530
  'parentRow1': !result.isChildRow && result.parentRowClassIndex === 1}"
5455
- ></tr>
5456
- <ng-container *ngFor="let df of displayedFooters">
5457
- <tr mat-footer-row *matFooterRowDef="df; sticky: isSticky||isStickyFooter"></tr>
5458
- </ng-container>
5459
- </table>
5460
- </div>
5461
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i5.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i5.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i5.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1$4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: CvaInputComponent, selector: "cva-input", inputs: ["label", "name", "placeholder", "hint", "required", "disabled", "text", "type", "pattern", "errorMessages", "multiline", "isLabelOutside", "isFloatLabel", "minLength", "maxLength", "alignText", "maxLengthDisplay", "percentOfLabelOutside", "suffixFontAwesomeClass", "patternFilter", "isFormControl", "formatFunc"], outputs: ["onChange"] }, { kind: "component", type: CvaCounterInputComponent, selector: "cva-counter-input", inputs: ["label", "placeholder", "suffixText", "hint", "value", "disabled", "required", "errorMessages", "min", "max", "error", "isDecimal", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "alignNumber", "isFormControl"], outputs: ["onChange", "onEnter"] }, { kind: "component", type: CvaDatePickerComponent, selector: "cva-date-picker", inputs: ["label", "placeholder", "value", "disabled", "required", "minDate", "maxDate", "errorMessages", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "isFormControl"], outputs: ["onChange"] }, { kind: "component", type: CvaMultiSelectAutocomplete, selector: "cva-multi-select-autocomplete", inputs: ["placeholder", "label", "hint", "value", "options", "disabled", "errorMessages", "multiple", "required", "isTree", "treeSymbol", "sizeOfItemsInListByPixels", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "isFormControl"], outputs: ["selectionChange", "selectedOptionDataChange"] }, { kind: "component", type: CvaLiveSearchingComponent, selector: "cva-live-searching", inputs: ["label", "placeholder", "hint", "required", "disabled", "errorMessages", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "suffixFontAwesomeClass", "displayKey", "mappingConfig", "searchFn", "isFormControl", "row", "columnDef"], outputs: ["onChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: SecureImgPipe, name: "secure" }] });
5531
+ ></tr>
5532
+ <ng-container *ngFor="let df of displayedFooters">
5533
+ <tr mat-footer-row *matFooterRowDef="df; sticky: isSticky||isStickyFooter"></tr>
5534
+ </ng-container>
5535
+ </table>
5536
+ </div>
5537
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i5.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i5.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i5.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1$4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: CvaTableHeaderCellComponent, selector: "cva-table-header-cell", inputs: ["moduleName", "column", "selectAllChecked"], outputs: ["changeSelectAll"] }, { kind: "component", type: CvaInputComponent, selector: "cva-input", inputs: ["label", "name", "placeholder", "hint", "required", "disabled", "text", "type", "pattern", "errorMessages", "multiline", "isLabelOutside", "isFloatLabel", "minLength", "maxLength", "alignText", "maxLengthDisplay", "percentOfLabelOutside", "suffixFontAwesomeClass", "patternFilter", "isFormControl", "formatFunc"], outputs: ["onChange"] }, { kind: "component", type: CvaCounterInputComponent, selector: "cva-counter-input", inputs: ["label", "placeholder", "suffixText", "hint", "value", "disabled", "required", "errorMessages", "min", "max", "error", "isDecimal", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "alignNumber", "isFormControl"], outputs: ["onChange", "onEnter"] }, { kind: "component", type: CvaDatePickerComponent, selector: "cva-date-picker", inputs: ["label", "placeholder", "value", "disabled", "required", "minDate", "maxDate", "errorMessages", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "isFormControl"], outputs: ["onChange"] }, { kind: "component", type: CvaMultiSelectAutocomplete, selector: "cva-multi-select-autocomplete", inputs: ["placeholder", "label", "hint", "value", "options", "disabled", "errorMessages", "multiple", "required", "isTree", "treeSymbol", "sizeOfItemsInListByPixels", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "isFormControl"], outputs: ["selectionChange", "selectedOptionDataChange"] }, { kind: "component", type: CvaLiveSearchingComponent, selector: "cva-live-searching", inputs: ["label", "placeholder", "hint", "required", "disabled", "errorMessages", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "suffixFontAwesomeClass", "displayKey", "mappingConfig", "searchFn", "isFormControl", "row", "columnDef"], outputs: ["onChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: SecureImgPipe, name: "secure" }] });
5462
5538
  }
5463
5539
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaSmartTableComponent, decorators: [{
5464
5540
  type: Component,
@@ -5466,252 +5542,269 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
5466
5542
  selector: 'cva-smart-table',
5467
5543
  standalone: false,
5468
5544
  template: `
5469
- <div class="table-responsive"
5470
- [ngClass]="{'fixed_header': isSticky||isStickyHeader, 'fixed_footer': isSticky||isStickyFooter}">
5471
- <table mat-table [dataSource]="datasource" #matTable class="mat-elevation-z8 cva-smart-table">
5472
- <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
5473
- <ng-container *matHeaderCellDef>
5474
- <th mat-header-cell class="{{TableService.getColumnHeaderClassName(column)}}"
5475
- *ngIf="onDisplayHeaderCell(column)">
5476
- <!-- *ngIf="getColumnType(column, result)!==ColumnTypes.CHECKBOX"-->
5477
- <div [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5478
- fxLayout="row"
5479
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
5480
- <mat-checkbox
5481
- *ngIf="TableService.getColumnType(column, null)===ColumnTypes.CHECKBOX && !column.isNotShowHeaderCheckbox"
5482
- color="primary" class="box-select-all margin-right-5" [(ngModel)]="selectAllChecked"
5483
- (change)="toggleSelectAll($event, column)">
5484
- </mat-checkbox>
5485
- {{ TableService.displayHeaderName(column, moduleName) | translate }}<span
5486
- style="color: red">{{ getRequired(column) ? '*' : '' }}</span>
5487
- </div>
5488
- </th>
5489
- </ng-container>
5490
- <ng-container *matCellDef="let result; let i = index">
5491
- <td mat-cell [ngClass]="TableService.getColumnClassName(column,result)"
5492
- *ngIf="TableService.onDisplayCell(column, result)"
5493
- [ngSwitch]="TableService.getColumnType(column, result)">
5494
- <div title="{{column.title(result)}}"
5495
- *ngSwitchCase="ColumnTypes.VIEW"
5496
- class="viewData {{TableService.getColumnClassName(column,result)}}"
5497
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
5498
- {{ column.cell(result) }}
5499
- </div>
5500
- <div class="link viewData"
5501
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5502
- *ngSwitchCase="ColumnTypes.LINK"
5503
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5504
- title="{{column.title(result)}}">
5505
- <a [routerLink]="[column.link ? column.link(result) : '']">{{ column.cell(result) }}</a>
5506
- </div>
5507
- <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5508
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5509
- *ngSwitchCase="ColumnTypes.IMG"
5510
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5511
- title="{{column.title(result)}}">
5512
- <img [src]="column.cell(result) | secure | async"
5513
- #imgRef
5514
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5515
- </div>
5516
- <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5517
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5518
- *ngSwitchCase="ColumnTypes.IMG_NO_SECURE"
5519
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5520
- title="{{column.title(result)}}">
5521
- <img [src]="column.cell(result)"
5522
- #imgRef
5523
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5524
- </div>
5525
- <div *ngSwitchCase="ColumnTypes.BASE64"
5526
- class="viewData img-view base64 {{TableService.getColumnClassName(column,result)}}"
5527
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5528
- title="{{column.title(result)}}">
5529
- <img [src]="'data:image/png;base64,'+column.cell(result)"
5530
- #base64ImgRef
5531
- (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5532
- </div>
5533
- <ng-container *ngSwitchCase="ColumnTypes.BUTTON">
5534
- <div *ngIf="!!column.button"
5535
- class="{{TableService.getColumnClassName(column, result)}}"
5536
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5537
- (click)="$event.stopPropagation()">
5538
- <button mat-icon-button type="button"
5539
- color="{{column.button.color}}"
5540
- [ngClass]="column.button.className"
5541
- (click)="onClick(column.button.click, result, i)"
5542
- disabled="{{column.button && column.button.disabled ? column.button.disabled(result) : false}}"
5543
- matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
5544
- [ngSwitch]="TableService.getIconType(column.button)">
5545
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ column.button.icon }}</mat-icon>
5546
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{column.button.icon}}"></i>
5547
- </button>
5548
- </div>
5549
- </ng-container>
5550
- <cva-counter-input *ngSwitchCase="ColumnTypes.INPUT_COUNTER"
5551
- #cellComponentRef
5552
- class="inputNumber" #nsCounterInput
5553
- [isFormControl]="false"
5554
- [alignNumber]="getAlign(column)"
5555
- [disabled]="column.disabled ? column.disabled(result) : false"
5556
- [value]="result[column.columnDef]"
5557
- [required]="getRequired(column)"
5558
- [errorMessages]="getErrorMessageMap(column)"
5559
- [isDecimal]="getIsDecimal(column)"
5560
- [min]="column.min ? column.min(result) : null"
5561
- [max]="column.max ? column.max(result) : null"
5562
- (onChange)="onCellValueChange(result, column, $event);">
5563
- </cva-counter-input>
5564
- <cva-input *ngSwitchCase="ColumnTypes.INPUT"
5565
- #cellComponentRef
5566
- [isFormControl]="false"
5567
- [alignText]="getAlign(column)"
5568
- [disabled]="column.disabled ? column.disabled(result) : false"
5569
- [text]="result[column.columnDef]"
5570
- [minLength]="column.min ? column.min(result) : undefined"
5571
- [maxLength]="column.max ? column.max(result) : undefined"
5572
- [required]="getRequired(column)"
5573
- [errorMessages]="getErrorMessageMap(column)"
5574
- (onChange)="onCellValueChange(result, column, $event);">
5575
- </cva-input>
5576
- <cva-input *ngSwitchCase="ColumnTypes.INPUT_CURRENCY"
5577
- #cellComponentRef
5578
- [isFormControl]="false"
5579
- [alignText]="getAlign(column)"
5580
- [disabled]="column.disabled ? column.disabled(result) : false"
5581
- [text]="result[column.columnDef]"
5582
- [minLength]="column.min ? column.min(result) : undefined"
5583
- [maxLength]="column.max ? column.max(result) : undefined"
5584
- [required]="getRequired(column)"
5585
- [errorMessages]="getErrorMessageMap(column)"
5586
- (onChange)="onCellValueChange(result, column, $event);"
5587
- [pattern]="getIsDecimal(column) ? '^\\d{0,15}(\\.\\d*)?$' : '^\\d{0,15}$'"
5588
- [formatFunc]="formatFunc">
5589
- </cva-input>
5590
- <cva-date-picker *ngSwitchCase="ColumnTypes.DATE_PICKER"
5591
- #cellComponentRef
5592
- [value]="result[column.columnDef]"
5593
- [isFormControl]="false"
5594
- [minDate]="column.min ? column.min(result) : null"
5595
- [maxDate]="column.max ? column.max(result) : null"
5596
- [required]="getRequired(column)"
5597
- [disabled]="column.disabled ? column.disabled(result) : false"
5598
- [errorMessages]="getErrorMessageMap(column)"
5599
- (onChange)="onCellValueChange(result, column, $event);">
5600
- </cva-date-picker>
5601
- <cva-multi-select-autocomplete [isFormControl]="false"
5545
+ <div class="table-responsive"
5546
+ [ngClass]="{'fixed_header': isSticky||isStickyHeader, 'fixed_footer': isSticky||isStickyFooter}">
5547
+ <table mat-table [dataSource]="datasource" #matTable class="mat-elevation-z8 cva-smart-table">
5548
+ <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
5549
+ <ng-container *matHeaderCellDef>
5550
+ <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
5551
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan"
5552
+ *ngIf="onDisplayHeaderCell(column)">
5553
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
5554
+ [selectAllChecked]="selectAllChecked"
5555
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(value, $event)">
5556
+ </cva-table-header-cell>
5557
+ </th>
5558
+ </ng-container>
5559
+ <ng-container *matCellDef="let result; let i = index">
5560
+ <td mat-cell [ngClass]="TableService.getColumnClassName(column,result)"
5561
+ *ngIf="TableService.onDisplayCell(column, result)"
5562
+ [ngSwitch]="TableService.getColumnType(column, result)">
5563
+ <div title="{{column.title(result)}}"
5564
+ *ngSwitchCase="ColumnTypeEnum.VIEW"
5565
+ class="viewData {{TableService.getColumnClassName(column,result)}}"
5566
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
5567
+ {{ column.cell(result) }}
5568
+ </div>
5569
+ <div class="link viewData"
5570
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5571
+ *ngSwitchCase="ColumnTypeEnum.LINK"
5572
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5573
+ title="{{column.title(result)}}">
5574
+ <a [routerLink]="[column.link ? column.link(result) : '']">{{ column.cell(result) }}</a>
5575
+ </div>
5576
+ <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5577
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5578
+ *ngSwitchCase="ColumnTypeEnum.IMG"
5579
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5580
+ title="{{column.title(result)}}">
5581
+ <img [src]="column.cell(result) | secure | async"
5582
+ #imgRef
5583
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
5584
+ </div>
5585
+ <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5586
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5587
+ *ngSwitchCase="ColumnTypeEnum.IMG_NO_SECURE"
5588
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5589
+ title="{{column.title(result)}}">
5590
+ <img [src]="column.cell(result)"
5591
+ #imgRef
5592
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
5593
+ </div>
5594
+ <div *ngSwitchCase="ColumnTypeEnum.BASE64"
5595
+ class="viewData img-view base64 {{TableService.getColumnClassName(column,result)}}"
5596
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5597
+ title="{{column.title(result)}}">
5598
+ <img [src]="'data:image/png;base64,'+column.cell(result)"
5599
+ #base64ImgRef
5600
+ (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)"
5601
+ alt=""/>
5602
+ </div>
5603
+ <ng-container *ngSwitchCase="ColumnTypeEnum.BUTTON">
5604
+ <div *ngIf="!!column.button"
5605
+ class="{{TableService.getColumnClassName(column, result)}}"
5606
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5607
+ (click)="$event.stopPropagation()">
5608
+ <button mat-icon-button type="button"
5609
+ color="{{column.button.color}}"
5610
+ [ngClass]="column.button.className"
5611
+ (click)="onClick(column.button.click, result, i)"
5612
+ disabled="{{column.button && column.button.disabled ? column.button.disabled(result) : false}}"
5613
+ matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
5614
+ [ngSwitch]="TableService.getIconType(column.button)">
5615
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ column.button.icon }}
5616
+ </mat-icon>
5617
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{column.button.icon}}"></i>
5618
+ </button>
5619
+ </div>
5620
+ </ng-container>
5621
+ <cva-counter-input *ngSwitchCase="ColumnTypeEnum.INPUT_COUNTER"
5622
+ #cellComponentRef
5623
+ class="inputNumber" #nsCounterInput
5624
+ [isFormControl]="false"
5625
+ [alignNumber]="getAlign(column)"
5626
+ [disabled]="column.disabled ? column.disabled(result) : false"
5627
+ [value]="result[column.columnDef]"
5628
+ [required]="TableService.getRequired(column)"
5629
+ [errorMessages]="getErrorMessageMap(column)"
5630
+ [isDecimal]="getIsDecimal(column)"
5631
+ [min]="column.min ? column.min(result) : null"
5632
+ [max]="column.max ? column.max(result) : null"
5633
+ (onChange)="onCellValueChange(result, column, $event);">
5634
+ </cva-counter-input>
5635
+ <cva-input *ngSwitchCase="ColumnTypeEnum.INPUT"
5636
+ #cellComponentRef
5637
+ [isFormControl]="false"
5638
+ [alignText]="getAlign(column)"
5639
+ [disabled]="column.disabled ? column.disabled(result) : false"
5640
+ [text]="result[column.columnDef]"
5641
+ [minLength]="column.min ? column.min(result) : undefined"
5642
+ [maxLength]="column.max ? column.max(result) : undefined"
5643
+ [required]="TableService.getRequired(column)"
5644
+ [errorMessages]="getErrorMessageMap(column)"
5645
+ (onChange)="onCellValueChange(result, column, $event);">
5646
+ </cva-input>
5647
+ <cva-input *ngSwitchCase="ColumnTypeEnum.INPUT_CURRENCY"
5648
+ #cellComponentRef
5649
+ [isFormControl]="false"
5650
+ [alignText]="getAlign(column)"
5651
+ [disabled]="column.disabled ? column.disabled(result) : false"
5652
+ [text]="result[column.columnDef]"
5653
+ [minLength]="column.min ? column.min(result) : undefined"
5654
+ [maxLength]="column.max ? column.max(result) : undefined"
5655
+ [required]="TableService.getRequired(column)"
5656
+ [errorMessages]="getErrorMessageMap(column)"
5657
+ (onChange)="onCellValueChange(result, column, $event);"
5658
+ [pattern]="getIsDecimal(column) ? '^\\d{0,15}(\\.\\d*)?$' : '^\\d{0,15}$'"
5659
+ [formatFunc]="formatFunc">
5660
+ </cva-input>
5661
+ <cva-date-picker *ngSwitchCase="ColumnTypeEnum.DATE_PICKER"
5602
5662
  #cellComponentRef
5603
- *ngSwitchCase="ColumnTypes.MULTI_SELECT_AUTOCOMPLETE"
5604
- class="multiSelectAutocomplete"
5605
- [isTree]="column.isTree??false"
5606
5663
  [value]="result[column.columnDef]"
5607
- [errorMessages]="getErrorMessageMap(column)"
5608
- [required]="getRequired(column)"
5664
+ [isFormControl]="false"
5665
+ [minDate]="column.min ? column.min(result) : null"
5666
+ [maxDate]="column.max ? column.max(result) : null"
5667
+ [required]="TableService.getRequired(column)"
5609
5668
  [disabled]="column.disabled ? column.disabled(result) : false"
5610
- [multiple]="column.isMultipleSelect??false"
5611
- [options]="column.optionValues ? column.optionValues(result) : []"
5612
- (selectionChange)="onCellValueChange(result, column, $event);">
5613
- </cva-multi-select-autocomplete>
5614
- <div class="checkbox-cell"
5615
- fxLayout="row"
5616
- [fxLayoutAlign]="TableService.alignCellContent(column)"
5617
- *ngSwitchCase="ColumnTypes.CHECKBOX">
5618
- <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
5619
- *ngIf="column.display ? column.display(result) : true"
5620
- [disabled]="column.disabled ? column.disabled(result) : false"
5621
- (change)="toggleSelect($event,result, column)">
5622
- </mat-checkbox>
5623
- </div>
5624
- <cva-live-searching *ngSwitchCase="ColumnTypes.LIVE_SEARCHING"
5625
- #cellComponentRef
5626
- [isFormControl]="false" [required]="getRequired(column)"
5627
- [row]="result" [columnDef]="column.columnDef"
5628
- [searchFn]="column.searchFn"
5629
- [mappingConfig]="column.mappingConfig"
5630
- [displayKey]="column.displayKey??''"
5631
- [errorMessages]="getErrorMessageMap(column)"
5632
- (onChange)="onCellValueChange(result, column, $event)">
5633
- </cva-live-searching>
5634
- </td>
5635
- </ng-container>
5636
- </ng-container>
5637
- <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
5638
- <ng-container *matHeaderCellDef="let header">
5639
- <th mat-header-cell
5640
- [ngClass]="button.className"
5641
- *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
5642
- (click)="$event.stopPropagation()"
5643
- [attr.colspan]="buttonColspan">
5644
- <!-- [fxFlex]="getHeaderButtonWidth(i) + 'px' "-->
5645
- <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
5646
- <button mat-icon-button type="button"
5647
- class="{{button.className}}"
5648
- color="{{$any(btnHeader).color}}"
5649
- (click)="onClick($any(btnHeader).click, null, null)"
5650
- [disabled]="(btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false"
5651
- *ngIf="(btnHeader && btnHeader.display) ? btnHeader.display(header) : false"
5652
- matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
5653
- [ngSwitch]="TableService.getIconType($any(btnHeader))">
5654
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ $any(btnHeader).icon }}</mat-icon>
5655
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
5656
- </button>
5657
- </ng-container>
5658
- <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
5659
- <div title="{{$any(btnHeader) | translate}}"
5660
- class="viewData"
5661
- fxLayout="row"
5662
- fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
5663
- {{ $any(btnHeader) | translate }}
5664
- </div>
5665
- </ng-container>
5666
- </th>
5667
- </ng-container>
5668
- <ng-container *matCellDef="let cell; let i = index">
5669
- <td mat-cell [ngClass]="button.className"
5670
- *ngIf="TableService.onDisplayButtonCell(button, cell)"
5671
- (click)="$event.stopPropagation()">
5672
- <button mat-icon-button type="button"
5673
- color="{{button.color}}"
5674
- [ngClass]="button.className"
5675
- (click)="onClick(button.click, cell, i)"
5676
- disabled="{{button && button.disabled ? button.disabled(cell) : false}}"
5677
- matTooltip="{{(button.title ? button.title : '') | translate}}"
5678
- [ngSwitch]="TableService.getIconType(button)">
5679
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ button.icon }}</mat-icon>
5680
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{button.icon}}"></i>
5681
- </button>
5682
- </td>
5683
- </ng-container>
5684
- </ng-container>
5685
- <ng-container *ngFor="let column of columns">
5686
- <ng-container *ngFor="let footer of column.footers; let i = index"
5687
- matColumnDef="{{i}}-{{column.columnDef}}">
5688
- <ng-container *matFooterCellDef>
5689
- <td mat-footer-cell *ngIf="onDisplayFooter(footer, datasource.data)"
5690
- [attr.colspan]="TableService.getColspan(footer, datasource.data)"
5691
- class="{{TableService.getColumnClassName(column,datasource.data)}} {{TableService.getColumnClassName(column.footer,datasource.data)}}">
5692
- <div title="{{footer.title(datasource.data)}}"
5693
- class="viewData {{TableService.getColumnClassName(column,datasource.data)}}"
5694
- fxLayout="row"
5695
- [fxLayoutAlign]="footer.align ? footer.align : AlignEnum.LEFT">
5696
- {{ footer.cell(datasource.data) }}
5697
- </div>
5698
- </td>
5699
- </ng-container>
5700
- </ng-container>
5701
- </ng-container>
5702
- <tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: isSticky||isStickyHeader"></tr>
5703
- <tr mat-row *matRowDef="let result; columns: displayedColumns;" class="{{result.className}}"
5704
- [ngClass]="{'childRow0': !!result.isChildRow && result.parentRowClassIndex === 0,
5669
+ [errorMessages]="getErrorMessageMap(column)"
5670
+ (onChange)="onCellValueChange(result, column, $event);">
5671
+ </cva-date-picker>
5672
+ <cva-multi-select-autocomplete [isFormControl]="false"
5673
+ #cellComponentRef
5674
+ *ngSwitchCase="ColumnTypeEnum.MULTI_SELECT_AUTOCOMPLETE"
5675
+ class="multiSelectAutocomplete"
5676
+ [isTree]="column.isTree??false"
5677
+ [value]="result[column.columnDef]"
5678
+ [errorMessages]="getErrorMessageMap(column)"
5679
+ [required]="TableService.getRequired(column)"
5680
+ [disabled]="column.disabled ? column.disabled(result) : false"
5681
+ [multiple]="column.isMultipleSelect??false"
5682
+ [options]="column.optionValues ? column.optionValues(result) : []"
5683
+ (selectionChange)="onCellValueChange(result, column, $event);">
5684
+ </cva-multi-select-autocomplete>
5685
+ <div class="checkbox-cell"
5686
+ fxLayout="row"
5687
+ [fxLayoutAlign]="TableService.alignCellContent(column)"
5688
+ *ngSwitchCase="ColumnTypeEnum.CHECKBOX">
5689
+ <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
5690
+ *ngIf="column.display ? column.display(result) : true"
5691
+ [disabled]="column.disabled ? column.disabled(result) : false"
5692
+ (change)="toggleSelect($event,result, column)">
5693
+ </mat-checkbox>
5694
+ </div>
5695
+ <cva-live-searching *ngSwitchCase="ColumnTypeEnum.LIVE_SEARCHING"
5696
+ #cellComponentRef
5697
+ [isFormControl]="false" [required]="TableService.getRequired(column)"
5698
+ [row]="result" [columnDef]="column.columnDef"
5699
+ [searchFn]="column.searchFn"
5700
+ [mappingConfig]="column.mappingConfig"
5701
+ [displayKey]="column.displayKey??''"
5702
+ [errorMessages]="getErrorMessageMap(column)"
5703
+ (onChange)="onCellValueChange(result, column, $event)">
5704
+ </cva-live-searching>
5705
+ </td>
5706
+ </ng-container>
5707
+ </ng-container>
5708
+ <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
5709
+ <ng-container *matHeaderCellDef="let header">
5710
+ <th mat-header-cell
5711
+ [ngClass]="button.className"
5712
+ *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
5713
+ (click)="$event.stopPropagation()"
5714
+ [attr.colspan]="buttonColspan" [attr.rowspan]="superHeaders.length + 1">
5715
+ <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
5716
+ <button mat-icon-button type="button"
5717
+ class="{{button.className}}"
5718
+ color="{{$any(btnHeader).color}}"
5719
+ (click)="onClick($any(btnHeader).click, null, null)"
5720
+ [disabled]="(btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false"
5721
+ *ngIf="(btnHeader && btnHeader.display) ? btnHeader.display(header) : false"
5722
+ matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
5723
+ [ngSwitch]="TableService.getIconType($any(btnHeader))">
5724
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ $any(btnHeader).icon }}
5725
+ </mat-icon>
5726
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
5727
+ </button>
5728
+ </ng-container>
5729
+ <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
5730
+ <div title="{{$any(btnHeader) | translate}}"
5731
+ class="viewData"
5732
+ fxLayout="row"
5733
+ fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
5734
+ {{ $any(btnHeader) | translate }}
5735
+ </div>
5736
+ </ng-container>
5737
+ </th>
5738
+ </ng-container>
5739
+ <ng-container *matCellDef="let cell; let i = index">
5740
+ <td mat-cell [ngClass]="button.className"
5741
+ *ngIf="TableService.onDisplayButtonCell(button, cell)"
5742
+ (click)="$event.stopPropagation()">
5743
+ <button mat-icon-button type="button"
5744
+ color="{{button.color}}"
5745
+ [ngClass]="button.className"
5746
+ (click)="onClick(button.click, cell, i)"
5747
+ disabled="{{button && button.disabled ? button.disabled(cell) : false}}"
5748
+ matTooltip="{{(button.title ? button.title : '') | translate}}"
5749
+ [ngSwitch]="TableService.getIconType(button)">
5750
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ button.icon }}</mat-icon>
5751
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{button.icon}}"></i>
5752
+ </button>
5753
+ </td>
5754
+ </ng-container>
5755
+ </ng-container>
5756
+ <ng-container *ngFor="let column of columns">
5757
+ <ng-container *ngFor="let footer of column.footers; let i = index"
5758
+ matColumnDef="{{i}}-{{column.columnDef}}">
5759
+ <ng-container *matFooterCellDef>
5760
+ <td mat-footer-cell *ngIf="onDisplayFooter(footer, datasource.data)"
5761
+ [attr.colspan]="TableService.getColspan(footer, datasource.data)"
5762
+ class="{{TableService.getColumnClassName(column,datasource.data)}} {{TableService.getColumnClassName(column.footer,datasource.data)}}">
5763
+ <div title="{{footer.title(datasource.data)}}"
5764
+ class="viewData {{TableService.getColumnClassName(column,datasource.data)}}"
5765
+ fxLayout="row"
5766
+ [fxLayoutAlign]="footer.align ? footer.align : AlignEnum.LEFT">
5767
+ {{ footer.cell(datasource.data) }}
5768
+ </div>
5769
+ </td>
5770
+ </ng-container>
5771
+ </ng-container>
5772
+ </ng-container>
5773
+
5774
+ <ng-container *ngFor="let row of superHeaders">
5775
+ <ng-container *ngFor="let column of row" matColumnDef="{{column.columnDef}}">
5776
+ <ng-container *ngIf="onDisplayHeaderCell(column)">
5777
+ <th mat-header-cell *matHeaderCellDef
5778
+ [ngClass]="TableService.getColumnHeaderClassName(column)"
5779
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan">
5780
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
5781
+ [selectAllChecked]="selectAllChecked"
5782
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(value, $event)">
5783
+ </cva-table-header-cell>
5784
+ </th>
5785
+ </ng-container>
5786
+ </ng-container>
5787
+ </ng-container>
5788
+
5789
+ <ng-container *ngFor="let row of superHeaders; let rowIndex = index">
5790
+ <tr mat-header-row
5791
+ *matHeaderRowDef="TableService.getHeaderColumns(row, rowIndex, buttons); sticky: isSticky||isStickyHeader"></tr>
5792
+ </ng-container>
5793
+ <tr mat-header-row
5794
+ *matHeaderRowDef="TableService.getHeaderColumns(columns, superHeaders.length, buttons); sticky: isSticky||isStickyHeader"></tr>
5795
+ <tr mat-row *matRowDef="let result; columns: TableService.getHeaderColumns(columns, 0, buttons);"
5796
+ class="{{result.className}}"
5797
+ [ngClass]="{'childRow0': !!result.isChildRow && result.parentRowClassIndex === 0,
5705
5798
  'parentRow0': !result.isChildRow && result.parentRowClassIndex === 0,
5706
5799
  'childRow1': !!result.isChildRow && result.parentRowClassIndex === 1,
5707
5800
  'parentRow1': !result.isChildRow && result.parentRowClassIndex === 1}"
5708
- ></tr>
5709
- <ng-container *ngFor="let df of displayedFooters">
5710
- <tr mat-footer-row *matFooterRowDef="df; sticky: isSticky||isStickyFooter"></tr>
5711
- </ng-container>
5712
- </table>
5713
- </div>
5714
- `,
5801
+ ></tr>
5802
+ <ng-container *ngFor="let df of displayedFooters">
5803
+ <tr mat-footer-row *matFooterRowDef="df; sticky: isSticky||isStickyFooter"></tr>
5804
+ </ng-container>
5805
+ </table>
5806
+ </div>
5807
+ `,
5715
5808
  }]
5716
5809
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
5717
5810
  type: Inject,
@@ -5729,6 +5822,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
5729
5822
  type: Input
5730
5823
  }], buttons: [{
5731
5824
  type: Input
5825
+ }], superHeaders: [{
5826
+ type: Input
5732
5827
  }], value: [{
5733
5828
  type: Input
5734
5829
  }], minRow: [{
@@ -9540,7 +9635,8 @@ class NiceComponentLibraryModule {
9540
9635
  };
9541
9636
  }
9542
9637
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: NiceComponentLibraryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9543
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.5", ngImport: i0, type: NiceComponentLibraryModule, declarations: [CvaTableComponent,
9638
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.5", ngImport: i0, type: NiceComponentLibraryModule, declarations: [CvaTableHeaderCellComponent,
9639
+ CvaTableComponent,
9544
9640
  CvaSmartTableComponent,
9545
9641
  CvaInputComponent,
9546
9642
  CvaCounterInputComponent,
@@ -9622,6 +9718,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
9622
9718
  FlexLayoutModule,
9623
9719
  ],
9624
9720
  declarations: [
9721
+ CvaTableHeaderCellComponent,
9625
9722
  CvaTableComponent,
9626
9723
  CvaSmartTableComponent,
9627
9724
  CvaInputComponent,