@angular-generic-table/core 5.0.0-rc.4 → 5.0.0-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/angular-generic-table-core.d.ts +1 -3
  2. package/esm2020/angular-generic-table-core.mjs +5 -0
  3. package/esm2020/lib/core.component.mjs +118 -0
  4. package/esm2020/lib/core.module.mjs +23 -0
  5. package/esm2020/lib/core.service.mjs +14 -0
  6. package/esm2020/lib/enums/order.enum.mjs +6 -0
  7. package/esm2020/lib/models/table-column.interface.mjs +2 -0
  8. package/esm2020/lib/models/table-config.interface.mjs +2 -0
  9. package/esm2020/lib/models/table-info.interface.mjs +2 -0
  10. package/esm2020/lib/models/table-meta.interface.mjs +2 -0
  11. package/esm2020/lib/models/table-row.interface.mjs +2 -0
  12. package/esm2020/lib/models/table-sort.interface.mjs +2 -0
  13. package/esm2020/lib/pagination/pagination.component.mjs +63 -0
  14. package/esm2020/lib/pagination/pagination.module.mjs +18 -0
  15. package/esm2020/lib/pipes/capital-case.pipe.mjs +17 -0
  16. package/esm2020/lib/pipes/dash-case.pipe.mjs +17 -0
  17. package/esm2020/lib/pipes/dynamic.pipe.mjs +26 -0
  18. package/esm2020/lib/pipes/highlight.pipe.mjs +48 -0
  19. package/esm2020/lib/pipes/sort-class.pipe.mjs +16 -0
  20. package/esm2020/lib/utilities/utilities.mjs +38 -0
  21. package/esm2020/public-api.mjs +15 -0
  22. package/fesm2015/angular-generic-table-core.mjs +379 -0
  23. package/fesm2015/angular-generic-table-core.mjs.map +1 -0
  24. package/fesm2020/angular-generic-table-core.mjs +377 -0
  25. package/fesm2020/angular-generic-table-core.mjs.map +1 -0
  26. package/lib/core.component.d.ts +8 -10
  27. package/lib/core.module.d.ts +11 -0
  28. package/lib/core.service.d.ts +3 -0
  29. package/lib/models/table-column.interface.d.ts +5 -0
  30. package/lib/models/table-config.interface.d.ts +3 -2
  31. package/lib/models/table-meta.interface.d.ts +8 -0
  32. package/lib/models/table-row.interface.d.ts +1 -0
  33. package/lib/pagination/pagination.component.d.ts +14 -0
  34. package/lib/pagination/pagination.module.d.ts +8 -0
  35. package/lib/pipes/capital-case.pipe.d.ts +7 -0
  36. package/lib/pipes/dash-case.pipe.d.ts +3 -0
  37. package/lib/pipes/dynamic.pipe.d.ts +9 -0
  38. package/lib/pipes/highlight.pipe.d.ts +3 -0
  39. package/lib/pipes/sort-class.pipe.d.ts +3 -0
  40. package/lib/utilities/utilities.d.ts +1 -0
  41. package/package.json +19 -7
  42. package/public-api.d.ts +3 -0
  43. package/scss/index.scss +4 -0
  44. package/scss/mixins.scss +79 -0
  45. package/scss/tokens.scss +12 -0
  46. package/angular-generic-table-core.metadata.json +0 -1
  47. package/bundles/angular-generic-table-core.umd.js +0 -610
  48. package/bundles/angular-generic-table-core.umd.js.map +0 -1
  49. package/bundles/angular-generic-table-core.umd.min.js +0 -2
  50. package/bundles/angular-generic-table-core.umd.min.js.map +0 -1
  51. package/esm2015/angular-generic-table-core.js +0 -8
  52. package/esm2015/lib/core.component.js +0 -115
  53. package/esm2015/lib/core.module.js +0 -16
  54. package/esm2015/lib/core.service.js +0 -13
  55. package/esm2015/lib/enums/order.enum.js +0 -6
  56. package/esm2015/lib/models/table-column.interface.js +0 -2
  57. package/esm2015/lib/models/table-config.interface.js +0 -2
  58. package/esm2015/lib/models/table-info.interface.js +0 -2
  59. package/esm2015/lib/models/table-row.interface.js +0 -2
  60. package/esm2015/lib/models/table-sort.interface.js +0 -2
  61. package/esm2015/lib/pipes/dash-case.pipe.js +0 -13
  62. package/esm2015/lib/pipes/highlight.pipe.js +0 -44
  63. package/esm2015/lib/pipes/sort-class.pipe.js +0 -12
  64. package/esm2015/lib/utilities/utilities.js +0 -25
  65. package/esm2015/public-api.js +0 -12
  66. package/fesm2015/angular-generic-table-core.js +0 -242
  67. package/fesm2015/angular-generic-table-core.js.map +0 -1
