@libs-ui/components-table 0.2.346-5 → 0.2.346-7

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.
@@ -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, input, OnDestroy } 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 functionControls = new Map<number, IDropdownFunctionControlEvent>();\n protected isImageError: boolean | 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 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 && 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) as IDropdownFunctionControlEvent)?.reset();\n (this.functionControls?.get(index) as IDropdownFunctionControlEvent)?.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) as IDropdownFunctionControlEvent)?.reset();\n });\n }\n\n protected async handlerImageError(event: Event) {\n event.stopPropagation();\n this.isImageError = 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 setTimeout(() => {\n this.lockClick = false;\n }, 250);\n }\n }\n\n ngOnDestroy(): void {\n this.functionControls.clear();\n }\n}\n","@if (configs(); as configs) {\n @if (item(); as item) {\n <div class=\"libs-ui-table-template {{ templateCssWrapper() || '' }}\">\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) | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate\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 (error)=\"handlerImageError($event)\"\n (click)=\"handlerItemClick($event, fieldConfig)\" />\n }\n }\n }\n\n @case ('avatar') {\n @if (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getAvatarConfig : item() | async; as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [size]=\"avatarConfig.size || 32\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [getLastTextAfterSpace]=\"avatarConfig.getLastTextAfterSpace\"\n [textAvatar]=\"avatarConfig.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 }\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 [innerHtml]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate\"></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 }\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' : true | async\n \"\n (click)=\"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)\"></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 { LibsUiComponentsPaginationComponent } from '@libs-ui/components-pagination';\nimport { LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\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 {\n IButtonBarEvent,\n IConfigSelectMoreItem,\n IConfigTemplateItemCollapseExpand,\n IHoverButtonActionEvent,\n ILoadMoreEvent,\n ISortEvent,\n ITabelButtonActionEvent,\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 ],\n})\nexport class LibsUiComponentsTableComponent implements OnInit, OnDestroy {\n /** PROPERTY */\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\n protected keysSelected = signal<Array<any>>([]);\n protected loading = signal<boolean>(false);\n protected stores = signal<Array<WritableSignal<TYPE_OBJECT>>>([]);\n protected items = signal<Array<WritableSignal<TYPE_OBJECT>>>([]);\n protected itemFooter = signal<TYPE_OBJECT | undefined>(undefined);\n protected itemOfIndexHover?: TYPE_ITEM_DATA_TABLE;\n protected keySearch = signal<string>('');\n protected totalItemInBackend = signal<number>(0);\n protected totalItemDisplay = computed(() => viewDataNumberByLanguage(this.totalItem() ?? this.totalItemInBackend(), false));\n protected listConfigMoreItem = computed<IListConfigItem>(() => {\n return {\n type: 'text',\n configTemplateText: signal({\n fieldKey: 'key',\n ignoreIconSelected: true,\n getValue: this.configSelectMoreItem()?.getValue,\n configLabelPopover: signal({\n zIndex: 1200,\n }),\n }),\n httpRequestData: signal<IHttpRequestConfig>({\n objectInstance: returnListObject(this.configSelectMoreItem()?.listOption),\n functionName: 'list',\n argumentsValue: [],\n }),\n };\n });\n protected itemsHightLight = signal<Array<TYPE_ITEM_DATA_TABLE>>([]);\n protected hasItemHightLight = computed(() => this.itemsHightLight().length > 0);\n\n private hasScroll = signal<boolean>(false);\n private instanceSort = signal<ISort | undefined>(undefined);\n private hasActionButtonDropdownContent = signal<boolean>(false);\n protected pagingStore = signal<IPaging | undefined>(undefined);\n private loadedLastItem = signal<boolean>(false);\n private storeParamsCallApi = signal<TYPE_OBJECT>({});\n private timeoutLeaveItem = signal<number | undefined>(undefined);\n private functionControlSelectMoreItem?: IDropdownFunctionControlEvent;\n private mouseEnterHeader = signal<boolean>(false);\n\n /** 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, { transform: (val) => (val ? (val > 25 ? 25 : val) : 5) });\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<{\n position?: 'top' | 'bottom';\n classIncludeContainer?: string;\n classIncludeItem?: string;\n disable?: boolean;\n numberPageDisplay?: number;\n showTotalPage?: boolean;\n showInputGotoPage?: boolean;\n modeDisplayTotalPageAndGotoPage?: 'top' | 'bottom' | 'left' | 'right';\n classDisplayTotalPageAndGotoPage?: string;\n }>();\n\n readonly templateNoData = input<TYPE_TEMPLATE_REF>();\n readonly templateNoResult = input<TYPE_TEMPLATE_REF>();\n\n /** OUTPUT */\n\n readonly outLoadMore = output<ILoadMoreEvent>();\n readonly outScrollIsGone = output<ILoadMoreEvent>();\n readonly outLoading = output<boolean>();\n readonly outClickButtonAction = output<ITabelButtonActionEvent>();\n readonly outSort = output<ISortEvent>();\n readonly outClickBarButton = output<IButtonBarEvent>();\n readonly outHoverButtonAction = output<IHoverButtonActionEvent>();\n readonly outKeysSelected = output<{ keys: Array<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 /**VIEW CHILD */\n protected headerElementRef = viewChild<ElementRef>('headerElementRef');\n protected footerElementRef = viewChild<ElementRef>('footerElementRef');\n protected footerLeftElementRef = viewChild<ElementRef>('footerLeftElementRef');\n private bodyElementRef = viewChild<ElementRef>('bodyElementRef');\n private bodyComponentRef = viewChild<VirtualScrollerComponent>('bodyComponentRef');\n\n /**INJECT */\n private httpRequestService = inject(LibsUiHttpRequestService);\n private destroyRef = inject(DestroyRef);\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {\n effect(() => {\n if (this.defaultKeysSelected()?.length) {\n untracked(() => this.keysSelected.update((keys) => [...keys, ...(this.defaultKeysSelected() || [])]));\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(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.cdr.detectChanges();\n });\n }\n\n public 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: () => this.keysSelected.set([]),\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 hightLightItem: this.hightLightItem.bind(this),\n };\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 getScrollContainer() {\n return this.bodyComponentRef() as VirtualScrollerComponent;\n }\n\n private async callApiByService(firstCall: boolean, resetAfterCallApi?: boolean) {\n try {\n if (firstCall) {\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 && resetAfterCallApi) {\n this.hasScroll.set(false);\n this.stores.set([]);\n this.items.set([]);\n }\n this.pagingStore.set(result.paging);\n this.totalItemInBackend.set(result.paging?.total_items || 0);\n this.outTotalItem.emit(this.totalItemInBackend());\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 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 protected 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 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() || !items().length) {\n return;\n }\n const itemsAdd: Array<WritableSignal<TYPE_OBJECT>> = [];\n\n items().forEach((item) => {\n if (!this.checkExistItem(item)) {\n itemsAdd.push(item);\n if (addFirst) {\n this.items.update((data) => [item, ...data]);\n this.stores.update((data) => [item, ...data]);\n\n return;\n }\n this.items.update((data) => [...data, item]);\n this.stores.update((data) => [...data, item]);\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 checkExistItem(itemNew: WritableSignal<TYPE_OBJECT>): boolean {\n return this.items().find((item) => `${get<unknown>(item, this.fieldKey())}` === `${get<unknown>(itemNew, this.fieldKey())}`) ? true : false;\n }\n\n private async removeItems(keys: Array<unknown>, ignoreReCallFooter?: 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())}` === `${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())}` === `${key}`) {\n isUpdate = true;\n return false;\n }\n return true;\n });\n\n return isUpdate ? newItems : items;\n });\n\n if (!this.keysSelected() || !this.keysSelected().length) {\n return;\n }\n this.keysSelected.update((keys) => keys.filter((keySelected) => keySelected !== key));\n });\n this.totalItemInBackend.update((value) => value - keys.length);\n await this.checkScroll();\n if (!ignoreReCallFooter) {\n await this.callApiByServiceFooter();\n }\n this.outKeysSelected.emit({ keys: this.keysSelected() });\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 protected handlerChangeAllChecked() {\n this.keysSelected.set([]);\n this.outKeysSelected.emit({ keys: this.keysSelected() });\n }\n\n protected handlerChangeCheckedAllItems(event: ICheckboxEvent) {\n if (event.checked) {\n this.keysSelected.set(\n this.items()\n .filter(async (item) => !(await this.checkCancelConditionCheckedItem(item)))\n .map((item) => `${get<unknown>(item, this.fieldKey())}`)\n );\n this.outKeysSelected.emit({ keys: this.keysSelected() });\n\n return;\n }\n this.keysSelected.set([]);\n this.outKeysSelected.emit({ keys: this.keysSelected() });\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 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.outKeysSelected.emit({ keys: this.keysSelected() });\n }\n\n protected async handlerChangeSort(sort: ISort) {\n const scrollLeft = this.headerElementRef()?.nativeElement.scrollLeft || 0;\n if (this.instanceSort && 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 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 protected handlerFunctionControlMoreSelectItem(functionControl: IDropdownFunctionControlEvent) {\n this.functionControlSelectMoreItem = functionControl;\n }\n\n protected handlerSelectedMoreItem(event: IEmitSelectKey | undefined) {\n if (!event || !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\n return;\n }\n\n this.callApiByService(true, true);\n const sub = this.outLoadDataComplete.subscribe(() => {\n sub.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 });\n\n this.outLoadDataError.subscribe(() => {\n this.setPerPageSelectMoreItem(currentPerPage);\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 protected handlerButtonClick(type: 'button' | 'button-dropdown', buttonDropdownData: any, button: IButton) {\n // buttonOrigin chỉ sử dụng khi dùng buttonActions có button-dropdown\n if (type === 'button') {\n return this.outClickButtonAction.emit({ item: this.itemOfIndexHover, button: button });\n }\n this.outClickButtonAction.emit({ item: this.itemOfIndexHover, button, buttonDropdownData });\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 handlerButtonDropdownEvent(eventName: TYPE_POPOVER_EVENT) {\n this.hasActionButtonDropdownContent.set(true);\n if (eventName === 'remove' || eventName === 'mouseleave-content') {\n this.hasActionButtonDropdownContent.set(false);\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 })\n );\n }\n\n protected resetIndexHover(e?: Event) {\n e?.stopPropagation();\n if (this.hasActionButtonDropdownContent()) {\n return;\n }\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 protected handlerScrollHeader(e: Event) {\n e.stopPropagation();\n if (!this.mouseEnterHeader()) {\n return;\n }\n (this.bodyElementRef() as any).nativeElement.scrollLeft = (e.target as HTMLElement).scrollLeft;\n if (this.footerElementRef()) {\n (this.footerElementRef() as any).nativeElement.scrollLeft = (e.target as HTMLElement).scrollLeft;\n }\n this.resetIndexHover(e);\n }\n\n protected handlerScrollBody(e: Event) {\n e.stopPropagation();\n if (this.mouseEnterHeader()) {\n return;\n }\n (this.headerElementRef() as any).nativeElement.scrollLeft = (e.target as HTMLElement).scrollLeft;\n if (this.footerElementRef()) {\n (this.footerElementRef() as any).nativeElement.scrollLeft = (e.target as HTMLElement).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 this.callApiByService(true);\n }\n\n private resetScroll(scrollPositionLeft?: number, scrollPositionTop?: number) {\n if (this.headerElementRef()) {\n (this.headerElementRef() as any).nativeElement.scrollLeft = scrollPositionLeft || 0;\n }\n if (this.BodyElement) {\n this.BodyElement.scrollTop = scrollPositionTop || 0;\n this.BodyElement.scrollLeft = scrollPositionLeft || 0;\n }\n if (this.footerElementRef()) {\n (this.footerElementRef() as any).nativeElement.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 protected 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 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=\"{{ classLabelBarNoSelectItem() ?? 'px-[12px] py-[5px]' }}\"\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 @for (header of headerRight(); track header) {\n <ng-container *ngTemplateOutlet=\"templateHeaderRef; context: { headerItem: header, isHeaderLeft: false }\" />\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-shirk': '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 @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-shirk': '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 </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 $index) {\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]=\"paginationSetting()?.modeDisplayTotalPageAndGotoPage || 'bottom'\"\n [classDisplayTotalPageAndGotoPage]=\"paginationSetting()?.classDisplayTotalPageAndGotoPage || ''\"\n [classIncludeItem]=\"paginationSetting()?.classIncludeItem || ''\"\n [classIncludeContainer]=\"paginationSetting()?.classIncludeContainer || '!items-end'\"\n [disable]=\"paginationSetting()?.disable || loading() || !items().length\"\n [numberPageDisplay]=\"paginationSetting()?.numberPageDisplay || 5\"\n [showTotalPage]=\"paginationSetting()?.showTotalPage || false\"\n [showInputGotoPage]=\"paginationSetting()?.showInputGotoPage || false\"\n [totalItems]=\"pagingStore()?.total_items || (pagingStore()?.total_pages || 0) * (pagingStore()?.per_page || 0)\"\n [perPage]=\"pagingStore()?.per_page || 0\"\n [currentPage]=\"pagingStore()?.page || 0\"\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-shirk': '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-shirk': '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()) {\n @for (footer of footerRight(); track footer) {\n <div\n class=\"flex items-center px-[12px] py-[8px]\"\n [ngStyle]=\"(footer | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerRight || 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 }\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 @let constHtmlTextSearchNoData = noDataConfig().textSearchNoData || 'i18n_no_result';\n <div\n class=\"libs-ui-table-no-data-config-text\"\n [ngStyle]=\"noDataConfig().ngStyle || {}\"\n [ngClass]=\"noDataConfig().ngClass || {}\"\n [innerHtml]=\"constHtmlTextSearchNoData | 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 @let constHtmlTextNoData = noDataConfig().textNoData || 'i18n_no_data_yet';\n <div\n class=\"libs-ui-table-no-data-config-text\"\n [ngStyle]=\"noDataConfig().ngStyle || {}\"\n [ngClass]=\"noDataConfig().ngClass || {}\"\n [innerHtml]=\"constHtmlTextNoData | 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 { 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 { LibsUiComponentsComponentOutletComponent } from '@libs-ui/components-component-outlet';\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>;\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, input, OnDestroy } 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 functionControls = new Map<number, IDropdownFunctionControlEvent>();\n protected isImageError: boolean | 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 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 && 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) as IDropdownFunctionControlEvent)?.reset();\n (this.functionControls?.get(index) as IDropdownFunctionControlEvent)?.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) as IDropdownFunctionControlEvent)?.reset();\n });\n }\n\n protected async handlerImageError(event: Event) {\n event.stopPropagation();\n this.isImageError = 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 setTimeout(() => {\n this.lockClick = false;\n }, 250);\n }\n }\n\n ngOnDestroy(): void {\n this.functionControls.clear();\n }\n}\n","@if (configs(); as configs) {\n @if (item(); as item) {\n <div class=\"libs-ui-table-template {{ templateCssWrapper() || '' }}\">\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) | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate\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 (error)=\"handlerImageError($event)\"\n (click)=\"handlerItemClick($event, fieldConfig)\" />\n }\n }\n }\n\n @case ('avatar') {\n @if (item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.getAvatarConfig : item() | async; as avatarConfig) {\n <libs_ui-components-avatar\n [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [ngStyle]=\"constHtmlNgStyle\"\n [ngClass]=\"constHtmlNgClass\"\n [size]=\"avatarConfig.size || 32\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [getLastTextAfterSpace]=\"avatarConfig.getLastTextAfterSpace\"\n [textAvatar]=\"avatarConfig.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 }\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 [innerHtml]=\"item() | LibsUiPipesGetValueOfObjectPipe: fieldConfig.field : undefined : true | LibsUiPipesCallFunctionInTemplatePipe: fieldConfig.parseValue : item() | async | translate\"></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 }\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' : true | async\n \"\n (click)=\"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)\"></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 { LibsUiComponentsPaginationComponent } from '@libs-ui/components-pagination';\nimport { LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\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 {\n IButtonBarEvent,\n IConfigSelectMoreItem,\n IConfigTemplateItemCollapseExpand,\n IHoverButtonActionEvent,\n ILoadMoreEvent,\n ISortEvent,\n ITabelButtonActionEvent,\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 ],\n})\nexport class LibsUiComponentsTableComponent implements OnInit, OnDestroy {\n /** PROPERTY */\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\n protected keysSelected = signal<Array<any>>([]);\n protected loading = signal<boolean>(false);\n protected stores = signal<Array<WritableSignal<TYPE_OBJECT>>>([]);\n protected items = signal<Array<WritableSignal<TYPE_OBJECT>>>([]);\n protected itemFooter = signal<TYPE_OBJECT | undefined>(undefined);\n protected itemOfIndexHover?: TYPE_ITEM_DATA_TABLE;\n protected keySearch = signal<string>('');\n protected totalItemInBackend = signal<number>(0);\n protected totalItemDisplay = computed(() => viewDataNumberByLanguage(this.totalItem() ?? this.totalItemInBackend(), false));\n protected listConfigMoreItem = computed<IListConfigItem>(() => {\n return {\n type: 'text',\n configTemplateText: signal({\n fieldKey: 'key',\n ignoreIconSelected: true,\n getValue: this.configSelectMoreItem()?.getValue,\n configLabelPopover: signal({\n zIndex: 1200,\n }),\n }),\n httpRequestData: signal<IHttpRequestConfig>({\n objectInstance: returnListObject(this.configSelectMoreItem()?.listOption),\n functionName: 'list',\n argumentsValue: [],\n }),\n };\n });\n protected itemsHightLight = signal<Array<TYPE_ITEM_DATA_TABLE>>([]);\n protected hasItemHightLight = computed(() => this.itemsHightLight().length > 0);\n\n private hasScroll = signal<boolean>(false);\n private instanceSort = signal<ISort | undefined>(undefined);\n private hasActionButtonDropdownContent = signal<boolean>(false);\n protected pagingStore = signal<IPaging | undefined>(undefined);\n private loadedLastItem = signal<boolean>(false);\n private storeParamsCallApi = signal<TYPE_OBJECT>({});\n private timeoutLeaveItem = signal<number | undefined>(undefined);\n private functionControlSelectMoreItem?: IDropdownFunctionControlEvent;\n private mouseEnterHeader = signal<boolean>(false);\n\n /** 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, { transform: (val) => (val ? (val > 25 ? 25 : val) : 5) });\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<{\n position?: 'top' | 'bottom';\n classIncludeContainer?: string;\n classIncludeItem?: string;\n disable?: boolean;\n numberPageDisplay?: number;\n showTotalPage?: boolean;\n showInputGotoPage?: boolean;\n modeDisplayTotalPageAndGotoPage?: 'top' | 'bottom' | 'left' | 'right';\n classDisplayTotalPageAndGotoPage?: string;\n }>();\n\n readonly templateNoData = input<TYPE_TEMPLATE_REF>();\n readonly templateNoResult = input<TYPE_TEMPLATE_REF>();\n\n /** OUTPUT */\n\n readonly outLoadMore = output<ILoadMoreEvent>();\n readonly outScrollIsGone = output<ILoadMoreEvent>();\n readonly outLoading = output<boolean>();\n readonly outClickButtonAction = output<ITabelButtonActionEvent>();\n readonly outSort = output<ISortEvent>();\n readonly outClickBarButton = output<IButtonBarEvent>();\n readonly outHoverButtonAction = output<IHoverButtonActionEvent>();\n readonly outKeysSelected = output<{ keys: Array<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 /**VIEW CHILD */\n protected headerElementRef = viewChild<ElementRef>('headerElementRef');\n protected footerElementRef = viewChild<ElementRef>('footerElementRef');\n protected footerLeftElementRef = viewChild<ElementRef>('footerLeftElementRef');\n private bodyElementRef = viewChild<ElementRef>('bodyElementRef');\n private bodyComponentRef = viewChild<VirtualScrollerComponent>('bodyComponentRef');\n\n /**INJECT */\n private httpRequestService = inject(LibsUiHttpRequestService);\n private destroyRef = inject(DestroyRef);\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {\n effect(() => {\n if (this.defaultKeysSelected()?.length) {\n untracked(() => this.keysSelected.update((keys) => [...keys, ...(this.defaultKeysSelected() || [])]));\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(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.cdr.detectChanges();\n });\n }\n\n public 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: () => this.keysSelected.set([]),\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 hightLightItem: this.hightLightItem.bind(this),\n };\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 getScrollContainer() {\n return this.bodyComponentRef() as VirtualScrollerComponent;\n }\n\n private async callApiByService(firstCall: boolean, resetAfterCallApi?: boolean) {\n try {\n if (firstCall) {\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 && resetAfterCallApi) {\n this.hasScroll.set(false);\n this.stores.set([]);\n this.items.set([]);\n }\n this.pagingStore.set(result.paging);\n this.totalItemInBackend.set(result.paging?.total_items || 0);\n this.outTotalItem.emit(this.totalItemInBackend());\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 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 protected 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 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() || !items().length) {\n return;\n }\n const itemsAdd: Array<WritableSignal<TYPE_OBJECT>> = [];\n\n items().forEach((item) => {\n if (!this.checkExistItem(item)) {\n itemsAdd.push(item);\n if (addFirst) {\n this.items.update((data) => [item, ...data]);\n this.stores.update((data) => [item, ...data]);\n\n return;\n }\n this.items.update((data) => [...data, item]);\n this.stores.update((data) => [...data, item]);\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 checkExistItem(itemNew: WritableSignal<TYPE_OBJECT>): boolean {\n return this.items().find((item) => `${get<unknown>(item, this.fieldKey())}` === `${get<unknown>(itemNew, this.fieldKey())}`) ? true : false;\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())}` === `${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())}` === `${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() || !this.keysSelected().length) {\n return;\n }\n this.keysSelected.update((keys) => keys.filter((keySelected) => keySelected !== key));\n });\n this.totalItemInBackend.update((value) => value - keys.length);\n await this.checkScroll();\n if (!ignoreReCallFooter) {\n await this.callApiByServiceFooter();\n }\n this.outKeysSelected.emit({ keys: this.keysSelected() });\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 protected handlerChangeAllChecked() {\n this.keysSelected.set([]);\n this.outKeysSelected.emit({ keys: this.keysSelected() });\n }\n\n protected handlerChangeCheckedAllItems(event: ICheckboxEvent) {\n if (event.checked) {\n this.keysSelected.set(\n this.items()\n .filter(async (item) => !(await this.checkCancelConditionCheckedItem(item)))\n .map((item) => `${get<unknown>(item, this.fieldKey())}`)\n );\n this.outKeysSelected.emit({ keys: this.keysSelected() });\n\n return;\n }\n this.keysSelected.set([]);\n this.outKeysSelected.emit({ keys: this.keysSelected() });\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 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.outKeysSelected.emit({ keys: this.keysSelected() });\n }\n\n protected async handlerChangeSort(sort: ISort) {\n const scrollLeft = this.headerElementRef()?.nativeElement.scrollLeft || 0;\n if (this.instanceSort && 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 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 protected handlerFunctionControlMoreSelectItem(functionControl: IDropdownFunctionControlEvent) {\n this.functionControlSelectMoreItem = functionControl;\n }\n\n protected handlerSelectedMoreItem(event: IEmitSelectKey | undefined) {\n if (!event || !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\n return;\n }\n\n this.callApiByService(true, true);\n const sub = this.outLoadDataComplete.subscribe(() => {\n sub.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 });\n\n this.outLoadDataError.subscribe(() => {\n this.setPerPageSelectMoreItem(currentPerPage);\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 protected handlerButtonClick(type: 'button' | 'button-dropdown', buttonDropdownData: any, button: IButton) {\n // buttonOrigin chỉ sử dụng khi dùng buttonActions có button-dropdown\n if (type === 'button') {\n return this.outClickButtonAction.emit({ item: this.itemOfIndexHover, button: button });\n }\n this.outClickButtonAction.emit({ item: this.itemOfIndexHover, button, buttonDropdownData });\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 handlerButtonDropdownEvent(eventName: TYPE_POPOVER_EVENT) {\n this.hasActionButtonDropdownContent.set(true);\n if (eventName === 'remove' || eventName === 'mouseleave-content') {\n this.hasActionButtonDropdownContent.set(false);\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 })\n );\n }\n\n protected resetIndexHover(e?: Event) {\n e?.stopPropagation();\n if (this.hasActionButtonDropdownContent()) {\n return;\n }\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 protected handlerScrollHeader(e: Event) {\n e.stopPropagation();\n if (!this.mouseEnterHeader()) {\n return;\n }\n (this.bodyElementRef() as any).nativeElement.scrollLeft = (e.target as HTMLElement).scrollLeft;\n if (this.footerElementRef()) {\n (this.footerElementRef() as any).nativeElement.scrollLeft = (e.target as HTMLElement).scrollLeft;\n }\n this.resetIndexHover(e);\n }\n\n protected handlerScrollBody(e: Event) {\n e.stopPropagation();\n if (this.mouseEnterHeader()) {\n return;\n }\n (this.headerElementRef() as any).nativeElement.scrollLeft = (e.target as HTMLElement).scrollLeft;\n if (this.footerElementRef()) {\n (this.footerElementRef() as any).nativeElement.scrollLeft = (e.target as HTMLElement).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 this.callApiByService(true);\n }\n\n private resetScroll(scrollPositionLeft?: number, scrollPositionTop?: number) {\n if (this.headerElementRef()) {\n (this.headerElementRef() as any).nativeElement.scrollLeft = scrollPositionLeft || 0;\n }\n if (this.BodyElement) {\n this.BodyElement.scrollTop = scrollPositionTop || 0;\n this.BodyElement.scrollLeft = scrollPositionLeft || 0;\n }\n if (this.footerElementRef()) {\n (this.footerElementRef() as any).nativeElement.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 protected 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 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=\"{{ classLabelBarNoSelectItem() ?? 'px-[12px] py-[5px]' }}\"\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 @for (header of headerRight(); track header) {\n <ng-container *ngTemplateOutlet=\"templateHeaderRef; context: { headerItem: header, isHeaderLeft: false }\" />\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-shirk': '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 @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-shirk': '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 </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 $index) {\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]=\"paginationSetting()?.modeDisplayTotalPageAndGotoPage || 'bottom'\"\n [classDisplayTotalPageAndGotoPage]=\"paginationSetting()?.classDisplayTotalPageAndGotoPage || ''\"\n [classIncludeItem]=\"paginationSetting()?.classIncludeItem || ''\"\n [classIncludeContainer]=\"paginationSetting()?.classIncludeContainer || '!items-end'\"\n [disable]=\"paginationSetting()?.disable || loading() || !items().length\"\n [numberPageDisplay]=\"paginationSetting()?.numberPageDisplay || 5\"\n [showTotalPage]=\"paginationSetting()?.showTotalPage || false\"\n [showInputGotoPage]=\"paginationSetting()?.showInputGotoPage || false\"\n [totalItems]=\"pagingStore()?.total_items || (pagingStore()?.total_pages || 0) * (pagingStore()?.per_page || 0)\"\n [perPage]=\"pagingStore()?.per_page || 0\"\n [currentPage]=\"pagingStore()?.page || 0\"\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-shirk': '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-shirk': '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()) {\n @for (footer of footerRight(); track footer) {\n <div\n class=\"flex items-center px-[12px] py-[8px]\"\n [ngStyle]=\"(footer | LibsUiTableCalculatorColumnPipe: ignoreCalculatorWidthHeader()?.headerRight || 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 }\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 @let constHtmlTextSearchNoData = noDataConfig().textSearchNoData || 'i18n_no_result';\n <div\n class=\"libs-ui-table-no-data-config-text\"\n [ngStyle]=\"noDataConfig().ngStyle || {}\"\n [ngClass]=\"noDataConfig().ngClass || {}\"\n [innerHtml]=\"constHtmlTextSearchNoData | 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 @let constHtmlTextNoData = noDataConfig().textNoData || 'i18n_no_data_yet';\n <div\n class=\"libs-ui-table-no-data-config-text\"\n [ngStyle]=\"noDataConfig().ngStyle || {}\"\n [ngClass]=\"noDataConfig().ngClass || {}\"\n [innerHtml]=\"constHtmlTextNoData | 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 { 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 { LibsUiComponentsComponentOutletComponent } from '@libs-ui/components-component-outlet';\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>;\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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"}