devlab-one-dynamic-table 1.0.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devlab-one-dynamic-table.mjs","sources":["../../../projects/dynamic-table/src/lib/model/table.model.ts","../../../projects/dynamic-table/src/lib/constant/consts.ts","../../../projects/dynamic-table/src/lib/interfaces/Iexport.ts","../../../projects/dynamic-table/src/lib/services/export.service.ts","../../../projects/dynamic-table/src/lib/table.component.ts","../../../projects/dynamic-table/src/lib/table.component.html","../../../projects/dynamic-table/src/public-api.ts","../../../projects/dynamic-table/src/devlab-one-dynamic-table.ts"],"sourcesContent":["\nimport { IConfig } from '../interfaces/iconfig';\nimport { Form } from './dynamic-form.model';\n\n\nexport interface TableButtonAction {\n name: string;\n value?: any;\n}\n\n\nexport interface TableColumn extends BasicColumn {\n isComplex: boolean;\n sortRequired: boolean;\n innerColumns: Array<BasicColumn> | null;\n}\n\n\nexport enum SearchOn {\n AllColumns = 1,\n MatchingColumns = 2,\n}\n\n\nexport enum SearchAt {\n ClientSide = 1,\n ServerSide = 2,\n}\n\n\nexport interface SearchModel {\n searchOn: SearchOn;\n formElements: Form;\n value: IConfig | null;\n searchAt: SearchAt;\n}\n\n\nexport interface BasicColumn {\n columnDef: string;\n header: string;\n cell?: (value: any) => any;\n}\n\n\nexport interface TableDetails {\n selectRequired: boolean;\n columns: Array<TableColumn>;\n tableButtons: TableButtons;\n paging: Paging;\n}\n\n\nexport interface DataSet {\n data: any[];\n totalRecords: number;\n}\n\n\nexport interface Paging {\n enabled: boolean;\n pageSizeOptions: Array<number>;\n pageNumber: number;\n pageSize: number;\n}\n\n\nexport interface TableButtons {\n add: boolean;\n edit: boolean;\n delete: boolean;\n view: boolean;\n export: boolean;\n}\n\n\nexport interface FullTableInfo {\n pagination?: SearchRequest;\n search?: SearchModel;\n tableDetails?: TableDetails;\n}\n\n\nexport interface PagechangeEvent {\n length: number;\n pageIndex: number;\n pageSize: number;\n previousPageIndex: number;\n}\n\nexport interface PageCount {\n total: number;\n limit: number;\n exceed: boolean;\n}\n\nexport interface SearchRequest {\n offset: number;\n limit: number;\n order?: string;\n sort?: OrderBy;\n searchQuery?: any;\n}\n\n\nexport enum OrderBy {\n asc = 'asc',\n desc = 'desc',\n}\n\nexport const defaultPageSize = 5;","export const AppLiteralConsts = {\n actionButton: {\n create: 'create',\n add: 'add',\n edit: 'edit',\n delete: 'delete',\n view: 'view',\n sortChange: 'sortChange',\n pageChange: 'pageChange',\n search: 'search',\n sortBy: '__utcLastUpdatedOn',\n export: 'export',\n },\n dataTypes: {\n type: 'type',\n string: 'string',\n object: 'object',\n array: 'array',\n datetimeLocal: 'datetime-local',\n date: 'date',\n group: 'group',\n boolean: 'boolean',\n },\n sheet: {\n excel: 'xlsx',\n csv: 'csv',\n },\n dateFormat: {\n yearMonthDay: 'yyyy-MM-dd HH:mm',\n },\n imgIconPath: {\n swipeCard: '../../../../assets/images/icons/swipe-card-white.svg',\n merchant: '../../../../assets/images/icons/merchant-white.svg',\n bank: '../../../../assets/images/icons/bank-account-white.svg',\n gateway: '../../../../assets/images/icons/gateway-white.svg',\n card: '../../../../assets/images/icons/cards-white.svg',\n region: '../../../../assets/images/icons/region-white.svg',\n settings: '../../../../assets/images/icons/settings-white.svg',\n }\n};\n","export enum ExportType {\n excel = 'xlsx',\n csv = 'csv',\n pdf = 'pdf'\n }","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Injectable } from '@angular/core';\nimport * as XLSX from 'xlsx';\nimport { AppLiteralConsts } from '../constant/consts';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ExportService {\n /**\n * Desc : Export data in excel/csv format\n * @param exportType : type of file which we are going to export\n * @param sourceData : target data to export\n * @param fileName : indicates the file name to be exported\n */\n public exportData(exportType: string, sourceData: any, fileName: string): void {\n const dataSheets: any = this.prepareDataForExport(sourceData, fileName);\n const workBook: XLSX.WorkBook = XLSX.utils.book_new();\n let worSheet: XLSX.WorkSheet;\n for (const key in dataSheets) {\n worSheet = XLSX.utils.json_to_sheet(dataSheets[key]);\n XLSX.utils.book_append_sheet(workBook, worSheet, key);\n }\n XLSX.writeFile(workBook, `${fileName}.${exportType}`);\n }\n /**\n * Desc : prepare data for exports\n * @param sourceData : target data to export\n * @param fileName : indicates the file name to be exported\n */\n public prepareDataForExport(sourceData: any, fileName: string): any {\n // eslint-disable-next-line prefer-const\n let numberOfSheets: any = {};\n for (const source of sourceData) {\n for (const [key, value] of Object.entries(source)) {\n if (typeof value == AppLiteralConsts.dataTypes.object && value != null) {\n if (Array.isArray(value)) {\n source[key] = JSON.stringify(value);\n } else {\n for (const [secondaryKey, secondaryValue] of Object.entries(value)) {\n source[secondaryKey] = secondaryValue;\n }\n }\n }\n }\n numberOfSheets[fileName] = sourceData;\n }\n return numberOfSheets;\n }\n /**\n * dec : export in pdf format\n */\n public exportPdf(values:any){\n console.log(values);\n }\n}\n","import { Component, OnInit, OnDestroy, ViewChild, Input, OnChanges, Output, EventEmitter, AfterViewInit,Renderer2, ElementRef, SimpleChange, SimpleChanges } from '@angular/core';\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSort, MatSortModule } from '@angular/material/sort';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n DataSet,\n TableDetails,\n SearchModel,\n TableColumn,\n TableButtonAction,\n BasicColumn,\n SearchOn,\n SearchAt,\n} from './model/table.model';\nimport { AppLiteralConsts } from './constant/consts';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { FormGroup } from '@angular/forms';\nimport { ExportType } from './interfaces/Iexport';\nimport { ExportService } from './services/export.service';\nimport { CommonModule } from '@angular/common';\nimport { MatMenu, MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DynamicForm, DynamicFormDetails } from 'dynamic-form';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { OrderBy, SearchRequest } from './model/table.model';\n\n/********************************************************************** \n Page : Table component\n Desc : Displaying the table data dynamically\n**********************************************************************/\n\n\n@Component({\n selector: 'lib-dynamic-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n DynamicForm,\n MatTableModule,\n MatPaginatorModule,\n MatSortModule,\n MatMenuModule,\n MatIconModule,\n MatCheckboxModule,\n MatButtonModule,\n MatProgressSpinnerModule\n ],\n animations: [\n trigger('detailExpand', [\n state('collapsed', style({ height: '0px', minHeight: '0' })),\n state('expanded', style({ height: '*' })),\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\n ]),\n ],\n})\nexport class DynamicTable implements OnChanges, OnInit, OnDestroy, AfterViewInit {\n public data: DataSet = {\n data: [],\n totalRecords: 0\n }\n /**\n * Desc : declaring search variable for customizing the table data search\n */\n @Input() public pagination: SearchRequest = {\n offset: 1,\n limit: 5,\n searchQuery: {},\n order: AppLiteralConsts.actionButton.sortBy,\n sort: OrderBy.asc,\n };\n /**\n * Desc : declaring tableDetails variable for customzing the table appearance\n */\n @Input() public tableDetails: TableDetails = {\n selectRequired: false,\n columns: [],\n tableButtons: {\n add: false,\n edit: false,\n delete: false,\n view: false,\n export: false,\n },\n paging: {\n enabled: false,\n pageSizeOptions: [],\n pageNumber: 0,\n pageSize: 0\n },\n };\n /**\n * Desc : filter visibility\n */\n public filterVisibility: boolean = true;\n /**\n * Desc : declaring formgroup variable for filter\n */\n public filter: FormGroup = new FormGroup({});\n /**\n * Desc : declaring variable for column names\n */\n public displayedColumns: string[] = [];\n /**\n * Desc : declaring variable for master column names\n */\n public masterDisplayedColumns: string[] = [];\n /**\n * Desc : declaring variable for table data\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public dataSource: MatTableDataSource<any> = new MatTableDataSource<any>([]);\n /**\n * Desc : declaring variable for selecting the row data\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public selection = new SelectionModel<any>(true, []);\n /**\n * Desc : consuming view child feature for export option menu\n */\n @ViewChild('exportOptionMenu', { static: false }) exportOptionMenu!: MatMenu;\n /**\n * Desc : consuming view child feature for paginator\n */\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n /**\n * Desc : consuming view child feature for table data sorting\n */\n @ViewChild(MatSort) sort!: MatSort;\n /**\n * Desc : receiving the dataset input from parent component\n */\n @Input() dataset: DataSet = {\n data: [],\n totalRecords : 0\n };\n /**\n * Desc : receiving the search input from parent component\n */\n @Input() search: SearchModel = {\n searchOn: SearchOn.AllColumns,\n formElements: {\n controls: [],\n outline: false\n },\n value: {},\n searchAt: SearchAt.ClientSide\n };\n /**\n * Desc : send search element to form component\n */\n public dynamicFormDetails: DynamicFormDetails = {\n formComponent: this.search.formElements\n } \n /**\n * Desc : emitting the action output to parent component\n */\n @Output() action: EventEmitter<TableButtonAction> = new EventEmitter<TableButtonAction>();\n /**\n * Desc : declaring variable for expand column info\n */\n public expandColumnDefination: Array<TableColumn> = [];\n /**\n * Desc : declaring variable for expanded column info\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public expandedElement: any | null;\n /**\n * Desc : declaring variable for expanded column prefix info\n */\n public expandedPrefix = 'expanded_';\n /**\n * Desc : declaring the variable for storing table row counts\n */\n public tableRowCount: number | undefined = 0;\n /**\n * Desc : expand group\n */\n public isExpandedGroupRow: number | undefined = undefined;\n /**\n * Desc : constructor initialization\n */\n constructor(private exportService: ExportService,private renderer: Renderer2,private el: ElementRef) {}\n /**\n * Desc : execute when component is initalized\n */\n public ngOnInit(): void {\n this.selection.changed.subscribe((change) => {\n this.addActionForSelectedRows();\n });\n }\n /**\n * Desc : execute when component has any changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n if(changes['dataset'] || changes['search'] || changes['tableDetails']){\n this.displayedColumns = [];\n }\n this.dataSource = new MatTableDataSource(this.dataset.data);\n this.renderTableDetails();\n this.initializeSearchPredicate();\n this.initializeGridColumns();\n if (this.search) {\n this.initializeSearchFields();\n }\n }\n /**\n * desc : after view is rendered\n */\n public ngAfterViewInit(){\n this.renderTableDetails();\n }\n /**\n * config paginator and sorting options\n */\n public renderTableDetails(){\n switch(this.search.searchAt){\n case SearchAt.ClientSide:\n if(this.paginator){\n this.paginator.pageSize = this.tableDetails.paging.pageSize;\n this.paginator.pageSizeOptions = this.tableDetails.paging.pageSizeOptions;\n this.paginator.pageIndex = this.tableDetails.paging.pageNumber - 1;\n this.dataSource.paginator = this.paginator;\n }\n if(this.sort && this.paginator){\n this.dataSource.sort = this.sort;\n }\n break;\n case SearchAt.ServerSide:\n if(this.paginator){\n this.paginator.pageSize = this.tableDetails.paging.pageSize;\n this.paginator.pageSizeOptions = this.tableDetails.paging.pageSizeOptions;\n this.paginator.pageIndex = this.tableDetails.paging.pageNumber - 1;\n this.paginator.length = this.dataset.totalRecords;\n }\n break;\n default:\n break;\n }\n }\n /**\n * Desc : execute when moved to another component\n */\n public ngOnDestroy(): void {\n this.action.unsubscribe();\n }\n /**\n * Desc : organizing the search filter fields\n */\n public initializeSearchPredicate(): void {\n if (this.search?.searchOn == SearchOn.MatchingColumns) {\n this.dataSource.filterPredicate = (data, filter) => {\n const searchFilterValues = this.isJSON(filter) ? JSON.parse(filter) : this.filter.value;\n const allemptyFilters = Object.keys(searchFilterValues).every(\n (filterData) => searchFilterValues[filterData] == '' || searchFilterValues[filterData] == null,\n );\n if (allemptyFilters) {\n return true;\n }\n let found = false;\n for (let index = 0; index < this.search.formElements.controls.length; index++) {\n const field: any = this.search.formElements.controls.at(index) ?? '';\n if (data[field] && searchFilterValues[field]) {\n found = data[field].toLowerCase().indexOf(searchFilterValues[field].toLowerCase()) != -1;\n if (found) {\n return true;\n }\n }\n }\n return found;\n };\n }\n }\n /**\n * Desc : Filter the table data\n */\n public filterGrid(filterValue: any, field?: string) {\n if (this.search?.searchAt == SearchAt.ClientSide) {\n if (this.search?.searchOn == SearchOn.AllColumns) {\n this.dataSource.filter = (filterValue[Object.keys(filterValue).at(0) ?? ''] ?? '').trim().toLowerCase();\n } else {\n this.applyDefaultFilter(filterValue[field!], field);\n }\n }\n this.action.emit({ name: AppLiteralConsts.actionButton.search, value: filterValue });\n this.addActionForSelectedRows();\n }\n /**\n * Desc : execute default search method\n */\n public applyDefaultFilter(value: any, column: any) {\n this.dataSource.filterPredicate = (data: any, filter: string) => {\n let matchFound = false;\n if (column in data) {\n if (data[column]) {\n matchFound =\n matchFound || data[column].toString().trim().toLowerCase().indexOf(filter.trim().toLowerCase()) !== -1;\n }\n }\n return matchFound;\n };\n this.dataSource.filter = value ? value.trim().toLowerCase() : '';\n if (this.dataSource.paginator) {\n this.dataSource.paginator?.firstPage();\n }\n }\n /**\n * Desc : validating if all the checkbox are checked or not\n */\n public isAllSelected() {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\n }\n /**\n * Desc : Enable select and deselect all rows\n */\n public toggleAllRows() {\n if (this.isAllSelected()) {\n this.selection.clear();\n return;\n }\n\n\n this.selection.select(...this.dataSource.data);\n }\n /**\n * Desc : Column visibility\n */\n public setColumn(event: boolean, column: string) {\n if (!event) {\n this.displayedColumns.filter((col, index) => {\n if (col == column) {\n this.displayedColumns.splice(index, 1);\n }\n });\n } else {\n this.displayedColumns.push(column);\n }\n }\n /**\n * Desc : Initalize columns and expanded columns\n */\n public initializeGridColumns() {\n if (this.tableDetails?.selectRequired) {\n this.displayedColumns.push('select');\n }\n this.tableDetails?.columns?.forEach((cols: TableColumn) => {\n this.displayedColumns.push(cols.columnDef);\n this.masterDisplayedColumns.push(cols.columnDef);\n if (cols.isComplex) {\n this.expandColumnDefination.push(cols);\n }\n });\n if (this.actionRequired()) {\n this.displayedColumns.push('action');\n }\n }\n /**\n * Desc : Initialize search fields\n */\n public initializeSearchFields(): void {\n this.search?.formElements?.controls?.map((control:any) => {\n control.OnChange = this.filterFieldChanges.bind(this);\n });\n this.dynamicFormDetails = {\n ...this.dynamicFormDetails,\n formComponent: this.search.formElements\n };\n }\n /**\n * Desc : detect changes in filter field on keyup\n */\n public filterFieldChanges(event: any, field: string): void {\n if (this.search?.value) {\n this.search.value[field] = event;\n }\n const formControlIndex = this.search?.formElements?.controls?.findIndex((element:any) => element.name == field);\n if (this.search?.formElements && formControlIndex != undefined) {\n this.search.formElements.controls[formControlIndex].value = event;\n }\n this.filterGrid(this.search?.value, field);\n }\n /**\n * Desc : validating input features in table\n */\n public actionRequired(buttonType?: string) {\n if (buttonType == AppLiteralConsts.actionButton.add) {\n return this.tableDetails.tableButtons.add;\n } else if (buttonType == AppLiteralConsts.actionButton.export) {\n return this.tableDetails.tableButtons.export;\n } else {\n return (\n this.tableDetails.tableButtons.delete ||\n this.tableDetails.tableButtons.edit ||\n this.tableDetails.tableButtons.view\n );\n }\n }\n /**\n * Desc : Export table data\n */\n public exportData(exportType: string): void {\n if (this.search?.searchAt == SearchAt.ServerSide) {\n this.onTableAction(AppLiteralConsts.actionButton.export, exportType);\n } else {\n if(exportType == 'pdf'){\n if(this.selection.isEmpty()){\n this.exportService.exportPdf(this.dataSource.data);\n }else{\n this.exportService.exportPdf(this.selection.selected);\n }\n }else{\n this.exportService.exportData(\n exportType == AppLiteralConsts.sheet.excel ? ExportType.excel : ExportType.csv,\n this.dataset?.data,\n exportType,\n );\n }\n }\n }\n /**\n * Desc : emitting the data to parent component\n */\n public onTableAction(type: string, value?: any): void {\n const dataValue = {\n name: type,\n value: value,\n };\n this.action.emit(dataValue);\n }\n /**\n * Desc : return expanded column data\n */\n public getExpandedColumnHeaderDef(ele: Array<TableColumn> | null | undefined) {\n return ele?.map((x) => `${this.expandedPrefix}${x.columnDef}`) ?? [];\n }\n /**\n * Desc : return inner column data\n */\n public getInnerColumnDef(ele: Array<BasicColumn> | null | undefined) {\n return ele?.map((x) => x.columnDef) ?? [];\n }\n /**\n * Desc : validate json\n */\n public isJSON(str: string) {\n try {\n return JSON.parse(str) && !!str;\n } catch (e) {\n return false;\n }\n }\n /**\n * Desc : event triggers while chaning the page\n */\n public pageChanged(event: any): void {\n event.pageIndex = event.pageIndex + 1;\n this.action.emit({ name: AppLiteralConsts.actionButton.pageChange, value: event });\n this.addActionForSelectedRows();\n }\n /**\n * Desc: Event triggers while sorting the column\n */\n public onSortChanges(event: any): void {\n if (this.search?.searchAt == SearchAt.ServerSide && this.paginator != undefined) {\n this.paginator.pageIndex = 0;\n }\n this.action.emit({ name: AppLiteralConsts.actionButton.sortChange, value: event });\n this.addActionForSelectedRows();\n }\n /**\n * Desc : array exist\n */\n public isArray(inputValue: any): boolean {\n return Array.isArray(inputValue);\n }\n /**\n * Desc : expanding the array data list\n * @param index : row index\n */\n public expandList(index: number) {\n if (this.isExpandedGroupRow == index) {\n this.isExpandedGroupRow = undefined;\n } else {\n this.isExpandedGroupRow = index;\n }\n }\n /** \n * desc: label for the checkbox on the passed row \n */\n checkboxLabel(row?: any): string {\n if (!row) {\n return `${this.isAllSelected() ? 'deselect' : 'select'} all`;\n }\n return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${row.position + 1}`;\n }\n /**\n * Desc : toggle filter \n */\n public toggleFilter():void{\n this.filterVisibility = !this.filterVisibility;\n }\n /**\n * Desc : column visibility\n */\n public columnVisibility(column:string){\n if(this.displayedColumns.includes(column)){\n this.displayedColumns = this.displayedColumns.filter(item => item !== column);\n this.search.formElements.controls.forEach((item) => { if(item.name == column){ item.visible = false } });\n }else{\n const newIndex = this.masterDisplayedColumns.indexOf(column);\n const targetIndex = this.displayedColumns.findIndex(item => this.masterDisplayedColumns.indexOf(item) > newIndex);\n if (targetIndex === -1) {\n this.displayedColumns.push(column);\n } else {\n this.displayedColumns.splice(targetIndex, 0, column);\n }\n this.search.formElements.controls.forEach((item) => { if(item.name == column){ item.visible = true } });\n }\n this.addActionForSelectedRows();\n }\n /**\n * Desc : toggle row select\n */\n toggleRowSelect(row: any, event: MouseEvent) {\n const target = event.target as HTMLElement;\n let lastColumnIndex = this.displayedColumns.length - 1;\n const headingLength = document.querySelector('table thead tr')?.children.length as number;\n const headingLastColumn = document.querySelector('table thead tr')?.children[headingLength - 1];\n if(headingLastColumn?.textContent == 'Action'){\n lastColumnIndex = headingLength - 1;\n }\n const cell = target.closest('td');\n if (cell) {\n const cellIndex = Array.from(cell.parentNode!.children).indexOf(cell);\n if (cellIndex === lastColumnIndex) {\n return;\n }else{\n \n }\n }\n this.expandedElement = this.expandedElement === row ? null : row;\n this.selection.toggle(row);\n }\n /**\n * Desc : create single cell td and append to last column\n */\n public createElementForSelelctedRows(){\n this.addHeaderCell();\n this.addActionCell();\n }\n /**\n * Desc : create DOM element for action column specifically for selected row\n */\n public addActionForSelectedRows(){\n if(!this.selection.isEmpty()){\n const index = this.displayedColumns.indexOf('action');\n if (index !== -1) {\n this.displayedColumns.splice(index, 1);\n setTimeout(()=>{ this.createElementForSelelctedRows();},100);\n }else{\n this.resetAndCreateActionElement();\n }\n }else{\n if(!this.displayedColumns.includes('action')){\n this.displayedColumns.push('action');\n }\n }\n }\n /**\n * desc : delete DOM element for action column\n */\n public resetActionColumn(){\n const tableHeaderRow = this.el.nativeElement.querySelector('table thead tr');\n if (tableHeaderRow) {\n const lastChild = tableHeaderRow.lastChild;\n if (lastChild) {\n this.renderer.removeChild(tableHeaderRow, lastChild);\n }\n }\n let renderSingletdCell = false;\n const tableCellRows = this.el.nativeElement.querySelectorAll('table tbody tr');\n tableCellRows.forEach((row: HTMLElement) => {\n if (row.children.length > 0 && !renderSingletdCell) {\n renderSingletdCell = true;\n const lastChild = row.lastChild;\n if (lastChild) {\n this.renderer.removeChild(row, lastChild);\n }\n }\n });\n }\n /**\n * desc : add header cell using renderer library\n */\n private addHeaderCell() {\n const tableHeaderRow = this.el.nativeElement.querySelector('table thead tr');\n if (tableHeaderRow) {\n const newTh = this.renderer.createElement('th');\n this.renderer.addClass(newTh, 'mat-mdc-header-cell');\n this.renderer.addClass(newTh, 'mdc-data-table__header-cell');\n this.renderer.addClass(newTh, 'cdk-header-cell');\n this.renderer.addClass(newTh, 'header-align-right');\n this.renderer.addClass(newTh, 'cdk-column-action');\n this.renderer.addClass(newTh, 'mat-column-action');\n this.renderer.addClass(newTh, 'ng-tns-c1115897789-0');\n this.renderer.addClass(newTh, 'ng-star-inserted');\n this.renderer.addClass(newTh, 'mat-mdc-table-sticky');\n this.renderer.addClass(newTh, 'mat-mdc-table-sticky-border-elem-top');\n this.renderer.addClass(newTh, 'mat-mdc-table-sticky-border-elem-right');\n\n this.renderer.setStyle(newTh, 'position', 'sticky');\n this.renderer.setStyle(newTh, 'top', '0px');\n this.renderer.setStyle(newTh, 'zIndex', '101');\n this.renderer.setStyle(newTh, 'right', '0px');\n this.renderer.setStyle(newTh, 'color', '#000000');\n this.renderer.setStyle(newTh, 'fontSize', '15px');\n this.renderer.setStyle(newTh, 'textTransform', 'uppercase');\n this.renderer.setStyle(newTh, 'backgroundColor', '#ffffff');\n this.renderer.setStyle(newTh, 'minWidth', '250px');\n this.renderer.setStyle(newTh, 'textAlign', 'center');\n\n this.renderer.setAttribute(newTh, '_ngcontent-ng-c1115897789', '');\n this.renderer.setAttribute(newTh, 'role', 'columnheader');\n this.renderer.setAttribute(newTh, 'mat-header-cell', '');\n this.renderer.appendChild(newTh, this.renderer.createText('Action'));\n this.renderer.appendChild(tableHeaderRow, newTh);\n }\n }\n /**\n * desc: add action cell using renderer\n */\n private addActionCell() {\n let renderSingletdCell = false;\n const tableCellRows = this.el.nativeElement.querySelectorAll('table tbody tr');\n tableCellRows.forEach((row: HTMLElement, index: number) => {\n if (row.children.length > 0 && !renderSingletdCell) {\n renderSingletdCell = true;\n\n const newTd = this.renderer.createElement('td');\n this.renderer.addClass(newTd, 'mat-mdc-cell');\n this.renderer.addClass(newTd, 'mdc-data-table__cell');\n this.renderer.addClass(newTd, 'cdk-cell');\n this.renderer.addClass(newTd, 'header-align-right');\n this.renderer.addClass(newTd, 'cdk-column-action');\n this.renderer.addClass(newTd, 'mat-column-action');\n this.renderer.addClass(newTd, 'ng-tns-c1115897789-0');\n this.renderer.addClass(newTd, 'ng-star-inserted');\n this.renderer.addClass(newTd, 'mat-mdc-table-sticky');\n this.renderer.addClass(newTd, 'mat-mdc-table-sticky-border-elem-right');\n\n this.renderer.setStyle(newTd, 'zIndex', '1');\n this.renderer.setStyle(newTd, 'right', '0px');\n this.renderer.setStyle(newTd, 'textAlign', 'center');\n this.renderer.setStyle(newTd, 'borderLeft', '1px solid #cccccc');\n\n this.renderer.setAttribute(newTd, '_ngcontent-ng-c1115897789', '');\n this.renderer.setAttribute(newTd, 'mat-cell', '');\n this.renderer.setAttribute(newTd, 'rowspan', '100');\n\n const delButton = this.renderer.createElement('button') as HTMLButtonElement;\n delButton.className = 'action-icon action-delete';\n this.renderer.setAttribute(delButton, 'mat-menu-item', '');\n this.renderer.setStyle(delButton, 'display', 'inline-block');\n this.renderer.setStyle(delButton, 'cursor', 'pointer');\n this.renderer.setStyle(delButton, 'backgroundColor', 'unset');\n this.renderer.setStyle(delButton, 'border', 'unset');\n this.renderer.setStyle(delButton, 'borderRadius', '2px');\n this.renderer.setStyle(delButton, 'padding', '5px');\n this.renderer.setStyle(delButton, 'marginRight', '25px');\n this.renderer.setStyle(delButton, 'border', '1px solid #ccc');\n\n const delMatIcon = this.renderer.createElement('mat-icon');\n this.renderer.setAttribute(delMatIcon, 'role', 'img');\n this.renderer.addClass(delMatIcon, 'mat-icon');\n this.renderer.addClass(delMatIcon, 'notranslate');\n this.renderer.addClass(delMatIcon, 'material-icons');\n this.renderer.addClass(delMatIcon, 'mat-ligature-font');\n this.renderer.addClass(delMatIcon, 'mat-icon-no-color');\n this.renderer.setAttribute(delMatIcon, 'aria-hidden', 'true');\n this.renderer.setAttribute(delMatIcon, 'data-mat-icon-type', 'font');\n this.renderer.appendChild(delMatIcon, this.renderer.createText('delete'));\n this.renderer.listen(delButton, 'click', () => this.onTableAction('delete',this.selection.selected));\n this.renderer.appendChild(delButton, delMatIcon);\n this.renderer.appendChild(newTd, delButton);\n this.renderer.appendChild(row, newTd);\n }\n });\n }\n /**\n * \n */\n public resetAndCreateActionElement(){\n const headingLength = document.querySelector('table thead tr')?.children.length as number;\n const headingLastColumn = document.querySelector('table thead tr')?.children[headingLength - 1];\n if(headingLastColumn?.textContent == 'Action'){\n this.resetActionColumn();\n setTimeout(()=>{ this.createElementForSelelctedRows();},100);\n }\n }\n\n /**\n * Desc : empty bin list\n */\n public emptyList(): void {\n this.data = { data: [], totalRecords: 0 };\n this.tableDetails.paging.enabled = false;\n }\n}","<div class=\"main-table-container\">\n <!-- Filter section begins -->\n @if(search){\n <div class=\"filter-section\">\n <!-- filter icon begins-->\n <div class=\"filter-icon-section\">\n <div class=\"toggle-filter\" (click)=\"toggleFilter()\">\n <mat-icon>filter_list</mat-icon>\n </div>\n </div>\n <!-- filter icon ends -->\n <!-- filter field begins -->\n @if(filterVisibility){\n <div class=\"filter\">\n <lib-dynamic-form\n class=\"toolbar-form\"\n [dynamicFormDetails]=\"dynamicFormDetails\"\n ></lib-dynamic-form>\n </div>\n }\n <!-- filter field ends -->\n <!-- Action button section begins -->\n <div class=\"main-action-button\">\n <button\n matIconButton\n color=\"primary\"\n [matMenuTriggerFor]=\"fieldVisibilitySettings\"\n >\n <mat-icon class=\"unset-margin\">settings</mat-icon>\n </button>\n <mat-menu #fieldVisibilitySettings=\"matMenu\">\n @for(col of masterDisplayedColumns;track col){\n <div>\n <mat-checkbox [checked]=\"displayedColumns.includes(col)\" (change)=\"columnVisibility(col)\">\n {{col}}\n </mat-checkbox>\n </div>\n }\n </mat-menu>\n @if(actionRequired('export')){\n <button\n matIconButton\n color=\"primary\"\n [matMenuTriggerFor]=\"exportOptionMenu\"\n >\n <mat-icon class=\"unset-margin\">cloud_download</mat-icon>\n </button>\n <mat-menu #exportOptionMenu=\"matMenu\">\n <button mat-menu-item (click)=\"exportData('csv')\">CSV</button>\n <button mat-menu-item (click)=\"exportData('xlsx')\">XLSX</button>\n <button mat-menu-item (click)=\"exportData('pdf')\">PDF</button>\n </mat-menu>\n }\n @if(actionRequired('add')){\n <button\n mat-stroked-button\n color=\"primary\"\n (click)=\"onTableAction('create')\"\n >\n <mat-icon class=\"unset-margin\">add_circle</mat-icon>Add\n </button>\n }\n </div>\n <!-- Action button section ends -->\n </div>\n }\n <!-- Filter section ends -->\n\n <!-- Table section begins -->\n <div class=\"table-container hide-scrollbar\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n class=\"mat-elevation-z8\"\n matSort\n multiTemplateDataRows\n (matSortChange)=\"onSortChanges($event)\"\n aria-label=\"table\"\n >\n @if(tableDetails.selectRequired){\n <ng-container matColumnDef=\"select\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n color=\"primary\"\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n ></mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox\n color=\"primary\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\"\n [aria-label]=\"checkboxLabel(row)\"\n ></mat-checkbox>\n </td>\n </ng-container>\n }\n @for(column of tableDetails.columns;track column){\n @if(column.isComplex){\n <ng-container matColumnDef=\"{{ column.columnDef }}\">\n <th mat-header-cell *matHeaderCellDef aria-label=\"row actions\">{{ column.header }}</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element[column.columnDef].length }}\n <button\n mat-icon-button\n aria-label=\"expand row\"\n class=\"valign-middle\"\n (click)=\"expandedElement = expandedElement === element ? null : element; $event.stopPropagation()\"\n >\n @if(expandedElement === element){\n <mat-icon>keyboard_arrow_up</mat-icon>\n }@else{\n <mat-icon>keyboard_arrow_down</mat-icon>\n }\n </button>\n </td>\n </ng-container>\n }@else{\n <ng-container matColumnDef=\"{{ column.columnDef }}\">\n @if(column.sortRequired){\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n {{ column.header }}\n </th>\n }@else{\n <th mat-header-cell *matHeaderCellDef>{{ column.header }}</th>\n }\n @if(column.cell){\n <td mat-cell *matCellDef=\"let row; let i = dataIndex\">\n @if(isArray(column.cell(row))){\n @for(cell of column.cell(row);track cell;let first = $first){\n @if(first){\n {{ cell }}\n }\n }\n @if(column.cell(row).length > 1){\n @if(isExpandedGroupRow === i){\n <mat-icon class=\"hoverCursorIcon\" (click)=\"expandList(i)\">keyboard_arrow_up</mat-icon>\n }@else{\n <mat-icon class=\"hoverCursorIcon\" (click)=\"expandList(i)\">keyboard_arrow_down</mat-icon>\n }\n }\n @if(isExpandedGroupRow === i){\n @for(cell of column.cell(row);track cell;let first = $first){\n @if(!first){\n <div class=\"hoverContent\">\n {{ cell }}\n </div>\n }\n }\n }\n }@else{\n {{ column.cell(row) }}\n }\n </td>\n }@else{\n <td mat-cell *matCellDef=\"let row\">{{ row[column.columnDef] }}</td>\n }\n </ng-container>\n }\n }\n <!-- table expanded columns -->\n @for(expandedCol of expandColumnDefination;track expandedCol){\n <ng-container matColumnDef=\"{{ expandedPrefix + expandedCol.columnDef }}\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"displayedColumns.length + 1\">\n @if(element[expandedCol.columnDef]?.length > 0){\n <div\n class=\"example-element-detail\"\n [@detailExpand]=\"element === expandedElement ? 'expanded' : 'collapsed'\"\n >\n @if(expandedElement){\n <div class=\"inner-table mat-elevation-z8\">\n <!-- IF THE OBJECT ARRAY NEEDS TO BE DISPLAYED -->\n <table\n mat-table\n #innerTables\n mat-table\n aria-label=\"table\"\n [dataSource]=\"element[expandedCol.columnDef]\"\n class=\"w-100\"\n >\n @for(innerColumn of expandedCol?.innerColumns;track innerColumn){\n <ng-container matColumnDef=\"{{ innerColumn.columnDef }}\">\n <th mat-header-cell *matHeaderCellDef>{{ innerColumn.header }}</th>\n <td mat-cell *matCellDef=\"let innerRow\">\n {{ innerColumn.cell ? innerColumn.cell(innerRow) : innerRow[innerColumn.columnDef] }}\n </td>\n </ng-container>\n }\n <tr\n mat-header-row\n *matHeaderRowDef=\"getInnerColumnDef(expandedCol.innerColumns)\"\n style=\"background-color: lightgray\"\n ></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: getInnerColumnDef(expandedCol.innerColumns)\"\n [class.expanded-row]\n ></tr>\n </table>\n </div>\n }\n </div>\n }\n </td>\n </ng-container>\n }\n <!-- Action Column -->\n @if(actionRequired()){\n <ng-container matColumnDef=\"action\" [stickyEnd]=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"header-align-right\">Action</th>\n <td mat-cell *matCellDef=\"let element\" class=\"header-align-right\">\n @if(tableDetails.tableButtons.view){\n <button\n class=\"action-icon action-view\"\n mat-menu-item\n (click)=\"onTableAction('view', element)\"\n >\n <mat-icon>remove_red_eye</mat-icon>\n </button>\n }\n @if(tableDetails.tableButtons.edit){\n <button\n class=\"action-icon action-edit\"\n mat-menu-item\n (click)=\"onTableAction('edit', element)\"\n >\n <mat-icon>edit</mat-icon>\n </button>\n }\n @if(tableDetails.tableButtons.delete){\n <button\n class=\"action-icon action-delete\"\n mat-menu-item\n (click)=\"onTableAction('delete', element)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n }\n </td>\n </ng-container>\n }\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns;sticky:true\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n [class.example-expanded-row]=\"expandedElement === row\"\n (click)=\"toggleRowSelect(row,$event)\"\n >\n </tr>\n <!-- table Rows which are expanded -->\n <tr\n mat-row\n *matRowDef=\"let row; columns: getExpandedColumnHeaderDef(expandColumnDefination)\"\n class=\"example-detail-row\"\n style=\"height: 0 !important\"\n ></tr>\n </table>\n </div>\n @if(dataset.data === undefined){\n <mat-spinner class=\"loader-for-table\"></mat-spinner>\n }\n @if(dataset.totalRecords === 0){\n <section class=\"no-data-text\">\n <p>No Records Found</p>\n </section>\n }\n @if(tableDetails.paging.enabled){\n <mat-paginator\n #paginator\n class=\"mat-elevation-z8 table-paginator\"\n showFirstLastButtons\n aria-label=\"Select page\"\n (page)=\"pageChanged($event)\"\n >\n </mat-paginator>\n }\n <!-- Table section ends -->\n </div>\n\n ","/*\n * Public API Surface of dynamic-table\n */\n\nexport * from './lib/table.component';\nexport * from './lib/model/table.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ExportService"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "devlab-one-dynamic-table",
3
+ "version": "1.0.0",
4
+ "peerDependencies": {
5
+ "@angular/common": "^21.2.0",
6
+ "@angular/core": "^21.2.0",
7
+ "dynamic-form": "^0.0.1"
8
+ },
9
+ "dependencies": {
10
+ "tslib": "^2.3.0"
11
+ },
12
+ "sideEffects": false,
13
+ "module": "fesm2022/devlab-one-dynamic-table.mjs",
14
+ "typings": "types/devlab-one-dynamic-table.d.ts",
15
+ "exports": {
16
+ "./package.json": {
17
+ "default": "./package.json"
18
+ },
19
+ ".": {
20
+ "types": "./types/devlab-one-dynamic-table.d.ts",
21
+ "default": "./fesm2022/devlab-one-dynamic-table.mjs"
22
+ }
23
+ },
24
+ "type": "module"
25
+ }
@@ -0,0 +1,446 @@
1
+ import * as i0 from '@angular/core';
2
+ import { OnChanges, OnInit, OnDestroy, AfterViewInit, EventEmitter, Renderer2, ElementRef, SimpleChanges } from '@angular/core';
3
+ import { MatPaginator } from '@angular/material/paginator';
4
+ import { MatSort } from '@angular/material/sort';
5
+ import { MatTableDataSource } from '@angular/material/table';
6
+ import { SelectionModel } from '@angular/cdk/collections';
7
+ import { FormGroup } from '@angular/forms';
8
+ import { MatMenu } from '@angular/material/menu';
9
+ import { DynamicFormDetails } from 'dynamic-form';
10
+
11
+ interface IConfig {
12
+ [key: string]: any;
13
+ }
14
+
15
+ declare enum FloatLabel {
16
+ always = "always",
17
+ auto = "auto",
18
+ never = "never"
19
+ }
20
+
21
+ declare enum FieldType {
22
+ text = "text",
23
+ password = "password",
24
+ color = "color",
25
+ range = "range",
26
+ number = "number",
27
+ url = "url",
28
+ email = "email",
29
+ tel = "tel",
30
+ textArea = "text-area",
31
+ date = "date",
32
+ time = "time",
33
+ dropdown = "drop-down",
34
+ slideToggle = "slide-toggle",
35
+ file = "file",
36
+ checkbox = "checkbox",
37
+ radio = "radio",
38
+ array = "array",
39
+ group = "group"
40
+ }
41
+
42
+ interface FieldValidators {
43
+ min?: number;
44
+ max?: number;
45
+ required?: boolean;
46
+ requiredTrue?: boolean;
47
+ email?: boolean;
48
+ minLength?: number;
49
+ maxLength?: number;
50
+ pattern?: string;
51
+ nullValidator?: boolean;
52
+ jsonValidator?: boolean;
53
+ duplicateValidator?: boolean;
54
+ }
55
+ interface Form {
56
+ controls: Array<Field>;
57
+ buttons?: IFormButton;
58
+ outline: boolean;
59
+ }
60
+ interface IFormButton {
61
+ submit?: IButton;
62
+ reset?: IButton;
63
+ cancel?: IButton;
64
+ }
65
+ interface IButton {
66
+ name: string;
67
+ visible: boolean;
68
+ }
69
+ interface Field {
70
+ name: string;
71
+ type: FieldType;
72
+ outline?: boolean;
73
+ label?: string;
74
+ displayLabel?: boolean;
75
+ markerInLabel?: boolean;
76
+ floatLabel?: FloatLabel;
77
+ value?: any;
78
+ placeholder?: string;
79
+ readonly?: boolean;
80
+ tooltip?: string;
81
+ hint?: string;
82
+ prefixIcon?: string;
83
+ prefixText?: string;
84
+ suffixText?: string;
85
+ suffixIcon?: string;
86
+ numberOfColumns?: number;
87
+ visible?: boolean;
88
+ OnChange?: Function;
89
+ options?: Array<IOption>;
90
+ multipleSelect?: boolean;
91
+ autoComplete?: boolean;
92
+ onUpload?: Function;
93
+ rangeMinimum?: number;
94
+ rangeMaximum?: number;
95
+ rangeStepper?: number;
96
+ linkOnly?: boolean;
97
+ validators?: FieldValidators;
98
+ children?: Array<Field>;
99
+ }
100
+ interface IOption {
101
+ key: string | number;
102
+ label: string;
103
+ }
104
+
105
+ interface TableButtonAction {
106
+ name: string;
107
+ value?: any;
108
+ }
109
+ interface TableColumn extends BasicColumn {
110
+ isComplex: boolean;
111
+ sortRequired: boolean;
112
+ innerColumns: Array<BasicColumn> | null;
113
+ }
114
+ declare enum SearchOn {
115
+ AllColumns = 1,
116
+ MatchingColumns = 2
117
+ }
118
+ declare enum SearchAt {
119
+ ClientSide = 1,
120
+ ServerSide = 2
121
+ }
122
+ interface SearchModel {
123
+ searchOn: SearchOn;
124
+ formElements: Form;
125
+ value: IConfig | null;
126
+ searchAt: SearchAt;
127
+ }
128
+ interface BasicColumn {
129
+ columnDef: string;
130
+ header: string;
131
+ cell?: (value: any) => any;
132
+ }
133
+ interface TableDetails {
134
+ selectRequired: boolean;
135
+ columns: Array<TableColumn>;
136
+ tableButtons: TableButtons;
137
+ paging: Paging;
138
+ }
139
+ interface DataSet {
140
+ data: any[];
141
+ totalRecords: number;
142
+ }
143
+ interface Paging {
144
+ enabled: boolean;
145
+ pageSizeOptions: Array<number>;
146
+ pageNumber: number;
147
+ pageSize: number;
148
+ }
149
+ interface TableButtons {
150
+ add: boolean;
151
+ edit: boolean;
152
+ delete: boolean;
153
+ view: boolean;
154
+ export: boolean;
155
+ }
156
+ interface FullTableInfo {
157
+ pagination?: SearchRequest;
158
+ search?: SearchModel;
159
+ tableDetails?: TableDetails;
160
+ }
161
+ interface PagechangeEvent {
162
+ length: number;
163
+ pageIndex: number;
164
+ pageSize: number;
165
+ previousPageIndex: number;
166
+ }
167
+ interface PageCount {
168
+ total: number;
169
+ limit: number;
170
+ exceed: boolean;
171
+ }
172
+ interface SearchRequest {
173
+ offset: number;
174
+ limit: number;
175
+ order?: string;
176
+ sort?: OrderBy;
177
+ searchQuery?: any;
178
+ }
179
+ declare enum OrderBy {
180
+ asc = "asc",
181
+ desc = "desc"
182
+ }
183
+ declare const defaultPageSize = 5;
184
+
185
+ declare class ExportService {
186
+ /**
187
+ * Desc : Export data in excel/csv format
188
+ * @param exportType : type of file which we are going to export
189
+ * @param sourceData : target data to export
190
+ * @param fileName : indicates the file name to be exported
191
+ */
192
+ exportData(exportType: string, sourceData: any, fileName: string): void;
193
+ /**
194
+ * Desc : prepare data for exports
195
+ * @param sourceData : target data to export
196
+ * @param fileName : indicates the file name to be exported
197
+ */
198
+ prepareDataForExport(sourceData: any, fileName: string): any;
199
+ /**
200
+ * dec : export in pdf format
201
+ */
202
+ exportPdf(values: any): void;
203
+ static ɵfac: i0.ɵɵFactoryDeclaration<ExportService, never>;
204
+ static ɵprov: i0.ɵɵInjectableDeclaration<ExportService>;
205
+ }
206
+
207
+ /**********************************************************************
208
+ Page : Table component
209
+ Desc : Displaying the table data dynamically
210
+ **********************************************************************/
211
+ declare class DynamicTable implements OnChanges, OnInit, OnDestroy, AfterViewInit {
212
+ private exportService;
213
+ private renderer;
214
+ private el;
215
+ data: DataSet;
216
+ /**
217
+ * Desc : declaring search variable for customizing the table data search
218
+ */
219
+ pagination: SearchRequest;
220
+ /**
221
+ * Desc : declaring tableDetails variable for customzing the table appearance
222
+ */
223
+ tableDetails: TableDetails;
224
+ /**
225
+ * Desc : filter visibility
226
+ */
227
+ filterVisibility: boolean;
228
+ /**
229
+ * Desc : declaring formgroup variable for filter
230
+ */
231
+ filter: FormGroup;
232
+ /**
233
+ * Desc : declaring variable for column names
234
+ */
235
+ displayedColumns: string[];
236
+ /**
237
+ * Desc : declaring variable for master column names
238
+ */
239
+ masterDisplayedColumns: string[];
240
+ /**
241
+ * Desc : declaring variable for table data
242
+ */
243
+ dataSource: MatTableDataSource<any>;
244
+ /**
245
+ * Desc : declaring variable for selecting the row data
246
+ */
247
+ selection: SelectionModel<any>;
248
+ /**
249
+ * Desc : consuming view child feature for export option menu
250
+ */
251
+ exportOptionMenu: MatMenu;
252
+ /**
253
+ * Desc : consuming view child feature for paginator
254
+ */
255
+ paginator: MatPaginator;
256
+ /**
257
+ * Desc : consuming view child feature for table data sorting
258
+ */
259
+ sort: MatSort;
260
+ /**
261
+ * Desc : receiving the dataset input from parent component
262
+ */
263
+ dataset: DataSet;
264
+ /**
265
+ * Desc : receiving the search input from parent component
266
+ */
267
+ search: SearchModel;
268
+ /**
269
+ * Desc : send search element to form component
270
+ */
271
+ dynamicFormDetails: DynamicFormDetails;
272
+ /**
273
+ * Desc : emitting the action output to parent component
274
+ */
275
+ action: EventEmitter<TableButtonAction>;
276
+ /**
277
+ * Desc : declaring variable for expand column info
278
+ */
279
+ expandColumnDefination: Array<TableColumn>;
280
+ /**
281
+ * Desc : declaring variable for expanded column info
282
+ */
283
+ expandedElement: any | null;
284
+ /**
285
+ * Desc : declaring variable for expanded column prefix info
286
+ */
287
+ expandedPrefix: string;
288
+ /**
289
+ * Desc : declaring the variable for storing table row counts
290
+ */
291
+ tableRowCount: number | undefined;
292
+ /**
293
+ * Desc : expand group
294
+ */
295
+ isExpandedGroupRow: number | undefined;
296
+ /**
297
+ * Desc : constructor initialization
298
+ */
299
+ constructor(exportService: ExportService, renderer: Renderer2, el: ElementRef);
300
+ /**
301
+ * Desc : execute when component is initalized
302
+ */
303
+ ngOnInit(): void;
304
+ /**
305
+ * Desc : execute when component has any changes
306
+ */
307
+ ngOnChanges(changes: SimpleChanges): void;
308
+ /**
309
+ * desc : after view is rendered
310
+ */
311
+ ngAfterViewInit(): void;
312
+ /**
313
+ * config paginator and sorting options
314
+ */
315
+ renderTableDetails(): void;
316
+ /**
317
+ * Desc : execute when moved to another component
318
+ */
319
+ ngOnDestroy(): void;
320
+ /**
321
+ * Desc : organizing the search filter fields
322
+ */
323
+ initializeSearchPredicate(): void;
324
+ /**
325
+ * Desc : Filter the table data
326
+ */
327
+ filterGrid(filterValue: any, field?: string): void;
328
+ /**
329
+ * Desc : execute default search method
330
+ */
331
+ applyDefaultFilter(value: any, column: any): void;
332
+ /**
333
+ * Desc : validating if all the checkbox are checked or not
334
+ */
335
+ isAllSelected(): boolean;
336
+ /**
337
+ * Desc : Enable select and deselect all rows
338
+ */
339
+ toggleAllRows(): void;
340
+ /**
341
+ * Desc : Column visibility
342
+ */
343
+ setColumn(event: boolean, column: string): void;
344
+ /**
345
+ * Desc : Initalize columns and expanded columns
346
+ */
347
+ initializeGridColumns(): void;
348
+ /**
349
+ * Desc : Initialize search fields
350
+ */
351
+ initializeSearchFields(): void;
352
+ /**
353
+ * Desc : detect changes in filter field on keyup
354
+ */
355
+ filterFieldChanges(event: any, field: string): void;
356
+ /**
357
+ * Desc : validating input features in table
358
+ */
359
+ actionRequired(buttonType?: string): boolean;
360
+ /**
361
+ * Desc : Export table data
362
+ */
363
+ exportData(exportType: string): void;
364
+ /**
365
+ * Desc : emitting the data to parent component
366
+ */
367
+ onTableAction(type: string, value?: any): void;
368
+ /**
369
+ * Desc : return expanded column data
370
+ */
371
+ getExpandedColumnHeaderDef(ele: Array<TableColumn> | null | undefined): string[];
372
+ /**
373
+ * Desc : return inner column data
374
+ */
375
+ getInnerColumnDef(ele: Array<BasicColumn> | null | undefined): string[];
376
+ /**
377
+ * Desc : validate json
378
+ */
379
+ isJSON(str: string): any;
380
+ /**
381
+ * Desc : event triggers while chaning the page
382
+ */
383
+ pageChanged(event: any): void;
384
+ /**
385
+ * Desc: Event triggers while sorting the column
386
+ */
387
+ onSortChanges(event: any): void;
388
+ /**
389
+ * Desc : array exist
390
+ */
391
+ isArray(inputValue: any): boolean;
392
+ /**
393
+ * Desc : expanding the array data list
394
+ * @param index : row index
395
+ */
396
+ expandList(index: number): void;
397
+ /**
398
+ * desc: label for the checkbox on the passed row
399
+ */
400
+ checkboxLabel(row?: any): string;
401
+ /**
402
+ * Desc : toggle filter
403
+ */
404
+ toggleFilter(): void;
405
+ /**
406
+ * Desc : column visibility
407
+ */
408
+ columnVisibility(column: string): void;
409
+ /**
410
+ * Desc : toggle row select
411
+ */
412
+ toggleRowSelect(row: any, event: MouseEvent): void;
413
+ /**
414
+ * Desc : create single cell td and append to last column
415
+ */
416
+ createElementForSelelctedRows(): void;
417
+ /**
418
+ * Desc : create DOM element for action column specifically for selected row
419
+ */
420
+ addActionForSelectedRows(): void;
421
+ /**
422
+ * desc : delete DOM element for action column
423
+ */
424
+ resetActionColumn(): void;
425
+ /**
426
+ * desc : add header cell using renderer library
427
+ */
428
+ private addHeaderCell;
429
+ /**
430
+ * desc: add action cell using renderer
431
+ */
432
+ private addActionCell;
433
+ /**
434
+ *
435
+ */
436
+ resetAndCreateActionElement(): void;
437
+ /**
438
+ * Desc : empty bin list
439
+ */
440
+ emptyList(): void;
441
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicTable, never>;
442
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicTable, "lib-dynamic-table", never, { "pagination": { "alias": "pagination"; "required": false; }; "tableDetails": { "alias": "tableDetails"; "required": false; }; "dataset": { "alias": "dataset"; "required": false; }; "search": { "alias": "search"; "required": false; }; }, { "action": "action"; }, never, never, true, never>;
443
+ }
444
+
445
+ export { DynamicTable, OrderBy, SearchAt, SearchOn, defaultPageSize };
446
+ export type { BasicColumn, DataSet, FullTableInfo, PageCount, PagechangeEvent, Paging, SearchModel, SearchRequest, TableButtonAction, TableButtons, TableColumn, TableDetails };