@@ -1,242 +0,0 @@
1
- import { ɵɵdefineInjectable, Injectable, Component, ChangeDetectionStrategy, Input, Pipe, NgModule } from '@angular/core';
2
- import { ReplaySubject, Subject, isObservable, of, combineLatest, EMPTY, BehaviorSubject } from 'rxjs';
3
- import { startWith, map, switchMap, shareReplay, withLatestFrom } from 'rxjs/operators';
4
- import { CommonModule } from '@angular/common';
5
-
6
- class CoreService {
7
- constructor() { }
8
- }
9
- CoreService.ɵprov = ɵɵdefineInjectable({ factory: function CoreService_Factory() { return new CoreService(); }, token: CoreService, providedIn: "root" });
10
- CoreService.decorators = [
11
- { type: Injectable, args: [{
12
- providedIn: 'root'
13
- },] }
14
- ];
15
- CoreService.ctorParameters = () => [];
16
-
17
- var Order;
18
- (function (Order) {
19
- Order["ASC"] = "asc";
20
- Order["DESC"] = "desc";
21
- })(Order || (Order = {}));
22
-
23
- let dashed;
24
- dashed = (s) => s.replace(/[A-Z]/g, m => '-' + m.toLowerCase());
25
- let chunk;
26
- chunk = (array, chunkSize) => {
27
- if (chunkSize < 0) {
28
- throw new Error('Invalid chunk size');
29
- }
30
- if (chunkSize === 0 && !chunkSize) {
31
- return [array];
32
- }
33
- const CHUNK = [];
34
- for (let i = 0, len = array.length; i < len; i += chunkSize) {
35
- CHUNK.push(array.slice(i, i + chunkSize));
36
- }
37
- return CHUNK;
38
- };
39
- let search;
40
- search = (text, caseSensitive, data, config) => {
41
- const searchColumns = Object.keys(config.columns).filter(key => !config.columns[key].hidden && config.columns[key].search !== false);
42
- return data.filter(row => Object.entries(row)
43
- .filter(([key, value]) => searchColumns.indexOf(key) !== -1)
44
- .reduce((prev, [key, value]) => prev + (prev === '' ? '' : ' & ') + (caseSensitive ? value + '' : (value + '').toLowerCase()), '')
45
- .indexOf(text) !== -1);
46
- };
47
-
48
- class CoreComponent {
49
- constructor() {
50
- this._loading$ = new ReplaySubject(1);
51
- this.sortBy$ = new Subject();
52
- // tslint:disable-next-line:variable-name
53
- this._searchBy$ = new ReplaySubject(1);
54
- this.searchBy$ = this._searchBy$.pipe(startWith(''), map((value) => (isObservable(value) ? value : of(value))), switchMap((obs) => obs), shareReplay(1));
55
- // tslint:disable-next-line:variable-name
56
- this._tableConfig$ = new ReplaySubject(1);
57
- this.tableConfig$ = this._tableConfig$.pipe(map((value) => (isObservable(value) ? value : of(value))), switchMap((obs) => obs), shareReplay(1));
58
- // tslint:disable-next-line:variable-name
59
- this._data$ = new ReplaySubject(1);
60
- this.data$ = this._data$.pipe(map((value) => (isObservable(value) ? value : of(value))), switchMap((obs) => combineLatest([obs, this.sortBy$.pipe(startWith(EMPTY)), this.searchBy$])), withLatestFrom(this.tableConfig$), map(([[data, sortBy, searchBy], config]) => {
61
- return !sortBy
62
- ? searchBy
63
- ? search(searchBy, false, data, config)
64
- : data
65
- : (searchBy ? search(searchBy, false, data, config) : data).sort((a, b) => {
66
- // TODO: improve logic
67
- const typed = sortBy;
68
- return a[typed.sortBy] > b[typed.sortBy]
69
- ? typed.sortByOrder === Order.ASC
70
- ? 1
71
- : -1
72
- : b[typed.sortBy] > a[typed.sortBy]
73
- ? typed.sortByOrder === Order.ASC
74
- ? -1
75
- : 1
76
- : 0;
77
- });
78
- }));
79
- this.table$ = combineLatest([
80
- this.data$,
81
- this.tableConfig$,
82
- ]).pipe(map(([sorted, config]) => {
83
- // if pagination is disabled...
84
- if (!config.pagination || config.pagination.length === 0) {
85
- // ...return unaltered array
86
- return { data: [sorted], config, info: { records: sorted.length, pageTotal: 1 } };
87
- }
88
- // return record set
89
- return {
90
- data: chunk(sorted, +config.pagination.length),
91
- config,
92
- info: {
93
- records: sorted.length,
94
- pageTotal: Math.ceil(sorted.length / +config.pagination.length),
95
- },
96
- };
97
- }));
98
- // tslint:disable-next-line:variable-name
99
- this._currentPage$ = new BehaviorSubject(0);
100
- this.currentPage$ = this._currentPage$.pipe(map((value) => (isObservable(value) ? value : of(value))), switchMap((obs) => obs), withLatestFrom(this.table$), map(([page, table]) => {
101
- // determine last page
102
- const lastPage = Math.ceil(table.info.records / table.config.pagination.length) - 1;
103
- // determine max/min position
104
- return +page < 0 ? 0 : +page > lastPage ? lastPage : +page;
105
- }), shareReplay(1));
106
- this.colspan$ = this.tableConfig$.pipe(map((config) => Object.values(config.columns).filter((value) => value.hidden !== true).length));
107
- this.columnOrder = (a, b) => {
108
- return (a.value.order || 0) - (b.value.order || 0);
109
- };
110
- }
111
- set loading(value) {
112
- this._loading$.next(value);
113
- }
114
- set page(value) {
115
- this._currentPage$.next(value);
116
- }
117
- set search(value) {
118
- this._searchBy$.next(value);
119
- }
120
- set config(value) {
121
- this._tableConfig$.next(value);
122
- }
123
- set data(value) {
124
- this._data$.next(value);
125
- }
126
- get loading$() {
127
- return this._loading$.pipe(startWith(false), map((value) => (isObservable(value) ? value : of(value))), switchMap((obs) => obs), shareReplay(1));
128
- }
129
- sort(property) {
130
- var _a, _b;
131
- const newSortOrder = ((_a = this._sortBy) === null || _a === void 0 ? void 0 : _a.sortBy) !== property || ((_b = this._sortBy) === null || _b === void 0 ? void 0 : _b.sortByOrder) === Order.DESC || !this._sortBy.sortByOrder
132
- ? Order.ASC
133
- : Order.DESC;
134
- const newSortBy = {
135
- sortBy: property,
136
- sortByOrder: newSortOrder,
137
- };
138
- this.sortBy$.next(newSortBy);
139
- this._sortBy = newSortBy;
140
- }
141
- }
142
- CoreComponent.decorators = [
143
- { type: Component, args: [{
144
- selector: 'angular-generic-table',
145
- template: "<table class=\"table text-nowrap mb-0\" id=\"agreementList_table\">\n <thead>\n <tr *ngIf=\"{\n config:(tableConfig$ | async)!,\n loading: loading$ | async\n } as table\">\n <ng-container *ngFor=\"let column of table.config.columns | keyvalue: columnOrder\">\n <th\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ column.value?.sortable ? 'sort ' : '' }} {{ sortBy$ | async | sortClass: column.key }} {{\n (column.key | dashCase) + '-column'\n }} {{column.value.class}}\"\n [class.disabled]=\"table.loading\"\n (click)=\"table.loading || !column.value.sortable || sort(column.key)\"\n >\n <span>{{ column.value?.header || column.key }}</span>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody *ngIf=\"loading$ | async; else tableContent\">\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-loading\"></ng-content>\n </td>\n </tr>\n </tbody>\n</table>\n<ng-template #tableContent>\n <ng-container\n *ngIf=\"(table$ | async)! as table\"\n >\n <tbody id=\"agreementList_tableContent\" *ngIf=\"table!.data!.length > 0; else noData\">\n <tr *ngFor=\"let row of table!.data![(currentPage$ | async) || 0]; let i = index\" [attr.id]=\"'tableRow_' + i\">\n <ng-container *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\">\n <td *ngIf=\"!column.value?.hidden\" ngClass=\"{{(column.key | dashCase) + '-column'}} {{column.value.class}}\">\n <ng-container [ngTemplateOutlet]=\"(searchBy$ | async) && !table.config.columns[column.key].templateRef ? highlighted:\n table.config.columns[column.key].templateRef ? templateRef :\n rawData\" [ngTemplateOutletContext]=\"{row: row, column: column, search: (searchBy$ | async), templateRef: table.config.columns[column.key].templateRef, index: i}\"></ng-container></td>\n </ng-container>\n </tr>\n </tbody>\n </ng-container>\n</ng-template>\n<ng-template #noData>\n <tbody>\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-no-data\"></ng-content>\n </td>\n </tr>\n </tbody>\n</ng-template>\n<ng-template #highlighted let-row=\"row\" let-column=\"column\" let-search=\"search\">\n <div [innerHTML]=\"(row[column.key] | highlight: search)\"></div>\n</ng-template>\n<ng-template #rawData let-row=\"row\" let-column=\"column\">\n {{row[column.key]}}\n</ng-template>\n<ng-template #templateRef let-row=\"row\" let-column=\"column\" let-index=\"index\" let-templateRef=\"templateRef\">\n <ng-container [ngTemplateOutlet]=\"templateRef\" [ngTemplateOutletContext]=\"{row: row, col: column, index: index}\"></ng-container>\n</ng-template>\n",
146
- changeDetection: ChangeDetectionStrategy.OnPush
147
- },] }
148
- ];
149
- CoreComponent.ctorParameters = () => [];
150
- CoreComponent.propDecorators = {
151
- loading: [{ type: Input }],
152
- page: [{ type: Input }],
153
- search: [{ type: Input }],
154
- config: [{ type: Input }],
155
- data: [{ type: Input }]
156
- };
157
-
158
- class SortClassPipe {
159
- transform(selection, property) {
160
- return (selection === null || selection === void 0 ? void 0 : selection.sortBy) === property ? 'sort-' + selection.sortByOrder : '';
161
- }
162
- }
163
- SortClassPipe.decorators = [
164
- { type: Pipe, args: [{
165
- name: 'sortClass',
166
- },] }
167
- ];
168
-
169
- class DashCasePipe {
170
- transform(s) {
171
- return dashed(s);
172
- }
173
- }
174
- DashCasePipe.decorators = [
175
- { type: Pipe, args: [{
176
- name: 'dashCase'
177
- },] }
178
- ];
179
-
180
- class HighlightPipe {
181
- transform(text, searchTerm) {
182
- if (!searchTerm) {
183
- return text;
184
- }
185
- const haystackAlwaysString = text + '';
186
- let highlightedText = haystackAlwaysString; // fallback
187
- let searchPattern;
188
- try {
189
- searchPattern = new RegExp('(' +
190
- // @ts-ignore
191
- searchTerm
192
- .toLowerCase()
193
- .match(/".*?"|[^ ]+/g) // extract words
194
- .map(needle => needle.replace(/"(.*?)"/, '$1') // strip away '"'
195
- )
196
- .join('|') + // combine words
197
- ')', 'ig');
198
- }
199
- catch (error) {
200
- return highlightedText;
201
- }
202
- const containsTagPattern = /(<.*?>)(.*)(<\/.*?>)/gi;
203
- const containsTagMatches = containsTagPattern.exec(haystackAlwaysString);
204
- if (containsTagMatches) {
205
- // tag exists in haystack
206
- highlightedText =
207
- containsTagMatches[1] +
208
- containsTagMatches[2].replace(searchPattern, '<span class="gt-highlight-search">$1</span>') +
209
- containsTagMatches[3];
210
- }
211
- else {
212
- highlightedText = haystackAlwaysString.replace(searchPattern, '<span class="gt-highlight-search">$1</span>');
213
- }
214
- return highlightedText;
215
- }
216
- }
217
- HighlightPipe.decorators = [
218
- { type: Pipe, args: [{
219
- name: 'highlight'
220
- },] }
221
- ];
222
-
223
- class GenericTableCoreModule {
224
- }
225
- GenericTableCoreModule.decorators = [
226
- { type: NgModule, args: [{
227
- declarations: [CoreComponent, SortClassPipe, DashCasePipe, HighlightPipe],
228
- imports: [CommonModule],
229
- exports: [CoreComponent]
230
- },] }
231
- ];
232
-
233
- /*
234
- * Public API Surface of core
235
- */
236
-
237
- /**
238
- * Generated bundle index. Do not edit.
239
- */
240
-
241
- export { CoreComponent, CoreService, GenericTableCoreModule, SortClassPipe as ɵa, DashCasePipe as ɵb, HighlightPipe as ɵc };
242
- //# sourceMappingURL=angular-generic-table-core.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"angular-generic-table-core.js","sources":["../../projects/core/src/lib/core.service.ts","../projects/core/src/lib/enums/order.enum.ts","../projects/core/src/lib/utilities/utilities.ts","../../projects/core/src/lib/core.component.ts","../projects/core/src/lib/pipes/sort-class.pipe.ts","../projects/core/src/lib/pipes/dash-case.pipe.ts","../projects/core/src/lib/pipes/highlight.pipe.ts","../../projects/core/src/lib/core.module.ts","../../../projects/core/src/public-api.ts","../../../projects/core/src/angular-generic-table-core.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CoreService {\n constructor() {}\n}\n","export enum Order {\n ASC = 'asc',\n DESC = 'desc'\n}\n","import { TableRow } from '../models/table-row.interface';\nimport { TableConfig } from '../models/table-config.interface';\n\nexport let dashed: (s: string) => string;\ndashed = (s: string) => s.replace(/[A-Z]/g, m => '-' + m.toLowerCase());\n\nexport let chunk: (array: Array<any>, chunkSize: number) => Array<Array<TableRow>>;\nchunk = (array, chunkSize) => {\n if (chunkSize < 0) {\n throw new Error('Invalid chunk size');\n }\n if (chunkSize === 0 && !chunkSize) {\n return [array];\n }\n const CHUNK = [];\n for (let i = 0, len = array.length; i < len; i += chunkSize) {\n CHUNK.push(array.slice(i, i + chunkSize));\n }\n return CHUNK;\n};\n\nexport let search: (text: string, caseSensitive: boolean, data: Array<TableRow>, config: TableConfig) => TableRow[];\nsearch = (text: string, caseSensitive: boolean, data: Array<TableRow>, config: TableConfig) => {\n const searchColumns = Object.keys(config.columns).filter(\n key => !config.columns[key].hidden && config.columns[key].search !== false\n );\n return data.filter(\n row =>\n Object.entries(row)\n .filter(([key, value]) => searchColumns.indexOf(key) !== -1)\n .reduce(\n (prev, [key, value]): string =>\n prev + (prev === '' ? '' : ' & ') + (caseSensitive ? value + '' : (value + '').toLowerCase()),\n ''\n )\n .indexOf(text) !== -1\n );\n};\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { BehaviorSubject, combineLatest, EMPTY, isObservable, Observable, of, ReplaySubject, Subject } from 'rxjs';\nimport { TableConfig } from './models/table-config.interface';\nimport { KeyValue } from '@angular/common';\nimport { map, shareReplay, startWith, switchMap, withLatestFrom } from 'rxjs/operators';\nimport { TableColumn } from './models/table-column.interface';\nimport { Order } from './enums/order.enum';\nimport { chunk, search } from './utilities/utilities';\nimport { TableRow } from './models/table-row.interface';\nimport { TableSort } from './models/table-sort.interface';\nimport { TableInfo } from './models/table-info.interface';\n\n@Component({\n selector: 'angular-generic-table',\n templateUrl: './core.component.html',\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoreComponent {\n @Input() set loading(value: Observable<boolean> | boolean) {\n this._loading$.next(value);\n }\n @Input()\n set page(value: Observable<number> | number) {\n this._currentPage$.next(value);\n }\n\n @Input()\n set search(value: Observable<string> | string) {\n this._searchBy$.next(value);\n }\n\n @Input()\n set config(value: Observable<TableConfig> | TableConfig) {\n this._tableConfig$.next(value);\n }\n\n @Input()\n set data(value: Observable<Array<TableRow>> | Array<TableRow>) {\n this._data$.next(value);\n }\n\n constructor() {}\n get loading$(): Observable<boolean> {\n return this._loading$.pipe(\n startWith(false),\n map((value) => (isObservable(value) ? value : of(value))),\n switchMap((obs) => obs),\n shareReplay(1)\n );\n }\n\n private _loading$: ReplaySubject<Observable<boolean> | boolean> = new ReplaySubject(1);\n sortBy$: Subject<TableSort> = new Subject();\n // tslint:disable-next-line:variable-name\n private _sortBy: TableSort | undefined;\n\n // tslint:disable-next-line:variable-name\n private _searchBy$: ReplaySubject<Observable<string> | string> = new ReplaySubject(1);\n searchBy$: Observable<string> = this._searchBy$.pipe(\n startWith(''),\n map((value) => (isObservable(value) ? value : of(value))),\n switchMap((obs) => obs),\n shareReplay(1)\n );\n\n // tslint:disable-next-line:variable-name\n private _tableConfig$: ReplaySubject<TableConfig | Observable<TableConfig>> = new ReplaySubject(1);\n tableConfig$: Observable<TableConfig> = this._tableConfig$.pipe(\n map((value) => (isObservable(value) ? value : of(value))),\n switchMap((obs) => obs),\n shareReplay(1)\n );\n\n // tslint:disable-next-line:variable-name\n private _data$: ReplaySubject<Array<TableRow> | Observable<Array<TableRow>>> = new ReplaySubject(1);\n data$: Observable<Array<TableRow>> = this._data$.pipe(\n map((value) => (isObservable(value) ? value : of(value))),\n switchMap((obs) => combineLatest([obs, this.sortBy$.pipe(startWith(EMPTY)), this.searchBy$])),\n withLatestFrom(this.tableConfig$),\n map(([[data, sortBy, searchBy], config]) => {\n return !sortBy\n ? searchBy\n ? search(searchBy, false, data, config)\n : data\n : (searchBy ? search(searchBy, false, data, config) : data).sort((a, b) => {\n // TODO: improve logic\n const typed = sortBy as TableSort;\n return a[typed.sortBy] > b[typed.sortBy]\n ? typed.sortByOrder === Order.ASC\n ? 1\n : -1\n : b[typed.sortBy] > a[typed.sortBy]\n ? typed.sortByOrder === Order.ASC\n ? -1\n : 1\n : 0;\n });\n })\n );\n\n table$: Observable<{ data: Array<Array<TableRow>>; config: TableConfig; info: TableInfo }> = combineLatest([\n this.data$,\n this.tableConfig$,\n ]).pipe(\n map(([sorted, config]) => {\n // if pagination is disabled...\n if (!config.pagination || config.pagination.length === 0) {\n // ...return unaltered array\n return { data: [sorted], config, info: { records: sorted.length, pageTotal: 1 } };\n }\n // return record set\n return {\n data: chunk(sorted, +config.pagination.length),\n config,\n info: {\n records: sorted.length,\n pageTotal: Math.ceil(sorted.length / +config.pagination.length),\n },\n };\n })\n );\n\n // tslint:disable-next-line:variable-name\n private _currentPage$: BehaviorSubject<any> = new BehaviorSubject(0);\n currentPage$ = this._currentPage$.pipe(\n map((value) => (isObservable(value) ? (value as Observable<number>) : (of(value) as Observable<number>))),\n switchMap((obs) => obs),\n withLatestFrom(this.table$),\n map(([page, table]: any) => {\n // determine last page\n const lastPage = Math.ceil(table.info.records / table.config.pagination.length) - 1;\n // determine max/min position\n return +page < 0 ? 0 : +page > lastPage ? lastPage : +page;\n }),\n shareReplay(1)\n );\n\n colspan$ = this.tableConfig$.pipe(\n map((config) => Object.values(config.columns).filter((value) => value.hidden !== true).length)\n );\n\n sort(property: string): void {\n const newSortOrder =\n this._sortBy?.sortBy !== property || this._sortBy?.sortByOrder === Order.DESC || !this._sortBy.sortByOrder\n ? Order.ASC\n : Order.DESC;\n const newSortBy = {\n sortBy: property,\n sortByOrder: newSortOrder,\n };\n this.sortBy$.next(newSortBy);\n this._sortBy = newSortBy;\n }\n\n columnOrder = (a: KeyValue<string, TableColumn>, b: KeyValue<string, TableColumn>): number => {\n return (a.value.order || 0) - (b.value.order || 0);\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Order } from '../enums/order.enum';\n\n@Pipe({\n name: 'sortClass',\n})\nexport class SortClassPipe implements PipeTransform {\n transform(selection: { sortBy: string; sortByOrder: Order } | any, property: string): string {\n return selection?.sortBy === property ? 'sort-' + selection.sortByOrder : '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { dashed } from '../utilities/utilities';\n\n@Pipe({\n name: 'dashCase'\n})\nexport class DashCasePipe implements PipeTransform {\n transform(s: string): any {\n return dashed(s);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'highlight'\n})\nexport class HighlightPipe implements PipeTransform {\n transform(text: any, searchTerm: string | null): string {\n if (!searchTerm) {\n return text;\n }\n const haystackAlwaysString = text + '';\n let highlightedText = haystackAlwaysString; // fallback\n\n let searchPattern;\n try {\n searchPattern = new RegExp(\n '(' +\n // @ts-ignore\n searchTerm\n .toLowerCase()\n .match(/\".*?\"|[^ ]+/g) // extract words\n .map(\n needle => needle.replace(/\"(.*?)\"/, '$1') // strip away '\"'\n )\n .join('|') + // combine words\n ')',\n 'ig'\n );\n } catch (error) {\n return highlightedText;\n }\n\n const containsTagPattern = /(<.*?>)(.*)(<\\/.*?>)/gi;\n const containsTagMatches = containsTagPattern.exec(haystackAlwaysString);\n\n if (containsTagMatches) {\n // tag exists in haystack\n highlightedText =\n containsTagMatches[1] +\n containsTagMatches[2].replace(searchPattern, '<span class=\"gt-highlight-search\">$1</span>') +\n containsTagMatches[3];\n } else {\n highlightedText = haystackAlwaysString.replace(searchPattern, '<span class=\"gt-highlight-search\">$1</span>');\n }\n\n return highlightedText;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreComponent } from './core.component';\nimport { CommonModule } from '@angular/common';\nimport { SortClassPipe } from './pipes/sort-class.pipe';\nimport { DashCasePipe } from './pipes/dash-case.pipe';\nimport { HighlightPipe } from './pipes/highlight.pipe';\n\n@NgModule({\n declarations: [CoreComponent, SortClassPipe, DashCasePipe, HighlightPipe],\n imports: [CommonModule],\n exports: [CoreComponent]\n})\nexport class GenericTableCoreModule {}\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/core.service';\nexport * from './lib/core.component';\nexport * from './lib/core.module';\nexport * from './lib/models/table-config.interface';\nexport * from './lib/models/table-column.interface';\nexport * from './lib/models/table-info.interface';\nexport * from './lib/models/table-row.interface';\nexport * from './lib/models/table-sort.interface';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {DashCasePipe as ɵb} from './lib/pipes/dash-case.pipe';\nexport {HighlightPipe as ɵc} from './lib/pipes/highlight.pipe';\nexport {SortClassPipe as ɵa} from './lib/pipes/sort-class.pipe';"],"names":[],"mappings":";;;;;MAKa,WAAW;IACtB,iBAAgB;;;;YAJjB,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;;ACJD,IAAY,KAGX;AAHD,WAAY,KAAK;IACf,oBAAW,CAAA;IACX,sBAAa,CAAA;AACf,CAAC,EAHW,KAAK,KAAL,KAAK;;ACGV,IAAI,MAA6B,CAAC;AACzC,MAAM,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAEjE,IAAI,KAAuE,CAAC;AACnF,KAAK,GAAG,CAAC,KAAK,EAAE,SAAS;IACvB,IAAI,SAAS,GAAG,CAAC,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;KACvC;IACD,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE;QACjC,OAAO,CAAC,KAAK,CAAC,CAAC;KAChB;IACD,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,SAAS,EAAE;QAC3D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;KAC3C;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEK,IAAI,MAAwG,CAAC;AACpH,MAAM,GAAG,CAAC,IAAY,EAAE,aAAsB,EAAE,IAAqB,EAAE,MAAmB;IACxF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CACtD,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,KAAK,CAC3E,CAAC;IACF,OAAO,IAAI,CAAC,MAAM,CAChB,GAAG,IACD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;SAChB,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;SAC3D,MAAM,CACL,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KACjB,IAAI,IAAI,IAAI,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,aAAa,GAAG,KAAK,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,EAC/F,EAAE,CACH;SACA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC1B,CAAC;AACJ,CAAC;;MCnBY,aAAa;IAwBxB;QAUQ,cAAS,GAAiD,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QACvF,YAAO,GAAuB,IAAI,OAAO,EAAE,CAAC;;QAKpC,eAAU,GAA+C,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QACtF,cAAS,GAAuB,IAAI,CAAC,UAAU,CAAC,IAAI,CAClD,SAAS,CAAC,EAAE,CAAC,EACb,GAAG,CAAC,CAAC,KAAK,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EACzD,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EACvB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;;QAGM,kBAAa,GAAyD,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QACnG,iBAAY,GAA4B,IAAI,CAAC,aAAa,CAAC,IAAI,CAC7D,GAAG,CAAC,CAAC,KAAK,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EACzD,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EACvB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;;QAGM,WAAM,GAAiE,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QACpG,UAAK,GAAgC,IAAI,CAAC,MAAM,CAAC,IAAI,CACnD,GAAG,CAAC,CAAC,KAAK,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EACzD,SAAS,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAC7F,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,EACjC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;YACrC,OAAO,CAAC,MAAM;kBACV,QAAQ;sBACN,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;sBACrC,IAAI;kBACN,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;;oBAElE,MAAM,KAAK,GAAG,MAAmB,CAAC;oBAClC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;0BACpC,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,GAAG;8BAC7B,CAAC;8BACD,CAAC,CAAC;0BACJ,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;8BACjC,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,GAAG;kCAC7B,CAAC,CAAC;kCACF,CAAC;8BACH,CAAC,CAAC;iBACP,CAAC,CAAC;SACR,CAAC,CACH,CAAC;QAEF,WAAM,GAAuF,aAAa,CAAC;YACzG,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,YAAY;SAClB,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC;;YAEnB,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;;gBAExD,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;aACnF;;YAED,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,MAAM;gBACN,IAAI,EAAE;oBACJ,OAAO,EAAE,MAAM,CAAC,MAAM;oBACtB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;iBAChE;aACF,CAAC;SACH,CAAC,CACH,CAAC;;QAGM,kBAAa,GAAyB,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QACrE,iBAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,KAAK,MAAM,YAAY,CAAC,KAAK,CAAC,GAAI,KAA4B,GAAI,EAAE,CAAC,KAAK,CAAwB,CAAC,CAAC,EACzG,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EACvB,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAC3B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAM;;YAErB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;YAEpF,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,QAAQ,GAAG,QAAQ,GAAG,CAAC,IAAI,CAAC;SAC5D,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;QAEF,aAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAC/B,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,CAC/F,CAAC;QAeF,gBAAW,GAAG,CAAC,CAAgC,EAAE,CAAgC;YAC/E,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;SACpD,CAAC;KAnHc;IAvBhB,IAAa,OAAO,CAAC,KAAoC;QACvD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5B;IACD,IACI,IAAI,CAAC,KAAkC;QACzC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAChC;IAED,IACI,MAAM,CAAC,KAAkC;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC7B;IAED,IACI,MAAM,CAAC,KAA4C;QACrD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAChC;IAED,IACI,IAAI,CAAC,KAAoD;QAC3D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzB;IAGD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CACxB,SAAS,CAAC,KAAK,CAAC,EAChB,GAAG,CAAC,CAAC,KAAK,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EACzD,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EACvB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;KACH;IA4FD,IAAI,CAAC,QAAgB;;QACnB,MAAM,YAAY,GAChB,OAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,MAAK,QAAQ,IAAI,OAAA,IAAI,CAAC,OAAO,0CAAE,WAAW,MAAK,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW;cACtG,KAAK,CAAC,GAAG;cACT,KAAK,CAAC,IAAI,CAAC;QACjB,MAAM,SAAS,GAAG;YAChB,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,YAAY;SAC1B,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;KAC1B;;;YA7IF,SAAS,SAAC;gBACT,QAAQ,EAAE,uBAAuB;gBACjC,4vFAAoC;gBAEpC,eAAe,EAAE,uBAAuB,CAAC,MAAM;aAChD;;;;sBAEE,KAAK;mBAGL,KAAK;qBAKL,KAAK;qBAKL,KAAK;mBAKL,KAAK;;;MC/BK,aAAa;IACxB,SAAS,CAAC,SAAuD,EAAE,QAAgB;QACjF,OAAO,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,MAAK,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC;KAC9E;;;YANF,IAAI,SAAC;gBACJ,IAAI,EAAE,WAAW;aAClB;;;MCCY,YAAY;IACvB,SAAS,CAAC,CAAS;QACjB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;KAClB;;;YANF,IAAI,SAAC;gBACJ,IAAI,EAAE,UAAU;aACjB;;;MCAY,aAAa;IACxB,SAAS,CAAC,IAAS,EAAE,UAAyB;QAC5C,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,IAAI,CAAC;SACb;QACD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAE,CAAC;QACvC,IAAI,eAAe,GAAG,oBAAoB,CAAC;QAE3C,IAAI,aAAa,CAAC;QAClB,IAAI;YACF,aAAa,GAAG,IAAI,MAAM,CACxB,GAAG;;gBAEH,UAAU;qBACP,WAAW,EAAE;qBACb,KAAK,CAAC,cAAc,CAAC;qBACrB,GAAG,CACF,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;iBAC1C;qBACA,IAAI,CAAC,GAAG,CAAC;gBACV,GAAG,EACL,IAAI,CACL,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,eAAe,CAAC;SACxB;QAED,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;QACpD,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAEzE,IAAI,kBAAkB,EAAE;;YAEtB,eAAe;gBACb,kBAAkB,CAAC,CAAC,CAAC;oBACrB,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,6CAA6C,CAAC;oBAC3F,kBAAkB,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM;YACL,eAAe,GAAG,oBAAoB,CAAC,OAAO,CAAC,aAAa,EAAE,6CAA6C,CAAC,CAAC;SAC9G;QAED,OAAO,eAAe,CAAC;KACxB;;;YA5CF,IAAI,SAAC;gBACJ,IAAI,EAAE,WAAW;aAClB;;;MCQY,sBAAsB;;;YALlC,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,CAAC;gBACzE,OAAO,EAAE,CAAC,YAAY,CAAC;gBACvB,OAAO,EAAE,CAAC,aAAa,CAAC;aACzB;;;ACXD;;;;ACAA;;;;;;"}