@masterteam/components 0.0.117 → 0.0.119
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/common.css +2 -172
- package/fesm2022/masterteam-components-entities.mjs +5 -4
- package/fesm2022/masterteam-components-entities.mjs.map +1 -1
- package/fesm2022/masterteam-components-sidebar.mjs +36 -0
- package/fesm2022/masterteam-components-sidebar.mjs.map +1 -0
- package/fesm2022/masterteam-components-slider-field.mjs +104 -0
- package/fesm2022/masterteam-components-slider-field.mjs.map +1 -0
- package/fesm2022/masterteam-components-statistic-card.mjs +22 -0
- package/fesm2022/masterteam-components-statistic-card.mjs.map +1 -0
- package/fesm2022/masterteam-components-table.mjs +30 -7
- package/fesm2022/masterteam-components-table.mjs.map +1 -1
- package/fesm2022/masterteam-components-textarea-field.mjs +92 -0
- package/fesm2022/masterteam-components-textarea-field.mjs.map +1 -0
- package/fesm2022/masterteam-components-toast.mjs +75 -0
- package/fesm2022/masterteam-components-toast.mjs.map +1 -0
- package/fesm2022/masterteam-components-topbar.mjs +28 -0
- package/fesm2022/masterteam-components-topbar.mjs.map +1 -0
- package/fesm2022/masterteam-components-tree.mjs +219 -0
- package/fesm2022/masterteam-components-tree.mjs.map +1 -0
- package/package.json +16 -16
- package/types/masterteam-components-entities.d.ts +1 -1
- package/types/masterteam-components-sidebar.d.ts +28 -0
- package/types/masterteam-components-slider-field.d.ts +45 -0
- package/types/masterteam-components-statistic-card.d.ts +18 -0
- package/types/masterteam-components-table.d.ts +1 -0
- package/types/masterteam-components-textarea-field.d.ts +38 -0
- package/types/masterteam-components-toast.d.ts +26 -0
- package/types/masterteam-components-topbar.d.ts +17 -0
- package/types/masterteam-components-tree.d.ts +98 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-components-table.mjs","sources":["../../../../packages/masterteam/components/table/table-value.utils.ts","../../../../packages/masterteam/components/table/table-filter/table-filter.ts","../../../../packages/masterteam/components/table/table-filter/table-filter.html","../../../../packages/masterteam/components/table/table.ts","../../../../packages/masterteam/components/table/table.html","../../../../packages/masterteam/components/table/masterteam-components-table.ts"],"sourcesContent":["import { EntityData, EntityViewType } from '@masterteam/components/entities';\r\nimport { ColumnDef, FilterConfig } from './table-types';\r\n\r\nexport type TableEntityUsage = 'sort' | 'export' | 'filter';\r\n\r\nexport class TableValueResolver {\r\n private static readonly ALL_ENTITY_VIEW_TYPES: EntityViewType[] = [\r\n 'Text',\r\n 'LongText',\r\n 'Date',\r\n 'DateTime',\r\n 'Percentage',\r\n 'Status',\r\n 'Currency',\r\n 'Checkbox',\r\n 'User',\r\n 'Lookup',\r\n 'Attachment',\r\n ];\r\n\r\n private static readonly UNSORTABLE_ENTITY_VIEW_TYPES =\r\n new Set<EntityViewType>(['Attachment', 'Checkbox']);\r\n\r\n private static readonly EXPORTABLE_ENTITY_VIEW_TYPES =\r\n new Set<EntityViewType>([\r\n 'Text',\r\n 'LongText',\r\n 'Date',\r\n 'DateTime',\r\n 'Percentage',\r\n 'Status',\r\n 'Currency',\r\n 'Checkbox',\r\n 'User',\r\n 'Lookup',\r\n ]);\r\n\r\n private static readonly FILTERABLE_ENTITY_VIEW_TYPES =\r\n new Set<EntityViewType>(\r\n TableValueResolver.ALL_ENTITY_VIEW_TYPES.filter(\r\n (viewType) => viewType !== 'Attachment',\r\n ),\r\n );\r\n\r\n static getProperty(obj: unknown, key: string): unknown {\r\n return key.split('.').reduce<unknown>((current, segment) => {\r\n if (!current || typeof current !== 'object') {\r\n return undefined;\r\n }\r\n\r\n return (current as Record<string, unknown>)[segment];\r\n }, obj);\r\n }\r\n\r\n static getColumnFilterType(\r\n column: ColumnDef,\r\n row?: Record<string, unknown>,\r\n ): FilterConfig['type'] | null {\r\n if (column.filterConfig?.type) {\r\n return column.filterConfig.type;\r\n }\r\n\r\n if (column.type === 'date') {\r\n return 'date';\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return 'boolean';\r\n }\r\n\r\n if (column.type === 'user') {\r\n return 'user';\r\n }\r\n\r\n if (column.type !== 'entity') {\r\n return null;\r\n }\r\n\r\n const viewType = TableValueResolver.getEntityViewType(column, row);\r\n if (\r\n !viewType ||\r\n !TableValueResolver.FILTERABLE_ENTITY_VIEW_TYPES.has(viewType)\r\n ) {\r\n return null;\r\n }\r\n\r\n switch (viewType) {\r\n case 'Date':\r\n case 'DateTime':\r\n return 'date';\r\n case 'Checkbox':\r\n return 'boolean';\r\n case 'Status':\r\n case 'Lookup':\r\n case 'User':\r\n return 'select';\r\n case 'Text':\r\n case 'LongText':\r\n case 'Currency':\r\n case 'Percentage':\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n static getColumnFilterValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | boolean | null {\r\n const cellValue = TableValueResolver.getProperty(row, column.key);\r\n\r\n if (cellValue === null || cellValue === undefined) {\r\n return null;\r\n }\r\n\r\n if (column.type === 'entity') {\r\n const filterType = TableValueResolver.getColumnFilterType(column, row);\r\n\r\n if (filterType === 'date') {\r\n return TableValueResolver.getEntityValueByType(cellValue, 'sort');\r\n }\r\n\r\n return TableValueResolver.getEntityValueByType(cellValue, 'filter');\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return TableValueResolver.resolveBooleanValue(cellValue);\r\n }\r\n\r\n return TableValueResolver.resolveDisplayValue(cellValue);\r\n }\r\n\r\n static getEntityValueByType(\r\n value: unknown,\r\n usage: TableEntityUsage,\r\n ): string | number | boolean | null {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n if (typeof value !== 'object') {\r\n return TableValueResolver.resolveDisplayValue(value);\r\n }\r\n\r\n const entityData = value as EntityData;\r\n\r\n if (\r\n usage === 'sort' &&\r\n TableValueResolver.UNSORTABLE_ENTITY_VIEW_TYPES.has(entityData.viewType)\r\n ) {\r\n return null;\r\n }\r\n\r\n if (\r\n usage === 'export' &&\r\n !TableValueResolver.EXPORTABLE_ENTITY_VIEW_TYPES.has(entityData.viewType)\r\n ) {\r\n return TableValueResolver.resolveDisplayValue(entityData.value);\r\n }\r\n\r\n switch (entityData.viewType) {\r\n case 'Currency':\r\n case 'Percentage':\r\n return usage === 'sort'\r\n ? TableValueResolver.normalizeNumericSortValue(\r\n entityData.rawValue ?? entityData.value,\r\n )\r\n : TableValueResolver.resolveDisplayValue(entityData.value);\r\n case 'Date':\r\n case 'DateTime':\r\n return usage === 'sort'\r\n ? TableValueResolver.normalizeDateSortValue(\r\n entityData.rawValue ?? entityData.value,\r\n )\r\n : TableValueResolver.resolveDisplayValue(entityData.value);\r\n case 'Checkbox':\r\n return TableValueResolver.resolveBooleanValue(\r\n entityData.rawValue ?? entityData.value,\r\n );\r\n case 'Status':\r\n case 'Lookup':\r\n case 'User':\r\n case 'Text':\r\n case 'LongText':\r\n default:\r\n return TableValueResolver.resolveDisplayValue(entityData.value);\r\n }\r\n }\r\n\r\n static resolveDisplayValue(value: unknown): string | number | boolean | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n if (\r\n typeof value === 'string' ||\r\n typeof value === 'number' ||\r\n typeof value === 'boolean'\r\n ) {\r\n return value;\r\n }\r\n\r\n if (value instanceof Date) {\r\n return value.toISOString();\r\n }\r\n\r\n if (typeof value === 'object') {\r\n const objectValue = value as Record<string, unknown>;\r\n const displayCandidate =\r\n objectValue['display'] ??\r\n objectValue['displayName'] ??\r\n objectValue['name'] ??\r\n objectValue['label'] ??\r\n objectValue['value'];\r\n\r\n return TableValueResolver.resolveDisplayValue(displayCandidate);\r\n }\r\n\r\n return String(value);\r\n }\r\n\r\n static resolveBooleanValue(value: unknown): boolean | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return ['true', '1', 'yes', 'on'].includes(value.toLowerCase());\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return value === 1;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n static normalizeTextSortValue(value: unknown): string | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n return String(value).toLocaleLowerCase();\r\n }\r\n\r\n static normalizeNumericSortValue(value: unknown): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const numericValue =\r\n typeof value === 'number'\r\n ? value\r\n : Number.parseFloat(String(value).replace(/[^0-9.-]/g, ''));\r\n\r\n return Number.isNaN(numericValue) ? null : numericValue;\r\n }\r\n\r\n static normalizeDateSortValue(value: unknown): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const timestamp =\r\n value instanceof Date\r\n ? value.getTime()\r\n : new Date(String(value)).getTime();\r\n\r\n return Number.isNaN(timestamp) ? null : timestamp;\r\n }\r\n\r\n private static getEntityViewType(\r\n column: ColumnDef,\r\n row?: Record<string, unknown>,\r\n ): EntityViewType | null {\r\n const explicitViewType = (column as { viewType?: unknown }).viewType;\r\n if (TableValueResolver.isEntityViewType(explicitViewType)) {\r\n return explicitViewType;\r\n }\r\n\r\n const cellValue = row\r\n ? TableValueResolver.getProperty(row, column.key)\r\n : undefined;\r\n if (\r\n cellValue &&\r\n typeof cellValue === 'object' &&\r\n 'viewType' in (cellValue as Record<string, unknown>)\r\n ) {\r\n const viewType = (cellValue as EntityData).viewType;\r\n if (TableValueResolver.isEntityViewType(viewType)) {\r\n return viewType;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static isEntityViewType(value: unknown): value is EntityViewType {\r\n return (\r\n typeof value === 'string' &&\r\n TableValueResolver.ALL_ENTITY_VIEW_TYPES.includes(value as EntityViewType)\r\n );\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n forwardRef,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DateField } from '@masterteam/components/date-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { UserSearchField } from '@masterteam/components/user-search-field';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { PopoverModule } from 'primeng/popover';\r\nimport {\r\n ColumnDef,\r\n FilterOption,\r\n FilterValue,\r\n TableFilters,\r\n} from '../table-types';\r\nimport { TableValueResolver } from '../table-value.utils';\r\n\r\n@Component({\r\n selector: 'mt-table-filter',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n TextField,\r\n SelectField,\r\n DateField,\r\n UserSearchField,\r\n Button,\r\n PopoverModule,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './table-filter.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TableFilter),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class TableFilter implements ControlValueAccessor {\r\n readonly columns = input.required<ColumnDef[]>();\r\n readonly data = input<any[]>([]);\r\n\r\n readonly filterApplied = output<TableFilters>();\r\n readonly filterReset = output<void>();\r\n\r\n protected pendingFilters = signal<TableFilters>({});\r\n protected appliedFilters = signal<TableFilters>({});\r\n\r\n protected booleanOptions = [\r\n { label: 'Yes', value: true },\r\n { label: 'No', value: false },\r\n ];\r\n\r\n private onChange: (value: TableFilters) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n protected filterableColumns = computed(() =>\r\n this.columns()\r\n .filter(\r\n (col) =>\r\n TableValueResolver.getColumnFilterType(col, this.data()[0]) !== null,\r\n )\r\n .map((col) => {\r\n const filterType = TableValueResolver.getColumnFilterType(\r\n col,\r\n this.data()[0],\r\n );\r\n\r\n // Auto-generate select options from data if not provided\r\n if (filterType === 'select' && !col.filterConfig?.options?.length) {\r\n const uniqueOptions = Array.from(\r\n this.data().reduce<Map<string, FilterOption>>((options, row) => {\r\n const value = TableValueResolver.getColumnFilterValue(row, col);\r\n\r\n if (value === null || value === undefined || value === '') {\r\n return options;\r\n }\r\n\r\n const optionKey = `${typeof value}:${String(value)}`;\r\n if (!options.has(optionKey)) {\r\n options.set(optionKey, {\r\n label: String(value),\r\n value,\r\n });\r\n }\r\n\r\n return options;\r\n }, new Map()),\r\n )\r\n .map(([, option]) => option)\r\n .sort((a, b) => a.label.localeCompare(b.label));\r\n\r\n return {\r\n ...col,\r\n filterConfig: {\r\n ...col.filterConfig,\r\n type: filterType,\r\n options: uniqueOptions,\r\n },\r\n };\r\n }\r\n\r\n return {\r\n ...col,\r\n filterConfig: {\r\n ...col.filterConfig,\r\n type: filterType ?? col.filterConfig?.type ?? 'text',\r\n },\r\n };\r\n }),\r\n );\r\n\r\n protected activeFilterCount = computed(() => {\r\n const filters = this.appliedFilters();\r\n return Object.values(filters).filter((v) => this.hasValue(v)).length;\r\n });\r\n\r\n protected getFilterType(col: ColumnDef): string {\r\n return (\r\n TableValueResolver.getColumnFilterType(col, this.data()[0]) ?? 'text'\r\n );\r\n }\r\n\r\n protected getFilterValue(key: string): any {\r\n const value = this.pendingFilters()[key];\r\n return value?.value ?? value ?? null;\r\n }\r\n\r\n protected getDateRangeValue(key: string, part: 'from' | 'to'): Date | null {\r\n const value = this.pendingFilters()[key] as FilterValue | undefined;\r\n if (!value || typeof value !== 'object') return null;\r\n return part === 'from' ? (value.from ?? null) : (value.to ?? null);\r\n }\r\n\r\n protected updateFilter(key: string, value: any): void {\r\n this.pendingFilters.update((filters) => ({\r\n ...filters,\r\n [key]: value,\r\n }));\r\n this.onTouched();\r\n }\r\n\r\n protected updateDateFilter(\r\n key: string,\r\n part: 'from' | 'to',\r\n value: Date | null,\r\n ): void {\r\n this.pendingFilters.update((filters) => {\r\n const current = (filters[key] as FilterValue) ?? {};\r\n return {\r\n ...filters,\r\n [key]: {\r\n ...current,\r\n [part]: value,\r\n },\r\n };\r\n });\r\n this.onTouched();\r\n }\r\n\r\n protected apply(): void {\r\n const filters = { ...this.pendingFilters() };\r\n this.appliedFilters.set(filters);\r\n this.onChange(filters);\r\n this.filterApplied.emit(filters);\r\n }\r\n\r\n protected reset(): void {\r\n this.pendingFilters.set({});\r\n this.appliedFilters.set({});\r\n this.onChange({});\r\n this.filterReset.emit();\r\n }\r\n\r\n private hasValue(value: any): boolean {\r\n if (value === null || value === undefined || value === '') return false;\r\n if (typeof value === 'object') {\r\n return value.from != null || value.to != null || value.value != null;\r\n }\r\n return true;\r\n }\r\n\r\n // ControlValueAccessor\r\n writeValue(value: TableFilters | null): void {\r\n const filters = value ?? {};\r\n this.pendingFilters.set(filters);\r\n this.appliedFilters.set(filters);\r\n }\r\n\r\n registerOnChange(fn: (value: TableFilters) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n}\r\n","<mt-button\r\n (click)=\"popover.toggle($event)\"\r\n [label]=\"'components.table.filter' | transloco\"\r\n [badge]=\"activeFilterCount()\"\r\n severity=\"primary\"\r\n icon=\"general.filter-funnel-01\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: '320px' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col max-h-[50vh]\">\r\n <h4\r\n class=\"text-lg py-2 font-semibold border-b border-surface-200 dark:border-surface-700 shrink-0\"\r\n >\r\n {{ \"components.table.filterOptions\" | transloco }}\r\n </h4>\r\n\r\n <div\r\n class=\"space-y-3 overflow-y-auto flex-1 py-3\"\r\n (keydown.enter)=\"apply(); popover.hide()\"\r\n >\r\n @for (col of filterableColumns(); track col.key) {\r\n <div class=\"space-y-1\">\r\n <label\r\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\r\n >\r\n {{ col.filterConfig?.label || col.label }}\r\n </label>\r\n\r\n @switch (getFilterType(col)) {\r\n @case (\"text\") {\r\n <mt-text-field\r\n [ngModel]=\"getFilterValue(col.key)\"\r\n (ngModelChange)=\"updateFilter(col.key, $event)\"\r\n [placeholder]=\"\r\n ('components.table.select' | transloco) +\r\n ' ' +\r\n (col.filterConfig?.label || col.label)\r\n \"\r\n />\r\n }\r\n @case (\"select\") {\r\n <mt-select-field\r\n [ngModel]=\"getFilterValue(col.key)\"\r\n (ngModelChange)=\"updateFilter(col.key, $event)\"\r\n [options]=\"col.filterConfig?.options ?? []\"\r\n [placeholder]=\"\r\n ('components.table.select' | transloco) +\r\n ' ' +\r\n (col.filterConfig?.label || col.label)\r\n \"\r\n [hasPlaceholderPrefix]=\"false\"\r\n showClear\r\n />\r\n }\r\n @case (\"date\") {\r\n <div class=\"space-y-3\">\r\n <div class=\"space-y-1\">\r\n <label\r\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\r\n >\r\n {{ \"components.table.from\" | transloco }}\r\n </label>\r\n <mt-date-field\r\n [ngModel]=\"getDateRangeValue(col.key, 'from')\"\r\n (ngModelChange)=\"updateDateFilter(col.key, 'from', $event)\"\r\n [placeholder]=\"'components.table.from' | transloco\"\r\n />\r\n </div>\r\n <div class=\"space-y-1\">\r\n <label\r\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\r\n >\r\n {{ \"components.table.to\" | transloco }}\r\n </label>\r\n <mt-date-field\r\n [ngModel]=\"getDateRangeValue(col.key, 'to')\"\r\n (ngModelChange)=\"updateDateFilter(col.key, 'to', $event)\"\r\n [placeholder]=\"'components.table.to' | transloco\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n @case (\"boolean\") {\r\n <mt-select-field\r\n [ngModel]=\"getFilterValue(col.key)\"\r\n (ngModelChange)=\"updateFilter(col.key, $event)\"\r\n [options]=\"booleanOptions\"\r\n [placeholder]=\"'components.table.select' | transloco\"\r\n [hasPlaceholderPrefix]=\"false\"\r\n showClear\r\n />\r\n }\r\n @case (\"user\") {\r\n <mt-user-search-field\r\n [ngModel]=\"getFilterValue(col.key)\"\r\n (ngModelChange)=\"updateFilter(col.key, $event)\"\r\n [placeholder]=\"col.filterConfig?.label || col.label\"\r\n [apiUrl]=\"col.filterConfig?.apiUrl ?? ''\"\r\n [context]=\"col.filterConfig?.context\"\r\n />\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex justify-end gap-2 pt-4 border-t border-surface-200 dark:border-surface-700 shrink-0\"\r\n >\r\n <mt-button\r\n variant=\"outlined\"\r\n (click)=\"reset(); popover.hide()\"\r\n [label]=\"'components.table.reset' | transloco\"\r\n />\r\n <mt-button\r\n (click)=\"apply(); popover.hide()\"\r\n [label]=\"'components.table.apply' | transloco\"\r\n />\r\n </div>\r\n </div>\r\n</p-popover>\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet, DatePipe } from '@angular/common';\r\nimport {\r\n ColumnDef,\r\n TableAction,\r\n TableActionShape,\r\n CellChangeEvent,\r\n ColumnTypeForActionCell,\r\n TableFilters,\r\n FilterValue,\r\n} from './table-types';\r\nimport { TableFilter } from './table-filter/table-filter';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { Paginator } from '@masterteam/components/paginator';\r\nimport { CheckboxField } from '@masterteam/components/checkbox-field';\r\nimport {\r\n TableModule,\r\n TablePageEvent,\r\n Table as PrimeTable,\r\n} from 'primeng/table';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\nimport { ConfirmationService } from '@masterteam/components/confirmation';\nimport { TranslocoModule } from '@jsverse/transloco';\nimport { EntityData, EntityPreview } from '@masterteam/components/entities';\nimport { PopoverModule } from 'primeng/popover';\r\nimport { Icon, MTIcon } from '@masterteam/icons';\r\nimport { TableValueResolver } from './table-value.utils';\r\n\r\n@Component({\r\n selector: 'mt-table',\r\n templateUrl: './table.html',\r\n styleUrls: ['./table.css'],\r\n standalone: true,\r\n imports: [\r\n TableModule,\r\n NgTemplateOutlet,\r\n DatePipe,\r\n ToggleField,\r\n FormsModule,\r\n Button,\r\n TextField,\r\n Paginator,\r\n CheckboxField,\r\n Tabs,\r\n SkeletonModule,\r\n ProgressBarModule,\r\n TranslocoModule,\r\n TableFilter,\r\n EntityPreview,\r\n PopoverModule,\r\n Icon,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Table {\r\n selectionChange = output<any[]>();\r\n cellChange = output<CellChangeEvent>();\r\n lazyLoad = output<any>();\r\n columnReorder = output<any>();\r\n rowReorder = output<any>();\r\n rowClick = output<any>();\r\n\r\n filters = model<TableFilters>({});\r\n\r\n data = input.required<any[]>();\r\n columns = input.required<ColumnDef[]>();\r\n rowActions = input<TableAction[]>([]);\r\n size = input<'small' | 'large' | undefined>(undefined);\r\n showGridlines = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n stripedRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n selectableRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n clickableRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n generalSearch = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n lazyLocalSearch = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n showFilters = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n loading = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n updating = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazy = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n lazyLocalSort = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n lazyTotalRecords = input<number>();\n reorderableColumns = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n reorderableRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n dataKey = input<string>();\r\n exportable = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n exportFilename = input<string>('download');\r\n actionShape = input<TableActionShape>('flat');\r\n\r\n // Tabs inputs and outputs\r\n tabs = input<any[]>();\r\n tabsOptionLabel = input<string>();\r\n tabsOptionValue = input<string>();\r\n activeTab = model<any>();\r\n onTabChange = output<any>();\r\n\r\n // Table actions inputs and outputs\r\n actions = input<TableAction[]>([]);\r\n\r\n // Content TemplateRefs\r\n captionStartContent = contentChild<TemplateRef<any>>('captionStart');\r\n captionEndContent = contentChild<TemplateRef<any>>('captionEnd');\r\n emptyContent = contentChild<TemplateRef<any>>('empty');\r\n\r\n // Table reference for export\r\n protected tableRef = viewChild<PrimeTable>('dt');\r\n\r\n paginatorPosition = input<'end' | 'start' | 'center'>('end');\r\n pageSize = model<number>(10);\r\n currentPage = model<number>(0);\r\n first = model<number>(0);\r\n filterTerm = model<string>('');\r\n sortField = signal<string | null>(null);\r\n sortDirection = signal<'asc' | 'desc' | null>(null);\r\n confirmationService = inject(ConfirmationService);\r\n\r\n protected selectedRows = signal<Set<any>>(new Set());\r\n\r\n // Map columns for PrimeNG export (key -> field)\r\n protected exportColumns = computed(() =>\r\n this.columns()\r\n .filter((col) => col.type !== 'custom')\r\n .map((col) => ({ ...col, field: col.key, header: col.label })),\r\n );\r\n\r\n protected activeFilterCount = computed(() => {\r\n const filters = this.filters();\r\n return Object.values(filters).filter(\r\n (value) => value !== null && value !== undefined && value !== '',\r\n ).length;\r\n });\r\n\r\n protected filteredData = computed(() => {\n const data = this.data();\n const applyLocalSearch = !this.lazy() || this.lazyLocalSearch();\n const applyLocalSort = !this.lazy() || this.lazyLocalSort();\n const searchTerm = applyLocalSearch ? this.filterTerm().toLowerCase() : '';\n const filters = this.filters();\n const filterKeys = this.lazy() ? [] : Object.keys(filters);\n let result = data;\n\r\n // Apply search term\r\n if (searchTerm !== '') {\r\n result = result.filter((item) =>\r\n Object.values(item).some(\r\n (value) =>\r\n typeof value === 'string' &&\r\n value.toLowerCase().includes(searchTerm),\r\n ),\r\n );\r\n }\r\n\r\n // Apply column filters\r\n if (filterKeys.length > 0) {\r\n result = result.filter((item) =>\r\n filterKeys.every((key) => this.matchesFilter(item, key, filters[key])),\r\n );\r\n }\r\n\r\n return applyLocalSort ? this.sortData(result) : result;\n });\n\r\n protected displayData = computed(() => {\n if (this.loading()) {\n return Array.from({ length: this.pageSize() }, () => ({}));\n }\n return this.filteredData();\n });\n\r\n protected totalRecords = computed(() => {\r\n if (this.lazy() && this.lazyTotalRecords() !== undefined) {\r\n return this.lazyTotalRecords() as number;\r\n }\r\n\r\n return this.filteredData().length;\r\n });\r\n\r\n // TODO: remove after updating the toggle and checkbox logic\r\n protected paginatedData = computed(() => {\n const data = this.filteredData();\n const first = this.first();\n const pageSize = this.pageSize();\n if (this.lazy()) {\n return data;\n }\r\n return data.slice(first, first + pageSize);\r\n });\r\n\r\n protected allSelectedOnPage = computed(() => {\r\n const pageData = this.paginatedData();\r\n if (pageData.length === 0) return false;\r\n return pageData.every((row) => this.selectedRows().has(row));\r\n });\r\n\r\n onFilterApplied(filters: TableFilters): void {\r\n this.filters.set(filters);\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n\r\n if (this.lazy()) {\r\n this.emitLazyLoad({});\r\n }\r\n }\r\n\r\n onFilterReset(): void {\r\n this.filters.set({});\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n\r\n if (this.lazy()) {\r\n this.emitLazyLoad({});\r\n }\r\n }\r\n\r\n protected matchesFilter(\r\n item: any,\r\n key: string,\r\n filterValue: FilterValue | any,\r\n ): boolean {\r\n if (\r\n filterValue === null ||\r\n filterValue === undefined ||\r\n filterValue === ''\r\n ) {\r\n return true;\r\n }\r\n\r\n const column = this.columns().find((col) => col.key === key);\r\n const itemValue = this.getProperty(item, key);\r\n const normalizedFilterValue = column\r\n ? TableValueResolver.getColumnFilterValue(item, column)\r\n : TableValueResolver.resolveDisplayValue(itemValue);\r\n const filterType = column\r\n ? TableValueResolver.getColumnFilterType(column, item)\r\n : null;\r\n\r\n // Date range filter\r\n if (typeof filterValue === 'object') {\r\n if (filterValue.from || filterValue.to) {\r\n const itemDateValue =\r\n filterType === 'date'\r\n ? typeof normalizedFilterValue === 'number'\r\n ? normalizedFilterValue\r\n : null\r\n : itemValue instanceof Date\r\n ? itemValue.getTime()\r\n : new Date(String(itemValue)).getTime();\r\n\r\n if (\r\n itemDateValue === null ||\r\n itemDateValue === undefined ||\r\n Number.isNaN(itemDateValue)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n filterValue.from &&\r\n itemDateValue < new Date(filterValue.from).getTime()\r\n ) {\r\n return false;\r\n }\r\n if (\r\n filterValue.to &&\r\n itemDateValue > new Date(filterValue.to).getTime()\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n } else if (filterValue?.userName) {\r\n const normalizedItemUser = itemValue;\r\n if (!normalizedItemUser) return false;\r\n\r\n return (\r\n normalizedItemUser.id === filterValue?.id ||\r\n normalizedItemUser.userName === filterValue?.userName ||\r\n normalizedItemUser.displayName === filterValue?.displayName\r\n );\r\n }\r\n }\r\n\r\n // Boolean filter\r\n if (typeof filterValue === 'boolean') {\r\n return normalizedFilterValue === filterValue;\r\n }\r\n\r\n // Text filter\r\n if (\r\n typeof normalizedFilterValue === 'string' ||\r\n typeof normalizedFilterValue === 'number'\r\n ) {\r\n return String(normalizedFilterValue)\r\n .toLowerCase()\r\n .includes(String(filterValue).toLowerCase());\r\n }\r\n\r\n return normalizedFilterValue === filterValue;\r\n }\r\n\r\n toggleRow(row: any): void {\r\n const newSet = new Set(this.selectedRows());\r\n if (newSet.has(row)) newSet.delete(row);\r\n else newSet.add(row);\r\n this.selectedRows.set(newSet);\r\n this.selectionChange.emit(Array.from(this.selectedRows()));\r\n }\r\n\r\n toggleAllRowsOnPage(): void {\r\n const currentSelection = new Set(this.selectedRows());\r\n const pageData = this.paginatedData();\r\n const allSelected = this.allSelectedOnPage();\r\n if (allSelected) {\r\n pageData.forEach((row) => currentSelection.delete(row));\r\n } else {\r\n pageData.forEach((row) => currentSelection.add(row));\r\n }\r\n this.selectedRows.set(currentSelection);\r\n this.selectionChange.emit(Array.from(this.selectedRows()));\r\n }\r\n\r\n getProperty(obj: any, key: string): any {\r\n return TableValueResolver.getProperty(obj, key);\r\n }\r\n\r\n getEntityPreviewData(row: any, col: ColumnDef): EntityData | null {\r\n const cellValue = this.getProperty(row, col.key);\r\n\r\n if (col.type === 'user') {\r\n return this.buildUserEntityData(cellValue, col.label);\r\n }\r\n\r\n if (col.type === 'status') {\r\n return this.buildStatusEntityData(cellValue, col.label);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n tabChanged(tab: any): void {\r\n this.filterTerm.set('');\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n this.onTabChange.emit(tab);\r\n }\r\n\r\n onTablePage(event: TablePageEvent): void {\r\n if (this.lazy()) {\r\n this.handleLazyLoad(event);\r\n return;\r\n }\r\n\r\n this.updatePagingFromEvent(event);\r\n }\r\n\r\n handleLazyLoad(event: any): void {\r\n this.updatePagingFromEvent(event);\r\n this.emitLazyLoad(event);\r\n }\r\n\r\n onPaginatorPage(event: any): void {\r\n if (this.lazy()) {\r\n this.handleLazyLoad(event);\r\n return;\r\n }\r\n\r\n this.updatePagingFromEvent(event);\r\n }\r\n\r\n onSearchChange(searchTerm: string) {\n this.filterTerm.set(searchTerm);\n this.first.set(0);\n this.currentPage.set(0);\n if (this.lazy() && !this.lazyLocalSearch()) {\n this.filters.set({ ...this.filters(), generalSearch: searchTerm });\n this.emitLazyLoad({});\n }\n }\n\n toggleSort(column: ColumnDef): void {\n if (!this.isColumnSortable(column)) {\n return;\n }\n\n if (this.sortField() !== column.key) {\n this.sortField.set(column.key);\n this.sortDirection.set('asc');\n } else {\n this.sortDirection.set(this.sortDirection() === 'asc' ? 'desc' : 'asc');\n }\n }\n\n isColumnSortable(column: ColumnDef): boolean {\n return column.sortable === true && (!this.lazy() || this.lazyLocalSort());\n }\n\r\n getSortIcon(column: ColumnDef): MTIcon {\r\n if (this.sortField() !== column.key || !this.sortDirection()) {\r\n return 'arrow.chevron-selector-vertical';\r\n }\r\n\r\n return this.sortDirection() === 'asc'\r\n ? 'arrow.arrow-up'\r\n : 'arrow.arrow-down';\r\n }\r\n\r\n onCellChange(\r\n row: any,\r\n columnKey: string,\r\n newValue: any,\r\n type?: ColumnTypeForActionCell,\r\n ): void {\r\n this.setProperty(row, columnKey, newValue);\r\n\r\n this.cellChange.emit({\r\n row,\r\n column: columnKey,\r\n value: newValue,\r\n type: type!,\r\n });\r\n }\r\n\r\n resolveActionLoading(action: TableAction, row: any): boolean | undefined {\r\n if (typeof action.loading === 'function') {\r\n return action.loading(row);\r\n }\r\n return action.loading;\r\n }\r\n\r\n getVisibleRowActions(row: any): TableAction[] {\r\n return this.rowActions().filter((action) => !action.hidden?.(row));\r\n }\r\n\r\n onColumnReorder(event: any): void {\r\n this.columnReorder.emit(event);\r\n }\r\n\r\n onRowReorder(event: any): void {\r\n this.rowReorder.emit({\r\n ...event,\r\n value: event.value ?? this.data(),\r\n });\r\n }\r\n\r\n onRowClick(event: MouseEvent, row: any): void {\r\n if (!this.clickableRows() || this.loading()) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement | null;\r\n if (\r\n target?.closest(\r\n 'button, a, input, textarea, select, label, [role=\"button\"], [data-row-click-ignore=\"true\"]',\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n this.rowClick.emit(row);\r\n }\r\n\r\n protected updatePagingFromEvent(event: any): void {\r\n const first = event?.first ?? this.first();\r\n const rows = event?.rows ?? this.pageSize();\r\n\r\n this.first.set(first);\r\n this.pageSize.set(rows);\r\n\r\n const page =\r\n typeof event?.page === 'number'\r\n ? event.page\r\n : Math.floor((first ?? 0) / (rows || 1));\r\n\r\n this.currentPage.set(page);\r\n }\r\n\r\n protected emitLazyLoad(event: any): void {\n this.lazyLoad.emit({\n ...event,\n pageSize: this.pageSize(),\n currentPage: this.currentPage() + 1,\n first: this.first(),\n filters: this.filters(),\n });\n }\n\r\n exportCSV(): void {\r\n const table = this.tableRef();\r\n if (table && !this.loading()) {\r\n const exportColumns = this.exportColumns();\r\n const sourceColumns = this.columns().filter(\r\n (column) => column.type !== 'custom',\r\n );\r\n const originalColumns = table.columns;\r\n const originalValue = table.value;\r\n\r\n try {\r\n table.columns = exportColumns;\r\n table.value = this.buildExportRows(this.displayData(), sourceColumns);\r\n table.exportCSV();\r\n } finally {\r\n table.columns = originalColumns;\r\n table.value = originalValue;\r\n }\r\n }\r\n }\r\n\r\n rowAction(event: Event, action: TableAction, row: any): void {\r\n if (!action.confirmation) {\r\n action.action(row);\r\n } else if (action.confirmation?.confirmationType === 'delete') {\r\n this.confirmationService.confirmDelete({\r\n event: event,\r\n ...action.confirmation,\r\n accept: () => {\r\n action.action(row);\r\n },\r\n reject: () => {},\r\n });\r\n } else {\r\n this.confirmationService.confirm({\r\n event: event,\r\n ...action.confirmation,\r\n accept: () => {\r\n action.action(row);\r\n },\r\n reject: () => {},\r\n });\r\n }\r\n }\r\n\r\n private buildUserEntityData(\r\n value: unknown,\r\n columnLabel: string,\r\n ): EntityData | null {\r\n const userValue = value;\r\n if (!userValue) return null;\r\n\r\n return {\r\n name: columnLabel,\r\n viewType: 'User',\r\n value: userValue,\r\n configuration: {\r\n showDisplayName: true,\r\n showPhoneNumber: false,\r\n showEmail: false,\r\n },\r\n };\r\n }\r\n\r\n private buildStatusEntityData(\r\n value: unknown,\r\n columnLabel: string,\r\n ): EntityData | null {\r\n const statusValue = value;\r\n if (!statusValue) return null;\r\n\r\n return {\r\n name: columnLabel,\r\n viewType: 'Status',\r\n value: statusValue,\r\n };\r\n }\r\n\r\n /**\r\n * Gets the entity data for an 'entity' type column.\r\n * The row data is expected to already be in EntityData format.\r\n * Automatically hides entity name and configures User entities\r\n * to show only avatar + displayName.\r\n */\r\n getEntityColumnData(row: any, col: ColumnDef): EntityData | null {\n const cellValue = this.getProperty(row, col.key);\n if (!cellValue || typeof cellValue !== 'object') return null;\n\r\n const entityData = cellValue as EntityData;\r\n\r\n // For User entities: show avatar + displayName only\r\n if (entityData.viewType === 'User') {\r\n return {\r\n ...entityData,\r\n configuration: {\r\n ...entityData.configuration,\r\n hideName: true,\r\n showDisplayName: true,\r\n showPhoneNumber: false,\r\n showEmail: false,\r\n },\r\n };\r\n }\r\n\r\n // For all other entities: hide the name label\r\n return {\n ...entityData,\n configuration: {\n ...entityData.configuration,\n hideName: true,\n },\n };\n }\n\n protected getStatusEntityAccentColor(\n row: Record<string, unknown>,\n ): string | null {\n const cellValue = this.getProperty(row, 'status');\n if (!cellValue || typeof cellValue !== 'object') {\n return null;\n }\n\n const color =\n typeof (cellValue as { value?: { color?: unknown } }).value?.color ===\n 'string'\n ? (cellValue as { value: { color: string } }).value.color\n : null;\n\n return typeof color === 'string' && color.trim().length ? color.trim() : null;\n }\n\r\n protected getBooleanProperty(obj: any, key: string): boolean {\r\n const value = this.getProperty(obj, key);\r\n\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n return TableValueResolver.resolveBooleanValue(value) ?? false;\r\n }\r\n\r\n private setProperty(obj: any, key: string, value: any): void {\r\n const path = key.split('.');\r\n const lastKey = path.pop();\r\n\r\n if (!lastKey) {\r\n return;\r\n }\r\n\r\n const target = path.reduce((current, segment) => {\r\n if (!current?.[segment] || typeof current[segment] !== 'object') {\r\n current[segment] = {};\r\n }\r\n\r\n return current[segment];\r\n }, obj);\r\n\r\n if (target && typeof target === 'object') {\r\n target[lastKey] = value;\r\n }\r\n }\r\n\r\n private sortData(data: any[]): any[] {\r\n const field = this.sortField();\r\n const direction = this.sortDirection();\r\n\r\n if (!field || !direction) {\r\n return data;\r\n }\r\n\r\n const column = this.columns().find((item) => item.key === field);\r\n if (!column || !this.isColumnSortable(column)) {\r\n return data;\r\n }\r\n\r\n return [...data].sort((leftRow, rightRow) => {\r\n const leftValue = this.getSortValue(leftRow, column);\r\n const rightValue = this.getSortValue(rightRow, column);\r\n\r\n if (leftValue === rightValue) return 0;\r\n if (leftValue === null || leftValue === undefined || leftValue === '') {\r\n return 1;\r\n }\r\n if (\r\n rightValue === null ||\r\n rightValue === undefined ||\r\n rightValue === ''\r\n ) {\r\n return -1;\r\n }\r\n\r\n const comparison = leftValue < rightValue ? -1 : 1;\r\n return direction === 'asc' ? comparison : -comparison;\r\n });\r\n }\r\n\r\n private getSortValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | null {\r\n const cellValue = this.getProperty(row, column.key);\r\n const resolvedValue = this.getColumnResolvedValue(row, column);\r\n\r\n if (\r\n resolvedValue === null ||\r\n resolvedValue === undefined ||\r\n resolvedValue === ''\r\n ) {\r\n return null;\r\n }\r\n\r\n if (column.type === 'date') {\r\n const timestamp = new Date(String(cellValue)).getTime();\r\n return Number.isNaN(timestamp) ? null : timestamp;\r\n }\r\n\r\n if (typeof resolvedValue === 'number') {\r\n return resolvedValue;\r\n }\r\n\r\n if (typeof resolvedValue === 'boolean') {\r\n return resolvedValue ? 1 : 0;\r\n }\r\n\r\n if (cellValue instanceof Date) {\r\n return cellValue.getTime();\r\n }\r\n\r\n return TableValueResolver.normalizeTextSortValue(resolvedValue);\r\n }\r\n\r\n private getColumnResolvedValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | boolean | null {\r\n const cellValue = this.getProperty(row, column.key);\r\n\r\n if (cellValue === null || cellValue === undefined) {\r\n return null;\r\n }\r\n\r\n if (column.type === 'entity') {\r\n return TableValueResolver.getEntityValueByType(cellValue, 'sort');\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return this.getBooleanProperty(row, column.key);\r\n }\r\n\r\n if (typeof cellValue === 'number' || typeof cellValue === 'boolean') {\r\n return cellValue;\r\n }\r\n\r\n if (cellValue instanceof Date) {\r\n return cellValue.toISOString();\r\n }\r\n\r\n return TableValueResolver.resolveDisplayValue(cellValue);\r\n }\r\n\r\n private buildExportRows(\r\n rows: Record<string, unknown>[],\r\n columns: ColumnDef[],\r\n ): Record<string, string | number | boolean | null>[] {\r\n return rows.map((row) => {\r\n const exportRow: Record<string, string | number | boolean | null> = {};\r\n\r\n columns.forEach((column) => {\r\n exportRow[column.key] =\r\n column.type === 'entity'\r\n ? TableValueResolver.getEntityValueByType(\r\n this.getProperty(row, column.key),\r\n 'export',\r\n )\r\n : this.getColumnResolvedValue(row, column);\r\n });\r\n\r\n return exportRow;\r\n });\r\n }\r\n}\r\n","<div class=\"space-y-4 rounded-2xl\">\r\n <div>\r\n @if (\r\n captionStartContent() ||\r\n captionEndContent() ||\r\n generalSearch() ||\r\n showFilters() ||\r\n tabs()?.length > 0 ||\r\n actions()?.length > 0\r\n ) {\r\n <div class=\"p-datatable-header rounded-t-2xl\">\r\n <div\r\n class=\"flex relative\"\r\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\r\n >\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"captionStartContent()\"\r\n ></ng-container>\r\n @if (tabs()) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabs()\"\r\n [optionLabel]=\"tabsOptionLabel()\"\r\n [optionValue]=\"tabsOptionValue()\"\r\n (onChange)=\"tabChanged($event)\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n }\r\n @if (generalSearch()) {\r\n <mt-text-field\r\n [(ngModel)]=\"filterTerm\"\r\n (ngModelChange)=\"onSearchChange($event)\"\r\n icon=\"general.search-lg\"\r\n [placeholder]=\"'components.table.search' | transloco\"\r\n ></mt-text-field>\r\n }\r\n </div>\r\n <div class=\"flex items-center gap-2\">\r\n @if (showFilters()) {\r\n <mt-table-filter\r\n [columns]=\"columns()\"\r\n [data]=\"data()\"\r\n [ngModel]=\"filters()\"\r\n (filterApplied)=\"onFilterApplied($event)\"\r\n (filterReset)=\"onFilterReset()\"\r\n />\r\n }\r\n @if (exportable()) {\r\n <mt-button\r\n icon=\"file.file-x-03\"\r\n [tooltip]=\"'components.table.export' | transloco\"\r\n (click)=\"exportCSV()\"\r\n />\r\n }\r\n @if (actions()?.length > 0) {\r\n <div class=\"flex items-center space-x-2\">\r\n @for (action of actions(); track action.label) {\r\n <mt-button\r\n [icon]=\"action.icon\"\r\n [severity]=\"action.color\"\r\n [variant]=\"action.variant\"\r\n [size]=\"action.size\"\r\n (click)=\"action.action(row)\"\r\n [label]=\"action.label\"\r\n [tooltip]=\"action.tooltip\"\r\n ></mt-button>\r\n }\r\n </div>\r\n }\r\n <ng-container\r\n *ngTemplateOutlet=\"captionEndContent()\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @if (!loading() && emptyContent() && data().length === 0) {\r\n <div\r\n class=\"p-4 bg-content rounded-md text-center text-gray-600 dark:text-gray-300\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"emptyContent()\"></ng-container>\r\n </div>\r\n } @else {\r\n <div class=\"overflow-x-auto bg-content\">\r\n <p-table\r\n #dt\r\n [value]=\"displayData()\"\r\n [columns]=\"columns()\"\r\n [size]=\"size()\"\r\n [showGridlines]=\"showGridlines()\"\r\n [stripedRows]=\"stripedRows()\"\r\n [lazy]=\"lazy()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [reorderableColumns]=\"reorderableColumns()\"\r\n [reorderableRows]=\"reorderableRows()\"\r\n [dataKey]=\"dataKey()\"\r\n [first]=\"first()\"\r\n [rows]=\"pageSize()\"\r\n [exportFilename]=\"exportFilename()\"\r\n (onPage)=\"onTablePage($event)\"\r\n (onLazyLoad)=\"handleLazyLoad($event)\"\r\n (onColReorder)=\"onColumnReorder($event)\"\r\n (onRowReorder)=\"onRowReorder($event)\"\r\n paginator\r\n paginatorStyleClass=\"hidden!\"\r\n class=\"min-w-full text-sm align-middle table-fixed\"\r\n >\r\n <ng-template\r\n #header\r\n let-columns\r\n class=\"bg-surface-50 dark:bg-surface-950 border-b border-surface-300 dark:border-surface-500\"\r\n >\r\n <tr>\r\n @if (reorderableRows()) {\r\n <th class=\"w-10\"></th>\r\n }\r\n @if (selectableRows()) {\r\n <th class=\"w-12 text-start\">\r\n <mt-checkbox-field\r\n [ngModel]=\"allSelectedOnPage()\"\r\n (ngModelChange)=\"toggleAllRowsOnPage()\"\r\n ></mt-checkbox-field>\r\n </th>\r\n }\r\n\r\n @for (col of columns; track col.key || col.label || $index) {\r\n @if (reorderableColumns()) {\r\n <th\r\n pReorderableColumn\r\n class=\"text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\r\n >\r\n <div class=\"flex items-center gap-2\">\r\n {{ col.label }}\r\n <!-- <mt-icon-->\r\n <!-- icon=\"general.menu-05\"-->\r\n <!-- class=\"text-xs text-gray-400\"-->\r\n <!-- ></mt-icon>-->\r\n <mt-button\r\n styleClass=\"cursor-move!\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n icon=\"general.menu-05\"\r\n ></mt-button>\r\n </div>\r\n </th>\r\n } @else {\r\n <th\r\n class=\"text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\r\n [style.width]=\"col.width ?? null\"\r\n [style.minWidth]=\"col.width ?? null\"\r\n >\r\n @if (isColumnSortable(col)) {\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex items-center gap-2 cursor-pointer\"\r\n (click)=\"toggleSort(col)\"\r\n >\r\n <span>{{ col.label }}</span>\r\n <mt-icon\r\n [icon]=\"getSortIcon(col)\"\r\n class=\"text-xs text-gray-400\"\r\n />\r\n </button>\r\n } @else {\r\n {{ col.label }}\r\n }\r\n </th>\r\n }\r\n }\r\n\r\n @if (rowActions().length > 0) {\r\n <th\r\n class=\"text-end! font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\r\n >\r\n {{ \"components.table.actions\" | transloco }}\r\n </th>\r\n }\r\n </tr>\r\n @if (updating()) {\r\n <tr>\r\n <th\r\n [attr.colspan]=\"\r\n columns.length +\r\n (reorderableRows() ? 1 : 0) +\r\n (selectableRows() ? 1 : 0) +\r\n (rowActions().length > 0 ? 1 : 0)\r\n \"\r\n class=\"!p-0\"\r\n >\r\n <p-progressBar\r\n mode=\"indeterminate\"\r\n [style]=\"{ height: '4px' }\"\r\n />\r\n </th>\r\n </tr>\r\n }\r\n </ng-template>\r\n <ng-template\r\n #body\r\n let-row\r\n let-columns=\"columns\"\r\n let-index=\"rowIndex\"\r\n class=\"divide-y divide-gray-200\"\r\n >\r\n @if (loading()) {\r\n <tr>\r\n @if (reorderableRows()) {\r\n <td><p-skeleton /></td>\r\n }\r\n @if (selectableRows()) {\r\n <td><p-skeleton /></td>\r\n }\r\n @for (col of columns; track col.key || col.label || $index) {\r\n <td><p-skeleton /></td>\r\n }\r\n @if (rowActions().length > 0) {\r\n <td><p-skeleton /></td>\r\n }\r\n </tr>\r\n } @else {\n <tr\n class=\"border-surface-300 transition-colors duration-150 dark:border-surface-500\"\n [class.mt-table-clickable-row]=\"clickableRows()\"\n [class.mt-table-status-entity-row]=\"\n getStatusEntityAccentColor(row)\n \"\n [style.--mt-table-status-accent]=\"\n getStatusEntityAccentColor(row)\n \"\n [class.cursor-pointer]=\"clickableRows()\"\n [pReorderableRow]=\"index\"\n (click)=\"onRowClick($event, row)\"\n >\n @if (reorderableRows()) {\r\n <td class=\"w-10 text-center\">\r\n <mt-button\r\n styleClass=\"cursor-move!\"\r\n pReorderableRowHandle\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n icon=\"general.menu-05\"\r\n ></mt-button>\r\n <!-- <mt-icon-->\r\n <!-- icon=\"general.menu-05\"-->\r\n <!-- class=\"cursor-move text-gray-500\"-->\r\n <!-- pReorderableRowHandle-->\r\n <!-- ></mt-icon>-->\r\n </td>\r\n }\r\n @if (selectableRows()) {\r\n <td class=\"w-12\">\r\n <mt-checkbox-field\r\n [ngModel]=\"selectedRows().has(row)\"\r\n (ngModelChange)=\"toggleRow(row)\"\r\n ></mt-checkbox-field>\r\n </td>\r\n }\r\n\r\n @for (col of columns; track col.key || col.label || $index) {\n <td\n class=\"text-gray-700 dark:text-gray-100\"\n [style.width]=\"col.width ?? null\"\n [style.minWidth]=\"col.width ?? null\"\n >\n @switch (col.type) {\r\n @case (\"boolean\") {\r\n <mt-toggle-field\r\n [ngModel]=\"getBooleanProperty(row, col.key)\"\r\n (ngModelChange)=\"\r\n onCellChange(row, col.key, $event, 'boolean')\r\n \"\r\n [readonly]=\"col.readonly ?? false\"\r\n ></mt-toggle-field>\r\n }\r\n @case (\"date\") {\r\n <!-- {{ getProperty(row, col.key) | date: \"mediumDate\" }} -->\r\n }\r\n @case (\"user\") {\r\n @if (getEntityPreviewData(row, col); as entityData) {\r\n <mt-entity-preview\r\n [data]=\"entityData\"\r\n attachmentShape=\"compact\"\r\n ></mt-entity-preview>\r\n } @else {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n @case (\"status\") {\r\n @if (getEntityPreviewData(row, col); as entityData) {\r\n <mt-entity-preview\r\n [data]=\"entityData\"\r\n attachmentShape=\"compact\"\r\n ></mt-entity-preview>\r\n } @else {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n @case (\"entity\") {\r\n @if (getEntityColumnData(row, col); as entityData) {\r\n <mt-entity-preview\r\n [data]=\"entityData\"\r\n attachmentShape=\"compact\"\r\n ></mt-entity-preview>\r\n } @else {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n @case (\"custom\") {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n col.customCellTpl;\r\n context: { $implicit: row }\r\n \"\r\n >\r\n </ng-container>\r\n }\r\n @default {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n </td>\r\n }\r\n\r\n @if (rowActions().length > 0) {\r\n <td class=\"text-right\">\r\n @if (actionShape() === \"popover\") {\r\n <div class=\"flex items-center justify-end\">\r\n <mt-button\r\n icon=\"general.dots-vertical\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n size=\"large\"\r\n (click)=\"rowPopover.toggle($event)\"\r\n data-row-click-ignore=\"true\"\r\n ></mt-button>\r\n <p-popover #rowPopover appendTo=\"body\">\r\n <div class=\"flex flex-col min-w-40\">\r\n @for (\r\n action of getVisibleRowActions(row);\r\n track $index\r\n ) {\r\n <button\r\n class=\"flex items-center gap-2 px-2 cursor-pointer py-2 text-sm rounded transition-colors\"\r\n [class]=\"\r\n action.color === 'danger'\r\n ? 'text-red-600 hover:bg-red-50 dark:hover:bg-red-950'\r\n : 'text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-surface-700'\r\n \"\r\n (click)=\"\r\n rowAction($event, action, row);\r\n rowPopover.hide()\r\n \"\r\n >\r\n @if (action.icon) {\r\n <mt-icon\r\n [icon]=\"action.icon\"\r\n class=\"text-base\"\r\n />\r\n }\r\n <span>{{\r\n action.label || action.tooltip\r\n }}</span>\r\n </button>\r\n }\r\n </div>\r\n </p-popover>\r\n </div>\r\n } @else {\r\n <div class=\"flex items-center justify-end space-x-2\">\r\n @for (action of rowActions(); track $index) {\r\n @let hidden = action.hidden?.(row);\r\n @if (!hidden) {\r\n <mt-button\r\n [icon]=\"action.icon\"\r\n [severity]=\"action.color\"\r\n [variant]=\"action.variant\"\r\n [size]=\"action.size || 'small'\"\r\n (click)=\"rowAction($event, action, row)\"\r\n [tooltip]=\"action.tooltip\"\r\n [label]=\"action.label\"\r\n [loading]=\"resolveActionLoading(action, row)\"\r\n ></mt-button>\r\n }\r\n }\r\n </div>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </ng-template>\r\n <ng-template #emptymessage>\r\n <tr>\r\n <td colspan=\"20\" class=\"text-center\">\r\n <div class=\"flex justify-center\">No data found.</div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-col gap-3 pb-3 px-4\"\r\n [class]=\"'items-' + paginatorPosition()\"\r\n >\r\n <mt-paginator\r\n [(rows)]=\"pageSize\"\r\n [(first)]=\"first\"\r\n [(page)]=\"currentPage\"\r\n [totalRecords]=\"totalRecords()\"\r\n [alwaysShow]=\"false\"\r\n [rowsPerPageOptions]=\"[5, 10, 20, 50]\"\r\n (onPageChange)=\"onPaginatorPage($event)\"\r\n ></mt-paginator>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"masterteam-components-table.mjs","sources":["../../../../packages/masterteam/components/table/table-value.utils.ts","../../../../packages/masterteam/components/table/table-filter/table-filter.ts","../../../../packages/masterteam/components/table/table-filter/table-filter.html","../../../../packages/masterteam/components/table/table.ts","../../../../packages/masterteam/components/table/table.html","../../../../packages/masterteam/components/table/masterteam-components-table.ts"],"sourcesContent":["import { EntityData, EntityViewType } from '@masterteam/components/entities';\r\nimport { ColumnDef, FilterConfig } from './table-types';\r\n\r\nexport type TableEntityUsage = 'sort' | 'export' | 'filter';\r\n\r\nexport class TableValueResolver {\r\n private static readonly ALL_ENTITY_VIEW_TYPES: EntityViewType[] = [\r\n 'Text',\r\n 'LongText',\r\n 'Date',\r\n 'DateTime',\r\n 'Percentage',\r\n 'Status',\r\n 'Currency',\r\n 'Checkbox',\r\n 'User',\r\n 'Lookup',\r\n 'Attachment',\r\n ];\r\n\r\n private static readonly UNSORTABLE_ENTITY_VIEW_TYPES =\r\n new Set<EntityViewType>(['Attachment', 'Checkbox']);\r\n\r\n private static readonly EXPORTABLE_ENTITY_VIEW_TYPES =\r\n new Set<EntityViewType>([\r\n 'Text',\r\n 'LongText',\r\n 'Date',\r\n 'DateTime',\r\n 'Percentage',\r\n 'Status',\r\n 'Currency',\r\n 'Checkbox',\r\n 'User',\r\n 'Lookup',\r\n ]);\r\n\r\n private static readonly FILTERABLE_ENTITY_VIEW_TYPES =\r\n new Set<EntityViewType>(\r\n TableValueResolver.ALL_ENTITY_VIEW_TYPES.filter(\r\n (viewType) => viewType !== 'Attachment',\r\n ),\r\n );\r\n\r\n static getProperty(obj: unknown, key: string): unknown {\r\n return key.split('.').reduce<unknown>((current, segment) => {\r\n if (!current || typeof current !== 'object') {\r\n return undefined;\r\n }\r\n\r\n return (current as Record<string, unknown>)[segment];\r\n }, obj);\r\n }\r\n\r\n static getColumnFilterType(\r\n column: ColumnDef,\r\n row?: Record<string, unknown>,\r\n ): FilterConfig['type'] | null {\r\n if (column.filterConfig?.type) {\r\n return column.filterConfig.type;\r\n }\r\n\r\n if (column.type === 'date') {\r\n return 'date';\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return 'boolean';\r\n }\r\n\r\n if (column.type === 'user') {\r\n return 'user';\r\n }\r\n\r\n if (column.type !== 'entity') {\r\n return null;\r\n }\r\n\r\n const viewType = TableValueResolver.getEntityViewType(column, row);\r\n if (\r\n !viewType ||\r\n !TableValueResolver.FILTERABLE_ENTITY_VIEW_TYPES.has(viewType)\r\n ) {\r\n return null;\r\n }\r\n\r\n switch (viewType) {\r\n case 'Date':\r\n case 'DateTime':\r\n return 'date';\r\n case 'Checkbox':\r\n return 'boolean';\r\n case 'Status':\r\n case 'Lookup':\r\n case 'User':\r\n return 'select';\r\n case 'Text':\r\n case 'LongText':\r\n case 'Currency':\r\n case 'Percentage':\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n static getColumnFilterValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | boolean | null {\r\n const cellValue = TableValueResolver.getProperty(row, column.key);\r\n\r\n if (cellValue === null || cellValue === undefined) {\r\n return null;\r\n }\r\n\r\n if (column.type === 'entity') {\r\n const filterType = TableValueResolver.getColumnFilterType(column, row);\r\n\r\n if (filterType === 'date') {\r\n return TableValueResolver.getEntityValueByType(cellValue, 'sort');\r\n }\r\n\r\n return TableValueResolver.getEntityValueByType(cellValue, 'filter');\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return TableValueResolver.resolveBooleanValue(cellValue);\r\n }\r\n\r\n return TableValueResolver.resolveDisplayValue(cellValue);\r\n }\r\n\r\n static getEntityValueByType(\r\n value: unknown,\r\n usage: TableEntityUsage,\r\n ): string | number | boolean | null {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n if (typeof value !== 'object') {\r\n return TableValueResolver.resolveDisplayValue(value);\r\n }\r\n\r\n const entityData = value as EntityData;\r\n\r\n if (\r\n usage === 'sort' &&\r\n TableValueResolver.UNSORTABLE_ENTITY_VIEW_TYPES.has(entityData.viewType)\r\n ) {\r\n return null;\r\n }\r\n\r\n if (\r\n usage === 'export' &&\r\n !TableValueResolver.EXPORTABLE_ENTITY_VIEW_TYPES.has(entityData.viewType)\r\n ) {\r\n return TableValueResolver.resolveDisplayValue(entityData.value);\r\n }\r\n\r\n switch (entityData.viewType) {\r\n case 'Currency':\r\n case 'Percentage':\r\n return usage === 'sort'\r\n ? TableValueResolver.normalizeNumericSortValue(\r\n entityData.rawValue ?? entityData.value,\r\n )\r\n : TableValueResolver.resolveDisplayValue(entityData.value);\r\n case 'Date':\r\n case 'DateTime':\r\n return usage === 'sort'\r\n ? TableValueResolver.normalizeDateSortValue(\r\n entityData.rawValue ?? entityData.value,\r\n )\r\n : TableValueResolver.resolveDisplayValue(entityData.value);\r\n case 'Checkbox':\r\n return TableValueResolver.resolveBooleanValue(\r\n entityData.rawValue ?? entityData.value,\r\n );\r\n case 'Status':\r\n case 'Lookup':\r\n case 'User':\r\n case 'Text':\r\n case 'LongText':\r\n default:\r\n return TableValueResolver.resolveDisplayValue(entityData.value);\r\n }\r\n }\r\n\r\n static resolveDisplayValue(value: unknown): string | number | boolean | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n if (\r\n typeof value === 'string' ||\r\n typeof value === 'number' ||\r\n typeof value === 'boolean'\r\n ) {\r\n return value;\r\n }\r\n\r\n if (value instanceof Date) {\r\n return value.toISOString();\r\n }\r\n\r\n if (typeof value === 'object') {\r\n const objectValue = value as Record<string, unknown>;\r\n const displayCandidate =\r\n objectValue['display'] ??\r\n objectValue['displayName'] ??\r\n objectValue['name'] ??\r\n objectValue['label'] ??\r\n objectValue['value'];\r\n\r\n return TableValueResolver.resolveDisplayValue(displayCandidate);\r\n }\r\n\r\n return String(value);\r\n }\r\n\r\n static resolveBooleanValue(value: unknown): boolean | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return ['true', '1', 'yes', 'on'].includes(value.toLowerCase());\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return value === 1;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n static normalizeTextSortValue(value: unknown): string | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n return String(value).toLocaleLowerCase();\r\n }\r\n\r\n static normalizeNumericSortValue(value: unknown): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const numericValue =\r\n typeof value === 'number'\r\n ? value\r\n : Number.parseFloat(String(value).replace(/[^0-9.-]/g, ''));\r\n\r\n return Number.isNaN(numericValue) ? null : numericValue;\r\n }\r\n\r\n static normalizeDateSortValue(value: unknown): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const timestamp =\r\n value instanceof Date\r\n ? value.getTime()\r\n : new Date(String(value)).getTime();\r\n\r\n return Number.isNaN(timestamp) ? null : timestamp;\r\n }\r\n\r\n private static getEntityViewType(\r\n column: ColumnDef,\r\n row?: Record<string, unknown>,\r\n ): EntityViewType | null {\r\n const explicitViewType = (column as { viewType?: unknown }).viewType;\r\n if (TableValueResolver.isEntityViewType(explicitViewType)) {\r\n return explicitViewType;\r\n }\r\n\r\n const cellValue = row\r\n ? TableValueResolver.getProperty(row, column.key)\r\n : undefined;\r\n if (\r\n cellValue &&\r\n typeof cellValue === 'object' &&\r\n 'viewType' in (cellValue as Record<string, unknown>)\r\n ) {\r\n const viewType = (cellValue as EntityData).viewType;\r\n if (TableValueResolver.isEntityViewType(viewType)) {\r\n return viewType;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static isEntityViewType(value: unknown): value is EntityViewType {\r\n return (\r\n typeof value === 'string' &&\r\n TableValueResolver.ALL_ENTITY_VIEW_TYPES.includes(value as EntityViewType)\r\n );\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n forwardRef,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DateField } from '@masterteam/components/date-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { UserSearchField } from '@masterteam/components/user-search-field';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { PopoverModule } from 'primeng/popover';\r\nimport {\r\n ColumnDef,\r\n FilterOption,\r\n FilterValue,\r\n TableFilters,\r\n} from '../table-types';\r\nimport { TableValueResolver } from '../table-value.utils';\r\n\r\n@Component({\r\n selector: 'mt-table-filter',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n TextField,\r\n SelectField,\r\n DateField,\r\n UserSearchField,\r\n Button,\r\n PopoverModule,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './table-filter.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TableFilter),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class TableFilter implements ControlValueAccessor {\r\n readonly columns = input.required<ColumnDef[]>();\r\n readonly data = input<any[]>([]);\r\n\r\n readonly filterApplied = output<TableFilters>();\r\n readonly filterReset = output<void>();\r\n\r\n protected pendingFilters = signal<TableFilters>({});\r\n protected appliedFilters = signal<TableFilters>({});\r\n\r\n protected booleanOptions = [\r\n { label: 'Yes', value: true },\r\n { label: 'No', value: false },\r\n ];\r\n\r\n private onChange: (value: TableFilters) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n protected filterableColumns = computed(() =>\r\n this.columns()\r\n .filter(\r\n (col) =>\r\n TableValueResolver.getColumnFilterType(col, this.data()[0]) !== null,\r\n )\r\n .map((col) => {\r\n const filterType = TableValueResolver.getColumnFilterType(\r\n col,\r\n this.data()[0],\r\n );\r\n\r\n // Auto-generate select options from data if not provided\r\n if (filterType === 'select' && !col.filterConfig?.options?.length) {\r\n const uniqueOptions = Array.from(\r\n this.data().reduce<Map<string, FilterOption>>((options, row) => {\r\n const value = TableValueResolver.getColumnFilterValue(row, col);\r\n\r\n if (value === null || value === undefined || value === '') {\r\n return options;\r\n }\r\n\r\n const optionKey = `${typeof value}:${String(value)}`;\r\n if (!options.has(optionKey)) {\r\n options.set(optionKey, {\r\n label: String(value),\r\n value,\r\n });\r\n }\r\n\r\n return options;\r\n }, new Map()),\r\n )\r\n .map(([, option]) => option)\r\n .sort((a, b) => a.label.localeCompare(b.label));\r\n\r\n return {\r\n ...col,\r\n filterConfig: {\r\n ...col.filterConfig,\r\n type: filterType,\r\n options: uniqueOptions,\r\n },\r\n };\r\n }\r\n\r\n return {\r\n ...col,\r\n filterConfig: {\r\n ...col.filterConfig,\r\n type: filterType ?? col.filterConfig?.type ?? 'text',\r\n },\r\n };\r\n }),\r\n );\r\n\r\n protected activeFilterCount = computed(() => {\r\n const filters = this.appliedFilters();\r\n return Object.values(filters).filter((v) => this.hasValue(v)).length;\r\n });\r\n\r\n protected getFilterType(col: ColumnDef): string {\r\n return (\r\n TableValueResolver.getColumnFilterType(col, this.data()[0]) ?? 'text'\r\n );\r\n }\r\n\r\n protected getFilterValue(key: string): any {\r\n const value = this.pendingFilters()[key];\r\n return value?.value ?? value ?? null;\r\n }\r\n\r\n protected getDateRangeValue(key: string, part: 'from' | 'to'): Date | null {\r\n const value = this.pendingFilters()[key] as FilterValue | undefined;\r\n if (!value || typeof value !== 'object') return null;\r\n return part === 'from' ? (value.from ?? null) : (value.to ?? null);\r\n }\r\n\r\n protected updateFilter(key: string, value: any): void {\r\n this.pendingFilters.update((filters) => ({\r\n ...filters,\r\n [key]: value,\r\n }));\r\n this.onTouched();\r\n }\r\n\r\n protected updateDateFilter(\r\n key: string,\r\n part: 'from' | 'to',\r\n value: Date | null,\r\n ): void {\r\n this.pendingFilters.update((filters) => {\r\n const current = (filters[key] as FilterValue) ?? {};\r\n return {\r\n ...filters,\r\n [key]: {\r\n ...current,\r\n [part]: value,\r\n },\r\n };\r\n });\r\n this.onTouched();\r\n }\r\n\r\n protected apply(): void {\r\n const filters = { ...this.pendingFilters() };\r\n this.appliedFilters.set(filters);\r\n this.onChange(filters);\r\n this.filterApplied.emit(filters);\r\n }\r\n\r\n protected reset(): void {\r\n this.pendingFilters.set({});\r\n this.appliedFilters.set({});\r\n this.onChange({});\r\n this.filterReset.emit();\r\n }\r\n\r\n private hasValue(value: any): boolean {\r\n if (value === null || value === undefined || value === '') return false;\r\n if (typeof value === 'object') {\r\n return value.from != null || value.to != null || value.value != null;\r\n }\r\n return true;\r\n }\r\n\r\n // ControlValueAccessor\r\n writeValue(value: TableFilters | null): void {\r\n const filters = value ?? {};\r\n this.pendingFilters.set(filters);\r\n this.appliedFilters.set(filters);\r\n }\r\n\r\n registerOnChange(fn: (value: TableFilters) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n}\r\n","<mt-button\r\n (click)=\"popover.toggle($event)\"\r\n [label]=\"'components.table.filter' | transloco\"\r\n [badge]=\"activeFilterCount()\"\r\n severity=\"primary\"\r\n icon=\"general.filter-funnel-01\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: '320px' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col max-h-[50vh]\">\r\n <h4\r\n class=\"text-lg py-2 font-semibold border-b border-surface-200 dark:border-surface-700 shrink-0\"\r\n >\r\n {{ \"components.table.filterOptions\" | transloco }}\r\n </h4>\r\n\r\n <div\r\n class=\"space-y-3 overflow-y-auto flex-1 py-3\"\r\n (keydown.enter)=\"apply(); popover.hide()\"\r\n >\r\n @for (col of filterableColumns(); track col.key) {\r\n <div class=\"space-y-1\">\r\n <label\r\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\r\n >\r\n {{ col.filterConfig?.label || col.label }}\r\n </label>\r\n\r\n @switch (getFilterType(col)) {\r\n @case (\"text\") {\r\n <mt-text-field\r\n [ngModel]=\"getFilterValue(col.key)\"\r\n (ngModelChange)=\"updateFilter(col.key, $event)\"\r\n [placeholder]=\"\r\n ('components.table.select' | transloco) +\r\n ' ' +\r\n (col.filterConfig?.label || col.label)\r\n \"\r\n />\r\n }\r\n @case (\"select\") {\r\n <mt-select-field\r\n [ngModel]=\"getFilterValue(col.key)\"\r\n (ngModelChange)=\"updateFilter(col.key, $event)\"\r\n [options]=\"col.filterConfig?.options ?? []\"\r\n [placeholder]=\"\r\n ('components.table.select' | transloco) +\r\n ' ' +\r\n (col.filterConfig?.label || col.label)\r\n \"\r\n [hasPlaceholderPrefix]=\"false\"\r\n showClear\r\n />\r\n }\r\n @case (\"date\") {\r\n <div class=\"space-y-3\">\r\n <div class=\"space-y-1\">\r\n <label\r\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\r\n >\r\n {{ \"components.table.from\" | transloco }}\r\n </label>\r\n <mt-date-field\r\n [ngModel]=\"getDateRangeValue(col.key, 'from')\"\r\n (ngModelChange)=\"updateDateFilter(col.key, 'from', $event)\"\r\n [placeholder]=\"'components.table.from' | transloco\"\r\n />\r\n </div>\r\n <div class=\"space-y-1\">\r\n <label\r\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\r\n >\r\n {{ \"components.table.to\" | transloco }}\r\n </label>\r\n <mt-date-field\r\n [ngModel]=\"getDateRangeValue(col.key, 'to')\"\r\n (ngModelChange)=\"updateDateFilter(col.key, 'to', $event)\"\r\n [placeholder]=\"'components.table.to' | transloco\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n @case (\"boolean\") {\r\n <mt-select-field\r\n [ngModel]=\"getFilterValue(col.key)\"\r\n (ngModelChange)=\"updateFilter(col.key, $event)\"\r\n [options]=\"booleanOptions\"\r\n [placeholder]=\"'components.table.select' | transloco\"\r\n [hasPlaceholderPrefix]=\"false\"\r\n showClear\r\n />\r\n }\r\n @case (\"user\") {\r\n <mt-user-search-field\r\n [ngModel]=\"getFilterValue(col.key)\"\r\n (ngModelChange)=\"updateFilter(col.key, $event)\"\r\n [placeholder]=\"col.filterConfig?.label || col.label\"\r\n [apiUrl]=\"col.filterConfig?.apiUrl ?? ''\"\r\n [context]=\"col.filterConfig?.context\"\r\n />\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex justify-end gap-2 pt-4 border-t border-surface-200 dark:border-surface-700 shrink-0\"\r\n >\r\n <mt-button\r\n variant=\"outlined\"\r\n (click)=\"reset(); popover.hide()\"\r\n [label]=\"'components.table.reset' | transloco\"\r\n />\r\n <mt-button\r\n (click)=\"apply(); popover.hide()\"\r\n [label]=\"'components.table.apply' | transloco\"\r\n />\r\n </div>\r\n </div>\r\n</p-popover>\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet, DatePipe } from '@angular/common';\r\nimport {\r\n ColumnDef,\r\n TableAction,\r\n TableActionShape,\r\n CellChangeEvent,\r\n ColumnTypeForActionCell,\r\n TableFilters,\r\n FilterValue,\r\n} from './table-types';\r\nimport { TableFilter } from './table-filter/table-filter';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { Paginator } from '@masterteam/components/paginator';\r\nimport { CheckboxField } from '@masterteam/components/checkbox-field';\r\nimport {\r\n TableModule,\r\n TablePageEvent,\r\n Table as PrimeTable,\r\n} from 'primeng/table';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { EntityData, EntityPreview } from '@masterteam/components/entities';\r\nimport { PopoverModule } from 'primeng/popover';\r\nimport { Icon, MTIcon } from '@masterteam/icons';\r\nimport { TableValueResolver } from './table-value.utils';\r\n\r\n@Component({\r\n selector: 'mt-table',\r\n templateUrl: './table.html',\r\n styleUrls: ['./table.css'],\r\n standalone: true,\r\n imports: [\r\n TableModule,\r\n NgTemplateOutlet,\r\n DatePipe,\r\n ToggleField,\r\n FormsModule,\r\n Button,\r\n TextField,\r\n Paginator,\r\n CheckboxField,\r\n Tabs,\r\n SkeletonModule,\r\n ProgressBarModule,\r\n TranslocoModule,\r\n TableFilter,\r\n EntityPreview,\r\n PopoverModule,\r\n Icon,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Table {\r\n selectionChange = output<any[]>();\r\n cellChange = output<CellChangeEvent>();\r\n lazyLoad = output<any>();\r\n columnReorder = output<any>();\r\n rowReorder = output<any>();\r\n rowClick = output<any>();\r\n\r\n filters = model<TableFilters>({});\r\n\r\n data = input.required<any[]>();\r\n columns = input.required<ColumnDef[]>();\r\n rowActions = input<TableAction[]>([]);\r\n size = input<'small' | 'large' | undefined>(undefined);\r\n showGridlines = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n stripedRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n selectableRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n clickableRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n generalSearch = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazyLocalSearch = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n showFilters = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n loading = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n updating = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazy = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazyLocalSort = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazyTotalRecords = input<number>();\r\n reorderableColumns = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n reorderableRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n dataKey = input<string>();\r\n exportable = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n exportFilename = input<string>('download');\r\n actionShape = input<TableActionShape>('flat');\r\n\r\n // Tabs inputs and outputs\r\n tabs = input<any[]>();\r\n tabsOptionLabel = input<string>();\r\n tabsOptionValue = input<string>();\r\n activeTab = model<any>();\r\n onTabChange = output<any>();\r\n\r\n // Table actions inputs and outputs\r\n actions = input<TableAction[]>([]);\r\n\r\n // Content TemplateRefs\r\n captionStartContent = contentChild<TemplateRef<any>>('captionStart');\r\n captionEndContent = contentChild<TemplateRef<any>>('captionEnd');\r\n emptyContent = contentChild<TemplateRef<any>>('empty');\r\n\r\n // Table reference for export\r\n protected tableRef = viewChild<PrimeTable>('dt');\r\n\r\n paginatorPosition = input<'end' | 'start' | 'center'>('end');\r\n pageSize = model<number>(10);\r\n currentPage = model<number>(0);\r\n first = model<number>(0);\r\n filterTerm = model<string>('');\r\n sortField = signal<string | null>(null);\r\n sortDirection = signal<'asc' | 'desc' | null>(null);\r\n confirmationService = inject(ConfirmationService);\r\n\r\n protected selectedRows = signal<Set<any>>(new Set());\r\n\r\n // Map columns for PrimeNG export (key -> field)\r\n protected exportColumns = computed(() =>\r\n this.columns()\r\n .filter((col) => col.type !== 'custom')\r\n .map((col) => ({ ...col, field: col.key, header: col.label })),\r\n );\r\n\r\n protected activeFilterCount = computed(() => {\r\n const filters = this.filters();\r\n return Object.values(filters).filter(\r\n (value) => value !== null && value !== undefined && value !== '',\r\n ).length;\r\n });\r\n\r\n protected filteredData = computed(() => {\r\n const data = this.data();\r\n const applyLocalSearch = !this.lazy() || this.lazyLocalSearch();\r\n const applyLocalSort = !this.lazy() || this.lazyLocalSort();\r\n const searchTerm = applyLocalSearch ? this.filterTerm().toLowerCase() : '';\r\n const filters = this.filters();\r\n const filterKeys = this.lazy() ? [] : Object.keys(filters);\r\n let result = data;\r\n\r\n // Apply search term\r\n if (searchTerm !== '') {\r\n result = result.filter((item) =>\r\n Object.values(item).some(\r\n (value) =>\r\n typeof value === 'string' &&\r\n value.toLowerCase().includes(searchTerm),\r\n ),\r\n );\r\n }\r\n\r\n // Apply column filters\r\n if (filterKeys.length > 0) {\r\n result = result.filter((item) =>\r\n filterKeys.every((key) => this.matchesFilter(item, key, filters[key])),\r\n );\r\n }\r\n\r\n return applyLocalSort ? this.sortData(result) : result;\r\n });\r\n\r\n protected displayData = computed(() => {\r\n if (this.loading()) {\r\n return Array.from({ length: this.pageSize() }, () => ({}));\r\n }\r\n return this.filteredData();\r\n });\r\n\r\n protected totalRecords = computed(() => {\r\n if (this.lazy() && this.lazyTotalRecords() !== undefined) {\r\n return this.lazyTotalRecords() as number;\r\n }\r\n\r\n return this.filteredData().length;\r\n });\r\n\r\n // TODO: remove after updating the toggle and checkbox logic\r\n protected paginatedData = computed(() => {\r\n const data = this.filteredData();\r\n const first = this.first();\r\n const pageSize = this.pageSize();\r\n if (this.lazy()) {\r\n return data;\r\n }\r\n return data.slice(first, first + pageSize);\r\n });\r\n\r\n protected allSelectedOnPage = computed(() => {\r\n const pageData = this.paginatedData();\r\n if (pageData.length === 0) return false;\r\n return pageData.every((row) => this.selectedRows().has(row));\r\n });\r\n\r\n onFilterApplied(filters: TableFilters): void {\r\n this.filters.set(filters);\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n\r\n if (this.lazy()) {\r\n this.emitLazyLoad({});\r\n }\r\n }\r\n\r\n onFilterReset(): void {\r\n this.filters.set({});\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n\r\n if (this.lazy()) {\r\n this.emitLazyLoad({});\r\n }\r\n }\r\n\r\n protected matchesFilter(\r\n item: any,\r\n key: string,\r\n filterValue: FilterValue | any,\r\n ): boolean {\r\n if (\r\n filterValue === null ||\r\n filterValue === undefined ||\r\n filterValue === ''\r\n ) {\r\n return true;\r\n }\r\n\r\n const column = this.columns().find((col) => col.key === key);\r\n const itemValue = this.getProperty(item, key);\r\n const normalizedFilterValue = column\r\n ? TableValueResolver.getColumnFilterValue(item, column)\r\n : TableValueResolver.resolveDisplayValue(itemValue);\r\n const filterType = column\r\n ? TableValueResolver.getColumnFilterType(column, item)\r\n : null;\r\n\r\n // Date range filter\r\n if (typeof filterValue === 'object') {\r\n if (filterValue.from || filterValue.to) {\r\n const itemDateValue =\r\n filterType === 'date'\r\n ? typeof normalizedFilterValue === 'number'\r\n ? normalizedFilterValue\r\n : null\r\n : itemValue instanceof Date\r\n ? itemValue.getTime()\r\n : new Date(String(itemValue)).getTime();\r\n\r\n if (\r\n itemDateValue === null ||\r\n itemDateValue === undefined ||\r\n Number.isNaN(itemDateValue)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n filterValue.from &&\r\n itemDateValue < new Date(filterValue.from).getTime()\r\n ) {\r\n return false;\r\n }\r\n if (\r\n filterValue.to &&\r\n itemDateValue > new Date(filterValue.to).getTime()\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n } else if (filterValue?.userName) {\r\n const normalizedItemUser = itemValue;\r\n if (!normalizedItemUser) return false;\r\n\r\n return (\r\n normalizedItemUser.id === filterValue?.id ||\r\n normalizedItemUser.userName === filterValue?.userName ||\r\n normalizedItemUser.displayName === filterValue?.displayName\r\n );\r\n }\r\n }\r\n\r\n // Boolean filter\r\n if (typeof filterValue === 'boolean') {\r\n return normalizedFilterValue === filterValue;\r\n }\r\n\r\n // Text filter\r\n if (\r\n typeof normalizedFilterValue === 'string' ||\r\n typeof normalizedFilterValue === 'number'\r\n ) {\r\n return String(normalizedFilterValue)\r\n .toLowerCase()\r\n .includes(String(filterValue).toLowerCase());\r\n }\r\n\r\n return normalizedFilterValue === filterValue;\r\n }\r\n\r\n toggleRow(row: any): void {\r\n const newSet = new Set(this.selectedRows());\r\n if (newSet.has(row)) newSet.delete(row);\r\n else newSet.add(row);\r\n this.selectedRows.set(newSet);\r\n this.selectionChange.emit(Array.from(this.selectedRows()));\r\n }\r\n\r\n toggleAllRowsOnPage(): void {\r\n const currentSelection = new Set(this.selectedRows());\r\n const pageData = this.paginatedData();\r\n const allSelected = this.allSelectedOnPage();\r\n if (allSelected) {\r\n pageData.forEach((row) => currentSelection.delete(row));\r\n } else {\r\n pageData.forEach((row) => currentSelection.add(row));\r\n }\r\n this.selectedRows.set(currentSelection);\r\n this.selectionChange.emit(Array.from(this.selectedRows()));\r\n }\r\n\r\n getProperty(obj: any, key: string): any {\r\n return TableValueResolver.getProperty(obj, key);\r\n }\r\n\r\n getEntityPreviewData(row: any, col: ColumnDef): EntityData | null {\r\n const cellValue = this.getProperty(row, col.key);\r\n\r\n if (col.type === 'user') {\r\n return this.buildUserEntityData(cellValue, col.label);\r\n }\r\n\r\n if (col.type === 'status') {\r\n return this.buildStatusEntityData(cellValue, col.label);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n tabChanged(tab: any): void {\r\n this.filterTerm.set('');\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n this.onTabChange.emit(tab);\r\n }\r\n\r\n onTablePage(event: TablePageEvent): void {\r\n if (this.lazy()) {\r\n this.handleLazyLoad(event);\r\n return;\r\n }\r\n\r\n this.updatePagingFromEvent(event);\r\n }\r\n\r\n handleLazyLoad(event: any): void {\r\n this.updatePagingFromEvent(event);\r\n this.emitLazyLoad(event);\r\n }\r\n\r\n onPaginatorPage(event: any): void {\r\n if (this.lazy()) {\r\n this.handleLazyLoad(event);\r\n return;\r\n }\r\n\r\n this.updatePagingFromEvent(event);\r\n }\r\n\r\n onSearchChange(searchTerm: string) {\r\n this.filterTerm.set(searchTerm);\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n if (this.lazy() && !this.lazyLocalSearch()) {\r\n this.filters.set({ ...this.filters(), generalSearch: searchTerm });\r\n this.emitLazyLoad({});\r\n }\r\n }\r\n\r\n toggleSort(column: ColumnDef): void {\r\n if (!this.isColumnSortable(column)) {\r\n return;\r\n }\r\n\r\n if (this.sortField() !== column.key) {\r\n this.sortField.set(column.key);\r\n this.sortDirection.set('asc');\r\n } else {\r\n this.sortDirection.set(this.sortDirection() === 'asc' ? 'desc' : 'asc');\r\n }\r\n }\r\n\r\n isColumnSortable(column: ColumnDef): boolean {\r\n return column.sortable === true && (!this.lazy() || this.lazyLocalSort());\r\n }\r\n\r\n getSortIcon(column: ColumnDef): MTIcon {\r\n if (this.sortField() !== column.key || !this.sortDirection()) {\r\n return 'arrow.chevron-selector-vertical';\r\n }\r\n\r\n return this.sortDirection() === 'asc'\r\n ? 'arrow.arrow-up'\r\n : 'arrow.arrow-down';\r\n }\r\n\r\n onCellChange(\r\n row: any,\r\n columnKey: string,\r\n newValue: any,\r\n type?: ColumnTypeForActionCell,\r\n ): void {\r\n this.setProperty(row, columnKey, newValue);\r\n\r\n this.cellChange.emit({\r\n row,\r\n column: columnKey,\r\n value: newValue,\r\n type: type!,\r\n });\r\n }\r\n\r\n resolveActionLoading(action: TableAction, row: any): boolean | undefined {\r\n if (typeof action.loading === 'function') {\r\n return action.loading(row);\r\n }\r\n return action.loading;\r\n }\r\n\r\n getVisibleRowActions(row: any): TableAction[] {\r\n return this.rowActions().filter((action) => !action.hidden?.(row));\r\n }\r\n\r\n onColumnReorder(event: any): void {\r\n this.columnReorder.emit(event);\r\n }\r\n\r\n onRowReorder(event: any): void {\r\n this.rowReorder.emit({\r\n ...event,\r\n value: event.value ?? this.data(),\r\n });\r\n }\r\n\r\n onRowClick(event: MouseEvent, row: any): void {\r\n if (!this.clickableRows() || this.loading()) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement | null;\r\n if (\r\n target?.closest(\r\n 'button, a, input, textarea, select, label, [role=\"button\"], [data-row-click-ignore=\"true\"]',\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n this.rowClick.emit(row);\r\n }\r\n\r\n protected updatePagingFromEvent(event: any): void {\r\n const first = event?.first ?? this.first();\r\n const rows = event?.rows ?? this.pageSize();\r\n\r\n this.first.set(first);\r\n this.pageSize.set(rows);\r\n\r\n const page =\r\n typeof event?.page === 'number'\r\n ? event.page\r\n : Math.floor((first ?? 0) / (rows || 1));\r\n\r\n this.currentPage.set(page);\r\n }\r\n\r\n protected emitLazyLoad(event: any): void {\r\n this.lazyLoad.emit({\r\n ...event,\r\n pageSize: this.pageSize(),\r\n currentPage: this.currentPage() + 1,\r\n first: this.first(),\r\n filters: this.filters(),\r\n });\r\n }\r\n\r\n exportCSV(): void {\r\n const table = this.tableRef();\r\n if (table && !this.loading()) {\r\n const exportColumns = this.exportColumns();\r\n const sourceColumns = this.columns().filter(\r\n (column) => column.type !== 'custom',\r\n );\r\n const originalColumns = table.columns;\r\n const originalValue = table.value;\r\n\r\n try {\r\n table.columns = exportColumns;\r\n table.value = this.buildExportRows(this.displayData(), sourceColumns);\r\n table.exportCSV();\r\n } finally {\r\n table.columns = originalColumns;\r\n table.value = originalValue;\r\n }\r\n }\r\n }\r\n\r\n rowAction(event: Event, action: TableAction, row: any): void {\r\n if (!action.confirmation) {\r\n action.action(row);\r\n } else if (action.confirmation?.confirmationType === 'delete') {\r\n this.confirmationService.confirmDelete({\r\n event: event,\r\n ...action.confirmation,\r\n accept: () => {\r\n action.action(row);\r\n },\r\n reject: () => {},\r\n });\r\n } else {\r\n this.confirmationService.confirm({\r\n event: event,\r\n ...action.confirmation,\r\n accept: () => {\r\n action.action(row);\r\n },\r\n reject: () => {},\r\n });\r\n }\r\n }\r\n\r\n private buildUserEntityData(\r\n value: unknown,\r\n columnLabel: string,\r\n ): EntityData | null {\r\n const userValue = value;\r\n if (!userValue) return null;\r\n\r\n return {\r\n name: columnLabel,\r\n viewType: 'User',\r\n value: userValue,\r\n configuration: {\r\n showDisplayName: true,\r\n showPhoneNumber: false,\r\n showEmail: false,\r\n },\r\n };\r\n }\r\n\r\n private buildStatusEntityData(\r\n value: unknown,\r\n columnLabel: string,\r\n ): EntityData | null {\r\n const statusValue = value;\r\n if (!statusValue) return null;\r\n\r\n return {\r\n name: columnLabel,\r\n viewType: 'Status',\r\n value: statusValue,\r\n };\r\n }\r\n\r\n /**\r\n * Gets the entity data for an 'entity' type column.\r\n * The row data is expected to already be in EntityData format.\r\n * Automatically hides entity name and configures User entities\r\n * to show only avatar + displayName.\r\n */\r\n getEntityColumnData(row: any, col: ColumnDef): EntityData | null {\r\n const cellValue = this.getProperty(row, col.key);\r\n if (!cellValue || typeof cellValue !== 'object') return null;\r\n\r\n const entityData = cellValue as EntityData;\r\n\r\n // For User entities: show avatar + displayName only\r\n if (entityData.viewType === 'User') {\r\n return {\r\n ...entityData,\r\n configuration: {\r\n ...entityData.configuration,\r\n hideName: true,\r\n showDisplayName: true,\r\n showPhoneNumber: false,\r\n showEmail: false,\r\n },\r\n };\r\n }\r\n\r\n // For all other entities: hide the name label\r\n return {\r\n ...entityData,\r\n configuration: {\r\n ...entityData.configuration,\r\n hideName: true,\r\n },\r\n };\r\n }\r\n\r\n protected getStatusEntityAccentColor(\n row: Record<string, unknown>,\n ): string | null {\n const statusCellColor = this.resolveStatusEntityAccentColor(\n this.getProperty(row, 'status'),\n );\n if (statusCellColor) {\n return statusCellColor;\n }\n\n for (const column of this.columns()) {\n if (column.type !== 'entity' && column.type !== 'status') {\n continue;\n }\n\n const accentColor = this.resolveStatusEntityAccentColor(\n this.getProperty(row, column.key),\n );\n if (accentColor) {\n return accentColor;\n }\n }\n\n return null;\n }\n\n private resolveStatusEntityAccentColor(value: unknown): string | null {\n if (!value || typeof value !== 'object') {\n return null;\n }\n\n const entityData = value as Partial<EntityData>;\n if (\n 'viewType' in entityData &&\n entityData.viewType &&\n entityData.viewType !== 'Status'\n ) {\n return null;\n }\n\n const color =\n typeof (entityData.value as { color?: unknown } | undefined)?.color ===\n 'string'\n ? (entityData.value as { color: string }).color\n : null;\n\n return typeof color === 'string' && color.trim().length\n ? color.trim()\n : null;\n }\n\r\n protected getBooleanProperty(obj: any, key: string): boolean {\r\n const value = this.getProperty(obj, key);\r\n\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n return TableValueResolver.resolveBooleanValue(value) ?? false;\r\n }\r\n\r\n private setProperty(obj: any, key: string, value: any): void {\r\n const path = key.split('.');\r\n const lastKey = path.pop();\r\n\r\n if (!lastKey) {\r\n return;\r\n }\r\n\r\n const target = path.reduce((current, segment) => {\r\n if (!current?.[segment] || typeof current[segment] !== 'object') {\r\n current[segment] = {};\r\n }\r\n\r\n return current[segment];\r\n }, obj);\r\n\r\n if (target && typeof target === 'object') {\r\n target[lastKey] = value;\r\n }\r\n }\r\n\r\n private sortData(data: any[]): any[] {\r\n const field = this.sortField();\r\n const direction = this.sortDirection();\r\n\r\n if (!field || !direction) {\r\n return data;\r\n }\r\n\r\n const column = this.columns().find((item) => item.key === field);\r\n if (!column || !this.isColumnSortable(column)) {\r\n return data;\r\n }\r\n\r\n return [...data].sort((leftRow, rightRow) => {\r\n const leftValue = this.getSortValue(leftRow, column);\r\n const rightValue = this.getSortValue(rightRow, column);\r\n\r\n if (leftValue === rightValue) return 0;\r\n if (leftValue === null || leftValue === undefined || leftValue === '') {\r\n return 1;\r\n }\r\n if (\r\n rightValue === null ||\r\n rightValue === undefined ||\r\n rightValue === ''\r\n ) {\r\n return -1;\r\n }\r\n\r\n const comparison = leftValue < rightValue ? -1 : 1;\r\n return direction === 'asc' ? comparison : -comparison;\r\n });\r\n }\r\n\r\n private getSortValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | null {\r\n const cellValue = this.getProperty(row, column.key);\r\n const resolvedValue = this.getColumnResolvedValue(row, column);\r\n\r\n if (\r\n resolvedValue === null ||\r\n resolvedValue === undefined ||\r\n resolvedValue === ''\r\n ) {\r\n return null;\r\n }\r\n\r\n if (column.type === 'date') {\r\n const timestamp = new Date(String(cellValue)).getTime();\r\n return Number.isNaN(timestamp) ? null : timestamp;\r\n }\r\n\r\n if (typeof resolvedValue === 'number') {\r\n return resolvedValue;\r\n }\r\n\r\n if (typeof resolvedValue === 'boolean') {\r\n return resolvedValue ? 1 : 0;\r\n }\r\n\r\n if (cellValue instanceof Date) {\r\n return cellValue.getTime();\r\n }\r\n\r\n return TableValueResolver.normalizeTextSortValue(resolvedValue);\r\n }\r\n\r\n private getColumnResolvedValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | boolean | null {\r\n const cellValue = this.getProperty(row, column.key);\r\n\r\n if (cellValue === null || cellValue === undefined) {\r\n return null;\r\n }\r\n\r\n if (column.type === 'entity') {\r\n return TableValueResolver.getEntityValueByType(cellValue, 'sort');\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return this.getBooleanProperty(row, column.key);\r\n }\r\n\r\n if (typeof cellValue === 'number' || typeof cellValue === 'boolean') {\r\n return cellValue;\r\n }\r\n\r\n if (cellValue instanceof Date) {\r\n return cellValue.toISOString();\r\n }\r\n\r\n return TableValueResolver.resolveDisplayValue(cellValue);\r\n }\r\n\r\n private buildExportRows(\r\n rows: Record<string, unknown>[],\r\n columns: ColumnDef[],\r\n ): Record<string, string | number | boolean | null>[] {\r\n return rows.map((row) => {\r\n const exportRow: Record<string, string | number | boolean | null> = {};\r\n\r\n columns.forEach((column) => {\r\n exportRow[column.key] =\r\n column.type === 'entity'\r\n ? TableValueResolver.getEntityValueByType(\r\n this.getProperty(row, column.key),\r\n 'export',\r\n )\r\n : this.getColumnResolvedValue(row, column);\r\n });\r\n\r\n return exportRow;\r\n });\r\n }\r\n}\r\n","<div class=\"space-y-4 rounded-2xl\">\r\n <div>\r\n @if (\r\n captionStartContent() ||\r\n captionEndContent() ||\r\n generalSearch() ||\r\n showFilters() ||\r\n tabs()?.length > 0 ||\r\n actions()?.length > 0\r\n ) {\r\n <div class=\"p-datatable-header rounded-t-2xl\">\r\n <div\r\n class=\"flex relative\"\r\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\r\n >\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"captionStartContent()\"\r\n ></ng-container>\r\n @if (tabs()) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabs()\"\r\n [optionLabel]=\"tabsOptionLabel()\"\r\n [optionValue]=\"tabsOptionValue()\"\r\n (onChange)=\"tabChanged($event)\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n }\r\n @if (generalSearch()) {\r\n <mt-text-field\r\n [(ngModel)]=\"filterTerm\"\r\n (ngModelChange)=\"onSearchChange($event)\"\r\n icon=\"general.search-lg\"\r\n [placeholder]=\"'components.table.search' | transloco\"\r\n ></mt-text-field>\r\n }\r\n </div>\r\n <div class=\"flex items-center gap-2\">\r\n @if (showFilters()) {\r\n <mt-table-filter\r\n [columns]=\"columns()\"\r\n [data]=\"data()\"\r\n [ngModel]=\"filters()\"\r\n (filterApplied)=\"onFilterApplied($event)\"\r\n (filterReset)=\"onFilterReset()\"\r\n />\r\n }\r\n @if (exportable()) {\r\n <mt-button\r\n icon=\"file.file-x-03\"\r\n [tooltip]=\"'components.table.export' | transloco\"\r\n (click)=\"exportCSV()\"\r\n />\r\n }\r\n @if (actions()?.length > 0) {\r\n <div class=\"flex items-center space-x-2\">\r\n @for (action of actions(); track action.label) {\r\n <mt-button\r\n [icon]=\"action.icon\"\r\n [severity]=\"action.color\"\r\n [variant]=\"action.variant\"\r\n [size]=\"action.size\"\r\n (click)=\"action.action(row)\"\r\n [label]=\"action.label\"\r\n [tooltip]=\"action.tooltip\"\r\n ></mt-button>\r\n }\r\n </div>\r\n }\r\n <ng-container\r\n *ngTemplateOutlet=\"captionEndContent()\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @if (!loading() && emptyContent() && data().length === 0) {\r\n <div\r\n class=\"p-4 bg-content rounded-md text-center text-gray-600 dark:text-gray-300\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"emptyContent()\"></ng-container>\r\n </div>\r\n } @else {\r\n <div class=\"overflow-x-auto bg-content\">\r\n <p-table\r\n #dt\r\n [value]=\"displayData()\"\r\n [columns]=\"columns()\"\r\n [size]=\"size()\"\r\n [showGridlines]=\"showGridlines()\"\r\n [stripedRows]=\"stripedRows()\"\r\n [lazy]=\"lazy()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [reorderableColumns]=\"reorderableColumns()\"\r\n [reorderableRows]=\"reorderableRows()\"\r\n [dataKey]=\"dataKey()\"\r\n [first]=\"first()\"\r\n [rows]=\"pageSize()\"\r\n [exportFilename]=\"exportFilename()\"\r\n (onPage)=\"onTablePage($event)\"\r\n (onLazyLoad)=\"handleLazyLoad($event)\"\r\n (onColReorder)=\"onColumnReorder($event)\"\r\n (onRowReorder)=\"onRowReorder($event)\"\r\n paginator\r\n paginatorStyleClass=\"hidden!\"\r\n class=\"min-w-full text-sm align-middle table-fixed\"\r\n >\r\n <ng-template\r\n #header\r\n let-columns\r\n class=\"bg-surface-50 dark:bg-surface-950 border-b border-surface-300 dark:border-surface-500\"\r\n >\r\n <tr>\r\n @if (reorderableRows()) {\r\n <th class=\"w-10\"></th>\r\n }\r\n @if (selectableRows()) {\r\n <th class=\"w-12 text-start\">\r\n <mt-checkbox-field\r\n [ngModel]=\"allSelectedOnPage()\"\r\n (ngModelChange)=\"toggleAllRowsOnPage()\"\r\n ></mt-checkbox-field>\r\n </th>\r\n }\r\n\r\n @for (col of columns; track col.key || col.label || $index) {\r\n @if (reorderableColumns()) {\r\n <th\r\n pReorderableColumn\r\n class=\"text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\r\n >\r\n <div class=\"flex items-center gap-2\">\r\n {{ col.label }}\r\n <!-- <mt-icon-->\r\n <!-- icon=\"general.menu-05\"-->\r\n <!-- class=\"text-xs text-gray-400\"-->\r\n <!-- ></mt-icon>-->\r\n <mt-button\r\n styleClass=\"cursor-move!\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n icon=\"general.menu-05\"\r\n ></mt-button>\r\n </div>\r\n </th>\r\n } @else {\r\n <th\r\n class=\"text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\r\n [style.width]=\"col.width ?? null\"\r\n [style.minWidth]=\"col.width ?? null\"\r\n >\r\n @if (isColumnSortable(col)) {\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex items-center gap-2 cursor-pointer\"\r\n (click)=\"toggleSort(col)\"\r\n >\r\n <span>{{ col.label }}</span>\r\n <mt-icon\r\n [icon]=\"getSortIcon(col)\"\r\n class=\"text-xs text-gray-400\"\r\n />\r\n </button>\r\n } @else {\r\n {{ col.label }}\r\n }\r\n </th>\r\n }\r\n }\r\n\r\n @if (rowActions().length > 0) {\r\n <th\r\n class=\"text-end! font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\r\n >\r\n {{ \"components.table.actions\" | transloco }}\r\n </th>\r\n }\r\n </tr>\r\n @if (updating()) {\r\n <tr>\r\n <th\r\n [attr.colspan]=\"\r\n columns.length +\r\n (reorderableRows() ? 1 : 0) +\r\n (selectableRows() ? 1 : 0) +\r\n (rowActions().length > 0 ? 1 : 0)\r\n \"\r\n class=\"!p-0\"\r\n >\r\n <p-progressBar\r\n mode=\"indeterminate\"\r\n [style]=\"{ height: '4px' }\"\r\n />\r\n </th>\r\n </tr>\r\n }\r\n </ng-template>\r\n <ng-template\r\n #body\r\n let-row\r\n let-columns=\"columns\"\r\n let-index=\"rowIndex\"\r\n class=\"divide-y divide-gray-200\"\r\n >\r\n @if (loading()) {\r\n <tr>\r\n @if (reorderableRows()) {\r\n <td><p-skeleton /></td>\r\n }\r\n @if (selectableRows()) {\r\n <td><p-skeleton /></td>\r\n }\r\n @for (col of columns; track col.key || col.label || $index) {\r\n <td><p-skeleton /></td>\r\n }\r\n @if (rowActions().length > 0) {\r\n <td><p-skeleton /></td>\r\n }\r\n </tr>\r\n } @else {\r\n <tr\r\n class=\"border-surface-300 transition-colors duration-150 dark:border-surface-500\"\r\n [class.mt-table-clickable-row]=\"clickableRows()\"\r\n [class.mt-table-status-entity-row]=\"\r\n getStatusEntityAccentColor(row)\r\n \"\r\n [style.--mt-table-status-accent]=\"\r\n getStatusEntityAccentColor(row)\r\n \"\r\n [class.cursor-pointer]=\"clickableRows()\"\r\n [pReorderableRow]=\"index\"\r\n (click)=\"onRowClick($event, row)\"\r\n >\r\n @if (reorderableRows()) {\r\n <td class=\"w-10 text-center\">\r\n <mt-button\r\n styleClass=\"cursor-move!\"\r\n pReorderableRowHandle\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n icon=\"general.menu-05\"\r\n ></mt-button>\r\n <!-- <mt-icon-->\r\n <!-- icon=\"general.menu-05\"-->\r\n <!-- class=\"cursor-move text-gray-500\"-->\r\n <!-- pReorderableRowHandle-->\r\n <!-- ></mt-icon>-->\r\n </td>\r\n }\r\n @if (selectableRows()) {\r\n <td class=\"w-12\">\r\n <mt-checkbox-field\r\n [ngModel]=\"selectedRows().has(row)\"\r\n (ngModelChange)=\"toggleRow(row)\"\r\n ></mt-checkbox-field>\r\n </td>\r\n }\r\n\r\n @for (col of columns; track col.key || col.label || $index) {\r\n <td\r\n class=\"text-gray-700 dark:text-gray-100\"\r\n [style.width]=\"col.width ?? null\"\r\n [style.minWidth]=\"col.width ?? null\"\r\n >\r\n @switch (col.type) {\r\n @case (\"boolean\") {\r\n <mt-toggle-field\r\n [ngModel]=\"getBooleanProperty(row, col.key)\"\r\n (ngModelChange)=\"\r\n onCellChange(row, col.key, $event, 'boolean')\r\n \"\r\n [readonly]=\"col.readonly ?? false\"\r\n ></mt-toggle-field>\r\n }\r\n @case (\"date\") {\r\n <!-- {{ getProperty(row, col.key) | date: \"mediumDate\" }} -->\r\n }\r\n @case (\"user\") {\r\n @if (getEntityPreviewData(row, col); as entityData) {\r\n <mt-entity-preview\r\n [data]=\"entityData\"\r\n attachmentShape=\"compact\"\r\n ></mt-entity-preview>\r\n } @else {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n @case (\"status\") {\r\n @if (getEntityPreviewData(row, col); as entityData) {\r\n <mt-entity-preview\r\n [data]=\"entityData\"\r\n attachmentShape=\"compact\"\r\n ></mt-entity-preview>\r\n } @else {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n @case (\"entity\") {\r\n @if (getEntityColumnData(row, col); as entityData) {\r\n <mt-entity-preview\r\n [data]=\"entityData\"\r\n attachmentShape=\"compact\"\r\n ></mt-entity-preview>\r\n } @else {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n @case (\"custom\") {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n col.customCellTpl;\r\n context: { $implicit: row }\r\n \"\r\n >\r\n </ng-container>\r\n }\r\n @default {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n </td>\r\n }\r\n\r\n @if (rowActions().length > 0) {\r\n <td class=\"text-right\">\r\n @if (actionShape() === \"popover\") {\r\n <div class=\"flex items-center justify-end\">\r\n <mt-button\r\n icon=\"general.dots-vertical\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n size=\"large\"\r\n (click)=\"rowPopover.toggle($event)\"\r\n data-row-click-ignore=\"true\"\r\n ></mt-button>\r\n <p-popover #rowPopover appendTo=\"body\">\r\n <div class=\"flex flex-col min-w-40\">\r\n @for (\r\n action of getVisibleRowActions(row);\r\n track $index\r\n ) {\r\n <button\r\n class=\"flex items-center gap-2 px-2 cursor-pointer py-2 text-sm rounded transition-colors\"\r\n [class]=\"\r\n action.color === 'danger'\r\n ? 'text-red-600 hover:bg-red-50 dark:hover:bg-red-950'\r\n : 'text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-surface-700'\r\n \"\r\n (click)=\"\r\n rowAction($event, action, row);\r\n rowPopover.hide()\r\n \"\r\n >\r\n @if (action.icon) {\r\n <mt-icon\r\n [icon]=\"action.icon\"\r\n class=\"text-base\"\r\n />\r\n }\r\n <span>{{\r\n action.label || action.tooltip\r\n }}</span>\r\n </button>\r\n }\r\n </div>\r\n </p-popover>\r\n </div>\r\n } @else {\r\n <div class=\"flex items-center justify-end space-x-2\">\r\n @for (action of rowActions(); track $index) {\r\n @let hidden = action.hidden?.(row);\r\n @if (!hidden) {\r\n <mt-button\r\n [icon]=\"action.icon\"\r\n [severity]=\"action.color\"\r\n [variant]=\"action.variant\"\r\n [size]=\"action.size || 'small'\"\r\n (click)=\"rowAction($event, action, row)\"\r\n [tooltip]=\"action.tooltip\"\r\n [label]=\"action.label\"\r\n [loading]=\"resolveActionLoading(action, row)\"\r\n ></mt-button>\r\n }\r\n }\r\n </div>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </ng-template>\r\n <ng-template #emptymessage>\r\n <tr>\r\n <td colspan=\"20\" class=\"text-center\">\r\n <div class=\"flex justify-center\">No data found.</div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-col gap-3 pb-3 px-4\"\r\n [class]=\"'items-' + paginatorPosition()\"\r\n >\r\n <mt-paginator\r\n [(rows)]=\"pageSize\"\r\n [(first)]=\"first\"\r\n [(page)]=\"currentPage\"\r\n [totalRecords]=\"totalRecords()\"\r\n [alwaysShow]=\"false\"\r\n [rowsPerPageOptions]=\"[5, 10, 20, 50]\"\r\n (onPageChange)=\"onPaginatorPage($event)\"\r\n ></mt-paginator>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i6"],"mappings":"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"}
|