angular-datatables
Version:
Angular directive for DataTables
1 lines • 12.4 kB
Source Map (JSON)
{"version":3,"file":"angular-datatables.mjs","sources":["../../../lib/src/angular-datatables.directive.ts","../../../lib/src/angular-datatables.module.ts","../../../lib/public_api.ts","../../../lib/index.ts","../../../lib/angular-datatables.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE\n */\n\nimport { Directive, ElementRef, Input, OnDestroy, OnInit, Renderer2, ViewContainerRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ADTSettings, ADTColumns } from './models/settings';\nimport { Api } from 'datatables.net';\n\n@Directive({\n selector: '[datatable]',\n standalone: false\n})\nexport class DataTableDirective implements OnDestroy, OnInit {\n /**\n * The DataTable option you pass to configure your table.\n */\n @Input()\n dtOptions: ADTSettings = {};\n\n /**\n * This trigger is used if one wants to trigger manually the DT rendering\n * Useful when rendering angular rendered DOM\n */\n @Input()\n dtTrigger!: Subject<ADTSettings>;\n\n /**\n * The DataTable instance built by the jQuery library [DataTables](datatables.net).\n *\n * It's possible to execute the [DataTables APIs](https://datatables.net/reference/api/) with\n * this variable.\n */\n dtInstance!: Promise<Api>;\n\n // Only used for destroying the table when destroying this directive\n private dt!: Api;\n\n constructor(\n private el: ElementRef,\n private vcr: ViewContainerRef,\n private renderer: Renderer2\n ) { }\n\n ngOnInit(): void {\n if (this.dtTrigger) {\n this.dtTrigger.subscribe((options) => {\n this.displayTable(options);\n });\n } else {\n this.displayTable(null);\n }\n }\n\n ngOnDestroy(): void {\n if (this.dtTrigger) {\n this.dtTrigger.unsubscribe();\n }\n if (this.dt) {\n this.dt.destroy(true);\n }\n }\n\n private displayTable(dtOptions: ADTSettings | null): void {\n // assign new options if provided\n if (dtOptions) {\n this.dtOptions = dtOptions;\n }\n this.dtInstance = new Promise((resolve, reject) => {\n Promise.resolve(this.dtOptions).then(resolvedDTOptions => {\n // validate object\n const isTableEmpty = Object.keys(resolvedDTOptions).length === 0 && $('tbody tr', this.el.nativeElement).length === 0;\n if (isTableEmpty) {\n reject('Both the table and dtOptions cannot be empty');\n return;\n }\n\n // Set a column unique\n if (resolvedDTOptions.columns) {\n resolvedDTOptions.columns.forEach(col => {\n if ((col.id ?? '').trim() === '') {\n col.id = this.getColumnUniqueId();\n }\n });\n }\n\n // Using setTimeout as a \"hack\" to be \"part\" of NgZone\n setTimeout(() => {\n // Assign DT properties here\n let options: ADTSettings = {\n rowCallback: (row, data, index) => {\n if (resolvedDTOptions.columns) {\n const columns = resolvedDTOptions.columns;\n this.applyNgPipeTransform(row, columns);\n this.applyNgRefTemplate(row, columns, data);\n }\n\n // run user specified row callback if provided.\n if (resolvedDTOptions.rowCallback) {\n resolvedDTOptions.rowCallback(row, data, index);\n }\n }\n };\n // merge user's config with ours\n options = Object.assign({}, resolvedDTOptions, options);\n this.dt = $(this.el.nativeElement).DataTable(options);\n resolve(this.dt);\n });\n });\n });\n }\n\n private applyNgPipeTransform(row: Node, columns: ADTColumns[]): void {\n // Filter columns with pipe declared\n const colsWithPipe = columns.filter(x => x.ngPipeInstance && !x.ngTemplateRef);\n colsWithPipe.forEach(el => {\n const pipe = el.ngPipeInstance!;\n const pipeArgs = el.ngPipeArgs || [];\n // find index of column using `data` attr\n const i = columns.filter(c => c.visible !== false).findIndex(e => e.id === el.id);\n // get <td> element which holds data using index\n const rowFromCol = row.childNodes.item(i);\n // Transform data with Pipe and PipeArgs\n const rowVal = $(rowFromCol).text();\n const rowValAfter = pipe.transform(rowVal, ...pipeArgs);\n // Apply transformed string to <td>\n $(rowFromCol).text(rowValAfter);\n });\n }\n\n private applyNgRefTemplate(row: Node, columns: ADTColumns[], data: Object): void {\n // Filter columns using `ngTemplateRef`\n const colsWithTemplate = columns.filter(x => x.ngTemplateRef && !x.ngPipeInstance);\n colsWithTemplate.forEach(el => {\n const { ref, context } = el.ngTemplateRef!;\n // get <td> element which holds data using index\n const i = columns.filter(c => c.visible !== false).findIndex(e => e.id === el.id);\n const cellFromIndex = row.childNodes.item(i);\n // reset cell before applying transform\n $(cellFromIndex).html('');\n // render onto DOM\n // finalize context to be sent to user\n const _context = Object.assign({}, context, context?.userData, {\n adtData: data\n });\n const instance = this.vcr.createEmbeddedView(ref, _context);\n this.renderer.appendChild(cellFromIndex, instance.rootNodes[0]);\n });\n }\n\n private getColumnUniqueId(): string {\n let result = '';\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n for (let i = 0; i < 6; i++) {\n const randomIndex = Math.floor(Math.random() * characters.length);\n result += characters.charAt(randomIndex);\n }\n\n return result.trim();\n }\n\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DataTableDirective } from './angular-datatables.directive';\n\n@NgModule({\n imports: [ CommonModule ],\n declarations: [ DataTableDirective ],\n exports: [ DataTableDirective ]\n})\nexport class DataTablesModule {}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE\n */\n\n/**\n * @module\n * @description\n * Entry point from which you should import all public library APIs.\n */\nexport { DataTableDirective } from './src/angular-datatables.directive';\nexport { DataTablesModule } from './src/angular-datatables.module';\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE\n */\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}