@libs-ui/components-table 0.2.357-0 → 0.2.357-10
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/README.md +130 -97
- package/esm2022/interfaces/function-control-event.interface.mjs +1 -1
- package/esm2022/table.component.mjs +2 -1
- package/fesm2022/libs-ui-components-table.mjs +2 -1
- package/fesm2022/libs-ui-components-table.mjs.map +1 -1
- package/interfaces/function-control-event.interface.d.ts +1 -0
- package/package.json +28 -28
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-table.mjs","sources":["../../../../../libs-ui/components/table/src/pipes/calculator-column.pipe.ts","../../../../../libs-ui/components/table/src/pipes/check-item-hight-light.pipe.ts","../../../../../libs-ui/components/table/src/templates/templates.component.ts","../../../../../libs-ui/components/table/src/templates/templates.component.html","../../../../../libs-ui/components/table/src/table.component.ts","../../../../../libs-ui/components/table/src/table.component.html","../../../../../libs-ui/components/table/src/interfaces/button-action-event.interface.ts","../../../../../libs-ui/components/table/src/interfaces/button-bar-event.interface.ts","../../../../../libs-ui/components/table/src/interfaces/template-config.interface.ts","../../../../../libs-ui/components/table/src/libs-ui-components-table.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { ITableHeaderConfig } from '../interfaces/table-config.interface';\nimport { TYPE_OBJECT } from '@libs-ui/interfaces-types';\n@Pipe({\n name: 'LibsUiTableCalculatorColumnPipe',\n standalone: true,\n})\nexport class LibsUiTableCalculatorColumnPipe implements PipeTransform {\n transform(header: ITableHeaderConfig | undefined, ignoreCalculatorWidthHeader: boolean, offsetWidth: number, headerLeftConfig?: Array<ITableHeaderConfig>, headerRightConfig?: Array<ITableHeaderConfig>): TYPE_OBJECT | undefined {\n if (!header?.ngStyle) {\n return undefined;\n }\n if (ignoreCalculatorWidthHeader) {\n return header.ngStyle;\n }\n\n const mixHeaderConfig = [...(headerLeftConfig || []), ...(headerRightConfig || [])];\n\n let totalPxWidthHeader = mixHeaderConfig.reduce((acc, curr) => acc + this.getWidthPxOfStyle(curr), 0);\n const totalPercentWidthHeader = mixHeaderConfig.reduce((acc, curr) => acc + this.getWidthPercentOfStyle(curr), 0);\n const totalWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader = mixHeaderConfig.reduce((acc, curr) => acc + (curr.keepWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader ? this.getWidthPxOfStyle(curr) : 0), 0);\n\n if (mixHeaderConfig.some((header) => header.isShowIndexOnRow)) {\n offsetWidth -= 50;\n }\n\n if (totalWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader) {\n offsetWidth -= totalWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader;\n totalPxWidthHeader -= totalWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader;\n }\n\n let percent = this.getWidthPercentOfStyle(header);\n if (percent) {\n offsetWidth -= totalPxWidthHeader;\n const percentDivide = (totalPercentWidthHeader - 100) / mixHeaderConfig.length;\n percent -= percentDivide;\n const widthCalculator = (percent / 100) * offsetWidth;\n return this.getStyleUpdate(widthCalculator, header.ngStyle);\n }\n\n const width = this.getWidthPxOfStyle(header);\n if (totalPxWidthHeader > offsetWidth || header.keepWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader || totalPercentWidthHeader) {\n return this.getStyleUpdate(width, header.ngStyle);\n }\n const widthCalculator = (width / totalPxWidthHeader) * offsetWidth;\n return this.getStyleUpdate(widthCalculator, header.ngStyle);\n }\n\n private getWidthPxOfStyle(headerGetWidth: ITableHeaderConfig): number {\n let { flex, width, maxWidth } = headerGetWidth.ngStyle || {};\n if (flex?.includes('%') || width?.includes('%') || maxWidth?.includes('%')) {\n return 0;\n }\n width = parseInt(width || '0');\n maxWidth = parseInt(maxWidth || '0');\n flex = parseInt((flex || '0').split(' ').pop() || '0');\n\n if (!flex && !width && !maxWidth) {\n return 0;\n }\n const widthMax = Math.max(width, maxWidth, flex);\n return widthMax;\n }\n\n private getWidthPercentOfStyle(headerGetWidth: ITableHeaderConfig): number {\n let { flex, width, maxWidth } = headerGetWidth.ngStyle || {};\n if (flex?.includes('px') || width?.includes('px') || maxWidth?.includes('px')) {\n return 0;\n }\n width = parseInt(width || '0');\n maxWidth = parseInt(maxWidth || '0');\n flex = parseInt((flex || '0').split(' ').pop() || '0');\n if (!flex && !width && !maxWidth) {\n return 0;\n }\n const widthMax = Math.max(width, maxWidth, flex);\n return widthMax;\n }\n\n private getStyleUpdate(widthCalculator: number, ngStyle: TYPE_OBJECT) {\n return {\n ...ngStyle,\n flex: `0 0 ${widthCalculator}px`,\n width: `${widthCalculator}px`,\n maxWidth: `${widthCalculator}px`,\n };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TYPE_ITEM_DATA_TABLE } from '../interfaces/table.type';\n@Pipe({\n name: 'LibsUiTableCheckItemHightLightPipe',\n standalone: true,\n})\nexport class LibsUiTableCheckItemHightLightPipe implements PipeTransform {\n transform(item: TYPE_ITEM_DATA_TABLE, itemsHightLight: Array<TYPE_ITEM_DATA_TABLE>): boolean {\n return itemsHightLight.some((itemHightLight) => itemHightLight === item);\n }\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AsyncPipe, NgClass, NgComponentOutlet, NgStyle } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, OnDestroy, signal } from '@angular/core';\nimport { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';\nimport { LibsUiComponentsBadgeComponent } from '@libs-ui/components-badge';\nimport { IButton, LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsButtonsStatusComponent } from '@libs-ui/components-buttons-status';\nimport { IDropdownFunctionControlEvent, IEmitMultiKey, IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { LibsUiComponentsLineClampComponent } from '@libs-ui/components-line-clamp';\nimport { LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { ISwitchEvent, LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';\nimport { LibsUiPipesCallFunctionInTemplatePipe } from '@libs-ui/pipes-call-function-in-template';\nimport { LibsUiPipesCloneObjectPipe } from '@libs-ui/pipes-clone-object';\nimport { LibsUiPipesGetValueOfObjectPipe } from '@libs-ui/pipes-get-value-of-object';\nimport { LibsUiPipesSecurityTrustPipe } from '@libs-ui/pipes-security-trust';\nimport { convertObjectToSignal, get } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TYPE_ITEM_DATA_TABLE } from '../interfaces';\nimport { ITableFieldTemplateConfig, ITableTemplateConfig } from '../interfaces/template-config.interface';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-table-templates',\n templateUrl: './templates.component.html',\n styleUrls: ['./templates.component.scss'],\n standalone: true,\n imports: [\n NgStyle,\n NgClass,\n TranslateModule,\n AsyncPipe,\n NgComponentOutlet,\n LibsUiPipesGetValueOfObjectPipe,\n LibsUiComponentsAvatarComponent,\n LibsUiPipesCallFunctionInTemplatePipe,\n LibsUiPipesSecurityTrustPipe,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsButtonsStatusComponent,\n LibsUiComponentsSwitchComponent,\n LibsUiPipesCloneObjectPipe,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsLineClampComponent,\n LibsUiComponentsDropdownComponent,\n LibsUiComponentsBadgeComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibsUiComponentsTableTemplatesComponent implements OnDestroy {\n private lockClick!: boolean;\n private lockClickTimeoutId: ReturnType<typeof setTimeout> | undefined;\n private readonly functionControls = new Map<number, IDropdownFunctionControlEvent>();\n protected isImageError = signal<boolean | undefined>(undefined);\n\n readonly isHover = input<boolean>();\n readonly configs = input<Array<ITableTemplateConfig>>();\n readonly templateCssWrapper = input<string>();\n readonly item = input.required<TYPE_ITEM_DATA_TABLE>();\n\n protected templateCssWrapperComputed = computed(() => this.templateCssWrapper() || '');\n\n protected async handlerItemClick(event: Event | TYPE_POPOVER_EVENT | undefined, config: ITableFieldTemplateConfig) {\n if (event instanceof Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (typeof event === 'string' && event !== 'click') {\n return;\n }\n await this.handleLockClick(async () => {\n if (config?.action) {\n config.action(get(this.item(), config.field as any), this.item());\n }\n });\n }\n\n protected async clickButtonAction(button: IButton) {\n await this.handleLockClick(async () => {\n button.action?.({ item: this.item() });\n });\n }\n\n protected async handlerSwitch(switchItem: ISwitchEvent, config: ITableFieldTemplateConfig) {\n await this.handleLockClick(async () => {\n config?.switchAction?.(switchItem, this.item());\n });\n }\n\n protected async handlerSelectItemDropdown(fieldConfig: ITableFieldTemplateConfig, index: number, data?: IEmitSelectKey) {\n if (!data) {\n return;\n }\n await this.handleLockClick(async () => {\n fieldConfig?.action?.(data.key, data.item, this.item());\n this.functionControls?.get(index)?.reset();\n this.functionControls?.get(index)?.removeList();\n });\n }\n\n protected async handlerSelectItemsDropdown(fieldConfig: ITableFieldTemplateConfig, index: number, data?: IEmitMultiKey) {\n if (!data) {\n return;\n }\n await this.handleLockClick(async () => {\n fieldConfig?.action?.(data.keys, convertObjectToSignal(data.mapKeys, false), this.item());\n this.functionControls?.get(index)?.reset();\n });\n }\n\n protected async handlerImageError(event: Event) {\n event.stopPropagation();\n this.isImageError.set(true);\n }\n\n protected async handlerFunctionControl(event: IDropdownFunctionControlEvent, index: number) {\n this.functionControls.set(index, event);\n }\n\n private async handleLockClick(callback: () => Promise<void>) {\n if (this.lockClick) return;\n this.lockClick = true;\n try {\n await callback();\n } catch (error) {\n console.error(error);\n } finally {\n this.lockClickTimeoutId = setTimeout(() => {\n this.lockClick = false;\n }, 250);\n }\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.lockClickTimeoutId);\n this.functionControls.clear();\n }\n}\n","@if (configs(); as configs) {\n @if (item(); as item) {\n <div class=\"libs-ui-table-template {{ templateCssWrapperComputed() }}\">\n @for (config of configs; track config) {\n @if (config.fieldsConfig) {\n <div [class]=\"config.cssWrapper\">\n @for (fieldConfig of config.fieldsConfig; track fieldConfig; let index = $index) {\n @let constHtmlNgStyle = fieldConfig.getNgStyle ? (item()[fieldConfig.field] | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getNgStyle : item() | async) : fieldConfig.ngStyle || {};\n @let constHtmlNgClass = fieldConfig.getNgClass ? (item()[fieldConfig.field] | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getNgClass : item() | async) : fieldConfig.ngClass || {};\n @if (!fieldConfig.rows && !fieldConfig.getComponentOutlet) {\n @switch (fieldConfig.instance) {\n @case ('tooltip') {\n @if (fieldConfig.tooltip || {}; as tooltip) {\n <span\n LibsUiComponentsPopoverDirective\n [type]=\"tooltip.type || 'text'\"\n [mode]=\"tooltip.mode || 'hover'\"\n [isAddContentToParentDocument]=\"tooltip.isAddContentToParentDocument || false\"\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [classInclude]=\"tooltip.classInclude || ' '\"\n [ignoreShowPopover]=\"tooltip.ignoreShowPopover || false\"\n [config]=\"\n (fieldConfig.getTooltipConfig\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getTooltipConfig : item() | async)\n : (tooltip.config | LibsUiPipesCloneObjectPipe)\n ) | translate\n \"\n [innerHTML]=\"\n (fieldConfig.field ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true) : tooltip.dataView)\n | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item()\n | async\n | translate\n | LibsUiPipesSecurityTrustPipe: 'html' : false\n | async\n \"\n (outEvent)=\"handlerItemClick($event, fieldConfig)\"></span>\n }\n }\n @case ('image') {\n @if (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getImageSrc : item() : isImageError() | async; as linkImage) {\n @if (linkImage !== ' ') {\n <img\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [src]=\"linkImage\"\n alt=\"\"\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerItemClick($event, fieldConfig)\"\n (keydown.enter)=\"handlerItemClick($event, fieldConfig)\" />\n }\n }\n }\n\n @case ('avatar') {\n @let constHtmlAvatarConfig =\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getAvatarConfig : item() : undefined : { valueIsEmpty: undefined } | async;\n @if (constHtmlAvatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"constHtmlAvatarConfig.typeShape || 'circle'\"\n [classInclude]=\"constHtmlAvatarConfig.classInclude\"\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [size]=\"constHtmlAvatarConfig.size || 32\"\n [linkAvatar]=\"constHtmlAvatarConfig.linkAvatar\"\n [linkAvatarError]=\"constHtmlAvatarConfig.linkAvatarError\"\n [idGenColor]=\"constHtmlAvatarConfig.idGenColor\"\n [getLastTextAfterSpace]=\"constHtmlAvatarConfig.getLastTextAfterSpace\"\n [textAvatar]=\"constHtmlAvatarConfig.textAvatar\" />\n }\n }\n\n @case ('buttons') {\n @if ((fieldConfig.buttons && fieldConfig.buttons.length) || fieldConfig.getButtonsByItem) {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [class.invisible]=\"!isHover() && fieldConfig.showButtonHoverMode\">\n @for (button of fieldConfig.buttons || (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getButtonsByItem : item() | async); track button) {\n <libs_ui-components-buttons-button\n [type]=\"button().type || 'button-primary'\"\n [sizeButton]=\"button().sizeButton || 'smaller'\"\n [disable]=\"\n (button().disable ?? fieldConfig.getDisable) ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisable : item() | async) : false\n \"\n [label]=\"button().label || ' '\"\n [classIconLeft]=\"button().classIconLeft || ''\"\n [classIconRight]=\"button().classIconRight || ''\"\n [popover]=\"button().popover || {}\"\n [classInclude]=\"button().classInclude || ''\"\n [ignorePointerEvent]=\"button().ignorePointerEvent\"\n [iconOnlyType]=\"button().iconOnlyType\"\n (outClick)=\"clickButtonAction(button())\" />\n }\n </div>\n }\n }\n\n @case ('button-status') {\n <libs_ui-components-buttons-status\n [config]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async\"\n (click)=\"handlerItemClick($event, fieldConfig)\"\n (keydown.enter)=\"handlerItemClick($event, fieldConfig)\" />\n }\n\n @case ('switch') {\n <libs_ui-components-switch\n [active]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getActiveValueSwitch : item() | async\"\n [disable]=\"fieldConfig.getDisableValueSwitch ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisableValueSwitch : item() | async) : false\"\n (outSwitch)=\"handlerSwitch($event, fieldConfig)\" />\n }\n\n @case (fieldConfig.instance === 'other-action-show-popup' || fieldConfig.instance === 'badge' || fieldConfig.instance === 'button-action-show-popup' ? fieldConfig.instance : '') {\n @if ((item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async) !== ' ') {\n @let constHtmlDisableDropdown =\n (fieldConfig.dropdownConfig?.disable ?? fieldConfig.getDisable)\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisable : item() | async)\n : false;\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [class.ml-[8px]]=\"!fieldConfig.ignoreClassMarginLeft\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{\n widthByParent: false,\n ignoreArrow: fieldConfig.dropdownConfig?.ignoreArrow || false,\n maxHeight: fieldConfig.dropdownConfig?.maxHeight || 2048,\n paddingLeftItem: fieldConfig.dropdownConfig?.paddingLeftItem ?? true,\n classInclude: fieldConfig.dropdownConfig?.classIncludePopup || 'w-[250px]',\n position: fieldConfig.dropdownConfig?.position || {\n mode: 'center',\n distance: 0,\n },\n }\"\n [zIndex]=\"fieldConfig.dropdownConfig?.zIndex\"\n [listConfig]=\"\n fieldConfig.dropdownConfig?.getListConfig\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.dropdownConfig?.getListConfig : item() | async)\n : fieldConfig.dropdownConfig?.listConfig\n \"\n [listBackgroundCustom]=\"fieldConfig.dropdownConfig?.listBackgroundListCustom\"\n [listMaxItemShow]=\"fieldConfig.dropdownConfig?.listMaxItemShow || 5\"\n [listKeysDisable]=\"fieldConfig.dropdownConfig?.listKeysDisableItem\"\n [listHiddenInputSearch]=\"fieldConfig.dropdownConfig?.listHiddenInputSearch\"\n [disable]=\"constHtmlDisableDropdown\"\n (outFunctionsControl)=\"handlerFunctionControl($event, index)\"\n (outSelectKey)=\"handlerSelectItemDropdown(fieldConfig, index, $event)\"\n (outSelectMultiKey)=\"handlerSelectItemsDropdown(fieldConfig, index, $event)\">\n @if (fieldConfig.instance === 'other-action-show-popup') {\n <div\n [innerHTML]=\"\n item()\n | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true\n | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item()\n | async\n | translate\n | LibsUiPipesSecurityTrustPipe: 'html' : false\n | async\n \"></div>\n }\n @if (fieldConfig.instance === 'badge') {\n @let constHtmlDataBadge = item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async;\n @if (constHtmlDataBadge > 0) {\n <libs_ui-components-badge\n [active]=\"true\"\n [ignoreMarginDefault]=\"true\"\n mode=\"+x\"\n [count]=\"constHtmlDataBadge\"\n [maxCount]=\"99\" />\n }\n }\n @if (fieldConfig.instance === 'button-action-show-popup') {\n <libs_ui-components-buttons-button\n [type]=\"fieldConfig?.dropdownConfig?.button()?.type || 'button-primary'\"\n [sizeButton]=\"fieldConfig?.dropdownConfig?.button()?.sizeButton || 'smaller'\"\n [disable]=\"fieldConfig?.dropdownConfig?.button()?.disable ?? constHtmlDisableDropdown\"\n [label]=\"fieldConfig?.dropdownConfig?.button()?.label || ' '\"\n [classIconLeft]=\"fieldConfig?.dropdownConfig?.button()?.classIconLeft || 'libs-ui-icon-more-vertical rotate-[90deg] mr-0'\"\n [classIconRight]=\"fieldConfig?.dropdownConfig?.button()?.classIconRight || ''\"\n [popover]=\"fieldConfig?.dropdownConfig?.button()?.popover || {}\"\n [classInclude]=\"fieldConfig?.dropdownConfig?.button()?.classInclude || ''\"\n [ignoreStopPropagationEvent]=\"true\" />\n }\n </libs_ui-components-dropdown>\n </div>\n }\n }\n\n @case ('line-clamp') {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\">\n @if (fieldConfig.lineClampConfig; as lineClampConfig) {\n <libs_ui-components-line_clamp\n [ignoreShowButtonCollapseExpand]=\"lineClampConfig.ignoreShowButtonCollapseExpand ?? true\"\n [showTooltip]=\"lineClampConfig.showTooltip ?? true\"\n [maxHeight]=\"lineClampConfig.maxHeight || 36\"\n [maxWidthTooltip]=\"lineClampConfig.maxWidthTooltip || 200\"\n [maxHeightTooltip]=\"lineClampConfig.maxHeightTooltip || 100\"\n [ngClassObject]=\"lineClampConfig.ngClassObject ?? { 'libs-ui-line-clamp-content libs-ui-font-h5r': true }\"\n [isInnerText]=\"lineClampConfig.isInnerText || false\"\n [ignoreStopPropagationTooltipEvent]=\"true\"\n [content]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async\"\n (click)=\"handlerItemClick($event, fieldConfig)\"\n (keydown.enter)=\"handlerItemClick($event, fieldConfig)\" />\n }\n </div>\n }\n\n @case ('shape-style') {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [innerHTML]=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate | LibsUiPipesSecurityTrustPipe: 'html' : false | async\n \"\n (click)=\"handlerItemClick($event, fieldConfig)\"\n (keydown.enter)=\"handlerItemClick($event, fieldConfig)\"></div>\n }\n @default {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [innerHTML]=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate | LibsUiPipesSecurityTrustPipe: 'html' : true | async\n \"\n (click)=\"handlerItemClick($event, fieldConfig)\"\n (keydown.enter)=\"handlerItemClick($event, fieldConfig)\"></div>\n }\n }\n } @else {\n @if (fieldConfig.rows) {\n <div\n class=\"w-full flex relative {{ fieldConfig.rowsTemplateCssWrapper }}\"\n [style.height.px]=\"rowRef.clientHeight\">\n <div\n #rowRef\n class=\"w-full flex absolute {{ fieldConfig.rowsTemplateCssWrapper }}\">\n <libs_ui-components-table-templates\n class=\"flex w-full\"\n [item]=\"item\"\n [configs]=\"fieldConfig.rows\" />\n </div>\n </div>\n } @else {\n <ng-container\n *ngComponentOutlet=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getComponentOutlet : item() | async;\n inputs: undefined | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDataComponentOutlet : item() : fieldConfig.field : { valueIsEmpty: { item: item() } } | async\n \" />\n }\n }\n }\n </div>\n }\n }\n </div>\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AsyncPipe, NgClass, NgComponentOutlet, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { HttpParams } from '@angular/common/http';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, DestroyRef, effect, ElementRef, inject, input, OnDestroy, OnInit, output, signal, untracked, viewChild, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { VirtualScrollerComponent, VirtualScrollerModule } from '@iharbeck/ngx-virtual-scroller';\nimport { IButton, LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { ISort, LibsUiComponentsButtonsSortArrowComponent } from '@libs-ui/components-buttons-sort';\nimport { ICheckboxItem } from '@libs-ui/components-checkbox-group';\nimport { ICheckboxEvent, LibsUiComponentsCheckboxSingleComponent } from '@libs-ui/components-checkbox-single';\nimport { IDropdownFunctionControlEvent, IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { IPaginationConfig, LibsUiComponentsPaginationComponent } from '@libs-ui/components-pagination';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { LibsUiScrollMeasureItemDirectionHorizontalDirective } from '@libs-ui/components-scroll-measure-items-direction-horizontal';\nimport { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';\nimport { LibsUiComponentsSpinnerComponent } from '@libs-ui/components-spinner';\nimport { LibsUiIconsGetIconComponentPipe } from '@libs-ui/icons';\nimport { IHttpResponseError, IPaging, TYPE_OBJECT, TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiPipesCallFunctionInTemplatePipe } from '@libs-ui/pipes-call-function-in-template';\nimport { LibsUiPipesCheckSelectedByKeyPipe } from '@libs-ui/pipes-check-selected-by-key';\nimport { LibsUiPipesConvertObjectToSignalPipe } from '@libs-ui/pipes-convert-object-to-signal';\nimport { IHttpRequestConfig, LibsUiHttpRequestService, returnListObject } from '@libs-ui/services-http-request';\nimport { cloneDeep, convertObjectToSignal, deleteUnicode, get, set, viewDataNumberByLanguage } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { fromEvent, lastValueFrom, of, timer } from 'rxjs';\nimport { auditTime } from 'rxjs/operators';\nimport {\n IButtonBarEvent,\n IConfigSelectMoreItem,\n IConfigTemplateItemCollapseExpand,\n ILoadMoreEvent,\n ISortEvent,\n ITableFooterConfig,\n ITableHeaderConfig,\n TYPE_DATA_FILTER_TABLE,\n TYPE_DATA_TABLE,\n TYPE_ITEM_DATA_TABLE,\n TYPE_NEW_DATA_TABLE,\n TYPE_TABLE_FILTER,\n} from './interfaces';\nimport { ITableFunctionControlEvent } from './interfaces/function-control-event.interface';\nimport { ITableNoDataConfig } from './interfaces/no-data-config.interface';\nimport { LibsUiTableCalculatorColumnPipe } from './pipes/calculator-column.pipe';\nimport { LibsUiTableCheckItemHightLightPipe } from './pipes/check-item-hight-light.pipe';\nimport { LibsUiComponentsTableTemplatesComponent } from './templates/templates.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n NgStyle,\n AsyncPipe,\n NgTemplateOutlet,\n NgComponentOutlet,\n LibsUiComponentsTableTemplatesComponent,\n TranslateModule,\n VirtualScrollerModule,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiPipesConvertObjectToSignalPipe,\n LibsUiComponentsDropdownComponent,\n LibsUiComponentsButtonsSortArrowComponent,\n LibsUiComponentsPaginationComponent,\n LibsUiComponentsCheckboxSingleComponent,\n LibsUiTableCalculatorColumnPipe,\n LibsUiComponentsSpinnerComponent,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsScrollOverlayDirective,\n LibsUiIconsGetIconComponentPipe,\n LibsUiPipesCallFunctionInTemplatePipe,\n LibsUiPipesCheckSelectedByKeyPipe,\n LibsUiTableCheckItemHightLightPipe,\n LibsUiScrollMeasureItemDirectionHorizontalDirective,\n ],\n})\nexport class LibsUiComponentsTableComponent implements OnInit, OnDestroy {\n /** GROUP 1 — private non-signal */\n private functionControlSelectMoreItem?: IDropdownFunctionControlEvent;\n\n /** GROUP 2 — protected non-signal */\n protected itemOfIndexHover?: TYPE_ITEM_DATA_TABLE;\n\n /** GROUP 3 — private signal */\n private readonly moreItemPopoverConfig = signal({ zIndex: 1200 });\n // CONVENTION-EXCEPT: any — IListConfigItemText không được export, WritableSignal<any> tương thích\n private readonly moreItemTextConfig = signal<any>({\n fieldKey: 'key',\n ignoreIconSelected: true,\n getValue: undefined,\n configLabelPopover: this.moreItemPopoverConfig,\n });\n private readonly moreItemHttpData = signal<IHttpRequestConfig>({\n objectInstance: returnListObject(),\n functionName: 'list',\n argumentsValue: [],\n });\n private readonly hasScroll = signal<boolean>(false);\n private readonly instanceSort = signal<ISort | undefined>(undefined);\n private readonly pagingStore = signal<IPaging | undefined>(undefined);\n private readonly loadedLastItem = signal<boolean>(false);\n private readonly storeParamsCallApi = signal<TYPE_OBJECT>({});\n private readonly timeoutLeaveItem = signal<number | undefined>(undefined);\n private readonly mouseEnterHeader = signal<boolean>(false);\n private readonly stores = signal<Array<WritableSignal<TYPE_OBJECT>>>([]);\n private readonly totalItemInBackend = signal<number>(0);\n\n /** GROUP 4 — protected signal */\n protected keysSelected = signal<Array<any>>([]);\n protected loading = signal<boolean>(false);\n protected items = signal<Array<WritableSignal<TYPE_OBJECT>>>([]);\n protected itemFooter = signal<TYPE_OBJECT | undefined>(undefined);\n protected keySearch = signal<string>('');\n protected itemsHightLight = signal<Array<TYPE_ITEM_DATA_TABLE>>([]);\n protected headerRightViewPort = signal<Array<ITableHeaderConfig>>([]);\n protected paddingLeftHeaderRight = signal<number>(0);\n protected footerRightViewPort = signal<Array<ITableFooterConfig>>([]);\n\n /** GROUP 5 — input() */\n readonly optimizeTableRenderByOnViewport = input<boolean>();\n readonly timeHighlighNewItem = input<number, number | undefined>(2000, { transform: (val) => val ?? 2000 });\n readonly headerLeft = input<Array<ITableHeaderConfig>, Array<ITableHeaderConfig> | undefined>([], { transform: (val) => val ?? [] });\n readonly headerRight = input<Array<ITableHeaderConfig>, Array<ITableHeaderConfig> | undefined>([], { transform: (val) => val ?? [] });\n readonly ignoreCalculatorWidthHeader = input<{\n headerLeft?: boolean;\n headerRight?: boolean;\n }>();\n readonly configTemplateItemCollapseExpand = input<IConfigTemplateItemCollapseExpand>();\n readonly showFooter = input<boolean>();\n readonly ignoreBorderFooter = input<boolean>();\n readonly customPositionFooter = input<'top' | 'bottom', 'top' | 'bottom' | undefined>('bottom', { transform: (val) => val ?? 'bottom' });\n readonly footerLeft = input<Array<ITableFooterConfig> | undefined>();\n readonly footerRight = input<Array<ITableFooterConfig> | undefined>();\n readonly disableCheckbox = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly enableUnequalChildrenSizes = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly bufferAmount = input<number, number | undefined>(5, {\n transform: (val) => {\n if (!val) return 5;\n return val > 25 ? 25 : val;\n },\n });\n readonly totalItem = input<number>();\n readonly isDashBorder = input<boolean>();\n readonly classHeaderContainerInclude = input<string>();\n readonly classHeaderLeftInclude = input<string>();\n readonly classBodyInclude = input<string, string | undefined>('', { transform: (val) => val ?? '' });\n readonly classFooterInclude = input<string, string | undefined>('', { transform: (val) => val ?? '' });\n readonly classTableContainerInclude = input<string, string | undefined>('', { transform: (val) => val ?? '' });\n readonly classBarInclude = input<string>('justify-between mb-[16px]');\n\n readonly fieldKey = input<string, string | undefined>('id', { transform: (val) => val || 'id' }); // tên field định danh item của listDatas\n readonly defaultKeysSelected = input<Array<any>>();\n readonly labelBarNoSelectItem = input<string>(`i18n_total_quantity`); // sử dụng để hiên thị khi tích chọn item\n readonly labelBarButtons = input<string, string | undefined>('i18n_number_item_selected', { transform: (val) => val || 'i18n_number_item_selected' }); // sử dụng để hiên thị khi tích chọn item\n readonly classLabelBarButtons = input<string, string | undefined>('', { transform: (val) => val ?? '' }); // sử dụng để hiên thị khi tích chọn item\n readonly barButtons = input<Array<IButton>>();\n readonly sortLocal = input<boolean>(); // trường hợp nếu sortLocal này không đáp ứng được nghiệp vụ thì mới cân nhắc sử dụng filterLocal\n readonly filterOrSortLocal = input<TYPE_TABLE_FILTER>();\n readonly httpRequestData = input<IHttpRequestConfig>();\n readonly httpRequestDataFooter = input<IHttpRequestConfig>();\n readonly newData = input<TYPE_NEW_DATA_TABLE>();\n readonly filter = input<TYPE_DATA_FILTER_TABLE, TYPE_DATA_FILTER_TABLE | undefined>({ filterData: {} }, { transform: (val) => val ?? { filterData: {} } });\n readonly ignoreBar = input<boolean>();\n readonly classLabelBarNoSelectItem = input<string>();\n readonly ignoreClassBgHeader = input<boolean>();\n readonly noDataConfig = input<ITableNoDataConfig, ITableNoDataConfig | undefined>(\n { textNoData: 'i18n_no_data_yet', textSearchNoData: 'i18n_no_result' },\n { transform: (val) => val || { textNoData: 'i18n_no_data_yet', textSearchNoData: 'i18n_no_result' } }\n );\n readonly showScrollTablePinnedIfNoData = input<boolean>();\n readonly ignoreBorderItemLast = input<boolean>();\n readonly isHiddenHeaderWhenNodata = input<boolean>();\n readonly maxItemSelected = input<number, number | undefined>(100, { transform: (val) => val ?? 100 });\n readonly configSelectMoreItem = input<IConfigSelectMoreItem>();\n readonly onlyShowNoResult = input<boolean>();\n readonly ignoreBorderItem = input<boolean>();\n readonly activityLoadData = input<'scroll-infinity' | 'click-pagination', 'scroll-infinity' | 'click-pagination' | undefined>('scroll-infinity', { transform: (val) => val ?? 'scroll-infinity' });\n readonly paginationSetting = input<IPaginationConfig>();\n readonly templateNoData = input<TYPE_TEMPLATE_REF>();\n readonly templateNoResult = input<TYPE_TEMPLATE_REF>();\n readonly autoEmitKeysSelectedWithItems = input<boolean>();\n readonly functionGetWidthItem = input<() => Promise<number>>(); // bắt buộc truyền vào khi useScrollMeasureColumn = true\n readonly useScrollMeasureColumn = input<boolean>();\n\n /** GROUP 6 — protected computed */\n protected classHeaderContainer = computed(() => `libs-ui-table-header-container w-full absolute flex shrink-0 ${this.ignoreClassBgHeader() ? '' : 'bg-white'} overflow-x-hidden z-[1] items-center ${this.classHeaderContainerInclude() || ''}`);\n protected classHeaderLeftContainer = computed(() => `h-full flex sticky top-0 left-0 z-[1] ${this.ignoreClassBgHeader() ? '' : 'bg-white'} ${this.classHeaderLeftInclude() || ''}`);\n protected totalItemDisplay = computed(() => viewDataNumberByLanguage(this.totalItem() ?? this.totalItemInBackend(), false));\n protected listConfigMoreItem = computed<IListConfigItem>(() => ({\n type: 'text',\n configTemplateText: this.moreItemTextConfig,\n httpRequestData: this.moreItemHttpData,\n }));\n protected hasItemHightLight = computed(() => this.itemsHightLight().length > 0);\n protected classLabelBarNoSelectItemCss = computed(() => this.classLabelBarNoSelectItem() ?? 'px-[12px] py-[5px]');\n protected paginationConfig = computed(() => ({\n modeDisplayTotalPageAndGotoPage: this.paginationSetting()?.modeDisplayTotalPageAndGotoPage ?? 'bottom',\n classDisplayTotalPageAndGotoPage: this.paginationSetting()?.classDisplayTotalPageAndGotoPage ?? '',\n classIncludeItem: this.paginationSetting()?.classIncludeItem ?? '',\n classIncludeContainer: this.paginationSetting()?.classIncludeContainer ?? '!items-end',\n disable: (this.paginationSetting()?.disable ?? false) || this.loading() || !this.items().length,\n numberPageDisplay: this.paginationSetting()?.numberPageDisplay ?? 5,\n showTotalPage: this.paginationSetting()?.showTotalPage ?? false,\n showInputGotoPage: this.paginationSetting()?.showInputGotoPage ?? false,\n firstPageStartNumber: this.paginationSetting()?.firstPageStartNumber ?? 1,\n }));\n protected pagingTotalItems = computed(() => this.pagingStore()?.total_items ?? (this.pagingStore()?.total_pages ?? 0) * (this.pagingStore()?.per_page ?? 0));\n protected pagingPerPage = computed(() => this.pagingStore()?.per_page ?? 0);\n protected pagingCurrentPage = computed(() => this.pagingStore()?.page ?? 0);\n protected noDataText = computed(() => this.noDataConfig().textNoData ?? 'i18n_no_data_yet');\n protected noDataSearchText = computed(() => this.noDataConfig().textSearchNoData ?? 'i18n_no_result');\n\n /** GROUP 7 — output() */\n readonly outLoadMore = output<ILoadMoreEvent>();\n readonly outScrollIsGone = output<ILoadMoreEvent>();\n readonly outLoading = output<boolean>();\n readonly outSort = output<ISortEvent>();\n readonly outClickBarButton = output<IButtonBarEvent>();\n readonly outKeysSelected = output<{ keys: Array<any>; items?: Array<WritableSignal<any>> }>();\n readonly outFunctionsControl = output<ITableFunctionControlEvent>();\n readonly outLoadDataComplete = output<WritableSignal<Array<WritableSignal<any>>>>();\n readonly outTotalItem = output<number>();\n readonly outLoadDataError = output<IHttpResponseError>();\n\n /** GROUP 8 — viewChild() (private) */\n private readonly headerElementRef = viewChild<ElementRef>('headerElementRef');\n private readonly footerElementRef = viewChild<ElementRef>('footerElementRef');\n private readonly footerLeftElementRef = viewChild<ElementRef>('footerLeftElementRef');\n private readonly bodyElementRef = viewChild<ElementRef>('bodyElementRef');\n private readonly bodyComponentRef = viewChild<VirtualScrollerComponent>('bodyComponentRef');\n private readonly paginationRef = viewChild<LibsUiComponentsPaginationComponent>(LibsUiComponentsPaginationComponent);\n\n /** GROUP 9 — inject() (private readonly) */\n private readonly httpRequestService = inject(LibsUiHttpRequestService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly cdr = inject(ChangeDetectorRef);\n\n constructor() {\n effect(() => {\n const config = this.configSelectMoreItem();\n untracked(() => {\n this.moreItemTextConfig.update((c) => ({ ...c, getValue: config?.getValue }));\n this.moreItemHttpData.update((c) => ({ ...c, objectInstance: returnListObject(config?.listOption) }));\n });\n });\n\n effect(() => {\n if (this.defaultKeysSelected()?.length) {\n untracked(() => {\n this.keysSelected.update((keys) => [...keys, ...(this.defaultKeysSelected() || [])]);\n this.emitKeysSelected(true);\n });\n }\n });\n\n effect(() => {\n if (this.showFooter()) {\n untracked(() => this.callApiByServiceFooter());\n }\n });\n\n effect(() => {\n if (this.newData()?.data().length) {\n untracked(() => this.addItems(this.newData()?.data as any, !this.newData()?.addToLastList));\n }\n });\n\n effect(() => {\n if (!this.filter().filterData || this.filter().ignoreCallApiAuto) {\n return;\n }\n untracked(() => {\n this.keySearch.set(get(this.filter().filterData, 'keySearch', ''));\n this.storeParamsCallApi.set(cloneDeep(this.filter().filterData));\n if (this.filter()?.filterData && !this.filter().filterData['instanceSort'] && this.instanceSort()) {\n this.storeParamsCallApi.update((data) => ({ ...data, instanceSort: this.instanceSort() }));\n }\n if (this.filterOrSortLocal() && this.stores().length) {\n this.items.set(this.filterOrSortLocal()?.(signal([...this.stores()]), { ...(this.filter().filterData || {}), instanceSort: this.instanceSort() }) || []);\n\n return;\n }\n\n this.resetScroll();\n this.callApiByService(true);\n });\n });\n }\n\n ngOnInit() {\n this.outFunctionsControl.emit(this.FunctionsControl);\n\n fromEvent(window, 'resize')\n .pipe(auditTime(100), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.cdr.markForCheck();\n });\n }\n\n get FunctionsControl(): ITableFunctionControlEvent {\n return {\n reset: this.reset.bind(this),\n callApiByService: this.callApiByService.bind(this),\n resetScroll: this.resetScroll.bind(this),\n addItems: this.addItems.bind(this),\n removeItems: this.removeItems.bind(this),\n getScrollContainer: this.getScrollContainer.bind(this),\n hideToolBarBottom: () => {\n return;\n },\n resetKeySelected: () => {\n this.keysSelected.set([]);\n this.emitKeysSelected(true);\n },\n detectChanges: () => this.cdr.detectChanges(),\n setCountPagingStore: (count: number) => this.httpRequestData() && this.pagingStore() && this.pagingStore.update((paging) => ({ ...paging, total_items: count })),\n getCount: this.getCount.bind(this),\n getStore: () => this.stores() || [],\n getItems: () => this.items() || [],\n hightLightItem: this.hightLightItem.bind(this),\n changePagination: async (page?: number) => await this.paginationRef()?.FunctionsControl?.changePage(page),\n };\n }\n\n protected handlerChangeAllChecked() {\n this.keysSelected.set([]);\n this.emitKeysSelected();\n }\n\n protected async handlerChangeCheckedAllItems(event: ICheckboxEvent) {\n if (!event.checked) {\n this.keysSelected.set([]);\n this.emitKeysSelected();\n return;\n }\n const items = this.items();\n const cancelFlags = await Promise.all(items.map((item) => this.checkCancelConditionCheckedItem(item)));\n\n this.keysSelected.set(items.filter((_, index) => !cancelFlags[index]).map((item) => `${get<unknown>(item, this.fieldKey())}`));\n this.emitKeysSelected();\n }\n\n protected handlerChangeItemChecked(event: ICheckboxItem, item: TYPE_OBJECT) {\n const key = get<unknown>(item, this.fieldKey());\n const keys = new Set(this.keysSelected());\n\n keys.add(key);\n if (!event.checked) {\n keys.delete(key);\n }\n this.keysSelected.set(Array.from(keys));\n this.emitKeysSelected();\n }\n\n protected async handlerChangeSort(sort: ISort) {\n const scrollLeft = this.headerElementRef()?.nativeElement.scrollLeft || 0;\n if (this.instanceSort()?.fieldSort !== sort.fieldSort) {\n this.instanceSort()?.reset();\n }\n this.instanceSort.set(sort);\n if (this.sortLocal()) {\n this.handlerSortLocal(sort, scrollLeft);\n\n return;\n }\n this.storeParamsCallApi.update((data) => ({ ...data, instanceSort: this.instanceSort() }));\n this.outSort.emit({\n sort: sort,\n onSortSuccess: () => this.onSortSuccess(scrollLeft),\n });\n try {\n await this.callApiByService(true);\n this.onSortSuccess(scrollLeft);\n } catch (error) {\n console.log(error);\n }\n }\n\n protected handlerFunctionControlMoreSelectItem(functionControl: IDropdownFunctionControlEvent) {\n this.functionControlSelectMoreItem = functionControl;\n }\n\n protected handlerSelectedMoreItem(event: IEmitSelectKey | undefined) {\n if (!event?.key || !this.configSelectMoreItem()) {\n return;\n }\n\n this.functionControlSelectMoreItem?.reset();\n\n const perPage = Number(event.key).valueOf();\n const currentPerPage = Number(this.setPerPageSelectMoreItem(perPage)).valueOf();\n const isPagingNumber = this.configSelectMoreItem()?.pagingNumber;\n\n if (currentPerPage > perPage || this.items().length >= perPage) {\n if (!isPagingNumber) {\n this.setPerPageSelectMoreItem(currentPerPage);\n }\n this.keysSelected.set(\n this.items()\n .slice(0, perPage)\n .map((item) => `${get<unknown>(item, this.fieldKey())}`)\n );\n this.emitKeysSelected(true);\n\n return;\n }\n\n this.callApiByService(true, true);\n const completeSub = this.outLoadDataComplete.subscribe(() => {\n completeSub.unsubscribe();\n errorSub.unsubscribe();\n if (!isPagingNumber) {\n this.setPerPageSelectMoreItem(currentPerPage);\n }\n this.keysSelected.set(\n this.items()\n .slice(0, perPage)\n .map((item) => `${get<unknown>(item, this.fieldKey())}`)\n );\n this.emitKeysSelected(true);\n });\n\n const errorSub = this.outLoadDataError.subscribe(() => {\n errorSub.unsubscribe();\n completeSub.unsubscribe();\n this.setPerPageSelectMoreItem(currentPerPage);\n });\n }\n\n protected handlerBarButtonClick(button: IButton) {\n const items: Array<WritableSignal<any>> = [];\n\n this.keysSelected().forEach((key) => {\n const item = this.items().find((item) => `${get<unknown>(item, this.fieldKey())}` === `${key}`);\n\n if (item) {\n items.push(item);\n }\n });\n\n return this.outClickBarButton.emit({\n button,\n items,\n keys: this.keysSelected(),\n hiddenBarButtons: () => {\n return;\n },\n });\n }\n\n protected setIndexHover(e: Event, item: WritableSignal<TYPE_OBJECT>) {\n e.stopPropagation();\n if (!this.items().length) {\n this.resetIndexHover();\n\n return;\n }\n this.itemOfIndexHover = item;\n }\n\n protected resetIndexHoverWhenMouseLeave(e?: Event) {\n e?.stopPropagation();\n const currentIndexItemHover = this.itemOfIndexHover;\n\n clearTimeout(this.timeoutLeaveItem());\n this.timeoutLeaveItem.set(\n setTimeout(() => {\n if (this.itemOfIndexHover && this.itemOfIndexHover !== currentIndexItemHover) {\n return;\n }\n this.resetIndexHover(e);\n }) as unknown as number\n );\n }\n\n protected resetIndexHover(e?: Event) {\n e?.stopPropagation();\n this.itemOfIndexHover = undefined;\n }\n\n protected handlerMouseLeaveContainer(event: Event) {\n event.stopPropagation();\n this.resetIndexHover(event);\n }\n\n protected handlerMouseEnterHeader(event: Event) {\n event.stopPropagation();\n this.mouseEnterHeader.set(true);\n this.resetIndexHover(event);\n }\n\n protected handlerMouseLeaveHeader(event: Event) {\n event.stopPropagation();\n this.mouseEnterHeader.set(false);\n this.resetIndexHover(event);\n }\n\n protected handlerMouseEnterFooter(event: Event) {\n event.stopPropagation();\n this.resetIndexHover(event);\n if (this.classFooterInclude()) {\n this.footerElementRef()?.nativeElement?.classList.remove('bg-[#f8f9fa]');\n this.footerLeftElementRef()?.nativeElement?.classList.remove('bg-[#f8f9fa]');\n this.footerElementRef()?.nativeElement?.classList.add(this.classFooterInclude());\n this.footerLeftElementRef()?.nativeElement?.classList.add(this.classFooterInclude());\n }\n }\n\n protected handlerMouseLeaveFooter(event: Event) {\n event.stopPropagation();\n if (this.classFooterInclude()) {\n this.footerElementRef()?.nativeElement?.classList.remove(this.classFooterInclude());\n this.footerLeftElementRef()?.nativeElement?.classList.remove(this.classFooterInclude());\n this.footerElementRef()?.nativeElement?.classList.add('bg-[#f8f9fa]');\n this.footerLeftElementRef()?.nativeElement?.classList.add('bg-[#f8f9fa]');\n }\n }\n\n protected handlerScrollHeader(e: Event) {\n e.stopPropagation();\n if (!this.mouseEnterHeader()) {\n return;\n }\n const scrollLeft = (e.target as HTMLElement).scrollLeft;\n const bodyEl = this.bodyElementRef()?.nativeElement;\n if (bodyEl) {\n bodyEl.scrollLeft = scrollLeft;\n }\n const footerEl = this.footerElementRef()?.nativeElement;\n if (footerEl) {\n footerEl.scrollLeft = scrollLeft;\n }\n this.resetIndexHover(e);\n }\n\n protected handlerScrollBody(e: Event) {\n e.stopPropagation();\n if (this.mouseEnterHeader()) {\n return;\n }\n const scrollLeft = (e.target as HTMLElement).scrollLeft;\n const headerEl = this.headerElementRef()?.nativeElement;\n if (headerEl) {\n headerEl.scrollLeft = scrollLeft;\n }\n const footerEl = this.footerElementRef()?.nativeElement;\n if (footerEl) {\n footerEl.scrollLeft = scrollLeft;\n }\n this.resetIndexHover(e);\n }\n\n protected handlerScrollBottom(e: Event) {\n e.stopPropagation();\n if (this.loading() || this.activityLoadData() !== 'scroll-infinity') {\n return;\n }\n this.outLoadMore.emit({ loadMoreSuccess: this.loadMoreSuccess.bind(this) });\n this.callApiByService(false);\n }\n\n protected handlerChangePage(page: number) {\n this.pagingStore.update((data) => ({ ...(data || {}), page }));\n const { argumentsValue, guideAutoUpdateArgumentsValue } = this.httpRequestData() as IHttpRequestConfig;\n this.loadedLastItem.set(\n this.httpRequestService.updateArguments(argumentsValue, { paging: this.pagingStore(), storeParamsCallApi: this.storeParamsCallApi() }, this.pagingStore() || {}, this.keySearch(), true, this.loadedLastItem(), guideAutoUpdateArgumentsValue)\n );\n this.callApiByService(false, true, true);\n }\n\n // CONVENTION-EXCEPT: any — Sử dụng any array để map ngược generic properties linh động\n protected handlerOutViewPortItemHeaderRight(event: Array<any>) {\n this.headerRightViewPort.set(event);\n }\n\n protected handlerOutPaddingLeftHeaderRight(event: number) {\n this.paddingLeftHeaderRight.set(event);\n }\n\n // CONVENTION-EXCEPT: any — Map array signal linh hoạt cho generic\n protected handlerOutViewPortItemFooterRight(event: Array<any>) {\n this.footerRightViewPort.set(event);\n }\n\n protected getIndexRow = (data: { value: TYPE_ITEM_DATA_TABLE }) => {\n return of(this.items().findIndex((item) => item === data.value) + 1);\n };\n\n private fakeResponseApi(): TYPE_OBJECT {\n this.loadedLastItem.set(false);\n if (this.activityLoadData() === 'scroll-infinity') {\n this.pagingStore.set({});\n }\n\n return this.httpRequestService.fakeResponsePagingApi();\n }\n\n private getScrollContainer() {\n return this.bodyComponentRef() as VirtualScrollerComponent;\n }\n\n private async callApiByService(firstCall: boolean, resetAfterCallApi?: boolean, isChangePage?: boolean) {\n try {\n if (firstCall || isChangePage) {\n this.loadedLastItem.set(false);\n }\n if (!this.httpRequestData() || this.loading() || this.loadedLastItem()) {\n return;\n }\n this.loading.set(true);\n this.outLoading.emit(this.loading());\n this.resetIndexHover();\n const { argumentsValue, guideAutoUpdateArgumentsValue } = this.httpRequestData() as IHttpRequestConfig;\n\n if (guideAutoUpdateArgumentsValue && !guideAutoUpdateArgumentsValue.sortOrderBy && this.instanceSort()) {\n guideAutoUpdateArgumentsValue.sortOrderBy = {\n fieldGetValue: 'storeParamsCallApi.instanceSort.fieldSort',\n fieldUpdate: '[0]',\n subFieldUpdate: 'order_by',\n };\n }\n\n if (guideAutoUpdateArgumentsValue && !guideAutoUpdateArgumentsValue.sortOrderType && this.instanceSort()) {\n guideAutoUpdateArgumentsValue.sortOrderType = {\n fieldGetValue: 'storeParamsCallApi.instanceSort.mode',\n fieldUpdate: '[0]',\n subFieldUpdate: 'order_type',\n };\n }\n if (firstCall) {\n if (!resetAfterCallApi) {\n this.hasScroll.set(false);\n this.stores.set([]);\n this.items.set([]);\n }\n this.loadedLastItem.set(\n this.httpRequestService.updateArguments(argumentsValue, { ...this.fakeResponseApi(), storeParamsCallApi: this.storeParamsCallApi() }, this.pagingStore() || {}, this.keySearch(), true, this.loadedLastItem(), guideAutoUpdateArgumentsValue)\n );\n }\n const result = await this.httpRequestService.callApi(this.httpRequestData() as IHttpRequestConfig);\n\n if ((firstCall || isChangePage) && resetAfterCallApi) {\n this.hasScroll.set(false);\n this.stores.set([]);\n this.items.set([]);\n }\n\n this.totalItemInBackend.set(result.paging?.total_items || 0);\n this.outTotalItem.emit(this.totalItemInBackend());\n this.pagingStore.update((data) => ({ ...data, total_items: this.totalItemInBackend() || 0 }));\n if (!isChangePage) {\n this.pagingStore.set(result.paging);\n if (!this.pagingStore()) {\n this.loadedLastItem.set(true);\n }\n this.loadedLastItem.set(\n this.httpRequestService.updateArguments(argumentsValue, { ...result, storeParamsCallApi: this.storeParamsCallApi() }, this.pagingStore() || {}, this.keySearch(), true, this.loadedLastItem(), guideAutoUpdateArgumentsValue)\n );\n }\n await this.addItems(convertObjectToSignal(result.data || []), false, true);\n this.outLoadDataComplete.emit(this.stores);\n } catch (error) {\n console.log(error);\n this.outLoadDataError.emit(error as IHttpResponseError);\n } finally {\n this.loading.set(false);\n this.outLoading.emit(this.loading());\n }\n }\n\n private async callApiByServiceFooter() {\n if (!this.httpRequestDataFooter() || !this.showFooter()) {\n return;\n }\n const { argumentsValue, guideAutoUpdateArgumentsValue } = this.httpRequestDataFooter() as IHttpRequestConfig;\n\n this.httpRequestService.updateArguments(argumentsValue, { storeParamsCallApi: this.storeParamsCallApi() }, this.pagingStore() || {}, this.keySearch(), true, false, guideAutoUpdateArgumentsValue);\n const result = await this.httpRequestService.callApi(this.httpRequestDataFooter() as IHttpRequestConfig);\n\n this.itemFooter.set(convertObjectToSignal(result.data));\n }\n\n private async addItems(items: TYPE_DATA_TABLE, addFirst: boolean, ignoreHightLight?: boolean, ignoreReCallFooter?: boolean, autoCountNewItem?: boolean) {\n if (!items()?.length) {\n return;\n }\n const existingKeys = new Set(this.items().map((item) => `${get<unknown>(item, this.fieldKey())}`));\n const itemsAdd: Array<WritableSignal<TYPE_OBJECT>> = [];\n\n items().forEach((item) => {\n const key = `${get<unknown>(item, this.fieldKey())}`;\n if (!existingKeys.has(key)) {\n existingKeys.add(key);\n itemsAdd.push(item);\n }\n });\n\n if (itemsAdd.length) {\n if (addFirst) {\n this.items.update((data) => [...itemsAdd, ...data]);\n this.stores.update((data) => [...itemsAdd, ...data]);\n } else {\n this.items.update((data) => [...data, ...itemsAdd]);\n this.stores.update((data) => [...data, ...itemsAdd]);\n }\n }\n if (autoCountNewItem && itemsAdd.length) {\n this.totalItemInBackend.update((value) => value + itemsAdd.length);\n }\n if (!ignoreHightLight) {\n this.itemsHightLight.update((itemsHightLight) => [...itemsHightLight, ...itemsAdd]);\n timer(this.timeHighlighNewItem())\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n itemsAdd.forEach((item) => {\n this.itemsHightLight.update((itemsHightLight) => itemsHightLight.filter((itemHightLight) => itemHightLight !== item));\n });\n });\n }\n await this.checkScroll();\n if (!ignoreReCallFooter) {\n await this.callApiByServiceFooter();\n }\n }\n\n private async removeItems(keys: Array<unknown>, ignoreReCallFooter?: boolean, autoCountNewItem?: boolean) {\n this.resetIndexHover();\n if (!this.items().length) {\n return;\n }\n keys.forEach((key) => {\n this.items.update((items) => {\n let isUpdate = false;\n\n const newItems = items.filter((item) => {\n if (`${get<unknown>(item, this.fieldKey())}` === `${String(key)}`) {\n isUpdate = true;\n return false;\n }\n return true;\n });\n\n return isUpdate ? newItems : items;\n });\n\n this.stores.update((items) => {\n let isUpdate = false;\n\n const newItems = items.filter((item) => {\n if (`${get<unknown>(item, this.fieldKey())}` === `${String(key)}`) {\n isUpdate = true;\n if (autoCountNewItem) {\n this.totalItemInBackend.update((value) => value - 1);\n }\n return false;\n }\n return true;\n });\n\n return isUpdate ? newItems : items;\n });\n\n if (!this.keysSelected()?.length) {\n return;\n }\n if (!autoCountNewItem) {\n this.keysSelected.update((keys) => keys.filter((keySelected) => keySelected !== key));\n }\n });\n this.totalItemInBackend.update((value) => value - keys.length);\n await this.checkScroll();\n if (!ignoreReCallFooter) {\n await this.callApiByServiceFooter();\n }\n this.emitKeysSelected();\n }\n\n private getCount(): number {\n if (this.httpRequestData()) {\n return this.pagingStore()?.total_items || this.items().length;\n }\n\n return this.items().length;\n }\n\n private loadMoreSuccess(data: WritableSignal<Array<WritableSignal<TYPE_OBJECT>>>) {\n this.addItems(data, false);\n this.loading.set(false);\n this.outLoading.emit(this.loading());\n }\n\n private async checkCancelConditionCheckedItem(item: WritableSignal<TYPE_OBJECT>) {\n let isCancelCheck = false;\n\n if (!isCancelCheck && this.headerLeft().length && this.headerLeft()[0].checkConditionCheckBoxHidden) {\n isCancelCheck = (await lastValueFrom((this.headerLeft()[0].checkConditionCheckBoxHidden as any)({ item: item() }))) || false;\n }\n\n if (!isCancelCheck && this.headerRight().length && this.headerRight()[0].checkConditionCheckBoxHidden) {\n isCancelCheck = (await lastValueFrom((this.headerRight()[0].checkConditionCheckBoxHidden as any)({ item: item() }))) || false;\n }\n\n return isCancelCheck;\n }\n\n private handlerSortLocal(sort: ISort, scrollLeft: number) {\n if (this.filterOrSortLocal() && this.stores().length) {\n this.items.set(this.filterOrSortLocal()?.(signal([...this.stores()]), { ...this.storeParamsCallApi(), instanceSort: sort }) || []);\n\n return;\n }\n const { fieldSort, mode } = sort;\n\n this.items.update((items) => {\n items.sort((itemA, itemB) => {\n let value1 = mode === 'asc' ? itemA()[fieldSort] : itemB()[fieldSort];\n let value2 = mode === 'asc' ? itemB()[fieldSort] : itemA()[fieldSort];\n\n if (typeof value1 === 'string' && typeof value2 === 'string') {\n value1 = deleteUnicode(value1).toLocaleLowerCase();\n value2 = deleteUnicode(value2).toLocaleLowerCase();\n }\n\n if (value1 === value2) {\n return 0;\n }\n\n return value1 > value2 ? 1 : -1;\n });\n\n return [...items];\n });\n this.onSortSuccess(scrollLeft);\n }\n\n private setPerPageSelectMoreItem(perPage: string | number): string {\n const argumentsValue = this.httpRequestData()?.argumentsValue;\n\n if (!argumentsValue || !this.configSelectMoreItem()) {\n return '-1';\n }\n const keyPerPage = this.configSelectMoreItem()?.keyPerPage || 'per_page';\n\n for (let i = 0; i < argumentsValue.length; i++) {\n let argument = argumentsValue[i];\n\n if (argument instanceof HttpParams && argument.has(keyPerPage)) {\n const currentPerPage = get<unknown>(argument, keyPerPage, '25' as any);\n\n argument = argument.set(keyPerPage, perPage);\n set(argumentsValue, `${i}` as any, argument);\n\n return currentPerPage;\n }\n\n if (argument instanceof Object && Object.keys(argument).includes(keyPerPage)) {\n const currentPerPage = get(argument, keyPerPage, '25');\n\n set(argument, keyPerPage, perPage);\n\n return currentPerPage;\n }\n }\n\n return '-1';\n }\n\n private onSortSuccess(scrollLeft: number) {\n this.resetScroll(scrollLeft, 0);\n this.loading.set(false);\n this.outLoading.emit(this.loading());\n }\n\n private resetScroll(scrollPositionLeft?: number, scrollPositionTop?: number) {\n const headerEl = this.headerElementRef()?.nativeElement;\n if (headerEl) {\n headerEl.scrollLeft = scrollPositionLeft || 0;\n }\n const bodyEl = this.bodyElement;\n if (bodyEl) {\n bodyEl.scrollTop = scrollPositionTop || 0;\n bodyEl.scrollLeft = scrollPositionLeft || 0;\n }\n const footerEl = this.footerElementRef()?.nativeElement;\n if (footerEl) {\n footerEl.scrollLeft = scrollPositionLeft || 0;\n }\n }\n\n private reset(clearSort?: boolean) {\n if (clearSort) {\n this.instanceSort()?.reset();\n this.instanceSort.set(undefined);\n }\n this.hasScroll.set(false);\n this.loading.set(false);\n this.outLoading.emit(this.loading());\n this.items.set([]);\n this.stores.set([]);\n this.fakeResponseApi();\n this.resetScroll();\n }\n\n private async checkScroll(): Promise<void> {\n const hasScroll = this.hasScroll();\n\n return new Promise((resolve) => {\n timer(500)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.bodyElement) {\n this.hasScroll.set(this.bodyElement.scrollHeight > this.bodyElement.offsetHeight);\n }\n if (hasScroll && !this.hasScroll()) {\n this.outScrollIsGone.emit({});\n if (!this.filterOrSortLocal()) {\n this.callApiByService(true);\n }\n }\n resolve();\n });\n });\n }\n\n private get bodyElement(): HTMLElement | undefined {\n return this.bodyElementRef()?.nativeElement;\n }\n\n private async hightLightItem(items: Array<TYPE_ITEM_DATA_TABLE>) {\n this.itemsHightLight.update((itemsHightLight) => [...itemsHightLight, ...items]);\n\n timer(this.timeHighlighNewItem())\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n items.forEach((item) => {\n this.itemsHightLight.update((itemsHightLight) => itemsHightLight.filter((itemHightLight) => itemHightLight !== item));\n });\n });\n }\n\n private emitKeysSelected(onlyWhenAutoEnabled = false): void {\n if (onlyWhenAutoEnabled && !this.autoEmitKeysSelectedWithItems()) {\n return;\n }\n if (this.autoEmitKeysSelectedWithItems()) {\n const items = this.keysSelected()\n .map((key) => this.items().find((item) => `${get<unknown>(item, this.fieldKey())}` === `${key}`))\n .filter((item): item is WritableSignal<TYPE_OBJECT> => !!item);\n this.outKeysSelected.emit({ keys: this.keysSelected(), items });\n return;\n }\n this.outKeysSelected.emit({ keys: this.keysSelected() });\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.timeoutLeaveItem());\n }\n}\n","<div class=\"flex flex-col w-full h-full\">\n @if (!ignoreBar()) {\n <div\n class=\"flex items-center relative z-[1] bottom-0 left-0 w-full bg-white libs-ui-table-shadow-bottom {{ classBarInclude() }}\"\n [class.px-[16px]]=\"keysSelected().length || labelBarNoSelectItem()\"\n [class.py-[6px]]=\"keysSelected().length || labelBarNoSelectItem()\"\n (mouseenter)=\"resetIndexHover($event)\">\n <ng-content select=\"div.libs-ui-table-bar-left\"></ng-content>\n @if (!keysSelected().length && labelBarNoSelectItem()) {\n <div\n class=\"{{ classLabelBarNoSelectItemCss() }}\"\n [innerHtml]=\"labelBarNoSelectItem() | translate: { value: totalItemDisplay() }\"></div>\n }\n @if (keysSelected().length) {\n <div class=\"flex items-center pl-[12px]\">\n <div class=\"flex items-center h-full mt-[-2px]\">\n <libs_ui-components-checkbox-single\n [checked]=\"true\"\n [disable]=\"loading() || disableCheckbox()\"\n (outChange)=\"handlerChangeAllChecked()\" />\n </div>\n <div class=\"libs-ui-font-h5m text-[#071631] mr-[8px] {{ classLabelBarButtons() }}\">\n {{ labelBarButtons() | translate: { value: keysSelected().length } }}\n </div>\n @if (configSelectMoreItem()) {\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{\n widthByParent: false,\n ignoreArrow: true,\n maxHeight: 2048,\n classInclude: '!w-[121px]',\n position: {\n mode: 'start',\n distance: 0,\n },\n }\"\n [listConfig]=\"listConfigMoreItem()\"\n [listHiddenInputSearch]=\"true\"\n [listMaxItemShow]=\"5\"\n class=\"!w-[16px] h-[16px] mr-[8px]\"\n (outSelectKey)=\"handlerSelectedMoreItem($event)\"\n (outFunctionsControl)=\"handlerFunctionControlMoreSelectItem($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [classInclude]=\"'!p-0 m-0'\"\n [classIconLeft]=\"'before:!text-[16px] libs-ui-icon-move-right rotate-90 mr-[6px]'\"\n [popover]=\"{ config: { content: 'i18n_more_select' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n }\n <div class=\"h-[16px] libs-ui-border-left-general ml-[16px]\"></div>\n @if (barButtons()?.length) {\n @for (button of barButtons(); track button) {\n @let constHtmlLabel = button.label || ' ';\n <libs_ui-components-buttons-button\n [type]=\"button.type || 'button-link-primary'\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classInclude]=\"button.classInclude || ''\"\n [label]=\"constHtmlLabel | translate\"\n (outClick)=\"handlerBarButtonClick(button)\" />\n }\n }\n </div>\n }\n <ng-content select=\"div.libs-ui-table-bar-right\"></ng-content>\n </div>\n }\n\n <div\n #tableContainerElementRef\n class=\"libs-ui-table flex flex-col w-full h-full relative {{ classTableContainerInclude() }}\"\n [class.px-[16px]]=\"!ignoreBar()\"\n (mouseleave)=\"handlerMouseLeaveContainer($event)\">\n <div\n class=\"relative w-full shrink-0\"\n [style.height.px]=\"headerElementRef.offsetHeight\"\n [class.!hidden]=\"!items().length && isHiddenHeaderWhenNodata()\">\n <div\n #headerElementRef\n LibsUiComponentsScrollOverlayDirective\n [options]=\"{ scrollbarWidth: 0 }\"\n [class.libs-ui-border-bottom-dashed-general]=\"!hasItemHightLight() && isDashBorder()\"\n [class.libs-ui-border-bottom-general]=\"!hasItemHightLight() && !isDashBorder()\"\n [class]=\"classHeaderContainer()\"\n (outScroll)=\"handlerScrollHeader($event)\"\n (mouseenter)=\"handlerMouseEnterHeader($event)\"\n (mouseleave)=\"handlerMouseLeaveHeader($event)\">\n @if (headerLeft().length) {\n <div [class]=\"classHeaderLeftContainer()\">\n @for (header of headerLeft(); track header) {\n <ng-container *ngTemplateOutlet=\"templateHeaderRef; context: { headerItem: header, isHeaderLeft: true }\" />\n }\n </div>\n }\n @if (headerRight().length) {\n @let constHtmlFunctionGetWidthItem = functionGetWidthItem();\n @if (useScrollMeasureColumn() && constHtmlFunctionGetWidthItem) {\n <div\n class=\"flex w-full h-full relative\"\n LibsUiScrollMeasureItemDirectionHorizontalDirective\n [elementScroll]=\"headerElementRef\"\n [items]=\"headerRight()\"\n [functionGetWidthItem]=\"constHtmlFunctionGetWidthItem\"\n (outViewPortItem)=\"handlerOutViewPortItemHeaderRight($event)\"\n (outPaddingLeft)=\"handlerOutPaddingLeftHeaderRight($event)\">\n @for (header of headerRightViewPort(); track header) {\n <ng-container *ngTemplateOutlet=\"templateHeaderRef; context: { headerItem: header, isHeaderLeft: false }\" />\n }\n </div>\n } @else {\n @for (header of headerRight(); track header) {\n <ng-container *ngTemplateOutlet=\"templateHeaderRef; context: { headerItem: header, isHeaderLeft: false }\" />\n }\n }\n }\n </div>\n </div>\n @if (showFooter() && itemFooter() && customPositionFooter() === 'top') {\n <ng-container *ngTemplateOutlet=\"templateFooterRef\" />\n }\n <div class=\"relative flex flex-col w-full h-full overflow-x-hidden bg-white {{ classBodyInclude() || '' }}\">\n <div\n #bodyElementRef\n class=\"flex h-full w-full relative\"\n LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"handlerScrollBody($event)\"\n (outScrollBottom)=\"handlerScrollBottom($event)\">\n @if (items().length) {\n <virtual-scroller\n #bodyComponentRef\n [items]=\"items()\"\n [enableUnequalChildrenSizes]=\"enableUnequalChildrenSizes()\"\n class=\"h-full\"\n [style.width.px]=\"headerElementRef.scrollWidth > (bodyElementRef ? bodyElementRef.scrollWidth : 0) ? headerElementRef.scrollWidth : undefined\"\n [parentScroll]=\"bodyElementRef\"\n [bufferAmount]=\"bufferAmount()\">\n @for (data of bodyComponentRef.viewPortItems; track data()) {\n @let constHtmlIsHightLightItem = data | LibsUiTableCheckItemHightLightPipe: itemsHightLight();\n <div\n #elementHover\n class=\"flex\"\n [class.bg-[#f3fcfc]]=\"constHtmlIsHightLightItem\"\n [class.libs-ui-border-top-1px-36d3d3]=\"constHtmlIsHightLightItem && $first && !ignoreBorderItem()\"\n [class.libs-ui-border-bottom-1px-36d3d3]=\"constHtmlIsHightLightItem && !ignoreBorderItem()\"\n [ngClass]=\"\n constHtmlIsHightLightItem || ($last && ignoreBorderItemLast())\n ? 'libs-ui-border-radius-bottom-left-4px libs-ui-border-radius-bottom-right-4px'\n : ignoreBorderItem()\n ? ''\n : isDashBorder()\n ? 'libs-ui-border-bottom-dashed-general'\n : 'libs-ui-border-bottom-general'\n \"\n [style.width.px]=\"headerElementRef.scrollWidth\"\n [class.bg-[#f8f9fa]]=\"itemOfIndexHover === data && !constHtmlIsHightLightItem\"\n (mouseenter)=\"setIndexHover($event, data)\"\n (mouseleave)=\"resetIndexHoverWhenMouseLeave($event)\">\n @if (headerLeft().length || headerRight().length) {\n <div class=\"flex flex-col w-full\">\n <div class=\"flex w-full\">\n @if (headerLeft().length) {\n <div\n class=\"flex sticky top-0 left-0 z-[1]\"\n [class.bg-white]=\"!constHtmlIsHightLightItem\"\n [class.bg-[#f3fcfc]]=\"constHtmlIsHightLightItem\">\n @for (header of headerLeft(); track header) {\n <div\n class=\"relative flex px-[12px] py-[8px] {{ header.ignoreBorderRight ? '' : 'libs-ui-border-right-general' }}\"\n [class.bg-[#f8f9fa]]=\"itemOfIndexHover === data && !constHtmlIsHightLightItem\"\n [ngStyle]=\"\n (header | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerLeft || false : headerElementRef.clientWidth : headerLeft() : headerRight()) ||\n (header.isShowIndexOnRow ? { width: '50px', 'flex-shrink': '0', padding: '8px' } : {})\n \"\n [ngClass]=\"header.ngClass || {}\">\n <ng-container *ngTemplateOutlet=\"templateBodyRef; context: { header: header, data: data, constHtmlIsHightLightItem: constHtmlIsHightLightItem }\" />\n </div>\n }\n </div>\n }\n @if (headerRight().length) {\n @if (useScrollMeasureColumn()) {\n <div\n class=\"flex w-full min-w-0\"\n [style.padding-left.px]=\"paddingLeftHeaderRight()\">\n @for (header of headerRightViewPort(); track header) {\n <div\n class=\"relative flex px-[12px] py-[8px]\"\n [ngStyle]=\"\n (header | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerRight || false : headerElementRef.clientWidth : headerLeft() : headerRight()) ||\n (header.isShowIndexOnRow ? { width: '50px', 'flex-shrink': '0', padding: '8px' } : {})\n \"\n [ngClass]=\"header.ngClass || {}\">\n <ng-container *ngTemplateOutlet=\"templateBodyRef; context: { header: header, data: data, constHtmlIsHightLightItem: constHtmlIsHightLightItem }\" />\n </div>\n }\n </div>\n } @else {\n @for (header of headerRight(); track header) {\n <div\n class=\"relative flex px-[12px] py-[8px]\"\n [ngStyle]=\"\n (header | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerRight || false : headerElementRef.clientWidth : headerLeft() : headerRight()) ||\n (header.isShowIndexOnRow ? { width: '50px', 'flex-shrink': '0', padding: '8px' } : {})\n \"\n [ngClass]=\"header.ngClass || {}\">\n <ng-container *ngTemplateOutlet=\"templateBodyRef; context: { header: header, data: data, constHtmlIsHightLightItem: constHtmlIsHightLightItem }\" />\n </div>\n }\n }\n }\n </div>\n @if (configTemplateItemCollapseExpand() && data().specificExpand && data()[configTemplateItemCollapseExpand()?.fieldGetDataExpand || 'specificDataExpand']) {\n <div [class]=\"configTemplateItemCollapseExpand()?.cssWrapper || 'flex w-full'\">\n @for (dataExpand of data()[configTemplateItemCollapseExpand()?.fieldGetDataExpand || 'specificDataExpand'](); track dataExpand) {\n @if (configTemplateItemCollapseExpand()?.colTemplateConfig) {\n @if (optimizeTableRenderByOnViewport()) {\n @defer (on viewport) {\n <libs_ui-components-table-templates\n [item]=\"dataExpand\"\n [class]=\"configTemplateItemCollapseExpand()?.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"configTemplateItemCollapseExpand()?.templateCssWrapper\"\n [configs]=\"configTemplateItemCollapseExpand()?.colTemplateConfig\" />\n } @placeholder {\n <div [class]=\"configTemplateItemCollapseExpand()?.templateCssWrapperHost || 'w-full h-full'\"></div>\n }\n } @else {\n <libs_ui-components-table-templates\n [item]=\"dataExpand\"\n [class]=\"configTemplateItemCollapseExpand()?.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"configTemplateItemCollapseExpand()?.templateCssWrapper\"\n [configs]=\"configTemplateItemCollapseExpand()?.colTemplateConfig\" />\n }\n }\n } @empty {\n <div class=\"relative h-[100px]\">\n <ng-container *ngTemplateOutlet=\"templateNodataRef\" />\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </virtual-scroller>\n } @else if (!loading()) {\n <div class=\"sticky left-0 top-0 z-[1] h-[calc(100%-10px)] w-full\">\n <ng-container *ngTemplateOutlet=\"templateNodataRef\" />\n </div>\n @if (showScrollTablePinnedIfNoData()) {\n <div\n class=\"absolute h-[1px] bg-transparent top-0 left-0 z-[1]\"\n [style.width.px]=\"headerElementRef.scrollWidth\"></div>\n }\n }\n </div>\n\n @if (showFooter() && itemFooter() && customPositionFooter() === 'bottom') {\n <ng-container *ngTemplateOutlet=\"templateFooterRef\" />\n }\n\n @if (loading()) {\n <div class=\"absolute w-full h-full z-[2] flex items-center content-center\">\n <libs_ui-components-spinner />\n </div>\n }\n </div>\n\n @if (activityLoadData() === 'click-pagination') {\n <div class=\"flex w-full mt-[12px]\">\n <libs_ui-components-pagination\n [modeDisplayTotalPageAndGotoPage]=\"paginationConfig().modeDisplayTotalPageAndGotoPage\"\n [classDisplayTotalPageAndGotoPage]=\"paginationConfig().classDisplayTotalPageAndGotoPage\"\n [classIncludeItem]=\"paginationConfig().classIncludeItem\"\n [classIncludeContainer]=\"paginationConfig().classIncludeContainer\"\n [disable]=\"paginationConfig().disable\"\n [numberPageDisplay]=\"paginationConfig().numberPageDisplay\"\n [firstPageStartNumber]=\"paginationConfig().firstPageStartNumber\"\n [showTotalPage]=\"paginationConfig().showTotalPage\"\n [showInputGotoPage]=\"paginationConfig().showInputGotoPage\"\n [totalItems]=\"pagingTotalItems()\"\n [perPage]=\"pagingPerPage()\"\n [currentPage]=\"pagingCurrentPage()\"\n (outPageSelect)=\"handlerChangePage($event)\" />\n </div>\n }\n </div>\n</div>\n\n<ng-template\n #templateHeaderRef\n let-header=\"headerItem\"\n let-isHeaderLeft=\"isHeaderLeft\">\n <div\n [class]=\"'relative flex ' + (header.paddingLeftRightHeaderContainer ?? ' px-[12px] ') + (isHeaderLeft && !header.ignoreBorderRight ? ' libs-ui-border-right-general ' : ' ') + ' libs-ui-table-header-col '\"\n [class.flex-col]=\"header.rowsConfig\"\n [class.py-[8px]]=\"!header.ignorePyDefault\"\n [ngStyle]=\"\n (header | LibsUiTableCalculatorColumnPipe: (isHeaderLeft ? ignoreCalculatorWidthHeader()?.headerLeft || false : ignoreCalculatorWidthHeader()?.headerRight || false) : headerElementRef.clientWidth : headerLeft() : headerRight()) ||\n (header.isShowIndexOnRow ? { width: '50px', 'flex-shrink': '0', padding: '8px' } : {})\n \"\n [ngClass]=\"header.ngClass || {}\">\n @if (!header.rowsConfig) {\n <ng-container *ngTemplateOutlet=\"templateHeaderContentRef; context: { headerItem: header, isColRender: false, isHeaderLeft: isHeaderLeft }\" />\n }\n @if (header.rowsConfig; as rowsConfig) {\n @for (row of rowsConfig.rows; track row) {\n <div [class]=\"row.classRow\">\n @for (col of row.cols; track col) {\n <ng-container *ngTemplateOutlet=\"templateHeaderContentRef; context: { headerItem: col, isColRender: true, isHeaderLeft: isHeaderLeft }\" />\n }\n </div>\n }\n }\n </div>\n</ng-template>\n\n<ng-template\n #templateHeaderContentRef\n let-header=\"headerItem\"\n let-isColRender=\"isColRender\"\n let-isHeaderLeft=\"isHeaderLeft\">\n <div\n #itemHeaderRef\n class=\"flex libs-ui-font-h6m min-h-[18px] text-[#6a7383] max-w-full\"\n [class.items-center]=\"header.contentHeaderAlignCenter ?? true\"\n [class.justify-end]=\"header.contentHeaderJustifyContentEnd\"\n [class.w-full]=\"header.isShowIndexOnRow\"\n [ngStyle]=\"\n isColRender\n ? (header | LibsUiTableCalculatorColumnPipe: (isHeaderLeft ? ignoreCalculatorWidthHeader()?.headerLeft || false : ignoreCalculatorWidthHeader()?.headerRight || false) : headerElementRef.clientWidth : headerLeft() : headerRight()) ||\n (header.isShowIndexOnRow ? { width: '50px', 'flex-shrink': '0', padding: '8px' } : {})\n : {}\n \"\n [ngClass]=\"isColRender ? header.ngClass || {} : {}\">\n @if (header.hasCheckbox) {\n @if (header.hasCheckboxAll) {\n <div\n class=\"flex h-full {{ header.checkboxAllClassInclude || 'mr-[16px]' }}\"\n [class.items-center]=\"header.checkboxAlignCenter\">\n <libs_ui-components-checkbox-single\n [key]=\"'all'\"\n [stillOtherOptions]=\"!!keysSelected().length && keysSelected().length !== items().length\"\n [checked]=\"!!keysSelected().length && keysSelected().length === items().length\"\n [disable]=\"loading()\"\n [classInclude]=\"header.checkboxClassInclude\"\n (outChange)=\"handlerChangeCheckedAllItems($event)\" />\n </div>\n } @else {\n <div class=\"flex h-full ml-[24px] {{ header.checkboxClassInclude }}\"></div>\n }\n }\n @for (tooltip of header.tooltipsLeft; track tooltip) {\n <div class=\"mr-[4px]\">\n @let constHtmlTooltip = tooltip.dataView || ' ';\n <libs_ui-components-popover\n [type]=\"tooltip?.type || 'other'\"\n [mode]=\"tooltip?.mode || 'hover'\"\n [classInclude]=\"tooltip.classInclude || 'text-[#6a7383]'\"\n [ignoreShowPopover]=\"tooltip.ignoreShowTooltip || false\"\n [config]=\"\n tooltip.config || {\n content: constHtmlTooltip | translate,\n position: {\n mode: 'center',\n distance: 0,\n autoUpdatePosition: {\n endDistance: 12,\n startDistance: -12,\n },\n },\n }\n \"\n [innerHTML]=\"tooltip.dataView\" />\n </div>\n }\n\n @if (header.isShowIndexOnRow) {\n <div class=\"flex w-full h-full items-center justify-center {{ header.classIncludeIndexOnRow || '' }}\">\n {{ header.label ?? '#' }}\n </div>\n } @else {\n @if (header.label | LibsUiPipesCallFunctionInTemplatePipe: header.parseValue : header | async | translate; as labelHeaderColumn) {\n <libs_ui-components-popover\n [type]=\"header?.labelConfig?.type || 'text'\"\n [mode]=\"header?.labelConfig?.mode || 'hover'\"\n [classInclude]=\"header?.labelConfig?.classInclude || ''\"\n [ignoreShowPopover]=\"header?.labelConfig?.ignoreShowTooltip || false\"\n [config]=\"header.labelConfig?.config || { content: labelHeaderColumn }\"\n [innerHTML]=\"labelHeaderColumn\" />\n }\n }\n\n @for (tooltip of header.tooltipsRight; track tooltip) {\n <div class=\"ml-[4px]\">\n @let constHtmlTooltip = tooltip.dataView || ' ';\n <libs_ui-components-popover\n [type]=\"tooltip?.type || 'other'\"\n [mode]=\"tooltip?.mode || 'hover'\"\n [classInclude]=\"tooltip.classInclude || 'text-[#6a7383]'\"\n [ignoreShowPopover]=\"tooltip.ignoreShowTooltip || false\"\n [config]=\"\n tooltip.config || {\n content: constHtmlTooltip | translate,\n position: {\n mode: 'center',\n distance: 0,\n autoUpdatePosition: {\n endDistance: 12,\n startDistance: -12,\n },\n },\n }\n \"\n [innerHTML]=\"tooltip.dataView\" />\n </div>\n }\n\n @if (header.hasSort && header.orderby) {\n <div class=\"ml-[4px]\">\n <libs_ui-components-buttons-sort-arrow\n [disable]=\"loading() || !items().length\"\n [fieldSort]=\"header.orderby\"\n [ignorePopoverContent]=\"header.sortIgnoreTooltipContent ?? true\"\n [popoverContentAsc]=\"header.sortTooltipContentAsc\"\n [popoverContentDesc]=\"header.sortTooltipContentDesc\"\n [defaultMode]=\"header.defaultMode\"\n [zIndex]=\"header.zIndexTooltipSort\"\n (outChange)=\"handlerChangeSort($event)\" />\n </div>\n }\n </div>\n @if (header.labelDescription) {\n <div class=\"flex\">\n <libs_ui-components-popover\n [type]=\"'text'\"\n [classInclude]=\"header.labelDescription.classInclude || ''\"\n [config]=\"{ content: header.labelDescription.content | translate }\"\n [innerHTML]=\"header.labelDescription.content | translate\" />\n </div>\n }\n</ng-template>\n\n<ng-template\n #templateBodyRef\n let-header=\"header\"\n let-data=\"data\"\n let-constHtmlIsHightLightItem=\"constHtmlIsHightLightItem\">\n <div class=\"flex w-full h-full\">\n @if (header.hasCheckbox) {\n <div\n class=\"flex h-full\"\n [class.invisible]=\"header.checkConditionCheckBoxHidden && (data() | LibsUiPipesCallFunctionInTemplatePipe: header.checkConditionCheckBoxHidden : data() | async)\"\n [class.items-center]=\"header.checkboxAlignCenter\">\n <libs_ui-components-checkbox-single\n [key]=\"data()[fieldKey()]\"\n [classInclude]=\"header.checkboxClassInclude\"\n [checked]=\"data()[fieldKey()] | LibsUiPipesCheckSelectedByKeyPipe: keysSelected() : keysSelected().length\"\n [disable]=\"loading() || disableCheckbox() || !!(maxItemSelected() && !(data()[fieldKey()] | LibsUiPipesCheckSelectedByKeyPipe: keysSelected() : keysSelected().length) && keysSelected().length >= maxItemSelected())\"\n (outChange)=\"handlerChangeItemChecked($event, data())\" />\n </div>\n }\n\n @if (header.isShowIndexOnRow; as config) {\n <div class=\"w-full flex items-center justify-center libs-ui-font-h4r{{ config.classIncludeIndexOnRow || '' }}\">\n <div\n LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{}\"\n [innerHTML]=\"data | LibsUiPipesCallFunctionInTemplatePipe: getIndexRow | async\"></div>\n </div>\n }\n\n @if (header.colTemplateConfig) {\n @let constHtmlIsHover = itemOfIndexHover === data && !constHtmlIsHightLightItem;\n @if (optimizeTableRenderByOnViewport()) {\n @defer (on viewport) {\n <libs_ui-components-table-templates\n [isHover]=\"constHtmlIsHover\"\n [class]=\"header.templateCssWrapperHost || ''\"\n [item]=\"data\"\n [templateCssWrapper]=\"header.templateCssWrapper\"\n [configs]=\"header.colTemplateConfig\" />\n } @placeholder {\n <div [class]=\"header.templateCssWrapperHost || 'w-full h-full'\"></div>\n }\n } @else {\n <libs_ui-components-table-templates\n [isHover]=\"constHtmlIsHover\"\n [class]=\"header.templateCssWrapperHost || ''\"\n [item]=\"data\"\n [templateCssWrapper]=\"header.templateCssWrapper\"\n [configs]=\"header.colTemplateConfig\" />\n }\n }\n </div>\n</ng-template>\n\n<ng-template #templateFooterRef>\n @if (!isHiddenHeaderWhenNodata() || (isHiddenHeaderWhenNodata() && items().length)) {\n <div\n #footerElementRef\n class=\"flex w-full bg-[#f8f9fa] overflow-x-hidden z-[1] {{ ignoreBorderFooter() ? '' : customPositionFooter() === 'top' ? 'libs-ui-border-bottom-general' : 'libs-ui-table-shadow-top libs-ui-border-top-general' }} min-h-[35px]\"\n (mouseenter)=\"handlerMouseEnterFooter($event)\"\n (mouseleave)=\"handlerMouseLeaveFooter($event)\">\n @if (footerLeft()) {\n <div\n #footerLeftElementRef\n class=\"flex sticky top-0 left-0 z-[1] bg-[#f8f9fa]\">\n @for (footer of footerLeft(); track footer) {\n <div\n class=\"flex items-center px-[12px] py-[8px] {{ footer.ignoreBorderRight ? '' : 'libs-ui-border-right-general' }}\"\n [ngStyle]=\"(footer | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerLeft || false : headerElementRef.clientWidth : footerLeft() : footerRight()) || {}\"\n [ngClass]=\"footer.ngClass || {}\">\n @if (footer.colTemplateConfig && itemFooter()) {\n @if (optimizeTableRenderByOnViewport()) {\n @defer (on viewport) {\n <libs_ui-components-table-templates\n [item]=\"itemFooter | LibsUiPipesConvertObjectToSignalPipe\"\n [class]=\"footer.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n } @placeholder {\n <div [class]=\"footer.templateCssWrapperHost || 'w-full h-full'\"></div>\n }\n } @else {\n <libs_ui-components-table-templates\n [item]=\"itemFooter | LibsUiPipesConvertObjectToSignalPipe\"\n [class]=\"footer.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n }\n }\n </div>\n }\n </div>\n }\n @if (footerRight(); as footerRightList) {\n @let constHtmlFunctionGetWidthItemFooter = functionGetWidthItem();\n @if (useScrollMeasureColumn() && constHtmlFunctionGetWidthItemFooter) {\n <div\n class=\"flex h-full w-full relative\"\n LibsUiScrollMeasureItemDirectionHorizontalDirective\n [elementScroll]=\"footerElementRef\"\n [items]=\"footerRightList\"\n [functionGetWidthItem]=\"constHtmlFunctionGetWidthItemFooter\"\n (outViewPortItem)=\"handlerOutViewPortItemFooterRight($event)\">\n @for (footer of footerRightViewPort(); track footer) {\n <div\n class=\"flex items-center px-[12px] py-[8px]\"\n [ngStyle]=\"(footer | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerRight || false : headerElementRef.clientWidth : footerLeft() : footerRightList) || {}\"\n [ngClass]=\"footer.ngClass || {}\">\n @if (footer.colTemplateConfig && itemFooter()) {\n @if (optimizeTableRenderByOnViewport()) {\n @defer (on viewport) {\n <libs_ui-components-table-templates\n [item]=\"itemFooter | LibsUiPipesConvertObjectToSignalPipe\"\n [class]=\"footer.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n } @placeholder {\n <div [class]=\"footer.templateCssWrapperHost || 'w-full h-full'\"></div>\n }\n } @else {\n <libs_ui-components-table-templates\n [item]=\"itemFooter | LibsUiPipesConvertObjectToSignalPipe\"\n [class]=\"footer.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n }\n }\n </div>\n }\n </div>\n } @else {\n @for (footer of footerRightList; track footer) {\n <div\n class=\"flex items-center px-[12px] py-[8px]\"\n [ngStyle]=\"(footer | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerRight || false : headerElementRef.clientWidth : footerLeft() : footerRightList) || {}\"\n [ngClass]=\"footer.ngClass || {}\">\n @if (footer.colTemplateConfig && itemFooter()) {\n @if (optimizeTableRenderByOnViewport()) {\n @defer (on viewport) {\n <libs_ui-components-table-templates\n [item]=\"itemFooter | LibsUiPipesConvertObjectToSignalPipe\"\n [class]=\"footer.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n } @placeholder {\n <div [class]=\"footer.templateCssWrapperHost || 'w-full h-full'\"></div>\n }\n } @else {\n <libs_ui-components-table-templates\n [item]=\"itemFooter | LibsUiPipesConvertObjectToSignalPipe\"\n [class]=\"footer.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n }\n }\n </div>\n }\n }\n }\n </div>\n }\n</ng-template>\n\n<ng-template #templateNodataRef>\n @if (keySearch() || onlyShowNoResult()) {\n @if (templateNoResult(); as templateNoResult) {\n <ng-container *ngTemplateOutlet=\"templateNoResult\" />\n } @else {\n <div class=\"flex items-center justify-center w-full h-full absolute left-0 top-0 z-[1]\">\n <div class=\"flex flex-col items-center justify-center w-full h-full shrink-0\">\n <ng-container *ngComponentOutlet=\"'no-result' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: 64 }\" />\n <div\n class=\"libs-ui-table-no-data-config-text\"\n [ngStyle]=\"noDataConfig().ngStyle\"\n [ngClass]=\"noDataConfig().ngClass\"\n [innerHtml]=\"noDataSearchText() | translate\"></div>\n </div>\n </div>\n }\n } @else {\n @if (templateNoData(); as templateNoData) {\n <ng-container *ngTemplateOutlet=\"templateNoData\" />\n } @else {\n <div class=\"flex items-center justify-center w-full h-full absolute left-0 top-0 z-[1]\">\n <div class=\"flex flex-col items-center justify-center w-full h-full shrink-0\">\n <ng-container *ngComponentOutlet=\"'no-data' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: 64 }\" />\n <div\n class=\"libs-ui-table-no-data-config-text\"\n [ngStyle]=\"noDataConfig().ngStyle\"\n [ngClass]=\"noDataConfig().ngClass\"\n [innerHtml]=\"noDataText() | translate\"></div>\n </div>\n </div>\n }\n }\n</ng-template>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { IButton } from '@libs-ui/components-buttons-button';\n\nexport interface ITabelButtonActionEvent {\n button: IButton;\n item: any;\n buttonDropdownData?: any;\n}\n\nexport interface ITableIButtonAction {\n ignoreAlignCenter?: boolean;\n marginTop?: number;\n marginLeft?: number;\n startOfColum?: number;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { IButton } from '@libs-ui/components-buttons-button';\n\nexport interface IButtonBarEvent {\n button: IButton;\n keys: Array<any>;\n items: Array<any>;\n hiddenBarButtons: () => void;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { WritableSignal } from '@angular/core';\nimport { IAvatarConfig } from '@libs-ui/components-avatar';\nimport { IButton } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsComponentOutletComponent } from '@libs-ui/components-component-outlet';\nimport { IDropdown } from '@libs-ui/components-dropdown';\nimport { ILineClampConfig } from '@libs-ui/components-line-clamp';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { IPopover } from '@libs-ui/components-popover';\nimport { ISwitchEvent } from '@libs-ui/components-switch';\nimport { TYPE_FUNCTION, TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport { Observable } from 'rxjs';\nimport { TYPE_ITEM_DATA_TABLE } from './table.type';\n\nexport interface ITableTemplateConfig {\n cssWrapper: string;\n fieldsConfig: Array<ITableFieldTemplateConfig>;\n}\n\nexport interface ITableFieldTemplateConfig {\n instance?: 'tooltip' | 'line-clamp' | 'buttons' | 'button-status' | 'switch' | 'badge' | 'other-action-show-popup' | 'shape-style' | 'image' | 'avatar' | 'button-action-show-popup';\n field: string;\n parseValue?: TYPE_FUNCTION;\n getTooltipIconClass?: TYPE_FUNCTION; // Sử dụng dùng iconClass tooltip cho type tooltip.\n getTooltipConfig?: TYPE_FUNCTION;\n action?: (dataField: any, item: TYPE_ITEM_DATA_TABLE, itemTableSelected?: TYPE_ITEM_DATA_TABLE) => any;\n tooltip?: IPopover; // nếu muốn sử dụng libs-uicomponents-tooltip. yêu cầu để type bằng tooltip\n ngStyle?: TYPE_OBJECT;\n getNgStyle?: TYPE_FUNCTION;\n ngClass?: TYPE_OBJECT;\n getNgClass?: TYPE_FUNCTION;\n ignoreClassMarginLeft?: boolean; // sử dụng khi muốn bỏ class margin cho type other-action-show-popup, badge\n\n lineClampConfig?: ILineClampConfig;\n\n getDisableValueSwitch?: TYPE_FUNCTION; // sử dụng khi muốn điểu chỉnh chế độ enable hay disable cho toggle\n getActiveValueSwitch?: TYPE_FUNCTION; // sử dụng khi muốn điểu chỉnh chế độ active hay deactive cho toggle\n switchAction?: (switchData: ISwitchEvent, item: TYPE_ITEM_DATA_TABLE) => void; // Bắt buộc khi sử dụng type = switch\n buttons?: Array<WritableSignal<IButton>>;\n getButtonsByItem?: TYPE_FUNCTION<Array<WritableSignal<IButton>>>;\n showButtonHoverMode?: boolean;\n getDisable?: TYPE_FUNCTION; // Sử dụng để disable input, button, qr-code\n dropdownConfig?: ITableFieldTemplateConfigDropdown;\n\n getAvatarConfig?: TYPE_FUNCTION<IAvatarConfig | undefined>;\n\n getImageSrc?: (value: any, item?: TYPE_OBJECT, lang?: string, isError?: boolean) => Observable<string>;\n rows?: Array<ITableTemplateConfig>;\n rowsTemplateCssWrapper?: string;\n\n getComponentOutlet?: () => Observable<LibsUiComponentsComponentOutletComponent | any>;\n getDataComponentOutlet?: TYPE_FUNCTION;\n}\n\nexport interface ITableFieldTemplateConfigDropdown extends Omit<IDropdown, 'listConfig'> {\n button?: WritableSignal<IButton>;\n getListConfig?: TYPE_FUNCTION<IListConfigItem>;\n listKeysDisableItem?: Array<string>;\n listHiddenInputSearch?: boolean;\n maxHeight?: number;\n ignoreArrow?: boolean;\n position?: {\n mode: 'start' | 'center' | 'end';\n distance: number;\n };\n listConfig?: IListConfigItem;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-components-table.mjs","sources":["../../../../../libs-ui/components/table/src/pipes/calculator-column.pipe.ts","../../../../../libs-ui/components/table/src/pipes/check-item-hight-light.pipe.ts","../../../../../libs-ui/components/table/src/templates/templates.component.ts","../../../../../libs-ui/components/table/src/templates/templates.component.html","../../../../../libs-ui/components/table/src/table.component.ts","../../../../../libs-ui/components/table/src/table.component.html","../../../../../libs-ui/components/table/src/interfaces/button-action-event.interface.ts","../../../../../libs-ui/components/table/src/interfaces/button-bar-event.interface.ts","../../../../../libs-ui/components/table/src/interfaces/template-config.interface.ts","../../../../../libs-ui/components/table/src/libs-ui-components-table.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { ITableHeaderConfig } from '../interfaces/table-config.interface';\nimport { TYPE_OBJECT } from '@libs-ui/interfaces-types';\n@Pipe({\n name: 'LibsUiTableCalculatorColumnPipe',\n standalone: true,\n})\nexport class LibsUiTableCalculatorColumnPipe implements PipeTransform {\n transform(header: ITableHeaderConfig | undefined, ignoreCalculatorWidthHeader: boolean, offsetWidth: number, headerLeftConfig?: Array<ITableHeaderConfig>, headerRightConfig?: Array<ITableHeaderConfig>): TYPE_OBJECT | undefined {\n if (!header?.ngStyle) {\n return undefined;\n }\n if (ignoreCalculatorWidthHeader) {\n return header.ngStyle;\n }\n\n const mixHeaderConfig = [...(headerLeftConfig || []), ...(headerRightConfig || [])];\n\n let totalPxWidthHeader = mixHeaderConfig.reduce((acc, curr) => acc + this.getWidthPxOfStyle(curr), 0);\n const totalPercentWidthHeader = mixHeaderConfig.reduce((acc, curr) => acc + this.getWidthPercentOfStyle(curr), 0);\n const totalWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader = mixHeaderConfig.reduce((acc, curr) => acc + (curr.keepWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader ? this.getWidthPxOfStyle(curr) : 0), 0);\n\n if (mixHeaderConfig.some((header) => header.isShowIndexOnRow)) {\n offsetWidth -= 50;\n }\n\n if (totalWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader) {\n offsetWidth -= totalWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader;\n totalPxWidthHeader -= totalWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader;\n }\n\n let percent = this.getWidthPercentOfStyle(header);\n if (percent) {\n offsetWidth -= totalPxWidthHeader;\n const percentDivide = (totalPercentWidthHeader - 100) / mixHeaderConfig.length;\n percent -= percentDivide;\n const widthCalculator = (percent / 100) * offsetWidth;\n return this.getStyleUpdate(widthCalculator, header.ngStyle);\n }\n\n const width = this.getWidthPxOfStyle(header);\n if (totalPxWidthHeader > offsetWidth || header.keepWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader || totalPercentWidthHeader) {\n return this.getStyleUpdate(width, header.ngStyle);\n }\n const widthCalculator = (width / totalPxWidthHeader) * offsetWidth;\n return this.getStyleUpdate(widthCalculator, header.ngStyle);\n }\n\n private getWidthPxOfStyle(headerGetWidth: ITableHeaderConfig): number {\n let { flex, width, maxWidth } = headerGetWidth.ngStyle || {};\n if (flex?.includes('%') || width?.includes('%') || maxWidth?.includes('%')) {\n return 0;\n }\n width = parseInt(width || '0');\n maxWidth = parseInt(maxWidth || '0');\n flex = parseInt((flex || '0').split(' ').pop() || '0');\n\n if (!flex && !width && !maxWidth) {\n return 0;\n }\n const widthMax = Math.max(width, maxWidth, flex);\n return widthMax;\n }\n\n private getWidthPercentOfStyle(headerGetWidth: ITableHeaderConfig): number {\n let { flex, width, maxWidth } = headerGetWidth.ngStyle || {};\n if (flex?.includes('px') || width?.includes('px') || maxWidth?.includes('px')) {\n return 0;\n }\n width = parseInt(width || '0');\n maxWidth = parseInt(maxWidth || '0');\n flex = parseInt((flex || '0').split(' ').pop() || '0');\n if (!flex && !width && !maxWidth) {\n return 0;\n }\n const widthMax = Math.max(width, maxWidth, flex);\n return widthMax;\n }\n\n private getStyleUpdate(widthCalculator: number, ngStyle: TYPE_OBJECT) {\n return {\n ...ngStyle,\n flex: `0 0 ${widthCalculator}px`,\n width: `${widthCalculator}px`,\n maxWidth: `${widthCalculator}px`,\n };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TYPE_ITEM_DATA_TABLE } from '../interfaces/table.type';\n@Pipe({\n name: 'LibsUiTableCheckItemHightLightPipe',\n standalone: true,\n})\nexport class LibsUiTableCheckItemHightLightPipe implements PipeTransform {\n transform(item: TYPE_ITEM_DATA_TABLE, itemsHightLight: Array<TYPE_ITEM_DATA_TABLE>): boolean {\n return itemsHightLight.some((itemHightLight) => itemHightLight === item);\n }\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AsyncPipe, NgClass, NgComponentOutlet, NgStyle } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, OnDestroy, signal } from '@angular/core';\nimport { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';\nimport { LibsUiComponentsBadgeComponent } from '@libs-ui/components-badge';\nimport { IButton, LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsButtonsStatusComponent } from '@libs-ui/components-buttons-status';\nimport { IDropdownFunctionControlEvent, IEmitMultiKey, IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { LibsUiComponentsLineClampComponent } from '@libs-ui/components-line-clamp';\nimport { LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { ISwitchEvent, LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';\nimport { LibsUiPipesCallFunctionInTemplatePipe } from '@libs-ui/pipes-call-function-in-template';\nimport { LibsUiPipesCloneObjectPipe } from '@libs-ui/pipes-clone-object';\nimport { LibsUiPipesGetValueOfObjectPipe } from '@libs-ui/pipes-get-value-of-object';\nimport { LibsUiPipesSecurityTrustPipe } from '@libs-ui/pipes-security-trust';\nimport { convertObjectToSignal, get } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TYPE_ITEM_DATA_TABLE } from '../interfaces';\nimport { ITableFieldTemplateConfig, ITableTemplateConfig } from '../interfaces/template-config.interface';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-table-templates',\n templateUrl: './templates.component.html',\n styleUrls: ['./templates.component.scss'],\n standalone: true,\n imports: [\n NgStyle,\n NgClass,\n TranslateModule,\n AsyncPipe,\n NgComponentOutlet,\n LibsUiPipesGetValueOfObjectPipe,\n LibsUiComponentsAvatarComponent,\n LibsUiPipesCallFunctionInTemplatePipe,\n LibsUiPipesSecurityTrustPipe,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsButtonsStatusComponent,\n LibsUiComponentsSwitchComponent,\n LibsUiPipesCloneObjectPipe,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsLineClampComponent,\n LibsUiComponentsDropdownComponent,\n LibsUiComponentsBadgeComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibsUiComponentsTableTemplatesComponent implements OnDestroy {\n private lockClick!: boolean;\n private lockClickTimeoutId: ReturnType<typeof setTimeout> | undefined;\n private readonly functionControls = new Map<number, IDropdownFunctionControlEvent>();\n protected isImageError = signal<boolean | undefined>(undefined);\n\n readonly isHover = input<boolean>();\n readonly configs = input<Array<ITableTemplateConfig>>();\n readonly templateCssWrapper = input<string>();\n readonly item = input.required<TYPE_ITEM_DATA_TABLE>();\n\n protected templateCssWrapperComputed = computed(() => this.templateCssWrapper() || '');\n\n protected async handlerItemClick(event: Event | TYPE_POPOVER_EVENT | undefined, config: ITableFieldTemplateConfig) {\n if (event instanceof Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (typeof event === 'string' && event !== 'click') {\n return;\n }\n await this.handleLockClick(async () => {\n if (config?.action) {\n config.action(get(this.item(), config.field as any), this.item());\n }\n });\n }\n\n protected async clickButtonAction(button: IButton) {\n await this.handleLockClick(async () => {\n button.action?.({ item: this.item() });\n });\n }\n\n protected async handlerSwitch(switchItem: ISwitchEvent, config: ITableFieldTemplateConfig) {\n await this.handleLockClick(async () => {\n config?.switchAction?.(switchItem, this.item());\n });\n }\n\n protected async handlerSelectItemDropdown(fieldConfig: ITableFieldTemplateConfig, index: number, data?: IEmitSelectKey) {\n if (!data) {\n return;\n }\n await this.handleLockClick(async () => {\n fieldConfig?.action?.(data.key, data.item, this.item());\n this.functionControls?.get(index)?.reset();\n this.functionControls?.get(index)?.removeList();\n });\n }\n\n protected async handlerSelectItemsDropdown(fieldConfig: ITableFieldTemplateConfig, index: number, data?: IEmitMultiKey) {\n if (!data) {\n return;\n }\n await this.handleLockClick(async () => {\n fieldConfig?.action?.(data.keys, convertObjectToSignal(data.mapKeys, false), this.item());\n this.functionControls?.get(index)?.reset();\n });\n }\n\n protected async handlerImageError(event: Event) {\n event.stopPropagation();\n this.isImageError.set(true);\n }\n\n protected async handlerFunctionControl(event: IDropdownFunctionControlEvent, index: number) {\n this.functionControls.set(index, event);\n }\n\n private async handleLockClick(callback: () => Promise<void>) {\n if (this.lockClick) return;\n this.lockClick = true;\n try {\n await callback();\n } catch (error) {\n console.error(error);\n } finally {\n this.lockClickTimeoutId = setTimeout(() => {\n this.lockClick = false;\n }, 250);\n }\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.lockClickTimeoutId);\n this.functionControls.clear();\n }\n}\n","@if (configs(); as configs) {\n @if (item(); as item) {\n <div class=\"libs-ui-table-template {{ templateCssWrapperComputed() }}\">\n @for (config of configs; track config) {\n @if (config.fieldsConfig) {\n <div [class]=\"config.cssWrapper\">\n @for (fieldConfig of config.fieldsConfig; track fieldConfig; let index = $index) {\n @let constHtmlNgStyle = fieldConfig.getNgStyle ? (item()[fieldConfig.field] | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getNgStyle : item() | async) : fieldConfig.ngStyle || {};\n @let constHtmlNgClass = fieldConfig.getNgClass ? (item()[fieldConfig.field] | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getNgClass : item() | async) : fieldConfig.ngClass || {};\n @if (!fieldConfig.rows && !fieldConfig.getComponentOutlet) {\n @switch (fieldConfig.instance) {\n @case ('tooltip') {\n @if (fieldConfig.tooltip || {}; as tooltip) {\n <span\n LibsUiComponentsPopoverDirective\n [type]=\"tooltip.type || 'text'\"\n [mode]=\"tooltip.mode || 'hover'\"\n [isAddContentToParentDocument]=\"tooltip.isAddContentToParentDocument || false\"\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [classInclude]=\"tooltip.classInclude || ' '\"\n [ignoreShowPopover]=\"tooltip.ignoreShowPopover || false\"\n [config]=\"\n (fieldConfig.getTooltipConfig\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getTooltipConfig : item() | async)\n : (tooltip.config | LibsUiPipesCloneObjectPipe)\n ) | translate\n \"\n [innerHTML]=\"\n (fieldConfig.field ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true) : tooltip.dataView)\n | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item()\n | async\n | translate\n | LibsUiPipesSecurityTrustPipe: 'html' : false\n | async\n \"\n (outEvent)=\"handlerItemClick($event, fieldConfig)\"></span>\n }\n }\n @case ('image') {\n @if (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getImageSrc : item() : isImageError() | async; as linkImage) {\n @if (linkImage !== ' ') {\n <img\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [src]=\"linkImage\"\n alt=\"\"\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerItemClick($event, fieldConfig)\"\n (keydown.enter)=\"handlerItemClick($event, fieldConfig)\" />\n }\n }\n }\n\n @case ('avatar') {\n @let constHtmlAvatarConfig =\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getAvatarConfig : item() : undefined : { valueIsEmpty: undefined } | async;\n @if (constHtmlAvatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"constHtmlAvatarConfig.typeShape || 'circle'\"\n [classInclude]=\"constHtmlAvatarConfig.classInclude\"\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [size]=\"constHtmlAvatarConfig.size || 32\"\n [linkAvatar]=\"constHtmlAvatarConfig.linkAvatar\"\n [linkAvatarError]=\"constHtmlAvatarConfig.linkAvatarError\"\n [idGenColor]=\"constHtmlAvatarConfig.idGenColor\"\n [getLastTextAfterSpace]=\"constHtmlAvatarConfig.getLastTextAfterSpace\"\n [textAvatar]=\"constHtmlAvatarConfig.textAvatar\" />\n }\n }\n\n @case ('buttons') {\n @if ((fieldConfig.buttons && fieldConfig.buttons.length) || fieldConfig.getButtonsByItem) {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [class.invisible]=\"!isHover() && fieldConfig.showButtonHoverMode\">\n @for (button of fieldConfig.buttons || (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getButtonsByItem : item() | async); track button) {\n <libs_ui-components-buttons-button\n [type]=\"button().type || 'button-primary'\"\n [sizeButton]=\"button().sizeButton || 'smaller'\"\n [disable]=\"\n (button().disable ?? fieldConfig.getDisable) ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisable : item() | async) : false\n \"\n [label]=\"button().label || ' '\"\n [classIconLeft]=\"button().classIconLeft || ''\"\n [classIconRight]=\"button().classIconRight || ''\"\n [popover]=\"button().popover || {}\"\n [classInclude]=\"button().classInclude || ''\"\n [ignorePointerEvent]=\"button().ignorePointerEvent\"\n [iconOnlyType]=\"button().iconOnlyType\"\n (outClick)=\"clickButtonAction(button())\" />\n }\n </div>\n }\n }\n\n @case ('button-status') {\n <libs_ui-components-buttons-status\n [config]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async\"\n (click)=\"handlerItemClick($event, fieldConfig)\"\n (keydown.enter)=\"handlerItemClick($event, fieldConfig)\" />\n }\n\n @case ('switch') {\n <libs_ui-components-switch\n [active]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getActiveValueSwitch : item() | async\"\n [disable]=\"fieldConfig.getDisableValueSwitch ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisableValueSwitch : item() | async) : false\"\n (outSwitch)=\"handlerSwitch($event, fieldConfig)\" />\n }\n\n @case (fieldConfig.instance === 'other-action-show-popup' || fieldConfig.instance === 'badge' || fieldConfig.instance === 'button-action-show-popup' ? fieldConfig.instance : '') {\n @if ((item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async) !== ' ') {\n @let constHtmlDisableDropdown =\n (fieldConfig.dropdownConfig?.disable ?? fieldConfig.getDisable)\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDisable : item() | async)\n : false;\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [class.ml-[8px]]=\"!fieldConfig.ignoreClassMarginLeft\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{\n widthByParent: false,\n ignoreArrow: fieldConfig.dropdownConfig?.ignoreArrow || false,\n maxHeight: fieldConfig.dropdownConfig?.maxHeight || 2048,\n paddingLeftItem: fieldConfig.dropdownConfig?.paddingLeftItem ?? true,\n classInclude: fieldConfig.dropdownConfig?.classIncludePopup || 'w-[250px]',\n position: fieldConfig.dropdownConfig?.position || {\n mode: 'center',\n distance: 0,\n },\n }\"\n [zIndex]=\"fieldConfig.dropdownConfig?.zIndex\"\n [listConfig]=\"\n fieldConfig.dropdownConfig?.getListConfig\n ? (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.dropdownConfig?.getListConfig : item() | async)\n : fieldConfig.dropdownConfig?.listConfig\n \"\n [listBackgroundCustom]=\"fieldConfig.dropdownConfig?.listBackgroundListCustom\"\n [listMaxItemShow]=\"fieldConfig.dropdownConfig?.listMaxItemShow || 5\"\n [listKeysDisable]=\"fieldConfig.dropdownConfig?.listKeysDisableItem\"\n [listHiddenInputSearch]=\"fieldConfig.dropdownConfig?.listHiddenInputSearch\"\n [disable]=\"constHtmlDisableDropdown\"\n (outFunctionsControl)=\"handlerFunctionControl($event, index)\"\n (outSelectKey)=\"handlerSelectItemDropdown(fieldConfig, index, $event)\"\n (outSelectMultiKey)=\"handlerSelectItemsDropdown(fieldConfig, index, $event)\">\n @if (fieldConfig.instance === 'other-action-show-popup') {\n <div\n [innerHTML]=\"\n item()\n | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true\n | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item()\n | async\n | translate\n | LibsUiPipesSecurityTrustPipe: 'html' : false\n | async\n \"></div>\n }\n @if (fieldConfig.instance === 'badge') {\n @let constHtmlDataBadge = item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async;\n @if (constHtmlDataBadge > 0) {\n <libs_ui-components-badge\n [active]=\"true\"\n [ignoreMarginDefault]=\"true\"\n mode=\"+x\"\n [count]=\"constHtmlDataBadge\"\n [maxCount]=\"99\" />\n }\n }\n @if (fieldConfig.instance === 'button-action-show-popup') {\n <libs_ui-components-buttons-button\n [type]=\"fieldConfig?.dropdownConfig?.button()?.type || 'button-primary'\"\n [sizeButton]=\"fieldConfig?.dropdownConfig?.button()?.sizeButton || 'smaller'\"\n [disable]=\"fieldConfig?.dropdownConfig?.button()?.disable ?? constHtmlDisableDropdown\"\n [label]=\"fieldConfig?.dropdownConfig?.button()?.label || ' '\"\n [classIconLeft]=\"fieldConfig?.dropdownConfig?.button()?.classIconLeft || 'libs-ui-icon-more-vertical rotate-[90deg] mr-0'\"\n [classIconRight]=\"fieldConfig?.dropdownConfig?.button()?.classIconRight || ''\"\n [popover]=\"fieldConfig?.dropdownConfig?.button()?.popover || {}\"\n [classInclude]=\"fieldConfig?.dropdownConfig?.button()?.classInclude || ''\"\n [ignoreStopPropagationEvent]=\"true\" />\n }\n </libs_ui-components-dropdown>\n </div>\n }\n }\n\n @case ('line-clamp') {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\">\n @if (fieldConfig.lineClampConfig; as lineClampConfig) {\n <libs_ui-components-line_clamp\n [ignoreShowButtonCollapseExpand]=\"lineClampConfig.ignoreShowButtonCollapseExpand ?? true\"\n [showTooltip]=\"lineClampConfig.showTooltip ?? true\"\n [maxHeight]=\"lineClampConfig.maxHeight || 36\"\n [maxWidthTooltip]=\"lineClampConfig.maxWidthTooltip || 200\"\n [maxHeightTooltip]=\"lineClampConfig.maxHeightTooltip || 100\"\n [ngClassObject]=\"lineClampConfig.ngClassObject ?? { 'libs-ui-line-clamp-content libs-ui-font-h5r': true }\"\n [isInnerText]=\"lineClampConfig.isInnerText || false\"\n [ignoreStopPropagationTooltipEvent]=\"true\"\n [content]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async\"\n (click)=\"handlerItemClick($event, fieldConfig)\"\n (keydown.enter)=\"handlerItemClick($event, fieldConfig)\" />\n }\n </div>\n }\n\n @case ('shape-style') {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [innerHTML]=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate | LibsUiPipesSecurityTrustPipe: 'html' : false | async\n \"\n (click)=\"handlerItemClick($event, fieldConfig)\"\n (keydown.enter)=\"handlerItemClick($event, fieldConfig)\"></div>\n }\n @default {\n <div\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [innerHTML]=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate | LibsUiPipesSecurityTrustPipe: 'html' : true | async\n \"\n (click)=\"handlerItemClick($event, fieldConfig)\"\n (keydown.enter)=\"handlerItemClick($event, fieldConfig)\"></div>\n }\n }\n } @else {\n @if (fieldConfig.rows) {\n <div\n class=\"w-full flex relative {{ fieldConfig.rowsTemplateCssWrapper }}\"\n [style.height.px]=\"rowRef.clientHeight\">\n <div\n #rowRef\n class=\"w-full flex absolute {{ fieldConfig.rowsTemplateCssWrapper }}\">\n <libs_ui-components-table-templates\n class=\"flex w-full\"\n [item]=\"item\"\n [configs]=\"fieldConfig.rows\" />\n </div>\n </div>\n } @else {\n <ng-container\n *ngComponentOutlet=\"\n item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getComponentOutlet : item() | async;\n inputs: undefined | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getDataComponentOutlet : item() : fieldConfig.field : { valueIsEmpty: { item: item() } } | async\n \" />\n }\n }\n }\n </div>\n }\n }\n </div>\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AsyncPipe, NgClass, NgComponentOutlet, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { HttpParams } from '@angular/common/http';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, DestroyRef, effect, ElementRef, inject, input, OnDestroy, OnInit, output, signal, untracked, viewChild, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { VirtualScrollerComponent, VirtualScrollerModule } from '@iharbeck/ngx-virtual-scroller';\nimport { IButton, LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { ISort, LibsUiComponentsButtonsSortArrowComponent } from '@libs-ui/components-buttons-sort';\nimport { ICheckboxItem } from '@libs-ui/components-checkbox-group';\nimport { ICheckboxEvent, LibsUiComponentsCheckboxSingleComponent } from '@libs-ui/components-checkbox-single';\nimport { IDropdownFunctionControlEvent, IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { IPaginationConfig, LibsUiComponentsPaginationComponent } from '@libs-ui/components-pagination';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { LibsUiScrollMeasureItemDirectionHorizontalDirective } from '@libs-ui/components-scroll-measure-items-direction-horizontal';\nimport { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';\nimport { LibsUiComponentsSpinnerComponent } from '@libs-ui/components-spinner';\nimport { LibsUiIconsGetIconComponentPipe } from '@libs-ui/icons';\nimport { IHttpResponseError, IPaging, TYPE_OBJECT, TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiPipesCallFunctionInTemplatePipe } from '@libs-ui/pipes-call-function-in-template';\nimport { LibsUiPipesCheckSelectedByKeyPipe } from '@libs-ui/pipes-check-selected-by-key';\nimport { LibsUiPipesConvertObjectToSignalPipe } from '@libs-ui/pipes-convert-object-to-signal';\nimport { IHttpRequestConfig, LibsUiHttpRequestService, returnListObject } from '@libs-ui/services-http-request';\nimport { cloneDeep, convertObjectToSignal, deleteUnicode, get, set, viewDataNumberByLanguage } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { fromEvent, lastValueFrom, of, timer } from 'rxjs';\nimport { auditTime } from 'rxjs/operators';\nimport {\n IButtonBarEvent,\n IConfigSelectMoreItem,\n IConfigTemplateItemCollapseExpand,\n ILoadMoreEvent,\n ISortEvent,\n ITableFooterConfig,\n ITableHeaderConfig,\n TYPE_DATA_FILTER_TABLE,\n TYPE_DATA_TABLE,\n TYPE_ITEM_DATA_TABLE,\n TYPE_NEW_DATA_TABLE,\n TYPE_TABLE_FILTER,\n} from './interfaces';\nimport { ITableFunctionControlEvent } from './interfaces/function-control-event.interface';\nimport { ITableNoDataConfig } from './interfaces/no-data-config.interface';\nimport { LibsUiTableCalculatorColumnPipe } from './pipes/calculator-column.pipe';\nimport { LibsUiTableCheckItemHightLightPipe } from './pipes/check-item-hight-light.pipe';\nimport { LibsUiComponentsTableTemplatesComponent } from './templates/templates.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n NgStyle,\n AsyncPipe,\n NgTemplateOutlet,\n NgComponentOutlet,\n LibsUiComponentsTableTemplatesComponent,\n TranslateModule,\n VirtualScrollerModule,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiPipesConvertObjectToSignalPipe,\n LibsUiComponentsDropdownComponent,\n LibsUiComponentsButtonsSortArrowComponent,\n LibsUiComponentsPaginationComponent,\n LibsUiComponentsCheckboxSingleComponent,\n LibsUiTableCalculatorColumnPipe,\n LibsUiComponentsSpinnerComponent,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsScrollOverlayDirective,\n LibsUiIconsGetIconComponentPipe,\n LibsUiPipesCallFunctionInTemplatePipe,\n LibsUiPipesCheckSelectedByKeyPipe,\n LibsUiTableCheckItemHightLightPipe,\n LibsUiScrollMeasureItemDirectionHorizontalDirective,\n ],\n})\nexport class LibsUiComponentsTableComponent implements OnInit, OnDestroy {\n /** GROUP 1 — private non-signal */\n private functionControlSelectMoreItem?: IDropdownFunctionControlEvent;\n\n /** GROUP 2 — protected non-signal */\n protected itemOfIndexHover?: TYPE_ITEM_DATA_TABLE;\n\n /** GROUP 3 — private signal */\n private readonly moreItemPopoverConfig = signal({ zIndex: 1200 });\n // CONVENTION-EXCEPT: any — IListConfigItemText không được export, WritableSignal<any> tương thích\n private readonly moreItemTextConfig = signal<any>({\n fieldKey: 'key',\n ignoreIconSelected: true,\n getValue: undefined,\n configLabelPopover: this.moreItemPopoverConfig,\n });\n private readonly moreItemHttpData = signal<IHttpRequestConfig>({\n objectInstance: returnListObject(),\n functionName: 'list',\n argumentsValue: [],\n });\n private readonly hasScroll = signal<boolean>(false);\n private readonly instanceSort = signal<ISort | undefined>(undefined);\n private readonly pagingStore = signal<IPaging | undefined>(undefined);\n private readonly loadedLastItem = signal<boolean>(false);\n private readonly storeParamsCallApi = signal<TYPE_OBJECT>({});\n private readonly timeoutLeaveItem = signal<number | undefined>(undefined);\n private readonly mouseEnterHeader = signal<boolean>(false);\n private readonly stores = signal<Array<WritableSignal<TYPE_OBJECT>>>([]);\n private readonly totalItemInBackend = signal<number>(0);\n\n /** GROUP 4 — protected signal */\n protected keysSelected = signal<Array<any>>([]);\n protected loading = signal<boolean>(false);\n protected items = signal<Array<WritableSignal<TYPE_OBJECT>>>([]);\n protected itemFooter = signal<TYPE_OBJECT | undefined>(undefined);\n protected keySearch = signal<string>('');\n protected itemsHightLight = signal<Array<TYPE_ITEM_DATA_TABLE>>([]);\n protected headerRightViewPort = signal<Array<ITableHeaderConfig>>([]);\n protected paddingLeftHeaderRight = signal<number>(0);\n protected footerRightViewPort = signal<Array<ITableFooterConfig>>([]);\n\n /** GROUP 5 — input() */\n readonly optimizeTableRenderByOnViewport = input<boolean>();\n readonly timeHighlighNewItem = input<number, number | undefined>(2000, { transform: (val) => val ?? 2000 });\n readonly headerLeft = input<Array<ITableHeaderConfig>, Array<ITableHeaderConfig> | undefined>([], { transform: (val) => val ?? [] });\n readonly headerRight = input<Array<ITableHeaderConfig>, Array<ITableHeaderConfig> | undefined>([], { transform: (val) => val ?? [] });\n readonly ignoreCalculatorWidthHeader = input<{\n headerLeft?: boolean;\n headerRight?: boolean;\n }>();\n readonly configTemplateItemCollapseExpand = input<IConfigTemplateItemCollapseExpand>();\n readonly showFooter = input<boolean>();\n readonly ignoreBorderFooter = input<boolean>();\n readonly customPositionFooter = input<'top' | 'bottom', 'top' | 'bottom' | undefined>('bottom', { transform: (val) => val ?? 'bottom' });\n readonly footerLeft = input<Array<ITableFooterConfig> | undefined>();\n readonly footerRight = input<Array<ITableFooterConfig> | undefined>();\n readonly disableCheckbox = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly enableUnequalChildrenSizes = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly bufferAmount = input<number, number | undefined>(5, {\n transform: (val) => {\n if (!val) return 5;\n return val > 25 ? 25 : val;\n },\n });\n readonly totalItem = input<number>();\n readonly isDashBorder = input<boolean>();\n readonly classHeaderContainerInclude = input<string>();\n readonly classHeaderLeftInclude = input<string>();\n readonly classBodyInclude = input<string, string | undefined>('', { transform: (val) => val ?? '' });\n readonly classFooterInclude = input<string, string | undefined>('', { transform: (val) => val ?? '' });\n readonly classTableContainerInclude = input<string, string | undefined>('', { transform: (val) => val ?? '' });\n readonly classBarInclude = input<string>('justify-between mb-[16px]');\n\n readonly fieldKey = input<string, string | undefined>('id', { transform: (val) => val || 'id' }); // tên field định danh item của listDatas\n readonly defaultKeysSelected = input<Array<any>>();\n readonly labelBarNoSelectItem = input<string>(`i18n_total_quantity`); // sử dụng để hiên thị khi tích chọn item\n readonly labelBarButtons = input<string, string | undefined>('i18n_number_item_selected', { transform: (val) => val || 'i18n_number_item_selected' }); // sử dụng để hiên thị khi tích chọn item\n readonly classLabelBarButtons = input<string, string | undefined>('', { transform: (val) => val ?? '' }); // sử dụng để hiên thị khi tích chọn item\n readonly barButtons = input<Array<IButton>>();\n readonly sortLocal = input<boolean>(); // trường hợp nếu sortLocal này không đáp ứng được nghiệp vụ thì mới cân nhắc sử dụng filterLocal\n readonly filterOrSortLocal = input<TYPE_TABLE_FILTER>();\n readonly httpRequestData = input<IHttpRequestConfig>();\n readonly httpRequestDataFooter = input<IHttpRequestConfig>();\n readonly newData = input<TYPE_NEW_DATA_TABLE>();\n readonly filter = input<TYPE_DATA_FILTER_TABLE, TYPE_DATA_FILTER_TABLE | undefined>({ filterData: {} }, { transform: (val) => val ?? { filterData: {} } });\n readonly ignoreBar = input<boolean>();\n readonly classLabelBarNoSelectItem = input<string>();\n readonly ignoreClassBgHeader = input<boolean>();\n readonly noDataConfig = input<ITableNoDataConfig, ITableNoDataConfig | undefined>(\n { textNoData: 'i18n_no_data_yet', textSearchNoData: 'i18n_no_result' },\n { transform: (val) => val || { textNoData: 'i18n_no_data_yet', textSearchNoData: 'i18n_no_result' } }\n );\n readonly showScrollTablePinnedIfNoData = input<boolean>();\n readonly ignoreBorderItemLast = input<boolean>();\n readonly isHiddenHeaderWhenNodata = input<boolean>();\n readonly maxItemSelected = input<number, number | undefined>(100, { transform: (val) => val ?? 100 });\n readonly configSelectMoreItem = input<IConfigSelectMoreItem>();\n readonly onlyShowNoResult = input<boolean>();\n readonly ignoreBorderItem = input<boolean>();\n readonly activityLoadData = input<'scroll-infinity' | 'click-pagination', 'scroll-infinity' | 'click-pagination' | undefined>('scroll-infinity', { transform: (val) => val ?? 'scroll-infinity' });\n readonly paginationSetting = input<IPaginationConfig>();\n readonly templateNoData = input<TYPE_TEMPLATE_REF>();\n readonly templateNoResult = input<TYPE_TEMPLATE_REF>();\n readonly autoEmitKeysSelectedWithItems = input<boolean>();\n readonly functionGetWidthItem = input<() => Promise<number>>(); // bắt buộc truyền vào khi useScrollMeasureColumn = true\n readonly useScrollMeasureColumn = input<boolean>();\n\n /** GROUP 6 — protected computed */\n protected classHeaderContainer = computed(() => `libs-ui-table-header-container w-full absolute flex shrink-0 ${this.ignoreClassBgHeader() ? '' : 'bg-white'} overflow-x-hidden z-[1] items-center ${this.classHeaderContainerInclude() || ''}`);\n protected classHeaderLeftContainer = computed(() => `h-full flex sticky top-0 left-0 z-[1] ${this.ignoreClassBgHeader() ? '' : 'bg-white'} ${this.classHeaderLeftInclude() || ''}`);\n protected totalItemDisplay = computed(() => viewDataNumberByLanguage(this.totalItem() ?? this.totalItemInBackend(), false));\n protected listConfigMoreItem = computed<IListConfigItem>(() => ({\n type: 'text',\n configTemplateText: this.moreItemTextConfig,\n httpRequestData: this.moreItemHttpData,\n }));\n protected hasItemHightLight = computed(() => this.itemsHightLight().length > 0);\n protected classLabelBarNoSelectItemCss = computed(() => this.classLabelBarNoSelectItem() ?? 'px-[12px] py-[5px]');\n protected paginationConfig = computed(() => ({\n modeDisplayTotalPageAndGotoPage: this.paginationSetting()?.modeDisplayTotalPageAndGotoPage ?? 'bottom',\n classDisplayTotalPageAndGotoPage: this.paginationSetting()?.classDisplayTotalPageAndGotoPage ?? '',\n classIncludeItem: this.paginationSetting()?.classIncludeItem ?? '',\n classIncludeContainer: this.paginationSetting()?.classIncludeContainer ?? '!items-end',\n disable: (this.paginationSetting()?.disable ?? false) || this.loading() || !this.items().length,\n numberPageDisplay: this.paginationSetting()?.numberPageDisplay ?? 5,\n showTotalPage: this.paginationSetting()?.showTotalPage ?? false,\n showInputGotoPage: this.paginationSetting()?.showInputGotoPage ?? false,\n firstPageStartNumber: this.paginationSetting()?.firstPageStartNumber ?? 1,\n }));\n protected pagingTotalItems = computed(() => this.pagingStore()?.total_items ?? (this.pagingStore()?.total_pages ?? 0) * (this.pagingStore()?.per_page ?? 0));\n protected pagingPerPage = computed(() => this.pagingStore()?.per_page ?? 0);\n protected pagingCurrentPage = computed(() => this.pagingStore()?.page ?? 0);\n protected noDataText = computed(() => this.noDataConfig().textNoData ?? 'i18n_no_data_yet');\n protected noDataSearchText = computed(() => this.noDataConfig().textSearchNoData ?? 'i18n_no_result');\n\n /** GROUP 7 — output() */\n readonly outLoadMore = output<ILoadMoreEvent>();\n readonly outScrollIsGone = output<ILoadMoreEvent>();\n readonly outLoading = output<boolean>();\n readonly outSort = output<ISortEvent>();\n readonly outClickBarButton = output<IButtonBarEvent>();\n readonly outKeysSelected = output<{ keys: Array<any>; items?: Array<WritableSignal<any>> }>();\n readonly outFunctionsControl = output<ITableFunctionControlEvent>();\n readonly outLoadDataComplete = output<WritableSignal<Array<WritableSignal<any>>>>();\n readonly outTotalItem = output<number>();\n readonly outLoadDataError = output<IHttpResponseError>();\n\n /** GROUP 8 — viewChild() (private) */\n private readonly headerElementRef = viewChild<ElementRef>('headerElementRef');\n private readonly footerElementRef = viewChild<ElementRef>('footerElementRef');\n private readonly footerLeftElementRef = viewChild<ElementRef>('footerLeftElementRef');\n private readonly bodyElementRef = viewChild<ElementRef>('bodyElementRef');\n private readonly bodyComponentRef = viewChild<VirtualScrollerComponent>('bodyComponentRef');\n private readonly paginationRef = viewChild<LibsUiComponentsPaginationComponent>(LibsUiComponentsPaginationComponent);\n\n /** GROUP 9 — inject() (private readonly) */\n private readonly httpRequestService = inject(LibsUiHttpRequestService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly cdr = inject(ChangeDetectorRef);\n\n constructor() {\n effect(() => {\n const config = this.configSelectMoreItem();\n untracked(() => {\n this.moreItemTextConfig.update((c) => ({ ...c, getValue: config?.getValue }));\n this.moreItemHttpData.update((c) => ({ ...c, objectInstance: returnListObject(config?.listOption) }));\n });\n });\n\n effect(() => {\n if (this.defaultKeysSelected()?.length) {\n untracked(() => {\n this.keysSelected.update((keys) => [...keys, ...(this.defaultKeysSelected() || [])]);\n this.emitKeysSelected(true);\n });\n }\n });\n\n effect(() => {\n if (this.showFooter()) {\n untracked(() => this.callApiByServiceFooter());\n }\n });\n\n effect(() => {\n if (this.newData()?.data().length) {\n untracked(() => this.addItems(this.newData()?.data as any, !this.newData()?.addToLastList));\n }\n });\n\n effect(() => {\n if (!this.filter().filterData || this.filter().ignoreCallApiAuto) {\n return;\n }\n untracked(() => {\n this.keySearch.set(get(this.filter().filterData, 'keySearch', ''));\n this.storeParamsCallApi.set(cloneDeep(this.filter().filterData));\n if (this.filter()?.filterData && !this.filter().filterData['instanceSort'] && this.instanceSort()) {\n this.storeParamsCallApi.update((data) => ({ ...data, instanceSort: this.instanceSort() }));\n }\n if (this.filterOrSortLocal() && this.stores().length) {\n this.items.set(this.filterOrSortLocal()?.(signal([...this.stores()]), { ...(this.filter().filterData || {}), instanceSort: this.instanceSort() }) || []);\n\n return;\n }\n\n this.resetScroll();\n this.callApiByService(true);\n });\n });\n }\n\n ngOnInit() {\n this.outFunctionsControl.emit(this.FunctionsControl);\n\n fromEvent(window, 'resize')\n .pipe(auditTime(100), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.cdr.markForCheck();\n });\n }\n\n get FunctionsControl(): ITableFunctionControlEvent {\n return {\n reset: this.reset.bind(this),\n callApiByService: this.callApiByService.bind(this),\n resetScroll: this.resetScroll.bind(this),\n addItems: this.addItems.bind(this),\n removeItems: this.removeItems.bind(this),\n getScrollContainer: this.getScrollContainer.bind(this),\n hideToolBarBottom: () => {\n return;\n },\n resetKeySelected: () => {\n this.keysSelected.set([]);\n this.emitKeysSelected(true);\n },\n detectChanges: () => this.cdr.detectChanges(),\n setCountPagingStore: (count: number) => this.httpRequestData() && this.pagingStore() && this.pagingStore.update((paging) => ({ ...paging, total_items: count })),\n getCount: this.getCount.bind(this),\n getStore: () => this.stores() || [],\n getItems: () => this.items() || [],\n getIndexByItem: async (item: TYPE_ITEM_DATA_TABLE) => lastValueFrom(this.getIndexRow({ value: item })),\n hightLightItem: this.hightLightItem.bind(this),\n changePagination: async (page?: number) => await this.paginationRef()?.FunctionsControl?.changePage(page),\n };\n }\n\n protected handlerChangeAllChecked() {\n this.keysSelected.set([]);\n this.emitKeysSelected();\n }\n\n protected async handlerChangeCheckedAllItems(event: ICheckboxEvent) {\n if (!event.checked) {\n this.keysSelected.set([]);\n this.emitKeysSelected();\n return;\n }\n const items = this.items();\n const cancelFlags = await Promise.all(items.map((item) => this.checkCancelConditionCheckedItem(item)));\n\n this.keysSelected.set(items.filter((_, index) => !cancelFlags[index]).map((item) => `${get<unknown>(item, this.fieldKey())}`));\n this.emitKeysSelected();\n }\n\n protected handlerChangeItemChecked(event: ICheckboxItem, item: TYPE_OBJECT) {\n const key = get<unknown>(item, this.fieldKey());\n const keys = new Set(this.keysSelected());\n\n keys.add(key);\n if (!event.checked) {\n keys.delete(key);\n }\n this.keysSelected.set(Array.from(keys));\n this.emitKeysSelected();\n }\n\n protected async handlerChangeSort(sort: ISort) {\n const scrollLeft = this.headerElementRef()?.nativeElement.scrollLeft || 0;\n if (this.instanceSort()?.fieldSort !== sort.fieldSort) {\n this.instanceSort()?.reset();\n }\n this.instanceSort.set(sort);\n if (this.sortLocal()) {\n this.handlerSortLocal(sort, scrollLeft);\n\n return;\n }\n this.storeParamsCallApi.update((data) => ({ ...data, instanceSort: this.instanceSort() }));\n this.outSort.emit({\n sort: sort,\n onSortSuccess: () => this.onSortSuccess(scrollLeft),\n });\n try {\n await this.callApiByService(true);\n this.onSortSuccess(scrollLeft);\n } catch (error) {\n console.log(error);\n }\n }\n\n protected handlerFunctionControlMoreSelectItem(functionControl: IDropdownFunctionControlEvent) {\n this.functionControlSelectMoreItem = functionControl;\n }\n\n protected handlerSelectedMoreItem(event: IEmitSelectKey | undefined) {\n if (!event?.key || !this.configSelectMoreItem()) {\n return;\n }\n\n this.functionControlSelectMoreItem?.reset();\n\n const perPage = Number(event.key).valueOf();\n const currentPerPage = Number(this.setPerPageSelectMoreItem(perPage)).valueOf();\n const isPagingNumber = this.configSelectMoreItem()?.pagingNumber;\n\n if (currentPerPage > perPage || this.items().length >= perPage) {\n if (!isPagingNumber) {\n this.setPerPageSelectMoreItem(currentPerPage);\n }\n this.keysSelected.set(\n this.items()\n .slice(0, perPage)\n .map((item) => `${get<unknown>(item, this.fieldKey())}`)\n );\n this.emitKeysSelected(true);\n\n return;\n }\n\n this.callApiByService(true, true);\n const completeSub = this.outLoadDataComplete.subscribe(() => {\n completeSub.unsubscribe();\n errorSub.unsubscribe();\n if (!isPagingNumber) {\n this.setPerPageSelectMoreItem(currentPerPage);\n }\n this.keysSelected.set(\n this.items()\n .slice(0, perPage)\n .map((item) => `${get<unknown>(item, this.fieldKey())}`)\n );\n this.emitKeysSelected(true);\n });\n\n const errorSub = this.outLoadDataError.subscribe(() => {\n errorSub.unsubscribe();\n completeSub.unsubscribe();\n this.setPerPageSelectMoreItem(currentPerPage);\n });\n }\n\n protected handlerBarButtonClick(button: IButton) {\n const items: Array<WritableSignal<any>> = [];\n\n this.keysSelected().forEach((key) => {\n const item = this.items().find((item) => `${get<unknown>(item, this.fieldKey())}` === `${key}`);\n\n if (item) {\n items.push(item);\n }\n });\n\n return this.outClickBarButton.emit({\n button,\n items,\n keys: this.keysSelected(),\n hiddenBarButtons: () => {\n return;\n },\n });\n }\n\n protected setIndexHover(e: Event, item: WritableSignal<TYPE_OBJECT>) {\n e.stopPropagation();\n if (!this.items().length) {\n this.resetIndexHover();\n\n return;\n }\n this.itemOfIndexHover = item;\n }\n\n protected resetIndexHoverWhenMouseLeave(e?: Event) {\n e?.stopPropagation();\n const currentIndexItemHover = this.itemOfIndexHover;\n\n clearTimeout(this.timeoutLeaveItem());\n this.timeoutLeaveItem.set(\n setTimeout(() => {\n if (this.itemOfIndexHover && this.itemOfIndexHover !== currentIndexItemHover) {\n return;\n }\n this.resetIndexHover(e);\n }) as unknown as number\n );\n }\n\n protected resetIndexHover(e?: Event) {\n e?.stopPropagation();\n this.itemOfIndexHover = undefined;\n }\n\n protected handlerMouseLeaveContainer(event: Event) {\n event.stopPropagation();\n this.resetIndexHover(event);\n }\n\n protected handlerMouseEnterHeader(event: Event) {\n event.stopPropagation();\n this.mouseEnterHeader.set(true);\n this.resetIndexHover(event);\n }\n\n protected handlerMouseLeaveHeader(event: Event) {\n event.stopPropagation();\n this.mouseEnterHeader.set(false);\n this.resetIndexHover(event);\n }\n\n protected handlerMouseEnterFooter(event: Event) {\n event.stopPropagation();\n this.resetIndexHover(event);\n if (this.classFooterInclude()) {\n this.footerElementRef()?.nativeElement?.classList.remove('bg-[#f8f9fa]');\n this.footerLeftElementRef()?.nativeElement?.classList.remove('bg-[#f8f9fa]');\n this.footerElementRef()?.nativeElement?.classList.add(this.classFooterInclude());\n this.footerLeftElementRef()?.nativeElement?.classList.add(this.classFooterInclude());\n }\n }\n\n protected handlerMouseLeaveFooter(event: Event) {\n event.stopPropagation();\n if (this.classFooterInclude()) {\n this.footerElementRef()?.nativeElement?.classList.remove(this.classFooterInclude());\n this.footerLeftElementRef()?.nativeElement?.classList.remove(this.classFooterInclude());\n this.footerElementRef()?.nativeElement?.classList.add('bg-[#f8f9fa]');\n this.footerLeftElementRef()?.nativeElement?.classList.add('bg-[#f8f9fa]');\n }\n }\n\n protected handlerScrollHeader(e: Event) {\n e.stopPropagation();\n if (!this.mouseEnterHeader()) {\n return;\n }\n const scrollLeft = (e.target as HTMLElement).scrollLeft;\n const bodyEl = this.bodyElementRef()?.nativeElement;\n if (bodyEl) {\n bodyEl.scrollLeft = scrollLeft;\n }\n const footerEl = this.footerElementRef()?.nativeElement;\n if (footerEl) {\n footerEl.scrollLeft = scrollLeft;\n }\n this.resetIndexHover(e);\n }\n\n protected handlerScrollBody(e: Event) {\n e.stopPropagation();\n if (this.mouseEnterHeader()) {\n return;\n }\n const scrollLeft = (e.target as HTMLElement).scrollLeft;\n const headerEl = this.headerElementRef()?.nativeElement;\n if (headerEl) {\n headerEl.scrollLeft = scrollLeft;\n }\n const footerEl = this.footerElementRef()?.nativeElement;\n if (footerEl) {\n footerEl.scrollLeft = scrollLeft;\n }\n this.resetIndexHover(e);\n }\n\n protected handlerScrollBottom(e: Event) {\n e.stopPropagation();\n if (this.loading() || this.activityLoadData() !== 'scroll-infinity') {\n return;\n }\n this.outLoadMore.emit({ loadMoreSuccess: this.loadMoreSuccess.bind(this) });\n this.callApiByService(false);\n }\n\n protected handlerChangePage(page: number) {\n this.pagingStore.update((data) => ({ ...(data || {}), page }));\n const { argumentsValue, guideAutoUpdateArgumentsValue } = this.httpRequestData() as IHttpRequestConfig;\n this.loadedLastItem.set(\n this.httpRequestService.updateArguments(argumentsValue, { paging: this.pagingStore(), storeParamsCallApi: this.storeParamsCallApi() }, this.pagingStore() || {}, this.keySearch(), true, this.loadedLastItem(), guideAutoUpdateArgumentsValue)\n );\n this.callApiByService(false, true, true);\n }\n\n // CONVENTION-EXCEPT: any — Sử dụng any array để map ngược generic properties linh động\n protected handlerOutViewPortItemHeaderRight(event: Array<any>) {\n this.headerRightViewPort.set(event);\n }\n\n protected handlerOutPaddingLeftHeaderRight(event: number) {\n this.paddingLeftHeaderRight.set(event);\n }\n\n // CONVENTION-EXCEPT: any — Map array signal linh hoạt cho generic\n protected handlerOutViewPortItemFooterRight(event: Array<any>) {\n this.footerRightViewPort.set(event);\n }\n\n protected getIndexRow = (data: { value: TYPE_ITEM_DATA_TABLE }) => {\n return of(this.items().findIndex((item) => item === data.value) + 1);\n };\n\n private fakeResponseApi(): TYPE_OBJECT {\n this.loadedLastItem.set(false);\n if (this.activityLoadData() === 'scroll-infinity') {\n this.pagingStore.set({});\n }\n\n return this.httpRequestService.fakeResponsePagingApi();\n }\n\n private getScrollContainer() {\n return this.bodyComponentRef() as VirtualScrollerComponent;\n }\n\n private async callApiByService(firstCall: boolean, resetAfterCallApi?: boolean, isChangePage?: boolean) {\n try {\n if (firstCall || isChangePage) {\n this.loadedLastItem.set(false);\n }\n if (!this.httpRequestData() || this.loading() || this.loadedLastItem()) {\n return;\n }\n this.loading.set(true);\n this.outLoading.emit(this.loading());\n this.resetIndexHover();\n const { argumentsValue, guideAutoUpdateArgumentsValue } = this.httpRequestData() as IHttpRequestConfig;\n\n if (guideAutoUpdateArgumentsValue && !guideAutoUpdateArgumentsValue.sortOrderBy && this.instanceSort()) {\n guideAutoUpdateArgumentsValue.sortOrderBy = {\n fieldGetValue: 'storeParamsCallApi.instanceSort.fieldSort',\n fieldUpdate: '[0]',\n subFieldUpdate: 'order_by',\n };\n }\n\n if (guideAutoUpdateArgumentsValue && !guideAutoUpdateArgumentsValue.sortOrderType && this.instanceSort()) {\n guideAutoUpdateArgumentsValue.sortOrderType = {\n fieldGetValue: 'storeParamsCallApi.instanceSort.mode',\n fieldUpdate: '[0]',\n subFieldUpdate: 'order_type',\n };\n }\n if (firstCall) {\n if (!resetAfterCallApi) {\n this.hasScroll.set(false);\n this.stores.set([]);\n this.items.set([]);\n }\n this.loadedLastItem.set(\n this.httpRequestService.updateArguments(argumentsValue, { ...this.fakeResponseApi(), storeParamsCallApi: this.storeParamsCallApi() }, this.pagingStore() || {}, this.keySearch(), true, this.loadedLastItem(), guideAutoUpdateArgumentsValue)\n );\n }\n const result = await this.httpRequestService.callApi(this.httpRequestData() as IHttpRequestConfig);\n\n if ((firstCall || isChangePage) && resetAfterCallApi) {\n this.hasScroll.set(false);\n this.stores.set([]);\n this.items.set([]);\n }\n\n this.totalItemInBackend.set(result.paging?.total_items || 0);\n this.outTotalItem.emit(this.totalItemInBackend());\n this.pagingStore.update((data) => ({ ...data, total_items: this.totalItemInBackend() || 0 }));\n if (!isChangePage) {\n this.pagingStore.set(result.paging);\n if (!this.pagingStore()) {\n this.loadedLastItem.set(true);\n }\n this.loadedLastItem.set(\n this.httpRequestService.updateArguments(argumentsValue, { ...result, storeParamsCallApi: this.storeParamsCallApi() }, this.pagingStore() || {}, this.keySearch(), true, this.loadedLastItem(), guideAutoUpdateArgumentsValue)\n );\n }\n await this.addItems(convertObjectToSignal(result.data || []), false, true);\n this.outLoadDataComplete.emit(this.stores);\n } catch (error) {\n console.log(error);\n this.outLoadDataError.emit(error as IHttpResponseError);\n } finally {\n this.loading.set(false);\n this.outLoading.emit(this.loading());\n }\n }\n\n private async callApiByServiceFooter() {\n if (!this.httpRequestDataFooter() || !this.showFooter()) {\n return;\n }\n const { argumentsValue, guideAutoUpdateArgumentsValue } = this.httpRequestDataFooter() as IHttpRequestConfig;\n\n this.httpRequestService.updateArguments(argumentsValue, { storeParamsCallApi: this.storeParamsCallApi() }, this.pagingStore() || {}, this.keySearch(), true, false, guideAutoUpdateArgumentsValue);\n const result = await this.httpRequestService.callApi(this.httpRequestDataFooter() as IHttpRequestConfig);\n\n this.itemFooter.set(convertObjectToSignal(result.data));\n }\n\n private async addItems(items: TYPE_DATA_TABLE, addFirst: boolean, ignoreHightLight?: boolean, ignoreReCallFooter?: boolean, autoCountNewItem?: boolean) {\n if (!items()?.length) {\n return;\n }\n const existingKeys = new Set(this.items().map((item) => `${get<unknown>(item, this.fieldKey())}`));\n const itemsAdd: Array<WritableSignal<TYPE_OBJECT>> = [];\n\n items().forEach((item) => {\n const key = `${get<unknown>(item, this.fieldKey())}`;\n if (!existingKeys.has(key)) {\n existingKeys.add(key);\n itemsAdd.push(item);\n }\n });\n\n if (itemsAdd.length) {\n if (addFirst) {\n this.items.update((data) => [...itemsAdd, ...data]);\n this.stores.update((data) => [...itemsAdd, ...data]);\n } else {\n this.items.update((data) => [...data, ...itemsAdd]);\n this.stores.update((data) => [...data, ...itemsAdd]);\n }\n }\n if (autoCountNewItem && itemsAdd.length) {\n this.totalItemInBackend.update((value) => value + itemsAdd.length);\n }\n if (!ignoreHightLight) {\n this.itemsHightLight.update((itemsHightLight) => [...itemsHightLight, ...itemsAdd]);\n timer(this.timeHighlighNewItem())\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n itemsAdd.forEach((item) => {\n this.itemsHightLight.update((itemsHightLight) => itemsHightLight.filter((itemHightLight) => itemHightLight !== item));\n });\n });\n }\n await this.checkScroll();\n if (!ignoreReCallFooter) {\n await this.callApiByServiceFooter();\n }\n }\n\n private async removeItems(keys: Array<unknown>, ignoreReCallFooter?: boolean, autoCountNewItem?: boolean) {\n this.resetIndexHover();\n if (!this.items().length) {\n return;\n }\n keys.forEach((key) => {\n this.items.update((items) => {\n let isUpdate = false;\n\n const newItems = items.filter((item) => {\n if (`${get<unknown>(item, this.fieldKey())}` === `${String(key)}`) {\n isUpdate = true;\n return false;\n }\n return true;\n });\n\n return isUpdate ? newItems : items;\n });\n\n this.stores.update((items) => {\n let isUpdate = false;\n\n const newItems = items.filter((item) => {\n if (`${get<unknown>(item, this.fieldKey())}` === `${String(key)}`) {\n isUpdate = true;\n if (autoCountNewItem) {\n this.totalItemInBackend.update((value) => value - 1);\n }\n return false;\n }\n return true;\n });\n\n return isUpdate ? newItems : items;\n });\n\n if (!this.keysSelected()?.length) {\n return;\n }\n if (!autoCountNewItem) {\n this.keysSelected.update((keys) => keys.filter((keySelected) => keySelected !== key));\n }\n });\n this.totalItemInBackend.update((value) => value - keys.length);\n await this.checkScroll();\n if (!ignoreReCallFooter) {\n await this.callApiByServiceFooter();\n }\n this.emitKeysSelected();\n }\n\n private getCount(): number {\n if (this.httpRequestData()) {\n return this.pagingStore()?.total_items || this.items().length;\n }\n\n return this.items().length;\n }\n\n private loadMoreSuccess(data: WritableSignal<Array<WritableSignal<TYPE_OBJECT>>>) {\n this.addItems(data, false);\n this.loading.set(false);\n this.outLoading.emit(this.loading());\n }\n\n private async checkCancelConditionCheckedItem(item: WritableSignal<TYPE_OBJECT>) {\n let isCancelCheck = false;\n\n if (!isCancelCheck && this.headerLeft().length && this.headerLeft()[0].checkConditionCheckBoxHidden) {\n isCancelCheck = (await lastValueFrom((this.headerLeft()[0].checkConditionCheckBoxHidden as any)({ item: item() }))) || false;\n }\n\n if (!isCancelCheck && this.headerRight().length && this.headerRight()[0].checkConditionCheckBoxHidden) {\n isCancelCheck = (await lastValueFrom((this.headerRight()[0].checkConditionCheckBoxHidden as any)({ item: item() }))) || false;\n }\n\n return isCancelCheck;\n }\n\n private handlerSortLocal(sort: ISort, scrollLeft: number) {\n if (this.filterOrSortLocal() && this.stores().length) {\n this.items.set(this.filterOrSortLocal()?.(signal([...this.stores()]), { ...this.storeParamsCallApi(), instanceSort: sort }) || []);\n\n return;\n }\n const { fieldSort, mode } = sort;\n\n this.items.update((items) => {\n items.sort((itemA, itemB) => {\n let value1 = mode === 'asc' ? itemA()[fieldSort] : itemB()[fieldSort];\n let value2 = mode === 'asc' ? itemB()[fieldSort] : itemA()[fieldSort];\n\n if (typeof value1 === 'string' && typeof value2 === 'string') {\n value1 = deleteUnicode(value1).toLocaleLowerCase();\n value2 = deleteUnicode(value2).toLocaleLowerCase();\n }\n\n if (value1 === value2) {\n return 0;\n }\n\n return value1 > value2 ? 1 : -1;\n });\n\n return [...items];\n });\n this.onSortSuccess(scrollLeft);\n }\n\n private setPerPageSelectMoreItem(perPage: string | number): string {\n const argumentsValue = this.httpRequestData()?.argumentsValue;\n\n if (!argumentsValue || !this.configSelectMoreItem()) {\n return '-1';\n }\n const keyPerPage = this.configSelectMoreItem()?.keyPerPage || 'per_page';\n\n for (let i = 0; i < argumentsValue.length; i++) {\n let argument = argumentsValue[i];\n\n if (argument instanceof HttpParams && argument.has(keyPerPage)) {\n const currentPerPage = get<unknown>(argument, keyPerPage, '25' as any);\n\n argument = argument.set(keyPerPage, perPage);\n set(argumentsValue, `${i}` as any, argument);\n\n return currentPerPage;\n }\n\n if (argument instanceof Object && Object.keys(argument).includes(keyPerPage)) {\n const currentPerPage = get(argument, keyPerPage, '25');\n\n set(argument, keyPerPage, perPage);\n\n return currentPerPage;\n }\n }\n\n return '-1';\n }\n\n private onSortSuccess(scrollLeft: number) {\n this.resetScroll(scrollLeft, 0);\n this.loading.set(false);\n this.outLoading.emit(this.loading());\n }\n\n private resetScroll(scrollPositionLeft?: number, scrollPositionTop?: number) {\n const headerEl = this.headerElementRef()?.nativeElement;\n if (headerEl) {\n headerEl.scrollLeft = scrollPositionLeft || 0;\n }\n const bodyEl = this.bodyElement;\n if (bodyEl) {\n bodyEl.scrollTop = scrollPositionTop || 0;\n bodyEl.scrollLeft = scrollPositionLeft || 0;\n }\n const footerEl = this.footerElementRef()?.nativeElement;\n if (footerEl) {\n footerEl.scrollLeft = scrollPositionLeft || 0;\n }\n }\n\n private reset(clearSort?: boolean) {\n if (clearSort) {\n this.instanceSort()?.reset();\n this.instanceSort.set(undefined);\n }\n this.hasScroll.set(false);\n this.loading.set(false);\n this.outLoading.emit(this.loading());\n this.items.set([]);\n this.stores.set([]);\n this.fakeResponseApi();\n this.resetScroll();\n }\n\n private async checkScroll(): Promise<void> {\n const hasScroll = this.hasScroll();\n\n return new Promise((resolve) => {\n timer(500)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.bodyElement) {\n this.hasScroll.set(this.bodyElement.scrollHeight > this.bodyElement.offsetHeight);\n }\n if (hasScroll && !this.hasScroll()) {\n this.outScrollIsGone.emit({});\n if (!this.filterOrSortLocal()) {\n this.callApiByService(true);\n }\n }\n resolve();\n });\n });\n }\n\n private get bodyElement(): HTMLElement | undefined {\n return this.bodyElementRef()?.nativeElement;\n }\n\n private async hightLightItem(items: Array<TYPE_ITEM_DATA_TABLE>) {\n this.itemsHightLight.update((itemsHightLight) => [...itemsHightLight, ...items]);\n\n timer(this.timeHighlighNewItem())\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n items.forEach((item) => {\n this.itemsHightLight.update((itemsHightLight) => itemsHightLight.filter((itemHightLight) => itemHightLight !== item));\n });\n });\n }\n\n private emitKeysSelected(onlyWhenAutoEnabled = false): void {\n if (onlyWhenAutoEnabled && !this.autoEmitKeysSelectedWithItems()) {\n return;\n }\n if (this.autoEmitKeysSelectedWithItems()) {\n const items = this.keysSelected()\n .map((key) => this.items().find((item) => `${get<unknown>(item, this.fieldKey())}` === `${key}`))\n .filter((item): item is WritableSignal<TYPE_OBJECT> => !!item);\n this.outKeysSelected.emit({ keys: this.keysSelected(), items });\n return;\n }\n this.outKeysSelected.emit({ keys: this.keysSelected() });\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.timeoutLeaveItem());\n }\n}\n","<div class=\"flex flex-col w-full h-full\">\n @if (!ignoreBar()) {\n <div\n class=\"flex items-center relative z-[1] bottom-0 left-0 w-full bg-white libs-ui-table-shadow-bottom {{ classBarInclude() }}\"\n [class.px-[16px]]=\"keysSelected().length || labelBarNoSelectItem()\"\n [class.py-[6px]]=\"keysSelected().length || labelBarNoSelectItem()\"\n (mouseenter)=\"resetIndexHover($event)\">\n <ng-content select=\"div.libs-ui-table-bar-left\"></ng-content>\n @if (!keysSelected().length && labelBarNoSelectItem()) {\n <div\n class=\"{{ classLabelBarNoSelectItemCss() }}\"\n [innerHtml]=\"labelBarNoSelectItem() | translate: { value: totalItemDisplay() }\"></div>\n }\n @if (keysSelected().length) {\n <div class=\"flex items-center pl-[12px]\">\n <div class=\"flex items-center h-full mt-[-2px]\">\n <libs_ui-components-checkbox-single\n [checked]=\"true\"\n [disable]=\"loading() || disableCheckbox()\"\n (outChange)=\"handlerChangeAllChecked()\" />\n </div>\n <div class=\"libs-ui-font-h5m text-[#071631] mr-[8px] {{ classLabelBarButtons() }}\">\n {{ labelBarButtons() | translate: { value: keysSelected().length } }}\n </div>\n @if (configSelectMoreItem()) {\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{\n widthByParent: false,\n ignoreArrow: true,\n maxHeight: 2048,\n classInclude: '!w-[121px]',\n position: {\n mode: 'start',\n distance: 0,\n },\n }\"\n [listConfig]=\"listConfigMoreItem()\"\n [listHiddenInputSearch]=\"true\"\n [listMaxItemShow]=\"5\"\n class=\"!w-[16px] h-[16px] mr-[8px]\"\n (outSelectKey)=\"handlerSelectedMoreItem($event)\"\n (outFunctionsControl)=\"handlerFunctionControlMoreSelectItem($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [classInclude]=\"'!p-0 m-0'\"\n [classIconLeft]=\"'before:!text-[16px] libs-ui-icon-move-right rotate-90 mr-[6px]'\"\n [popover]=\"{ config: { content: 'i18n_more_select' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n }\n <div class=\"h-[16px] libs-ui-border-left-general ml-[16px]\"></div>\n @if (barButtons()?.length) {\n @for (button of barButtons(); track button) {\n @let constHtmlLabel = button.label || ' ';\n <libs_ui-components-buttons-button\n [type]=\"button.type || 'button-link-primary'\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classInclude]=\"button.classInclude || ''\"\n [label]=\"constHtmlLabel | translate\"\n (outClick)=\"handlerBarButtonClick(button)\" />\n }\n }\n </div>\n }\n <ng-content select=\"div.libs-ui-table-bar-right\"></ng-content>\n </div>\n }\n\n <div\n #tableContainerElementRef\n class=\"libs-ui-table flex flex-col w-full h-full relative {{ classTableContainerInclude() }}\"\n [class.px-[16px]]=\"!ignoreBar()\"\n (mouseleave)=\"handlerMouseLeaveContainer($event)\">\n <div\n class=\"relative w-full shrink-0\"\n [style.height.px]=\"headerElementRef.offsetHeight\"\n [class.!hidden]=\"!items().length && isHiddenHeaderWhenNodata()\">\n <div\n #headerElementRef\n LibsUiComponentsScrollOverlayDirective\n [options]=\"{ scrollbarWidth: 0 }\"\n [class.libs-ui-border-bottom-dashed-general]=\"!hasItemHightLight() && isDashBorder()\"\n [class.libs-ui-border-bottom-general]=\"!hasItemHightLight() && !isDashBorder()\"\n [class]=\"classHeaderContainer()\"\n (outScroll)=\"handlerScrollHeader($event)\"\n (mouseenter)=\"handlerMouseEnterHeader($event)\"\n (mouseleave)=\"handlerMouseLeaveHeader($event)\">\n @if (headerLeft().length) {\n <div [class]=\"classHeaderLeftContainer()\">\n @for (header of headerLeft(); track header) {\n <ng-container *ngTemplateOutlet=\"templateHeaderRef; context: { headerItem: header, isHeaderLeft: true }\" />\n }\n </div>\n }\n @if (headerRight().length) {\n @let constHtmlFunctionGetWidthItem = functionGetWidthItem();\n @if (useScrollMeasureColumn() && constHtmlFunctionGetWidthItem) {\n <div\n class=\"flex w-full h-full relative\"\n LibsUiScrollMeasureItemDirectionHorizontalDirective\n [elementScroll]=\"headerElementRef\"\n [items]=\"headerRight()\"\n [functionGetWidthItem]=\"constHtmlFunctionGetWidthItem\"\n (outViewPortItem)=\"handlerOutViewPortItemHeaderRight($event)\"\n (outPaddingLeft)=\"handlerOutPaddingLeftHeaderRight($event)\">\n @for (header of headerRightViewPort(); track header) {\n <ng-container *ngTemplateOutlet=\"templateHeaderRef; context: { headerItem: header, isHeaderLeft: false }\" />\n }\n </div>\n } @else {\n @for (header of headerRight(); track header) {\n <ng-container *ngTemplateOutlet=\"templateHeaderRef; context: { headerItem: header, isHeaderLeft: false }\" />\n }\n }\n }\n </div>\n </div>\n @if (showFooter() && itemFooter() && customPositionFooter() === 'top') {\n <ng-container *ngTemplateOutlet=\"templateFooterRef\" />\n }\n <div class=\"relative flex flex-col w-full h-full overflow-x-hidden bg-white {{ classBodyInclude() || '' }}\">\n <div\n #bodyElementRef\n class=\"flex h-full w-full relative\"\n LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"handlerScrollBody($event)\"\n (outScrollBottom)=\"handlerScrollBottom($event)\">\n @if (items().length) {\n <virtual-scroller\n #bodyComponentRef\n [items]=\"items()\"\n [enableUnequalChildrenSizes]=\"enableUnequalChildrenSizes()\"\n class=\"h-full\"\n [style.width.px]=\"headerElementRef.scrollWidth > (bodyElementRef ? bodyElementRef.scrollWidth : 0) ? headerElementRef.scrollWidth : undefined\"\n [parentScroll]=\"bodyElementRef\"\n [bufferAmount]=\"bufferAmount()\">\n @for (data of bodyComponentRef.viewPortItems; track data()) {\n @let constHtmlIsHightLightItem = data | LibsUiTableCheckItemHightLightPipe: itemsHightLight();\n <div\n #elementHover\n class=\"flex\"\n [class.bg-[#f3fcfc]]=\"constHtmlIsHightLightItem\"\n [class.libs-ui-border-top-1px-36d3d3]=\"constHtmlIsHightLightItem && $first && !ignoreBorderItem()\"\n [class.libs-ui-border-bottom-1px-36d3d3]=\"constHtmlIsHightLightItem && !ignoreBorderItem()\"\n [ngClass]=\"\n constHtmlIsHightLightItem || ($last && ignoreBorderItemLast())\n ? 'libs-ui-border-radius-bottom-left-4px libs-ui-border-radius-bottom-right-4px'\n : ignoreBorderItem()\n ? ''\n : isDashBorder()\n ? 'libs-ui-border-bottom-dashed-general'\n : 'libs-ui-border-bottom-general'\n \"\n [style.width.px]=\"headerElementRef.scrollWidth\"\n [class.bg-[#f8f9fa]]=\"itemOfIndexHover === data && !constHtmlIsHightLightItem\"\n (mouseenter)=\"setIndexHover($event, data)\"\n (mouseleave)=\"resetIndexHoverWhenMouseLeave($event)\">\n @if (headerLeft().length || headerRight().length) {\n <div class=\"flex flex-col w-full\">\n <div class=\"flex w-full\">\n @if (headerLeft().length) {\n <div\n class=\"flex sticky top-0 left-0 z-[1]\"\n [class.bg-white]=\"!constHtmlIsHightLightItem\"\n [class.bg-[#f3fcfc]]=\"constHtmlIsHightLightItem\">\n @for (header of headerLeft(); track header) {\n <div\n class=\"relative flex px-[12px] py-[8px] {{ header.ignoreBorderRight ? '' : 'libs-ui-border-right-general' }}\"\n [class.bg-[#f8f9fa]]=\"itemOfIndexHover === data && !constHtmlIsHightLightItem\"\n [ngStyle]=\"\n (header | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerLeft || false : headerElementRef.clientWidth : headerLeft() : headerRight()) ||\n (header.isShowIndexOnRow ? { width: '50px', 'flex-shrink': '0', padding: '8px' } : {})\n \"\n [ngClass]=\"header.ngClass || {}\">\n <ng-container *ngTemplateOutlet=\"templateBodyRef; context: { header: header, data: data, constHtmlIsHightLightItem: constHtmlIsHightLightItem }\" />\n </div>\n }\n </div>\n }\n @if (headerRight().length) {\n @if (useScrollMeasureColumn()) {\n <div\n class=\"flex w-full min-w-0\"\n [style.padding-left.px]=\"paddingLeftHeaderRight()\">\n @for (header of headerRightViewPort(); track header) {\n <div\n class=\"relative flex px-[12px] py-[8px]\"\n [ngStyle]=\"\n (header | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerRight || false : headerElementRef.clientWidth : headerLeft() : headerRight()) ||\n (header.isShowIndexOnRow ? { width: '50px', 'flex-shrink': '0', padding: '8px' } : {})\n \"\n [ngClass]=\"header.ngClass || {}\">\n <ng-container *ngTemplateOutlet=\"templateBodyRef; context: { header: header, data: data, constHtmlIsHightLightItem: constHtmlIsHightLightItem }\" />\n </div>\n }\n </div>\n } @else {\n @for (header of headerRight(); track header) {\n <div\n class=\"relative flex px-[12px] py-[8px]\"\n [ngStyle]=\"\n (header | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerRight || false : headerElementRef.clientWidth : headerLeft() : headerRight()) ||\n (header.isShowIndexOnRow ? { width: '50px', 'flex-shrink': '0', padding: '8px' } : {})\n \"\n [ngClass]=\"header.ngClass || {}\">\n <ng-container *ngTemplateOutlet=\"templateBodyRef; context: { header: header, data: data, constHtmlIsHightLightItem: constHtmlIsHightLightItem }\" />\n </div>\n }\n }\n }\n </div>\n @if (configTemplateItemCollapseExpand() && data().specificExpand && data()[configTemplateItemCollapseExpand()?.fieldGetDataExpand || 'specificDataExpand']) {\n <div [class]=\"configTemplateItemCollapseExpand()?.cssWrapper || 'flex w-full'\">\n @for (dataExpand of data()[configTemplateItemCollapseExpand()?.fieldGetDataExpand || 'specificDataExpand'](); track dataExpand) {\n @if (configTemplateItemCollapseExpand()?.colTemplateConfig) {\n @if (optimizeTableRenderByOnViewport()) {\n @defer (on viewport) {\n <libs_ui-components-table-templates\n [item]=\"dataExpand\"\n [class]=\"configTemplateItemCollapseExpand()?.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"configTemplateItemCollapseExpand()?.templateCssWrapper\"\n [configs]=\"configTemplateItemCollapseExpand()?.colTemplateConfig\" />\n } @placeholder {\n <div [class]=\"configTemplateItemCollapseExpand()?.templateCssWrapperHost || 'w-full h-full'\"></div>\n }\n } @else {\n <libs_ui-components-table-templates\n [item]=\"dataExpand\"\n [class]=\"configTemplateItemCollapseExpand()?.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"configTemplateItemCollapseExpand()?.templateCssWrapper\"\n [configs]=\"configTemplateItemCollapseExpand()?.colTemplateConfig\" />\n }\n }\n } @empty {\n <div class=\"relative h-[100px]\">\n <ng-container *ngTemplateOutlet=\"templateNodataRef\" />\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </virtual-scroller>\n } @else if (!loading()) {\n <div class=\"sticky left-0 top-0 z-[1] h-[calc(100%-10px)] w-full\">\n <ng-container *ngTemplateOutlet=\"templateNodataRef\" />\n </div>\n @if (showScrollTablePinnedIfNoData()) {\n <div\n class=\"absolute h-[1px] bg-transparent top-0 left-0 z-[1]\"\n [style.width.px]=\"headerElementRef.scrollWidth\"></div>\n }\n }\n </div>\n\n @if (showFooter() && itemFooter() && customPositionFooter() === 'bottom') {\n <ng-container *ngTemplateOutlet=\"templateFooterRef\" />\n }\n\n @if (loading()) {\n <div class=\"absolute w-full h-full z-[2] flex items-center content-center\">\n <libs_ui-components-spinner />\n </div>\n }\n </div>\n\n @if (activityLoadData() === 'click-pagination') {\n <div class=\"flex w-full mt-[12px]\">\n <libs_ui-components-pagination\n [modeDisplayTotalPageAndGotoPage]=\"paginationConfig().modeDisplayTotalPageAndGotoPage\"\n [classDisplayTotalPageAndGotoPage]=\"paginationConfig().classDisplayTotalPageAndGotoPage\"\n [classIncludeItem]=\"paginationConfig().classIncludeItem\"\n [classIncludeContainer]=\"paginationConfig().classIncludeContainer\"\n [disable]=\"paginationConfig().disable\"\n [numberPageDisplay]=\"paginationConfig().numberPageDisplay\"\n [firstPageStartNumber]=\"paginationConfig().firstPageStartNumber\"\n [showTotalPage]=\"paginationConfig().showTotalPage\"\n [showInputGotoPage]=\"paginationConfig().showInputGotoPage\"\n [totalItems]=\"pagingTotalItems()\"\n [perPage]=\"pagingPerPage()\"\n [currentPage]=\"pagingCurrentPage()\"\n (outPageSelect)=\"handlerChangePage($event)\" />\n </div>\n }\n </div>\n</div>\n\n<ng-template\n #templateHeaderRef\n let-header=\"headerItem\"\n let-isHeaderLeft=\"isHeaderLeft\">\n <div\n [class]=\"'relative flex ' + (header.paddingLeftRightHeaderContainer ?? ' px-[12px] ') + (isHeaderLeft && !header.ignoreBorderRight ? ' libs-ui-border-right-general ' : ' ') + ' libs-ui-table-header-col '\"\n [class.flex-col]=\"header.rowsConfig\"\n [class.py-[8px]]=\"!header.ignorePyDefault\"\n [ngStyle]=\"\n (header | LibsUiTableCalculatorColumnPipe: (isHeaderLeft ? ignoreCalculatorWidthHeader()?.headerLeft || false : ignoreCalculatorWidthHeader()?.headerRight || false) : headerElementRef.clientWidth : headerLeft() : headerRight()) ||\n (header.isShowIndexOnRow ? { width: '50px', 'flex-shrink': '0', padding: '8px' } : {})\n \"\n [ngClass]=\"header.ngClass || {}\">\n @if (!header.rowsConfig) {\n <ng-container *ngTemplateOutlet=\"templateHeaderContentRef; context: { headerItem: header, isColRender: false, isHeaderLeft: isHeaderLeft }\" />\n }\n @if (header.rowsConfig; as rowsConfig) {\n @for (row of rowsConfig.rows; track row) {\n <div [class]=\"row.classRow\">\n @for (col of row.cols; track col) {\n <ng-container *ngTemplateOutlet=\"templateHeaderContentRef; context: { headerItem: col, isColRender: true, isHeaderLeft: isHeaderLeft }\" />\n }\n </div>\n }\n }\n </div>\n</ng-template>\n\n<ng-template\n #templateHeaderContentRef\n let-header=\"headerItem\"\n let-isColRender=\"isColRender\"\n let-isHeaderLeft=\"isHeaderLeft\">\n <div\n #itemHeaderRef\n class=\"flex libs-ui-font-h6m min-h-[18px] text-[#6a7383] max-w-full\"\n [class.items-center]=\"header.contentHeaderAlignCenter ?? true\"\n [class.justify-end]=\"header.contentHeaderJustifyContentEnd\"\n [class.w-full]=\"header.isShowIndexOnRow\"\n [ngStyle]=\"\n isColRender\n ? (header | LibsUiTableCalculatorColumnPipe: (isHeaderLeft ? ignoreCalculatorWidthHeader()?.headerLeft || false : ignoreCalculatorWidthHeader()?.headerRight || false) : headerElementRef.clientWidth : headerLeft() : headerRight()) ||\n (header.isShowIndexOnRow ? { width: '50px', 'flex-shrink': '0', padding: '8px' } : {})\n : {}\n \"\n [ngClass]=\"isColRender ? header.ngClass || {} : {}\">\n @if (header.hasCheckbox) {\n @if (header.hasCheckboxAll) {\n <div\n class=\"flex h-full {{ header.checkboxAllClassInclude || 'mr-[16px]' }}\"\n [class.items-center]=\"header.checkboxAlignCenter\">\n <libs_ui-components-checkbox-single\n [key]=\"'all'\"\n [stillOtherOptions]=\"!!keysSelected().length && keysSelected().length !== items().length\"\n [checked]=\"!!keysSelected().length && keysSelected().length === items().length\"\n [disable]=\"loading()\"\n [classInclude]=\"header.checkboxClassInclude\"\n (outChange)=\"handlerChangeCheckedAllItems($event)\" />\n </div>\n } @else {\n <div class=\"flex h-full ml-[24px] {{ header.checkboxClassInclude }}\"></div>\n }\n }\n @for (tooltip of header.tooltipsLeft; track tooltip) {\n <div class=\"mr-[4px]\">\n @let constHtmlTooltip = tooltip.dataView || ' ';\n <libs_ui-components-popover\n [type]=\"tooltip?.type || 'other'\"\n [mode]=\"tooltip?.mode || 'hover'\"\n [classInclude]=\"tooltip.classInclude || 'text-[#6a7383]'\"\n [ignoreShowPopover]=\"tooltip.ignoreShowTooltip || false\"\n [config]=\"\n tooltip.config || {\n content: constHtmlTooltip | translate,\n position: {\n mode: 'center',\n distance: 0,\n autoUpdatePosition: {\n endDistance: 12,\n startDistance: -12,\n },\n },\n }\n \"\n [innerHTML]=\"tooltip.dataView\" />\n </div>\n }\n\n @if (header.isShowIndexOnRow) {\n <div class=\"flex w-full h-full items-center justify-center {{ header.classIncludeIndexOnRow || '' }}\">\n {{ header.label ?? '#' }}\n </div>\n } @else {\n @if (header.label | LibsUiPipesCallFunctionInTemplatePipe: header.parseValue : header | async | translate; as labelHeaderColumn) {\n <libs_ui-components-popover\n [type]=\"header?.labelConfig?.type || 'text'\"\n [mode]=\"header?.labelConfig?.mode || 'hover'\"\n [classInclude]=\"header?.labelConfig?.classInclude || ''\"\n [ignoreShowPopover]=\"header?.labelConfig?.ignoreShowTooltip || false\"\n [config]=\"header.labelConfig?.config || { content: labelHeaderColumn }\"\n [innerHTML]=\"labelHeaderColumn\" />\n }\n }\n\n @for (tooltip of header.tooltipsRight; track tooltip) {\n <div class=\"ml-[4px]\">\n @let constHtmlTooltip = tooltip.dataView || ' ';\n <libs_ui-components-popover\n [type]=\"tooltip?.type || 'other'\"\n [mode]=\"tooltip?.mode || 'hover'\"\n [classInclude]=\"tooltip.classInclude || 'text-[#6a7383]'\"\n [ignoreShowPopover]=\"tooltip.ignoreShowTooltip || false\"\n [config]=\"\n tooltip.config || {\n content: constHtmlTooltip | translate,\n position: {\n mode: 'center',\n distance: 0,\n autoUpdatePosition: {\n endDistance: 12,\n startDistance: -12,\n },\n },\n }\n \"\n [innerHTML]=\"tooltip.dataView\" />\n </div>\n }\n\n @if (header.hasSort && header.orderby) {\n <div class=\"ml-[4px]\">\n <libs_ui-components-buttons-sort-arrow\n [disable]=\"loading() || !items().length\"\n [fieldSort]=\"header.orderby\"\n [ignorePopoverContent]=\"header.sortIgnoreTooltipContent ?? true\"\n [popoverContentAsc]=\"header.sortTooltipContentAsc\"\n [popoverContentDesc]=\"header.sortTooltipContentDesc\"\n [defaultMode]=\"header.defaultMode\"\n [zIndex]=\"header.zIndexTooltipSort\"\n (outChange)=\"handlerChangeSort($event)\" />\n </div>\n }\n </div>\n @if (header.labelDescription) {\n <div class=\"flex\">\n <libs_ui-components-popover\n [type]=\"'text'\"\n [classInclude]=\"header.labelDescription.classInclude || ''\"\n [config]=\"{ content: header.labelDescription.content | translate }\"\n [innerHTML]=\"header.labelDescription.content | translate\" />\n </div>\n }\n</ng-template>\n\n<ng-template\n #templateBodyRef\n let-header=\"header\"\n let-data=\"data\"\n let-constHtmlIsHightLightItem=\"constHtmlIsHightLightItem\">\n <div class=\"flex w-full h-full\">\n @if (header.hasCheckbox) {\n <div\n class=\"flex h-full\"\n [class.invisible]=\"header.checkConditionCheckBoxHidden && (data() | LibsUiPipesCallFunctionInTemplatePipe: header.checkConditionCheckBoxHidden : data() | async)\"\n [class.items-center]=\"header.checkboxAlignCenter\">\n <libs_ui-components-checkbox-single\n [key]=\"data()[fieldKey()]\"\n [classInclude]=\"header.checkboxClassInclude\"\n [checked]=\"data()[fieldKey()] | LibsUiPipesCheckSelectedByKeyPipe: keysSelected() : keysSelected().length\"\n [disable]=\"loading() || disableCheckbox() || !!(maxItemSelected() && !(data()[fieldKey()] | LibsUiPipesCheckSelectedByKeyPipe: keysSelected() : keysSelected().length) && keysSelected().length >= maxItemSelected())\"\n (outChange)=\"handlerChangeItemChecked($event, data())\" />\n </div>\n }\n\n @if (header.isShowIndexOnRow; as config) {\n <div class=\"w-full flex items-center justify-center libs-ui-font-h4r{{ config.classIncludeIndexOnRow || '' }}\">\n <div\n LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{}\"\n [innerHTML]=\"data | LibsUiPipesCallFunctionInTemplatePipe: getIndexRow | async\"></div>\n </div>\n }\n\n @if (header.colTemplateConfig) {\n @let constHtmlIsHover = itemOfIndexHover === data && !constHtmlIsHightLightItem;\n @if (optimizeTableRenderByOnViewport()) {\n @defer (on viewport) {\n <libs_ui-components-table-templates\n [isHover]=\"constHtmlIsHover\"\n [class]=\"header.templateCssWrapperHost || ''\"\n [item]=\"data\"\n [templateCssWrapper]=\"header.templateCssWrapper\"\n [configs]=\"header.colTemplateConfig\" />\n } @placeholder {\n <div [class]=\"header.templateCssWrapperHost || 'w-full h-full'\"></div>\n }\n } @else {\n <libs_ui-components-table-templates\n [isHover]=\"constHtmlIsHover\"\n [class]=\"header.templateCssWrapperHost || ''\"\n [item]=\"data\"\n [templateCssWrapper]=\"header.templateCssWrapper\"\n [configs]=\"header.colTemplateConfig\" />\n }\n }\n </div>\n</ng-template>\n\n<ng-template #templateFooterRef>\n @if (!isHiddenHeaderWhenNodata() || (isHiddenHeaderWhenNodata() && items().length)) {\n <div\n #footerElementRef\n class=\"flex w-full bg-[#f8f9fa] overflow-x-hidden z-[1] {{ ignoreBorderFooter() ? '' : customPositionFooter() === 'top' ? 'libs-ui-border-bottom-general' : 'libs-ui-table-shadow-top libs-ui-border-top-general' }} min-h-[35px]\"\n (mouseenter)=\"handlerMouseEnterFooter($event)\"\n (mouseleave)=\"handlerMouseLeaveFooter($event)\">\n @if (footerLeft()) {\n <div\n #footerLeftElementRef\n class=\"flex sticky top-0 left-0 z-[1] bg-[#f8f9fa]\">\n @for (footer of footerLeft(); track footer) {\n <div\n class=\"flex items-center px-[12px] py-[8px] {{ footer.ignoreBorderRight ? '' : 'libs-ui-border-right-general' }}\"\n [ngStyle]=\"(footer | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerLeft || false : headerElementRef.clientWidth : footerLeft() : footerRight()) || {}\"\n [ngClass]=\"footer.ngClass || {}\">\n @if (footer.colTemplateConfig && itemFooter()) {\n @if (optimizeTableRenderByOnViewport()) {\n @defer (on viewport) {\n <libs_ui-components-table-templates\n [item]=\"itemFooter | LibsUiPipesConvertObjectToSignalPipe\"\n [class]=\"footer.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n } @placeholder {\n <div [class]=\"footer.templateCssWrapperHost || 'w-full h-full'\"></div>\n }\n } @else {\n <libs_ui-components-table-templates\n [item]=\"itemFooter | LibsUiPipesConvertObjectToSignalPipe\"\n [class]=\"footer.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n }\n }\n </div>\n }\n </div>\n }\n @if (footerRight(); as footerRightList) {\n @let constHtmlFunctionGetWidthItemFooter = functionGetWidthItem();\n @if (useScrollMeasureColumn() && constHtmlFunctionGetWidthItemFooter) {\n <div\n class=\"flex h-full w-full relative\"\n LibsUiScrollMeasureItemDirectionHorizontalDirective\n [elementScroll]=\"footerElementRef\"\n [items]=\"footerRightList\"\n [functionGetWidthItem]=\"constHtmlFunctionGetWidthItemFooter\"\n (outViewPortItem)=\"handlerOutViewPortItemFooterRight($event)\">\n @for (footer of footerRightViewPort(); track footer) {\n <div\n class=\"flex items-center px-[12px] py-[8px]\"\n [ngStyle]=\"(footer | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerRight || false : headerElementRef.clientWidth : footerLeft() : footerRightList) || {}\"\n [ngClass]=\"footer.ngClass || {}\">\n @if (footer.colTemplateConfig && itemFooter()) {\n @if (optimizeTableRenderByOnViewport()) {\n @defer (on viewport) {\n <libs_ui-components-table-templates\n [item]=\"itemFooter | LibsUiPipesConvertObjectToSignalPipe\"\n [class]=\"footer.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n } @placeholder {\n <div [class]=\"footer.templateCssWrapperHost || 'w-full h-full'\"></div>\n }\n } @else {\n <libs_ui-components-table-templates\n [item]=\"itemFooter | LibsUiPipesConvertObjectToSignalPipe\"\n [class]=\"footer.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n }\n }\n </div>\n }\n </div>\n } @else {\n @for (footer of footerRightList; track footer) {\n <div\n class=\"flex items-center px-[12px] py-[8px]\"\n [ngStyle]=\"(footer | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerRight || false : headerElementRef.clientWidth : footerLeft() : footerRightList) || {}\"\n [ngClass]=\"footer.ngClass || {}\">\n @if (footer.colTemplateConfig && itemFooter()) {\n @if (optimizeTableRenderByOnViewport()) {\n @defer (on viewport) {\n <libs_ui-components-table-templates\n [item]=\"itemFooter | LibsUiPipesConvertObjectToSignalPipe\"\n [class]=\"footer.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n } @placeholder {\n <div [class]=\"footer.templateCssWrapperHost || 'w-full h-full'\"></div>\n }\n } @else {\n <libs_ui-components-table-templates\n [item]=\"itemFooter | LibsUiPipesConvertObjectToSignalPipe\"\n [class]=\"footer.templateCssWrapperHost || ''\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n }\n }\n </div>\n }\n }\n }\n </div>\n }\n</ng-template>\n\n<ng-template #templateNodataRef>\n @if (keySearch() || onlyShowNoResult()) {\n @if (templateNoResult(); as templateNoResult) {\n <ng-container *ngTemplateOutlet=\"templateNoResult\" />\n } @else {\n <div class=\"flex items-center justify-center w-full h-full absolute left-0 top-0 z-[1]\">\n <div class=\"flex flex-col items-center justify-center w-full h-full shrink-0\">\n <ng-container *ngComponentOutlet=\"'no-result' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: 64 }\" />\n <div\n class=\"libs-ui-table-no-data-config-text\"\n [ngStyle]=\"noDataConfig().ngStyle\"\n [ngClass]=\"noDataConfig().ngClass\"\n [innerHtml]=\"noDataSearchText() | translate\"></div>\n </div>\n </div>\n }\n } @else {\n @if (templateNoData(); as templateNoData) {\n <ng-container *ngTemplateOutlet=\"templateNoData\" />\n } @else {\n <div class=\"flex items-center justify-center w-full h-full absolute left-0 top-0 z-[1]\">\n <div class=\"flex flex-col items-center justify-center w-full h-full shrink-0\">\n <ng-container *ngComponentOutlet=\"'no-data' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: 64 }\" />\n <div\n class=\"libs-ui-table-no-data-config-text\"\n [ngStyle]=\"noDataConfig().ngStyle\"\n [ngClass]=\"noDataConfig().ngClass\"\n [innerHtml]=\"noDataText() | translate\"></div>\n </div>\n </div>\n }\n }\n</ng-template>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { IButton } from '@libs-ui/components-buttons-button';\n\nexport interface ITabelButtonActionEvent {\n button: IButton;\n item: any;\n buttonDropdownData?: any;\n}\n\nexport interface ITableIButtonAction {\n ignoreAlignCenter?: boolean;\n marginTop?: number;\n marginLeft?: number;\n startOfColum?: number;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { IButton } from '@libs-ui/components-buttons-button';\n\nexport interface IButtonBarEvent {\n button: IButton;\n keys: Array<any>;\n items: Array<any>;\n hiddenBarButtons: () => void;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { WritableSignal } from '@angular/core';\nimport { IAvatarConfig } from '@libs-ui/components-avatar';\nimport { IButton } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsComponentOutletComponent } from '@libs-ui/components-component-outlet';\nimport { IDropdown } from '@libs-ui/components-dropdown';\nimport { ILineClampConfig } from '@libs-ui/components-line-clamp';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { IPopover } from '@libs-ui/components-popover';\nimport { ISwitchEvent } from '@libs-ui/components-switch';\nimport { TYPE_FUNCTION, TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport { Observable } from 'rxjs';\nimport { TYPE_ITEM_DATA_TABLE } from './table.type';\n\nexport interface ITableTemplateConfig {\n cssWrapper: string;\n fieldsConfig: Array<ITableFieldTemplateConfig>;\n}\n\nexport interface ITableFieldTemplateConfig {\n instance?: 'tooltip' | 'line-clamp' | 'buttons' | 'button-status' | 'switch' | 'badge' | 'other-action-show-popup' | 'shape-style' | 'image' | 'avatar' | 'button-action-show-popup';\n field: string;\n parseValue?: TYPE_FUNCTION;\n getTooltipIconClass?: TYPE_FUNCTION; // Sử dụng dùng iconClass tooltip cho type tooltip.\n getTooltipConfig?: TYPE_FUNCTION;\n action?: (dataField: any, item: TYPE_ITEM_DATA_TABLE, itemTableSelected?: TYPE_ITEM_DATA_TABLE) => any;\n tooltip?: IPopover; // nếu muốn sử dụng libs-uicomponents-tooltip. yêu cầu để type bằng tooltip\n ngStyle?: TYPE_OBJECT;\n getNgStyle?: TYPE_FUNCTION;\n ngClass?: TYPE_OBJECT;\n getNgClass?: TYPE_FUNCTION;\n ignoreClassMarginLeft?: boolean; // sử dụng khi muốn bỏ class margin cho type other-action-show-popup, badge\n\n lineClampConfig?: ILineClampConfig;\n\n getDisableValueSwitch?: TYPE_FUNCTION; // sử dụng khi muốn điểu chỉnh chế độ enable hay disable cho toggle\n getActiveValueSwitch?: TYPE_FUNCTION; // sử dụng khi muốn điểu chỉnh chế độ active hay deactive cho toggle\n switchAction?: (switchData: ISwitchEvent, item: TYPE_ITEM_DATA_TABLE) => void; // Bắt buộc khi sử dụng type = switch\n buttons?: Array<WritableSignal<IButton>>;\n getButtonsByItem?: TYPE_FUNCTION<Array<WritableSignal<IButton>>>;\n showButtonHoverMode?: boolean;\n getDisable?: TYPE_FUNCTION; // Sử dụng để disable input, button, qr-code\n dropdownConfig?: ITableFieldTemplateConfigDropdown;\n\n getAvatarConfig?: TYPE_FUNCTION<IAvatarConfig | undefined>;\n\n getImageSrc?: (value: any, item?: TYPE_OBJECT, lang?: string, isError?: boolean) => Observable<string>;\n rows?: Array<ITableTemplateConfig>;\n rowsTemplateCssWrapper?: string;\n\n getComponentOutlet?: () => Observable<LibsUiComponentsComponentOutletComponent | any>;\n getDataComponentOutlet?: TYPE_FUNCTION;\n}\n\nexport interface ITableFieldTemplateConfigDropdown extends Omit<IDropdown, 'listConfig'> {\n button?: WritableSignal<IButton>;\n getListConfig?: TYPE_FUNCTION<IListConfigItem>;\n listKeysDisableItem?: Array<string>;\n listHiddenInputSearch?: boolean;\n maxHeight?: number;\n ignoreArrow?: boolean;\n position?: {\n mode: 'start' | 'center' | 'end';\n distance: number;\n };\n listConfig?: IListConfigItem;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|