@angular-generic-table/core 5.0.0-rc.2 → 5.0.0-rc.20
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.
- package/esm2020/angular-generic-table-core.mjs +5 -0
- package/esm2020/lib/core.component.mjs +560 -0
- package/esm2020/lib/core.module.mjs +47 -0
- package/esm2020/lib/core.service.mjs +14 -0
- package/esm2020/lib/gt-delta/gt-delta.component.mjs +126 -0
- package/esm2020/lib/models/gt-pagination.mjs +2 -0
- package/esm2020/lib/models/table-column.interface.mjs +2 -0
- package/esm2020/lib/models/table-config.interface.mjs +2 -0
- package/esm2020/lib/models/table-events.interface.mjs +2 -0
- package/esm2020/lib/models/table-info.interface.mjs +2 -0
- package/esm2020/lib/models/table-meta.interface.mjs +2 -0
- package/esm2020/lib/models/table-row.interface.mjs +2 -0
- package/esm2020/lib/models/table-sort.interface.mjs +2 -0
- package/esm2020/lib/pagination/pagination.component.mjs +157 -0
- package/esm2020/lib/pagination/pagination.module.mjs +17 -0
- package/esm2020/lib/pipes/capital-case.pipe.mjs +18 -0
- package/esm2020/lib/pipes/dash-case.pipe.mjs +18 -0
- package/esm2020/lib/pipes/dynamic.pipe.mjs +26 -0
- package/esm2020/lib/pipes/highlight.pipe.mjs +49 -0
- package/esm2020/lib/pipes/row-selection.pipe.mjs +17 -0
- package/esm2020/lib/pipes/sort-class.pipe.mjs +40 -0
- package/esm2020/lib/utilities/utilities.mjs +186 -0
- package/esm2020/public-api.mjs +24 -0
- package/fesm2015/angular-generic-table-core.mjs +1253 -0
- package/fesm2015/angular-generic-table-core.mjs.map +1 -0
- package/fesm2020/angular-generic-table-core.mjs +1240 -0
- package/fesm2020/angular-generic-table-core.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/core.component.d.ts +123 -18
- package/lib/core.module.d.ts +13 -0
- package/lib/core.service.d.ts +3 -0
- package/lib/gt-delta/gt-delta.component.d.ts +32 -0
- package/lib/models/gt-pagination.d.ts +18 -0
- package/lib/models/table-column.interface.d.ts +15 -3
- package/lib/models/table-config.interface.d.ts +44 -6
- package/lib/models/table-events.interface.d.ts +27 -0
- package/lib/models/table-info.interface.d.ts +3 -1
- package/lib/models/table-meta.interface.d.ts +8 -0
- package/lib/models/table-row.interface.d.ts +1 -1
- package/lib/models/table-sort.interface.d.ts +6 -4
- package/lib/pagination/pagination.component.d.ts +62 -0
- package/lib/pagination/pagination.module.d.ts +8 -0
- package/lib/pipes/capital-case.pipe.d.ts +7 -0
- package/lib/pipes/dash-case.pipe.d.ts +3 -0
- package/lib/pipes/dynamic.pipe.d.ts +9 -0
- package/lib/pipes/highlight.pipe.d.ts +3 -0
- package/lib/pipes/row-selection.pipe.d.ts +8 -0
- package/lib/pipes/sort-class.pipe.d.ts +5 -5
- package/lib/utilities/utilities.d.ts +32 -0
- package/package.json +22 -10
- package/public-api.d.ts +12 -0
- package/scss/index.scss +319 -0
- package/angular-generic-table-core.d.ts +0 -7
- package/angular-generic-table-core.metadata.json +0 -1
- package/bundles/angular-generic-table-core.umd.js +0 -594
- package/bundles/angular-generic-table-core.umd.js.map +0 -1
- package/bundles/angular-generic-table-core.umd.min.js +0 -2
- package/bundles/angular-generic-table-core.umd.min.js.map +0 -1
- package/esm2015/angular-generic-table-core.js +0 -8
- package/esm2015/lib/core.component.js +0 -107
- package/esm2015/lib/core.module.js +0 -16
- package/esm2015/lib/core.service.js +0 -13
- package/esm2015/lib/enums/order.enum.js +0 -6
- package/esm2015/lib/models/table-column.interface.js +0 -2
- package/esm2015/lib/models/table-config.interface.js +0 -2
- package/esm2015/lib/models/table-info.interface.js +0 -2
- package/esm2015/lib/models/table-row.interface.js +0 -2
- package/esm2015/lib/models/table-sort.interface.js +0 -2
- package/esm2015/lib/pipes/dash-case.pipe.js +0 -13
- package/esm2015/lib/pipes/highlight.pipe.js +0 -44
- package/esm2015/lib/pipes/sort-class.pipe.js +0 -12
- package/esm2015/lib/utilities/utilities.js +0 -25
- package/esm2015/public-api.js +0 -12
- package/fesm2015/angular-generic-table-core.js +0 -234
- package/fesm2015/angular-generic-table-core.js.map +0 -1
- package/lib/enums/order.enum.d.ts +0 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"angular-generic-table-core.mjs","sources":["../../../projects/core/src/lib/core.service.ts","../../../projects/core/src/lib/utilities/utilities.ts","../../../projects/core/src/lib/pipes/capital-case.pipe.ts","../../../projects/core/src/lib/pipes/sort-class.pipe.ts","../../../projects/core/src/lib/pipes/dash-case.pipe.ts","../../../projects/core/src/lib/pipes/dynamic.pipe.ts","../../../projects/core/src/lib/pipes/highlight.pipe.ts","../../../projects/core/src/lib/pipes/row-selection.pipe.ts","../../../projects/core/src/lib/core.component.ts","../../../projects/core/src/lib/core.component.html","../../../projects/core/src/lib/gt-delta/gt-delta.component.ts","../../../projects/core/src/lib/core.module.ts","../../../projects/core/src/lib/pagination/pagination.component.ts","../../../projects/core/src/lib/pagination/pagination.component.html","../../../projects/core/src/lib/pagination/pagination.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","import { TableRow } from '../models/table-row.interface';\nimport { TableConfig } from '../models/table-config.interface';\nimport { GtSortConfig, GtSortOrder } from '../models/table-sort.interface';\nimport { GtSortEvent } from '../models/table-events.interface';\nexport let dashed: (s: string) => string;\ndashed = (s: string) => s.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());\n\nexport let capitalize: (s: string) => string;\ncapitalize = (s) =>\n (s.charAt(0).toUpperCase() + s.slice(1))\n .replace(/_/g, ' ')\n .replace(/([A-Z][a-z]+)/g, ' $1')\n .replace(/([A-Z]{2,})/g, ' $1')\n .replace(/\\s{2,}/g, ' ')\n .trim();\n\nexport let chunk: (\n array: Array<any>,\n chunkSize: number\n) => 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: (\n text: string,\n caseSensitive: boolean,\n data: Array<TableRow>,\n config: TableConfig\n) => TableRow[];\nsearch = (\n text: string,\n caseSensitive: boolean,\n data: Array<TableRow>,\n config: TableConfig\n) => {\n if (config.columns) {\n const searchColumns = Object.keys(config.columns).filter(\n // @ts-ignore\n (key) =>\n config.columns &&\n !config.columns[key]?.hidden &&\n config.columns[key]?.search !== false\n );\n\n const FILTERED = [];\n for (let i = 0; i < data.length; i++) {\n const row = data[i];\n const match =\n Object.entries(row)\n .filter(([key, value]) => searchColumns.indexOf(key) !== -1)\n .reduce((acc, [key, value], index): string => {\n const search = config?.columns![key]?.search;\n // if search is a function...\n if (typeof search === 'function') {\n // ...use search function to return value to search\n value = search(row, key, value);\n }\n return (\n acc +\n (index === 0 ? '' : ' ? ') +\n (caseSensitive ? value + '' : (value + '').toLowerCase())\n );\n }, '')\n .indexOf(caseSensitive ? text : text.toLowerCase()) !== -1;\n if (match) {\n FILTERED[FILTERED.length] = row;\n }\n }\n return FILTERED;\n } else {\n return data;\n }\n};\n\nexport let calculate = (data: Array<TableRow>, config: TableConfig) => {\n const CALCULATIONS: { [key: string]: boolean } = {};\n const COLUMN_CALCULATIONS: { [key: string]: Array<string> } = {};\n let CALCULATED = Object.entries(config.footer?.columns || {})\n .filter(\n ([columnName, calculations]) =>\n Object.values(calculations || {}).filter((value) => value !== false)\n .length >= 0\n )\n .reduce((acc: any, [columnName, calculations], index) => {\n acc[columnName] = Object.entries(calculations || {})\n .filter(([calculation, value]) => value !== false)\n .reduce((acc: any, [calculation, value]) => {\n if (COLUMN_CALCULATIONS[columnName]) {\n COLUMN_CALCULATIONS[columnName].push(calculation);\n } else if (value === true) {\n COLUMN_CALCULATIONS[columnName] = [calculation];\n }\n CALCULATIONS[calculation] = true;\n if (typeof value === 'function') {\n value = value(data, columnName);\n }\n acc[calculation] = value === true ? 0 : value;\n return acc;\n }, {});\n return acc;\n }, {});\n if (Object.keys(CALCULATED).length > 0) {\n for (let i = 0; i < data.length; i++) {\n Object.entries(COLUMN_CALCULATIONS).forEach(([column, calculations]) => {\n if (calculations.indexOf('sum') > -1) {\n CALCULATED[column].sum += data[i][column];\n }\n if (\n calculations.indexOf('avg') > -1 &&\n calculations.indexOf('sum') === -1\n ) {\n if (CALCULATED[column].sum === undefined) {\n CALCULATED[column].sum = 0;\n }\n CALCULATED[column].sum += data[i][column];\n }\n if (\n calculations.indexOf('max') > -1 &&\n (!CALCULATED[column].max || +data[i][column] > CALCULATED[column].max)\n ) {\n CALCULATED[column].max = +data[i][column];\n }\n if (\n calculations.indexOf('min') > -1 &&\n (!CALCULATED[column].min || +data[i][column] < CALCULATED[column].min)\n ) {\n CALCULATED[column].min = +data[i][column];\n }\n });\n }\n Object.entries(COLUMN_CALCULATIONS).forEach(([column, calculations]) => {\n if (calculations.indexOf('avg') !== -1) {\n CALCULATED[column].avg = CALCULATED[column]?.sum / data.length;\n // if sum is not part of calculations config...\n if (calculations.indexOf('sum') === -1 && CALCULATED[column].sum) {\n // ...remove it\n delete CALCULATED[column].sum;\n }\n }\n if (calculations.indexOf('count') !== -1) {\n CALCULATED[column].count = data.length;\n }\n });\n }\n return {\n calculated: CALCULATED,\n calculations: Object.keys(CALCULATIONS).sort(\n (a, b) =>\n (config.footer?.rowOrder?.indexOf(a) || 0) -\n (config.footer?.rowOrder?.indexOf(b) || 0)\n ),\n calculatedColumnsCount: Object.keys(CALCULATED).length || 0,\n };\n};\n\n/** sortOnMultipleKeys\n * @description Sort data on multiple keys\n * @param {GtSortOrder} keys - array with sort config objects to sort on, data will be sorted according to array order\n * @returns sort function\n */\nexport const sortOnMultipleKeys = (\n keys: GtSortOrder\n): ((a: TableRow, b: TableRow) => number) => {\n const order = keys.map((key) => (key.order === 'desc' ? -1 : 1));\n return (a, b) => {\n for (let i = 0; i < keys.length; i++) {\n const o = keys[i].key;\n if (a[o] === b[o]) return 0;\n if (a[o] === null) return 1;\n if (b[o] === null) return -1;\n if (a[o] > b[o]) return order[i];\n if (a[o] < b[o]) return -order[i];\n }\n return 0;\n };\n};\n\n/** parseSortOrderParams\n * @description Convert sort order query param to array with sort config objects\n * @param sortParams - Query param string where each sort config object is separated by comma and order is indicated by + (ascending) or - (descending), e.g. _'name,-age'_\n * @returns GtSortOrder - Array with sort config objects\n */\nexport const parseSortOrderParams = (sortParams: string): GtSortOrder => {\n const sortParamsArray = sortParams.split(',');\n return sortParamsArray.map((sortParam) => {\n const [key, order] = sortParam.split(':');\n return {\n key: key.replace(/^[+-]/, ''),\n order: order === 'desc' ? 'desc' : 'asc',\n };\n });\n};\n\n/** sortOrderConfigToParam\n * @description Convert sort config object to string that can be used as query param when sorting is implemented server side\n * @param sortConfig - Sort config object\n * @returns string - Query param string where order is indicated by + (ascending) or - (descending), e.g. _'-name'_\n */\nexport const sortOrderConfigToParam = (\n sortConfig: GtSortEvent | GtSortConfig\n): string => {\n const order = sortConfig.order === 'desc' ? '-' : '+';\n return `${order}${sortConfig.key}`;\n};\n\n/** sortOrderToParams\n * @description Convert sort order array to string that can be used as query param when sorting is implemented server side\n * @param sortOrder - Array with sort config objects\n * @returns string - Query param string where each sort config object is separated by comma and order is indicated by + (ascending) or - (descending), e.g. _'name,-age'_\n */\nexport const sortOrderToParams = (sortOrder: GtSortOrder): string => {\n return sortOrder\n .map((sortConfig) => sortOrderConfigToParam(sortConfig))\n .join(',');\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { capitalize } from '../utilities/utilities';\n\n@Pipe({\n name: 'capitalCase',\n standalone: true,\n})\nexport class CapitalCasePipe implements PipeTransform {\n transform(s: string): any {\n return capitalize(s);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GtSortOrder } from '../models/table-sort.interface';\n\n@Pipe({\n name: 'sortClass',\n standalone: true,\n})\nexport class SortClassPipe implements PipeTransform {\n transform(\n sortOrder: GtSortOrder | null,\n key: string,\n context: 'class' | 'aria' | 'order' = 'class'\n ): string | null {\n const sortIndex = sortOrder\n ? sortOrder.findIndex((s) => s.key === key)\n : -1;\n if (context === 'aria') {\n if (sortIndex === -1 || !sortOrder) {\n return null;\n } else {\n return `${sortOrder[sortIndex].order}ending`;\n }\n } else if (context === 'class') {\n if (sortIndex === -1 || !sortOrder) {\n return '';\n } else {\n return `gt-sort-${sortOrder[sortIndex].order}`;\n }\n } else {\n return (sortOrder && sortOrder?.length === 1) || sortIndex < 0\n ? null\n : sortIndex + 1 + '';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { dashed } from '../utilities/utilities';\n\n@Pipe({\n name: 'dashCase',\n standalone: true,\n})\nexport class DashCasePipe implements PipeTransform {\n transform(s: string): any {\n return dashed(s);\n }\n}\n","import { Injector, Pipe, PipeTransform, Type } from '@angular/core';\n\n@Pipe({\n name: 'dynamicPipe',\n standalone: true,\n})\nexport class DynamicPipe implements PipeTransform {\n constructor(private injector: Injector) {}\n\n transform(value: any, requiredPipe: Type<any>, pipeArgs: any[]): any {\n const injector = Injector.create({\n name: 'DynamicPipe',\n parent: this.injector,\n providers: [{ provide: requiredPipe }],\n });\n const pipe = injector.get(requiredPipe);\n return pipe.transform(value, ...(pipeArgs || []));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'highlight',\n standalone: true,\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(\n searchPattern,\n '<span class=\"gt-highlight-search\">$1</span>'\n ) +\n containsTagMatches[3];\n } else {\n highlightedText = haystackAlwaysString.replace(\n searchPattern,\n '<span class=\"gt-highlight-search\">$1</span>'\n );\n }\n\n return highlightedText;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TableRow } from '../models/table-row.interface';\n\n@Pipe({\n name: 'rowSelection',\n standalone: true,\n})\nexport class RowSelectionPipe implements PipeTransform {\n transform(\n row: TableRow,\n selection: any,\n comparator: (row: TableRow, selection: any) => boolean,\n className?: string\n ): string {\n return className && comparator(row, selection) ? className : '';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n TrackByFunction,\n} from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest,\n fromEvent,\n isObservable,\n Observable,\n of,\n ReplaySubject,\n Subject,\n} from 'rxjs';\nimport { TableConfig } from './models/table-config.interface';\nimport {\n AsyncPipe,\n KeyValue,\n KeyValuePipe,\n NgClass,\n NgForOf,\n NgIf,\n NgTemplateOutlet,\n SlicePipe,\n} from '@angular/common';\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n pluck,\n shareReplay,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n withLatestFrom,\n} from 'rxjs/operators';\nimport { TableColumn } from './models/table-column.interface';\nimport {\n calculate,\n chunk,\n search,\n sortOnMultipleKeys,\n} from './utilities/utilities';\nimport { TableRow } from './models/table-row.interface';\nimport { GtOrder, GtSortOrder } from './models/table-sort.interface';\nimport {\n GtPageChangeEvent,\n GtRowSelectEvent,\n GtRowClickEvent,\n GtRowActiveEvent,\n GtSortEvent,\n} from './models/table-events.interface';\nimport { CapitalCasePipe } from './pipes/capital-case.pipe';\nimport { SortClassPipe } from './pipes/sort-class.pipe';\nimport { DashCasePipe } from './pipes/dash-case.pipe';\nimport { DynamicPipe } from './pipes/dynamic.pipe';\nimport { HighlightPipe } from './pipes/highlight.pipe';\nimport { RowSelectionPipe } from './pipes/row-selection.pipe';\nimport { GtPaginationInfo } from './models/gt-pagination';\nimport { TableInfo } from './models/table-info.interface';\n\n@Component({\n selector: 'angular-generic-table',\n templateUrl: './core.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CapitalCasePipe,\n KeyValuePipe,\n SortClassPipe,\n DashCasePipe,\n RowSelectionPipe,\n AsyncPipe,\n NgTemplateOutlet,\n SlicePipe,\n DynamicPipe,\n HighlightPipe,\n NgClass,\n NgIf,\n NgForOf,\n ],\n})\nexport class CoreComponent implements OnDestroy {\n unsubscribe$ = new Subject();\n get navigationKeys(): typeof this._navigationKeys {\n return this._navigationKeys;\n }\n\n /** navigationKeys\n * @description An array of keyboard keys that will trigger navigation and active row, currently only supports arrow keys, home and end (omit key name from array to disable it)\n * @type {string[]}\n * @default ['ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight', 'Home', 'End']\n */\n @Input() set navigationKeys(value: typeof this._navigationKeys) {\n this._navigationKeys = value;\n }\n\n private _navigationKeys = [\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End',\n ];\n get selectKeys(): string[] {\n return this._selectKeys;\n }\n\n /** selectKeys\n * @description An array of keyboard keys that will trigger row selection (omit key name from array to disable it)\n * @type {string[]}\n * @default ['Enter', ' ']\n */\n @Input() set selectKeys(value: string[]) {\n this._selectKeys = value;\n }\n\n private _selectKeys = ['Enter', ' '];\n get sortOrder$(): Observable<GtSortOrder> {\n return this._sortOrder$.asObservable();\n }\n\n @Input() set loading(isLoading: Observable<boolean> | boolean) {\n this._loading$.next(isLoading);\n }\n @Input()\n set paginationIndex(pageIndex: number) {\n this._currentPaginationIndex$.next(pageIndex);\n }\n\n get paginationIndex(): number {\n return this._currentPaginationIndex$.getValue();\n }\n\n @Input() set pagingInfo(value: GtPaginationInfo | null) {\n if (value) {\n this._pagingInfo$.next(value);\n if (\n value.pageCurrent !== this._currentPaginationIndex$.getValue() + 1 &&\n value.pageCurrent !== null\n ) {\n this.paginationIndex = value.pageCurrent - 1;\n }\n }\n }\n\n /** customClasses\n * @description An object that contains custom classes for various elements in the table.\n * @type {object} - { selectedRow: string, activeRow: string } - default classes are 'gt-selected' and 'gt-active'\n */\n @Input() set customClasses(classes: Partial<typeof this._customClasses>) {\n this._customClasses = { ...this._customClasses, ...classes };\n }\n\n get customClasses(): typeof this._customClasses {\n return this._customClasses;\n }\n\n private _customClasses = {\n selectedRow: 'gt-selected',\n activeRow: 'gt-active',\n };\n\n /** isRowSelectedFn\n * @description Function to determine if row is selected or not.\n * @type {fn} A function that receives a row object and optional state for current selection that can be used to determine if row should be marked as selected or not. */\n @Input() set isRowSelectedFn(\n fn: (row: TableRow | any, selection?: any) => boolean\n ) {\n this._isRowSelectedFn = fn;\n }\n\n get isRowSelectedFn(): any {\n return this._isRowSelectedFn;\n }\n\n private _isRowSelectedFn: any;\n\n /** selection\n * @description An object that contains the currently selected row(s) in the table. It's passed to the selection function to determine which rows should be selected.\n * @type {any}\n */\n @Input() selection: any = {};\n\n /** rowIdKey\n * @description row key to use as unique id for table row. If passed, table won't generate unique ids for each row but instead use key to retrieve unique id from row.\n * @type {string}\n */\n @Input() rowIdKey: string | undefined;\n\n /** generateRowId\n * @description Whether or not to generate a unique id for each row in the table. Defaults to `true`.\n * @type {boolean}\n */\n @Input() generateRowId: boolean = true;\n\n /** trackRowByFn\n * @description A function that returns a unique identifier for each row in the table to optimize rendering when data is added or removed.\n * @type fn - TrackByFunction to retrieve unique id based on index and/or row. Defaults to using `row[this.rowIdKey]`.\n */\n @Input() set trackRowByFn(fn: TrackByFunction<TableRow>) {\n this._trackRowByFn = fn;\n }\n get trackRowByFn(): TrackByFunction<TableRow> {\n return this._trackRowByFn;\n }\n\n private _trackRowByFn(\n index: number,\n row: TableRow\n ): TrackByFunction<TableRow> {\n return this.rowIdKey ? row[this.rowIdKey] : row?._id;\n }\n\n @Input()\n set search(string: Observable<string | null> | string | null) {\n this._searchBy$.next(string);\n }\n\n @Input()\n set config(config: Observable<TableConfig<any>> | TableConfig<any>) {\n this._tableConfig$.next(config);\n }\n\n private _tableConfig: TableConfig<any> | undefined;\n\n @Input()\n set data(data: Observable<Array<TableRow>> | Array<TableRow> | null) {\n if (data) {\n this._data$.next(data);\n }\n }\n\n @Input() set sortOrder(sortConfig: GtSortOrder<TableRow> | any) {\n if (JSON.stringify(sortConfig) !== JSON.stringify(this._sortOrder$.value)) {\n this.sortOrderChange.emit(sortConfig);\n this._sortOrder$.next(sortConfig);\n }\n }\n\n @Output() rowClick = new EventEmitter<GtRowClickEvent>();\n @Output() rowSelect = new EventEmitter<GtRowSelectEvent>();\n @Output() sortOrderChange = new EventEmitter<GtSortOrder<TableRow>>();\n\n _rowClick(row: TableRow, index: number, event: MouseEvent): void {\n this.rowClick.emit({ row, index, event });\n }\n\n _rowActive(row: TableRow, index: number, event: KeyboardEvent): void {\n this.rowSelect.emit({ row, index, event });\n }\n\n private _rowActive$ = new ReplaySubject<GtRowActiveEvent>(1);\n @Output() rowActive = new EventEmitter<GtRowActiveEvent>();\n @Output() columnSort = new EventEmitter<GtSortEvent>();\n /** page change event - emitted when current page/index changes for pagination */\n @Output() pageChange = new EventEmitter<GtPageChangeEvent>();\n rowActive$ = this._rowActive$.asObservable().pipe(\n distinctUntilChanged((p, q) => {\n if (this.rowIdKey && p.row && q.row) {\n return p.row[this.rowIdKey] === q.row[this.rowIdKey];\n } else if (this.generateRowId && p.row && q.row) {\n return p.row._id === q.row._id;\n } else {\n return p.index === q.index;\n }\n }),\n tap((event) => (this.activeRowIndex = event.index)),\n tap((event) => this.rowActive.emit(event)),\n shareReplay(1)\n );\n\n activeRowIndex: number | null = null;\n activateRow(id: string, event?: MouseEvent | KeyboardEvent): void;\n activateRow(index: number, event?: MouseEvent | KeyboardEvent): void;\n activateRow(none: null, event?: MouseEvent | KeyboardEvent): void;\n activateRow(\n arg: string | number | null,\n event?: MouseEvent | KeyboardEvent\n ): void {\n if (typeof arg === 'number') {\n this.table$\n .pipe(\n pluck('data'),\n map((data) => data[this.paginationIndex][arg]),\n take(1),\n takeUntil(this.unsubscribe$)\n )\n .subscribe((row) => this._activateRow(row, arg, event));\n } else if (typeof arg === 'string') {\n // TODO: implement hover by id\n } else {\n this._activateRow(null, null);\n }\n }\n protected _activateRow(\n row: TableRow | null,\n index: number | null,\n event?: MouseEvent | KeyboardEvent\n ): void {\n this._rowActive$.next({ row, index, event });\n }\n\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> =\n new ReplaySubject(1);\n private _sortOrder$: BehaviorSubject<GtSortOrder> =\n new BehaviorSubject<GtSortOrder>([]);\n private _searchBy$: ReplaySubject<Observable<string | null> | string | null> =\n new ReplaySubject(1);\n searchBy$: Observable<string | null> = this._searchBy$.pipe(\n startWith(''),\n map((value) => (isObservable(value) ? value : of(value))),\n switchMap((obs) => obs),\n shareReplay(1)\n );\n\n private _pagingInfo$ = new BehaviorSubject<GtPaginationInfo>({\n pageCurrent: null,\n pageNext: null,\n pagePrevious: null,\n pageSize: null,\n numberOfRecords: null,\n //recordsAfterFilter: null,\n //recordsAfterSearch: null,\n //recordsAll: null,\n });\n\n // tslint:disable-next-line:variable-name\n private _tableConfig$: BehaviorSubject<\n TableConfig<any> | Observable<TableConfig<any>>\n > = new BehaviorSubject({});\n tableConfig$ = this._tableConfig$.pipe(\n map((value) => (isObservable(value) ? value : of(value))),\n switchMap((obs) => obs),\n tap((config) => (this._tableConfig = config)),\n shareReplay(1)\n );\n\n private _data$: ReplaySubject<Array<TableRow> | Observable<Array<TableRow>>> =\n new ReplaySubject(1);\n data$: Observable<Array<TableRow>> = this._data$.pipe(\n map((value) => (isObservable(value) ? value : of(value))),\n switchMap((obs) => combineLatest([obs])),\n withLatestFrom(this.tableConfig$),\n map(([[data], config]) => {\n // if columns or rows contains config for mapTo...\n if (\n (config.columns &&\n !!Object.values(config.columns).find((column) => !!column.mapTo)) ||\n (config.rows &&\n !!Object.values(config.rows).find((column) => !!column.mapTo))\n ) {\n // ...map data to new keys on row...\n const newData: TableRow[] = [];\n for (let i = 0; i < data.length; i++) {\n const row = data[i];\n const newKeys = Object.entries(config.columns || config.rows || [])\n .filter(([key, value]) => !!value.mapTo) // add keys for columns with mapTo config...\n .reduce(\n (previousValue, [key, value]) => ({\n ...previousValue,\n [key]: this.nestedValue(\n row,\n value.mapTo!.path,\n value.mapTo?.missingValue\n ),\n }),\n {}\n );\n newData[i] = { ...row, ...newKeys };\n }\n data = newData;\n }\n if (this.generateRowId && !this.rowIdKey && data.length > 0) {\n const dataWithId = [];\n for (let i = 0; i < data.length; i++) {\n dataWithId[i] = { ...data[i], _id: i };\n }\n data = dataWithId;\n }\n return { data, config };\n }),\n switchMap((obs) =>\n combineLatest([of(obs), this.sortOrder$, this.searchBy$])\n ),\n map(([table, sortBy, searchBy]) => {\n // create a new array reference and sort new array (prevent mutating existing state)\n table.data = [...table.data];\n return !sortBy?.length || table.config?.disableTableSort\n ? searchBy && !this.tableInfo?.lazyLoaded\n ? search(searchBy, false, table.data, table.config)\n : table.data\n : searchBy && !this.tableInfo?.lazyLoaded\n ? search(searchBy, false, table.data, table.config)?.sort(\n sortOnMultipleKeys(sortBy)\n )\n : table.data?.sort(sortOnMultipleKeys(sortBy));\n }),\n shareReplay(1)\n );\n\n calculations$ = combineLatest([this.data$, this.tableConfig$]).pipe(\n map(([data, config]) => calculate(data, config)),\n shareReplay(1)\n );\n\n table$ = combineLatest([\n this.data$,\n this.tableConfig$,\n this._pagingInfo$,\n ]).pipe(\n map(([sorted, config, pagingInfo]) => {\n if (\n pagingInfo.pageCurrent !== null &&\n pagingInfo.numberOfRecords !== null &&\n pagingInfo.pageSize !== null\n ) {\n return {\n data: [sorted],\n config,\n info: <TableInfo>{\n lazyLoaded: true,\n numberOfRecords: pagingInfo.numberOfRecords,\n pageSize: pagingInfo.pageSize,\n pageTotal:\n pagingInfo.pageTotal ??\n Math.ceil(pagingInfo.numberOfRecords / pagingInfo.pageSize),\n },\n };\n }\n // if pagination is disabled...\n if (!config.pagination || config.pagination.length === 0) {\n // ...return unaltered array\n return {\n data: [sorted],\n config,\n info: <TableInfo>{ numberOfRecords: sorted.length, pageTotal: 1 },\n };\n }\n // return record set\n return {\n data: chunk(sorted, +(config.pagination.length || 0)),\n config,\n info: <TableInfo>{\n numberOfRecords: sorted.length,\n pageSize: +(config.pagination.length || 0),\n pageTotal: Math.ceil(\n sorted.length / +(config.pagination.length || 0)\n ),\n },\n };\n }),\n tap((meta) => this._tableInfo$.next(meta.info)),\n shareReplay(1)\n );\n\n /** tableInfo$ - returns observable for table info\n * @return Observable<TableInfo> */\n get tableInfo$(): Observable<TableInfo | undefined> {\n return this._tableInfo$.asObservable().pipe(\n filter((info) => !!info),\n shareReplay(1)\n );\n }\n\n /** tableInfo - returns the current table info\n * @return TableInfo */\n get tableInfo(): TableInfo | undefined {\n return this._tableInfo$.getValue();\n }\n\n private _tableInfo$ = new BehaviorSubject<TableInfo | undefined>(undefined);\n\n private _currentPaginationIndex$ = new BehaviorSubject(0);\n currentPaginationIndex$ = combineLatest([\n this._currentPaginationIndex$,\n this.table$,\n ]).pipe(\n map(([page, table]) => {\n // determine last page\n const lastPage =\n Math.ceil(\n table.info.numberOfRecords /\n (table.info.pageSize ??\n (table.config?.pagination?.length || table.info.numberOfRecords))\n ) - 1;\n // determine min/max position\n return +page < 0 ? 0 : +page > lastPage ? lastPage : +page;\n }),\n distinctUntilChanged(),\n tap((index) => this.pageChange.emit({ index })),\n shareReplay(1)\n );\n\n colspan$ = this.tableConfig$.pipe(\n switchMap((config) =>\n config.columns\n ? of(\n Object.values(config.columns || config.rows || {}).filter(\n (value) => value.hidden !== true\n ).length\n )\n : this.data$.pipe(map((data) => data.length + 1))\n ),\n shareReplay(1)\n );\n\n footerColspan$ = this.tableConfig$.pipe(\n map((config) => {\n let colspan = 0;\n Object.values(config?.footer?.columns || {}).forEach((calculations) => {\n if (\n Object.values(calculations).filter((value) => value !== false)\n .length >= 0\n ) {\n colspan += 1;\n }\n }, {});\n return colspan;\n }),\n shareReplay(1)\n );\n\n /** sortByKey - Sort by key in table row\n * @param key - key to sort by\n * @param { MouseEvent } [$event] - Mouse event triggering sort, if shift key is pressed sort key will be added to already present sort keys\n */\n sortByKey(key: keyof TableRow, $event?: MouseEvent): void {\n const shiftKey = $event?.shiftKey === true;\n const currentOrder = this._sortOrder$.value;\n let sortOrder: GtOrder = 'asc';\n let newOrder: GtSortOrder = [];\n // if shift key is pressed while sorting...\n if (shiftKey) {\n // ...check if key is already sorted\n const existingSortPosition = currentOrder.findIndex(\n (value) => value.key === key\n );\n if (existingSortPosition === -1) {\n // ...if key is not sorted, add it to the end of the sort order\n newOrder = [...currentOrder, { key, order: 'asc' }];\n } else {\n // ...if key is already sorted, toggle sort order\n sortOrder = currentOrder[existingSortPosition].order;\n const newSortOrder = sortOrder === 'asc' ? 'desc' : 'asc';\n newOrder = [...currentOrder];\n newOrder[existingSortPosition] = {\n ...newOrder[existingSortPosition],\n order: newSortOrder,\n };\n }\n } else {\n // ...else if shift key is not pressed...\n if (currentOrder.length > 0) {\n // ...check if key is already sorted\n const existingSortPosition = currentOrder.findIndex(\n (value) => value.key === key\n );\n // ...if key is already sorted, toggle sort order\n if (existingSortPosition === -1) {\n newOrder = [{ key, order: 'asc' }];\n } else {\n sortOrder = currentOrder[existingSortPosition].order;\n const newSortOrder = sortOrder === 'asc' ? 'desc' : 'asc';\n newOrder = [{ key, order: newSortOrder }];\n }\n } else {\n // ...if key is not sorted set sort order for key to ascending\n newOrder = [{ key, order: sortOrder }];\n }\n }\n // create sort event\n const sortEvent: GtSortEvent = {\n key,\n order: sortOrder,\n currentSortOrder: newOrder,\n addSortKey: shiftKey,\n };\n\n // if event is passed to sort function...\n if ($event) {\n // ...emit it as well\n sortEvent.event = $event;\n }\n // emit sort event\n this.columnSort.emit(sortEvent);\n\n // if table is not lazy loaded (sorting is then handled server-side)...\n if (!this.tableInfo?.lazyLoaded) {\n // ...update sort order\n this.sortOrder = newOrder;\n }\n }\n\n columnOrder = (\n a: KeyValue<string, TableColumn>,\n b: KeyValue<string, TableColumn>\n ): number => {\n return (a.value.order || 0) - (b.value.order || 0);\n };\n\n nestedValue(\n object: any,\n mapTo: string,\n missingValue: string | number | null = null\n ): unknown {\n const levels = mapTo.split('.');\n return levels.reduce(\n (previousValue, currentValue, index) =>\n previousValue[currentValue] ||\n (index === levels.length - 1 ? missingValue : {}),\n object\n );\n }\n\n private _unsubscribeFromKeyboardEvents$ = new Subject();\n private _keyboardArrowEvent$ = fromEvent<KeyboardEvent>(\n document,\n 'keydown'\n ).pipe(\n filter(\n (event) =>\n [...this._navigationKeys, ...this._selectKeys].indexOf(event.key) > -1\n )\n );\n\n protected listenToKeyboardEvents(): void {\n if (!this._tableConfig?.activateRowOnKeyboardNavigation) {\n return;\n }\n\n this._unsubscribeFromKeyboardEvents$.next(true);\n this._keyboardArrowEvent$\n .pipe(\n withLatestFrom(\n this.data$,\n this.currentPaginationIndex$,\n this.tableInfo$\n ),\n takeUntil(this._unsubscribeFromKeyboardEvents$),\n takeUntil(this.unsubscribe$)\n )\n .subscribe(([event, rows, currentPage, tableInfo]) => {\n const selectEvent = this._selectKeys.includes(event.key);\n if (selectEvent && this.activeRowIndex !== null) {\n const rowIndex =\n this.activeRowIndex + currentPage * (tableInfo?.pageSize ?? 0);\n this._rowActive(rows[rowIndex], rowIndex, event);\n return;\n }\n\n const navigationEvent = this._navigationKeys.includes(event.key);\n if (navigationEvent) {\n this._handleNavigationEvent(event, rows, currentPage, tableInfo);\n }\n });\n }\n unsubscribeFromKeyboardEvents(tableRef: HTMLTableElement): void {\n if (!this._tableConfig?.activateRowOnKeyboardNavigation) {\n return;\n }\n // only unsubscribe if table is not focused\n if (tableRef !== document.activeElement) {\n if (this._tableConfig?.activateRowOnHover) {\n // unset active row\n this.activateRow(null);\n }\n this._unsubscribeFromKeyboardEvents$.next(true);\n }\n }\n\n private _handleNavigationEvent(\n event: KeyboardEvent,\n rows: any[],\n currentPage: number,\n tableInfo: any\n ): void {\n const hasPagination = (tableInfo?.pageTotal || 0) > 1 && tableInfo;\n const lastRowIndex = rows.length - 1;\n let newIndex = this.activeRowIndex;\n let indexModifier = 0;\n\n if (event.key === 'Home') {\n this.paginationIndex = 0;\n this.activateRow(0, event);\n return;\n }\n\n if (event.key === 'End') {\n const indexOfLastRecord = hasPagination\n ? rows.length - (tableInfo.pageTotal - 1) * tableInfo.pageSize - 1\n : lastRowIndex;\n if (tableInfo?.pageTotal) {\n this.paginationIndex = tableInfo.pageTotal - 1;\n }\n this.activateRow(indexOfLastRecord, event);\n return;\n }\n\n if (event.key === 'ArrowDown') {\n indexModifier = 1;\n } else if (event.key === 'ArrowUp') {\n indexModifier = -1;\n }\n\n if (newIndex === null) {\n newIndex = 0;\n } else if (\n newIndex + indexModifier >= 0 &&\n newIndex + indexModifier <= lastRowIndex\n ) {\n newIndex = newIndex + indexModifier;\n }\n\n if (hasPagination && tableInfo?.pageSize) {\n const isNotLastPage = currentPage + 1 < tableInfo.pageTotal;\n const recordsOnLastPage =\n rows.length - (tableInfo.pageTotal - 1) * tableInfo.pageSize - 1;\n const maxIndex = isNotLastPage\n ? tableInfo?.pageSize - 1\n : recordsOnLastPage;\n\n if (event.key === 'ArrowLeft' && currentPage > 0) {\n this.paginationIndex = currentPage - 1;\n this.activateRow(newIndex, event);\n return;\n } else if (event.key === 'ArrowRight' && isNotLastPage) {\n if (\n currentPage + 1 === tableInfo.pageTotal - 1 &&\n newIndex > recordsOnLastPage\n ) {\n this.activateRow(recordsOnLastPage, event);\n }\n this.paginationIndex = currentPage + 1;\n this.activateRow(newIndex, event);\n return;\n }\n\n if (\n currentPage > 0 &&\n indexModifier < 0 &&\n newIndex + indexModifier <= lastRowIndex &&\n (this.activeRowIndex || 0) + indexModifier < 0\n ) {\n // set last row of previous page as active\n this.activateRow(tableInfo?.pageSize - 1, event);\n this.paginationIndex = currentPage - 1;\n return;\n }\n\n const pageIndex = newIndex % tableInfo?.pageSize;\n\n if (newIndex > maxIndex && currentPage + 1 < tableInfo.pageTotal) {\n this.paginationIndex = currentPage + 1;\n }\n this.activateRow(pageIndex > maxIndex ? maxIndex : pageIndex, event);\n return;\n }\n\n this.activateRow(newIndex, event);\n }\n\n ngOnDestroy() {\n this.unsubscribe$.next(true);\n this.unsubscribe$.complete();\n }\n}\n","<table\n [ngClass]=\"(tableConfig$ | async)?.class || 'table'\"\n [class.table-mobile]=\"(tableConfig$ | async)?.mobileLayout\"\n [class.table-horizontal]=\"(tableConfig$ | async)?.rows\"\n [class.table-loading]=\"loading$ | async\"\n [class.gt-sticky-row-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.row && (tableConfig$ | async)?.rows\n \"\n [class.gt-sticky-column-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.column\n \"\n [attr.aria-busy]=\"(loading$ | async) === true ? true : null\"\n [tabindex]=\"(tableConfig$ | async)?.activateRowOnKeyboardNavigation ? 0 : -1\"\n #tableRef\n (focus)=\"listenToKeyboardEvents()\"\n (focusout)=\"unsubscribeFromKeyboardEvents(tableRef)\"\n (mouseenter)=\"listenToKeyboardEvents()\"\n (mouseleave)=\"unsubscribeFromKeyboardEvents(tableRef)\"\n>\n <thead>\n <tr\n *ngIf=\"{\n config: (tableConfig$ | async)!,\n isLoading: loading$ | async\n } as table\"\n >\n <ng-container\n *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\"\n >\n <th\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [class.disabled]=\"table.isLoading\"\n [attr.aria-sort]=\"sortOrder$ | async | sortClass: column.key:'aria'\"\n [class.gt-sortable]=\"true\"\n scope=\"col\"\n >\n <button\n *ngIf=\"column.value?.sortable\"\n [attr.data-sort-order]=\"\n sortOrder$ | async | sortClass: column.key:'order'\n \"\n class=\"gt-sort\"\n (click)=\"\n table.isLoading ||\n !column.value.sortable ||\n sortByKey(column.key, $event)\n \"\n >\n <span *ngIf=\"column.value?.header !== false\">{{\n column.value.header || column.key | capitalCase\n }}</span>\n </button>\n <span\n *ngIf=\"!column.value?.sortable && column.value?.header !== false\"\n >{{ column.value.header || column.key | capitalCase }}</span\n >\n </th>\n </ng-container>\n <ng-container\n *ngIf=\"\n ((table?.config?.rows | keyvalue: columnOrder) || [])[0] as headerRow\n \"\n >\n <th\n class=\"row-header\"\n [attr.aria-sort]=\"\n sortOrder$ | async | sortClass: headerRow.key:'aria'\n \"\n ngClass=\"{{ headerRow.value.sortable ? 'sort ' : '' }} {{\n sortOrder$ | async | sortClass: headerRow.key\n }} {{ (headerRow.key | dashCase) + '-column' }}\"\n (click)=\"\n table.isLoading ||\n !headerRow.value.sortable ||\n sortByKey(headerRow.key, $event)\n \"\n scope=\"col\"\n >\n <ng-container *ngIf=\"headerRow?.value?.header !== false\">{{\n headerRow?.value?.header || headerRow.key | capitalCase\n }}</ng-container>\n </th>\n <th\n *ngFor=\"let column of ((table$ | async)?.data || [])[0]\"\n ngClass=\"{{ headerRow.value.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config.rows || {})[headerRow.key].templateRef\n ? templateRef\n : (table.config.rows || {})[headerRow.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: headerRow,\n transform: (table.config.rows || {})[headerRow.key].transform,\n templateRef: (table.config.rows || {})[headerRow.key].templateRef,\n index: 0\n }\"\n >\n </ng-container>\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 <tfoot *ngIf=\"(table$ | async)! as table\">\n <ng-container *ngIf=\"table.data.length > 0 && !(loading$ | async)\">\n <ng-container *ngIf=\"(calculations$ | async)! as calculations\">\n <tr\n *ngFor=\"let calculation of calculations.calculations; let i = index\"\n >\n <ng-container\n *ngIf=\"{\n showHeader: (colspan$ | async) !== (footerColspan$ | async)\n } as footerRow\"\n >\n <th\n *ngIf=\"footerRow.showHeader\"\n [colSpan]=\"\n ((colspan$ | async) || 0) - ((footerColspan$ | async) || 0)\n \"\n scope=\"row\"\n >\n <ng-container\n *ngIf=\"table.config?.footer?.headers?.[calculation] as showHeader\"\n >{{showHeader === true ? (calculation | capitalCase): table.config.footer?.headers?.[calculation]}}\n </ng-container>\n </th>\n <ng-container\n *ngFor=\"\n let column of table.config?.columns | keyvalue: columnOrder\n \"\n >\n <td\n *ngIf=\"\n !column.value?.hidden && calculations.calculated[column.key]\n \"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [attr.data-header]=\"\n !footerRow.showHeader && table.config.footer?.headers?.[calculation]\n ? table.config.footer?.headers?.[calculation] === true ? (calculation | capitalCase) : table.config.footer?.headers?.[calculation]\n : null\n \"\n [attr.data-label]=\"\n table.config.mobileLayout && column.value.mobileHeader\n ? column.value.mobileHeader !== true\n ? column.value.mobileHeader\n : (column.value.header || column.key | capitalCase)\n : null\n \"\n [class.gt-no-content]=\"\n !calculations.calculated[column.key][calculation]\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config.columns || {})[column.key].templateRef\n ? templateRef\n : (table.config.columns || {})[column.key].transform\n ? transformFooter\n : rawFooter\n \"\n [ngTemplateOutletContext]=\"{\n value: calculations.calculated[column.key][calculation],\n row: calculations.calculated[column.key],\n column: calculation,\n templateRef: (table.config.columns || {})[column.key]\n .templateRef,\n transform: (table.config.columns || {})[column.key]\n .transform\n }\"\n ></ng-container>\n </td>\n </ng-container>\n </ng-container>\n </tr>\n </ng-container>\n </ng-container>\n </tfoot>\n</table>\n<ng-template #tableContent>\n <ng-container *ngIf=\"(table$ | async)! as table\">\n <tbody *ngIf=\"(table!.data![0] || table!.data!).length > 0; else noData\">\n <ng-container *ngIf=\"table.config.columns\">\n <tr\n *ngFor=\"\n let row of table!.data![\n table.info.lazyLoaded ? 0 : (currentPaginationIndex$ | async) || 0\n ];\n trackBy: trackRowByFn;\n let i = index\n \"\n [attr.id]=\"'tableRow_' + i\"\n (click)=\"table?.config?.rowClick && _rowClick(row, i, $event)\"\n (mouseenter)=\"\n table?.config?.activateRowOnHover && _activateRow(row, i, $event)\n \"\n (mouseleave)=\"\n table?.config?.activateRowOnHover &&\n _activateRow(null, null, $event)\n \"\n [ngClass]=\"[\n !!isRowSelectedFn\n ? (row\n | rowSelection\n : selection\n : isRowSelectedFn\n : customClasses.selectedRow)\n : '',\n (rowActive$ | async)?.index === i ? customClasses.activeRow : ''\n ]\"\n >\n <ng-container\n *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\"\n >\n <td\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [attr.data-label]=\"\n table.config.mobileLayout && column.value.mobileHeader\n ? column.value.mobileHeader !== true\n ? column.value.mobileHeader\n : (column.value.header || column.key | capitalCase)\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (searchBy$ | async) &&\n !(table.config.columns || {})[column.key].templateRef\n ? highlighted\n : (table.config.columns || {})[column.key].templateRef\n ? templateRef\n : (table.config.columns || {})[column.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: row,\n column: column,\n search: (searchBy$ | async),\n transform: (table.config.columns || {})[column.key].transform,\n templateRef: (table.config.columns || {})[column.key]\n .templateRef,\n index: i,\n data: table.data[\n table.info.lazyLoaded\n ? 0\n : (currentPaginationIndex$ | async) || 0\n ]\n }\"\n ></ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"table.config.rows\">\n <ng-container\n *ngFor=\"\n let row of table?.config?.rows | keyvalue: columnOrder | slice: 1;\n let i = index\n \"\n >\n <tr\n *ngIf=\"!row.value?.hidden\"\n [attr.id]=\"'tableRow_' + i\"\n ngClass=\"{{ (row.key | dashCase) + '-row' }}\"\n (click)=\"table?.config?.rowClick && _rowClick(row, i, $event)\"\n (mouseenter)=\"\n table?.config?.activateRowOnHover && _activateRow(row, i, $event)\n \"\n (mouseleave)=\"\n table?.config?.activateRowOnHover &&\n _activateRow(null, null, $event)\n \"\n [ngClass]=\"[\n !!isRowSelectedFn\n ? (row\n | rowSelection\n : selection\n : isRowSelectedFn\n : customClasses.selectedRow)\n : '',\n (rowActive$ | async)?.index === i ? customClasses.activeRow : ''\n ]\"\n >\n <th class=\"row-header\" scope=\"row\">\n {{ row.value.header || row.key | capitalCase }}\n </th>\n <td\n *ngFor=\"let column of (table?.data || [])[0]; let y = index\"\n ngClass=\"{{ row.value.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config.rows || {})[row.key].templateRef\n ? templateRef\n : (table.config.rows || {})[row.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: row,\n transform: (table.config.rows || {})[row.key].transform,\n templateRef: (table.config.rows || {})[row.key].templateRef,\n index: table.config.rows ? y : i,\n data: table.data[\n table.info.lazyLoaded\n ? 0\n : (currentPaginationIndex$ | async) || 0\n ]\n }\"\n >\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </ng-container>\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\n #highlighted\n let-row=\"row\"\n let-column=\"column\"\n let-search=\"search\"\n let-transform=\"transform\"\n>\n <div\n *ngIf=\"!transform\"\n [innerHTML]=\"row[column.key] | highlight: search\"\n ></div>\n <div\n *ngIf=\"transform\"\n [innerHTML]=\"\n row[column.key]\n | dynamicPipe: transform.pipe:transform?.args\n | highlight: search\n \"\n ></div>\n</ng-template>\n<ng-template #rawData let-row=\"row\" let-column=\"column\">\n {{ row[column.key] }}\n</ng-template>\n<ng-template\n #transformData\n let-row=\"row\"\n let-column=\"column\"\n let-transform=\"transform\"\n let-data=\"data\"\n>\n {{ row[column.key] | dynamicPipe: transform.pipe:transform?.args }}\n</ng-template>\n<ng-template #transformFooter let-value=\"value\" let-transform=\"transform\">\n {{\n (value | dynamicPipe: transform.pipe:transform?.args) ||\n (tableConfig$ | async)?.footer?.emptyContent\n }}\n</ng-template>\n<ng-template #rawFooter let-value=\"value\">\n {{ value || (tableConfig$ | async)?.footer?.emptyContent }}\n</ng-template>\n<ng-template\n #templateRef\n let-row=\"row\"\n let-column=\"column\"\n let-index=\"index\"\n let-templateRef=\"templateRef\"\n let-data=\"data\"\n>\n <ng-container\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{\n row: row,\n col: column,\n index: index,\n data: data\n }\"\n ></ng-container>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport { TableRow } from '../models/table-row.interface';\nimport { NgIf, NgTemplateOutlet, PercentPipe } from '@angular/common';\n\nexport interface GtDelta {\n relative: number | string;\n absolute: number;\n}\n@Component({\n selector: 'gt-delta',\n template: `<span\n *ngIf=\"value as delta\"\n [class]=\"[\n classes.span,\n delta.absolute > 0\n ? classes.positive\n : delta.absolute < 0\n ? classes.negative\n : null\n ]\"\n [class.gt-delta-positive]=\"delta.absolute > 0\"\n [class.gt-delta-negative]=\"delta.absolute < 0\"\n ><ng-container\n *ngTemplateOutlet=\"deltaTemplate || defaultTemplate; context: { delta }\"\n ></ng-container>\n </span>\n <ng-template #defaultTemplate let-delta=\"delta\">\n <span *ngIf=\"delta.relative\">{{\n delta.relative | percent: '1.0-2'\n }}</span>\n </ng-template>`,\n styles: [\n `\n :host {\n display: inline-block;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [PercentPipe, NgIf, NgTemplateOutlet],\n})\nexport class GtDeltaComponent implements OnChanges {\n get value() {\n return this._value;\n }\n\n set value(value) {\n this._value = value;\n }\n get deltaTemplate(): TemplateRef<any> {\n return this._deltaTemplate;\n }\n constructor() {}\n @Input() set deltaTemplate(deltaTemplate: TemplateRef<any>) {\n this._deltaTemplate = deltaTemplate;\n }\n Math = Math;\n Number = Number;\n @Input() data: Array<TableRow> = [];\n @Input() index: number = 0;\n @Input() baseIndex?: number;\n @Input() classes = {\n span: 'gt-delta',\n positive: 'text-success',\n negative: 'text-danger',\n };\n @Input() key: string = 'value';\n @Input() notApplicableValue: string | null = null;\n @Input() initialValue: string | number | null = null;\n private _value?: GtDelta;\n private _deltaTemplate?: any;\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes.data.currentValue) {\n return;\n }\n const data = changes.data?.currentValue;\n const index = changes.index?.currentValue || this.index;\n const baseIndex = changes.baseIndex?.currentValue;\n const key = changes.key?.currentValue || this.key;\n const initialValue =\n changes.initialValue?.currentValue || this.initialValue;\n\n const deltaValue =\n index === 0\n ? initialValue\n : data[index][key] -\n (baseIndex === undefined\n ? data[index - 1][key]\n : data[baseIndex][key]);\n const baseValue =\n index === 0\n ? 1\n : baseIndex === undefined\n ? data[index - 1][key]\n : data[baseIndex][key];\n\n const relative =\n index === 0\n ? initialValue\n : Math.sign(deltaValue) * Math.abs(deltaValue / baseValue);\n\n this.value = {\n relative: Number.isFinite(relative)\n ? relative\n : index === 0\n ? initialValue\n : changes.notApplicableValue?.currentValue || this.notApplicableValue,\n absolute: deltaValue,\n };\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';\nimport { CapitalCasePipe } from './pipes/capital-case.pipe';\nimport { DynamicPipe } from './pipes/dynamic.pipe';\nimport { GtDeltaComponent } from './gt-delta/gt-delta.component';\nimport { RowSelectionPipe } from './pipes/row-selection.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n CoreComponent,\n SortClassPipe,\n DashCasePipe,\n HighlightPipe,\n RowSelectionPipe,\n CapitalCasePipe,\n CapitalCasePipe,\n DynamicPipe,\n GtDeltaComponent,\n ],\n exports: [CoreComponent, GtDeltaComponent],\n declarations: [],\n})\nexport class GenericTableCoreModule {}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { combineLatest, ReplaySubject } from 'rxjs';\nimport { map, pluck, shareReplay, switchMap } from 'rxjs/operators';\nimport { CoreComponent } from '../core.component';\nimport {\n GtPaginationAriaLabels,\n GtPaginationClasses,\n GtPaginationInfo,\n} from '../models/gt-pagination';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'angular-generic-table-pagination',\n templateUrl: './pagination.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule],\n})\nexport class PaginationComponent {\n get pagingInfo(): GtPaginationInfo {\n return (\n this._pagingInfo || {\n pageNext: null,\n pageCurrent: null,\n pagePrevious: null,\n pageSize: null,\n numberOfRecords: null,\n pageTotal: null,\n }\n );\n }\n /** pagingInfo\n * @description when provided, pagination component will use this information to render pagination instead of data from table. Use this option when pagination is handled by backend (server side).\n * @type info - metadata for pagination component\n */\n @Input() set pagingInfo(info: GtPaginationInfo) {\n this._pagingInfo = info;\n }\n get paginationLength(): number {\n return this._paginationLength;\n }\n\n /** paginationLength\n * @description number of buttons to show in pagination\n * @type length - number of buttons to show. Defaults to: `5`\n */\n @Input() set paginationLength(length: number) {\n this._paginationLength = +length;\n }\n get classes(): GtPaginationClasses {\n return this._classes;\n }\n\n /** classes\n * @description classes that should be used within pagination component for different elements\n * @type classes - classes to be used. Defaults to: `{\n * ul: 'pagination',\n * li: 'page-item',\n * button: 'page-link',\n * }`\n */\n @Input() set classes(classes: GtPaginationClasses) {\n this._classes = classes;\n }\n get ariaLabels(): GtPaginationAriaLabels {\n return this._ariaLabels;\n }\n\n /** ariaLabels\n * @description aria labels that describe pagination component\n * @type labels - aria labels for pagination. Defaults to: `{\n * nav: 'Table pagination',\n * button: 'Go to page ',\n * }`\n */\n @Input() set ariaLabels(labels: GtPaginationAriaLabels) {\n this._ariaLabels = labels;\n }\n get table(): CoreComponent {\n return <CoreComponent>this._table;\n }\n\n /** table\n * @description table component to which pagination is attached\n * @type tableRef - table component\n */\n @Input() set table(tableRef: CoreComponent) {\n this._table = tableRef;\n this._table$.next(tableRef);\n }\n\n private _pagingInfo: GtPaginationInfo | undefined;\n private _table$: ReplaySubject<CoreComponent> = new ReplaySubject(1);\n private _table: CoreComponent | undefined;\n private _ariaLabels: GtPaginationAriaLabels = {\n nav: 'Table pagination',\n button: 'Go to page ',\n };\n private _classes: GtPaginationClasses = {\n ul: 'pagination',\n li: 'page-item',\n button: 'page-link',\n };\n private _paginationLength: number = 5;\n\n /** paginationListItems$ - observable for page numbers to show based on number of pages and current position */\n paginationListItems$ = this._table$.pipe(\n switchMap((core) =>\n combineLatest([\n core?.table$.pipe(pluck('info')),\n core?.currentPaginationIndex$,\n ])\n ),\n map(([info, currentPage]) =>\n this._generateList(info.pageTotal, currentPage)\n ),\n shareReplay(1)\n );\n\n /** generate list - generate an array with page numbers to show based on number of pages and current position\n * @param numberOfPages number of pages to show\n * @param currentPosition current position (page index) being shown in table\n * @returns Array<number> array of page numbers to show\n */\n private _generateList(\n numberOfPages: number,\n currentPosition: number\n ): Array<number> {\n const middle = Math.floor(this.paginationLength / 2);\n const length =\n numberOfPages < this.paginationLength\n ? numberOfPages\n : this.paginationLength;\n\n return Array.from({ length }, (_, i) => {\n if (i === 0) {\n return 1;\n } else if (numberOfPages < this.paginationLength) {\n return i + 1;\n } else if (i + 1 === length) {\n return numberOfPages;\n } else if (\n currentPosition > middle &&\n currentPosition < numberOfPages - middle\n ) {\n return i + currentPosition - (middle - 1);\n } else if (\n currentPosition > middle &&\n currentPosition < numberOfPages - (middle - 1)\n ) {\n return i + currentPosition - middle;\n } else if (\n currentPosition > middle &&\n currentPosition === numberOfPages - (middle - 1)\n ) {\n return i + currentPosition - (middle + 1);\n } else if (\n currentPosition > middle &&\n currentPosition === numberOfPages - 1\n ) {\n return i + currentPosition - (middle + 2);\n } else {\n return i + 1;\n }\n });\n }\n\n /** go to page\n * @param index - page index to go to\n */\n goToPage(index: number): void {\n if (this.table) {\n this.table.paginationIndex = index - 1;\n }\n }\n}\n","<ng-container\n *ngIf=\"{\n links: paginationListItems$ | async,\n currentPosition: table?.currentPaginationIndex$ | async\n } as pagination\"\n>\n <nav\n *ngIf=\"pagination.links && pagination.links.length > 1\"\n role=\"navigation\"\n [attr.aria-label]=\"ariaLabels.nav\"\n class=\"gt-pagination\"\n [class]=\"classes.nav\"\n >\n <ul [class]=\"classes.ul\">\n <ng-container\n *ngFor=\"\n let position of pagination!.links;\n let i = index;\n let last = last\n \"\n >\n <li\n [class]=\"classes.li\"\n [class.active]=\"position === (pagination!.currentPosition || 0) + 1\"\n >\n <button\n [class]=\"classes.button\"\n [attr.aria-label]=\"ariaLabels.button + position\"\n (click)=\"goToPage(position)\"\n >\n {{ position }}\n </button>\n </li>\n <li\n [class]=\"classes.li\"\n class=\"gt-ellipsis\"\n *ngIf=\"position + 1 !== pagination!.links![i + 1] && !last\"\n >\n <button [class]=\"classes.button\" disabled tabindex=\"-1\"></button>\n </li>\n </ng-container>\n </ul>\n </nav>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PaginationComponent } from './pagination.component';\n\n@NgModule({\n imports: [CommonModule, PaginationComponent],\n exports: [PaginationComponent],\n})\nexport class GenericTablePaginationModule {}\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/gt-delta/gt-delta.component';\nexport * from './lib/pagination/pagination.component';\nexport * from './lib/pagination/pagination.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';\nexport * from './lib/models/table-meta.interface';\nexport * from './lib/models/table-events.interface';\nexport * from './lib/models/gt-pagination';\nexport * from './lib/utilities/utilities';\nexport * from './lib/pipes/capital-case.pipe';\nexport * from './lib/pipes/dash-case.pipe';\nexport * from './lib/pipes/dynamic.pipe';\nexport * from './lib/pipes/highlight.pipe';\nexport * from './lib/pipes/sort-class.pipe';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
package/lib/core.component.d.ts
CHANGED
|
@@ -1,32 +1,137 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { EventEmitter, OnDestroy, TrackByFunction } from '@angular/core';
|
|
2
|
+
import { Observable, Subject } from 'rxjs';
|
|
3
3
|
import { TableConfig } from './models/table-config.interface';
|
|
4
4
|
import { KeyValue } from '@angular/common';
|
|
5
5
|
import { TableColumn } from './models/table-column.interface';
|
|
6
6
|
import { TableRow } from './models/table-row.interface';
|
|
7
|
+
import { GtSortOrder } from './models/table-sort.interface';
|
|
8
|
+
import { GtPageChangeEvent, GtRowSelectEvent, GtRowClickEvent, GtRowActiveEvent, GtSortEvent } from './models/table-events.interface';
|
|
9
|
+
import { GtPaginationInfo } from './models/gt-pagination';
|
|
7
10
|
import { TableInfo } from './models/table-info.interface';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
export declare class CoreComponent implements OnDestroy {
|
|
13
|
+
unsubscribe$: Subject<unknown>;
|
|
14
|
+
get navigationKeys(): typeof this._navigationKeys;
|
|
15
|
+
/** navigationKeys
|
|
16
|
+
* @description An array of keyboard keys that will trigger navigation and active row, currently only supports arrow keys, home and end (omit key name from array to disable it)
|
|
17
|
+
* @type {string[]}
|
|
18
|
+
* @default ['ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight', 'Home', 'End']
|
|
19
|
+
*/
|
|
20
|
+
set navigationKeys(value: typeof this._navigationKeys);
|
|
21
|
+
private _navigationKeys;
|
|
22
|
+
get selectKeys(): string[];
|
|
23
|
+
/** selectKeys
|
|
24
|
+
* @description An array of keyboard keys that will trigger row selection (omit key name from array to disable it)
|
|
25
|
+
* @type {string[]}
|
|
26
|
+
* @default ['Enter', ' ']
|
|
27
|
+
*/
|
|
28
|
+
set selectKeys(value: string[]);
|
|
29
|
+
private _selectKeys;
|
|
30
|
+
get sortOrder$(): Observable<GtSortOrder>;
|
|
31
|
+
set loading(isLoading: Observable<boolean> | boolean);
|
|
32
|
+
set paginationIndex(pageIndex: number);
|
|
33
|
+
get paginationIndex(): number;
|
|
34
|
+
set pagingInfo(value: GtPaginationInfo | null);
|
|
35
|
+
/** customClasses
|
|
36
|
+
* @description An object that contains custom classes for various elements in the table.
|
|
37
|
+
* @type {object} - { selectedRow: string, activeRow: string } - default classes are 'gt-selected' and 'gt-active'
|
|
38
|
+
*/
|
|
39
|
+
set customClasses(classes: Partial<typeof this._customClasses>);
|
|
40
|
+
get customClasses(): typeof this._customClasses;
|
|
41
|
+
private _customClasses;
|
|
42
|
+
/** isRowSelectedFn
|
|
43
|
+
* @description Function to determine if row is selected or not.
|
|
44
|
+
* @type {fn} A function that receives a row object and optional state for current selection that can be used to determine if row should be marked as selected or not. */
|
|
45
|
+
set isRowSelectedFn(fn: (row: TableRow | any, selection?: any) => boolean);
|
|
46
|
+
get isRowSelectedFn(): any;
|
|
47
|
+
private _isRowSelectedFn;
|
|
48
|
+
/** selection
|
|
49
|
+
* @description An object that contains the currently selected row(s) in the table. It's passed to the selection function to determine which rows should be selected.
|
|
50
|
+
* @type {any}
|
|
51
|
+
*/
|
|
52
|
+
selection: any;
|
|
53
|
+
/** rowIdKey
|
|
54
|
+
* @description row key to use as unique id for table row. If passed, table won't generate unique ids for each row but instead use key to retrieve unique id from row.
|
|
55
|
+
* @type {string}
|
|
56
|
+
*/
|
|
57
|
+
rowIdKey: string | undefined;
|
|
58
|
+
/** generateRowId
|
|
59
|
+
* @description Whether or not to generate a unique id for each row in the table. Defaults to `true`.
|
|
60
|
+
* @type {boolean}
|
|
61
|
+
*/
|
|
62
|
+
generateRowId: boolean;
|
|
63
|
+
/** trackRowByFn
|
|
64
|
+
* @description A function that returns a unique identifier for each row in the table to optimize rendering when data is added or removed.
|
|
65
|
+
* @type fn - TrackByFunction to retrieve unique id based on index and/or row. Defaults to using `row[this.rowIdKey]`.
|
|
66
|
+
*/
|
|
67
|
+
set trackRowByFn(fn: TrackByFunction<TableRow>);
|
|
68
|
+
get trackRowByFn(): TrackByFunction<TableRow>;
|
|
69
|
+
private _trackRowByFn;
|
|
70
|
+
set search(string: Observable<string | null> | string | null);
|
|
71
|
+
set config(config: Observable<TableConfig<any>> | TableConfig<any>);
|
|
72
|
+
private _tableConfig;
|
|
73
|
+
set data(data: Observable<Array<TableRow>> | Array<TableRow> | null);
|
|
74
|
+
set sortOrder(sortConfig: GtSortOrder<TableRow> | any);
|
|
75
|
+
rowClick: EventEmitter<GtRowClickEvent<TableRow>>;
|
|
76
|
+
rowSelect: EventEmitter<GtRowSelectEvent<TableRow>>;
|
|
77
|
+
sortOrderChange: EventEmitter<GtSortOrder<TableRow>>;
|
|
78
|
+
_rowClick(row: TableRow, index: number, event: MouseEvent): void;
|
|
79
|
+
_rowActive(row: TableRow, index: number, event: KeyboardEvent): void;
|
|
80
|
+
private _rowActive$;
|
|
81
|
+
rowActive: EventEmitter<GtRowActiveEvent<TableRow>>;
|
|
82
|
+
columnSort: EventEmitter<GtSortEvent<TableRow>>;
|
|
83
|
+
/** page change event - emitted when current page/index changes for pagination */
|
|
84
|
+
pageChange: EventEmitter<GtPageChangeEvent>;
|
|
85
|
+
rowActive$: Observable<GtRowActiveEvent<TableRow>>;
|
|
86
|
+
activeRowIndex: number | null;
|
|
87
|
+
activateRow(id: string, event?: MouseEvent | KeyboardEvent): void;
|
|
88
|
+
activateRow(index: number, event?: MouseEvent | KeyboardEvent): void;
|
|
89
|
+
activateRow(none: null, event?: MouseEvent | KeyboardEvent): void;
|
|
90
|
+
protected _activateRow(row: TableRow | null, index: number | null, event?: MouseEvent | KeyboardEvent): void;
|
|
91
|
+
get loading$(): Observable<boolean>;
|
|
92
|
+
private _loading$;
|
|
93
|
+
private _sortOrder$;
|
|
16
94
|
private _searchBy$;
|
|
17
|
-
searchBy$: Observable<string>;
|
|
95
|
+
searchBy$: Observable<string | null>;
|
|
96
|
+
private _pagingInfo$;
|
|
18
97
|
private _tableConfig$;
|
|
19
|
-
tableConfig$: Observable<TableConfig
|
|
98
|
+
tableConfig$: Observable<TableConfig<any>>;
|
|
20
99
|
private _data$;
|
|
21
100
|
data$: Observable<Array<TableRow>>;
|
|
101
|
+
calculations$: Observable<{
|
|
102
|
+
calculated: any;
|
|
103
|
+
calculations: string[];
|
|
104
|
+
calculatedColumnsCount: number;
|
|
105
|
+
}>;
|
|
22
106
|
table$: Observable<{
|
|
23
|
-
data:
|
|
24
|
-
config: TableConfig
|
|
107
|
+
data: TableRow[][];
|
|
108
|
+
config: TableConfig<any>;
|
|
25
109
|
info: TableInfo;
|
|
26
110
|
}>;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
111
|
+
/** tableInfo$ - returns observable for table info
|
|
112
|
+
* @return Observable<TableInfo> */
|
|
113
|
+
get tableInfo$(): Observable<TableInfo | undefined>;
|
|
114
|
+
/** tableInfo - returns the current table info
|
|
115
|
+
* @return TableInfo */
|
|
116
|
+
get tableInfo(): TableInfo | undefined;
|
|
117
|
+
private _tableInfo$;
|
|
118
|
+
private _currentPaginationIndex$;
|
|
119
|
+
currentPaginationIndex$: Observable<number>;
|
|
120
|
+
colspan$: Observable<number>;
|
|
121
|
+
footerColspan$: Observable<number>;
|
|
122
|
+
/** sortByKey - Sort by key in table row
|
|
123
|
+
* @param key - key to sort by
|
|
124
|
+
* @param { MouseEvent } [$event] - Mouse event triggering sort, if shift key is pressed sort key will be added to already present sort keys
|
|
125
|
+
*/
|
|
126
|
+
sortByKey(key: keyof TableRow, $event?: MouseEvent): void;
|
|
31
127
|
columnOrder: (a: KeyValue<string, TableColumn>, b: KeyValue<string, TableColumn>) => number;
|
|
128
|
+
nestedValue(object: any, mapTo: string, missingValue?: string | number | null): unknown;
|
|
129
|
+
private _unsubscribeFromKeyboardEvents$;
|
|
130
|
+
private _keyboardArrowEvent$;
|
|
131
|
+
protected listenToKeyboardEvents(): void;
|
|
132
|
+
unsubscribeFromKeyboardEvents(tableRef: HTMLTableElement): void;
|
|
133
|
+
private _handleNavigationEvent;
|
|
134
|
+
ngOnDestroy(): void;
|
|
135
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CoreComponent, never>;
|
|
136
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CoreComponent, "angular-generic-table", never, { "navigationKeys": "navigationKeys"; "selectKeys": "selectKeys"; "loading": "loading"; "paginationIndex": "paginationIndex"; "pagingInfo": "pagingInfo"; "customClasses": "customClasses"; "isRowSelectedFn": "isRowSelectedFn"; "selection": "selection"; "rowIdKey": "rowIdKey"; "generateRowId": "generateRowId"; "trackRowByFn": "trackRowByFn"; "search": "search"; "config": "config"; "data": "data"; "sortOrder": "sortOrder"; }, { "rowClick": "rowClick"; "rowSelect": "rowSelect"; "sortOrderChange": "sortOrderChange"; "rowActive": "rowActive"; "columnSort": "columnSort"; "pageChange": "pageChange"; }, never, [".table-loading", ".table-no-data"], true, never>;
|
|
32
137
|
}
|
package/lib/core.module.d.ts
CHANGED
|
@@ -1,2 +1,15 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "@angular/common";
|
|
3
|
+
import * as i2 from "./core.component";
|
|
4
|
+
import * as i3 from "./pipes/sort-class.pipe";
|
|
5
|
+
import * as i4 from "./pipes/dash-case.pipe";
|
|
6
|
+
import * as i5 from "./pipes/highlight.pipe";
|
|
7
|
+
import * as i6 from "./pipes/row-selection.pipe";
|
|
8
|
+
import * as i7 from "./pipes/capital-case.pipe";
|
|
9
|
+
import * as i8 from "./pipes/dynamic.pipe";
|
|
10
|
+
import * as i9 from "./gt-delta/gt-delta.component";
|
|
1
11
|
export declare class GenericTableCoreModule {
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GenericTableCoreModule, never>;
|
|
13
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<GenericTableCoreModule, never, [typeof i1.CommonModule, typeof i2.CoreComponent, typeof i3.SortClassPipe, typeof i4.DashCasePipe, typeof i5.HighlightPipe, typeof i6.RowSelectionPipe, typeof i7.CapitalCasePipe, typeof i7.CapitalCasePipe, typeof i8.DynamicPipe, typeof i9.GtDeltaComponent], [typeof i2.CoreComponent, typeof i9.GtDeltaComponent]>;
|
|
14
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<GenericTableCoreModule>;
|
|
2
15
|
}
|
package/lib/core.service.d.ts
CHANGED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { OnChanges, SimpleChanges, TemplateRef } from '@angular/core';
|
|
2
|
+
import { TableRow } from '../models/table-row.interface';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export interface GtDelta {
|
|
5
|
+
relative: number | string;
|
|
6
|
+
absolute: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class GtDeltaComponent implements OnChanges {
|
|
9
|
+
get value(): GtDelta | undefined;
|
|
10
|
+
set value(value: GtDelta | undefined);
|
|
11
|
+
get deltaTemplate(): TemplateRef<any>;
|
|
12
|
+
constructor();
|
|
13
|
+
set deltaTemplate(deltaTemplate: TemplateRef<any>);
|
|
14
|
+
Math: Math;
|
|
15
|
+
Number: NumberConstructor;
|
|
16
|
+
data: Array<TableRow>;
|
|
17
|
+
index: number;
|
|
18
|
+
baseIndex?: number;
|
|
19
|
+
classes: {
|
|
20
|
+
span: string;
|
|
21
|
+
positive: string;
|
|
22
|
+
negative: string;
|
|
23
|
+
};
|
|
24
|
+
key: string;
|
|
25
|
+
notApplicableValue: string | null;
|
|
26
|
+
initialValue: string | number | null;
|
|
27
|
+
private _value?;
|
|
28
|
+
private _deltaTemplate?;
|
|
29
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
30
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GtDeltaComponent, never>;
|
|
31
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GtDeltaComponent, "gt-delta", never, { "deltaTemplate": "deltaTemplate"; "data": "data"; "index": "index"; "baseIndex": "baseIndex"; "classes": "classes"; "key": "key"; "notApplicableValue": "notApplicableValue"; "initialValue": "initialValue"; }, {}, never, never, true, never>;
|
|
32
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface GtPaginationClasses {
|
|
2
|
+
nav?: string;
|
|
3
|
+
ul?: string;
|
|
4
|
+
li?: string;
|
|
5
|
+
button?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface GtPaginationAriaLabels {
|
|
8
|
+
nav: string;
|
|
9
|
+
button: string;
|
|
10
|
+
}
|
|
11
|
+
export interface GtPaginationInfo {
|
|
12
|
+
pageNext: number | null;
|
|
13
|
+
pageCurrent: number | null;
|
|
14
|
+
pagePrevious: number | null;
|
|
15
|
+
pageSize: number | null;
|
|
16
|
+
numberOfRecords: number | null;
|
|
17
|
+
pageTotal?: number | null;
|
|
18
|
+
}
|
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
import { TemplateRef } from '@angular/core';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { TableRow } from './table-row.interface';
|
|
3
|
+
export interface TableColumn<R = TableRow> {
|
|
4
|
+
header?: string | false;
|
|
5
|
+
mobileHeader?: string | boolean;
|
|
4
6
|
hidden?: boolean;
|
|
5
7
|
sortable?: boolean;
|
|
6
8
|
order?: number;
|
|
7
|
-
search?: boolean
|
|
9
|
+
search?: boolean | SearchFunction<R>;
|
|
8
10
|
templateRef?: TemplateRef<any>;
|
|
11
|
+
transform?: {
|
|
12
|
+
pipe: any;
|
|
13
|
+
args?: Array<any>;
|
|
14
|
+
};
|
|
15
|
+
class?: string;
|
|
16
|
+
mapTo?: {
|
|
17
|
+
path: string;
|
|
18
|
+
missingValue?: string | number;
|
|
19
|
+
};
|
|
9
20
|
}
|
|
21
|
+
export type SearchFunction<R = TableRow> = (row: R, column: keyof R, value: typeof row[keyof R]) => string;
|
|
@@ -1,10 +1,48 @@
|
|
|
1
1
|
import { TableColumn } from './table-column.interface';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { TableRow } from './table-row.interface';
|
|
3
|
+
export interface TableConfig<R = TableRow> {
|
|
4
|
+
/** Disable sorting of table data, useful when sorting is handled externally e.g. server-side pagination. Table will still use sortOrder to visually show how the data is sorted. <p>**Default:** `false`</p> */
|
|
5
|
+
disableTableSort?: boolean;
|
|
6
|
+
/** Allows for a more mobile friendly layout by displaying columns as rows instead. This is accomplished with css by adding `table-mobile` class to table element and adding column headers as data labels to each row. <p>**Default:** `false`</p>*/
|
|
7
|
+
mobileLayout?: boolean;
|
|
8
|
+
/** Make row and/or column headers sticky by adding `gt-sticky-row-header` and `gt-sticky-column-header` to table to alter table behaviour using css. Please note that in order for headers to be sticky, table can't be placed inside element with overflow set to auto. <p>**Default:** `{row:false, column:false}`</p>*/
|
|
9
|
+
stickyHeaders?: {
|
|
10
|
+
row?: boolean;
|
|
11
|
+
column?: boolean;
|
|
6
12
|
};
|
|
7
|
-
|
|
8
|
-
|
|
13
|
+
/** Add one or more CSS classes to the table element e.g. `table table-striped table-bordered`. <p>**Default:** `table`</p>*/
|
|
14
|
+
class?: string;
|
|
15
|
+
rows?: {
|
|
16
|
+
[Property in keyof R]: TableColumn<R>;
|
|
9
17
|
};
|
|
18
|
+
columns?: {
|
|
19
|
+
[Property in keyof R]: TableColumn<R>;
|
|
20
|
+
};
|
|
21
|
+
pagination?: {
|
|
22
|
+
length?: number;
|
|
23
|
+
};
|
|
24
|
+
rowClick?: boolean;
|
|
25
|
+
/** Toggle row active state on mouse enter/leave (hover) <p>**Default:** `false`</p>*/
|
|
26
|
+
activateRowOnHover?: boolean;
|
|
27
|
+
/** Toggle row active state on keyboard navigation <p>**Default:** `false`</p>*/
|
|
28
|
+
activateRowOnKeyboardNavigation?: boolean;
|
|
29
|
+
deactivateRowOnLostFocus?: boolean;
|
|
30
|
+
footer?: {
|
|
31
|
+
headers?: {
|
|
32
|
+
[key: FooterCalculation | string]: string | boolean;
|
|
33
|
+
};
|
|
34
|
+
columns?: {
|
|
35
|
+
[Property in keyof R]: Partial<TableFooterColumn<R>>;
|
|
36
|
+
};
|
|
37
|
+
rowOrder?: Array<keyof R | FooterCalculation>;
|
|
38
|
+
emptyContent?: string;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
interface TableFooterColumn<R> {
|
|
42
|
+
[key: FooterCalculation | string]: boolean | number | string | CalcFunc<R>;
|
|
43
|
+
}
|
|
44
|
+
interface CalcFunc<R> {
|
|
45
|
+
(data: Array<R>, key: keyof R): number | string;
|
|
10
46
|
}
|
|
47
|
+
type FooterCalculation = 'sum' | 'avg' | 'count' | 'max' | 'min';
|
|
48
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { TableRow } from './table-row.interface';
|
|
2
|
+
import { GtOrder, GtSortOrder } from './table-sort.interface';
|
|
3
|
+
export interface GtRowClickEvent<R = TableRow> {
|
|
4
|
+
row: R;
|
|
5
|
+
index: number;
|
|
6
|
+
event: MouseEvent;
|
|
7
|
+
}
|
|
8
|
+
export interface GtRowActiveEvent<R = TableRow> {
|
|
9
|
+
row: R | null;
|
|
10
|
+
index: number | null;
|
|
11
|
+
event?: MouseEvent | KeyboardEvent;
|
|
12
|
+
}
|
|
13
|
+
export interface GtRowSelectEvent<R = TableRow> {
|
|
14
|
+
row: R | null;
|
|
15
|
+
index: number | null;
|
|
16
|
+
event?: KeyboardEvent;
|
|
17
|
+
}
|
|
18
|
+
export interface GtSortEvent<R = TableRow> {
|
|
19
|
+
key: keyof R;
|
|
20
|
+
order: GtOrder;
|
|
21
|
+
currentSortOrder: GtSortOrder<R>;
|
|
22
|
+
event?: MouseEvent;
|
|
23
|
+
addSortKey: boolean /** Add additional key to sort on multiple properties? True if the user is holding shift while sorting */;
|
|
24
|
+
}
|
|
25
|
+
export interface GtPageChangeEvent {
|
|
26
|
+
index: number;
|
|
27
|
+
}
|