UNPKG

@notiz/ngx-tablo

Version:

JSON powered material table for Angular

1 lines 32.1 kB
{"version":3,"file":"notiz-ngx-tablo.mjs","sources":["../../../projects/ngx-tablo/src/lib/is-defined.ts","../../../projects/ngx-tablo/src/lib/nested-value.ts","../../../projects/ngx-tablo/src/lib/cell-value.pipe.ts","../../../projects/ngx-tablo/src/lib/has-cell-value.pipe.ts","../../../projects/ngx-tablo/src/lib/ngx-tablo.component.ts","../../../projects/ngx-tablo/src/lib/nested-column-name.pipe.ts","../../../projects/ngx-tablo/src/lib/datasource/loading.data-source.ts","../../../projects/ngx-tablo/src/lib/datasource/nested-object.data-source.ts","../../../projects/ngx-tablo/src/public-api.ts","../../../projects/ngx-tablo/src/notiz-ngx-tablo.ts"],"sourcesContent":["export function isDefined(value: any): boolean {\n return value !== undefined && value !== null;\n}\n","export const resolveNestedValue = (row: any, path: string) =>\n path.split(/\\./).reduce((o, p) => o && o[p], row);\n\nexport const resolveNestedColumnValue = (row: any, columnName: string): any => {\n if (columnName.match(/\\./)) {\n return resolveNestedValue(row, columnName);\n } else {\n return row[columnName];\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isDefined } from './is-defined';\nimport { resolveNestedColumnValue } from './nested-value';\nimport { TabloColumn } from './tablo-column';\n\n@Pipe({ name: 'cellValue', standalone: true })\nexport class CellValuePipe<T> implements PipeTransform {\n transform(row: T, column: TabloColumn<T>): any | undefined {\n if (isDefined(column.cellTemplate)) {\n return column.cellTemplate;\n }\n if (column.cell && isDefined(column.cell(row))) {\n return column.cell(row);\n }\n\n const resolvedNestedColumnValue = resolveNestedColumnValue(\n row,\n column.columnName,\n );\n if (isDefined(resolveNestedColumnValue)) {\n return resolvedNestedColumnValue;\n }\n\n return undefined;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isDefined } from './is-defined';\nimport { resolveNestedColumnValue } from './nested-value';\nimport { TabloColumn } from './tablo-column';\n\n@Pipe({ name: 'hasCellValue', standalone: true })\nexport class HasCellValuePipe<T> implements PipeTransform {\n transform(row: T, column: TabloColumn<T>): boolean {\n if (\n isDefined(column.cellTemplate) ||\n (column.cell && isDefined(column.cell(row))) ||\n isDefined(resolveNestedColumnValue(row, column.columnName))\n ) {\n return true;\n }\n return false;\n }\n}\n","import { DataSource } from '@angular/cdk/collections';\nimport {\n CurrencyPipe,\n DatePipe,\n DecimalPipe,\n NgTemplateOutlet,\n PercentPipe,\n TitleCasePipe,\n} from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n OnDestroy,\n OnInit,\n computed,\n effect,\n input,\n model,\n output,\n viewChild,\n} from '@angular/core';\nimport {\n MatPaginator,\n MatPaginatorModule,\n PageEvent,\n} from '@angular/material/paginator';\nimport {\n MatSort,\n MatSortModule,\n Sort,\n SortDirection,\n} from '@angular/material/sort';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { CellValuePipe } from './cell-value.pipe';\nimport { HasCellValuePipe } from './has-cell-value.pipe';\nimport { TabloColumns } from './tablo-column';\n\n@Component({\n selector: 'ngx-tablo',\n imports: [\n NgTemplateOutlet,\n DatePipe,\n DecimalPipe,\n PercentPipe,\n CurrencyPipe,\n TitleCasePipe,\n MatTableModule,\n MatPaginatorModule,\n MatSortModule,\n HasCellValuePipe,\n CellValuePipe,\n ],\n template: `\n <table\n [class]=\"tableClasses()\"\n mat-table\n [dataSource]=\"dataSource()\"\n matSort\n [matSortActive]=\"sortActive()\"\n [matSortDirection]=\"sortDirection()\"\n >\n @for (column of columns(); track column; let i = $index) {\n <ng-container [matColumnDef]=\"column.columnName\">\n <th\n mat-header-cell\n [mat-sort-header]=\"column.sortHeader || column.columnName\"\n [disabled]=\"!column.sort\"\n *matHeaderCellDef\n >\n @if (column.headerTemplate; as content) {\n <ng-container\n [ngTemplateOutlet]=\"headerContentTemplate\"\n [ngTemplateOutletContext]=\"{\n content: content,\n column: column,\n }\"\n ></ng-container>\n } @else {\n @if (\n (column.headerHTMLContent &&\n column.headerHTMLContent(column)) ||\n column.header;\n as content\n ) {\n <div\n [class]=\"column.headerClassName\"\n [innerHTML]=\"content\"\n ></div>\n }\n }\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"column.cellClass\">\n @if (row | hasCellValue: column; as content) {\n <ng-container\n [ngTemplateOutlet]=\"cellContentTemplate\"\n [ngTemplateOutletContext]=\"{\n content: row | cellValue: column,\n row: row,\n className: column.className,\n format: column.format,\n }\"\n >\n </ng-container>\n }\n </td>\n </ng-container>\n }\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns()\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns()\"\n (click)=\"rowClick.emit(row)\"\n ></tr>\n </table>\n\n @if (showPaging()) {\n <mat-paginator\n [disabled]=\"pagingDisabled()\"\n [hidePageSize]=\"hidePageSize()\"\n [pageSizeOptions]=\"pageSizeOptions()\"\n [pageSize]=\"pageSize()\"\n [pageIndex]=\"pageIndex()\"\n [length]=\"length()\"\n [showFirstLastButtons]=\"showFirstLastButtons()\"\n [attr.aria-label]=\"pageAriaLabel()\"\n >\n </mat-paginator>\n }\n\n <ng-template\n #headerContentTemplate\n let-content=\"content\"\n let-column=\"column\"\n >\n <ng-container\n [ngTemplateOutlet]=\"content\"\n [ngTemplateOutletContext]=\"{ column: column }\"\n ></ng-container>\n </ng-template>\n\n <ng-template\n #cellContentTemplate\n let-content=\"content\"\n let-row=\"row\"\n let-className=\"className\"\n let-format=\"format\"\n >\n @if (!content.createEmbeddedView) {\n @if (format) {\n <div [class]=\"className\">\n <!-- NOTE: each specified format will be displayed currently -->\n @if (format.date) {\n {{ content | date: format.date }}\n }\n @if (format.decimal) {\n {{ content | number: format.decimal }}\n }\n @if (format.percent) {\n {{ content | percent: format.percent }}\n }\n @if (format.currency) {\n {{ content | currency: format.currency }}\n }\n @if (format.titleCase) {\n {{ content | titlecase }}\n }\n </div>\n } @else {\n <div [class]=\"className\" [innerHTML]=\"content\"></div>\n }\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"content\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n ></ng-container>\n }\n </ng-template>\n `,\n styles: [\n `\n table {\n width: 100%;\n }\n `,\n ],\n})\nexport class Tablo<T> implements OnInit, AfterViewInit, OnDestroy {\n tableClasses = input<string>('');\n\n /**\n * Add custom dataSource.\n *\n * Default: MatTableDataSource\n */\n dataSource = input<DataSource<T>>(new MatTableDataSource());\n\n data = model<T[] | Observable<T[]> | undefined>();\n\n columns = input<TabloColumns<T>>([]);\n\n protected displayedColumns = computed(() =>\n this.columns().map((column) => column.columnName),\n );\n\n mode = input<'client' | 'server'>('client');\n\n /**\n * Sorting\n */\n sortActive = model('');\n sortDirection = model<SortDirection>('');\n /**\n * Custom sorting function for `MatTableDataSource`.\n *\n * Use this if data properties don't match column names or for complex data objects.\n *\n * Default expects column `xyz` to represent `data['xyz']`.\n *\n */\n sortingDataAccessor =\n input<(data: T, sortHeaderId: string) => string | number>();\n\n /**\n * Filter value for `MatTableDataSource`.\n */\n filter = input<string>();\n\n /**\n * Custom filter function for `MatTableDataSource`.\n */\n filterPredicate = input<(data: T, filter: string) => boolean>();\n\n /**\n * Paging\n */\n showPaging = model(false);\n pagingDisabled = model(false);\n hidePageSize = model(false);\n showFirstLastButtons = model(true);\n pageSize = model(0);\n pageIndex = model(0);\n length = model<number>(0);\n pageSizeOptions = model([10, 20, 50, 100]);\n pageAriaLabel = model('Select page');\n /**\n * default to false\n */\n resetPageOnSort = model<boolean>(false);\n\n /**\n * Outputs\n */\n rowClick = output<T>();\n pageChange = output<PageEvent>();\n sortChange = output<Sort>();\n\n private paginator = viewChild<MatPaginator>(MatPaginator);\n private sort = viewChild.required(MatSort);\n\n private destroy$ = new Subject<void>();\n\n constructor() {\n effect(() => {\n this.fillData();\n });\n\n effect(() => {\n const filter = this.filter();\n\n if (this.dataSource() instanceof MatTableDataSource) {\n this.getMatTableDataSource().filter = filter || '';\n }\n });\n }\n\n ngOnInit(): void {\n this.columns().forEach((column) => {\n if (column.lifecycle?.onInit) {\n column.lifecycle.onInit(column);\n }\n });\n\n if (this.dataSource() instanceof MatTableDataSource) {\n if (this.filterPredicate()) {\n this.getMatTableDataSource().filterPredicate = this.filterPredicate()!;\n }\n\n if (this.sortingDataAccessor()) {\n this.getMatTableDataSource().sortingDataAccessor =\n this.sortingDataAccessor()!;\n }\n }\n }\n\n ngAfterViewInit() {\n this.columns().forEach((column) => {\n if (column.lifecycle?.afterViewInit) {\n column.lifecycle.afterViewInit(column);\n }\n });\n\n this.sort().sortChange.subscribe((sort) => {\n this.sortChange.emit(sort);\n if (this.resetPageOnSort()) {\n this.firstPage();\n }\n });\n\n if (this.paginator()) {\n this.paginator()!.page.subscribe((page) => this.pageChange.emit(page));\n }\n\n if (\n this.mode() === 'client' &&\n this.dataSource() instanceof MatTableDataSource\n ) {\n this.getMatTableDataSource().paginator = this.paginator()!;\n this.getMatTableDataSource().sort = this.sort();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n firstPage() {\n if (this.paginator()) {\n this.paginator()!.firstPage();\n }\n }\n\n lastPage() {\n if (this.paginator()) {\n this.paginator()!.lastPage();\n }\n }\n\n clearFilter() {\n if (this.dataSource() instanceof MatTableDataSource) {\n this.getMatTableDataSource().filter = '';\n }\n }\n\n private fillData() {\n if (this.data() && this.dataSource() instanceof MatTableDataSource) {\n if (this.data() instanceof Observable) {\n (this.data() as Observable<T[]>)\n .pipe(takeUntil(this.destroy$))\n .subscribe((data) => (this.getMatTableDataSource().data = data));\n } else {\n this.getMatTableDataSource().data = this.data() as T[];\n }\n }\n }\n\n private getMatTableDataSource(): MatTableDataSource<T> {\n return this.dataSource() as MatTableDataSource<T>;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { resolveNestedColumnValue } from './nested-value';\n\n@Pipe({ name: 'nestedColumnName', standalone: true })\nexport class NestedColumnNamePipe implements PipeTransform {\n transform(value: any, columnName: string): any {\n return resolveNestedColumnValue(value, columnName);\n }\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nexport abstract class LoadingDataSource<T> implements DataSource<T> {\n protected dataSubject = new BehaviorSubject<T[]>([]);\n protected loadingSubject = new BehaviorSubject<boolean>(false);\n protected disconnect$ = new Subject<void>();\n\n loading$ = this.loadingSubject.asObservable();\n\n connect(collectionViewer: CollectionViewer): Observable<readonly T[]> {\n return this.dataSubject.asObservable();\n }\n\n disconnect(collectionViewer: CollectionViewer): void {\n this.dataSubject.complete();\n this.loadingSubject.complete();\n\n this.disconnect$.next();\n this.disconnect$.complete();\n }\n}\n","import { _isNumberValue } from '@angular/cdk/coercion';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { resolveNestedValue } from '../nested-value';\n\n/**\n * MatTableDataSource that supports sorting for nested objects.\n */\nexport class NestedObjectDataSource<T> extends MatTableDataSource<T> {\n constructor(initialData?: T[]) {\n super(initialData);\n }\n\n override sortingDataAccessor: (\n data: T,\n sortHeaderId: string,\n ) => string | number = (data: T, sortHeaderId: string): string | number => {\n const value = resolveNestedValue(data, sortHeaderId);\n return _isNumberValue(value) ? Number(value) : value;\n };\n}\n\nexport const nestedObjectDataSource = <T>(initialData?: T[]) =>\n new NestedObjectDataSource(initialData);\n","/*\n * Public API Surface of ngx-tablo\n */\n\nexport * from './lib/ngx-tablo.component';\nexport * from './lib/tablo-column';\n\nexport * from './lib/nested-column-name.pipe';\nexport * from './lib/nested-value';\n\nexport * from './lib/datasource';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}