@cauca-911/datagrid 22.3.3 → 22.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"cauca-911-datagrid.mjs","names":[],"sources":["../../../projects/cauca-datagrid/src/lib/data-grid/models/data-grid-row-drop-event.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/base-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/models/grid-export.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-export-menu/data-grid-export-menu.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-export-menu/data-grid-export-menu.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-header/data-grid-header.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-header/data-grid-header.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/models/density-enum.ts","../../../projects/cauca-datagrid/src/lib/services/preference.ts","../../../projects/cauca-datagrid/src/lib/services/mat-paginator-localization.service.ts","../../../projects/cauca-datagrid/src/lib/services/preference.service.ts","../../../projects/cauca-datagrid/src/lib/provide-cauca-grid.ts","../../../projects/cauca-datagrid/src/lib/data-grid/models/export-cell.ts","../../../projects/cauca-datagrid/src/lib/services/grid-export.service.ts","../../../projects/cauca-datagrid/src/lib/data-grid/base-data-grid.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/button-popover/button-popover.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/button-popover/button-popover.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-table-options/data-grid-table-options.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-table-options/data-grid-table-options.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-progress-spiner/data-grid-progress-spiner.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-progress-spiner/data-grid-progress-spiner.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/data-grid/data-grid.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/data-grid/data-grid.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/odata-grid/odata-listing.service.ts","../../../projects/cauca-datagrid/src/lib/data-grid/odata-grid/grid-url-state.ts","../../../projects/cauca-datagrid/src/lib/data-grid/odata-grid/odata-grid.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/odata-grid/odata-grid.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/grid-state-restoration.service.ts","../../../projects/cauca-datagrid/src/lib/data-grid/provide-grid-state-restoration.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/color-data-grid-column/color-data-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/color-data-grid-column/color-data-grid-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/components/check-icon/check-icon.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-check-column/data-grid-check-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-check-column/data-grid-check-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-column/data-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-column/data-grid-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-command-icon-column/data-grid-command-icon-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-command-icon-column/data-grid-command-icon-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-commands-column/data-grid-commands-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-commands-column/data-grid-commands-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-icon-column/data-grid-icon-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-icon-column/data-grid-icon-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-menu-column/data-grid-menu-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-menu-column/data-grid-menu-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/components/time-label/display-date.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/time-label/time-label.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/time-label/time-label.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/date-grid-column/date-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/date-grid-column/date-grid-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/sortable-data-grid-check-column/sortable-data-grid-check-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/sortable-data-grid-check-column/sortable-data-grid-check-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/components/column-label/phone-format.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/column-label/column-label.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/column-label/column-label.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/sortable-data-grid-column/sortable-data-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/sortable-data-grid-column/sortable-data-grid-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/translation-grid-column/translation-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/translation-grid-column/translation-grid-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/time-span-data-grid-column/time-span-data-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/time-span-data-grid-column/time-span-data-grid-column.component.html"],"sourcesContent":["export class DataGridRowDropEvent {\r\n public item: unknown;\r\n public data: unknown[];\r\n public fromIndex: number;\r\n public toIndex: number;\r\n\r\n public constructor(data: {\r\n item: unknown;\r\n data: unknown[];\r\n fromIndex: number;\r\n toIndex: number;\r\n }) {\r\n Object.assign(this, data);\r\n }\r\n}\r\n","import { Component, HostBinding, OnDestroy, OnInit, Optional, ViewChild, ViewEncapsulation, input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { MatCellDef, MatColumnDef, MatFooterCellDef, MatHeaderCellDef, MatTable } from '@angular/material/table';\r\nimport { ExportCell } from '../models/export-cell';\r\n\r\nexport type { ExportCell } from '../models/export-cell';\r\n\r\n@Component({ template: '' ,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport abstract class BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public readonly prop = input('');\r\n public readonly showLabel = input(true);\r\n public readonly label = input<string | undefined>(undefined);\r\n public readonly isInColumnChooser = input(true);\r\n public readonly visibleByDefault = input(true);\r\n public readonly width = input('');\r\n public readonly showToolTip = input(true);\r\n public readonly exportable = input(true);\r\n\r\n @HostBinding('attr.ariaHidden') public ariaHidden!: true;\r\n @HostBinding('class') public classes!: 'column-template cdk-visually-hidden';\r\n\r\n @ViewChild(MatColumnDef, { static: true }) public columnDef!: MatColumnDef;\r\n @ViewChild(MatCellDef, { static: true }) public cellDef!: MatCellDef;\r\n @ViewChild(MatHeaderCellDef, { static: true }) public headerCellDef!: MatHeaderCellDef;\r\n @ViewChild(MatFooterCellDef, { static: true }) public footerCellDef!: MatFooterCellDef;\r\n\r\n public selected: boolean = true;\r\n\r\n public constructor(@Optional() public table: MatTable<unknown>) {\r\n }\r\n\r\n public ngOnInit(): void {\r\n if (this.columnDef) {\r\n if (!this.columnDef.name) {\r\n this.columnDef.name = this.prop();\r\n }\r\n this.columnDef.cell = this.cellDef;\r\n this.columnDef.headerCell = this.headerCellDef;\r\n this.columnDef.footerCell = this.footerCellDef;\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n if (this.table) {\r\n this.table.removeColumnDef(this.columnDef);\r\n }\r\n }\r\n\r\n public capitalize(value: string): string {\r\n return value.charAt(0).toUpperCase() + value.slice(1);\r\n }\r\n\r\n public getExportValue(row: Record<string, unknown>): ExportCell {\r\n return (row?.[this.prop()] as ExportCell) ?? null;\r\n }\r\n\r\n public getExportHeader(): string {\r\n return this.label() ?? this.capitalize(this.prop());\r\n }\r\n}\r\n","import { BaseGridColumnComponent, ExportCell } from '../columns/base-grid-column.component';\r\n\r\nexport type GridExportFormat = 'excel' | 'pdf';\r\n\r\nexport const ALL_EXPORT_FORMATS: readonly GridExportFormat[] = ['excel', 'pdf'];\r\n\r\nexport interface ExportMatrix {\r\n title?: string;\r\n headers: string[];\r\n rows: ExportCell[][];\r\n}\r\n\r\nexport const GRID_OWNED_COLUMNS: readonly string[] = ['', 'position', 'buttons', 'menu', 'expand'];\r\n\r\nexport function buildExportMatrix(\r\n columnOrder: readonly string[],\r\n columns: readonly BaseGridColumnComponent[],\r\n rows: readonly Record<string, unknown>[],\r\n title?: string,\r\n): ExportMatrix {\r\n const exportedColumns = columnOrder\r\n .filter(name => !GRID_OWNED_COLUMNS.includes(name))\r\n .map(name => columns.find(column => column.columnDef?.name === name))\r\n .filter(column => !!column && column.exportable());\r\n\r\n return {\r\n title: title || undefined,\r\n headers: exportedColumns.map(column => column.getExportHeader()),\r\n rows: (rows ?? []).map(row => exportedColumns.map(column => column.getExportValue(row))),\r\n };\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { IconButtonComponent, MenuItemComponent } from '@cauca-911/material';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { ALL_EXPORT_FORMATS, GridExportFormat } from '../../models/grid-export';\r\n\r\nconst FORMAT_MENU_ITEMS: Record<GridExportFormat, { icon: string; label: string }> = {\r\n excel: { icon: 'table_view', label: 'dataGrid.export.excel' },\r\n pdf: { icon: 'picture_as_pdf', label: 'dataGrid.export.pdf' },\r\n};\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-export-menu',\r\n templateUrl: './data-grid-export-menu.component.html',\r\n styleUrl: './data-grid-export-menu.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [IconButtonComponent, MenuItemComponent, MatMenuModule, TranslatePipe],\r\n})\r\nexport class DataGridExportMenuComponent {\r\n\r\n public readonly formats = input<readonly GridExportFormat[]>(ALL_EXPORT_FORMATS);\r\n public readonly exportRequest = output<GridExportFormat>();\r\n\r\n protected readonly menuItems = FORMAT_MENU_ITEMS;\r\n\r\n protected onExport(format: GridExportFormat): void {\r\n this.exportRequest.emit(format);\r\n }\r\n}\r\n","<cauca-icon-button icon=\"download\" colorOnHover=\"var(--primary)\" [matMenuTriggerFor]=\"exportMenu\"\r\n [ariaLabel]=\"'dataGrid.export.title' | translate\" />\r\n\r\n<mat-menu #exportMenu=\"matMenu\">\r\n @for (format of formats(); track format) {\r\n <cauca-menu-item [icon]=\"menuItems[format].icon\" [label]=\"menuItems[format].label\" [translateLabel]=\"true\"\r\n (buttonClick)=\"onExport(format)\" [class]=\"'export-' + format + '-button'\" />\r\n }\r\n <ng-content select=\"[exportItem]\" />\r\n</mat-menu>\r\n","import { Component, OnDestroy, OnInit, input, output, signal, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { IconButtonComponent, RaisedButtonComponent } from '@cauca-911/material';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { Subject, debounceTime, takeUntil } from 'rxjs';\r\nimport { DataGridExportMenuComponent } from '../data-grid-export-menu/data-grid-export-menu.component';\r\nimport { ALL_EXPORT_FORMATS, GridExportFormat } from '../../models/grid-export';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-header',\r\n templateUrl: './data-grid-header.component.html',\r\n styleUrls: ['./data-grid-header.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatFormFieldModule, IconButtonComponent, RaisedButtonComponent, MatInputModule, ReactiveFormsModule, TranslatePipe, MatIcon, DataGridExportMenuComponent],\r\n})\r\nexport class DataGridHeaderComponent implements OnInit, OnDestroy {\r\n\r\n public filterControl: FormControl<string> = new FormControl<string>('');\r\n\r\n /** Written from the debounced valueChanges subscription and by OdataGridComponent when it\r\n * restores persisted state, so it is a signal: neither is a change-detection trigger\r\n * under zoneless (ADR-0004). */\r\n public readonly showClearButton = signal(false);\r\n\r\n public readonly showAddButton = input(false);\r\n public readonly showRefreshButton = input(false);\r\n public readonly showExportMenu = input(false);\r\n public readonly exportFormats = input<readonly GridExportFormat[]>(ALL_EXPORT_FORMATS);\r\n public readonly addButtonLabel = input('');\r\n public readonly searchPlaceholder = input('');\r\n public readonly showSearchBar = input(true);\r\n public readonly disableAddButton = input(false);\r\n public readonly filterChange = output<string>();\r\n public readonly addButtonClick = output<void>();\r\n public readonly refreshRequest = output<void>();\r\n public readonly exportRequest = output<GridExportFormat>();\r\n\r\n protected _onDestroy = new Subject<void>();\r\n\r\n public ngOnInit(): void {\r\n this.filterControl.valueChanges\r\n .pipe(\r\n debounceTime(500),\r\n takeUntil(this._onDestroy))\r\n .subscribe((filter: string) => {\r\n this.filterChange.emit(filter);\r\n this.showClearButton.set(!!filter);\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._onDestroy.next();\r\n this._onDestroy.complete();\r\n }\r\n\r\n public onRefresh(): void {\r\n this.refreshRequest.emit();\r\n }\r\n\r\n public clearSearchValue(): void {\r\n this.filterControl.setValue('');\r\n }\r\n\r\n public onAddButtonClick(): void {\r\n this.addButtonClick.emit();\r\n }\r\n}\r\n","<div class=\"grid-header\">\r\n\r\n @if (showSearchBar()) {\r\n <mat-form-field appearance=\"outline\" class=\"full-width-field grid-search-box\" subscriptSizing=\"dynamic\">\r\n @if (showClearButton()) { <cauca-icon-button matPrefix (buttonClick)=\"clearSearchValue()\" icon=\"close\" /> }\r\n <mat-label>{{ 'dataGrid.keywordsLabel' | translate}}</mat-label>\r\n <input matInput [formControl]=\"filterControl\" [placeholder]=\"searchPlaceholder()\">\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n }\r\n\r\n <ng-content select=\"[filterRow]\" ngProjectAs=\"[filterRow]\" />\r\n\r\n @if (showRefreshButton()) { <cauca-icon-button (buttonClick)=\"onRefresh()\" icon=\"refresh\" class=\"grid-refresh-button\" /> }\r\n\r\n @if (showExportMenu()) {\r\n <cauca-data-grid-export-menu [formats]=\"exportFormats()\" (exportRequest)=\"exportRequest.emit($event)\" class=\"grid-export-menu\">\r\n <ng-content select=\"[exportItem]\" ngProjectAs=\"[exportItem]\" />\r\n </cauca-data-grid-export-menu>\r\n }\r\n\r\n @if (showAddButton()) { <cauca-raised-button icon=\"add\" color=\"primary\" [label]=\"addButtonLabel()\" [translateLabel]=\"false\" class=\"grid-new-button\" [isDisabled]=\"disableAddButton()\" (buttonClick)=\"onAddButtonClick()\" /> }\r\n</div>","export enum Density {\r\n Compact = \"compact\",\r\n Standard = \"standard\",\r\n Comfortable = \"comfortable\"\r\n}","import { Density } from \"../data-grid/models/density-enum\";\r\n\r\nexport class Preference {\r\n public gridDensity: Density;\r\n}\r\n\r\nexport class GridConfiguration {\r\n public name: string;\r\n public visibleColumns: string[];\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { MatPaginatorIntl } from \"@angular/material/paginator\";\r\nimport { TranslateService } from \"@cauca-911/core\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MatPaginatorLocalizationService extends MatPaginatorIntl {\r\n public itemsPerPageLabel: string = 'Items per page';\r\n public nextPageLabel: string = 'Next page';\r\n public previousPageLabel: string = 'Previous page';\r\n public ofLabel: string = 'of'\r\n\r\n public constructor(\r\n private readonly translateService: TranslateService) {\r\n super();\r\n this.translateService.onLangChange.subscribe(() => this.loadTranslations());\r\n this.loadTranslations();\r\n }\r\n\r\n public getRangeLabel = (page, pageSize, length): string => {\r\n if (length == 0 || pageSize == 0) {\r\n return `0 ${this.ofLabel} ${length}`;\r\n }\r\n\r\n length = Math.max(length, 0);\r\n const startIndex = page * pageSize;\r\n const endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;\r\n return `${startIndex + 1} – ${endIndex} ${this.ofLabel} ${length}`;\r\n };\r\n\r\n private loadTranslations(): any {\r\n this.translateService.get([\r\n 'paginator.itemsPerPage',\r\n 'paginator.nextPage',\r\n 'paginator.previousPage',\r\n 'paginator.of'\r\n ])\r\n .subscribe(translation => {\r\n this.itemsPerPageLabel = translation['paginator.itemsPerPage'];\r\n this.nextPageLabel = translation['paginator.nextPage'];\r\n this.previousPageLabel = translation['paginator.previousPage'];\r\n this.ofLabel = translation['paginator.of'];\r\n this.changes.next();\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, of } from 'rxjs';\r\nimport { GridConfiguration, Preference } from './preference';\r\nimport { Density } from '../data-grid/models/density-enum';\r\nimport { BasePreferenceService } from './base-preference-service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PreferenceService implements BasePreferenceService {\r\n public preference: BehaviorSubject<Preference> = new BehaviorSubject<Preference>(new Preference());\r\n\r\n public gridConfiguration: GridConfiguration[] = [];\r\n\r\n public constructor() {\r\n const data = localStorage.getItem('GridPreference');\r\n const configuration = localStorage.getItem('GridConfiguration');\r\n if (data) {\r\n this.preference.next(JSON.parse(data));\r\n }\r\n if (configuration) {\r\n this.gridConfiguration = JSON.parse(configuration);\r\n }\r\n }\r\n\r\n public getPreference(): Preference {\r\n return this.preference.value;\r\n }\r\n\r\n public setPreferenceDensity(density: Density) {\r\n const preference = this.getPreference();\r\n if (density === preference.gridDensity) return;\r\n preference.gridDensity = density;\r\n this.preference.next(preference);\r\n this.addOrUpdatePreference();\r\n }\r\n\r\n public addOrUpdatePreference(): void {\r\n localStorage.setItem('GridPreference', JSON.stringify(this.getPreference()));\r\n }\r\n\r\n public getPreferenceForGrid(gridName: string): Observable<GridConfiguration> {\r\n return of(this.getPreferenceForGridNotObservable(gridName));\r\n }\r\n\r\n public addOrUpdateGridPreference(gridName: string, visibleColumns: string[]): Observable<void> {\r\n const configuration = this.getPreferenceForGridNotObservable(gridName);\r\n configuration.visibleColumns = visibleColumns || [];\r\n localStorage.setItem('GridConfiguration', JSON.stringify(this.gridConfiguration));\r\n return of();\r\n }\r\n\r\n private getPreferenceForGridNotObservable(gridName: string): GridConfiguration {\r\n const configuration = this.gridConfiguration.find(g => g.name == gridName);\r\n if (configuration) {\r\n return configuration;\r\n }\r\n const newConfiguration = new GridConfiguration();\r\n newConfiguration.name = gridName;\r\n this.gridConfiguration.push(newConfiguration);\r\n return newConfiguration;\r\n }\r\n}","import { CDK_DRAG_CONFIG } from \"@angular/cdk/drag-drop\";\r\nimport { Provider, EnvironmentProviders, Type, InjectionToken } from \"@angular/core\";\r\nimport { MatPaginatorIntl } from \"@angular/material/paginator\";\r\nimport { MatPaginatorLocalizationService } from \"./services/mat-paginator-localization.service\";\r\nimport { PreferenceService } from \"./services/preference.service\";\r\nimport { BasePreferenceService } from \"./services/base-preference-service\";\r\n\r\nexport interface CaucaGridOptions {\r\n /** If not provided, a default implementation will be used which will use localStorage to store the grid preferences. */\r\n gridPreferenceService?: Type<BasePreferenceService>\r\n}\r\n\r\nexport const PREFERENCE_SERVICE_TOKEN = new InjectionToken<BasePreferenceService>('CaucaGridPreferenceService');\r\n\r\nexport function provideCaucaGrid(options?: CaucaGridOptions): (Provider|EnvironmentProviders) {\r\n return [\r\n { provide: CDK_DRAG_CONFIG, useValue: { previewContainer: 'parent' } },\r\n { provide: MatPaginatorIntl, useClass: MatPaginatorLocalizationService },\r\n { provide: PREFERENCE_SERVICE_TOKEN, useClass: options?.gridPreferenceService || PreferenceService }\r\n ];\r\n}\r\n","export type ExportValue = string | number | boolean | Date | null;\r\n\r\nexport interface FilledExportCell {\r\n value: ExportValue;\r\n fillColor: string;\r\n}\r\n\r\nexport type ExportCell = ExportValue | FilledExportCell;\r\n\r\nconst HEX_COLOR_PATTERN = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;\r\nconst SHORT_HEX_LENGTH = 3;\r\nconst ALPHA_OPAQUE = 'FF';\r\n\r\nexport function isFilledExportCell(cell: ExportCell): cell is FilledExportCell {\r\n return typeof cell === 'object' && cell !== null && !(cell instanceof Date) && 'fillColor' in cell;\r\n}\r\n\r\nexport function hexToArgb(fillColor: string): string | undefined {\r\n if (!HEX_COLOR_PATTERN.test(fillColor)) {\r\n return undefined;\r\n }\r\n\r\n const hex = fillColor.slice(1);\r\n const expandedHex = hex.length === SHORT_HEX_LENGTH\r\n ? hex.split('').map(digit => digit + digit).join('')\r\n : hex;\r\n\r\n return `${ALPHA_OPAQUE}${expandedHex}`.toUpperCase();\r\n}\r\n","import { formatDate } from '@angular/common';\r\nimport { inject, Injectable, LOCALE_ID } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { ExportCell, ExportValue, hexToArgb, isFilledExportCell } from '../data-grid/models/export-cell';\r\nimport { ExportMatrix } from '../data-grid/models/grid-export';\r\nimport type { CellHookData } from 'jspdf-autotable';\r\n\r\nconst XLSX_MIME = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\r\nconst DATE_MASK = 'dd/MM/yyyy HH:mm';\r\nconst EXCEL_DATE_FORMAT = 'dd/mm/yyyy hh:mm';\r\nconst COLUMN_WIDTH = 24;\r\nconst FONT_NAME = 'Aptos Narrow';\r\nconst FONT_FAMILY = 2;\r\nconst EXCEL_TITLE_FONT_SIZE = 25;\r\nconst TITLE_FONT_SIZE = 14;\r\nconst PAGE_MARGIN = 14;\r\nconst TITLE_BASELINE = 15;\r\nconst TABLE_TOP_WITH_TITLE = 22;\r\nconst MIN_CELL_WIDTH = 15;\r\nconst FILL_BORDER_WIDTH = 0.2;\r\nconst FILL_BORDER_COLOR = '#333333';\r\nconst THIN_BORDER = { style: 'thin' } as const;\r\nconst FILL_CELL_BORDER = { top: THIN_BORDER, left: THIN_BORDER, bottom: THIN_BORDER, right: THIN_BORDER };\r\n\r\ntype WorkbookConstructor = typeof import('exceljs').Workbook;\r\ntype ExcelCell = import('exceljs').Cell;\r\n\r\ninterface ExcelJsNamespace {\r\n Workbook?: WorkbookConstructor;\r\n default?: { Workbook?: WorkbookConstructor };\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class GridExportService {\r\n\r\n private readonly locale = inject(LOCALE_ID);\r\n private readonly translateService = inject(TranslateService);\r\n\r\n public async toExcel(matrix: ExportMatrix, fileName: string): Promise<void> {\r\n const Workbook = await this.loadWorkbook();\r\n\r\n const workbook = new Workbook();\r\n const worksheet = workbook.addWorksheet(fileName.slice(0, 31));\r\n const columnCount = matrix.headers.length;\r\n\r\n if (matrix.title) {\r\n const titleRow = worksheet.addRow([matrix.title]);\r\n titleRow.font = { name: FONT_NAME, family: FONT_FAMILY, bold: true, size: EXCEL_TITLE_FONT_SIZE };\r\n titleRow.alignment = { horizontal: 'center', vertical: 'middle' };\r\n if (columnCount > 1) {\r\n worksheet.mergeCells(1, 1, 1, columnCount);\r\n }\r\n }\r\n\r\n const headerRow = matrix.title ? 2 : 1;\r\n worksheet.addRow(matrix.headers).font = { name: FONT_NAME, family: FONT_FAMILY, bold: true };\r\n matrix.rows.forEach(row => {\r\n const addedRow = worksheet.addRow(row.map(cell => this.localize(this.valueOf(cell))));\r\n addedRow.font = { name: FONT_NAME, family: FONT_FAMILY };\r\n row.forEach((cell, columnIndex) => {\r\n if (isFilledExportCell(cell)) {\r\n this.applyFill(addedRow.getCell(columnIndex + 1), cell.fillColor);\r\n }\r\n });\r\n });\r\n\r\n (worksheet.columns ?? []).forEach((column, index) => {\r\n column.width = COLUMN_WIDTH;\r\n if (matrix.rows.some(row => this.valueOf(row[index]) instanceof Date)) {\r\n column.numFmt = EXCEL_DATE_FORMAT;\r\n }\r\n });\r\n\r\n if (columnCount > 0) {\r\n worksheet.autoFilter = {\r\n from: { row: headerRow, column: 1 },\r\n to: { row: headerRow, column: columnCount },\r\n };\r\n }\r\n\r\n const buffer = await workbook.xlsx.writeBuffer();\r\n this.download(new Blob([buffer], { type: XLSX_MIME }), `${fileName}.xlsx`);\r\n }\r\n\r\n public async toPdf(matrix: ExportMatrix, fileName: string): Promise<void> {\r\n const { jsPDF } = await this.load(() => import('jspdf'), 'jspdf');\r\n const { default: autoTable } = await this.load(() => import('jspdf-autotable'), 'jspdf-autotable');\r\n\r\n const document = new jsPDF({ orientation: 'landscape' });\r\n\r\n if (matrix.title) {\r\n document.setFontSize(TITLE_FONT_SIZE);\r\n document.text(matrix.title, PAGE_MARGIN, TITLE_BASELINE);\r\n }\r\n\r\n autoTable(document, {\r\n head: [matrix.headers],\r\n body: matrix.rows.map(row => row.map(cell => this.stringify(cell))),\r\n startY: matrix.title ? TABLE_TOP_WITH_TITLE : undefined,\r\n margin: { left: PAGE_MARGIN, right: PAGE_MARGIN },\r\n styles: { fontSize: 8, overflow: 'linebreak' },\r\n headStyles: { fontStyle: 'bold' },\r\n didParseCell: (data: CellHookData) => this.applyPdfFill(matrix, data),\r\n });\r\n\r\n document.save(`${fileName}.pdf`);\r\n }\r\n\r\n private async loadWorkbook(): Promise<WorkbookConstructor> {\r\n const excel = await this.load(() => import('exceljs'), 'exceljs') as unknown as ExcelJsNamespace;\r\n const Workbook = excel.Workbook ?? excel.default?.Workbook;\r\n\r\n if (!Workbook) {\r\n throw new Error(\r\n '@cauca-911/datagrid could not load exceljs: the module exposes no Workbook. '\r\n + 'This is a bundler CommonJS interop problem, not a missing package.',\r\n );\r\n }\r\n\r\n return Workbook;\r\n }\r\n\r\n private async load<T>(importer: () => Promise<T>, packageName: string): Promise<T> {\r\n try {\r\n return await importer();\r\n } catch (cause) {\r\n throw new Error(\r\n `@cauca-911/datagrid needs the optional peer dependency \"${packageName}\" to export. `\r\n + 'Run: npm install exceljs jspdf jspdf-autotable --save',\r\n { cause },\r\n );\r\n }\r\n }\r\n\r\n private applyFill(cell: ExcelCell, fillColor: string): void {\r\n const argb = hexToArgb(fillColor);\r\n if (!argb) {\r\n return;\r\n }\r\n cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb } };\r\n cell.border = FILL_CELL_BORDER;\r\n }\r\n\r\n private applyPdfFill(matrix: ExportMatrix, data: CellHookData): void {\r\n if (data.section !== 'body') {\r\n return;\r\n }\r\n const cell = matrix.rows[data.row.index]?.[data.column.index];\r\n if (!cell || !isFilledExportCell(cell) || !hexToArgb(cell.fillColor)) {\r\n return;\r\n }\r\n data.cell.styles.fillColor = cell.fillColor;\r\n data.cell.styles.lineColor = FILL_BORDER_COLOR;\r\n data.cell.styles.lineWidth = FILL_BORDER_WIDTH;\r\n data.cell.styles.minCellWidth = MIN_CELL_WIDTH;\r\n }\r\n\r\n private valueOf(cell: ExportCell): ExportValue {\r\n return isFilledExportCell(cell) ? cell.value : cell;\r\n }\r\n\r\n private localize(value: ExportValue): ExportValue {\r\n return typeof value === 'boolean'\r\n ? this.translateService.instant(value ? 'dataGrid.export.true' : 'dataGrid.export.false')\r\n : value;\r\n }\r\n\r\n private stringify(cell: ExportCell): string {\r\n const value = this.valueOf(cell);\r\n if (value === null || value === undefined) {\r\n return '';\r\n }\r\n if (value instanceof Date) {\r\n return formatDate(value, DATE_MASK, this.locale);\r\n }\r\n return String(this.localize(value));\r\n }\r\n\r\n private download(blob: Blob, fileName: string): void {\r\n const url = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = fileName;\r\n link.click();\r\n URL.revokeObjectURL(url);\r\n }\r\n}\r\n","import {\r\n AfterContentInit, Component, ContentChild,\r\n computed, ContentChildren, Inject, inject, input, linkedSignal, output, QueryList, signal, ViewChild,\r\n ChangeDetectionStrategy\r\n} from '@angular/core';\r\nimport { MatColumnDef, MatFooterRowDef, MatHeaderRowDef, MatNoDataRow, MatRowDef, MatTable } from '@angular/material/table';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { BaseGridColumnComponent } from './columns/base-grid-column.component';\r\nimport { DataGridHeaderComponent } from './components/data-grid-header/data-grid-header.component';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Density } from './models/density-enum';\r\nimport { Preference } from '../services/preference';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { BasePreferenceService } from '../services/base-preference-service';\r\nimport { PREFERENCE_SERVICE_TOKEN } from '../provide-cauca-grid';\r\nimport { ALL_EXPORT_FORMATS, buildExportMatrix, GridExportFormat, GRID_OWNED_COLUMNS } from './models/grid-export';\r\nimport { GridExportService } from '../services/grid-export.service';\r\nimport { ColumnsChangedEvent } from './models/columns-changed-event';\r\n\r\n\r\n@Component({ changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: '' })\r\nexport abstract class BaseDataGridComponent implements AfterContentInit {\r\n public readonly resourceName = input.required<string>();\r\n public readonly displayedColumns = input<string[]>([]);\r\n public readonly showAddButton = input(false);\r\n public readonly disableAddButton = input(false);\r\n public readonly addButtonLabel = input('');\r\n public readonly searchPlaceholder = input('');\r\n public readonly showSearchBar = input(true);\r\n public readonly searchableColumns = input<string[]>();\r\n public readonly showTableOptions = input(false);\r\n public readonly showColumnViewer = input(true);\r\n public readonly showPaginator = input(false);\r\n public readonly hidePageSize = input(false);\r\n public readonly showExpandButton = input(false);\r\n public readonly allowExport = input(false);\r\n public readonly exportFileName = input('');\r\n public readonly exportRows = input<(() => Promise<unknown[]>) | undefined>(undefined);\r\n public readonly exportFormats = input<readonly GridExportFormat[]>(ALL_EXPORT_FORMATS);\r\n public readonly exportTitle = input('');\r\n public readonly canExport = computed(() => this.allowExport());\r\n public readonly addButtonClick = output<void>();\r\n public expandedElement = signal<any>(null);\r\n\r\n @ViewChild(DataGridHeaderComponent) public header!: DataGridHeaderComponent;\r\n @ViewChild(MatTable, { static: true }) public table: MatTable<unknown>;\r\n @ContentChildren(BaseGridColumnComponent) public regularColumns: QueryList<BaseGridColumnComponent>;\r\n @ContentChildren(MatColumnDef) public columnDefs: QueryList<MatColumnDef>;\r\n @ContentChild(MatHeaderRowDef) public headerRowDef: QueryList<MatHeaderRowDef>;\r\n @ContentChild(MatFooterRowDef) public footerRowDef: QueryList<MatFooterRowDef>;\r\n @ContentChildren(MatRowDef) public rowDefs: QueryList<MatRowDef<unknown>>;\r\n @ContentChild(MatNoDataRow) public noDataRow: MatNoDataRow;\r\n @ViewChild(MatPaginator) public paginator: MatPaginator;\r\n\r\n public defaultAddButtonLabel: string = '';\r\n\r\n /**\r\n * Derived from the column inputs, but overwritten when the user picks columns in the table\r\n * options — which is exactly what linkedSignal models. It replaces the ngOnChanges mirroring\r\n * this class used to do (ADR-0003).\r\n */\r\n public readonly allDisplayedColumns = linkedSignal(() => this.computeDisplayedColumns());\r\n public preference: Preference;\r\n\r\n protected sort: MatSort = null;\r\n\r\n private readonly exportService = inject(GridExportService);\r\n\r\n public get density(): typeof Density {\r\n return Density;\r\n }\r\n\r\n public constructor(translateService: TranslateService,\r\n @Inject(PREFERENCE_SERVICE_TOKEN) private preferenceService: BasePreferenceService,) {\r\n this.defaultAddButtonLabel = translateService.instant('dataGrid.defaultAddButtonLabel');\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.setUpPaginator(this.paginator, this.showPaginator());\r\n this.setUpFilterPredicate();\r\n if (this.table && this.regularColumns && this.rowDefs && this.columnDefs) {\r\n this.applyColumns();\r\n }\r\n\r\n if (this.showTableOptions()) {\r\n this.preferenceService.preference.subscribe((preference) => {\r\n this.preference = preference;\r\n });\r\n } else {\r\n this.preference = new Preference();\r\n }\r\n }\r\n\r\n public onExpand(element: any): void {\r\n if (this.expandedElement() === element) {\r\n this.expandedElement.set(null);\r\n } else {\r\n this.expandedElement.set(element);\r\n }\r\n }\r\n\r\n public clearFilter(): void {\r\n this.header?.clearSearchValue();\r\n }\r\n\r\n public renderRows(): void {\r\n this.forceReloadFilter();\r\n this.applyColumns();\r\n this.table.renderRows();\r\n }\r\n\r\n public onDensityChanged(density: Density): void {\r\n this.preferenceService.setPreferenceDensity(density);\r\n }\r\n\r\n public abstract getData(): unknown[];\r\n\r\n /** The rows to export when the caller supplies no `exportRows` provider; may be fetched. */\r\n protected abstract getExportSourceRows(): unknown[] | Promise<unknown[]>;\r\n protected abstract setUpFilterPredicate(): void;\r\n protected abstract setUpSort(sort: MatSort): void;\r\n protected abstract forceReloadFilter(): void;\r\n\r\n protected async onExportRequest(format: GridExportFormat): Promise<void> {\r\n const provider = this.exportRows();\r\n const rows = await (provider ? provider() : this.getExportSourceRows());\r\n const matrix = buildExportMatrix(this.allDisplayedColumns(), this.regularColumns?.toArray() ?? [], rows as Record<string, unknown>[], this.exportTitle());\r\n const fileName = this.exportFileName() || this.resourceName();\r\n\r\n await (format === 'excel'\r\n ? this.exportService.toExcel(matrix, fileName)\r\n : this.exportService.toPdf(matrix, fileName));\r\n }\r\n\r\n /** The set of columns to render, before the user's own column selection is applied. */\r\n protected computeDisplayedColumns(): string[] {\r\n return [...this.displayedColumns()];\r\n }\r\n\r\n protected setUpPaginator(_paginator: MatPaginator, _showPaginator: boolean): void {\r\n // nothing\r\n }\r\n\r\n protected onColumnsChanged({ columns, persist }: ColumnsChangedEvent): void {\r\n this.allDisplayedColumns.set([...columns]);\r\n if (!persist) {\r\n return;\r\n }\r\n const columnsToSave = this.removeMandatoryColumns([...columns]);\r\n this.preferenceService.addOrUpdateGridPreference(this.resourceName(), columnsToSave).subscribe();\r\n }\r\n\r\n protected applyColumns(): void {\r\n this.regularColumns.forEach(dynColumn => this.table.addColumnDef(dynColumn.columnDef));\r\n this.rowDefs.forEach(rowDef => this.table.addRowDef(rowDef));\r\n this.table.setNoDataRow(this.noDataRow);\r\n this.columnDefs.forEach(columnDef => {\r\n this.table.addColumnDef(columnDef);\r\n this.sort.register({ id: columnDef.name, start: 'desc', disableClear: false });\r\n });\r\n }\r\n\r\n private removeMandatoryColumns(columns: string[]): string[] {\r\n return columns.filter(column => !GRID_OWNED_COLUMNS.includes(column));\r\n }\r\n}\r\n","import { CdkConnectedOverlay, CdkOverlayOrigin, STANDARD_DROPDOWN_BELOW_POSITIONS } from '@angular/cdk/overlay';\r\nimport { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\r\nimport { BasicButtonComponent } from '@cauca-911/material';\r\n\r\n@Component({\r\n selector: 'cauca-button-popover',\r\n templateUrl: './button-popover.component.html',\r\n styleUrls: ['./button-popover.component.scss'],\r\n imports: [CdkConnectedOverlay, BasicButtonComponent, CdkOverlayOrigin],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ButtonPopoverComponent {\r\n public buttonLabel = input<string>(null);\r\n public buttonIcon = input<string>('');\r\n public color = input<string>('primary');\r\n\r\n public isActive = signal<boolean>(false);\r\n\r\n protected readonly overlayPositions = STANDARD_DROPDOWN_BELOW_POSITIONS;\r\n\r\n public toggle() {\r\n this.isActive.set(!this.isActive());\r\n }\r\n\r\n public close() {\r\n if (this.isActive()) {\r\n this.isActive.set(false);\r\n }\r\n }\r\n}\r\n","<cauca-basic-button [icon]=\"buttonIcon()\" [color]=\"color()\" [label]=\"buttonLabel()\" [translateLabel]=\"false\" (buttonClick)=\"toggle()\" cdkOverlayOrigin #popoverTrigger=\"cdkOverlayOrigin\" />\r\n\r\n<ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"popoverTrigger\"\r\n [cdkConnectedOverlayOpen]=\"isActive()\"\r\n [cdkConnectedOverlayHasBackdrop]=\"isActive()\"\r\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop-cs'\"\r\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\r\n [cdkConnectedOverlayPush]=\"true\"\r\n [cdkConnectedOverlayViewportMargin]=\"8\"\r\n [cdkConnectedOverlayMinHeight]=\"200\"\r\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\r\n (backdropClick)=\"toggle()\">\r\n <ng-content></ng-content>\r\n</ng-template>\r\n","import { Component, inject, OnInit, QueryList, ViewChild, input, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { Density } from '../../models/density-enum';\r\nimport { BaseGridColumnComponent } from '../../columns/base-grid-column.component';\r\nimport { ButtonPopoverComponent } from '../button-popover/button-popover.component';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { BasicButtonComponent, MenuItemComponent, RaisedButtonComponent, StrokedButtonComponent } from '@cauca-911/material';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { PREFERENCE_SERVICE_TOKEN } from '../../../provide-cauca-grid';\r\nimport { ColumnsChangedEvent } from '../../models/columns-changed-event';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-table-options',\r\n templateUrl: './data-grid-table-options.component.html',\r\n styleUrls: ['./data-grid-table-options.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatCardModule, ButtonPopoverComponent, MatCheckboxModule, StrokedButtonComponent, RaisedButtonComponent, BasicButtonComponent, MatMenuModule, FormsModule, TranslatePipe, MenuItemComponent],\r\n})\r\nexport class DataGridTableOptionsComponent implements OnInit {\r\n public readonly gridName = input.required<string>();\r\n public readonly showColumnViewer = input(true);\r\n public readonly allColumns = input<QueryList<BaseGridColumnComponent>>(new QueryList());\r\n\r\n public readonly densityChanged = output<Density>();\r\n public readonly columnsChanged = output<ColumnsChangedEvent>();\r\n\r\n @ViewChild(ButtonPopoverComponent, { static: true }) public columnViewer: ButtonPopoverComponent;\r\n\r\n public columnsSearch: string = '';\r\n\r\n private readonly preferenceService = inject(PREFERENCE_SERVICE_TOKEN);\r\n\r\n public get density(): typeof Density {\r\n return Density;\r\n }\r\n\r\n public get columns(): BaseGridColumnComponent[] {\r\n return this.allColumns().filter(c => c.prop() !== 'buttons' && c.prop() !== 'menu' && c.prop() !== '' && c.isInColumnChooser());\r\n }\r\n\r\n public get currentDensityIcon(): string {\r\n const currentDensity = this.preferenceService.getPreference()?.gridDensity;\r\n if (currentDensity === Density.Compact) {\r\n return 'density_small';\r\n }\r\n\r\n if (currentDensity === Density.Comfortable) {\r\n return 'density_large';\r\n }\r\n\r\n return 'density_medium';\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.preferenceService.getPreferenceForGrid(this.gridName()).subscribe({\r\n next: configuration => {\r\n if (configuration?.visibleColumns) {\r\n this.selectOnlyUserColumns(configuration.visibleColumns);\r\n } else {\r\n this.selectDefaultColumns();\r\n }\r\n this.onColumnsChanged(false);\r\n }\r\n });\r\n }\r\n\r\n public closeColumnViewer(): void {\r\n if (this.columnViewer) {\r\n this.columnViewer.close();\r\n }\r\n }\r\n\r\n public changeDensity(newDensity: Density): void {\r\n this.densityChanged.emit(newDensity);\r\n }\r\n\r\n public onColumnsChanged(persist = true): void {\r\n const newColumns = this.allColumns().filter(column => column.selected);\r\n this.columnsChanged.emit({ columns: newColumns.map((column) => column.prop()), persist });\r\n }\r\n\r\n public resetColumns(): void {\r\n this.selectDefaultColumns();\r\n this.onColumnsChanged();\r\n }\r\n\r\n public showAllColumns(): void {\r\n this.allColumns().forEach((column => column.selected = true));\r\n this.onColumnsChanged();\r\n }\r\n\r\n private selectOnlyUserColumns(configurationVisibleColumns: string[]): void {\r\n this.allColumns().forEach((column => {\r\n const index = configurationVisibleColumns.findIndex(c => c === column.prop());\r\n if (index === -1 && column.prop() !== 'buttons' && column.prop() !== 'menu' && column.prop() !== '') {\r\n column.selected = false;\r\n }\r\n }));\r\n }\r\n\r\n private selectDefaultColumns(): void {\r\n this.allColumns().forEach((column => {\r\n column.selected = column.visibleByDefault();\r\n }));\r\n }\r\n}\r\n","<div class=\"table-options-bar\">\r\n <div class=\"table-options\">\r\n @if (showColumnViewer()) { <cauca-button-popover [buttonLabel]=\"'dataGrid.columns' | translate\" buttonIcon=\"view_column\">\r\n <mat-card>\r\n <mat-card-content>\r\n <div class=\"columns\">\r\n @for (column of columns; track column) {\r\n <mat-checkbox color=\"primary\" [(ngModel)]=\"column.selected\"\r\n (change)=\"onColumnsChanged()\">\r\n {{column.label()}}\r\n </mat-checkbox>\r\n }\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cauca-stroked-button [small]=\"true\" color=\"primary\" (buttonClick)=\"resetColumns()\" label=\"dataGrid.columnChooser.reset\" [translateLabel]=\"true\" />\r\n <cauca-raised-button [small]=\"true\" color=\"primary\" (buttonClick)=\"showAllColumns()\" label=\"dataGrid.columnChooser.showAll\" [translateLabel]=\"true\" />\r\n </mat-card-actions>\r\n </mat-card>\r\n </cauca-button-popover> }\r\n <cauca-basic-button color=\"primary\" [matMenuTriggerFor]=\"densityMenu\" class=\"open-menu-button\" [icon]=\"currentDensityIcon\" label=\"dataGrid.density.title\" [translateLabel]=\"true\" />\r\n </div>\r\n\r\n <ng-content select=\"[customFilter]\"> </ng-content>\r\n</div>\r\n\r\n<mat-menu #densityMenu=\"matMenu\">\r\n <cauca-menu-item label=\"dataGrid.density.compact\" [translateLabel]=\"true\" icon=\"density_small\" (buttonClick)=\"changeDensity(density.Compact)\" class=\"density-compact\" />\r\n <cauca-menu-item label=\"dataGrid.density.standard\" [translateLabel]=\"true\" icon=\"density_medium\" (buttonClick)=\"changeDensity(density.Standard)\" class=\"density-standard\" />\r\n <cauca-menu-item label=\"dataGrid.density.comfortable\" [translateLabel]=\"true\" icon=\"density_large\" (buttonClick)=\"changeDensity(density.Comfortable)\" class=\"density-comfortable\" />\r\n</mat-menu>","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-progress-spiner',\r\n templateUrl: './data-grid-progress-spiner.component.html',\r\n styleUrls: ['./data-grid-progress-spiner.component.scss'],\r\n imports: [MatProgressSpinnerModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DataGridProgressSpinerComponent {\r\n\r\n public isLoading = input<boolean>(false);\r\n public useBackground = input<boolean>(true);\r\n}\r\n","@if (isLoading()) {\r\n <div class=\"spiner-container\" [class.use-background]=\"useBackground()\">\r\n <mat-progress-spinner\r\n color=\"primary\"\r\n mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </div>\r\n}","import {\r\n AfterContentInit, AfterViewInit, ChangeDetectionStrategy, Component,\r\n ContentChild, effect, inject, input, output,\r\n TemplateRef\r\n} from '@angular/core';\r\nimport { MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRow, MatRowDef, MatTable, MatTableDataSource } from '@angular/material/table';\r\nimport { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { DataGridRowDropEvent } from '../models/data-grid-row-drop-event';\r\nimport { ColumnsChangedEvent } from '../models/columns-changed-event';\r\nimport { toLowerCaseAndWithoutDiacritics } from '@cauca-911/core';\r\nimport { BaseDataGridComponent } from '../base-data-grid.component';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { DataGridHeaderComponent } from '../components/data-grid-header/data-grid-header.component';\r\nimport { DataGridTableOptionsComponent } from '../components/data-grid-table-options/data-grid-table-options.component';\r\nimport { IconButtonComponent } from '@cauca-911/material';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { DataGridProgressSpinerComponent } from '../components/data-grid-progress-spiner/data-grid-progress-spiner.component';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { PREFERENCE_SERVICE_TOKEN } from '../../provide-cauca-grid';\r\nimport { StatusMessageComponent } from '@cauca-911/material';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'cauca-data-grid',\r\n templateUrl: './data-grid.component.html',\r\n styleUrls: ['./data-grid.component.scss'],\r\n imports: [\r\n NgTemplateOutlet, // still needed\r\n // Material Table structure:\r\n MatTable, MatSort, MatColumnDef,\r\n MatHeaderCell, MatHeaderCellDef, MatCellDef,\r\n MatFooterCell, MatFooterCellDef,\r\n MatRow, MatRowDef,\r\n MatHeaderRow, MatHeaderRowDef,\r\n MatFooterRow, MatFooterRowDef,\r\n MatNoDataRow,\r\n // Drag and Drop:\r\n CdkDropList, CdkDrag, CdkDragHandle,\r\n // Material extras:\r\n MatIcon, MatPaginator,\r\n // Custom Components:\r\n DataGridHeaderComponent,\r\n DataGridTableOptionsComponent,\r\n DataGridProgressSpinerComponent,\r\n IconButtonComponent,\r\n StatusMessageComponent\r\n]\r\n})\r\nexport class DataGridComponent extends BaseDataGridComponent implements AfterContentInit, AfterViewInit {\r\n\r\n public readonly data = input<any[]>([]);\r\n public readonly showLoadingError = input(false);\r\n public readonly isLoading = input(false);\r\n public readonly allowReordering = input(false);\r\n public readonly filterPredicate = input<(data: unknown, filter: string) => boolean>();\r\n public readonly showFooter = input(false);\r\n public readonly showHeader = input(true);\r\n public readonly headerColor = input<string | undefined>(undefined);\r\n public readonly showRefreshButton = input(false);\r\n public readonly rowDrop = output<DataGridRowDropEvent>();\r\n public readonly refreshData = output<void>();\r\n @ContentChild(TemplateRef) public rowDetailTemplate!: TemplateRef<any>;\r\n\r\n public dataSource: MatTableDataSource<unknown[]>;\r\n public dragDisabled: boolean = true;\r\n public currentFilter: string = '';\r\n\r\n\r\n public constructor(\r\n translateService: TranslateService,\r\n ) {\r\n super(translateService, inject(PREFERENCE_SERVICE_TOKEN));\r\n this.dataSource = new MatTableDataSource([]);\r\n\r\n // Replaces the ngOnChanges hook that mirrored the `data` input into the datasource.\r\n effect(() => this.setData(this.data()));\r\n }\r\n\r\n public onRefreshData(): void {\r\n this.dataSource.data = [];\r\n this.refreshData.emit();\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.setUpPaginator(this.paginator, this.showPaginator());\r\n }\r\n\r\n public applyFilter(filter: string): void {\r\n if (this.paginator) {\r\n this.paginator.firstPage();\r\n }\r\n this.dataSource.filter = toLowerCaseAndWithoutDiacritics(filter);\r\n }\r\n\r\n public override setUpSort(sort: MatSort): void {\r\n this.sort = sort;\r\n this.dataSource.sort = this.sort;\r\n }\r\n\r\n public override getData(): unknown[] {\r\n return this.dataSource.data;\r\n }\r\n\r\n public getFilteredData(): unknown[] {\r\n return this.dataSource.filteredData;\r\n }\r\n\r\n public refreshDisplayedColumns(columns: string[]): void {\r\n this.onColumnsChanged({ columns, persist: true });\r\n }\r\n\r\n public rowDropped(event: CdkDragDrop<unknown>): void {\r\n const data: unknown[] = this.getData();\r\n const filteredData: any[] = this.getFilteredData();\r\n const fromIndex = data.findIndex((d) => d === filteredData[event.previousIndex]);\r\n const toIndex = data.findIndex((d) => d === filteredData[event.currentIndex]);\r\n if (fromIndex >= 0 && toIndex >= 0) {\r\n moveItemInArray(data, fromIndex, toIndex);\r\n this.renderRows();\r\n this.rowDrop.emit(\r\n new DataGridRowDropEvent({\r\n item: data[fromIndex],\r\n data,\r\n fromIndex,\r\n toIndex,\r\n })\r\n );\r\n }\r\n }\r\n\r\n protected override getExportSourceRows(): unknown[] {\r\n return this.getFilteredData();\r\n }\r\n\r\n protected override setUpPaginator(paginator: MatPaginator, showPaginator: boolean): void {\r\n this.dataSource.paginator = paginator && showPaginator ? paginator : null;\r\n }\r\n\r\n protected override computeDisplayedColumns(): string[] {\r\n return this.decorateColumns(this.displayedColumns());\r\n }\r\n\r\n protected override onColumnsChanged({ columns, persist }: ColumnsChangedEvent): void {\r\n super.onColumnsChanged({ columns, persist });\r\n this.allDisplayedColumns.set(this.decorateColumns(columns));\r\n }\r\n\r\n protected override setUpFilterPredicate(): void {\r\n const filterPredicate = this.filterPredicate();\r\n if (filterPredicate) {\r\n this.dataSource.filterPredicate = filterPredicate;\r\n } else if (this.searchableColumns()?.length > 0) {\r\n this.dataSource.filterPredicate = (data: unknown, filter: string) => {\r\n return this.searchableColumns().some((column) => {\r\n const value = data[column];\r\n return value?.toString().toLowerCaseAndWithoutDiacritics().includes(filter);\r\n });\r\n };\r\n }\r\n }\r\n\r\n protected override forceReloadFilter(): void {\r\n // eslint-disable-next-line no-self-assign\r\n this.dataSource.filter = this.dataSource.filter;\r\n }\r\n\r\n /** `position` and `expand` are grid-owned columns, not part of the caller's list. */\r\n private decorateColumns(columns: string[]): string[] {\r\n let decorated = [...columns];\r\n if (this.allowReordering() && !decorated.includes('position')) {\r\n decorated = ['position', ...decorated];\r\n }\r\n if (this.showExpandButton() && !decorated.includes('expand')) {\r\n decorated = ['expand', ...decorated];\r\n }\r\n return decorated;\r\n }\r\n\r\n private setData(data: any[]): void {\r\n if (!Array.isArray(data)) {\r\n return;\r\n }\r\n this.dataSource.data = data;\r\n setTimeout(() => {\r\n this.table?.setNoDataRow(this.noDataRow);\r\n this.table?.renderRows();\r\n }, 0);\r\n }\r\n}","@if (showHeader()) {\r\n <cauca-data-grid-header [disableAddButton]=\"disableAddButton()\" [showAddButton]=\"showAddButton()\" [addButtonLabel]=\"addButtonLabel() || defaultAddButtonLabel\"\r\n [searchPlaceholder]=\"searchPlaceholder()\" [showSearchBar]=\"showSearchBar()\"\r\n (addButtonClick)=\"addButtonClick.emit($event)\" (filterChange)=\"applyFilter($event)\"\r\n [showRefreshButton]=\"showRefreshButton()\" (refreshRequest)=\"onRefreshData()\"\r\n [showExportMenu]=\"canExport()\" [exportFormats]=\"exportFormats()\" (exportRequest)=\"onExportRequest($event)\">\r\n <ng-content select=\"[filterRow]\" ngProjectAs=\"[filterRow]\" />\r\n <ng-content select=\"[exportItem]\" ngProjectAs=\"[exportItem]\" />\r\n </cauca-data-grid-header>\r\n}\r\n\r\n@if (showTableOptions()) {\r\n <cauca-data-grid-table-options [showColumnViewer]=\"showColumnViewer()\" [gridName]=\"resourceName()\" (densityChanged)=\"onDensityChanged($event)\" (columnsChanged)=\"onColumnsChanged($event)\" [allColumns]=\"regularColumns\">\r\n <ng-content\r\n select=\"[customFilter]\"\r\n ngProjectAs=\"[customFilter]\">\r\n </ng-content>\r\n </cauca-data-grid-table-options>\r\n}\r\n\r\n<table matSort mat-table [dataSource]=\"dataSource\" cdkDropList [cdkDropListData]=\"dataSource\"\r\n (cdkDropListDropped)=\"rowDropped($event)\" aria-describedby=\"Data Grid\" multiTemplateDataRows>\r\n\r\n @if (showExpandButton()) {\r\n <ng-container matColumnDef=\"expand\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <div class=\"align-commands\">\r\n <cauca-icon-button (buttonClick)=\"onExpand(row)\" color=\"primary\" class=\"button-icon\" [icon]=\"row === expandedElement() ? 'keyboard_arrow_up' : 'keyboard_arrow_down'\" />\r\n </div>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n }\r\n\r\n @if (allowReordering()) {\r\n <ng-container matColumnDef=\"position\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell (mousedown)=\"dragDisabled = false\" (mouseup)=\"dragDisabled = true\" *matCellDef=\"let group\">\r\n <mat-icon class=\"reorder-icon\" cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n }\r\n\r\n <ng-content></ng-content>\r\n\r\n <tr class=\"grid-header\" [style.background-color]=\"headerColor()\" mat-header-row *matHeaderRowDef=\"allDisplayedColumns(); sticky: true\"></tr>\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: allDisplayedColumns();\" cdkDrag [cdkDragData]=\"row\"\r\n [cdkDragDisabled]=\"dragDisabled\" (cdkDragReleased)=\"dragDisabled = true\"\r\n [class.compact]=\"preference.gridDensity === density.Compact\" [class.standard]=\"preference.gridDensity === density.Standard\"\r\n [class.comfortable]=\"preference.gridDensity === density.Comfortable\"></tr>\r\n\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td mat-cell *matCellDef=\"let row\" [attr.colspan]=\"allDisplayedColumns().length\">\r\n <div class=\"grid-element-detail-wrapper\" [class.grid-element-detail-wrapper-expanded]=\"row === expandedElement()\">\r\n <div class=\"grid-element-detail\">\r\n @if (row === expandedElement()) {\r\n <template [ngTemplateOutlet]=\"rowDetailTemplate\" [ngTemplateOutletContext]=\"{ row: expandedElement() }\"></template>\r\n }\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"grid-detail-row\"></tr>\r\n\r\n @if (showFooter()) {\r\n <tr mat-footer-row *matFooterRowDef=\"allDisplayedColumns(); sticky: false\"></tr>\r\n }\r\n\r\n @if (!isLoading()) {\r\n <tr class=\"mat-row\" *matNoDataRow>\r\n @if (!showLoadingError() && !isLoading()) {\r\n <td class=\"mat-cell data-grid-message\"\r\n [attr.colspan]=\"allDisplayedColumns().length\">\r\n <cauca-status-message type=\"noData\" />\r\n </td>\r\n }\r\n @if (showLoadingError()) {\r\n <td class=\"mat-cell data-grid-message error-message\" [attr.colspan]=\"allDisplayedColumns().length\">\r\n <cauca-status-message type=\"error\" />\r\n </td>\r\n }\r\n </tr>\r\n }\r\n\r\n</table>\r\n\r\n<cauca-data-grid-progress-spiner [isLoading]=\"isLoading()\" />\r\n\r\n@if (showPaginator()) {\r\n <mat-paginator #paginator [hidePageSize]=\"hidePageSize()\" [pageSizeOptions]=\"[5, 10, 25, 50]\" [pageSize]=\"10\" />\r\n}","import {EventEmitter, Injectable, signal} from \"@angular/core\";\r\nimport {ODataDataSource, ODataFilter} from \"odata-data-source\";\r\nimport {distinctUntilChanged, map, Observable, of, Subscription, tap} from \"rxjs\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport buildQuery, {QueryOptions} from \"odata-query\";\r\n\r\nexport interface Paginator {\r\n pageIndex: number;\r\n pageSize: number;\r\n length: number;\r\n page: EventEmitter<any>;\r\n}\r\n\r\ninterface SingleSort {\r\n active: string;\r\n direction: 'asc' | 'desc' | '';\r\n sortChange: EventEmitter<any>;\r\n}\r\ninterface MultiSort {\r\n sortedBy: {\r\n id: string;\r\n direction: 'asc' | 'desc';\r\n }[];\r\n multiSortChange: EventEmitter<any>;\r\n}\r\n\r\nexport type Sort = SingleSort | MultiSort;\r\n\r\ntype SortedBy = { id: string; direction: 'asc' | 'desc' }[];\r\n\r\nclass ExportableODataDataSource extends ODataDataSource {\r\n private knownCount: number | undefined;\r\n private countedFilterKey = '';\r\n\r\n public constructor(private readonly requestClient: HttpClient, private readonly requestPath: string) {\r\n super(requestClient, requestPath);\r\n }\r\n\r\n public override refresh(): void {\r\n this.knownCount = undefined;\r\n super.refresh();\r\n }\r\n\r\n public fetchAll(sortedBy: SortedBy, filters: ODataFilter[], rowCount: number): Observable<object> {\r\n const livePaginator = this.paginator;\r\n this.paginator = { pageIndex: 0, pageSize: rowCount, length: rowCount, page: new EventEmitter<any>() };\r\n try {\r\n return this.getData(0, sortedBy, filters);\r\n } finally {\r\n this.paginator = livePaginator;\r\n }\r\n }\r\n\r\n protected override getData(page: number, sortedBy: SortedBy, filters: ODataFilter[]): Observable<object> {\r\n const filterKey = (filters ?? []).map(filter => JSON.stringify(filter.getFilter())).join('|');\r\n const mustCount = !this.paginator || page === 0 || this.knownCount === undefined || filterKey !== this.countedFilterKey;\r\n\r\n if (mustCount) {\r\n return super.getData(page, sortedBy, filters).pipe(tap(result => this.rememberCount(result, filterKey)));\r\n }\r\n\r\n const knownCount = this.knownCount;\r\n return this.requestClient\r\n .get<object>(this.requestPath + buildQuery(this.buildQueryWithoutCount(page, sortedBy, filters)))\r\n .pipe(map(result => ({ ...result, '@odata.count': knownCount })));\r\n }\r\n\r\n private rememberCount(result: object, filterKey: string): void {\r\n const count = (result as Record<string, unknown>)['@odata.count'];\r\n if (typeof count === 'number') {\r\n this.knownCount = count;\r\n this.countedFilterKey = filterKey;\r\n }\r\n }\r\n\r\n private buildQueryWithoutCount(page: number, sortedBy: SortedBy, filters: ODataFilter[]): Partial<QueryOptions<unknown>> {\r\n const query: Partial<QueryOptions<unknown>> = {\r\n top: this.paginator.pageSize,\r\n skip: this.paginator.pageSize * page,\r\n };\r\n if (this.selectedFields) {\r\n query.select = this.selectedFields;\r\n }\r\n if (sortedBy?.length) {\r\n query.orderBy = sortedBy.map(sort => `${sort.id} ${sort.direction}`);\r\n } else if (this.initialSort?.length) {\r\n query.orderBy = this.initialSort;\r\n }\r\n if (filters) {\r\n query.filter = { and: filters.map(filter => filter.getFilter()) };\r\n }\r\n if (this.expandedFields) {\r\n query.expand = this.expandedFields;\r\n }\r\n return query;\r\n }\r\n}\r\n\r\ninterface Props {\r\n baseUrl: string;\r\n resourceName: string;\r\n paginator: Paginator\r\n sort?: Sort;\r\n initialSort?: string[];\r\n filters: ODataFilter[]\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OdataListingService<T = any> {\r\n public dataSource: ODataDataSource | null = null;\r\n public error = signal(false);\r\n public loading = signal(false);\r\n private errorSubscription: Subscription | null = null;\r\n private loadingSubscription: Subscription | null = null;\r\n\r\n public get data(): T[] | null {\r\n return this.dataSource?.data ?? null;\r\n }\r\n\r\n public constructor(private readonly httpClient: HttpClient) {}\r\n\r\n public initialize({baseUrl, resourceName, paginator, sort, initialSort, filters}: Props): ODataDataSource {\r\n const newDataSource = new ExportableODataDataSource(this.httpClient, `${baseUrl}odata/${resourceName}`);\r\n\r\n newDataSource.filters = filters;\r\n if (initialSort){\r\n newDataSource.initialSort = initialSort;\r\n }\r\n if (sort) {\r\n newDataSource.sort = sort;\r\n }\r\n newDataSource.paginator = paginator;\r\n this.dataSource = newDataSource;\r\n\r\n this.dataSource.refresh();\r\n this.errorSubscription = this.dataSource.errors.subscribe((errors) => this.error.set(!!errors));\r\n\r\n this.loadingSubscription = this.dataSource.loading\r\n .pipe(distinctUntilChanged())\r\n .subscribe((isLoading: boolean) => {\r\n if (isLoading) {\r\n this.loading.set(false);\r\n }\r\n this.loading.set(isLoading);\r\n });\r\n\r\n return newDataSource;\r\n }\r\n\r\n public fetchAllForExport(maxRows: number): Observable<T[]> {\r\n const dataSource = this.dataSource as ExportableODataDataSource | null;\r\n if (!dataSource) {\r\n return of([]);\r\n }\r\n\r\n const total = dataSource.paginator?.length ?? 0;\r\n const rowCount = total > 0 ? Math.min(total, maxRows) : maxRows;\r\n\r\n return dataSource\r\n .fetchAll(this.sortedBy(), dataSource.filters ?? [], rowCount)\r\n .pipe(map(result => (dataSource.mapResult(result) ?? []) as T[]));\r\n }\r\n\r\n public updateFilters(filters: ODataFilter[]) {\r\n if (this.dataSource) {\r\n this.dataSource.filters = filters;\r\n }\r\n }\r\n\r\n public forceReloadFilter() {\r\n if (this.dataSource) {\r\n // eslint-disable-next-line no-self-assign\r\n this.dataSource.filters = this.dataSource.filters;\r\n }\r\n }\r\n\r\n public isInitialized() {\r\n return this.dataSource !== null;\r\n }\r\n\r\n public refresh() {\r\n this.dataSource?.refresh();\r\n }\r\n\r\n public destroy() {\r\n this.errorSubscription?.unsubscribe();\r\n this.loadingSubscription?.unsubscribe();\r\n }\r\n\r\n /** Mirrors how ODataDataSource reads the active sort, single or multi. */\r\n private sortedBy(): SortedBy {\r\n const sort = this.dataSource?.sort;\r\n if (!sort) {\r\n return [];\r\n }\r\n if ('multiSortChange' in sort) {\r\n return sort.sortedBy ?? [];\r\n }\r\n if (sort.active && sort.direction) {\r\n return [{ id: sort.active, direction: sort.direction as 'asc' | 'desc' }];\r\n }\r\n return [];\r\n }\r\n}\r\n","import { ParamMap, Params } from '@angular/router';\r\n\r\nexport interface GridUrlState {\r\n filter?: string;\r\n sort?: string;\r\n direction?: 'asc' | 'desc' | '';\r\n pageIndex?: number;\r\n pageSize?: number;\r\n}\r\n\r\nconst PARAM_BASE_NAMES = {\r\n filter: 'filter',\r\n sort: 'sort',\r\n direction: 'dir',\r\n pageIndex: 'page',\r\n pageSize: 'size',\r\n} as const;\r\n\r\n/**\r\n * Builds the query param name for a given base name and optional grid state key.\r\n * With a key, the scheme is `<key><CapitalizedBaseName>` (e.g. key \"alerts\" + base \"filter\" -> \"alertsFilter\").\r\n * Without a key, the plain base name is used (e.g. \"filter\").\r\n */\r\nfunction paramName(baseName: string, key: string): string {\r\n if (!key) {\r\n return baseName;\r\n }\r\n return `${key}${baseName.charAt(0).toUpperCase()}${baseName.slice(1)}`;\r\n}\r\n\r\nexport function toQueryParams(state: GridUrlState, key: string = ''): Params {\r\n const params: Params = {};\r\n\r\n if (state.filter) {\r\n params[paramName(PARAM_BASE_NAMES.filter, key)] = state.filter;\r\n }\r\n if (state.sort) {\r\n params[paramName(PARAM_BASE_NAMES.sort, key)] = state.sort;\r\n }\r\n if (state.direction) {\r\n params[paramName(PARAM_BASE_NAMES.direction, key)] = state.direction;\r\n }\r\n if (state.pageIndex) {\r\n params[paramName(PARAM_BASE_NAMES.pageIndex, key)] = state.pageIndex;\r\n }\r\n if (state.pageSize) {\r\n params[paramName(PARAM_BASE_NAMES.pageSize, key)] = state.pageSize;\r\n }\r\n\r\n return params;\r\n}\r\n\r\nexport function fromQueryParams(map: ParamMap, key: string = ''): GridUrlState {\r\n const state: GridUrlState = {};\r\n\r\n const filter = map.get(paramName(PARAM_BASE_NAMES.filter, key));\r\n if (filter) {\r\n state.filter = filter;\r\n }\r\n\r\n const sort = map.get(paramName(PARAM_BASE_NAMES.sort, key));\r\n if (sort) {\r\n state.sort = sort;\r\n }\r\n\r\n const direction = map.get(paramName(PARAM_BASE_NAMES.direction, key));\r\n if (direction === 'asc' || direction === 'desc') {\r\n state.direction = direction;\r\n }\r\n\r\n const pageIndex = parsePositiveInteger(map.get(paramName(PARAM_BASE_NAMES.pageIndex, key)));\r\n if (pageIndex !== undefined) {\r\n state.pageIndex = pageIndex;\r\n }\r\n\r\n const pageSize = parsePositiveInteger(map.get(paramName(PARAM_BASE_NAMES.pageSize, key)));\r\n if (pageSize !== undefined) {\r\n state.pageSize = pageSize;\r\n }\r\n\r\n return state;\r\n}\r\n\r\n/**\r\n * Returns a Params object with every grid-state param name mapped to `null` for the given key.\r\n * Combined with `queryParamsHandling: 'merge'`, this lets the grid explicitly clear stale\r\n * params (e.g. a previously-set filter) instead of leaving them stuck in the URL.\r\n */\r\nexport function emptyQueryParams(key: string = ''): Params {\r\n const params: Params = {};\r\n Object.values(PARAM_BASE_NAMES).forEach((baseName) => {\r\n params[paramName(baseName, key)] = null;\r\n });\r\n return params;\r\n}\r\n\r\nexport function paramsEqual(a: Params, b: Params): boolean {\r\n const aKeys = Object.keys(a).filter((paramKey) => a[paramKey] !== null && a[paramKey] !== undefined);\r\n const bKeys = Object.keys(b).filter((paramKey) => b[paramKey] !== null && b[paramKey] !== undefined);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n return aKeys.every((paramKey) => String(a[paramKey]) === String(b[paramKey]));\r\n}\r\n\r\nfunction parsePositiveInteger(value: string | null): number | undefined {\r\n if (!value) {\r\n return undefined;\r\n }\r\n const parsed = Number(value);\r\n if (Number.isNaN(parsed) || parsed < 0) {\r\n return undefined;\r\n }\r\n return parsed;\r\n}\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ContentChild, DestroyRef, EventEmitter, inject, input, OnDestroy, output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ODataFilter } from 'odata-data-source';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { ActivatedRoute, ParamMap, Params, Router } from '@angular/router';\r\nimport { BaseDataGridComponent } from '../base-data-grid.component';\r\nimport { CaucaCoreService, toLowerCaseAndWithoutDiacritics } from '@cauca-911/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { OdataListingService } from \"./odata-listing.service\";\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { MatTable, MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatRow, MatRowDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatCell, MatCellDef } from '@angular/material/table';\r\nimport { IconButtonComponent, StatusMessageComponent } from '@cauca-911/material';\r\nimport { DataGridHeaderComponent } from '../components/data-grid-header/data-grid-header.component';\r\nimport { DataGridProgressSpinerComponent } from '../components/data-grid-progress-spiner/data-grid-progress-spiner.component';\r\nimport { DataGridTableOptionsComponent } from '../components/data-grid-table-options/data-grid-table-options.component';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { PREFERENCE_SERVICE_TOKEN } from '../../provide-cauca-grid';\r\nimport { emptyQueryParams, fromQueryParams, GridUrlState, paramsEqual, toQueryParams } from './grid-url-state';\r\nimport { ColumnsChangedEvent } from '../models/columns-changed-event';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'cauca-odata-grid',\r\n templateUrl: './odata-grid.component.html',\r\n styleUrls: ['./odata-grid.component.scss'],\r\n providers: [OdataListingService],\r\n /**\r\n * The template gives clickable rows a pointer cursor only when the consumer actually listens\r\n * for itemClick, which needs EventEmitter.observers — a count OutputEmitterRef does not\r\n * expose. Declared here so the property stays an EventEmitter without an @Output decorator.\r\n * See ADR-0003.\r\n */\r\n // eslint-disable-next-line @angular-eslint/no-outputs-metadata-property\r\n outputs: ['itemClick'],\r\n imports: [\r\n NgTemplateOutlet,\r\n // Material table structure:\r\n MatTable, MatColumnDef,\r\n MatHeaderCell, MatHeaderCellDef, MatCell, MatCellDef,\r\n MatHeaderRow, MatHeaderRowDef,\r\n MatRow, MatRowDef, MatNoDataRow,\r\n // Material extras\r\n MatPaginator,\r\n // custom components\r\n DataGridHeaderComponent,\r\n DataGridTableOptionsComponent,\r\n IconButtonComponent,\r\n DataGridProgressSpinerComponent,\r\n StatusMessageComponent,\r\n ]\r\n})\r\nexport class OdataGridComponent extends BaseDataGridComponent implements OnDestroy, AfterViewInit {\r\n\r\n public showTableHeader = input(true);\r\n /** Master switch: when true, the grid's filter/sort/page are synced with the URL query params and restored when returning from a detail page. Off by default. */\r\n public persistState = input(false);\r\n /** Optional prefix for the persisted query params, so two independent grids on the same route don't collide (e.g. \"alerts\" -> \"alertsFilter\"). */\r\n public stateKey = input('');\r\n public readonly baseSort = input<string[]>();\r\n public readonly filterPredicate = input<(filter: string) => ODataFilter[]>();\r\n public readonly showHeader = input(true);\r\n public readonly selectedRowId = input<any>();\r\n public readonly idField = input('id');\r\n public readonly showRefreshButton = input(false);\r\n public readonly maxExportRows = input(5000);\r\n public readonly itemClick = new EventEmitter<any>();\r\n public readonly refreshRequested = output<void>();\r\n @ContentChild(TemplateRef) public rowDetailTemplate!: TemplateRef<any>;\r\n @ViewChild(MatPaginator, {static: true}) public paginator!: MatPaginator;\r\n\r\n private readonly baseUrl = inject(CaucaCoreService).getConfig().apiUrl;\r\n private readonly router = inject(Router, { optional: true });\r\n private readonly route = inject(ActivatedRoute, { optional: true });\r\n private readonly destroyRef = inject(DestroyRef);\r\n private defaultPageSize?: number;\r\n private pendingRestoredFilter?: string;\r\n private lastWrittenParams: Params = {};\r\n private restoredState?: GridUrlState;\r\n\r\n public constructor(\r\n translateService: TranslateService,\r\n public readonly listing: OdataListingService,\r\n ) {\r\n super(translateService, inject(PREFERENCE_SERVICE_TOKEN));\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.listing.destroy();\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n if (!this.canPersistState() || !this.header) {\r\n return;\r\n }\r\n\r\n if (this.pendingRestoredFilter !== undefined) {\r\n this.header.filterControl.setValue(this.pendingRestoredFilter, { emitEvent: false });\r\n this.header.showClearButton.set(!!this.pendingRestoredFilter);\r\n }\r\n\r\n outputToObservable(this.header.filterChange)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.writeCurrentUrlState());\r\n\r\n if (this.restoredState && this.hasRestoredState(this.restoredState)) {\r\n // The initial fetch triggered during ngAfterContentInit (setUpFilterPredicate) can run\r\n // before the paginator/sort are fully wired to the table, so it may go out with default\r\n // skip/orderby/filter. Re-applying the restored state here and forcing a reload once the\r\n // view is fully initialized mirrors the warm-navigation path and guarantees the first\r\n // real fetch reflects the restored filter/sort/page on a cold (browser refresh) load.\r\n this.applyUrlStateToGrid(this.restoredState);\r\n }\r\n }\r\n\r\n public refreshData(): void {\r\n this.listing.refresh();\r\n this.refreshRequested.emit();\r\n }\r\n\r\n public getData(): unknown[] {\r\n return this.listing.data;\r\n }\r\n\r\n public applyFilter(filter: string): void {\r\n this.applyFilterValue(filter, { resetPage: true });\r\n }\r\n\r\n public refreshFilter(): void {\r\n this.applyFilterValue(this.header?.filterControl?.value, { resetPage: true });\r\n }\r\n\r\n public override setUpFilterPredicate(): void {\r\n let filters = this.filterPredicate()?.('') ?? [];\r\n\r\n if (this.canPersistState()) {\r\n filters = this.restoreStateBeforeInitialLoad() ?? filters;\r\n }\r\n\r\n this.listing.initialize({\r\n baseUrl: this.baseUrl,\r\n resourceName: this.resourceName(),\r\n paginator: this.paginator,\r\n sort: this.sort,\r\n initialSort: this.baseSort(),\r\n filters,\r\n });\r\n\r\n if (this.canPersistState()) {\r\n this.setUpUrlStatePersistence();\r\n }\r\n }\r\n\r\n public override setUpSort(sort: MatSort): void {\r\n this.sort = sort;\r\n }\r\n\r\n protected override getExportSourceRows(): Promise<unknown[]> {\r\n return firstValueFrom(this.listing.fetchAllForExport(this.maxExportRows()));\r\n }\r\n\r\n protected override forceReloadFilter(): void {\r\n this.listing.forceReloadFilter();\r\n }\r\n\r\n protected override computeDisplayedColumns(): string[] {\r\n return this.decorateColumns(this.displayedColumns());\r\n }\r\n\r\n protected override onColumnsChanged({ columns, persist }: ColumnsChangedEvent): void {\r\n super.onColumnsChanged({ columns: this.decorateColumns(columns), persist });\r\n }\r\n\r\n private applyFilterValue(filter: string | null | undefined, { resetPage }: { resetPage: boolean }): void {\r\n const filterPredicate = this.filterPredicate();\r\n if (!filterPredicate) {\r\n return;\r\n }\r\n\r\n if (resetPage) {\r\n this.paginator?.firstPage();\r\n }\r\n\r\n this.listing.updateFilters(filterPredicate(toLowerCaseAndWithoutDiacritics(filter)));\r\n }\r\n\r\n /** `expand` is a grid-owned column, not part of the caller's list. */\r\n private decorateColumns(columns: string[]): string[] {\r\n return this.showExpandButton() && !columns.includes('expand')\r\n ? ['expand', ...columns]\r\n : [...columns];\r\n }\r\n\r\n private canPersistState(): boolean {\r\n return this.persistState() && !!this.router && !!this.route;\r\n }\r\n\r\n private restoreStateBeforeInitialLoad(): ODataFilter[] | undefined {\r\n this.defaultPageSize = this.paginator?.pageSize;\r\n const restoredState = fromQueryParams(this.route.snapshot.queryParamMap, this.stateKey());\r\n this.applySortAndPage(restoredState);\r\n this.pendingRestoredFilter = restoredState.filter;\r\n this.restoredState = restoredState;\r\n\r\n const filterPredicate = this.filterPredicate();\r\n if (restoredState.filter === undefined || !filterPredicate) {\r\n return undefined;\r\n }\r\n return filterPredicate(toLowerCaseAndWithoutDiacritics(restoredState.filter));\r\n }\r\n\r\n private setUpUrlStatePersistence(): void {\r\n this.lastWrittenParams = toQueryParams(fromQueryParams(this.route.snapshot.queryParamMap, this.stateKey()), this.stateKey());\r\n\r\n this.sort?.sortChange\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.writeCurrentUrlState());\r\n\r\n this.paginator?.page\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.writeCurrentUrlState());\r\n\r\n this.route.queryParamMap\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((paramMap) => this.reactToExternalUrlStateChange(paramMap));\r\n }\r\n\r\n private applySortAndPage(state: GridUrlState): void {\r\n if (state.sort && this.sort) {\r\n this.sort.active = state.sort;\r\n this.sort.direction = state.direction ?? '';\r\n }\r\n if (this.paginator) {\r\n if (state.pageIndex !== undefined) {\r\n this.paginator.pageIndex = state.pageIndex;\r\n }\r\n if (state.pageSize !== undefined) {\r\n this.paginator.pageSize = state.pageSize;\r\n }\r\n }\r\n }\r\n\r\n private currentUrlState(): GridUrlState {\r\n const pageSize = this.paginator?.pageSize;\r\n return {\r\n filter: this.header?.filterControl.value || undefined,\r\n sort: this.sort?.active || undefined,\r\n direction: this.sort?.direction || undefined,\r\n pageIndex: this.paginator?.pageIndex,\r\n pageSize: pageSize !== undefined && pageSize !== this.defaultPageSize ? pageSize : undefined,\r\n };\r\n }\r\n\r\n private writeCurrentUrlState(): void {\r\n const params = toQueryParams(this.currentUrlState(), this.stateKey());\r\n if (paramsEqual(params, this.lastWrittenParams)) {\r\n return;\r\n }\r\n this.lastWrittenParams = params;\r\n this.router.navigate([], {\r\n relativeTo: this.route,\r\n queryParams: { ...emptyQueryParams(this.stateKey()), ...params },\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true,\r\n });\r\n }\r\n\r\n private reactToExternalUrlStateChange(paramMap: ParamMap): void {\r\n const state = fromQueryParams(paramMap, this.stateKey());\r\n const params = toQueryParams(state, this.stateKey());\r\n if (paramsEqual(params, this.lastWrittenParams)) {\r\n return;\r\n }\r\n this.lastWrittenParams = params;\r\n this.applyUrlStateToGrid(state);\r\n }\r\n\r\n private applyUrlStateToGrid(state: GridUrlState): void {\r\n this.applySortAndPage(state);\r\n\r\n if (this.header) {\r\n this.header.filterControl.setValue(state.filter ?? '', { emitEvent: false });\r\n this.header.showClearButton.set(!!state.filter);\r\n }\r\n\r\n if (this.filterPredicate()) {\r\n this.applyFilterValue(this.header?.filterControl?.value, { resetPage: false });\r\n } else {\r\n this.listing.forceReloadFilter();\r\n }\r\n }\r\n\r\n private hasRestoredState(state: GridUrlState): boolean {\r\n return state.filter !== undefined || state.sort !== undefined || state.pageIndex !== undefined || state.pageSize !== undefined;\r\n }\r\n}\r\n","@if (showHeader()) {\r\n <cauca-data-grid-header\r\n [disableAddButton]=\"disableAddButton()\"\r\n [showRefreshButton]=\"showRefreshButton()\" (refreshRequest)=\"refreshData()\"\r\n [showExportMenu]=\"canExport()\" [exportFormats]=\"exportFormats()\" (exportRequest)=\"onExportRequest($event)\"\r\n [showAddButton]=\"showAddButton()\"\r\n [addButtonLabel]=\"addButtonLabel() || defaultAddButtonLabel\"\r\n [searchPlaceholder]=\"searchPlaceholder()\"\r\n [showSearchBar]=\"showSearchBar()\"\r\n (addButtonClick)=\"addButtonClick.emit($event)\" (filterChange)=\"applyFilter($event)\">\r\n <ng-content select=\"[filterRow]\" ngProjectAs=\"[filterRow]\" />\r\n <ng-content select=\"[exportItem]\" ngProjectAs=\"[exportItem]\" />\r\n </cauca-data-grid-header>\r\n}\r\n\r\n<ng-content select=\"[customHeader]\" ngProjectAs=\"[customHeader]\" />\r\n\r\n@if (showTableOptions()) {\r\n <cauca-data-grid-table-options [showColumnViewer]=\"showColumnViewer()\" [gridName]=\"resourceName()\" (densityChanged)=\"onDensityChanged($event)\" (columnsChanged)=\"onColumnsChanged($event)\" [allColumns]=\"regularColumns\">\r\n <ng-content select=\"[customFilter]\" ngProjectAs=\"[customFilter]\" />\r\n </cauca-data-grid-table-options>\r\n}\r\n\r\n<div class=\"relative\">\r\n <table mat-table [dataSource]=\"listing.dataSource\" aria-describedby=\"Data Grid\" multiTemplateDataRows>\r\n @if (showExpandButton()) {\r\n <ng-container matColumnDef=\"expand\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <div class=\"align-commands\">\r\n <cauca-icon-button (buttonClick)=\"onExpand(row)\" color=\"primary\" class=\"button-icon\" [icon]=\"row === expandedElement() ? 'keyboard_arrow_up' : 'keyboard_arrow_down'\" />\r\n </div>\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n <ng-content></ng-content>\r\n @if(showTableHeader()) {\r\n <tr mat-header-row *matHeaderRowDef=\"allDisplayedColumns(); sticky: true\"></tr>\r\n }\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: allDisplayedColumns()\"\r\n [class.showClick]=\"itemClick.observers.length > 0\"\r\n [class.compact]=\"preference.gridDensity === density.Compact\"\r\n [class.standard]=\"preference.gridDensity === density.Standard\"\r\n [class.comfortable]=\"preference.gridDensity === density.Comfortable\"\r\n [class.selected]=\"selectedRowId() === row[idField()]\"\r\n (click)=\"itemClick.emit(row)\"\r\n onkeypress=\"itemClick.emit(row)\">\r\n </tr>\r\n\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td mat-cell *matCellDef=\"let row\" [attr.colspan]=\"allDisplayedColumns().length\">\r\n <div class=\"grid-element-detail-wrapper\" [class.grid-element-detail-wrapper-expanded]=\"row === expandedElement()\">\r\n <div class=\"grid-element-detail\">\r\n @if (row === expandedElement()) {\r\n <template [ngTemplateOutlet]=\"rowDetailTemplate\" [ngTemplateOutletContext]=\"{ row: expandedElement() }\"></template>\r\n }\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"grid-detail-row\"></tr>\r\n\r\n <ng-container *matNoDataRow>\r\n @if(listing.loading() === false) {\r\n <ng-container>\r\n <tr class=\"mat-row\">\r\n @if (listing.error() === false) {\r\n <th class=\"mat-cell data-grid-message\"\r\n [attr.colspan]=\"allDisplayedColumns().length\">\r\n <cauca-status-message type=\"noData\" />\r\n </th>\r\n } @else {\r\n <th class=\"mat-cell data-grid-message\"\r\n [attr.colspan]=\"allDisplayedColumns().length\">\r\n <cauca-status-message type=\"error\" />\r\n </th>\r\n }\r\n </tr>\r\n </ng-container>\r\n }\r\n </ng-container>\r\n </table>\r\n\r\n <cauca-data-grid-progress-spiner [useBackground]=\"false\" [isLoading]=\"listing.loading()\" />\r\n\r\n</div>\r\n\r\n<mat-paginator [hidePageSize]=\"hidePageSize()\" [pageSizeOptions]=\"[5, 10, 25, 50]\" [pageSize]=\"10\" />\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { NavigationEnd, Params, Router } from '@angular/router';\r\nimport { filter } from 'rxjs';\r\n\r\n/**\r\n * Re-injects a list page's remembered grid query params (filter/sort/page, written by\r\n * `OdataGridComponent` when `persistState` is enabled) when the user navigates back to that\r\n * list page from one of its own descendant (detail) routes. Any other way of reaching the\r\n * list page (menu, bookmark, direct link, refresh) leaves it clean, because the previous URL\r\n * won't be a descendant of the list path.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GridStateRestorationService {\r\n private readonly router = inject(Router);\r\n private readonly rememberedParamsByPath = new Map<string, Params>();\r\n private previousPath: string | null = null;\r\n\r\n public constructor() {\r\n this.router.events\r\n .pipe(filter((event): event is NavigationEnd => event instanceof NavigationEnd))\r\n .subscribe((event) => this.onNavigationEnd(event));\r\n }\r\n\r\n private onNavigationEnd(event: NavigationEnd): void {\r\n const currentPath = this.pathOnly(event.urlAfterRedirects);\r\n const currentParams = this.parseParams(event.urlAfterRedirects);\r\n const previousPath = this.previousPath;\r\n this.previousPath = currentPath;\r\n\r\n if (Object.keys(currentParams).length > 0) {\r\n this.rememberedParamsByPath.set(currentPath, currentParams);\r\n return;\r\n }\r\n if (this.restoreIfReturningFromDescendant(currentPath, previousPath)) {\r\n return;\r\n }\r\n this.rememberedParamsByPath.delete(currentPath);\r\n }\r\n\r\n private restoreIfReturningFromDescendant(currentPath: string, previousPath: string | null): boolean {\r\n if (!previousPath || !previousPath.startsWith(`${currentPath}/`)) {\r\n return false;\r\n }\r\n\r\n const remembered = this.rememberedParamsByPath.get(currentPath);\r\n if (!remembered) {\r\n return false;\r\n }\r\n\r\n this.router.navigate([currentPath], { queryParams: remembered, replaceUrl: true });\r\n return true;\r\n }\r\n\r\n private pathOnly(url: string): string {\r\n return url.split('?')[0].split('#')[0];\r\n }\r\n\r\n private parseParams(url: string): Params {\r\n const queryString = url.split('?')[1]?.split('#')[0];\r\n if (!queryString) {\r\n return {};\r\n }\r\n\r\n const params: Params = {};\r\n new URLSearchParams(queryString).forEach((value, key) => {\r\n params[key] = value;\r\n });\r\n return params;\r\n }\r\n}\r\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\r\nimport { GridStateRestorationService } from './grid-state-restoration.service';\r\n\r\n/**\r\n * Activates the grid list-state restoration feature for the whole application. Add this once\r\n * in the app's root providers; it has no effect on pages whose grids don't opt in via\r\n * `[persistState]=\"true\"`.\r\n */\r\nexport function provideGridStateRestoration(): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n provideAppInitializer(() => {\r\n inject(GridStateRestorationService);\r\n }),\r\n ]);\r\n}\r\n","import { ChangeDetectionStrategy, Component, forwardRef, OnDestroy, OnInit, Optional, ViewEncapsulation } from '@angular/core';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { BaseGridColumnComponent, ExportCell } from '../base-grid-column.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cauca-color-data-grid-column',\r\n standalone: true,\r\n imports: [\r\n MatColumnDef,\r\n MatHeaderCell, MatHeaderCellDef, NgStyle,\r\n MatCell, MatCellDef,\r\n MatFooterCellDef, MatFooterCellDef\r\n ],\r\n templateUrl: './color-data-grid-column.component.html',\r\n styleUrl: './color-data-grid-column.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => ColorDataGridColumnComponent) }],\r\n})\r\nexport class ColorDataGridColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n\r\n public override getExportValue(row: Record<string, unknown>): ExportCell {\r\n return { value: null, fillColor: (row[this.prop()] as string | undefined) ?? 'transparent' };\r\n }\r\n\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n\r\n <th mat-header-cell *matHeaderCellDef [ngStyle]=\"{'width': width()}\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let row\">\r\n @if (row[prop()]) {\r\n <div class=\"color-capsule\" [style.backgroundColor]=\"row[prop()]\"></div>\r\n }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n\r\n</ng-container>","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'cauca-check-icon',\r\n template: `\r\n <mat-icon\r\n class=\"check-icon\"\r\n [class.check-mark]=\"checkMark()\"\r\n [class.check]=\"check()\"\r\n [class.uncheck]=\"uncheck()\"\r\n aria-hidden=\"false\"\r\n aria-label=\"State icon\"\r\n [fontIcon]=\"icon()\" />\r\n `,\r\n styleUrls: ['./check-icon.component.scss'],\r\n imports: [MatIcon],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CheckIconComponent {\r\n public checkIcon = input<string>('check');\r\n public uncheckIcon = input<string>('block');\r\n public isChecked = input<boolean>(false);\r\n\r\n public icon = computed(() => (this.isChecked() ? this.checkIcon() : this.uncheckIcon()));\r\n public checkMark = computed(() => this.isChecked() && this.checkIcon() === 'check');\r\n public check = computed(() => this.isChecked() && this.checkIcon() !== 'check');\r\n public uncheck = computed(() => !this.isChecked());\r\n}\r\n","import { Component, OnDestroy, OnInit, Optional, forwardRef, input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { CheckIconComponent } from '../../components/check-icon/check-icon.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-check-column',\r\n templateUrl: './data-grid-check-column.component.html',\r\n styleUrls: ['./data-grid-check-column.component.scss'],\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => DataGridCheckColumnComponent) }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CheckIconComponent, MatColumnDef, MatHeaderCell, MatHeaderCellDef, NgStyle, MatCell, MatCellDef, MatFooterCell, MatFooterCellDef]\r\n})\r\nexport class DataGridCheckColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n public readonly checkIcon = input('check');\r\n public readonly uncheckIcon = input('block');\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n <th mat-header-cell *matHeaderCellDef [ngStyle]=\"{'width': width(), 'text-align': 'center'}\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <cauca-check-icon [checkIcon]=\"checkIcon()\" [uncheckIcon]=\"uncheckIcon()\" [isChecked]=\"row[prop()]\" />\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, Optional, ViewEncapsulation, forwardRef, input } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { NgStyle } from '@angular/common';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-column',\r\n templateUrl: './data-grid-column.component.html',\r\n styleUrls: ['./data-grid-column.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => DataGridColumnComponent) }],\r\n imports: [MatColumnDef, MatHeaderCell, MatHeaderCellDef, NgStyle, MatCell, MatCellDef, MatTooltip, MatFooterCell, MatFooterCellDef]\r\n})\r\nexport class DataGridColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public summaryType = input<'none'|'sum'|'count'>('none');\r\n public summaryLabel = input<string>('');\r\n public format = input<'none'|'phone'>('none');\r\n public isInitialized = false;\r\n private readonly grid = null;\r\n\r\n public constructor (@Optional() odata: OdataGridComponent, @Optional() grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n this.grid = grid??odata;\r\n this.isInitialized = true;\r\n }\r\n\r\n public calculateSummary(): string {\r\n const rows = this.grid?.data?.();\r\n if (this.isInitialized && rows) {\r\n if (this.summaryType() === 'sum') {\r\n return this.summaryLabel() + rows.reduce((acc, row) => acc + row[this.prop()], 0) + this.summaryLabel();\r\n }\r\n if (this.summaryType() === 'count') {\r\n return rows.length + this.summaryLabel();\r\n }\r\n }\r\n return '';\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n\r\n <th mat-header-cell *matHeaderCellDef [ngStyle]=\"{'width': width()}\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let row\">\r\n @if (showToolTip()) {<span [matTooltip]=\"row[prop()]\" >{{ row[prop()] }}</span>}\r\n @else { <span>{{ row[prop()] }}</span>}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (isInitialized) {\r\n {{calculateSummary()}}\r\n }\r\n </td>\r\n\r\n</ng-container>","import { Component, OnDestroy, OnInit, Optional, forwardRef, input, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { MatSortHeader } from '@angular/material/sort';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { IconButtonComponent } from '@cauca-911/material';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-command-icon-column',\r\n templateUrl: './data-grid-command-icon-column.component.html',\r\n styleUrls: ['./data-grid-command-icon-column.component.scss'],\r\n providers: [{ provide: BaseGridColumnComponent, useExisting: forwardRef(() => DataGridCommandIconColumnComponent) }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatColumnDef, MatHeaderCell, MatSortHeader, MatHeaderCellDef, MatIcon, MatCell, MatCellDef, IconButtonComponent, MatFooterCell, MatFooterCellDef ]\r\n})\r\nexport class DataGridCommandIconColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n public readonly checkColor = input('#F8B132');\r\n public readonly checkIcon = input('star');\r\n public readonly uncheckIcon = input('star_outline');\r\n public readonly uncheckColor = input('default');\r\n\r\n public readonly commandClick = output<unknown>();\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n <th mat-header-cell mat-sort-header *matHeaderCellDef>\r\n <div>\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <mat-icon [style.color]=\"uncheckColor()\" aria-hidden=\"false\" aria-label=\"State icon\" [fontIcon]=\"uncheckIcon()\" />\r\n }\r\n </div>\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <div>\r\n <cauca-icon-button (buttonClick)=\"commandClick.emit(row)\" [icon]=\"row[prop()] ? checkIcon() : uncheckIcon()\" [color]=\"row[prop()] ? checkColor() : uncheckColor()\" />\r\n </div>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","import { ChangeDetectionStrategy, Component, ContentChild, OnDestroy, OnInit, Optional, TemplateRef, ViewEncapsulation, forwardRef, input, output } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { IconButtonComponent } from '@cauca-911/material';\r\nimport { NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { RouterLink } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-commands-column',\r\n templateUrl: './data-grid-commands-column.component.html',\r\n styleUrls: ['./data-grid-commands-column.component.scss'],\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => DataGridCommandsColumnComponent) }],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatCell, MatCellDef, IconButtonComponent, NgTemplateOutlet, MatFooterCell, MatFooterCellDef, NgStyle, RouterLink]\r\n})\r\nexport class DataGridCommandsColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public readonly canDelete = input(false);\r\n public readonly canEdit = input(false);\r\n public readonly canDuplicate = input(false);\r\n public readonly editLinkField = input<string>();\r\n\r\n @ContentChild(TemplateRef) public menuTemplate: TemplateRef<any>;\r\n\r\n public readonly deleteClick = output<unknown>();\r\n public readonly editClick = output<unknown>();\r\n public readonly duplicateClick = output<unknown>();\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n}\r\n","<ng-container matColumnDef=\"buttons\">\r\n <th mat-header-cell *matHeaderCellDef [ngStyle]=\"{'width': width()}\"> {{ label() }} </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n\r\n <div class=\"align-commands\">\r\n\r\n @if (canEdit()) { <cauca-icon-button colorOnHover=\"var(--primary)\" color=\"grey\" icon=\"edit\" [routerLink]=\"editLinkField() ? [row[editLinkField()]] : null\" (buttonClick)=\"editClick?.emit(row)\" class=\"edit-button\" /> }\r\n\r\n @if (canDuplicate()) { <cauca-icon-button color=\"grey\" icon=\"content_copy\" (buttonClick)=\"duplicateClick?.emit(row)\" class=\"duplicate-button\" /> }\r\n\r\n @if (canDelete()) { <cauca-icon-button colorOnHover=\"var(--warn)\" color=\"grey\" icon=\"close\" (buttonClick)=\"deleteClick?.emit(row)\" class=\"delete-button\" /> }\r\n\r\n <template [ngTemplateOutlet]=\"menuTemplate\" [ngTemplateOutletContext]=\"{row:row}\"></template>\r\n\r\n </div>\r\n\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","import { Component, OnDestroy, OnInit, Optional, forwardRef, input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { IconComponent } from '@cauca-911/material';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-icon-column',\r\n templateUrl: './data-grid-icon-column.component.html',\r\n styleUrls: ['./data-grid-icon-column.component.scss'],\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => DataGridIconColumnComponent) }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatCell, MatCellDef, IconComponent, MatFooterCell, MatFooterCellDef, NgClass, MatIcon]\r\n})\r\nexport class DataGridIconColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public readonly alignRight = input(false);\r\n public readonly useMatIcon = input(false);\r\n public readonly icon = input('');\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n <th mat-header-cell *matHeaderCellDef> {{ showLabel() ? label() ?? capitalize(prop()) : '' }} </th>\r\n <td [ngClass]=\"alignRight() ? 'td-right' : ''\" mat-cell *matCellDef=\"let row\">\r\n @if (useMatIcon()) { <mat-icon>{{icon()}}</mat-icon> }\r\n @else { <cauca-icon [icon]=\"row[prop()]\" /> }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","import { ChangeDetectionStrategy, Component, ContentChild, InputSignal, ModelSignal, OnDestroy, OnInit, Optional, TemplateRef, ViewEncapsulation, forwardRef, input, model, output } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { IconButtonComponent, MenuItemComponent } from '@cauca-911/material';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { RouterLink } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-menu-column',\r\n templateUrl: './data-grid-menu-column.component.html',\r\n styleUrls: ['./data-grid-menu-column.component.scss'],\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => DataGridMenuColumnComponent) }],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n MatColumnDef,\r\n MatHeaderCell,\r\n MatHeaderCellDef,\r\n MatCell,\r\n MatCellDef,\r\n IconButtonComponent,\r\n MatMenuModule,\r\n MenuItemComponent,\r\n NgTemplateOutlet,\r\n MatFooterCell,\r\n MatFooterCellDef,\r\n RouterLink\r\n ],\r\n})\r\nexport class DataGridMenuColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n public canDelete: ModelSignal<boolean> = model(false);\r\n public readonly canDeleteByRow = input<(row: any) => boolean>(null);\r\n public canEdit: InputSignal<boolean> = input(false);\r\n public canDuplicate: ModelSignal<boolean> = model(false);\r\n public readonly canDuplicateByRow = input<(row: any) => boolean>(null);\r\n public editLinkField: InputSignal<string> = input();\r\n public duplicateLinkField: InputSignal<string> = input();\r\n @ContentChild(TemplateRef) public menuTemplate: TemplateRef<any>;\r\n\r\n public deleteClick = output<unknown>();\r\n public editClick = output<unknown>();\r\n public duplicateClick = output<unknown>();\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n\r\n public menuOpened(row: any): void {\r\n const canDeleteByRow = this.canDeleteByRow();\r\n if (canDeleteByRow) {\r\n this.canDelete.set(canDeleteByRow(row));\r\n }\r\n const canDuplicateByRow = this.canDuplicateByRow();\r\n if (canDuplicateByRow) {\r\n this.canDuplicate.set(canDuplicateByRow(row));\r\n }\r\n }\r\n}\r\n","<ng-container matColumnDef=\"menu\">\r\n <th mat-header-cell *matHeaderCellDef> {{ label() }} </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <div class=\"align-commands\">\r\n\r\n <cauca-icon-button colorOnHover=\"var(--primary)\" color=\"grey\" icon=\"more_horiz\" [matMenuTriggerFor]=\"actionMenu\" (menuOpened)=\"menuOpened(row)\" />\r\n\r\n <mat-menu #actionMenu=\"matMenu\" class=\"grid-menu\">\r\n @if (canEdit()) {\r\n <cauca-menu-item colorOnHover=\"var(--primary)\" icon=\"edit\" label=\"edit\" [translateLabel]=\"true\" [routerLink]=\"editLinkField() ? [row[editLinkField()]] : null\" (buttonClick)=\"editClick?.emit(row)\" class=\"edit-button\" />\r\n }\r\n\r\n @if (canDuplicate()) {\r\n <cauca-menu-item icon=\"content_copy\" label=\"duplicate\" [translateLabel]=\"true\" [routerLink]=\"duplicateLinkField() ? [row[duplicateLinkField()]] : null\" [queryParams]=\"{ duplicate: true }\" (buttonClick)=\"duplicateClick?.emit(row)\" class=\"duplicate-button\" />\r\n }\r\n\r\n @if (canDelete()) {\r\n <cauca-menu-item colorOnHover=\"var(--warn)\" icon=\"close\" label=\"delete\" [translateLabel]=\"true\" (buttonClick)=\"deleteClick?.emit(row)\" class=\"delete-button\" />\r\n }\r\n <template [ngTemplateOutlet]=\"menuTemplate\" [ngTemplateOutletContext]=\"{row:row}\"></template>\r\n\r\n </mat-menu>\r\n\r\n </div>\r\n\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","import dayjs from 'dayjs';\r\n\r\nexport function resolveDisplayDate(date: Date | null, minLimit: Date | null, maxLimit: Date | null): Date | null {\r\n const upperBound = maxLimit ? dayjs(maxLimit).add(-1, 'second').toDate() : null;\r\n\r\n if (!date) {\r\n return upperBound;\r\n }\r\n\r\n const resolved = new Date(date);\r\n if (minLimit) {\r\n const lowerBound = new Date(minLimit);\r\n return resolved < lowerBound ? lowerBound : resolved;\r\n }\r\n if (upperBound) {\r\n return resolved > upperBound ? upperBound : resolved;\r\n }\r\n return resolved;\r\n}\r\n","import { DatePipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { resolveDisplayDate } from './display-date';\r\n\r\n@Component({\r\n selector: 'cauca-time-label',\r\n imports: [DatePipe, MatTooltip],\r\n templateUrl: './time-label.component.html',\r\n styleUrl: './time-label.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TimeLabelComponent {\r\n public date = input.required<Date|null>();\r\n public minLimit = input<Date|null>(null);\r\n public maxLimit = input<Date|null>(null);\r\n public showTime = input<boolean>(true);\r\n public showSecond = input(false);\r\n\r\n public dateMask = computed(() => this.showTime() ? `dd/MM/yyyy${this.timeFormat()}` : 'dd/MM/yyyy');\r\n public displayDate = computed(() => resolveDisplayDate(this.date(), this.minLimit(), this.maxLimit()) ?? '');\r\n\r\n private readonly timeFormat = computed(() => this.showSecond() ? ' HH:mm:ss' : ' HH:mm');\r\n}\r\n","<span [matTooltip]=\"displayDate() | date:dateMask()\">{{ displayDate() | date:dateMask() }}</span>","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewEncapsulation, forwardRef, Optional, input } from '@angular/core';\r\nimport { BaseGridColumnComponent, ExportCell } from '../base-grid-column.component';\r\nimport { resolveDisplayDate } from '../../components/time-label/display-date';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { MatSortHeader } from '@angular/material/sort';\r\nimport { NgStyle } from '@angular/common';\r\nimport { TimeLabelComponent } from '../../components/time-label/time-label.component';\r\n\r\n@Component({\r\n selector: 'cauca-date-grid-column',\r\n templateUrl: './date-grid-column.component.html',\r\n styleUrls: ['./date-grid-column.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => DateGridColumnComponent) }],\r\n imports: [\r\n MatColumnDef,\r\n MatHeaderCell, MatHeaderCellDef, MatSortHeader, NgStyle,\r\n MatCell, MatCellDef,\r\n TimeLabelComponent,\r\n MatFooterCell, MatFooterCellDef,\r\n ]\r\n})\r\nexport class DateGridColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public showWithTime = input(false);\r\n public showSecond = input(false);\r\n\r\n public maxDate = input<Date|null>(null);\r\n public minDate = input<Date|null>(null);\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n\r\n public override getExportValue(row: Record<string, unknown>): ExportCell {\r\n return resolveDisplayDate(row?.[this.prop()] as Date, this.minDate(), this.maxDate());\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header [ngStyle]=\"{'width': width()}\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let row\">\r\n <cauca-time-label [date]=\"row[prop()]\" [showTime]=\"showWithTime()\" [showSecond]=\"showSecond()\" [minLimit]=\"minDate()\" [maxLimit]=\"maxDate()\" />\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>\r\n\r\n","import { Component, OnDestroy, OnInit, Optional, forwardRef, input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { NgStyle } from '@angular/common';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { CheckIconComponent } from '../../components/check-icon/check-icon.component';\r\nimport { MatSortHeader } from '@angular/material/sort';\r\n\r\n@Component({\r\n selector: 'cauca-sortable-data-grid-check-column',\r\n templateUrl: './sortable-data-grid-check-column.component.html',\r\n styleUrls: ['./sortable-data-grid-check-column.component.scss'],\r\n providers: [{ provide: BaseGridColumnComponent, useExisting: forwardRef(() => SortableDataGridCheckColumnComponent) }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatSortHeader, NgStyle, MatTooltip, MatCell, MatCellDef, CheckIconComponent, MatFooterCell, MatFooterCellDef]\r\n})\r\nexport class SortableDataGridCheckColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n public readonly checkIcon = input('check');\r\n public readonly uncheckIcon = input('block');\r\n public readonly sortProp = input('');\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"sortProp() || prop()\" [ngStyle]=\"{'width': width()}\" [matTooltip]=\"label() ?? capitalize(prop())\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{'width': width()}\">\r\n <cauca-check-icon [checkIcon]=\"checkIcon()\" [uncheckIcon]=\"uncheckIcon()\" [isChecked]=\"row[prop()]\" />\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","export function formatPhone(value: unknown): string {\r\n return value?.toString().replace(/(\\d{3})(\\d{3})(\\d{4})/, '$1-$2-$3') ?? '';\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { formatPhone } from './phone-format';\r\n\r\n@Component({\r\n selector: 'cauca-column-label',\r\n imports: [MatTooltip],\r\n templateUrl: './column-label.component.html',\r\n styleUrl: './column-label.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ColumnLabelComponent {\r\n public value = input<any>(null);\r\n public format = input<'none'|'phone'>('none');\r\n public showToolTip = input<boolean>(true);\r\n public displayValue = computed(() => this.format() === 'phone' ? formatPhone(this.value()) : this.value());\r\n}\r\n","@if (showToolTip()) {<span [matTooltip]=\"displayValue()\" >{{ displayValue() }}</span>}\r\n@else { <span>{{displayValue()}}</span>}","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, Optional, ViewEncapsulation, forwardRef, input } from '@angular/core';\r\nimport { BaseGridColumnComponent, ExportCell } from '../base-grid-column.component';\r\nimport { formatPhone } from '../../components/column-label/phone-format';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { ColumnLabelComponent } from '../../components/column-label/column-label.component';\r\nimport { NgStyle } from '@angular/common';\r\nimport { MatSortHeader } from '@angular/material/sort';\r\n\r\n@Component({\r\n selector: 'cauca-sortable-data-grid-column',\r\n templateUrl: './sortable-data-grid-column.component.html',\r\n styleUrls: ['./sortable-data-grid-column.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => SortableDataGridColumnComponent) }],\r\n imports: [\r\n MatColumnDef,\r\n MatHeaderCell, MatHeaderCellDef, MatSortHeader, NgStyle,\r\n MatCell, MatCellDef,\r\n MatTooltip, ColumnLabelComponent,\r\n MatFooterCell, MatFooterCellDef,\r\n ]\r\n})\r\nexport class SortableDataGridColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public summaryType = input<'none'|'sum'|'count'>('none');\r\n public summaryLabel = input<string>('');\r\n public format = input<'none'|'phone'>('none');\r\n public readonly sortProp = input('');\r\n\r\n public isInitialized = false;\r\n private readonly grid = null;\r\n\r\n public constructor (@Optional() odata: OdataGridComponent, @Optional() grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n this.grid = grid??odata;\r\n this.isInitialized = true;\r\n }\r\n\r\n public override getExportValue(row: Record<string, unknown>): ExportCell {\r\n const value = (row?.[this.prop()] as ExportCell) ?? null;\r\n return this.format() === 'phone' ? formatPhone(value) : value;\r\n }\r\n\r\n public calculateSummary(): string {\r\n const rows = this.grid?.data?.();\r\n if (this.isInitialized && rows) {\r\n if (this.summaryType() === 'sum') {\r\n return this.summaryLabel() + rows.reduce((acc, row) => acc + row[this.prop()], 0) + this.summaryLabel();\r\n }\r\n if (this.summaryType() === 'count') {\r\n return rows.length + this.summaryLabel();\r\n }\r\n }\r\n return '';\r\n }\r\n}\r\n","\r\n<ng-container matColumnDef=\"{{ prop() }}\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"sortProp() || prop()\" [ngStyle]=\"{'width': width()}\" [matTooltip]=\"label() ?? capitalize(prop())\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let row\">\r\n <cauca-column-label [value]=\"row[prop()]\" [showToolTip]=\"showToolTip()\" [format]=\"format()\" />\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (isInitialized) {\r\n {{calculateSummary()}}\r\n }\r\n </td>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, forwardRef, inject, OnDestroy, OnInit, Optional, ViewEncapsulation, input } from '@angular/core';\r\nimport { BaseGridColumnComponent, ExportCell } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { ColumnLabelComponent } from '../../components/column-label/column-label.component';\r\n\r\n@Component({\r\n selector: 'cauca-translation-grid-column',\r\n templateUrl: './translation-grid-column.component.html',\r\n styleUrl: './translation-grid-column.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: BaseGridColumnComponent, useExisting: forwardRef(() => TranslationGridColumnComponent) }],\r\n imports: [MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatCell, MatCellDef, TranslatePipe, MatFooterCell, MatFooterCellDef, MatTooltip, ColumnLabelComponent],\r\n})\r\nexport class TranslationGridColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n public readonly prefix = input('');\r\n\r\n private readonly translateService = inject(TranslateService);\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n\r\n public override getExportValue(row: Record<string, unknown>): ExportCell {\r\n const value = row?.[this.prop()];\r\n return value == null ? null : this.translateService.instant(`${this.prefix()}.${value}`);\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let row\">\r\n @if (prefix() && row[prop()]) { <cauca-column-label [value]=\"prefix()+'.'+row[prop()] | translate\" [showToolTip]=\"showToolTip()\" /> }\r\n @else if(row[prop()]) { <cauca-column-label [value]=\"row[prop()] | translate\" [showToolTip]=\"showToolTip()\" /> }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","import { NgStyle } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Optional, ViewEncapsulation } from '@angular/core';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { Iso8601TimeSpanPipe } from '@cauca-911/material';\r\nimport { BaseGridColumnComponent, ExportCell } from '../base-grid-column.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\n\r\nconst timeSpanFormatter = new Iso8601TimeSpanPipe();\r\n\r\n@Component({\r\n selector: 'cauca-time-span-data-grid-column',\r\n imports: [MatColumnDef, MatHeaderCell, MatHeaderCellDef, NgStyle, MatCell, MatCellDef, MatTooltip, MatFooterCellDef, Iso8601TimeSpanPipe],\r\n templateUrl: './time-span-data-grid-column.component.html',\r\n styleUrl: './time-span-data-grid-column.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: BaseGridColumnComponent, useExisting: forwardRef(() => TimeSpanDataGridColumnComponent) }]\r\n})\r\nexport class TimeSpanDataGridColumnComponent extends BaseGridColumnComponent {\r\n\r\n public constructor(@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid ?? odata)?.table);\r\n }\r\n\r\n public override getExportValue(row: Record<string, unknown>): ExportCell {\r\n return timeSpanFormatter.transform(row?.[this.prop()] as string);\r\n }\r\n}","<ng-container matColumnDef=\"{{ prop() }}\">\r\n\r\n <th mat-header-cell *matHeaderCellDef [ngStyle]=\"{'width': width()}\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let row\">\r\n @if (row[prop()] | Iso8601TimeSpan; as formattedValue) {\r\n <span [matTooltip]=\"showToolTip() ? formattedValue : ''\">\r\n {{ formattedValue }}\r\n </span>\r\n }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n\r\n</ng-container>"],"mappings":"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"}
1
+ {"version":3,"file":"cauca-911-datagrid.mjs","names":[],"sources":["../../../projects/cauca-datagrid/src/lib/data-grid/models/data-grid-row-drop-event.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/base-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/models/grid-export.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-export-menu/data-grid-export-menu.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-export-menu/data-grid-export-menu.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-header/data-grid-header.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-header/data-grid-header.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/models/density-enum.ts","../../../projects/cauca-datagrid/src/lib/services/preference.ts","../../../projects/cauca-datagrid/src/lib/services/mat-paginator-localization.service.ts","../../../projects/cauca-datagrid/src/lib/services/preference.service.ts","../../../projects/cauca-datagrid/src/lib/provide-cauca-grid.ts","../../../projects/cauca-datagrid/src/lib/data-grid/models/export-cell.ts","../../../projects/cauca-datagrid/src/lib/services/grid-export.service.ts","../../../projects/cauca-datagrid/src/lib/data-grid/base-data-grid.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/button-popover/button-popover.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/button-popover/button-popover.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-table-options/data-grid-table-options.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-table-options/data-grid-table-options.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-progress-spiner/data-grid-progress-spiner.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/data-grid-progress-spiner/data-grid-progress-spiner.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/data-grid/data-grid.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/data-grid/data-grid.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/odata-grid/odata-listing.service.ts","../../../projects/cauca-datagrid/src/lib/data-grid/odata-grid/grid-url-state.ts","../../../projects/cauca-datagrid/src/lib/data-grid/odata-grid/odata-grid.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/odata-grid/odata-grid.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/grid-state-restoration.service.ts","../../../projects/cauca-datagrid/src/lib/data-grid/provide-grid-state-restoration.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/color-data-grid-column/color-data-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/color-data-grid-column/color-data-grid-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/components/check-icon/check-icon.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-check-column/data-grid-check-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-check-column/data-grid-check-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-column/data-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-column/data-grid-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-command-icon-column/data-grid-command-icon-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-command-icon-column/data-grid-command-icon-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-commands-column/data-grid-commands-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-commands-column/data-grid-commands-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-icon-column/data-grid-icon-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-icon-column/data-grid-icon-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-menu-column/data-grid-menu-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/data-grid-menu-column/data-grid-menu-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/components/time-label/display-date.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/time-label/time-label.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/time-label/time-label.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/date-grid-column/date-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/date-grid-column/date-grid-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/sortable-data-grid-check-column/sortable-data-grid-check-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/sortable-data-grid-check-column/sortable-data-grid-check-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/components/column-label/phone-format.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/column-label/column-label.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/components/column-label/column-label.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/sortable-data-grid-column/sortable-data-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/sortable-data-grid-column/sortable-data-grid-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/translation-grid-column/translation-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/translation-grid-column/translation-grid-column.component.html","../../../projects/cauca-datagrid/src/lib/data-grid/columns/time-span-data-grid-column/time-span-data-grid-column.component.ts","../../../projects/cauca-datagrid/src/lib/data-grid/columns/time-span-data-grid-column/time-span-data-grid-column.component.html"],"sourcesContent":["export class DataGridRowDropEvent {\r\n public item: unknown;\r\n public data: unknown[];\r\n public fromIndex: number;\r\n public toIndex: number;\r\n\r\n public constructor(data: {\r\n item: unknown;\r\n data: unknown[];\r\n fromIndex: number;\r\n toIndex: number;\r\n }) {\r\n Object.assign(this, data);\r\n }\r\n}\r\n","import { Component, HostBinding, OnDestroy, OnInit, Optional, ViewChild, ViewEncapsulation, input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { MatCellDef, MatColumnDef, MatFooterCellDef, MatHeaderCellDef, MatTable } from '@angular/material/table';\r\nimport { ExportCell } from '../models/export-cell';\r\n\r\nexport type { ExportCell } from '../models/export-cell';\r\n\r\n@Component({ template: '' ,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport abstract class BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public readonly prop = input('');\r\n public readonly showLabel = input(true);\r\n public readonly label = input<string | undefined>(undefined);\r\n public readonly isInColumnChooser = input(true);\r\n public readonly visibleByDefault = input(true);\r\n public readonly width = input('');\r\n public readonly showToolTip = input(true);\r\n public readonly exportable = input(true);\r\n\r\n @HostBinding('attr.ariaHidden') public ariaHidden!: true;\r\n @HostBinding('class') public classes!: 'column-template cdk-visually-hidden';\r\n\r\n @ViewChild(MatColumnDef, { static: true }) public columnDef!: MatColumnDef;\r\n @ViewChild(MatCellDef, { static: true }) public cellDef!: MatCellDef;\r\n @ViewChild(MatHeaderCellDef, { static: true }) public headerCellDef!: MatHeaderCellDef;\r\n @ViewChild(MatFooterCellDef, { static: true }) public footerCellDef!: MatFooterCellDef;\r\n\r\n public selected: boolean = true;\r\n\r\n public constructor(@Optional() public table: MatTable<unknown>) {\r\n }\r\n\r\n public ngOnInit(): void {\r\n if (this.columnDef) {\r\n if (!this.columnDef.name) {\r\n this.columnDef.name = this.prop();\r\n }\r\n this.columnDef.cell = this.cellDef;\r\n this.columnDef.headerCell = this.headerCellDef;\r\n this.columnDef.footerCell = this.footerCellDef;\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n if (this.table) {\r\n this.table.removeColumnDef(this.columnDef);\r\n }\r\n }\r\n\r\n public capitalize(value: string): string {\r\n return value.charAt(0).toUpperCase() + value.slice(1);\r\n }\r\n\r\n public getExportValue(row: Record<string, unknown>): ExportCell {\r\n return (row?.[this.prop()] as ExportCell) ?? null;\r\n }\r\n\r\n public getExportHeader(): string {\r\n return this.label() ?? this.capitalize(this.prop());\r\n }\r\n}\r\n","import { BaseGridColumnComponent, ExportCell } from '../columns/base-grid-column.component';\r\n\r\nexport type GridExportFormat = 'excel' | 'pdf';\r\n\r\nexport const ALL_EXPORT_FORMATS: readonly GridExportFormat[] = ['excel', 'pdf'];\r\n\r\nexport interface ExportMatrix {\r\n title?: string;\r\n headers: string[];\r\n rows: ExportCell[][];\r\n}\r\n\r\nexport const GRID_OWNED_COLUMNS: readonly string[] = ['', 'position', 'buttons', 'menu', 'expand'];\r\n\r\nexport function buildExportMatrix(\r\n columnOrder: readonly string[],\r\n columns: readonly BaseGridColumnComponent[],\r\n rows: readonly Record<string, unknown>[],\r\n title?: string,\r\n): ExportMatrix {\r\n const exportedColumns = columnOrder\r\n .filter(name => !GRID_OWNED_COLUMNS.includes(name))\r\n .map(name => columns.find(column => column.columnDef?.name === name))\r\n .filter(column => !!column && column.exportable());\r\n\r\n return {\r\n title: title || undefined,\r\n headers: exportedColumns.map(column => column.getExportHeader()),\r\n rows: (rows ?? []).map(row => exportedColumns.map(column => column.getExportValue(row))),\r\n };\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { IconButtonComponent, MenuItemComponent } from '@cauca-911/material';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { ALL_EXPORT_FORMATS, GridExportFormat } from '../../models/grid-export';\r\n\r\nconst FORMAT_MENU_ITEMS: Record<GridExportFormat, { icon: string; label: string }> = {\r\n excel: { icon: 'table_view', label: 'dataGrid.export.excel' },\r\n pdf: { icon: 'picture_as_pdf', label: 'dataGrid.export.pdf' },\r\n};\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-export-menu',\r\n templateUrl: './data-grid-export-menu.component.html',\r\n styleUrl: './data-grid-export-menu.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [IconButtonComponent, MenuItemComponent, MatMenuModule, TranslatePipe],\r\n})\r\nexport class DataGridExportMenuComponent {\r\n\r\n public readonly formats = input<readonly GridExportFormat[]>(ALL_EXPORT_FORMATS);\r\n public readonly exportRequest = output<GridExportFormat>();\r\n\r\n protected readonly menuItems = FORMAT_MENU_ITEMS;\r\n\r\n protected onExport(format: GridExportFormat): void {\r\n this.exportRequest.emit(format);\r\n }\r\n}\r\n","<cauca-icon-button icon=\"download\" colorOnHover=\"var(--primary)\" [matMenuTriggerFor]=\"exportMenu\"\r\n [ariaLabel]=\"'dataGrid.export.title' | translate\" />\r\n\r\n<mat-menu #exportMenu=\"matMenu\">\r\n @for (format of formats(); track format) {\r\n <cauca-menu-item [icon]=\"menuItems[format].icon\" [label]=\"menuItems[format].label\" [translateLabel]=\"true\"\r\n (buttonClick)=\"onExport(format)\" [class]=\"'export-' + format + '-button'\" />\r\n }\r\n <ng-content select=\"[exportItem]\" />\r\n</mat-menu>\r\n","import { Component, OnDestroy, OnInit, input, output, signal, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { IconButtonComponent, RaisedButtonComponent } from '@cauca-911/material';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { Subject, debounceTime, takeUntil } from 'rxjs';\r\nimport { DataGridExportMenuComponent } from '../data-grid-export-menu/data-grid-export-menu.component';\r\nimport { ALL_EXPORT_FORMATS, GridExportFormat } from '../../models/grid-export';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-header',\r\n templateUrl: './data-grid-header.component.html',\r\n styleUrls: ['./data-grid-header.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatFormFieldModule, IconButtonComponent, RaisedButtonComponent, MatInputModule, ReactiveFormsModule, TranslatePipe, MatIcon, DataGridExportMenuComponent],\r\n})\r\nexport class DataGridHeaderComponent implements OnInit, OnDestroy {\r\n\r\n public filterControl: FormControl<string> = new FormControl<string>('');\r\n\r\n /** Written from the debounced valueChanges subscription and by OdataGridComponent when it\r\n * restores persisted state, so it is a signal: neither is a change-detection trigger\r\n * under zoneless (ADR-0004). */\r\n public readonly showClearButton = signal(false);\r\n\r\n public readonly showAddButton = input(false);\r\n public readonly showRefreshButton = input(false);\r\n public readonly showExportMenu = input(false);\r\n public readonly exportFormats = input<readonly GridExportFormat[]>(ALL_EXPORT_FORMATS);\r\n public readonly addButtonLabel = input('');\r\n public readonly searchPlaceholder = input('');\r\n public readonly showSearchBar = input(true);\r\n public readonly disableAddButton = input(false);\r\n public readonly filterChange = output<string>();\r\n public readonly addButtonClick = output<void>();\r\n public readonly refreshRequest = output<void>();\r\n public readonly exportRequest = output<GridExportFormat>();\r\n\r\n protected _onDestroy = new Subject<void>();\r\n\r\n public ngOnInit(): void {\r\n this.filterControl.valueChanges\r\n .pipe(\r\n debounceTime(500),\r\n takeUntil(this._onDestroy))\r\n .subscribe((filter: string) => {\r\n this.filterChange.emit(filter);\r\n this.showClearButton.set(!!filter);\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._onDestroy.next();\r\n this._onDestroy.complete();\r\n }\r\n\r\n public onRefresh(): void {\r\n this.refreshRequest.emit();\r\n }\r\n\r\n public clearSearchValue(): void {\r\n this.filterControl.setValue('');\r\n }\r\n\r\n public onAddButtonClick(): void {\r\n this.addButtonClick.emit();\r\n }\r\n}\r\n","<div class=\"grid-header\">\r\n\r\n @if (showSearchBar()) {\r\n <mat-form-field appearance=\"outline\" class=\"full-width-field grid-search-box\" subscriptSizing=\"dynamic\">\r\n @if (showClearButton()) { <cauca-icon-button matPrefix (buttonClick)=\"clearSearchValue()\" icon=\"close\" /> }\r\n <mat-label>{{ 'dataGrid.keywordsLabel' | translate}}</mat-label>\r\n <input matInput [formControl]=\"filterControl\" [placeholder]=\"searchPlaceholder()\">\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n }\r\n\r\n <ng-content select=\"[filterRow]\" ngProjectAs=\"[filterRow]\" />\r\n\r\n @if (showRefreshButton()) { <cauca-icon-button (buttonClick)=\"onRefresh()\" icon=\"refresh\" class=\"grid-refresh-button\" /> }\r\n\r\n @if (showExportMenu()) {\r\n <cauca-data-grid-export-menu [formats]=\"exportFormats()\" (exportRequest)=\"exportRequest.emit($event)\" class=\"grid-export-menu\">\r\n <ng-content select=\"[exportItem]\" ngProjectAs=\"[exportItem]\" />\r\n </cauca-data-grid-export-menu>\r\n }\r\n\r\n @if (showAddButton()) { <cauca-raised-button icon=\"add\" color=\"primary\" [label]=\"addButtonLabel()\" [translateLabel]=\"false\" class=\"grid-new-button\" [isDisabled]=\"disableAddButton()\" (buttonClick)=\"onAddButtonClick()\" /> }\r\n</div>","export enum Density {\r\n Compact = \"compact\",\r\n Standard = \"standard\",\r\n Comfortable = \"comfortable\"\r\n}","import { Density } from \"../data-grid/models/density-enum\";\r\n\r\nexport class Preference {\r\n public gridDensity: Density;\r\n}\r\n\r\nexport class GridConfiguration {\r\n public name: string;\r\n public visibleColumns: string[];\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { MatPaginatorIntl } from \"@angular/material/paginator\";\r\nimport { TranslateService } from \"@cauca-911/core\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MatPaginatorLocalizationService extends MatPaginatorIntl {\r\n public itemsPerPageLabel: string = 'Items per page';\r\n public nextPageLabel: string = 'Next page';\r\n public previousPageLabel: string = 'Previous page';\r\n public ofLabel: string = 'of'\r\n\r\n public constructor(\r\n private readonly translateService: TranslateService) {\r\n super();\r\n this.translateService.onLangChange.subscribe(() => this.loadTranslations());\r\n this.loadTranslations();\r\n }\r\n\r\n public getRangeLabel = (page, pageSize, length): string => {\r\n if (length == 0 || pageSize == 0) {\r\n return `0 ${this.ofLabel} ${length}`;\r\n }\r\n\r\n length = Math.max(length, 0);\r\n const startIndex = page * pageSize;\r\n const endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;\r\n return `${startIndex + 1} – ${endIndex} ${this.ofLabel} ${length}`;\r\n };\r\n\r\n private loadTranslations(): any {\r\n this.translateService.get([\r\n 'paginator.itemsPerPage',\r\n 'paginator.nextPage',\r\n 'paginator.previousPage',\r\n 'paginator.of'\r\n ])\r\n .subscribe(translation => {\r\n this.itemsPerPageLabel = translation['paginator.itemsPerPage'];\r\n this.nextPageLabel = translation['paginator.nextPage'];\r\n this.previousPageLabel = translation['paginator.previousPage'];\r\n this.ofLabel = translation['paginator.of'];\r\n this.changes.next();\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, of } from 'rxjs';\r\nimport { GridConfiguration, Preference } from './preference';\r\nimport { Density } from '../data-grid/models/density-enum';\r\nimport { BasePreferenceService } from './base-preference-service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PreferenceService implements BasePreferenceService {\r\n public preference: BehaviorSubject<Preference> = new BehaviorSubject<Preference>(new Preference());\r\n\r\n public gridConfiguration: GridConfiguration[] = [];\r\n\r\n public constructor() {\r\n const data = localStorage.getItem('GridPreference');\r\n const configuration = localStorage.getItem('GridConfiguration');\r\n if (data) {\r\n this.preference.next(JSON.parse(data));\r\n }\r\n if (configuration) {\r\n this.gridConfiguration = JSON.parse(configuration);\r\n }\r\n }\r\n\r\n public getPreference(): Preference {\r\n return this.preference.value;\r\n }\r\n\r\n public setPreferenceDensity(density: Density) {\r\n const preference = this.getPreference();\r\n if (density === preference.gridDensity) return;\r\n preference.gridDensity = density;\r\n this.preference.next(preference);\r\n this.addOrUpdatePreference();\r\n }\r\n\r\n public addOrUpdatePreference(): void {\r\n localStorage.setItem('GridPreference', JSON.stringify(this.getPreference()));\r\n }\r\n\r\n public getPreferenceForGrid(gridName: string): Observable<GridConfiguration> {\r\n return of(this.getPreferenceForGridNotObservable(gridName));\r\n }\r\n\r\n public addOrUpdateGridPreference(gridName: string, visibleColumns: string[]): Observable<void> {\r\n const configuration = this.getPreferenceForGridNotObservable(gridName);\r\n configuration.visibleColumns = visibleColumns || [];\r\n localStorage.setItem('GridConfiguration', JSON.stringify(this.gridConfiguration));\r\n return of();\r\n }\r\n\r\n private getPreferenceForGridNotObservable(gridName: string): GridConfiguration {\r\n const configuration = this.gridConfiguration.find(g => g.name == gridName);\r\n if (configuration) {\r\n return configuration;\r\n }\r\n const newConfiguration = new GridConfiguration();\r\n newConfiguration.name = gridName;\r\n this.gridConfiguration.push(newConfiguration);\r\n return newConfiguration;\r\n }\r\n}","import { CDK_DRAG_CONFIG } from \"@angular/cdk/drag-drop\";\r\nimport { Provider, EnvironmentProviders, Type, InjectionToken } from \"@angular/core\";\r\nimport { MatPaginatorIntl } from \"@angular/material/paginator\";\r\nimport { MatPaginatorLocalizationService } from \"./services/mat-paginator-localization.service\";\r\nimport { PreferenceService } from \"./services/preference.service\";\r\nimport { BasePreferenceService } from \"./services/base-preference-service\";\r\n\r\nexport interface CaucaGridOptions {\r\n /** If not provided, a default implementation will be used which will use localStorage to store the grid preferences. */\r\n gridPreferenceService?: Type<BasePreferenceService>\r\n}\r\n\r\nexport const PREFERENCE_SERVICE_TOKEN = new InjectionToken<BasePreferenceService>('CaucaGridPreferenceService');\r\n\r\nexport function provideCaucaGrid(options?: CaucaGridOptions): (Provider|EnvironmentProviders) {\r\n return [\r\n { provide: CDK_DRAG_CONFIG, useValue: { previewContainer: 'parent' } },\r\n { provide: MatPaginatorIntl, useClass: MatPaginatorLocalizationService },\r\n { provide: PREFERENCE_SERVICE_TOKEN, useClass: options?.gridPreferenceService || PreferenceService }\r\n ];\r\n}\r\n","export type ExportValue = string | number | boolean | Date | null;\r\n\r\nexport interface FilledExportCell {\r\n value: ExportValue;\r\n fillColor: string;\r\n}\r\n\r\nexport type ExportCell = ExportValue | FilledExportCell;\r\n\r\nconst HEX_COLOR_PATTERN = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;\r\nconst SHORT_HEX_LENGTH = 3;\r\nconst ALPHA_OPAQUE = 'FF';\r\n\r\nexport function isFilledExportCell(cell: ExportCell): cell is FilledExportCell {\r\n return typeof cell === 'object' && cell !== null && !(cell instanceof Date) && 'fillColor' in cell;\r\n}\r\n\r\nexport function hexToArgb(fillColor: string): string | undefined {\r\n if (!HEX_COLOR_PATTERN.test(fillColor)) {\r\n return undefined;\r\n }\r\n\r\n const hex = fillColor.slice(1);\r\n const expandedHex = hex.length === SHORT_HEX_LENGTH\r\n ? hex.split('').map(digit => digit + digit).join('')\r\n : hex;\r\n\r\n return `${ALPHA_OPAQUE}${expandedHex}`.toUpperCase();\r\n}\r\n","import { formatDate } from '@angular/common';\r\nimport { inject, Injectable, LOCALE_ID } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { ExportCell, ExportValue, hexToArgb, isFilledExportCell } from '../data-grid/models/export-cell';\r\nimport { ExportMatrix } from '../data-grid/models/grid-export';\r\nimport type { CellHookData } from 'jspdf-autotable';\r\n\r\nconst XLSX_MIME = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\r\nconst DATE_MASK = 'dd/MM/yyyy HH:mm';\r\nconst EXCEL_DATE_FORMAT = 'dd/mm/yyyy hh:mm';\r\nconst COLUMN_WIDTH = 24;\r\nconst FONT_NAME = 'Aptos Narrow';\r\nconst FONT_FAMILY = 2;\r\nconst EXCEL_TITLE_FONT_SIZE = 25;\r\nconst TITLE_FONT_SIZE = 14;\r\nconst PAGE_MARGIN = 14;\r\nconst TITLE_BASELINE = 15;\r\nconst TABLE_TOP_WITH_TITLE = 22;\r\nconst MIN_CELL_WIDTH = 15;\r\nconst FILL_BORDER_WIDTH = 0.2;\r\nconst FILL_BORDER_COLOR = '#333333';\r\nconst THIN_BORDER = { style: 'thin' } as const;\r\nconst FILL_CELL_BORDER = { top: THIN_BORDER, left: THIN_BORDER, bottom: THIN_BORDER, right: THIN_BORDER };\r\n\r\ntype WorkbookConstructor = typeof import('exceljs').Workbook;\r\ntype ExcelCell = import('exceljs').Cell;\r\n\r\ninterface ExcelJsNamespace {\r\n Workbook?: WorkbookConstructor;\r\n default?: { Workbook?: WorkbookConstructor };\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class GridExportService {\r\n\r\n private readonly locale = inject(LOCALE_ID);\r\n private readonly translateService = inject(TranslateService);\r\n\r\n public async toExcel(matrix: ExportMatrix, fileName: string): Promise<void> {\r\n const Workbook = await this.loadWorkbook();\r\n\r\n const workbook = new Workbook();\r\n const worksheet = workbook.addWorksheet(fileName.slice(0, 31));\r\n const columnCount = matrix.headers.length;\r\n\r\n if (matrix.title) {\r\n const titleRow = worksheet.addRow([matrix.title]);\r\n titleRow.font = { name: FONT_NAME, family: FONT_FAMILY, bold: true, size: EXCEL_TITLE_FONT_SIZE };\r\n titleRow.alignment = { horizontal: 'center', vertical: 'middle' };\r\n if (columnCount > 1) {\r\n worksheet.mergeCells(1, 1, 1, columnCount);\r\n }\r\n }\r\n\r\n const headerRow = matrix.title ? 2 : 1;\r\n worksheet.addRow(matrix.headers).font = { name: FONT_NAME, family: FONT_FAMILY, bold: true };\r\n matrix.rows.forEach(row => {\r\n const addedRow = worksheet.addRow(row.map(cell => this.localize(this.valueOf(cell))));\r\n addedRow.font = { name: FONT_NAME, family: FONT_FAMILY };\r\n row.forEach((cell, columnIndex) => {\r\n if (isFilledExportCell(cell)) {\r\n this.applyFill(addedRow.getCell(columnIndex + 1), cell.fillColor);\r\n }\r\n });\r\n });\r\n\r\n (worksheet.columns ?? []).forEach((column, index) => {\r\n column.width = COLUMN_WIDTH;\r\n if (matrix.rows.some(row => this.valueOf(row[index]) instanceof Date)) {\r\n column.numFmt = EXCEL_DATE_FORMAT;\r\n }\r\n });\r\n\r\n if (columnCount > 0) {\r\n worksheet.autoFilter = {\r\n from: { row: headerRow, column: 1 },\r\n to: { row: headerRow, column: columnCount },\r\n };\r\n }\r\n\r\n const buffer = await workbook.xlsx.writeBuffer();\r\n this.download(new Blob([buffer], { type: XLSX_MIME }), `${fileName}.xlsx`);\r\n }\r\n\r\n public async toPdf(matrix: ExportMatrix, fileName: string): Promise<void> {\r\n const { jsPDF } = await this.load(() => import('jspdf'), 'jspdf');\r\n const { default: autoTable } = await this.load(() => import('jspdf-autotable'), 'jspdf-autotable');\r\n\r\n const document = new jsPDF({ orientation: 'landscape' });\r\n\r\n if (matrix.title) {\r\n document.setFontSize(TITLE_FONT_SIZE);\r\n document.text(matrix.title, PAGE_MARGIN, TITLE_BASELINE);\r\n }\r\n\r\n autoTable(document, {\r\n head: [matrix.headers],\r\n body: matrix.rows.map(row => row.map(cell => this.stringify(cell))),\r\n startY: matrix.title ? TABLE_TOP_WITH_TITLE : undefined,\r\n margin: { left: PAGE_MARGIN, right: PAGE_MARGIN },\r\n styles: { fontSize: 8, overflow: 'linebreak' },\r\n headStyles: { fontStyle: 'bold' },\r\n didParseCell: (data: CellHookData) => this.applyPdfFill(matrix, data),\r\n });\r\n\r\n document.save(`${fileName}.pdf`);\r\n }\r\n\r\n private async loadWorkbook(): Promise<WorkbookConstructor> {\r\n const excel = await this.load(() => import('exceljs'), 'exceljs') as unknown as ExcelJsNamespace;\r\n const Workbook = excel.Workbook ?? excel.default?.Workbook;\r\n\r\n if (!Workbook) {\r\n throw new Error(\r\n '@cauca-911/datagrid could not load exceljs: the module exposes no Workbook. '\r\n + 'This is a bundler CommonJS interop problem, not a missing package.',\r\n );\r\n }\r\n\r\n return Workbook;\r\n }\r\n\r\n private async load<T>(importer: () => Promise<T>, packageName: string): Promise<T> {\r\n try {\r\n return await importer();\r\n } catch (cause) {\r\n throw new Error(\r\n `@cauca-911/datagrid needs the optional peer dependency \"${packageName}\" to export. `\r\n + 'Run: npm install exceljs jspdf jspdf-autotable --save',\r\n { cause },\r\n );\r\n }\r\n }\r\n\r\n private applyFill(cell: ExcelCell, fillColor: string): void {\r\n const argb = hexToArgb(fillColor);\r\n if (!argb) {\r\n return;\r\n }\r\n cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb } };\r\n cell.border = FILL_CELL_BORDER;\r\n }\r\n\r\n private applyPdfFill(matrix: ExportMatrix, data: CellHookData): void {\r\n if (data.section !== 'body') {\r\n return;\r\n }\r\n const cell = matrix.rows[data.row.index]?.[data.column.index];\r\n if (!cell || !isFilledExportCell(cell) || !hexToArgb(cell.fillColor)) {\r\n return;\r\n }\r\n data.cell.styles.fillColor = cell.fillColor;\r\n data.cell.styles.lineColor = FILL_BORDER_COLOR;\r\n data.cell.styles.lineWidth = FILL_BORDER_WIDTH;\r\n data.cell.styles.minCellWidth = MIN_CELL_WIDTH;\r\n }\r\n\r\n private valueOf(cell: ExportCell): ExportValue {\r\n return isFilledExportCell(cell) ? cell.value : cell;\r\n }\r\n\r\n private localize(value: ExportValue): ExportValue {\r\n return typeof value === 'boolean'\r\n ? this.translateService.instant(value ? 'dataGrid.export.true' : 'dataGrid.export.false')\r\n : value;\r\n }\r\n\r\n private stringify(cell: ExportCell): string {\r\n const value = this.valueOf(cell);\r\n if (value === null || value === undefined) {\r\n return '';\r\n }\r\n if (value instanceof Date) {\r\n return formatDate(value, DATE_MASK, this.locale);\r\n }\r\n return String(this.localize(value));\r\n }\r\n\r\n private download(blob: Blob, fileName: string): void {\r\n const url = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = fileName;\r\n link.click();\r\n URL.revokeObjectURL(url);\r\n }\r\n}\r\n","import {\r\n AfterContentInit, Component, ContentChild,\r\n computed, ContentChildren, Inject, inject, input, linkedSignal, output, QueryList, signal, ViewChild,\r\n ChangeDetectionStrategy\r\n} from '@angular/core';\r\nimport { MatColumnDef, MatFooterRowDef, MatHeaderRowDef, MatNoDataRow, MatRowDef, MatTable } from '@angular/material/table';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { BaseGridColumnComponent } from './columns/base-grid-column.component';\r\nimport { DataGridHeaderComponent } from './components/data-grid-header/data-grid-header.component';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Density } from './models/density-enum';\r\nimport { Preference } from '../services/preference';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { BasePreferenceService } from '../services/base-preference-service';\r\nimport { PREFERENCE_SERVICE_TOKEN } from '../provide-cauca-grid';\r\nimport { ALL_EXPORT_FORMATS, buildExportMatrix, GridExportFormat, GRID_OWNED_COLUMNS } from './models/grid-export';\r\nimport { GridExportService } from '../services/grid-export.service';\r\nimport { ColumnsChangedEvent } from './models/columns-changed-event';\r\n\r\n\r\n@Component({ changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: '' })\r\nexport abstract class BaseDataGridComponent implements AfterContentInit {\r\n public readonly resourceName = input.required<string>();\r\n public readonly preferenceKey = input<string>();\r\n public readonly gridPreferenceKey = computed(() => this.preferenceKey() || this.resourceName());\r\n public readonly displayedColumns = input<string[]>([]);\r\n public readonly showAddButton = input(false);\r\n public readonly disableAddButton = input(false);\r\n public readonly addButtonLabel = input('');\r\n public readonly searchPlaceholder = input('');\r\n public readonly showSearchBar = input(true);\r\n public readonly searchableColumns = input<string[]>();\r\n public readonly showTableOptions = input(false);\r\n public readonly showColumnViewer = input(true);\r\n public readonly showPaginator = input(false);\r\n public readonly hidePageSize = input(false);\r\n public readonly showExpandButton = input(false);\r\n public readonly allowExport = input(false);\r\n public readonly exportFileName = input('');\r\n public readonly exportRows = input<(() => Promise<unknown[]>) | undefined>(undefined);\r\n public readonly exportFormats = input<readonly GridExportFormat[]>(ALL_EXPORT_FORMATS);\r\n public readonly exportTitle = input('');\r\n public readonly canExport = computed(() => this.allowExport());\r\n public readonly addButtonClick = output<void>();\r\n public expandedElement = signal<any>(null);\r\n\r\n @ViewChild(DataGridHeaderComponent) public header!: DataGridHeaderComponent;\r\n @ViewChild(MatTable, { static: true }) public table: MatTable<unknown>;\r\n @ContentChildren(BaseGridColumnComponent) public regularColumns: QueryList<BaseGridColumnComponent>;\r\n @ContentChildren(MatColumnDef) public columnDefs: QueryList<MatColumnDef>;\r\n @ContentChild(MatHeaderRowDef) public headerRowDef: QueryList<MatHeaderRowDef>;\r\n @ContentChild(MatFooterRowDef) public footerRowDef: QueryList<MatFooterRowDef>;\r\n @ContentChildren(MatRowDef) public rowDefs: QueryList<MatRowDef<unknown>>;\r\n @ContentChild(MatNoDataRow) public noDataRow: MatNoDataRow;\r\n @ViewChild(MatPaginator) public paginator: MatPaginator;\r\n\r\n public defaultAddButtonLabel: string = '';\r\n\r\n /**\r\n * Derived from the column inputs, but overwritten when the user picks columns in the table\r\n * options — which is exactly what linkedSignal models. It replaces the ngOnChanges mirroring\r\n * this class used to do (ADR-0003).\r\n */\r\n public readonly allDisplayedColumns = linkedSignal(() => this.computeDisplayedColumns());\r\n public preference: Preference;\r\n\r\n protected sort: MatSort = null;\r\n\r\n private readonly exportService = inject(GridExportService);\r\n\r\n public get density(): typeof Density {\r\n return Density;\r\n }\r\n\r\n public constructor(translateService: TranslateService,\r\n @Inject(PREFERENCE_SERVICE_TOKEN) private preferenceService: BasePreferenceService,) {\r\n this.defaultAddButtonLabel = translateService.instant('dataGrid.defaultAddButtonLabel');\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.setUpPaginator(this.paginator, this.showPaginator());\r\n this.setUpFilterPredicate();\r\n if (this.table && this.regularColumns && this.rowDefs && this.columnDefs) {\r\n this.applyColumns();\r\n }\r\n\r\n if (this.showTableOptions()) {\r\n this.preferenceService.preference.subscribe((preference) => {\r\n this.preference = preference;\r\n });\r\n } else {\r\n this.preference = new Preference();\r\n }\r\n }\r\n\r\n public onExpand(element: any): void {\r\n if (this.expandedElement() === element) {\r\n this.expandedElement.set(null);\r\n } else {\r\n this.expandedElement.set(element);\r\n }\r\n }\r\n\r\n public clearFilter(): void {\r\n this.header?.clearSearchValue();\r\n }\r\n\r\n public renderRows(): void {\r\n this.forceReloadFilter();\r\n this.applyColumns();\r\n this.table.renderRows();\r\n }\r\n\r\n public onDensityChanged(density: Density): void {\r\n this.preferenceService.setPreferenceDensity(density);\r\n }\r\n\r\n public abstract getData(): unknown[];\r\n\r\n /** The rows to export when the caller supplies no `exportRows` provider; may be fetched. */\r\n protected abstract getExportSourceRows(): unknown[] | Promise<unknown[]>;\r\n protected abstract setUpFilterPredicate(): void;\r\n protected abstract setUpSort(sort: MatSort): void;\r\n protected abstract forceReloadFilter(): void;\r\n\r\n protected async onExportRequest(format: GridExportFormat): Promise<void> {\r\n const provider = this.exportRows();\r\n const rows = await (provider ? provider() : this.getExportSourceRows());\r\n const matrix = buildExportMatrix(this.allDisplayedColumns(), this.regularColumns?.toArray() ?? [], rows as Record<string, unknown>[], this.exportTitle());\r\n const fileName = this.exportFileName() || this.resourceName();\r\n\r\n await (format === 'excel'\r\n ? this.exportService.toExcel(matrix, fileName)\r\n : this.exportService.toPdf(matrix, fileName));\r\n }\r\n\r\n /** The set of columns to render, before the user's own column selection is applied. */\r\n protected computeDisplayedColumns(): string[] {\r\n return [...this.displayedColumns()];\r\n }\r\n\r\n protected setUpPaginator(_paginator: MatPaginator, _showPaginator: boolean): void {\r\n // nothing\r\n }\r\n\r\n protected onColumnsChanged({ columns, persist }: ColumnsChangedEvent): void {\r\n this.allDisplayedColumns.set([...columns]);\r\n if (!persist) {\r\n return;\r\n }\r\n const columnsToSave = this.removeMandatoryColumns([...columns]);\r\n this.preferenceService.addOrUpdateGridPreference(this.gridPreferenceKey(), columnsToSave).subscribe();\r\n }\r\n\r\n protected applyColumns(): void {\r\n this.regularColumns.forEach(dynColumn => this.table.addColumnDef(dynColumn.columnDef));\r\n this.rowDefs.forEach(rowDef => this.table.addRowDef(rowDef));\r\n this.table.setNoDataRow(this.noDataRow);\r\n this.columnDefs.forEach(columnDef => {\r\n this.table.addColumnDef(columnDef);\r\n this.sort.register({ id: columnDef.name, start: 'desc', disableClear: false });\r\n });\r\n }\r\n\r\n private removeMandatoryColumns(columns: string[]): string[] {\r\n return columns.filter(column => !GRID_OWNED_COLUMNS.includes(column));\r\n }\r\n}\r\n","import { CdkConnectedOverlay, CdkOverlayOrigin, STANDARD_DROPDOWN_BELOW_POSITIONS } from '@angular/cdk/overlay';\r\nimport { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\r\nimport { BasicButtonComponent } from '@cauca-911/material';\r\n\r\n@Component({\r\n selector: 'cauca-button-popover',\r\n templateUrl: './button-popover.component.html',\r\n styleUrls: ['./button-popover.component.scss'],\r\n imports: [CdkConnectedOverlay, BasicButtonComponent, CdkOverlayOrigin],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ButtonPopoverComponent {\r\n public buttonLabel = input<string>(null);\r\n public buttonIcon = input<string>('');\r\n public color = input<string>('primary');\r\n\r\n public isActive = signal<boolean>(false);\r\n\r\n protected readonly overlayPositions = STANDARD_DROPDOWN_BELOW_POSITIONS;\r\n\r\n public toggle() {\r\n this.isActive.set(!this.isActive());\r\n }\r\n\r\n public close() {\r\n if (this.isActive()) {\r\n this.isActive.set(false);\r\n }\r\n }\r\n}\r\n","<cauca-basic-button [icon]=\"buttonIcon()\" [color]=\"color()\" [label]=\"buttonLabel()\" [translateLabel]=\"false\" (buttonClick)=\"toggle()\" cdkOverlayOrigin #popoverTrigger=\"cdkOverlayOrigin\" />\r\n\r\n<ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"popoverTrigger\"\r\n [cdkConnectedOverlayOpen]=\"isActive()\"\r\n [cdkConnectedOverlayHasBackdrop]=\"isActive()\"\r\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop-cs'\"\r\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\r\n [cdkConnectedOverlayPush]=\"true\"\r\n [cdkConnectedOverlayViewportMargin]=\"8\"\r\n [cdkConnectedOverlayMinHeight]=\"200\"\r\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\r\n (backdropClick)=\"toggle()\">\r\n <ng-content></ng-content>\r\n</ng-template>\r\n","import { Component, inject, OnInit, QueryList, ViewChild, input, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { Density } from '../../models/density-enum';\r\nimport { BaseGridColumnComponent } from '../../columns/base-grid-column.component';\r\nimport { ButtonPopoverComponent } from '../button-popover/button-popover.component';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { BasicButtonComponent, MenuItemComponent, RaisedButtonComponent, StrokedButtonComponent } from '@cauca-911/material';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { PREFERENCE_SERVICE_TOKEN } from '../../../provide-cauca-grid';\r\nimport { ColumnsChangedEvent } from '../../models/columns-changed-event';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-table-options',\r\n templateUrl: './data-grid-table-options.component.html',\r\n styleUrls: ['./data-grid-table-options.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatCardModule, ButtonPopoverComponent, MatCheckboxModule, StrokedButtonComponent, RaisedButtonComponent, BasicButtonComponent, MatMenuModule, FormsModule, TranslatePipe, MenuItemComponent],\r\n})\r\nexport class DataGridTableOptionsComponent implements OnInit {\r\n public readonly gridName = input.required<string>();\r\n public readonly showColumnViewer = input(true);\r\n public readonly allColumns = input<QueryList<BaseGridColumnComponent>>(new QueryList());\r\n\r\n public readonly densityChanged = output<Density>();\r\n public readonly columnsChanged = output<ColumnsChangedEvent>();\r\n\r\n @ViewChild(ButtonPopoverComponent, { static: true }) public columnViewer: ButtonPopoverComponent;\r\n\r\n public columnsSearch: string = '';\r\n\r\n private readonly preferenceService = inject(PREFERENCE_SERVICE_TOKEN);\r\n\r\n public get density(): typeof Density {\r\n return Density;\r\n }\r\n\r\n public get columns(): BaseGridColumnComponent[] {\r\n return this.allColumns().filter(c => c.prop() !== 'buttons' && c.prop() !== 'menu' && c.prop() !== '' && c.isInColumnChooser());\r\n }\r\n\r\n public get currentDensityIcon(): string {\r\n const currentDensity = this.preferenceService.getPreference()?.gridDensity;\r\n if (currentDensity === Density.Compact) {\r\n return 'density_small';\r\n }\r\n\r\n if (currentDensity === Density.Comfortable) {\r\n return 'density_large';\r\n }\r\n\r\n return 'density_medium';\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.preferenceService.getPreferenceForGrid(this.gridName()).subscribe({\r\n next: configuration => {\r\n if (configuration?.visibleColumns) {\r\n this.selectOnlyUserColumns(configuration.visibleColumns);\r\n } else {\r\n this.selectDefaultColumns();\r\n }\r\n this.onColumnsChanged(false);\r\n }\r\n });\r\n }\r\n\r\n public closeColumnViewer(): void {\r\n if (this.columnViewer) {\r\n this.columnViewer.close();\r\n }\r\n }\r\n\r\n public changeDensity(newDensity: Density): void {\r\n this.densityChanged.emit(newDensity);\r\n }\r\n\r\n public onColumnsChanged(persist = true): void {\r\n const newColumns = this.allColumns().filter(column => column.selected);\r\n this.columnsChanged.emit({ columns: newColumns.map((column) => column.prop()), persist });\r\n }\r\n\r\n public resetColumns(): void {\r\n this.selectDefaultColumns();\r\n this.onColumnsChanged();\r\n }\r\n\r\n public showAllColumns(): void {\r\n this.allColumns().forEach((column => column.selected = true));\r\n this.onColumnsChanged();\r\n }\r\n\r\n private selectOnlyUserColumns(configurationVisibleColumns: string[]): void {\r\n this.allColumns().forEach((column => {\r\n const index = configurationVisibleColumns.findIndex(c => c === column.prop());\r\n if (index === -1 && column.prop() !== 'buttons' && column.prop() !== 'menu' && column.prop() !== '') {\r\n column.selected = false;\r\n }\r\n }));\r\n }\r\n\r\n private selectDefaultColumns(): void {\r\n this.allColumns().forEach((column => {\r\n column.selected = column.visibleByDefault();\r\n }));\r\n }\r\n}\r\n","<div class=\"table-options-bar\">\r\n <div class=\"table-options\">\r\n @if (showColumnViewer()) { <cauca-button-popover [buttonLabel]=\"'dataGrid.columns' | translate\" buttonIcon=\"view_column\">\r\n <mat-card>\r\n <mat-card-content>\r\n <div class=\"columns\">\r\n @for (column of columns; track column) {\r\n <mat-checkbox color=\"primary\" [(ngModel)]=\"column.selected\"\r\n (change)=\"onColumnsChanged()\">\r\n {{column.label()}}\r\n </mat-checkbox>\r\n }\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cauca-stroked-button [small]=\"true\" color=\"primary\" (buttonClick)=\"resetColumns()\" label=\"dataGrid.columnChooser.reset\" [translateLabel]=\"true\" />\r\n <cauca-raised-button [small]=\"true\" color=\"primary\" (buttonClick)=\"showAllColumns()\" label=\"dataGrid.columnChooser.showAll\" [translateLabel]=\"true\" />\r\n </mat-card-actions>\r\n </mat-card>\r\n </cauca-button-popover> }\r\n <cauca-basic-button color=\"primary\" [matMenuTriggerFor]=\"densityMenu\" class=\"open-menu-button\" [icon]=\"currentDensityIcon\" label=\"dataGrid.density.title\" [translateLabel]=\"true\" />\r\n </div>\r\n\r\n <ng-content select=\"[customFilter]\"> </ng-content>\r\n</div>\r\n\r\n<mat-menu #densityMenu=\"matMenu\">\r\n <cauca-menu-item label=\"dataGrid.density.compact\" [translateLabel]=\"true\" icon=\"density_small\" (buttonClick)=\"changeDensity(density.Compact)\" class=\"density-compact\" />\r\n <cauca-menu-item label=\"dataGrid.density.standard\" [translateLabel]=\"true\" icon=\"density_medium\" (buttonClick)=\"changeDensity(density.Standard)\" class=\"density-standard\" />\r\n <cauca-menu-item label=\"dataGrid.density.comfortable\" [translateLabel]=\"true\" icon=\"density_large\" (buttonClick)=\"changeDensity(density.Comfortable)\" class=\"density-comfortable\" />\r\n</mat-menu>","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-progress-spiner',\r\n templateUrl: './data-grid-progress-spiner.component.html',\r\n styleUrls: ['./data-grid-progress-spiner.component.scss'],\r\n imports: [MatProgressSpinnerModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DataGridProgressSpinerComponent {\r\n\r\n public isLoading = input<boolean>(false);\r\n public useBackground = input<boolean>(true);\r\n}\r\n","@if (isLoading()) {\r\n <div class=\"spiner-container\" [class.use-background]=\"useBackground()\">\r\n <mat-progress-spinner\r\n color=\"primary\"\r\n mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </div>\r\n}","import {\r\n AfterContentInit, AfterViewInit, ChangeDetectionStrategy, Component,\r\n ContentChild, effect, inject, input, output,\r\n TemplateRef\r\n} from '@angular/core';\r\nimport { MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRow, MatRowDef, MatTable, MatTableDataSource } from '@angular/material/table';\r\nimport { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { DataGridRowDropEvent } from '../models/data-grid-row-drop-event';\r\nimport { ColumnsChangedEvent } from '../models/columns-changed-event';\r\nimport { toLowerCaseAndWithoutDiacritics } from '@cauca-911/core';\r\nimport { BaseDataGridComponent } from '../base-data-grid.component';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { DataGridHeaderComponent } from '../components/data-grid-header/data-grid-header.component';\r\nimport { DataGridTableOptionsComponent } from '../components/data-grid-table-options/data-grid-table-options.component';\r\nimport { IconButtonComponent } from '@cauca-911/material';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { DataGridProgressSpinerComponent } from '../components/data-grid-progress-spiner/data-grid-progress-spiner.component';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { PREFERENCE_SERVICE_TOKEN } from '../../provide-cauca-grid';\r\nimport { StatusMessageComponent } from '@cauca-911/material';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'cauca-data-grid',\r\n templateUrl: './data-grid.component.html',\r\n styleUrls: ['./data-grid.component.scss'],\r\n imports: [\r\n NgTemplateOutlet, // still needed\r\n // Material Table structure:\r\n MatTable, MatSort, MatColumnDef,\r\n MatHeaderCell, MatHeaderCellDef, MatCellDef,\r\n MatFooterCell, MatFooterCellDef,\r\n MatRow, MatRowDef,\r\n MatHeaderRow, MatHeaderRowDef,\r\n MatFooterRow, MatFooterRowDef,\r\n MatNoDataRow,\r\n // Drag and Drop:\r\n CdkDropList, CdkDrag, CdkDragHandle,\r\n // Material extras:\r\n MatIcon, MatPaginator,\r\n // Custom Components:\r\n DataGridHeaderComponent,\r\n DataGridTableOptionsComponent,\r\n DataGridProgressSpinerComponent,\r\n IconButtonComponent,\r\n StatusMessageComponent\r\n]\r\n})\r\nexport class DataGridComponent extends BaseDataGridComponent implements AfterContentInit, AfterViewInit {\r\n\r\n public readonly data = input<any[]>([]);\r\n public readonly showLoadingError = input(false);\r\n public readonly isLoading = input(false);\r\n public readonly allowReordering = input(false);\r\n public readonly filterPredicate = input<(data: unknown, filter: string) => boolean>();\r\n public readonly showFooter = input(false);\r\n public readonly showHeader = input(true);\r\n public readonly headerColor = input<string | undefined>(undefined);\r\n public readonly showRefreshButton = input(false);\r\n public readonly rowDrop = output<DataGridRowDropEvent>();\r\n public readonly refreshData = output<void>();\r\n @ContentChild(TemplateRef) public rowDetailTemplate!: TemplateRef<any>;\r\n\r\n public dataSource: MatTableDataSource<unknown[]>;\r\n public dragDisabled: boolean = true;\r\n public currentFilter: string = '';\r\n\r\n\r\n public constructor(\r\n translateService: TranslateService,\r\n ) {\r\n super(translateService, inject(PREFERENCE_SERVICE_TOKEN));\r\n this.dataSource = new MatTableDataSource([]);\r\n\r\n // Replaces the ngOnChanges hook that mirrored the `data` input into the datasource.\r\n effect(() => this.setData(this.data()));\r\n }\r\n\r\n public onRefreshData(): void {\r\n this.dataSource.data = [];\r\n this.refreshData.emit();\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.setUpPaginator(this.paginator, this.showPaginator());\r\n }\r\n\r\n public applyFilter(filter: string): void {\r\n if (this.paginator) {\r\n this.paginator.firstPage();\r\n }\r\n this.dataSource.filter = toLowerCaseAndWithoutDiacritics(filter);\r\n }\r\n\r\n public override setUpSort(sort: MatSort): void {\r\n this.sort = sort;\r\n this.dataSource.sort = this.sort;\r\n }\r\n\r\n public override getData(): unknown[] {\r\n return this.dataSource.data;\r\n }\r\n\r\n public getFilteredData(): unknown[] {\r\n return this.dataSource.filteredData;\r\n }\r\n\r\n public refreshDisplayedColumns(columns: string[]): void {\r\n this.onColumnsChanged({ columns, persist: true });\r\n }\r\n\r\n public rowDropped(event: CdkDragDrop<unknown>): void {\r\n const data: unknown[] = this.getData();\r\n const filteredData: any[] = this.getFilteredData();\r\n const fromIndex = data.findIndex((d) => d === filteredData[event.previousIndex]);\r\n const toIndex = data.findIndex((d) => d === filteredData[event.currentIndex]);\r\n if (fromIndex >= 0 && toIndex >= 0) {\r\n moveItemInArray(data, fromIndex, toIndex);\r\n this.renderRows();\r\n this.rowDrop.emit(\r\n new DataGridRowDropEvent({\r\n item: data[fromIndex],\r\n data,\r\n fromIndex,\r\n toIndex,\r\n })\r\n );\r\n }\r\n }\r\n\r\n protected override getExportSourceRows(): unknown[] {\r\n return this.getFilteredData();\r\n }\r\n\r\n protected override setUpPaginator(paginator: MatPaginator, showPaginator: boolean): void {\r\n this.dataSource.paginator = paginator && showPaginator ? paginator : null;\r\n }\r\n\r\n protected override computeDisplayedColumns(): string[] {\r\n return this.decorateColumns(this.displayedColumns());\r\n }\r\n\r\n protected override onColumnsChanged({ columns, persist }: ColumnsChangedEvent): void {\r\n super.onColumnsChanged({ columns, persist });\r\n this.allDisplayedColumns.set(this.decorateColumns(columns));\r\n }\r\n\r\n protected override setUpFilterPredicate(): void {\r\n const filterPredicate = this.filterPredicate();\r\n if (filterPredicate) {\r\n this.dataSource.filterPredicate = filterPredicate;\r\n } else if (this.searchableColumns()?.length > 0) {\r\n this.dataSource.filterPredicate = (data: unknown, filter: string) => {\r\n return this.searchableColumns().some((column) => {\r\n const value = data[column];\r\n return value?.toString().toLowerCaseAndWithoutDiacritics().includes(filter);\r\n });\r\n };\r\n }\r\n }\r\n\r\n protected override forceReloadFilter(): void {\r\n // eslint-disable-next-line no-self-assign\r\n this.dataSource.filter = this.dataSource.filter;\r\n }\r\n\r\n /** `position` and `expand` are grid-owned columns, not part of the caller's list. */\r\n private decorateColumns(columns: string[]): string[] {\r\n let decorated = [...columns];\r\n if (this.allowReordering() && !decorated.includes('position')) {\r\n decorated = ['position', ...decorated];\r\n }\r\n if (this.showExpandButton() && !decorated.includes('expand')) {\r\n decorated = ['expand', ...decorated];\r\n }\r\n return decorated;\r\n }\r\n\r\n private setData(data: any[]): void {\r\n if (!Array.isArray(data)) {\r\n return;\r\n }\r\n this.dataSource.data = data;\r\n setTimeout(() => {\r\n this.table?.setNoDataRow(this.noDataRow);\r\n this.table?.renderRows();\r\n }, 0);\r\n }\r\n}","@if (showHeader()) {\r\n <cauca-data-grid-header [disableAddButton]=\"disableAddButton()\" [showAddButton]=\"showAddButton()\" [addButtonLabel]=\"addButtonLabel() || defaultAddButtonLabel\"\r\n [searchPlaceholder]=\"searchPlaceholder()\" [showSearchBar]=\"showSearchBar()\"\r\n (addButtonClick)=\"addButtonClick.emit($event)\" (filterChange)=\"applyFilter($event)\"\r\n [showRefreshButton]=\"showRefreshButton()\" (refreshRequest)=\"onRefreshData()\"\r\n [showExportMenu]=\"canExport()\" [exportFormats]=\"exportFormats()\" (exportRequest)=\"onExportRequest($event)\">\r\n <ng-content select=\"[filterRow]\" ngProjectAs=\"[filterRow]\" />\r\n <ng-content select=\"[exportItem]\" ngProjectAs=\"[exportItem]\" />\r\n </cauca-data-grid-header>\r\n}\r\n\r\n@if (showTableOptions()) {\r\n <cauca-data-grid-table-options [showColumnViewer]=\"showColumnViewer()\" [gridName]=\"gridPreferenceKey()\" (densityChanged)=\"onDensityChanged($event)\" (columnsChanged)=\"onColumnsChanged($event)\" [allColumns]=\"regularColumns\">\r\n <ng-content\r\n select=\"[customFilter]\"\r\n ngProjectAs=\"[customFilter]\">\r\n </ng-content>\r\n </cauca-data-grid-table-options>\r\n}\r\n\r\n<table matSort mat-table [dataSource]=\"dataSource\" cdkDropList [cdkDropListData]=\"dataSource\"\r\n (cdkDropListDropped)=\"rowDropped($event)\" aria-describedby=\"Data Grid\" multiTemplateDataRows>\r\n\r\n @if (showExpandButton()) {\r\n <ng-container matColumnDef=\"expand\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <div class=\"align-commands\">\r\n <cauca-icon-button (buttonClick)=\"onExpand(row)\" color=\"primary\" class=\"button-icon\" [icon]=\"row === expandedElement() ? 'keyboard_arrow_up' : 'keyboard_arrow_down'\" />\r\n </div>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n }\r\n\r\n @if (allowReordering()) {\r\n <ng-container matColumnDef=\"position\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell (mousedown)=\"dragDisabled = false\" (mouseup)=\"dragDisabled = true\" *matCellDef=\"let group\">\r\n <mat-icon class=\"reorder-icon\" cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n }\r\n\r\n <ng-content></ng-content>\r\n\r\n <tr class=\"grid-header\" [style.background-color]=\"headerColor()\" mat-header-row *matHeaderRowDef=\"allDisplayedColumns(); sticky: true\"></tr>\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: allDisplayedColumns();\" cdkDrag [cdkDragData]=\"row\"\r\n [cdkDragDisabled]=\"dragDisabled\" (cdkDragReleased)=\"dragDisabled = true\"\r\n [class.compact]=\"preference.gridDensity === density.Compact\" [class.standard]=\"preference.gridDensity === density.Standard\"\r\n [class.comfortable]=\"preference.gridDensity === density.Comfortable\"></tr>\r\n\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td mat-cell *matCellDef=\"let row\" [attr.colspan]=\"allDisplayedColumns().length\">\r\n <div class=\"grid-element-detail-wrapper\" [class.grid-element-detail-wrapper-expanded]=\"row === expandedElement()\">\r\n <div class=\"grid-element-detail\">\r\n @if (row === expandedElement()) {\r\n <template [ngTemplateOutlet]=\"rowDetailTemplate\" [ngTemplateOutletContext]=\"{ row: expandedElement() }\"></template>\r\n }\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"grid-detail-row\"></tr>\r\n\r\n @if (showFooter()) {\r\n <tr mat-footer-row *matFooterRowDef=\"allDisplayedColumns(); sticky: false\"></tr>\r\n }\r\n\r\n @if (!isLoading()) {\r\n <tr class=\"mat-row\" *matNoDataRow>\r\n @if (!showLoadingError() && !isLoading()) {\r\n <td class=\"mat-cell data-grid-message\"\r\n [attr.colspan]=\"allDisplayedColumns().length\">\r\n <cauca-status-message type=\"noData\" />\r\n </td>\r\n }\r\n @if (showLoadingError()) {\r\n <td class=\"mat-cell data-grid-message error-message\" [attr.colspan]=\"allDisplayedColumns().length\">\r\n <cauca-status-message type=\"error\" />\r\n </td>\r\n }\r\n </tr>\r\n }\r\n\r\n</table>\r\n\r\n<cauca-data-grid-progress-spiner [isLoading]=\"isLoading()\" />\r\n\r\n@if (showPaginator()) {\r\n <mat-paginator #paginator [hidePageSize]=\"hidePageSize()\" [pageSizeOptions]=\"[5, 10, 25, 50]\" [pageSize]=\"10\" />\r\n}","import {EventEmitter, Injectable, signal} from \"@angular/core\";\r\nimport {ODataDataSource, ODataFilter} from \"odata-data-source\";\r\nimport {distinctUntilChanged, map, Observable, of, Subscription, tap} from \"rxjs\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport buildQuery, {QueryOptions} from \"odata-query\";\r\n\r\nexport interface Paginator {\r\n pageIndex: number;\r\n pageSize: number;\r\n length: number;\r\n page: EventEmitter<any>;\r\n}\r\n\r\ninterface SingleSort {\r\n active: string;\r\n direction: 'asc' | 'desc' | '';\r\n sortChange: EventEmitter<any>;\r\n}\r\ninterface MultiSort {\r\n sortedBy: {\r\n id: string;\r\n direction: 'asc' | 'desc';\r\n }[];\r\n multiSortChange: EventEmitter<any>;\r\n}\r\n\r\nexport type Sort = SingleSort | MultiSort;\r\n\r\ntype SortedBy = { id: string; direction: 'asc' | 'desc' }[];\r\n\r\nclass ExportableODataDataSource extends ODataDataSource {\r\n private knownCount: number | undefined;\r\n private countedFilterKey = '';\r\n\r\n public constructor(private readonly requestClient: HttpClient, private readonly requestPath: string) {\r\n super(requestClient, requestPath);\r\n }\r\n\r\n public override refresh(): void {\r\n this.knownCount = undefined;\r\n super.refresh();\r\n }\r\n\r\n public fetchAll(sortedBy: SortedBy, filters: ODataFilter[], rowCount: number): Observable<object> {\r\n const livePaginator = this.paginator;\r\n this.paginator = { pageIndex: 0, pageSize: rowCount, length: rowCount, page: new EventEmitter<any>() };\r\n try {\r\n return this.getData(0, sortedBy, filters);\r\n } finally {\r\n this.paginator = livePaginator;\r\n }\r\n }\r\n\r\n protected override getData(page: number, sortedBy: SortedBy, filters: ODataFilter[]): Observable<object> {\r\n const filterKey = (filters ?? []).map(filter => JSON.stringify(filter.getFilter())).join('|');\r\n const mustCount = !this.paginator || page === 0 || this.knownCount === undefined || filterKey !== this.countedFilterKey;\r\n\r\n if (mustCount) {\r\n return super.getData(page, sortedBy, filters).pipe(tap(result => this.rememberCount(result, filterKey)));\r\n }\r\n\r\n const knownCount = this.knownCount;\r\n return this.requestClient\r\n .get<object>(this.requestPath + buildQuery(this.buildQueryWithoutCount(page, sortedBy, filters)))\r\n .pipe(map(result => ({ ...result, '@odata.count': knownCount })));\r\n }\r\n\r\n private rememberCount(result: object, filterKey: string): void {\r\n const count = (result as Record<string, unknown>)['@odata.count'];\r\n if (typeof count === 'number') {\r\n this.knownCount = count;\r\n this.countedFilterKey = filterKey;\r\n }\r\n }\r\n\r\n private buildQueryWithoutCount(page: number, sortedBy: SortedBy, filters: ODataFilter[]): Partial<QueryOptions<unknown>> {\r\n const query: Partial<QueryOptions<unknown>> = {\r\n top: this.paginator.pageSize,\r\n skip: this.paginator.pageSize * page,\r\n };\r\n if (this.selectedFields) {\r\n query.select = this.selectedFields;\r\n }\r\n if (sortedBy?.length) {\r\n query.orderBy = sortedBy.map(sort => `${sort.id} ${sort.direction}`);\r\n } else if (this.initialSort?.length) {\r\n query.orderBy = this.initialSort;\r\n }\r\n if (filters) {\r\n query.filter = { and: filters.map(filter => filter.getFilter()) };\r\n }\r\n if (this.expandedFields) {\r\n query.expand = this.expandedFields;\r\n }\r\n return query;\r\n }\r\n}\r\n\r\ninterface Props {\r\n baseUrl: string;\r\n resourceName: string;\r\n paginator: Paginator\r\n sort?: Sort;\r\n initialSort?: string[];\r\n filters: ODataFilter[]\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OdataListingService<T = any> {\r\n public dataSource: ODataDataSource | null = null;\r\n public error = signal(false);\r\n public loading = signal(false);\r\n private errorSubscription: Subscription | null = null;\r\n private loadingSubscription: Subscription | null = null;\r\n\r\n public get data(): T[] | null {\r\n return this.dataSource?.data ?? null;\r\n }\r\n\r\n public constructor(private readonly httpClient: HttpClient) {}\r\n\r\n public initialize({baseUrl, resourceName, paginator, sort, initialSort, filters}: Props): ODataDataSource {\r\n const newDataSource = new ExportableODataDataSource(this.httpClient, `${baseUrl}odata/${resourceName}`);\r\n\r\n newDataSource.filters = filters;\r\n if (initialSort){\r\n newDataSource.initialSort = initialSort;\r\n }\r\n if (sort) {\r\n newDataSource.sort = sort;\r\n }\r\n newDataSource.paginator = paginator;\r\n this.dataSource = newDataSource;\r\n\r\n this.dataSource.refresh();\r\n this.errorSubscription = this.dataSource.errors.subscribe((errors) => this.error.set(!!errors));\r\n\r\n this.loadingSubscription = this.dataSource.loading\r\n .pipe(distinctUntilChanged())\r\n .subscribe((isLoading: boolean) => {\r\n if (isLoading) {\r\n this.loading.set(false);\r\n }\r\n this.loading.set(isLoading);\r\n });\r\n\r\n return newDataSource;\r\n }\r\n\r\n public fetchAllForExport(maxRows: number): Observable<T[]> {\r\n const dataSource = this.dataSource as ExportableODataDataSource | null;\r\n if (!dataSource) {\r\n return of([]);\r\n }\r\n\r\n const total = dataSource.paginator?.length ?? 0;\r\n const rowCount = total > 0 ? Math.min(total, maxRows) : maxRows;\r\n\r\n return dataSource\r\n .fetchAll(this.sortedBy(), dataSource.filters ?? [], rowCount)\r\n .pipe(map(result => (dataSource.mapResult(result) ?? []) as T[]));\r\n }\r\n\r\n public updateFilters(filters: ODataFilter[]) {\r\n if (this.dataSource) {\r\n this.dataSource.filters = filters;\r\n }\r\n }\r\n\r\n public forceReloadFilter() {\r\n if (this.dataSource) {\r\n // eslint-disable-next-line no-self-assign\r\n this.dataSource.filters = this.dataSource.filters;\r\n }\r\n }\r\n\r\n public isInitialized() {\r\n return this.dataSource !== null;\r\n }\r\n\r\n public refresh() {\r\n this.dataSource?.refresh();\r\n }\r\n\r\n public destroy() {\r\n this.errorSubscription?.unsubscribe();\r\n this.loadingSubscription?.unsubscribe();\r\n }\r\n\r\n /** Mirrors how ODataDataSource reads the active sort, single or multi. */\r\n private sortedBy(): SortedBy {\r\n const sort = this.dataSource?.sort;\r\n if (!sort) {\r\n return [];\r\n }\r\n if ('multiSortChange' in sort) {\r\n return sort.sortedBy ?? [];\r\n }\r\n if (sort.active && sort.direction) {\r\n return [{ id: sort.active, direction: sort.direction as 'asc' | 'desc' }];\r\n }\r\n return [];\r\n }\r\n}\r\n","import { ParamMap, Params } from '@angular/router';\r\n\r\nexport interface GridUrlState {\r\n filter?: string;\r\n sort?: string;\r\n direction?: 'asc' | 'desc' | '';\r\n pageIndex?: number;\r\n pageSize?: number;\r\n}\r\n\r\nconst PARAM_BASE_NAMES = {\r\n filter: 'filter',\r\n sort: 'sort',\r\n direction: 'dir',\r\n pageIndex: 'page',\r\n pageSize: 'size',\r\n} as const;\r\n\r\n/**\r\n * Builds the query param name for a given base name and optional grid state key.\r\n * With a key, the scheme is `<key><CapitalizedBaseName>` (e.g. key \"alerts\" + base \"filter\" -> \"alertsFilter\").\r\n * Without a key, the plain base name is used (e.g. \"filter\").\r\n */\r\nfunction paramName(baseName: string, key: string): string {\r\n if (!key) {\r\n return baseName;\r\n }\r\n return `${key}${baseName.charAt(0).toUpperCase()}${baseName.slice(1)}`;\r\n}\r\n\r\nexport function toQueryParams(state: GridUrlState, key: string = ''): Params {\r\n const params: Params = {};\r\n\r\n if (state.filter) {\r\n params[paramName(PARAM_BASE_NAMES.filter, key)] = state.filter;\r\n }\r\n if (state.sort) {\r\n params[paramName(PARAM_BASE_NAMES.sort, key)] = state.sort;\r\n }\r\n if (state.direction) {\r\n params[paramName(PARAM_BASE_NAMES.direction, key)] = state.direction;\r\n }\r\n if (state.pageIndex) {\r\n params[paramName(PARAM_BASE_NAMES.pageIndex, key)] = state.pageIndex;\r\n }\r\n if (state.pageSize) {\r\n params[paramName(PARAM_BASE_NAMES.pageSize, key)] = state.pageSize;\r\n }\r\n\r\n return params;\r\n}\r\n\r\nexport function fromQueryParams(map: ParamMap, key: string = ''): GridUrlState {\r\n const state: GridUrlState = {};\r\n\r\n const filter = map.get(paramName(PARAM_BASE_NAMES.filter, key));\r\n if (filter) {\r\n state.filter = filter;\r\n }\r\n\r\n const sort = map.get(paramName(PARAM_BASE_NAMES.sort, key));\r\n if (sort) {\r\n state.sort = sort;\r\n }\r\n\r\n const direction = map.get(paramName(PARAM_BASE_NAMES.direction, key));\r\n if (direction === 'asc' || direction === 'desc') {\r\n state.direction = direction;\r\n }\r\n\r\n const pageIndex = parsePositiveInteger(map.get(paramName(PARAM_BASE_NAMES.pageIndex, key)));\r\n if (pageIndex !== undefined) {\r\n state.pageIndex = pageIndex;\r\n }\r\n\r\n const pageSize = parsePositiveInteger(map.get(paramName(PARAM_BASE_NAMES.pageSize, key)));\r\n if (pageSize !== undefined) {\r\n state.pageSize = pageSize;\r\n }\r\n\r\n return state;\r\n}\r\n\r\n/**\r\n * Returns a Params object with every grid-state param name mapped to `null` for the given key.\r\n * Combined with `queryParamsHandling: 'merge'`, this lets the grid explicitly clear stale\r\n * params (e.g. a previously-set filter) instead of leaving them stuck in the URL.\r\n */\r\nexport function emptyQueryParams(key: string = ''): Params {\r\n const params: Params = {};\r\n Object.values(PARAM_BASE_NAMES).forEach((baseName) => {\r\n params[paramName(baseName, key)] = null;\r\n });\r\n return params;\r\n}\r\n\r\nexport function paramsEqual(a: Params, b: Params): boolean {\r\n const aKeys = Object.keys(a).filter((paramKey) => a[paramKey] !== null && a[paramKey] !== undefined);\r\n const bKeys = Object.keys(b).filter((paramKey) => b[paramKey] !== null && b[paramKey] !== undefined);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n return aKeys.every((paramKey) => String(a[paramKey]) === String(b[paramKey]));\r\n}\r\n\r\nfunction parsePositiveInteger(value: string | null): number | undefined {\r\n if (!value) {\r\n return undefined;\r\n }\r\n const parsed = Number(value);\r\n if (Number.isNaN(parsed) || parsed < 0) {\r\n return undefined;\r\n }\r\n return parsed;\r\n}\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ContentChild, DestroyRef, EventEmitter, inject, input, OnDestroy, output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ODataFilter } from 'odata-data-source';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { ActivatedRoute, ParamMap, Params, Router } from '@angular/router';\r\nimport { BaseDataGridComponent } from '../base-data-grid.component';\r\nimport { CaucaCoreService, toLowerCaseAndWithoutDiacritics } from '@cauca-911/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { OdataListingService } from \"./odata-listing.service\";\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { MatTable, MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatRow, MatRowDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatCell, MatCellDef } from '@angular/material/table';\r\nimport { IconButtonComponent, StatusMessageComponent } from '@cauca-911/material';\r\nimport { DataGridHeaderComponent } from '../components/data-grid-header/data-grid-header.component';\r\nimport { DataGridProgressSpinerComponent } from '../components/data-grid-progress-spiner/data-grid-progress-spiner.component';\r\nimport { DataGridTableOptionsComponent } from '../components/data-grid-table-options/data-grid-table-options.component';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { PREFERENCE_SERVICE_TOKEN } from '../../provide-cauca-grid';\r\nimport { emptyQueryParams, fromQueryParams, GridUrlState, paramsEqual, toQueryParams } from './grid-url-state';\r\nimport { ColumnsChangedEvent } from '../models/columns-changed-event';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'cauca-odata-grid',\r\n templateUrl: './odata-grid.component.html',\r\n styleUrls: ['./odata-grid.component.scss'],\r\n providers: [OdataListingService],\r\n /**\r\n * The template gives clickable rows a pointer cursor only when the consumer actually listens\r\n * for itemClick, which needs EventEmitter.observers — a count OutputEmitterRef does not\r\n * expose. Declared here so the property stays an EventEmitter without an @Output decorator.\r\n * See ADR-0003.\r\n */\r\n // eslint-disable-next-line @angular-eslint/no-outputs-metadata-property\r\n outputs: ['itemClick'],\r\n imports: [\r\n NgTemplateOutlet,\r\n // Material table structure:\r\n MatTable, MatColumnDef,\r\n MatHeaderCell, MatHeaderCellDef, MatCell, MatCellDef,\r\n MatHeaderRow, MatHeaderRowDef,\r\n MatRow, MatRowDef, MatNoDataRow,\r\n // Material extras\r\n MatPaginator,\r\n // custom components\r\n DataGridHeaderComponent,\r\n DataGridTableOptionsComponent,\r\n IconButtonComponent,\r\n DataGridProgressSpinerComponent,\r\n StatusMessageComponent,\r\n ]\r\n})\r\nexport class OdataGridComponent extends BaseDataGridComponent implements OnDestroy, AfterViewInit {\r\n\r\n public showTableHeader = input(true);\r\n /** Master switch: when true, the grid's filter/sort/page are synced with the URL query params and restored when returning from a detail page. Off by default. */\r\n public persistState = input(false);\r\n /** Optional prefix for the persisted query params, so two independent grids on the same route don't collide (e.g. \"alerts\" -> \"alertsFilter\"). */\r\n public stateKey = input('');\r\n public readonly baseSort = input<string[]>();\r\n public readonly filterPredicate = input<(filter: string) => ODataFilter[]>();\r\n public readonly showHeader = input(true);\r\n public readonly selectedRowId = input<any>();\r\n public readonly idField = input('id');\r\n public readonly showRefreshButton = input(false);\r\n public readonly maxExportRows = input(5000);\r\n public readonly itemClick = new EventEmitter<any>();\r\n public readonly refreshRequested = output<void>();\r\n @ContentChild(TemplateRef) public rowDetailTemplate!: TemplateRef<any>;\r\n @ViewChild(MatPaginator, {static: true}) public paginator!: MatPaginator;\r\n\r\n private readonly baseUrl = inject(CaucaCoreService).getConfig().apiUrl;\r\n private readonly router = inject(Router, { optional: true });\r\n private readonly route = inject(ActivatedRoute, { optional: true });\r\n private readonly destroyRef = inject(DestroyRef);\r\n private defaultPageSize?: number;\r\n private pendingRestoredFilter?: string;\r\n private lastWrittenParams: Params = {};\r\n private restoredState?: GridUrlState;\r\n\r\n public constructor(\r\n translateService: TranslateService,\r\n public readonly listing: OdataListingService,\r\n ) {\r\n super(translateService, inject(PREFERENCE_SERVICE_TOKEN));\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.listing.destroy();\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n if (!this.canPersistState() || !this.header) {\r\n return;\r\n }\r\n\r\n if (this.pendingRestoredFilter !== undefined) {\r\n this.header.filterControl.setValue(this.pendingRestoredFilter, { emitEvent: false });\r\n this.header.showClearButton.set(!!this.pendingRestoredFilter);\r\n }\r\n\r\n outputToObservable(this.header.filterChange)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.writeCurrentUrlState());\r\n\r\n if (this.restoredState && this.hasRestoredState(this.restoredState)) {\r\n // The initial fetch triggered during ngAfterContentInit (setUpFilterPredicate) can run\r\n // before the paginator/sort are fully wired to the table, so it may go out with default\r\n // skip/orderby/filter. Re-applying the restored state here and forcing a reload once the\r\n // view is fully initialized mirrors the warm-navigation path and guarantees the first\r\n // real fetch reflects the restored filter/sort/page on a cold (browser refresh) load.\r\n this.applyUrlStateToGrid(this.restoredState);\r\n }\r\n }\r\n\r\n public refreshData(): void {\r\n this.listing.refresh();\r\n this.refreshRequested.emit();\r\n }\r\n\r\n public getData(): unknown[] {\r\n return this.listing.data;\r\n }\r\n\r\n public applyFilter(filter: string): void {\r\n this.applyFilterValue(filter, { resetPage: true });\r\n }\r\n\r\n public refreshFilter(): void {\r\n this.applyFilterValue(this.header?.filterControl?.value, { resetPage: true });\r\n }\r\n\r\n public override setUpFilterPredicate(): void {\r\n let filters = this.filterPredicate()?.('') ?? [];\r\n\r\n if (this.canPersistState()) {\r\n filters = this.restoreStateBeforeInitialLoad() ?? filters;\r\n }\r\n\r\n this.listing.initialize({\r\n baseUrl: this.baseUrl,\r\n resourceName: this.resourceName(),\r\n paginator: this.paginator,\r\n sort: this.sort,\r\n initialSort: this.baseSort(),\r\n filters,\r\n });\r\n\r\n if (this.canPersistState()) {\r\n this.setUpUrlStatePersistence();\r\n }\r\n }\r\n\r\n public override setUpSort(sort: MatSort): void {\r\n this.sort = sort;\r\n }\r\n\r\n protected override getExportSourceRows(): Promise<unknown[]> {\r\n return firstValueFrom(this.listing.fetchAllForExport(this.maxExportRows()));\r\n }\r\n\r\n protected override forceReloadFilter(): void {\r\n this.listing.forceReloadFilter();\r\n }\r\n\r\n protected override computeDisplayedColumns(): string[] {\r\n return this.decorateColumns(this.displayedColumns());\r\n }\r\n\r\n protected override onColumnsChanged({ columns, persist }: ColumnsChangedEvent): void {\r\n super.onColumnsChanged({ columns: this.decorateColumns(columns), persist });\r\n }\r\n\r\n private applyFilterValue(filter: string | null | undefined, { resetPage }: { resetPage: boolean }): void {\r\n const filterPredicate = this.filterPredicate();\r\n if (!filterPredicate) {\r\n return;\r\n }\r\n\r\n if (resetPage) {\r\n this.paginator?.firstPage();\r\n }\r\n\r\n this.listing.updateFilters(filterPredicate(toLowerCaseAndWithoutDiacritics(filter)));\r\n }\r\n\r\n /** `expand` is a grid-owned column, not part of the caller's list. */\r\n private decorateColumns(columns: string[]): string[] {\r\n return this.showExpandButton() && !columns.includes('expand')\r\n ? ['expand', ...columns]\r\n : [...columns];\r\n }\r\n\r\n private canPersistState(): boolean {\r\n return this.persistState() && !!this.router && !!this.route;\r\n }\r\n\r\n private restoreStateBeforeInitialLoad(): ODataFilter[] | undefined {\r\n this.defaultPageSize = this.paginator?.pageSize;\r\n const restoredState = fromQueryParams(this.route.snapshot.queryParamMap, this.stateKey());\r\n this.applySortAndPage(restoredState);\r\n this.pendingRestoredFilter = restoredState.filter;\r\n this.restoredState = restoredState;\r\n\r\n const filterPredicate = this.filterPredicate();\r\n if (restoredState.filter === undefined || !filterPredicate) {\r\n return undefined;\r\n }\r\n return filterPredicate(toLowerCaseAndWithoutDiacritics(restoredState.filter));\r\n }\r\n\r\n private setUpUrlStatePersistence(): void {\r\n this.lastWrittenParams = toQueryParams(fromQueryParams(this.route.snapshot.queryParamMap, this.stateKey()), this.stateKey());\r\n\r\n this.sort?.sortChange\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.writeCurrentUrlState());\r\n\r\n this.paginator?.page\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.writeCurrentUrlState());\r\n\r\n this.route.queryParamMap\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((paramMap) => this.reactToExternalUrlStateChange(paramMap));\r\n }\r\n\r\n private applySortAndPage(state: GridUrlState): void {\r\n if (state.sort && this.sort) {\r\n this.sort.active = state.sort;\r\n this.sort.direction = state.direction ?? '';\r\n }\r\n if (this.paginator) {\r\n if (state.pageIndex !== undefined) {\r\n this.paginator.pageIndex = state.pageIndex;\r\n }\r\n if (state.pageSize !== undefined) {\r\n this.paginator.pageSize = state.pageSize;\r\n }\r\n }\r\n }\r\n\r\n private currentUrlState(): GridUrlState {\r\n const pageSize = this.paginator?.pageSize;\r\n return {\r\n filter: this.header?.filterControl.value || undefined,\r\n sort: this.sort?.active || undefined,\r\n direction: this.sort?.direction || undefined,\r\n pageIndex: this.paginator?.pageIndex,\r\n pageSize: pageSize !== undefined && pageSize !== this.defaultPageSize ? pageSize : undefined,\r\n };\r\n }\r\n\r\n private writeCurrentUrlState(): void {\r\n const params = toQueryParams(this.currentUrlState(), this.stateKey());\r\n if (paramsEqual(params, this.lastWrittenParams)) {\r\n return;\r\n }\r\n this.lastWrittenParams = params;\r\n this.router.navigate([], {\r\n relativeTo: this.route,\r\n queryParams: { ...emptyQueryParams(this.stateKey()), ...params },\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true,\r\n });\r\n }\r\n\r\n private reactToExternalUrlStateChange(paramMap: ParamMap): void {\r\n const state = fromQueryParams(paramMap, this.stateKey());\r\n const params = toQueryParams(state, this.stateKey());\r\n if (paramsEqual(params, this.lastWrittenParams)) {\r\n return;\r\n }\r\n this.lastWrittenParams = params;\r\n this.applyUrlStateToGrid(state);\r\n }\r\n\r\n private applyUrlStateToGrid(state: GridUrlState): void {\r\n this.applySortAndPage(state);\r\n\r\n if (this.header) {\r\n this.header.filterControl.setValue(state.filter ?? '', { emitEvent: false });\r\n this.header.showClearButton.set(!!state.filter);\r\n }\r\n\r\n if (this.filterPredicate()) {\r\n this.applyFilterValue(this.header?.filterControl?.value, { resetPage: false });\r\n } else {\r\n this.listing.forceReloadFilter();\r\n }\r\n }\r\n\r\n private hasRestoredState(state: GridUrlState): boolean {\r\n return state.filter !== undefined || state.sort !== undefined || state.pageIndex !== undefined || state.pageSize !== undefined;\r\n }\r\n}\r\n","@if (showHeader()) {\r\n <cauca-data-grid-header\r\n [disableAddButton]=\"disableAddButton()\"\r\n [showRefreshButton]=\"showRefreshButton()\" (refreshRequest)=\"refreshData()\"\r\n [showExportMenu]=\"canExport()\" [exportFormats]=\"exportFormats()\" (exportRequest)=\"onExportRequest($event)\"\r\n [showAddButton]=\"showAddButton()\"\r\n [addButtonLabel]=\"addButtonLabel() || defaultAddButtonLabel\"\r\n [searchPlaceholder]=\"searchPlaceholder()\"\r\n [showSearchBar]=\"showSearchBar()\"\r\n (addButtonClick)=\"addButtonClick.emit($event)\" (filterChange)=\"applyFilter($event)\">\r\n <ng-content select=\"[filterRow]\" ngProjectAs=\"[filterRow]\" />\r\n <ng-content select=\"[exportItem]\" ngProjectAs=\"[exportItem]\" />\r\n </cauca-data-grid-header>\r\n}\r\n\r\n<ng-content select=\"[customHeader]\" ngProjectAs=\"[customHeader]\" />\r\n\r\n@if (showTableOptions()) {\r\n <cauca-data-grid-table-options [showColumnViewer]=\"showColumnViewer()\" [gridName]=\"gridPreferenceKey()\" (densityChanged)=\"onDensityChanged($event)\" (columnsChanged)=\"onColumnsChanged($event)\" [allColumns]=\"regularColumns\">\r\n <ng-content select=\"[customFilter]\" ngProjectAs=\"[customFilter]\" />\r\n </cauca-data-grid-table-options>\r\n}\r\n\r\n<div class=\"relative\">\r\n <table mat-table [dataSource]=\"listing.dataSource\" aria-describedby=\"Data Grid\" multiTemplateDataRows>\r\n @if (showExpandButton()) {\r\n <ng-container matColumnDef=\"expand\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <div class=\"align-commands\">\r\n <cauca-icon-button (buttonClick)=\"onExpand(row)\" color=\"primary\" class=\"button-icon\" [icon]=\"row === expandedElement() ? 'keyboard_arrow_up' : 'keyboard_arrow_down'\" />\r\n </div>\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n <ng-content></ng-content>\r\n @if(showTableHeader()) {\r\n <tr mat-header-row *matHeaderRowDef=\"allDisplayedColumns(); sticky: true\"></tr>\r\n }\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: allDisplayedColumns()\"\r\n [class.showClick]=\"itemClick.observers.length > 0\"\r\n [class.compact]=\"preference.gridDensity === density.Compact\"\r\n [class.standard]=\"preference.gridDensity === density.Standard\"\r\n [class.comfortable]=\"preference.gridDensity === density.Comfortable\"\r\n [class.selected]=\"selectedRowId() === row[idField()]\"\r\n (click)=\"itemClick.emit(row)\"\r\n onkeypress=\"itemClick.emit(row)\">\r\n </tr>\r\n\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td mat-cell *matCellDef=\"let row\" [attr.colspan]=\"allDisplayedColumns().length\">\r\n <div class=\"grid-element-detail-wrapper\" [class.grid-element-detail-wrapper-expanded]=\"row === expandedElement()\">\r\n <div class=\"grid-element-detail\">\r\n @if (row === expandedElement()) {\r\n <template [ngTemplateOutlet]=\"rowDetailTemplate\" [ngTemplateOutletContext]=\"{ row: expandedElement() }\"></template>\r\n }\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"grid-detail-row\"></tr>\r\n\r\n <ng-container *matNoDataRow>\r\n @if(listing.loading() === false) {\r\n <ng-container>\r\n <tr class=\"mat-row\">\r\n @if (listing.error() === false) {\r\n <th class=\"mat-cell data-grid-message\"\r\n [attr.colspan]=\"allDisplayedColumns().length\">\r\n <cauca-status-message type=\"noData\" />\r\n </th>\r\n } @else {\r\n <th class=\"mat-cell data-grid-message\"\r\n [attr.colspan]=\"allDisplayedColumns().length\">\r\n <cauca-status-message type=\"error\" />\r\n </th>\r\n }\r\n </tr>\r\n </ng-container>\r\n }\r\n </ng-container>\r\n </table>\r\n\r\n <cauca-data-grid-progress-spiner [useBackground]=\"false\" [isLoading]=\"listing.loading()\" />\r\n\r\n</div>\r\n\r\n<mat-paginator [hidePageSize]=\"hidePageSize()\" [pageSizeOptions]=\"[5, 10, 25, 50]\" [pageSize]=\"10\" />\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { NavigationEnd, Params, Router } from '@angular/router';\r\nimport { filter } from 'rxjs';\r\n\r\n/**\r\n * Re-injects a list page's remembered grid query params (filter/sort/page, written by\r\n * `OdataGridComponent` when `persistState` is enabled) when the user navigates back to that\r\n * list page from one of its own descendant (detail) routes. Any other way of reaching the\r\n * list page (menu, bookmark, direct link, refresh) leaves it clean, because the previous URL\r\n * won't be a descendant of the list path.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GridStateRestorationService {\r\n private readonly router = inject(Router);\r\n private readonly rememberedParamsByPath = new Map<string, Params>();\r\n private previousPath: string | null = null;\r\n\r\n public constructor() {\r\n this.router.events\r\n .pipe(filter((event): event is NavigationEnd => event instanceof NavigationEnd))\r\n .subscribe((event) => this.onNavigationEnd(event));\r\n }\r\n\r\n private onNavigationEnd(event: NavigationEnd): void {\r\n const currentPath = this.pathOnly(event.urlAfterRedirects);\r\n const currentParams = this.parseParams(event.urlAfterRedirects);\r\n const previousPath = this.previousPath;\r\n this.previousPath = currentPath;\r\n\r\n if (Object.keys(currentParams).length > 0) {\r\n this.rememberedParamsByPath.set(currentPath, currentParams);\r\n return;\r\n }\r\n if (this.restoreIfReturningFromDescendant(currentPath, previousPath)) {\r\n return;\r\n }\r\n this.rememberedParamsByPath.delete(currentPath);\r\n }\r\n\r\n private restoreIfReturningFromDescendant(currentPath: string, previousPath: string | null): boolean {\r\n if (!previousPath || !previousPath.startsWith(`${currentPath}/`)) {\r\n return false;\r\n }\r\n\r\n const remembered = this.rememberedParamsByPath.get(currentPath);\r\n if (!remembered) {\r\n return false;\r\n }\r\n\r\n this.router.navigate([currentPath], { queryParams: remembered, replaceUrl: true });\r\n return true;\r\n }\r\n\r\n private pathOnly(url: string): string {\r\n return url.split('?')[0].split('#')[0];\r\n }\r\n\r\n private parseParams(url: string): Params {\r\n const queryString = url.split('?')[1]?.split('#')[0];\r\n if (!queryString) {\r\n return {};\r\n }\r\n\r\n const params: Params = {};\r\n new URLSearchParams(queryString).forEach((value, key) => {\r\n params[key] = value;\r\n });\r\n return params;\r\n }\r\n}\r\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\r\nimport { GridStateRestorationService } from './grid-state-restoration.service';\r\n\r\n/**\r\n * Activates the grid list-state restoration feature for the whole application. Add this once\r\n * in the app's root providers; it has no effect on pages whose grids don't opt in via\r\n * `[persistState]=\"true\"`.\r\n */\r\nexport function provideGridStateRestoration(): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n provideAppInitializer(() => {\r\n inject(GridStateRestorationService);\r\n }),\r\n ]);\r\n}\r\n","import { ChangeDetectionStrategy, Component, forwardRef, OnDestroy, OnInit, Optional, ViewEncapsulation } from '@angular/core';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { BaseGridColumnComponent, ExportCell } from '../base-grid-column.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cauca-color-data-grid-column',\r\n standalone: true,\r\n imports: [\r\n MatColumnDef,\r\n MatHeaderCell, MatHeaderCellDef, NgStyle,\r\n MatCell, MatCellDef,\r\n MatFooterCellDef, MatFooterCellDef\r\n ],\r\n templateUrl: './color-data-grid-column.component.html',\r\n styleUrl: './color-data-grid-column.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => ColorDataGridColumnComponent) }],\r\n})\r\nexport class ColorDataGridColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n\r\n public override getExportValue(row: Record<string, unknown>): ExportCell {\r\n return { value: null, fillColor: (row[this.prop()] as string | undefined) ?? 'transparent' };\r\n }\r\n\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n\r\n <th mat-header-cell *matHeaderCellDef [ngStyle]=\"{'width': width()}\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let row\">\r\n @if (row[prop()]) {\r\n <div class=\"color-capsule\" [style.backgroundColor]=\"row[prop()]\"></div>\r\n }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n\r\n</ng-container>","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'cauca-check-icon',\r\n template: `\r\n <mat-icon\r\n class=\"check-icon\"\r\n [class.check-mark]=\"checkMark()\"\r\n [class.check]=\"check()\"\r\n [class.uncheck]=\"uncheck()\"\r\n aria-hidden=\"false\"\r\n aria-label=\"State icon\"\r\n [fontIcon]=\"icon()\" />\r\n `,\r\n styleUrls: ['./check-icon.component.scss'],\r\n imports: [MatIcon],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CheckIconComponent {\r\n public checkIcon = input<string>('check');\r\n public uncheckIcon = input<string>('block');\r\n public isChecked = input<boolean>(false);\r\n\r\n public icon = computed(() => (this.isChecked() ? this.checkIcon() : this.uncheckIcon()));\r\n public checkMark = computed(() => this.isChecked() && this.checkIcon() === 'check');\r\n public check = computed(() => this.isChecked() && this.checkIcon() !== 'check');\r\n public uncheck = computed(() => !this.isChecked());\r\n}\r\n","import { Component, OnDestroy, OnInit, Optional, forwardRef, input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { CheckIconComponent } from '../../components/check-icon/check-icon.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-check-column',\r\n templateUrl: './data-grid-check-column.component.html',\r\n styleUrls: ['./data-grid-check-column.component.scss'],\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => DataGridCheckColumnComponent) }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CheckIconComponent, MatColumnDef, MatHeaderCell, MatHeaderCellDef, NgStyle, MatCell, MatCellDef, MatFooterCell, MatFooterCellDef]\r\n})\r\nexport class DataGridCheckColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n public readonly checkIcon = input('check');\r\n public readonly uncheckIcon = input('block');\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n <th mat-header-cell *matHeaderCellDef [ngStyle]=\"{'width': width(), 'text-align': 'center'}\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <cauca-check-icon [checkIcon]=\"checkIcon()\" [uncheckIcon]=\"uncheckIcon()\" [isChecked]=\"row[prop()]\" />\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, Optional, ViewEncapsulation, forwardRef, input } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { NgStyle } from '@angular/common';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-column',\r\n templateUrl: './data-grid-column.component.html',\r\n styleUrls: ['./data-grid-column.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => DataGridColumnComponent) }],\r\n imports: [MatColumnDef, MatHeaderCell, MatHeaderCellDef, NgStyle, MatCell, MatCellDef, MatTooltip, MatFooterCell, MatFooterCellDef]\r\n})\r\nexport class DataGridColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public summaryType = input<'none'|'sum'|'count'>('none');\r\n public summaryLabel = input<string>('');\r\n public format = input<'none'|'phone'>('none');\r\n public isInitialized = false;\r\n private readonly grid = null;\r\n\r\n public constructor (@Optional() odata: OdataGridComponent, @Optional() grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n this.grid = grid??odata;\r\n this.isInitialized = true;\r\n }\r\n\r\n public calculateSummary(): string {\r\n const rows = this.grid?.data?.();\r\n if (this.isInitialized && rows) {\r\n if (this.summaryType() === 'sum') {\r\n return this.summaryLabel() + rows.reduce((acc, row) => acc + row[this.prop()], 0) + this.summaryLabel();\r\n }\r\n if (this.summaryType() === 'count') {\r\n return rows.length + this.summaryLabel();\r\n }\r\n }\r\n return '';\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n\r\n <th mat-header-cell *matHeaderCellDef [ngStyle]=\"{'width': width()}\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let row\">\r\n @if (showToolTip()) {<span [matTooltip]=\"row[prop()]\" >{{ row[prop()] }}</span>}\r\n @else { <span>{{ row[prop()] }}</span>}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (isInitialized) {\r\n {{calculateSummary()}}\r\n }\r\n </td>\r\n\r\n</ng-container>","import { Component, OnDestroy, OnInit, Optional, forwardRef, input, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { MatSortHeader } from '@angular/material/sort';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { IconButtonComponent } from '@cauca-911/material';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-command-icon-column',\r\n templateUrl: './data-grid-command-icon-column.component.html',\r\n styleUrls: ['./data-grid-command-icon-column.component.scss'],\r\n providers: [{ provide: BaseGridColumnComponent, useExisting: forwardRef(() => DataGridCommandIconColumnComponent) }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatColumnDef, MatHeaderCell, MatSortHeader, MatHeaderCellDef, MatIcon, MatCell, MatCellDef, IconButtonComponent, MatFooterCell, MatFooterCellDef ]\r\n})\r\nexport class DataGridCommandIconColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n public readonly checkColor = input('#F8B132');\r\n public readonly checkIcon = input('star');\r\n public readonly uncheckIcon = input('star_outline');\r\n public readonly uncheckColor = input('default');\r\n\r\n public readonly commandClick = output<unknown>();\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n <th mat-header-cell mat-sort-header *matHeaderCellDef>\r\n <div>\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <mat-icon [style.color]=\"uncheckColor()\" aria-hidden=\"false\" aria-label=\"State icon\" [fontIcon]=\"uncheckIcon()\" />\r\n }\r\n </div>\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <div>\r\n <cauca-icon-button (buttonClick)=\"commandClick.emit(row)\" [icon]=\"row[prop()] ? checkIcon() : uncheckIcon()\" [color]=\"row[prop()] ? checkColor() : uncheckColor()\" />\r\n </div>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","import { ChangeDetectionStrategy, Component, ContentChild, OnDestroy, OnInit, Optional, TemplateRef, ViewEncapsulation, forwardRef, input, output } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { IconButtonComponent } from '@cauca-911/material';\r\nimport { NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { RouterLink } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-commands-column',\r\n templateUrl: './data-grid-commands-column.component.html',\r\n styleUrls: ['./data-grid-commands-column.component.scss'],\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => DataGridCommandsColumnComponent) }],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatCell, MatCellDef, IconButtonComponent, NgTemplateOutlet, MatFooterCell, MatFooterCellDef, NgStyle, RouterLink]\r\n})\r\nexport class DataGridCommandsColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public readonly canDelete = input(false);\r\n public readonly canEdit = input(false);\r\n public readonly canDuplicate = input(false);\r\n public readonly editLinkField = input<string>();\r\n\r\n @ContentChild(TemplateRef) public menuTemplate: TemplateRef<any>;\r\n\r\n public readonly deleteClick = output<unknown>();\r\n public readonly editClick = output<unknown>();\r\n public readonly duplicateClick = output<unknown>();\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n}\r\n","<ng-container matColumnDef=\"buttons\">\r\n <th mat-header-cell *matHeaderCellDef [ngStyle]=\"{'width': width()}\"> {{ label() }} </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n\r\n <div class=\"align-commands\">\r\n\r\n @if (canEdit()) { <cauca-icon-button colorOnHover=\"var(--primary)\" color=\"grey\" icon=\"edit\" [routerLink]=\"editLinkField() ? [row[editLinkField()]] : null\" (buttonClick)=\"editClick?.emit(row)\" class=\"edit-button\" /> }\r\n\r\n @if (canDuplicate()) { <cauca-icon-button color=\"grey\" icon=\"content_copy\" (buttonClick)=\"duplicateClick?.emit(row)\" class=\"duplicate-button\" /> }\r\n\r\n @if (canDelete()) { <cauca-icon-button colorOnHover=\"var(--warn)\" color=\"grey\" icon=\"close\" (buttonClick)=\"deleteClick?.emit(row)\" class=\"delete-button\" /> }\r\n\r\n <template [ngTemplateOutlet]=\"menuTemplate\" [ngTemplateOutletContext]=\"{row:row}\"></template>\r\n\r\n </div>\r\n\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","import { Component, OnDestroy, OnInit, Optional, forwardRef, input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { IconComponent } from '@cauca-911/material';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-icon-column',\r\n templateUrl: './data-grid-icon-column.component.html',\r\n styleUrls: ['./data-grid-icon-column.component.scss'],\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => DataGridIconColumnComponent) }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatCell, MatCellDef, IconComponent, MatFooterCell, MatFooterCellDef, NgClass, MatIcon]\r\n})\r\nexport class DataGridIconColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public readonly alignRight = input(false);\r\n public readonly useMatIcon = input(false);\r\n public readonly icon = input('');\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n <th mat-header-cell *matHeaderCellDef> {{ showLabel() ? label() ?? capitalize(prop()) : '' }} </th>\r\n <td [ngClass]=\"alignRight() ? 'td-right' : ''\" mat-cell *matCellDef=\"let row\">\r\n @if (useMatIcon()) { <mat-icon>{{icon()}}</mat-icon> }\r\n @else { <cauca-icon [icon]=\"row[prop()]\" /> }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","import { ChangeDetectionStrategy, Component, ContentChild, InputSignal, ModelSignal, OnDestroy, OnInit, Optional, TemplateRef, ViewEncapsulation, forwardRef, input, model, output } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { IconButtonComponent, MenuItemComponent } from '@cauca-911/material';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { RouterLink } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cauca-data-grid-menu-column',\r\n templateUrl: './data-grid-menu-column.component.html',\r\n styleUrls: ['./data-grid-menu-column.component.scss'],\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => DataGridMenuColumnComponent) }],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n MatColumnDef,\r\n MatHeaderCell,\r\n MatHeaderCellDef,\r\n MatCell,\r\n MatCellDef,\r\n IconButtonComponent,\r\n MatMenuModule,\r\n MenuItemComponent,\r\n NgTemplateOutlet,\r\n MatFooterCell,\r\n MatFooterCellDef,\r\n RouterLink\r\n ],\r\n})\r\nexport class DataGridMenuColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n public canDelete: ModelSignal<boolean> = model(false);\r\n public readonly canDeleteByRow = input<(row: any) => boolean>(null);\r\n public canEdit: InputSignal<boolean> = input(false);\r\n public canDuplicate: ModelSignal<boolean> = model(false);\r\n public readonly canDuplicateByRow = input<(row: any) => boolean>(null);\r\n public editLinkField: InputSignal<string> = input();\r\n public duplicateLinkField: InputSignal<string> = input();\r\n @ContentChild(TemplateRef) public menuTemplate: TemplateRef<any>;\r\n\r\n public deleteClick = output<unknown>();\r\n public editClick = output<unknown>();\r\n public duplicateClick = output<unknown>();\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n\r\n public menuOpened(row: any): void {\r\n const canDeleteByRow = this.canDeleteByRow();\r\n if (canDeleteByRow) {\r\n this.canDelete.set(canDeleteByRow(row));\r\n }\r\n const canDuplicateByRow = this.canDuplicateByRow();\r\n if (canDuplicateByRow) {\r\n this.canDuplicate.set(canDuplicateByRow(row));\r\n }\r\n }\r\n}\r\n","<ng-container matColumnDef=\"menu\">\r\n <th mat-header-cell *matHeaderCellDef> {{ label() }} </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <div class=\"align-commands\">\r\n\r\n <cauca-icon-button colorOnHover=\"var(--primary)\" color=\"grey\" icon=\"more_horiz\" [matMenuTriggerFor]=\"actionMenu\" (menuOpened)=\"menuOpened(row)\" />\r\n\r\n <mat-menu #actionMenu=\"matMenu\" class=\"grid-menu\">\r\n @if (canEdit()) {\r\n <cauca-menu-item colorOnHover=\"var(--primary)\" icon=\"edit\" label=\"edit\" [translateLabel]=\"true\" [routerLink]=\"editLinkField() ? [row[editLinkField()]] : null\" (buttonClick)=\"editClick?.emit(row)\" class=\"edit-button\" />\r\n }\r\n\r\n @if (canDuplicate()) {\r\n <cauca-menu-item icon=\"content_copy\" label=\"duplicate\" [translateLabel]=\"true\" [routerLink]=\"duplicateLinkField() ? [row[duplicateLinkField()]] : null\" [queryParams]=\"{ duplicate: true }\" (buttonClick)=\"duplicateClick?.emit(row)\" class=\"duplicate-button\" />\r\n }\r\n\r\n @if (canDelete()) {\r\n <cauca-menu-item colorOnHover=\"var(--warn)\" icon=\"close\" label=\"delete\" [translateLabel]=\"true\" (buttonClick)=\"deleteClick?.emit(row)\" class=\"delete-button\" />\r\n }\r\n <template [ngTemplateOutlet]=\"menuTemplate\" [ngTemplateOutletContext]=\"{row:row}\"></template>\r\n\r\n </mat-menu>\r\n\r\n </div>\r\n\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","import dayjs from 'dayjs';\r\n\r\nexport function resolveDisplayDate(date: Date | null, minLimit: Date | null, maxLimit: Date | null): Date | null {\r\n const upperBound = maxLimit ? dayjs(maxLimit).add(-1, 'second').toDate() : null;\r\n\r\n if (!date) {\r\n return upperBound;\r\n }\r\n\r\n const resolved = new Date(date);\r\n if (minLimit) {\r\n const lowerBound = new Date(minLimit);\r\n return resolved < lowerBound ? lowerBound : resolved;\r\n }\r\n if (upperBound) {\r\n return resolved > upperBound ? upperBound : resolved;\r\n }\r\n return resolved;\r\n}\r\n","import { DatePipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { resolveDisplayDate } from './display-date';\r\n\r\n@Component({\r\n selector: 'cauca-time-label',\r\n imports: [DatePipe, MatTooltip],\r\n templateUrl: './time-label.component.html',\r\n styleUrl: './time-label.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TimeLabelComponent {\r\n public date = input.required<Date|null>();\r\n public minLimit = input<Date|null>(null);\r\n public maxLimit = input<Date|null>(null);\r\n public showTime = input<boolean>(true);\r\n public showSecond = input(false);\r\n\r\n public dateMask = computed(() => this.showTime() ? `dd/MM/yyyy${this.timeFormat()}` : 'dd/MM/yyyy');\r\n public displayDate = computed(() => resolveDisplayDate(this.date(), this.minLimit(), this.maxLimit()) ?? '');\r\n\r\n private readonly timeFormat = computed(() => this.showSecond() ? ' HH:mm:ss' : ' HH:mm');\r\n}\r\n","<span [matTooltip]=\"displayDate() | date:dateMask()\">{{ displayDate() | date:dateMask() }}</span>","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewEncapsulation, forwardRef, Optional, input } from '@angular/core';\r\nimport { BaseGridColumnComponent, ExportCell } from '../base-grid-column.component';\r\nimport { resolveDisplayDate } from '../../components/time-label/display-date';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { MatSortHeader } from '@angular/material/sort';\r\nimport { NgStyle } from '@angular/common';\r\nimport { TimeLabelComponent } from '../../components/time-label/time-label.component';\r\n\r\n@Component({\r\n selector: 'cauca-date-grid-column',\r\n templateUrl: './date-grid-column.component.html',\r\n styleUrls: ['./date-grid-column.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => DateGridColumnComponent) }],\r\n imports: [\r\n MatColumnDef,\r\n MatHeaderCell, MatHeaderCellDef, MatSortHeader, NgStyle,\r\n MatCell, MatCellDef,\r\n TimeLabelComponent,\r\n MatFooterCell, MatFooterCellDef,\r\n ]\r\n})\r\nexport class DateGridColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public showWithTime = input(false);\r\n public showSecond = input(false);\r\n\r\n public maxDate = input<Date|null>(null);\r\n public minDate = input<Date|null>(null);\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n\r\n public override getExportValue(row: Record<string, unknown>): ExportCell {\r\n return resolveDisplayDate(row?.[this.prop()] as Date, this.minDate(), this.maxDate());\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header [ngStyle]=\"{'width': width()}\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let row\">\r\n <cauca-time-label [date]=\"row[prop()]\" [showTime]=\"showWithTime()\" [showSecond]=\"showSecond()\" [minLimit]=\"minDate()\" [maxLimit]=\"maxDate()\" />\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>\r\n\r\n","import { Component, OnDestroy, OnInit, Optional, forwardRef, input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { BaseGridColumnComponent } from '../base-grid-column.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { NgStyle } from '@angular/common';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { CheckIconComponent } from '../../components/check-icon/check-icon.component';\r\nimport { MatSortHeader } from '@angular/material/sort';\r\n\r\n@Component({\r\n selector: 'cauca-sortable-data-grid-check-column',\r\n templateUrl: './sortable-data-grid-check-column.component.html',\r\n styleUrls: ['./sortable-data-grid-check-column.component.scss'],\r\n providers: [{ provide: BaseGridColumnComponent, useExisting: forwardRef(() => SortableDataGridCheckColumnComponent) }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatSortHeader, NgStyle, MatTooltip, MatCell, MatCellDef, CheckIconComponent, MatFooterCell, MatFooterCellDef]\r\n})\r\nexport class SortableDataGridCheckColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n public readonly checkIcon = input('check');\r\n public readonly uncheckIcon = input('block');\r\n public readonly sortProp = input('');\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"sortProp() || prop()\" [ngStyle]=\"{'width': width()}\" [matTooltip]=\"label() ?? capitalize(prop())\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{'width': width()}\">\r\n <cauca-check-icon [checkIcon]=\"checkIcon()\" [uncheckIcon]=\"uncheckIcon()\" [isChecked]=\"row[prop()]\" />\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","export function formatPhone(value: unknown): string {\r\n return value?.toString().replace(/(\\d{3})(\\d{3})(\\d{4})/, '$1-$2-$3') ?? '';\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { formatPhone } from './phone-format';\r\n\r\n@Component({\r\n selector: 'cauca-column-label',\r\n imports: [MatTooltip],\r\n templateUrl: './column-label.component.html',\r\n styleUrl: './column-label.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ColumnLabelComponent {\r\n public value = input<any>(null);\r\n public format = input<'none'|'phone'>('none');\r\n public showToolTip = input<boolean>(true);\r\n public displayValue = computed(() => this.format() === 'phone' ? formatPhone(this.value()) : this.value());\r\n}\r\n","@if (showToolTip()) {<span [matTooltip]=\"displayValue()\" >{{ displayValue() }}</span>}\r\n@else { <span>{{displayValue()}}</span>}","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, Optional, ViewEncapsulation, forwardRef, input } from '@angular/core';\r\nimport { BaseGridColumnComponent, ExportCell } from '../base-grid-column.component';\r\nimport { formatPhone } from '../../components/column-label/phone-format';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { ColumnLabelComponent } from '../../components/column-label/column-label.component';\r\nimport { NgStyle } from '@angular/common';\r\nimport { MatSortHeader } from '@angular/material/sort';\r\n\r\n@Component({\r\n selector: 'cauca-sortable-data-grid-column',\r\n templateUrl: './sortable-data-grid-column.component.html',\r\n styleUrls: ['./sortable-data-grid-column.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [ { provide: BaseGridColumnComponent, useExisting: forwardRef(() => SortableDataGridColumnComponent) }],\r\n imports: [\r\n MatColumnDef,\r\n MatHeaderCell, MatHeaderCellDef, MatSortHeader, NgStyle,\r\n MatCell, MatCellDef,\r\n MatTooltip, ColumnLabelComponent,\r\n MatFooterCell, MatFooterCellDef,\r\n ]\r\n})\r\nexport class SortableDataGridColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n\r\n public summaryType = input<'none'|'sum'|'count'>('none');\r\n public summaryLabel = input<string>('');\r\n public format = input<'none'|'phone'>('none');\r\n public readonly sortProp = input('');\r\n\r\n public isInitialized = false;\r\n private readonly grid = null;\r\n\r\n public constructor (@Optional() odata: OdataGridComponent, @Optional() grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n this.grid = grid??odata;\r\n this.isInitialized = true;\r\n }\r\n\r\n public override getExportValue(row: Record<string, unknown>): ExportCell {\r\n const value = (row?.[this.prop()] as ExportCell) ?? null;\r\n return this.format() === 'phone' ? formatPhone(value) : value;\r\n }\r\n\r\n public calculateSummary(): string {\r\n const rows = this.grid?.data?.();\r\n if (this.isInitialized && rows) {\r\n if (this.summaryType() === 'sum') {\r\n return this.summaryLabel() + rows.reduce((acc, row) => acc + row[this.prop()], 0) + this.summaryLabel();\r\n }\r\n if (this.summaryType() === 'count') {\r\n return rows.length + this.summaryLabel();\r\n }\r\n }\r\n return '';\r\n }\r\n}\r\n","\r\n<ng-container matColumnDef=\"{{ prop() }}\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"sortProp() || prop()\" [ngStyle]=\"{'width': width()}\" [matTooltip]=\"label() ?? capitalize(prop())\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let row\">\r\n <cauca-column-label [value]=\"row[prop()]\" [showToolTip]=\"showToolTip()\" [format]=\"format()\" />\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (isInitialized) {\r\n {{calculateSummary()}}\r\n }\r\n </td>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, forwardRef, inject, OnDestroy, OnInit, Optional, ViewEncapsulation, input } from '@angular/core';\r\nimport { BaseGridColumnComponent, ExportCell } from '../base-grid-column.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { ColumnLabelComponent } from '../../components/column-label/column-label.component';\r\n\r\n@Component({\r\n selector: 'cauca-translation-grid-column',\r\n templateUrl: './translation-grid-column.component.html',\r\n styleUrl: './translation-grid-column.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: BaseGridColumnComponent, useExisting: forwardRef(() => TranslationGridColumnComponent) }],\r\n imports: [MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatCell, MatCellDef, TranslatePipe, MatFooterCell, MatFooterCellDef, MatTooltip, ColumnLabelComponent],\r\n})\r\nexport class TranslationGridColumnComponent extends BaseGridColumnComponent implements OnDestroy, OnInit {\r\n public readonly prefix = input('');\r\n\r\n private readonly translateService = inject(TranslateService);\r\n\r\n public constructor (@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid??odata)?.table);\r\n }\r\n\r\n public override getExportValue(row: Record<string, unknown>): ExportCell {\r\n const value = row?.[this.prop()];\r\n return value == null ? null : this.translateService.instant(`${this.prefix()}.${value}`);\r\n }\r\n}\r\n","<ng-container matColumnDef=\"{{ prop() }}\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let row\">\r\n @if (prefix() && row[prop()]) { <cauca-column-label [value]=\"prefix()+'.'+row[prop()] | translate\" [showToolTip]=\"showToolTip()\" /> }\r\n @else if(row[prop()]) { <cauca-column-label [value]=\"row[prop()] | translate\" [showToolTip]=\"showToolTip()\" /> }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n</ng-container>","import { NgStyle } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Optional, ViewEncapsulation } from '@angular/core';\r\nimport { MatCell, MatCellDef, MatColumnDef, MatFooterCellDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { Iso8601TimeSpanPipe } from '@cauca-911/material';\r\nimport { BaseGridColumnComponent, ExportCell } from '../base-grid-column.component';\r\nimport { OdataGridComponent } from '../../odata-grid/odata-grid.component';\r\nimport { DataGridComponent } from '../../data-grid/data-grid.component';\r\n\r\nconst timeSpanFormatter = new Iso8601TimeSpanPipe();\r\n\r\n@Component({\r\n selector: 'cauca-time-span-data-grid-column',\r\n imports: [MatColumnDef, MatHeaderCell, MatHeaderCellDef, NgStyle, MatCell, MatCellDef, MatTooltip, MatFooterCellDef, Iso8601TimeSpanPipe],\r\n templateUrl: './time-span-data-grid-column.component.html',\r\n styleUrl: './time-span-data-grid-column.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: BaseGridColumnComponent, useExisting: forwardRef(() => TimeSpanDataGridColumnComponent) }]\r\n})\r\nexport class TimeSpanDataGridColumnComponent extends BaseGridColumnComponent {\r\n\r\n public constructor(@Optional() public readonly odata: OdataGridComponent, @Optional() public readonly grid: DataGridComponent) {\r\n super((grid ?? odata)?.table);\r\n }\r\n\r\n public override getExportValue(row: Record<string, unknown>): ExportCell {\r\n return timeSpanFormatter.transform(row?.[this.prop()] as string);\r\n }\r\n}","<ng-container matColumnDef=\"{{ prop() }}\">\r\n\r\n <th mat-header-cell *matHeaderCellDef [ngStyle]=\"{'width': width()}\">\r\n {{ label() ?? capitalize(prop()) }}\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let row\">\r\n @if (row[prop()] | Iso8601TimeSpan; as formattedValue) {\r\n <span [matTooltip]=\"showToolTip() ? formattedValue : ''\">\r\n {{ formattedValue }}\r\n </span>\r\n }\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n\r\n</ng-container>"],"mappings":"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"}