@pascalhonegger/ng-datatable
Version:
DataTable component for Angular framework
1 lines • 26.4 kB
Source Map (JSON)
{"version":3,"file":"pascalhonegger-ng-datatable.mjs","sources":["../../../projects/ng-datatable/src/lib/DataTable.ts","../../../projects/ng-datatable/src/lib/Paginator.ts","../../../projects/ng-datatable/src/lib/BootstrapPaginator.ts","../../../projects/ng-datatable/src/lib/DefaultSorter.ts","../../../projects/ng-datatable/src/lib/DataTableModule.ts","../../../projects/ng-datatable/src/public-api.ts","../../../projects/ng-datatable/src/pascalhonegger-ng-datatable.ts"],"sourcesContent":["import { Directive, Input, EventEmitter, OnChanges, DoCheck, IterableDiffers, IterableDiffer, Output, inject, SimpleChanges } from \"@angular/core\";\nimport { ReplaySubject } from \"rxjs\";\n\n\nexport type SortOrder = \"asc\" | \"desc\";\nexport type SortByFunction<T = any> = (data: T) => any;\nexport type SortBy<T = any> = string | SortByFunction<T> | (string | SortByFunction<T>)[];\n\nexport interface SortEvent {\n sortBy: SortBy;\n sortOrder: string;\n}\n\nexport interface PageEvent {\n activePage: number;\n rowsOnPage: number;\n dataLength: number;\n}\n\nexport interface DataEvent {\n length: number;\n}\n\n@Directive({\n selector: \"table[mfData]\",\n exportAs: \"mfDataTable\"\n})\nexport class DataTable<T = any> implements OnChanges, DoCheck {\n\n private diff: IterableDiffer<T>;\n @Input(\"mfData\") public inputData: T[] = [];\n\n @Input(\"mfSortBy\") public sortBy: SortBy<T> = \"\";\n @Input(\"mfSortOrder\") public sortOrder: SortOrder = \"asc\";\n @Output(\"mfSortByChange\") public sortByChange = new EventEmitter<SortBy<T>>();\n @Output(\"mfSortOrderChange\") public sortOrderChange = new EventEmitter<SortOrder>();\n\n @Input(\"mfRowsOnPage\") public rowsOnPage = 1000;\n @Input(\"mfActivePage\") public activePage = 1;\n\n private mustRecalculateData = false;\n\n public data: T[];\n\n public onSortChange = new ReplaySubject<SortEvent>(1);\n public onPageChange = new EventEmitter<PageEvent>();\n\n public constructor() {\n const differs = inject(IterableDiffers);\n\n this.diff = differs.find([]).create();\n }\n\n public getSort(): SortEvent {\n return { sortBy: this.sortBy, sortOrder: this.sortOrder };\n }\n\n public setSort(sortBy: SortBy<T>, sortOrder: SortOrder): void {\n if (this.sortBy !== sortBy || this.sortOrder !== sortOrder) {\n this.sortBy = sortBy;\n this.sortOrder = [\"asc\", \"desc\"].indexOf(sortOrder) >= 0 ? sortOrder : \"asc\";\n this.mustRecalculateData = true;\n this.onSortChange.next({ sortBy: this.sortBy, sortOrder: this.sortOrder });\n this.sortByChange.emit(this.sortBy);\n this.sortOrderChange.emit(this.sortOrder);\n }\n }\n\n public getPage(): PageEvent {\n return { activePage: this.activePage, rowsOnPage: this.rowsOnPage, dataLength: this.inputData.length };\n }\n\n public setPage(activePage: number, rowsOnPage: number): void {\n if (this.rowsOnPage !== rowsOnPage || this.activePage !== activePage) {\n this.activePage = this.activePage !== activePage ? activePage : this.calculateNewActivePage(this.rowsOnPage, rowsOnPage);\n this.rowsOnPage = rowsOnPage;\n this.mustRecalculateData = true;\n this.onPageChange.emit({\n activePage: this.activePage,\n rowsOnPage: this.rowsOnPage,\n dataLength: this.inputData ? this.inputData.length : 0\n });\n }\n }\n\n private calculateNewActivePage(previousRowsOnPage: number, currentRowsOnPage: number): number {\n const firstRowOnPage = (this.activePage - 1) * previousRowsOnPage + 1;\n const newActivePage = Math.ceil(firstRowOnPage / currentRowsOnPage);\n return newActivePage;\n }\n\n private recalculatePage() {\n const lastPage = Math.ceil(this.inputData.length / this.rowsOnPage);\n this.activePage = lastPage < this.activePage ? lastPage : this.activePage;\n this.activePage = this.activePage || 1;\n\n this.onPageChange.emit({\n activePage: this.activePage,\n rowsOnPage: this.rowsOnPage,\n dataLength: this.inputData.length\n });\n }\n\n public ngOnChanges(changes: SimpleChanges): any {\n if (changes[\"rowsOnPage\"]) {\n this.rowsOnPage = changes[\"rowsOnPage\"].previousValue;\n this.setPage(this.activePage, changes[\"rowsOnPage\"].currentValue);\n this.mustRecalculateData = true;\n }\n if (changes[\"sortBy\"] || changes[\"sortOrder\"]) {\n if ([\"asc\", \"desc\"].indexOf(this.sortOrder) < 0) {\n console.warn(\"ng-datatable: value for input mfSortOrder must be one of ['asc', 'desc'], but is:\", this.sortOrder);\n this.sortOrder = \"asc\";\n }\n if (this.sortBy) {\n this.onSortChange.next({ sortBy: this.sortBy, sortOrder: this.sortOrder });\n }\n this.mustRecalculateData = true;\n }\n if (changes[\"inputData\"]) {\n this.inputData = changes[\"inputData\"].currentValue || [];\n this.diff.diff(this.inputData); // Update diff to prevent duplicate update in ngDoCheck\n this.recalculatePage();\n this.mustRecalculateData = true;\n }\n }\n\n public ngDoCheck(): any {\n const changes = this.diff.diff(this.inputData);\n if (changes) {\n this.recalculatePage();\n this.mustRecalculateData = true;\n }\n if (this.mustRecalculateData) {\n this.fillData();\n this.mustRecalculateData = false;\n }\n }\n\n private fillData(): void {\n // this.activePage = this.activePage;\n // this.rowsOnPage = this.rowsOnPage;\n\n const offset = (this.activePage - 1) * this.rowsOnPage;\n // let data = this.inputData;\n // const sortBy = this.sortBy;\n // if (typeof sortBy === \"string\" || sortBy instanceof String) {\n // data = orderBy(data, this.caseInsensitiveIteratee(sortBy as string), [this.sortOrder]);\n // } else {\n // data = orderBy(data, sortBy, [this.sortOrder]);\n // }\n // data = slice(data, offset, offset + this.rowsOnPage);\n\n this.data = [...this.inputData]\n .sort(this.sorter(this.sortBy, this.sortOrder))\n .slice(offset, offset + this.rowsOnPage);\n }\n\n private caseInsensitiveIteratee(sortBy: string | SortByFunction) {\n return (row: any): any => {\n let value = row;\n if (typeof sortBy === \"string\" || sortBy instanceof String) {\n for (const sortByProperty of sortBy.split(\".\")) {\n if (value) {\n value = value[sortByProperty];\n }\n }\n } else if (typeof sortBy === \"function\") {\n value = sortBy(value);\n }\n\n if (value && typeof value === \"string\" || value instanceof String) {\n return value.toLowerCase();\n }\n\n return value;\n };\n }\n\n private compare(left: any, right: any): number {\n if (left === right) {\n return 0;\n }\n if (left == null && right != null) {\n return -1;\n }\n if (right == null) {\n return 1;\n }\n return left > right ? 1 : -1;\n }\n\n private sorter<T>(sortBy: SortBy<T>, sortOrder: SortOrder): (left: T, right: T) => number {\n const order = sortOrder === \"desc\" ? -1 : 1;\n if (Array.isArray(sortBy)) {\n const iteratees = sortBy.map((entry) => this.caseInsensitiveIteratee(entry));\n return (left, right) => {\n for (const iteratee of iteratees) {\n const comparison = this.compare(iteratee(left), iteratee(right)) * order;\n if (comparison !== 0) {\n return comparison;\n }\n }\n return 0;\n };\n } else {\n const iteratee = this.caseInsensitiveIteratee(sortBy);\n return (left, right) => this.compare(iteratee(left), iteratee(right)) * order;\n }\n }\n}\n","import { Component, OnChanges, inject, input } from \"@angular/core\";\nimport {DataTable, PageEvent} from \"./DataTable\";\n\n@Component({\n selector: \"mfPaginator\",\n template: `<ng-content></ng-content>`\n})\nexport class Paginator implements OnChanges {\n private injectMfTable = inject(DataTable, { optional: true })!;\n\n readonly inputMfTable = input<DataTable>(undefined, { alias: \"mfTable\" });\n\n private mfTable: DataTable;\n\n public activePage: number;\n public rowsOnPage: number;\n public dataLength = 0;\n public lastPage: number;\n\n public ngOnChanges(): any {\n this.mfTable = this.inputMfTable() ?? this.injectMfTable;\n this.onPageChangeSubscriber(this.mfTable.getPage());\n this.mfTable.onPageChange.subscribe(this.onPageChangeSubscriber);\n }\n\n public setPage(pageNumber: number): void {\n this.mfTable.setPage(pageNumber, this.rowsOnPage);\n }\n\n public setRowsOnPage(rowsOnPage: number): void {\n this.mfTable.setPage(this.activePage, rowsOnPage);\n }\n\n private onPageChangeSubscriber = (event: PageEvent) => {\n this.activePage = event.activePage;\n this.rowsOnPage = event.rowsOnPage;\n this.dataLength = event.dataLength;\n this.lastPage = Math.ceil(this.dataLength / this.rowsOnPage);\n }\n}\n","import {Component, computed, input} from \"@angular/core\";\nimport {DataTable} from \"./DataTable\";\nimport { Paginator } from \"./Paginator\";\n\n@Component({\n selector: \"mfBootstrapPaginator\",\n template: `\n <mfPaginator #p [mfTable]=\"mfTable()\">\n @if (p.dataLength > p.rowsOnPage) {\n <ul class=\"pagination float-start\">\n <li class=\"page-item\" [class.disabled]=\"p.activePage <= 1\" (click)=\"p.setPage(1)\">\n <a class=\"page-link\" aria-label=\"Previous\"><span aria-hidden=\"true\">«</span></a>\n </li>\n @if (p.activePage > 4 && p.activePage + 1 > p.lastPage) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage - 4)\">\n <a class=\"page-link\">{{p.activePage-4}}</a>\n </li>\n }\n @if (p.activePage > 3 && p.activePage + 2 > p.lastPage) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage - 3)\">\n <a class=\"page-link\">{{p.activePage-3}}</a>\n </li>\n }\n @if (p.activePage > 2) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage - 2)\">\n <a class=\"page-link\">{{p.activePage-2}}</a>\n </li>\n }\n @if (p.activePage > 1) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage - 1)\">\n <a class=\"page-link\">{{p.activePage-1}}</a>\n </li>\n }\n <li class=\"page-item active\">\n <a class=\"page-link\">{{p.activePage}}</a>\n </li>\n @if (p.activePage + 1 <= p.lastPage) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage + 1)\">\n <a class=\"page-link\">{{p.activePage+1}}</a>\n </li>\n }\n @if (p.activePage + 2 <= p.lastPage) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage + 2)\">\n <a class=\"page-link\">{{p.activePage+2}}</a>\n </li>\n }\n @if (p.activePage + 3 <= p.lastPage && p.activePage < 3) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage + 3)\">\n <a class=\"page-link\">{{p.activePage+3}}</a>\n </li>\n }\n @if (p.activePage + 4 <= p.lastPage && p.activePage < 2) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage + 4)\">\n <a class=\"page-link\">{{p.activePage+4}}</a>\n </li>\n }\n <li class=\"page-item\" [class.disabled]=\"p.activePage >= p.lastPage\" (click)=\"p.setPage(p.lastPage)\">\n <a class=\"page-link\" aria-label=\"Next\"><span aria-hidden=\"true\">»</span></a>\n </li>\n </ul>\n }\n @if (p.dataLength > minRowsOnPage()) {\n <ul class=\"pagination float-end\">\n @for (rows of rowsOnPageSet(); track rows) {\n <li class=\"page-item\" [class.active]=\"p.rowsOnPage===rows\" (click)=\"p.setRowsOnPage(rows)\">\n <a class=\"page-link\">{{rows}}</a>\n </li>\n }\n </ul>\n }\n </mfPaginator>\n `,\n styles: [\n \".page-link { cursor: pointer; }\"\n ],\n imports: [Paginator]\n})\nexport class BootstrapPaginator {\n rowsOnPageSet = input<number[]>([]);\n mfTable = input<DataTable>();\n\n minRowsOnPage = computed(() => this.rowsOnPageSet().reduce((previous, current) => current < previous ? current : previous, 0));\n}\n","import { Component, OnInit, inject, input } from \"@angular/core\";\nimport {DataTable, SortBy, SortEvent} from \"./DataTable\";\n\n@Component({\n selector: \"mfDefaultSorter\",\n template: `\n <a (click)=\"sort()\" (keydown.enter)=\"sort()\" (keydown.space)=\"sort()\" class=\"text-nowrap text-decoration-none\" tabindex=\"0\">\n <ng-content></ng-content>\n @if (isSortedByMeAsc) {\n <span aria-hidden=\"true\" aria-label=\"asc\">▲</span>\n } @else if (isSortedByMeDesc) {\n <span aria-hidden=\"true\" aria-label=\"desc\">▼</span>\n }\n </a>`,\n styles: [\n \"a { cursor: pointer; }\"\n ]\n})\nexport class DefaultSorter<T = any> implements OnInit {\n private mfTable = inject(DataTable<T>);\n\n readonly sortBy = input.required<SortBy<T>>({ alias: \"by\" });\n\n isSortedByMeAsc = false;\n isSortedByMeDesc = false;\n\n public ngOnInit(): void {\n this.mfTable.onSortChange.subscribe((event: SortEvent) => {\n this.isSortedByMeAsc = (event.sortBy == this.sortBy() && event.sortOrder === \"asc\");\n this.isSortedByMeDesc = (event.sortBy == this.sortBy() && event.sortOrder === \"desc\");\n });\n }\n\n sort() {\n if (this.isSortedByMeAsc) {\n this.mfTable.setSort(this.sortBy(), \"desc\");\n } else {\n this.mfTable.setSort(this.sortBy(), \"asc\");\n }\n return false;\n }\n}\n","import {NgModule} from \"@angular/core\";\n\nimport {DataTable} from \"./DataTable\";\nimport {DefaultSorter} from \"./DefaultSorter\";\nimport {Paginator} from \"./Paginator\";\nimport {BootstrapPaginator} from \"./BootstrapPaginator\";\n\n@NgModule({\n imports: [\n DataTable,\n DefaultSorter,\n Paginator,\n BootstrapPaginator\n ],\n exports: [\n DataTable,\n DefaultSorter,\n Paginator,\n BootstrapPaginator\n ]\n})\nexport class DataTableModule {\n\n}\n","/*\n * Public API Surface of ng-datatable\n */\n\nexport * from \"./lib/BootstrapPaginator\";\nexport * from \"./lib/Paginator\";\nexport * from \"./lib/DefaultSorter\";\nexport * from \"./lib/DataTable\";\nexport * from \"./lib/DataTableModule\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}