@unifylib/ui-lib 1.2.37 → 1.2.38
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/iq-ui-lib.mjs
CHANGED
|
@@ -4149,7 +4149,7 @@ class BaseTableComponent extends BaseUtils {
|
|
|
4149
4149
|
return super.labelKeyByValue(column, row);
|
|
4150
4150
|
}
|
|
4151
4151
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BaseTableComponent, deps: [{ token: BackendService }, { token: i2.TranslateService }, { token: ShareDataService }, { token: i4$2.BreakpointObserver }, { token: 'securityManager' }, { token: i3$3.Router }, { token: i2$1.LiveAnnouncer }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4152
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BaseTableComponent, isStandalone: true, selector: "app-base-table", inputs: { filterFields: "filterFields", noDataFoundSvgPath: "noDataFoundSvgPath", noDataFoundTitle: "noDataFoundTitle", noDataFoundSubtitle: "noDataFoundSubtitle", noResultSvgPath: "noResultSvgPath", noResultTitle: "noResultTitle", noResultSubtitle: "noResultSubtitle", pageInfo: "pageInfo", enablePagination: "enablePagination", mobilePageSize: "mobilePageSize", mobileLoadMoreIncrement: "mobileLoadMoreIncrement", data: "data", listAction: "listAction", extraActions: "extraActions", buttonsDisplayMode: "buttonsDisplayMode", columns: "columns", filters: "filters", pathParam: "pathParam", extraButton: "extraButton", enforceRefresh: "enforceRefresh", isPending: "isPending", trigger: "trigger", reportRequest: "reportRequest", separateEndpointData: "separateEndpointData", manageablePages: "manageablePages", totalPagesCount: "totalPagesCount", currentPageIndex: "currentPageIndex", customizedData: "customizedData" }, outputs: { buttonClicked: "buttonClicked", pageChange: "pageChange", userAction: "userAction", hyperLinkAction: "hyperLinkAction", extraAction: "extraAction", selectedColumn: "selectedColumn", listActionClicked: "listActionClicked", pendingViewModeChanged: "pendingViewModeChanged", filtersApplied: "filtersApplied", showDialog: "showDialog", clickRoutePage: "clickRoutePage" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"flex-column baseTable\">\n <div class=\"flex-row flex-100\" >\n <div class=\"flex-column align-start flex-100\" style=\"width: 100%;\">\n <app-title-bar\n [pageTitle]=\"pageInfo.hideTitle ? '' : pageInfo.labelsSection+'.list_title'\"\n [subTitle]=\"(pageInfo.hideTitle || pageInfo.hideSubtitle) ? '' : pageInfo.labelsSection+'.subtitle'\"\n [titleMode]=\"''\"\n [pageInfo]=\"pageInfo\"\n [newAction]=\"showAddNew()\"\n [showExtractButton]=\"!pageInfo.hideExtractButton\"\n [draftSupported]=\"pageInfo.draftSupported\"\n [isPending]=\"isPending\"\n [onViewModeChange]=\"switchViewMode.bind(this)\"\n [buttons]=\"extraActions\"\n [buttonsDisplayMode]=\"buttonsDisplayMode\"\n (newActionClicked)=\"onAddNewAction($event)\"\n (extractReport)=\"extractReport($event)\"\n (viewModeChanged)=\"onViewModeChangedReceived($event)\"\n (buttonClicked)=\"buttonClicked.emit($event)\"\n [totalElements]=\"pageInfo.hideTitle ? undefined : totalElements\">\n </app-title-bar>\n </div>\n </div>\n\n <div class=\"filter-row\" *ngIf=\"!pageInfo.hideAdvancedFilter\">\n <app-filter-builder\n *ngIf=\"!pageInfo.hideAdvancedFilter\"\n [pageInfo]=\"pageInfo\"\n [columns]=\"columns\"\n [filterFields]=\"filterFields\"\n [pendingFilters]=\"pendingFilters\"\n [showExportButton]=\"!pageInfo.hideExtractButton\"\n [exportDisabled]=\"noDataFound || !dataSource?.data?.length\"\n (filterInformation)=\"storePendingFilters($event)\"\n (isEmpty)=\"handleFilterEmpty($event)\"\n (applyFilter)=\"applyPendingFilters()\"\n (sortByClicked)=\"handleSortClick($event)\"\n (exportClicked)=\"extractReport($event)\">\n </app-filter-builder>\n\n <div class=\"button-group\" *ngIf=\"!pageInfo.hideExtractButton\">\n <button *ngIf=\"!pageInfo.hideExtractButton\"\n mat-flat-button\n type=\"button\"\n [matMenuTriggerFor]=\"exportMenu\"\n class=\"btn-export\"\n [disabled]=\"noDataFound || !dataSource?.data?.length\"\n [attr.aria-label]=\"'export' | translate\"\n [attr.aria-haspopup]=\"true\"\n >\n <div class=\"button-text\">\n <mat-icon>file_export</mat-icon>\n <span>{{ 'export' | translate }}</span>\n <mat-icon class=\"arrow-icon\">keyboard_arrow_down</mat-icon>\n </div>\n </button>\n\n <mat-menu #exportMenu=\"matMenu\">\n <button mat-menu-item (click)=\"extractReport('pdf')\">PDF</button>\n <button mat-menu-item (click)=\"extractReport('xlsx')\">Excel</button>\n <button mat-menu-item (click)=\"extractReport('csv')\">CSV</button>\n </mat-menu>\n\n </div>\n </div>\n\n\n <div class=\"flex-row flex-100 baseTable__detailsColumn\">\n <div class=\"flex-100\">\n <div class=\"flex-row flex-100 mainTable\">\n <div\n class=\"table-container\"\n role=\"table\"\n [attr.aria-label]=\"\n pageInfo.labelsSection && !pageInfo.hideTitle\n ? (pageInfo.labelsSection + '.list_title' | translate)\n : null\n \">\n <div class=\"table-header\" [attr.data-sort]=\"sortState\" role=\"row\">\n <div *ngFor=\"let columnProp of visibleColumnsArray; let i = index\"\n class=\"table-header-cell\"\n role=\"columnheader\"\n [attr.aria-sort]=\"getColumnAriaSort(columnProp)\"\n [attr.tabindex]=\"getColumn(columnProp)?.enableSorting ? 0 : null\"\n [class.sortable]=\"getColumn(columnProp)?.enableSorting\"\n [class.first-cell]=\"i === 0\"\n [class.last-cell]=\"i === visibleColumnsArray.length - 1\"\n [class.actions-cell]=\"i === visibleColumnsArray.length - 1 && columnProp === 'actions'\"\n [class.has-width]=\"getColumn(columnProp)?.width\"\n [ngStyle]=\"getColumn(columnProp)?.width ? {'width': getColumn(columnProp)?.width + '%', 'flex-basis': getColumn(columnProp)?.width + '%'} : {}\"\n (click)=\"getColumn(columnProp)?.enableSorting && handleSortClick(columnProp)\"\n (keydown)=\"onSortHeaderKeydown($event, columnProp)\">\n <div class=\"table-header-content\">\n <span class=\"table-header-label\">{{ labelKey(getColumn(columnProp)) | translate }}</span>\n <ng-container *ngIf=\"getColumn(columnProp)?.enableSorting\">\n <mat-icon *ngIf=\"getSortDirection(columnProp) === 'asc'\"\n class=\"sort-icon sort-asc\">arrow_drop_up</mat-icon>\n <mat-icon *ngIf=\"getSortDirection(columnProp) === 'desc'\"\n class=\"sort-icon sort-desc\">arrow_drop_down</mat-icon>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div class=\"table-body\" role=\"rowgroup\">\n <div *ngFor=\"let row of dataSource.data; let rowIndex = index\"\n class=\"table-row\"\n role=\"row\"\n [attr.tabindex]=\"-1\"\n [attr.id]=\"'table-row-' + (row?.id || row?.key || '')\"\n [ngClass]=\"{\n 'table-row--highlight': selectedRowIndex == row.id || (pageInfo.groupByProperty && pageInfo.groupByValue?.includes(row[pageInfo.groupByProperty])),\n 'table-row--dark-highlight': isDarkHighlight(row)\n }\"\n (auxclick)=\"openNewTab(row)\"\n (click)=\"$event.stopPropagation(); onSelectItem(row)\">\n <div *ngFor=\"let columnProp of visibleColumnsArray; let i = index\"\n class=\"table-cell\"\n role=\"cell\"\n [class.first-cell]=\"i === 0\"\n [class.last-cell]=\"i === visibleColumnsArray.length - 1\"\n [class.actions-cell]=\"i === visibleColumnsArray.length - 1 && columnProp === 'actions'\"\n [class.has-width]=\"getColumn(columnProp)?.width\"\n [ngStyle]=\"getColumn(columnProp)?.width ? {'width': getColumn(columnProp)?.width + '%', 'flex-basis': getColumn(columnProp)?.width + '%'} : {}\">\n <ng-container [ngSwitch]=\"getColumn(columnProp)?.type\">\n <ng-container *ngSwitchCase=\"'workflowStatus'\">\n <button mat-button type=\"button\" class=\"wfStatus {{ getStatusDescription(row)}}\" [attr.id]=\"'table-btn-wf-'+columnProp+'-'+(row.id || row.key || '')\" [attr.tabindex]=\"-1\">{{ getStatusDescription(row) }}</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'hyper-text'\">\n <span\n *ngIf=\"shouldRenderAsHyperLink(row); else plainHyperText\"\n class=\"mat-mdc-form-field-label hyper-link\"\n [attr.tabindex]=\"-1\"\n (click)=\"hyperLinkClicked(columnProp, row)\">\n {{ extractFieldName(row, columnProp) }}\n </span>\n <ng-template #plainHyperText>\n <span class=\"mat-mdc-form-field-label\">{{ extractFieldName(row, columnProp) }}</span>\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'button'\">\n <button *ngIf=\"shouldShowButton(row)\" mat-button type=\"button\" class=\"primary\" (click)=\"$event.stopPropagation(); actionButtonClicked(columnProp, row)\" [attr.id]=\"'table-btn-action-'+columnProp\">\n {{ labelKey(getColumn(columnProp)) + '_title' | translate }}\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon [ngClass]=\"{\n 'mainTable__td__icon-green': row[columnProp] === 'pass',\n 'mainTable__td__icon-orange': row[columnProp] === 'warning',\n 'mainTable__td__icon-red': row[columnProp] === 'error'\n }\"\n [attr.aria-label]=\"getIconAriaLabelKey(row[columnProp]) | translate\">\n {{ getIcon(row[columnProp]) }}\n </mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <mat-checkbox class=\"primary\" [tabIndex]=\"-1\" [checked]=\"row[columnProp]\" (click)=\"$event.stopPropagation();actionCheckedClicked(columnProp,row)\"></mat-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'stateType'\">\n <button mat-button type=\"button\" class=\"stateType {{ row[columnProp]}}\" [attr.id]=\"'table-btn-state-'+columnProp\" [attr.tabindex]=\"-1\">{{ labelKeyByValue(getColumn(columnProp), row) | translate}}</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{ extractFieldName(row, columnProp) | date:'dd/MM/yyyy':'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'croppedText'\">\n {{ getCroppedText(extractFieldName(row, columnProp), row[getColumn(columnProp)?.width]) }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'download'\">\n <mat-icon class=\"mainTable__td__icon-blue\"\n [attr.aria-label]=\"'BASE_TABLE.downloadAction' | translate\">system_update_alt</mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'onOff'\">\n <mat-icon *ngIf=\"row[columnProp] === null\" class=\"mainTable__td__icon-darkorange\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(null) | translate\">flag</mat-icon>\n <mat-icon *ngIf=\"row[columnProp] === false\" class=\"mainTable__td__icon-red\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(false) | translate\">flag</mat-icon>\n <mat-icon *ngIf=\"row[columnProp] === true\" class=\"mainTable__td__icon-green\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(true) | translate\">flag</mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'status'\">\n <span *ngIf=\"row[columnProp] === null || row[columnProp] === false\">\n {{ pageInfo.labelsSection + '.' + getColumn(columnProp)?.label + 'InActive' | translate }}\n </span>\n <span *ngIf=\"row[columnProp] === true\">\n {{ pageInfo.labelsSection + '.' + getColumn(columnProp)?.label + 'Active' | translate }}\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'info'\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.tabindex]=\"-1\"\n [attr.aria-label]=\"'BASE_TABLE.rowDetails' | translate\"\n (click)=\"$event.stopPropagation();emitEvent(row)\"\n [attr.id]=\"'table-btn-info-'+row.id\">\n <mat-icon aria-hidden=\"true\">info</mat-icon>\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'netAmount'\">\n <div class=\"mainTable__td__currency\" style=\"display:inline-block;\">{{ row[getColumn(columnProp)?.currency] }}</div>\n <span class=\"mainTable__td__property\" style=\"display:inline-block; margin-left:6px; margin-right:6px;\">\n {{ extractFieldName(row, columnProp) | currency:'':'' }}</span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTime'\">\n {{ extractFieldName(row, columnProp) | date : extractFormat(getColumn(columnProp)):'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <small><sup class=\"mainTable__td__currency\">{{row[getColumn(columnProp)?.currency]}}</sup></small>\n {{ extractFieldName(row, columnProp) | number : (getColumn(columnProp)?.digitInfo || '1.3-5') }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'listAction'\">\n <app-button-actions\n [row]=\"row\"\n [buttonsAction]=\"getColumn(columnProp)?.viewType === 'buttonsAction'\"\n [listAction]=\"listAction\"\n [actions]=\"listAction\"\n (clickedButton)=\"actionListClicked($event,row)\">\n </app-button-actions>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ul class=\"mainTable__td__list\">\n <li *ngFor=\"let item of getListItems(row, columnProp)\">{{ item }}</li>\n </ul>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"getColumn(columnProp)?.translate; else noTranslate\">\n <span\n [attr.tabindex]=\"-1\"\n (click)=\"$event.stopPropagation(); emitRoutePage(row)\">\n {{ pageInfo.labelsSection + \".\" + extractFieldName(row, columnProp) | translate }}\n </span>\n </ng-container>\n <ng-template #noTranslate>\n <span\n [attr.tabindex]=\"-1\"\n (click)=\"$event.stopPropagation(); emitRoutePage(row)\"\n [innerText]='extractFieldName(row, columnProp)'></span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Mobile Card View -->\n <div class=\"mobile-cards-container\">\n <div *ngFor=\"let row of dataSource.data; let rowIndex = index\"\n class=\"mobile-card\"\n [attr.id]=\"'mobile-card-' + (row?.id || row?.key || '')\"\n [ngClass]=\"{\n 'mobile-card--highlight': selectedRowIndex == row.id || (pageInfo.groupByProperty && pageInfo.groupByValue?.includes(row[pageInfo.groupByProperty])),\n 'mobile-card--dark-highlight': isDarkHighlight(row)\n }\"\n (auxclick)=\"openNewTab(row)\"\n (click)=\"$event.stopPropagation(); onSelectItem(row)\">\n\n <!-- Mobile Card Header: ID/Name and Status -->\n <div class=\"mobile-card__header\">\n <div class=\"mobile-card__header-id\">\n <span class=\"mobile-card__id-text\">{{ extractFieldName(row, getMobileCardIdColumn()?.property || 'id') }}</span>\n </div>\n <div class=\"mobile-card__header-status\" *ngIf=\"getMobileCardStatusColumn()\">\n <button mat-button class=\"stateType {{ row[getMobileCardStatusColumn()?.property]}}\"\n [attr.id]=\"'mobile-btn-state-'+getMobileCardStatusColumn()?.property\">\n {{ labelKeyByValue(getMobileCardStatusColumn(), row) | translate}}\n </button>\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"mobile-card__divider\"></div>\n\n <!-- Mobile Card Body: Other columns -->\n <div class=\"mobile-card__body\">\n <div *ngFor=\"let column of getMobileCardColumns()\" class=\"mobile-card__row\">\n <div class=\"mobile-card__row-label\">\n <span>{{ labelKey(column) | translate }} :</span>\n </div>\n <div class=\"mobile-card__row-value\">\n <ng-container [ngSwitch]=\"column.type\">\n <ng-container *ngSwitchCase=\"'stateType'\">\n <button mat-button class=\"stateType {{ row[column.property]}}\"\n [attr.id]=\"'mobile-btn-state-'+column.property\">\n {{ labelKeyByValue(column, row) | translate}}\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{ extractFieldName(row, column.property) | date:'dd/MM/yyyy':'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'netAmount'\">\n <span class=\"mobile-card__amount-currency\">{{ row[column.currency] }}</span>\n <span class=\"mobile-card__amount-value\">{{ extractFieldName(row, column.property) | currency:'':'' }}</span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTime'\">\n {{ extractFieldName(row, column.property) | date : extractFormat(column):'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <small><sup class=\"mainTable__td__currency\">{{row[column.currency]}}</sup></small>\n {{ extractFieldName(row, column.property) | number : (column.digitInfo || '1.3-5') }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ul class=\"mainTable__td__list\">\n <li *ngFor=\"let item of getListItems(row, column.property)\">{{ item }}</li>\n </ul>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"column.translate; else noTranslate\">\n <span>{{ pageInfo.labelsSection + \".\" + extractFieldName(row, column.property) | translate }}</span>\n </ng-container>\n <ng-template #noTranslate>\n <span [innerText]='extractFieldName(row, column.property)'></span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Mobile Card Actions -->\n <div class=\"mobile-card__actions\" *ngIf=\"listAction && listAction.length > 0\">\n <app-button-actions\n [row]=\"row\"\n [buttonsAction]=\"true\"\n [listAction]=\"listAction\"\n [actions]=\"listAction\"\n (clickedButton)=\"actionListClicked($event,row)\">\n </app-button-actions>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noDataFound\" class=\"dataNotFound flex-column\">\n <img *ngIf=\"getDisplaySvgPath()\" [src]=\"getDisplaySvgPath()\" class=\"dataNotFound__icon\" alt=\"No data found\" />\n <span class=\"dataNotFound__title\">{{ getDisplayTitle() | translate}}</span>\n <span class=\"dataNotFound__subtitle\">{{ getDisplaySubtitle() | translate}}</span>\n </div>\n\n\n <div *ngIf=\"(dataSource.data?.length > 0 || customizedData) && !pageInfo.hidePagination\" class=\"main-pagination flex-row\">\n <ng-container *ngIf=\"enablePagination\">\n <div class=\"flex-column flex-100\">\n <app-paginator\n [currentPage]=\"pageIndex\"\n [totalItems]=\"totalElements\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"[5, 10, 25, 50]\"\n [mobileLoadMoreIncrement]=\"mobileLoadMoreIncrement\"\n [displayedItems]=\"mobileDisplayedItems || dataSource.data.length\"\n (pageChange)=\"onPageChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </app-paginator>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;width:100%;max-width:100%;box-sizing:border-box;container-type:inline-size;container-name:base-table}.baseTable{width:100%!important;max-width:100%!important;box-sizing:border-box}.flex-row{display:flex;flex-direction:row}.flex-column{display:flex;flex-direction:column;width:100%;max-width:100%;box-sizing:border-box}.flex-100{flex:1 1 100%}.flex-49{flex:0 0 49%}.flex-50{flex:0 0 50%}.align-start{justify-content:flex-start;align-items:flex-start}.align-center{justify-content:center;align-items:center}.align-end{justify-content:flex-end;align-items:flex-end}.gap-0{gap:0}.gap-5{gap:5px}.gap-10{gap:10px}.dataNotFound{display:flex;flex-direction:column;justify-content:center;align-items:center;height:auto;min-height:280px;text-align:center;margin-top:0;padding:40px 0}.dataNotFound__icon{height:auto;width:auto;max-width:200px;max-height:200px;margin-bottom:8px;object-fit:contain}.dataNotFound__title{color:#6a6a6a;font-size:20px;font-weight:700;margin-bottom:4px}.dataNotFound__subtitle{color:#6a6a6a;font-size:20px;font-weight:400}@media (max-width: 960px){.flex-column-sm{flex-direction:column}.align-center-sm{justify-content:center;align-items:flex-start}}.filter-row{display:flex!important;flex-direction:row!important;align-items:center!important;width:100%!important;max-width:100%!important;gap:16px!important;box-sizing:border-box;margin-top:20px;margin-bottom:16px;padding:0;flex-wrap:nowrap!important;min-width:0!important;min-height:48px!important;overflow:visible!important}.filter-row app-filter-builder{flex:1 1 auto!important;min-width:0!important;max-width:none!important;width:auto!important;flex-shrink:1!important;display:flex!important;align-items:center!important;overflow:visible!important}@container base-table (min-width: 769px) and (max-width: 900px){.filter-row{align-items:flex-start!important}:host ::ng-deep app-filter-builder .main-filter-builder .filterForm__row{align-items:flex-start!important}}.button-group{display:flex!important;flex-direction:row!important;align-items:center!important;justify-content:flex-end;gap:8px!important;flex-shrink:0!important;flex-grow:0!important;flex-basis:auto!important;height:46px!important;white-space:nowrap!important;z-index:1!important}.mainTable{margin-top:0!important}.btn-apply-filter{background:#fff!important;border:1px solid #3e627b!important;border-radius:8px!important;height:46px!important;min-width:120px!important;padding:0 16px!important;box-shadow:none!important}.btn-apply-filter .button-text{display:flex;align-items:center;justify-content:center;gap:4px;width:100%}.btn-apply-filter mat-icon{font-size:24px;width:24px;height:30px;color:#0d4261}.btn-apply-filter span{font-family:Lusail,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#0d4261;white-space:nowrap}.btn-apply-filter:hover{background:#fafafa!important}.btn-export{background:#fff!important;border:1px solid #0d4261!important;border-radius:8px!important;height:46px!important;min-width:109px!important;padding:0 16px!important;box-shadow:none!important;margin-bottom:7px!important}.btn-export .button-text{display:flex;align-items:center;justify-content:center;gap:4px;width:100%}.btn-export mat-icon{font-size:24px;width:24px;height:30px;color:#0d4261}.btn-export .arrow-icon{font-size:16px;width:16px;height:16px;margin-left:0}.btn-export span{font-family:Lusail,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#0d4261;white-space:nowrap}.btn-export:hover:not(:disabled){background:#fafafa!important}.btn-export:disabled,.btn-export.mat-mdc-button-disabled{opacity:.45;cursor:not-allowed;pointer-events:none}@container base-table (min-width: 769px) and (max-width: 900px){.filter-row .btn-export{margin-bottom:0!important}}.arrow-icon{font-size:16px;width:16px;height:16px}@media (max-width: 1024px){.button-group{width:auto}}@media (max-width: 768px){.filter-row{flex-direction:column;align-items:stretch}.button-group{display:none!important}.btn-export{width:100%}}.table-container{width:100%;overflow:hidden;background:#f7f7f7;box-sizing:border-box;display:flex;flex-direction:column}.table-header{display:flex;align-items:center;background:#f7f7f7;border:1px solid #f0eeee;max-height:48px;height:48px;margin-bottom:16px;border-radius:8px;overflow:hidden;width:100%;box-sizing:border-box;min-width:0}.table-header-cell{display:flex;align-items:center;max-height:48px;height:48px;padding:8px 16px;flex:1;min-width:100px;position:sticky;top:0;background:none;z-index:10;box-sizing:border-box}.table-header-cell.has-width{flex:0 0 auto!important;min-width:0!important;max-width:none!important}.table-header-cell:last-child{border-right:none}.table-header-cell.first-cell{border-top-left-radius:8px;border-bottom-left-radius:8px}.table-header-cell.last-cell{border-top-right-radius:8px;border-bottom-right-radius:8px}.table-header-cell.actions-cell{justify-content:center;text-align:center}.table-header-cell.actions-cell .table-header-content{justify-content:center}.table-header-cell.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.table-header-cell.sortable:hover{background:#fafafa}.table-header-content{display:flex;align-items:center;gap:8px;width:100%}.table-header-label{font-family:Lusail,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#0d4261;white-space:nowrap}.sort-icon{font-size:18px;width:18px;height:18px;color:#5c5c5c;display:flex;align-items:center;justify-content:center;transition:color .2s}.sort-icon.sort-asc,.sort-icon.sort-desc{color:#0d4261}.table-body{display:flex;flex-direction:column;gap:8px;background:#f7f7f7}.table-row{display:flex;align-items:center;min-height:48px;background:#fff;border-bottom:1px solid #f0eeee;transition:background-color .2s;border-radius:8px;overflow:hidden;width:100%;box-sizing:border-box;min-width:0}.table-row:hover{background:#fafafa}.table-row--highlight{background:#f0f8ff}.table-row--dark-highlight{background:#e8f4f8}.table-row .table-cell.first-cell{border-top-left-radius:8px;border-bottom-left-radius:8px}.table-row .table-cell.last-cell{border-top-right-radius:8px;border-bottom-right-radius:8px}:host-context([dir=rtl]) .table-row,:host-context(body.rtl) .table-row{overflow:visible;align-items:center}:host-context([dir=rtl]) .table-cell:not(.actions-cell),:host-context(body.rtl) .table-cell:not(.actions-cell){overflow:visible;align-items:center;line-height:1.7;padding-top:10px;padding-bottom:10px}:host-context([dir=rtl]) .table-cell:not(.actions-cell) span,:host-context(body.rtl) .table-cell:not(.actions-cell) span{display:inline;overflow:visible;line-height:1.7;-webkit-line-clamp:unset;line-clamp:unset}.table-cell{display:flex;align-items:center;min-height:48px;max-height:none;padding:8px 16px;flex:1;min-width:100px;font-family:Lusail,sans-serif;font-weight:400;font-size:16px;line-height:1.2;color:#000;box-sizing:border-box}.table-cell.has-width{flex:0 0 auto!important;min-width:0!important;max-width:none!important}.table-cell:last-child{border-right:none}.table-cell.actions-cell{justify-content:center;text-align:center}.mobile-cards-container{display:none;flex-direction:column;gap:12px;width:100%;box-sizing:border-box}.mobile-card{background:#fff;border:1px solid #f0eeee;border-radius:8px;padding:12px 20px;display:flex;flex-direction:column;gap:4px;cursor:pointer;transition:background-color .2s;box-sizing:border-box;width:100%}.mobile-card:hover{background:#fafafa}.mobile-card--highlight{background:#f0f8ff}.mobile-card--dark-highlight{background:#e8f4f8}.mobile-card__header{display:flex;align-items:center;justify-content:space-between;height:48px;width:100%;box-sizing:border-box}.mobile-card__header-id{display:flex;flex-direction:column;justify-content:center;flex:1}.mobile-card__id-text{font-family:Lusail,sans-serif;font-weight:700;font-size:14px;line-height:1.2;color:#222;text-align:left;white-space:nowrap}.mobile-card__header-status{display:flex;align-items:center;justify-content:flex-end;flex-shrink:0}.mobile-card__divider{height:.347px;width:100%;background:#f0eeee;margin:0;flex-shrink:0}.mobile-card__body{display:flex;flex-direction:column;gap:0;width:100%;box-sizing:border-box}.mobile-card__row{display:flex;align-items:center;justify-content:space-between;height:40px;width:100%;overflow:hidden;box-sizing:border-box}.mobile-card__row-label{display:flex;flex-direction:column;justify-content:center;flex-shrink:0}.mobile-card__row-label span{font-family:Lusail,sans-serif;font-weight:400;font-size:14px;line-height:1.2;color:#222;white-space:nowrap}.mobile-card__row-value{display:flex;flex-direction:column;justify-content:center;flex-shrink:0;text-align:right}.mobile-card__row-value span{font-family:Lusail,sans-serif;font-weight:400;font-size:14px;line-height:1.2;color:#222;white-space:nowrap}.mobile-card__amount-currency{font-family:Lusail,sans-serif;font-weight:400;font-size:14px;line-height:1.2;color:#222;display:inline-block}.mobile-card__amount-value{font-family:Lusail,sans-serif;font-weight:700;font-size:14px;line-height:1.2;color:#222;display:inline-block;margin-left:6px;margin-right:6px}.mobile-card__actions{border-top:1px solid #f0eeee;padding-top:8px;margin-top:4px;display:flex;align-items:center;justify-content:center;min-height:48px;max-height:48px;width:100%;box-sizing:border-box}@media (max-width: 768px){.table-container{display:none}.mobile-cards-container{display:flex}}@media (min-width: 769px){.mobile-cards-container{display:none}.table-container{display:flex}}:host ::ng-deep button.mat-mdc-button.stateType,:host ::ng-deep button.mdc-button.stateType{white-space:normal!important;height:auto!important;min-height:28px!important;max-width:100%!important;align-items:center!important;justify-content:center!important;cursor:default!important}:host ::ng-deep button.mat-mdc-button.stateType .mdc-button__label,:host ::ng-deep button.mdc-button.stateType .mdc-button__label{white-space:normal!important;display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:2!important;line-clamp:2!important;overflow:hidden!important;word-break:break-word!important;line-height:1.25!important;max-width:100%!important;text-align:center!important}@media (max-width: 450px){.mobile-card__header{flex-direction:column;justify-content:flex-start;height:auto;width:100%;box-sizing:border-box;gap:8px}}.mainTable__td__list{margin:4px 0;padding:4px 8px 4px 1.25rem;list-style-type:disc}.mainTable__td__list li{word-break:break-word;line-height:1.35;padding:2px 0}.mainTable__td__list li+li{margin-top:2px}.table-cell:has(.mainTable__td__list){align-items:flex-start;padding-top:8px;padding-bottom:8px}.mobile-card__row-value:has(.mainTable__td__list){align-items:flex-start;padding:4px 0}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "ngmodule", type: NgxPaginationModule }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ButtonActionsComponent, selector: "app-button-actions", inputs: ["actions", "disabled", "buttonsAction", "listAction", "row"], outputs: ["clickedButton"] }, { kind: "component", type: TitleBarComponent, selector: "app-title-bar", inputs: ["pageTitle", "showExtractButton", "totalElements", "titleMode", "pageInfo", "subTitle", "statusDesc", "newAction", "extraButton", "showDetails", "showImport", "showButton", "extraData", "titleCorporateAdmin", "hideBackButton", "buttons", "buttonsDisplayMode", "draftSupported", "isPending", "onViewModeChange"], outputs: ["newActionClicked", "extraButtonClicked", "extractReport", "buttonClicked", "viewModeChanged"] }, { kind: "component", type: PaginatorComponent, selector: "app-paginator", inputs: ["currentPage", "totalItems", "pageSize", "pageSizeOptions", "mobileLoadMoreIncrement", "displayedItems"], outputs: ["pageChange", "pageSizeChange", "loadMore"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: FilterBuilderComponent, selector: "app-filter-builder", inputs: ["columns", "isChecked", "filterFields", "pageInfo", "pendingFilters", "showExportButton", "exportDisabled"], outputs: ["filterInformation", "isEmpty", "applyFilter", "sortByClicked", "exportClicked"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }], animations: [] }); }
|
|
4152
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BaseTableComponent, isStandalone: true, selector: "app-base-table", inputs: { filterFields: "filterFields", noDataFoundSvgPath: "noDataFoundSvgPath", noDataFoundTitle: "noDataFoundTitle", noDataFoundSubtitle: "noDataFoundSubtitle", noResultSvgPath: "noResultSvgPath", noResultTitle: "noResultTitle", noResultSubtitle: "noResultSubtitle", pageInfo: "pageInfo", enablePagination: "enablePagination", mobilePageSize: "mobilePageSize", mobileLoadMoreIncrement: "mobileLoadMoreIncrement", data: "data", listAction: "listAction", extraActions: "extraActions", buttonsDisplayMode: "buttonsDisplayMode", columns: "columns", filters: "filters", pathParam: "pathParam", extraButton: "extraButton", enforceRefresh: "enforceRefresh", isPending: "isPending", trigger: "trigger", reportRequest: "reportRequest", separateEndpointData: "separateEndpointData", manageablePages: "manageablePages", totalPagesCount: "totalPagesCount", currentPageIndex: "currentPageIndex", customizedData: "customizedData" }, outputs: { buttonClicked: "buttonClicked", pageChange: "pageChange", userAction: "userAction", hyperLinkAction: "hyperLinkAction", extraAction: "extraAction", selectedColumn: "selectedColumn", listActionClicked: "listActionClicked", pendingViewModeChanged: "pendingViewModeChanged", filtersApplied: "filtersApplied", showDialog: "showDialog", clickRoutePage: "clickRoutePage" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"flex-column baseTable\">\n <div class=\"flex-row flex-100\" >\n <div class=\"flex-column align-start flex-100\" style=\"width: 100%;\">\n <app-title-bar\n [pageTitle]=\"pageInfo.hideTitle ? '' : pageInfo.labelsSection+'.list_title'\"\n [subTitle]=\"(pageInfo.hideTitle || pageInfo.hideSubtitle) ? '' : pageInfo.labelsSection+'.subtitle'\"\n [titleMode]=\"''\"\n [pageInfo]=\"pageInfo\"\n [newAction]=\"showAddNew()\"\n [showExtractButton]=\"!pageInfo.hideExtractButton\"\n [draftSupported]=\"pageInfo.draftSupported\"\n [isPending]=\"isPending\"\n [onViewModeChange]=\"switchViewMode.bind(this)\"\n [buttons]=\"extraActions\"\n [buttonsDisplayMode]=\"buttonsDisplayMode\"\n (newActionClicked)=\"onAddNewAction($event)\"\n (extractReport)=\"extractReport($event)\"\n (viewModeChanged)=\"onViewModeChangedReceived($event)\"\n (buttonClicked)=\"buttonClicked.emit($event)\"\n [totalElements]=\"pageInfo.hideTitle ? undefined : totalElements\">\n </app-title-bar>\n </div>\n </div>\n\n <div class=\"filter-row\" *ngIf=\"!pageInfo.hideAdvancedFilter\">\n <app-filter-builder\n *ngIf=\"!pageInfo.hideAdvancedFilter\"\n [pageInfo]=\"pageInfo\"\n [columns]=\"columns\"\n [filterFields]=\"filterFields\"\n [pendingFilters]=\"pendingFilters\"\n [showExportButton]=\"!pageInfo.hideExtractButton\"\n [exportDisabled]=\"noDataFound || !dataSource?.data?.length\"\n (filterInformation)=\"storePendingFilters($event)\"\n (isEmpty)=\"handleFilterEmpty($event)\"\n (applyFilter)=\"applyPendingFilters()\"\n (sortByClicked)=\"handleSortClick($event)\"\n (exportClicked)=\"extractReport($event)\">\n </app-filter-builder>\n\n <div class=\"button-group\" *ngIf=\"!pageInfo.hideExtractButton\">\n <button *ngIf=\"!pageInfo.hideExtractButton\"\n mat-flat-button\n type=\"button\"\n [matMenuTriggerFor]=\"exportMenu\"\n class=\"btn-export\"\n [disabled]=\"noDataFound || !dataSource?.data?.length\"\n [attr.aria-label]=\"'export' | translate\"\n [attr.aria-haspopup]=\"true\"\n >\n <div class=\"button-text\">\n <mat-icon>file_export</mat-icon>\n <span>{{ 'export' | translate }}</span>\n <mat-icon class=\"arrow-icon\">keyboard_arrow_down</mat-icon>\n </div>\n </button>\n\n <mat-menu #exportMenu=\"matMenu\">\n <button mat-menu-item (click)=\"extractReport('pdf')\">PDF</button>\n <button mat-menu-item (click)=\"extractReport('xlsx')\">Excel</button>\n <button mat-menu-item (click)=\"extractReport('csv')\">CSV</button>\n </mat-menu>\n\n </div>\n </div>\n\n\n <div class=\"flex-row flex-100 baseTable__detailsColumn\">\n <div class=\"flex-100\">\n <div class=\"flex-row flex-100 mainTable\">\n <div\n class=\"table-container\"\n role=\"table\"\n [attr.aria-label]=\"\n pageInfo.labelsSection && !pageInfo.hideTitle\n ? (pageInfo.labelsSection + '.list_title' | translate)\n : null\n \">\n <div class=\"table-header\" [attr.data-sort]=\"sortState\" role=\"row\">\n <div *ngFor=\"let columnProp of visibleColumnsArray; let i = index\"\n class=\"table-header-cell\"\n role=\"columnheader\"\n [attr.aria-sort]=\"getColumnAriaSort(columnProp)\"\n [attr.tabindex]=\"getColumn(columnProp)?.enableSorting ? 0 : null\"\n [class.sortable]=\"getColumn(columnProp)?.enableSorting\"\n [class.first-cell]=\"i === 0\"\n [class.last-cell]=\"i === visibleColumnsArray.length - 1\"\n [class.actions-cell]=\"i === visibleColumnsArray.length - 1 && columnProp === 'actions'\"\n [class.has-width]=\"getColumn(columnProp)?.width\"\n [ngStyle]=\"getColumn(columnProp)?.width ? {'width': getColumn(columnProp)?.width + '%', 'flex-basis': getColumn(columnProp)?.width + '%'} : {}\"\n (click)=\"getColumn(columnProp)?.enableSorting && handleSortClick(columnProp)\"\n (keydown)=\"onSortHeaderKeydown($event, columnProp)\">\n <div class=\"table-header-content\">\n <span class=\"table-header-label\">{{ labelKey(getColumn(columnProp)) | translate }}</span>\n <ng-container *ngIf=\"getColumn(columnProp)?.enableSorting\">\n <mat-icon *ngIf=\"getSortDirection(columnProp) === 'asc'\"\n class=\"sort-icon sort-asc\">arrow_drop_up</mat-icon>\n <mat-icon *ngIf=\"getSortDirection(columnProp) === 'desc'\"\n class=\"sort-icon sort-desc\">arrow_drop_down</mat-icon>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div class=\"table-body\" role=\"rowgroup\">\n <div *ngFor=\"let row of dataSource.data; let rowIndex = index\"\n class=\"table-row\"\n role=\"row\"\n [attr.tabindex]=\"-1\"\n [attr.id]=\"'table-row-' + (row?.id || row?.key || '')\"\n [ngClass]=\"{\n 'table-row--highlight': selectedRowIndex == row.id || (pageInfo.groupByProperty && pageInfo.groupByValue?.includes(row[pageInfo.groupByProperty])),\n 'table-row--dark-highlight': isDarkHighlight(row)\n }\"\n (auxclick)=\"openNewTab(row)\"\n (click)=\"$event.stopPropagation(); onSelectItem(row)\">\n <div *ngFor=\"let columnProp of visibleColumnsArray; let i = index\"\n class=\"table-cell\"\n role=\"cell\"\n [class.first-cell]=\"i === 0\"\n [class.last-cell]=\"i === visibleColumnsArray.length - 1\"\n [class.actions-cell]=\"i === visibleColumnsArray.length - 1 && columnProp === 'actions'\"\n [class.has-width]=\"getColumn(columnProp)?.width\"\n [ngStyle]=\"getColumn(columnProp)?.width ? {'width': getColumn(columnProp)?.width + '%', 'flex-basis': getColumn(columnProp)?.width + '%'} : {}\">\n <ng-container [ngSwitch]=\"getColumn(columnProp)?.type\">\n <ng-container *ngSwitchCase=\"'workflowStatus'\">\n <button mat-button type=\"button\" class=\"wfStatus {{ getStatusDescription(row)}}\" [attr.id]=\"'table-btn-wf-'+columnProp+'-'+(row.id || row.key || '')\" [attr.tabindex]=\"-1\">{{ getStatusDescription(row) }}</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'hyper-text'\">\n <span\n *ngIf=\"shouldRenderAsHyperLink(row); else plainHyperText\"\n class=\"mat-mdc-form-field-label hyper-link\"\n [attr.tabindex]=\"-1\"\n (click)=\"hyperLinkClicked(columnProp, row)\">\n {{ extractFieldName(row, columnProp) }}\n </span>\n <ng-template #plainHyperText>\n <span class=\"mat-mdc-form-field-label\">{{ extractFieldName(row, columnProp) }}</span>\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'button'\">\n <button *ngIf=\"shouldShowButton(row)\" mat-button type=\"button\" class=\"primary\" (click)=\"$event.stopPropagation(); actionButtonClicked(columnProp, row)\" [attr.id]=\"'table-btn-action-'+columnProp\">\n {{ labelKey(getColumn(columnProp)) + '_title' | translate }}\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon [ngClass]=\"{\n 'mainTable__td__icon-green': row[columnProp] === 'pass',\n 'mainTable__td__icon-orange': row[columnProp] === 'warning',\n 'mainTable__td__icon-red': row[columnProp] === 'error'\n }\"\n [attr.aria-label]=\"getIconAriaLabelKey(row[columnProp]) | translate\">\n {{ getIcon(row[columnProp]) }}\n </mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <mat-checkbox class=\"primary\" [tabIndex]=\"-1\" [checked]=\"row[columnProp]\" (click)=\"$event.stopPropagation();actionCheckedClicked(columnProp,row)\"></mat-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'stateType'\">\n <button mat-button type=\"button\" class=\"stateType {{ row[columnProp]}}\" [attr.id]=\"'table-btn-state-'+columnProp\" [attr.tabindex]=\"-1\">{{ labelKeyByValue(getColumn(columnProp), row) | translate}}</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{ extractFieldName(row, columnProp) | date:'dd/MM/yyyy':'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'croppedText'\">\n {{ getCroppedText(extractFieldName(row, columnProp), row[getColumn(columnProp)?.width]) }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'download'\">\n <mat-icon class=\"mainTable__td__icon-blue\"\n [attr.aria-label]=\"'BASE_TABLE.downloadAction' | translate\">system_update_alt</mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'onOff'\">\n <mat-icon *ngIf=\"row[columnProp] === null\" class=\"mainTable__td__icon-darkorange\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(null) | translate\">flag</mat-icon>\n <mat-icon *ngIf=\"row[columnProp] === false\" class=\"mainTable__td__icon-red\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(false) | translate\">flag</mat-icon>\n <mat-icon *ngIf=\"row[columnProp] === true\" class=\"mainTable__td__icon-green\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(true) | translate\">flag</mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'status'\">\n <span *ngIf=\"row[columnProp] === null || row[columnProp] === false\">\n {{ pageInfo.labelsSection + '.' + getColumn(columnProp)?.label + 'InActive' | translate }}\n </span>\n <span *ngIf=\"row[columnProp] === true\">\n {{ pageInfo.labelsSection + '.' + getColumn(columnProp)?.label + 'Active' | translate }}\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'info'\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.tabindex]=\"-1\"\n [attr.aria-label]=\"'BASE_TABLE.rowDetails' | translate\"\n (click)=\"$event.stopPropagation();emitEvent(row)\"\n [attr.id]=\"'table-btn-info-'+row.id\">\n <mat-icon aria-hidden=\"true\">info</mat-icon>\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'netAmount'\">\n <div class=\"mainTable__td__currency\" style=\"display:inline-block;\">{{ row[getColumn(columnProp)?.currency] }}</div>\n <span class=\"mainTable__td__property\" style=\"display:inline-block; margin-left:6px; margin-right:6px;\">\n {{ extractFieldName(row, columnProp) | currency:'':'' }}</span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTime'\">\n {{ extractFieldName(row, columnProp) | date : extractFormat(getColumn(columnProp)):'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTimeExact'\">\n {{ extractFieldName(row, columnProp) | date:'d/M/yyyy, h:mm a' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <small><sup class=\"mainTable__td__currency\">{{row[getColumn(columnProp)?.currency]}}</sup></small>\n {{ extractFieldName(row, columnProp) | number : (getColumn(columnProp)?.digitInfo || '1.3-5') }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'listAction'\">\n <app-button-actions\n [row]=\"row\"\n [buttonsAction]=\"getColumn(columnProp)?.viewType === 'buttonsAction'\"\n [listAction]=\"listAction\"\n [actions]=\"listAction\"\n (clickedButton)=\"actionListClicked($event,row)\">\n </app-button-actions>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ul class=\"mainTable__td__list\">\n <li *ngFor=\"let item of getListItems(row, columnProp)\">{{ item }}</li>\n </ul>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"getColumn(columnProp)?.translate; else noTranslate\">\n <span\n [attr.tabindex]=\"-1\"\n (click)=\"$event.stopPropagation(); emitRoutePage(row)\">\n {{ pageInfo.labelsSection + \".\" + extractFieldName(row, columnProp) | translate }}\n </span>\n </ng-container>\n <ng-template #noTranslate>\n <span\n [attr.tabindex]=\"-1\"\n (click)=\"$event.stopPropagation(); emitRoutePage(row)\"\n [innerText]='extractFieldName(row, columnProp)'></span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Mobile Card View -->\n <div class=\"mobile-cards-container\">\n <div *ngFor=\"let row of dataSource.data; let rowIndex = index\"\n class=\"mobile-card\"\n [attr.id]=\"'mobile-card-' + (row?.id || row?.key || '')\"\n [ngClass]=\"{\n 'mobile-card--highlight': selectedRowIndex == row.id || (pageInfo.groupByProperty && pageInfo.groupByValue?.includes(row[pageInfo.groupByProperty])),\n 'mobile-card--dark-highlight': isDarkHighlight(row)\n }\"\n (auxclick)=\"openNewTab(row)\"\n (click)=\"$event.stopPropagation(); onSelectItem(row)\">\n\n <!-- Mobile Card Header: ID/Name and Status -->\n <div class=\"mobile-card__header\">\n <div class=\"mobile-card__header-id\">\n <span class=\"mobile-card__id-text\">{{ extractFieldName(row, getMobileCardIdColumn()?.property || 'id') }}</span>\n </div>\n <div class=\"mobile-card__header-status\" *ngIf=\"getMobileCardStatusColumn()\">\n <button mat-button class=\"stateType {{ row[getMobileCardStatusColumn()?.property]}}\"\n [attr.id]=\"'mobile-btn-state-'+getMobileCardStatusColumn()?.property\">\n {{ labelKeyByValue(getMobileCardStatusColumn(), row) | translate}}\n </button>\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"mobile-card__divider\"></div>\n\n <!-- Mobile Card Body: Other columns -->\n <div class=\"mobile-card__body\">\n <div *ngFor=\"let column of getMobileCardColumns()\" class=\"mobile-card__row\">\n <div class=\"mobile-card__row-label\">\n <span>{{ labelKey(column) | translate }} :</span>\n </div>\n <div class=\"mobile-card__row-value\">\n <ng-container [ngSwitch]=\"column.type\">\n <ng-container *ngSwitchCase=\"'stateType'\">\n <button mat-button class=\"stateType {{ row[column.property]}}\"\n [attr.id]=\"'mobile-btn-state-'+column.property\">\n {{ labelKeyByValue(column, row) | translate}}\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{ extractFieldName(row, column.property) | date:'dd/MM/yyyy':'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'netAmount'\">\n <span class=\"mobile-card__amount-currency\">{{ row[column.currency] }}</span>\n <span class=\"mobile-card__amount-value\">{{ extractFieldName(row, column.property) | currency:'':'' }}</span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTime'\">\n {{ extractFieldName(row, column.property) | date : extractFormat(column):'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <small><sup class=\"mainTable__td__currency\">{{row[column.currency]}}</sup></small>\n {{ extractFieldName(row, column.property) | number : (column.digitInfo || '1.3-5') }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ul class=\"mainTable__td__list\">\n <li *ngFor=\"let item of getListItems(row, column.property)\">{{ item }}</li>\n </ul>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"column.translate; else noTranslate\">\n <span>{{ pageInfo.labelsSection + \".\" + extractFieldName(row, column.property) | translate }}</span>\n </ng-container>\n <ng-template #noTranslate>\n <span [innerText]='extractFieldName(row, column.property)'></span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Mobile Card Actions -->\n <div class=\"mobile-card__actions\" *ngIf=\"listAction && listAction.length > 0\">\n <app-button-actions\n [row]=\"row\"\n [buttonsAction]=\"true\"\n [listAction]=\"listAction\"\n [actions]=\"listAction\"\n (clickedButton)=\"actionListClicked($event,row)\">\n </app-button-actions>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noDataFound\" class=\"dataNotFound flex-column\">\n <img *ngIf=\"getDisplaySvgPath()\" [src]=\"getDisplaySvgPath()\" class=\"dataNotFound__icon\" alt=\"No data found\" />\n <span class=\"dataNotFound__title\">{{ getDisplayTitle() | translate}}</span>\n <span class=\"dataNotFound__subtitle\">{{ getDisplaySubtitle() | translate}}</span>\n </div>\n\n\n <div *ngIf=\"(dataSource.data?.length > 0 || customizedData) && !pageInfo.hidePagination\" class=\"main-pagination flex-row\">\n <ng-container *ngIf=\"enablePagination\">\n <div class=\"flex-column flex-100\">\n <app-paginator\n [currentPage]=\"pageIndex\"\n [totalItems]=\"totalElements\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"[5, 10, 25, 50]\"\n [mobileLoadMoreIncrement]=\"mobileLoadMoreIncrement\"\n [displayedItems]=\"mobileDisplayedItems || dataSource.data.length\"\n (pageChange)=\"onPageChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </app-paginator>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;width:100%;max-width:100%;box-sizing:border-box;container-type:inline-size;container-name:base-table}.baseTable{width:100%!important;max-width:100%!important;box-sizing:border-box}.flex-row{display:flex;flex-direction:row}.flex-column{display:flex;flex-direction:column;width:100%;max-width:100%;box-sizing:border-box}.flex-100{flex:1 1 100%}.flex-49{flex:0 0 49%}.flex-50{flex:0 0 50%}.align-start{justify-content:flex-start;align-items:flex-start}.align-center{justify-content:center;align-items:center}.align-end{justify-content:flex-end;align-items:flex-end}.gap-0{gap:0}.gap-5{gap:5px}.gap-10{gap:10px}.dataNotFound{display:flex;flex-direction:column;justify-content:center;align-items:center;height:auto;min-height:280px;text-align:center;margin-top:0;padding:40px 0}.dataNotFound__icon{height:auto;width:auto;max-width:200px;max-height:200px;margin-bottom:8px;object-fit:contain}.dataNotFound__title{color:#6a6a6a;font-size:20px;font-weight:700;margin-bottom:4px}.dataNotFound__subtitle{color:#6a6a6a;font-size:20px;font-weight:400}@media (max-width: 960px){.flex-column-sm{flex-direction:column}.align-center-sm{justify-content:center;align-items:flex-start}}.filter-row{display:flex!important;flex-direction:row!important;align-items:center!important;width:100%!important;max-width:100%!important;gap:16px!important;box-sizing:border-box;margin-top:20px;margin-bottom:16px;padding:0;flex-wrap:nowrap!important;min-width:0!important;min-height:48px!important;overflow:visible!important}.filter-row app-filter-builder{flex:1 1 auto!important;min-width:0!important;max-width:none!important;width:auto!important;flex-shrink:1!important;display:flex!important;align-items:center!important;overflow:visible!important}@container base-table (min-width: 769px) and (max-width: 900px){.filter-row{align-items:flex-start!important}:host ::ng-deep app-filter-builder .main-filter-builder .filterForm__row{align-items:flex-start!important}}.button-group{display:flex!important;flex-direction:row!important;align-items:center!important;justify-content:flex-end;gap:8px!important;flex-shrink:0!important;flex-grow:0!important;flex-basis:auto!important;height:46px!important;white-space:nowrap!important;z-index:1!important}.mainTable{margin-top:0!important}.btn-apply-filter{background:#fff!important;border:1px solid #3e627b!important;border-radius:8px!important;height:46px!important;min-width:120px!important;padding:0 16px!important;box-shadow:none!important}.btn-apply-filter .button-text{display:flex;align-items:center;justify-content:center;gap:4px;width:100%}.btn-apply-filter mat-icon{font-size:24px;width:24px;height:30px;color:#0d4261}.btn-apply-filter span{font-family:Lusail,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#0d4261;white-space:nowrap}.btn-apply-filter:hover{background:#fafafa!important}.btn-export{background:#fff!important;border:1px solid #0d4261!important;border-radius:8px!important;height:46px!important;min-width:109px!important;padding:0 16px!important;box-shadow:none!important;margin-bottom:7px!important}.btn-export .button-text{display:flex;align-items:center;justify-content:center;gap:4px;width:100%}.btn-export mat-icon{font-size:24px;width:24px;height:30px;color:#0d4261}.btn-export .arrow-icon{font-size:16px;width:16px;height:16px;margin-left:0}.btn-export span{font-family:Lusail,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#0d4261;white-space:nowrap}.btn-export:hover:not(:disabled){background:#fafafa!important}.btn-export:disabled,.btn-export.mat-mdc-button-disabled{opacity:.45;cursor:not-allowed;pointer-events:none}@container base-table (min-width: 769px) and (max-width: 900px){.filter-row .btn-export{margin-bottom:0!important}}.arrow-icon{font-size:16px;width:16px;height:16px}@media (max-width: 1024px){.button-group{width:auto}}@media (max-width: 768px){.filter-row{flex-direction:column;align-items:stretch}.button-group{display:none!important}.btn-export{width:100%}}.table-container{width:100%;overflow:hidden;background:#f7f7f7;box-sizing:border-box;display:flex;flex-direction:column}.table-header{display:flex;align-items:center;background:#f7f7f7;border:1px solid #f0eeee;max-height:48px;height:48px;margin-bottom:16px;border-radius:8px;overflow:hidden;width:100%;box-sizing:border-box;min-width:0}.table-header-cell{display:flex;align-items:center;max-height:48px;height:48px;padding:8px 16px;flex:1;min-width:100px;position:sticky;top:0;background:none;z-index:10;box-sizing:border-box}.table-header-cell.has-width{flex:0 0 auto!important;min-width:0!important;max-width:none!important}.table-header-cell:last-child{border-right:none}.table-header-cell.first-cell{border-top-left-radius:8px;border-bottom-left-radius:8px}.table-header-cell.last-cell{border-top-right-radius:8px;border-bottom-right-radius:8px}.table-header-cell.actions-cell{justify-content:center;text-align:center}.table-header-cell.actions-cell .table-header-content{justify-content:center}.table-header-cell.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.table-header-cell.sortable:hover{background:#fafafa}.table-header-content{display:flex;align-items:center;gap:8px;width:100%}.table-header-label{font-family:Lusail,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#0d4261;white-space:nowrap}.sort-icon{font-size:18px;width:18px;height:18px;color:#5c5c5c;display:flex;align-items:center;justify-content:center;transition:color .2s}.sort-icon.sort-asc,.sort-icon.sort-desc{color:#0d4261}.table-body{display:flex;flex-direction:column;gap:8px;background:#f7f7f7}.table-row{display:flex;align-items:center;min-height:48px;background:#fff;border-bottom:1px solid #f0eeee;transition:background-color .2s;border-radius:8px;overflow:hidden;width:100%;box-sizing:border-box;min-width:0}.table-row:hover{background:#fafafa}.table-row--highlight{background:#f0f8ff}.table-row--dark-highlight{background:#e8f4f8}.table-row .table-cell.first-cell{border-top-left-radius:8px;border-bottom-left-radius:8px}.table-row .table-cell.last-cell{border-top-right-radius:8px;border-bottom-right-radius:8px}:host-context([dir=rtl]) .table-row,:host-context(body.rtl) .table-row{overflow:visible;align-items:center}:host-context([dir=rtl]) .table-cell:not(.actions-cell),:host-context(body.rtl) .table-cell:not(.actions-cell){overflow:visible;align-items:center;line-height:1.7;padding-top:10px;padding-bottom:10px}:host-context([dir=rtl]) .table-cell:not(.actions-cell) span,:host-context(body.rtl) .table-cell:not(.actions-cell) span{display:inline;overflow:visible;line-height:1.7;-webkit-line-clamp:unset;line-clamp:unset}.table-cell{display:flex;align-items:center;min-height:48px;max-height:none;padding:8px 16px;flex:1;min-width:100px;font-family:Lusail,sans-serif;font-weight:400;font-size:16px;line-height:1.2;color:#000;box-sizing:border-box}.table-cell.has-width{flex:0 0 auto!important;min-width:0!important;max-width:none!important}.table-cell:last-child{border-right:none}.table-cell.actions-cell{justify-content:center;text-align:center}.mobile-cards-container{display:none;flex-direction:column;gap:12px;width:100%;box-sizing:border-box}.mobile-card{background:#fff;border:1px solid #f0eeee;border-radius:8px;padding:12px 20px;display:flex;flex-direction:column;gap:4px;cursor:pointer;transition:background-color .2s;box-sizing:border-box;width:100%}.mobile-card:hover{background:#fafafa}.mobile-card--highlight{background:#f0f8ff}.mobile-card--dark-highlight{background:#e8f4f8}.mobile-card__header{display:flex;align-items:center;justify-content:space-between;height:48px;width:100%;box-sizing:border-box}.mobile-card__header-id{display:flex;flex-direction:column;justify-content:center;flex:1}.mobile-card__id-text{font-family:Lusail,sans-serif;font-weight:700;font-size:14px;line-height:1.2;color:#222;text-align:left;white-space:nowrap}.mobile-card__header-status{display:flex;align-items:center;justify-content:flex-end;flex-shrink:0}.mobile-card__divider{height:.347px;width:100%;background:#f0eeee;margin:0;flex-shrink:0}.mobile-card__body{display:flex;flex-direction:column;gap:0;width:100%;box-sizing:border-box}.mobile-card__row{display:flex;align-items:center;justify-content:space-between;height:40px;width:100%;overflow:hidden;box-sizing:border-box}.mobile-card__row-label{display:flex;flex-direction:column;justify-content:center;flex-shrink:0}.mobile-card__row-label span{font-family:Lusail,sans-serif;font-weight:400;font-size:14px;line-height:1.2;color:#222;white-space:nowrap}.mobile-card__row-value{display:flex;flex-direction:column;justify-content:center;flex-shrink:0;text-align:right}.mobile-card__row-value span{font-family:Lusail,sans-serif;font-weight:400;font-size:14px;line-height:1.2;color:#222;white-space:nowrap}.mobile-card__amount-currency{font-family:Lusail,sans-serif;font-weight:400;font-size:14px;line-height:1.2;color:#222;display:inline-block}.mobile-card__amount-value{font-family:Lusail,sans-serif;font-weight:700;font-size:14px;line-height:1.2;color:#222;display:inline-block;margin-left:6px;margin-right:6px}.mobile-card__actions{border-top:1px solid #f0eeee;padding-top:8px;margin-top:4px;display:flex;align-items:center;justify-content:center;min-height:48px;max-height:48px;width:100%;box-sizing:border-box}@media (max-width: 768px){.table-container{display:none}.mobile-cards-container{display:flex}}@media (min-width: 769px){.mobile-cards-container{display:none}.table-container{display:flex}}:host ::ng-deep button.mat-mdc-button.stateType,:host ::ng-deep button.mdc-button.stateType{white-space:normal!important;height:auto!important;min-height:28px!important;max-width:100%!important;align-items:center!important;justify-content:center!important;cursor:default!important}:host ::ng-deep button.mat-mdc-button.stateType .mdc-button__label,:host ::ng-deep button.mdc-button.stateType .mdc-button__label{white-space:normal!important;display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:2!important;line-clamp:2!important;overflow:hidden!important;word-break:break-word!important;line-height:1.25!important;max-width:100%!important;text-align:center!important}@media (max-width: 450px){.mobile-card__header{flex-direction:column;justify-content:flex-start;height:auto;width:100%;box-sizing:border-box;gap:8px}}.mainTable__td__list{margin:4px 0;padding:4px 8px 4px 1.25rem;list-style-type:disc}.mainTable__td__list li{word-break:break-word;line-height:1.35;padding:2px 0}.mainTable__td__list li+li{margin-top:2px}.table-cell:has(.mainTable__td__list){align-items:flex-start;padding-top:8px;padding-bottom:8px}.mobile-card__row-value:has(.mainTable__td__list){align-items:flex-start;padding:4px 0}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "ngmodule", type: NgxPaginationModule }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ButtonActionsComponent, selector: "app-button-actions", inputs: ["actions", "disabled", "buttonsAction", "listAction", "row"], outputs: ["clickedButton"] }, { kind: "component", type: TitleBarComponent, selector: "app-title-bar", inputs: ["pageTitle", "showExtractButton", "totalElements", "titleMode", "pageInfo", "subTitle", "statusDesc", "newAction", "extraButton", "showDetails", "showImport", "showButton", "extraData", "titleCorporateAdmin", "hideBackButton", "buttons", "buttonsDisplayMode", "draftSupported", "isPending", "onViewModeChange"], outputs: ["newActionClicked", "extraButtonClicked", "extractReport", "buttonClicked", "viewModeChanged"] }, { kind: "component", type: PaginatorComponent, selector: "app-paginator", inputs: ["currentPage", "totalItems", "pageSize", "pageSizeOptions", "mobileLoadMoreIncrement", "displayedItems"], outputs: ["pageChange", "pageSizeChange", "loadMore"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: FilterBuilderComponent, selector: "app-filter-builder", inputs: ["columns", "isChecked", "filterFields", "pageInfo", "pendingFilters", "showExportButton", "exportDisabled"], outputs: ["filterInformation", "isEmpty", "applyFilter", "sortByClicked", "exportClicked"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }], animations: [] }); }
|
|
4153
4153
|
}
|
|
4154
4154
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BaseTableComponent, decorators: [{
|
|
4155
4155
|
type: Component,
|
|
@@ -4179,7 +4179,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
4179
4179
|
MatMenuTrigger,
|
|
4180
4180
|
MatMenu,
|
|
4181
4181
|
MatMenuItem,
|
|
4182
|
-
], template: "<div class=\"flex-column baseTable\">\n <div class=\"flex-row flex-100\" >\n <div class=\"flex-column align-start flex-100\" style=\"width: 100%;\">\n <app-title-bar\n [pageTitle]=\"pageInfo.hideTitle ? '' : pageInfo.labelsSection+'.list_title'\"\n [subTitle]=\"(pageInfo.hideTitle || pageInfo.hideSubtitle) ? '' : pageInfo.labelsSection+'.subtitle'\"\n [titleMode]=\"''\"\n [pageInfo]=\"pageInfo\"\n [newAction]=\"showAddNew()\"\n [showExtractButton]=\"!pageInfo.hideExtractButton\"\n [draftSupported]=\"pageInfo.draftSupported\"\n [isPending]=\"isPending\"\n [onViewModeChange]=\"switchViewMode.bind(this)\"\n [buttons]=\"extraActions\"\n [buttonsDisplayMode]=\"buttonsDisplayMode\"\n (newActionClicked)=\"onAddNewAction($event)\"\n (extractReport)=\"extractReport($event)\"\n (viewModeChanged)=\"onViewModeChangedReceived($event)\"\n (buttonClicked)=\"buttonClicked.emit($event)\"\n [totalElements]=\"pageInfo.hideTitle ? undefined : totalElements\">\n </app-title-bar>\n </div>\n </div>\n\n <div class=\"filter-row\" *ngIf=\"!pageInfo.hideAdvancedFilter\">\n <app-filter-builder\n *ngIf=\"!pageInfo.hideAdvancedFilter\"\n [pageInfo]=\"pageInfo\"\n [columns]=\"columns\"\n [filterFields]=\"filterFields\"\n [pendingFilters]=\"pendingFilters\"\n [showExportButton]=\"!pageInfo.hideExtractButton\"\n [exportDisabled]=\"noDataFound || !dataSource?.data?.length\"\n (filterInformation)=\"storePendingFilters($event)\"\n (isEmpty)=\"handleFilterEmpty($event)\"\n (applyFilter)=\"applyPendingFilters()\"\n (sortByClicked)=\"handleSortClick($event)\"\n (exportClicked)=\"extractReport($event)\">\n </app-filter-builder>\n\n <div class=\"button-group\" *ngIf=\"!pageInfo.hideExtractButton\">\n <button *ngIf=\"!pageInfo.hideExtractButton\"\n mat-flat-button\n type=\"button\"\n [matMenuTriggerFor]=\"exportMenu\"\n class=\"btn-export\"\n [disabled]=\"noDataFound || !dataSource?.data?.length\"\n [attr.aria-label]=\"'export' | translate\"\n [attr.aria-haspopup]=\"true\"\n >\n <div class=\"button-text\">\n <mat-icon>file_export</mat-icon>\n <span>{{ 'export' | translate }}</span>\n <mat-icon class=\"arrow-icon\">keyboard_arrow_down</mat-icon>\n </div>\n </button>\n\n <mat-menu #exportMenu=\"matMenu\">\n <button mat-menu-item (click)=\"extractReport('pdf')\">PDF</button>\n <button mat-menu-item (click)=\"extractReport('xlsx')\">Excel</button>\n <button mat-menu-item (click)=\"extractReport('csv')\">CSV</button>\n </mat-menu>\n\n </div>\n </div>\n\n\n <div class=\"flex-row flex-100 baseTable__detailsColumn\">\n <div class=\"flex-100\">\n <div class=\"flex-row flex-100 mainTable\">\n <div\n class=\"table-container\"\n role=\"table\"\n [attr.aria-label]=\"\n pageInfo.labelsSection && !pageInfo.hideTitle\n ? (pageInfo.labelsSection + '.list_title' | translate)\n : null\n \">\n <div class=\"table-header\" [attr.data-sort]=\"sortState\" role=\"row\">\n <div *ngFor=\"let columnProp of visibleColumnsArray; let i = index\"\n class=\"table-header-cell\"\n role=\"columnheader\"\n [attr.aria-sort]=\"getColumnAriaSort(columnProp)\"\n [attr.tabindex]=\"getColumn(columnProp)?.enableSorting ? 0 : null\"\n [class.sortable]=\"getColumn(columnProp)?.enableSorting\"\n [class.first-cell]=\"i === 0\"\n [class.last-cell]=\"i === visibleColumnsArray.length - 1\"\n [class.actions-cell]=\"i === visibleColumnsArray.length - 1 && columnProp === 'actions'\"\n [class.has-width]=\"getColumn(columnProp)?.width\"\n [ngStyle]=\"getColumn(columnProp)?.width ? {'width': getColumn(columnProp)?.width + '%', 'flex-basis': getColumn(columnProp)?.width + '%'} : {}\"\n (click)=\"getColumn(columnProp)?.enableSorting && handleSortClick(columnProp)\"\n (keydown)=\"onSortHeaderKeydown($event, columnProp)\">\n <div class=\"table-header-content\">\n <span class=\"table-header-label\">{{ labelKey(getColumn(columnProp)) | translate }}</span>\n <ng-container *ngIf=\"getColumn(columnProp)?.enableSorting\">\n <mat-icon *ngIf=\"getSortDirection(columnProp) === 'asc'\"\n class=\"sort-icon sort-asc\">arrow_drop_up</mat-icon>\n <mat-icon *ngIf=\"getSortDirection(columnProp) === 'desc'\"\n class=\"sort-icon sort-desc\">arrow_drop_down</mat-icon>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div class=\"table-body\" role=\"rowgroup\">\n <div *ngFor=\"let row of dataSource.data; let rowIndex = index\"\n class=\"table-row\"\n role=\"row\"\n [attr.tabindex]=\"-1\"\n [attr.id]=\"'table-row-' + (row?.id || row?.key || '')\"\n [ngClass]=\"{\n 'table-row--highlight': selectedRowIndex == row.id || (pageInfo.groupByProperty && pageInfo.groupByValue?.includes(row[pageInfo.groupByProperty])),\n 'table-row--dark-highlight': isDarkHighlight(row)\n }\"\n (auxclick)=\"openNewTab(row)\"\n (click)=\"$event.stopPropagation(); onSelectItem(row)\">\n <div *ngFor=\"let columnProp of visibleColumnsArray; let i = index\"\n class=\"table-cell\"\n role=\"cell\"\n [class.first-cell]=\"i === 0\"\n [class.last-cell]=\"i === visibleColumnsArray.length - 1\"\n [class.actions-cell]=\"i === visibleColumnsArray.length - 1 && columnProp === 'actions'\"\n [class.has-width]=\"getColumn(columnProp)?.width\"\n [ngStyle]=\"getColumn(columnProp)?.width ? {'width': getColumn(columnProp)?.width + '%', 'flex-basis': getColumn(columnProp)?.width + '%'} : {}\">\n <ng-container [ngSwitch]=\"getColumn(columnProp)?.type\">\n <ng-container *ngSwitchCase=\"'workflowStatus'\">\n <button mat-button type=\"button\" class=\"wfStatus {{ getStatusDescription(row)}}\" [attr.id]=\"'table-btn-wf-'+columnProp+'-'+(row.id || row.key || '')\" [attr.tabindex]=\"-1\">{{ getStatusDescription(row) }}</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'hyper-text'\">\n <span\n *ngIf=\"shouldRenderAsHyperLink(row); else plainHyperText\"\n class=\"mat-mdc-form-field-label hyper-link\"\n [attr.tabindex]=\"-1\"\n (click)=\"hyperLinkClicked(columnProp, row)\">\n {{ extractFieldName(row, columnProp) }}\n </span>\n <ng-template #plainHyperText>\n <span class=\"mat-mdc-form-field-label\">{{ extractFieldName(row, columnProp) }}</span>\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'button'\">\n <button *ngIf=\"shouldShowButton(row)\" mat-button type=\"button\" class=\"primary\" (click)=\"$event.stopPropagation(); actionButtonClicked(columnProp, row)\" [attr.id]=\"'table-btn-action-'+columnProp\">\n {{ labelKey(getColumn(columnProp)) + '_title' | translate }}\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon [ngClass]=\"{\n 'mainTable__td__icon-green': row[columnProp] === 'pass',\n 'mainTable__td__icon-orange': row[columnProp] === 'warning',\n 'mainTable__td__icon-red': row[columnProp] === 'error'\n }\"\n [attr.aria-label]=\"getIconAriaLabelKey(row[columnProp]) | translate\">\n {{ getIcon(row[columnProp]) }}\n </mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <mat-checkbox class=\"primary\" [tabIndex]=\"-1\" [checked]=\"row[columnProp]\" (click)=\"$event.stopPropagation();actionCheckedClicked(columnProp,row)\"></mat-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'stateType'\">\n <button mat-button type=\"button\" class=\"stateType {{ row[columnProp]}}\" [attr.id]=\"'table-btn-state-'+columnProp\" [attr.tabindex]=\"-1\">{{ labelKeyByValue(getColumn(columnProp), row) | translate}}</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{ extractFieldName(row, columnProp) | date:'dd/MM/yyyy':'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'croppedText'\">\n {{ getCroppedText(extractFieldName(row, columnProp), row[getColumn(columnProp)?.width]) }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'download'\">\n <mat-icon class=\"mainTable__td__icon-blue\"\n [attr.aria-label]=\"'BASE_TABLE.downloadAction' | translate\">system_update_alt</mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'onOff'\">\n <mat-icon *ngIf=\"row[columnProp] === null\" class=\"mainTable__td__icon-darkorange\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(null) | translate\">flag</mat-icon>\n <mat-icon *ngIf=\"row[columnProp] === false\" class=\"mainTable__td__icon-red\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(false) | translate\">flag</mat-icon>\n <mat-icon *ngIf=\"row[columnProp] === true\" class=\"mainTable__td__icon-green\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(true) | translate\">flag</mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'status'\">\n <span *ngIf=\"row[columnProp] === null || row[columnProp] === false\">\n {{ pageInfo.labelsSection + '.' + getColumn(columnProp)?.label + 'InActive' | translate }}\n </span>\n <span *ngIf=\"row[columnProp] === true\">\n {{ pageInfo.labelsSection + '.' + getColumn(columnProp)?.label + 'Active' | translate }}\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'info'\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.tabindex]=\"-1\"\n [attr.aria-label]=\"'BASE_TABLE.rowDetails' | translate\"\n (click)=\"$event.stopPropagation();emitEvent(row)\"\n [attr.id]=\"'table-btn-info-'+row.id\">\n <mat-icon aria-hidden=\"true\">info</mat-icon>\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'netAmount'\">\n <div class=\"mainTable__td__currency\" style=\"display:inline-block;\">{{ row[getColumn(columnProp)?.currency] }}</div>\n <span class=\"mainTable__td__property\" style=\"display:inline-block; margin-left:6px; margin-right:6px;\">\n {{ extractFieldName(row, columnProp) | currency:'':'' }}</span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTime'\">\n {{ extractFieldName(row, columnProp) | date : extractFormat(getColumn(columnProp)):'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <small><sup class=\"mainTable__td__currency\">{{row[getColumn(columnProp)?.currency]}}</sup></small>\n {{ extractFieldName(row, columnProp) | number : (getColumn(columnProp)?.digitInfo || '1.3-5') }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'listAction'\">\n <app-button-actions\n [row]=\"row\"\n [buttonsAction]=\"getColumn(columnProp)?.viewType === 'buttonsAction'\"\n [listAction]=\"listAction\"\n [actions]=\"listAction\"\n (clickedButton)=\"actionListClicked($event,row)\">\n </app-button-actions>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ul class=\"mainTable__td__list\">\n <li *ngFor=\"let item of getListItems(row, columnProp)\">{{ item }}</li>\n </ul>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"getColumn(columnProp)?.translate; else noTranslate\">\n <span\n [attr.tabindex]=\"-1\"\n (click)=\"$event.stopPropagation(); emitRoutePage(row)\">\n {{ pageInfo.labelsSection + \".\" + extractFieldName(row, columnProp) | translate }}\n </span>\n </ng-container>\n <ng-template #noTranslate>\n <span\n [attr.tabindex]=\"-1\"\n (click)=\"$event.stopPropagation(); emitRoutePage(row)\"\n [innerText]='extractFieldName(row, columnProp)'></span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Mobile Card View -->\n <div class=\"mobile-cards-container\">\n <div *ngFor=\"let row of dataSource.data; let rowIndex = index\"\n class=\"mobile-card\"\n [attr.id]=\"'mobile-card-' + (row?.id || row?.key || '')\"\n [ngClass]=\"{\n 'mobile-card--highlight': selectedRowIndex == row.id || (pageInfo.groupByProperty && pageInfo.groupByValue?.includes(row[pageInfo.groupByProperty])),\n 'mobile-card--dark-highlight': isDarkHighlight(row)\n }\"\n (auxclick)=\"openNewTab(row)\"\n (click)=\"$event.stopPropagation(); onSelectItem(row)\">\n\n <!-- Mobile Card Header: ID/Name and Status -->\n <div class=\"mobile-card__header\">\n <div class=\"mobile-card__header-id\">\n <span class=\"mobile-card__id-text\">{{ extractFieldName(row, getMobileCardIdColumn()?.property || 'id') }}</span>\n </div>\n <div class=\"mobile-card__header-status\" *ngIf=\"getMobileCardStatusColumn()\">\n <button mat-button class=\"stateType {{ row[getMobileCardStatusColumn()?.property]}}\"\n [attr.id]=\"'mobile-btn-state-'+getMobileCardStatusColumn()?.property\">\n {{ labelKeyByValue(getMobileCardStatusColumn(), row) | translate}}\n </button>\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"mobile-card__divider\"></div>\n\n <!-- Mobile Card Body: Other columns -->\n <div class=\"mobile-card__body\">\n <div *ngFor=\"let column of getMobileCardColumns()\" class=\"mobile-card__row\">\n <div class=\"mobile-card__row-label\">\n <span>{{ labelKey(column) | translate }} :</span>\n </div>\n <div class=\"mobile-card__row-value\">\n <ng-container [ngSwitch]=\"column.type\">\n <ng-container *ngSwitchCase=\"'stateType'\">\n <button mat-button class=\"stateType {{ row[column.property]}}\"\n [attr.id]=\"'mobile-btn-state-'+column.property\">\n {{ labelKeyByValue(column, row) | translate}}\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{ extractFieldName(row, column.property) | date:'dd/MM/yyyy':'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'netAmount'\">\n <span class=\"mobile-card__amount-currency\">{{ row[column.currency] }}</span>\n <span class=\"mobile-card__amount-value\">{{ extractFieldName(row, column.property) | currency:'':'' }}</span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTime'\">\n {{ extractFieldName(row, column.property) | date : extractFormat(column):'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <small><sup class=\"mainTable__td__currency\">{{row[column.currency]}}</sup></small>\n {{ extractFieldName(row, column.property) | number : (column.digitInfo || '1.3-5') }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ul class=\"mainTable__td__list\">\n <li *ngFor=\"let item of getListItems(row, column.property)\">{{ item }}</li>\n </ul>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"column.translate; else noTranslate\">\n <span>{{ pageInfo.labelsSection + \".\" + extractFieldName(row, column.property) | translate }}</span>\n </ng-container>\n <ng-template #noTranslate>\n <span [innerText]='extractFieldName(row, column.property)'></span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Mobile Card Actions -->\n <div class=\"mobile-card__actions\" *ngIf=\"listAction && listAction.length > 0\">\n <app-button-actions\n [row]=\"row\"\n [buttonsAction]=\"true\"\n [listAction]=\"listAction\"\n [actions]=\"listAction\"\n (clickedButton)=\"actionListClicked($event,row)\">\n </app-button-actions>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noDataFound\" class=\"dataNotFound flex-column\">\n <img *ngIf=\"getDisplaySvgPath()\" [src]=\"getDisplaySvgPath()\" class=\"dataNotFound__icon\" alt=\"No data found\" />\n <span class=\"dataNotFound__title\">{{ getDisplayTitle() | translate}}</span>\n <span class=\"dataNotFound__subtitle\">{{ getDisplaySubtitle() | translate}}</span>\n </div>\n\n\n <div *ngIf=\"(dataSource.data?.length > 0 || customizedData) && !pageInfo.hidePagination\" class=\"main-pagination flex-row\">\n <ng-container *ngIf=\"enablePagination\">\n <div class=\"flex-column flex-100\">\n <app-paginator\n [currentPage]=\"pageIndex\"\n [totalItems]=\"totalElements\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"[5, 10, 25, 50]\"\n [mobileLoadMoreIncrement]=\"mobileLoadMoreIncrement\"\n [displayedItems]=\"mobileDisplayedItems || dataSource.data.length\"\n (pageChange)=\"onPageChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </app-paginator>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;width:100%;max-width:100%;box-sizing:border-box;container-type:inline-size;container-name:base-table}.baseTable{width:100%!important;max-width:100%!important;box-sizing:border-box}.flex-row{display:flex;flex-direction:row}.flex-column{display:flex;flex-direction:column;width:100%;max-width:100%;box-sizing:border-box}.flex-100{flex:1 1 100%}.flex-49{flex:0 0 49%}.flex-50{flex:0 0 50%}.align-start{justify-content:flex-start;align-items:flex-start}.align-center{justify-content:center;align-items:center}.align-end{justify-content:flex-end;align-items:flex-end}.gap-0{gap:0}.gap-5{gap:5px}.gap-10{gap:10px}.dataNotFound{display:flex;flex-direction:column;justify-content:center;align-items:center;height:auto;min-height:280px;text-align:center;margin-top:0;padding:40px 0}.dataNotFound__icon{height:auto;width:auto;max-width:200px;max-height:200px;margin-bottom:8px;object-fit:contain}.dataNotFound__title{color:#6a6a6a;font-size:20px;font-weight:700;margin-bottom:4px}.dataNotFound__subtitle{color:#6a6a6a;font-size:20px;font-weight:400}@media (max-width: 960px){.flex-column-sm{flex-direction:column}.align-center-sm{justify-content:center;align-items:flex-start}}.filter-row{display:flex!important;flex-direction:row!important;align-items:center!important;width:100%!important;max-width:100%!important;gap:16px!important;box-sizing:border-box;margin-top:20px;margin-bottom:16px;padding:0;flex-wrap:nowrap!important;min-width:0!important;min-height:48px!important;overflow:visible!important}.filter-row app-filter-builder{flex:1 1 auto!important;min-width:0!important;max-width:none!important;width:auto!important;flex-shrink:1!important;display:flex!important;align-items:center!important;overflow:visible!important}@container base-table (min-width: 769px) and (max-width: 900px){.filter-row{align-items:flex-start!important}:host ::ng-deep app-filter-builder .main-filter-builder .filterForm__row{align-items:flex-start!important}}.button-group{display:flex!important;flex-direction:row!important;align-items:center!important;justify-content:flex-end;gap:8px!important;flex-shrink:0!important;flex-grow:0!important;flex-basis:auto!important;height:46px!important;white-space:nowrap!important;z-index:1!important}.mainTable{margin-top:0!important}.btn-apply-filter{background:#fff!important;border:1px solid #3e627b!important;border-radius:8px!important;height:46px!important;min-width:120px!important;padding:0 16px!important;box-shadow:none!important}.btn-apply-filter .button-text{display:flex;align-items:center;justify-content:center;gap:4px;width:100%}.btn-apply-filter mat-icon{font-size:24px;width:24px;height:30px;color:#0d4261}.btn-apply-filter span{font-family:Lusail,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#0d4261;white-space:nowrap}.btn-apply-filter:hover{background:#fafafa!important}.btn-export{background:#fff!important;border:1px solid #0d4261!important;border-radius:8px!important;height:46px!important;min-width:109px!important;padding:0 16px!important;box-shadow:none!important;margin-bottom:7px!important}.btn-export .button-text{display:flex;align-items:center;justify-content:center;gap:4px;width:100%}.btn-export mat-icon{font-size:24px;width:24px;height:30px;color:#0d4261}.btn-export .arrow-icon{font-size:16px;width:16px;height:16px;margin-left:0}.btn-export span{font-family:Lusail,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#0d4261;white-space:nowrap}.btn-export:hover:not(:disabled){background:#fafafa!important}.btn-export:disabled,.btn-export.mat-mdc-button-disabled{opacity:.45;cursor:not-allowed;pointer-events:none}@container base-table (min-width: 769px) and (max-width: 900px){.filter-row .btn-export{margin-bottom:0!important}}.arrow-icon{font-size:16px;width:16px;height:16px}@media (max-width: 1024px){.button-group{width:auto}}@media (max-width: 768px){.filter-row{flex-direction:column;align-items:stretch}.button-group{display:none!important}.btn-export{width:100%}}.table-container{width:100%;overflow:hidden;background:#f7f7f7;box-sizing:border-box;display:flex;flex-direction:column}.table-header{display:flex;align-items:center;background:#f7f7f7;border:1px solid #f0eeee;max-height:48px;height:48px;margin-bottom:16px;border-radius:8px;overflow:hidden;width:100%;box-sizing:border-box;min-width:0}.table-header-cell{display:flex;align-items:center;max-height:48px;height:48px;padding:8px 16px;flex:1;min-width:100px;position:sticky;top:0;background:none;z-index:10;box-sizing:border-box}.table-header-cell.has-width{flex:0 0 auto!important;min-width:0!important;max-width:none!important}.table-header-cell:last-child{border-right:none}.table-header-cell.first-cell{border-top-left-radius:8px;border-bottom-left-radius:8px}.table-header-cell.last-cell{border-top-right-radius:8px;border-bottom-right-radius:8px}.table-header-cell.actions-cell{justify-content:center;text-align:center}.table-header-cell.actions-cell .table-header-content{justify-content:center}.table-header-cell.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.table-header-cell.sortable:hover{background:#fafafa}.table-header-content{display:flex;align-items:center;gap:8px;width:100%}.table-header-label{font-family:Lusail,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#0d4261;white-space:nowrap}.sort-icon{font-size:18px;width:18px;height:18px;color:#5c5c5c;display:flex;align-items:center;justify-content:center;transition:color .2s}.sort-icon.sort-asc,.sort-icon.sort-desc{color:#0d4261}.table-body{display:flex;flex-direction:column;gap:8px;background:#f7f7f7}.table-row{display:flex;align-items:center;min-height:48px;background:#fff;border-bottom:1px solid #f0eeee;transition:background-color .2s;border-radius:8px;overflow:hidden;width:100%;box-sizing:border-box;min-width:0}.table-row:hover{background:#fafafa}.table-row--highlight{background:#f0f8ff}.table-row--dark-highlight{background:#e8f4f8}.table-row .table-cell.first-cell{border-top-left-radius:8px;border-bottom-left-radius:8px}.table-row .table-cell.last-cell{border-top-right-radius:8px;border-bottom-right-radius:8px}:host-context([dir=rtl]) .table-row,:host-context(body.rtl) .table-row{overflow:visible;align-items:center}:host-context([dir=rtl]) .table-cell:not(.actions-cell),:host-context(body.rtl) .table-cell:not(.actions-cell){overflow:visible;align-items:center;line-height:1.7;padding-top:10px;padding-bottom:10px}:host-context([dir=rtl]) .table-cell:not(.actions-cell) span,:host-context(body.rtl) .table-cell:not(.actions-cell) span{display:inline;overflow:visible;line-height:1.7;-webkit-line-clamp:unset;line-clamp:unset}.table-cell{display:flex;align-items:center;min-height:48px;max-height:none;padding:8px 16px;flex:1;min-width:100px;font-family:Lusail,sans-serif;font-weight:400;font-size:16px;line-height:1.2;color:#000;box-sizing:border-box}.table-cell.has-width{flex:0 0 auto!important;min-width:0!important;max-width:none!important}.table-cell:last-child{border-right:none}.table-cell.actions-cell{justify-content:center;text-align:center}.mobile-cards-container{display:none;flex-direction:column;gap:12px;width:100%;box-sizing:border-box}.mobile-card{background:#fff;border:1px solid #f0eeee;border-radius:8px;padding:12px 20px;display:flex;flex-direction:column;gap:4px;cursor:pointer;transition:background-color .2s;box-sizing:border-box;width:100%}.mobile-card:hover{background:#fafafa}.mobile-card--highlight{background:#f0f8ff}.mobile-card--dark-highlight{background:#e8f4f8}.mobile-card__header{display:flex;align-items:center;justify-content:space-between;height:48px;width:100%;box-sizing:border-box}.mobile-card__header-id{display:flex;flex-direction:column;justify-content:center;flex:1}.mobile-card__id-text{font-family:Lusail,sans-serif;font-weight:700;font-size:14px;line-height:1.2;color:#222;text-align:left;white-space:nowrap}.mobile-card__header-status{display:flex;align-items:center;justify-content:flex-end;flex-shrink:0}.mobile-card__divider{height:.347px;width:100%;background:#f0eeee;margin:0;flex-shrink:0}.mobile-card__body{display:flex;flex-direction:column;gap:0;width:100%;box-sizing:border-box}.mobile-card__row{display:flex;align-items:center;justify-content:space-between;height:40px;width:100%;overflow:hidden;box-sizing:border-box}.mobile-card__row-label{display:flex;flex-direction:column;justify-content:center;flex-shrink:0}.mobile-card__row-label span{font-family:Lusail,sans-serif;font-weight:400;font-size:14px;line-height:1.2;color:#222;white-space:nowrap}.mobile-card__row-value{display:flex;flex-direction:column;justify-content:center;flex-shrink:0;text-align:right}.mobile-card__row-value span{font-family:Lusail,sans-serif;font-weight:400;font-size:14px;line-height:1.2;color:#222;white-space:nowrap}.mobile-card__amount-currency{font-family:Lusail,sans-serif;font-weight:400;font-size:14px;line-height:1.2;color:#222;display:inline-block}.mobile-card__amount-value{font-family:Lusail,sans-serif;font-weight:700;font-size:14px;line-height:1.2;color:#222;display:inline-block;margin-left:6px;margin-right:6px}.mobile-card__actions{border-top:1px solid #f0eeee;padding-top:8px;margin-top:4px;display:flex;align-items:center;justify-content:center;min-height:48px;max-height:48px;width:100%;box-sizing:border-box}@media (max-width: 768px){.table-container{display:none}.mobile-cards-container{display:flex}}@media (min-width: 769px){.mobile-cards-container{display:none}.table-container{display:flex}}:host ::ng-deep button.mat-mdc-button.stateType,:host ::ng-deep button.mdc-button.stateType{white-space:normal!important;height:auto!important;min-height:28px!important;max-width:100%!important;align-items:center!important;justify-content:center!important;cursor:default!important}:host ::ng-deep button.mat-mdc-button.stateType .mdc-button__label,:host ::ng-deep button.mdc-button.stateType .mdc-button__label{white-space:normal!important;display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:2!important;line-clamp:2!important;overflow:hidden!important;word-break:break-word!important;line-height:1.25!important;max-width:100%!important;text-align:center!important}@media (max-width: 450px){.mobile-card__header{flex-direction:column;justify-content:flex-start;height:auto;width:100%;box-sizing:border-box;gap:8px}}.mainTable__td__list{margin:4px 0;padding:4px 8px 4px 1.25rem;list-style-type:disc}.mainTable__td__list li{word-break:break-word;line-height:1.35;padding:2px 0}.mainTable__td__list li+li{margin-top:2px}.table-cell:has(.mainTable__td__list){align-items:flex-start;padding-top:8px;padding-bottom:8px}.mobile-card__row-value:has(.mainTable__td__list){align-items:flex-start;padding:4px 0}\n"] }]
|
|
4182
|
+
], template: "<div class=\"flex-column baseTable\">\n <div class=\"flex-row flex-100\" >\n <div class=\"flex-column align-start flex-100\" style=\"width: 100%;\">\n <app-title-bar\n [pageTitle]=\"pageInfo.hideTitle ? '' : pageInfo.labelsSection+'.list_title'\"\n [subTitle]=\"(pageInfo.hideTitle || pageInfo.hideSubtitle) ? '' : pageInfo.labelsSection+'.subtitle'\"\n [titleMode]=\"''\"\n [pageInfo]=\"pageInfo\"\n [newAction]=\"showAddNew()\"\n [showExtractButton]=\"!pageInfo.hideExtractButton\"\n [draftSupported]=\"pageInfo.draftSupported\"\n [isPending]=\"isPending\"\n [onViewModeChange]=\"switchViewMode.bind(this)\"\n [buttons]=\"extraActions\"\n [buttonsDisplayMode]=\"buttonsDisplayMode\"\n (newActionClicked)=\"onAddNewAction($event)\"\n (extractReport)=\"extractReport($event)\"\n (viewModeChanged)=\"onViewModeChangedReceived($event)\"\n (buttonClicked)=\"buttonClicked.emit($event)\"\n [totalElements]=\"pageInfo.hideTitle ? undefined : totalElements\">\n </app-title-bar>\n </div>\n </div>\n\n <div class=\"filter-row\" *ngIf=\"!pageInfo.hideAdvancedFilter\">\n <app-filter-builder\n *ngIf=\"!pageInfo.hideAdvancedFilter\"\n [pageInfo]=\"pageInfo\"\n [columns]=\"columns\"\n [filterFields]=\"filterFields\"\n [pendingFilters]=\"pendingFilters\"\n [showExportButton]=\"!pageInfo.hideExtractButton\"\n [exportDisabled]=\"noDataFound || !dataSource?.data?.length\"\n (filterInformation)=\"storePendingFilters($event)\"\n (isEmpty)=\"handleFilterEmpty($event)\"\n (applyFilter)=\"applyPendingFilters()\"\n (sortByClicked)=\"handleSortClick($event)\"\n (exportClicked)=\"extractReport($event)\">\n </app-filter-builder>\n\n <div class=\"button-group\" *ngIf=\"!pageInfo.hideExtractButton\">\n <button *ngIf=\"!pageInfo.hideExtractButton\"\n mat-flat-button\n type=\"button\"\n [matMenuTriggerFor]=\"exportMenu\"\n class=\"btn-export\"\n [disabled]=\"noDataFound || !dataSource?.data?.length\"\n [attr.aria-label]=\"'export' | translate\"\n [attr.aria-haspopup]=\"true\"\n >\n <div class=\"button-text\">\n <mat-icon>file_export</mat-icon>\n <span>{{ 'export' | translate }}</span>\n <mat-icon class=\"arrow-icon\">keyboard_arrow_down</mat-icon>\n </div>\n </button>\n\n <mat-menu #exportMenu=\"matMenu\">\n <button mat-menu-item (click)=\"extractReport('pdf')\">PDF</button>\n <button mat-menu-item (click)=\"extractReport('xlsx')\">Excel</button>\n <button mat-menu-item (click)=\"extractReport('csv')\">CSV</button>\n </mat-menu>\n\n </div>\n </div>\n\n\n <div class=\"flex-row flex-100 baseTable__detailsColumn\">\n <div class=\"flex-100\">\n <div class=\"flex-row flex-100 mainTable\">\n <div\n class=\"table-container\"\n role=\"table\"\n [attr.aria-label]=\"\n pageInfo.labelsSection && !pageInfo.hideTitle\n ? (pageInfo.labelsSection + '.list_title' | translate)\n : null\n \">\n <div class=\"table-header\" [attr.data-sort]=\"sortState\" role=\"row\">\n <div *ngFor=\"let columnProp of visibleColumnsArray; let i = index\"\n class=\"table-header-cell\"\n role=\"columnheader\"\n [attr.aria-sort]=\"getColumnAriaSort(columnProp)\"\n [attr.tabindex]=\"getColumn(columnProp)?.enableSorting ? 0 : null\"\n [class.sortable]=\"getColumn(columnProp)?.enableSorting\"\n [class.first-cell]=\"i === 0\"\n [class.last-cell]=\"i === visibleColumnsArray.length - 1\"\n [class.actions-cell]=\"i === visibleColumnsArray.length - 1 && columnProp === 'actions'\"\n [class.has-width]=\"getColumn(columnProp)?.width\"\n [ngStyle]=\"getColumn(columnProp)?.width ? {'width': getColumn(columnProp)?.width + '%', 'flex-basis': getColumn(columnProp)?.width + '%'} : {}\"\n (click)=\"getColumn(columnProp)?.enableSorting && handleSortClick(columnProp)\"\n (keydown)=\"onSortHeaderKeydown($event, columnProp)\">\n <div class=\"table-header-content\">\n <span class=\"table-header-label\">{{ labelKey(getColumn(columnProp)) | translate }}</span>\n <ng-container *ngIf=\"getColumn(columnProp)?.enableSorting\">\n <mat-icon *ngIf=\"getSortDirection(columnProp) === 'asc'\"\n class=\"sort-icon sort-asc\">arrow_drop_up</mat-icon>\n <mat-icon *ngIf=\"getSortDirection(columnProp) === 'desc'\"\n class=\"sort-icon sort-desc\">arrow_drop_down</mat-icon>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div class=\"table-body\" role=\"rowgroup\">\n <div *ngFor=\"let row of dataSource.data; let rowIndex = index\"\n class=\"table-row\"\n role=\"row\"\n [attr.tabindex]=\"-1\"\n [attr.id]=\"'table-row-' + (row?.id || row?.key || '')\"\n [ngClass]=\"{\n 'table-row--highlight': selectedRowIndex == row.id || (pageInfo.groupByProperty && pageInfo.groupByValue?.includes(row[pageInfo.groupByProperty])),\n 'table-row--dark-highlight': isDarkHighlight(row)\n }\"\n (auxclick)=\"openNewTab(row)\"\n (click)=\"$event.stopPropagation(); onSelectItem(row)\">\n <div *ngFor=\"let columnProp of visibleColumnsArray; let i = index\"\n class=\"table-cell\"\n role=\"cell\"\n [class.first-cell]=\"i === 0\"\n [class.last-cell]=\"i === visibleColumnsArray.length - 1\"\n [class.actions-cell]=\"i === visibleColumnsArray.length - 1 && columnProp === 'actions'\"\n [class.has-width]=\"getColumn(columnProp)?.width\"\n [ngStyle]=\"getColumn(columnProp)?.width ? {'width': getColumn(columnProp)?.width + '%', 'flex-basis': getColumn(columnProp)?.width + '%'} : {}\">\n <ng-container [ngSwitch]=\"getColumn(columnProp)?.type\">\n <ng-container *ngSwitchCase=\"'workflowStatus'\">\n <button mat-button type=\"button\" class=\"wfStatus {{ getStatusDescription(row)}}\" [attr.id]=\"'table-btn-wf-'+columnProp+'-'+(row.id || row.key || '')\" [attr.tabindex]=\"-1\">{{ getStatusDescription(row) }}</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'hyper-text'\">\n <span\n *ngIf=\"shouldRenderAsHyperLink(row); else plainHyperText\"\n class=\"mat-mdc-form-field-label hyper-link\"\n [attr.tabindex]=\"-1\"\n (click)=\"hyperLinkClicked(columnProp, row)\">\n {{ extractFieldName(row, columnProp) }}\n </span>\n <ng-template #plainHyperText>\n <span class=\"mat-mdc-form-field-label\">{{ extractFieldName(row, columnProp) }}</span>\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'button'\">\n <button *ngIf=\"shouldShowButton(row)\" mat-button type=\"button\" class=\"primary\" (click)=\"$event.stopPropagation(); actionButtonClicked(columnProp, row)\" [attr.id]=\"'table-btn-action-'+columnProp\">\n {{ labelKey(getColumn(columnProp)) + '_title' | translate }}\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon [ngClass]=\"{\n 'mainTable__td__icon-green': row[columnProp] === 'pass',\n 'mainTable__td__icon-orange': row[columnProp] === 'warning',\n 'mainTable__td__icon-red': row[columnProp] === 'error'\n }\"\n [attr.aria-label]=\"getIconAriaLabelKey(row[columnProp]) | translate\">\n {{ getIcon(row[columnProp]) }}\n </mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <mat-checkbox class=\"primary\" [tabIndex]=\"-1\" [checked]=\"row[columnProp]\" (click)=\"$event.stopPropagation();actionCheckedClicked(columnProp,row)\"></mat-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'stateType'\">\n <button mat-button type=\"button\" class=\"stateType {{ row[columnProp]}}\" [attr.id]=\"'table-btn-state-'+columnProp\" [attr.tabindex]=\"-1\">{{ labelKeyByValue(getColumn(columnProp), row) | translate}}</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{ extractFieldName(row, columnProp) | date:'dd/MM/yyyy':'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'croppedText'\">\n {{ getCroppedText(extractFieldName(row, columnProp), row[getColumn(columnProp)?.width]) }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'download'\">\n <mat-icon class=\"mainTable__td__icon-blue\"\n [attr.aria-label]=\"'BASE_TABLE.downloadAction' | translate\">system_update_alt</mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'onOff'\">\n <mat-icon *ngIf=\"row[columnProp] === null\" class=\"mainTable__td__icon-darkorange\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(null) | translate\">flag</mat-icon>\n <mat-icon *ngIf=\"row[columnProp] === false\" class=\"mainTable__td__icon-red\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(false) | translate\">flag</mat-icon>\n <mat-icon *ngIf=\"row[columnProp] === true\" class=\"mainTable__td__icon-green\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(true) | translate\">flag</mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'status'\">\n <span *ngIf=\"row[columnProp] === null || row[columnProp] === false\">\n {{ pageInfo.labelsSection + '.' + getColumn(columnProp)?.label + 'InActive' | translate }}\n </span>\n <span *ngIf=\"row[columnProp] === true\">\n {{ pageInfo.labelsSection + '.' + getColumn(columnProp)?.label + 'Active' | translate }}\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'info'\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.tabindex]=\"-1\"\n [attr.aria-label]=\"'BASE_TABLE.rowDetails' | translate\"\n (click)=\"$event.stopPropagation();emitEvent(row)\"\n [attr.id]=\"'table-btn-info-'+row.id\">\n <mat-icon aria-hidden=\"true\">info</mat-icon>\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'netAmount'\">\n <div class=\"mainTable__td__currency\" style=\"display:inline-block;\">{{ row[getColumn(columnProp)?.currency] }}</div>\n <span class=\"mainTable__td__property\" style=\"display:inline-block; margin-left:6px; margin-right:6px;\">\n {{ extractFieldName(row, columnProp) | currency:'':'' }}</span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTime'\">\n {{ extractFieldName(row, columnProp) | date : extractFormat(getColumn(columnProp)):'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTimeExact'\">\n {{ extractFieldName(row, columnProp) | date:'d/M/yyyy, h:mm a' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <small><sup class=\"mainTable__td__currency\">{{row[getColumn(columnProp)?.currency]}}</sup></small>\n {{ extractFieldName(row, columnProp) | number : (getColumn(columnProp)?.digitInfo || '1.3-5') }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'listAction'\">\n <app-button-actions\n [row]=\"row\"\n [buttonsAction]=\"getColumn(columnProp)?.viewType === 'buttonsAction'\"\n [listAction]=\"listAction\"\n [actions]=\"listAction\"\n (clickedButton)=\"actionListClicked($event,row)\">\n </app-button-actions>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ul class=\"mainTable__td__list\">\n <li *ngFor=\"let item of getListItems(row, columnProp)\">{{ item }}</li>\n </ul>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"getColumn(columnProp)?.translate; else noTranslate\">\n <span\n [attr.tabindex]=\"-1\"\n (click)=\"$event.stopPropagation(); emitRoutePage(row)\">\n {{ pageInfo.labelsSection + \".\" + extractFieldName(row, columnProp) | translate }}\n </span>\n </ng-container>\n <ng-template #noTranslate>\n <span\n [attr.tabindex]=\"-1\"\n (click)=\"$event.stopPropagation(); emitRoutePage(row)\"\n [innerText]='extractFieldName(row, columnProp)'></span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Mobile Card View -->\n <div class=\"mobile-cards-container\">\n <div *ngFor=\"let row of dataSource.data; let rowIndex = index\"\n class=\"mobile-card\"\n [attr.id]=\"'mobile-card-' + (row?.id || row?.key || '')\"\n [ngClass]=\"{\n 'mobile-card--highlight': selectedRowIndex == row.id || (pageInfo.groupByProperty && pageInfo.groupByValue?.includes(row[pageInfo.groupByProperty])),\n 'mobile-card--dark-highlight': isDarkHighlight(row)\n }\"\n (auxclick)=\"openNewTab(row)\"\n (click)=\"$event.stopPropagation(); onSelectItem(row)\">\n\n <!-- Mobile Card Header: ID/Name and Status -->\n <div class=\"mobile-card__header\">\n <div class=\"mobile-card__header-id\">\n <span class=\"mobile-card__id-text\">{{ extractFieldName(row, getMobileCardIdColumn()?.property || 'id') }}</span>\n </div>\n <div class=\"mobile-card__header-status\" *ngIf=\"getMobileCardStatusColumn()\">\n <button mat-button class=\"stateType {{ row[getMobileCardStatusColumn()?.property]}}\"\n [attr.id]=\"'mobile-btn-state-'+getMobileCardStatusColumn()?.property\">\n {{ labelKeyByValue(getMobileCardStatusColumn(), row) | translate}}\n </button>\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"mobile-card__divider\"></div>\n\n <!-- Mobile Card Body: Other columns -->\n <div class=\"mobile-card__body\">\n <div *ngFor=\"let column of getMobileCardColumns()\" class=\"mobile-card__row\">\n <div class=\"mobile-card__row-label\">\n <span>{{ labelKey(column) | translate }} :</span>\n </div>\n <div class=\"mobile-card__row-value\">\n <ng-container [ngSwitch]=\"column.type\">\n <ng-container *ngSwitchCase=\"'stateType'\">\n <button mat-button class=\"stateType {{ row[column.property]}}\"\n [attr.id]=\"'mobile-btn-state-'+column.property\">\n {{ labelKeyByValue(column, row) | translate}}\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{ extractFieldName(row, column.property) | date:'dd/MM/yyyy':'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'netAmount'\">\n <span class=\"mobile-card__amount-currency\">{{ row[column.currency] }}</span>\n <span class=\"mobile-card__amount-value\">{{ extractFieldName(row, column.property) | currency:'':'' }}</span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTime'\">\n {{ extractFieldName(row, column.property) | date : extractFormat(column):'UTC' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <small><sup class=\"mainTable__td__currency\">{{row[column.currency]}}</sup></small>\n {{ extractFieldName(row, column.property) | number : (column.digitInfo || '1.3-5') }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ul class=\"mainTable__td__list\">\n <li *ngFor=\"let item of getListItems(row, column.property)\">{{ item }}</li>\n </ul>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"column.translate; else noTranslate\">\n <span>{{ pageInfo.labelsSection + \".\" + extractFieldName(row, column.property) | translate }}</span>\n </ng-container>\n <ng-template #noTranslate>\n <span [innerText]='extractFieldName(row, column.property)'></span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Mobile Card Actions -->\n <div class=\"mobile-card__actions\" *ngIf=\"listAction && listAction.length > 0\">\n <app-button-actions\n [row]=\"row\"\n [buttonsAction]=\"true\"\n [listAction]=\"listAction\"\n [actions]=\"listAction\"\n (clickedButton)=\"actionListClicked($event,row)\">\n </app-button-actions>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noDataFound\" class=\"dataNotFound flex-column\">\n <img *ngIf=\"getDisplaySvgPath()\" [src]=\"getDisplaySvgPath()\" class=\"dataNotFound__icon\" alt=\"No data found\" />\n <span class=\"dataNotFound__title\">{{ getDisplayTitle() | translate}}</span>\n <span class=\"dataNotFound__subtitle\">{{ getDisplaySubtitle() | translate}}</span>\n </div>\n\n\n <div *ngIf=\"(dataSource.data?.length > 0 || customizedData) && !pageInfo.hidePagination\" class=\"main-pagination flex-row\">\n <ng-container *ngIf=\"enablePagination\">\n <div class=\"flex-column flex-100\">\n <app-paginator\n [currentPage]=\"pageIndex\"\n [totalItems]=\"totalElements\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"[5, 10, 25, 50]\"\n [mobileLoadMoreIncrement]=\"mobileLoadMoreIncrement\"\n [displayedItems]=\"mobileDisplayedItems || dataSource.data.length\"\n (pageChange)=\"onPageChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </app-paginator>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;width:100%;max-width:100%;box-sizing:border-box;container-type:inline-size;container-name:base-table}.baseTable{width:100%!important;max-width:100%!important;box-sizing:border-box}.flex-row{display:flex;flex-direction:row}.flex-column{display:flex;flex-direction:column;width:100%;max-width:100%;box-sizing:border-box}.flex-100{flex:1 1 100%}.flex-49{flex:0 0 49%}.flex-50{flex:0 0 50%}.align-start{justify-content:flex-start;align-items:flex-start}.align-center{justify-content:center;align-items:center}.align-end{justify-content:flex-end;align-items:flex-end}.gap-0{gap:0}.gap-5{gap:5px}.gap-10{gap:10px}.dataNotFound{display:flex;flex-direction:column;justify-content:center;align-items:center;height:auto;min-height:280px;text-align:center;margin-top:0;padding:40px 0}.dataNotFound__icon{height:auto;width:auto;max-width:200px;max-height:200px;margin-bottom:8px;object-fit:contain}.dataNotFound__title{color:#6a6a6a;font-size:20px;font-weight:700;margin-bottom:4px}.dataNotFound__subtitle{color:#6a6a6a;font-size:20px;font-weight:400}@media (max-width: 960px){.flex-column-sm{flex-direction:column}.align-center-sm{justify-content:center;align-items:flex-start}}.filter-row{display:flex!important;flex-direction:row!important;align-items:center!important;width:100%!important;max-width:100%!important;gap:16px!important;box-sizing:border-box;margin-top:20px;margin-bottom:16px;padding:0;flex-wrap:nowrap!important;min-width:0!important;min-height:48px!important;overflow:visible!important}.filter-row app-filter-builder{flex:1 1 auto!important;min-width:0!important;max-width:none!important;width:auto!important;flex-shrink:1!important;display:flex!important;align-items:center!important;overflow:visible!important}@container base-table (min-width: 769px) and (max-width: 900px){.filter-row{align-items:flex-start!important}:host ::ng-deep app-filter-builder .main-filter-builder .filterForm__row{align-items:flex-start!important}}.button-group{display:flex!important;flex-direction:row!important;align-items:center!important;justify-content:flex-end;gap:8px!important;flex-shrink:0!important;flex-grow:0!important;flex-basis:auto!important;height:46px!important;white-space:nowrap!important;z-index:1!important}.mainTable{margin-top:0!important}.btn-apply-filter{background:#fff!important;border:1px solid #3e627b!important;border-radius:8px!important;height:46px!important;min-width:120px!important;padding:0 16px!important;box-shadow:none!important}.btn-apply-filter .button-text{display:flex;align-items:center;justify-content:center;gap:4px;width:100%}.btn-apply-filter mat-icon{font-size:24px;width:24px;height:30px;color:#0d4261}.btn-apply-filter span{font-family:Lusail,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#0d4261;white-space:nowrap}.btn-apply-filter:hover{background:#fafafa!important}.btn-export{background:#fff!important;border:1px solid #0d4261!important;border-radius:8px!important;height:46px!important;min-width:109px!important;padding:0 16px!important;box-shadow:none!important;margin-bottom:7px!important}.btn-export .button-text{display:flex;align-items:center;justify-content:center;gap:4px;width:100%}.btn-export mat-icon{font-size:24px;width:24px;height:30px;color:#0d4261}.btn-export .arrow-icon{font-size:16px;width:16px;height:16px;margin-left:0}.btn-export span{font-family:Lusail,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#0d4261;white-space:nowrap}.btn-export:hover:not(:disabled){background:#fafafa!important}.btn-export:disabled,.btn-export.mat-mdc-button-disabled{opacity:.45;cursor:not-allowed;pointer-events:none}@container base-table (min-width: 769px) and (max-width: 900px){.filter-row .btn-export{margin-bottom:0!important}}.arrow-icon{font-size:16px;width:16px;height:16px}@media (max-width: 1024px){.button-group{width:auto}}@media (max-width: 768px){.filter-row{flex-direction:column;align-items:stretch}.button-group{display:none!important}.btn-export{width:100%}}.table-container{width:100%;overflow:hidden;background:#f7f7f7;box-sizing:border-box;display:flex;flex-direction:column}.table-header{display:flex;align-items:center;background:#f7f7f7;border:1px solid #f0eeee;max-height:48px;height:48px;margin-bottom:16px;border-radius:8px;overflow:hidden;width:100%;box-sizing:border-box;min-width:0}.table-header-cell{display:flex;align-items:center;max-height:48px;height:48px;padding:8px 16px;flex:1;min-width:100px;position:sticky;top:0;background:none;z-index:10;box-sizing:border-box}.table-header-cell.has-width{flex:0 0 auto!important;min-width:0!important;max-width:none!important}.table-header-cell:last-child{border-right:none}.table-header-cell.first-cell{border-top-left-radius:8px;border-bottom-left-radius:8px}.table-header-cell.last-cell{border-top-right-radius:8px;border-bottom-right-radius:8px}.table-header-cell.actions-cell{justify-content:center;text-align:center}.table-header-cell.actions-cell .table-header-content{justify-content:center}.table-header-cell.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.table-header-cell.sortable:hover{background:#fafafa}.table-header-content{display:flex;align-items:center;gap:8px;width:100%}.table-header-label{font-family:Lusail,sans-serif;font-weight:500;font-size:16px;line-height:1.2;color:#0d4261;white-space:nowrap}.sort-icon{font-size:18px;width:18px;height:18px;color:#5c5c5c;display:flex;align-items:center;justify-content:center;transition:color .2s}.sort-icon.sort-asc,.sort-icon.sort-desc{color:#0d4261}.table-body{display:flex;flex-direction:column;gap:8px;background:#f7f7f7}.table-row{display:flex;align-items:center;min-height:48px;background:#fff;border-bottom:1px solid #f0eeee;transition:background-color .2s;border-radius:8px;overflow:hidden;width:100%;box-sizing:border-box;min-width:0}.table-row:hover{background:#fafafa}.table-row--highlight{background:#f0f8ff}.table-row--dark-highlight{background:#e8f4f8}.table-row .table-cell.first-cell{border-top-left-radius:8px;border-bottom-left-radius:8px}.table-row .table-cell.last-cell{border-top-right-radius:8px;border-bottom-right-radius:8px}:host-context([dir=rtl]) .table-row,:host-context(body.rtl) .table-row{overflow:visible;align-items:center}:host-context([dir=rtl]) .table-cell:not(.actions-cell),:host-context(body.rtl) .table-cell:not(.actions-cell){overflow:visible;align-items:center;line-height:1.7;padding-top:10px;padding-bottom:10px}:host-context([dir=rtl]) .table-cell:not(.actions-cell) span,:host-context(body.rtl) .table-cell:not(.actions-cell) span{display:inline;overflow:visible;line-height:1.7;-webkit-line-clamp:unset;line-clamp:unset}.table-cell{display:flex;align-items:center;min-height:48px;max-height:none;padding:8px 16px;flex:1;min-width:100px;font-family:Lusail,sans-serif;font-weight:400;font-size:16px;line-height:1.2;color:#000;box-sizing:border-box}.table-cell.has-width{flex:0 0 auto!important;min-width:0!important;max-width:none!important}.table-cell:last-child{border-right:none}.table-cell.actions-cell{justify-content:center;text-align:center}.mobile-cards-container{display:none;flex-direction:column;gap:12px;width:100%;box-sizing:border-box}.mobile-card{background:#fff;border:1px solid #f0eeee;border-radius:8px;padding:12px 20px;display:flex;flex-direction:column;gap:4px;cursor:pointer;transition:background-color .2s;box-sizing:border-box;width:100%}.mobile-card:hover{background:#fafafa}.mobile-card--highlight{background:#f0f8ff}.mobile-card--dark-highlight{background:#e8f4f8}.mobile-card__header{display:flex;align-items:center;justify-content:space-between;height:48px;width:100%;box-sizing:border-box}.mobile-card__header-id{display:flex;flex-direction:column;justify-content:center;flex:1}.mobile-card__id-text{font-family:Lusail,sans-serif;font-weight:700;font-size:14px;line-height:1.2;color:#222;text-align:left;white-space:nowrap}.mobile-card__header-status{display:flex;align-items:center;justify-content:flex-end;flex-shrink:0}.mobile-card__divider{height:.347px;width:100%;background:#f0eeee;margin:0;flex-shrink:0}.mobile-card__body{display:flex;flex-direction:column;gap:0;width:100%;box-sizing:border-box}.mobile-card__row{display:flex;align-items:center;justify-content:space-between;height:40px;width:100%;overflow:hidden;box-sizing:border-box}.mobile-card__row-label{display:flex;flex-direction:column;justify-content:center;flex-shrink:0}.mobile-card__row-label span{font-family:Lusail,sans-serif;font-weight:400;font-size:14px;line-height:1.2;color:#222;white-space:nowrap}.mobile-card__row-value{display:flex;flex-direction:column;justify-content:center;flex-shrink:0;text-align:right}.mobile-card__row-value span{font-family:Lusail,sans-serif;font-weight:400;font-size:14px;line-height:1.2;color:#222;white-space:nowrap}.mobile-card__amount-currency{font-family:Lusail,sans-serif;font-weight:400;font-size:14px;line-height:1.2;color:#222;display:inline-block}.mobile-card__amount-value{font-family:Lusail,sans-serif;font-weight:700;font-size:14px;line-height:1.2;color:#222;display:inline-block;margin-left:6px;margin-right:6px}.mobile-card__actions{border-top:1px solid #f0eeee;padding-top:8px;margin-top:4px;display:flex;align-items:center;justify-content:center;min-height:48px;max-height:48px;width:100%;box-sizing:border-box}@media (max-width: 768px){.table-container{display:none}.mobile-cards-container{display:flex}}@media (min-width: 769px){.mobile-cards-container{display:none}.table-container{display:flex}}:host ::ng-deep button.mat-mdc-button.stateType,:host ::ng-deep button.mdc-button.stateType{white-space:normal!important;height:auto!important;min-height:28px!important;max-width:100%!important;align-items:center!important;justify-content:center!important;cursor:default!important}:host ::ng-deep button.mat-mdc-button.stateType .mdc-button__label,:host ::ng-deep button.mdc-button.stateType .mdc-button__label{white-space:normal!important;display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:2!important;line-clamp:2!important;overflow:hidden!important;word-break:break-word!important;line-height:1.25!important;max-width:100%!important;text-align:center!important}@media (max-width: 450px){.mobile-card__header{flex-direction:column;justify-content:flex-start;height:auto;width:100%;box-sizing:border-box;gap:8px}}.mainTable__td__list{margin:4px 0;padding:4px 8px 4px 1.25rem;list-style-type:disc}.mainTable__td__list li{word-break:break-word;line-height:1.35;padding:2px 0}.mainTable__td__list li+li{margin-top:2px}.table-cell:has(.mainTable__td__list){align-items:flex-start;padding-top:8px;padding-bottom:8px}.mobile-card__row-value:has(.mainTable__td__list){align-items:flex-start;padding:4px 0}\n"] }]
|
|
4183
4183
|
}], ctorParameters: () => [{ type: BackendService }, { type: i2.TranslateService }, { type: ShareDataService }, { type: i4$2.BreakpointObserver }, { type: undefined, decorators: [{
|
|
4184
4184
|
type: Inject,
|
|
4185
4185
|
args: ['securityManager']
|