@cleavelandprice/ngx-lib 4.7.14 → 4.8.0

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":"cleavelandprice-ngx-lib-table.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/table/src/pipes/roundNumber.ts","../../../../projects/cleavelandprice/ngx-lib/table/src/pipes/decimalPoints.ts","../../../../projects/cleavelandprice/ngx-lib/table/src/components/table/table.component.ts","../../../../projects/cleavelandprice/ngx-lib/table/src/components/table/table.component.html","../../../../projects/cleavelandprice/ngx-lib/table/src/table.module.ts","../../../../projects/cleavelandprice/ngx-lib/table/src/cleavelandprice-ngx-lib-table.ts"],"sourcesContent":["import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({ name: 'roundNumber', standalone: true })\r\nexport class RoundNumberPipe implements PipeTransform{\r\n transform(val: any) {\r\n return Math.round(+val);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({ name: 'decimalPoints', standalone: true })\r\nexport class DecimalPointsPipe implements PipeTransform{\r\n transform(val: any, numberOfDecimalPoints: number) {\r\n return parseFloat(val.toString()).toFixed(numberOfDecimalPoints);\r\n }\r\n}\r\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n inject,\n input,\n output,\n viewChild,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, MatSortHeader, Sort } from '@angular/material/sort';\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatNoDataRow,\n MatRow,\n MatRowDef,\n MatTable,\n MatTableDataSource,\n} from '@angular/material/table';\n\nimport { DatePipe, DecimalPipe, NgClass, NgStyle } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport {\n MatFormField,\n MatLabel,\n MatPrefix,\n} from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { TableColumn } from '../../model/table-column';\nimport { RoundNumberPipe } from '../../pipes/roundNumber';\nimport { DecimalPointsPipe } from '../../pipes/decimalPoints';\nimport { TableExpansion } from '../../model/table-expansion';\n\n@Component({\n selector: 'lib-table',\n imports: [\n DatePipe,\n DecimalPipe,\n FormsModule,\n MatButton,\n MatCell,\n MatCellDef,\n MatCheckbox,\n MatColumnDef,\n MatFormField,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatIcon,\n MatIconButton,\n MatInput,\n MatLabel,\n MatNoDataRow,\n MatPaginator,\n MatPrefix,\n MatRow,\n MatRowDef,\n MatSort,\n MatSortHeader,\n MatTable,\n MatTooltip,\n NgStyle,\n RoundNumberPipe,\n DecimalPointsPipe,\n ],\n standalone: true,\n templateUrl: './table.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './table.component.scss',\n})\nexport class TableComponent implements AfterViewInit {\n //#region Inputs\n title = input('');\n tableData = input.required<any[]>();\n columns = input<TableColumn[]>([]);\n\n showPaginator = input(true);\n showSearch = input(true);\n\n maxTableHeight = input('50em');\n shrinkTable = input(false);\n\n paginatorSticky = input(false);\n pageinatorDefaultIncrement = input(50);\n\n sortingDataAccessor = input<(data: any, sortHeaderId: string) => string>();\n // this was added because we needed to be able to retain & set the table's sort if it was refreshed\n sortState = input<Sort | null>();\n\n headerBackgroundColor = input('#ffffff');\n headerTextColor = input('#000000');\n\n expansion = input<TableExpansion | null>(null);\n\n searchInputValue = input<string | undefined>(undefined);\n //#endregion\n\n buttonClicked = output<{ rowData: any; field: string }>();\n exportSortState = output<Sort>();\n doubleClicked = output<{ rowData: any; field: string }>();\n searchOutputValue = output<string>();\n searchOutputTotalCount = output<number>();\n isMobile = false;\n dataSource!: MatTableDataSource<any>;\n pageSizeOptions!: number[]; // = [10, 20, 100, 500];\n columnNames!: string[];\n\n paginator = viewChild(MatPaginator);\n sort = viewChild(MatSort);\n\n columnsWithExpand = [...this.columns().map((c) => c.field), 'expand'];\n expandedElement: any | null;\n\n changeDetector = inject(ChangeDetectorRef);\n\n ngOnInit(): void {\n this.dataSource = new MatTableDataSource(this.tableData());\n\n this.dataSource.sortingDataAccessor = this.sortingDataAccessor()\n ? this.sortingDataAccessor()!\n : this.#setSortingDataAccessor();\n\n this.columnNames = this.columns().map((c) => c.field);\n this.columnsWithExpand = [...this.columns().map((c) => c.field), 'expand'];\n\n this.#setTablePageSizeOptions(this.pageinatorDefaultIncrement());\n\n this.#setFilterPredicate();\n\n if (this.searchInputValue()) {\n this.searchFilterChange({\n target: { value: this.searchInputValue() },\n } as unknown as Event);\n }\n }\n\n ngAfterViewInit(): void {\n if (this.paginator() && !this.dataSource.paginator) {\n this.dataSource.paginator = this.paginator()!;\n }\n if (this.sort() && !this.dataSource.sort) {\n if (this.sortState()) {\n this.sort()!.active = this.sortState()!.active;\n this.sort()!.direction = this.sortState()!.direction;\n\n // need this to recongize the changes and show the \"arrow\" next to the header\n this.sort()!._stateChanges.next();\n }\n\n this.dataSource.sort = this.sort()!;\n }\n }\n\n ngAfterContentChecked() {\n if (this.changeDetector) this.changeDetector.detectChanges();\n }\n\n /** Checks whether an element is expanded. */\n isExpanded(element: any) {\n return this.expandedElement === element;\n }\n\n /** Toggles the expanded state of an element. */\n toggle(element: any) {\n if (this.isExpanded(element)) this.expandedElement = null;\n else {\n this.expandedElement = null;\n\n // if the expansion is down already & we clicked a new element the table component wouldn't generate the data for the new item\n setTimeout(() => {\n this.expandedElement = element;\n }, 1);\n }\n }\n\n searchFilterChange(event: Event) {\n const filterValue = (event.target as HTMLInputElement).value;\n this.dataSource.filter = filterValue.trim().toLowerCase();\n this.searchOutputValue.emit(filterValue);\n this.searchOutputTotalCount.emit(this.dataSource.filteredData.length);\n }\n\n buttonClick(rowData: any, field: string) {\n this.buttonClicked.emit({ rowData, field });\n }\n\n editableFieldChange(rowData: any, column: TableColumn, value: any) {\n if (column.tripleNestedField)\n rowData[column.tripleNestedField.field][\n column.tripleNestedField.childField\n ][column.tripleNestedField.nestedField] = value;\n else if (column.doubleNestedField)\n rowData[column.doubleNestedField.field][\n column.doubleNestedField.nestedField\n ] = value;\n else if (column.nestedField)\n rowData[column.field][column.nestedField] = value;\n else rowData[column.field] = value;\n\n this.buttonClicked.emit({ rowData, field: column.field });\n }\n\n getDropdownFieldValue(option: any, field: string, nestedField?: string) {\n if (nestedField) return option[field][nestedField];\n else return option[field];\n }\n\n getFieldValue(rowData: any, column: TableColumn) {\n if (column.tripleNestedField)\n return rowData[column.tripleNestedField.field][\n column.tripleNestedField.childField\n ][column.tripleNestedField.nestedField];\n else if (column.doubleNestedField)\n return rowData[column.doubleNestedField.field][\n column.doubleNestedField.nestedField\n ];\n else if (column.nestedField)\n return rowData[column.field][column.nestedField];\n else return rowData[column.field];\n }\n\n tableButtonClicked(buttonClickedObject: { rowData: any; field: string }) {\n if (buttonClickedObject)\n this.buttonClicked.emit({\n rowData: buttonClickedObject.rowData,\n field: buttonClickedObject.field,\n });\n }\n\n sortChanged(sortState: Sort) {\n this.exportSortState.emit(sortState);\n }\n\n #setTablePageSizeOptions(defaultPageIncrement: number = 50) {\n this.pageSizeOptions = [];\n\n for (\n let i = defaultPageIncrement;\n i < this.dataSource.data.length;\n i = i + defaultPageIncrement * 2\n ) {\n this.pageSizeOptions.push(i);\n }\n\n this.pageSizeOptions.push(this.dataSource.data.length);\n }\n\n #setSortingDataAccessor() {\n return (data: any, sortHeaderId: string) => {\n const columnField = this.columns().filter(\n (c) => c.field === sortHeaderId,\n )[0];\n\n return columnField.nestedField\n ? this.getFieldValue(data, columnField)\n : columnField.doubleNestedField\n ? this.getFieldValue(data, columnField)\n : columnField.tripleNestedField\n ? this.getFieldValue(data, columnField)\n : data[sortHeaderId];\n };\n }\n\n #setFilterPredicate() {\n this.dataSource.filterPredicate = (data, filter: string) => {\n const accumulator = (currentTerm, key) => {\n return this.nestedFilterCheck(currentTerm, data, key);\n };\n const dataStr = Object.keys(data).reduce(accumulator, '').toLowerCase();\n // Transform the filter by converting it to lowercase and removing whitespace.\n const transformedFilter = filter.trim().toLowerCase();\n return dataStr.indexOf(transformedFilter) !== -1;\n };\n }\n\n nestedFilterCheck(search, data, key) {\n if (typeof data[key] === 'object') {\n for (const k in data[key]) {\n if (data[key][k] !== null) {\n search = this.nestedFilterCheck(search, data[key], k);\n }\n }\n } else {\n search += data[key];\n }\n return search;\n }\n}\n","@if (showSearch()) {\r\n <div style=\"display: flex; gap: .75em;\">\r\n @if (title() !== '') {\r\n <h3>{{title()}}</h3>\r\n }\r\n\r\n <mat-form-field appearance=\"outline\" style=\"margin-bottom: -1em;\">\r\n <mat-label>Search</mat-label>\r\n <mat-icon matPrefix>search</mat-icon>\r\n <input type=\"text\" matInput [ngModel]=\"searchInputValue()\" (keyup)=\"searchFilterChange($event)\">\r\n </mat-form-field>\r\n </div>\r\n}\r\n@else {\r\n @if (title() !== '') {\r\n <h3>{{title()}}</h3>\r\n }\r\n}\r\n\r\n<div class=\"table-container\" [ngStyle]=\"{'max-height': maxTableHeight()}\" [class.shrink-table]=\"shrinkTable()\">\r\n <table mat-table [dataSource]=\"dataSource\" multiTemplateDataRows matSort (matSortChange)=\"sortChanged($event)\">\r\n @for (column of columns(); track column) {\r\n <ng-container [matColumnDef]=\"column.field\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header [class.hide-mobile]=\"column.hideOnMobile && isMobile\" [ngStyle]=\"{ 'width': column.columnWidth, 'background-color': headerBackgroundColor(), 'color': headerTextColor() }\">\r\n <div>{{ column.fieldColumnTitle }}</div>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let data\" [class.hide-mobile]=\"column.hideOnMobile && isMobile\" [ngStyle]=\"{ 'width': column.columnWidth }\" (dblclick)=\"doubleClicked.emit({ rowData: data, field: column.field })\">\r\n @if(column.isDate) {\r\n @if(column.isDate.showTime) {\r\n {{ getFieldValue(data, column) | date:'short' }}\r\n }\r\n @else if(column.isDate.customFormat) {\r\n {{ getFieldValue(data, column) | date:'' + column.isDate.customFormat + ''}}\r\n }\r\n @else {\r\n {{ getFieldValue(data, column) | date:'shortDate' }}\r\n }\r\n }\r\n @else if (column.isNumber) {\r\n @if (column.isNumber.needsRounded) {\r\n @if (column.isNumber.percentage) {\r\n {{ getFieldValue(data, column) | number:'0.0-0' }}%\r\n }\r\n @else if (column.isNumber.money) {\r\n ${{ getFieldValue(data, column) | number:'0.0-0' }}\r\n }\r\n @else {\r\n {{ getFieldValue(data, column) | number:'0.0-0' }}\r\n }\r\n } @else {\r\n @if (column.isNumber.percentage) {\r\n {{ getFieldValue(data, column) | number:'.2-2' }}%\r\n }\r\n @else if (column.isNumber.money) {\r\n ${{ getFieldValue(data, column) | number:'.2-2' }}\r\n }\r\n @else {\r\n {{ getFieldValue(data, column) | number:'.2-2' }}\r\n }\r\n }\r\n }\r\n @else if (column.isCheckbox) {\r\n @if (column.tripleNestedField) {\r\n <mat-checkbox [(ngModel)]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\" [disabled]=\"column.isCheckbox['isDisabled']\" />\r\n }\r\n @else if (column.doubleNestedField) {\r\n <mat-checkbox [(ngModel)]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\" [disabled]=\"column.isCheckbox['isDisabled']\" />\r\n }\r\n @else if (column.nestedField) {\r\n <mat-checkbox [(ngModel)]=\"data[column.field][column.nestedField]\" [disabled]=\"column.isCheckbox['isDisabled']\" />\r\n }\r\n @else {\r\n <mat-checkbox [(ngModel)]=\"data[column.field]\" [disabled]=\"column.isCheckbox['isDisabled']\" />\r\n }\r\n }\r\n @else if (column.isHyperlink) {\r\n <a [href]=\"data[column.isHyperlink.linkField]\" target=\"_blank\">\r\n {{ getFieldValue(data, column) }}\r\n </a>\r\n }\r\n @else if (column.isButton) {\r\n @if (column.isButton.isIcon) {\r\n @if (column.isButton.isIcon.displayOnFieldValue) {\r\n @if (getFieldValue(data, column) === true) {\r\n <button mat-icon-button [matTooltip]=\"column.isButton.isIcon.toolTip\" [disabled]=\"column.isButton.isDisabled\"\r\n (click)=\"column.isButton.isDisabled ? undefined : buttonClick(data, column.field)\">\r\n <mat-icon [ngStyle]=\"{'color': column.isButton.isIcon.iconColor, 'display': getFieldValue(data, column) === true ? 'default' : 'none'}\">{{column.isButton.isIcon.iconName}}</mat-icon>\r\n </button>\r\n }\r\n }\r\n @else {\r\n <button mat-icon-button [matTooltip]=\"column.isButton.isIcon.toolTip\" [disabled]=\"column.isButton.isDisabled\"\r\n (click)=\"column.isButton.isDisabled ? undefined : buttonClick(data, column.field)\">\r\n <mat-icon [ngStyle]=\"{'color': column.isButton.isIcon.iconColor}\">{{column.isButton.isIcon.iconName}}</mat-icon>\r\n </button>\r\n }\r\n } @else if (column.isButton.isCheckbox) {\r\n @if (column.tripleNestedField) {\r\n <mat-checkbox [matTooltip]=\"column.isButton.isCheckbox.toolTip\"\r\n [(ngModel)]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\" (click)=\"buttonClick(data, column.field)\" />\r\n }\r\n @else if (column.doubleNestedField) {\r\n <mat-checkbox [matTooltip]=\"column.isButton.isCheckbox.toolTip\"\r\n [(ngModel)]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\" (click)=\"buttonClick(data, column.field)\" />\r\n }\r\n @else if (column.nestedField) {\r\n <mat-checkbox [matTooltip]=\"column.isButton.isCheckbox.toolTip\"\r\n [(ngModel)]=\"data[column.field][column.nestedField]\" (click)=\"buttonClick(data, column.field)\" />\r\n }\r\n @else {\r\n <mat-checkbox [matTooltip]=\"column.isButton.isCheckbox.toolTip\"\r\n [(ngModel)]=\"data[column.field]\" (click)=\"buttonClick(data, column.field)\" />\r\n }\r\n } @else {\r\n <button mat-raised-button [disabled]=\"column.isButton.isDisabled\"\r\n [color]=\"column.isButton.isDisabled ? undefined : 'primary'\"\r\n [class.button-extra-padding]=\"column.isButton.extraPadding\"\r\n (click)=\"column.isButton.isDisabled ? undefined : buttonClick(data, column.field)\">\r\n\r\n @if (column.isButton.buttonText && column.isButton.buttonText.text) {\r\n {{column.isButton.buttonText.text}}\r\n }\r\n @else if (column.isButton.buttonText &&column.isButton.buttonText.field) {\r\n {{ data[column.isButton.buttonText.field] }}\r\n }\r\n @else if (column.isButton.buttonText && column.isButton.buttonText.nestedField) {\r\n {{ getFieldValue(data, column) }}\r\n }\r\n @else if (column.isButton.text) {\r\n {{column.isButton.text}}\r\n }\r\n\r\n @if (column.isButton.buttonText && column.isButton.buttonText.includesIcon) {\r\n <mat-icon>\r\n {{column.isButton.buttonText.includesIcon.iconName}}\r\n </mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n @else if (column.isEditable) {\r\n @if (column.isEditable.type === 'textarea') {\r\n @if (column.tripleNestedField) {\r\n <textarea\r\n [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '100%' }\"\r\n [rows]=\"3\"\r\n [(ngModel)]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\"\r\n [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"\r\n (ngModelChange)=\"editableFieldChange(data, column, $event)\"\r\n ></textarea>\r\n }\r\n @else if (column.doubleNestedField) {\r\n <textarea\r\n [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '100%' }\"\r\n [rows]=\"3\"\r\n [(ngModel)]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\"\r\n [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"\r\n (ngModelChange)=\"editableFieldChange(data, column, $event)\"\r\n ></textarea>\r\n }\r\n @else if (column.nestedField) {\r\n <textarea\r\n [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '100%' }\"\r\n [rows]=\"3\"\r\n [(ngModel)]=\"data[column.field][column.nestedField]\"\r\n [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"\r\n (ngModelChange)=\"editableFieldChange(data, column, $event)\"\r\n ></textarea>\r\n }\r\n @else {\r\n <textarea\r\n [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '100%' }\"\r\n [rows]=\"3\"\r\n [(ngModel)]=\"data[column.field]\"\r\n [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"\r\n (ngModelChange)=\"editableFieldChange(data, column, $event)\"\r\n ></textarea>\r\n }\r\n }\r\n @else if (column.isEditable.type === 'dropdown' && column.isEditable.isDropdown) {\r\n @if (column.tripleNestedField) {\r\n <select [(ngModel)]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\" (change)=\"buttonClick(data, column.field)\">\r\n @for (item of column.isEditable.isDropdown.options; track $index) {\r\n <option\r\n [value]=\"getDropdownFieldValue(item, column.isEditable.isDropdown.value.field, column.isEditable.isDropdown.value.nestedField)\"\r\n >\r\n {{ getDropdownFieldValue(item, column.isEditable.isDropdown.displayField.field, column.isEditable.isDropdown.displayField.nestedField) }}\r\n </option>\r\n }\r\n </select>\r\n }\r\n @else if (column.doubleNestedField) {\r\n <select [(ngModel)]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\" (change)=\"buttonClick(data, column.field)\">\r\n @for (item of column.isEditable.isDropdown.options; track $index) {\r\n <option\r\n [value]=\"getDropdownFieldValue(item, column.isEditable.isDropdown.value.field, column.isEditable.isDropdown.value.nestedField)\"\r\n >\r\n {{ getDropdownFieldValue(item, column.isEditable.isDropdown.displayField.field, column.isEditable.isDropdown.displayField.nestedField) }}\r\n </option>\r\n }\r\n </select>\r\n }\r\n @else if (column.nestedField) {\r\n <select [(ngModel)]=\"data[column.field][column.nestedField]\" (change)=\"buttonClick(data, column.field)\">\r\n @for (item of column.isEditable.isDropdown.options; track $index) {\r\n <option\r\n [value]=\"getDropdownFieldValue(item, column.isEditable.isDropdown.value.field, column.isEditable.isDropdown.value.nestedField)\"\r\n >\r\n {{ getDropdownFieldValue(item, column.isEditable.isDropdown.displayField.field, column.isEditable.isDropdown.displayField.nestedField) }}\r\n </option>\r\n }\r\n </select>\r\n }\r\n @else {\r\n <select [(ngModel)]=\"data[column.field]\" (change)=\"buttonClick(data, column.field)\">\r\n @for (item of column.isEditable.isDropdown.options; track $index) {\r\n <option\r\n [value]=\"getDropdownFieldValue(item, column.isEditable.isDropdown.value.field, column.isEditable.isDropdown.value.nestedField)\"\r\n >\r\n {{ getDropdownFieldValue(item, column.isEditable.isDropdown.displayField.field, column.isEditable.isDropdown.displayField.nestedField) }}\r\n </option>\r\n }\r\n </select>\r\n }\r\n }\r\n @else if (column.isEditable.type === 'checkbox') {\r\n @if (column.tripleNestedField) {\r\n <mat-checkbox [(ngModel)]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\" (change)=\"buttonClick(data, column.field)\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"></mat-checkbox>\r\n }\r\n @else if (column.doubleNestedField) {\r\n <mat-checkbox [(ngModel)]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\" (change)=\"buttonClick(data, column.field)\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"></mat-checkbox>\r\n }\r\n @else if (column.nestedField) {\r\n <mat-checkbox [(ngModel)]=\"data[column.field][column.nestedField]\" (change)=\"buttonClick(data, column.field)\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"></mat-checkbox>\r\n }\r\n @else {\r\n <mat-checkbox [(ngModel)]=\"data[column.field]\" (change)=\"buttonClick(data, column.field)\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"></mat-checkbox>\r\n }\r\n }\r\n @else if (column.isEditable.isNumber) {\r\n @if (column.isEditable.isNumber.needsRounded) {\r\n @if (column.tripleNestedField) {\r\n <input [ngModel]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField] | roundNumber\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else if (column.doubleNestedField) {\r\n <input [ngModel]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField] | roundNumber\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else if (column.nestedField) {\r\n <input [ngModel]=\"data[column.field][column.nestedField] | roundNumber\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else {\r\n <input [ngModel]=\"data[column.field] | roundNumber\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n }\r\n @else if (column.isEditable.isNumber.decimalPoints) {\r\n @if (column.tripleNestedField) {\r\n <input [ngModel]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField] | decimalPoints:column.isEditable.isNumber.decimalPoints\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else if (column.doubleNestedField) {\r\n <input [ngModel]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField] | decimalPoints:column.isEditable.isNumber.decimalPoints\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else if (column.nestedField) {\r\n <input [ngModel]=\"data[column.field][column.nestedField] | decimalPoints:column.isEditable.isNumber.decimalPoints\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else {\r\n <input [ngModel]=\"data[column.field] | decimalPoints:column.isEditable.isNumber.decimalPoints\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n }\r\n @else {\r\n @if (column.tripleNestedField) {\r\n <input [ngModel]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else if (column.doubleNestedField) {\r\n <input [ngModel]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else if (column.nestedField) {\r\n <input [ngModel]=\"data[column.field][column.nestedField]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else {\r\n <input [ngModel]=\"data[column.field]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n }\r\n }\r\n @else {\r\n @if (column.tripleNestedField) {\r\n <input [(ngModel)]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '85%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"text\">\r\n }\r\n @else if (column.doubleNestedField) {\r\n <input [(ngModel)]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '85%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"text\">\r\n }\r\n @else if (column.nestedField) {\r\n <input [(ngModel)]=\"data[column.field][column.nestedField]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '85%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"text\">\r\n }\r\n @else {\r\n <input [(ngModel)]=\"data[column.field]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '85%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"text\">\r\n }\r\n }\r\n }\r\n @else if (column.fieldIconButton) {\r\n {{ getFieldValue(data, column) }}\r\n\r\n <button mat-icon-button [matTooltip]=\"column.fieldIconButton.toolTip\"\r\n (click)=\"buttonClick(data, column.field)\">\r\n <mat-icon>{{column.fieldIconButton.iconName}}</mat-icon>\r\n </button>\r\n }\r\n @else {\r\n {{ getFieldValue(data, column) }}\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n @if (expansion() !== null) {\r\n <ng-container matColumnDef=\"expand\">\r\n <th mat-header-cell *matHeaderCellDef aria-label=\"row actions\" [ngStyle]=\"{ 'background-color': headerBackgroundColor(), 'color': headerTextColor() }\">&nbsp;</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button matIconButton aria-label=\"expand row\"\r\n (click)=\"toggle(element); $event.stopPropagation()\"\r\n class=\"expansion-toggle-button\" [class.expansion-toggle-button-expanded]=\"isExpanded(element)\">\r\n <mat-icon>keyboard_arrow_down</mat-icon>\r\n </button>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"columnsWithExpand.length\">\r\n <div class=\"expansion-element-detail-wrapper\"\r\n [class.expansion-element-detail-wrapper-expanded]=\"isExpanded(element)\">\r\n <div class=\"expansion-element-detail\">\r\n @if (expandedElement && expansion() && expansion()!.isTable) {\r\n @if (expandedElement[expansion()!.isTable!.tableDataNestedField] !== undefined && expandedElement[expansion()!.isTable!.tableDataNestedField].length !== 0) {\r\n <p class=\"expansion-table-title\">{{ expansion()?.isTable?.title }}</p>\r\n\r\n <lib-table [title]=\"''\"\r\n [tableData]=\"expandedElement[expansion()!.isTable!.tableDataNestedField]\" [columns]=\"expansion()!.isTable!.columns\"\r\n [showPaginator]=\"expansion()!.isTable!.showPaginator\" [paginatorSticky]=\"expansion()!.isTable!.paginatorSticky\"\r\n [showSearch]=\"expansion()!.isTable!.showSearch\" [shrinkTable]=\"expansion()!.isTable!.shrinkTable\"\r\n [maxTableHeight]=\"expansion()!.isTable!.maxTableHeight\" [pageinatorDefaultIncrement]=\"expansion()!.isTable!.paginatorDefaultIncrement\"\r\n [headerBackgroundColor]=\"expansion()!.isTable!.headerBackgroundColor\"\r\n [headerTextColor]=\"expansion()!.isTable!.headerTextColor\"\r\n (buttonClicked)=\"tableButtonClicked($event)\" />\r\n }\r\n @else {\r\n <h3>No {{ expansion()!.isTable!.title }} to display.</h3>\r\n }\r\n }\r\n @else {\r\n <p>Currently only table's are only supported in expansions. There may be future uses but that will need defined in the ngx-lib Table component.</p>\r\n }\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"columnsWithExpand; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: columnsWithExpand;\"\r\n class=\"expansion-element-row\"\r\n [class.expansion-expanded-row]=\"isExpanded(element)\"\r\n (click)=\"toggle(element)\">\r\n </tr>\r\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\"\r\n class=\"expansion-detail-row\" [class.show-expansion]=\"isExpanded(row)\" [class.hide-expansion]=\"!isExpanded(row)\">\r\n </tr>\r\n }\r\n @else {\r\n <tr mat-header-row *matHeaderRowDef=\"columnNames; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: columnNames;\"></tr>\r\n <tr mat-row *matNoDataRow>\r\n <td class=\"mat-cell\" colspan=\"9999\">\r\n No records exist.\r\n </td>\r\n </tr>\r\n }\r\n </table>\r\n\r\n @if (showPaginator()) {\r\n <mat-paginator [class.paginator-sticky]=\"paginatorSticky()\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons />\r\n }\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { TableComponent } from './components/table/table.component';\r\nimport { RoundNumberPipe } from './pipes/roundNumber';\r\nimport { DecimalPointsPipe } from './pipes/decimalPoints';\r\n\r\n@NgModule({\r\n declarations: [\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n\r\n TableComponent,\r\n RoundNumberPipe,\r\n DecimalPointsPipe\r\n ],\r\n exports: [\r\n TableComponent,\r\n RoundNumberPipe,\r\n DecimalPointsPipe\r\n ]\r\n})\r\nexport class TableModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './table.api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib-table.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/table/src/pipes/roundNumber.ts","../../../../projects/cleavelandprice/ngx-lib/table/src/pipes/decimalPoints.ts","../../../../projects/cleavelandprice/ngx-lib/table/src/components/table/table.component.ts","../../../../projects/cleavelandprice/ngx-lib/table/src/components/table/table.component.html","../../../../projects/cleavelandprice/ngx-lib/table/src/table.module.ts","../../../../projects/cleavelandprice/ngx-lib/table/src/cleavelandprice-ngx-lib-table.ts"],"sourcesContent":["import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({ name: 'roundNumber', standalone: true })\r\nexport class RoundNumberPipe implements PipeTransform{\r\n transform(val: any) {\r\n return Math.round(+val);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({ name: 'decimalPoints', standalone: true })\r\nexport class DecimalPointsPipe implements PipeTransform{\r\n transform(val: any, numberOfDecimalPoints: number) {\r\n return parseFloat(val.toString()).toFixed(numberOfDecimalPoints);\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n inject,\r\n input,\r\n output,\r\n viewChild,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\n\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, MatSortHeader, Sort } from '@angular/material/sort';\r\nimport {\r\n MatCell,\r\n MatCellDef,\r\n MatColumnDef,\r\n MatHeaderCell,\r\n MatHeaderCellDef,\r\n MatHeaderRow,\r\n MatHeaderRowDef,\r\n MatNoDataRow,\r\n MatRow,\r\n MatRowDef,\r\n MatTable,\r\n MatTableDataSource,\r\n} from '@angular/material/table';\r\n\r\nimport { DatePipe, DecimalPipe, NgClass, NgStyle } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport {\r\n MatFormField,\r\n MatLabel,\r\n MatPrefix,\r\n} from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { TableColumn } from '../../model/table-column';\r\nimport { RoundNumberPipe } from '../../pipes/roundNumber';\r\nimport { DecimalPointsPipe } from '../../pipes/decimalPoints';\r\nimport { TableExpansion } from '../../model/table-expansion';\r\n\r\n@Component({\r\n selector: 'lib-table',\r\n imports: [\r\n DatePipe,\r\n DecimalPipe,\r\n FormsModule,\r\n MatButton,\r\n MatCell,\r\n MatCellDef,\r\n MatCheckbox,\r\n MatColumnDef,\r\n MatFormField,\r\n MatHeaderCell,\r\n MatHeaderCellDef,\r\n MatHeaderRow,\r\n MatHeaderRowDef,\r\n MatIcon,\r\n MatIconButton,\r\n MatInput,\r\n MatLabel,\r\n MatNoDataRow,\r\n MatPaginator,\r\n MatPrefix,\r\n MatRow,\r\n MatRowDef,\r\n MatSort,\r\n MatSortHeader,\r\n MatTable,\r\n MatTooltip,\r\n NgStyle,\r\n RoundNumberPipe,\r\n DecimalPointsPipe,\r\n ],\r\n standalone: true,\r\n templateUrl: './table.component.html',\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n styleUrl: './table.component.scss',\r\n})\r\nexport class TableComponent implements AfterViewInit {\r\n //#region Inputs\r\n title = input('');\r\n tableData = input.required<any[]>();\r\n columns = input<TableColumn[]>([]);\r\n\r\n showPaginator = input(true);\r\n showSearch = input(true);\r\n\r\n maxTableHeight = input('50em');\r\n shrinkTable = input(false);\r\n\r\n paginatorSticky = input(false);\r\n pageinatorDefaultIncrement = input(50);\r\n\r\n sortingDataAccessor = input<(data: any, sortHeaderId: string) => string>();\r\n // this was added because we needed to be able to retain & set the table's sort if it was refreshed\r\n sortState = input<Sort | null>();\r\n\r\n headerBackgroundColor = input('#ffffff');\r\n headerTextColor = input('#000000');\r\n\r\n expansion = input<TableExpansion | null>(null);\r\n\r\n searchInputValue = input<string | undefined>(undefined);\r\n //#endregion\r\n\r\n buttonClicked = output<{ rowData: any; field: string }>();\r\n exportSortState = output<Sort>();\r\n doubleClicked = output<{ rowData: any; field: string }>();\r\n searchOutputValue = output<string>();\r\n searchOutputTotalCount = output<number>();\r\n isMobile = false;\r\n dataSource!: MatTableDataSource<any>;\r\n pageSizeOptions!: number[]; // = [10, 20, 100, 500];\r\n columnNames!: string[];\r\n\r\n paginator = viewChild(MatPaginator);\r\n sort = viewChild(MatSort);\r\n\r\n columnsWithExpand = [...this.columns().map(c => c.field), 'expand'];\r\n expandedElements = new Set<any>();\r\n\r\n changeDetector = inject(ChangeDetectorRef);\r\n\r\n ngOnInit(): void {\r\n this.dataSource = new MatTableDataSource(this.tableData());\r\n\r\n this.dataSource.sortingDataAccessor = this.sortingDataAccessor()\r\n ? this.sortingDataAccessor()!\r\n : this.#setSortingDataAccessor();\r\n\r\n this.columnNames = this.columns().map((c) => c.field);\r\n this.columnsWithExpand = [...this.columns().map((c) => c.field), 'expand'];\r\n\r\n this.#setTablePageSizeOptions(this.pageinatorDefaultIncrement());\r\n\r\n this.#setFilterPredicate();\r\n\r\n if (this.searchInputValue()) {\r\n this.searchFilterChange({\r\n target: { value: this.searchInputValue() },\r\n } as unknown as Event);\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.paginator() && !this.dataSource.paginator) {\r\n this.dataSource.paginator = this.paginator()!;\r\n }\r\n if (this.sort() && !this.dataSource.sort) {\r\n if (this.sortState()) {\r\n this.sort()!.active = this.sortState()!.active;\r\n this.sort()!.direction = this.sortState()!.direction;\r\n\r\n // need this to recongize the changes and show the \"arrow\" next to the header\r\n this.sort()!._stateChanges.next();\r\n }\r\n\r\n this.dataSource.sort = this.sort()!;\r\n }\r\n }\r\n\r\n ngAfterContentChecked() {\r\n if (this.changeDetector) this.changeDetector.detectChanges();\r\n }\r\n\r\n /** Checks whether an element is expanded. */\r\n isExpanded(element: any) {\r\n return this.expandedElements.has(element);\r\n }\r\n\r\n /** Toggles the expanded state of an element. */\r\n toggle(element: any) {\r\n if (this.isExpanded(element)) {\r\n this.expandedElements.delete(element);\r\n } else {\r\n this.expandedElements.add(element);\r\n }\r\n }\r\n\r\n searchFilterChange(event: Event) {\r\n const filterValue = (event.target as HTMLInputElement).value;\r\n this.dataSource.filter = filterValue.trim().toLowerCase();\r\n this.searchOutputValue.emit(filterValue);\r\n this.searchOutputTotalCount.emit(this.dataSource.filteredData.length);\r\n }\r\n\r\n buttonClick(rowData: any, field: string) {\r\n this.buttonClicked.emit({ rowData, field });\r\n }\r\n\r\n editableFieldChange(rowData: any, column: TableColumn, value: any) {\r\n if (column.tripleNestedField)\r\n rowData[column.tripleNestedField.field][\r\n column.tripleNestedField.childField\r\n ][column.tripleNestedField.nestedField] = value;\r\n else if (column.doubleNestedField)\r\n rowData[column.doubleNestedField.field][\r\n column.doubleNestedField.nestedField\r\n ] = value;\r\n else if (column.nestedField)\r\n rowData[column.field][column.nestedField] = value;\r\n else rowData[column.field] = value;\r\n\r\n this.buttonClicked.emit({ rowData, field: column.field });\r\n }\r\n\r\n getDropdownFieldValue(option: any, field: string, nestedField?: string) {\r\n if (nestedField) return option[field][nestedField];\r\n else return option[field];\r\n }\r\n\r\n getFieldValue(rowData: any, column: TableColumn) {\r\n if (column.tripleNestedField)\r\n return rowData[column.tripleNestedField.field][\r\n column.tripleNestedField.childField\r\n ][column.tripleNestedField.nestedField];\r\n else if (column.doubleNestedField)\r\n return rowData[column.doubleNestedField.field][\r\n column.doubleNestedField.nestedField\r\n ];\r\n else if (column.nestedField)\r\n return rowData[column.field][column.nestedField];\r\n else return rowData[column.field];\r\n }\r\n\r\n tableButtonClicked(buttonClickedObject: { rowData: any; field: string }) {\r\n if (buttonClickedObject)\r\n this.buttonClicked.emit({\r\n rowData: buttonClickedObject.rowData,\r\n field: buttonClickedObject.field,\r\n });\r\n }\r\n\r\n sortChanged(sortState: Sort) {\r\n this.exportSortState.emit(sortState);\r\n }\r\n\r\n #setTablePageSizeOptions(defaultPageIncrement: number = 50) {\r\n this.pageSizeOptions = [];\r\n\r\n for (\r\n let i = defaultPageIncrement;\r\n i < this.dataSource.data.length;\r\n i = i + defaultPageIncrement * 2\r\n ) {\r\n this.pageSizeOptions.push(i);\r\n }\r\n\r\n this.pageSizeOptions.push(this.dataSource.data.length);\r\n }\r\n\r\n #setSortingDataAccessor() {\r\n return (data: any, sortHeaderId: string) => {\r\n const columnField = this.columns().filter(\r\n (c) => c.field === sortHeaderId,\r\n )[0];\r\n\r\n return columnField.nestedField\r\n ? this.getFieldValue(data, columnField)\r\n : columnField.doubleNestedField\r\n ? this.getFieldValue(data, columnField)\r\n : columnField.tripleNestedField\r\n ? this.getFieldValue(data, columnField)\r\n : data[sortHeaderId];\r\n };\r\n }\r\n\r\n #setFilterPredicate() {\r\n this.dataSource.filterPredicate = (data, filter: string) => {\r\n const accumulator = (currentTerm, key) => {\r\n return this.nestedFilterCheck(currentTerm, data, key);\r\n };\r\n const dataStr = Object.keys(data).reduce(accumulator, '').toLowerCase();\r\n // Transform the filter by converting it to lowercase and removing whitespace.\r\n const transformedFilter = filter.trim().toLowerCase();\r\n return dataStr.indexOf(transformedFilter) !== -1;\r\n };\r\n }\r\n\r\n nestedFilterCheck(search, data, key) {\r\n if (typeof data[key] === 'object') {\r\n for (const k in data[key]) {\r\n if (data[key][k] !== null) {\r\n search = this.nestedFilterCheck(search, data[key], k);\r\n }\r\n }\r\n } else {\r\n search += data[key];\r\n }\r\n return search;\r\n }\r\n}\r\n","@if (showSearch()) {\r\n <div style=\"display: flex; gap: .75em;\">\r\n @if (title() !== '') {\r\n <h3>{{title()}}</h3>\r\n }\r\n\r\n <mat-form-field appearance=\"outline\" style=\"margin-bottom: -1em;\">\r\n <mat-label>Search</mat-label>\r\n <mat-icon matPrefix>search</mat-icon>\r\n <input type=\"text\" matInput [ngModel]=\"searchInputValue()\" (keyup)=\"searchFilterChange($event)\">\r\n </mat-form-field>\r\n </div>\r\n}\r\n@else {\r\n @if (title() !== '') {\r\n <h3>{{title()}}</h3>\r\n }\r\n}\r\n\r\n<div class=\"table-container\" [ngStyle]=\"{'max-height': maxTableHeight()}\" [class.shrink-table]=\"shrinkTable()\">\r\n <table mat-table [dataSource]=\"dataSource\" multiTemplateDataRows matSort (matSortChange)=\"sortChanged($event)\">\r\n @for (column of columns(); track column) {\r\n <ng-container [matColumnDef]=\"column.field\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header [class.hide-mobile]=\"column.hideOnMobile && isMobile\" [ngStyle]=\"{ 'width': column.columnWidth, 'background-color': headerBackgroundColor(), 'color': headerTextColor() }\">\r\n <div>{{ column.fieldColumnTitle }}</div>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let data\" [class.hide-mobile]=\"column.hideOnMobile && isMobile\" [ngStyle]=\"{ 'width': column.columnWidth }\" (dblclick)=\"doubleClicked.emit({ rowData: data, field: column.field })\">\r\n @if(column.isDate) {\r\n @if(column.isDate.showTime) {\r\n {{ getFieldValue(data, column) | date:'short' }}\r\n }\r\n @else if(column.isDate.customFormat) {\r\n {{ getFieldValue(data, column) | date:'' + column.isDate.customFormat + ''}}\r\n }\r\n @else {\r\n {{ getFieldValue(data, column) | date:'shortDate' }}\r\n }\r\n }\r\n @else if (column.isNumber) {\r\n @if (column.isNumber.needsRounded) {\r\n @if (column.isNumber.percentage) {\r\n {{ getFieldValue(data, column) | number:'0.0-0' }}%\r\n }\r\n @else if (column.isNumber.money) {\r\n ${{ getFieldValue(data, column) | number:'0.0-0' }}\r\n }\r\n @else {\r\n {{ getFieldValue(data, column) | number:'0.0-0' }}\r\n }\r\n } @else {\r\n @if (column.isNumber.percentage) {\r\n {{ getFieldValue(data, column) | number:'.2-2' }}%\r\n }\r\n @else if (column.isNumber.money) {\r\n ${{ getFieldValue(data, column) | number:'.2-2' }}\r\n }\r\n @else {\r\n {{ getFieldValue(data, column) | number:'.2-2' }}\r\n }\r\n }\r\n }\r\n @else if (column.isCheckbox) {\r\n @if (column.tripleNestedField) {\r\n <mat-checkbox [(ngModel)]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\" [disabled]=\"column.isCheckbox['isDisabled']\" />\r\n }\r\n @else if (column.doubleNestedField) {\r\n <mat-checkbox [(ngModel)]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\" [disabled]=\"column.isCheckbox['isDisabled']\" />\r\n }\r\n @else if (column.nestedField) {\r\n <mat-checkbox [(ngModel)]=\"data[column.field][column.nestedField]\" [disabled]=\"column.isCheckbox['isDisabled']\" />\r\n }\r\n @else {\r\n <mat-checkbox [(ngModel)]=\"data[column.field]\" [disabled]=\"column.isCheckbox['isDisabled']\" />\r\n }\r\n }\r\n @else if (column.isHyperlink) {\r\n <a [href]=\"data[column.isHyperlink.linkField]\" target=\"_blank\">\r\n {{ getFieldValue(data, column) }}\r\n </a>\r\n }\r\n @else if (column.isButton) {\r\n @if (column.isButton.isIcon) {\r\n @if (column.isButton.isIcon.displayOnFieldValue) {\r\n @if (getFieldValue(data, column) === true) {\r\n <button mat-icon-button [matTooltip]=\"column.isButton.isIcon.toolTip\" [disabled]=\"column.isButton.isDisabled\"\r\n (click)=\"column.isButton.isDisabled ? undefined : buttonClick(data, column.field)\">\r\n <mat-icon [ngStyle]=\"{'color': column.isButton.isIcon.iconColor, 'display': getFieldValue(data, column) === true ? 'default' : 'none'}\">{{column.isButton.isIcon.iconName}}</mat-icon>\r\n </button>\r\n }\r\n }\r\n @else {\r\n <button mat-icon-button [matTooltip]=\"column.isButton.isIcon.toolTip\" [disabled]=\"column.isButton.isDisabled\"\r\n (click)=\"column.isButton.isDisabled ? undefined : buttonClick(data, column.field)\">\r\n <mat-icon [ngStyle]=\"{'color': column.isButton.isIcon.iconColor}\">{{column.isButton.isIcon.iconName}}</mat-icon>\r\n </button>\r\n }\r\n } @else if (column.isButton.isCheckbox) {\r\n @if (column.tripleNestedField) {\r\n <mat-checkbox [matTooltip]=\"column.isButton.isCheckbox.toolTip\"\r\n [(ngModel)]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\" (click)=\"buttonClick(data, column.field)\" />\r\n }\r\n @else if (column.doubleNestedField) {\r\n <mat-checkbox [matTooltip]=\"column.isButton.isCheckbox.toolTip\"\r\n [(ngModel)]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\" (click)=\"buttonClick(data, column.field)\" />\r\n }\r\n @else if (column.nestedField) {\r\n <mat-checkbox [matTooltip]=\"column.isButton.isCheckbox.toolTip\"\r\n [(ngModel)]=\"data[column.field][column.nestedField]\" (click)=\"buttonClick(data, column.field)\" />\r\n }\r\n @else {\r\n <mat-checkbox [matTooltip]=\"column.isButton.isCheckbox.toolTip\"\r\n [(ngModel)]=\"data[column.field]\" (click)=\"buttonClick(data, column.field)\" />\r\n }\r\n } @else {\r\n <button mat-raised-button [disabled]=\"column.isButton.isDisabled\"\r\n [color]=\"column.isButton.isDisabled ? undefined : 'primary'\"\r\n [class.button-extra-padding]=\"column.isButton.extraPadding\"\r\n (click)=\"column.isButton.isDisabled ? undefined : buttonClick(data, column.field)\">\r\n\r\n @if (column.isButton.buttonText && column.isButton.buttonText.text) {\r\n {{column.isButton.buttonText.text}}\r\n }\r\n @else if (column.isButton.buttonText &&column.isButton.buttonText.field) {\r\n {{ data[column.isButton.buttonText.field] }}\r\n }\r\n @else if (column.isButton.buttonText && column.isButton.buttonText.nestedField) {\r\n {{ getFieldValue(data, column) }}\r\n }\r\n @else if (column.isButton.text) {\r\n {{column.isButton.text}}\r\n }\r\n\r\n @if (column.isButton.buttonText && column.isButton.buttonText.includesIcon) {\r\n <mat-icon>\r\n {{column.isButton.buttonText.includesIcon.iconName}}\r\n </mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n @else if (column.isEditable) {\r\n @if (column.isEditable.type === 'textarea') {\r\n @if (column.tripleNestedField) {\r\n <textarea\r\n [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '100%' }\"\r\n [rows]=\"3\"\r\n [(ngModel)]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\"\r\n [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"\r\n (ngModelChange)=\"editableFieldChange(data, column, $event)\"\r\n ></textarea>\r\n }\r\n @else if (column.doubleNestedField) {\r\n <textarea\r\n [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '100%' }\"\r\n [rows]=\"3\"\r\n [(ngModel)]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\"\r\n [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"\r\n (ngModelChange)=\"editableFieldChange(data, column, $event)\"\r\n ></textarea>\r\n }\r\n @else if (column.nestedField) {\r\n <textarea\r\n [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '100%' }\"\r\n [rows]=\"3\"\r\n [(ngModel)]=\"data[column.field][column.nestedField]\"\r\n [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"\r\n (ngModelChange)=\"editableFieldChange(data, column, $event)\"\r\n ></textarea>\r\n }\r\n @else {\r\n <textarea\r\n [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '100%' }\"\r\n [rows]=\"3\"\r\n [(ngModel)]=\"data[column.field]\"\r\n [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"\r\n (ngModelChange)=\"editableFieldChange(data, column, $event)\"\r\n ></textarea>\r\n }\r\n }\r\n @else if (column.isEditable.type === 'dropdown' && column.isEditable.isDropdown) {\r\n @if (column.tripleNestedField) {\r\n <select [(ngModel)]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\" (change)=\"buttonClick(data, column.field)\">\r\n @for (item of column.isEditable.isDropdown.options; track $index) {\r\n <option\r\n [value]=\"getDropdownFieldValue(item, column.isEditable.isDropdown.value.field, column.isEditable.isDropdown.value.nestedField)\"\r\n >\r\n {{ getDropdownFieldValue(item, column.isEditable.isDropdown.displayField.field, column.isEditable.isDropdown.displayField.nestedField) }}\r\n </option>\r\n }\r\n </select>\r\n }\r\n @else if (column.doubleNestedField) {\r\n <select [(ngModel)]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\" (change)=\"buttonClick(data, column.field)\">\r\n @for (item of column.isEditable.isDropdown.options; track $index) {\r\n <option\r\n [value]=\"getDropdownFieldValue(item, column.isEditable.isDropdown.value.field, column.isEditable.isDropdown.value.nestedField)\"\r\n >\r\n {{ getDropdownFieldValue(item, column.isEditable.isDropdown.displayField.field, column.isEditable.isDropdown.displayField.nestedField) }}\r\n </option>\r\n }\r\n </select>\r\n }\r\n @else if (column.nestedField) {\r\n <select [(ngModel)]=\"data[column.field][column.nestedField]\" (change)=\"buttonClick(data, column.field)\">\r\n @for (item of column.isEditable.isDropdown.options; track $index) {\r\n <option\r\n [value]=\"getDropdownFieldValue(item, column.isEditable.isDropdown.value.field, column.isEditable.isDropdown.value.nestedField)\"\r\n >\r\n {{ getDropdownFieldValue(item, column.isEditable.isDropdown.displayField.field, column.isEditable.isDropdown.displayField.nestedField) }}\r\n </option>\r\n }\r\n </select>\r\n }\r\n @else {\r\n <select [(ngModel)]=\"data[column.field]\" (change)=\"buttonClick(data, column.field)\">\r\n @for (item of column.isEditable.isDropdown.options; track $index) {\r\n <option\r\n [value]=\"getDropdownFieldValue(item, column.isEditable.isDropdown.value.field, column.isEditable.isDropdown.value.nestedField)\"\r\n >\r\n {{ getDropdownFieldValue(item, column.isEditable.isDropdown.displayField.field, column.isEditable.isDropdown.displayField.nestedField) }}\r\n </option>\r\n }\r\n </select>\r\n }\r\n }\r\n @else if (column.isEditable.type === 'checkbox') {\r\n @if (column.tripleNestedField) {\r\n <mat-checkbox [(ngModel)]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\" (change)=\"buttonClick(data, column.field)\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"></mat-checkbox>\r\n }\r\n @else if (column.doubleNestedField) {\r\n <mat-checkbox [(ngModel)]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\" (change)=\"buttonClick(data, column.field)\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"></mat-checkbox>\r\n }\r\n @else if (column.nestedField) {\r\n <mat-checkbox [(ngModel)]=\"data[column.field][column.nestedField]\" (change)=\"buttonClick(data, column.field)\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"></mat-checkbox>\r\n }\r\n @else {\r\n <mat-checkbox [(ngModel)]=\"data[column.field]\" (change)=\"buttonClick(data, column.field)\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\"></mat-checkbox>\r\n }\r\n }\r\n @else if (column.isEditable.isNumber) {\r\n @if (column.isEditable.isNumber.needsRounded) {\r\n @if (column.tripleNestedField) {\r\n <input [ngModel]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField] | roundNumber\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else if (column.doubleNestedField) {\r\n <input [ngModel]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField] | roundNumber\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else if (column.nestedField) {\r\n <input [ngModel]=\"data[column.field][column.nestedField] | roundNumber\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else {\r\n <input [ngModel]=\"data[column.field] | roundNumber\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n }\r\n @else if (column.isEditable.isNumber.decimalPoints) {\r\n @if (column.tripleNestedField) {\r\n <input [ngModel]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField] | decimalPoints:column.isEditable.isNumber.decimalPoints\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else if (column.doubleNestedField) {\r\n <input [ngModel]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField] | decimalPoints:column.isEditable.isNumber.decimalPoints\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else if (column.nestedField) {\r\n <input [ngModel]=\"data[column.field][column.nestedField] | decimalPoints:column.isEditable.isNumber.decimalPoints\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else {\r\n <input [ngModel]=\"data[column.field] | decimalPoints:column.isEditable.isNumber.decimalPoints\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n }\r\n @else {\r\n @if (column.tripleNestedField) {\r\n <input [ngModel]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else if (column.doubleNestedField) {\r\n <input [ngModel]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else if (column.nestedField) {\r\n <input [ngModel]=\"data[column.field][column.nestedField]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n @else {\r\n <input [ngModel]=\"data[column.field]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '55%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"number\">\r\n }\r\n }\r\n }\r\n @else {\r\n @if (column.tripleNestedField) {\r\n <input [(ngModel)]=\"data[column.tripleNestedField.field][column.tripleNestedField.childField][column.tripleNestedField.nestedField]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '85%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"text\">\r\n }\r\n @else if (column.doubleNestedField) {\r\n <input [(ngModel)]=\"data[column.doubleNestedField.field][column.doubleNestedField.nestedField]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '85%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"text\">\r\n }\r\n @else if (column.nestedField) {\r\n <input [(ngModel)]=\"data[column.field][column.nestedField]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '85%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"text\">\r\n }\r\n @else {\r\n <input [(ngModel)]=\"data[column.field]\" (ngModelChange)=\"editableFieldChange(data, column, $event)\" [ngStyle]=\"{ 'width': column.isEditable.width ? column.isEditable.width : '85%' }\" [disabled]=\"column.isEditable.disable !== undefined && column.isEditable.disable\" type=\"text\">\r\n }\r\n }\r\n }\r\n @else if (column.fieldIconButton) {\r\n {{ getFieldValue(data, column) }}\r\n\r\n <button mat-icon-button [matTooltip]=\"column.fieldIconButton.toolTip\"\r\n (click)=\"buttonClick(data, column.field)\">\r\n <mat-icon>{{column.fieldIconButton.iconName}}</mat-icon>\r\n </button>\r\n }\r\n @else {\r\n {{ getFieldValue(data, column) }}\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n @if (expansion() !== null) {\r\n <ng-container matColumnDef=\"expand\">\r\n <th mat-header-cell *matHeaderCellDef aria-label=\"row actions\" [ngStyle]=\"{ 'background-color': headerBackgroundColor(), 'color': headerTextColor() }\">&nbsp;</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button matIconButton aria-label=\"expand row\"\r\n (click)=\"toggle(element); $event.stopPropagation()\"\r\n class=\"expansion-toggle-button\" [class.expansion-toggle-button-expanded]=\"isExpanded(element)\">\r\n <mat-icon>keyboard_arrow_down</mat-icon>\r\n </button>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"columnsWithExpand.length\">\r\n <div class=\"expansion-element-detail-wrapper\"\r\n [class.expansion-element-detail-wrapper-expanded]=\"isExpanded(element)\">\r\n <div class=\"expansion-element-detail\">\r\n @if (expansion() && expansion()!.isTable) {\r\n @if (element[expansion()!.isTable!.tableDataNestedField] !== undefined && element[expansion()!.isTable!.tableDataNestedField].length !== 0) {\r\n <p class=\"expansion-table-title\">{{ expansion()?.isTable?.title }}</p>\r\n\r\n <lib-table [title]=\"''\"\r\n [tableData]=\"element[expansion()!.isTable!.tableDataNestedField]\" [columns]=\"expansion()!.isTable!.columns\"\r\n [showPaginator]=\"expansion()!.isTable!.showPaginator\" [paginatorSticky]=\"expansion()!.isTable!.paginatorSticky\"\r\n [showSearch]=\"expansion()!.isTable!.showSearch\" [shrinkTable]=\"expansion()!.isTable!.shrinkTable\"\r\n [maxTableHeight]=\"expansion()!.isTable!.maxTableHeight\" [pageinatorDefaultIncrement]=\"expansion()!.isTable!.paginatorDefaultIncrement\"\r\n [headerBackgroundColor]=\"expansion()!.isTable!.headerBackgroundColor\"\r\n [headerTextColor]=\"expansion()!.isTable!.headerTextColor\"\r\n (buttonClicked)=\"tableButtonClicked($event)\" />\r\n }\r\n @else {\r\n <h3>No {{ expansion()!.isTable!.title }} to display.</h3>\r\n }\r\n }\r\n @else {\r\n <p>Currently only table's are only supported in expansions. There may be future uses but that will need defined in the ngx-lib Table component.</p>\r\n }\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"columnsWithExpand; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: columnsWithExpand;\"\r\n class=\"expansion-element-row\"\r\n [class.expansion-expanded-row]=\"isExpanded(element)\"\r\n (click)=\"toggle(element)\">\r\n </tr>\r\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\"\r\n class=\"expansion-detail-row\" [class.show-expansion]=\"isExpanded(row)\" [class.hide-expansion]=\"!isExpanded(row)\">\r\n </tr>\r\n }\r\n @else {\r\n <tr mat-header-row *matHeaderRowDef=\"columnNames; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: columnNames;\"></tr>\r\n <tr mat-row *matNoDataRow>\r\n <td class=\"mat-cell\" colspan=\"9999\">\r\n No records exist.\r\n </td>\r\n </tr>\r\n }\r\n </table>\r\n\r\n @if (showPaginator()) {\r\n <mat-paginator [class.paginator-sticky]=\"paginatorSticky()\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons />\r\n }\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { TableComponent } from './components/table/table.component';\r\nimport { RoundNumberPipe } from './pipes/roundNumber';\r\nimport { DecimalPointsPipe } from './pipes/decimalPoints';\r\n\r\n@NgModule({\r\n declarations: [\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n\r\n TableComponent,\r\n RoundNumberPipe,\r\n DecimalPointsPipe\r\n ],\r\n exports: [\r\n TableComponent,\r\n RoundNumberPipe,\r\n DecimalPointsPipe\r\n ]\r\n})\r\nexport class TableModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './table.api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "comment": "NGX-LIB primary entry point package.json",
3
3
  "name": "@cleavelandprice/ngx-lib",
4
- "version": "4.7.14",
4
+ "version": "4.8.0",
5
5
  "description": "Angular library providing foundational functionality to Cleaveland-Price applications",
6
6
  "peerDependencies": {
7
7
  "@angular/common": "^22.1.1",
@@ -37,6 +37,10 @@
37
37
  "types": "./types/cleavelandprice-ngx-lib-active-directory.d.ts",
38
38
  "default": "./fesm2022/cleavelandprice-ngx-lib-active-directory.mjs"
39
39
  },
40
+ "./active-directory/kendo": {
41
+ "types": "./types/cleavelandprice-ngx-lib-active-directory-kendo.d.ts",
42
+ "default": "./fesm2022/cleavelandprice-ngx-lib-active-directory-kendo.mjs"
43
+ },
40
44
  "./active-directory/material": {
41
45
  "types": "./types/cleavelandprice-ngx-lib-active-directory-material.d.ts",
42
46
  "default": "./fesm2022/cleavelandprice-ngx-lib-active-directory-material.mjs"
@@ -0,0 +1,188 @@
1
+ import { CleavelandPriceUser, Group, ActiveDirectoryServiceOptions } from '@cleavelandprice/ngx-lib/active-directory';
2
+ export * from '@cleavelandprice/ngx-lib/active-directory';
3
+ import * as i4 from '@progress/kendo-angular-grid';
4
+ import { SelectableSettings, GridComponent, RowArgs, RowClassArgs } from '@progress/kendo-angular-grid';
5
+ import * as _progress_kendo_svg_icons from '@progress/kendo-svg-icons';
6
+ import * as _angular_core from '@angular/core';
7
+ import { OnDestroy, Signal, ModuleWithProviders } from '@angular/core';
8
+ import { PhotoItem } from '@cleavelandprice/ngx-lib/sharepoint';
9
+ import * as i9 from '@progress/kendo-angular-layout';
10
+ import { SelectEvent } from '@progress/kendo-angular-layout';
11
+ import { Subscription } from 'rxjs';
12
+ import * as i1 from '@angular/common';
13
+ import * as i2 from '@angular/forms';
14
+ import * as i3 from '@progress/kendo-angular-icons';
15
+ import * as i5 from '@progress/kendo-angular-buttons';
16
+ import * as i6 from '@progress/kendo-angular-dialog';
17
+ import * as i7 from '@progress/kendo-angular-inputs';
18
+ import * as i8 from '@progress/kendo-angular-label';
19
+
20
+ interface IUserChooserColumn {
21
+ field: string;
22
+ title: string;
23
+ width?: number;
24
+ columnFilterable?: boolean;
25
+ globalFilterable?: boolean;
26
+ sortable?: boolean;
27
+ groupable?: boolean;
28
+ hidden?: boolean;
29
+ }
30
+
31
+ interface IUserChooserSettings {
32
+ usersTitle?: string;
33
+ groupsTitle?: string;
34
+ displayMultiSelectInstructions?: boolean;
35
+ displayHideUnselectedToggle?: boolean;
36
+ displaySelectedCount?: boolean;
37
+ filterMode: 'Column' | 'Global' | 'Both' | 'None';
38
+ userColumns?: IUserChooserColumn[];
39
+ groupColumns?: IUserChooserColumn[];
40
+ groupable?: boolean;
41
+ sortable?: boolean;
42
+ pageable?: boolean;
43
+ pageSize?: number;
44
+ height?: number;
45
+ additionalWidth?: number;
46
+ displayPhotos?: boolean;
47
+ photoColumnWidth?: number;
48
+ selectionSettings?: SelectableSettings;
49
+ returnType: 'AccountName' | 'Object';
50
+ cancelReturnValue?: any;
51
+ okButtonText?: string;
52
+ cancelButtonText?: string;
53
+ unselectButtonText?: string;
54
+ emptyDataPullMode?: 'All' | 'Users' | 'Groups';
55
+ }
56
+
57
+ declare const USER_CHOOSER_DEFAULT_SETTINGS: IUserChooserSettings;
58
+
59
+ type UserFieldDisplayType = 'Photo' | 'DisplayName' | 'PhotoAndDisplayName' | 'Username' | 'PhotoAndUsername' | 'DisplayNameAndUsername' | 'PhotoDisplayNameAndUsername';
60
+
61
+ declare class UserChooserList implements OnDestroy {
62
+ #private;
63
+ grid: _angular_core.Signal<GridComponent | undefined>;
64
+ settings: _angular_core.InputSignal<IUserChooserSettings>;
65
+ data: _angular_core.InputSignal<(CleavelandPriceUser | Group)[]>;
66
+ photoClass: _angular_core.InputSignal<string>;
67
+ selectedAccountNames: _angular_core.ModelSignal<string[]>;
68
+ filter: _angular_core.InputSignal<string>;
69
+ hideUnselected: _angular_core.InputSignal<boolean>;
70
+ mode: _angular_core.Signal<"users" | "groups">;
71
+ photos: _angular_core.InputSignal<PhotoItem[] | undefined>;
72
+ selectedCount: _angular_core.WritableSignal<number>;
73
+ gridData: _angular_core.Signal<(CleavelandPriceUser | Group)[]>;
74
+ selectionChangeSubscription?: Subscription;
75
+ constructor();
76
+ ngOnDestroy(): void;
77
+ photo(user: CleavelandPriceUser): PhotoItem | null;
78
+ caseInsensitiveSelectBy: (context: RowArgs) => string;
79
+ unselectAll(): void;
80
+ rowClassCallback(context: RowClassArgs): any;
81
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserChooserList, never>;
82
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserChooserList, "user-chooser-list", never, { "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "photoClass": { "alias": "photoClass"; "required": false; "isSignal": true; }; "selectedAccountNames": { "alias": "selectedAccountNames"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "hideUnselected": { "alias": "hideUnselected"; "required": false; "isSignal": true; }; "photos": { "alias": "photos"; "required": false; "isSignal": true; }; }, { "selectedAccountNames": "selectedAccountNamesChange"; }, never, never, true, never>;
83
+ }
84
+
85
+ declare class UserChooserDialogComponent {
86
+ #private;
87
+ userChooserList: _angular_core.Signal<UserChooserList | undefined>;
88
+ groupChooserList: _angular_core.Signal<UserChooserList | undefined>;
89
+ settings: _angular_core.InputSignal<IUserChooserSettings>;
90
+ users: _angular_core.InputSignal<CleavelandPriceUser[] | undefined>;
91
+ resolvedUsers: _angular_core.Signal<CleavelandPriceUser[]>;
92
+ groups: _angular_core.InputSignal<Group[] | undefined>;
93
+ resolvedGroups: _angular_core.Signal<Group[]>;
94
+ photos: _angular_core.InputSignal<PhotoItem[] | undefined>;
95
+ resolvedPhotos: _angular_core.Signal<PhotoItem[]>;
96
+ photoClass: _angular_core.InputSignal<string>;
97
+ selectedUsers: _angular_core.ModelSignal<string[]>;
98
+ selectedGroups: _angular_core.ModelSignal<string[]>;
99
+ hideUnselected: _angular_core.WritableSignal<boolean>;
100
+ returnValue: _angular_core.Signal<UserChooserReturnValue>;
101
+ multiSelectInstructions: _angular_core.Signal<string>;
102
+ close: _angular_core.OutputEmitterRef<any>;
103
+ filter: _angular_core.WritableSignal<string>;
104
+ filterClearIcon: _progress_kendo_svg_icons.SVGIcon;
105
+ dialogWidth: _angular_core.Signal<number>;
106
+ selectedTabIndex: _angular_core.WritableSignal<number>;
107
+ mode: _angular_core.Signal<"tabs" | "standalone">;
108
+ title: _angular_core.Signal<string>;
109
+ unselectAll(): void;
110
+ onTabSelect(e: SelectEvent): void;
111
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserChooserDialogComponent, never>;
112
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserChooserDialogComponent, "user-chooser-dialog", never, { "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "users": { "alias": "users"; "required": false; "isSignal": true; }; "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "photos": { "alias": "photos"; "required": false; "isSignal": true; }; "photoClass": { "alias": "photoClass"; "required": false; "isSignal": true; }; "selectedUsers": { "alias": "selectedUsers"; "required": false; "isSignal": true; }; "selectedGroups": { "alias": "selectedGroups"; "required": false; "isSignal": true; }; }, { "selectedUsers": "selectedUsersChange"; "selectedGroups": "selectedGroupsChange"; "close": "close"; }, never, never, true, never>;
113
+ }
114
+ type UserChooserReturnValue = {
115
+ users: CleavelandPriceUser[] | string[];
116
+ groups: Group[] | string[];
117
+ invalidUsers: string[];
118
+ invalidGroups: string[];
119
+ };
120
+
121
+ declare class UserFieldComponent {
122
+ #private;
123
+ icons: {
124
+ user: _progress_kendo_svg_icons.SVGIcon;
125
+ group: _progress_kendo_svg_icons.SVGIcon;
126
+ unknown: _progress_kendo_svg_icons.SVGIcon;
127
+ };
128
+ rejectedInvalidAccountNames: _angular_core.OutputEmitterRef<{
129
+ users: string[];
130
+ groups: string[];
131
+ }>;
132
+ showUserChooser: _angular_core.WritableSignal<boolean>;
133
+ userAccountNames: _angular_core.ModelSignal<string[]>;
134
+ groupAccountNames: _angular_core.ModelSignal<string[]>;
135
+ users: _angular_core.InputSignal<CleavelandPriceUser[] | undefined>;
136
+ resolvedUsers: Signal<CleavelandPriceUser[]>;
137
+ groups: _angular_core.InputSignal<Group[] | undefined>;
138
+ resolvedGroups: Signal<Group[]>;
139
+ photos: _angular_core.InputSignal<PhotoItem[] | undefined>;
140
+ resolvedPhotos: Signal<PhotoItem[]>;
141
+ maxItemsToDisplay: _angular_core.InputSignal<number>;
142
+ groupItemsOverMax: _angular_core.InputSignal<boolean>;
143
+ groupItemsOverMaxText: _angular_core.InputSignal<string>;
144
+ ignoreInvalidAccountNames: _angular_core.InputSignal<boolean>;
145
+ displayType: _angular_core.InputSignal<UserFieldDisplayType>;
146
+ emptyUserNameText: _angular_core.InputSignal<string>;
147
+ enableUserChooser: _angular_core.InputSignal<boolean>;
148
+ userChooserSettings: _angular_core.InputSignal<IUserChooserSettings>;
149
+ wrapperClass: _angular_core.InputSignal<string>;
150
+ emptyUserNameClass: _angular_core.InputSignal<string>;
151
+ validUserTextClass: _angular_core.InputSignal<string>;
152
+ manySelectedClass: _angular_core.InputSignal<string>;
153
+ invalidUserTextClass: _angular_core.InputSignal<string>;
154
+ photoClass: _angular_core.InputSignal<string>;
155
+ userChooserPhotoClass: _angular_core.InputSignal<string>;
156
+ userChooserEnabledClass: _angular_core.InputSignal<string>;
157
+ userChooserDisabledClass: _angular_core.InputSignal<string>;
158
+ totalItemCount: Signal<number>;
159
+ userObjects: Signal<UserObject[]>;
160
+ groupObjects: Signal<GroupObject[]>;
161
+ displayPhoto: Signal<boolean>;
162
+ displayName: Signal<boolean>;
163
+ userChooserClosed(event: UserChooserReturnValue | any): void;
164
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserFieldComponent, never>;
165
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserFieldComponent, "user-field", never, { "userAccountNames": { "alias": "userAccountNames"; "required": false; "isSignal": true; }; "groupAccountNames": { "alias": "groupAccountNames"; "required": false; "isSignal": true; }; "users": { "alias": "users"; "required": false; "isSignal": true; }; "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "photos": { "alias": "photos"; "required": false; "isSignal": true; }; "maxItemsToDisplay": { "alias": "maxItemsToDisplay"; "required": false; "isSignal": true; }; "groupItemsOverMax": { "alias": "groupItemsOverMax"; "required": false; "isSignal": true; }; "groupItemsOverMaxText": { "alias": "groupItemsOverMaxText"; "required": false; "isSignal": true; }; "ignoreInvalidAccountNames": { "alias": "ignoreInvalidAccountNames"; "required": false; "isSignal": true; }; "displayType": { "alias": "displayType"; "required": false; "isSignal": true; }; "emptyUserNameText": { "alias": "emptyUserNameText"; "required": false; "isSignal": true; }; "enableUserChooser": { "alias": "enableUserChooser"; "required": false; "isSignal": true; }; "userChooserSettings": { "alias": "userChooserSettings"; "required": false; "isSignal": true; }; "wrapperClass": { "alias": "wrapperClass"; "required": false; "isSignal": true; }; "emptyUserNameClass": { "alias": "emptyUserNameClass"; "required": false; "isSignal": true; }; "validUserTextClass": { "alias": "validUserTextClass"; "required": false; "isSignal": true; }; "manySelectedClass": { "alias": "manySelectedClass"; "required": false; "isSignal": true; }; "invalidUserTextClass": { "alias": "invalidUserTextClass"; "required": false; "isSignal": true; }; "photoClass": { "alias": "photoClass"; "required": false; "isSignal": true; }; "userChooserPhotoClass": { "alias": "userChooserPhotoClass"; "required": false; "isSignal": true; }; "userChooserEnabledClass": { "alias": "userChooserEnabledClass"; "required": false; "isSignal": true; }; "userChooserDisabledClass": { "alias": "userChooserDisabledClass"; "required": false; "isSignal": true; }; }, { "rejectedInvalidAccountNames": "rejectedInvalidAccountNames"; "userAccountNames": "userAccountNamesChange"; "groupAccountNames": "groupAccountNamesChange"; }, never, never, true, never>;
166
+ }
167
+ type UserObject = {
168
+ accountName: string;
169
+ user?: CleavelandPriceUser;
170
+ photo?: PhotoItem;
171
+ label?: string;
172
+ };
173
+ type GroupObject = {
174
+ accountName: string;
175
+ group?: Group;
176
+ label?: string;
177
+ };
178
+
179
+ declare class KendoActiveDirectoryModule {
180
+ static forRoot(config: ActiveDirectoryServiceOptions): ModuleWithProviders<KendoActiveDirectoryModule>;
181
+ constructor(parentModule: KendoActiveDirectoryModule);
182
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KendoActiveDirectoryModule, [{ optional: true; skipSelf: true; }]>;
183
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<KendoActiveDirectoryModule, never, [typeof i1.CommonModule, typeof i2.ReactiveFormsModule, typeof i3.IconsModule, typeof i3.SVGIconModule, typeof i4.GridModule, typeof i5.ButtonsModule, typeof i6.DialogsModule, typeof i7.InputsModule, typeof i8.LabelModule, typeof i9.TabStripModule, typeof UserChooserDialogComponent, typeof UserChooserList, typeof UserFieldComponent], [typeof UserChooserDialogComponent, typeof UserChooserList, typeof UserFieldComponent]>;
184
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<KendoActiveDirectoryModule>;
185
+ }
186
+
187
+ export { KendoActiveDirectoryModule, USER_CHOOSER_DEFAULT_SETTINGS, UserChooserDialogComponent, UserChooserList, UserFieldComponent };
188
+ export type { IUserChooserColumn, IUserChooserSettings, UserChooserReturnValue, UserFieldDisplayType };
@@ -152,7 +152,7 @@ declare class TableComponent implements AfterViewInit {
152
152
  paginator: _angular_core.Signal<MatPaginator | undefined>;
153
153
  sort: _angular_core.Signal<MatSort | undefined>;
154
154
  columnsWithExpand: string[];
155
- expandedElement: any | null;
155
+ expandedElements: Set<any>;
156
156
  changeDetector: ChangeDetectorRef;
157
157
  ngOnInit(): void;
158
158
  ngAfterViewInit(): void;