@c10t/nice-component-library 0.0.23 → 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 {
@@ -1494,6 +1496,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
1494
1496
 
1495
1497
  class TableService {
1496
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
+ }
1497
1519
  static displayHeaderName(column, moduleName) {
1498
1520
  if (typeof (column.header) === 'string') {
1499
1521
  return moduleName + '.table.header.' + column.header;
@@ -1579,6 +1601,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
1579
1601
  args: [{ providedIn: 'root' }]
1580
1602
  }] });
1581
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
+
1582
1669
  class ValidatorService {
1583
1670
  static invalid(control) {
1584
1671
  if (!control || !control.dirty) {
@@ -2447,6 +2534,10 @@ class CvaTableComponent {
2447
2534
  config;
2448
2535
  cdRef;
2449
2536
  loaderService;
2537
+ ColumnTypeEnum = ColumnTypeEnum;
2538
+ AlignEnum = AlignEnum;
2539
+ IconTypeEnum = IconTypeEnum;
2540
+ TableService = TableService;
2450
2541
  moduleName = '';
2451
2542
  varPaging;
2452
2543
  results = new MatTableDataSource([]);
@@ -2454,6 +2545,7 @@ class CvaTableComponent {
2454
2545
  buttons = [];
2455
2546
  showTotalPages = 5;
2456
2547
  expandHeaderButton;
2548
+ superHeaders = [];
2457
2549
  pageSizeOptions;
2458
2550
  pagingChange = new EventEmitter(true);
2459
2551
  clickAction = new EventEmitter();
@@ -2486,28 +2578,6 @@ class CvaTableComponent {
2486
2578
  this.varPaging = value;
2487
2579
  }
2488
2580
  }
2489
- get displayedColumns() {
2490
- let columnsDef = this.columns.map(c => c.columnDef);
2491
- if (this.buttons) {
2492
- columnsDef = columnsDef.concat(this.buttons.map(b => b.columnDef));
2493
- }
2494
- // if (!!this.expandHeaderButton) {
2495
- // columnsDef = columnsDef.concat(this.expandHeaderButton.columnDef);
2496
- // }
2497
- return columnsDef;
2498
- }
2499
- get ColumnTypes() {
2500
- return ColumnTypeEnum;
2501
- }
2502
- get IconTypes() {
2503
- return IconTypeEnum;
2504
- }
2505
- get AlignEnum() {
2506
- return AlignEnum;
2507
- }
2508
- get TableService() {
2509
- return TableService;
2510
- }
2511
2581
  isExpandColumn(col) {
2512
2582
  return !!col.isExpandOptionColumn ? col.isExpandOptionColumn() : false;
2513
2583
  }
@@ -2546,14 +2616,6 @@ class CvaTableComponent {
2546
2616
  onDisplayCell(column, cell) {
2547
2617
  return TableService.onDisplayCell(column, cell) && !this.isExpandColumn(column);
2548
2618
  }
2549
- toggleSelectAll(val, col) {
2550
- this.results.data.forEach(v => {
2551
- v.checked = val.checked;
2552
- });
2553
- if (col.onHeaderCellValueChange) {
2554
- col.onHeaderCellValueChange(val.checked);
2555
- }
2556
- }
2557
2619
  toggleSelect(val, result, column) {
2558
2620
  let count = 0;
2559
2621
  this.results.data.forEach(v => {
@@ -2567,7 +2629,7 @@ class CvaTableComponent {
2567
2629
  }
2568
2630
  }
2569
2631
  ngAfterViewChecked() {
2570
- this.getHeaderButtonColspan();
2632
+ this.updateHeaderButtonColspan();
2571
2633
  this.cdRef.detectChanges();
2572
2634
  }
2573
2635
  hasData() {
@@ -2586,9 +2648,8 @@ class CvaTableComponent {
2586
2648
  this.getPage({ pageIndex: this.goToPageNumber - 1, pageSize: this.varPaging.pageSize });
2587
2649
  }
2588
2650
  }
2589
- getHeaderButtonColspan() {
2651
+ updateHeaderButtonColspan() {
2590
2652
  this.buttonColspan = TableService.getHeaderButtonColspan(this.buttons, this.results.data);
2591
- return this.buttonColspan;
2592
2653
  }
2593
2654
  onChangeGoToPageNumber($event) {
2594
2655
  if ($event === null || Number.isNaN($event) || !Number.isSafeInteger($event)) {
@@ -2607,201 +2668,212 @@ class CvaTableComponent {
2607
2668
  }
2608
2669
  }
2609
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 });
2610
- 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: [
2611
2672
  { provide: MatPaginatorIntl, useClass: MultiLanguageTablePaginator },
2612
2673
  ], ngImport: i0, template: `
2613
- <div class="table-responsive">
2614
- <ng-container *ngIf="!!expandHeaderButton">
2615
- <cva-header-expand-button [moduleName]="moduleName" [expandHeaderButton]="expandHeaderButton"
2616
- [columns]="columns" (onChange)="this.onChangeDisplayColumn.emit($event)">
2617
- </cva-header-expand-button>
2618
- </ng-container>
2619
- <table mat-table #table [dataSource]="results" class="mat-elevation-z8 cva-table">
2620
- <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
2621
- <ng-container *matHeaderCellDef>
2622
- <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
2623
- *ngIf="onDisplayHeaderCell(column)"
2624
- [ngSwitch]="TableService.getColumnType(column, null)">
2625
- <div fxLayout="row" *ngSwitchDefault
2626
- class="viewData"
2627
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2628
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
2629
- {{ TableService.displayHeaderName(column, moduleName) | translate }}
2630
- </div>
2631
- <mat-checkbox *ngSwitchCase="ColumnTypes.CHECKBOX"
2632
- color="primary" class="box-select-all" [(ngModel)]="selectAllChecked"
2633
- (change)="toggleSelectAll($event, column)"
2634
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
2635
- </mat-checkbox>
2636
- </th>
2637
- </ng-container>
2638
- <ng-container *matCellDef="let result;">
2639
- <td mat-cell [ngClass]="TableService.getColumnClassName(column, result)"
2640
- *ngIf="onDisplayCell(column, result)"
2641
- [ngSwitch]="TableService.getColumnType(column, result)">
2642
- <div title="{{column.title(result)}}" *ngSwitchDefault
2643
- class="{{TableService.getColumnClassName(column, result)}} viewData"
2644
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
2645
- {{ column.cell(result) }}
2646
- </div>
2647
- <ng-container *ngSwitchCase="ColumnTypes.BUTTON">
2648
- <div *ngIf="!!column.button"
2649
- class="{{TableService.getColumnClassName(column, result)}}"
2650
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2651
- (click)="$event.stopPropagation()">
2652
- <button mat-icon-button color="{{column.button.color}}"
2653
- (click)="onClick(column.button.click, result)"
2654
- disabled="{{column.button.disabled ? column.button.disabled(result) : false}}"
2655
- matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
2656
- class="{{column.button.className}}" [ngSwitch]="TableService.getIconType(column.button)">
2657
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ column.button.icon }}</mat-icon>
2658
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{column.button.icon}}"></i>
2659
- </button>
2660
- </div>
2661
- </ng-container>
2662
- <div class="link viewData"
2663
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2664
- *ngSwitchCase="ColumnTypes.LINK"
2665
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2666
- title="{{column.title(result)}}">
2667
- <a [routerLink]="[column.link(result)]">{{ column.cell(result) }}</a>
2668
- </div>
2669
-
2670
- <div class="label-status viewData"
2671
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2672
- *ngSwitchCase="ColumnTypes.STYLE_CSS"
2673
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2674
- title="{{column.title(result)}}">
2675
- <span [style]="column.style(result)">{{ column.cell(result) }}</span>
2676
- </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>
2677
2725
 
2678
- <div class="img-view viewData"
2679
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2680
- *ngSwitchCase="ColumnTypes.IMG"
2681
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2682
- title="{{column.title(result)}}">
2683
- <img [src]="column.cell(result) | secure | async" #imgRef
2684
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2685
- </div>
2686
- <div class="img-view viewData"
2687
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2688
- *ngSwitchCase="ColumnTypes.IMG_NO_SECURE"
2689
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2690
- title="{{column.title(result)}}">
2691
- <img [src]="column.cell(result)" #imgRef
2692
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2693
- </div>
2694
- <div *ngSwitchCase="ColumnTypes.BASE64"
2695
- class="img-view viewData"
2696
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2697
- title="{{column.title(result)}}">
2698
- <img [src]="'data:image/png;base64,'+column.cell(result)"
2699
- #base64ImgRef
2700
- (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2701
- </div>
2702
- <ng-container *ngSwitchCase="ColumnTypes.CHECKBOX">
2703
- <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
2704
- *ngIf="column.display ? column.display(result) : true"
2705
- [disabled]="column.disabled ? column.disabled(result) : false"
2706
- (change)="toggleSelect($event, result, column)"
2707
- [fxLayoutAlign]="TableService.alignCellContent(column)">
2708
- </mat-checkbox>
2709
- </ng-container>
2710
- </td>
2711
- </ng-container>
2712
- </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>
2713
2733
 
2714
- <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
2715
- <ng-container *matHeaderCellDef="let header">
2716
- <!-- [fxFlex]="(isButtonHeader(button) ? headerButtonWidthDefault : getHeaderButtonWidth(i)) + 'px' "-->
2717
- <!-- [fxFlex]="getHeaderButtonWidth(i) + 'px' "-->
2718
- <th mat-header-cell [ngClass]="button.className"
2719
- *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
2720
- (click)="$event.stopPropagation()"
2721
- [attr.colspan]="buttonColspan"
2722
- >
2723
- <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
2724
- <button mat-icon-button
2725
- class="{{button.className}}"
2726
- *ngIf="((btnHeader && btnHeader.display) ? btnHeader.display(header) : false) "
2727
- [disabled]="((btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false) "
2728
- color="{{$any(btnHeader).color}}"
2729
- (click)="onClick($any(btnHeader).click, null)"
2730
- matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
2731
- [ngSwitch]="TableService.getIconType($any(btnHeader))">
2732
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ $any(btnHeader).icon }}</mat-icon>
2733
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
2734
- </button>
2735
- </ng-container>
2736
- <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
2737
- <div title="{{$any(btnHeader) | translate}}"
2738
- class="viewData"
2739
- fxLayout="row"
2740
- fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
2741
- {{ $any(btnHeader) | translate }}
2742
- </div>
2743
- </ng-container>
2744
- </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>
2745
2770
 
2746
- </ng-container>
2747
- <ng-container *matCellDef="let cell">
2748
- <!-- [fxFlex]="headerButtonWidthDefault + 'px'"-->
2749
- <td mat-cell [ngClass]="button.className"
2750
- *ngIf="TableService.onDisplayButtonCell(button, cell)"
2751
- (click)="$event.stopPropagation()">
2752
- <button mat-icon-button color="{{button.color}}"
2753
- (click)="onClick(button.click, cell)"
2754
- disabled="{{button.disabled ? button.disabled(cell) : false}}"
2755
- matTooltip="{{(button.title ? button.title : '') | translate}}"
2756
- class="{{button.className}}" [ngSwitch]="TableService.getIconType(button)">
2757
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ button.icon }}</mat-icon>
2758
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{button.icon}}"></i>
2759
- </button>
2760
- </td>
2761
- </ng-container>
2762
- </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>
2763
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>
2764
2831
 
2765
- <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
2766
- <tr mat-row *matRowDef="let result; columns: displayedColumns; let i = index"
2767
- [ngClass]="result.className"
2768
- (click)="onRowClick(result, i)"></tr>
2769
- </table>
2770
- <div *ngIf="!(loaderService.isLoading | async)">
2771
- <div class="paging"
2772
- *ngIf="hasData()"
2773
- fxLayout fxLayoutAlign="space-between center">
2774
- <mat-paginator style-paginator
2775
- [showTotalPages]="showTotalPages"
2776
- [paging]="varPaging"
2777
- (pagingChangeEvent)="getPage($event)"
2778
- [length]="varPaging.totalElements"
2779
- [pageSize]="varPaging.pageSize"
2780
- [pageSizeOptions]="pageSizeOptions"
2781
- [pageIndex]="varPaging.pageNumber - 1">
2782
- </mat-paginator>
2783
- <div class="go-to-page"
2784
- fxLayout fxLayoutGap="0.3rem" fxLayoutAlign="start baseline">
2785
- <mat-label>{{ 'common.gotopage' | translate }}</mat-label>
2786
- <cva-counter-input [(ngModel)]="goToPageNumber"
2787
- (ngModelChange)="onChangeGoToPageNumber($event)"
2788
- (onEnter)="goToPage()"
2789
- [max]="getTotalPage() ? getTotalPage() : 1"
2790
- [min]="1"
2791
- [isFloatLabel]="false"
2792
- [errorMessages]="errorMsg"
2793
- ></cva-counter-input>
2794
- <mat-label style="white-space: nowrap">{{ '/' + getTotalPage() }}</mat-label>
2795
- <button mat-flat-button
2796
- [disabled]="goToPageNumber < 1 || goToPageNumber > getTotalPage()"
2797
- (click)="goToPage()">{{ 'common.go' | translate }}
2798
- </button>
2799
- </div>
2800
- <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>
2801
2875
  </div>
2802
- </div>
2803
- </div>
2804
- `, 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" }] });
2805
2877
  }
2806
2878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaTableComponent, decorators: [{
2807
2879
  type: Component,
@@ -2809,198 +2881,209 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
2809
2881
  selector: 'cva-table',
2810
2882
  standalone: false,
2811
2883
  template: `
2812
- <div class="table-responsive">
2813
- <ng-container *ngIf="!!expandHeaderButton">
2814
- <cva-header-expand-button [moduleName]="moduleName" [expandHeaderButton]="expandHeaderButton"
2815
- [columns]="columns" (onChange)="this.onChangeDisplayColumn.emit($event)">
2816
- </cva-header-expand-button>
2817
- </ng-container>
2818
- <table mat-table #table [dataSource]="results" class="mat-elevation-z8 cva-table">
2819
- <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
2820
- <ng-container *matHeaderCellDef>
2821
- <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
2822
- *ngIf="onDisplayHeaderCell(column)"
2823
- [ngSwitch]="TableService.getColumnType(column, null)">
2824
- <div fxLayout="row" *ngSwitchDefault
2825
- class="viewData"
2826
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2827
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
2828
- {{ TableService.displayHeaderName(column, moduleName) | translate }}
2829
- </div>
2830
- <mat-checkbox *ngSwitchCase="ColumnTypes.CHECKBOX"
2831
- color="primary" class="box-select-all" [(ngModel)]="selectAllChecked"
2832
- (change)="toggleSelectAll($event, column)"
2833
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
2834
- </mat-checkbox>
2835
- </th>
2836
- </ng-container>
2837
- <ng-container *matCellDef="let result;">
2838
- <td mat-cell [ngClass]="TableService.getColumnClassName(column, result)"
2839
- *ngIf="onDisplayCell(column, result)"
2840
- [ngSwitch]="TableService.getColumnType(column, result)">
2841
- <div title="{{column.title(result)}}" *ngSwitchDefault
2842
- class="{{TableService.getColumnClassName(column, result)}} viewData"
2843
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
2844
- {{ column.cell(result) }}
2845
- </div>
2846
- <ng-container *ngSwitchCase="ColumnTypes.BUTTON">
2847
- <div *ngIf="!!column.button"
2848
- class="{{TableService.getColumnClassName(column, result)}}"
2849
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2850
- (click)="$event.stopPropagation()">
2851
- <button mat-icon-button color="{{column.button.color}}"
2852
- (click)="onClick(column.button.click, result)"
2853
- disabled="{{column.button.disabled ? column.button.disabled(result) : false}}"
2854
- matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
2855
- class="{{column.button.className}}" [ngSwitch]="TableService.getIconType(column.button)">
2856
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ column.button.icon }}</mat-icon>
2857
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{column.button.icon}}"></i>
2858
- </button>
2859
- </div>
2860
- </ng-container>
2861
- <div class="link viewData"
2862
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2863
- *ngSwitchCase="ColumnTypes.LINK"
2864
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2865
- title="{{column.title(result)}}">
2866
- <a [routerLink]="[column.link(result)]">{{ column.cell(result) }}</a>
2867
- </div>
2868
-
2869
- <div class="label-status viewData"
2870
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2871
- *ngSwitchCase="ColumnTypes.STYLE_CSS"
2872
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2873
- title="{{column.title(result)}}">
2874
- <span [style]="column.style(result)">{{ column.cell(result) }}</span>
2875
- </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>
2876
2935
 
2877
- <div class="img-view viewData"
2878
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2879
- *ngSwitchCase="ColumnTypes.IMG"
2880
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2881
- title="{{column.title(result)}}">
2882
- <img [src]="column.cell(result) | secure | async" #imgRef
2883
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2884
- </div>
2885
- <div class="img-view viewData"
2886
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2887
- *ngSwitchCase="ColumnTypes.IMG_NO_SECURE"
2888
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2889
- title="{{column.title(result)}}">
2890
- <img [src]="column.cell(result)" #imgRef
2891
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2892
- </div>
2893
- <div *ngSwitchCase="ColumnTypes.BASE64"
2894
- class="img-view viewData"
2895
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2896
- title="{{column.title(result)}}">
2897
- <img [src]="'data:image/png;base64,'+column.cell(result)"
2898
- #base64ImgRef
2899
- (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2900
- </div>
2901
- <ng-container *ngSwitchCase="ColumnTypes.CHECKBOX">
2902
- <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
2903
- *ngIf="column.display ? column.display(result) : true"
2904
- [disabled]="column.disabled ? column.disabled(result) : false"
2905
- (change)="toggleSelect($event, result, column)"
2906
- [fxLayoutAlign]="TableService.alignCellContent(column)">
2907
- </mat-checkbox>
2908
- </ng-container>
2909
- </td>
2910
- </ng-container>
2911
- </ng-container>
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>
2912
2943
 
2913
- <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
2914
- <ng-container *matHeaderCellDef="let header">
2915
- <!-- [fxFlex]="(isButtonHeader(button) ? headerButtonWidthDefault : getHeaderButtonWidth(i)) + 'px' "-->
2916
- <!-- [fxFlex]="getHeaderButtonWidth(i) + 'px' "-->
2917
- <th mat-header-cell [ngClass]="button.className"
2918
- *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
2919
- (click)="$event.stopPropagation()"
2920
- [attr.colspan]="buttonColspan"
2921
- >
2922
- <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
2923
- <button mat-icon-button
2924
- class="{{button.className}}"
2925
- *ngIf="((btnHeader && btnHeader.display) ? btnHeader.display(header) : false) "
2926
- [disabled]="((btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false) "
2927
- color="{{$any(btnHeader).color}}"
2928
- (click)="onClick($any(btnHeader).click, null)"
2929
- matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
2930
- [ngSwitch]="TableService.getIconType($any(btnHeader))">
2931
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ $any(btnHeader).icon }}</mat-icon>
2932
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
2933
- </button>
2934
- </ng-container>
2935
- <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
2936
- <div title="{{$any(btnHeader) | translate}}"
2937
- class="viewData"
2938
- fxLayout="row"
2939
- fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
2940
- {{ $any(btnHeader) | translate }}
2941
- </div>
2942
- </ng-container>
2943
- </th>
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>
2944
2980
 
2945
- </ng-container>
2946
- <ng-container *matCellDef="let cell">
2947
- <!-- [fxFlex]="headerButtonWidthDefault + 'px'"-->
2948
- <td mat-cell [ngClass]="button.className"
2949
- *ngIf="TableService.onDisplayButtonCell(button, cell)"
2950
- (click)="$event.stopPropagation()">
2951
- <button mat-icon-button color="{{button.color}}"
2952
- (click)="onClick(button.click, cell)"
2953
- disabled="{{button.disabled ? button.disabled(cell) : false}}"
2954
- matTooltip="{{(button.title ? button.title : '') | translate}}"
2955
- class="{{button.className}}" [ngSwitch]="TableService.getIconType(button)">
2956
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ button.icon }}</mat-icon>
2957
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{button.icon}}"></i>
2958
- </button>
2959
- </td>
2960
- </ng-container>
2961
- </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>
2962
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>
2963
3041
 
2964
- <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
2965
- <tr mat-row *matRowDef="let result; columns: displayedColumns; let i = index"
2966
- [ngClass]="result.className"
2967
- (click)="onRowClick(result, i)"></tr>
2968
- </table>
2969
- <div *ngIf="!(loaderService.isLoading | async)">
2970
- <div class="paging"
2971
- *ngIf="hasData()"
2972
- fxLayout fxLayoutAlign="space-between center">
2973
- <mat-paginator style-paginator
2974
- [showTotalPages]="showTotalPages"
2975
- [paging]="varPaging"
2976
- (pagingChangeEvent)="getPage($event)"
2977
- [length]="varPaging.totalElements"
2978
- [pageSize]="varPaging.pageSize"
2979
- [pageSizeOptions]="pageSizeOptions"
2980
- [pageIndex]="varPaging.pageNumber - 1">
2981
- </mat-paginator>
2982
- <div class="go-to-page"
2983
- fxLayout fxLayoutGap="0.3rem" fxLayoutAlign="start baseline">
2984
- <mat-label>{{ 'common.gotopage' | translate }}</mat-label>
2985
- <cva-counter-input [(ngModel)]="goToPageNumber"
2986
- (ngModelChange)="onChangeGoToPageNumber($event)"
2987
- (onEnter)="goToPage()"
2988
- [max]="getTotalPage() ? getTotalPage() : 1"
2989
- [min]="1"
2990
- [isFloatLabel]="false"
2991
- [errorMessages]="errorMsg"
2992
- ></cva-counter-input>
2993
- <mat-label style="white-space: nowrap">{{ '/' + getTotalPage() }}</mat-label>
2994
- <button mat-flat-button
2995
- [disabled]="goToPageNumber < 1 || goToPageNumber > getTotalPage()"
2996
- (click)="goToPage()">{{ 'common.go' | translate }}
2997
- </button>
2998
- </div>
2999
- <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>
3000
3085
  </div>
3001
- </div>
3002
- </div>
3003
- `,
3086
+ `,
3004
3087
  providers: [
3005
3088
  { provide: MatPaginatorIntl, useClass: MultiLanguageTablePaginator },
3006
3089
  ],
@@ -3020,6 +3103,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
3020
3103
  type: Input
3021
3104
  }], expandHeaderButton: [{
3022
3105
  type: Input
3106
+ }], superHeaders: [{
3107
+ type: Input
3023
3108
  }], pagingChange: [{
3024
3109
  type: Output
3025
3110
  }], clickAction: [{
@@ -4973,10 +5058,15 @@ class CvaSmartTableComponent {
4973
5058
  ref;
4974
5059
  config;
4975
5060
  injector;
5061
+ ColumnTypeEnum = ColumnTypeEnum;
5062
+ IconTypeEnum = IconTypeEnum;
5063
+ AlignEnum = AlignEnum;
5064
+ TableService = TableService;
4976
5065
  cellComponents;
4977
5066
  moduleName = '';
4978
5067
  columns = [];
4979
5068
  buttons = [];
5069
+ superHeaders = [];
4980
5070
  value = [];
4981
5071
  minRow = 0;
4982
5072
  maxRow = 9999;
@@ -5005,24 +5095,6 @@ class CvaSmartTableComponent {
5005
5095
  ngControl.valueAccessor = this;
5006
5096
  }
5007
5097
  }
5008
- get AlignEnum() {
5009
- return AlignEnum;
5010
- }
5011
- get IconTypes() {
5012
- return IconTypeEnum;
5013
- }
5014
- get TableService() {
5015
- return TableService;
5016
- }
5017
- get displayedColumns() {
5018
- if (!this.$displayedColumns || this.$displayedColumns.length <= 0) {
5019
- this.$displayedColumns = this.columns.map((c) => c.columnDef);
5020
- if (this.buttons) {
5021
- this.$displayedColumns = this.$displayedColumns.concat(this.buttons.map((b) => b.columnDef));
5022
- }
5023
- }
5024
- return this.$displayedColumns;
5025
- }
5026
5098
  get displayedFooters() {
5027
5099
  if (!this.$displayedFooters || this.$displayedFooters.length <= 0) {
5028
5100
  for (const column of this.columns) {
@@ -5038,9 +5110,6 @@ class CvaSmartTableComponent {
5038
5110
  }
5039
5111
  return this.$displayedFooters;
5040
5112
  }
5041
- get ColumnTypes() {
5042
- return ColumnTypeEnum;
5043
- }
5044
5113
  propagateChange = (_) => {
5045
5114
  /*NON-EMPTY FOR COMPILE*/
5046
5115
  };
@@ -5103,16 +5172,6 @@ class CvaSmartTableComponent {
5103
5172
  this.callValidator();
5104
5173
  this.onChange.emit();
5105
5174
  }
5106
- toggleSelectAll(val, col) {
5107
- if (this.value) {
5108
- this.value.forEach(v => {
5109
- v.checked = val.checked;
5110
- });
5111
- }
5112
- if (col.onHeaderCellValueChange) {
5113
- col.onHeaderCellValueChange(val.checked);
5114
- }
5115
- }
5116
5175
  toggleSelect(val, result, column) {
5117
5176
  let count = 0;
5118
5177
  if (this.value && this.value.length > 0) {
@@ -5165,9 +5224,6 @@ class CvaSmartTableComponent {
5165
5224
  this.formControl.updateValueAndValidity();
5166
5225
  }
5167
5226
  }
5168
- getRequired(column) {
5169
- return typeof (column.isRequired) === 'function' ? column.isRequired() : (column.isRequired ?? false);
5170
- }
5171
5227
  getIsDecimal(column) {
5172
5228
  return column.isDecimal ? typeof (column.isDecimal) === 'boolean' ? column.isDecimal : column.isDecimal() : false;
5173
5229
  }
@@ -5215,253 +5271,270 @@ class CvaSmartTableComponent {
5215
5271
  }
5216
5272
  }
5217
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 });
5218
- 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: `
5219
- <div class="table-responsive"
5220
- [ngClass]="{'fixed_header': isSticky||isStickyHeader, 'fixed_footer': isSticky||isStickyFooter}">
5221
- <table mat-table [dataSource]="datasource" #matTable class="mat-elevation-z8 cva-smart-table">
5222
- <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
5223
- <ng-container *matHeaderCellDef>
5224
- <th mat-header-cell class="{{TableService.getColumnHeaderClassName(column)}}"
5225
- *ngIf="onDisplayHeaderCell(column)">
5226
- <!-- *ngIf="getColumnType(column, result)!==ColumnTypes.CHECKBOX"-->
5227
- <div [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5228
- fxLayout="row"
5229
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
5230
- <mat-checkbox
5231
- *ngIf="TableService.getColumnType(column, null)===ColumnTypes.CHECKBOX && !column.isNotShowHeaderCheckbox"
5232
- color="primary" class="box-select-all margin-right-5" [(ngModel)]="selectAllChecked"
5233
- (change)="toggleSelectAll($event, column)">
5234
- </mat-checkbox>
5235
- {{ TableService.displayHeaderName(column, moduleName) | translate }}<span
5236
- style="color: red">{{ getRequired(column) ? '*' : '' }}</span>
5237
- </div>
5238
- </th>
5239
- </ng-container>
5240
- <ng-container *matCellDef="let result; let i = index">
5241
- <td mat-cell [ngClass]="TableService.getColumnClassName(column,result)"
5242
- *ngIf="TableService.onDisplayCell(column, result)"
5243
- [ngSwitch]="TableService.getColumnType(column, result)">
5244
- <div title="{{column.title(result)}}"
5245
- *ngSwitchCase="ColumnTypes.VIEW"
5246
- class="viewData {{TableService.getColumnClassName(column,result)}}"
5247
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
5248
- {{ column.cell(result) }}
5249
- </div>
5250
- <div class="link viewData"
5251
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5252
- *ngSwitchCase="ColumnTypes.LINK"
5253
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5254
- title="{{column.title(result)}}">
5255
- <a [routerLink]="[column.link ? column.link(result) : '']">{{ column.cell(result) }}</a>
5256
- </div>
5257
- <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5258
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5259
- *ngSwitchCase="ColumnTypes.IMG"
5260
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5261
- title="{{column.title(result)}}">
5262
- <img [src]="column.cell(result) | secure | async"
5263
- #imgRef
5264
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5265
- </div>
5266
- <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5267
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5268
- *ngSwitchCase="ColumnTypes.IMG_NO_SECURE"
5269
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5270
- title="{{column.title(result)}}">
5271
- <img [src]="column.cell(result)"
5272
- #imgRef
5273
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5274
- </div>
5275
- <div *ngSwitchCase="ColumnTypes.BASE64"
5276
- class="viewData img-view base64 {{TableService.getColumnClassName(column,result)}}"
5277
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5278
- title="{{column.title(result)}}">
5279
- <img [src]="'data:image/png;base64,'+column.cell(result)"
5280
- #base64ImgRef
5281
- (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5282
- </div>
5283
- <ng-container *ngSwitchCase="ColumnTypes.BUTTON">
5284
- <div *ngIf="!!column.button"
5285
- class="{{TableService.getColumnClassName(column, result)}}"
5286
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5287
- (click)="$event.stopPropagation()">
5288
- <button mat-icon-button type="button"
5289
- color="{{column.button.color}}"
5290
- [ngClass]="column.button.className"
5291
- (click)="onClick(column.button.click, result, i)"
5292
- disabled="{{column.button && column.button.disabled ? column.button.disabled(result) : false}}"
5293
- matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
5294
- [ngSwitch]="TableService.getIconType(column.button)">
5295
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ column.button.icon }}</mat-icon>
5296
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{column.button.icon}}"></i>
5297
- </button>
5298
- </div>
5299
- </ng-container>
5300
- <cva-counter-input *ngSwitchCase="ColumnTypes.INPUT_COUNTER"
5301
- #cellComponentRef
5302
- class="inputNumber" #nsCounterInput
5303
- [isFormControl]="false"
5304
- [alignNumber]="getAlign(column)"
5305
- [disabled]="column.disabled ? column.disabled(result) : false"
5306
- [value]="result[column.columnDef]"
5307
- [required]="getRequired(column)"
5308
- [errorMessages]="getErrorMessageMap(column)"
5309
- [isDecimal]="getIsDecimal(column)"
5310
- [min]="column.min ? column.min(result) : null"
5311
- [max]="column.max ? column.max(result) : null"
5312
- (onChange)="onCellValueChange(result, column, $event);">
5313
- </cva-counter-input>
5314
- <cva-input *ngSwitchCase="ColumnTypes.INPUT"
5315
- #cellComponentRef
5316
- [isFormControl]="false"
5317
- [alignText]="getAlign(column)"
5318
- [disabled]="column.disabled ? column.disabled(result) : false"
5319
- [text]="result[column.columnDef]"
5320
- [minLength]="column.min ? column.min(result) : undefined"
5321
- [maxLength]="column.max ? column.max(result) : undefined"
5322
- [required]="getRequired(column)"
5323
- [errorMessages]="getErrorMessageMap(column)"
5324
- (onChange)="onCellValueChange(result, column, $event);">
5325
- </cva-input>
5326
- <cva-input *ngSwitchCase="ColumnTypes.INPUT_CURRENCY"
5327
- #cellComponentRef
5328
- [isFormControl]="false"
5329
- [alignText]="getAlign(column)"
5330
- [disabled]="column.disabled ? column.disabled(result) : false"
5331
- [text]="result[column.columnDef]"
5332
- [minLength]="column.min ? column.min(result) : undefined"
5333
- [maxLength]="column.max ? column.max(result) : undefined"
5334
- [required]="getRequired(column)"
5335
- [errorMessages]="getErrorMessageMap(column)"
5336
- (onChange)="onCellValueChange(result, column, $event);"
5337
- [pattern]="getIsDecimal(column) ? '^\\d{0,15}(\\.\\d*)?$' : '^\\d{0,15}$'"
5338
- [formatFunc]="formatFunc">
5339
- </cva-input>
5340
- <cva-date-picker *ngSwitchCase="ColumnTypes.DATE_PICKER"
5341
- #cellComponentRef
5342
- [value]="result[column.columnDef]"
5343
- [isFormControl]="false"
5344
- [minDate]="column.min ? column.min(result) : null"
5345
- [maxDate]="column.max ? column.max(result) : null"
5346
- [required]="getRequired(column)"
5347
- [disabled]="column.disabled ? column.disabled(result) : false"
5348
- [errorMessages]="getErrorMessageMap(column)"
5349
- (onChange)="onCellValueChange(result, column, $event);">
5350
- </cva-date-picker>
5351
- <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"
5352
5392
  #cellComponentRef
5353
- *ngSwitchCase="ColumnTypes.MULTI_SELECT_AUTOCOMPLETE"
5354
- class="multiSelectAutocomplete"
5355
- [isTree]="column.isTree??false"
5356
5393
  [value]="result[column.columnDef]"
5357
- [errorMessages]="getErrorMessageMap(column)"
5358
- [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)"
5359
5398
  [disabled]="column.disabled ? column.disabled(result) : false"
5360
- [multiple]="column.isMultipleSelect??false"
5361
- [options]="column.optionValues ? column.optionValues(result) : []"
5362
- (selectionChange)="onCellValueChange(result, column, $event);">
5363
- </cva-multi-select-autocomplete>
5364
- <div class="checkbox-cell"
5365
- fxLayout="row"
5366
- [fxLayoutAlign]="TableService.alignCellContent(column)"
5367
- *ngSwitchCase="ColumnTypes.CHECKBOX">
5368
- <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
5369
- *ngIf="column.display ? column.display(result) : true"
5370
- [disabled]="column.disabled ? column.disabled(result) : false"
5371
- (change)="toggleSelect($event,result, column)">
5372
- </mat-checkbox>
5373
- </div>
5374
- <cva-live-searching *ngSwitchCase="ColumnTypes.LIVE_SEARCHING"
5375
- #cellComponentRef
5376
- [isFormControl]="false" [required]="getRequired(column)"
5377
- [row]="result" [columnDef]="column.columnDef"
5378
- [searchFn]="column.searchFn"
5379
- [mappingConfig]="column.mappingConfig"
5380
- [displayKey]="column.displayKey??''"
5381
- [errorMessages]="getErrorMessageMap(column)"
5382
- (onChange)="onCellValueChange(result, column, $event)">
5383
- </cva-live-searching>
5384
- </td>
5385
- </ng-container>
5386
- </ng-container>
5387
- <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
5388
- <ng-container *matHeaderCellDef="let header">
5389
- <th mat-header-cell
5390
- [ngClass]="button.className"
5391
- *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
5392
- (click)="$event.stopPropagation()"
5393
- [attr.colspan]="buttonColspan">
5394
- <!-- [fxFlex]="getHeaderButtonWidth(i) + 'px' "-->
5395
- <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
5396
- <button mat-icon-button type="button"
5397
- class="{{button.className}}"
5398
- color="{{$any(btnHeader).color}}"
5399
- (click)="onClick($any(btnHeader).click, null, null)"
5400
- [disabled]="(btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false"
5401
- *ngIf="(btnHeader && btnHeader.display) ? btnHeader.display(header) : false"
5402
- matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
5403
- [ngSwitch]="TableService.getIconType($any(btnHeader))">
5404
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ $any(btnHeader).icon }}</mat-icon>
5405
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
5406
- </button>
5407
- </ng-container>
5408
- <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
5409
- <div title="{{$any(btnHeader) | translate}}"
5410
- class="viewData"
5411
- fxLayout="row"
5412
- fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
5413
- {{ $any(btnHeader) | translate }}
5414
- </div>
5415
- </ng-container>
5416
- </th>
5417
- </ng-container>
5418
- <ng-container *matCellDef="let cell; let i = index">
5419
- <td mat-cell [ngClass]="button.className"
5420
- *ngIf="TableService.onDisplayButtonCell(button, cell)"
5421
- (click)="$event.stopPropagation()">
5422
- <button mat-icon-button type="button"
5423
- color="{{button.color}}"
5424
- [ngClass]="button.className"
5425
- (click)="onClick(button.click, cell, i)"
5426
- disabled="{{button && button.disabled ? button.disabled(cell) : false}}"
5427
- matTooltip="{{(button.title ? button.title : '') | translate}}"
5428
- [ngSwitch]="TableService.getIconType(button)">
5429
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ button.icon }}</mat-icon>
5430
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{button.icon}}"></i>
5431
- </button>
5432
- </td>
5433
- </ng-container>
5434
- </ng-container>
5435
- <ng-container *ngFor="let column of columns">
5436
- <ng-container *ngFor="let footer of column.footers; let i = index"
5437
- matColumnDef="{{i}}-{{column.columnDef}}">
5438
- <ng-container *matFooterCellDef>
5439
- <td mat-footer-cell *ngIf="onDisplayFooter(footer, datasource.data)"
5440
- [attr.colspan]="TableService.getColspan(footer, datasource.data)"
5441
- class="{{TableService.getColumnClassName(column,datasource.data)}} {{TableService.getColumnClassName(column.footer,datasource.data)}}">
5442
- <div title="{{footer.title(datasource.data)}}"
5443
- class="viewData {{TableService.getColumnClassName(column,datasource.data)}}"
5444
- fxLayout="row"
5445
- [fxLayoutAlign]="footer.align ? footer.align : AlignEnum.LEFT">
5446
- {{ footer.cell(datasource.data) }}
5447
- </div>
5448
- </td>
5449
- </ng-container>
5450
- </ng-container>
5451
- </ng-container>
5452
- <tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: isSticky||isStickyHeader"></tr>
5453
- <tr mat-row *matRowDef="let result; columns: displayedColumns;" class="{{result.className}}"
5454
- [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,
5455
5528
  'parentRow0': !result.isChildRow && result.parentRowClassIndex === 0,
5456
5529
  'childRow1': !!result.isChildRow && result.parentRowClassIndex === 1,
5457
5530
  'parentRow1': !result.isChildRow && result.parentRowClassIndex === 1}"
5458
- ></tr>
5459
- <ng-container *ngFor="let df of displayedFooters">
5460
- <tr mat-footer-row *matFooterRowDef="df; sticky: isSticky||isStickyFooter"></tr>
5461
- </ng-container>
5462
- </table>
5463
- </div>
5464
- `, 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" }] });
5465
5538
  }
5466
5539
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaSmartTableComponent, decorators: [{
5467
5540
  type: Component,
@@ -5469,252 +5542,269 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
5469
5542
  selector: 'cva-smart-table',
5470
5543
  standalone: false,
5471
5544
  template: `
5472
- <div class="table-responsive"
5473
- [ngClass]="{'fixed_header': isSticky||isStickyHeader, 'fixed_footer': isSticky||isStickyFooter}">
5474
- <table mat-table [dataSource]="datasource" #matTable class="mat-elevation-z8 cva-smart-table">
5475
- <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
5476
- <ng-container *matHeaderCellDef>
5477
- <th mat-header-cell class="{{TableService.getColumnHeaderClassName(column)}}"
5478
- *ngIf="onDisplayHeaderCell(column)">
5479
- <!-- *ngIf="getColumnType(column, result)!==ColumnTypes.CHECKBOX"-->
5480
- <div [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5481
- fxLayout="row"
5482
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
5483
- <mat-checkbox
5484
- *ngIf="TableService.getColumnType(column, null)===ColumnTypes.CHECKBOX && !column.isNotShowHeaderCheckbox"
5485
- color="primary" class="box-select-all margin-right-5" [(ngModel)]="selectAllChecked"
5486
- (change)="toggleSelectAll($event, column)">
5487
- </mat-checkbox>
5488
- {{ TableService.displayHeaderName(column, moduleName) | translate }}<span
5489
- style="color: red">{{ getRequired(column) ? '*' : '' }}</span>
5490
- </div>
5491
- </th>
5492
- </ng-container>
5493
- <ng-container *matCellDef="let result; let i = index">
5494
- <td mat-cell [ngClass]="TableService.getColumnClassName(column,result)"
5495
- *ngIf="TableService.onDisplayCell(column, result)"
5496
- [ngSwitch]="TableService.getColumnType(column, result)">
5497
- <div title="{{column.title(result)}}"
5498
- *ngSwitchCase="ColumnTypes.VIEW"
5499
- class="viewData {{TableService.getColumnClassName(column,result)}}"
5500
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
5501
- {{ column.cell(result) }}
5502
- </div>
5503
- <div class="link viewData"
5504
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5505
- *ngSwitchCase="ColumnTypes.LINK"
5506
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5507
- title="{{column.title(result)}}">
5508
- <a [routerLink]="[column.link ? column.link(result) : '']">{{ column.cell(result) }}</a>
5509
- </div>
5510
- <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5511
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5512
- *ngSwitchCase="ColumnTypes.IMG"
5513
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5514
- title="{{column.title(result)}}">
5515
- <img [src]="column.cell(result) | secure | async"
5516
- #imgRef
5517
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5518
- </div>
5519
- <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5520
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5521
- *ngSwitchCase="ColumnTypes.IMG_NO_SECURE"
5522
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5523
- title="{{column.title(result)}}">
5524
- <img [src]="column.cell(result)"
5525
- #imgRef
5526
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5527
- </div>
5528
- <div *ngSwitchCase="ColumnTypes.BASE64"
5529
- class="viewData img-view base64 {{TableService.getColumnClassName(column,result)}}"
5530
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5531
- title="{{column.title(result)}}">
5532
- <img [src]="'data:image/png;base64,'+column.cell(result)"
5533
- #base64ImgRef
5534
- (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5535
- </div>
5536
- <ng-container *ngSwitchCase="ColumnTypes.BUTTON">
5537
- <div *ngIf="!!column.button"
5538
- class="{{TableService.getColumnClassName(column, result)}}"
5539
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5540
- (click)="$event.stopPropagation()">
5541
- <button mat-icon-button type="button"
5542
- color="{{column.button.color}}"
5543
- [ngClass]="column.button.className"
5544
- (click)="onClick(column.button.click, result, i)"
5545
- disabled="{{column.button && column.button.disabled ? column.button.disabled(result) : false}}"
5546
- matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
5547
- [ngSwitch]="TableService.getIconType(column.button)">
5548
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ column.button.icon }}</mat-icon>
5549
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{column.button.icon}}"></i>
5550
- </button>
5551
- </div>
5552
- </ng-container>
5553
- <cva-counter-input *ngSwitchCase="ColumnTypes.INPUT_COUNTER"
5554
- #cellComponentRef
5555
- class="inputNumber" #nsCounterInput
5556
- [isFormControl]="false"
5557
- [alignNumber]="getAlign(column)"
5558
- [disabled]="column.disabled ? column.disabled(result) : false"
5559
- [value]="result[column.columnDef]"
5560
- [required]="getRequired(column)"
5561
- [errorMessages]="getErrorMessageMap(column)"
5562
- [isDecimal]="getIsDecimal(column)"
5563
- [min]="column.min ? column.min(result) : null"
5564
- [max]="column.max ? column.max(result) : null"
5565
- (onChange)="onCellValueChange(result, column, $event);">
5566
- </cva-counter-input>
5567
- <cva-input *ngSwitchCase="ColumnTypes.INPUT"
5568
- #cellComponentRef
5569
- [isFormControl]="false"
5570
- [alignText]="getAlign(column)"
5571
- [disabled]="column.disabled ? column.disabled(result) : false"
5572
- [text]="result[column.columnDef]"
5573
- [minLength]="column.min ? column.min(result) : undefined"
5574
- [maxLength]="column.max ? column.max(result) : undefined"
5575
- [required]="getRequired(column)"
5576
- [errorMessages]="getErrorMessageMap(column)"
5577
- (onChange)="onCellValueChange(result, column, $event);">
5578
- </cva-input>
5579
- <cva-input *ngSwitchCase="ColumnTypes.INPUT_CURRENCY"
5580
- #cellComponentRef
5581
- [isFormControl]="false"
5582
- [alignText]="getAlign(column)"
5583
- [disabled]="column.disabled ? column.disabled(result) : false"
5584
- [text]="result[column.columnDef]"
5585
- [minLength]="column.min ? column.min(result) : undefined"
5586
- [maxLength]="column.max ? column.max(result) : undefined"
5587
- [required]="getRequired(column)"
5588
- [errorMessages]="getErrorMessageMap(column)"
5589
- (onChange)="onCellValueChange(result, column, $event);"
5590
- [pattern]="getIsDecimal(column) ? '^\\d{0,15}(\\.\\d*)?$' : '^\\d{0,15}$'"
5591
- [formatFunc]="formatFunc">
5592
- </cva-input>
5593
- <cva-date-picker *ngSwitchCase="ColumnTypes.DATE_PICKER"
5594
- #cellComponentRef
5595
- [value]="result[column.columnDef]"
5596
- [isFormControl]="false"
5597
- [minDate]="column.min ? column.min(result) : null"
5598
- [maxDate]="column.max ? column.max(result) : null"
5599
- [required]="getRequired(column)"
5600
- [disabled]="column.disabled ? column.disabled(result) : false"
5601
- [errorMessages]="getErrorMessageMap(column)"
5602
- (onChange)="onCellValueChange(result, column, $event);">
5603
- </cva-date-picker>
5604
- <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"
5605
5662
  #cellComponentRef
5606
- *ngSwitchCase="ColumnTypes.MULTI_SELECT_AUTOCOMPLETE"
5607
- class="multiSelectAutocomplete"
5608
- [isTree]="column.isTree??false"
5609
5663
  [value]="result[column.columnDef]"
5610
- [errorMessages]="getErrorMessageMap(column)"
5611
- [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)"
5612
5668
  [disabled]="column.disabled ? column.disabled(result) : false"
5613
- [multiple]="column.isMultipleSelect??false"
5614
- [options]="column.optionValues ? column.optionValues(result) : []"
5615
- (selectionChange)="onCellValueChange(result, column, $event);">
5616
- </cva-multi-select-autocomplete>
5617
- <div class="checkbox-cell"
5618
- fxLayout="row"
5619
- [fxLayoutAlign]="TableService.alignCellContent(column)"
5620
- *ngSwitchCase="ColumnTypes.CHECKBOX">
5621
- <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
5622
- *ngIf="column.display ? column.display(result) : true"
5623
- [disabled]="column.disabled ? column.disabled(result) : false"
5624
- (change)="toggleSelect($event,result, column)">
5625
- </mat-checkbox>
5626
- </div>
5627
- <cva-live-searching *ngSwitchCase="ColumnTypes.LIVE_SEARCHING"
5628
- #cellComponentRef
5629
- [isFormControl]="false" [required]="getRequired(column)"
5630
- [row]="result" [columnDef]="column.columnDef"
5631
- [searchFn]="column.searchFn"
5632
- [mappingConfig]="column.mappingConfig"
5633
- [displayKey]="column.displayKey??''"
5634
- [errorMessages]="getErrorMessageMap(column)"
5635
- (onChange)="onCellValueChange(result, column, $event)">
5636
- </cva-live-searching>
5637
- </td>
5638
- </ng-container>
5639
- </ng-container>
5640
- <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
5641
- <ng-container *matHeaderCellDef="let header">
5642
- <th mat-header-cell
5643
- [ngClass]="button.className"
5644
- *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
5645
- (click)="$event.stopPropagation()"
5646
- [attr.colspan]="buttonColspan">
5647
- <!-- [fxFlex]="getHeaderButtonWidth(i) + 'px' "-->
5648
- <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
5649
- <button mat-icon-button type="button"
5650
- class="{{button.className}}"
5651
- color="{{$any(btnHeader).color}}"
5652
- (click)="onClick($any(btnHeader).click, null, null)"
5653
- [disabled]="(btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false"
5654
- *ngIf="(btnHeader && btnHeader.display) ? btnHeader.display(header) : false"
5655
- matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
5656
- [ngSwitch]="TableService.getIconType($any(btnHeader))">
5657
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ $any(btnHeader).icon }}</mat-icon>
5658
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
5659
- </button>
5660
- </ng-container>
5661
- <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
5662
- <div title="{{$any(btnHeader) | translate}}"
5663
- class="viewData"
5664
- fxLayout="row"
5665
- fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
5666
- {{ $any(btnHeader) | translate }}
5667
- </div>
5668
- </ng-container>
5669
- </th>
5670
- </ng-container>
5671
- <ng-container *matCellDef="let cell; let i = index">
5672
- <td mat-cell [ngClass]="button.className"
5673
- *ngIf="TableService.onDisplayButtonCell(button, cell)"
5674
- (click)="$event.stopPropagation()">
5675
- <button mat-icon-button type="button"
5676
- color="{{button.color}}"
5677
- [ngClass]="button.className"
5678
- (click)="onClick(button.click, cell, i)"
5679
- disabled="{{button && button.disabled ? button.disabled(cell) : false}}"
5680
- matTooltip="{{(button.title ? button.title : '') | translate}}"
5681
- [ngSwitch]="TableService.getIconType(button)">
5682
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ button.icon }}</mat-icon>
5683
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{button.icon}}"></i>
5684
- </button>
5685
- </td>
5686
- </ng-container>
5687
- </ng-container>
5688
- <ng-container *ngFor="let column of columns">
5689
- <ng-container *ngFor="let footer of column.footers; let i = index"
5690
- matColumnDef="{{i}}-{{column.columnDef}}">
5691
- <ng-container *matFooterCellDef>
5692
- <td mat-footer-cell *ngIf="onDisplayFooter(footer, datasource.data)"
5693
- [attr.colspan]="TableService.getColspan(footer, datasource.data)"
5694
- class="{{TableService.getColumnClassName(column,datasource.data)}} {{TableService.getColumnClassName(column.footer,datasource.data)}}">
5695
- <div title="{{footer.title(datasource.data)}}"
5696
- class="viewData {{TableService.getColumnClassName(column,datasource.data)}}"
5697
- fxLayout="row"
5698
- [fxLayoutAlign]="footer.align ? footer.align : AlignEnum.LEFT">
5699
- {{ footer.cell(datasource.data) }}
5700
- </div>
5701
- </td>
5702
- </ng-container>
5703
- </ng-container>
5704
- </ng-container>
5705
- <tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: isSticky||isStickyHeader"></tr>
5706
- <tr mat-row *matRowDef="let result; columns: displayedColumns;" class="{{result.className}}"
5707
- [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,
5708
5798
  'parentRow0': !result.isChildRow && result.parentRowClassIndex === 0,
5709
5799
  'childRow1': !!result.isChildRow && result.parentRowClassIndex === 1,
5710
5800
  'parentRow1': !result.isChildRow && result.parentRowClassIndex === 1}"
