@sd-angular/core 19.0.0-beta.1 → 19.0.0-beta.11

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.
Files changed (89) hide show
  1. package/assets/scss/core/bootstrap.scss +25 -0
  2. package/assets/scss/core/form.scss +4 -10
  3. package/components/avatar/index.d.ts +1 -0
  4. package/components/avatar/src/avatar.component.d.ts +14 -0
  5. package/components/document-builder/src/document-builder.component.d.ts +23 -6
  6. package/components/document-builder/src/document-builder.config.d.ts +21 -0
  7. package/components/document-builder/src/document-builder.model.d.ts +1 -0
  8. package/components/document-builder/src/document-builder.utils.d.ts +10 -0
  9. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +4 -0
  10. package/components/document-builder/src/plugins/{image-upload.plugin.d.ts → image-upload/image-upload.plugin.d.ts} +0 -4
  11. package/components/document-builder/src/plugins/index.d.ts +6 -5
  12. package/components/index.d.ts +1 -0
  13. package/components/table/src/models/table-item.model.d.ts +2 -1
  14. package/components/table/src/models/table-option.model.d.ts +2 -1
  15. package/components/workflow/src/models/index.d.ts +1 -0
  16. package/fesm2022/sd-angular-core-components-avatar.mjs +88 -0
  17. package/fesm2022/sd-angular-core-components-avatar.mjs.map +1 -0
  18. package/fesm2022/sd-angular-core-components-badge.mjs +2 -2
  19. package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
  20. package/fesm2022/sd-angular-core-components-document-builder.mjs +721 -513
  21. package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
  22. package/fesm2022/sd-angular-core-components-table.mjs +366 -77
  23. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  24. package/fesm2022/sd-angular-core-components-workflow.mjs +23 -23
  25. package/fesm2022/sd-angular-core-components-workflow.mjs.map +1 -1
  26. package/fesm2022/sd-angular-core-components.mjs +1 -0
  27. package/fesm2022/sd-angular-core-components.mjs.map +1 -1
  28. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +24 -2
  29. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  30. package/fesm2022/sd-angular-core-forms-date.mjs +15 -3
  31. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  32. package/fesm2022/sd-angular-core-forms-datetime.mjs +17 -3
  33. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  34. package/fesm2022/sd-angular-core-forms-input-number.mjs +18 -3
  35. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  36. package/fesm2022/sd-angular-core-forms-input.mjs +20 -6
  37. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  38. package/fesm2022/sd-angular-core-forms-radio.mjs +17 -2
  39. package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
  40. package/fesm2022/sd-angular-core-forms-select.mjs +15 -2
  41. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  42. package/fesm2022/sd-angular-core-forms-textarea.mjs +21 -2
  43. package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
  44. package/fesm2022/sd-angular-core-modules-auth.mjs +137 -0
  45. package/fesm2022/sd-angular-core-modules-auth.mjs.map +1 -0
  46. package/fesm2022/sd-angular-core-modules-layout.mjs +1 -1
  47. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  48. package/fesm2022/sd-angular-core-modules.mjs +1 -0
  49. package/fesm2022/sd-angular-core-modules.mjs.map +1 -1
  50. package/fesm2022/sd-angular-core-pipes.mjs +21 -1
  51. package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
  52. package/fesm2022/sd-angular-core-services-confirm.mjs +60 -25
  53. package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
  54. package/fesm2022/sd-angular-core-utilities-extensions.mjs +66 -1
  55. package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
  56. package/fesm2022/sd-angular-core-utilities-models.mjs +12 -3
  57. package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
  58. package/forms/autocomplete/src/autocomplete.component.d.ts +5 -1
  59. package/forms/date/src/date.component.d.ts +4 -1
  60. package/forms/datetime/src/datetime.component.d.ts +4 -1
  61. package/forms/input/src/input.component.d.ts +6 -4
  62. package/forms/input-number/src/input-number.component.d.ts +4 -1
  63. package/forms/radio/src/radio.component.d.ts +5 -1
  64. package/forms/select/src/select.component.d.ts +5 -1
  65. package/forms/textarea/src/textarea.component.d.ts +3 -1
  66. package/modules/auth/configurations/auth.configuration.d.ts +19 -0
  67. package/modules/auth/configurations/index.d.ts +1 -0
  68. package/modules/auth/guards/auth.guard.d.ts +11 -0
  69. package/modules/auth/guards/index.d.ts +2 -0
  70. package/modules/auth/guards/portal.guard.d.ts +11 -0
  71. package/modules/auth/index.d.ts +3 -0
  72. package/modules/auth/services/auth.model.d.ts +8 -0
  73. package/modules/auth/services/auth.service.d.ts +17 -0
  74. package/modules/auth/services/index.d.ts +2 -0
  75. package/modules/index.d.ts +1 -0
  76. package/package.json +57 -49
  77. package/pipes/index.d.ts +1 -0
  78. package/pipes/src/empty.pipe.d.ts +7 -0
  79. package/sd-angular-core-19.0.0-beta.11.tgz +0 -0
  80. package/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.d.ts +8 -0
  81. package/services/confirm/src/lib/confirm.service.d.ts +14 -0
  82. package/utilities/extensions/index.d.ts +1 -0
  83. package/utilities/extensions/src/color.extension.d.ts +20 -0
  84. package/utilities/models/src/maybe-async.model.d.ts +1 -0
  85. package/utilities/models/src/pattern.model.d.ts +2 -2
  86. /package/components/document-builder/src/plugins/{comment.plugin.d.ts → comment/comment.plugin.d.ts} +0 -0
  87. /package/components/document-builder/src/plugins/{page-orientation.plugin.d.ts → page-orientation/page-orientation.plugin.d.ts} +0 -0
  88. /package/components/document-builder/src/plugins/{table-fit.plugin.d.ts → table-fit/table-fit.plugin.d.ts} +0 -0
  89. /package/components/document-builder/src/plugins/{variable.plugin.d.ts → variable/variable.plugin.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-components-table.mjs","sources":["../../../projects/sd-angular/components/table/src/directives/sd-table-cell-def.directive.ts","../../../projects/sd-angular/components/table/src/directives/sd-table-filter-def.directive.ts","../../../projects/sd-angular/components/table/src/directives/sd-table-expand-def.directive.ts","../../../projects/sd-angular/components/table/src/directives/sd-table-footer-def.directive.ts","../../../projects/sd-angular/components/table/src/components/column-filter/column-filter.component.ts","../../../projects/sd-angular/components/table/src/components/column-filter/column-filter.component.html","../../../projects/sd-angular/components/table/src/pipes/filter-values.pipe.ts","../../../projects/sd-angular/components/table/src/components/external-filter/external-filter.component.ts","../../../projects/sd-angular/components/table/src/components/external-filter/external-filter.component.html","../../../projects/sd-angular/components/table/src/components/selector-action/action-filter.pipe.ts","../../../projects/sd-angular/components/table/src/components/selector-action/selector-action.component.ts","../../../projects/sd-angular/components/table/src/components/selector-action/selector-action.component.html","../../../projects/sd-angular/components/table/src/configurations/table.configuration.ts","../../../projects/sd-angular/components/table/src/services/config.service.ts","../../../projects/sd-angular/components/table/src/components/config/config.component.ts","../../../projects/sd-angular/components/table/src/components/config/config.component.html","../../../projects/sd-angular/components/table/src/components/desktop-cell-view/desktop-cell-view.component.ts","../../../projects/sd-angular/components/table/src/components/desktop-cell-view/desktop-cell-view.component.html","../../../projects/sd-angular/components/table/src/components/desktop-cell/desktop-cell.component.ts","../../../projects/sd-angular/components/table/src/components/desktop-cell/desktop-cell.component.html","../../../projects/sd-angular/components/table/src/pipes/command-disable.pipe.ts","../../../projects/sd-angular/components/table/src/pipes/command-filter.pipe.ts","../../../projects/sd-angular/components/table/src/pipes/command-title.pipe.ts","../../../projects/sd-angular/components/table/src/components/desktop-command/desktop-command.component.ts","../../../projects/sd-angular/components/table/src/components/desktop-command/desktop-command.component.html","../../../projects/sd-angular/components/table/src/components/popup-export/popup-export.component.ts","../../../projects/sd-angular/components/table/src/components/popup-export/popup-export.component.html","../../../projects/sd-angular/components/table/src/models/table-item.model.ts","../../../projects/sd-angular/components/table/src/pipes/sd-group.pipe.ts","../../../projects/sd-angular/components/table/src/pipes/selection-disabled.pipe.ts","../../../projects/sd-angular/components/table/src/pipes/selection-visible-select-all.pipe.ts","../../../projects/sd-angular/components/table/src/pipes/selection-visible.pipe.ts","../../../projects/sd-angular/components/table/src/services/table-filter/table-filter.service.ts","../../../projects/sd-angular/components/table/src/table.component.ts","../../../projects/sd-angular/components/table/src/table.component.html","../../../projects/sd-angular/components/table/src/services/table-filter/table-filter.model.ts","../../../projects/sd-angular/components/table/sd-angular-core-components-table.ts"],"sourcesContent":["import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[sdTableCellDef]',\n})\nexport class SdTabelCellDefDirective {\n @Input() sdTableCellDef?: string;\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\ninterface Context {\n externalFilter?: Record<string, any>;\n}\n\n@Directive({\n selector: '[sdTableFilterDef]',\n})\nexport class SdTableFilterDefDirective {\n static ngTemplateContextGuard(dir: Context, ctx: unknown): ctx is Context {\n return true;\n }\n @Input() sdTableFilterDef?: string;\n defaultShowing?: boolean;\n @Input('defaultShowing') set _defaultShowing(val: boolean | '' | undefined) {\n this.defaultShowing = val === '' || val;\n }\n constructor(public templateRef?: TemplateRef<any>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[sdTableExpandDef]',\n})\nexport class SdMaterialSubInformationDefDirective {\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[sdTableFooterDef]',\n})\nexport class SdMaterialFooterDefDirective {\n @Input() sdTableFooterDef?: string;\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, OnDestroy } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { SdBadge } from '@sd-angular/core/components/badge';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdAutocomplete, SdDate, SdInput, SdInputNumber, SdSearch, SdSelect } from '@sd-angular/core/forms';\r\nimport { SdDateRange } from '@sd-angular/core/forms/date-range';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdOperator, SdOperators } from '@sd-angular/core/utilities';\r\n\r\n@Component({\r\n selector: 'column-filter',\r\n templateUrl: './column-filter.component.html',\r\n styleUrls: ['./column-filter.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n SdButton,\r\n SdInput,\r\n SdInputNumber,\r\n SdSelect,\r\n SdAutocomplete,\r\n SdDate,\r\n SdDateRange,\r\n SdBadge,\r\n ],\r\n})\r\nexport class ColumnFilterComponent implements OnInit, OnDestroy {\r\n autoId?: string;\r\n @Input('autoId') set _autoId(val: string | undefined | null) {\r\n if (val) {\r\n this.autoId = `${val}-inline-`;\r\n }\r\n }\r\n value: any;\r\n @Input('value') _value(value: any) {\r\n this.value = value;\r\n this.#valueChanges.next(undefined);\r\n }\r\n inlineSymbol = 'filter_alt';\r\n #inlineOperator?: SdOperator;\r\n @Input('inlineOperator') set _inlineOperator(inlineOperator: SdOperator) {\r\n if (this.#inlineOperator !== inlineOperator) {\r\n this.#inlineOperator = inlineOperator;\r\n this.inlineSymbol = SdOperators.find(e => e.value === inlineOperator)?.symbol ?? 'filter_alt';\r\n }\r\n }\r\n @Output() inlineOperatorChange = new EventEmitter<SdOperator>();\r\n @Output() operatorChange = new EventEmitter<SdOperator>();\r\n\r\n columnFilter: Record<string, any> = {};\r\n @Input('columnFilter') set _columnFilter(columnFilter: Record<string, any>) {\r\n this.columnFilter = columnFilter || {};\r\n this.#valueChanges.next(undefined);\r\n }\r\n operators = SdOperators;\r\n column!: SdTableColumn;\r\n items: any[] | SdSearch = [];\r\n @Input() cacheValues?: Record<string, any[]>;\r\n @Input('column') set _column(column: SdTableColumn) {\r\n this.column = column;\r\n if (!column?.filter?.disabled && column?.filter?.operator?.enable) {\r\n this.operators = SdOperators.filter(e => column.filter?.operator?.list?.includes?.(e.value));\r\n } else {\r\n this.operators = [];\r\n }\r\n if (this.column.type === 'values') {\r\n if (Array.isArray(this.column.option.items)) {\r\n this.items = this.column.option.items;\r\n } else {\r\n this.items = this.cacheValues?.[column.field] || [];\r\n }\r\n } else if (this.column.type === 'lazy-values') {\r\n this.items = this.column.option.items;\r\n }\r\n }\r\n @Output() filterChange = new EventEmitter();\r\n #valueChanges = new Subject();\r\n #subcription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subcription.add(\r\n this.#valueChanges.pipe(startWith(this.columnFilter)).subscribe(() => {\r\n if (this.column?.type === 'date' || this.column?.type === 'time' || this.column?.type === 'datetime') {\r\n if (this.column?.filter?.type !== 'date') {\r\n this.columnFilter[this.column.field] = this.columnFilter[this.column.field] || {\r\n from: null,\r\n to: null,\r\n };\r\n }\r\n }\r\n if (this.column?.type === 'number') {\r\n if (this.column?.filter?.type === 'split-number') {\r\n this.columnFilter[this.column.field] = this.columnFilter[this.column.field] || {\r\n from: null,\r\n to: null,\r\n };\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subcription.unsubscribe();\r\n }\r\n\r\n onFilterChange = () => {\r\n this.filterChange.emit();\r\n };\r\n\r\n onChangeOperator = (operator: { value: SdOperator; symbol?: string; display: string }) => {\r\n if (operator) {\r\n this.#inlineOperator = operator.value;\r\n this.inlineSymbol = operator.symbol!;\r\n } else {\r\n this.#inlineOperator = undefined;\r\n this.inlineSymbol = 'filter_alt';\r\n }\r\n this.inlineOperatorChange.emit(this.#inlineOperator);\r\n this.operatorChange.emit(this.#inlineOperator);\r\n this.ref.markForCheck();\r\n };\r\n}\r\n","<div class=\"d-flex c-inline-column align-items-end\">\r\n @if (\r\n column.type === 'string' ||\r\n column.type === 'number' ||\r\n column.type === 'boolean' ||\r\n column.type === 'values' ||\r\n column.type === 'lazy-values' ||\r\n column.type === 'date' ||\r\n column.type === 'datetime' ||\r\n column.type === 'time'\r\n ) {\r\n <div class=\"d-flex align-items-center\" *ngIf=\"operators.length\">\r\n <!-- Only number column icon broken. add mb when not default symbol -->\r\n <sd-button\r\n class=\"{{ column.type === 'number' && inlineSymbol !== 'filter_alt' ? 'mb-4 mr-2 ' : 'mr-2 ' }}\"\r\n fontSet=\"material-symbols-outlined\"\r\n [prefixIcon]=\"inlineSymbol\"\r\n [matMenuTriggerFor]=\"menu\"\r\n type=\"link\">\r\n </sd-button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let operator of operators\" (click)=\"onChangeOperator(operator)\" mat-menu-item type=\"button\">\r\n <mat-icon fontSet=\"material-symbols-outlined\" class=\"{{ column.type === 'number' ? 'mb-8 ' : '' }}\">{{\r\n operator.symbol\r\n }}</mat-icon>\r\n <span> {{ operator.display }}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n @if (column.type === 'string') {\r\n <sd-input\r\n *ngIf=\"column.type === 'string'\"\r\n [autoId]=\"autoId + column.field\"\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n type=\"text\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (keyupEnter)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-input>\r\n } @else if (column.type === 'number') {\r\n @if (!column.filter?.type) {\r\n <sd-input-number\r\n [autoId]=\"autoId + column.field\"\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (keyupEnter)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-input-number>\r\n } @else if (column.filter?.type === 'split-number') {\r\n <div class=\"d-flex align-items-center\">\r\n <sd-input-number\r\n [autoId]=\"autoId + '-from-' + column.field\"\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field].from\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-input-number>\r\n <div class=\"mx-4\">-</div>\r\n <sd-input-number\r\n [autoId]=\"autoId + '-to-' + column.field\"\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field].to\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-input-number>\r\n </div>\r\n }\r\n } @else if (column.type === 'boolean') {\r\n <sd-select\r\n *ngIf=\"column.type === 'boolean'\"\r\n [autoId]=\"autoId + column.field\"\r\n [style.flex]=\"1\"\r\n [style.width]=\"'100%'\"\r\n size=\"sm\"\r\n [items]=\"[\r\n { value: '1', display: column.option?.displayOnTrue || 'True' },\r\n { value: '0', display: column.option?.displayOnFalse || 'False' }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n <ng-template sdSelectDisplayDef let-item=\"item\">\r\n <sd-badge *ngIf=\"item.value === '1'\" color=\"success\" [title]=\"column.option?.displayOnTrue || 'True'\"> </sd-badge>\r\n <sd-badge *ngIf=\"item.value === '0'\" color=\"error\" [title]=\"column.option?.displayOnFalse || 'False'\"> </sd-badge>\r\n </ng-template>\r\n </sd-select>\r\n } @else if (column.type === 'values') {\r\n <sd-select\r\n *ngIf=\"column.option?.selection !== 'AUTOCOMPLETE'\"\r\n [autoId]=\"autoId + column.field\"\r\n [style.flex]=\"1\"\r\n [style.width]=\"'100%'\"\r\n size=\"sm\"\r\n [items]=\"items\"\r\n [valueField]=\"column.option.valueField\"\r\n [displayField]=\"column.option.displayField\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n [multiple]=\"column.option.selection === 'MULTIPLE' || column.option.selection === 'MULTIPLEAUTOCOMPLETE'\"\r\n hideInlineError>\r\n </sd-select>\r\n <sd-autocomplete\r\n *ngIf=\"column.option?.selection === 'AUTOCOMPLETE'\"\r\n [autoId]=\"autoId + column.field\"\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n [items]=\"items\"\r\n [valueField]=\"column.option.valueField\"\r\n [displayField]=\"column.option.displayField\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-autocomplete>\r\n } @else if (column.type === 'lazy-values') {\r\n <sd-select\r\n *ngIf=\"column.option?.selection === 'MULTIPLE'\"\r\n [autoId]=\"autoId + column.field\"\r\n [style.flex]=\"1\"\r\n [style.width]=\"'100%'\"\r\n size=\"sm\"\r\n [items]=\"items\"\r\n [valueField]=\"column.option.valueField\"\r\n [displayField]=\"column.option.displayField\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n multiple\r\n hideInlineError>\r\n </sd-select>\r\n <sd-autocomplete\r\n *ngIf=\"!column.option?.selection\"\r\n [autoId]=\"autoId + column.field\"\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n [items]=\"items\"\r\n [valueField]=\"column.option.valueField\"\r\n [displayField]=\"column.option.displayField\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-autocomplete>\r\n } @else if (column.type === 'date' || column.type === 'datetime' || column.type === 'time') {\r\n @if (!column.filter?.type || column.filter?.type === 'daterange') {\r\n <sd-date-range\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-date-range>\r\n } @else if (column.filter?.type === 'date') {\r\n <sd-date\r\n [autoId]=\"autoId + column.field\"\r\n style=\"flex: 1\"\r\n type=\"date\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-date>\r\n } @else if (column.filter?.type === 'split-date') {\r\n <div class=\"d-flex align-items-center\">\r\n <sd-date\r\n [autoId]=\"autoId + '-from-' + column.field\"\r\n style=\"flex: 1\"\r\n type=\"date\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field].from\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-date>\r\n <div class=\"mx-4\">-</div>\r\n <sd-date\r\n [autoId]=\"autoId + '-to-' + column.field\"\r\n style=\"flex: 1\"\r\n type=\"date\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field].to\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-date>\r\n </div>\r\n }\r\n }\r\n } @else {\r\n <sd-input [autoId]=\"autoId + column.field\" type=\"text\" size=\"sm\" disabled></sd-input>\r\n }\r\n</div>\r\n","import { Pipe, PipeTransform } from '@angular/core';\n\n// Đối với filter loại values, items có thể là 1 mảng, có thể là 1 hàm, do đó cần xử lý nếu là hàm có thể xử lý gọi API\n@Pipe({\n name: 'filterValues',\n})\nexport class FilterValuesPipe implements PipeTransform {\n constructor() {}\n async transform(items: any[] | (() => Promise<any[]>) | undefined | null): Promise<any[]> {\n if (Array.isArray(items)) {\n return items;\n }\n if (typeof items === 'function') {\n const results = await items();\n if (Array.isArray(results)) {\n return results;\n }\n }\n return [];\n }\n}\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdCheckbox, SdDate, SdDateRange, SdDatetime, SdInput, SdInputNumber, SdSelect } from '@sd-angular/core/forms';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { FilterValuesPipe } from '../../pipes';\r\nimport { SdTableExternalFilter, SdTableOptionFilter, TableFilterRegister } from '../../services/table-filter/table-filter.model';\r\n\r\n@Component({\r\n selector: 'external-filter',\r\n templateUrl: './external-filter.component.html',\r\n styleUrls: ['./external-filter.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatMenuModule,\r\n MatCheckboxModule,\r\n SdSection,\r\n SdInput,\r\n SdInputNumber,\r\n SdSelect,\r\n SdDate,\r\n SdDatetime,\r\n SdDateRange,\r\n SdButton,\r\n FilterValuesPipe,\r\n SdCheckbox,\r\n ],\r\n})\r\n// eslint-disable-next-line @angular-eslint/component-class-suffix\r\nexport class ExternalFilterComponent implements AfterViewInit, OnDestroy {\r\n autoId?: string;\r\n @Input('autoId') set _autoId(val: string | undefined | null) {\r\n if (val) {\r\n this.autoId = `${val}-external-`;\r\n }\r\n }\r\n\r\n filter?: Readonly<SdTableOptionFilter>;\r\n col?: 2 | 3 = 2; // 6 filter per row\r\n externalFilterPerRow: SdTableOptionFilter['externalFilterPerRow'] = 6;\r\n @Input('filter') set _filter(filter: SdTableOptionFilter) {\r\n this.filter = filter;\r\n if (filter?.externalFilterPerRow === 4) {\r\n this.col = 3; // 4 filter per row\r\n }\r\n }\r\n externalFilters: SdTableExternalFilter[] = [];\r\n @Input('externalFilters') set _externalFilters(externalFilters: SdTableExternalFilter[]) {\r\n this.externalFilters = externalFilters || [];\r\n }\r\n filterRegister?: TableFilterRegister;\r\n @Input('filterRegister') set _filterRegister(value: TableFilterRegister) {\r\n this.filterRegister = value;\r\n this.filterRegisterChange.next(this.filterRegister);\r\n }\r\n form = new FormGroup({});\r\n\r\n filterRegisterChange = new BehaviorSubject<TableFilterRegister | null>(null);\r\n\r\n externalFilter?: Record<string, any> = {};\r\n inlineExternal: Record<string, boolean> = {};\r\n isMobileOrTablet: boolean;\r\n filtered? = false;\r\n #subscription = new Subscription();\r\n\r\n constructor(private ref: ChangeDetectorRef) {\r\n this.isMobileOrTablet = SdUtilities.isMobile();\r\n this.ref.markForCheck();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(\r\n this.filterRegisterChange.pipe(startWith(this.filterRegister)).subscribe(() => {\r\n if (this.filterRegister) {\r\n this.#subscription.add(\r\n this.filterRegister.configuration.observer.subscribe(configuration => {\r\n const { inlineExternal } = configuration;\r\n this.inlineExternal = inlineExternal || {};\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.filterRegister.value.observer.subscribe(value => {\r\n const { externalFilter } = value;\r\n this.externalFilter = externalFilter;\r\n this.filtered = this.#filtered();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n })\r\n );\r\n\r\n // Khi values của form thay đổi thì cập nhật lại filtered\r\n this.#subscription.add(\r\n this.form.valueChanges.subscribe(() => {\r\n this.filtered = this.#filtered();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n // Đối với input, khi nhấn enter sẽ submit luôn dù là manual filter hay không\r\n // Nhưng vẫn kiểm tra form valid mới submit\r\n onKeyupEnter = () => {\r\n this.onSubmit();\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n onFilter = () => {\r\n // Nếu không phải là manual filter thì không cập nhật lại giá trị filter mà chỉ đợi khi submit\r\n if (!this.filter?.manualFilter) {\r\n this.onSubmit();\r\n }\r\n };\r\n\r\n onSubmit = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n this.filterRegister?.value.set({\r\n externalFilter: this.externalFilter,\r\n });\r\n };\r\n\r\n #filtered = (): boolean => {\r\n if (\r\n Object.values({ ...this.externalFilter }).some(val => {\r\n // Nếu là mảng và mảng có phần tử thì xem như là có filter\r\n if (Array.isArray(val)) {\r\n return !!val.length;\r\n }\r\n // Nếu là object (date) và có from/to thì xem như là có filter\r\n if (val && typeof val === 'object') {\r\n if ('from' in val && !!val.from) {\r\n return true;\r\n }\r\n if ('to' in val && !!val.to) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return val !== undefined && val !== null && val !== '';\r\n })\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n updateFilter = () => {\r\n this.filterRegister?.value.set({\r\n externalFilter: this.externalFilter,\r\n notReload: true,\r\n });\r\n };\r\n\r\n clearFilter = (event?: Event) => {\r\n event?.stopPropagation();\r\n this.filterRegister?.value.remove();\r\n this.filter?.onClearFilter?.();\r\n };\r\n\r\n onCheckboxChange = (event: Event, externalFilter: SdTableExternalFilter) => {\r\n event?.stopPropagation();\r\n this.inlineExternal[externalFilter.field] = !this.inlineExternal[externalFilter.field];\r\n this.filterRegister?.configuration.set({\r\n inlineExternal: { ...this.inlineExternal },\r\n });\r\n };\r\n}\r\n","@if (!filter?.disabled) {\r\n @if (!isMobileOrTablet && externalFilters.length) {\r\n <sd-section [hideHeader]=\"filter?.hideExternalFilterToolbar\" icon=\"filter_alt\" iconColor=\"secondary\" title=\"Bộ lọc\" collapsable>\r\n <div class=\"d-flex mr-4\" sdHeaderRight>\r\n <sd-button\r\n [autoId]=\"autoId + 'clearFilter'\"\r\n [disabled]=\"!filtered\"\r\n type=\"link\"\r\n prefixIcon=\"cleaning_services\"\r\n tooltip=\"Xóa lựa chọn\"\r\n (click)=\"$event.stopPropagation(); clearFilter($event)\"></sd-button>\r\n <sd-button\r\n [autoId]=\"autoId + 'setting'\"\r\n type=\"link\"\r\n prefixIcon=\"settings\"\r\n tooltip=\"Tùy chỉnh\"\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"$event.stopPropagation()\"></sd-button>\r\n <mat-menu #menu=\"matMenu\" class=\"sd-custom-panel-filter-configuration\">\r\n @for (externalFilter of externalFilters; track externalFilter.field) {\r\n <button mat-menu-item (click)=\"onCheckboxChange($event, externalFilter)\" [disabled]=\"externalFilter.required\">\r\n <sd-checkbox\r\n [label]=\"externalFilter.title\"\r\n [model]=\"inlineExternal[externalFilter.field]\"\r\n [disabled]=\"externalFilter.required\" />\r\n </button>\r\n }\r\n </mat-menu>\r\n </div>\r\n <div class=\"row mx-0\" style=\"row-gap: 16px\">\r\n @for (item of externalFilters; track item.field) {\r\n @if (inlineExternal[item.field]) {\r\n <div class=\"col-md-3 col-sm-6 px-8\" [class.col-lg-2]=\"col === 2\" [class.col-lg-3]=\"col === 3\">\r\n @if (item.type === 'string') {\r\n <sd-input\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n type=\"text\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (keyupEnter)=\"onKeyupEnter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-input>\r\n } @else if (item.type === 'number') {\r\n <sd-input-number\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (keyupEnter)=\"onKeyupEnter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-input-number>\r\n } @else if (item.type === 'boolean') {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"[\r\n { value: true, display: item.option?.displayOnTrue || 'True' },\r\n { value: false, display: item.option?.displayOnFalse || 'False' }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n } @else if (item.type === 'date') {\r\n <sd-date\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n [min]=\"item.minDate\"\r\n [max]=\"item.maxDate\"\r\n hideInlineError>\r\n </sd-date>\r\n } @else if (item.type === 'datetime') {\r\n <sd-datetime\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n [min]=\"item.minDate\"\r\n [max]=\"item.maxDate\"\r\n hideInlineError>\r\n </sd-datetime>\r\n } @else if (item.type === 'daterange') {\r\n <sd-date-range\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n [min]=\"item.minDate\"\r\n [max]=\"item.maxDate\"\r\n appearance=\"outline\"\r\n hideInlineError>\r\n </sd-date-range>\r\n } @else if (item.type === 'values') {\r\n @if (item.option.selection === 'MULTIPLE') {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"item.option.items | filterValues | async\"\r\n [valueField]=\"item.option.valueField\"\r\n [displayField]=\"item.option.displayField\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n multiple\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n } @else if (item.option.selection === 'AUTOCOMPLETE') {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"item.option.items | filterValues | async\"\r\n [valueField]=\"item.option.valueField\"\r\n [displayField]=\"item.option.displayField\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n } @else if (item.option.selection === 'MULTIPLEAUTOCOMPLETE') {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"item.option.items | filterValues | async\"\r\n [valueField]=\"item.option.valueField\"\r\n [displayField]=\"item.option.displayField\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n multiple\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n } @else {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"item.option.items | filterValues | async\"\r\n [valueField]=\"item.option.valueField\"\r\n [displayField]=\"item.option.displayField\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n }\r\n } @else if (item.type === 'lazy-values') {\r\n @if (item.option.selection === 'MULTIPLE') {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"item.option.items\"\r\n [valueField]=\"item.option.valueField\"\r\n [displayField]=\"item.option.displayField\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n multiple\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n } @else {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"item.option.items\"\r\n [valueField]=\"item.option.valueField\"\r\n [displayField]=\"item.option.displayField\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n }\r\n } @else if (item.type === 'custom' && item.filterDef) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n item.filterDef;\r\n context: { form: form, externalFilter: externalFilter, autoId: autoId + item.field }\r\n \"></ng-container>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n @if (filter?.manualFilter) {\r\n <div class=\"d-flex justify-content-end mt-16 px-8\">\r\n <sd-button\r\n [autoId]=\"autoId + 'onSubmit'\"\r\n [disabled]=\"form.invalid\"\r\n type=\"fill\"\r\n color=\"primary\"\r\n title=\"Tìm kiếm\"\r\n prefixIcon=\"filter_alt\"\r\n (click)=\"onSubmit()\">\r\n </sd-button>\r\n </div>\r\n }\r\n </sd-section>\r\n }\r\n <!-- <sd-popup-filter [filterRegister]=\"filterRegister!\" [columns]=\"columns\" [externalFilters]=\"externalFilters\">\r\n </sd-popup-filter> -->\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdUtilities } from '@sd-angular/core/utilities';\nimport { SdTableAction, SdTableActionNormal } from '../../models/table-option-selector.model';\nimport { SdTableItem } from '../../models/table-item.model';\nimport { SdButton } from '@sd-angular/core/components/button';\n@Pipe({\n name: 'actionFilter',\n})\nexport class ActionFilterPipe implements PipeTransform {\n #convert = (action: SdTableAction): Action => {\n if ('children' in action) {\n return {\n variant: 'children',\n title: action.title,\n icon: action.icon,\n fontSet: action.fontSet,\n tooltip: action.tooltip,\n color: action.color,\n type: action.type,\n children: action.children.map(e => ({\n variant: 'normal',\n title: e.title,\n icon: e.icon,\n color: action.color,\n type: action.type,\n fontSet: e.fontSet,\n tooltip: e.tooltip,\n click: e.click,\n })),\n };\n }\n return {\n variant: 'normal',\n title: action.title,\n icon: action.icon,\n color: action.color,\n type: action.type,\n fontSet: action.fontSet,\n tooltip: action.tooltip,\n click: action.click,\n };\n };\n transform = (selectedItems: SdTableItem[] | undefined, actions: SdTableAction[] | undefined): Action[] => {\n const results: SdTableAction[] = [];\n if (!actions?.length || !selectedItems?.length) {\n return [];\n }\n for (const action of actions || []) {\n if ('children' in action) {\n const children: SdTableActionNormal[] = [];\n for (const childAction of action.children) {\n const key = SdUtilities.hash(childAction);\n if (selectedItems.every(e => e?.meta?.selector?.actions?.includes(key))) {\n children.push(childAction);\n }\n }\n if (children.length > 0) {\n results.push({ ...action, children });\n }\n } else {\n const key = SdUtilities.hash(action);\n if (selectedItems.every(e => e?.meta?.selector?.actions?.includes(key))) {\n results.push(action);\n }\n }\n }\n return results.map(result => this.#convert(result));\n };\n}\n\nexport type Action<T = any> = ActionNormal<T> | ActionChildren<T>;\n\ninterface ActionNormal<T = any> {\n variant: 'normal';\n icon?: string;\n fontSet?: SdButton['fontSet'];\n tooltip?: SdButton['tooltip'];\n title?: SdButton['title'];\n color?: SdButton['color'];\n type?: SdButton['type'];\n click: (selectedItems?: T[]) => void;\n}\n\ninterface ActionChildren<T = any> {\n variant: 'children'\n icon?: string;\n fontSet?: SdButton['fontSet'];\n tooltip?: SdButton['tooltip'];\n title?: SdButton['title'];\n color?: SdButton['color'];\n type?: SdButton['type'];\n children: ActionNormal<T>[];\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { SdButton } from '@sd-angular/core/components/button';\nimport { SdQuickAction } from '@sd-angular/core/components/quick-action';\nimport { SdTableItem } from '../../models/table-item.model';\nimport { SdTableOption } from '../../models/table-option.model';\nimport { Action, ActionFilterPipe } from './action-filter.pipe';\n\n@Component({\n selector: 'selector-action',\n templateUrl: './selector-action.component.html',\n styleUrls: ['./selector-action.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, MatIconModule, MatMenuModule, SdButton, SdQuickAction, ActionFilterPipe],\n})\nexport class SelectorActionComponent {\n @Input() tableOption?: SdTableOption;\n @Input() selectedTableItems?: SdTableItem[];\n @Output() clear = new EventEmitter();\n constructor() {}\n onClear = () => {\n this.clear.emit();\n };\n\n onClickAction = (action: Action) => {\n if (action?.variant === 'normal' && action.click) {\n action.click(this.selectedTableItems?.map(e => e.data));\n }\n };\n}\n","@let actions = selectedTableItems | actionFilter: tableOption?.selector?.actions;\n<sd-quick-action [isOpened]=\"!!actions?.length\">\n <div class=\"d-flex align-items-center\" sdMessage>\n <div class=\"c-bg-length\">\n <span class=\"c-length\">{{ selectedTableItems?.length }}</span>\n </div>\n <div class=\"c-message\">\n {{ tableOption?.selector?.message || 'dữ liệu được chọn' }}\n </div>\n </div>\n <div class=\"d-flex align-items-center mr-8\" sdAction>\n <ng-container *ngFor=\"let action of actions\">\n @if (action.variant === 'normal') {\n <sd-button\n class=\"ml-4\"\n [tooltip]=\"action.tooltip\"\n [prefixIcon]=\"action.icon\"\n [color]=\"action.color\"\n [type]=\"action.type || 'light'\"\n [fontSet]=\"action.fontSet\"\n [title]=\"action.title\"\n (click)=\"onClickAction(action)\"></sd-button>\n } @else if (action.variant === 'children') {\n <sd-button\n class=\"ml-4\"\n [tooltip]=\"action.tooltip\"\n [prefixIcon]=\"action.icon || 'more_vert'\"\n [color]=\"action.color || 'secondary'\"\n [type]=\"action.type || 'light'\"\n [fontSet]=\"action.fontSet\"\n [title]=\"action.title\"\n [matMenuTriggerFor]=\"menu\">\n </sd-button>\n <mat-menu #menu=\"matMenu\">\n <span>\n <button\n *ngFor=\"let child of action.children\"\n mat-menu-item\n (click)=\"onClickAction(child)\">\n @if(child.icon) {\n <mat-icon [fontSet]=\"child.fontSet || 'material-icons'\" class=\"c-icon\">{{ child.icon }} </mat-icon>\n }\n <span> {{ child.title }}</span>\n </button>\n </span>\n </mat-menu>\n }\n </ng-container>\n <sd-button class=\"ml-4\" prefixIcon=\"close\" color=\"secondary\" type=\"outline\" (click)=\"onClear()\" width=\"35px\"></sd-button>\n </div>\n</sd-quick-action>\n","import { InjectionToken } from '@angular/core';\r\nimport { SdTableOptionPaginate } from '../models/table-option-paginate.model';\r\nimport { SdTableOptionFilter } from '../services/table-filter/table-filter.model';\r\nimport { SdOperator } from '@sd-angular/core/utilities';\r\nimport { SdTableColumn } from '../models';\r\n\r\nexport interface ISdTableConfiguration {\r\n paginate?: {\r\n /** Số dòng mỗi trang. */\r\n pageSize?: SdTableOptionPaginate['pageSize'];\r\n\r\n /** Danh sách các tuỳ chọn số dòng/trang mà người dùng có thể chọn. */\r\n pages?: SdTableOptionPaginate['pages'];\r\n\r\n showFirstLastButtons?: SdTableOptionPaginate['showFirstLastButtons'];\r\n };\r\n filter?: {\r\n /** Ẩn bộ lọc dưới cột, nếu không cấu hình thì giá trị mặc định là false */\r\n hideInlineFilter?: SdTableOptionFilter['hideInlineFilter'];\r\n\r\n /** Số lượng external filter mỗi dòng, mặc định là 6 */\r\n externalFilterPerRow?: SdTableOptionFilter['externalFilterPerRow'];\r\n\r\n /** Kích hoạt chế độ lọc thủ công, hiển thị nút áp dụng, mặc định là false */\r\n manualFilter?: SdTableOptionFilter['manualFilter'];\r\n\r\n /** Ẩn toolbar (xóa bộ lọc, thiết lập) của external filter, khi có ít external filter user không cần chức năng này, mặc định là false */\r\n hideExternalFilterToolbar?: SdTableOptionFilter['hideExternalFilterToolbar'];\r\n\r\n operator?: {\r\n list?: Partial<Record<SdTableColumn['type'], SdOperator[]>>;\r\n default?: Partial<Record<SdTableColumn['type'], SdOperator>>;\r\n };\r\n };\r\n images?: {\r\n filterRequired?: string; // Link ảnh cho table ở trạng thái cần nhập filter\r\n dataEmpty?: string; // Link ảnh cho table ở trạng thái không có dữ liệu\r\n filterEmpty?: string; // Link ảnh cho table ở trạng thái filter không có dữ liệu\r\n };\r\n}\r\n\r\nexport const DEFAULT_TABLE_CONFIG: ISdTableConfiguration = {\r\n paginate: {\r\n pageSize: 20,\r\n pages: [20, 50, 100, 200],\r\n },\r\n};\r\n\r\nexport const SD_TABLE_CONFIGURATION = new InjectionToken<ISdTableConfiguration>('sd-table.configuration');\r\n","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport { SdStorage, SdStorageService } from '@sd-angular/core/services';\r\nimport { ConfiguredColumn, ConfiguredTable, ConfiguredTableResult } from '../models/table-option-config.model';\r\nimport { SdTableOption } from '../models/table-option.model';\r\nimport { ISdTableConfiguration, SD_TABLE_CONFIGURATION } from '../configurations';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\n\r\n@Injectable()\r\nexport class ConfigService {\r\n #COLUMNS = {\r\n SUBINFORMATION: 'sdSubInformationAction',\r\n COMMAND: 'sdCommand',\r\n SELECTION: 'sdSelection',\r\n GROUP: 'sdGroup',\r\n };\r\n #prefix = 'TABLE_CONFIG';\r\n constructor(\r\n private storageService: SdStorageService,\r\n @Inject(SD_TABLE_CONFIGURATION) @Optional() public tableConfiguration: ISdTableConfiguration\r\n ) {}\r\n\r\n #loadConfiguredTable = (option: SdTableOption): SdStorage<ConfiguredTable> => {\r\n // Nếu không có key thì không lấy được setting\r\n if (!option?.key) {\r\n return this.storageService.create<ConfiguredTable>(SdUtilities.hash(option), {\r\n type: 'session', // Nếu không có key thì lưu theo session\r\n default: this.#default(option),\r\n });\r\n }\r\n // Key của setting là tổ hợp từ key truyền vào và prefix để tránh chung key với các tính năng khác cũng dùng key trong core table\r\n return this.storageService.create<ConfiguredTable>(\r\n { prefix: this.#prefix, key: option?.key },\r\n {\r\n default: this.#default(option),\r\n }\r\n );\r\n };\r\n\r\n loadConfiguredTable = (option: SdTableOption) => {\r\n // Nếu không có key thì trả về thông tin mặc định\r\n if (!option?.key) {\r\n return this.#default(option);\r\n }\r\n const storage = this.#loadConfiguredTable(option)!;\r\n return storage.get();\r\n };\r\n\r\n loadConfigurationResult = (option: SdTableOption, configuration: ConfiguredTable) => {\r\n const result: ConfiguredTableResult = {\r\n column: {},\r\n fixedColumn: {},\r\n firstColumns: [],\r\n secondColumns: [],\r\n firstHeaders: [],\r\n secondHeaders: [],\r\n displayedColumns: [],\r\n displayedFooters: [],\r\n multipleHeader: false,\r\n };\r\n const { selector, commands, group } = option || {};\r\n const columns = option?.columns?.filter(e => !e.hidden) || [];\r\n if (selector?.visible) {\r\n result.firstHeaders.push(this.#COLUMNS.SELECTION);\r\n result.displayedColumns.push(this.#COLUMNS.SELECTION);\r\n }\r\n if (commands?.length) {\r\n result.firstHeaders.push(this.#COLUMNS.COMMAND);\r\n result.displayedColumns.push(this.#COLUMNS.COMMAND);\r\n }\r\n if (group?.fields?.length) {\r\n result.firstHeaders.push(this.#COLUMNS.GROUP);\r\n result.displayedColumns.push(this.#COLUMNS.GROUP);\r\n }\r\n configuration?.columns\r\n ?.filter(col => !col.invisible)\r\n .forEach(col => {\r\n // Kiểm tra column trong config có còn được khai báo trong option\r\n // Nếu không thì ẩn column đó đi\r\n const column = columns.find(e => e.field === col.origin.field);\r\n if (column) {\r\n result.column[col.origin.field] = {\r\n title: col.title || col.origin.title,\r\n width: col.width || col.origin.width,\r\n };\r\n if (col.fixed) {\r\n result.fixedColumn[col.origin.field] = {\r\n title: col.title || col.origin.title,\r\n width: col.width || col.origin.width,\r\n };\r\n }\r\n result.firstColumns.push({\r\n ...column,\r\n title: col.title || col.origin.title,\r\n width: col.width || col.origin.width,\r\n });\r\n result.firstHeaders.push(col.origin.field);\r\n result.displayedColumns.push(col.origin.field);\r\n if (column.type === 'children') {\r\n column.children?.forEach(childColumn => {\r\n result.secondColumns.push(childColumn);\r\n result.secondHeaders.push(childColumn.field);\r\n result.displayedColumns.push(childColumn.field);\r\n });\r\n }\r\n }\r\n });\r\n // Nếu có thêm các column mới, chèn các column đó vào cuối\r\n columns\r\n ?.filter(column => !configuration?.columns?.some(e => e.origin.field === column.field))\r\n .forEach(column => {\r\n result.firstColumns.push({\r\n ...column,\r\n title: column.title,\r\n width: column.width,\r\n });\r\n result.firstHeaders.push(column.field);\r\n result.displayedColumns.push(column.field);\r\n if (column.type === 'children') {\r\n column.children?.forEach(childColumn => {\r\n result.secondColumns.push(childColumn);\r\n result.secondHeaders.push(childColumn.field);\r\n result.displayedColumns.push(childColumn.field);\r\n });\r\n }\r\n });\r\n if (option.expand) {\r\n result.firstHeaders.push(this.#COLUMNS.SUBINFORMATION);\r\n result.displayedColumns.push(this.#COLUMNS.SUBINFORMATION);\r\n }\r\n result.multipleHeader = result.secondHeaders.length > 0;\r\n // Sub infomation không thể có footer\r\n result.displayedFooters = result.displayedColumns.filter(val => val !== this.#COLUMNS.SUBINFORMATION);\r\n return result;\r\n };\r\n\r\n init = (tableOption: SdTableOption) => {\r\n return this.#loadConfiguredTable(tableOption);\r\n };\r\n\r\n #default = (tableOption: SdTableOption): ConfiguredTable => {\r\n const columns: ConfiguredColumn[] =\r\n tableOption?.columns\r\n ?.filter(e => !e.hidden)\r\n .map(e => ({\r\n origin: {\r\n field: e.field,\r\n title: e.title,\r\n width: e.width,\r\n invisible: e.invisible,\r\n },\r\n invisible: e.invisible,\r\n fixed: e.fixed,\r\n })) || [];\r\n return {\r\n columns,\r\n };\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, EventEmitter, HostListener, Input, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { SdButton } from '@sd-angular/core/components/button';\nimport { SdModal } from '@sd-angular/core/components/modal';\nimport { SdInput, SdSwitch } from '@sd-angular/core/forms';\nimport { SdStorage } from '@sd-angular/core/services';\nimport { SdConfirmService } from '@sd-angular/core/services/confirm';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport { ConfiguredTable, ConfiguredTableResult } from '../../models/table-option-config.model';\nimport { SdTableOption } from '../../models/table-option.model';\nimport { ConfigService } from '../../services/config.service';\n\n@Component({\n selector: 'config',\n templateUrl: './config.component.html',\n styleUrls: ['./config.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatTableModule,\n MatSlideToggleModule,\n CdkTableModule,\n DragDropModule,\n SdButton,\n SdInput,\n SdModal,\n SdSwitch\n],\n providers: [ConfigService],\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class ConfigComponent {\n @Input() tableOption?: SdTableOption;\n @ViewChild(SdModal) modal?: SdModal;\n @ViewChild('table') table!: MatTable<SdTableColumn>;\n readonly changes = new EventEmitter<ConfiguredTableResult>();\n #setting?: SdStorage<ConfiguredTable>;\n configuration?: ConfiguredTable;\n dragDisabled = true;\n constructor(\n private ref: ChangeDetectorRef,\n private confirmService: SdConfirmService,\n private configService: ConfigService\n ) {}\n\n @HostListener('window:mouseup', ['$event'])\n mouseUp() {\n this.dragDisabled = true;\n }\n open = async () => {\n this.#setting = this.configService.init(this.tableOption!)!;\n this.configuration = this.#setting?.get();\n this.modal?.open();\n };\n\n close = () => {\n this.modal?.close();\n }\n\n onSave = () => {\n this.#setting?.set(this.configuration!);\n this.modal?.close();\n this.ref.detectChanges();\n };\n\n onReset = async () => {\n this.confirmService.confirm('Xác nhận đưa tất cả thiết lập về mặc định').then(() => {\n this.#setting?.remove();\n this.modal?.close();\n this.ref.detectChanges();\n });\n };\n\n dropTable(event: any) {\n moveItemInArray(this.configuration!.columns!, event.previousIndex, event.currentIndex);\n this.table.renderRows();\n }\n\n handleMouseDown() {\n this.dragDisabled = false;\n }\n\n handleMouseUp() {\n this.dragDisabled = true;\n }\n}\n","<sd-modal width=\"sm\" [title]=\"'Thiết lập bảng'\" #modal>\r\n @if (configuration) {\r\n <div class=\"c-container\">\r\n <div class=\"c-table\" style=\"max-height: 70vh\">\r\n <table\r\n #table\r\n mat-table\r\n [dataSource]=\"configuration.columns!\"\r\n cdkDropList\r\n [cdkDropListData]=\"configuration.columns\"\r\n (cdkDropListDropped)=\"dropTable($event)\">\r\n >\r\n <!-- <ng-container matColumnDef=\"stt\">\r\n <th mat-header-cell class=\"c-th text-center px-4\" *matHeaderCellDef style=\"width: 50px\">#</th>\r\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item; let idx = index\"></td>\r\n </ng-container> -->\r\n <ng-container matColumnDef=\"invisible\">\r\n <th mat-header-cell class=\"c-th text-center px-4\" *matHeaderCellDef style=\"width: 96px\">\r\n {{ 'Hiển thị' }}\r\n </th>\r\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item\">\r\n <div class=\"d-flex\" style=\"gap: 8px\">\r\n <div class=\"c-handle\" (mousedown)=\"handleMouseDown()\" (mouseup)=\"handleMouseUp()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#5f6368\">\r\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\r\n <path\r\n d=\"M11 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm-2-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\" />\r\n </svg>\r\n </div>\r\n <sd-switch [model]=\"!item.invisible\" (modelChange)=\"item.invisible = !item.invisible\" />\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"title\">\r\n <th mat-header-cell class=\"c-th px-4\" *matHeaderCellDef>\r\n {{ 'Tiêu đề cột' }}\r\n </th>\r\n <td class=\"px-4\" mat-cell *matCellDef=\"let item\">\r\n <sd-input class=\"pb-5\" [placeholder]=\"item?.origin?.title\" [(model)]=\"item.title\" hideInlineError></sd-input>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"width\">\r\n <th mat-header-cell class=\"c-th px-4\" *matHeaderCellDef style=\"width: 80px\">\r\n {{ 'Rộng' }}\r\n </th>\r\n <td class=\"px-4\" mat-cell *matCellDef=\"let item\">\r\n <sd-input class=\"pb-5\" [placeholder]=\"item?.origin?.width\" [(model)]=\"item.width\" hideInlineError></sd-input>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"fixed\">\r\n <th mat-header-cell class=\"c-th text-center px-4\" *matHeaderCellDef style=\"width: 80px\">\r\n {{ 'Cố định' }}\r\n </th>\r\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item\">\r\n <sd-switch [(model)]=\"item.fixed\" />\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"['invisible', 'title', 'width', 'fixed']; sticky: true\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: ['invisible', 'title', 'width', 'fixed']\"\r\n cdkDrag\r\n [cdkDragData]=\"row\"\r\n cdkDragLockAxis=\"y\"\r\n [cdkDragDisabled]=\"dragDisabled\"></tr>\r\n </table>\r\n </div>\r\n </div>\r\n }\r\n <ng-container sdFooter>\r\n <sd-button class=\"mr-8\" (click)=\"close()\" title=\"Bỏ qua\" color=\"secondary\"> </sd-button>\r\n <sd-button class=\"mr-8\" (click)=\"onReset()\" title=\"Mặc định\" color=\"primary\"> </sd-button>\r\n <sd-button (click)=\"onSave()\" title=\"Áp dụng\" type=\"fill\" color=\"primary\"> </sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdBadge } from '@sd-angular/core/components/badge';\nimport { SdSafeHtmlPipe } from '@sd-angular/core/pipes';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport { SdTableItem } from '../../models/table-item.model';\n\n@Component({\n selector: 'sd-desktop-cell-view',\n templateUrl: './desktop-cell-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, MatTooltipModule, SdBadge, SdSafeHtmlPipe],\n})\nexport class SdDesktopCellView {\n autoId?: string;\n @Input('autoId') set _autoId(val: string | undefined | null) {\n if (val) {\n this.autoId = val;\n }\n }\n @Input({ required: true }) column!: SdTableColumn;\n item!: SdTableItem;\n itemKey!: string;\n @Input({ required: true, alias: 'item' }) set _item(item: SdTableItem) {\n this.item = item;\n this.itemKey = item.data?.id?.toString() || item.data?.code?.toString() || item.data?.value?.toString();\n }\n constructor() {}\n}\n","@let view = item.meta.display[column.field];\n@if (view) {\n @if (view.isHtml) {\n @if (view.click) {\n <div\n [attr.data-autoId]=\"autoId\"\n (click)=\"view.click()\"\n class=\"text-break cursor-pointer\"\n [matTooltip]=\"view.tooltip\"\n [style]=\"view.cellStyle\"\n [innerHTML]=\"view.data | sdSafeHtml\"\n aria-hidden=\"true\"></div>\n } @else {\n <div\n [attr.data-autoId]=\"autoId\"\n class=\"text-break\"\n [matTooltip]=\"view.tooltip\"\n [style]=\"view.cellStyle\"\n [innerHTML]=\"view.data | sdSafeHtml\"></div>\n }\n } @else {\n @if (view.badge) {\n @if (view.data) {\n <sd-badge\n [attr.data-autoId]=\"autoId\"\n [type]=\"view.badge.type\"\n [title]=\"view.data\"\n [color]=\"view.badge.color\"\n [icon]=\"view.badge.icon\"\n [tooltip]=\"view.tooltip\"\n (click)=\"!!view.click && view.click()\"></sd-badge>\n }\n } @else {\n @if (view.click) {\n <div class=\"text-break\" [style]=\"view.cellStyle\" [matTooltip]=\"view.tooltip\">\n <a [attr.data-autoId]=\"autoId\" href=\"javascript:;\" (click)=\"view.click()\">{{ view.data }}</a>\n </div>\n } @else {\n <div [attr.data-autoId]=\"autoId\" class=\"text-break\" [style]=\"view.cellStyle\" [matTooltip]=\"view.tooltip\">{{ view.data }}</div>\n }\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { SdTabelCellDefDirective } from '../../directives/sd-table-cell-def.directive';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableItem } from '../../models/table-item.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdDesktopCellView } from '../desktop-cell-view/desktop-cell-view.component';\r\n\r\n@Component({\r\n selector: 'sd-desktop-cell',\r\n templateUrl: './desktop-cell.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule, SdDesktopCellView],\r\n})\r\nexport class SdDesktopCell {\r\n autoId?: string;\r\n @Input('autoId') set _autoId(val: string | undefined | null) {\r\n if (val) {\r\n this.autoId = `${val}-view-`;\r\n }\r\n }\r\n @Input() value: any;\r\n @Input({ required: true }) column!: SdTableColumn;\r\n item!: SdTableItem;\r\n itemKey!: string;\r\n @Input({ required: true, alias: 'item' }) set _item(item: SdTableItem) {\r\n this.item = item;\r\n this.itemKey = item.data?.id?.toString() || item.data?.code?.toString() || item.data?.value?.toString();\r\n }\r\n @Input() cellDef: Record<string, SdTabelCellDefDirective> = {};\r\n constructor() {}\r\n}\r\n","@if (cellDef[column.field]) {\n <ng-container\n *ngTemplateOutlet=\"cellDef[column.field].templateRef; context: { item: item.data, column: column, autoId: autoId + '-' + column.field + '-' + itemKey }\">\n </ng-container>\n} @else if (column.cellDef) {\n <ng-container *ngTemplateOutlet=\"column.cellDef; context: { item: item.data, column: column, autoId: autoId + '-' + column.field + '-' + itemKey }\"> </ng-container>\n} @else {\n <sd-desktop-cell-view [column]=\"column\" [item]=\"item\" [autoId]=\"autoId + '-' + column.field + '-' + itemKey\"></sd-desktop-cell-view>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableCommand } from '../models/table-command.model';\nimport { SdTableItem } from '../models/table-item.model';\n@Pipe({\n name: 'commandDisable',\n})\nexport class SdCommandDisablePipe implements PipeTransform {\n transform(item: SdTableItem, command: SdTableCommand): boolean {\n if ('disabled' in command) {\n const { disabled } = command;\n if (typeof disabled === 'boolean') {\n return disabled;\n }\n return disabled!(item.data);\n }\n return false;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableCommand, SdTableCommandChildren, SdTableCommandNormal } from '../models/table-command.model';\nimport { SdTableItem } from '../models/table-item.model';\nimport { StringUtilities } from '@sd-angular/core/utilities';\n@Pipe({\n name: 'commandFilter',\n})\nexport class SdCommandFilterPipe implements PipeTransform {\n async transform(item: SdTableItem, commands: SdTableCommand[]): Promise<Command[]> {\n const results: Command[] = [];\n if (!commands) {\n return results;\n }\n for (const command of commands) {\n let flag = false;\n const { hidden } = command;\n if (hidden === undefined) {\n flag = true;\n } else if (typeof hidden === 'boolean') {\n if (!hidden) {\n flag = true;\n }\n } else {\n const isHidden = hidden(item.data);\n if (isHidden instanceof Promise) {\n if (!(await isHidden)) {\n flag = true;\n }\n } else {\n if (!isHidden) {\n flag = true;\n }\n }\n }\n if (flag) {\n const icon = this.#icon(item, command);\n const title = this.#title(item, command);\n if ('children' in command) {\n const children: CommandNormal[] = [];\n for (const childCommand of command.children) {\n const { hidden } = childCommand;\n const icon = this.#icon(item, childCommand);\n const title = this.#title(item, childCommand);\n if (hidden === undefined) {\n children.push({\n ...childCommand,\n type: 'normal',\n icon,\n title,\n key: this.#key(item, childCommand),\n });\n } else if (typeof hidden === 'boolean') {\n if (!hidden) {\n children.push({\n ...childCommand,\n type: 'normal',\n icon,\n title,\n key: this.#key(item, childCommand),\n });\n }\n } else {\n const isHidden = hidden(item.data);\n if (isHidden instanceof Promise) {\n if (!(await isHidden)) {\n children.push({\n ...childCommand,\n type: 'normal',\n icon,\n title,\n key: this.#key(item, childCommand),\n });\n }\n } else {\n if (!isHidden) {\n children.push({\n ...childCommand,\n type: 'normal',\n icon,\n title,\n key: this.#key(item, childCommand),\n });\n }\n }\n }\n }\n if (children.length > 0) {\n results.push({\n ...command,\n type: 'children',\n icon,\n title,\n key: this.#key(item, command),\n children,\n });\n }\n } else {\n results.push({\n ...command,\n type: 'normal',\n icon,\n title,\n key: this.#key(item, command)\n });\n }\n }\n }\n return results;\n }\n\n #icon = (item: SdTableItem, command: SdTableCommand) => {\n if (!command?.icon) {\n return 'more_vert';\n }\n if (typeof command.icon === 'string') {\n return command.icon;\n }\n return command.icon(item.data);\n };\n\n #title = (item: SdTableItem, command: SdTableCommand) => {\n if (!command?.title) {\n return '';\n }\n if (typeof command.title === 'string') {\n return command.title;\n }\n return command.title(item.data);\n };\n\n // Key dùng để gán cho autoId\n #key = (item: SdTableItem, command: SdTableCommand) => {\n const icon = this.#icon(item, command);\n const title = this.#title(item, command);\n return `${icon || 'noicon'}-${StringUtilities.changeAliasLowerCase(title) || 'notitle'}`;\n };\n}\n\ntype Command<T = any> = CommandNormal<T> | CommandChildren<T>;\n\ninterface CommandNormal<T = any> extends SdTableCommandNormal<T> {\n type: 'normal';\n key: string;\n title: string;\n icon: string;\n}\n\ninterface CommandChildren<T = any> extends SdTableCommandChildren<T> {\n type: 'children';\n key: string;\n title: string;\n icon: string;\n children: CommandNormal<T>[];\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableCommand } from '../models/table-command.model';\nimport { SdTableItem } from '../models/table-item.model';\n@Pipe({\n name: 'commandTitle',\n})\nexport class SdCommandTitlePipe implements PipeTransform {\n transform(command: SdTableCommand, item: SdTableItem): string {\n if (!command?.title) {\n return '';\n }\n if (typeof command.title === 'string') {\n return command.title;\n }\n return command.title(item.data);\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { SdTableCommand } from '../../models/table-command.model';\r\nimport { SdTableItem } from '../../models/table-item.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdCommandDisablePipe } from '../../pipes/command-disable.pipe';\r\nimport { SdCommandFilterPipe } from '../../pipes/command-filter.pipe';\r\nimport { SdCommandTitlePipe } from '../../pipes/command-title.pipe';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'sd-desktop-command',\r\n templateUrl: './desktop-command.component.html',\r\n styleUrls: ['./desktop-command.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatTooltipModule,\r\n MatMenuModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n SdCommandDisablePipe,\r\n SdCommandFilterPipe,\r\n SdCommandTitlePipe,\r\n ],\r\n})\r\nexport class SdDesktopCommand {\r\n autoId?: string;\r\n @Input('autoId') set _autoId(val: string | undefined | null) {\r\n if (val) {\r\n this.autoId = `${val}-command-`;\r\n }\r\n }\r\n item!: SdTableItem;\r\n itemKey!: string;\r\n @Input({ required: true, alias: 'item' }) set _item(item: SdTableItem) {\r\n this.item = item;\r\n this.itemKey = item.data?.id?.toString() || item.data?.code?.toString() || item.data?.value?.toString();\r\n }\r\n @Input({ required: true }) itemIndex!: number;\r\n commands: SdTableCommand[] = [];\r\n @Input('commands') set _commands(commands: SdTableCommand[] | undefined | null) {\r\n this.commands = commands || [];\r\n }\r\n}\r\n","@let filteredCommands = item | commandFilter: commands | async;\n@if (filteredCommands?.length) {\n @for (command of filteredCommands; track command.key) {\n @if (command.type === 'normal') {\n <button\n [attr.data-autoId]=\"autoId + command.key + '-' + (itemKey || itemIndex)\"\n (click)=\"command.click(item.data)\"\n [matTooltip]=\"command | commandTitle: item\"\n aria-hidden=\"true\"\n [disabled]=\"item | commandDisable: command\"\n mat-icon-button>\n <mat-icon [color]=\"command.color || 'secondary'\" [fontSet]=\"command.fontSet!\">{{ command.icon }}</mat-icon>\n </button>\n } @else {\n <button [attr.data-autoId]=\"autoId + command.key + '-' + (itemKey || itemIndex)\" [matMenuTriggerFor]=\"menu\" aria-hidden=\"true\" mat-icon-button>\n @if (command.icon) {\n <mat-icon class=\"c-icon\" [fontSet]=\"command.fontSet!\">{{ command.icon }} </mat-icon>\n } @else {\n <mat-icon class=\"c-icon\">more_vert</mat-icon>\n }\n </button>\n <mat-menu #menu=\"matMenu\">\n <span>\n @for (childCommand of command.children; track childCommand.key) {\n <button\n [attr.data-autoId]=\"autoId + childCommand.key + '-' + (itemKey || itemIndex)\"\n mat-menu-item\n (click)=\"childCommand.click(item.data)\"\n [disabled]=\"item | commandDisable: childCommand\">\n @if (!childCommand.htmlTemplate) {\n <div>\n <mat-icon [color]=\"childCommand.color || 'secondary'\" [fontSet]=\"command.fontSet!\">{{ childCommand.icon }} </mat-icon>\n <span> {{ childCommand.title }}</span>\n </div>\n } @else {\n <div [innerHTML]=\"childCommand.htmlTemplate(item.data)\"></div>\n }\n </button>\n }\n </span>\n </mat-menu>\n }\n }\n}\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelectionList } from '@angular/material/list';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdInput } from '@sd-angular/core/forms';\r\nimport {\r\n SdConfirmService,\r\n SdExcelColumn,\r\n SdExcelService,\r\n SdLoadingService,\r\n SdNotifyService,\r\n} from '@sd-angular/core/services';\r\n// import hash from 'object-hash';\r\nimport { SdTableColumn, SdTableOption } from '../../models';\r\nimport { ConfiguredTableResult } from '../../models/table-option-config.model';\r\nimport { SdTableOptionExportDefault } from '../../models/table-option-export.model';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\nimport { SdExcelSheet } from '@sd-angular/core/services/excel';\r\n\r\n@Component({\r\n selector: 'sd-popup-export',\r\n templateUrl: './popup-export.component.html',\r\n styleUrls: ['./popup-export.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule, MatTableModule, MatIconModule, MatChipsModule, SdButton, SdInput, SdModal],\r\n})\r\n// eslint-disable-next-line @angular-eslint/component-class-suffix\r\nexport class SdPopupExport {\r\n tableOption!: SdTableOption;\r\n columns: SdExcelColumn[] = [];\r\n templateName?: string | null;\r\n enableCreating = false;\r\n @ViewChild('modal') modal?: SdModal;\r\n @ViewChild('listGroups') listGroups?: MatSelectionList;\r\n\r\n selected: Record<string, boolean> = {};\r\n files: any[] = [];\r\n\r\n @Output() export = new EventEmitter<{\r\n file: any | null;\r\n columns: SdExcelColumn[];\r\n isCSV?: boolean;\r\n }>();\r\n form = new FormGroup({});\r\n\r\n exportOption?: SdTableOptionExportDefault;\r\n @Input('tableOption') set _tableOption(option: SdTableOption) {\r\n this.tableOption = option;\r\n if (option.export?.type === 'default') {\r\n this.exportOption = option.export;\r\n }\r\n this.columns = this.#getExportableColumns();\r\n }\r\n @Input() configuration?: ConfiguredTableResult;\r\n private get key(): string | null {\r\n const prefix = '93889e78-f971-4a1d-8c73-fe2321af9233';\r\n if (!this.exportOption?.key) {\r\n return null;\r\n }\r\n return SdUtilities.hash({\r\n prefix,\r\n key: this.exportOption?.key,\r\n });\r\n }\r\n\r\n private get tableColumns() {\r\n const columns: SdExcelColumn[] = [];\r\n this.tableOption.columns\r\n .filter(e => !e.export?.disabled)\r\n .forEach(column => {\r\n if (column.type === 'children') {\r\n column.children\r\n ?.filter(e => !e.export?.disabled)\r\n .forEach(childColumn => {\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n columns.push(column);\r\n });\r\n return columns.map(e => ({\r\n field: e.field,\r\n title: e.title,\r\n description: e.description,\r\n width: e.width,\r\n }));\r\n }\r\n private get additionalColumns() {\r\n return (this.exportOption?.columns?.filter(e => !e.export?.disabled) || []).map(e => ({\r\n field: e.field,\r\n title: e.title,\r\n description: e.description,\r\n width: e.width,\r\n }));\r\n }\r\n\r\n #getExportableColumns = (): SdExcelColumn[] => {\r\n return [...this.tableColumns, ...this.additionalColumns];\r\n };\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private loadingService: SdLoadingService,\r\n private excelService: SdExcelService,\r\n private notifyService: SdNotifyService,\r\n private confirmService: SdConfirmService\r\n ) {}\r\n\r\n open = async () => {\r\n if (!this.key) {\r\n this.exportDefault();\r\n return;\r\n }\r\n this.loadFiles();\r\n this.selected = {};\r\n this.modal?.open();\r\n this.ref.detectChanges();\r\n };\r\n\r\n #getExportColumns = (): SdExcelColumn[] => {\r\n if (this.configuration) {\r\n const columns = [...this.tableColumns];\r\n const { firstColumns, secondColumns } = this.configuration;\r\n const displayColumns: SdTableColumn[] = [...firstColumns, ...secondColumns].reduce<SdTableColumn[]>((first, next) => {\r\n const column = this.tableOption.columns.find(e => e.field === next.field);\r\n if (!column) {\r\n return first;\r\n }\r\n if (column.type !== 'children') {\r\n return [...first, column];\r\n }\r\n return [...first, ...column.children];\r\n }, []);\r\n const results = displayColumns\r\n .map(e => ({\r\n ...e,\r\n data: columns.find(e1 => e1.field === e.field),\r\n }))\r\n .filter(e => !!e.data)\r\n .map(e => e.data!);\r\n return [...results, ...this.additionalColumns];\r\n } else {\r\n return this.columns;\r\n }\r\n };\r\n\r\n exportDefault = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isCSV: false,\r\n });\r\n };\r\n\r\n exportCSV = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isCSV: true,\r\n });\r\n };\r\n\r\n loadFiles = async (group: string | undefined = undefined) => {\r\n // TODO: Fix\r\n // this.files = await this.exportService.filesInFolder({\r\n // key: this.key!,\r\n // group,\r\n // });\r\n // this.ref.markForCheck();\r\n };\r\n\r\n #initTemplate = async (fileName?: string) => {\r\n const sheets: SdExcelSheet[] = [];\r\n if (Array.isArray(this.exportOption?.sheets)) {\r\n for (const sheet of this.exportOption.sheets) {\r\n if (sheet.name && sheet.items && sheet.headers) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n headers: sheet.headers,\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n headers: sheet.headers,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return await this.excelService.generateTemplate({\r\n fileName: fileName || this.exportOption?.fileName,\r\n columns: this.columns,\r\n sheets,\r\n });\r\n };\r\n\r\n generateTemplate = async () => {\r\n this.loadingService.start();\r\n await this.#initTemplate().finally(this.loadingService.stop);\r\n };\r\n\r\n generateAndUploadTemplate = async (fileName?: string) => {\r\n const sheets: SdExcelSheet[] = [];\r\n if (Array.isArray(this.exportOption?.sheets)) {\r\n for (const sheet of this.exportOption?.sheets) {\r\n if (sheet.name && sheet.items && sheet.headers) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n headers: sheet.headers,\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n headers: sheet.headers,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n // TODO: Fix\r\n // return await this.exportService.generateUploadTemplate({\r\n // key: this.key!,\r\n // template: {\r\n // fileName: fileName || this.tableOption?.export?.fileName,\r\n // columns: this.columns.filter(e => this.selected[e.field]),\r\n // sheets,\r\n // },\r\n // });\r\n };\r\n\r\n onExport = (file: any) => {\r\n this.export.emit({\r\n file,\r\n columns: this.columns,\r\n });\r\n this.ref.detectChanges();\r\n };\r\n\r\n uploadTemplate = async () => {\r\n // TODO: Fix\r\n // const file = await this.exportService.uploadTemplate({\r\n // key: this.key!,\r\n // });\r\n // if (file) {\r\n // this.files = [...this.files, file];\r\n // this.ref.detectChanges();\r\n // }\r\n };\r\n\r\n removeFile = (file: any) => {\r\n this.confirmService.confirm('Remove template').then(() => {\r\n // TODO: Fix\r\n // this.exportService.removeFile({\r\n // key: this.key!,\r\n // fileName: file.fileName,\r\n // });\r\n const idx = this.files.indexOf(file);\r\n this.files.splice(idx, 1);\r\n this.files = [...this.files];\r\n this.ref.detectChanges();\r\n });\r\n };\r\n\r\n createTemplate = async () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n if (!this.columns.some(e => this.selected[e.field])) {\r\n this.notifyService.warning(`Vui lòng chọn cột dữ liệu để xuất`);\r\n return;\r\n }\r\n this.loadingService.start();\r\n const fileName = this.templateName + '.xlsx';\r\n try {\r\n const result = await this.generateAndUploadTemplate(fileName);\r\n // TODO: Fix\r\n // if (result?.filePath) {\r\n // const file: SdExportFile = {\r\n // filePath: result.filePath,\r\n // fileName: result.fileName,\r\n // };\r\n // this.onExport(file);\r\n // this.templateName = null;\r\n // this.enableCreating = false;\r\n // this.files = [...this.files, file];\r\n // this.ref.detectChanges();\r\n // }\r\n } finally {\r\n this.loadingService.stop();\r\n }\r\n };\r\n\r\n templateNameValidator = (val: string): string => {\r\n const regex = /^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$/;\r\n if (!val) {\r\n return 'Please enter your template name';\r\n }\r\n if (val.length > 50) {\r\n return 'Template name is too long';\r\n }\r\n if (!regex.test(val)) {\r\n return 'Template name only contains letters, numbers and spaces';\r\n }\r\n return '';\r\n };\r\n}\r\n","<sd-modal width=\"907px\" [title]=\"'Exported template'\" #modal>\n <div class=\"row\">\n <div *ngIf=\"!files?.length\" class=\"col-12\">\n <div class=\"c-empty\">\n <img class=\"c-empty-image\" alt=\"empty-image\" />\n <div class=\"T14R\">{{ 'There are no exported templates' }}</div>\n </div>\n </div>\n <ng-container *ngIf=\"files?.length\">\n <div class=\"col-12\">\n <div class=\"c-table\" style=\"max-height: 50vh\">\n <table mat-table [dataSource]=\"files\">\n <ng-container matColumnDef=\"stt\">\n <th mat-header-cell class=\"c-th text-center px-5\" *matHeaderCellDef style=\"width: 50px\">#</th>\n <td class=\"text-center px-5\" mat-cell *matCellDef=\"let item; let idx = index\">\n {{ idx + 1 }}\n </td>\n </ng-container>\n <ng-container matColumnDef=\"fileName\">\n <th mat-header-cell class=\"c-th px-5\" *matHeaderCellDef>\n {{ 'File name' }}\n </th>\n <td class=\"px-5\" mat-cell *matCellDef=\"let item\">\n {{ item.fileName }}\n </td>\n </ng-container>\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell class=\"c-th px-5\" *matHeaderCellDef style=\"width: 80px\"></th>\n <td class=\"px-5\" mat-cell *matCellDef=\"let item\">\n <div class=\"d-flex\">\n <button mat-icon-button aria-label=\"delete\" (click)=\"removeFile(item)\">\n <mat-icon>delete</mat-icon>\n </button>\n <button mat-icon-button aria-label=\"download\" (click)=\"onExport(item)\">\n <mat-icon>download</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"['stt', 'fileName', 'action']; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['stt', 'fileName', 'action']\"></tr>\n </table>\n </div>\n </div>\n <div *ngIf=\"files.length < 5\" class=\"col-12 mt-10\">\n <sd-button class=\"mr-4\" [title]=\"'New template'\" (click)=\"enableCreating = true\" color=\"info\" [disabled]=\"enableCreating\">\n </sd-button>\n <sd-button *ngIf=\"exportOption?.enableUpload\" [title]=\"'Upload template'\" (click)=\"uploadTemplate()\" type=\"outline\">\n </sd-button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"enableCreating || !files?.length\">\n <div class=\"col-12 mt-20\">\n <div class=\"T14R\">{{ 'Select columns for creating template' }}:</div>\n </div>\n <div class=\"col-12\">\n <mat-chip-listbox selectable=\"true\" multiple=\"true\">\n <ng-container *ngFor=\"let column of columns\">\n <mat-chip-option [selected]=\"selected[column.field]\" (click)=\"selected[column.field] = !selected[column.field]\">\n {{ column.title }}\n </mat-chip-option>\n </ng-container>\n </mat-chip-listbox>\n </div>\n <div class=\"col-12 row\">\n <div class=\"col-10\">\n <sd-input [form]=\"form\" [label]=\"'Template name'\" [(model)]=\"templateName\" [validator]=\"templateNameValidator\"></sd-input>\n </div>\n <div class=\"col-2 mt-8\">\n <sd-button width=\"100%\" [title]=\"'Save'\" color=\"info\" (click)=\"createTemplate()\"> </sd-button>\n </div>\n </div>\n </ng-container>\n </div>\n</sd-modal>\n","import { SdBadge } from '@sd-angular/core/components/badge';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\n// import hash from 'object-hash';\r\nexport interface SdTableMetaSelector {\r\n selectable?: boolean;\r\n isSelected?: boolean;\r\n actions?: string[];\r\n}\r\n\r\nexport interface SdTableMetaExpand {\r\n isExpanded?: boolean;\r\n isExpanding?: boolean;\r\n data?: any;\r\n}\r\n\r\nexport interface SdTableDisplay {\r\n tooltip?: string;\r\n badge?: {\r\n type: SdBadge['type'] | undefined | null;\r\n color: SdBadge['color'] | undefined | null;\r\n icon: string | undefined | null;\r\n };\r\n cellStyle?: Record<string, string>;\r\n data: string | number | undefined | null;\r\n isHtml: boolean;\r\n click?: () => void;\r\n}\r\n\r\nexport interface SdTableMeta<T> {\r\n id: string;\r\n display: Record<string, SdTableDisplay>;\r\n selector?: SdTableMetaSelector;\r\n expand?: SdTableMetaExpand;\r\n group?: {\r\n htmlTemplate?: string;\r\n items?: SdTableItem<T>[];\r\n };\r\n}\r\n\r\nexport interface SdTableItem<T = any> {\r\n meta: SdTableMeta<T>;\r\n data: T;\r\n}\r\n\r\nexport const MapToSdTableItem = <T = any>(item: T): SdTableItem<T> => ({\r\n data: item,\r\n meta: {\r\n id: SdUtilities.hash({ data: item }),\r\n display: {},\r\n expand: {\r\n isExpanding: false,\r\n isExpanded: false,\r\n },\r\n group: {},\r\n selector: { actions: [], isSelected: false, selectable: false },\r\n },\r\n});\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n// import hash from 'object-hash';\r\nimport { SdTableOption } from '../models/table-option.model';\r\nimport { MapToSdTableItem, SdTableItem } from '../models/table-item.model';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\n@Pipe({\r\n name: 'sdGroup',\r\n})\r\nexport class SdGroupPipe implements PipeTransform {\r\n transform(items: SdTableItem[], gridOption: SdTableOption): SdTableItem[] {\r\n const { group } = gridOption;\r\n if (!group) {\r\n return items;\r\n }\r\n const { fields, htmlTemplate } = group;\r\n if (!fields?.length) {\r\n return items;\r\n }\r\n const groupItem: Record<string, SdTableItem[]> = {};\r\n for (const item of items) {\r\n let obj = {};\r\n for (const field of fields) {\r\n obj = {\r\n ...obj,\r\n ...((item as any)[field] ?? { [field]: (item as any)[field] }),\r\n };\r\n }\r\n const key = SdUtilities.hash(obj);\r\n if (!groupItem[key]) {\r\n groupItem[key] = [];\r\n }\r\n groupItem[key].push(item);\r\n }\r\n const results: SdTableItem[] = [];\r\n for (const key of Object.keys(groupItem)) {\r\n const result = MapToSdTableItem({}, );\r\n result.meta.group!.items = groupItem[key];\r\n result.meta.group!.htmlTemplate = htmlTemplate(groupItem[key]);\r\n results.push(result);\r\n for (const item of groupItem[key]) {\r\n results.push(item);\r\n }\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\nimport { SdTableItem } from '../models/table-item.model';\nimport { SdUtilities } from '@sd-angular/core/utilities';\n@Pipe({\n name: 'selectionDisabled',\n})\nexport class SdSelectionDisabledPipe implements PipeTransform {\n transform = (selectedItems: SdTableItem[], rowData: SdTableItem, selection: SdTableOptionSelector): boolean => {\n const { disabled, actions } = selection;\n if (!actions?.length) {\n if (!disabled) {\n rowData.meta.selector!.selectable = true;\n return false;\n }\n rowData.meta.selector!.selectable = !disabled(rowData, selectedItems);\n return !rowData.meta.selector!.selectable;\n }\n // Kiểm tra có bị disabled theo function không\n // Dữ liệu chưa được check thì kiểm tra hàm disable nếu có\n if (disabled && !rowData.meta.selector!.isSelected) {\n // Nếu disabled và dữ liệu chưa được check\n if(disabled(rowData, selectedItems)) {\n return true;\n }\n }\n // Lọc các action theo selectedItems hiện tại\n const availableActions = actions.filter(action => {\n if ('children' in action) {\n for (const childAction of action.children) {\n const key = SdUtilities.hash(childAction);\n if (selectedItems.every(e => e.meta.selector?.actions?.includes(key))) {\n return true;\n }\n }\n return false;\n } else {\n const key = SdUtilities.hash(action);\n return selectedItems.every(e => e.meta.selector?.actions?.includes(key));\n }\n });\n // Kiểm tra rowData có action nào thỏa hay ko, nếu ko thì disabled\n for (const action of availableActions) {\n if ('children' in action) {\n for (const childAction of action.children) {\n if (rowData.meta.selector?.actions?.includes(SdUtilities.hash(childAction))) {\n return false;\n }\n }\n } else {\n if (rowData.meta.selector?.actions?.includes(SdUtilities.hash(action))) {\n return false;\n }\n }\n }\n return true;\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\nimport { SdTableItem } from '../models/table-item.model';\n@Pipe({\n name: 'selectionVisibleSelectAll',\n})\nexport class SdSelectionVisibleSelectAllPipe implements PipeTransform {\n transform = async (items: SdTableItem[], selector: SdTableOptionSelector | undefined): Promise<boolean> => {\n // Nếu chỉ chọn 1 thì không có select all\n if (selector?.single) {\n return false;\n }\n if (!items.length) {\n return false;\n }\n if (!selector?.actions?.length) {\n return true;\n }\n if (selector.actions.some(e => ('children' in e && e.children.some(e1 => e1.isGrouped)) || e.isGrouped)) {\n return false;\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n const first = items.find(t => t.meta.selector?.actions?.length);\n if (first) {\n for (const action of first.meta.selector?.actions!) {\n if (items.filter(t => t.meta.selector?.actions?.length).every(e => e.meta.selector?.actions?.includes(action))) {\n return true;\n }\n }\n }\n return false;\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\nimport { SdTableItem } from '../models/table-item.model';\nimport { SdUtilities } from '@sd-angular/core/utilities';\n\n@Pipe({\n name: 'selectionVisible',\n})\nexport class SdSelectionVisiblePipe implements PipeTransform {\n transform = (rowData: SdTableItem, selection: SdTableOptionSelector | undefined): boolean => {\n const groupedActions: string[] = [];\n rowData.meta.selector!.actions = rowData.meta.selector!.actions || [];\n if (!selection?.actions?.length) {\n rowData.meta.selector!.selectable = true;\n return rowData.meta.selector!.selectable;\n }\n for (const action of selection?.actions) {\n if ('children' in action) {\n let flag = false;\n let hasGroup = false;\n for (const child of action.children) {\n const { hidden, isGrouped } = child;\n const key = SdUtilities.hash(child);\n if (isGrouped) {\n hasGroup = true;\n }\n if (typeof hidden === 'function') {\n if (!hidden(rowData.data)) {\n flag = true;\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n } else if (!hidden) {\n flag = true;\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n }\n if (flag) {\n rowData.meta.selector!.actions.push(SdUtilities.hash(action));\n if (hasGroup) {\n groupedActions.push(SdUtilities.hash(action));\n }\n }\n } else {\n const { hidden, isGrouped } = action;\n const key = SdUtilities.hash(action);\n if (typeof hidden === 'function') {\n if (!hidden(rowData.data)) {\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n } else if (!hidden) {\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n }\n }\n rowData.meta.selector!.selectable = !!rowData.meta.selector!.actions?.length;\n if (!rowData.meta.selector!.selectable || !groupedActions.length || rowData?.meta.group?.items?.length) {\n return rowData.meta.selector!.selectable;\n }\n // Đối với trường hợp grouped, tuy selectable là true nhưng vẫn ẩn đi checkbox\n // nếu các action đều thuộc groupedActions và rowData ko phải là dòng group\n return rowData.meta.selector!.actions.some(action => !groupedActions.includes(action));\n };\n}\n","import { Injectable } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdStorageService } from '@sd-angular/core/services';\nimport { SdUtilities } from '@sd-angular/core/utilities';\nimport { SdOperator } from '@sd-angular/core/utilities/models';\nimport { map, startWith } from 'rxjs/operators';\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport {\n SdTableExternalFilter,\n SdTableOptionFilter,\n TableFilterConfiguration,\n TableFilterRegister,\n TableFilterValue,\n} from './table-filter.model';\n\n@Injectable()\nexport class SdTableFilterService {\n #filterConfiguration = 'GRID-FILTER-CONFIGURATION';\n #filterValue = 'GRID-FILTER-VALUE';\n #cache: Record<string, TableFilterRegister> = {};\n constructor(private storageService: SdStorageService) {}\n register = (\n filter: SdTableOptionFilter | undefined,\n args: {\n id: string;\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n filterDefs: SdTableFilterDefDirective[] | undefined;\n columnOperator?: Record<string, SdOperator>;\n }\n ) => {\n let cacheSession = false;\n\n const { id, columns, externalFilters } = args;\n const tempKey = SdUtilities.hash({\n id,\n columns: columns?.map(e => e.field).filter(field => !!field) || [],\n externalFilters: externalFilters?.map(e => e.field).filter(field => !!field) || [],\n });\n const key = filter?.key || tempKey;\n if (!filter?.key) {\n cacheSession = true; // Nếu không có key thì chỉ lưu theo session\n }\n if (!this.#cache[key]) {\n // Setting của filter configuration\n const filterConfiguration = this.storageService.create<TableFilterConfiguration>(\n {\n prefix: this.#filterConfiguration,\n key,\n },\n {\n default: this.#defaultConfiguration(args),\n type: cacheSession ? 'session' : undefined,\n }\n );\n // Lấy giá trị configuration merge với giá trị defaultShowing của args nếu như args có thay đổi\n filterConfiguration.set(this.#initConfiguration(args, filterConfiguration.get()));\n // Setting của filter value\n const filterValue = this.storageService.create<TableFilterValue>(\n {\n prefix: this.#filterValue,\n key: !filter?.cacheable ? tempKey : key,\n },\n {\n default: this.#defaultValue(args),\n type: cacheSession || !filter?.cacheable ? 'session' : undefined,\n }\n );\n // Lấy giá trị value merge với giá trị default của args nếu như args có thay đổi\n filterValue.set(this.#initValue(args, filterValue.get()));\n this.#cache[key] = {\n configuration: {\n get: (): TableFilterConfiguration => {\n return filterConfiguration.get();\n },\n set: (configuration: Partial<TableFilterConfiguration>): TableFilterConfiguration => {\n const { inlineExternal } = configuration;\n filterConfiguration.set({\n inlineExternal: inlineExternal!,\n });\n return {\n inlineExternal: inlineExternal!,\n };\n },\n remove: () => {\n filterConfiguration.set(this.#defaultConfiguration(args));\n },\n observer: filterConfiguration.observer.pipe(\n startWith(filterConfiguration.get()),\n // Sử dụng mặc định nếu bị reset\n map(configuration => configuration || this.#defaultConfiguration(args))\n ),\n },\n value: {\n get: (): TableFilterValue => {\n return filterValue.get();\n },\n set: (value: Partial<TableFilterValue>): TableFilterValue => {\n const keys = Object.keys(value || {});\n const current = filterValue.get();\n const { columnOperator, columnFilter, externalFilter } = current;\n const updatedFilter = {\n // Filter column\n columnOperator: keys.includes('columnOperator') ? value?.columnOperator || {} : columnOperator,\n columnFilter: keys.includes('columnFilter') ? value?.columnFilter || {} : columnFilter,\n // Filter external\n externalFilter: keys.includes('externalFilter') ? value?.externalFilter || {} : externalFilter,\n // Force\n notReload: !!value?.notReload,\n };\n filterValue.set({\n ...updatedFilter,\n // Kiểm tra có đang lọc hay không\n filtered: this.#filtered(value),\n });\n return updatedFilter;\n },\n remove: () => {\n filterValue.set(this.#defaultValue(args));\n },\n observer: filterValue.observer.pipe(\n startWith(filterValue.get()),\n // Sử dụng mặc định nếu bị reset\n map(value => value || this.#defaultValue(args))\n ),\n },\n };\n }\n return this.#cache[key];\n };\n\n #filtered = (filterReq: Partial<TableFilterValue>): boolean => {\n const { columnFilter, externalFilter } = filterReq;\n if (\n Object.values({ ...columnFilter, ...externalFilter }).some(val => {\n // Nếu là mảng và mảng có phần tử thì xem như là có filter\n if (Array.isArray(val)) {\n return !!val.length;\n }\n // Nếu là object (date) và có from/to thì xem như là có filter\n if (val && typeof val === 'object') {\n if ('from' in val && !!val.from) {\n return true;\n }\n if ('to' in val && !!val.to) {\n return true;\n }\n return false;\n }\n return val !== undefined && val !== null && val !== '';\n })\n ) {\n return true;\n }\n return false;\n };\n\n #defaultConfiguration = (args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n }): TableFilterConfiguration => {\n const { externalFilters } = args;\n const inlineExternal: Record<string, boolean> = {};\n // Filter external\n for (const item of externalFilters || []) {\n inlineExternal[item.field] = !!item?.defaultShowing;\n }\n return {\n // Filter external\n inlineExternal,\n };\n };\n\n #defaultValue = (args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n columnOperator?: Record<string, SdOperator>;\n }): TableFilterValue => {\n const columnFilter: Record<string, any> = {};\n const externalFilter: Record<string, any> = {};\n const columnOperator: Record<string, SdOperator> = args.columnOperator || {};\n const { columns, externalFilters } = args;\n // Filter column\n for (const item of columns || []) {\n columnFilter[item.field] = item?.filter?.default;\n if (item?.filter?.operator?.enable && item?.filter?.operator?.default) {\n columnOperator[item.field] = item.filter.operator.default;\n }\n }\n // Filter external\n for (const item of externalFilters || []) {\n externalFilter[item.field] = item?.default;\n }\n return {\n // Filter column\n columnFilter,\n // Filter external\n externalFilter,\n // columnOperator\n columnOperator,\n };\n };\n\n #initConfiguration = (\n args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n filterDefs: SdTableFilterDefDirective[] | undefined;\n },\n configuration: TableFilterConfiguration\n ): TableFilterConfiguration => {\n const { externalFilters } = args;\n const inlineExternal: Record<string, boolean> = {};\n // Filter external\n for (const item of externalFilters || []) {\n inlineExternal[item.field] = configuration?.inlineExternal?.[item.field] ?? item?.defaultShowing;\n }\n return {\n // Filter external\n inlineExternal,\n };\n };\n\n #initValue = (\n args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n filterDefs: SdTableFilterDefDirective[] | undefined;\n columnOperator?: Record<string, SdOperator>;\n },\n value: TableFilterValue\n ): TableFilterValue => {\n const columnFilter: Record<string, any> = {};\n const externalFilter: Record<string, any> = {};\n const filterDef: Record<string, any> = {};\n const columnOperator: Record<string, SdOperator> = args.columnOperator || {};\n const { columns, externalFilters, filterDefs } = args;\n // Filter column\n for (const item of columns || []) {\n columnFilter[item.field] = value?.columnFilter?.[item.field] ?? item?.filter?.default;\n if (item?.filter?.operator?.enable && item?.filter?.operator?.default) {\n columnOperator[item.field] = item.filter.operator.default;\n }\n }\n // Filter external\n for (const item of externalFilters || []) {\n if (item.type === 'daterange') {\n externalFilter[item.field] = {\n from: value?.externalFilter?.[item.field]?.from ?? item.default?.from,\n to: value?.externalFilter?.[item.field]?.to ?? item.default?.to,\n };\n } else {\n externalFilter[item.field] = value?.externalFilter?.[item.field] ?? item?.default;\n }\n }\n return {\n // Filter column\n columnFilter,\n // Filter external\n externalFilter,\n //column Operator\n columnOperator,\n };\n };\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ContentChildren,\r\n Inject,\r\n Injectable,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n QueryList,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { MatPaginator, MatPaginatorIntl, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSort, MatSortModule } from '@angular/material/sort';\r\nimport { MatTable, MatTableModule } from '@angular/material/table';\r\nimport { SdExcelColumn, SdExcelService, SdNotifyService } from '@sd-angular/core/services';\r\nimport { Subject, Subscription, combineLatest, firstValueFrom, isObservable } from 'rxjs';\r\nimport { debounceTime, map, startWith, switchMap } from 'rxjs/operators';\r\nimport * as uuid from 'uuid';\r\nimport { SdTabelCellDefDirective } from './directives/sd-table-cell-def.directive';\r\nimport { SdMaterialSubInformationDefDirective } from './directives/sd-table-expand-def.directive';\r\nimport { SdTableFilterDefDirective } from './directives/sd-table-filter-def.directive';\r\nimport { SdMaterialFooterDefDirective } from './directives/sd-table-footer-def.directive';\r\nimport { SdTableColumn, SdTableColumnLazyValues, SdTableColumnNormal, SdTableColumnValues } from './models/table-column.model';\r\nimport { SdTableOption } from './models/table-option.model';\r\nimport { SdTableFilterRequest, TableFilterRegister } from './services/table-filter/table-filter.model';\r\n\r\nimport { CdkColumnDef } from '@angular/cdk/table';\r\nimport { CommonModule, DatePipe, DecimalPipe } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { SdBaseSecureComponent } from '@sd-angular/core/components/base';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdQuickAction } from '@sd-angular/core/components/quick-action';\r\nimport { SdDesktopDirective, SdHoverCopyDirective, SdScrollDirective } from '@sd-angular/core/directives';\r\nimport { SdFormatNumberPipe, SdSafeHtmlPipe } from '@sd-angular/core/pipes';\r\nimport { SD_EMPTY_STR, SdOperator } from '@sd-angular/core/utilities';\r\nimport { ArrayUtilities, DateUtilities, NumberUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { ColumnFilterComponent, ExternalFilterComponent } from './components';\r\nimport { ConfigComponent } from './components/config/config.component';\r\nimport { SdDesktopCell } from './components/desktop-cell/desktop-cell.component';\r\nimport { SdDesktopCommand } from './components/desktop-command/desktop-command.component';\r\nimport { SdPopupExport } from './components/popup-export/popup-export.component';\r\nimport { SelectorActionComponent } from './components/selector-action/selector-action.component';\r\nimport { DEFAULT_TABLE_CONFIG, ISdTableConfiguration, SD_TABLE_CONFIGURATION } from './configurations';\r\nimport { MapToSdTableItem, SdTableItem } from './models/table-item.model';\r\nimport { ConfiguredTableResult } from './models/table-option-config.model';\r\nimport { SdTableOptionExportColumn } from './models/table-option-export.model';\r\nimport { SdGroupPipe } from './pipes/sd-group.pipe';\r\nimport { SdSelectionDisabledPipe } from './pipes/selection-disabled.pipe';\r\nimport { SdSelectionVisibleSelectAllPipe } from './pipes/selection-visible-select-all.pipe';\r\nimport { SdSelectionVisiblePipe } from './pipes/selection-visible.pipe';\r\nimport { ConfigService } from './services/config.service';\r\nimport { SdTableFilterService } from './services/table-filter/table-filter.service';\r\nimport { SdExcelSheet } from '@sd-angular/core/services/excel';\r\n\r\n@Injectable()\r\nexport class MatPaginatorIntlCro extends MatPaginatorIntl {\r\n override firstPageLabel = 'Trang đầu';\r\n override lastPageLabel = 'Trang cuối';\r\n override itemsPerPageLabel = 'Đang hiển thị';\r\n override nextPageLabel = 'Trang sau';\r\n override previousPageLabel = 'Trang trước';\r\n\r\n override getRangeLabel = (page: number, pageSize: number, length: number) => {\r\n if (length === 0 || pageSize === 0) {\r\n return '';\r\n }\r\n const from = page * pageSize + 1;\r\n const to = from + (length - page * pageSize > pageSize ? pageSize : length - page * pageSize) - 1;\r\n return `${from}-${to}/${NumberUtilities.toISO(length)}`;\r\n };\r\n}\r\n\r\n@Component({\r\n selector: 'sd-table',\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [\r\n trigger('detailExpand', [\r\n state('collapsed', style({ height: '0', minHeight: '0', visibility: 'hidden' })),\r\n state('expanded', style({ height: '*', visibility: 'visible' })),\r\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\r\n ]),\r\n ],\r\n providers: [\r\n DatePipe,\r\n DecimalPipe,\r\n CdkColumnDef,\r\n SdTableFilterService,\r\n ConfigService,\r\n {\r\n provide: MatPaginatorIntl,\r\n useClass: MatPaginatorIntlCro,\r\n },\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatMenuModule,\r\n MatPaginatorModule,\r\n MatIconModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatProgressSpinnerModule,\r\n MatCheckboxModule,\r\n SdButton,\r\n SdDesktopCommand,\r\n SdDesktopCell,\r\n ExternalFilterComponent,\r\n ConfigComponent,\r\n ColumnFilterComponent,\r\n SdGroupPipe,\r\n SdSelectionVisiblePipe,\r\n SdSelectionVisibleSelectAllPipe,\r\n SdSafeHtmlPipe,\r\n // SdPopupExport,\r\n SdSelectionDisabledPipe,\r\n SdScrollDirective,\r\n SdDesktopDirective,\r\n SdHoverCopyDirective,\r\n SelectorActionComponent,\r\n ],\r\n})\r\n// eslint-disable-next-line @angular-eslint/component-class-suffix\r\nexport class SdTable<T = unknown> extends SdBaseSecureComponent implements OnInit, AfterViewInit, OnDestroy {\r\n autoId?: string;\r\n @Input('autoId') set _autoId(val: string | undefined | null) {\r\n if (val) {\r\n this.autoId = `table-${val}`;\r\n }\r\n }\r\n @ViewChild(MatTable) table?: MatTable<any>;\r\n @ViewChild(ConfigComponent) configComponent?: ConfigComponent;\r\n // Export\r\n @ViewChild(SdPopupExport) sdPopupExport?: SdPopupExport;\r\n #gridId = uuid.v4();\r\n @ViewChild(SdScrollDirective) scroll?: SdScrollDirective;\r\n filterRegister!: TableFilterRegister;\r\n key = uuid.v4();\r\n @ViewChild(SdQuickAction) quickAction?: SdQuickAction;\r\n @ViewChild(ExternalFilterComponent) externalFilter?: ExternalFilterComponent;\r\n tableOption!: SdTableOption<T>;\r\n configuration?: ConfiguredTableResult;\r\n @Input() set option(option: SdTableOption) {\r\n if (option) {\r\n option = this.#initConfiguration(option);\r\n this.tableOption = option;\r\n this.#loadCompleted = false;\r\n const storage = this.configService.init(this.tableOption);\r\n // Lúc nào storage cũng sẽ có giá trị nên không cần kiểm tra\r\n this.#subscription.add(\r\n storage.observer.pipe(startWith(storage.subject.getValue())).subscribe(() => {\r\n const configurationResult = this.configService.loadConfigurationResult(this.tableOption!, storage.get());\r\n const displayColumns = configurationResult.displayedColumns || [];\r\n this.ref.detectChanges();\r\n this.#loadValues(this.tableOption.columns.filter(column => displayColumns.includes(column.field)))\r\n .then(() => {\r\n this.configuration = configurationResult;\r\n this.#optionChanges.next(this.tableOption);\r\n })\r\n .finally(() => {\r\n this.ref.detectChanges();\r\n });\r\n })\r\n );\r\n // if (setting) {\r\n // this.#subscription.add(\r\n // setting.observer.pipe(startWith(setting.subject.getValue())).subscribe(() => {\r\n // const configurationResult = this.configService.loadConfigurationResult(this.tableOption!, setting.get());\r\n // const displayColumns = configurationResult.displayedColumns || [];\r\n // this.loadingService.start();\r\n // this.ref.detectChanges();\r\n // this.#loadValues(this.tableOption.columns.filter(column => displayColumns.includes(column.field)))\r\n // .then(() => {\r\n // this.configuration = configurationResult;\r\n // this.#optionChanges.next(this.tableOption);\r\n // })\r\n // .finally(() => {\r\n // this.loadingService.stop();\r\n // this.ref.detectChanges();\r\n // });\r\n // })\r\n // );\r\n // } else {\r\n // const configuration = this.configService.loadConfiguredTable(this.tableOption);\r\n // const configurationResult = this.configService.loadConfigurationResult(this.tableOption, configuration);\r\n // const displayColumns = configurationResult.displayedColumns || [];\r\n // this.loadingService.start();\r\n // this.ref.detectChanges();\r\n // this.#loadValues(this.tableOption.columns.filter(column => displayColumns.includes(column.field)))\r\n // .then(() => {\r\n // this.configuration = configurationResult;\r\n // this.#optionChanges.next(this.tableOption);\r\n // })\r\n // .finally(() => {\r\n // this.loadingService.stop();\r\n // this.ref.detectChanges();\r\n // });\r\n // }\r\n }\r\n }\r\n #optionChanges = new Subject<SdTableOption>();\r\n\r\n #localItems: SdTableItem<T>[] = [];\r\n items: SdTableItem<T>[] = [];\r\n selectedTableItems: SdTableItem<T>[] = [];\r\n total?: number;\r\n\r\n // Loading\r\n loading = false;\r\n\r\n // Paginate\r\n isHiddenPaginator = false;\r\n #paginator?: MatPaginator;\r\n @ViewChild(MatPaginator) set paginator(paginator: MatPaginator) {\r\n if (paginator && this.#paginator !== paginator) {\r\n this.#paginator = paginator;\r\n this.#subscription.add(\r\n paginator.page\r\n .pipe(\r\n map(() => {\r\n this.#reload.next({\r\n force: false,\r\n });\r\n })\r\n )\r\n .subscribe()\r\n );\r\n }\r\n }\r\n\r\n // Sorting\r\n #sort?: MatSort;\r\n @ViewChild(MatSort) set sort(sort: MatSort) {\r\n if (sort && this.#sort !== sort) {\r\n this.#sort = sort;\r\n this.#subscription.add(\r\n sort.sortChange\r\n .pipe(\r\n map(() => {\r\n this.#reload.next({\r\n force: false,\r\n });\r\n })\r\n )\r\n .subscribe()\r\n );\r\n }\r\n }\r\n\r\n // Sub Information\r\n @ContentChild(SdMaterialSubInformationDefDirective)\r\n sdSubInformation?: SdMaterialSubInformationDefDirective;\r\n\r\n // Cell Def\r\n @ContentChildren(SdTabelCellDefDirective) sdCellDefs = new QueryList<SdTabelCellDefDirective>();\r\n cellDef: Record<string, SdTabelCellDefDirective> = {};\r\n\r\n // Footer Def\r\n @ContentChildren(SdMaterialFooterDefDirective) sdFooterDefs = new QueryList<SdMaterialFooterDefDirective>();\r\n footerDef: Record<string, SdMaterialFooterDefDirective> = {};\r\n hasFooter = false;\r\n\r\n // Filter Def\r\n @ContentChildren(SdTableFilterDefDirective) sdFilterDefs = new QueryList<SdTableFilterDefDirective>();\r\n filterDefs: SdTableFilterDefDirective[] = [];\r\n\r\n // Filter\r\n columnOperator: Record<string, SdOperator> = {};\r\n columnFilter?: Record<string, any> = {};\r\n // Subcription\r\n #subscription = new Subscription();\r\n #reload = new Subject<{\r\n force: boolean;\r\n }>();\r\n exporting = false;\r\n isSelectAll = false;\r\n exportTitle = 'Export';\r\n #loadCompleted = false;\r\n cacheValues: Record<string, any[]> = {};\r\n #cacheObjValues: Record<string, Record<string, string>> = {};\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private formatNumberPipe: SdFormatNumberPipe,\r\n @Inject(SD_TABLE_CONFIGURATION)\r\n @Optional()\r\n public tableConfiguration: ISdTableConfiguration | undefined,\r\n private configService: ConfigService,\r\n private excelService: SdExcelService,\r\n private notifyService: SdNotifyService,\r\n private gridFilterService: SdTableFilterService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.#initCellDef();\r\n }\r\n ngAfterViewInit() {\r\n this.#subscription.add(\r\n this.#reload\r\n .pipe(\r\n debounceTime(200),\r\n switchMap(async data => {\r\n const filterInfo = this.#getFilter();\r\n const result = await this.#load(filterInfo, !this.#loadCompleted || data.force);\r\n this.#loadCompleted = true;\r\n return result;\r\n })\r\n )\r\n .subscribe(this.#render)\r\n );\r\n this.#subscription.add(this.sdCellDefs.changes.pipe(startWith([])).subscribe(this.#initCellDef));\r\n this.#subscription.add(this.sdFooterDefs.changes.pipe(startWith([])).subscribe(this.#initFooterDef));\r\n this.#subscription.add(this.sdFilterDefs.changes.pipe(startWith([])).subscribe(this.#initFilterDef));\r\n this.#subscription.add(\r\n combineLatest([\r\n this.#optionChanges.pipe(startWith(this.tableOption)),\r\n this.sdFilterDefs.changes.pipe(startWith(this.filterDefs)),\r\n ]).subscribe(() => {\r\n this.#loadFilterRegister();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#optionChanges.subscribe(() => {\r\n if (this.filterRegister) {\r\n this.#reload.next({\r\n force: true,\r\n });\r\n }\r\n })\r\n );\r\n this.ref.detectChanges();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #initCellDef = () => {\r\n this.cellDef = {};\r\n for (const cellDef of this.sdCellDefs || []) {\r\n if (cellDef.sdTableCellDef) {\r\n this.cellDef[cellDef.sdTableCellDef] = cellDef;\r\n }\r\n }\r\n };\r\n\r\n #initFilterDef = () => {\r\n this.filterDefs = [];\r\n for (const filterDef of this.sdFilterDefs) {\r\n this.filterDefs.push(filterDef);\r\n }\r\n };\r\n\r\n #initFooterDef = () => {\r\n // NOTE: ContentChildren nên subcribe trong AfterViewInit\r\n this.footerDef = {};\r\n this.hasFooter = false;\r\n for (const footerDef of this.sdFooterDefs) {\r\n if (footerDef.sdTableFooterDef) {\r\n this.hasFooter = true;\r\n this.footerDef[footerDef.sdTableFooterDef] = footerDef;\r\n }\r\n }\r\n };\r\n\r\n #filterExportInfo = (pageNumber: number, pageSize: number): SdTableFilterRequest => {\r\n const { columnOperator, columnFilter, externalFilter } = this.filterRegister.value.get();\r\n return {\r\n columnOperator: columnOperator || {},\r\n rawColumnFilter: columnFilter || {},\r\n rawExternalFilter: externalFilter || {},\r\n orderBy: this.#sort?.active || '',\r\n orderDirection: this.#sort?.direction === 'asc' ? 'ASC' : this.#sort?.direction === 'desc' ? 'DESC' : undefined,\r\n pageNumber,\r\n pageSize,\r\n isExported: true,\r\n };\r\n };\r\n\r\n #initConfiguration = (option: SdTableOption) => {\r\n // Init pagination\r\n option.paginate = {\r\n hidden: option?.paginate?.hidden,\r\n pageSize: option?.paginate?.pageSize ?? this.tableConfiguration?.paginate?.pageSize ?? DEFAULT_TABLE_CONFIG.paginate?.pageSize,\r\n pages: option?.paginate?.pages ?? this.tableConfiguration?.paginate?.pages ?? DEFAULT_TABLE_CONFIG.paginate?.pages,\r\n showFirstLastButtons: option?.paginate?.showFirstLastButtons ?? this.tableConfiguration?.paginate?.showFirstLastButtons ?? false,\r\n hidePageSize: option?.paginate?.hidePageSize ?? false,\r\n };\r\n option.filter = option.filter || {};\r\n option.filter.hideInlineFilter = option?.filter?.hideInlineFilter ?? this.tableConfiguration?.filter?.hideInlineFilter;\r\n option.filter.externalFilterPerRow = option?.filter?.externalFilterPerRow ?? this.tableConfiguration?.filter?.externalFilterPerRow;\r\n option.filter.manualFilter = option?.filter?.manualFilter ?? this.tableConfiguration?.filter?.manualFilter;\r\n option.filter.hideExternalFilterToolbar = option?.filter?.hideExternalFilterToolbar ?? this.tableConfiguration?.filter?.hideExternalFilterToolbar;\r\n for (const column of option.columns || []) {\r\n if (column.filter?.operator?.enable) {\r\n if (!column.filter?.operator?.list?.length) {\r\n column.filter.operator.list = this.tableConfiguration?.filter?.operator?.list?.[column.type] || [];\r\n }\r\n\r\n this.columnOperator[column?.field] = this.tableConfiguration?.filter?.operator?.default?.[column.type]!;\r\n if (column.filter.operator.default && column.filter.operator.list?.some(el => el === column.filter?.operator?.default)) {\r\n this.columnOperator[column.field] = column.filter.operator.default;\r\n }\r\n }\r\n }\r\n return option;\r\n };\r\n\r\n #loadFilterRegister = () => {\r\n // Init filter\r\n if (this.tableOption) {\r\n if (!this.filterRegister) {\r\n this.filterRegister = this.gridFilterService.register(this.tableOption?.filter, {\r\n id: this.#gridId,\r\n columns: this.tableOption?.columns,\r\n externalFilters: this.tableOption?.filter?.externalFilters,\r\n filterDefs: this.filterDefs,\r\n columnOperator: this.columnOperator,\r\n });\r\n this.#subscription.add(\r\n this.filterRegister.value.observer\r\n .pipe(\r\n debounceTime(500),\r\n map(filterValue => {\r\n const { columnOperator, columnFilter, notReload } = filterValue;\r\n this.columnOperator = columnOperator || {};\r\n this.columnFilter = columnFilter;\r\n if (!notReload) {\r\n if (this.#paginator) {\r\n this.#paginator.pageIndex = 0;\r\n }\r\n this.#reload.next({\r\n force: false,\r\n });\r\n }\r\n })\r\n )\r\n .subscribe()\r\n );\r\n }\r\n }\r\n };\r\n\r\n #filterLocal = (localItems: SdTableItem<T>[], filterInfo: SdTableFilterRequest) => {\r\n const { columns } = this.tableOption;\r\n const { rawColumnFilter, orderBy, orderDirection, pageSize, pageNumber } = filterInfo;\r\n const items = localItems.filter(tableItem => {\r\n const item = tableItem.data;\r\n for (const column of columns) {\r\n const { field, type } = column;\r\n const filterValue: string = (rawColumnFilter[field as string] || '').toString().trim().toLowerCase();\r\n const columnValue: string = ((item as any)[field] || '').toString().trim().toLowerCase();\r\n if (filterValue) {\r\n if (!columnValue && type !== 'datetime' && type !== 'date' && type !== 'time') {\r\n return false;\r\n }\r\n if (type === 'string') {\r\n if (columnValue.indexOf(filterValue) === -1) {\r\n return false;\r\n }\r\n } else if (type === 'values' || type === 'lazy-values') {\r\n const columnType = column as SdTableColumnValues<T> | SdTableColumnLazyValues<T>;\r\n const isMultiple = columnType.option.selection! === 'MULTIPLE' || columnType.option.selection! === 'MULTIPLEAUTOCOMPLETE';\r\n if (isMultiple && Array.isArray(item[field])) {\r\n const columnValues: string[] =\r\n (item[field] as any).map((i: any) => (i[columnType.option.valueField] ?? '').toString().trim().toLowerCase()) ?? [];\r\n const filterValues: string[] = rawColumnFilter[field as string]?.map((v: any) => (v ?? '').toString().trim().toLowerCase());\r\n if (filterValues?.length && filterValues.every(fv => !columnValues.includes(fv))) {\r\n return false;\r\n }\r\n } else {\r\n if (columnValue !== filterValue) {\r\n return false;\r\n }\r\n }\r\n } else if (type === 'number') {\r\n const fValue = +filterValue.replace('>=', '').replace('<=', '').replace('>', '').replace('<', '');\r\n const cValue = +columnValue;\r\n if (fValue || fValue === 0) {\r\n if (!cValue && cValue !== 0) {\r\n return false;\r\n }\r\n if (filterValue.indexOf('>=') > -1 && cValue < fValue) {\r\n return false;\r\n } else if (filterValue.indexOf('<=') > -1 && cValue > fValue) {\r\n return false;\r\n } else if (filterValue.indexOf('<') > -1 && cValue >= fValue) {\r\n return false;\r\n } else if (filterValue.indexOf('>') > -1 && cValue <= fValue) {\r\n return false;\r\n } else if (cValue !== fValue) {\r\n return false;\r\n }\r\n }\r\n } else if (type === 'boolean') {\r\n if ((filterValue === '1' || filterValue === 'true') && columnValue !== '1' && columnValue !== 'true') {\r\n return false;\r\n } else if ((filterValue === '0' || filterValue === 'false') && columnValue !== '0' && columnValue !== 'false') {\r\n return false;\r\n }\r\n } else if (type === 'datetime' || type === 'date' || type === 'time') {\r\n const from = rawColumnFilter[field]?.from ?? rawColumnFilter[field];\r\n const to = rawColumnFilter[field]?.to ?? rawColumnFilter[field];\r\n const fromDate = DateUtilities.begin(from);\r\n const toDate = DateUtilities.end(to);\r\n if (fromDate || toDate) {\r\n if (!columnValue) {\r\n return false;\r\n }\r\n\r\n const columnTime = new Date(columnValue).getTime();\r\n const fromDateTime = fromDate?.getTime() || null;\r\n const toDateTime = toDate?.getTime() || null;\r\n\r\n if (fromDateTime && fromDateTime > columnTime) {\r\n return false;\r\n }\r\n if (toDateTime && columnTime > toDateTime) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n });\r\n // Sort\r\n if (orderBy && orderDirection) {\r\n const column = columns.find(e => e.field === orderBy);\r\n if (column) {\r\n const { type, field } = column;\r\n items.sort((tableItemCurrent, tableItemNext) => {\r\n const data = tableItemCurrent.data;\r\n const next = tableItemNext.data;\r\n if (type === 'number') {\r\n return ((data as any)[field] || 0) - ((next as any)[field] || 0);\r\n }\r\n if (type === 'date' || type === 'datetime' || type === 'time') {\r\n const d1 = new Date((data as any)[field] || '').getTime();\r\n const d2 = new Date((data as any)[field] || '').getTime();\r\n return d1 - d2;\r\n }\r\n const s1 = ((data as any)[field] || '').toString();\r\n const s2 = ((next as any)[field] || '').toString();\r\n if (s1 > s2) {\r\n return 1;\r\n }\r\n if (s1 < s2) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n if (orderDirection === 'DESC') {\r\n items.reverse();\r\n }\r\n }\r\n }\r\n return {\r\n items: items.filter((item, index) => {\r\n return index >= pageNumber * pageSize && index < (pageNumber + 1) * pageSize;\r\n }),\r\n total: items.length,\r\n };\r\n };\r\n\r\n #getFilter = (): SdTableFilterRequest => {\r\n const { columnOperator, columnFilter, externalFilter } = this.filterRegister.value.get();\r\n return {\r\n columnOperator: columnOperator || {},\r\n rawColumnFilter: columnFilter || {},\r\n rawExternalFilter: externalFilter || {},\r\n orderBy: this.#sort?.active || '',\r\n orderDirection: this.#sort?.direction === 'asc' ? 'ASC' : this.#sort?.direction === 'desc' ? 'DESC' : undefined,\r\n pageNumber: this.#paginator?.pageIndex || 0,\r\n pageSize: this.#paginator?.pageSize || this.tableOption?.paginate?.pageSize || 50,\r\n visibledColumns: ArrayUtilities.union('field', this.configuration?.firstColumns || [], this.configuration?.secondColumns || []),\r\n };\r\n };\r\n\r\n // Kiểm tra có phải là đang có filter hay không\r\n // Khi empty data thì dựa vào isFiltered để render tương ứng text\r\n isFiltered = false;\r\n requireFiltered = false;\r\n #isFiltered = (filterReq: SdTableFilterRequest) => {\r\n const { pageNumber, rawColumnFilter, rawExternalFilter } = filterReq;\r\n if (pageNumber !== 0) {\r\n return true;\r\n }\r\n if (\r\n Object.values({ ...rawColumnFilter }).some(val => {\r\n // Nếu là mảng và mảng có phần tử thì xem như là có filter\r\n if (Array.isArray(val)) {\r\n return !!val.length;\r\n }\r\n // Nếu là object (date) và có from/to thì xem như là có filter\r\n if (val && typeof val === 'object') {\r\n if ('from' in val && !!val.from) {\r\n return true;\r\n }\r\n if ('to' in val && !!val.to) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return val !== undefined && val !== null && val !== '';\r\n })\r\n ) {\r\n return true;\r\n }\r\n if (\r\n Object.values({ ...rawExternalFilter }).some(val => {\r\n // Nếu là mảng và mảng có phần tử thì xem như là có filter\r\n if (Array.isArray(val)) {\r\n return !!val.length;\r\n }\r\n // Nếu là object (date) và có from/to thì xem như là có filter\r\n if (val && typeof val === 'object') {\r\n if ('from' in val && !!val.from) {\r\n return true;\r\n }\r\n if ('to' in val && !!val.to) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return val !== undefined && val !== null && val !== '';\r\n })\r\n ) {\r\n return true;\r\n }\r\n // Kiểm\r\n return false;\r\n };\r\n\r\n #checkFilter = (filterReq: SdTableFilterRequest) => {\r\n this.isFiltered = this.#isFiltered(filterReq);\r\n this.requireFiltered = !!this.tableOption?.filter?.externalFilters?.some(e => e.required);\r\n };\r\n\r\n #load = async (\r\n filterReq: SdTableFilterRequest,\r\n force = true\r\n ): Promise<{\r\n items: SdTableItem<T>[];\r\n total: number;\r\n }> => {\r\n this.loading = true;\r\n this.ref.detectChanges();\r\n this.#checkFilter(filterReq);\r\n if (this.tableOption.type === 'server') {\r\n const { items, onFilter } = this.tableOption;\r\n // Thông báo cho bên ngoài biết là đang filter\r\n try {\r\n onFilter?.(filterReq, {\r\n externalFilterValid: !this.externalFilter?.form?.invalid,\r\n });\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n // Nếu có sử dụng external filter và form invalid thì không thực hiện gọi hàm items\r\n if (this.externalFilter?.form?.invalid) {\r\n this.loading = false;\r\n this.ref.detectChanges();\r\n return {\r\n items: [],\r\n total: 0,\r\n };\r\n }\r\n const data = await items(filterReq).catch(err => {\r\n console.error(err);\r\n return {\r\n items: [] as T[],\r\n total: 0,\r\n };\r\n });\r\n return {\r\n items: await this.#format(data?.items, this.tableOption.columns).finally(() => {\r\n this.loading = false;\r\n this.ref.detectChanges();\r\n }),\r\n total: data?.total || 0,\r\n };\r\n }\r\n if (force) {\r\n const { items } = this.tableOption;\r\n const results = items();\r\n let data: T[] = [];\r\n if (results instanceof Promise) {\r\n data = await results.catch(err => {\r\n this.notifyService.warning('Có lỗi xảy ra');\r\n console.error(err);\r\n return [];\r\n });\r\n } else {\r\n data = results;\r\n }\r\n if (!Array.isArray(data)) {\r\n this.notifyService.warning('Dữ liệu không phải là một mảng');\r\n data = [];\r\n }\r\n this.#localItems = await this.#format(data, this.tableOption.columns);\r\n }\r\n this.loading = false;\r\n this.ref.detectChanges();\r\n return this.#filterLocal(this.#localItems, filterReq);\r\n };\r\n\r\n #render = async (\r\n args: { items: SdTableItem<T>[]; total: number },\r\n scrollTop = true,\r\n additionArgs?: { fromSource?: 'PAGING' | 'RELOAD' }\r\n ) => {\r\n if (scrollTop) {\r\n this.scroll?.scrollTop();\r\n }\r\n this.items = args?.items || [];\r\n this.total = args?.total || 0;\r\n await this.tableOption?.reload?.onReload?.(this.items, additionArgs);\r\n this.isSelectAll = this.items.every(e => e.meta.selector?.isSelected);\r\n this.#updateSelectedItems();\r\n setTimeout(() => {\r\n this.table?.updateStickyColumnStyles();\r\n }, 0);\r\n };\r\n\r\n reload = async (force = true, scrollTop = true) => {\r\n this.externalFilter?.updateFilter?.();\r\n const data = await this.#load(this.#getFilter(), force);\r\n this.#render(data, scrollTop, { fromSource: 'RELOAD' });\r\n };\r\n\r\n #exportedItems = async (pageNumber = 0, pageSize = 1000) => {\r\n if (this.tableOption.export?.type === 'default' && this.tableOption.export?.items) {\r\n // const exportedItems = this.gridOption.export?.items(this.#filterExportInfo(pageNumber, pageSize));\r\n let result = this.tableOption.export?.items(this.#filterExportInfo(pageNumber, pageSize));\r\n if (Array.isArray(result)) {\r\n return result;\r\n }\r\n if (isObservable(result)) {\r\n result = firstValueFrom(result) as any;\r\n }\r\n if (isObservable(result)) {\r\n result = firstValueFrom(result) as any;\r\n }\r\n return await result;\r\n } else {\r\n const filterInfo = this.#filterExportInfo(pageNumber, pageSize);\r\n if (this.tableOption.type === 'server') {\r\n const result = this.tableOption.items(filterInfo);\r\n return await result;\r\n } else {\r\n let exportedItems: any[] = [];\r\n if (typeof this.tableOption.items === 'function') {\r\n const results = this.tableOption.items();\r\n if (results instanceof Promise) {\r\n exportedItems = await results;\r\n } else {\r\n exportedItems = results;\r\n }\r\n } else {\r\n exportedItems = this.tableOption.items;\r\n }\r\n return this.#filterLocal(exportedItems, filterInfo);\r\n }\r\n }\r\n };\r\n\r\n #allColumns = (): SdTableColumn[] => {\r\n const columns: SdTableColumn[] = [];\r\n this.tableOption.columns\r\n .filter(e => !e.export?.disabled)\r\n .forEach(column => {\r\n if (column.type === 'children') {\r\n column.children\r\n ?.filter(e => !e.export?.disabled)\r\n .forEach(childColumn => {\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n columns.push(column);\r\n });\r\n return columns;\r\n };\r\n\r\n #allExportedColumns = (): SdTableOptionExportColumn[] => {\r\n if (this.tableOption.export?.type !== 'default') {\r\n return [];\r\n }\r\n return this.tableOption.export?.columns?.filter(e => !e.export?.disabled) || [];\r\n };\r\n\r\n onExport = async (args?: { columns?: SdExcelColumn[]; isCSV?: boolean }) => {\r\n if (this.tableOption.export?.type !== 'default') {\r\n return;\r\n }\r\n const { isCSV } = { ...args };\r\n try {\r\n const columns = this.#getExportColumns(args?.columns);\r\n const pageSize = this.tableOption?.export?.maxItemsPerRequest || 1000;\r\n const batch = this.tableOption?.export?.batch || 1;\r\n let total = this.total;\r\n let pageNumber = 0;\r\n let exportItems: any[] = [];\r\n this.exporting = true;\r\n const items: any[] = [];\r\n let promises: Promise<\r\n | any[]\r\n | {\r\n items: any[];\r\n total: number;\r\n }\r\n >[] = [];\r\n const handleData = async () => {\r\n const results = await Promise.all(promises);\r\n promises = [];\r\n exportItems = [];\r\n for (const result of results) {\r\n if ('items' in result) {\r\n exportItems = [...exportItems, ...result.items];\r\n total = result.total;\r\n } else {\r\n exportItems = [...exportItems, ...result];\r\n }\r\n }\r\n if (this.tableOption.export?.type === 'default' && this.tableOption.export?.mapping) {\r\n const results = this.tableOption.export.mapping(exportItems);\r\n if (results instanceof Promise) {\r\n exportItems = await results;\r\n } else {\r\n exportItems = results;\r\n }\r\n }\r\n const totalPage = total! / pageSize;\r\n const percent = Math.round(((pageNumber - 1) * 100.0) / totalPage);\r\n this.exportTitle = `Exporting...${percent}%`;\r\n const allColumns = this.#allColumns();\r\n const allExportedColumns = this.#allExportedColumns();\r\n for (const item of exportItems) {\r\n const obj: any = {};\r\n const handle = async (exportColumn: SdExcelColumn) => {\r\n obj[exportColumn.field] = item[exportColumn.field];\r\n const column = allColumns.find(e => e.field === exportColumn.field);\r\n const exportedColumn = allExportedColumns.find(e => e.field === exportColumn.field);\r\n if (exportedColumn?.transform) {\r\n obj[exportedColumn.field] = exportedColumn.transform(item[exportedColumn.field], item);\r\n return;\r\n }\r\n if (!column) {\r\n return;\r\n }\r\n if (column.type === 'children') {\r\n column?.children.forEach(childColumn => handle(childColumn));\r\n return;\r\n }\r\n if (!columns.some(e => e.field === column.field)) {\r\n return;\r\n }\r\n if (column.transform) {\r\n const transform = column.transform(item[column.field], item, {\r\n isExport: true,\r\n });\r\n if (transform instanceof Promise) {\r\n obj[column.field] = await transform;\r\n } else {\r\n obj[column.field] = transform;\r\n }\r\n obj[column.field] = obj[column.field] ?? '';\r\n } else if (item[column.field] === undefined || item[column.field] === null || item[column.field] === '') {\r\n obj[column.field] = '';\r\n } else if (column.type === 'string' || column.type === 'number') {\r\n // Nếu cell là string hoặc number thì gán bằng chính nó\r\n obj[column.field] = item[column.field];\r\n } else if (column.type === 'boolean') {\r\n // Nếu là bool thì gán bằng giá trị trueValue và falseValue (nếu có), mặc định là TRUE/FALSE\r\n if (item[column.field]) {\r\n obj[column.field] = column.option?.displayOnTrue || 'True';\r\n } else if (obj[column.field] !== undefined && obj[column.field] !== null) {\r\n obj[column.field] = column.option?.displayOnFalse || 'False';\r\n }\r\n } else if (column.type === 'date') {\r\n const date = item[column.field];\r\n // Nếu là date thì convert theo đúng format ISO\r\n obj[column.field] = DateUtilities.toFormat(date, 'yyyy/MM/dd');\r\n } else if (column.type === 'datetime') {\r\n const date = item[column.field];\r\n // Nếu là datetime thì convert theo đúng format\r\n obj[column.field] = DateUtilities.toFormat(date, 'yyyy/MM/dd HH:mm:ss');\r\n } else if (column.type === 'time') {\r\n const date = item[column.field];\r\n // Nếu là time thì convert theo đúng format\r\n obj[column.field] = DateUtilities.toFormat(date, 'HH:mm:ss');\r\n } else if (column.type === 'values' || column.type === 'lazy-values') {\r\n const value = item[column.field];\r\n if (column.type === 'lazy-values' && typeof column.option.mapValue === 'function') {\r\n const val = column.option.mapValue(value, item);\r\n const vals = (Array.isArray(val) ? val : [val]).filter(e => !!e?.toString());\r\n obj[column.field] = vals\r\n .map(val => this.#cacheObjValues[column.field]?.[val]?.[column.option.displayField as any] || val)\r\n ?.join(', ');\r\n } else {\r\n const vals = (Array.isArray(value) ? value : [value]).filter(e => !!e?.toString());\r\n obj[column.field] = vals\r\n .map(val => this.#cacheObjValues[column.field]?.[val]?.[column.option.displayField as any] || val)\r\n ?.join(', ');\r\n }\r\n } else {\r\n obj[column.field] = item[column.field];\r\n }\r\n };\r\n // this.gridOption.columns.forEach(handle);\r\n for (const exportColumn of columns) {\r\n await handle(exportColumn);\r\n }\r\n items.push(obj);\r\n }\r\n };\r\n while (pageNumber * pageSize < total!) {\r\n promises.push(this.#exportedItems(pageNumber, pageSize));\r\n pageNumber++;\r\n if (promises.length < batch) {\r\n continue;\r\n }\r\n await handleData();\r\n }\r\n if (promises.length > 0) {\r\n await handleData();\r\n }\r\n // TODO: Export by template\r\n // if (file?.filePath) {\r\n // await this.exportService.exportByTemplate({\r\n // filePath: file.filePath,\r\n // fileName: file.fileName,\r\n // columns,\r\n // items,\r\n // });\r\n // return;\r\n // }\r\n if (isCSV) {\r\n await this.excelService.exportCSV({\r\n columns,\r\n items,\r\n fileName: this.tableOption?.export?.fileName,\r\n });\r\n return;\r\n }\r\n const sheets: SdExcelSheet[] = [];\r\n if (Array.isArray(this.tableOption?.export?.sheets)) {\r\n for (const sheet of this.tableOption.export.sheets) {\r\n if (sheet.name && sheet.items && sheet.headers) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n headers: sheet.headers,\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n headers: sheet.headers,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n await this.excelService.export({\r\n columns,\r\n items,\r\n fileName: this.tableOption?.export?.fileName,\r\n sheets,\r\n });\r\n return;\r\n } finally {\r\n this.exporting = false;\r\n this.exportTitle = `Export`;\r\n this.ref.detectChanges();\r\n }\r\n };\r\n\r\n #getExportColumns = (columns?: SdExcelColumn[]) => {\r\n let tableColumns: SdExcelColumn[] = [];\r\n // Lấy column từ option\r\n this.tableOption.columns\r\n .filter(e => !e.export?.disabled)\r\n .forEach(column => {\r\n if (column.type === 'children') {\r\n column.children\r\n ?.filter(e => !e.export?.disabled)\r\n .forEach(childColumn => {\r\n tableColumns.push(childColumn);\r\n });\r\n return;\r\n }\r\n tableColumns.push({\r\n field: column.field,\r\n title: column.title,\r\n description: column.description,\r\n width: column.width,\r\n });\r\n });\r\n // Lấy columns từ configuration\r\n if (this.configuration) {\r\n const columns = [...tableColumns];\r\n const { firstColumns, secondColumns } = this.configuration;\r\n const displayColumns: SdTableColumn[] = [...firstColumns, ...secondColumns].reduce<SdTableColumn[]>((first, next) => {\r\n const column = this.tableOption.columns.find(e => e.field === next.field);\r\n if (!column) {\r\n return first;\r\n }\r\n if (column.type !== 'children') {\r\n return [...first, column];\r\n }\r\n const children = column.children;\r\n return [...first, ...children];\r\n }, []);\r\n tableColumns = displayColumns\r\n .map(e => ({\r\n ...e,\r\n data: columns.find(e1 => e1.field === e.field),\r\n }))\r\n .filter(e => !!e.data)\r\n .map(e => e.data!);\r\n }\r\n // Chỉ lấy các columns được thiết lập\r\n const columnFields = columns?.map(e => e.field) || [];\r\n if (this.tableOption.export?.type === 'default') {\r\n return [...tableColumns, ...(this.tableOption.export?.columns?.filter(e => !e.export?.disabled) || [])].filter(\r\n column => !columnFields?.length || columnFields.includes(column.field)\r\n );\r\n } else {\r\n return tableColumns.filter(column => !columnFields?.length || columnFields.includes(column.field));\r\n }\r\n };\r\n\r\n exportExcel = () => {\r\n this.onExport();\r\n };\r\n\r\n exportCSV = () => {\r\n this.onExport({ isCSV: true });\r\n };\r\n\r\n exportCustom = () => {\r\n if (this.tableOption.export?.type === 'custom') {\r\n this.exporting = true;\r\n this.tableOption.export\r\n .onExport(this.#getFilter())\r\n .catch(err => {\r\n console.error(err);\r\n throw err;\r\n })\r\n .finally(() => {\r\n this.exporting = false;\r\n });\r\n }\r\n };\r\n\r\n onFilterChange = () => {\r\n this.externalFilter?.updateFilter?.();\r\n this.filterRegister.value.set({\r\n columnOperator: this.columnOperator || {},\r\n columnFilter: this.columnFilter,\r\n });\r\n };\r\n\r\n onExpand = async (rowData: SdTableItem<T>) => {\r\n if (this.tableOption.expand?.always) {\r\n return;\r\n }\r\n if (rowData.meta.expand?.isExpanding) {\r\n return;\r\n }\r\n if (rowData.meta.expand?.isExpanded) {\r\n rowData.meta.expand.isExpanded = false;\r\n return;\r\n }\r\n const data = this.tableOption?.expand?.onExpand?.(rowData.data);\r\n if (!this.tableOption.expand?.multiple) {\r\n this.items.forEach(item => (item.meta.expand!.isExpanding = item.meta.expand!.isExpanded = false));\r\n }\r\n if (data instanceof Promise) {\r\n rowData.meta.expand!.isExpanding = true;\r\n data\r\n .then(res => {\r\n rowData.meta.expand!.data = res;\r\n rowData.meta.expand!.isExpanded = true;\r\n })\r\n .finally(() => (rowData.meta.expand!.isExpanding = false));\r\n } else {\r\n rowData.meta.expand!.data = data;\r\n rowData.meta.expand!.isExpanded = true;\r\n }\r\n };\r\n\r\n onSelect = (rowData: SdTableItem<T>) => {\r\n if (rowData.meta.group?.items?.length) {\r\n rowData.meta.group.items.forEach(e => (e.meta.selector!.isSelected = rowData.meta.selector!.isSelected));\r\n this.tableOption.selector?.onSelect?.(\r\n rowData.data,\r\n this.items.filter(e => e.meta.selector!.isSelected).map(e => e.data)\r\n );\r\n this.isSelectAll = this.items.every(e => e.meta.selector!.isSelected);\r\n this.#updateSelectedItems();\r\n } else {\r\n if (this.tableOption.selector?.single) {\r\n this.items.filter(e => e !== rowData).forEach(e => (e.meta.selector!.isSelected = false));\r\n this.#updateSelectedItems();\r\n return;\r\n }\r\n this.tableOption.selector?.onSelect?.(\r\n rowData.data,\r\n this.items.filter(e => e.meta.selector!.isSelected).map(e => e.data)\r\n );\r\n this.isSelectAll = this.items.every(e => e.meta.selector!.isSelected);\r\n this.#updateSelectedItems();\r\n }\r\n };\r\n\r\n onSelectAll = () => {\r\n this.items?.forEach(e => {\r\n if (e.meta.selector!.selectable && (!this.tableOption?.selector?.actions?.length || e.meta.selector!.actions?.length)) {\r\n e.meta.selector!.isSelected = this.isSelectAll;\r\n }\r\n });\r\n this.tableOption.selector?.onSelectAll?.(this.items.filter(e => e.meta.selector!.isSelected).map(e => e.data));\r\n this.#updateSelectedItems();\r\n };\r\n\r\n onClearSelection = (items?: SdTableItem<T>[]) => {\r\n items = items || this.items;\r\n this.isSelectAll = false;\r\n items?.forEach(e => (e.meta.selector!.isSelected = false));\r\n this.#updateSelectedItems();\r\n };\r\n\r\n #updateSelectedItems = () => {\r\n this.selectedTableItems = this.items.filter(item => item.meta.selector!.isSelected);\r\n this.ref.detectChanges();\r\n };\r\n\r\n clearFilter = () => {\r\n this.filterRegister.value.remove();\r\n };\r\n\r\n setFilter = (args: { columnFilter?: Record<string, any>; externalFilter?: Record<string, any> }) => {\r\n const { columnFilter, externalFilter } = args || {};\r\n if (columnFilter) {\r\n this.columnFilter = columnFilter;\r\n }\r\n this.filterRegister.value.set({\r\n columnFilter,\r\n externalFilter,\r\n });\r\n };\r\n\r\n get dataItems(): T[] {\r\n return this.items.map(item => item.data);\r\n }\r\n\r\n get selectedItems(): T[] {\r\n return this.selectedTableItems.map(item => item.data);\r\n }\r\n\r\n detectChanges = () => this.ref.detectChanges();\r\n\r\n #loadValues = async (columns: SdTableColumn[]) => {\r\n const promises: Promise<{\r\n key: string;\r\n valueField: string;\r\n displayField: string;\r\n data: any[];\r\n }>[] = [];\r\n for (const column of columns) {\r\n if (column.type === 'values' && !this.cacheValues[column.field]) {\r\n if (typeof column.option.items === 'function') {\r\n promises.push(\r\n column.option\r\n .items()\r\n .then(data => ({\r\n key: column.field,\r\n valueField: column.option.valueField,\r\n displayField: column.option.displayField,\r\n data: Array.isArray(data) ? data : [],\r\n }))\r\n .catch(err => {\r\n console.error(err);\r\n return {\r\n key: column.field,\r\n valueField: column.option.valueField,\r\n displayField: column.option.displayField,\r\n data: [],\r\n };\r\n })\r\n );\r\n } else {\r\n this.cacheValues[column.field] = column.option.items.map(e => ({\r\n [column.option.valueField]: e?.[column.option.valueField],\r\n [column.option.displayField]: e?.[column.option.displayField],\r\n }));\r\n this.#cacheObjValues[column.field] = ArrayUtilities.toObject(column.option.valueField, this.cacheValues[column.field]);\r\n }\r\n }\r\n }\r\n if (promises.length) {\r\n const results = await Promise.all(promises);\r\n for (const result of results) {\r\n this.cacheValues[result.key] = result.data.map(e => ({\r\n [result.valueField]: e?.[result.valueField],\r\n [result.displayField]: e?.[result.displayField],\r\n }));\r\n this.#cacheObjValues[result.key] = ArrayUtilities.toObject(result.valueField, this.cacheValues[result.key]);\r\n }\r\n }\r\n };\r\n\r\n #format = async <T = any>(rawItems: T[], columns: SdTableColumn[]) => {\r\n const items = rawItems.map(MapToSdTableItem);\r\n const execute = async (column: SdTableColumnNormal) => {\r\n // Clickable\r\n const { field, click, tooltip, htmlTemplate, transform } = column;\r\n if (!transform && !htmlTemplate && column.type === 'lazy-values' && typeof column.option.views === 'function') {\r\n const {\r\n option: { views, mapValue },\r\n } = column;\r\n this.#cacheObjValues[field] = this.#cacheObjValues[field] || {};\r\n const values = ArrayUtilities.distinct(\r\n items\r\n .map(item => {\r\n if (typeof mapValue === 'function') {\r\n return mapValue((item.data as any)?.[field], item.data);\r\n }\r\n return (item.data as any)?.[field];\r\n })\r\n .filter(val => !!val?.toString())\r\n .reduce<string[]>((current, next) => [...current, ...(Array.isArray(next) ? next : [next])], [])\r\n .filter(val => !Object.keys(this.#cacheObjValues[field]).includes(val))\r\n );\r\n\r\n if (values.length) {\r\n const lazyItems: any[] = (\r\n await views(values).catch((err: any) => {\r\n console.error(err);\r\n return [];\r\n })\r\n )\r\n .filter((item: any) => values.includes(item?.[column.option.valueField]))\r\n .map((e: any) => ({\r\n [column.option.valueField]: e?.[column.option.valueField],\r\n [column.option.displayField]: e?.[column.option.displayField],\r\n }));\r\n Object.assign(this.#cacheObjValues[field], ArrayUtilities.toObject(column.option.valueField, lazyItems) || {});\r\n }\r\n }\r\n for (const item of items) {\r\n const rowData = item.data;\r\n const value = (rowData as any)?.[field];\r\n item.meta.display[field] = {\r\n badge: undefined,\r\n cellStyle: column.align === 'right' ? { 'text-align': 'right!important' } : undefined,\r\n data: value,\r\n isHtml: false,\r\n tooltip: typeof tooltip === 'function' ? tooltip(value, rowData) : undefined,\r\n click: typeof click === 'function' ? () => click(value, rowData) : undefined,\r\n };\r\n const display = item.meta.display[field];\r\n // Display\r\n if (typeof htmlTemplate === 'function') {\r\n display.isHtml = true;\r\n display.data = htmlTemplate(value, rowData);\r\n } else if (typeof transform === 'function') {\r\n const newValue = transform(value, rowData);\r\n if (newValue instanceof Promise) {\r\n display.data = await newValue;\r\n } else {\r\n display.data = newValue;\r\n }\r\n } else {\r\n if (column.type === 'date' || column.type === 'datetime' || column.type === 'time') {\r\n const date = DateUtilities.toFormat(value, 'dd/MM/yyyy');\r\n let time = DateUtilities.toFormat(value, 'HH:mm:ss');\r\n // if (time?.endsWith('00')) {\r\n // time = DateUtilities.toFormat(value, 'HH:mm');\r\n // }\r\n if (column.type === 'date' || column.type === 'datetime') {\r\n if (column.type === 'datetime') {\r\n display.isHtml = true;\r\n display.data = time && date ? `<div class=\"T14R\">${date}<span class=\"T14R text-black400 ml-4\">${time}</span></div>` : '';\r\n } else {\r\n display.data = date;\r\n }\r\n }\r\n if (column.type === 'time') {\r\n display.data = time;\r\n }\r\n }\r\n if (column.type === 'values' || column.type === 'lazy-values') {\r\n if (column.type === 'lazy-values' && typeof column.option.mapValue === 'function') {\r\n const val = column.option.mapValue(value, rowData);\r\n const vals = (Array.isArray(val) ? val : [val]).filter(e => !!e?.toString());\r\n display.data = vals.map(val => this.#cacheObjValues[field]?.[val]?.[column.option.displayField as any] || val)?.join(', ');\r\n } else {\r\n const vals = (Array.isArray(value) ? value : [value]).filter(e => !!e?.toString());\r\n display.data = vals.map(val => this.#cacheObjValues[field]?.[val]?.[column.option.displayField as any] || val)?.join(', ');\r\n }\r\n }\r\n if (column.type === 'number' && NumberUtilities.isNumber(value)) {\r\n display.data = this.formatNumberPipe.transform(value);\r\n }\r\n if (column.type === 'boolean') {\r\n const { option } = column;\r\n if (value !== undefined && value !== null && value !== '') {\r\n display.data = value === true ? option?.displayOnTrue || 'True' : option?.displayOnFalse || 'False';\r\n } else {\r\n display.data = '';\r\n }\r\n }\r\n // Badge\r\n if (column.useBadge) {\r\n const badge = column.useBadge(value, rowData);\r\n if (badge) {\r\n display.badge = {\r\n type: badge.type ?? 'round',\r\n color: badge.color,\r\n icon: badge.icon,\r\n };\r\n display.data = badge.title ?? display.data;\r\n }\r\n } else if ((column.type === 'string' || column.type === 'number' || column.type === 'values') && column.badge) {\r\n display.badge = {\r\n type: !column?.badgeType ? 'icon' : column.badgeType,\r\n color: column.badge(value, rowData),\r\n icon: column.badgeIcon?.(value, rowData),\r\n };\r\n } else if (column.type === 'boolean') {\r\n display.badge = {\r\n type: 'icon',\r\n color: value ? 'success' : 'error',\r\n icon: null,\r\n };\r\n }\r\n\r\n if (display.data === null || display.data === undefined || display.data === '') {\r\n display.data = SD_EMPTY_STR;\r\n display.badge = undefined;\r\n }\r\n }\r\n }\r\n };\r\n for (const column of columns.filter(e => !e.hidden)) {\r\n if (column.type === 'children') {\r\n for (const childColumn of column.children?.filter(e => !e.hidden) || []) {\r\n await execute(childColumn);\r\n }\r\n } else {\r\n await execute(column);\r\n }\r\n }\r\n return items;\r\n };\r\n\r\n onOperatorChange = (column: SdTableColumn, operator: SdOperator) => {\r\n this.tableOption?.filter?.operatorChange?.(column, operator);\r\n };\r\n\r\n trackBy = (index: number, item: SdTableItem) => {\r\n return item.meta.id;\r\n };\r\n}\r\n","@if (configuration) {\r\n @if (!tableOption.filter?.disabled && !!tableOption.filter?.externalFilters?.length && filterRegister) {\r\n <external-filter\r\n class=\"mb-16\"\r\n [autoId]=\"autoId\"\r\n [filterRegister]=\"filterRegister\"\r\n [filter]=\"tableOption.filter!\"\r\n [externalFilters]=\"tableOption.filter?.externalFilters!\">\r\n </external-filter>\r\n }\r\n @let groupedItems = items | sdGroup: tableOption;\r\n <ng-content select=\"[sdTableTop]\"></ng-content>\r\n <div class=\"c-container\">\r\n @if (loading) {\r\n <div class=\"c-loading\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n }\r\n <div class=\"c-table\" sdScroll [style.max-height]=\"tableOption.style?.maxHeight\" [style.min-height]=\"tableOption.style?.minHeight\">\r\n <table\r\n mat-table\r\n [dataSource]=\"groupedItems\"\r\n [trackBy]=\"trackBy\"\r\n matSort\r\n [matSortDisabled]=\"!tableOption.sort?.enable\"\r\n multiTemplateDataRows>\r\n <ng-container matColumnDef=\"sdSubInformation\" sticky>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\" [attr.colspan]=\"configuration.displayedColumns.length\">\r\n <ng-container *ngIf=\"sdSubInformation?.templateRef\">\r\n <ng-container *ngIf=\"tableOption.expand?.always; else useExpandCollapse\">\r\n <ng-container *ngTemplateOutlet=\"sdSubInformation?.templateRef!; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n <ng-template #useExpandCollapse>\r\n <div [@detailExpand]=\"item.isExpanded ? 'expanded' : 'collapsed'\">\r\n <ng-container *ngIf=\"item.isExpanded\">\r\n <ng-container *ngTemplateOutlet=\"sdSubInformation?.templateRef!; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSubInformationAction\" stickyEnd>\r\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 1px\" [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n @if (!element.isExpanding && !tableOption.expand?.always) {\r\n <button\r\n mat-icon-button\r\n aria-label=\"Expand & Collapse\"\r\n (click)=\"onExpand(element)\">\r\n @if (!element.isExpanded) {\r\n <mat-icon>expand_more</mat-icon>\r\n } @else {\r\n <mat-icon>expand_less</mat-icon>\r\n }\r\n </button>\r\n }\r\n @if (element.isExpanding) {\r\n <div class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n }\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSelection\" sticky>\r\n <th class=\"text-center p-0\" mat-header-cell *matHeaderCellDef [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n @let visible = items | selectionVisibleSelectAll: tableOption.selector | async;\r\n @if (visible) {\r\n <mat-checkbox\r\n class=\"c-selection px-12\"\r\n style=\"width: 50px\"\r\n color=\"primary\"\r\n [(ngModel)]=\"isSelectAll\"\r\n (change)=\"onSelectAll()\">\r\n </mat-checkbox>\r\n }\r\n </th>\r\n <td class=\"text-center p-0\" mat-cell *matCellDef=\"let item\">\r\n @let visible = item | selectionVisible: tableOption.selector;\r\n @if (visible) {\r\n <mat-checkbox\r\n class=\"c-selection px-12\"\r\n style=\"width: 50px\"\r\n color=\"primary\"\r\n [(ngModel)]=\"item.meta.selector.isSelected\"\r\n (change)=\"onSelect(item)\"\r\n [disabled]=\"selectedTableItems | selectionDisabled: item : tableOption.selector!\">\r\n </mat-checkbox>\r\n }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdCommand\" sticky>\r\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 50px\" [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td class=\"px-8\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-command\r\n [autoId]=\"autoId\"\r\n [commands]=\"tableOption.commands\"\r\n [item]=\"item\"\r\n [itemIndex]=\"groupedItems.indexOf(item)\"></sd-desktop-command>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdGroup\">\r\n <th mat-header-cell *matHeaderCellDef class=\"px-8 py-8\" [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\" [attr.colspan]=\"!item?.sdGroup ? 1 : configuration.displayedColumns.length\">\r\n <div [innerHtml]=\"item?.sdGroup?.htmlTemplate | sdSafeHtml\"></div>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n @for (column of configuration.firstColumns; track column.field) {\r\n <ng-container [matColumnDef]=\"column.field\" [sticky]=\"configuration.fixedColumn[column.field]\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"px-8 py-8 c-th\"\r\n [style.width]=\"column.width\"\r\n [style.min-width]=\"column.minWidth || column.width\"\r\n [style.max-width]=\"column.maxWidth\"\r\n [attr.rowspan]=\"configuration.multipleHeader && column.type !== 'children' ? 2 : 1\"\r\n [attr.colspan]=\"column.type === 'children' ? column.children.length : 1\">\r\n <div>\r\n <!-- Nếu là column children thì không có sort -->\r\n @if (column.type === 'children') {\r\n <div\r\n aria-hidden=\"true\"\r\n class=\"c-header-title\"\r\n [class.justify-content-end]=\"column.align === 'right'\"\r\n [class.text-right]=\"column.align === 'right'\"\r\n [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n } @else {\r\n <div\r\n aria-hidden=\"true\"\r\n mat-sort-header\r\n class=\"c-header-title\"\r\n [class.justify-content-end]=\"column.align === 'right'\"\r\n [class.text-right]=\"column.align === 'right'\"\r\n [disabled]=\"!column.sortable\"\r\n [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n @let hideInlineFilter = tableOption.filter?.disabled \r\n || tableOption.filter?.hideInlineFilter === true \r\n || (tableOption.filter?.hideInlineFilter === 'auto' && !isFiltered && total! <= 10);\r\n @if (!hideInlineFilter) {\r\n <column-filter\r\n [autoId]=\"autoId\"\r\n [value]=\"columnFilter?.[column.field!]!\"\r\n [(inlineOperator)]=\"columnOperator[column.field]\"\r\n (operatorChange)=\"onOperatorChange(column, $event)\"\r\n [columnFilter]=\"columnFilter!\"\r\n [cacheValues]=\"cacheValues\"\r\n [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\">\r\n </column-filter>\r\n }\r\n }\r\n </div>\r\n </th>\r\n <td\r\n class=\"c-td px-0\"\r\n [class.d-none]=\"column.type === 'children'\"\r\n mat-cell\r\n *matCellDef=\"let item\"\r\n [sdHoverCopy]=\"item[column.field]\"\r\n [sdHoverCopyDisabled]=\"!column.copiable\">\r\n @if (column.type !== 'children' && !item?.sdGroup) {\r\n <sd-desktop-cell [autoId]=\"autoId\" class=\"d-block px-8\" [value]=\"item[column.field]\" [column]=\"column\" [item]=\"item\" [cellDef]=\"cellDef\">\r\n </sd-desktop-cell>\r\n }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef>\r\n <ng-container *ngIf=\"footerDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"footerDef[column.field].templateRef; context: { items: items, column: column }\">\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n }\r\n @for (column of configuration.secondColumns; track column.field) {\r\n <ng-container [matColumnDef]=\"column.field\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n mat-sort-header\r\n class=\"c-th px-8\"\r\n [style.width]=\"column.width\"\r\n [style.min-width]=\"column.minWidth || column.width\"\r\n [style.max-width]=\"column.maxWidth\">\r\n <div>\r\n <div\r\n aria-hidden=\"true\"\r\n mat-sort-header\r\n class=\"c-header-title\"\r\n [class.justify-content-end]=\"column.align === 'right'\"\r\n [class.text-right]=\"column.align === 'right'\"\r\n [disabled]=\"!column.sortable\"\r\n [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n @if (!tableOption.filter?.disabled && !tableOption.filter?.hideInlineFilter && columnOperator) {\r\n <column-filter\r\n [autoId]=\"autoId\"\r\n [value]=\"columnFilter?.[column.field!]!\"\r\n [(inlineOperator)]=\"columnOperator[column.field]\"\r\n [columnFilter]=\"columnFilter!\"\r\n [cacheValues]=\"cacheValues\"\r\n [column]=\"column\"\r\n (operatorChange)=\"onOperatorChange(column, $event)\"\r\n (filterChange)=\"onFilterChange()\">\r\n </column-filter>\r\n }\r\n </div>\r\n </th>\r\n <td\r\n class=\"c-td px-0\"\r\n mat-cell\r\n *matCellDef=\"let item\"\r\n [sdHoverCopy]=\"item[column.field]\"\r\n [sdHoverCopyDisabled]=\"!column.copiable\">\r\n @if (column.type !== 'children') {\r\n <sd-desktop-cell [autoId]=\"autoId\" class=\"d-block px-8\" [value]=\"item[column.field]\" [column]=\"column\" [item]=\"item\" [cellDef]=\"cellDef\">\r\n </sd-desktop-cell>\r\n }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef>\r\n <ng-container *ngIf=\"footerDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"footerDef[column.field].templateRef; context: { items: items, column: column }\">\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n }\r\n <tr class=\"c-first-header\" mat-header-row *matHeaderRowDef=\"configuration.firstHeaders; sticky: true\"></tr>\r\n @if (!!configuration.secondHeaders.length) {\r\n <tr class=\"c-second-header\" mat-header-row *matHeaderRowDef=\"configuration.secondHeaders; sticky: true\"></tr>\r\n }\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: configuration.displayedColumns\"\r\n matRipple\r\n class=\"c-row\"\r\n [class.selected]=\"row.meta.selector.isSelected\"></tr>\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: ['sdSubInformation']\" class=\"c-detail-row\"></tr>\r\n @if (hasFooter && !!configuration.displayedFooters.length) {\r\n <tr mat-footer-row *matFooterRowDef=\"configuration.displayedFooters; sticky: true\"></tr>\r\n }\r\n </table>\r\n <!-- Đang loading thì không nên hiển thị no data/no result -->\r\n @if (!loading && !total) {\r\n <div class=\"c-no-data-row\">\r\n <!-- Cần phân biệt giữa chưa có dữ liệu (no data) và tìm kiếm không có kết quả (filter no result) để tường minh với người dùng -->\r\n @if (isFiltered) {\r\n @if (tableConfiguration?.images?.filterEmpty) {\r\n <img class=\"c-image\" [src]=\"tableConfiguration!.images!.filterEmpty\" alt=\"filter-empty\" />\r\n } @else {\r\n <img class=\"c-image c-filter-empty-image\" alt=\"filter-empty\" />\r\n }\r\n <div class=\"T16M\">Không có kết quả phù hợp</div>\r\n <div class=\"T16R text-secondary\">Vui lòng tìm kiếm hoặc lọc theo tiêu chí khác</div>\r\n } @else {\r\n @if (requireFiltered) {\r\n @if (tableConfiguration?.images?.filterRequired) {\r\n <img class=\"c-image\" [src]=\"tableConfiguration!.images!.filterRequired\" alt=\"filter-required\" />\r\n } @else {\r\n <img class=\"c-image c-filter-required-image\" alt=\"filter-required\" />\r\n }\r\n <div class=\"T16R text-secondary\">Vui lòng chọn bộ lọc để bắt đầu</div>\r\n } @else {\r\n @if (tableConfiguration?.images?.dataEmpty) {\r\n <img class=\"c-image\" [src]=\"tableConfiguration!.images!.dataEmpty\" alt=\"data-empty\" />\r\n } @else {\r\n <img class=\"c-image c-data-empty-image\" alt=\"data-empty\" />\r\n }\r\n <div class=\"T16R text-secondary\">Chưa có dữ liệu</div>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"c-paginator\">\r\n <div class=\"c-action\">\r\n <!-- <ng-container *sdMobile>\r\n <sd-button *ngIf=\"tableFilter\" class=\"mr-8\" [title]=\"'Filter'\" prefixIcon=\"filter_alt\" (click)=\"tableFilter.open()\" type=\"link\">\r\n </sd-button>\r\n </ng-container> -->\r\n <ng-container *sdDesktop>\r\n @if (tableOption.reload?.visible) {\r\n <sd-button class=\"mr-8\" title=\"Tải lại\" prefixIcon=\"refresh\" (click)=\"reload()\" [disabled]=\"!items.length\" type=\"link\">\r\n </sd-button>\r\n }\r\n </ng-container>\r\n @let export = tableOption.export;\r\n @if (export && items.length) {\r\n @if (export.type === 'custom') {\r\n <sd-button class=\"mr-8\" [title]=\"exportTitle\" prefixIcon=\"get_app\" (click)=\"exportCustom()\" type=\"link\"> </sd-button>\r\n } @else {\r\n @if (export.visible) {\r\n @if (exporting) {\r\n <sd-button class=\"mr-8\" [loading]=\"exporting\" [title]=\"exportTitle\" prefixIcon=\"get_app\" type=\"link\"> </sd-button>\r\n } @else {\r\n @if (export.visible === 'ALL' || !export.visible) {\r\n <sd-button class=\"mr-8\" [title]=\"exportTitle\" prefixIcon=\"get_app\" [matMenuTriggerFor]=\"menu\" type=\"link\"> </sd-button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=\"exportExcel()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> Xuất excel</span>\r\n </button>\r\n <button mat-menu-item (click)=\"exportCSV()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> Xuất CSV</span>\r\n </button>\r\n </mat-menu>\r\n } @else if (export.visible === 'EXCEL') {\r\n <sd-button class=\"mr-8\" [title]=\"exportTitle\" prefixIcon=\"get_app\" (click)=\"exportExcel()\" type=\"link\"> </sd-button>\r\n } @else if (export.visible === 'CSV') {\r\n <sd-button class=\"mr-8\" [title]=\"exportTitle\" prefixIcon=\"get_app\" (click)=\"exportCSV()\" type=\"link\"> </sd-button>\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n <ng-container *sdDesktop>\r\n @if (configComponent) {\r\n <sd-button class=\"mr-8\" [title]=\"'Thiết lập'\" prefixIcon=\"settings\" (click)=\"configComponent.open()\" type=\"link\"> </sd-button>\r\n }\r\n </ng-container>\r\n </div>\r\n <!-- Chỉ nên dùng class d-none để vẫn giữ element mat-paginator chứ không ẩn luôn -->\r\n @let hidePaginator = !tableOption.paginate?.pageSize || total === undefined || total <= tableOption.paginate?.pageSize!; \r\n <mat-paginator\r\n [class.d-none]=\"tableOption.paginate?.hidden || hidePaginator\"\r\n [length]=\"total\"\r\n [pageSize]=\"tableOption.paginate?.pageSize\"\r\n [pageSizeOptions]=\"tableOption.paginate?.pages!\"\r\n [showFirstLastButtons]=\"tableOption.paginate?.showFirstLastButtons\"\r\n [hidePageSize]=\"tableOption.paginate?.hidePageSize\"></mat-paginator>\r\n @if (!tableOption.paginate?.hidden && hidePaginator && total !== undefined && total > 0) {\r\n <div class=\"T14R pr-16\">Đang hiển thị: <span class=\"T14M ml-2\">1-{{total}}/{{total}}</span></div>\r\n }\r\n </div>\r\n </div>\r\n <selector-action [tableOption]=\"tableOption\" [selectedTableItems]=\"selectedTableItems\" (clear)=\"onClearSelection(groupedItems)\" />\r\n @if (tableOption.config?.visible) {\r\n <config [tableOption]=\"tableOption\" />\r\n }\r\n <!-- <sd-popup-export\r\n *ngIf=\"tableOption.export?.visible\"\r\n [configuration]=\"configuration\"\r\n [tableOption]=\"tableOption\"\r\n (export)=\"onExport($event)\"\r\n #sdPopupExport\r\n ></sd-popup-export> -->\r\n <!-- <sd-table-quick-action\r\n [tableOption]=\"tableOption\"\r\n [selectedTableItems]=\"selectedTableItems\"\r\n (clear)=\"onClearSelection(groupedItems)\"\r\n >\r\n </sd-table-quick-action>\r\n <sd-popup-configuration\r\n *ngIf=\"tableOption?.key && tableOption.config?.visible\"\r\n [tableOption]=\"tableOption\"\r\n >\r\n </sd-popup-configuration> -->\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Observable } from 'rxjs';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\r\nimport { TemplateRef } from '@angular/core';\r\nimport { SdSearch } from '@sd-angular/core/forms';\r\nimport { DateUtilities, SdOperator, SdOrder, SdPagingReq } from '@sd-angular/core/utilities';\r\n\r\nexport interface SdTableQuickFilter {\r\n code: string;\r\n columnFilter: Record<string, any>;\r\n externalFilter: Record<string, any>;\r\n}\r\n\r\nexport interface TableFilterConfiguration {\r\n // selectedQuickFilter: string;\r\n // quickFilters: SdGridMaterialQuickFilter[];\r\n // columnFilter?: Record<string, any>; // Giá trị filter column\r\n inlineExternal: Record<string, boolean>; // Ẩn hiện filter external\r\n // externalFilter?: Record<string, any>; // Giá trị filter external\r\n}\r\n\r\nexport interface TableFilterValue {\r\n columnOperator?: Record<string, SdOperator>;\r\n\r\n columnFilter?: Record<string, any>; // Giá trị filter column\r\n\r\n externalFilter?: Record<string, any>; // Giá trị filter external\r\n\r\n notReload?: boolean; // Để nhận biết là chỉ set giá trị, không trigger change\r\n\r\n filtered?: boolean; // Để nhận biết là có đang lọc hay không\r\n}\r\n\r\nexport interface SdTableFilterRequest<T = any> {\r\n columnOperator: Record<string, SdOperator>;\r\n rawColumnFilter: Record<keyof T, any>;\r\n rawExternalFilter: Record<string, any>;\r\n pageNumber: number;\r\n pageSize: number;\r\n orderBy?: string;\r\n orderDirection?: SdOrder['direction'];\r\n isExported?: boolean;\r\n visibledColumns?: SdTableColumn[];\r\n}\r\n\r\nexport interface SdTableOptionFilter<T = any> {\r\n /** Key định danh nếu muốn lưu cache */\r\n key?: string;\r\n\r\n /** Có bật cache giá trị filter hay không */\r\n cacheable?: boolean;\r\n\r\n /** Vô hiệu toàn bộ filter */\r\n disabled?: boolean;\r\n\r\n /** Ẩn tất cả inline filter (chỉ còn external), nếu chọn auto thì sẽ ẩn khi total row <= 10, phù hợp cho các màn detail có ít dữ liệu */\r\n hideInlineFilter?: boolean | 'auto';\r\n\r\n /** Hàm xử lý khi đổi Operator của filter column */\r\n operatorChange?: (column?: SdTableColumn, operator?: SdOperator) => void;\r\n\r\n /** Danh sách external filter */\r\n externalFilters?: SdTableExternalFilter[];\r\n\r\n /** Số lượng cột external filter trên mỗi hàng (mặc định: 6) */\r\n externalFilterPerRow?: 4 | 6;\r\n\r\n /** Chế độ thủ công: phải nhấn nút áp dụng mới gửi filter */\r\n manualFilter?: boolean;\r\n\r\n /** Có thể thu gọn bộ lọc hay không */\r\n collapsable?: boolean;\r\n\r\n /** Ẩn toolbar (xóa bộ lọc, thiết lập) của external filter, khi có ít external filter user không cần chức năng này */\r\n hideExternalFilterToolbar?: boolean;\r\n\r\n /** Hàm xử lý khi trigger clear filter từ external filter */\r\n onClearFilter?: () => void;\r\n}\r\n\r\nexport const SdConvertToPagingReq = (\r\n filterRequest: SdTableFilterRequest,\r\n args: {\r\n columns?: SdTableColumn[];\r\n externalFilters?: SdTableExternalFilter[];\r\n fieldMapping?: Record<string, string>;\r\n orders?: SdOrder[];\r\n }\r\n): SdPagingReq => {\r\n const { externalFilters, columns, fieldMapping } = args;\r\n const req: SdPagingReq = {\r\n filters: [],\r\n orders: args?.orders || [],\r\n pageNumber: filterRequest.pageNumber,\r\n pageSize: filterRequest.pageSize,\r\n };\r\n const { filters } = req;\r\n const { rawExternalFilter, rawColumnFilter, columnOperator, orderBy, orderDirection } = filterRequest;\r\n // Xử lý external filter\r\n for (const externalFilter of externalFilters || []) {\r\n const value = rawExternalFilter?.[externalFilter.field];\r\n const field = fieldMapping?.[externalFilter.field] || externalFilter.field;\r\n // Nếu có giá trị thì mới xử lý filter\r\n if (value !== undefined && value !== null && value !== '') {\r\n if (externalFilter.type === 'string') {\r\n filters!.push({\r\n field,\r\n operator: externalFilter.defaultOperator || 'CONTAIN',\r\n data: value,\r\n });\r\n } else if (externalFilter.type === 'boolean') {\r\n filters!.push({\r\n field,\r\n operator: 'EQUAL',\r\n data: value === true || value === 1 || value === 'true' || value === '1',\r\n });\r\n } else if (externalFilter.type === 'date') {\r\n if (typeof value === 'object' && 'from' in value && 'to' in value) {\r\n if (value?.from) {\r\n filters!.push({\r\n field,\r\n operator: 'GREATER_OR_EQUAL',\r\n data: DateUtilities.begin(value?.from)!.toISOString(),\r\n });\r\n }\r\n if (value?.to) {\r\n filters!.push({\r\n field,\r\n operator: 'LESS_THAN',\r\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\r\n });\r\n }\r\n } else {\r\n if (DateUtilities.isDate(value)) {\r\n if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {\r\n filters!.push({\r\n field,\r\n operator: 'GREATER_OR_EQUAL',\r\n data: DateUtilities.begin(value)!.toISOString(),\r\n });\r\n }\r\n if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {\r\n filters!.push({\r\n field,\r\n operator: 'LESS_THAN',\r\n data: DateUtilities.begin(DateUtilities.addDays(value, 1))!.toISOString(),\r\n });\r\n }\r\n }\r\n }\r\n } else {\r\n if (Array.isArray(value)) {\r\n if (value.length) {\r\n filters!.push({\r\n field,\r\n operator: 'IN',\r\n data: value,\r\n });\r\n }\r\n } else {\r\n filters!.push({\r\n field,\r\n operator: externalFilter.defaultOperator || 'EQUAL',\r\n data: value,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n // Xử lý column filter\r\n for (const column of columns || []) {\r\n const value = rawColumnFilter?.[column.field];\r\n const field = fieldMapping?.[column.field] || column.field;\r\n const operator = columnOperator?.[column.field] || column.filter?.operator?.default;\r\n // Nếu có giá trị thì mới xử lý filter\r\n if (value !== undefined && value !== null && value !== '') {\r\n if (column.type === 'string') {\r\n filters!.push({\r\n field,\r\n operator: operator || 'CONTAIN',\r\n data: value,\r\n });\r\n } else if (column.type === 'boolean') {\r\n filters!.push({\r\n field,\r\n operator: 'EQUAL',\r\n data: value === true || value === 1 || value === 'true' || value === '1',\r\n });\r\n } else if (column.type === 'date' || column.type === 'datetime') {\r\n console.log(value);\r\n if (typeof value === 'object' && 'from' in value && 'to' in value) {\r\n if (value?.from && value?.to) {\r\n filters!.push({\r\n field,\r\n operator: 'BETWEEN',\r\n data: {\r\n from: DateUtilities.begin(value?.from)!.toISOString(),\r\n to: DateUtilities.end(value?.to)!.toISOString(),\r\n },\r\n });\r\n } else if (value?.from) {\r\n filters!.push({\r\n field,\r\n operator: 'GREATER_OR_EQUAL',\r\n data: DateUtilities.begin(value?.from)!.toISOString(),\r\n });\r\n } else if (value?.to) {\r\n filters!.push({\r\n field,\r\n operator: 'LESS_THAN',\r\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\r\n });\r\n }\r\n } else {\r\n if (DateUtilities.isDate(value)) {\r\n filters!.push({\r\n field,\r\n operator: 'BETWEEN',\r\n data: {\r\n from: DateUtilities.begin(value)!.toISOString(),\r\n to: DateUtilities.end(value)!.toISOString(),\r\n },\r\n });\r\n }\r\n }\r\n } else {\r\n if (Array.isArray(value)) {\r\n if (value.length) {\r\n filters!.push({\r\n field,\r\n operator: 'IN',\r\n data: value,\r\n });\r\n }\r\n } else {\r\n filters!.push({\r\n field,\r\n operator: operator || 'EQUAL',\r\n data: value,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n // Xử lý orders\r\n if (orderBy && orderDirection) {\r\n req.orders!.push({\r\n field: orderBy,\r\n direction: orderDirection,\r\n });\r\n }\r\n return req;\r\n};\r\n\r\nexport declare type SdTableExternalFilter<TData = any> =\r\n | TextFilter<TData>\r\n | DateFilter<TData>\r\n | DateTimeFilter<TData>\r\n | DateRangeFilter<TData>\r\n | NumberFilter<TData>\r\n | ValuesFilter<TData>\r\n | LazyValuesFilter<TData>\r\n | BooleanFilter<TData>\r\n | CustomFilter<TData>;\r\n\r\ninterface BaseFilter<TData = any> {\r\n field: string;\r\n title: string;\r\n defaultShowing?: boolean;\r\n required?: boolean; // Bật lên nếu bắt buộc phải có giá trị- mới thực hiện gọi API filter\r\n hidden?: boolean; // Ẩn filter\r\n defaultOperator?: SdOperator; // Đôi lúc cột string nhưng lại muốn tìm kiếm chính xác\r\n data?: TData; // Các tham số muốn truyền thêm để đánh dấu/nhận biết ..., ví dụ mappingField\r\n}\r\n\r\ninterface TextFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'string';\r\n default?: string;\r\n}\r\n\r\ninterface DateFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'date';\r\n default?: Date | string;\r\n minDate?: string | number | Date;\r\n maxDate?: string | number | Date;\r\n}\r\n\r\ninterface DateTimeFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'datetime';\r\n default?: Date | string;\r\n minDate?: string | number | Date;\r\n maxDate?: string | number | Date;\r\n}\r\n\r\ninterface DateRangeFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'daterange';\r\n enableTime?: boolean;\r\n minDate?: string | number | Date;\r\n maxDate?: string | number | Date;\r\n default?: {\r\n from?: Date | string;\r\n to?: Date | string;\r\n };\r\n}\r\n\r\ninterface NumberFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'number';\r\n default?: number;\r\n}\r\n\r\ninterface ValuesFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'values';\r\n option: {\r\n valueField: string;\r\n displayField: string;\r\n items: any[] | (() => Promise<any[]>);\r\n selection?: 'AUTOCOMPLETE' | 'MULTIPLE' | 'MULTIPLEAUTOCOMPLETE';\r\n };\r\n default?: string | string[];\r\n}\r\n\r\ninterface LazyValuesFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'lazy-values';\r\n option: {\r\n valueField: string;\r\n displayField: string;\r\n items: SdSearch; // Filter\r\n selection?: 'MULTIPLE';\r\n };\r\n default?: string | string[];\r\n}\r\n\r\ninterface BooleanFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'boolean';\r\n option?: {\r\n displayOnTrue?: string;\r\n displayOnFalse?: string;\r\n };\r\n default?: boolean;\r\n}\r\n\r\ninterface CustomFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'custom';\r\n // filterDef?: TemplateRef<SdTableFilterDefDirective>;\r\n filterDef?: TemplateRef<any>;\r\n default?: any;\r\n}\r\n\r\nexport interface TableFilterRegister {\r\n configuration: {\r\n get: () => TableFilterConfiguration;\r\n set: (configuration: Partial<TableFilterConfiguration>) => TableFilterConfiguration;\r\n remove: () => void;\r\n observer: Observable<TableFilterConfiguration>;\r\n };\r\n value: {\r\n get: () => TableFilterValue;\r\n set: (value: Partial<TableFilterValue>) => TableFilterValue;\r\n remove: () => void;\r\n observer: Observable<TableFilterValue>;\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SdDateRange","SdUtilities","i2","i3","i1","i2.ConfigService","i5","i4","i4.SdTableFilterService","i7","i9","i10","DateUtilities"],"mappings":"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"}
1
+ {"version":3,"file":"sd-angular-core-components-table.mjs","sources":["../../../projects/sd-angular/components/table/src/directives/sd-table-cell-def.directive.ts","../../../projects/sd-angular/components/table/src/directives/sd-table-filter-def.directive.ts","../../../projects/sd-angular/components/table/src/directives/sd-table-expand-def.directive.ts","../../../projects/sd-angular/components/table/src/directives/sd-table-footer-def.directive.ts","../../../projects/sd-angular/components/table/src/components/column-filter/column-filter.component.ts","../../../projects/sd-angular/components/table/src/components/column-filter/column-filter.component.html","../../../projects/sd-angular/components/table/src/pipes/filter-values.pipe.ts","../../../projects/sd-angular/components/table/src/components/external-filter/external-filter.component.ts","../../../projects/sd-angular/components/table/src/components/external-filter/external-filter.component.html","../../../projects/sd-angular/components/table/src/components/selector-action/action-filter.pipe.ts","../../../projects/sd-angular/components/table/src/components/selector-action/selector-action.component.ts","../../../projects/sd-angular/components/table/src/components/selector-action/selector-action.component.html","../../../projects/sd-angular/components/table/src/configurations/table.configuration.ts","../../../projects/sd-angular/components/table/src/services/config.service.ts","../../../projects/sd-angular/components/table/src/components/config/config.component.ts","../../../projects/sd-angular/components/table/src/components/config/config.component.html","../../../projects/sd-angular/components/table/src/components/desktop-cell-view/desktop-cell-view.component.ts","../../../projects/sd-angular/components/table/src/components/desktop-cell-view/desktop-cell-view.component.html","../../../projects/sd-angular/components/table/src/components/desktop-cell/desktop-cell.component.ts","../../../projects/sd-angular/components/table/src/components/desktop-cell/desktop-cell.component.html","../../../projects/sd-angular/components/table/src/pipes/command-disable.pipe.ts","../../../projects/sd-angular/components/table/src/pipes/command-filter.pipe.ts","../../../projects/sd-angular/components/table/src/pipes/command-title.pipe.ts","../../../projects/sd-angular/components/table/src/components/desktop-command/desktop-command.component.ts","../../../projects/sd-angular/components/table/src/components/desktop-command/desktop-command.component.html","../../../projects/sd-angular/components/table/src/components/popup-export/popup-export.component.ts","../../../projects/sd-angular/components/table/src/components/popup-export/popup-export.component.html","../../../projects/sd-angular/components/table/src/models/table-item.model.ts","../../../projects/sd-angular/components/table/src/pipes/sd-group.pipe.ts","../../../projects/sd-angular/components/table/src/pipes/selection-disabled.pipe.ts","../../../projects/sd-angular/components/table/src/pipes/selection-visible-select-all.pipe.ts","../../../projects/sd-angular/components/table/src/pipes/selection-visible.pipe.ts","../../../projects/sd-angular/components/table/src/services/table-filter/table-filter.service.ts","../../../projects/sd-angular/components/table/src/table.component.ts","../../../projects/sd-angular/components/table/src/table.component.html","../../../projects/sd-angular/components/table/src/services/table-filter/table-filter.model.ts","../../../projects/sd-angular/components/table/sd-angular-core-components-table.ts"],"sourcesContent":["import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[sdTableCellDef]',\n})\nexport class SdTabelCellDefDirective {\n @Input() sdTableCellDef?: string;\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\ninterface Context {\n externalFilter?: Record<string, any>;\n}\n\n@Directive({\n selector: '[sdTableFilterDef]',\n})\nexport class SdTableFilterDefDirective {\n static ngTemplateContextGuard(dir: Context, ctx: unknown): ctx is Context {\n return true;\n }\n @Input() sdTableFilterDef?: string;\n defaultShowing?: boolean;\n @Input('defaultShowing') set _defaultShowing(val: boolean | '' | undefined) {\n this.defaultShowing = val === '' || val;\n }\n constructor(public templateRef?: TemplateRef<any>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[sdTableExpandDef]',\n})\nexport class SdMaterialSubInformationDefDirective {\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[sdTableFooterDef]',\n})\nexport class SdMaterialFooterDefDirective {\n @Input() sdTableFooterDef?: string;\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, OnDestroy } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { SdBadge } from '@sd-angular/core/components/badge';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdAutocomplete, SdDate, SdInput, SdInputNumber, SdSearch, SdSelect } from '@sd-angular/core/forms';\r\nimport { SdDateRange } from '@sd-angular/core/forms/date-range';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdOperator, SdOperators } from '@sd-angular/core/utilities';\r\n\r\n@Component({\r\n selector: 'column-filter',\r\n templateUrl: './column-filter.component.html',\r\n styleUrls: ['./column-filter.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n SdButton,\r\n SdInput,\r\n SdInputNumber,\r\n SdSelect,\r\n SdAutocomplete,\r\n SdDate,\r\n SdDateRange,\r\n SdBadge,\r\n ],\r\n})\r\nexport class ColumnFilterComponent implements OnInit, OnDestroy {\r\n autoId?: string;\r\n @Input('autoId') set _autoId(val: string | undefined | null) {\r\n if (val) {\r\n this.autoId = `${val}-inline-`;\r\n }\r\n }\r\n value: any;\r\n @Input('value') _value(value: any) {\r\n this.value = value;\r\n this.#valueChanges.next(undefined);\r\n }\r\n inlineSymbol = 'filter_alt';\r\n #inlineOperator?: SdOperator;\r\n @Input('inlineOperator') set _inlineOperator(inlineOperator: SdOperator) {\r\n if (this.#inlineOperator !== inlineOperator) {\r\n this.#inlineOperator = inlineOperator;\r\n this.inlineSymbol = SdOperators.find(e => e.value === inlineOperator)?.symbol ?? 'filter_alt';\r\n }\r\n }\r\n @Output() inlineOperatorChange = new EventEmitter<SdOperator>();\r\n @Output() operatorChange = new EventEmitter<SdOperator>();\r\n\r\n columnFilter: Record<string, any> = {};\r\n @Input('columnFilter') set _columnFilter(columnFilter: Record<string, any>) {\r\n this.columnFilter = columnFilter || {};\r\n this.#valueChanges.next(undefined);\r\n }\r\n operators = SdOperators;\r\n column!: SdTableColumn;\r\n items: any[] | SdSearch = [];\r\n @Input() cacheValues?: Record<string, any[]>;\r\n @Input('column') set _column(column: SdTableColumn) {\r\n this.column = column;\r\n if (!column?.filter?.disabled && column?.filter?.operator?.enable) {\r\n this.operators = SdOperators.filter(e => column.filter?.operator?.list?.includes?.(e.value));\r\n } else {\r\n this.operators = [];\r\n }\r\n if (this.column.type === 'values') {\r\n if (Array.isArray(this.column.option.items)) {\r\n this.items = this.column.option.items;\r\n } else {\r\n this.items = this.cacheValues?.[column.field] || [];\r\n }\r\n } else if (this.column.type === 'lazy-values') {\r\n this.items = this.column.option.items;\r\n }\r\n }\r\n @Output() filterChange = new EventEmitter();\r\n #valueChanges = new Subject();\r\n #subcription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subcription.add(\r\n this.#valueChanges.pipe(startWith(this.columnFilter)).subscribe(() => {\r\n if (this.column?.type === 'date' || this.column?.type === 'time' || this.column?.type === 'datetime') {\r\n if (this.column?.filter?.type !== 'date') {\r\n this.columnFilter[this.column.field] = this.columnFilter[this.column.field] || {\r\n from: null,\r\n to: null,\r\n };\r\n }\r\n }\r\n if (this.column?.type === 'number') {\r\n if (this.column?.filter?.type === 'split-number') {\r\n this.columnFilter[this.column.field] = this.columnFilter[this.column.field] || {\r\n from: null,\r\n to: null,\r\n };\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subcription.unsubscribe();\r\n }\r\n\r\n onFilterChange = () => {\r\n this.filterChange.emit();\r\n };\r\n\r\n onChangeOperator = (operator: { value: SdOperator; symbol?: string; display: string }) => {\r\n if (operator) {\r\n this.#inlineOperator = operator.value;\r\n this.inlineSymbol = operator.symbol!;\r\n } else {\r\n this.#inlineOperator = undefined;\r\n this.inlineSymbol = 'filter_alt';\r\n }\r\n this.inlineOperatorChange.emit(this.#inlineOperator);\r\n this.operatorChange.emit(this.#inlineOperator);\r\n this.ref.markForCheck();\r\n };\r\n}\r\n","<div class=\"d-flex c-inline-column align-items-end\">\r\n @if (\r\n column.type === 'string' ||\r\n column.type === 'number' ||\r\n column.type === 'boolean' ||\r\n column.type === 'values' ||\r\n column.type === 'lazy-values' ||\r\n column.type === 'date' ||\r\n column.type === 'datetime' ||\r\n column.type === 'time'\r\n ) {\r\n <div class=\"d-flex align-items-center\" *ngIf=\"operators.length\">\r\n <!-- Only number column icon broken. add mb when not default symbol -->\r\n <sd-button\r\n class=\"{{ column.type === 'number' && inlineSymbol !== 'filter_alt' ? 'mb-4 mr-2 ' : 'mr-2 ' }}\"\r\n fontSet=\"material-symbols-outlined\"\r\n [prefixIcon]=\"inlineSymbol\"\r\n [matMenuTriggerFor]=\"menu\"\r\n type=\"link\">\r\n </sd-button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let operator of operators\" (click)=\"onChangeOperator(operator)\" mat-menu-item type=\"button\">\r\n <mat-icon fontSet=\"material-symbols-outlined\" class=\"{{ column.type === 'number' ? 'mb-8 ' : '' }}\">{{\r\n operator.symbol\r\n }}</mat-icon>\r\n <span> {{ operator.display }}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n @if (column.type === 'string') {\r\n <sd-input\r\n *ngIf=\"column.type === 'string'\"\r\n [autoId]=\"autoId + column.field\"\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n type=\"text\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (keyupEnter)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-input>\r\n } @else if (column.type === 'number') {\r\n @if (!column.filter?.type) {\r\n <sd-input-number\r\n [autoId]=\"autoId + column.field\"\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (keyupEnter)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-input-number>\r\n } @else if (column.filter?.type === 'split-number') {\r\n <div class=\"d-flex align-items-center\">\r\n <sd-input-number\r\n [autoId]=\"autoId + '-from-' + column.field\"\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field].from\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-input-number>\r\n <div class=\"mx-4\">-</div>\r\n <sd-input-number\r\n [autoId]=\"autoId + '-to-' + column.field\"\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field].to\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-input-number>\r\n </div>\r\n }\r\n } @else if (column.type === 'boolean') {\r\n <sd-select\r\n *ngIf=\"column.type === 'boolean'\"\r\n [autoId]=\"autoId + column.field\"\r\n [style.flex]=\"1\"\r\n [style.width]=\"'100%'\"\r\n size=\"sm\"\r\n [items]=\"[\r\n { value: '1', display: column.option?.displayOnTrue || 'True' },\r\n { value: '0', display: column.option?.displayOnFalse || 'False' }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n <ng-template sdSelectDisplayDef let-item=\"item\">\r\n <sd-badge *ngIf=\"item.value === '1'\" color=\"success\" [title]=\"column.option?.displayOnTrue || 'True'\"> </sd-badge>\r\n <sd-badge *ngIf=\"item.value === '0'\" color=\"error\" [title]=\"column.option?.displayOnFalse || 'False'\"> </sd-badge>\r\n </ng-template>\r\n </sd-select>\r\n } @else if (column.type === 'values') {\r\n <sd-select\r\n *ngIf=\"column.option?.selection !== 'AUTOCOMPLETE'\"\r\n [autoId]=\"autoId + column.field\"\r\n [style.flex]=\"1\"\r\n [style.width]=\"'100%'\"\r\n size=\"sm\"\r\n [items]=\"items\"\r\n [valueField]=\"column.option.valueField\"\r\n [displayField]=\"column.option.displayField\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n [multiple]=\"column.option.selection === 'MULTIPLE' || column.option.selection === 'MULTIPLEAUTOCOMPLETE'\"\r\n hideInlineError>\r\n </sd-select>\r\n <sd-autocomplete\r\n *ngIf=\"column.option?.selection === 'AUTOCOMPLETE'\"\r\n [autoId]=\"autoId + column.field\"\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n [items]=\"items\"\r\n [valueField]=\"column.option.valueField\"\r\n [displayField]=\"column.option.displayField\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-autocomplete>\r\n } @else if (column.type === 'lazy-values') {\r\n <sd-select\r\n *ngIf=\"column.option?.selection === 'MULTIPLE'\"\r\n [autoId]=\"autoId + column.field\"\r\n [style.flex]=\"1\"\r\n [style.width]=\"'100%'\"\r\n size=\"sm\"\r\n [items]=\"items\"\r\n [valueField]=\"column.option.valueField\"\r\n [displayField]=\"column.option.displayField\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n multiple\r\n hideInlineError>\r\n </sd-select>\r\n <sd-autocomplete\r\n *ngIf=\"!column.option?.selection\"\r\n [autoId]=\"autoId + column.field\"\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n [items]=\"items\"\r\n [valueField]=\"column.option.valueField\"\r\n [displayField]=\"column.option.displayField\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-autocomplete>\r\n } @else if (column.type === 'date' || column.type === 'datetime' || column.type === 'time') {\r\n @if (!column.filter?.type || column.filter?.type === 'daterange') {\r\n <sd-date-range\r\n style=\"flex: 1\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-date-range>\r\n } @else if (column.filter?.type === 'date') {\r\n <sd-date\r\n [autoId]=\"autoId + column.field\"\r\n style=\"flex: 1\"\r\n type=\"date\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field]\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-date>\r\n } @else if (column.filter?.type === 'split-date') {\r\n <div class=\"d-flex align-items-center\">\r\n <sd-date\r\n [autoId]=\"autoId + '-from-' + column.field\"\r\n style=\"flex: 1\"\r\n type=\"date\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field].from\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-date>\r\n <div class=\"mx-4\">-</div>\r\n <sd-date\r\n [autoId]=\"autoId + '-to-' + column.field\"\r\n style=\"flex: 1\"\r\n type=\"date\"\r\n size=\"sm\"\r\n [(model)]=\"columnFilter[column.field].to\"\r\n (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\"\r\n hideInlineError>\r\n </sd-date>\r\n </div>\r\n }\r\n }\r\n } @else {\r\n <sd-input [autoId]=\"autoId + column.field\" type=\"text\" size=\"sm\" disabled></sd-input>\r\n }\r\n</div>\r\n","import { Pipe, PipeTransform } from '@angular/core';\n\n// Đối với filter loại values, items có thể là 1 mảng, có thể là 1 hàm, do đó cần xử lý nếu là hàm có thể xử lý gọi API\n@Pipe({\n name: 'filterValues',\n})\nexport class FilterValuesPipe implements PipeTransform {\n constructor() {}\n async transform(items: any[] | (() => Promise<any[]>) | undefined | null): Promise<any[]> {\n if (Array.isArray(items)) {\n return items;\n }\n if (typeof items === 'function') {\n const results = await items();\n if (Array.isArray(results)) {\n return results;\n }\n }\n return [];\n }\n}\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdCheckbox, SdDate, SdDateRange, SdDatetime, SdInput, SdInputNumber, SdSelect } from '@sd-angular/core/forms';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { FilterValuesPipe } from '../../pipes';\r\nimport { SdTableExternalFilter, SdTableOptionFilter, TableFilterRegister } from '../../services/table-filter/table-filter.model';\r\n\r\n@Component({\r\n selector: 'external-filter',\r\n templateUrl: './external-filter.component.html',\r\n styleUrls: ['./external-filter.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatMenuModule,\r\n MatCheckboxModule,\r\n SdSection,\r\n SdInput,\r\n SdInputNumber,\r\n SdSelect,\r\n SdDate,\r\n SdDatetime,\r\n SdDateRange,\r\n SdButton,\r\n FilterValuesPipe,\r\n SdCheckbox,\r\n ],\r\n})\r\n// eslint-disable-next-line @angular-eslint/component-class-suffix\r\nexport class ExternalFilterComponent implements AfterViewInit, OnDestroy {\r\n autoId?: string;\r\n @Input('autoId') set _autoId(val: string | undefined | null) {\r\n if (val) {\r\n this.autoId = `${val}-external-`;\r\n }\r\n }\r\n\r\n filter?: Readonly<SdTableOptionFilter>;\r\n col?: 2 | 3 = 2; // 6 filter per row\r\n externalFilterPerRow: SdTableOptionFilter['externalFilterPerRow'] = 6;\r\n @Input('filter') set _filter(filter: SdTableOptionFilter) {\r\n this.filter = filter;\r\n if (filter?.externalFilterPerRow === 4) {\r\n this.col = 3; // 4 filter per row\r\n }\r\n }\r\n externalFilters: SdTableExternalFilter[] = [];\r\n @Input('externalFilters') set _externalFilters(externalFilters: SdTableExternalFilter[]) {\r\n this.externalFilters = externalFilters || [];\r\n }\r\n filterRegister?: TableFilterRegister;\r\n @Input('filterRegister') set _filterRegister(value: TableFilterRegister) {\r\n this.filterRegister = value;\r\n this.filterRegisterChange.next(this.filterRegister);\r\n }\r\n form = new FormGroup({});\r\n\r\n filterRegisterChange = new BehaviorSubject<TableFilterRegister | null>(null);\r\n\r\n externalFilter?: Record<string, any> = {};\r\n inlineExternal: Record<string, boolean> = {};\r\n isMobileOrTablet: boolean;\r\n filtered? = false;\r\n #subscription = new Subscription();\r\n\r\n constructor(private ref: ChangeDetectorRef) {\r\n this.isMobileOrTablet = SdUtilities.isMobile();\r\n this.ref.markForCheck();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(\r\n this.filterRegisterChange.pipe(startWith(this.filterRegister)).subscribe(() => {\r\n if (this.filterRegister) {\r\n this.#subscription.add(\r\n this.filterRegister.configuration.observer.subscribe(configuration => {\r\n const { inlineExternal } = configuration;\r\n this.inlineExternal = inlineExternal || {};\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.filterRegister.value.observer.subscribe(value => {\r\n const { externalFilter } = value;\r\n this.externalFilter = externalFilter;\r\n this.filtered = this.#filtered();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n })\r\n );\r\n\r\n // Khi values của form thay đổi thì cập nhật lại filtered\r\n this.#subscription.add(\r\n this.form.valueChanges.subscribe(() => {\r\n this.filtered = this.#filtered();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n // Đối với input, khi nhấn enter sẽ submit luôn dù là manual filter hay không\r\n // Nhưng vẫn kiểm tra form valid mới submit\r\n onKeyupEnter = () => {\r\n this.onSubmit();\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n onFilter = () => {\r\n // Nếu không phải là manual filter thì không cập nhật lại giá trị filter mà chỉ đợi khi submit\r\n if (!this.filter?.manualFilter) {\r\n this.onSubmit();\r\n }\r\n };\r\n\r\n onSubmit = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n this.filterRegister?.value.set({\r\n externalFilter: this.externalFilter,\r\n });\r\n };\r\n\r\n #filtered = (): boolean => {\r\n if (\r\n Object.values({ ...this.externalFilter }).some(val => {\r\n // Nếu là mảng và mảng có phần tử thì xem như là có filter\r\n if (Array.isArray(val)) {\r\n return !!val.length;\r\n }\r\n // Nếu là object (date) và có from/to thì xem như là có filter\r\n if (val && typeof val === 'object') {\r\n if ('from' in val && !!val.from) {\r\n return true;\r\n }\r\n if ('to' in val && !!val.to) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return val !== undefined && val !== null && val !== '';\r\n })\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n updateFilter = () => {\r\n this.filterRegister?.value.set({\r\n externalFilter: this.externalFilter,\r\n notReload: true,\r\n });\r\n };\r\n\r\n clearFilter = (event?: Event) => {\r\n event?.stopPropagation();\r\n this.filterRegister?.value.remove();\r\n this.filter?.onClearFilter?.();\r\n };\r\n\r\n onCheckboxChange = (event: Event, externalFilter: SdTableExternalFilter) => {\r\n event?.stopPropagation();\r\n this.inlineExternal[externalFilter.field] = !this.inlineExternal[externalFilter.field];\r\n this.filterRegister?.configuration.set({\r\n inlineExternal: { ...this.inlineExternal },\r\n });\r\n };\r\n}\r\n","@if (!filter?.disabled) {\r\n @if (!isMobileOrTablet && externalFilters.length) {\r\n <sd-section [hideHeader]=\"filter?.hideExternalFilterToolbar\" icon=\"filter_alt\" iconColor=\"secondary\" title=\"Bộ lọc\" collapsable>\r\n <div class=\"d-flex mr-4\" sdHeaderRight>\r\n <sd-button\r\n [autoId]=\"autoId + 'clearFilter'\"\r\n [disabled]=\"!filtered\"\r\n type=\"link\"\r\n prefixIcon=\"cleaning_services\"\r\n tooltip=\"Xóa lựa chọn\"\r\n (click)=\"$event.stopPropagation(); clearFilter($event)\"></sd-button>\r\n <sd-button\r\n [autoId]=\"autoId + 'setting'\"\r\n type=\"link\"\r\n prefixIcon=\"settings\"\r\n tooltip=\"Tùy chỉnh\"\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"$event.stopPropagation()\"></sd-button>\r\n <mat-menu #menu=\"matMenu\" class=\"sd-custom-panel-filter-configuration\">\r\n @for (externalFilter of externalFilters; track externalFilter.field) {\r\n <button mat-menu-item (click)=\"onCheckboxChange($event, externalFilter)\" [disabled]=\"externalFilter.required\">\r\n <sd-checkbox\r\n [label]=\"externalFilter.title\"\r\n [model]=\"inlineExternal[externalFilter.field]\"\r\n [disabled]=\"externalFilter.required\" />\r\n </button>\r\n }\r\n </mat-menu>\r\n </div>\r\n <div class=\"row mx-0\" style=\"row-gap: 16px\">\r\n @for (item of externalFilters; track item.field) {\r\n @if (inlineExternal[item.field]) {\r\n <div class=\"col-md-3 col-sm-6 px-8\" [class.col-lg-2]=\"col === 2\" [class.col-lg-3]=\"col === 3\">\r\n @if (item.type === 'string') {\r\n <sd-input\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n type=\"text\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (keyupEnter)=\"onKeyupEnter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-input>\r\n } @else if (item.type === 'number') {\r\n <sd-input-number\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (keyupEnter)=\"onKeyupEnter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-input-number>\r\n } @else if (item.type === 'boolean') {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"[\r\n { value: true, display: item.option?.displayOnTrue || 'True' },\r\n { value: false, display: item.option?.displayOnFalse || 'False' }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n } @else if (item.type === 'date') {\r\n <sd-date\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n [min]=\"item.minDate\"\r\n [max]=\"item.maxDate\"\r\n hideInlineError>\r\n </sd-date>\r\n } @else if (item.type === 'datetime') {\r\n <sd-datetime\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n [min]=\"item.minDate\"\r\n [max]=\"item.maxDate\"\r\n hideInlineError>\r\n </sd-datetime>\r\n } @else if (item.type === 'daterange') {\r\n <sd-date-range\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n [min]=\"item.minDate\"\r\n [max]=\"item.maxDate\"\r\n appearance=\"outline\"\r\n hideInlineError>\r\n </sd-date-range>\r\n } @else if (item.type === 'values') {\r\n @if (item.option.selection === 'MULTIPLE') {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"item.option.items | filterValues | async\"\r\n [valueField]=\"item.option.valueField\"\r\n [displayField]=\"item.option.displayField\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n multiple\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n } @else if (item.option.selection === 'AUTOCOMPLETE') {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"item.option.items | filterValues | async\"\r\n [valueField]=\"item.option.valueField\"\r\n [displayField]=\"item.option.displayField\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n } @else if (item.option.selection === 'MULTIPLEAUTOCOMPLETE') {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"item.option.items | filterValues | async\"\r\n [valueField]=\"item.option.valueField\"\r\n [displayField]=\"item.option.displayField\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n multiple\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n } @else {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"item.option.items | filterValues | async\"\r\n [valueField]=\"item.option.valueField\"\r\n [displayField]=\"item.option.displayField\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n }\r\n } @else if (item.type === 'lazy-values') {\r\n @if (item.option.selection === 'MULTIPLE') {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"item.option.items\"\r\n [valueField]=\"item.option.valueField\"\r\n [displayField]=\"item.option.displayField\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n multiple\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n } @else {\r\n <sd-select\r\n [autoId]=\"autoId + item.field\"\r\n [label]=\"item.title\"\r\n [items]=\"item.option.items\"\r\n [valueField]=\"item.option.valueField\"\r\n [displayField]=\"item.option.displayField\"\r\n [(model)]=\"externalFilter![item.field]\"\r\n (sdChange)=\"onFilter()\"\r\n appearance=\"outline\"\r\n [form]=\"form\"\r\n [required]=\"item.required\"\r\n hideInlineError>\r\n </sd-select>\r\n }\r\n } @else if (item.type === 'custom' && item.filterDef) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n item.filterDef;\r\n context: { form: form, externalFilter: externalFilter, autoId: autoId + item.field }\r\n \"></ng-container>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n @if (filter?.manualFilter) {\r\n <div class=\"d-flex justify-content-end mt-16 px-8\">\r\n <sd-button\r\n [autoId]=\"autoId + 'onSubmit'\"\r\n [disabled]=\"form.invalid\"\r\n type=\"fill\"\r\n color=\"primary\"\r\n title=\"Tìm kiếm\"\r\n prefixIcon=\"filter_alt\"\r\n (click)=\"onSubmit()\">\r\n </sd-button>\r\n </div>\r\n }\r\n </sd-section>\r\n }\r\n <!-- <sd-popup-filter [filterRegister]=\"filterRegister!\" [columns]=\"columns\" [externalFilters]=\"externalFilters\">\r\n </sd-popup-filter> -->\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdUtilities } from '@sd-angular/core/utilities';\nimport { SdTableAction, SdTableActionNormal } from '../../models/table-option-selector.model';\nimport { SdTableItem } from '../../models/table-item.model';\nimport { SdButton } from '@sd-angular/core/components/button';\n@Pipe({\n name: 'actionFilter',\n})\nexport class ActionFilterPipe implements PipeTransform {\n #convert = (action: SdTableAction): Action => {\n if ('children' in action) {\n return {\n variant: 'children',\n title: action.title,\n icon: action.icon,\n fontSet: action.fontSet,\n tooltip: action.tooltip,\n color: action.color,\n type: action.type,\n children: action.children.map(e => ({\n variant: 'normal',\n title: e.title,\n icon: e.icon,\n color: action.color,\n type: action.type,\n fontSet: e.fontSet,\n tooltip: e.tooltip,\n click: e.click,\n })),\n };\n }\n return {\n variant: 'normal',\n title: action.title,\n icon: action.icon,\n color: action.color,\n type: action.type,\n fontSet: action.fontSet,\n tooltip: action.tooltip,\n click: action.click,\n };\n };\n transform = (selectedItems: SdTableItem[] | undefined, actions: SdTableAction[] | undefined): Action[] => {\n const results: SdTableAction[] = [];\n if (!actions?.length || !selectedItems?.length) {\n return [];\n }\n for (const action of actions || []) {\n if ('children' in action) {\n const children: SdTableActionNormal[] = [];\n for (const childAction of action.children) {\n const key = SdUtilities.hash(childAction);\n if (selectedItems.every(e => e?.meta?.selector?.actions?.includes(key))) {\n children.push(childAction);\n }\n }\n if (children.length > 0) {\n results.push({ ...action, children });\n }\n } else {\n const key = SdUtilities.hash(action);\n if (selectedItems.every(e => e?.meta?.selector?.actions?.includes(key))) {\n results.push(action);\n }\n }\n }\n return results.map(result => this.#convert(result));\n };\n}\n\nexport type Action<T = any> = ActionNormal<T> | ActionChildren<T>;\n\ninterface ActionNormal<T = any> {\n variant: 'normal';\n icon?: string;\n fontSet?: SdButton['fontSet'];\n tooltip?: SdButton['tooltip'];\n title?: SdButton['title'];\n color?: SdButton['color'];\n type?: SdButton['type'];\n click: (selectedItems?: T[]) => void;\n}\n\ninterface ActionChildren<T = any> {\n variant: 'children'\n icon?: string;\n fontSet?: SdButton['fontSet'];\n tooltip?: SdButton['tooltip'];\n title?: SdButton['title'];\n color?: SdButton['color'];\n type?: SdButton['type'];\n children: ActionNormal<T>[];\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { SdButton } from '@sd-angular/core/components/button';\nimport { SdQuickAction } from '@sd-angular/core/components/quick-action';\nimport { SdTableItem } from '../../models/table-item.model';\nimport { SdTableOption } from '../../models/table-option.model';\nimport { Action, ActionFilterPipe } from './action-filter.pipe';\n\n@Component({\n selector: 'selector-action',\n templateUrl: './selector-action.component.html',\n styleUrls: ['./selector-action.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, MatIconModule, MatMenuModule, SdButton, SdQuickAction, ActionFilterPipe],\n})\nexport class SelectorActionComponent {\n @Input() tableOption?: SdTableOption;\n @Input() selectedTableItems?: SdTableItem[];\n @Output() clear = new EventEmitter();\n constructor() {}\n onClear = () => {\n this.clear.emit();\n };\n\n onClickAction = (action: Action) => {\n if (action?.variant === 'normal' && action.click) {\n action.click(this.selectedTableItems?.map(e => e.data));\n }\n };\n}\n","@let actions = selectedTableItems | actionFilter: tableOption?.selector?.actions;\n<sd-quick-action [isOpened]=\"!!actions?.length\">\n <div class=\"d-flex align-items-center\" sdMessage>\n <div class=\"c-bg-length\">\n <span class=\"c-length\">{{ selectedTableItems?.length }}</span>\n </div>\n <div class=\"c-message\">\n {{ tableOption?.selector?.message || 'dữ liệu được chọn' }}\n </div>\n </div>\n <div class=\"d-flex align-items-center mr-8\" sdAction>\n <ng-container *ngFor=\"let action of actions\">\n @if (action.variant === 'normal') {\n <sd-button\n class=\"ml-4\"\n [tooltip]=\"action.tooltip\"\n [prefixIcon]=\"action.icon\"\n [color]=\"action.color\"\n [type]=\"action.type || 'light'\"\n [fontSet]=\"action.fontSet\"\n [title]=\"action.title\"\n (click)=\"onClickAction(action)\"></sd-button>\n } @else if (action.variant === 'children') {\n <sd-button\n class=\"ml-4\"\n [tooltip]=\"action.tooltip\"\n [prefixIcon]=\"action.icon || 'more_vert'\"\n [color]=\"action.color || 'secondary'\"\n [type]=\"action.type || 'light'\"\n [fontSet]=\"action.fontSet\"\n [title]=\"action.title\"\n [matMenuTriggerFor]=\"menu\">\n </sd-button>\n <mat-menu #menu=\"matMenu\">\n <span>\n <button\n *ngFor=\"let child of action.children\"\n mat-menu-item\n (click)=\"onClickAction(child)\">\n @if(child.icon) {\n <mat-icon [fontSet]=\"child.fontSet || 'material-icons'\" class=\"c-icon\">{{ child.icon }} </mat-icon>\n }\n <span> {{ child.title }}</span>\n </button>\n </span>\n </mat-menu>\n }\n </ng-container>\n <sd-button class=\"ml-4\" prefixIcon=\"close\" color=\"secondary\" type=\"outline\" (click)=\"onClear()\" width=\"35px\"></sd-button>\n </div>\n</sd-quick-action>\n","import { InjectionToken } from '@angular/core';\r\nimport { SdTableOptionPaginate } from '../models/table-option-paginate.model';\r\nimport { SdTableOptionFilter } from '../services/table-filter/table-filter.model';\r\nimport { SdOperator } from '@sd-angular/core/utilities';\r\nimport { SdTableColumn } from '../models';\r\n\r\nexport interface ISdTableConfiguration {\r\n paginate?: {\r\n /** Số dòng mỗi trang. */\r\n pageSize?: SdTableOptionPaginate['pageSize'];\r\n\r\n /** Danh sách các tuỳ chọn số dòng/trang mà người dùng có thể chọn. */\r\n pages?: SdTableOptionPaginate['pages'];\r\n\r\n showFirstLastButtons?: SdTableOptionPaginate['showFirstLastButtons'];\r\n };\r\n filter?: {\r\n /** Ẩn bộ lọc dưới cột, nếu không cấu hình thì giá trị mặc định là false */\r\n hideInlineFilter?: SdTableOptionFilter['hideInlineFilter'];\r\n\r\n /** Số lượng external filter mỗi dòng, mặc định là 6 */\r\n externalFilterPerRow?: SdTableOptionFilter['externalFilterPerRow'];\r\n\r\n /** Kích hoạt chế độ lọc thủ công, hiển thị nút áp dụng, mặc định là false */\r\n manualFilter?: SdTableOptionFilter['manualFilter'];\r\n\r\n /** Ẩn toolbar (xóa bộ lọc, thiết lập) của external filter, khi có ít external filter user không cần chức năng này, mặc định là false */\r\n hideExternalFilterToolbar?: SdTableOptionFilter['hideExternalFilterToolbar'];\r\n\r\n operator?: {\r\n list?: Partial<Record<SdTableColumn['type'], SdOperator[]>>;\r\n default?: Partial<Record<SdTableColumn['type'], SdOperator>>;\r\n };\r\n };\r\n images?: {\r\n filterRequired?: string; // Link ảnh cho table ở trạng thái cần nhập filter\r\n dataEmpty?: string; // Link ảnh cho table ở trạng thái không có dữ liệu\r\n filterEmpty?: string; // Link ảnh cho table ở trạng thái filter không có dữ liệu\r\n };\r\n}\r\n\r\nexport const DEFAULT_TABLE_CONFIG: ISdTableConfiguration = {\r\n paginate: {\r\n pageSize: 20,\r\n pages: [20, 50, 100, 200],\r\n },\r\n};\r\n\r\nexport const SD_TABLE_CONFIGURATION = new InjectionToken<ISdTableConfiguration>('sd-table.configuration');\r\n","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport { SdStorage, SdStorageService } from '@sd-angular/core/services';\r\nimport { ConfiguredColumn, ConfiguredTable, ConfiguredTableResult } from '../models/table-option-config.model';\r\nimport { SdTableOption } from '../models/table-option.model';\r\nimport { ISdTableConfiguration, SD_TABLE_CONFIGURATION } from '../configurations';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\n\r\n@Injectable()\r\nexport class ConfigService {\r\n #COLUMNS = {\r\n SUBINFORMATION: 'sdSubInformationAction',\r\n COMMAND: 'sdCommand',\r\n SELECTION: 'sdSelection',\r\n GROUP: 'sdGroup',\r\n };\r\n #prefix = 'TABLE_CONFIG';\r\n constructor(\r\n private storageService: SdStorageService,\r\n @Inject(SD_TABLE_CONFIGURATION) @Optional() public tableConfiguration: ISdTableConfiguration\r\n ) {}\r\n\r\n #loadConfiguredTable = (option: SdTableOption): SdStorage<ConfiguredTable> => {\r\n // Nếu không có key thì không lấy được setting\r\n if (!option?.key) {\r\n return this.storageService.create<ConfiguredTable>(SdUtilities.hash(option), {\r\n type: 'session', // Nếu không có key thì lưu theo session\r\n default: this.#default(option),\r\n });\r\n }\r\n // Key của setting là tổ hợp từ key truyền vào và prefix để tránh chung key với các tính năng khác cũng dùng key trong core table\r\n return this.storageService.create<ConfiguredTable>(\r\n { prefix: this.#prefix, key: option?.key },\r\n {\r\n default: this.#default(option),\r\n }\r\n );\r\n };\r\n\r\n loadConfiguredTable = (option: SdTableOption) => {\r\n // Nếu không có key thì trả về thông tin mặc định\r\n if (!option?.key) {\r\n return this.#default(option);\r\n }\r\n const storage = this.#loadConfiguredTable(option)!;\r\n return storage.get();\r\n };\r\n\r\n loadConfigurationResult = (option: SdTableOption, configuration: ConfiguredTable) => {\r\n const result: ConfiguredTableResult = {\r\n column: {},\r\n fixedColumn: {},\r\n firstColumns: [],\r\n secondColumns: [],\r\n firstHeaders: [],\r\n secondHeaders: [],\r\n displayedColumns: [],\r\n displayedFooters: [],\r\n multipleHeader: false,\r\n };\r\n const { selector, commands, group } = option || {};\r\n const columns = option?.columns?.filter(e => !e.hidden) || [];\r\n if (selector?.visible) {\r\n result.firstHeaders.push(this.#COLUMNS.SELECTION);\r\n result.displayedColumns.push(this.#COLUMNS.SELECTION);\r\n }\r\n if (commands?.length) {\r\n result.firstHeaders.push(this.#COLUMNS.COMMAND);\r\n result.displayedColumns.push(this.#COLUMNS.COMMAND);\r\n }\r\n if (group?.fields?.length) {\r\n result.firstHeaders.push(this.#COLUMNS.GROUP);\r\n result.displayedColumns.push(this.#COLUMNS.GROUP);\r\n }\r\n configuration?.columns\r\n ?.filter(col => !col.invisible)\r\n .forEach(col => {\r\n // Kiểm tra column trong config có còn được khai báo trong option\r\n // Nếu không thì ẩn column đó đi\r\n const column = columns.find(e => e.field === col.origin.field);\r\n if (column) {\r\n result.column[col.origin.field] = {\r\n title: col.title || col.origin.title,\r\n width: col.width || col.origin.width,\r\n };\r\n if (col.fixed) {\r\n result.fixedColumn[col.origin.field] = {\r\n title: col.title || col.origin.title,\r\n width: col.width || col.origin.width,\r\n };\r\n }\r\n result.firstColumns.push({\r\n ...column,\r\n title: col.title || col.origin.title,\r\n width: col.width || col.origin.width,\r\n });\r\n result.firstHeaders.push(col.origin.field);\r\n result.displayedColumns.push(col.origin.field);\r\n if (column.type === 'children') {\r\n column.children?.forEach(childColumn => {\r\n result.secondColumns.push(childColumn);\r\n result.secondHeaders.push(childColumn.field);\r\n result.displayedColumns.push(childColumn.field);\r\n });\r\n }\r\n }\r\n });\r\n // Nếu có thêm các column mới, chèn các column đó vào cuối\r\n columns\r\n ?.filter(column => !configuration?.columns?.some(e => e.origin.field === column.field))\r\n .forEach(column => {\r\n result.firstColumns.push({\r\n ...column,\r\n title: column.title,\r\n width: column.width,\r\n });\r\n result.firstHeaders.push(column.field);\r\n result.displayedColumns.push(column.field);\r\n if (column.type === 'children') {\r\n column.children?.forEach(childColumn => {\r\n result.secondColumns.push(childColumn);\r\n result.secondHeaders.push(childColumn.field);\r\n result.displayedColumns.push(childColumn.field);\r\n });\r\n }\r\n });\r\n if (option.expand) {\r\n result.firstHeaders.push(this.#COLUMNS.SUBINFORMATION);\r\n result.displayedColumns.push(this.#COLUMNS.SUBINFORMATION);\r\n }\r\n result.multipleHeader = result.secondHeaders.length > 0;\r\n // Sub infomation không thể có footer\r\n result.displayedFooters = result.displayedColumns.filter(val => val !== this.#COLUMNS.SUBINFORMATION);\r\n return result;\r\n };\r\n\r\n init = (tableOption: SdTableOption) => {\r\n return this.#loadConfiguredTable(tableOption);\r\n };\r\n\r\n #default = (tableOption: SdTableOption): ConfiguredTable => {\r\n const columns: ConfiguredColumn[] =\r\n tableOption?.columns\r\n ?.filter(e => !e.hidden)\r\n .map(e => ({\r\n origin: {\r\n field: e.field,\r\n title: e.title,\r\n width: e.width,\r\n invisible: e.invisible,\r\n },\r\n invisible: e.invisible,\r\n fixed: e.fixed,\r\n })) || [];\r\n return {\r\n columns,\r\n };\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, EventEmitter, HostListener, Input, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { SdButton } from '@sd-angular/core/components/button';\nimport { SdModal } from '@sd-angular/core/components/modal';\nimport { SdInput, SdSwitch } from '@sd-angular/core/forms';\nimport { SdStorage } from '@sd-angular/core/services';\nimport { SdConfirmService } from '@sd-angular/core/services/confirm';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport { ConfiguredTable, ConfiguredTableResult } from '../../models/table-option-config.model';\nimport { SdTableOption } from '../../models/table-option.model';\nimport { ConfigService } from '../../services/config.service';\n\n@Component({\n selector: 'config',\n templateUrl: './config.component.html',\n styleUrls: ['./config.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatTableModule,\n MatSlideToggleModule,\n CdkTableModule,\n DragDropModule,\n SdButton,\n SdInput,\n SdModal,\n SdSwitch\n],\n providers: [ConfigService],\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class ConfigComponent {\n @Input() tableOption?: SdTableOption;\n @ViewChild(SdModal) modal?: SdModal;\n @ViewChild('table') table!: MatTable<SdTableColumn>;\n readonly changes = new EventEmitter<ConfiguredTableResult>();\n #setting?: SdStorage<ConfiguredTable>;\n configuration?: ConfiguredTable;\n dragDisabled = true;\n constructor(\n private ref: ChangeDetectorRef,\n private confirmService: SdConfirmService,\n private configService: ConfigService\n ) {}\n\n @HostListener('window:mouseup', ['$event'])\n mouseUp() {\n this.dragDisabled = true;\n }\n open = async () => {\n this.#setting = this.configService.init(this.tableOption!)!;\n this.configuration = this.#setting?.get();\n this.modal?.open();\n };\n\n close = () => {\n this.modal?.close();\n }\n\n onSave = () => {\n this.#setting?.set(this.configuration!);\n this.modal?.close();\n this.ref.detectChanges();\n };\n\n onReset = async () => {\n this.confirmService.confirm('Xác nhận đưa tất cả thiết lập về mặc định').then(() => {\n this.#setting?.remove();\n this.modal?.close();\n this.ref.detectChanges();\n });\n };\n\n dropTable(event: any) {\n moveItemInArray(this.configuration!.columns!, event.previousIndex, event.currentIndex);\n this.table.renderRows();\n }\n\n handleMouseDown() {\n this.dragDisabled = false;\n }\n\n handleMouseUp() {\n this.dragDisabled = true;\n }\n}\n","<sd-modal width=\"sm\" [title]=\"'Thiết lập bảng'\" #modal>\r\n @if (configuration) {\r\n <div class=\"c-container\">\r\n <div class=\"c-table\" style=\"max-height: 70vh\">\r\n <table\r\n #table\r\n mat-table\r\n [dataSource]=\"configuration.columns!\"\r\n cdkDropList\r\n [cdkDropListData]=\"configuration.columns\"\r\n (cdkDropListDropped)=\"dropTable($event)\">\r\n >\r\n <!-- <ng-container matColumnDef=\"stt\">\r\n <th mat-header-cell class=\"c-th text-center px-4\" *matHeaderCellDef style=\"width: 50px\">#</th>\r\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item; let idx = index\"></td>\r\n </ng-container> -->\r\n <ng-container matColumnDef=\"invisible\">\r\n <th mat-header-cell class=\"c-th text-center px-4\" *matHeaderCellDef style=\"width: 96px\">\r\n {{ 'Hiển thị' }}\r\n </th>\r\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item\">\r\n <div class=\"d-flex\" style=\"gap: 8px\">\r\n <div class=\"c-handle\" (mousedown)=\"handleMouseDown()\" (mouseup)=\"handleMouseUp()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#5f6368\">\r\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\r\n <path\r\n d=\"M11 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm-2-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\" />\r\n </svg>\r\n </div>\r\n <sd-switch [model]=\"!item.invisible\" (modelChange)=\"item.invisible = !item.invisible\" />\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"title\">\r\n <th mat-header-cell class=\"c-th px-4\" *matHeaderCellDef>\r\n {{ 'Tiêu đề cột' }}\r\n </th>\r\n <td class=\"px-4\" mat-cell *matCellDef=\"let item\">\r\n <sd-input class=\"pb-5\" [placeholder]=\"item?.origin?.title\" [(model)]=\"item.title\" hideInlineError></sd-input>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"width\">\r\n <th mat-header-cell class=\"c-th px-4\" *matHeaderCellDef style=\"width: 80px\">\r\n {{ 'Rộng' }}\r\n </th>\r\n <td class=\"px-4\" mat-cell *matCellDef=\"let item\">\r\n <sd-input class=\"pb-5\" [placeholder]=\"item?.origin?.width\" [(model)]=\"item.width\" hideInlineError></sd-input>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"fixed\">\r\n <th mat-header-cell class=\"c-th text-center px-4\" *matHeaderCellDef style=\"width: 80px\">\r\n {{ 'Cố định' }}\r\n </th>\r\n <td class=\"text-center px-4\" mat-cell *matCellDef=\"let item\">\r\n <sd-switch [(model)]=\"item.fixed\" />\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"['invisible', 'title', 'width', 'fixed']; sticky: true\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: ['invisible', 'title', 'width', 'fixed']\"\r\n cdkDrag\r\n [cdkDragData]=\"row\"\r\n cdkDragLockAxis=\"y\"\r\n [cdkDragDisabled]=\"dragDisabled\"></tr>\r\n </table>\r\n </div>\r\n </div>\r\n }\r\n <ng-container sdFooter>\r\n <sd-button class=\"mr-8\" (click)=\"close()\" title=\"Bỏ qua\" color=\"secondary\"> </sd-button>\r\n <sd-button class=\"mr-8\" (click)=\"onReset()\" title=\"Mặc định\" color=\"primary\"> </sd-button>\r\n <sd-button (click)=\"onSave()\" title=\"Áp dụng\" type=\"fill\" color=\"primary\"> </sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdBadge } from '@sd-angular/core/components/badge';\nimport { SdSafeHtmlPipe } from '@sd-angular/core/pipes';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport { SdTableItem } from '../../models/table-item.model';\n\n@Component({\n selector: 'sd-desktop-cell-view',\n templateUrl: './desktop-cell-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, MatTooltipModule, SdBadge, SdSafeHtmlPipe],\n})\nexport class SdDesktopCellView {\n autoId?: string;\n @Input('autoId') set _autoId(val: string | undefined | null) {\n if (val) {\n this.autoId = val;\n }\n }\n @Input({ required: true }) column!: SdTableColumn;\n item!: SdTableItem;\n itemKey!: string;\n @Input({ required: true, alias: 'item' }) set _item(item: SdTableItem) {\n this.item = item;\n this.itemKey = item.data?.id?.toString() || item.data?.code?.toString() || item.data?.value?.toString();\n }\n constructor() {}\n}\n","@let view = item.meta.display[column.field];\n@if (view) {\n @if (view.isHtml) {\n @if (view.click) {\n <div\n [attr.data-autoId]=\"autoId\"\n (click)=\"view.click()\"\n class=\"text-break cursor-pointer\"\n [matTooltip]=\"view.tooltip\"\n [style]=\"view.cellStyle\"\n [innerHTML]=\"view.data | sdSafeHtml\"\n aria-hidden=\"true\"></div>\n } @else {\n <div\n [attr.data-autoId]=\"autoId\"\n class=\"text-break\"\n [matTooltip]=\"view.tooltip\"\n [style]=\"view.cellStyle\"\n [innerHTML]=\"view.data | sdSafeHtml\"></div>\n }\n } @else {\n @if (view.badge) {\n @if (view.data) {\n <sd-badge\n [attr.data-autoId]=\"autoId\"\n [type]=\"view.badge.type\"\n [title]=\"view.data\"\n [color]=\"view.badge.color\"\n [icon]=\"view.badge.icon\"\n [tooltip]=\"view.tooltip\"\n (click)=\"!!view.click && view.click()\"></sd-badge>\n }\n } @else {\n @if (view.click) {\n <div class=\"text-break\" [style]=\"view.cellStyle\" [matTooltip]=\"view.tooltip\">\n <a [attr.data-autoId]=\"autoId\" href=\"javascript:;\" (click)=\"view.click()\">{{ view.data }}</a>\n </div>\n } @else {\n <div [attr.data-autoId]=\"autoId\" class=\"text-break\" [style]=\"view.cellStyle\" [matTooltip]=\"view.tooltip\">{{ view.data }}</div>\n }\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { SdTabelCellDefDirective } from '../../directives/sd-table-cell-def.directive';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableItem } from '../../models/table-item.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdDesktopCellView } from '../desktop-cell-view/desktop-cell-view.component';\r\n\r\n@Component({\r\n selector: 'sd-desktop-cell',\r\n templateUrl: './desktop-cell.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule, SdDesktopCellView],\r\n})\r\nexport class SdDesktopCell {\r\n autoId?: string;\r\n @Input('autoId') set _autoId(val: string | undefined | null) {\r\n if (val) {\r\n this.autoId = `${val}-view-`;\r\n }\r\n }\r\n @Input() value: any;\r\n @Input({ required: true }) column!: SdTableColumn;\r\n item!: SdTableItem;\r\n itemKey!: string;\r\n @Input({ required: true, alias: 'item' }) set _item(item: SdTableItem) {\r\n this.item = item;\r\n this.itemKey = item.data?.id?.toString() || item.data?.code?.toString() || item.data?.value?.toString();\r\n }\r\n @Input() cellDef: Record<string, SdTabelCellDefDirective> = {};\r\n constructor() {}\r\n}\r\n","@if (cellDef[column.field]) {\n <ng-container\n *ngTemplateOutlet=\"cellDef[column.field].templateRef; context: { item: item.data, column: column, autoId: autoId + '-' + column.field + '-' + itemKey }\">\n </ng-container>\n} @else if (column.cellDef) {\n <ng-container *ngTemplateOutlet=\"column.cellDef; context: { item: item.data, column: column, autoId: autoId + '-' + column.field + '-' + itemKey }\"> </ng-container>\n} @else {\n <sd-desktop-cell-view [column]=\"column\" [item]=\"item\" [autoId]=\"autoId + '-' + column.field + '-' + itemKey\"></sd-desktop-cell-view>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableCommand } from '../models/table-command.model';\nimport { SdTableItem } from '../models/table-item.model';\n@Pipe({\n name: 'commandDisable',\n})\nexport class SdCommandDisablePipe implements PipeTransform {\n transform(item: SdTableItem, command: SdTableCommand): boolean {\n if ('disabled' in command) {\n const { disabled } = command;\n if (typeof disabled === 'boolean') {\n return disabled;\n }\n return disabled!(item.data);\n }\n return false;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableCommand, SdTableCommandChildren, SdTableCommandNormal } from '../models/table-command.model';\nimport { SdTableItem } from '../models/table-item.model';\nimport { StringUtilities } from '@sd-angular/core/utilities';\n@Pipe({\n name: 'commandFilter',\n})\nexport class SdCommandFilterPipe implements PipeTransform {\n async transform(item: SdTableItem, commands: SdTableCommand[]): Promise<Command[]> {\n const results: Command[] = [];\n if (!commands) {\n return results;\n }\n for (const command of commands) {\n let flag = false;\n const { hidden } = command;\n if (hidden === undefined) {\n flag = true;\n } else if (typeof hidden === 'boolean') {\n if (!hidden) {\n flag = true;\n }\n } else {\n const isHidden = hidden(item.data);\n if (isHidden instanceof Promise) {\n if (!(await isHidden)) {\n flag = true;\n }\n } else {\n if (!isHidden) {\n flag = true;\n }\n }\n }\n if (flag) {\n const icon = this.#icon(item, command);\n const title = this.#title(item, command);\n if ('children' in command) {\n const children: CommandNormal[] = [];\n for (const childCommand of command.children) {\n const { hidden } = childCommand;\n const icon = this.#icon(item, childCommand);\n const title = this.#title(item, childCommand);\n if (hidden === undefined) {\n children.push({\n ...childCommand,\n type: 'normal',\n icon,\n title,\n key: this.#key(item, childCommand),\n });\n } else if (typeof hidden === 'boolean') {\n if (!hidden) {\n children.push({\n ...childCommand,\n type: 'normal',\n icon,\n title,\n key: this.#key(item, childCommand),\n });\n }\n } else {\n const isHidden = hidden(item.data);\n if (isHidden instanceof Promise) {\n if (!(await isHidden)) {\n children.push({\n ...childCommand,\n type: 'normal',\n icon,\n title,\n key: this.#key(item, childCommand),\n });\n }\n } else {\n if (!isHidden) {\n children.push({\n ...childCommand,\n type: 'normal',\n icon,\n title,\n key: this.#key(item, childCommand),\n });\n }\n }\n }\n }\n if (children.length > 0) {\n results.push({\n ...command,\n type: 'children',\n icon,\n title,\n key: this.#key(item, command),\n children,\n });\n }\n } else {\n results.push({\n ...command,\n type: 'normal',\n icon,\n title,\n key: this.#key(item, command)\n });\n }\n }\n }\n return results;\n }\n\n #icon = (item: SdTableItem, command: SdTableCommand) => {\n if (!command?.icon) {\n return 'more_vert';\n }\n if (typeof command.icon === 'string') {\n return command.icon;\n }\n return command.icon(item.data);\n };\n\n #title = (item: SdTableItem, command: SdTableCommand) => {\n if (!command?.title) {\n return '';\n }\n if (typeof command.title === 'string') {\n return command.title;\n }\n return command.title(item.data);\n };\n\n // Key dùng để gán cho autoId\n #key = (item: SdTableItem, command: SdTableCommand) => {\n const icon = this.#icon(item, command);\n const title = this.#title(item, command);\n return `${icon || 'noicon'}-${StringUtilities.changeAliasLowerCase(title) || 'notitle'}`;\n };\n}\n\ntype Command<T = any> = CommandNormal<T> | CommandChildren<T>;\n\ninterface CommandNormal<T = any> extends SdTableCommandNormal<T> {\n type: 'normal';\n key: string;\n title: string;\n icon: string;\n}\n\ninterface CommandChildren<T = any> extends SdTableCommandChildren<T> {\n type: 'children';\n key: string;\n title: string;\n icon: string;\n children: CommandNormal<T>[];\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableCommand } from '../models/table-command.model';\nimport { SdTableItem } from '../models/table-item.model';\n@Pipe({\n name: 'commandTitle',\n})\nexport class SdCommandTitlePipe implements PipeTransform {\n transform(command: SdTableCommand, item: SdTableItem): string {\n if (!command?.title) {\n return '';\n }\n if (typeof command.title === 'string') {\n return command.title;\n }\n return command.title(item.data);\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { SdTableCommand } from '../../models/table-command.model';\r\nimport { SdTableItem } from '../../models/table-item.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdCommandDisablePipe } from '../../pipes/command-disable.pipe';\r\nimport { SdCommandFilterPipe } from '../../pipes/command-filter.pipe';\r\nimport { SdCommandTitlePipe } from '../../pipes/command-title.pipe';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'sd-desktop-command',\r\n templateUrl: './desktop-command.component.html',\r\n styleUrls: ['./desktop-command.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatTooltipModule,\r\n MatMenuModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n SdCommandDisablePipe,\r\n SdCommandFilterPipe,\r\n SdCommandTitlePipe,\r\n ],\r\n})\r\nexport class SdDesktopCommand {\r\n autoId?: string;\r\n @Input('autoId') set _autoId(val: string | undefined | null) {\r\n if (val) {\r\n this.autoId = `${val}-command-`;\r\n }\r\n }\r\n item!: SdTableItem;\r\n itemKey!: string;\r\n @Input({ required: true, alias: 'item' }) set _item(item: SdTableItem) {\r\n this.item = item;\r\n this.itemKey = item.data?.id?.toString() || item.data?.code?.toString() || item.data?.value?.toString();\r\n }\r\n @Input({ required: true }) itemIndex!: number;\r\n commands: SdTableCommand[] = [];\r\n @Input('commands') set _commands(commands: SdTableCommand[] | undefined | null) {\r\n this.commands = commands || [];\r\n }\r\n}\r\n","@let filteredCommands = item | commandFilter: commands | async;\n@if (filteredCommands?.length) {\n @for (command of filteredCommands; track command.key) {\n @if (command.type === 'normal') {\n <button\n [attr.data-autoId]=\"autoId + command.key + '-' + (itemKey || itemIndex)\"\n (click)=\"command.click(item.data)\"\n [matTooltip]=\"command | commandTitle: item\"\n aria-hidden=\"true\"\n [disabled]=\"item | commandDisable: command\"\n mat-icon-button>\n <mat-icon [color]=\"command.color || 'secondary'\" [fontSet]=\"command.fontSet!\">{{ command.icon }}</mat-icon>\n </button>\n } @else {\n <button [attr.data-autoId]=\"autoId + command.key + '-' + (itemKey || itemIndex)\" [matMenuTriggerFor]=\"menu\" aria-hidden=\"true\" mat-icon-button>\n @if (command.icon) {\n <mat-icon class=\"c-icon\" [fontSet]=\"command.fontSet!\">{{ command.icon }} </mat-icon>\n } @else {\n <mat-icon class=\"c-icon\">more_vert</mat-icon>\n }\n </button>\n <mat-menu #menu=\"matMenu\">\n <span>\n @for (childCommand of command.children; track childCommand.key) {\n <button\n [attr.data-autoId]=\"autoId + childCommand.key + '-' + (itemKey || itemIndex)\"\n mat-menu-item\n (click)=\"childCommand.click(item.data)\"\n [disabled]=\"item | commandDisable: childCommand\">\n @if (!childCommand.htmlTemplate) {\n <div>\n <mat-icon [color]=\"childCommand.color || 'secondary'\" [fontSet]=\"command.fontSet!\">{{ childCommand.icon }} </mat-icon>\n <span> {{ childCommand.title }}</span>\n </div>\n } @else {\n <div [innerHTML]=\"childCommand.htmlTemplate(item.data)\"></div>\n }\n </button>\n }\n </span>\n </mat-menu>\n }\n }\n}\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelectionList } from '@angular/material/list';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdInput } from '@sd-angular/core/forms';\r\nimport {\r\n SdConfirmService,\r\n SdExcelColumn,\r\n SdExcelService,\r\n SdLoadingService,\r\n SdNotifyService,\r\n} from '@sd-angular/core/services';\r\n// import hash from 'object-hash';\r\nimport { SdTableColumn, SdTableOption } from '../../models';\r\nimport { ConfiguredTableResult } from '../../models/table-option-config.model';\r\nimport { SdTableOptionExportDefault } from '../../models/table-option-export.model';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\nimport { SdExcelSheet } from '@sd-angular/core/services/excel';\r\n\r\n@Component({\r\n selector: 'sd-popup-export',\r\n templateUrl: './popup-export.component.html',\r\n styleUrls: ['./popup-export.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [CommonModule, MatTableModule, MatIconModule, MatChipsModule, SdButton, SdInput, SdModal],\r\n})\r\n// eslint-disable-next-line @angular-eslint/component-class-suffix\r\nexport class SdPopupExport {\r\n tableOption!: SdTableOption;\r\n columns: SdExcelColumn[] = [];\r\n templateName?: string | null;\r\n enableCreating = false;\r\n @ViewChild('modal') modal?: SdModal;\r\n @ViewChild('listGroups') listGroups?: MatSelectionList;\r\n\r\n selected: Record<string, boolean> = {};\r\n files: any[] = [];\r\n\r\n @Output() export = new EventEmitter<{\r\n file: any | null;\r\n columns: SdExcelColumn[];\r\n isCSV?: boolean;\r\n }>();\r\n form = new FormGroup({});\r\n\r\n exportOption?: SdTableOptionExportDefault;\r\n @Input('tableOption') set _tableOption(option: SdTableOption) {\r\n this.tableOption = option;\r\n if (option.export?.type === 'default') {\r\n this.exportOption = option.export;\r\n }\r\n this.columns = this.#getExportableColumns();\r\n }\r\n @Input() configuration?: ConfiguredTableResult;\r\n private get key(): string | null {\r\n const prefix = '93889e78-f971-4a1d-8c73-fe2321af9233';\r\n if (!this.exportOption?.key) {\r\n return null;\r\n }\r\n return SdUtilities.hash({\r\n prefix,\r\n key: this.exportOption?.key,\r\n });\r\n }\r\n\r\n private get tableColumns() {\r\n const columns: SdExcelColumn[] = [];\r\n this.tableOption.columns\r\n .filter(e => !e.export?.disabled)\r\n .forEach(column => {\r\n if (column.type === 'children') {\r\n column.children\r\n ?.filter(e => !e.export?.disabled)\r\n .forEach(childColumn => {\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n columns.push(column);\r\n });\r\n return columns.map(e => ({\r\n field: e.field,\r\n title: e.title,\r\n description: e.description,\r\n width: e.width,\r\n }));\r\n }\r\n private get additionalColumns() {\r\n return (this.exportOption?.columns?.filter(e => !e.export?.disabled) || []).map(e => ({\r\n field: e.field,\r\n title: e.title,\r\n description: e.description,\r\n width: e.width,\r\n }));\r\n }\r\n\r\n #getExportableColumns = (): SdExcelColumn[] => {\r\n return [...this.tableColumns, ...this.additionalColumns];\r\n };\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private loadingService: SdLoadingService,\r\n private excelService: SdExcelService,\r\n private notifyService: SdNotifyService,\r\n private confirmService: SdConfirmService\r\n ) {}\r\n\r\n open = async () => {\r\n if (!this.key) {\r\n this.exportDefault();\r\n return;\r\n }\r\n this.loadFiles();\r\n this.selected = {};\r\n this.modal?.open();\r\n this.ref.detectChanges();\r\n };\r\n\r\n #getExportColumns = (): SdExcelColumn[] => {\r\n if (this.configuration) {\r\n const columns = [...this.tableColumns];\r\n const { firstColumns, secondColumns } = this.configuration;\r\n const displayColumns: SdTableColumn[] = [...firstColumns, ...secondColumns].reduce<SdTableColumn[]>((first, next) => {\r\n const column = this.tableOption.columns.find(e => e.field === next.field);\r\n if (!column) {\r\n return first;\r\n }\r\n if (column.type !== 'children') {\r\n return [...first, column];\r\n }\r\n return [...first, ...column.children];\r\n }, []);\r\n const results = displayColumns\r\n .map(e => ({\r\n ...e,\r\n data: columns.find(e1 => e1.field === e.field),\r\n }))\r\n .filter(e => !!e.data)\r\n .map(e => e.data!);\r\n return [...results, ...this.additionalColumns];\r\n } else {\r\n return this.columns;\r\n }\r\n };\r\n\r\n exportDefault = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isCSV: false,\r\n });\r\n };\r\n\r\n exportCSV = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isCSV: true,\r\n });\r\n };\r\n\r\n loadFiles = async (group: string | undefined = undefined) => {\r\n // TODO: Fix\r\n // this.files = await this.exportService.filesInFolder({\r\n // key: this.key!,\r\n // group,\r\n // });\r\n // this.ref.markForCheck();\r\n };\r\n\r\n #initTemplate = async (fileName?: string) => {\r\n const sheets: SdExcelSheet[] = [];\r\n if (Array.isArray(this.exportOption?.sheets)) {\r\n for (const sheet of this.exportOption.sheets) {\r\n if (sheet.name && sheet.items && sheet.headers) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n headers: sheet.headers,\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n headers: sheet.headers,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return await this.excelService.generateTemplate({\r\n fileName: fileName || this.exportOption?.fileName,\r\n columns: this.columns,\r\n sheets,\r\n });\r\n };\r\n\r\n generateTemplate = async () => {\r\n this.loadingService.start();\r\n await this.#initTemplate().finally(this.loadingService.stop);\r\n };\r\n\r\n generateAndUploadTemplate = async (fileName?: string) => {\r\n const sheets: SdExcelSheet[] = [];\r\n if (Array.isArray(this.exportOption?.sheets)) {\r\n for (const sheet of this.exportOption?.sheets) {\r\n if (sheet.name && sheet.items && sheet.headers) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n headers: sheet.headers,\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n headers: sheet.headers,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n // TODO: Fix\r\n // return await this.exportService.generateUploadTemplate({\r\n // key: this.key!,\r\n // template: {\r\n // fileName: fileName || this.tableOption?.export?.fileName,\r\n // columns: this.columns.filter(e => this.selected[e.field]),\r\n // sheets,\r\n // },\r\n // });\r\n };\r\n\r\n onExport = (file: any) => {\r\n this.export.emit({\r\n file,\r\n columns: this.columns,\r\n });\r\n this.ref.detectChanges();\r\n };\r\n\r\n uploadTemplate = async () => {\r\n // TODO: Fix\r\n // const file = await this.exportService.uploadTemplate({\r\n // key: this.key!,\r\n // });\r\n // if (file) {\r\n // this.files = [...this.files, file];\r\n // this.ref.detectChanges();\r\n // }\r\n };\r\n\r\n removeFile = (file: any) => {\r\n this.confirmService.confirm('Remove template').then(() => {\r\n // TODO: Fix\r\n // this.exportService.removeFile({\r\n // key: this.key!,\r\n // fileName: file.fileName,\r\n // });\r\n const idx = this.files.indexOf(file);\r\n this.files.splice(idx, 1);\r\n this.files = [...this.files];\r\n this.ref.detectChanges();\r\n });\r\n };\r\n\r\n createTemplate = async () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n if (!this.columns.some(e => this.selected[e.field])) {\r\n this.notifyService.warning(`Vui lòng chọn cột dữ liệu để xuất`);\r\n return;\r\n }\r\n this.loadingService.start();\r\n const fileName = this.templateName + '.xlsx';\r\n try {\r\n const result = await this.generateAndUploadTemplate(fileName);\r\n // TODO: Fix\r\n // if (result?.filePath) {\r\n // const file: SdExportFile = {\r\n // filePath: result.filePath,\r\n // fileName: result.fileName,\r\n // };\r\n // this.onExport(file);\r\n // this.templateName = null;\r\n // this.enableCreating = false;\r\n // this.files = [...this.files, file];\r\n // this.ref.detectChanges();\r\n // }\r\n } finally {\r\n this.loadingService.stop();\r\n }\r\n };\r\n\r\n templateNameValidator = (val: string): string => {\r\n const regex = /^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$/;\r\n if (!val) {\r\n return 'Please enter your template name';\r\n }\r\n if (val.length > 50) {\r\n return 'Template name is too long';\r\n }\r\n if (!regex.test(val)) {\r\n return 'Template name only contains letters, numbers and spaces';\r\n }\r\n return '';\r\n };\r\n}\r\n","<sd-modal width=\"907px\" [title]=\"'Exported template'\" #modal>\n <div class=\"row\">\n <div *ngIf=\"!files?.length\" class=\"col-12\">\n <div class=\"c-empty\">\n <img class=\"c-empty-image\" alt=\"empty-image\" />\n <div class=\"T14R\">{{ 'There are no exported templates' }}</div>\n </div>\n </div>\n <ng-container *ngIf=\"files?.length\">\n <div class=\"col-12\">\n <div class=\"c-table\" style=\"max-height: 50vh\">\n <table mat-table [dataSource]=\"files\">\n <ng-container matColumnDef=\"stt\">\n <th mat-header-cell class=\"c-th text-center px-5\" *matHeaderCellDef style=\"width: 50px\">#</th>\n <td class=\"text-center px-5\" mat-cell *matCellDef=\"let item; let idx = index\">\n {{ idx + 1 }}\n </td>\n </ng-container>\n <ng-container matColumnDef=\"fileName\">\n <th mat-header-cell class=\"c-th px-5\" *matHeaderCellDef>\n {{ 'File name' }}\n </th>\n <td class=\"px-5\" mat-cell *matCellDef=\"let item\">\n {{ item.fileName }}\n </td>\n </ng-container>\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell class=\"c-th px-5\" *matHeaderCellDef style=\"width: 80px\"></th>\n <td class=\"px-5\" mat-cell *matCellDef=\"let item\">\n <div class=\"d-flex\">\n <button mat-icon-button aria-label=\"delete\" (click)=\"removeFile(item)\">\n <mat-icon>delete</mat-icon>\n </button>\n <button mat-icon-button aria-label=\"download\" (click)=\"onExport(item)\">\n <mat-icon>download</mat-icon>\n </button>\n </div>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"['stt', 'fileName', 'action']; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['stt', 'fileName', 'action']\"></tr>\n </table>\n </div>\n </div>\n <div *ngIf=\"files.length < 5\" class=\"col-12 mt-10\">\n <sd-button class=\"mr-4\" [title]=\"'New template'\" (click)=\"enableCreating = true\" color=\"info\" [disabled]=\"enableCreating\">\n </sd-button>\n <sd-button *ngIf=\"exportOption?.enableUpload\" [title]=\"'Upload template'\" (click)=\"uploadTemplate()\" type=\"outline\">\n </sd-button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"enableCreating || !files?.length\">\n <div class=\"col-12 mt-20\">\n <div class=\"T14R\">{{ 'Select columns for creating template' }}:</div>\n </div>\n <div class=\"col-12\">\n <mat-chip-listbox selectable=\"true\" multiple=\"true\">\n <ng-container *ngFor=\"let column of columns\">\n <mat-chip-option [selected]=\"selected[column.field]\" (click)=\"selected[column.field] = !selected[column.field]\">\n {{ column.title }}\n </mat-chip-option>\n </ng-container>\n </mat-chip-listbox>\n </div>\n <div class=\"col-12 row\">\n <div class=\"col-10\">\n <sd-input [form]=\"form\" [label]=\"'Template name'\" [(model)]=\"templateName\" [validator]=\"templateNameValidator\"></sd-input>\n </div>\n <div class=\"col-2 mt-8\">\n <sd-button width=\"100%\" [title]=\"'Save'\" color=\"info\" (click)=\"createTemplate()\"> </sd-button>\n </div>\n </div>\n </ng-container>\n </div>\n</sd-modal>\n","import { SdBadge } from '@sd-angular/core/components/badge';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\n// import hash from 'object-hash';\r\nexport interface SdTableMetaSelector {\r\n selectable?: boolean;\r\n isSelected?: boolean;\r\n actions?: string[];\r\n}\r\n\r\nexport interface SdTableMetaExpand {\r\n isExpanded?: boolean;\r\n isExpanding?: boolean;\r\n data?: any;\r\n}\r\n\r\nexport interface SdTableDisplay {\r\n tooltip?: string;\r\n badge?: {\r\n type: SdBadge['type'] | undefined | null;\r\n color: SdBadge['color'] | undefined | null;\r\n icon?: string | undefined | null;\r\n title?: string | number | null | undefined;\r\n };\r\n cellStyle?: Record<string, string>;\r\n data: string | number | undefined | null;\r\n isHtml: boolean;\r\n click?: () => void;\r\n}\r\n\r\nexport interface SdTableMeta<T> {\r\n id: string;\r\n display: Record<string, SdTableDisplay>;\r\n selector?: SdTableMetaSelector;\r\n expand?: SdTableMetaExpand;\r\n group?: {\r\n htmlTemplate?: string;\r\n items?: SdTableItem<T>[];\r\n };\r\n}\r\n\r\nexport interface SdTableItem<T = any> {\r\n meta: SdTableMeta<T>;\r\n data: T;\r\n}\r\n\r\nexport const MapToSdTableItem = <T = any>(item: T): SdTableItem<T> => ({\r\n data: item,\r\n meta: {\r\n id: SdUtilities.hash({ data: item }),\r\n display: {},\r\n expand: {\r\n isExpanding: false,\r\n isExpanded: false,\r\n },\r\n group: {},\r\n selector: { actions: [], isSelected: false, selectable: false },\r\n },\r\n});\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n// import hash from 'object-hash';\r\nimport { SdTableOption } from '../models/table-option.model';\r\nimport { MapToSdTableItem, SdTableItem } from '../models/table-item.model';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\n@Pipe({\r\n name: 'sdGroup',\r\n})\r\nexport class SdGroupPipe implements PipeTransform {\r\n transform(items: SdTableItem[], gridOption: SdTableOption): SdTableItem[] {\r\n const { group } = gridOption;\r\n if (!group) {\r\n return items;\r\n }\r\n const { fields, htmlTemplate } = group;\r\n if (!fields?.length) {\r\n return items;\r\n }\r\n const groupItem: Record<string, SdTableItem[]> = {};\r\n for (const item of items) {\r\n let obj = {};\r\n for (const field of fields) {\r\n obj = {\r\n ...obj,\r\n ...((item as any)[field] ?? { [field]: (item as any)[field] }),\r\n };\r\n }\r\n const key = SdUtilities.hash(obj);\r\n if (!groupItem[key]) {\r\n groupItem[key] = [];\r\n }\r\n groupItem[key].push(item);\r\n }\r\n const results: SdTableItem[] = [];\r\n for (const key of Object.keys(groupItem)) {\r\n const result = MapToSdTableItem({}, );\r\n result.meta.group!.items = groupItem[key];\r\n result.meta.group!.htmlTemplate = htmlTemplate(groupItem[key]);\r\n results.push(result);\r\n for (const item of groupItem[key]) {\r\n results.push(item);\r\n }\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\nimport { SdTableItem } from '../models/table-item.model';\nimport { SdUtilities } from '@sd-angular/core/utilities';\n@Pipe({\n name: 'selectionDisabled',\n})\nexport class SdSelectionDisabledPipe implements PipeTransform {\n transform = (selectedItems: SdTableItem[], rowData: SdTableItem, selection: SdTableOptionSelector): boolean => {\n const { disabled, actions } = selection;\n if (!actions?.length) {\n if (!disabled) {\n rowData.meta.selector!.selectable = true;\n return false;\n }\n rowData.meta.selector!.selectable = !disabled(rowData, selectedItems);\n return !rowData.meta.selector!.selectable;\n }\n // Kiểm tra có bị disabled theo function không\n // Dữ liệu chưa được check thì kiểm tra hàm disable nếu có\n if (disabled && !rowData.meta.selector!.isSelected) {\n // Nếu disabled và dữ liệu chưa được check\n if(disabled(rowData, selectedItems)) {\n return true;\n }\n }\n // Lọc các action theo selectedItems hiện tại\n const availableActions = actions.filter(action => {\n if ('children' in action) {\n for (const childAction of action.children) {\n const key = SdUtilities.hash(childAction);\n if (selectedItems.every(e => e.meta.selector?.actions?.includes(key))) {\n return true;\n }\n }\n return false;\n } else {\n const key = SdUtilities.hash(action);\n return selectedItems.every(e => e.meta.selector?.actions?.includes(key));\n }\n });\n // Kiểm tra rowData có action nào thỏa hay ko, nếu ko thì disabled\n for (const action of availableActions) {\n if ('children' in action) {\n for (const childAction of action.children) {\n if (rowData.meta.selector?.actions?.includes(SdUtilities.hash(childAction))) {\n return false;\n }\n }\n } else {\n if (rowData.meta.selector?.actions?.includes(SdUtilities.hash(action))) {\n return false;\n }\n }\n }\n return true;\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\nimport { SdTableItem } from '../models/table-item.model';\n@Pipe({\n name: 'selectionVisibleSelectAll',\n})\nexport class SdSelectionVisibleSelectAllPipe implements PipeTransform {\n transform = async (items: SdTableItem[], selector: SdTableOptionSelector | undefined): Promise<boolean> => {\n // Nếu chỉ chọn 1 thì không có select all\n if (selector?.single) {\n return false;\n }\n if (!items.length) {\n return false;\n }\n if (!selector?.actions?.length) {\n return true;\n }\n if (selector.actions.some(e => ('children' in e && e.children.some(e1 => e1.isGrouped)) || e.isGrouped)) {\n return false;\n }\n await new Promise(resolve => setTimeout(resolve, 500));\n const first = items.find(t => t.meta.selector?.actions?.length);\n if (first) {\n for (const action of first.meta.selector?.actions!) {\n if (items.filter(t => t.meta.selector?.actions?.length).every(e => e.meta.selector?.actions?.includes(action))) {\n return true;\n }\n }\n }\n return false;\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\nimport { SdTableItem } from '../models/table-item.model';\nimport { SdUtilities } from '@sd-angular/core/utilities';\n\n@Pipe({\n name: 'selectionVisible',\n})\nexport class SdSelectionVisiblePipe implements PipeTransform {\n transform = (rowData: SdTableItem, selection: SdTableOptionSelector | undefined): boolean => {\n const groupedActions: string[] = [];\n rowData.meta.selector!.actions = rowData.meta.selector!.actions || [];\n if (!selection?.actions?.length) {\n rowData.meta.selector!.selectable = true;\n return rowData.meta.selector!.selectable;\n }\n for (const action of selection?.actions) {\n if ('children' in action) {\n let flag = false;\n let hasGroup = false;\n for (const child of action.children) {\n const { hidden, isGrouped } = child;\n const key = SdUtilities.hash(child);\n if (isGrouped) {\n hasGroup = true;\n }\n if (typeof hidden === 'function') {\n if (!hidden(rowData.data)) {\n flag = true;\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n } else if (!hidden) {\n flag = true;\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n }\n if (flag) {\n rowData.meta.selector!.actions.push(SdUtilities.hash(action));\n if (hasGroup) {\n groupedActions.push(SdUtilities.hash(action));\n }\n }\n } else {\n const { hidden, isGrouped } = action;\n const key = SdUtilities.hash(action);\n if (typeof hidden === 'function') {\n if (!hidden(rowData.data)) {\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n } else if (!hidden) {\n rowData.meta.selector!.actions.push(key);\n if (isGrouped) {\n groupedActions.push(key);\n }\n }\n }\n }\n rowData.meta.selector!.selectable = !!rowData.meta.selector!.actions?.length;\n if (!rowData.meta.selector!.selectable || !groupedActions.length || rowData?.meta.group?.items?.length) {\n return rowData.meta.selector!.selectable;\n }\n // Đối với trường hợp grouped, tuy selectable là true nhưng vẫn ẩn đi checkbox\n // nếu các action đều thuộc groupedActions và rowData ko phải là dòng group\n return rowData.meta.selector!.actions.some(action => !groupedActions.includes(action));\n };\n}\n","import { Injectable } from '@angular/core';\n// import hash from 'object-hash';\nimport { SdStorageService } from '@sd-angular/core/services';\nimport { SdUtilities } from '@sd-angular/core/utilities';\nimport { SdOperator } from '@sd-angular/core/utilities/models';\nimport { map, startWith } from 'rxjs/operators';\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\nimport { SdTableColumn } from '../../models/table-column.model';\nimport {\n SdTableExternalFilter,\n SdTableOptionFilter,\n TableFilterConfiguration,\n TableFilterRegister,\n TableFilterValue,\n} from './table-filter.model';\n\n@Injectable()\nexport class SdTableFilterService {\n #filterConfiguration = 'GRID-FILTER-CONFIGURATION';\n #filterValue = 'GRID-FILTER-VALUE';\n #cache: Record<string, TableFilterRegister> = {};\n constructor(private storageService: SdStorageService) {}\n register = (\n filter: SdTableOptionFilter | undefined,\n args: {\n id: string;\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n filterDefs: SdTableFilterDefDirective[] | undefined;\n columnOperator?: Record<string, SdOperator>;\n }\n ) => {\n let cacheSession = false;\n\n const { id, columns, externalFilters } = args;\n const tempKey = SdUtilities.hash({\n id,\n columns: columns?.map(e => e.field).filter(field => !!field) || [],\n externalFilters: externalFilters?.map(e => e.field).filter(field => !!field) || [],\n });\n const key = filter?.key || tempKey;\n if (!filter?.key) {\n cacheSession = true; // Nếu không có key thì chỉ lưu theo session\n }\n if (!this.#cache[key]) {\n // Setting của filter configuration\n const filterConfiguration = this.storageService.create<TableFilterConfiguration>(\n {\n prefix: this.#filterConfiguration,\n key,\n },\n {\n default: this.#defaultConfiguration(args),\n type: cacheSession ? 'session' : undefined,\n }\n );\n // Lấy giá trị configuration merge với giá trị defaultShowing của args nếu như args có thay đổi\n filterConfiguration.set(this.#initConfiguration(args, filterConfiguration.get()));\n // Setting của filter value\n const filterValue = this.storageService.create<TableFilterValue>(\n {\n prefix: this.#filterValue,\n key: !filter?.cacheable ? tempKey : key,\n },\n {\n default: this.#defaultValue(args),\n type: cacheSession || !filter?.cacheable ? 'session' : undefined,\n }\n );\n // Lấy giá trị value merge với giá trị default của args nếu như args có thay đổi\n filterValue.set(this.#initValue(args, filterValue.get()));\n this.#cache[key] = {\n configuration: {\n get: (): TableFilterConfiguration => {\n return filterConfiguration.get();\n },\n set: (configuration: Partial<TableFilterConfiguration>): TableFilterConfiguration => {\n const { inlineExternal } = configuration;\n filterConfiguration.set({\n inlineExternal: inlineExternal!,\n });\n return {\n inlineExternal: inlineExternal!,\n };\n },\n remove: () => {\n filterConfiguration.set(this.#defaultConfiguration(args));\n },\n observer: filterConfiguration.observer.pipe(\n startWith(filterConfiguration.get()),\n // Sử dụng mặc định nếu bị reset\n map(configuration => configuration || this.#defaultConfiguration(args))\n ),\n },\n value: {\n get: (): TableFilterValue => {\n return filterValue.get();\n },\n set: (value: Partial<TableFilterValue>): TableFilterValue => {\n const keys = Object.keys(value || {});\n const current = filterValue.get();\n const { columnOperator, columnFilter, externalFilter } = current;\n const updatedFilter = {\n // Filter column\n columnOperator: keys.includes('columnOperator') ? value?.columnOperator || {} : columnOperator,\n columnFilter: keys.includes('columnFilter') ? value?.columnFilter || {} : columnFilter,\n // Filter external\n externalFilter: keys.includes('externalFilter') ? value?.externalFilter || {} : externalFilter,\n // Force\n notReload: !!value?.notReload,\n };\n filterValue.set({\n ...updatedFilter,\n // Kiểm tra có đang lọc hay không\n filtered: this.#filtered(value),\n });\n return updatedFilter;\n },\n remove: () => {\n filterValue.set(this.#defaultValue(args));\n },\n observer: filterValue.observer.pipe(\n startWith(filterValue.get()),\n // Sử dụng mặc định nếu bị reset\n map(value => value || this.#defaultValue(args))\n ),\n },\n };\n }\n return this.#cache[key];\n };\n\n #filtered = (filterReq: Partial<TableFilterValue>): boolean => {\n const { columnFilter, externalFilter } = filterReq;\n if (\n Object.values({ ...columnFilter, ...externalFilter }).some(val => {\n // Nếu là mảng và mảng có phần tử thì xem như là có filter\n if (Array.isArray(val)) {\n return !!val.length;\n }\n // Nếu là object (date) và có from/to thì xem như là có filter\n if (val && typeof val === 'object') {\n if ('from' in val && !!val.from) {\n return true;\n }\n if ('to' in val && !!val.to) {\n return true;\n }\n return false;\n }\n return val !== undefined && val !== null && val !== '';\n })\n ) {\n return true;\n }\n return false;\n };\n\n #defaultConfiguration = (args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n }): TableFilterConfiguration => {\n const { externalFilters } = args;\n const inlineExternal: Record<string, boolean> = {};\n // Filter external\n for (const item of externalFilters || []) {\n inlineExternal[item.field] = !!item?.defaultShowing;\n }\n return {\n // Filter external\n inlineExternal,\n };\n };\n\n #defaultValue = (args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n columnOperator?: Record<string, SdOperator>;\n }): TableFilterValue => {\n const columnFilter: Record<string, any> = {};\n const externalFilter: Record<string, any> = {};\n const columnOperator: Record<string, SdOperator> = args.columnOperator || {};\n const { columns, externalFilters } = args;\n // Filter column\n for (const item of columns || []) {\n columnFilter[item.field] = item?.filter?.default;\n if (item?.filter?.operator?.enable && item?.filter?.operator?.default) {\n columnOperator[item.field] = item.filter.operator.default;\n }\n }\n // Filter external\n for (const item of externalFilters || []) {\n externalFilter[item.field] = item?.default;\n }\n return {\n // Filter column\n columnFilter,\n // Filter external\n externalFilter,\n // columnOperator\n columnOperator,\n };\n };\n\n #initConfiguration = (\n args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n filterDefs: SdTableFilterDefDirective[] | undefined;\n },\n configuration: TableFilterConfiguration\n ): TableFilterConfiguration => {\n const { externalFilters } = args;\n const inlineExternal: Record<string, boolean> = {};\n // Filter external\n for (const item of externalFilters || []) {\n inlineExternal[item.field] = configuration?.inlineExternal?.[item.field] ?? item?.defaultShowing;\n }\n return {\n // Filter external\n inlineExternal,\n };\n };\n\n #initValue = (\n args: {\n columns: SdTableColumn[] | undefined;\n externalFilters: SdTableExternalFilter[] | undefined;\n filterDefs: SdTableFilterDefDirective[] | undefined;\n columnOperator?: Record<string, SdOperator>;\n },\n value: TableFilterValue\n ): TableFilterValue => {\n const columnFilter: Record<string, any> = {};\n const externalFilter: Record<string, any> = {};\n const filterDef: Record<string, any> = {};\n const columnOperator: Record<string, SdOperator> = args.columnOperator || {};\n const { columns, externalFilters, filterDefs } = args;\n // Filter column\n for (const item of columns || []) {\n columnFilter[item.field] = value?.columnFilter?.[item.field] ?? item?.filter?.default;\n if (item?.filter?.operator?.enable && item?.filter?.operator?.default) {\n columnOperator[item.field] = item.filter.operator.default;\n }\n }\n // Filter external\n for (const item of externalFilters || []) {\n if (item.type === 'daterange') {\n externalFilter[item.field] = {\n from: value?.externalFilter?.[item.field]?.from ?? item.default?.from,\n to: value?.externalFilter?.[item.field]?.to ?? item.default?.to,\n };\n } else {\n externalFilter[item.field] = value?.externalFilter?.[item.field] ?? item?.default;\n }\n }\n return {\n // Filter column\n columnFilter,\n // Filter external\n externalFilter,\n //column Operator\n columnOperator,\n };\n };\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ContentChildren,\r\n Inject,\r\n Injectable,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n QueryList,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { MatPaginator, MatPaginatorIntl, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSort, MatSortModule } from '@angular/material/sort';\r\nimport { MatTable, MatTableModule } from '@angular/material/table';\r\nimport { SdExcelColumn, SdExcelService, SdNotifyService } from '@sd-angular/core/services';\r\nimport { Subject, Subscription, combineLatest, firstValueFrom, isObservable } from 'rxjs';\r\nimport { debounceTime, map, startWith, switchMap } from 'rxjs/operators';\r\nimport * as uuid from 'uuid';\r\nimport { SdTabelCellDefDirective } from './directives/sd-table-cell-def.directive';\r\nimport { SdMaterialSubInformationDefDirective } from './directives/sd-table-expand-def.directive';\r\nimport { SdTableFilterDefDirective } from './directives/sd-table-filter-def.directive';\r\nimport { SdMaterialFooterDefDirective } from './directives/sd-table-footer-def.directive';\r\nimport { SdTableColumn, SdTableColumnLazyValues, SdTableColumnNormal, SdTableColumnValues } from './models/table-column.model';\r\nimport { SdTableOption } from './models/table-option.model';\r\nimport { SdTableFilterRequest, TableFilterRegister } from './services/table-filter/table-filter.model';\r\n\r\nimport { CdkColumnDef } from '@angular/cdk/table';\r\nimport { CommonModule, DatePipe, DecimalPipe } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { SdBaseSecureComponent } from '@sd-angular/core/components/base';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdQuickAction } from '@sd-angular/core/components/quick-action';\r\nimport { SdDesktopDirective, SdHoverCopyDirective, SdScrollDirective } from '@sd-angular/core/directives';\r\nimport { SdFormatNumberPipe, SdSafeHtmlPipe } from '@sd-angular/core/pipes';\r\nimport { SD_EMPTY_STR, SdFilter, SdOperator, SdPagingReq } from '@sd-angular/core/utilities';\r\nimport { ArrayUtilities, DateUtilities, NumberUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { ColumnFilterComponent, ExternalFilterComponent } from './components';\r\nimport { ConfigComponent } from './components/config/config.component';\r\nimport { SdDesktopCell } from './components/desktop-cell/desktop-cell.component';\r\nimport { SdDesktopCommand } from './components/desktop-command/desktop-command.component';\r\nimport { SdPopupExport } from './components/popup-export/popup-export.component';\r\nimport { SelectorActionComponent } from './components/selector-action/selector-action.component';\r\nimport { DEFAULT_TABLE_CONFIG, ISdTableConfiguration, SD_TABLE_CONFIGURATION } from './configurations';\r\nimport { MapToSdTableItem, SdTableDisplay, SdTableItem } from './models/table-item.model';\r\nimport { ConfiguredTableResult } from './models/table-option-config.model';\r\nimport { SdTableOptionExportColumn } from './models/table-option-export.model';\r\nimport { SdGroupPipe } from './pipes/sd-group.pipe';\r\nimport { SdSelectionDisabledPipe } from './pipes/selection-disabled.pipe';\r\nimport { SdSelectionVisibleSelectAllPipe } from './pipes/selection-visible-select-all.pipe';\r\nimport { SdSelectionVisiblePipe } from './pipes/selection-visible.pipe';\r\nimport { ConfigService } from './services/config.service';\r\nimport { SdTableFilterService } from './services/table-filter/table-filter.service';\r\nimport { SdExcelSheet } from '@sd-angular/core/services/excel';\r\n\r\n@Injectable()\r\nexport class MatPaginatorIntlCro extends MatPaginatorIntl {\r\n override firstPageLabel = 'Trang đầu';\r\n override lastPageLabel = 'Trang cuối';\r\n override itemsPerPageLabel = 'Đang hiển thị';\r\n override nextPageLabel = 'Trang sau';\r\n override previousPageLabel = 'Trang trước';\r\n\r\n override getRangeLabel = (page: number, pageSize: number, length: number) => {\r\n if (length === 0 || pageSize === 0) {\r\n return '';\r\n }\r\n const from = page * pageSize + 1;\r\n const to = from + (length - page * pageSize > pageSize ? pageSize : length - page * pageSize) - 1;\r\n return `${from}-${to}/${NumberUtilities.toISO(length)}`;\r\n };\r\n}\r\n\r\n@Component({\r\n selector: 'sd-table',\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [\r\n trigger('detailExpand', [\r\n state('collapsed', style({ height: '0', minHeight: '0', visibility: 'hidden' })),\r\n state('expanded', style({ height: '*', visibility: 'visible' })),\r\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\r\n ]),\r\n ],\r\n providers: [\r\n DatePipe,\r\n DecimalPipe,\r\n CdkColumnDef,\r\n SdTableFilterService,\r\n ConfigService,\r\n {\r\n provide: MatPaginatorIntl,\r\n useClass: MatPaginatorIntlCro,\r\n },\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatMenuModule,\r\n MatPaginatorModule,\r\n MatIconModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatProgressSpinnerModule,\r\n MatCheckboxModule,\r\n SdButton,\r\n SdDesktopCommand,\r\n SdDesktopCell,\r\n ExternalFilterComponent,\r\n ConfigComponent,\r\n ColumnFilterComponent,\r\n SdGroupPipe,\r\n SdSelectionVisiblePipe,\r\n SdSelectionVisibleSelectAllPipe,\r\n SdSafeHtmlPipe,\r\n // SdPopupExport,\r\n SdSelectionDisabledPipe,\r\n SdScrollDirective,\r\n SdDesktopDirective,\r\n SdHoverCopyDirective,\r\n SelectorActionComponent,\r\n ],\r\n})\r\n// eslint-disable-next-line @angular-eslint/component-class-suffix\r\nexport class SdTable<T = unknown> extends SdBaseSecureComponent implements OnInit, AfterViewInit, OnDestroy {\r\n autoId?: string;\r\n @Input('autoId') set _autoId(val: string | undefined | null) {\r\n if (val) {\r\n this.autoId = `table-${val}`;\r\n }\r\n }\r\n @ViewChild(MatTable) table?: MatTable<any>;\r\n @ViewChild(ConfigComponent) configComponent?: ConfigComponent;\r\n // Export\r\n @ViewChild(SdPopupExport) sdPopupExport?: SdPopupExport;\r\n #gridId = uuid.v4();\r\n @ViewChild(SdScrollDirective) scroll?: SdScrollDirective;\r\n filterRegister!: TableFilterRegister;\r\n key = uuid.v4();\r\n @ViewChild(SdQuickAction) quickAction?: SdQuickAction;\r\n @ViewChild(ExternalFilterComponent) externalFilter?: ExternalFilterComponent;\r\n tableOption!: SdTableOption<T>;\r\n configuration?: ConfiguredTableResult;\r\n @Input() set option(option: SdTableOption) {\r\n if (option) {\r\n option = this.#initConfiguration(option);\r\n this.tableOption = option;\r\n this.#loadCompleted = false;\r\n const storage = this.configService.init(this.tableOption);\r\n // Lúc nào storage cũng sẽ có giá trị nên không cần kiểm tra\r\n this.#subscription.add(\r\n storage.observer.pipe(startWith(storage.subject.getValue())).subscribe(() => {\r\n const configurationResult = this.configService.loadConfigurationResult(this.tableOption!, storage.get());\r\n const displayColumns = configurationResult.displayedColumns || [];\r\n this.ref.detectChanges();\r\n this.#loadValues(this.tableOption.columns.filter(column => displayColumns.includes(column.field)))\r\n .then(() => {\r\n this.configuration = configurationResult;\r\n this.#optionChanges.next(this.tableOption);\r\n })\r\n .finally(() => {\r\n this.ref.detectChanges();\r\n });\r\n })\r\n );\r\n // if (setting) {\r\n // this.#subscription.add(\r\n // setting.observer.pipe(startWith(setting.subject.getValue())).subscribe(() => {\r\n // const configurationResult = this.configService.loadConfigurationResult(this.tableOption!, setting.get());\r\n // const displayColumns = configurationResult.displayedColumns || [];\r\n // this.loadingService.start();\r\n // this.ref.detectChanges();\r\n // this.#loadValues(this.tableOption.columns.filter(column => displayColumns.includes(column.field)))\r\n // .then(() => {\r\n // this.configuration = configurationResult;\r\n // this.#optionChanges.next(this.tableOption);\r\n // })\r\n // .finally(() => {\r\n // this.loadingService.stop();\r\n // this.ref.detectChanges();\r\n // });\r\n // })\r\n // );\r\n // } else {\r\n // const configuration = this.configService.loadConfiguredTable(this.tableOption);\r\n // const configurationResult = this.configService.loadConfigurationResult(this.tableOption, configuration);\r\n // const displayColumns = configurationResult.displayedColumns || [];\r\n // this.loadingService.start();\r\n // this.ref.detectChanges();\r\n // this.#loadValues(this.tableOption.columns.filter(column => displayColumns.includes(column.field)))\r\n // .then(() => {\r\n // this.configuration = configurationResult;\r\n // this.#optionChanges.next(this.tableOption);\r\n // })\r\n // .finally(() => {\r\n // this.loadingService.stop();\r\n // this.ref.detectChanges();\r\n // });\r\n // }\r\n }\r\n }\r\n #optionChanges = new Subject<SdTableOption>();\r\n\r\n #localItems: SdTableItem<T>[] = [];\r\n items: SdTableItem<T>[] = [];\r\n selectedTableItems: SdTableItem<T>[] = [];\r\n total?: number;\r\n\r\n // Loading\r\n loading = false;\r\n\r\n // Paginate\r\n isHiddenPaginator = false;\r\n #paginator?: MatPaginator;\r\n @ViewChild(MatPaginator) set paginator(paginator: MatPaginator) {\r\n if (paginator && this.#paginator !== paginator) {\r\n this.#paginator = paginator;\r\n this.#subscription.add(\r\n paginator.page\r\n .pipe(\r\n map(() => {\r\n this.#reload.next({\r\n force: false,\r\n });\r\n })\r\n )\r\n .subscribe()\r\n );\r\n }\r\n }\r\n\r\n // Sorting\r\n #sort?: MatSort;\r\n @ViewChild(MatSort) set sort(sort: MatSort) {\r\n if (sort && this.#sort !== sort) {\r\n this.#sort = sort;\r\n this.#subscription.add(\r\n sort.sortChange\r\n .pipe(\r\n map(() => {\r\n this.#reload.next({\r\n force: false,\r\n });\r\n })\r\n )\r\n .subscribe()\r\n );\r\n }\r\n }\r\n\r\n // Sub Information\r\n @ContentChild(SdMaterialSubInformationDefDirective)\r\n sdSubInformation?: SdMaterialSubInformationDefDirective;\r\n\r\n // Cell Def\r\n @ContentChildren(SdTabelCellDefDirective) sdCellDefs = new QueryList<SdTabelCellDefDirective>();\r\n cellDef: Record<string, SdTabelCellDefDirective> = {};\r\n\r\n // Footer Def\r\n @ContentChildren(SdMaterialFooterDefDirective) sdFooterDefs = new QueryList<SdMaterialFooterDefDirective>();\r\n footerDef: Record<string, SdMaterialFooterDefDirective> = {};\r\n hasFooter = false;\r\n\r\n // Filter Def\r\n @ContentChildren(SdTableFilterDefDirective) sdFilterDefs = new QueryList<SdTableFilterDefDirective>();\r\n filterDefs: SdTableFilterDefDirective[] = [];\r\n\r\n // Filter\r\n columnOperator: Record<string, SdOperator> = {};\r\n columnFilter?: Record<string, any> = {};\r\n // Subcription\r\n #subscription = new Subscription();\r\n #reload = new Subject<{\r\n force: boolean;\r\n }>();\r\n exporting = false;\r\n isSelectAll = false;\r\n exportTitle = 'Export';\r\n #loadCompleted = false;\r\n cacheValues: Record<string, any[]> = {};\r\n #cacheObjValues: Record<string, Record<string, string>> = {};\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private formatNumberPipe: SdFormatNumberPipe,\r\n @Inject(SD_TABLE_CONFIGURATION)\r\n @Optional()\r\n public tableConfiguration: ISdTableConfiguration | undefined,\r\n private configService: ConfigService,\r\n private excelService: SdExcelService,\r\n private notifyService: SdNotifyService,\r\n private gridFilterService: SdTableFilterService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.#initCellDef();\r\n }\r\n ngAfterViewInit() {\r\n this.#subscription.add(\r\n this.#reload\r\n .pipe(\r\n debounceTime(200),\r\n switchMap(async data => {\r\n const filterInfo = this.#getFilter();\r\n const result = await this.#load(filterInfo, !this.#loadCompleted || data.force);\r\n this.#loadCompleted = true;\r\n return result;\r\n })\r\n )\r\n .subscribe(this.#render)\r\n );\r\n this.#subscription.add(this.sdCellDefs.changes.pipe(startWith([])).subscribe(this.#initCellDef));\r\n this.#subscription.add(this.sdFooterDefs.changes.pipe(startWith([])).subscribe(this.#initFooterDef));\r\n this.#subscription.add(this.sdFilterDefs.changes.pipe(startWith([])).subscribe(this.#initFilterDef));\r\n this.#subscription.add(\r\n combineLatest([\r\n this.#optionChanges.pipe(startWith(this.tableOption)),\r\n this.sdFilterDefs.changes.pipe(startWith(this.filterDefs)),\r\n ]).subscribe(() => {\r\n this.#loadFilterRegister();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#optionChanges.subscribe(() => {\r\n if (this.filterRegister) {\r\n this.#reload.next({\r\n force: true,\r\n });\r\n }\r\n })\r\n );\r\n this.ref.detectChanges();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #initCellDef = () => {\r\n this.cellDef = {};\r\n for (const cellDef of this.sdCellDefs || []) {\r\n if (cellDef.sdTableCellDef) {\r\n this.cellDef[cellDef.sdTableCellDef] = cellDef;\r\n }\r\n }\r\n };\r\n\r\n #initFilterDef = () => {\r\n this.filterDefs = [];\r\n for (const filterDef of this.sdFilterDefs) {\r\n this.filterDefs.push(filterDef);\r\n }\r\n };\r\n\r\n #initFooterDef = () => {\r\n // NOTE: ContentChildren nên subcribe trong AfterViewInit\r\n this.footerDef = {};\r\n this.hasFooter = false;\r\n for (const footerDef of this.sdFooterDefs) {\r\n if (footerDef.sdTableFooterDef) {\r\n this.hasFooter = true;\r\n this.footerDef[footerDef.sdTableFooterDef] = footerDef;\r\n }\r\n }\r\n };\r\n\r\n #filterExportInfo = (pageNumber: number, pageSize: number): SdTableFilterRequest => {\r\n const { columnOperator, columnFilter, externalFilter } = this.filterRegister.value.get();\r\n return {\r\n columnOperator: columnOperator || {},\r\n rawColumnFilter: columnFilter || {},\r\n rawExternalFilter: externalFilter || {},\r\n orderBy: this.#sort?.active || '',\r\n orderDirection: this.#sort?.direction === 'asc' ? 'ASC' : this.#sort?.direction === 'desc' ? 'DESC' : undefined,\r\n pageNumber,\r\n pageSize,\r\n isExported: true,\r\n };\r\n };\r\n\r\n #initConfiguration = (option: SdTableOption) => {\r\n // Init pagination\r\n option.paginate = {\r\n hidden: option?.paginate?.hidden,\r\n pageSize: option?.paginate?.pageSize ?? this.tableConfiguration?.paginate?.pageSize ?? DEFAULT_TABLE_CONFIG.paginate?.pageSize,\r\n pages: option?.paginate?.pages ?? this.tableConfiguration?.paginate?.pages ?? DEFAULT_TABLE_CONFIG.paginate?.pages,\r\n showFirstLastButtons: option?.paginate?.showFirstLastButtons ?? this.tableConfiguration?.paginate?.showFirstLastButtons ?? false,\r\n hidePageSize: option?.paginate?.hidePageSize ?? false,\r\n };\r\n option.filter = option.filter || {};\r\n option.filter.hideInlineFilter = option?.filter?.hideInlineFilter ?? this.tableConfiguration?.filter?.hideInlineFilter;\r\n option.filter.externalFilterPerRow = option?.filter?.externalFilterPerRow ?? this.tableConfiguration?.filter?.externalFilterPerRow;\r\n option.filter.manualFilter = option?.filter?.manualFilter ?? this.tableConfiguration?.filter?.manualFilter;\r\n option.filter.hideExternalFilterToolbar =\r\n option?.filter?.hideExternalFilterToolbar ?? this.tableConfiguration?.filter?.hideExternalFilterToolbar;\r\n for (const column of option.columns || []) {\r\n if (column.filter?.operator?.enable) {\r\n if (!column.filter?.operator?.list?.length) {\r\n column.filter.operator.list = this.tableConfiguration?.filter?.operator?.list?.[column.type] || [];\r\n }\r\n\r\n this.columnOperator[column?.field] = this.tableConfiguration?.filter?.operator?.default?.[column.type]!;\r\n if (column.filter.operator.default && column.filter.operator.list?.some(el => el === column.filter?.operator?.default)) {\r\n this.columnOperator[column.field] = column.filter.operator.default;\r\n }\r\n }\r\n }\r\n return option;\r\n };\r\n\r\n #loadFilterRegister = () => {\r\n // Init filter\r\n if (this.tableOption) {\r\n if (!this.filterRegister) {\r\n this.filterRegister = this.gridFilterService.register(this.tableOption?.filter, {\r\n id: this.#gridId,\r\n columns: this.tableOption?.columns,\r\n externalFilters: this.tableOption?.filter?.externalFilters,\r\n filterDefs: this.filterDefs,\r\n columnOperator: this.columnOperator,\r\n });\r\n this.#subscription.add(\r\n this.filterRegister.value.observer\r\n .pipe(\r\n debounceTime(500),\r\n map(filterValue => {\r\n const { columnOperator, columnFilter, notReload } = filterValue;\r\n this.columnOperator = columnOperator || {};\r\n this.columnFilter = columnFilter;\r\n if (!notReload) {\r\n if (this.#paginator) {\r\n this.#paginator.pageIndex = 0;\r\n }\r\n this.#reload.next({\r\n force: false,\r\n });\r\n }\r\n })\r\n )\r\n .subscribe()\r\n );\r\n }\r\n }\r\n };\r\n\r\n #filterLocal = (localItems: SdTableItem<T>[], filterInfo: SdTableFilterRequest) => {\r\n const { columns } = this.tableOption;\r\n const { rawColumnFilter, orderBy, orderDirection, pageSize, pageNumber } = filterInfo;\r\n const items = localItems.filter(tableItem => {\r\n const item = tableItem.data;\r\n for (const column of columns) {\r\n const { field, type } = column;\r\n const filterValue: string = (rawColumnFilter[field as string] || '').toString().trim().toLowerCase();\r\n const columnValue: string = ((item as any)[field] || '').toString().trim().toLowerCase();\r\n if (filterValue) {\r\n if (!columnValue && type !== 'datetime' && type !== 'date' && type !== 'time') {\r\n return false;\r\n }\r\n if (type === 'string') {\r\n if (columnValue.indexOf(filterValue) === -1) {\r\n return false;\r\n }\r\n } else if (type === 'values' || type === 'lazy-values') {\r\n const columnType = column as SdTableColumnValues<T> | SdTableColumnLazyValues<T>;\r\n const isMultiple = columnType.option.selection! === 'MULTIPLE' || columnType.option.selection! === 'MULTIPLEAUTOCOMPLETE';\r\n if (isMultiple && Array.isArray(item[field])) {\r\n const columnValues: string[] =\r\n (item[field] as any).map((i: any) => (i[columnType.option.valueField] ?? '').toString().trim().toLowerCase()) ?? [];\r\n const filterValues: string[] = rawColumnFilter[field as string]?.map((v: any) => (v ?? '').toString().trim().toLowerCase());\r\n if (filterValues?.length && filterValues.every(fv => !columnValues.includes(fv))) {\r\n return false;\r\n }\r\n } else {\r\n if (columnValue !== filterValue) {\r\n return false;\r\n }\r\n }\r\n } else if (type === 'number') {\r\n const fValue = +filterValue.replace('>=', '').replace('<=', '').replace('>', '').replace('<', '');\r\n const cValue = +columnValue;\r\n if (fValue || fValue === 0) {\r\n if (!cValue && cValue !== 0) {\r\n return false;\r\n }\r\n if (filterValue.indexOf('>=') > -1 && cValue < fValue) {\r\n return false;\r\n } else if (filterValue.indexOf('<=') > -1 && cValue > fValue) {\r\n return false;\r\n } else if (filterValue.indexOf('<') > -1 && cValue >= fValue) {\r\n return false;\r\n } else if (filterValue.indexOf('>') > -1 && cValue <= fValue) {\r\n return false;\r\n } else if (cValue !== fValue) {\r\n return false;\r\n }\r\n }\r\n } else if (type === 'boolean') {\r\n if ((filterValue === '1' || filterValue === 'true') && columnValue !== '1' && columnValue !== 'true') {\r\n return false;\r\n } else if ((filterValue === '0' || filterValue === 'false') && columnValue !== '0' && columnValue !== 'false') {\r\n return false;\r\n }\r\n } else if (type === 'datetime' || type === 'date' || type === 'time') {\r\n const from = rawColumnFilter[field]?.from ?? rawColumnFilter[field];\r\n const to = rawColumnFilter[field]?.to ?? rawColumnFilter[field];\r\n const fromDate = DateUtilities.begin(from);\r\n const toDate = DateUtilities.end(to);\r\n if (fromDate || toDate) {\r\n if (!columnValue) {\r\n return false;\r\n }\r\n\r\n const columnTime = new Date(columnValue).getTime();\r\n const fromDateTime = fromDate?.getTime() || null;\r\n const toDateTime = toDate?.getTime() || null;\r\n\r\n if (fromDateTime && fromDateTime > columnTime) {\r\n return false;\r\n }\r\n if (toDateTime && columnTime > toDateTime) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n });\r\n // Sort\r\n if (orderBy && orderDirection) {\r\n const column = columns.find(e => e.field === orderBy);\r\n if (column) {\r\n const { type, field } = column;\r\n items.sort((tableItemCurrent, tableItemNext) => {\r\n const data = tableItemCurrent.data;\r\n const next = tableItemNext.data;\r\n if (type === 'number') {\r\n return ((data as any)[field] || 0) - ((next as any)[field] || 0);\r\n }\r\n if (type === 'date' || type === 'datetime' || type === 'time') {\r\n const d1 = new Date((data as any)[field] || '').getTime();\r\n const d2 = new Date((data as any)[field] || '').getTime();\r\n return d1 - d2;\r\n }\r\n const s1 = ((data as any)[field] || '').toString();\r\n const s2 = ((next as any)[field] || '').toString();\r\n if (s1 > s2) {\r\n return 1;\r\n }\r\n if (s1 < s2) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n if (orderDirection === 'DESC') {\r\n items.reverse();\r\n }\r\n }\r\n }\r\n return {\r\n items: items.filter((item, index) => {\r\n return index >= pageNumber * pageSize && index < (pageNumber + 1) * pageSize;\r\n }),\r\n total: items.length,\r\n };\r\n };\r\n\r\n #getFilter = (): SdTableFilterRequest => {\r\n const { columnOperator, columnFilter, externalFilter } = this.filterRegister.value.get();\r\n return {\r\n columnOperator: columnOperator || {},\r\n rawColumnFilter: columnFilter || {},\r\n rawExternalFilter: externalFilter || {},\r\n orderBy: this.#sort?.active || '',\r\n orderDirection: this.#sort?.direction === 'asc' ? 'ASC' : this.#sort?.direction === 'desc' ? 'DESC' : undefined,\r\n pageNumber: this.#paginator?.pageIndex || 0,\r\n pageSize: this.#paginator?.pageSize || this.tableOption?.paginate?.pageSize || 50,\r\n visibledColumns: ArrayUtilities.union('field', this.configuration?.firstColumns || [], this.configuration?.secondColumns || []),\r\n };\r\n };\r\n\r\n // Kiểm tra có phải là đang có filter hay không\r\n // Khi empty data thì dựa vào isFiltered để render tương ứng text\r\n isFiltered = false;\r\n requireFiltered = false;\r\n #isFiltered = (filterReq: SdTableFilterRequest) => {\r\n const { pageNumber, rawColumnFilter, rawExternalFilter } = filterReq;\r\n if (pageNumber !== 0) {\r\n return true;\r\n }\r\n if (\r\n Object.values({ ...rawColumnFilter }).some(val => {\r\n // Nếu là mảng và mảng có phần tử thì xem như là có filter\r\n if (Array.isArray(val)) {\r\n return !!val.length;\r\n }\r\n // Nếu là object (date) và có from/to thì xem như là có filter\r\n if (val && typeof val === 'object') {\r\n if ('from' in val && !!val.from) {\r\n return true;\r\n }\r\n if ('to' in val && !!val.to) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return val !== undefined && val !== null && val !== '';\r\n })\r\n ) {\r\n return true;\r\n }\r\n if (\r\n Object.values({ ...rawExternalFilter }).some(val => {\r\n // Nếu là mảng và mảng có phần tử thì xem như là có filter\r\n if (Array.isArray(val)) {\r\n return !!val.length;\r\n }\r\n // Nếu là object (date) và có from/to thì xem như là có filter\r\n if (val && typeof val === 'object') {\r\n if ('from' in val && !!val.from) {\r\n return true;\r\n }\r\n if ('to' in val && !!val.to) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return val !== undefined && val !== null && val !== '';\r\n })\r\n ) {\r\n return true;\r\n }\r\n // Kiểm\r\n return false;\r\n };\r\n\r\n #checkFilter = (filterReq: SdTableFilterRequest) => {\r\n this.isFiltered = this.#isFiltered(filterReq);\r\n this.requireFiltered = !!this.tableOption?.filter?.externalFilters?.some(e => e.required);\r\n };\r\n\r\n #load = async (\r\n filterReq: SdTableFilterRequest,\r\n force = true\r\n ): Promise<{\r\n items: SdTableItem<T>[];\r\n total: number;\r\n }> => {\r\n this.loading = true;\r\n this.ref.detectChanges();\r\n this.#checkFilter(filterReq);\r\n if (this.tableOption.type === 'server') {\r\n const { items, onFilter } = this.tableOption;\r\n // Thông báo cho bên ngoài biết là đang filter\r\n try {\r\n onFilter?.(filterReq, {\r\n externalFilterValid: !this.externalFilter?.form?.invalid,\r\n });\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n // Nếu có sử dụng external filter và form invalid thì không thực hiện gọi hàm items\r\n if (this.externalFilter?.form?.invalid) {\r\n this.loading = false;\r\n this.ref.detectChanges();\r\n return {\r\n items: [],\r\n total: 0,\r\n };\r\n }\r\n const pagingReq = this.#convertPagingReq(filterReq);\r\n const data = await items(filterReq, pagingReq).catch(err => {\r\n console.error(err);\r\n return {\r\n items: [] as T[],\r\n total: 0,\r\n };\r\n });\r\n return {\r\n items: await this.#format(data?.items, this.tableOption.columns).finally(() => {\r\n this.loading = false;\r\n this.ref.detectChanges();\r\n }),\r\n total: data?.total || 0,\r\n };\r\n }\r\n if (force) {\r\n const { items } = this.tableOption;\r\n const results = items();\r\n let data: T[] = [];\r\n if (results instanceof Promise) {\r\n data = await results.catch(err => {\r\n this.notifyService.warning('Có lỗi xảy ra');\r\n console.error(err);\r\n return [];\r\n });\r\n } else {\r\n data = results;\r\n }\r\n if (!Array.isArray(data)) {\r\n this.notifyService.warning('Dữ liệu không phải là một mảng');\r\n data = [];\r\n }\r\n this.#localItems = await this.#format(data, this.tableOption.columns);\r\n }\r\n this.loading = false;\r\n this.ref.detectChanges();\r\n return this.#filterLocal(this.#localItems, filterReq);\r\n };\r\n\r\n #render = async (\r\n args: { items: SdTableItem<T>[]; total: number },\r\n scrollTop = true,\r\n additionArgs?: { fromSource?: 'PAGING' | 'RELOAD' }\r\n ) => {\r\n if (scrollTop) {\r\n this.scroll?.scrollTop();\r\n }\r\n this.items = args?.items || [];\r\n this.total = args?.total || 0;\r\n await this.tableOption?.reload?.onReload?.(this.items, additionArgs);\r\n this.isSelectAll = this.items.every(e => e.meta.selector?.isSelected);\r\n this.#updateSelectedItems();\r\n setTimeout(() => {\r\n this.table?.updateStickyColumnStyles();\r\n }, 0);\r\n };\r\n\r\n reload = async (force = true, scrollTop = true) => {\r\n this.externalFilter?.updateFilter?.();\r\n const data = await this.#load(this.#getFilter(), force);\r\n this.#render(data, scrollTop, { fromSource: 'RELOAD' });\r\n };\r\n\r\n #exportedItems = async (pageNumber = 0, pageSize = 1000) => {\r\n if (this.tableOption.export?.type === 'default' && this.tableOption.export?.items) {\r\n // const exportedItems = this.gridOption.export?.items(this.#filterExportInfo(pageNumber, pageSize));\r\n let result = this.tableOption.export?.items(this.#filterExportInfo(pageNumber, pageSize));\r\n if (Array.isArray(result)) {\r\n return result;\r\n }\r\n if (isObservable(result)) {\r\n result = firstValueFrom(result) as any;\r\n }\r\n if (isObservable(result)) {\r\n result = firstValueFrom(result) as any;\r\n }\r\n return await result;\r\n } else {\r\n const filterReq = this.#filterExportInfo(pageNumber, pageSize);\r\n if (this.tableOption.type === 'server') {\r\n const pagingReq = this.#convertPagingReq(filterReq);\r\n const result = this.tableOption.items(filterReq, pagingReq);\r\n return await result;\r\n } else {\r\n let exportedItems: any[] = [];\r\n if (typeof this.tableOption.items === 'function') {\r\n const results = this.tableOption.items();\r\n if (results instanceof Promise) {\r\n exportedItems = await results;\r\n } else {\r\n exportedItems = results;\r\n }\r\n } else {\r\n exportedItems = this.tableOption.items;\r\n }\r\n return this.#filterLocal(exportedItems, filterReq);\r\n }\r\n }\r\n };\r\n\r\n #allColumns = (): SdTableColumn[] => {\r\n const columns: SdTableColumn[] = [];\r\n this.tableOption.columns\r\n .filter(e => !e.export?.disabled)\r\n .forEach(column => {\r\n if (column.type === 'children') {\r\n column.children\r\n ?.filter(e => !e.export?.disabled)\r\n .forEach(childColumn => {\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n columns.push(column);\r\n });\r\n return columns;\r\n };\r\n\r\n #allExportedColumns = (): SdTableOptionExportColumn[] => {\r\n if (this.tableOption.export?.type !== 'default') {\r\n return [];\r\n }\r\n return this.tableOption.export?.columns?.filter(e => !e.export?.disabled) || [];\r\n };\r\n\r\n onExport = async (args?: { columns?: SdExcelColumn[]; isCSV?: boolean }) => {\r\n if (this.tableOption.export?.type !== 'default') {\r\n return;\r\n }\r\n const { isCSV } = { ...args };\r\n try {\r\n const columns = this.#getExportColumns(args?.columns);\r\n const pageSize = this.tableOption?.export?.maxItemsPerRequest || 1000;\r\n const batch = this.tableOption?.export?.batch || 1;\r\n let total = this.total;\r\n let pageNumber = 0;\r\n let exportItems: any[] = [];\r\n this.exporting = true;\r\n const items: any[] = [];\r\n let promises: Promise<\r\n | any[]\r\n | {\r\n items: any[];\r\n total: number;\r\n }\r\n >[] = [];\r\n const handleData = async () => {\r\n const results = await Promise.all(promises);\r\n promises = [];\r\n exportItems = [];\r\n for (const result of results) {\r\n if ('items' in result) {\r\n exportItems = [...exportItems, ...result.items];\r\n total = result.total;\r\n } else {\r\n exportItems = [...exportItems, ...result];\r\n }\r\n }\r\n if (this.tableOption.export?.type === 'default' && this.tableOption.export?.mapping) {\r\n const results = this.tableOption.export.mapping(exportItems);\r\n if (results instanceof Promise) {\r\n exportItems = await results;\r\n } else {\r\n exportItems = results;\r\n }\r\n }\r\n const totalPage = total! / pageSize;\r\n const percent = Math.round(((pageNumber - 1) * 100.0) / totalPage);\r\n this.exportTitle = `Exporting...${percent}%`;\r\n const allColumns = this.#allColumns();\r\n const allExportedColumns = this.#allExportedColumns();\r\n for (const item of exportItems) {\r\n const obj: any = {};\r\n const handle = async (exportColumn: SdExcelColumn) => {\r\n obj[exportColumn.field] = item[exportColumn.field];\r\n const column = allColumns.find(e => e.field === exportColumn.field);\r\n const exportedColumn = allExportedColumns.find(e => e.field === exportColumn.field);\r\n if (exportedColumn?.transform) {\r\n obj[exportedColumn.field] = exportedColumn.transform(item[exportedColumn.field], item);\r\n return;\r\n }\r\n if (!column) {\r\n return;\r\n }\r\n if (column.type === 'children') {\r\n column?.children.forEach(childColumn => handle(childColumn));\r\n return;\r\n }\r\n if (!columns.some(e => e.field === column.field)) {\r\n return;\r\n }\r\n if (column.transform) {\r\n const transform = column.transform(item[column.field], item, {\r\n isExport: true,\r\n });\r\n if (transform instanceof Promise) {\r\n obj[column.field] = await transform;\r\n } else {\r\n obj[column.field] = transform;\r\n }\r\n obj[column.field] = obj[column.field] ?? '';\r\n } else if (item[column.field] === undefined || item[column.field] === null || item[column.field] === '') {\r\n obj[column.field] = '';\r\n } else if (column.type === 'string' || column.type === 'number') {\r\n // Nếu cell là string hoặc number thì gán bằng chính nó\r\n obj[column.field] = item[column.field];\r\n } else if (column.type === 'boolean') {\r\n // Nếu là bool thì gán bằng giá trị trueValue và falseValue (nếu có), mặc định là TRUE/FALSE\r\n if (item[column.field]) {\r\n obj[column.field] = column.option?.displayOnTrue || 'True';\r\n } else if (obj[column.field] !== undefined && obj[column.field] !== null) {\r\n obj[column.field] = column.option?.displayOnFalse || 'False';\r\n }\r\n } else if (column.type === 'date') {\r\n const date = item[column.field];\r\n // Nếu là date thì convert theo đúng format ISO\r\n obj[column.field] = DateUtilities.toFormat(date, 'yyyy/MM/dd');\r\n } else if (column.type === 'datetime') {\r\n const date = item[column.field];\r\n // Nếu là datetime thì convert theo đúng format\r\n obj[column.field] = DateUtilities.toFormat(date, 'yyyy/MM/dd HH:mm:ss');\r\n } else if (column.type === 'time') {\r\n const date = item[column.field];\r\n // Nếu là time thì convert theo đúng format\r\n obj[column.field] = DateUtilities.toFormat(date, 'HH:mm:ss');\r\n } else if (column.type === 'values' || column.type === 'lazy-values') {\r\n const value = item[column.field];\r\n if (column.type === 'lazy-values' && typeof column.option.mapValue === 'function') {\r\n const val = column.option.mapValue(value, item);\r\n const vals = (Array.isArray(val) ? val : [val]).filter(e => !!e?.toString());\r\n obj[column.field] = vals\r\n .map(val => this.#cacheObjValues[column.field]?.[val]?.[column.option.displayField as any] || val)\r\n ?.join(', ');\r\n } else {\r\n const vals = (Array.isArray(value) ? value : [value]).filter(e => !!e?.toString());\r\n obj[column.field] = vals\r\n .map(val => this.#cacheObjValues[column.field]?.[val]?.[column.option.displayField as any] || val)\r\n ?.join(', ');\r\n }\r\n } else {\r\n obj[column.field] = item[column.field];\r\n }\r\n };\r\n // this.gridOption.columns.forEach(handle);\r\n for (const exportColumn of columns) {\r\n await handle(exportColumn);\r\n }\r\n items.push(obj);\r\n }\r\n };\r\n while (pageNumber * pageSize < total!) {\r\n promises.push(this.#exportedItems(pageNumber, pageSize));\r\n pageNumber++;\r\n if (promises.length < batch) {\r\n continue;\r\n }\r\n await handleData();\r\n }\r\n if (promises.length > 0) {\r\n await handleData();\r\n }\r\n // TODO: Export by template\r\n // if (file?.filePath) {\r\n // await this.exportService.exportByTemplate({\r\n // filePath: file.filePath,\r\n // fileName: file.fileName,\r\n // columns,\r\n // items,\r\n // });\r\n // return;\r\n // }\r\n if (isCSV) {\r\n await this.excelService.exportCSV({\r\n columns,\r\n items,\r\n fileName: this.tableOption?.export?.fileName,\r\n });\r\n return;\r\n }\r\n const sheets: SdExcelSheet[] = [];\r\n if (Array.isArray(this.tableOption?.export?.sheets)) {\r\n for (const sheet of this.tableOption.export.sheets) {\r\n if (sheet.name && sheet.items && sheet.headers) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n headers: sheet.headers,\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n headers: sheet.headers,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n await this.excelService.export({\r\n columns,\r\n items,\r\n fileName: this.tableOption?.export?.fileName,\r\n sheets,\r\n });\r\n return;\r\n } finally {\r\n this.exporting = false;\r\n this.exportTitle = `Export`;\r\n this.ref.detectChanges();\r\n }\r\n };\r\n\r\n #getExportColumns = (columns?: SdExcelColumn[]) => {\r\n let tableColumns: SdExcelColumn[] = [];\r\n // Lấy column từ option\r\n this.tableOption.columns\r\n .filter(e => !e.export?.disabled)\r\n .forEach(column => {\r\n if (column.type === 'children') {\r\n column.children\r\n ?.filter(e => !e.export?.disabled)\r\n .forEach(childColumn => {\r\n tableColumns.push(childColumn);\r\n });\r\n return;\r\n }\r\n tableColumns.push({\r\n field: column.field,\r\n title: column.title,\r\n description: column.description,\r\n width: column.width,\r\n });\r\n });\r\n // Lấy columns từ configuration\r\n if (this.configuration) {\r\n const columns = [...tableColumns];\r\n const { firstColumns, secondColumns } = this.configuration;\r\n const displayColumns: SdTableColumn[] = [...firstColumns, ...secondColumns].reduce<SdTableColumn[]>((first, next) => {\r\n const column = this.tableOption.columns.find(e => e.field === next.field);\r\n if (!column) {\r\n return first;\r\n }\r\n if (column.type !== 'children') {\r\n return [...first, column];\r\n }\r\n const children = column.children;\r\n return [...first, ...children];\r\n }, []);\r\n tableColumns = displayColumns\r\n .map(e => ({\r\n ...e,\r\n data: columns.find(e1 => e1.field === e.field),\r\n }))\r\n .filter(e => !!e.data)\r\n .map(e => e.data!);\r\n }\r\n // Chỉ lấy các columns được thiết lập\r\n const columnFields = columns?.map(e => e.field) || [];\r\n if (this.tableOption.export?.type === 'default') {\r\n return [...tableColumns, ...(this.tableOption.export?.columns?.filter(e => !e.export?.disabled) || [])].filter(\r\n column => !columnFields?.length || columnFields.includes(column.field)\r\n );\r\n } else {\r\n return tableColumns.filter(column => !columnFields?.length || columnFields.includes(column.field));\r\n }\r\n };\r\n\r\n exportExcel = () => {\r\n this.onExport();\r\n };\r\n\r\n exportCSV = () => {\r\n this.onExport({ isCSV: true });\r\n };\r\n\r\n exportCustom = () => {\r\n if (this.tableOption.export?.type === 'custom') {\r\n this.exporting = true;\r\n this.tableOption.export\r\n .onExport(this.#getFilter())\r\n .catch(err => {\r\n console.error(err);\r\n throw err;\r\n })\r\n .finally(() => {\r\n this.exporting = false;\r\n });\r\n }\r\n };\r\n\r\n onFilterChange = () => {\r\n this.externalFilter?.updateFilter?.();\r\n this.filterRegister.value.set({\r\n columnOperator: this.columnOperator || {},\r\n columnFilter: this.columnFilter,\r\n });\r\n };\r\n\r\n onExpand = async (rowData: SdTableItem<T>) => {\r\n if (this.tableOption.expand?.always) {\r\n return;\r\n }\r\n if (rowData.meta.expand?.isExpanding) {\r\n return;\r\n }\r\n if (rowData.meta.expand?.isExpanded) {\r\n rowData.meta.expand.isExpanded = false;\r\n return;\r\n }\r\n const data = this.tableOption?.expand?.onExpand?.(rowData.data);\r\n if (!this.tableOption.expand?.multiple) {\r\n this.items.forEach(item => (item.meta.expand!.isExpanding = item.meta.expand!.isExpanded = false));\r\n }\r\n if (data instanceof Promise) {\r\n rowData.meta.expand!.isExpanding = true;\r\n data\r\n .then(res => {\r\n rowData.meta.expand!.data = res;\r\n rowData.meta.expand!.isExpanded = true;\r\n })\r\n .finally(() => (rowData.meta.expand!.isExpanding = false));\r\n } else {\r\n rowData.meta.expand!.data = data;\r\n rowData.meta.expand!.isExpanded = true;\r\n }\r\n };\r\n\r\n onSelect = (rowData: SdTableItem<T>) => {\r\n if (rowData.meta.group?.items?.length) {\r\n rowData.meta.group.items.forEach(e => (e.meta.selector!.isSelected = rowData.meta.selector!.isSelected));\r\n this.tableOption.selector?.onSelect?.(\r\n rowData.data,\r\n this.items.filter(e => e.meta.selector!.isSelected).map(e => e.data)\r\n );\r\n this.isSelectAll = this.items.every(e => e.meta.selector!.isSelected);\r\n this.#updateSelectedItems();\r\n } else {\r\n if (this.tableOption.selector?.single) {\r\n this.items.filter(e => e !== rowData).forEach(e => (e.meta.selector!.isSelected = false));\r\n this.#updateSelectedItems();\r\n return;\r\n }\r\n this.tableOption.selector?.onSelect?.(\r\n rowData.data,\r\n this.items.filter(e => e.meta.selector!.isSelected).map(e => e.data)\r\n );\r\n this.isSelectAll = this.items.every(e => e.meta.selector!.isSelected);\r\n this.#updateSelectedItems();\r\n }\r\n };\r\n\r\n onSelectAll = () => {\r\n this.items?.forEach(e => {\r\n if (e.meta.selector!.selectable && (!this.tableOption?.selector?.actions?.length || e.meta.selector!.actions?.length)) {\r\n e.meta.selector!.isSelected = this.isSelectAll;\r\n }\r\n });\r\n this.tableOption.selector?.onSelectAll?.(this.items.filter(e => e.meta.selector!.isSelected).map(e => e.data));\r\n this.#updateSelectedItems();\r\n };\r\n\r\n onClearSelection = (items?: SdTableItem<T>[]) => {\r\n items = items || this.items;\r\n this.isSelectAll = false;\r\n items?.forEach(e => (e.meta.selector!.isSelected = false));\r\n this.#updateSelectedItems();\r\n };\r\n\r\n #updateSelectedItems = () => {\r\n this.selectedTableItems = this.items.filter(item => item.meta.selector!.isSelected);\r\n this.ref.detectChanges();\r\n };\r\n\r\n clearFilter = () => {\r\n this.filterRegister.value.remove();\r\n };\r\n\r\n setFilter = (args: { columnFilter?: Record<string, any>; externalFilter?: Record<string, any> }) => {\r\n const { columnFilter, externalFilter } = args || {};\r\n if (columnFilter) {\r\n this.columnFilter = columnFilter;\r\n }\r\n this.filterRegister.value.set({\r\n columnFilter,\r\n externalFilter,\r\n });\r\n };\r\n\r\n get dataItems(): T[] {\r\n return this.items.map(item => item.data);\r\n }\r\n\r\n get selectedItems(): T[] {\r\n return this.selectedTableItems.map(item => item.data);\r\n }\r\n\r\n detectChanges = () => this.ref.detectChanges();\r\n\r\n #loadValues = async (columns: SdTableColumn[]) => {\r\n const promises: Promise<{\r\n key: string;\r\n valueField: string;\r\n displayField: string;\r\n data: any[];\r\n }>[] = [];\r\n for (const column of columns) {\r\n if (column.type === 'values' && !this.cacheValues[column.field]) {\r\n if (typeof column.option.items === 'function') {\r\n promises.push(\r\n column.option\r\n .items()\r\n .then(data => ({\r\n key: column.field,\r\n valueField: column.option.valueField,\r\n displayField: column.option.displayField,\r\n data: Array.isArray(data) ? data : [],\r\n }))\r\n .catch(err => {\r\n console.error(err);\r\n return {\r\n key: column.field,\r\n valueField: column.option.valueField,\r\n displayField: column.option.displayField,\r\n data: [],\r\n };\r\n })\r\n );\r\n } else {\r\n this.cacheValues[column.field] = column.option.items.map(e => ({\r\n [column.option.valueField]: e?.[column.option.valueField],\r\n [column.option.displayField]: e?.[column.option.displayField],\r\n }));\r\n this.#cacheObjValues[column.field] = ArrayUtilities.toObject(column.option.valueField, this.cacheValues[column.field]);\r\n }\r\n }\r\n }\r\n if (promises.length) {\r\n const results = await Promise.all(promises);\r\n for (const result of results) {\r\n this.cacheValues[result.key] = result.data.map(e => ({\r\n [result.valueField]: e?.[result.valueField],\r\n [result.displayField]: e?.[result.displayField],\r\n }));\r\n this.#cacheObjValues[result.key] = ArrayUtilities.toObject(result.valueField, this.cacheValues[result.key]);\r\n }\r\n }\r\n };\r\n\r\n #getNestedValue = (obj: any, path: string): any => {\r\n if (!path || !obj) return undefined;\r\n\r\n const keys = path.split('.');\r\n let result = obj;\r\n\r\n for (const key of keys) {\r\n if (result === null || result === undefined) {\r\n return undefined;\r\n }\r\n result = result[key];\r\n }\r\n\r\n return result;\r\n };\r\n\r\n #format = async <T = any>(rawItems: T[], columns: SdTableColumn[]) => {\r\n const items = rawItems.map(MapToSdTableItem);\r\n\r\n // Cache for parsed field paths\r\n const fieldPathCache = new Map<string, string[]>();\r\n\r\n /**\r\n * Get nested property value from object using dot notation\r\n */\r\n const getNestedValue = (obj: any, path: string): any => {\r\n if (!path || obj == null) return undefined;\r\n\r\n let keys = fieldPathCache.get(path);\r\n if (!keys) {\r\n keys = path.split('.');\r\n fieldPathCache.set(path, keys);\r\n }\r\n\r\n if (keys.length === 1) return obj[keys[0]];\r\n\r\n let result = obj;\r\n for (const key of keys) {\r\n if (result == null) return undefined;\r\n result = result[key];\r\n }\r\n return result;\r\n };\r\n\r\n /**\r\n * Format date display based on column type\r\n */\r\n const formatDateDisplay = (value: any, type: 'date' | 'datetime' | 'time'): string => {\r\n const date = DateUtilities.toFormat(value, 'dd/MM/yyyy');\r\n const time = DateUtilities.toFormat(value, 'HH:mm:ss');\r\n\r\n if (type === 'datetime') {\r\n return time && date ? `<div class=\"T14R\">${date}<span class=\"T14R text-black400 ml-4\">${time}</span></div>` : '';\r\n }\r\n if (type === 'date') return date || '';\r\n if (type === 'time') return time || '';\r\n return '';\r\n };\r\n\r\n /**\r\n * Process values display (supports arrays)\r\n */\r\n const processValuesDisplay = (\r\n value: any,\r\n rowData: any,\r\n column: SdTableColumnNormal & { type: 'values' | 'lazy-values' },\r\n field: string\r\n ): string => {\r\n if (column.type === 'lazy-values' && typeof column.option.mapValue === 'function') {\r\n const val = column.option.mapValue(value, rowData);\r\n const vals = (Array.isArray(val) ? val : [val]).filter(e => e?.toString());\r\n return vals.map(val => this.#cacheObjValues[field]?.[val]?.[column.option.displayField as any] || val).join(', ');\r\n }\r\n\r\n const vals = (Array.isArray(value) ? value : [value]).filter(e => e?.toString());\r\n return vals.map(val => this.#cacheObjValues[field]?.[val]?.[column.option.displayField as any] || val).join(', ');\r\n };\r\n\r\n /**\r\n * Create badge configuration\r\n */\r\n const createBadge = (\r\n column: SdTableColumnNormal,\r\n value: any,\r\n rowData: any\r\n ): { badge: SdTableDisplay['badge']; title?: string | number | null } | undefined => {\r\n if (column.useBadge) {\r\n const badge = column.useBadge(value, rowData);\r\n if (badge) {\r\n return {\r\n badge: {\r\n type: badge.type ?? 'round',\r\n color: badge.color,\r\n icon: badge.icon,\r\n },\r\n title: badge.title,\r\n };\r\n }\r\n return undefined;\r\n }\r\n\r\n if ((column.type === 'string' || column.type === 'number' || column.type === 'values') && column.badge) {\r\n return {\r\n badge: {\r\n type: column.badgeType || 'icon',\r\n color: column.badge(value, rowData),\r\n icon: column.badgeIcon?.(value, rowData),\r\n },\r\n title: null,\r\n };\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return {\r\n badge: {\r\n type: 'round' as const,\r\n color: value ? 'success' : 'error',\r\n },\r\n };\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n const execute = async (column: SdTableColumnNormal) => {\r\n const { field, click, tooltip, htmlTemplate, transform } = column;\r\n\r\n // Load lazy-values\r\n if (!transform && !htmlTemplate && column.type === 'lazy-values' && typeof column.option.views === 'function') {\r\n const {\r\n option: { views, mapValue, valueField, displayField },\r\n } = column;\r\n\r\n this.#cacheObjValues[field] = this.#cacheObjValues[field] || {};\r\n\r\n const values = ArrayUtilities.distinct(\r\n items\r\n .map(item => {\r\n const value = getNestedValue(item.data, field);\r\n if (typeof mapValue === 'function') {\r\n return mapValue(value, item.data);\r\n }\r\n return value;\r\n })\r\n .filter(val => val?.toString())\r\n .reduce<string[]>((current, next) => [...current, ...(Array.isArray(next) ? next : [next])], [])\r\n .filter(val => !Object.keys(this.#cacheObjValues[field]).includes(val))\r\n );\r\n\r\n if (values.length) {\r\n const lazyItems: any[] = (\r\n await views(values).catch((err: any) => {\r\n console.error(err);\r\n return [];\r\n })\r\n )\r\n .filter((item: any) => values.includes(item?.[valueField]))\r\n .map((e: any) => ({\r\n [valueField]: e?.[valueField],\r\n [displayField]: e?.[displayField],\r\n }));\r\n\r\n Object.assign(this.#cacheObjValues[field], ArrayUtilities.toObject(valueField, lazyItems) || {});\r\n }\r\n }\r\n\r\n // Process each item\r\n for (const item of items) {\r\n const rowData = item.data;\r\n const value = getNestedValue(rowData, field);\r\n\r\n // Initialize display\r\n item.meta.display[field] = {\r\n badge: undefined,\r\n cellStyle: column.align === 'right' ? { 'text-align': 'right!important' } : undefined,\r\n data: value,\r\n isHtml: false,\r\n tooltip: typeof tooltip === 'function' ? tooltip(value, rowData) : undefined,\r\n click: typeof click === 'function' ? () => click(value, rowData) : undefined,\r\n };\r\n\r\n const display = item.meta.display[field];\r\n\r\n // Process display data\r\n if (typeof htmlTemplate === 'function') {\r\n display.isHtml = true;\r\n display.data = htmlTemplate(value, rowData);\r\n } else if (typeof transform === 'function') {\r\n const newValue = transform(value, rowData);\r\n display.data = newValue instanceof Promise ? await newValue : newValue;\r\n } else {\r\n // Date/Time\r\n if (column.type === 'date' || column.type === 'datetime' || column.type === 'time') {\r\n const formatted = formatDateDisplay(value, column.type);\r\n display.data = formatted;\r\n display.isHtml = column.type === 'datetime';\r\n }\r\n\r\n // Values/Lazy-values\r\n if (column.type === 'values' || column.type === 'lazy-values') {\r\n display.data = processValuesDisplay(value, rowData, column, field);\r\n }\r\n\r\n // Number\r\n if (column.type === 'number' && NumberUtilities.isNumber(value)) {\r\n display.data = this.formatNumberPipe.transform(value);\r\n }\r\n\r\n // Boolean\r\n if (column.type === 'boolean') {\r\n const { option } = column;\r\n if (value != null && value !== '') {\r\n display.data = value === true ? option?.displayOnTrue || 'True' : option?.displayOnFalse || 'False';\r\n } else {\r\n display.data = '';\r\n }\r\n }\r\n\r\n // Badge\r\n const badgeResult = createBadge(column, value, rowData);\r\n if (badgeResult) {\r\n display.badge = badgeResult.badge;\r\n if (badgeResult.title) {\r\n display.data = badgeResult.title;\r\n }\r\n }\r\n\r\n // Handle empty values\r\n if (display.data === null || display.data === undefined || display.data === '') {\r\n display.data = SD_EMPTY_STR;\r\n display.badge = undefined;\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Execute for all columns\r\n for (const column of columns.filter(e => !e.hidden)) {\r\n if (column.type === 'children') {\r\n for (const childColumn of column.children?.filter(e => !e.hidden) || []) {\r\n await execute(childColumn);\r\n }\r\n } else {\r\n await execute(column);\r\n }\r\n }\r\n\r\n return items;\r\n };\r\n\r\n onOperatorChange = (column: SdTableColumn, operator: SdOperator) => {\r\n this.tableOption?.filter?.operatorChange?.(column, operator);\r\n };\r\n\r\n trackBy = (index: number, item: SdTableItem) => {\r\n return item.meta.id;\r\n };\r\n\r\n #convertPagingReq = (filterReq: SdTableFilterRequest): SdPagingReq => {\r\n const { columns, filter } = this.tableOption;\r\n const externalFilters = filter?.externalFilters || [];\r\n const req: SdPagingReq = {\r\n filters: [],\r\n orders: [],\r\n pageNumber: filterReq.pageNumber,\r\n pageSize: filterReq.pageSize,\r\n };\r\n const { filters, orders } = req;\r\n const { rawColumnFilter, columnOperator, rawExternalFilter, orderBy, orderDirection } = filterReq;\r\n // Xử lý external filter\r\n for (const externalFilter of externalFilters || []) {\r\n const { field } = externalFilter;\r\n const value = rawExternalFilter?.[field];\r\n // Nếu có giá trị thì mới xử lý filter\r\n if (value !== undefined && value !== null && value !== '') {\r\n if (externalFilter.type === 'string') {\r\n // Nếu filter là equal và có dấu , ngăn cách thì hiểu là tìm nhiều ngăn cách bởi dấu phẩy\r\n if (externalFilter.defaultOperator === 'EQUAL' && value?.includes(',')) {\r\n filters!.push({\r\n field,\r\n operator: 'IN',\r\n data: (value as string).split(',').map(val => val.trim()),\r\n });\r\n } else {\r\n filters!.push({\r\n field,\r\n operator: externalFilter.defaultOperator || 'CONTAIN',\r\n data: value,\r\n });\r\n }\r\n } else if (externalFilter.type === 'boolean') {\r\n filters!.push({\r\n field,\r\n operator: 'EQUAL',\r\n data: value === true || value === 1 || value === 'true' || value === '1',\r\n });\r\n } else if (externalFilter.type === 'daterange') {\r\n if (typeof value === 'object' && 'from' in value && 'to' in value) {\r\n if (value?.from) {\r\n filters!.push({\r\n field,\r\n operator: 'GREATER_OR_EQUAL',\r\n data: DateUtilities.begin(value?.from)!.toISOString(),\r\n });\r\n }\r\n if (value?.to) {\r\n filters!.push({\r\n field,\r\n operator: 'LESS_THAN',\r\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\r\n });\r\n }\r\n }\r\n } else if (externalFilter.type === 'date' || externalFilter.type === 'datetime') {\r\n if (DateUtilities.isDate(value)) {\r\n if (externalFilter.type === 'date') {\r\n if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {\r\n filters!.push({\r\n field,\r\n operator: 'GREATER_OR_EQUAL',\r\n data: DateUtilities.begin(value)!.toISOString(),\r\n });\r\n }\r\n if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {\r\n filters!.push({\r\n field,\r\n operator: 'LESS_THAN',\r\n data: DateUtilities.begin(DateUtilities.addDays(value, 1))!.toISOString(),\r\n });\r\n }\r\n } else {\r\n if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {\r\n filters!.push({\r\n field,\r\n operator: 'GREATER_OR_EQUAL',\r\n data: new Date(value).toISOString(),\r\n });\r\n }\r\n if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {\r\n filters!.push({\r\n field,\r\n operator: 'LESS_OR_EQUAL',\r\n data: new Date(value).toISOString(),\r\n });\r\n }\r\n }\r\n }\r\n } else {\r\n if (Array.isArray(value)) {\r\n if (value.length) {\r\n filters!.push({\r\n field,\r\n operator: 'IN',\r\n data: value,\r\n });\r\n }\r\n } else if (typeof value === 'object' && 'from' in value && 'to' in value) {\r\n if (value?.from) {\r\n filters!.push({\r\n field,\r\n operator: 'GREATER_OR_EQUAL',\r\n data: DateUtilities.begin(value?.from)!.toISOString(),\r\n });\r\n }\r\n if (value?.to) {\r\n filters!.push({\r\n field,\r\n operator: 'LESS_THAN',\r\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\r\n });\r\n }\r\n } else {\r\n filters!.push({\r\n field,\r\n operator: externalFilter.defaultOperator || 'EQUAL',\r\n data: value,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n // Xử lý column filter\r\n // Xử lý column filter\r\n for (const column of columns || []) {\r\n const { field } = column;\r\n const value: any = rawColumnFilter?.[field];\r\n const operator = columnOperator?.[field] || column.filter?.operator?.default;\r\n // Nếu có giá trị thì mới xử lý filter\r\n if (value !== undefined && value !== null && value !== '') {\r\n if (column.type === 'string') {\r\n filters!.push({\r\n field,\r\n operator: operator || 'CONTAIN',\r\n data: value,\r\n });\r\n } else if (column.type === 'boolean') {\r\n filters!.push({\r\n field,\r\n operator: 'EQUAL',\r\n data: value === true || value === 1 || value === 'true' || value === '1',\r\n });\r\n } else if (column.type === 'date' || column.type === 'datetime') {\r\n if (value && typeof value === 'object' && 'from' in value && 'to' in value) {\r\n if (value?.from && value?.to) {\r\n filters!.push({\r\n field,\r\n operator: 'BETWEEN',\r\n data: {\r\n from: DateUtilities.begin(value?.from)!.toISOString(),\r\n to: DateUtilities.end(value?.to)!.toISOString(),\r\n },\r\n });\r\n } else if (value?.from) {\r\n filters!.push({\r\n field,\r\n operator: 'GREATER_OR_EQUAL',\r\n data: DateUtilities.begin(value?.from)!.toISOString(),\r\n });\r\n } else if (value?.to) {\r\n filters!.push({\r\n field,\r\n operator: 'LESS_THAN',\r\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\r\n });\r\n }\r\n } else {\r\n if (DateUtilities.isDate(value)) {\r\n filters!.push({\r\n field,\r\n operator: 'BETWEEN',\r\n data: {\r\n from: DateUtilities.begin(value)!.toISOString(),\r\n to: DateUtilities.end(value)!.toISOString(),\r\n },\r\n });\r\n }\r\n }\r\n } else {\r\n if (Array.isArray(value)) {\r\n if (value.length) {\r\n filters!.push({\r\n field,\r\n operator: 'IN',\r\n data: value,\r\n });\r\n }\r\n } else {\r\n filters!.push({\r\n field,\r\n operator: operator || 'EQUAL',\r\n data: value,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n // Xử lý orders\r\n if (orderBy && orderDirection) {\r\n orders!.push({\r\n field: orderBy,\r\n direction: orderDirection,\r\n });\r\n }\r\n return req;\r\n };\r\n}\r\n","@if (configuration) {\r\n @if (!tableOption.filter?.disabled && !!tableOption.filter?.externalFilters?.length && filterRegister) {\r\n <external-filter\r\n class=\"mb-16\"\r\n [autoId]=\"autoId\"\r\n [filterRegister]=\"filterRegister\"\r\n [filter]=\"tableOption.filter!\"\r\n [externalFilters]=\"tableOption.filter?.externalFilters!\">\r\n </external-filter>\r\n }\r\n @let groupedItems = items | sdGroup: tableOption;\r\n <ng-content select=\"[sdTableTop]\"></ng-content>\r\n <div class=\"c-container\">\r\n @if (loading) {\r\n <div class=\"c-loading\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n }\r\n <div class=\"c-table\" sdScroll [style.max-height]=\"tableOption.style?.maxHeight\" [style.min-height]=\"tableOption.style?.minHeight\">\r\n <table\r\n mat-table\r\n [dataSource]=\"groupedItems\"\r\n [trackBy]=\"trackBy\"\r\n matSort\r\n [matSortDisabled]=\"!tableOption.sort?.enable\"\r\n multiTemplateDataRows>\r\n <ng-container matColumnDef=\"sdSubInformation\" sticky>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\" [attr.colspan]=\"configuration.displayedColumns.length\">\r\n <ng-container *ngIf=\"sdSubInformation?.templateRef\">\r\n <ng-container *ngIf=\"tableOption.expand?.always; else useExpandCollapse\">\r\n <ng-container *ngTemplateOutlet=\"sdSubInformation?.templateRef!; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n <ng-template #useExpandCollapse>\r\n <div [@detailExpand]=\"item.isExpanded ? 'expanded' : 'collapsed'\">\r\n <ng-container *ngIf=\"item.isExpanded\">\r\n <ng-container *ngTemplateOutlet=\"sdSubInformation?.templateRef!; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSubInformationAction\" stickyEnd>\r\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 1px\" [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n @if (!element.isExpanding && !tableOption.expand?.always) {\r\n <button\r\n mat-icon-button\r\n aria-label=\"Expand & Collapse\"\r\n (click)=\"onExpand(element)\">\r\n @if (!element.isExpanded) {\r\n <mat-icon>expand_more</mat-icon>\r\n } @else {\r\n <mat-icon>expand_less</mat-icon>\r\n }\r\n </button>\r\n }\r\n @if (element.isExpanding) {\r\n <div class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n }\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSelection\" sticky>\r\n <th class=\"text-center p-0\" mat-header-cell *matHeaderCellDef [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n @let visible = items | selectionVisibleSelectAll: tableOption.selector | async;\r\n @if (visible) {\r\n <mat-checkbox\r\n class=\"c-selection px-12\"\r\n style=\"width: 50px\"\r\n color=\"primary\"\r\n [(ngModel)]=\"isSelectAll\"\r\n (change)=\"onSelectAll()\">\r\n </mat-checkbox>\r\n }\r\n </th>\r\n <td class=\"text-center p-0\" mat-cell *matCellDef=\"let item\">\r\n @let visible = item | selectionVisible: tableOption.selector;\r\n @if (visible) {\r\n <mat-checkbox\r\n class=\"c-selection px-12\"\r\n style=\"width: 50px\"\r\n color=\"primary\"\r\n [(ngModel)]=\"item.meta.selector.isSelected\"\r\n (change)=\"onSelect(item)\"\r\n [disabled]=\"selectedTableItems | selectionDisabled: item : tableOption.selector!\">\r\n </mat-checkbox>\r\n }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdCommand\" sticky>\r\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 50px\" [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td class=\"px-8\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-command\r\n [autoId]=\"autoId\"\r\n [commands]=\"tableOption.commands\"\r\n [item]=\"item\"\r\n [itemIndex]=\"groupedItems.indexOf(item)\"></sd-desktop-command>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdGroup\">\r\n <th mat-header-cell *matHeaderCellDef class=\"px-8 py-8\" [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\" [attr.colspan]=\"!item?.sdGroup ? 1 : configuration.displayedColumns.length\">\r\n <div [innerHtml]=\"item?.sdGroup?.htmlTemplate | sdSafeHtml\"></div>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n @for (column of configuration.firstColumns; track column.field) {\r\n <ng-container [matColumnDef]=\"column.field\" [sticky]=\"configuration.fixedColumn[column.field]\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"px-8 py-8 c-th\"\r\n [style.width]=\"column.width\"\r\n [style.min-width]=\"column.minWidth || column.width\"\r\n [style.max-width]=\"column.maxWidth\"\r\n [attr.rowspan]=\"configuration.multipleHeader && column.type !== 'children' ? 2 : 1\"\r\n [attr.colspan]=\"column.type === 'children' ? column.children.length : 1\">\r\n <div>\r\n <!-- Nếu là column children thì không có sort -->\r\n @if (column.type === 'children') {\r\n <div\r\n aria-hidden=\"true\"\r\n class=\"c-header-title\"\r\n [class.justify-content-end]=\"column.align === 'right'\"\r\n [class.text-right]=\"column.align === 'right'\"\r\n [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n } @else {\r\n <div\r\n aria-hidden=\"true\"\r\n mat-sort-header\r\n class=\"c-header-title\"\r\n [class.justify-content-end]=\"column.align === 'right'\"\r\n [class.text-right]=\"column.align === 'right'\"\r\n [disabled]=\"!column.sortable\"\r\n [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n @let hideInlineFilter = tableOption.filter?.disabled \r\n || tableOption.filter?.hideInlineFilter === true \r\n || (tableOption.filter?.hideInlineFilter === 'auto' && !isFiltered && total! <= 10);\r\n @if (!hideInlineFilter) {\r\n <column-filter\r\n [autoId]=\"autoId\"\r\n [value]=\"columnFilter?.[column.field!]!\"\r\n [(inlineOperator)]=\"columnOperator[column.field]\"\r\n (operatorChange)=\"onOperatorChange(column, $event)\"\r\n [columnFilter]=\"columnFilter!\"\r\n [cacheValues]=\"cacheValues\"\r\n [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\">\r\n </column-filter>\r\n }\r\n }\r\n </div>\r\n </th>\r\n <td\r\n class=\"c-td px-0\"\r\n [class.d-none]=\"column.type === 'children'\"\r\n mat-cell\r\n *matCellDef=\"let item\"\r\n [sdHoverCopy]=\"item[column.field]\"\r\n [sdHoverCopyDisabled]=\"!column.copiable\">\r\n @if (column.type !== 'children' && !item?.sdGroup) {\r\n <sd-desktop-cell [autoId]=\"autoId\" class=\"d-block px-8\" [value]=\"item[column.field]\" [column]=\"column\" [item]=\"item\" [cellDef]=\"cellDef\">\r\n </sd-desktop-cell>\r\n }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef>\r\n <ng-container *ngIf=\"footerDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"footerDef[column.field].templateRef; context: { items: items, column: column }\">\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n }\r\n @for (column of configuration.secondColumns; track column.field) {\r\n <ng-container [matColumnDef]=\"column.field\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n mat-sort-header\r\n class=\"c-th px-8\"\r\n [style.width]=\"column.width\"\r\n [style.min-width]=\"column.minWidth || column.width\"\r\n [style.max-width]=\"column.maxWidth\">\r\n <div>\r\n <div\r\n aria-hidden=\"true\"\r\n mat-sort-header\r\n class=\"c-header-title\"\r\n [class.justify-content-end]=\"column.align === 'right'\"\r\n [class.text-right]=\"column.align === 'right'\"\r\n [disabled]=\"!column.sortable\"\r\n [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n @if (!tableOption.filter?.disabled && !tableOption.filter?.hideInlineFilter && columnOperator) {\r\n <column-filter\r\n [autoId]=\"autoId\"\r\n [value]=\"columnFilter?.[column.field!]!\"\r\n [(inlineOperator)]=\"columnOperator[column.field]\"\r\n [columnFilter]=\"columnFilter!\"\r\n [cacheValues]=\"cacheValues\"\r\n [column]=\"column\"\r\n (operatorChange)=\"onOperatorChange(column, $event)\"\r\n (filterChange)=\"onFilterChange()\">\r\n </column-filter>\r\n }\r\n </div>\r\n </th>\r\n <td\r\n class=\"c-td px-0\"\r\n mat-cell\r\n *matCellDef=\"let item\"\r\n [sdHoverCopy]=\"item[column.field]\"\r\n [sdHoverCopyDisabled]=\"!column.copiable\">\r\n @if (column.type !== 'children') {\r\n <sd-desktop-cell [autoId]=\"autoId\" class=\"d-block px-8\" [value]=\"item[column.field]\" [column]=\"column\" [item]=\"item\" [cellDef]=\"cellDef\">\r\n </sd-desktop-cell>\r\n }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef>\r\n <ng-container *ngIf=\"footerDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"footerDef[column.field].templateRef; context: { items: items, column: column }\">\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n }\r\n <tr class=\"c-first-header\" mat-header-row *matHeaderRowDef=\"configuration.firstHeaders; sticky: true\"></tr>\r\n @if (!!configuration.secondHeaders.length) {\r\n <tr class=\"c-second-header\" mat-header-row *matHeaderRowDef=\"configuration.secondHeaders; sticky: true\"></tr>\r\n }\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: configuration.displayedColumns\"\r\n matRipple\r\n class=\"c-row\"\r\n [class.selected]=\"row.meta.selector.isSelected\"></tr>\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: ['sdSubInformation']\" class=\"c-detail-row\"></tr>\r\n @if (hasFooter && !!configuration.displayedFooters.length) {\r\n <tr mat-footer-row *matFooterRowDef=\"configuration.displayedFooters; sticky: true\"></tr>\r\n }\r\n </table>\r\n <!-- Đang loading thì không nên hiển thị no data/no result -->\r\n @if (!loading && !total) {\r\n <div class=\"c-no-data-row\">\r\n <!-- Cần phân biệt giữa chưa có dữ liệu (no data) và tìm kiếm không có kết quả (filter no result) để tường minh với người dùng -->\r\n @if (isFiltered) {\r\n @if (tableConfiguration?.images?.filterEmpty) {\r\n <img class=\"c-image\" [src]=\"tableConfiguration!.images!.filterEmpty\" alt=\"filter-empty\" />\r\n } @else {\r\n <img class=\"c-image c-filter-empty-image\" alt=\"filter-empty\" />\r\n }\r\n <div class=\"T16M\">Không có kết quả phù hợp</div>\r\n <div class=\"T16R text-secondary\">Vui lòng tìm kiếm hoặc lọc theo tiêu chí khác</div>\r\n } @else {\r\n @if (requireFiltered) {\r\n @if (tableConfiguration?.images?.filterRequired) {\r\n <img class=\"c-image\" [src]=\"tableConfiguration!.images!.filterRequired\" alt=\"filter-required\" />\r\n } @else {\r\n <img class=\"c-image c-filter-required-image\" alt=\"filter-required\" />\r\n }\r\n <div class=\"T16R text-secondary\">Vui lòng chọn bộ lọc để bắt đầu</div>\r\n } @else {\r\n @if (tableConfiguration?.images?.dataEmpty) {\r\n <img class=\"c-image\" [src]=\"tableConfiguration!.images!.dataEmpty\" alt=\"data-empty\" />\r\n } @else {\r\n <img class=\"c-image c-data-empty-image\" alt=\"data-empty\" />\r\n }\r\n <div class=\"T16R text-secondary\">Chưa có dữ liệu</div>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"c-paginator\">\r\n <div class=\"c-action\">\r\n <!-- <ng-container *sdMobile>\r\n <sd-button *ngIf=\"tableFilter\" class=\"mr-8\" [title]=\"'Filter'\" prefixIcon=\"filter_alt\" (click)=\"tableFilter.open()\" type=\"link\">\r\n </sd-button>\r\n </ng-container> -->\r\n <ng-container *sdDesktop>\r\n @if (tableOption.reload?.visible) {\r\n <sd-button class=\"mr-8\" title=\"Tải lại\" prefixIcon=\"refresh\" (click)=\"reload()\" [disabled]=\"!items.length\" type=\"link\">\r\n </sd-button>\r\n }\r\n </ng-container>\r\n @let export = tableOption.export;\r\n @if (export && items.length) {\r\n @if (export.type === 'custom') {\r\n <sd-button class=\"mr-8\" [title]=\"exportTitle\" prefixIcon=\"get_app\" (click)=\"exportCustom()\" type=\"link\"> </sd-button>\r\n } @else {\r\n @if (export.visible) {\r\n @if (exporting) {\r\n <sd-button class=\"mr-8\" [loading]=\"exporting\" [title]=\"exportTitle\" prefixIcon=\"get_app\" type=\"link\"> </sd-button>\r\n } @else {\r\n @if (export.visible === 'ALL' || !export.visible) {\r\n <sd-button class=\"mr-8\" [title]=\"exportTitle\" prefixIcon=\"get_app\" [matMenuTriggerFor]=\"menu\" type=\"link\"> </sd-button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=\"exportExcel()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> Xuất excel</span>\r\n </button>\r\n <button mat-menu-item (click)=\"exportCSV()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> Xuất CSV</span>\r\n </button>\r\n </mat-menu>\r\n } @else if (export.visible === 'EXCEL') {\r\n <sd-button class=\"mr-8\" [title]=\"exportTitle\" prefixIcon=\"get_app\" (click)=\"exportExcel()\" type=\"link\"> </sd-button>\r\n } @else if (export.visible === 'CSV') {\r\n <sd-button class=\"mr-8\" [title]=\"exportTitle\" prefixIcon=\"get_app\" (click)=\"exportCSV()\" type=\"link\"> </sd-button>\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n <ng-container *sdDesktop>\r\n @if (configComponent) {\r\n <sd-button class=\"mr-8\" [title]=\"'Thiết lập'\" prefixIcon=\"settings\" (click)=\"configComponent.open()\" type=\"link\"> </sd-button>\r\n }\r\n </ng-container>\r\n </div>\r\n <!-- Chỉ nên dùng class d-none để vẫn giữ element mat-paginator chứ không ẩn luôn -->\r\n @let hidePaginator = !tableOption.paginate?.pageSize || total === undefined || total <= tableOption.paginate?.pageSize!; \r\n <mat-paginator\r\n [class.d-none]=\"tableOption.paginate?.hidden || hidePaginator\"\r\n [length]=\"total\"\r\n [pageSize]=\"tableOption.paginate?.pageSize\"\r\n [pageSizeOptions]=\"tableOption.paginate?.pages!\"\r\n [showFirstLastButtons]=\"tableOption.paginate?.showFirstLastButtons\"\r\n [hidePageSize]=\"tableOption.paginate?.hidePageSize\"></mat-paginator>\r\n @if (!tableOption.paginate?.hidden && hidePaginator && total !== undefined && total > 0) {\r\n <div class=\"T14R pr-16\">Đang hiển thị: <span class=\"T14M ml-2\">1-{{total}}/{{total}}</span></div>\r\n }\r\n </div>\r\n </div>\r\n <selector-action [tableOption]=\"tableOption\" [selectedTableItems]=\"selectedTableItems\" (clear)=\"onClearSelection(groupedItems)\" />\r\n @if (tableOption.config?.visible) {\r\n <config [tableOption]=\"tableOption\" />\r\n }\r\n <!-- <sd-popup-export\r\n *ngIf=\"tableOption.export?.visible\"\r\n [configuration]=\"configuration\"\r\n [tableOption]=\"tableOption\"\r\n (export)=\"onExport($event)\"\r\n #sdPopupExport\r\n ></sd-popup-export> -->\r\n <!-- <sd-table-quick-action\r\n [tableOption]=\"tableOption\"\r\n [selectedTableItems]=\"selectedTableItems\"\r\n (clear)=\"onClearSelection(groupedItems)\"\r\n >\r\n </sd-table-quick-action>\r\n <sd-popup-configuration\r\n *ngIf=\"tableOption?.key && tableOption.config?.visible\"\r\n [tableOption]=\"tableOption\"\r\n >\r\n </sd-popup-configuration> -->\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Observable } from 'rxjs';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\r\nimport { TemplateRef } from '@angular/core';\r\nimport { SdSearch } from '@sd-angular/core/forms';\r\nimport { DateUtilities, SdOperator, SdOrder, SdPagingReq } from '@sd-angular/core/utilities';\r\n\r\nexport interface SdTableQuickFilter {\r\n code: string;\r\n columnFilter: Record<string, any>;\r\n externalFilter: Record<string, any>;\r\n}\r\n\r\nexport interface TableFilterConfiguration {\r\n // selectedQuickFilter: string;\r\n // quickFilters: SdGridMaterialQuickFilter[];\r\n // columnFilter?: Record<string, any>; // Giá trị filter column\r\n inlineExternal: Record<string, boolean>; // Ẩn hiện filter external\r\n // externalFilter?: Record<string, any>; // Giá trị filter external\r\n}\r\n\r\nexport interface TableFilterValue {\r\n columnOperator?: Record<string, SdOperator>;\r\n\r\n columnFilter?: Record<string, any>; // Giá trị filter column\r\n\r\n externalFilter?: Record<string, any>; // Giá trị filter external\r\n\r\n notReload?: boolean; // Để nhận biết là chỉ set giá trị, không trigger change\r\n\r\n filtered?: boolean; // Để nhận biết là có đang lọc hay không\r\n}\r\n\r\nexport interface SdTableFilterRequest<T = any> {\r\n columnOperator: Record<string, SdOperator>;\r\n rawColumnFilter: Record<keyof T, any>;\r\n rawExternalFilter: Record<string, any>;\r\n pageNumber: number;\r\n pageSize: number;\r\n orderBy?: string;\r\n orderDirection?: SdOrder['direction'];\r\n isExported?: boolean;\r\n visibledColumns?: SdTableColumn[];\r\n}\r\n\r\nexport interface SdTableOptionFilter<T = any> {\r\n /** Key định danh nếu muốn lưu cache */\r\n key?: string;\r\n\r\n /** Có bật cache giá trị filter hay không */\r\n cacheable?: boolean;\r\n\r\n /** Vô hiệu toàn bộ filter */\r\n disabled?: boolean;\r\n\r\n /** Ẩn tất cả inline filter (chỉ còn external), nếu chọn auto thì sẽ ẩn khi total row <= 10, phù hợp cho các màn detail có ít dữ liệu */\r\n hideInlineFilter?: boolean | 'auto';\r\n\r\n /** Hàm xử lý khi đổi Operator của filter column */\r\n operatorChange?: (column?: SdTableColumn, operator?: SdOperator) => void;\r\n\r\n /** Danh sách external filter */\r\n externalFilters?: SdTableExternalFilter[];\r\n\r\n /** Số lượng cột external filter trên mỗi hàng (mặc định: 6) */\r\n externalFilterPerRow?: 4 | 6;\r\n\r\n /** Chế độ thủ công: phải nhấn nút áp dụng mới gửi filter */\r\n manualFilter?: boolean;\r\n\r\n /** Có thể thu gọn bộ lọc hay không */\r\n collapsable?: boolean;\r\n\r\n /** Ẩn toolbar (xóa bộ lọc, thiết lập) của external filter, khi có ít external filter user không cần chức năng này */\r\n hideExternalFilterToolbar?: boolean;\r\n\r\n /** Hàm xử lý khi trigger clear filter từ external filter */\r\n onClearFilter?: () => void;\r\n}\r\n\r\nexport const SdConvertToPagingReq = (\r\n filterRequest: SdTableFilterRequest,\r\n args: {\r\n columns?: SdTableColumn[];\r\n externalFilters?: SdTableExternalFilter[];\r\n fieldMapping?: Record<string, string>;\r\n orders?: SdOrder[];\r\n }\r\n): SdPagingReq => {\r\n const { externalFilters, columns, fieldMapping } = args;\r\n const req: SdPagingReq = {\r\n filters: [],\r\n orders: args?.orders || [],\r\n pageNumber: filterRequest.pageNumber,\r\n pageSize: filterRequest.pageSize,\r\n };\r\n const { filters } = req;\r\n const { rawExternalFilter, rawColumnFilter, columnOperator, orderBy, orderDirection } = filterRequest;\r\n // Xử lý external filter\r\n for (const externalFilter of externalFilters || []) {\r\n const value = rawExternalFilter?.[externalFilter.field];\r\n const field = fieldMapping?.[externalFilter.field] || externalFilter.field;\r\n // Nếu có giá trị thì mới xử lý filter\r\n if (value !== undefined && value !== null && value !== '') {\r\n if (externalFilter.type === 'string') {\r\n filters!.push({\r\n field,\r\n operator: externalFilter.defaultOperator || 'CONTAIN',\r\n data: value,\r\n });\r\n } else if (externalFilter.type === 'boolean') {\r\n filters!.push({\r\n field,\r\n operator: 'EQUAL',\r\n data: value === true || value === 1 || value === 'true' || value === '1',\r\n });\r\n } else if (externalFilter.type === 'date') {\r\n if (typeof value === 'object' && 'from' in value && 'to' in value) {\r\n if (value?.from) {\r\n filters!.push({\r\n field,\r\n operator: 'GREATER_OR_EQUAL',\r\n data: DateUtilities.begin(value?.from)!.toISOString(),\r\n });\r\n }\r\n if (value?.to) {\r\n filters!.push({\r\n field,\r\n operator: 'LESS_THAN',\r\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\r\n });\r\n }\r\n } else {\r\n if (DateUtilities.isDate(value)) {\r\n if (externalFilter.defaultOperator === 'GREATER_OR_EQUAL') {\r\n filters!.push({\r\n field,\r\n operator: 'GREATER_OR_EQUAL',\r\n data: DateUtilities.begin(value)!.toISOString(),\r\n });\r\n }\r\n if (externalFilter.defaultOperator === 'LESS_OR_EQUAL') {\r\n filters!.push({\r\n field,\r\n operator: 'LESS_THAN',\r\n data: DateUtilities.begin(DateUtilities.addDays(value, 1))!.toISOString(),\r\n });\r\n }\r\n }\r\n }\r\n } else {\r\n if (Array.isArray(value)) {\r\n if (value.length) {\r\n filters!.push({\r\n field,\r\n operator: 'IN',\r\n data: value,\r\n });\r\n }\r\n } else {\r\n filters!.push({\r\n field,\r\n operator: externalFilter.defaultOperator || 'EQUAL',\r\n data: value,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n // Xử lý column filter\r\n for (const column of columns || []) {\r\n const value = rawColumnFilter?.[column.field];\r\n const field = fieldMapping?.[column.field] || column.field;\r\n const operator = columnOperator?.[column.field] || column.filter?.operator?.default;\r\n // Nếu có giá trị thì mới xử lý filter\r\n if (value !== undefined && value !== null && value !== '') {\r\n if (column.type === 'string') {\r\n filters!.push({\r\n field,\r\n operator: operator || 'CONTAIN',\r\n data: value,\r\n });\r\n } else if (column.type === 'boolean') {\r\n filters!.push({\r\n field,\r\n operator: 'EQUAL',\r\n data: value === true || value === 1 || value === 'true' || value === '1',\r\n });\r\n } else if (column.type === 'date' || column.type === 'datetime') {\r\n if (typeof value === 'object' && 'from' in value && 'to' in value) {\r\n if (value?.from && value?.to) {\r\n filters!.push({\r\n field,\r\n operator: 'BETWEEN',\r\n data: {\r\n from: DateUtilities.begin(value?.from)!.toISOString(),\r\n to: DateUtilities.end(value?.to)!.toISOString(),\r\n },\r\n });\r\n } else if (value?.from) {\r\n filters!.push({\r\n field,\r\n operator: 'GREATER_OR_EQUAL',\r\n data: DateUtilities.begin(value?.from)!.toISOString(),\r\n });\r\n } else if (value?.to) {\r\n filters!.push({\r\n field,\r\n operator: 'LESS_THAN',\r\n data: DateUtilities.begin(DateUtilities.addDays(value?.to, 1))!.toISOString(),\r\n });\r\n }\r\n } else {\r\n if (DateUtilities.isDate(value)) {\r\n filters!.push({\r\n field,\r\n operator: 'BETWEEN',\r\n data: {\r\n from: DateUtilities.begin(value)!.toISOString(),\r\n to: DateUtilities.end(value)!.toISOString(),\r\n },\r\n });\r\n }\r\n }\r\n } else {\r\n if (Array.isArray(value)) {\r\n if (value.length) {\r\n filters!.push({\r\n field,\r\n operator: 'IN',\r\n data: value,\r\n });\r\n }\r\n } else {\r\n filters!.push({\r\n field,\r\n operator: operator || 'EQUAL',\r\n data: value,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n // Xử lý orders\r\n if (orderBy && orderDirection) {\r\n req.orders!.push({\r\n field: orderBy,\r\n direction: orderDirection,\r\n });\r\n }\r\n return req;\r\n};\r\n\r\nexport declare type SdTableExternalFilter<TData = any> =\r\n | TextFilter<TData>\r\n | DateFilter<TData>\r\n | DateTimeFilter<TData>\r\n | DateRangeFilter<TData>\r\n | NumberFilter<TData>\r\n | ValuesFilter<TData>\r\n | LazyValuesFilter<TData>\r\n | BooleanFilter<TData>\r\n | CustomFilter<TData>;\r\n\r\ninterface BaseFilter<TData = any> {\r\n field: string;\r\n title: string;\r\n defaultShowing?: boolean;\r\n required?: boolean; // Bật lên nếu bắt buộc phải có giá trị- mới thực hiện gọi API filter\r\n hidden?: boolean; // Ẩn filter\r\n defaultOperator?: SdOperator; // Đôi lúc cột string nhưng lại muốn tìm kiếm chính xác\r\n data?: TData; // Các tham số muốn truyền thêm để đánh dấu/nhận biết ..., ví dụ mappingField\r\n}\r\n\r\ninterface TextFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'string';\r\n default?: string;\r\n}\r\n\r\ninterface DateFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'date';\r\n default?: Date | string;\r\n minDate?: string | number | Date;\r\n maxDate?: string | number | Date;\r\n}\r\n\r\ninterface DateTimeFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'datetime';\r\n default?: Date | string;\r\n minDate?: string | number | Date;\r\n maxDate?: string | number | Date;\r\n}\r\n\r\ninterface DateRangeFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'daterange';\r\n enableTime?: boolean;\r\n minDate?: string | number | Date;\r\n maxDate?: string | number | Date;\r\n default?: {\r\n from?: Date | string;\r\n to?: Date | string;\r\n };\r\n}\r\n\r\ninterface NumberFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'number';\r\n default?: number;\r\n}\r\n\r\ninterface ValuesFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'values';\r\n option: {\r\n valueField: string;\r\n displayField: string;\r\n items: any[] | (() => Promise<any[]>);\r\n selection?: 'AUTOCOMPLETE' | 'MULTIPLE' | 'MULTIPLEAUTOCOMPLETE';\r\n };\r\n default?: string | string[];\r\n}\r\n\r\ninterface LazyValuesFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'lazy-values';\r\n option: {\r\n valueField: string;\r\n displayField: string;\r\n items: SdSearch; // Filter\r\n selection?: 'MULTIPLE';\r\n };\r\n default?: string | string[];\r\n}\r\n\r\ninterface BooleanFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'boolean';\r\n option?: {\r\n displayOnTrue?: string;\r\n displayOnFalse?: string;\r\n };\r\n default?: boolean;\r\n}\r\n\r\ninterface CustomFilter<TData = any> extends BaseFilter<TData> {\r\n type: 'custom';\r\n // filterDef?: TemplateRef<SdTableFilterDefDirective>;\r\n filterDef?: TemplateRef<any>;\r\n default?: any;\r\n}\r\n\r\nexport interface TableFilterRegister {\r\n configuration: {\r\n get: () => TableFilterConfiguration;\r\n set: (configuration: Partial<TableFilterConfiguration>) => TableFilterConfiguration;\r\n remove: () => void;\r\n observer: Observable<TableFilterConfiguration>;\r\n };\r\n value: {\r\n get: () => TableFilterValue;\r\n set: (value: Partial<TableFilterValue>) => TableFilterValue;\r\n remove: () => void;\r\n observer: Observable<TableFilterValue>;\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SdDateRange","SdUtilities","i2","i3","i1","i2.ConfigService","i5","i4","i4.SdTableFilterService","i7","i9","i10","DateUtilities"],"mappings":"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"}