intelica-library-ui 0.1.197 → 0.1.199
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/intelica-library-ui.mjs +131 -88
- package/fesm2022/intelica-library-ui.mjs.map +1 -1
- package/lib/components/tree-table/column.component.d.ts +3 -3
- package/lib/components/tree-table/tree-table.component.d.ts +15 -2
- package/lib/services/htmlToExcel.service.d.ts +2 -1
- package/package.json +1 -1
|
@@ -2454,10 +2454,11 @@ class TreeColumnComponent {
|
|
|
2454
2454
|
minWidth;
|
|
2455
2455
|
isChecboxColumn = false;
|
|
2456
2456
|
isExpansionColumn = false;
|
|
2457
|
+
alphaSubEnum = false;
|
|
2457
2458
|
templateRef;
|
|
2458
2459
|
formatType = "string";
|
|
2459
2460
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: TreeColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2460
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.1", type: TreeColumnComponent, isStandalone: true, selector: "column", inputs: { field: "field", header: "header", sortable: "sortable", width: "width", className: "className", headerTooltip: "headerTooltip", headerTooltipPosition: "headerTooltipPosition", tooltip: "tooltip", tooltipPosition: "tooltipPosition", showIndex: "showIndex", showHeader: "showHeader", minWidth: "minWidth", isChecboxColumn: "isChecboxColumn", isExpansionColumn: "isExpansionColumn", formatType: "formatType" }, queries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 });
|
|
2461
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.1", type: TreeColumnComponent, isStandalone: true, selector: "column", inputs: { field: "field", header: "header", sortable: "sortable", width: "width", className: "className", headerTooltip: "headerTooltip", headerTooltipPosition: "headerTooltipPosition", tooltip: "tooltip", tooltipPosition: "tooltipPosition", showIndex: "showIndex", showHeader: "showHeader", minWidth: "minWidth", isChecboxColumn: "isChecboxColumn", isExpansionColumn: "isExpansionColumn", alphaSubEnum: "alphaSubEnum", formatType: "formatType" }, queries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 });
|
|
2461
2462
|
}
|
|
2462
2463
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: TreeColumnComponent, decorators: [{
|
|
2463
2464
|
type: Directive,
|
|
@@ -2490,6 +2491,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
|
|
|
2490
2491
|
type: Input
|
|
2491
2492
|
}], isExpansionColumn: [{
|
|
2492
2493
|
type: Input
|
|
2494
|
+
}], alphaSubEnum: [{
|
|
2495
|
+
type: Input
|
|
2493
2496
|
}], templateRef: [{
|
|
2494
2497
|
type: ContentChild,
|
|
2495
2498
|
args: [TemplateRef]
|
|
@@ -2500,14 +2503,13 @@ class TreeColumnGroupComponent {
|
|
|
2500
2503
|
field;
|
|
2501
2504
|
header;
|
|
2502
2505
|
sortable = false;
|
|
2503
|
-
width;
|
|
2504
2506
|
minWidth;
|
|
2505
2507
|
colspan = 1;
|
|
2506
2508
|
rowspan = 1;
|
|
2507
2509
|
level = 0;
|
|
2508
2510
|
formatType = "string";
|
|
2509
2511
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: TreeColumnGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2510
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.1", type: TreeColumnGroupComponent, isStandalone: true, selector: "columnGroup", inputs: { field: "field", header: "header", sortable: "sortable",
|
|
2512
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.1", type: TreeColumnGroupComponent, isStandalone: true, selector: "columnGroup", inputs: { field: "field", header: "header", sortable: "sortable", minWidth: "minWidth", colspan: "colspan", rowspan: "rowspan", level: "level", formatType: "formatType" }, ngImport: i0 });
|
|
2511
2513
|
}
|
|
2512
2514
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: TreeColumnGroupComponent, decorators: [{
|
|
2513
2515
|
type: Directive,
|
|
@@ -2518,8 +2520,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
|
|
|
2518
2520
|
type: Input
|
|
2519
2521
|
}], sortable: [{
|
|
2520
2522
|
type: Input
|
|
2521
|
-
}], width: [{
|
|
2522
|
-
type: Input
|
|
2523
2523
|
}], minWidth: [{
|
|
2524
2524
|
type: Input
|
|
2525
2525
|
}], colspan: [{
|
|
@@ -2584,10 +2584,13 @@ class TreeTableComponent {
|
|
|
2584
2584
|
ListSearchOptions = [];
|
|
2585
2585
|
ShowRowPerPage = true;
|
|
2586
2586
|
ExpandedColumnIdent = "";
|
|
2587
|
+
PropagateHeaderToChildren = false;
|
|
2588
|
+
ShowHeaderTooltips = true;
|
|
2587
2589
|
EmitSelectedItem = new EventEmitter();
|
|
2588
2590
|
EmitListDataFilter = new EventEmitter();
|
|
2589
2591
|
EmitSearchEvent = new EventEmitter();
|
|
2590
2592
|
EmitSortEvent = new EventEmitter();
|
|
2593
|
+
EmitCheckboxHeaderEvent = new EventEmitter();
|
|
2591
2594
|
Columns;
|
|
2592
2595
|
ColumnGroups;
|
|
2593
2596
|
RowResumenGroups;
|
|
@@ -2610,6 +2613,9 @@ class TreeTableComponent {
|
|
|
2610
2613
|
CurrentPage = 1;
|
|
2611
2614
|
SearchInput = {};
|
|
2612
2615
|
ListSearchOptionsSimple = [];
|
|
2616
|
+
_isTableDisabled = false;
|
|
2617
|
+
_pendingUncheck = false;
|
|
2618
|
+
HeaderState = {};
|
|
2613
2619
|
LoadSearchOptions() {
|
|
2614
2620
|
this.ListSearchOptionsSimple = this.ListSearchOptions.map((item) => ({
|
|
2615
2621
|
id: item.id,
|
|
@@ -2627,11 +2633,25 @@ class TreeTableComponent {
|
|
|
2627
2633
|
this.ValidateSelect();
|
|
2628
2634
|
}
|
|
2629
2635
|
ngAfterContentInit() {
|
|
2630
|
-
this.ColumnList = this.Columns
|
|
2631
|
-
this.ColumnGroupList = this.ColumnGroups
|
|
2632
|
-
this.RowResumenList = this.RowResumenGroups
|
|
2633
|
-
|
|
2636
|
+
this.ColumnList = this.Columns?.toArray() ?? [];
|
|
2637
|
+
this.ColumnGroupList = this.ColumnGroups?.toArray() ?? [];
|
|
2638
|
+
this.RowResumenList = this.RowResumenGroups?.toArray() ?? [];
|
|
2639
|
+
const levels = this.ColumnGroupList.map((c) => c.level);
|
|
2640
|
+
this.MaxLevel = levels.length ? Math.max(...levels) + 1 : 1;
|
|
2634
2641
|
this.Levels = Array.from({ length: this.MaxLevel }, (_, i) => i);
|
|
2642
|
+
this.ColumnList.filter((c) => c.isChecboxColumn).forEach((c) => {
|
|
2643
|
+
if (!this.HeaderState[c.field]) {
|
|
2644
|
+
this.HeaderState[c.field] = { checked: false, indeterminate: false };
|
|
2645
|
+
}
|
|
2646
|
+
});
|
|
2647
|
+
if (this._isTableDisabled && this._pendingUncheck) {
|
|
2648
|
+
this.ListDataSelectedTemp = [];
|
|
2649
|
+
this._pendingUncheck = false;
|
|
2650
|
+
this.ExecuteSearch({});
|
|
2651
|
+
}
|
|
2652
|
+
else {
|
|
2653
|
+
this.refreshAllHeaderStates();
|
|
2654
|
+
}
|
|
2635
2655
|
}
|
|
2636
2656
|
OnSort(field) {
|
|
2637
2657
|
if (this.SortField === field) {
|
|
@@ -2676,19 +2696,39 @@ class TreeTableComponent {
|
|
|
2676
2696
|
}
|
|
2677
2697
|
this.SortPages();
|
|
2678
2698
|
}
|
|
2679
|
-
|
|
2680
|
-
const
|
|
2681
|
-
|
|
2699
|
+
recomputeHeaderState(field) {
|
|
2700
|
+
const allRows = this.PropagateHeaderToChildren
|
|
2701
|
+
? this.ListDataFilter.flatMap((r) => Array.isArray(r.children) ? [r, ...r.children] : [r])
|
|
2702
|
+
: this.ListDataFilter;
|
|
2703
|
+
const total = allRows.length;
|
|
2704
|
+
if (total === 0) {
|
|
2705
|
+
this.HeaderState[field] = { checked: false, indeterminate: false };
|
|
2682
2706
|
return;
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2707
|
+
}
|
|
2708
|
+
const checked = allRows.filter((r) => r[field] === true).length;
|
|
2709
|
+
this.HeaderState[field] = {
|
|
2710
|
+
checked: checked === total,
|
|
2711
|
+
indeterminate: checked > 0 && checked < total,
|
|
2712
|
+
};
|
|
2713
|
+
}
|
|
2714
|
+
onBodyCheckboxChange(field, row) {
|
|
2715
|
+
this.recomputeHeaderState(field);
|
|
2716
|
+
}
|
|
2717
|
+
refreshAllHeaderStates() {
|
|
2718
|
+
this.ColumnList.filter((c) => c.isChecboxColumn).forEach((c) => this.recomputeHeaderState(c.field));
|
|
2719
|
+
}
|
|
2720
|
+
OnHeaderCheckboxChange(checked, field) {
|
|
2721
|
+
this.ListDataFilter.forEach((r) => {
|
|
2722
|
+
r[field] = checked;
|
|
2723
|
+
if (this.PropagateHeaderToChildren && Array.isArray(r.children)) {
|
|
2724
|
+
r.children.forEach((child) => {
|
|
2725
|
+
child[field] = checked;
|
|
2726
|
+
});
|
|
2689
2727
|
}
|
|
2690
2728
|
});
|
|
2691
|
-
this.
|
|
2729
|
+
this.HeaderState[field] = { checked, indeterminate: false };
|
|
2730
|
+
this.UpdatePages();
|
|
2731
|
+
this.EmitCheckboxHeaderEvent.emit();
|
|
2692
2732
|
}
|
|
2693
2733
|
IsInderteminate(column) {
|
|
2694
2734
|
const rowsChek = this.ListData.filter((item) => item[column]).length;
|
|
@@ -2701,9 +2741,11 @@ class TreeTableComponent {
|
|
|
2701
2741
|
element.removeAttribute("class");
|
|
2702
2742
|
}
|
|
2703
2743
|
getLetter(index) {
|
|
2704
|
-
|
|
2705
|
-
|
|
2706
|
-
|
|
2744
|
+
const letters = "abcdefghijklmnopqrstuvwxyz";
|
|
2745
|
+
return letters[index];
|
|
2746
|
+
}
|
|
2747
|
+
getNumber(index) {
|
|
2748
|
+
return (index + 1).toString();
|
|
2707
2749
|
}
|
|
2708
2750
|
UpdatePages() {
|
|
2709
2751
|
if (this.ShowPagination) {
|
|
@@ -2787,7 +2829,7 @@ class TreeTableComponent {
|
|
|
2787
2829
|
this.ResetTable();
|
|
2788
2830
|
}
|
|
2789
2831
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: TreeTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2790
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: TreeTableComponent, isStandalone: true, selector: "intelica-tree-table", inputs: { ComponentId: "ComponentId", ListData: "ListData", ClassName: "ClassName", groupRowsBy: "groupRowsBy", dataKey: "dataKey", DefaultSortField: "DefaultSortField", DefaultSortOrder: "DefaultSortOrder", scrollHeight: "scrollHeight", scrollable: "scrollable", tableStyle: "tableStyle", ShowSearch: "ShowSearch", ShowPagination: "ShowPagination", RowsPerPage: "RowsPerPage", AllowedPageSizes: "AllowedPageSizes", ShowCheckbox: "ShowCheckbox", ShowIndex: "ShowIndex", ShowSearchTooltip: "ShowSearchTooltip", ListDataSelected: "ListDataSelected", SelectedIdentifier: "SelectedIdentifier", ListSearchOptions: "ListSearchOptions", ShowRowPerPage: "ShowRowPerPage", ExpandedColumnIdent: "ExpandedColumnIdent" }, outputs: { EmitSelectedItem: "EmitSelectedItem", EmitListDataFilter: "EmitListDataFilter", EmitSearchEvent: "EmitSearchEvent", EmitSortEvent: "EmitSortEvent" }, providers: [FormatCellPipe, DatePipe], queries: [{ propertyName: "AdditionalTemplate", first: true, predicate: ["additionalTemplate"], descendants: true }, { propertyName: "AdditionalCentralTemplate", first: true, predicate: ["additionalCentralTemplate"], descendants: true }, { propertyName: "AdditionalExtendedTemplate", first: true, predicate: ["additionalExtendedTemplate"], descendants: true }, { propertyName: "Columns", predicate: TreeColumnComponent }, { propertyName: "ColumnGroups", predicate: TreeColumnGroupComponent }, { propertyName: "RowResumenGroups", predicate: RowResumenTreeComponent }], viewQueries: [{ propertyName: "PaginatorTable", first: true, predicate: ["paginatorTable"], descendants: true }, { propertyName: "SearchTable", first: true, predicate: ["searchTable"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"prTable\">\r\n <div class=\"prTableTools\">\r\n <div class=\"prTableTools__new prTableTools__new--left\">\r\n @if (AdditionalTemplate) {\r\n <ng-container *ngTemplateOutlet=\"AdditionalTemplate\"></ng-container>\r\n }\r\n </div>\r\n\r\n @if (ShowSearch) {\r\n <intelica-search\r\n #searchTable\r\n [ComponentId]=\"ComponentId + 'Search'\"\r\n (OnSearch)=\"ExecuteSearch($event)\"\r\n [SearchFieldOptions]=\"ListSearchOptionsSimple\"\r\n [SearchOnKeyup]=\"false\"\r\n [SimpleSearchInput]=\"false\"\r\n [ShowTooltip]=\"ShowSearchTooltip\"\r\n ></intelica-search>\r\n } @if (AdditionalCentralTemplate) {\r\n <div class=\"prTableTools__new prTableTools__new--right\">\r\n <ng-container\r\n *ngTemplateOutlet=\"AdditionalCentralTemplate\"\r\n ></ng-container>\r\n </div>\r\n }\r\n </div>\r\n @if (AdditionalExtendedTemplate) {\r\n <div class=\"prTableTools justify-content-start\">\r\n <ng-container *ngTemplateOutlet=\"AdditionalExtendedTemplate\"></ng-container>\r\n </div>\r\n\r\n }\r\n <p-table\r\n class=\"prTableBasic\"\r\n [value]=\"ListDataTable\"\r\n [ngClass]=\"ClassName\"\r\n responsiveLayout=\"scroll\"\r\n [(selection)]=\"ListDataSelected\"\r\n (onHeaderCheckboxToggle)=\"SelectAll($event)\"\r\n (onRowSelect)=\"OnRowSelect($event)\"\r\n (onRowUnselect)=\"OnRowUnselect($event)\"\r\n [groupRowsBy]=\"groupRowsBy\"\r\n [dataKey]=\"dataKey\"\r\n [sortField]=\"DefaultSortField\"\r\n [scrollable]=\"scrollable\"\r\n [scrollHeight]=\"scrollable ? scrollHeight : 'auto'\"\r\n [tableStyle]=\"tableStyle\"\r\n [sortOrder]=\"SortOrder\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n @for (level of Levels; track $index) {\r\n <tr>\r\n @for (col of ColumnGroupList; track $index) { @if (col.level === level)\r\n {\r\n <th\r\n [attr.colspan]=\"col.colspan\"\r\n [attr.rowspan]=\"col.rowspan\"\r\n [pSortableColumn]=\"col.sortable ? col.field : ''\"\r\n [style.min-width]=\"col.minWidth\"\r\n (click)=\"col.sortable && OnSort(col.field)\"\r\n >\r\n <div>\r\n <span pTooltip=\"{{ col.header }}\">{{ col.header }}</span>\r\n <p-sortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n </th>\r\n } } @if (ShowCheckbox && level === 0 && ColumnGroupList.length != 0) {\r\n <th\r\n class=\"text-center\"\r\n style=\"width: 4%\"\r\n [attr.rowspan]=\"MaxLevel === 1 ? 2 : MaxLevel\"\r\n >\r\n <p-tableHeaderCheckbox\r\n class=\"prCheckbox\"\r\n [ngClass]=\"{\r\n 'prCheckbox--indeterminate':\r\n ListDataSelectedTemp.length > 0 &&\r\n ListDataSelectedTemp.length < ListDataFilter.length\r\n }\"\r\n />\r\n </th>\r\n }\r\n </tr>\r\n }\r\n\r\n <tr>\r\n @for (col of ColumnList; track $index) { @if(col.showHeader) {\r\n <th\r\n [class]=\"col.className\"\r\n [pSortableColumn]=\"\r\n !col.isChecboxColumn && col.sortable ? col.field : ''\r\n \"\r\n [style.width]=\"col.width\"\r\n [style.min-width]=\"col.minWidth\"\r\n (click)=\"!col.isChecboxColumn && col.sortable && OnSort(col.field)\"\r\n >\r\n <div>\r\n <span [pTooltip]=\"col.headerTooltip?.trim() ? col.headerTooltip : undefined\"\r\n [tooltipPosition]=\"col.headerTooltipPosition || 'top'\">\r\n {{ col.header }}\r\n </span>\r\n \r\n @if (!col.showIndex) { @if (col.isChecboxColumn) {\r\n <br />\r\n <p-checkbox\r\n [binary]=\"true\"\r\n (click)=\"$event.stopPropagation()\"\r\n (onChange)=\"OnHeaderCheckboxChange($event, col.field)\"\r\n [attr.data-check]=\"col.field\"\r\n ></p-checkbox>\r\n } @else {\r\n <p-sortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-sortIcon>\r\n } }\r\n </div>\r\n </th>\r\n } } @if (ShowCheckbox && ColumnGroupList.length == 0) {\r\n <th class=\"text-center\" style=\"width: 4%\">\r\n <p-tableHeaderCheckbox\r\n class=\"prCheckbox\"\r\n [ngClass]=\"{\r\n 'prCheckbox--indeterminate':\r\n ListDataSelectedTemp.length > 0 &&\r\n ListDataSelectedTemp.length < ListDataFilter.length\r\n }\"\r\n />\r\n </th>\r\n }\r\n </tr>\r\n\r\n @if (ListDataFilter.length > 0) {\r\n <tr class=\"fixedRow\">\r\n @for (col of RowResumenList; track $index) {\r\n <td\r\n [ngClass]=\"col.className\"\r\n [attr.colspan]=\"col.colspan\"\r\n [attr.rowspan]=\"col.rowspan\"\r\n >\r\n @if (col.templateRef) {\r\n <span\r\n ><ng-container *ngTemplateOutlet=\"col.templateRef\"></ng-container\r\n ></span>\r\n } @else {\r\n <ng-template #defaultContent></ng-template>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-rowIndex=\"rowIndex\"\r\n let-expanded=\"expanded\"\r\n >\r\n <tr>\r\n @for (col of ColumnList; track $index) {\r\n <td [ngClass]=\"col.className\">\r\n @if (col.showIndex) {\r\n {{ rowIndex + 1 + (CurrentPage - 1) * RowsPerPage }}\r\n } @else if ((col.field === (ExpandedColumnIdent?.trim() || 'name')) && (rowData.children?.length ?? 0) > 0\r\n ) {\r\n <div class=\"prTable__expandToggleRow\">\r\n <p-button\r\n [pRowToggler]=\"rowData\"\r\n class=\"prButton prButton--icon prButton--iconBlue\"\r\n >\r\n <i\r\n [class]=\"\r\n expanded ? 'icon icon-collapse-rows' : 'icon icon-expand-rows'\r\n \"\r\n ></i>\r\n </p-button>\r\n <span\r\n class=\"text-breakWord\"\r\n pTooltip=\"{{ col.tooltip }}\"\r\n tooltipPosition=\"{{ col.tooltipPosition }}\"\r\n >\r\n {{ rowData[col.field] | formatCell : col.formatType }}\r\n </span>\r\n </div>\r\n } @else { @if (col.templateRef) {\r\n <ng-container\r\n *ngTemplateOutlet=\"col.templateRef; context: { $implicit: rowData }\"\r\n ></ng-container>\r\n } @else if (col.isChecboxColumn) {\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n (onChange)=\"IsInderteminate(col.field)\"\r\n ></p-checkbox>\r\n } @else {\r\n <span\r\n class=\"text-breakWord\"\r\n pTooltip=\"{{ col.tooltip }}\"\r\n tooltipPosition=\"{{ col.tooltipPosition }}\"\r\n >\r\n {{ rowData[col.field] | formatCell : col.formatType }}\r\n </span>\r\n } }\r\n </td>\r\n } @if (ShowCheckbox) {\r\n <td class=\"text-center\">\r\n <p-tableCheckbox [value]=\"rowData\" class=\"prCheckbox\" />\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"expandedrow\" let-rowData let-rowIndex=\"rowIndex\">\r\n <ng-container *ngIf=\"rowData.children?.length\">\r\n <tr\r\n *ngFor=\"let childRow of rowData.children; let i = index\"\r\n class=\"subRow\"\r\n >\r\n <td\r\n *ngFor=\"let col of ColumnList; let j = index\"\r\n [ngClass]=\"col.className\"\r\n >\r\n <span\r\n class=\"text-breakWord\"\r\n pTooltip=\"{{ col.tooltip }}\"\r\n tooltipPosition=\"{{ col.tooltipPosition }}\"\r\n >\r\n <ng-container *ngIf=\"col.showIndex && j === 0; else normalCell\">\r\n {{ rowIndex + 1 + \".\" + getLetter(i) }}\r\n </ng-container>\r\n <ng-template #normalCell>\r\n @if (col.field === \"id\" && i < 26) {\r\n <span>{{ childRow[col.field] + \".\" + getLetter(i) }}</span>\r\n } @else {\r\n <ng-container *ngIf=\"col.templateRef; else defaultExpandedContent\">\r\n <ng-container *ngTemplateOutlet=\"col.templateRef; context: { $implicit: childRow }\"></ng-container>\r\n </ng-container>\r\n <ng-template #defaultExpandedContent>\r\n <span [class]=\"col.field === (ExpandedColumnIdent || 'name') ? 'prTable__expandIdentText' : ''\">\r\n {{ childRow[col.field] | formatCell : col.formatType }}\r\n </span>\r\n </ng-template> \r\n }\r\n </ng-template>\r\n </span>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #emptymessage>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"ColumnList.length + (ShowCheckbox ? 1 : 0)\"\r\n class=\"text-center\"\r\n >\r\n {{ \"Nodata\" | term : GlobalTermService.languageCode }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n <div class=\"prTableToolsBottom\">\r\n @if(TotalRecords !== 0){\r\n @if (ShowRowPerPage) {\r\n <div class=\"prTableToolsBottom__itemPerPage\">\r\n {{ \"ItemPerPage\" | term : GlobalTermService.languageCode }}\r\n <p-select\r\n [options]=\"AllowedPageSizes\"\r\n [ngModel]=\"RowsPerPage\"\r\n appendTo=\"body\"\r\n (onChange)=\"OnRowsPerPageChange($event.value)\"\r\n />\r\n <label for=\"pageSize\" class=\"control-label\">\r\n {{ 1 + RowsPerPage * (CurrentPage - 1) }} -\r\n {{\r\n CurrentPage * RowsPerPage >= TotalRecords\r\n ? TotalRecords\r\n : CurrentPage * RowsPerPage\r\n }}\r\n {{ \"Of\" | term : GlobalTermService.languageCode }} {{ TotalRecords }}\r\n {{ \"Items\" | term : GlobalTermService.languageCode }}\r\n </label>\r\n </div>\r\n } @if (ShowPagination) {\r\n <intelica-paginator\r\n #paginatorTable\r\n [TotalItems]=\"ListDataFilter.length\"\r\n [ItemsPerPage]=\"RowsPerPage\"\r\n (PageChange)=\"OnPageChange($event)\"\r\n >\r\n </intelica-paginator>\r\n }\r\n }\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SearchComponent, selector: "intelica-search", inputs: ["ComponentId", "ShowTooltip", "SearchFieldOptions", "SearchOnKeyup", "SimpleSearchInput", "Placeholder"], outputs: ["OnSearch"] }, { kind: "component", type: PaginatorComponent, selector: "intelica-paginator", inputs: ["TotalItems", "CurrentPage", "ItemsPerPage"], outputs: ["PageChange"] }, { kind: "component", type: Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i2$1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2$1.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i2$1.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { kind: "component", type: i2$1.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i2$1.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i2$1.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "ngmodule", type: BadgeModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "pipe", type: TermPipe, name: "term" }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i5.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: FormatCellPipe, name: "formatCell" }] });
|
|
2832
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: TreeTableComponent, isStandalone: true, selector: "intelica-tree-table", inputs: { ComponentId: "ComponentId", ListData: "ListData", ClassName: "ClassName", groupRowsBy: "groupRowsBy", dataKey: "dataKey", DefaultSortField: "DefaultSortField", DefaultSortOrder: "DefaultSortOrder", scrollHeight: "scrollHeight", scrollable: "scrollable", tableStyle: "tableStyle", ShowSearch: "ShowSearch", ShowPagination: "ShowPagination", RowsPerPage: "RowsPerPage", AllowedPageSizes: "AllowedPageSizes", ShowCheckbox: "ShowCheckbox", ShowIndex: "ShowIndex", ShowSearchTooltip: "ShowSearchTooltip", ListDataSelected: "ListDataSelected", SelectedIdentifier: "SelectedIdentifier", ListSearchOptions: "ListSearchOptions", ShowRowPerPage: "ShowRowPerPage", ExpandedColumnIdent: "ExpandedColumnIdent", PropagateHeaderToChildren: "PropagateHeaderToChildren", ShowHeaderTooltips: "ShowHeaderTooltips" }, outputs: { EmitSelectedItem: "EmitSelectedItem", EmitListDataFilter: "EmitListDataFilter", EmitSearchEvent: "EmitSearchEvent", EmitSortEvent: "EmitSortEvent", EmitCheckboxHeaderEvent: "EmitCheckboxHeaderEvent" }, providers: [FormatCellPipe, DatePipe], queries: [{ propertyName: "AdditionalTemplate", first: true, predicate: ["additionalTemplate"], descendants: true }, { propertyName: "AdditionalCentralTemplate", first: true, predicate: ["additionalCentralTemplate"], descendants: true }, { propertyName: "AdditionalExtendedTemplate", first: true, predicate: ["additionalExtendedTemplate"], descendants: true }, { propertyName: "Columns", predicate: TreeColumnComponent }, { propertyName: "ColumnGroups", predicate: TreeColumnGroupComponent }, { propertyName: "RowResumenGroups", predicate: RowResumenTreeComponent }], viewQueries: [{ propertyName: "PaginatorTable", first: true, predicate: ["paginatorTable"], descendants: true }, { propertyName: "SearchTable", first: true, predicate: ["searchTable"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"prTable\">\r\n <div class=\"prTableTools\">\r\n <div class=\"prTableTools__new prTableTools__new--left\">\r\n @if (AdditionalTemplate) {\r\n <ng-container *ngTemplateOutlet=\"AdditionalTemplate\"></ng-container>\r\n }\r\n </div>\r\n\r\n @if (ShowSearch) {\r\n <intelica-search\r\n #searchTable\r\n [ComponentId]=\"ComponentId + 'Search'\"\r\n (OnSearch)=\"ExecuteSearch($event)\"\r\n [SearchFieldOptions]=\"ListSearchOptionsSimple\"\r\n [SearchOnKeyup]=\"false\"\r\n [SimpleSearchInput]=\"false\"\r\n [ShowTooltip]=\"ShowSearchTooltip\"\r\n ></intelica-search>\r\n } @if (AdditionalCentralTemplate) {\r\n <div class=\"prTableTools__new prTableTools__new--right\">\r\n <ng-container\r\n *ngTemplateOutlet=\"AdditionalCentralTemplate\"\r\n ></ng-container>\r\n </div>\r\n }\r\n </div>\r\n @if (AdditionalExtendedTemplate) {\r\n <div class=\"prTableTools justify-content-start\">\r\n <ng-container *ngTemplateOutlet=\"AdditionalExtendedTemplate\"></ng-container>\r\n </div>\r\n\r\n }\r\n <p-table\r\n class=\"prTableBasic\"\r\n [value]=\"ListDataTable\"\r\n [ngClass]=\"ClassName\"\r\n responsiveLayout=\"scroll\"\r\n [(selection)]=\"ListDataSelected\"\r\n (onHeaderCheckboxToggle)=\"SelectAll($event)\"\r\n (onRowSelect)=\"OnRowSelect($event)\"\r\n (onRowUnselect)=\"OnRowUnselect($event)\"\r\n [groupRowsBy]=\"groupRowsBy\"\r\n [dataKey]=\"dataKey\"\r\n [sortField]=\"DefaultSortField\"\r\n [scrollable]=\"scrollable\"\r\n [scrollHeight]=\"scrollable ? scrollHeight : 'auto'\"\r\n [tableStyle]=\"tableStyle\"\r\n [sortOrder]=\"SortOrder\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n @for (level of Levels; track $index) {\r\n <tr>\r\n @for (col of ColumnGroupList; track $index) { @if (col.level === level)\r\n {\r\n <th\r\n [attr.colspan]=\"col.colspan\"\r\n [attr.rowspan]=\"col.rowspan\"\r\n [pSortableColumn]=\"col.sortable ? col.field : ''\"\r\n [style.min-width]=\"col.minWidth\"\r\n (click)=\"col.sortable && OnSort(col.field)\"\r\n >\r\n <div>\r\n <span [pTooltip]=\"ShowHeaderTooltips ? col.header : undefined\">\r\n {{ col.header }}\r\n </span>\r\n <p-sortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n </th>\r\n } } @if (ShowCheckbox && level === 0 && ColumnGroupList.length != 0) {\r\n <th\r\n class=\"text-center\"\r\n style=\"width: 4%\"\r\n [attr.rowspan]=\"MaxLevel === 1 ? 2 : MaxLevel\"\r\n >\r\n <p-tableHeaderCheckbox\r\n class=\"prCheckbox\"\r\n [ngClass]=\"{\r\n 'prCheckbox--indeterminate':\r\n ListDataSelectedTemp.length > 0 &&\r\n ListDataSelectedTemp.length < ListDataFilter.length\r\n }\"\r\n />\r\n </th>\r\n }\r\n </tr>\r\n }\r\n\r\n <tr>\r\n @for (col of ColumnList; track $index) { @if(col.showHeader) {\r\n <th\r\n [class]=\"col.className\"\r\n [pSortableColumn]=\"\r\n !col.isChecboxColumn && col.sortable ? col.field : ''\r\n \"\r\n [style.width]=\"col.width\"\r\n [style.min-width]=\"col.minWidth\"\r\n (click)=\"!col.isChecboxColumn && col.sortable && OnSort(col.field)\"\r\n >\r\n <div>\r\n <span\r\n [pTooltip]=\"\r\n ShowHeaderTooltips && col.headerTooltip?.trim()\r\n ? col.headerTooltip\r\n : undefined\r\n \"\r\n [tooltipPosition]=\"col.headerTooltipPosition || 'top'\"\r\n >\r\n {{ col.header }}\r\n </span>\r\n\r\n @if (!col.showIndex) { @if (col.isChecboxColumn) {\r\n <br />\r\n <p-checkbox\r\n class=\"prCheckbox\"\r\n [binary]=\"true\"\r\n (click)=\"$event.stopPropagation()\"\r\n [(ngModel)]=\"HeaderState[col.field].checked\"\r\n (ngModelChange)=\"OnHeaderCheckboxChange($event, col.field)\"\r\n [attr.data-check]=\"col.field\"\r\n [ngClass]=\"{\r\n 'prCheckbox--indeterminate':\r\n HeaderState[col.field].indeterminate\r\n }\"\r\n ></p-checkbox>\r\n } @else {\r\n <p-sortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-sortIcon>\r\n } }\r\n </div>\r\n </th>\r\n } } @if (ShowCheckbox && ColumnGroupList.length == 0) {\r\n <th class=\"text-center\" style=\"width: 4%\">\r\n <p-tableHeaderCheckbox\r\n class=\"prCheckbox\"\r\n [ngClass]=\"{\r\n 'prCheckbox--indeterminate':\r\n ListDataSelectedTemp.length > 0 &&\r\n ListDataSelectedTemp.length < ListDataFilter.length\r\n }\"\r\n />\r\n </th>\r\n }\r\n </tr>\r\n\r\n @if (ListDataFilter.length > 0) {\r\n <tr class=\"fixedRow\">\r\n @for (col of RowResumenList; track $index) {\r\n <td\r\n [ngClass]=\"col.className\"\r\n [attr.colspan]=\"col.colspan\"\r\n [attr.rowspan]=\"col.rowspan\"\r\n >\r\n @if (col.templateRef) {\r\n <span\r\n ><ng-container *ngTemplateOutlet=\"col.templateRef\"></ng-container\r\n ></span>\r\n } @else {\r\n <ng-template #defaultContent></ng-template>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-rowIndex=\"rowIndex\"\r\n let-expanded=\"expanded\"\r\n >\r\n <tr>\r\n @for (col of ColumnList; track $index) {\r\n <td [ngClass]=\"col.className\">\r\n @if (col.showIndex) {\r\n {{ rowIndex + 1 + (CurrentPage - 1) * RowsPerPage }}\r\n } @else if ((col.field === (ExpandedColumnIdent?.trim() || 'name')) &&\r\n (rowData.children?.length ?? 0) > 0 ) {\r\n <div class=\"prTable__expandToggleRow\">\r\n <p-button\r\n [pRowToggler]=\"rowData\"\r\n class=\"prButton prButton--icon prButton--iconBlue\"\r\n >\r\n <i\r\n [class]=\"\r\n expanded ? 'icon icon-collapse-rows' : 'icon icon-expand-rows'\r\n \"\r\n ></i>\r\n </p-button>\r\n <span\r\n class=\"text-breakWord\"\r\n pTooltip=\"{{ col.tooltip }}\"\r\n tooltipPosition=\"{{ col.tooltipPosition }}\"\r\n >\r\n {{ rowData[col.field] | formatCell : col.formatType }}\r\n </span>\r\n </div>\r\n } @else { @if (col.templateRef) {\r\n <ng-container\r\n *ngTemplateOutlet=\"col.templateRef; context: { $implicit: rowData }\"\r\n ></ng-container>\r\n } @else if(col.isChecboxColumn){\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n (onChange)=\"onBodyCheckboxChange(col.field)\"\r\n ></p-checkbox>\r\n } @else {\r\n <span\r\n class=\"text-breakWord\"\r\n pTooltip=\"{{ col.tooltip }}\"\r\n tooltipPosition=\"{{ col.tooltipPosition }}\"\r\n >\r\n {{ rowData[col.field] | formatCell : col.formatType }}\r\n </span>\r\n } }\r\n </td>\r\n } @if (ShowCheckbox) {\r\n <td class=\"text-center\">\r\n <p-tableCheckbox [value]=\"rowData\" class=\"prCheckbox\" />\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"expandedrow\" let-rowData let-rowIndex=\"rowIndex\">\r\n <ng-container *ngIf=\"rowData.children?.length\">\r\n <tr\r\n *ngFor=\"let childRow of rowData.children; let i = index\"\r\n class=\"subRow\"\r\n >\r\n @for (col of ColumnList; track $index) {\r\n <td [ngClass]=\"col.className\">\r\n @if (col.showIndex && $index === 0) {\r\n <ng-container\r\n *ngIf=\"\r\n col.alphaSubEnum && rowData.children.length <= 26;\r\n else numericEnum\r\n \"\r\n >\r\n {{ rowIndex + 1 + \".\" + getLetter(i) }}\r\n </ng-container>\r\n <ng-template #numericEnum>\r\n {{ rowIndex + 1 + \".\" + getNumber(i) }}\r\n </ng-template>\r\n } @else if (col.templateRef) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n col.templateRef;\r\n context: { $implicit: childRow }\r\n \"\r\n ></ng-container>\r\n } @else if (col.isChecboxColumn) {\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [(ngModel)]=\"childRow[col.field]\"\r\n (onChange)=\"onBodyCheckboxChange(col.field, childRow)\"\r\n ></p-checkbox>\r\n } @else {\r\n <span\r\n class=\"text-breakWord\"\r\n pTooltip=\"{{ col.tooltip }}\"\r\n tooltipPosition=\"{{ col.tooltipPosition }}\"\r\n [class.prTable__expandIdentText]=\"\r\n col.field === (ExpandedColumnIdent || 'name')\r\n \"\r\n >\r\n {{ childRow[col.field] | formatCell : col.formatType }}\r\n </span>\r\n }\r\n </td>\r\n } @if (ShowCheckbox) {\r\n <td class=\"text-center\">\r\n <p-tableCheckbox [value]=\"childRow\" class=\"prCheckbox\" />\r\n </td>\r\n }\r\n </tr>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #emptymessage>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"ColumnList.length + (ShowCheckbox ? 1 : 0)\"\r\n class=\"text-center\"\r\n >\r\n {{ \"Nodata\" | term : GlobalTermService.languageCode }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n <div class=\"prTableToolsBottom\">\r\n @if(TotalRecords !== 0){ @if (ShowRowPerPage) {\r\n <div class=\"prTableToolsBottom__itemPerPage\">\r\n {{ \"ItemPerPage\" | term : GlobalTermService.languageCode }}\r\n <p-select\r\n [options]=\"AllowedPageSizes\"\r\n [ngModel]=\"RowsPerPage\"\r\n appendTo=\"body\"\r\n (onChange)=\"OnRowsPerPageChange($event.value)\"\r\n />\r\n <label for=\"pageSize\" class=\"control-label\">\r\n {{ 1 + RowsPerPage * (CurrentPage - 1) }} -\r\n {{\r\n CurrentPage * RowsPerPage >= TotalRecords\r\n ? TotalRecords\r\n : CurrentPage * RowsPerPage\r\n }}\r\n {{ \"Of\" | term : GlobalTermService.languageCode }} {{ TotalRecords }}\r\n {{ \"Items\" | term : GlobalTermService.languageCode }}\r\n </label>\r\n </div>\r\n } @if (ShowPagination) {\r\n <intelica-paginator\r\n #paginatorTable\r\n [TotalItems]=\"ListDataFilter.length\"\r\n [ItemsPerPage]=\"RowsPerPage\"\r\n (PageChange)=\"OnPageChange($event)\"\r\n >\r\n </intelica-paginator>\r\n } }\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SearchComponent, selector: "intelica-search", inputs: ["ComponentId", "ShowTooltip", "SearchFieldOptions", "SearchOnKeyup", "SimpleSearchInput", "Placeholder"], outputs: ["OnSearch"] }, { kind: "component", type: PaginatorComponent, selector: "intelica-paginator", inputs: ["TotalItems", "CurrentPage", "ItemsPerPage"], outputs: ["PageChange"] }, { kind: "component", type: Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i2$1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2$1.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i2$1.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { kind: "component", type: i2$1.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i2$1.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i2$1.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "ngmodule", type: BadgeModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "pipe", type: TermPipe, name: "term" }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i5.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: FormatCellPipe, name: "formatCell" }] });
|
|
2791
2833
|
}
|
|
2792
2834
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: TreeTableComponent, decorators: [{
|
|
2793
2835
|
type: Component,
|
|
@@ -2804,7 +2846,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
|
|
|
2804
2846
|
FormsModule,
|
|
2805
2847
|
ButtonModule,
|
|
2806
2848
|
FormatCellPipe,
|
|
2807
|
-
], providers: [FormatCellPipe, DatePipe], template: "<div class=\"prTable\">\r\n <div class=\"prTableTools\">\r\n <div class=\"prTableTools__new prTableTools__new--left\">\r\n @if (AdditionalTemplate) {\r\n <ng-container *ngTemplateOutlet=\"AdditionalTemplate\"></ng-container>\r\n }\r\n </div>\r\n\r\n @if (ShowSearch) {\r\n <intelica-search\r\n #searchTable\r\n [ComponentId]=\"ComponentId + 'Search'\"\r\n (OnSearch)=\"ExecuteSearch($event)\"\r\n [SearchFieldOptions]=\"ListSearchOptionsSimple\"\r\n [SearchOnKeyup]=\"false\"\r\n [SimpleSearchInput]=\"false\"\r\n [ShowTooltip]=\"ShowSearchTooltip\"\r\n ></intelica-search>\r\n } @if (AdditionalCentralTemplate) {\r\n <div class=\"prTableTools__new prTableTools__new--right\">\r\n <ng-container\r\n *ngTemplateOutlet=\"AdditionalCentralTemplate\"\r\n ></ng-container>\r\n </div>\r\n }\r\n </div>\r\n @if (AdditionalExtendedTemplate) {\r\n <div class=\"prTableTools justify-content-start\">\r\n <ng-container *ngTemplateOutlet=\"AdditionalExtendedTemplate\"></ng-container>\r\n </div>\r\n\r\n }\r\n <p-table\r\n class=\"prTableBasic\"\r\n [value]=\"ListDataTable\"\r\n [ngClass]=\"ClassName\"\r\n responsiveLayout=\"scroll\"\r\n [(selection)]=\"ListDataSelected\"\r\n (onHeaderCheckboxToggle)=\"SelectAll($event)\"\r\n (onRowSelect)=\"OnRowSelect($event)\"\r\n (onRowUnselect)=\"OnRowUnselect($event)\"\r\n [groupRowsBy]=\"groupRowsBy\"\r\n [dataKey]=\"dataKey\"\r\n [sortField]=\"DefaultSortField\"\r\n [scrollable]=\"scrollable\"\r\n [scrollHeight]=\"scrollable ? scrollHeight : 'auto'\"\r\n [tableStyle]=\"tableStyle\"\r\n [sortOrder]=\"SortOrder\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n @for (level of Levels; track $index) {\r\n <tr>\r\n @for (col of ColumnGroupList; track $index) { @if (col.level === level)\r\n {\r\n <th\r\n [attr.colspan]=\"col.colspan\"\r\n [attr.rowspan]=\"col.rowspan\"\r\n [pSortableColumn]=\"col.sortable ? col.field : ''\"\r\n [style.min-width]=\"col.minWidth\"\r\n (click)=\"col.sortable && OnSort(col.field)\"\r\n >\r\n <div>\r\n <span pTooltip=\"{{ col.header }}\">{{ col.header }}</span>\r\n <p-sortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n </th>\r\n } } @if (ShowCheckbox && level === 0 && ColumnGroupList.length != 0) {\r\n <th\r\n class=\"text-center\"\r\n style=\"width: 4%\"\r\n [attr.rowspan]=\"MaxLevel === 1 ? 2 : MaxLevel\"\r\n >\r\n <p-tableHeaderCheckbox\r\n class=\"prCheckbox\"\r\n [ngClass]=\"{\r\n 'prCheckbox--indeterminate':\r\n ListDataSelectedTemp.length > 0 &&\r\n ListDataSelectedTemp.length < ListDataFilter.length\r\n }\"\r\n />\r\n </th>\r\n }\r\n </tr>\r\n }\r\n\r\n <tr>\r\n @for (col of ColumnList; track $index) { @if(col.showHeader) {\r\n <th\r\n [class]=\"col.className\"\r\n [pSortableColumn]=\"\r\n !col.isChecboxColumn && col.sortable ? col.field : ''\r\n \"\r\n [style.width]=\"col.width\"\r\n [style.min-width]=\"col.minWidth\"\r\n (click)=\"!col.isChecboxColumn && col.sortable && OnSort(col.field)\"\r\n >\r\n <div>\r\n <span [pTooltip]=\"col.headerTooltip?.trim() ? col.headerTooltip : undefined\"\r\n [tooltipPosition]=\"col.headerTooltipPosition || 'top'\">\r\n {{ col.header }}\r\n </span>\r\n \r\n @if (!col.showIndex) { @if (col.isChecboxColumn) {\r\n <br />\r\n <p-checkbox\r\n [binary]=\"true\"\r\n (click)=\"$event.stopPropagation()\"\r\n (onChange)=\"OnHeaderCheckboxChange($event, col.field)\"\r\n [attr.data-check]=\"col.field\"\r\n ></p-checkbox>\r\n } @else {\r\n <p-sortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-sortIcon>\r\n } }\r\n </div>\r\n </th>\r\n } } @if (ShowCheckbox && ColumnGroupList.length == 0) {\r\n <th class=\"text-center\" style=\"width: 4%\">\r\n <p-tableHeaderCheckbox\r\n class=\"prCheckbox\"\r\n [ngClass]=\"{\r\n 'prCheckbox--indeterminate':\r\n ListDataSelectedTemp.length > 0 &&\r\n ListDataSelectedTemp.length < ListDataFilter.length\r\n }\"\r\n />\r\n </th>\r\n }\r\n </tr>\r\n\r\n @if (ListDataFilter.length > 0) {\r\n <tr class=\"fixedRow\">\r\n @for (col of RowResumenList; track $index) {\r\n <td\r\n [ngClass]=\"col.className\"\r\n [attr.colspan]=\"col.colspan\"\r\n [attr.rowspan]=\"col.rowspan\"\r\n >\r\n @if (col.templateRef) {\r\n <span\r\n ><ng-container *ngTemplateOutlet=\"col.templateRef\"></ng-container\r\n ></span>\r\n } @else {\r\n <ng-template #defaultContent></ng-template>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-rowIndex=\"rowIndex\"\r\n let-expanded=\"expanded\"\r\n >\r\n <tr>\r\n @for (col of ColumnList; track $index) {\r\n <td [ngClass]=\"col.className\">\r\n @if (col.showIndex) {\r\n {{ rowIndex + 1 + (CurrentPage - 1) * RowsPerPage }}\r\n } @else if ((col.field === (ExpandedColumnIdent?.trim() || 'name')) && (rowData.children?.length ?? 0) > 0\r\n ) {\r\n <div class=\"prTable__expandToggleRow\">\r\n <p-button\r\n [pRowToggler]=\"rowData\"\r\n class=\"prButton prButton--icon prButton--iconBlue\"\r\n >\r\n <i\r\n [class]=\"\r\n expanded ? 'icon icon-collapse-rows' : 'icon icon-expand-rows'\r\n \"\r\n ></i>\r\n </p-button>\r\n <span\r\n class=\"text-breakWord\"\r\n pTooltip=\"{{ col.tooltip }}\"\r\n tooltipPosition=\"{{ col.tooltipPosition }}\"\r\n >\r\n {{ rowData[col.field] | formatCell : col.formatType }}\r\n </span>\r\n </div>\r\n } @else { @if (col.templateRef) {\r\n <ng-container\r\n *ngTemplateOutlet=\"col.templateRef; context: { $implicit: rowData }\"\r\n ></ng-container>\r\n } @else if (col.isChecboxColumn) {\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n (onChange)=\"IsInderteminate(col.field)\"\r\n ></p-checkbox>\r\n } @else {\r\n <span\r\n class=\"text-breakWord\"\r\n pTooltip=\"{{ col.tooltip }}\"\r\n tooltipPosition=\"{{ col.tooltipPosition }}\"\r\n >\r\n {{ rowData[col.field] | formatCell : col.formatType }}\r\n </span>\r\n } }\r\n </td>\r\n } @if (ShowCheckbox) {\r\n <td class=\"text-center\">\r\n <p-tableCheckbox [value]=\"rowData\" class=\"prCheckbox\" />\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"expandedrow\" let-rowData let-rowIndex=\"rowIndex\">\r\n <ng-container *ngIf=\"rowData.children?.length\">\r\n <tr\r\n *ngFor=\"let childRow of rowData.children; let i = index\"\r\n class=\"subRow\"\r\n >\r\n <td\r\n *ngFor=\"let col of ColumnList; let j = index\"\r\n [ngClass]=\"col.className\"\r\n >\r\n <span\r\n class=\"text-breakWord\"\r\n pTooltip=\"{{ col.tooltip }}\"\r\n tooltipPosition=\"{{ col.tooltipPosition }}\"\r\n >\r\n <ng-container *ngIf=\"col.showIndex && j === 0; else normalCell\">\r\n {{ rowIndex + 1 + \".\" + getLetter(i) }}\r\n </ng-container>\r\n <ng-template #normalCell>\r\n @if (col.field === \"id\" && i < 26) {\r\n <span>{{ childRow[col.field] + \".\" + getLetter(i) }}</span>\r\n } @else {\r\n <ng-container *ngIf=\"col.templateRef; else defaultExpandedContent\">\r\n <ng-container *ngTemplateOutlet=\"col.templateRef; context: { $implicit: childRow }\"></ng-container>\r\n </ng-container>\r\n <ng-template #defaultExpandedContent>\r\n <span [class]=\"col.field === (ExpandedColumnIdent || 'name') ? 'prTable__expandIdentText' : ''\">\r\n {{ childRow[col.field] | formatCell : col.formatType }}\r\n </span>\r\n </ng-template> \r\n }\r\n </ng-template>\r\n </span>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #emptymessage>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"ColumnList.length + (ShowCheckbox ? 1 : 0)\"\r\n class=\"text-center\"\r\n >\r\n {{ \"Nodata\" | term : GlobalTermService.languageCode }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n <div class=\"prTableToolsBottom\">\r\n @if(TotalRecords !== 0){\r\n @if (ShowRowPerPage) {\r\n <div class=\"prTableToolsBottom__itemPerPage\">\r\n {{ \"ItemPerPage\" | term : GlobalTermService.languageCode }}\r\n <p-select\r\n [options]=\"AllowedPageSizes\"\r\n [ngModel]=\"RowsPerPage\"\r\n appendTo=\"body\"\r\n (onChange)=\"OnRowsPerPageChange($event.value)\"\r\n />\r\n <label for=\"pageSize\" class=\"control-label\">\r\n {{ 1 + RowsPerPage * (CurrentPage - 1) }} -\r\n {{\r\n CurrentPage * RowsPerPage >= TotalRecords\r\n ? TotalRecords\r\n : CurrentPage * RowsPerPage\r\n }}\r\n {{ \"Of\" | term : GlobalTermService.languageCode }} {{ TotalRecords }}\r\n {{ \"Items\" | term : GlobalTermService.languageCode }}\r\n </label>\r\n </div>\r\n } @if (ShowPagination) {\r\n <intelica-paginator\r\n #paginatorTable\r\n [TotalItems]=\"ListDataFilter.length\"\r\n [ItemsPerPage]=\"RowsPerPage\"\r\n (PageChange)=\"OnPageChange($event)\"\r\n >\r\n </intelica-paginator>\r\n }\r\n }\r\n </div>\r\n</div>\r\n" }]
|
|
2849
|
+
], providers: [FormatCellPipe, DatePipe], template: "<div class=\"prTable\">\r\n <div class=\"prTableTools\">\r\n <div class=\"prTableTools__new prTableTools__new--left\">\r\n @if (AdditionalTemplate) {\r\n <ng-container *ngTemplateOutlet=\"AdditionalTemplate\"></ng-container>\r\n }\r\n </div>\r\n\r\n @if (ShowSearch) {\r\n <intelica-search\r\n #searchTable\r\n [ComponentId]=\"ComponentId + 'Search'\"\r\n (OnSearch)=\"ExecuteSearch($event)\"\r\n [SearchFieldOptions]=\"ListSearchOptionsSimple\"\r\n [SearchOnKeyup]=\"false\"\r\n [SimpleSearchInput]=\"false\"\r\n [ShowTooltip]=\"ShowSearchTooltip\"\r\n ></intelica-search>\r\n } @if (AdditionalCentralTemplate) {\r\n <div class=\"prTableTools__new prTableTools__new--right\">\r\n <ng-container\r\n *ngTemplateOutlet=\"AdditionalCentralTemplate\"\r\n ></ng-container>\r\n </div>\r\n }\r\n </div>\r\n @if (AdditionalExtendedTemplate) {\r\n <div class=\"prTableTools justify-content-start\">\r\n <ng-container *ngTemplateOutlet=\"AdditionalExtendedTemplate\"></ng-container>\r\n </div>\r\n\r\n }\r\n <p-table\r\n class=\"prTableBasic\"\r\n [value]=\"ListDataTable\"\r\n [ngClass]=\"ClassName\"\r\n responsiveLayout=\"scroll\"\r\n [(selection)]=\"ListDataSelected\"\r\n (onHeaderCheckboxToggle)=\"SelectAll($event)\"\r\n (onRowSelect)=\"OnRowSelect($event)\"\r\n (onRowUnselect)=\"OnRowUnselect($event)\"\r\n [groupRowsBy]=\"groupRowsBy\"\r\n [dataKey]=\"dataKey\"\r\n [sortField]=\"DefaultSortField\"\r\n [scrollable]=\"scrollable\"\r\n [scrollHeight]=\"scrollable ? scrollHeight : 'auto'\"\r\n [tableStyle]=\"tableStyle\"\r\n [sortOrder]=\"SortOrder\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n @for (level of Levels; track $index) {\r\n <tr>\r\n @for (col of ColumnGroupList; track $index) { @if (col.level === level)\r\n {\r\n <th\r\n [attr.colspan]=\"col.colspan\"\r\n [attr.rowspan]=\"col.rowspan\"\r\n [pSortableColumn]=\"col.sortable ? col.field : ''\"\r\n [style.min-width]=\"col.minWidth\"\r\n (click)=\"col.sortable && OnSort(col.field)\"\r\n >\r\n <div>\r\n <span [pTooltip]=\"ShowHeaderTooltips ? col.header : undefined\">\r\n {{ col.header }}\r\n </span>\r\n <p-sortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n </th>\r\n } } @if (ShowCheckbox && level === 0 && ColumnGroupList.length != 0) {\r\n <th\r\n class=\"text-center\"\r\n style=\"width: 4%\"\r\n [attr.rowspan]=\"MaxLevel === 1 ? 2 : MaxLevel\"\r\n >\r\n <p-tableHeaderCheckbox\r\n class=\"prCheckbox\"\r\n [ngClass]=\"{\r\n 'prCheckbox--indeterminate':\r\n ListDataSelectedTemp.length > 0 &&\r\n ListDataSelectedTemp.length < ListDataFilter.length\r\n }\"\r\n />\r\n </th>\r\n }\r\n </tr>\r\n }\r\n\r\n <tr>\r\n @for (col of ColumnList; track $index) { @if(col.showHeader) {\r\n <th\r\n [class]=\"col.className\"\r\n [pSortableColumn]=\"\r\n !col.isChecboxColumn && col.sortable ? col.field : ''\r\n \"\r\n [style.width]=\"col.width\"\r\n [style.min-width]=\"col.minWidth\"\r\n (click)=\"!col.isChecboxColumn && col.sortable && OnSort(col.field)\"\r\n >\r\n <div>\r\n <span\r\n [pTooltip]=\"\r\n ShowHeaderTooltips && col.headerTooltip?.trim()\r\n ? col.headerTooltip\r\n : undefined\r\n \"\r\n [tooltipPosition]=\"col.headerTooltipPosition || 'top'\"\r\n >\r\n {{ col.header }}\r\n </span>\r\n\r\n @if (!col.showIndex) { @if (col.isChecboxColumn) {\r\n <br />\r\n <p-checkbox\r\n class=\"prCheckbox\"\r\n [binary]=\"true\"\r\n (click)=\"$event.stopPropagation()\"\r\n [(ngModel)]=\"HeaderState[col.field].checked\"\r\n (ngModelChange)=\"OnHeaderCheckboxChange($event, col.field)\"\r\n [attr.data-check]=\"col.field\"\r\n [ngClass]=\"{\r\n 'prCheckbox--indeterminate':\r\n HeaderState[col.field].indeterminate\r\n }\"\r\n ></p-checkbox>\r\n } @else {\r\n <p-sortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-sortIcon>\r\n } }\r\n </div>\r\n </th>\r\n } } @if (ShowCheckbox && ColumnGroupList.length == 0) {\r\n <th class=\"text-center\" style=\"width: 4%\">\r\n <p-tableHeaderCheckbox\r\n class=\"prCheckbox\"\r\n [ngClass]=\"{\r\n 'prCheckbox--indeterminate':\r\n ListDataSelectedTemp.length > 0 &&\r\n ListDataSelectedTemp.length < ListDataFilter.length\r\n }\"\r\n />\r\n </th>\r\n }\r\n </tr>\r\n\r\n @if (ListDataFilter.length > 0) {\r\n <tr class=\"fixedRow\">\r\n @for (col of RowResumenList; track $index) {\r\n <td\r\n [ngClass]=\"col.className\"\r\n [attr.colspan]=\"col.colspan\"\r\n [attr.rowspan]=\"col.rowspan\"\r\n >\r\n @if (col.templateRef) {\r\n <span\r\n ><ng-container *ngTemplateOutlet=\"col.templateRef\"></ng-container\r\n ></span>\r\n } @else {\r\n <ng-template #defaultContent></ng-template>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-rowIndex=\"rowIndex\"\r\n let-expanded=\"expanded\"\r\n >\r\n <tr>\r\n @for (col of ColumnList; track $index) {\r\n <td [ngClass]=\"col.className\">\r\n @if (col.showIndex) {\r\n {{ rowIndex + 1 + (CurrentPage - 1) * RowsPerPage }}\r\n } @else if ((col.field === (ExpandedColumnIdent?.trim() || 'name')) &&\r\n (rowData.children?.length ?? 0) > 0 ) {\r\n <div class=\"prTable__expandToggleRow\">\r\n <p-button\r\n [pRowToggler]=\"rowData\"\r\n class=\"prButton prButton--icon prButton--iconBlue\"\r\n >\r\n <i\r\n [class]=\"\r\n expanded ? 'icon icon-collapse-rows' : 'icon icon-expand-rows'\r\n \"\r\n ></i>\r\n </p-button>\r\n <span\r\n class=\"text-breakWord\"\r\n pTooltip=\"{{ col.tooltip }}\"\r\n tooltipPosition=\"{{ col.tooltipPosition }}\"\r\n >\r\n {{ rowData[col.field] | formatCell : col.formatType }}\r\n </span>\r\n </div>\r\n } @else { @if (col.templateRef) {\r\n <ng-container\r\n *ngTemplateOutlet=\"col.templateRef; context: { $implicit: rowData }\"\r\n ></ng-container>\r\n } @else if(col.isChecboxColumn){\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n (onChange)=\"onBodyCheckboxChange(col.field)\"\r\n ></p-checkbox>\r\n } @else {\r\n <span\r\n class=\"text-breakWord\"\r\n pTooltip=\"{{ col.tooltip }}\"\r\n tooltipPosition=\"{{ col.tooltipPosition }}\"\r\n >\r\n {{ rowData[col.field] | formatCell : col.formatType }}\r\n </span>\r\n } }\r\n </td>\r\n } @if (ShowCheckbox) {\r\n <td class=\"text-center\">\r\n <p-tableCheckbox [value]=\"rowData\" class=\"prCheckbox\" />\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"expandedrow\" let-rowData let-rowIndex=\"rowIndex\">\r\n <ng-container *ngIf=\"rowData.children?.length\">\r\n <tr\r\n *ngFor=\"let childRow of rowData.children; let i = index\"\r\n class=\"subRow\"\r\n >\r\n @for (col of ColumnList; track $index) {\r\n <td [ngClass]=\"col.className\">\r\n @if (col.showIndex && $index === 0) {\r\n <ng-container\r\n *ngIf=\"\r\n col.alphaSubEnum && rowData.children.length <= 26;\r\n else numericEnum\r\n \"\r\n >\r\n {{ rowIndex + 1 + \".\" + getLetter(i) }}\r\n </ng-container>\r\n <ng-template #numericEnum>\r\n {{ rowIndex + 1 + \".\" + getNumber(i) }}\r\n </ng-template>\r\n } @else if (col.templateRef) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n col.templateRef;\r\n context: { $implicit: childRow }\r\n \"\r\n ></ng-container>\r\n } @else if (col.isChecboxColumn) {\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [(ngModel)]=\"childRow[col.field]\"\r\n (onChange)=\"onBodyCheckboxChange(col.field, childRow)\"\r\n ></p-checkbox>\r\n } @else {\r\n <span\r\n class=\"text-breakWord\"\r\n pTooltip=\"{{ col.tooltip }}\"\r\n tooltipPosition=\"{{ col.tooltipPosition }}\"\r\n [class.prTable__expandIdentText]=\"\r\n col.field === (ExpandedColumnIdent || 'name')\r\n \"\r\n >\r\n {{ childRow[col.field] | formatCell : col.formatType }}\r\n </span>\r\n }\r\n </td>\r\n } @if (ShowCheckbox) {\r\n <td class=\"text-center\">\r\n <p-tableCheckbox [value]=\"childRow\" class=\"prCheckbox\" />\r\n </td>\r\n }\r\n </tr>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #emptymessage>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"ColumnList.length + (ShowCheckbox ? 1 : 0)\"\r\n class=\"text-center\"\r\n >\r\n {{ \"Nodata\" | term : GlobalTermService.languageCode }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n <div class=\"prTableToolsBottom\">\r\n @if(TotalRecords !== 0){ @if (ShowRowPerPage) {\r\n <div class=\"prTableToolsBottom__itemPerPage\">\r\n {{ \"ItemPerPage\" | term : GlobalTermService.languageCode }}\r\n <p-select\r\n [options]=\"AllowedPageSizes\"\r\n [ngModel]=\"RowsPerPage\"\r\n appendTo=\"body\"\r\n (onChange)=\"OnRowsPerPageChange($event.value)\"\r\n />\r\n <label for=\"pageSize\" class=\"control-label\">\r\n {{ 1 + RowsPerPage * (CurrentPage - 1) }} -\r\n {{\r\n CurrentPage * RowsPerPage >= TotalRecords\r\n ? TotalRecords\r\n : CurrentPage * RowsPerPage\r\n }}\r\n {{ \"Of\" | term : GlobalTermService.languageCode }} {{ TotalRecords }}\r\n {{ \"Items\" | term : GlobalTermService.languageCode }}\r\n </label>\r\n </div>\r\n } @if (ShowPagination) {\r\n <intelica-paginator\r\n #paginatorTable\r\n [TotalItems]=\"ListDataFilter.length\"\r\n [ItemsPerPage]=\"RowsPerPage\"\r\n (PageChange)=\"OnPageChange($event)\"\r\n >\r\n </intelica-paginator>\r\n } }\r\n </div>\r\n</div>\r\n" }]
|
|
2808
2850
|
}], propDecorators: { ComponentId: [{
|
|
2809
2851
|
type: Input
|
|
2810
2852
|
}], ListData: [{
|
|
@@ -2849,6 +2891,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
|
|
|
2849
2891
|
type: Input
|
|
2850
2892
|
}], ExpandedColumnIdent: [{
|
|
2851
2893
|
type: Input
|
|
2894
|
+
}], PropagateHeaderToChildren: [{
|
|
2895
|
+
type: Input
|
|
2896
|
+
}], ShowHeaderTooltips: [{
|
|
2897
|
+
type: Input
|
|
2852
2898
|
}], EmitSelectedItem: [{
|
|
2853
2899
|
type: Output
|
|
2854
2900
|
}], EmitListDataFilter: [{
|
|
@@ -2857,6 +2903,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
|
|
|
2857
2903
|
type: Output
|
|
2858
2904
|
}], EmitSortEvent: [{
|
|
2859
2905
|
type: Output
|
|
2906
|
+
}], EmitCheckboxHeaderEvent: [{
|
|
2907
|
+
type: Output
|
|
2860
2908
|
}], Columns: [{
|
|
2861
2909
|
type: ContentChildren,
|
|
2862
2910
|
args: [TreeColumnComponent]
|
|
@@ -6440,12 +6488,13 @@ class HtmlToExcelService {
|
|
|
6440
6488
|
XLSX.utils.book_append_sheet(wb, ws, tabname);
|
|
6441
6489
|
XLSX.writeFile(wb, filename + "." + extension);
|
|
6442
6490
|
}
|
|
6443
|
-
Logo = "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";
|
|
6491
|
+
Logo = "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";
|
|
6444
6492
|
ColumnAligment = {
|
|
6445
6493
|
vertical: "middle",
|
|
6446
6494
|
horizontal: "center",
|
|
6447
6495
|
wrapText: true,
|
|
6448
6496
|
};
|
|
6497
|
+
BorderStyle = { style: "thin", color: { argb: "FFFFFF" } };
|
|
6449
6498
|
async ExportToExcel(excelNameOrOptions, reportTitle, filterTitle, rowsSerializate, columns, filters, subtitles = [], showTotalRow = false, headerGroups = [], childKey, SheetName = "") {
|
|
6450
6499
|
let options;
|
|
6451
6500
|
if (typeof excelNameOrOptions === "string") {
|
|
@@ -6497,7 +6546,7 @@ class HtmlToExcelService {
|
|
|
6497
6546
|
name: "Arial",
|
|
6498
6547
|
bold: true,
|
|
6499
6548
|
size: 20,
|
|
6500
|
-
color: { argb: "
|
|
6549
|
+
color: { argb: "21409A" },
|
|
6501
6550
|
};
|
|
6502
6551
|
titleCell.alignment = this.ColumnAligment;
|
|
6503
6552
|
}
|
|
@@ -6508,7 +6557,7 @@ class HtmlToExcelService {
|
|
|
6508
6557
|
if (isHierarchical) {
|
|
6509
6558
|
rows = this.FlattenRowsForHierarchy(rows, childKey);
|
|
6510
6559
|
}
|
|
6511
|
-
let
|
|
6560
|
+
let isHeaderGroup = headerGroups.length > 0;
|
|
6512
6561
|
const imageRows = 5;
|
|
6513
6562
|
const numberRows = rows.length;
|
|
6514
6563
|
for (let i = 0; i < subtitles.length + imageRows; i++) {
|
|
@@ -6516,7 +6565,7 @@ class HtmlToExcelService {
|
|
|
6516
6565
|
}
|
|
6517
6566
|
let startRow = imageRows + 1 + subtitles.length;
|
|
6518
6567
|
const groupedIndices = new Set();
|
|
6519
|
-
if (
|
|
6568
|
+
if (isHeaderGroup) {
|
|
6520
6569
|
for (const group of headerGroups) {
|
|
6521
6570
|
const startChar = this.GetExcelColumnLetter(group.startColumn);
|
|
6522
6571
|
const endChar = this.GetExcelColumnLetter(group.endColumn);
|
|
@@ -6534,7 +6583,13 @@ class HtmlToExcelService {
|
|
|
6534
6583
|
cell.fill = {
|
|
6535
6584
|
type: "pattern",
|
|
6536
6585
|
pattern: "solid",
|
|
6537
|
-
fgColor: { argb: "
|
|
6586
|
+
fgColor: { argb: "21409A" },
|
|
6587
|
+
};
|
|
6588
|
+
cell.border = {
|
|
6589
|
+
top: this.BorderStyle,
|
|
6590
|
+
left: this.BorderStyle,
|
|
6591
|
+
bottom: this.BorderStyle,
|
|
6592
|
+
right: this.BorderStyle,
|
|
6538
6593
|
};
|
|
6539
6594
|
cell.alignment = {
|
|
6540
6595
|
vertical: "middle",
|
|
@@ -6549,11 +6604,13 @@ class HtmlToExcelService {
|
|
|
6549
6604
|
for (let i = 0; i < columns.length; i++) {
|
|
6550
6605
|
const colLetter = this.GetExcelColumnLetter(i);
|
|
6551
6606
|
const topCell = `${colLetter}${startRow}`;
|
|
6552
|
-
const bottomCell = `${colLetter}${
|
|
6607
|
+
const bottomCell = `${colLetter}${isHeaderGroup ? startRow + 1 : startRow}`;
|
|
6553
6608
|
if (groupedIndices.has(i)) {
|
|
6554
6609
|
columnsCell.push(bottomCell);
|
|
6555
|
-
worksheet.getCell(bottomCell)
|
|
6556
|
-
|
|
6610
|
+
const cell = worksheet.getCell(bottomCell);
|
|
6611
|
+
cell.value = columns[i].displayColumnName;
|
|
6612
|
+
cell.border = { top: this.BorderStyle, left: this.BorderStyle, bottom: this.BorderStyle, right: this.BorderStyle };
|
|
6613
|
+
cell.alignment = {
|
|
6557
6614
|
vertical: "middle",
|
|
6558
6615
|
horizontal: "center",
|
|
6559
6616
|
wrapText: true,
|
|
@@ -6569,20 +6626,26 @@ class HtmlToExcelService {
|
|
|
6569
6626
|
size: 10,
|
|
6570
6627
|
color: { argb: "FFFFFF" },
|
|
6571
6628
|
};
|
|
6629
|
+
cell.border = {
|
|
6630
|
+
top: this.BorderStyle,
|
|
6631
|
+
left: this.BorderStyle,
|
|
6632
|
+
bottom: this.BorderStyle,
|
|
6633
|
+
right: this.BorderStyle,
|
|
6634
|
+
};
|
|
6572
6635
|
cell.alignment = this.ColumnAligment;
|
|
6573
6636
|
cell.fill = {
|
|
6574
6637
|
type: "pattern",
|
|
6575
6638
|
pattern: "solid",
|
|
6576
|
-
fgColor: { argb: "
|
|
6639
|
+
fgColor: { argb: "21409A" },
|
|
6577
6640
|
};
|
|
6578
6641
|
}
|
|
6579
6642
|
}
|
|
6580
|
-
if (
|
|
6643
|
+
if (isHeaderGroup)
|
|
6581
6644
|
startRow += 2;
|
|
6582
6645
|
else
|
|
6583
6646
|
startRow += 1;
|
|
6584
6647
|
if (showTotalRow) {
|
|
6585
|
-
const sums = columns.map(
|
|
6648
|
+
const sums = columns.map(col => {
|
|
6586
6649
|
if (col.columnName === "")
|
|
6587
6650
|
return "Total";
|
|
6588
6651
|
if (!col.totalRowValue)
|
|
@@ -6601,7 +6664,7 @@ class HtmlToExcelService {
|
|
|
6601
6664
|
name: "Arial",
|
|
6602
6665
|
bold: true,
|
|
6603
6666
|
size: 10,
|
|
6604
|
-
color: { argb: "
|
|
6667
|
+
color: { argb: "21409A" },
|
|
6605
6668
|
};
|
|
6606
6669
|
cell.alignment = {
|
|
6607
6670
|
vertical: "middle",
|
|
@@ -6621,7 +6684,7 @@ class HtmlToExcelService {
|
|
|
6621
6684
|
name: "Arial",
|
|
6622
6685
|
bold: true,
|
|
6623
6686
|
size: 10,
|
|
6624
|
-
color: { argb: "
|
|
6687
|
+
color: { argb: "21409A" },
|
|
6625
6688
|
};
|
|
6626
6689
|
cell.alignment = {
|
|
6627
6690
|
vertical: "middle",
|
|
@@ -6635,12 +6698,12 @@ class HtmlToExcelService {
|
|
|
6635
6698
|
}
|
|
6636
6699
|
//Inserción de filas
|
|
6637
6700
|
const numberColIdx = (() => {
|
|
6638
|
-
const byEmpty = columns.findIndex(
|
|
6701
|
+
const byEmpty = columns.findIndex(c => (c.columnName ?? "").trim() === "");
|
|
6639
6702
|
if (byEmpty !== -1)
|
|
6640
6703
|
return byEmpty;
|
|
6641
6704
|
const isNumDisplay = (s) => (s ?? "").trim().toLowerCase().replace("º", "°") === "n°";
|
|
6642
|
-
const byDisplay = columns.findIndex(
|
|
6643
|
-
const byColumnName = columns.findIndex(
|
|
6705
|
+
const byDisplay = columns.findIndex(c => isNumDisplay(c.displayColumnName));
|
|
6706
|
+
const byColumnName = columns.findIndex(c => isNumDisplay(c.columnName));
|
|
6644
6707
|
const i = byDisplay !== -1 ? byDisplay : byColumnName;
|
|
6645
6708
|
return i; // -1 si no hay numeración
|
|
6646
6709
|
})(); // Detecta la columna de numeración ("", "N°" o "Nº") si existe
|
|
@@ -6651,8 +6714,7 @@ class HtmlToExcelService {
|
|
|
6651
6714
|
indentColIdx = numberColIdx + 1;
|
|
6652
6715
|
}
|
|
6653
6716
|
else {
|
|
6654
|
-
const nameIdx = columns.findIndex(
|
|
6655
|
-
(c.displayColumnName ?? "").trim().toLowerCase().includes("name"));
|
|
6717
|
+
const nameIdx = columns.findIndex(c => (c.columnName ?? "").trim().toLowerCase() === "name" || (c.displayColumnName ?? "").trim().toLowerCase().includes("name"));
|
|
6656
6718
|
if (nameIdx !== -1)
|
|
6657
6719
|
indentColIdx = nameIdx;
|
|
6658
6720
|
}
|
|
@@ -6680,24 +6742,14 @@ class HtmlToExcelService {
|
|
|
6680
6742
|
wrapText: true,
|
|
6681
6743
|
};
|
|
6682
6744
|
});
|
|
6683
|
-
// Indentación: si hay jerarquía y hay columna definida para indentar
|
|
6684
|
-
if (isHierarchical &&
|
|
6685
|
-
indentColIdx !== null &&
|
|
6686
|
-
indentColIdx < columns.length) {
|
|
6687
|
-
const indentCell = insertedRow.getCell(indentColIdx + 1); // 1-based
|
|
6688
|
-
indentCell.alignment = {
|
|
6689
|
-
...(indentCell.alignment ?? {}),
|
|
6690
|
-
indent: Math.min(rows[rowIndex].__level, 10),
|
|
6691
|
-
};
|
|
6692
|
-
}
|
|
6693
6745
|
}
|
|
6694
6746
|
//Formato nombre de columnas
|
|
6695
|
-
columnsCell.forEach(
|
|
6747
|
+
columnsCell.forEach(cellRef => {
|
|
6696
6748
|
const cell = worksheet.getCell(cellRef);
|
|
6697
6749
|
cell.fill = {
|
|
6698
6750
|
type: "pattern",
|
|
6699
6751
|
pattern: "solid",
|
|
6700
|
-
fgColor: { argb: "
|
|
6752
|
+
fgColor: { argb: "21409A" },
|
|
6701
6753
|
};
|
|
6702
6754
|
cell.font = {
|
|
6703
6755
|
name: "Arial",
|
|
@@ -6713,23 +6765,23 @@ class HtmlToExcelService {
|
|
|
6713
6765
|
if (rowIndex < firstDataRow)
|
|
6714
6766
|
return;
|
|
6715
6767
|
const isEven = (rowIndex - firstDataRow) % 2 === 0;
|
|
6716
|
-
row.eachCell(
|
|
6768
|
+
row.eachCell(cell => {
|
|
6717
6769
|
if (!isEven) {
|
|
6718
6770
|
cell.fill = {
|
|
6719
6771
|
type: "pattern",
|
|
6720
6772
|
pattern: "solid",
|
|
6721
|
-
fgColor: { argb: "
|
|
6773
|
+
fgColor: { argb: "F0F4FF" },
|
|
6722
6774
|
};
|
|
6723
6775
|
}
|
|
6724
6776
|
cell.font = {
|
|
6725
6777
|
name: "Arial",
|
|
6726
6778
|
size: 10,
|
|
6727
|
-
color: { argb: "
|
|
6779
|
+
color: { argb: "0F1533" },
|
|
6728
6780
|
...(isHierarchical
|
|
6729
6781
|
? (() => {
|
|
6730
6782
|
const dataIndex = rowIndex - firstDataRow;
|
|
6731
|
-
const
|
|
6732
|
-
return
|
|
6783
|
+
const isApplyBold = rows?.[dataIndex]?.__level === 0 || rows?.[dataIndex]?.__level === 1;
|
|
6784
|
+
return isApplyBold ? { bold: true } : {};
|
|
6733
6785
|
})()
|
|
6734
6786
|
: {}),
|
|
6735
6787
|
};
|
|
@@ -6737,8 +6789,8 @@ class HtmlToExcelService {
|
|
|
6737
6789
|
});
|
|
6738
6790
|
//Logo intelica
|
|
6739
6791
|
worksheet.addImage(imageId, {
|
|
6740
|
-
tl: { col: 0.5, row: 1
|
|
6741
|
-
ext: { width:
|
|
6792
|
+
tl: { col: 0.5, row: 1 },
|
|
6793
|
+
ext: { width: 217, height: 50 },
|
|
6742
6794
|
editAs: "absolute",
|
|
6743
6795
|
});
|
|
6744
6796
|
//Subtitulos: Se inserta al final para evitar altere el autoajuste de las columnas
|
|
@@ -6749,10 +6801,8 @@ class HtmlToExcelService {
|
|
|
6749
6801
|
cell.value = subtitles[i];
|
|
6750
6802
|
cell.font = {
|
|
6751
6803
|
name: "Arial",
|
|
6752
|
-
bold: true,
|
|
6753
|
-
italic: true,
|
|
6754
6804
|
size: 10,
|
|
6755
|
-
color: { argb: "
|
|
6805
|
+
color: { argb: "21409A" },
|
|
6756
6806
|
};
|
|
6757
6807
|
cell.alignment = {
|
|
6758
6808
|
vertical: "middle",
|
|
@@ -6760,18 +6810,18 @@ class HtmlToExcelService {
|
|
|
6760
6810
|
wrapText: true,
|
|
6761
6811
|
};
|
|
6762
6812
|
}
|
|
6763
|
-
this.AdjustColumnWidth(worksheet, columns);
|
|
6813
|
+
this.AdjustColumnWidth(worksheet, columns, subtitles.length);
|
|
6764
6814
|
}
|
|
6765
6815
|
SetFilterPage(filterTitle, worksheetFilter, filters) {
|
|
6766
6816
|
let widtFilter = 30;
|
|
6767
6817
|
worksheetFilter.addRow([filterTitle]);
|
|
6768
6818
|
worksheetFilter.mergeCells(["A1", "B2"]);
|
|
6769
|
-
worksheetFilter.columns.forEach(
|
|
6819
|
+
worksheetFilter.columns.forEach(column => {
|
|
6770
6820
|
column.width = widtFilter;
|
|
6771
6821
|
column.alignment = this.ColumnAligment;
|
|
6772
6822
|
widtFilter *= 3;
|
|
6773
6823
|
});
|
|
6774
|
-
["A1", "B1"].map(
|
|
6824
|
+
["A1", "B1"].map(key => {
|
|
6775
6825
|
worksheetFilter.getCell(key).fill = {
|
|
6776
6826
|
type: "pattern",
|
|
6777
6827
|
pattern: "solid",
|
|
@@ -6787,8 +6837,8 @@ class HtmlToExcelService {
|
|
|
6787
6837
|
});
|
|
6788
6838
|
filters.forEach((element, index) => {
|
|
6789
6839
|
let row = worksheetFilter.addRow([element.key, element.value]);
|
|
6790
|
-
let color = index % 2 === 1 ? "
|
|
6791
|
-
row.eachCell(
|
|
6840
|
+
let color = index % 2 === 1 ? "F0F4FF" : "FFFFFF";
|
|
6841
|
+
row.eachCell(cell => {
|
|
6792
6842
|
cell.fill = {
|
|
6793
6843
|
type: "pattern",
|
|
6794
6844
|
pattern: "solid",
|
|
@@ -6799,32 +6849,27 @@ class HtmlToExcelService {
|
|
|
6799
6849
|
name: "Arial",
|
|
6800
6850
|
bold: false,
|
|
6801
6851
|
size: 10,
|
|
6802
|
-
color: { argb: "
|
|
6852
|
+
color: { argb: "0F1533" },
|
|
6803
6853
|
};
|
|
6804
6854
|
});
|
|
6805
6855
|
});
|
|
6806
6856
|
}
|
|
6807
|
-
AdjustColumnWidth(worksheet, columns) {
|
|
6857
|
+
AdjustColumnWidth(worksheet, columns, numSubtitles) {
|
|
6808
6858
|
worksheet.columns.forEach((column, index) => {
|
|
6809
6859
|
if (!column.values)
|
|
6810
6860
|
return;
|
|
6811
6861
|
if (columns[index] == undefined)
|
|
6812
6862
|
return;
|
|
6813
|
-
let columnWidth = columns[index].width ??
|
|
6814
|
-
Math.max(...column.values
|
|
6815
|
-
.map((v) => (v ? v.toString().length : 0))
|
|
6816
|
-
.filter((v) => typeof v === "number"), columns[index].displayColumnName.length) * 1.4;
|
|
6863
|
+
let columnWidth = columns[index].width ?? Math.max(...column.values.map(v => (v ? v.toString().length : 0)).filter(v => typeof v === "number"), columns[index].displayColumnName.length) * 1.4;
|
|
6817
6864
|
column.width = Math.min(Math.max(columnWidth, 5), 100);
|
|
6818
6865
|
});
|
|
6819
6866
|
worksheet.eachRow((row, rowIndex) => {
|
|
6820
|
-
if (rowIndex === 1)
|
|
6821
|
-
return;
|
|
6822
6867
|
let maxLines = 1;
|
|
6823
6868
|
row.eachCell((cell, colNumber) => {
|
|
6869
|
+
if (numSubtitles > 0 && cell.fullAddress.row > 5 && cell.fullAddress.row <= 5 + numSubtitles)
|
|
6870
|
+
return;
|
|
6824
6871
|
if (cell.value) {
|
|
6825
|
-
let text = typeof cell.value === "object"
|
|
6826
|
-
? cell.text
|
|
6827
|
-
: cell.value.toString();
|
|
6872
|
+
let text = typeof cell.value === "object" ? cell.text : cell.value.toString();
|
|
6828
6873
|
let columnWidth = worksheet.getColumn(colNumber).width ?? 10;
|
|
6829
6874
|
let charsPerLine = columnWidth * 1.2;
|
|
6830
6875
|
let estimatedLines = Math.ceil(text.length / charsPerLine);
|
|
@@ -6834,14 +6879,12 @@ class HtmlToExcelService {
|
|
|
6834
6879
|
row.height = Math.min(Math.max(15 * maxLines, 15), 30);
|
|
6835
6880
|
});
|
|
6836
6881
|
}
|
|
6837
|
-
async ExportToExcelRawData({ excelName, reportTitle, filterTitle, rowsSerializate, columns, filters, orderColumn = false
|
|
6882
|
+
async ExportToExcelRawData({ excelName, reportTitle, filterTitle, rowsSerializate, columns, filters, orderColumn = false }) {
|
|
6838
6883
|
const workbook = new Workbook();
|
|
6839
6884
|
const worksheet = workbook.addWorksheet(reportTitle);
|
|
6840
6885
|
const rows = JSON.parse(rowsSerializate);
|
|
6841
6886
|
worksheet.views = [{ showGridLines: false }];
|
|
6842
|
-
const allColumns = orderColumn
|
|
6843
|
-
? [{ displayColumnName: "N°" }, ...columns]
|
|
6844
|
-
: columns;
|
|
6887
|
+
const allColumns = orderColumn ? [{ displayColumnName: "N°" }, ...columns] : columns;
|
|
6845
6888
|
allColumns.forEach((col, index) => {
|
|
6846
6889
|
const columnLetter = this.GetExcelColumnLetter(index);
|
|
6847
6890
|
const headerCell = worksheet.getCell(`${columnLetter}1`);
|
|
@@ -6849,14 +6892,14 @@ class HtmlToExcelService {
|
|
|
6849
6892
|
headerCell.alignment = { horizontal: "center", vertical: "middle" };
|
|
6850
6893
|
headerCell.font = { name: "Arial", bold: true, size: 10 };
|
|
6851
6894
|
});
|
|
6852
|
-
const maxLengths = allColumns.map(
|
|
6895
|
+
const maxLengths = allColumns.map(col => col.displayColumnName.length);
|
|
6853
6896
|
rows.forEach((rowData, rowIndex) => {
|
|
6854
6897
|
const rowValues = allColumns.map((col, colIndex) => {
|
|
6855
6898
|
if (orderColumn && colIndex === 0) {
|
|
6856
6899
|
return rowIndex + 1;
|
|
6857
6900
|
}
|
|
6858
6901
|
const originalColIndex = orderColumn ? colIndex - 1 : colIndex;
|
|
6859
|
-
return
|
|
6902
|
+
return rowData[columns[originalColIndex].columnName]?.toString() || "";
|
|
6860
6903
|
});
|
|
6861
6904
|
rowValues.forEach((value, i) => {
|
|
6862
6905
|
const length = value.length;
|
|
@@ -6879,7 +6922,7 @@ class HtmlToExcelService {
|
|
|
6879
6922
|
}
|
|
6880
6923
|
async ExportToCSVRaw(excelName, rowsSerializate) {
|
|
6881
6924
|
const rows = JSON.parse(rowsSerializate);
|
|
6882
|
-
const csvLines = rows.map(
|
|
6925
|
+
const csvLines = rows.map(r => r.linea);
|
|
6883
6926
|
const csvContent = csvLines.join("\n");
|
|
6884
6927
|
const blob = new Blob(["\uFEFF" + csvContent], {
|
|
6885
6928
|
type: "text/csv;charset=utf-8;",
|
|
@@ -6923,7 +6966,7 @@ class HtmlToExcelService {
|
|
|
6923
6966
|
return flat;
|
|
6924
6967
|
}
|
|
6925
6968
|
DetectsHierarchy(rows, childKey = "details") {
|
|
6926
|
-
return
|
|
6969
|
+
return rows?.some(r => Array.isArray(r?.[childKey]) && r[childKey].length > 0) ?? false;
|
|
6927
6970
|
}
|
|
6928
6971
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: HtmlToExcelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6929
6972
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: HtmlToExcelService, providedIn: "root" });
|