5711
- ></tr>
5712
- <ng-container *ngFor="let df of displayedFooters">
5713
- <tr mat-footer-row *matFooterRowDef="df; sticky: isSticky||isStickyFooter"></tr>
5714
- </ng-container>
5715
- </table>
5716
- </div>
5717
- `,
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
+ `,
5718
5808
  }]
5719
5809
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
5720
5810
  type: Inject,
@@ -5732,6 +5822,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
5732
5822
  type: Input
5733
5823
  }], buttons: [{
5734
5824
  type: Input
5825
+ }], superHeaders: [{
5826
+ type: Input
5735
5827
  }], value: [{
5736
5828
  type: Input
5737
5829
  }], minRow: [{
@@ -9543,7 +9635,8 @@ class NiceComponentLibraryModule {
9543
9635
  };
9544
9636
  }
9545
9637
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: NiceComponentLibraryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9546
- 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,
9547
9640
  CvaSmartTableComponent,
9548
9641
  CvaInputComponent,
9549
9642
  CvaCounterInputComponent,
@@ -9625,6 +9718,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
9625
9718
  FlexLayoutModule,
9626
9719
  ],
9627
9720
  declarations: [
9721
+ CvaTableHeaderCellComponent,
9628
9722
  CvaTableComponent,
9629
9723
  CvaSmartTableComponent,
9630
9724
  CvaInputComponent,