cats-data-grid 1.0.1 → 2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"cats-data-grid.mjs","sources":["../../../projects/cats-data-grid/src/lib/services/cats-data-grid.service.ts","../../../projects/cats-data-grid/src/lib/pipes/add-class.pipe.ts","../../../projects/cats-data-grid/src/lib/directives/outside-click.directive.ts","../../../projects/cats-data-grid/src/lib/directives/renderer-parser.directive.ts","../../../projects/cats-data-grid/src/lib/cats-data-grid.component.ts","../../../projects/cats-data-grid/src/lib/cats-data-grid.component.html","../../../projects/cats-data-grid/src/public-api.ts","../../../projects/cats-data-grid/src/cats-data-grid.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CatsDataGridService {\r\n\r\n constructor() { }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'addClass'\r\n})\r\nexport class AddClassPipe implements PipeTransform {\r\n\r\n transform(value: any, tableOption: any): string {\r\n if (tableOption?.addClasses) {\r\n return tableOption.addClasses(value)\r\n }\r\n return '';\r\n }\r\n\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Output,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appOutsideClick]',\r\n standalone: true,\r\n})\r\nexport class OutsideClickDirective {\r\n @Output() clickOutside = new EventEmitter();\r\n constructor(private elementRef: ElementRef) {}\r\n @HostListener('document:click', ['$event'])\r\n public onClick(event: MouseEvent): void {\r\n const targetElement = event.target as HTMLElement | null;\r\n\r\n // Guard clause: exit early if no target or not an element\r\n if (!targetElement) {\r\n return;\r\n }\r\n\r\n const clickInside = this.elementRef.nativeElement.contains(targetElement);\r\n if (!clickInside) {\r\n this.clickOutside.emit(event);\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n Directive,\r\n ElementRef,\r\n Input,\r\n OnInit,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appRendererParser]',\r\n})\r\nexport class RendererParserDirective implements OnInit {\r\n @Input() rowParam: any;\r\n @Input() col: any;\r\n @Input() api: any;\r\n @Input() currentValue: any;\r\n ref: any;\r\n constructor(private el: ViewContainerRef, private er: ElementRef) { }\r\n ngOnInit() {\r\n this.el?.clear();\r\n let params: any = {\r\n data: this.rowParam,\r\n value: this.currentValue,\r\n cellParams: this.col?.cellRendererParams,\r\n col: this.col\r\n };\r\n if (\r\n this.col?.cellRenderer?.prototype &&\r\n this.col.cellRenderer.prototype?.constructor == this.col.cellRenderer\r\n ) {\r\n this.ref = this.el.createComponent(this.col?.cellRenderer);\r\n this.ref.instance?.cellInit(params, this.api);\r\n } else if (typeof this.col?.cellRenderer == 'function') {\r\n let newDiv = document.createElement('div');\r\n newDiv.className = 'more_data_wrapper';\r\n newDiv.innerHTML = this.col.cellRenderer(params);\r\n let toltipDiv = document.createElement('div');\r\n let itemDiv = document.createElement('div');\r\n let descDiv = document.createElement('div');\r\n toltipDiv.className = 'see_more_data';\r\n itemDiv.className = 'item';\r\n descDiv.className = 'desc';\r\n descDiv.innerHTML = newDiv.innerText;\r\n itemDiv.appendChild(descDiv);\r\n toltipDiv.appendChild(itemDiv);\r\n this.er.nativeElement.appendChild(newDiv);\r\n this.er.nativeElement.appendChild(toltipDiv);\r\n }\r\n }\r\n}\r\n","import { AddClassPipe } from './pipes/add-class.pipe';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { OutsideClickDirective } from './directives/outside-click.directive';\r\nimport { RendererParserDirective } from './directives/renderer-parser.directive';\r\n\r\n@Component({\r\n selector: 'cats-data-grid',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n OutsideClickDirective,\r\n RendererParserDirective,\r\n AddClassPipe,\r\n ],\r\n templateUrl: './cats-data-grid.component.html',\r\n styleUrl: './cats-data-grid.component.scss',\r\n})\r\nexport class CatsDataGridComponent implements OnChanges, OnInit {\r\n @Input() tableOptions: any;\r\n @Input() totalRecords: number = 0;\r\n @Input() sortingRequired = true;\r\n @Input() checkBoxSelection = false;\r\n @Input() checkboxSelectionType = 'multiple';\r\n @Input() rowData: any[] = [];\r\n @Input() colDefs: any[] = [];\r\n @Input() paginationRequired = true;\r\n @Input() selectedRowEmpty: boolean = false;\r\n @Input() filterRequired: boolean = true;\r\n @Input() threeDotsMenuRequired: boolean = true;\r\n\r\n @Input() height: number = 300;\r\n @Input() groupBy: string[] = [];\r\n @Output() onPaginationChange = new EventEmitter();\r\n @Output() onCheckboxSelection = new EventEmitter();\r\n @Output() onScrollEmitter = new EventEmitter();\r\n @Output() filter = new EventEmitter();\r\n\r\n activeFilterIndex: number | null = null;\r\n originalRowData: any[] = [];\r\n\r\n pageDetails: any = {\r\n pageSize: 20,\r\n totalPages: 1,\r\n currentPage: 1,\r\n };\r\n recordsToShow: any = {\r\n min: 0,\r\n max: 20,\r\n };\r\n sortingColumnIndex!: number;\r\n sortingType: string = '';\r\n selectedRow: any[] = [];\r\n\r\n @Input() pageSizeList: number[] = [20, 50, 75, 100];\r\n showPageSizeList: boolean = false;\r\n dragOverIndex: null | number = null;\r\n draggedIndex: null | number = null;\r\n originalColDefs: any[] = [];\r\n filteredRowData: any[] = [];\r\n filteredData: any[] = [];\r\n currentColumn: any;\r\n currentIndex!: number;\r\n menuVisible: boolean[] = [];\r\n menuPosition: any[] = [];\r\n activeFilters: Set<any> = new Set<any>();\r\n resizingColumnIndex: number | null = null;\r\n startX: number = 0;\r\n startWidth: number = 0;\r\n isResizing: boolean = false;\r\n groupedResult: any[] = [];\r\n constructor(private cd: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n this.originalRowData = structuredClone(this.rowData);\r\n this.filteredRowData = structuredClone(this.rowData);\r\n this.originalColDefs = [...this.colDefs];\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['colDefs']?.currentValue) {\r\n this.resetTableConfig();\r\n this.colDefs = this.getUpdatedColDefs(changes['colDefs']?.currentValue);\r\n }\r\n if (changes['totalRecords']?.currentValue) {\r\n this.setPageCount();\r\n }\r\n if (changes['rowData']?.currentValue) {\r\n if (this.selectedRowEmpty) this.selectedRow = [];\r\n this.rowData = changes['rowData']?.currentValue.map(\r\n (row: any, i: number) => {\r\n row.rowId = `${Date.now()}_${i}`;\r\n if (row?.isSelected) [...this.selectedRow, row];\r\n return row;\r\n }\r\n );\r\n this.getGroupedData();\r\n }\r\n }\r\n\r\n /**\r\n * @description Prepares and normalizes column definitions for filtering and menu behavior\r\n * @author Anand Pandey\r\n * @param {any[]} colDefs - Raw column definitions received from the parent.\r\n * @returns {any[]} - Updated column definitions with filter/menu\r\n */\r\n getUpdatedColDefs(colDefs: any[]) {\r\n return colDefs.map((col) => {\r\n // Default filterType\r\n\r\n if (col.fieldName === 'action') {\r\n col.isAction = true;\r\n }\r\n if (!col.filterType && !col.isAction) {\r\n col.filterType = 'text';\r\n }\r\n\r\n col.textLogic = 'AND';\r\n col.numberLogic = 'AND';\r\n let updatedCol = {\r\n ...col,\r\n filter: col.filterable ?? true,\r\n menu: col.columnAction ?? true,\r\n };\r\n\r\n if (!updatedCol.filter) {\r\n return updatedCol;\r\n }\r\n\r\n switch (col.filterType) {\r\n case 'text':\r\n updatedCol = {\r\n ...updatedCol,\r\n textFilters: [\r\n {\r\n filterType: 'contains',\r\n filterValue: '',\r\n },\r\n {\r\n filterType: 'startsWith',\r\n filterValue: '',\r\n },\r\n ],\r\n };\r\n break;\r\n\r\n case 'number':\r\n case 'date':\r\n updatedCol = {\r\n ...updatedCol,\r\n dateValue: '',\r\n numberFilters: [\r\n {\r\n filterType: '=',\r\n numberValue: '',\r\n },\r\n {\r\n filterType: '=',\r\n numberValue: '',\r\n },\r\n ],\r\n dateFilters: [\r\n {\r\n filterType: '=',\r\n dateValue: '',\r\n },\r\n {\r\n filterType: '=',\r\n dateValue: '',\r\n },\r\n ],\r\n };\r\n break;\r\n\r\n case 'set':\r\n const options = [\r\n ...new Set(\r\n this.rowData.flatMap((r) => {\r\n return this.normalizeSetFilterType(\r\n r[col.fieldName],\r\n col?.cellRendererParams?.tagKey\r\n )?.filter(Boolean);\r\n })\r\n ),\r\n ];\r\n updatedCol = {\r\n ...updatedCol,\r\n options,\r\n filteredOptions: options,\r\n selectedValues: new Set(options),\r\n };\r\n break;\r\n }\r\n\r\n return updatedCol;\r\n });\r\n }\r\n\r\n normalizeSetFilterType(value: any, key: string) {\r\n if (!value) return;\r\n\r\n if (Array.isArray(value) && typeof value[0] === 'string') {\r\n return value;\r\n }\r\n if (Array.isArray(value) && typeof value[0] === 'object') {\r\n return (value = value.map((val) => val[key]));\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return [value];\r\n }\r\n\r\n if (typeof value === 'object') {\r\n return [value[key]];\r\n }\r\n\r\n return [];\r\n }\r\n\r\n /**\r\n * @description - Evaluates a text-based filter condition on a given field value.\r\n * @author Anand Pandey\r\n * @param {string} type - The type of text filter to apply ('contains' | 'doesNotContain' | 'equals' etc).\r\n * @param {string} fieldValue - The actual value from the data row being evaluated.\r\n * @param {string} value - The user-entered filter value to compare against.\r\n * @returns {boolean} `true` if the fieldValue satisfies the specified filter condition,\r\n * otherwise `false`.\r\n */\r\n evaluateTextFilterCondition(\r\n type: string,\r\n fieldValue: string,\r\n value: string\r\n ): boolean {\r\n switch (type) {\r\n case 'contains':\r\n return fieldValue.includes(value);\r\n case 'doesNotContain':\r\n return !fieldValue.includes(value);\r\n case 'equals':\r\n return fieldValue === value;\r\n case 'doesNotEqual':\r\n return fieldValue !== value;\r\n case 'startsWith':\r\n return fieldValue.startsWith(value);\r\n case 'endsWith':\r\n return fieldValue.endsWith(value);\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n /**\r\n * @description - Evaluates number/date filter conditions.\r\n * @author Anand\r\n * @param {string} type - Comparison operator ('=' | '>' | '<' | '>=' | '<=').\r\n * @param {number|string} fieldValue - Actual value from the row (number or timestamp).\r\n * @param {number|string} value - User-entered value for comparison.\r\n * @returns {boolean} True if the condition matches, otherwise false.\r\n */\r\n evaluateNumDateFilterCondition(\r\n type: string,\r\n fieldValue: number | string,\r\n value: number | string\r\n ): boolean {\r\n switch (type) {\r\n case '=':\r\n return fieldValue === value;\r\n case '>':\r\n return fieldValue > value;\r\n case '<':\r\n return fieldValue < value;\r\n case '>=':\r\n return fieldValue >= value;\r\n case '<=':\r\n return fieldValue <= value;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to filter data according to filterType and comparator selection\r\n * @author Anand Pandey\r\n * @param {}\r\n * @returns void\r\n */\r\n applyAllFilters() {\r\n let result: any[] = structuredClone(this.originalRowData);\r\n\r\n this.colDefs.forEach((col) => {\r\n const field = col.fieldName;\r\n\r\n // *********** TEXT FILTER ***********\r\n if (col.filterType === 'text') {\r\n const [c1, c2] = col.textFilters;\r\n\r\n const textVal1 = c1.filterValue?.toLowerCase().trim();\r\n const textVal2 = c2.filterValue?.toLowerCase().trim();\r\n if (!textVal1 && !textVal2) {\r\n this.activeFilters.delete(col.fieldName);\r\n return;\r\n }\r\n this.activeFilters.add(col.fieldName);\r\n\r\n result = result.filter((r) => {\r\n const fieldVal = String(r[field]).toLowerCase();\r\n const cond1 = textVal1\r\n ? this.evaluateTextFilterCondition(\r\n c1.filterType,\r\n fieldVal,\r\n textVal1\r\n )\r\n : false;\r\n const cond2 = textVal2\r\n ? this.evaluateTextFilterCondition(\r\n c2.filterType,\r\n fieldVal,\r\n textVal2\r\n )\r\n : false;\r\n\r\n return col.textLogic === 'AND' ? cond1 && cond2 : cond1 || cond2;\r\n });\r\n }\r\n\r\n // *********** NUMBER FILTER ***********\r\n if (col.filterType === 'number') {\r\n const [c1, c2] = col.numberFilters;\r\n\r\n const numValue1 = Number(c1.numberValue.trim());\r\n const numValue2 = Number(c2.numberValue.trim());\r\n\r\n if (!numValue1 && !numValue2) {\r\n this.activeFilters.delete(col.fieldName);\r\n return;\r\n }\r\n this.activeFilters.add(col.fieldName);\r\n\r\n result = result.filter((r) => {\r\n const fieldVal = Number(r[field]);\r\n const cond1 = numValue1\r\n ? this.evaluateNumDateFilterCondition(\r\n c1.filterType,\r\n fieldVal,\r\n numValue1\r\n )\r\n : false;\r\n const cond2 = numValue2\r\n ? this.evaluateNumDateFilterCondition(\r\n c2.filterType,\r\n fieldVal,\r\n numValue2\r\n )\r\n : false;\r\n\r\n return col.textLogic === 'AND' ? cond1 && cond2 : cond1 || cond2;\r\n });\r\n }\r\n\r\n // *********** DATE FILTER ***********\r\n if (col.filterType === 'date') {\r\n const [c1, c2] = col.dateFilters;\r\n const selected1 = this.normalizeDate(c1.dateValue);\r\n const selected2 = this.normalizeDate(c2.dateValue);\r\n if (!selected1 && !selected2) {\r\n this.activeFilters.delete(col.fieldName);\r\n return;\r\n }\r\n this.activeFilters.add(col.fieldName);\r\n result = result.filter((r) => {\r\n const fieldVal = this.normalizeDate(r[field]);\r\n const cond1 = selected1\r\n ? this.evaluateNumDateFilterCondition(\r\n c1.filterType,\r\n fieldVal ?? r[field],\r\n selected1\r\n )\r\n : false;\r\n const cond2 = selected2\r\n ? this.evaluateNumDateFilterCondition(\r\n c2.filterType,\r\n fieldVal ?? r[field],\r\n selected2\r\n )\r\n : false;\r\n\r\n return col.textLogic === 'AND' ? cond1 && cond2 : cond1 || cond2;\r\n });\r\n }\r\n\r\n // *********** SET FILTER ***********\r\n if (col.filterType === 'set') {\r\n if (\r\n col.selectedValues.size >= 0 &&\r\n col.selectedValues.size !== col.options.length\r\n ) {\r\n result = result.filter((r) => {\r\n const value: any = r[field];\r\n\r\n if (\r\n Array.isArray(value) &&\r\n value.every((val) => typeof val !== 'object')\r\n ) {\r\n return value.some((m) => col.selectedValues.has(m));\r\n }\r\n\r\n if (\r\n Array.isArray(value) &&\r\n value.every((val) => typeof val === 'object')\r\n ) {\r\n return value.some((m) =>\r\n col.selectedValues.has(m[col?.cellRendererParams?.tagKey])\r\n );\r\n }\r\n\r\n return col.selectedValues.has(r[field]);\r\n });\r\n this.activeFilters.add(col.fieldName);\r\n } else {\r\n this.activeFilters.delete(col.fieldName);\r\n }\r\n }\r\n });\r\n\r\n this.filteredData = result;\r\n this.rowData = this.filteredData;\r\n this.getGroupedData();\r\n this.filter.emit(this.filteredData);\r\n }\r\n\r\n /**\r\n * @description Method to change the data format to utc\r\n * @author Anand Pandey\r\n * @param {date} - date value to be changed\r\n * @returns date in milliseconds\r\n */\r\n normalizeDate(dateStr: string) {\r\n const d = new Date(dateStr);\r\n if (isNaN(d.getTime())) return null;\r\n return new Date(\r\n Date.UTC(d.getFullYear(), d.getMonth(), d.getDate())\r\n ).getTime();\r\n }\r\n\r\n /**\r\n * @description\r\n * Filters the available set options inside a Set Filter (checkbox filter)\r\n * based on the user's search text. This updates only the list shown in\r\n * the dropdown\r\n * @author Anand Pandey\r\n * @param col - Column definition object containing filter config\r\n * @param event - Input event from the search textbox\r\n * @returns void\r\n */\r\n filterSetOptions(col: any, event: any) {\r\n const text = event.target.value.toLowerCase();\r\n col.filteredOptions = col.options.filter((option: any) =>\r\n String(option).toLowerCase().includes(text)\r\n );\r\n }\r\n\r\n /**\r\n * @description\r\n * Toggles an individual checkbox option inside a Set Filter. *\r\n * @author Anand Pandey\r\n * @param col - Column definition object\r\n * @param opt - Selected option value\r\n * @param event - Checkbox change event\r\n * @returns void\r\n */\r\n toggleSetOption(col: any, opt: any, event: any) {\r\n if (event.target.checked) col.selectedValues.add(opt);\r\n else col.selectedValues.delete(opt);\r\n\r\n this.applyAllFilters();\r\n }\r\n\r\n /**\r\n * @description * Selects or deselects all checkbox options in the Set Filter.\r\n * @author Anand Pandey\r\n * @param col - Column definition object\r\n * @param event - Checkbox change event\r\n * @returns void\r\n */\r\n toggleSelectAll(col: any, event: any) {\r\n if (event.target.checked) {\r\n col.options.forEach((option: any) => col.selectedValues.add(option));\r\n } else {\r\n col.selectedValues.clear();\r\n }\r\n this.applyAllFilters();\r\n }\r\n\r\n /**\r\n * @description\r\n * Checks whether all options inside a Set Filter are currently selected.\r\n * @author Anand Pandey\r\n * @param col - Column definition object\r\n * @returns boolean - TRUE if all options are selected, otherwise FALSE.\r\n */\r\n isAllSelected(col: any) {\r\n return (\r\n col.options?.length > 0 && col.options?.length === col.selectedValues.size\r\n );\r\n }\r\n\r\n /**\r\n * @description\r\n * Opens the three-dots column menu for the selected column.\r\n * Opens only the menu belonging to the clicked column index\r\n * @author Anand Pandey\r\n * @param {MouseEvent} event - The click event triggered on the three-dots icon.\r\n * @param {any} col - The column definition object for which menu is opened.\r\n * @param {number} index - Index of the column whose menu has been requested.\r\n * @returns {void}\r\n */\r\n openMenu(event: MouseEvent, col: any, index: number) {\r\n event.stopPropagation();\r\n this.activeFilterIndex = null;\r\n this.menuVisible = this.menuVisible.map(() => false);\r\n\r\n if (!this.menuVisible[index]) this.menuVisible[index] = false;\r\n\r\n const rect = (event.target as HTMLElement).getBoundingClientRect();\r\n\r\n this.menuPosition[index] = {\r\n top: rect.bottom + 4 + 'px',\r\n left: rect.left + 'px',\r\n };\r\n\r\n const menuWidth = 160;\r\n const screenWidth = window.innerWidth;\r\n const padding = 10;\r\n\r\n //FIX: Stop overflow on the right\r\n if (\r\n parseInt(this.menuPosition[index].left) + menuWidth >\r\n screenWidth - padding\r\n ) {\r\n this.menuPosition[index].left = screenWidth - menuWidth - padding + 'px';\r\n }\r\n // Open only this one\r\n this.menuVisible[index] = true;\r\n }\r\n\r\n /**\r\n * @description Sort from three dots menu pop up.\r\n * @author Anand Pandey\r\n * @param {fieldName} string - fieldname.\r\n * @param {string} type - Type defines the sorting type whether this is ascending, descending.\r\n * @returns {void}\r\n */\r\n onSort(fieldName: string, type: string) {\r\n this.sortingType = type;\r\n if (this.sortingType == 'asc' || this.sortingType == '') {\r\n this.ascendingOrder(fieldName);\r\n } else {\r\n this.descendingOrder(fieldName);\r\n }\r\n this.getGroupedData();\r\n this.menuVisible[this.currentIndex] = false;\r\n }\r\n\r\n /**\r\n * @description Generates grouped data based on the selected `groupBy` columns..\r\n * @author Anand Pandey\r\n * @returns void\r\n */\r\n getGroupedData() {\r\n if (this.groupBy && this.groupBy.length > 0) {\r\n this.groupedResult = this.groupData(this.rowData, this.groupBy) || [];\r\n }\r\n }\r\n\r\n /**\r\n * @description Initializes column resize operation when the user presses the mouse on the resize handle.\r\n * @author Anand Pandey\r\n * @param {MouseEvent} event - The mousedown event triggered on the resize handle.\r\n * @param {number} index - Index of the column being resized.\r\n * @returns {void}\r\n */\r\n startResize(event: MouseEvent, index: number) {\r\n event.preventDefault();\r\n this.isResizing = true;\r\n this.resizingColumnIndex = index;\r\n this.startX = event.clientX;\r\n this.startWidth = this.colDefs[index].width;\r\n\r\n document.addEventListener('mousemove', this.onMouseMove);\r\n document.addEventListener('mouseup', this.stopResize);\r\n }\r\n\r\n /**\r\n * @description Handles column resizing as the mouse moves.\r\n * @author Anand Pandey\r\n * @param {MouseEvent} event - Mouse movement event during resizing.\r\n * @returns {void}\r\n */\r\n onMouseMove = (event: MouseEvent) => {\r\n if (\r\n this.resizingColumnIndex === null ||\r\n this.resizingColumnIndex === undefined\r\n )\r\n return;\r\n\r\n const movement = event.clientX - this.startX;\r\n const newWidth = this.startWidth + movement;\r\n\r\n if (newWidth > 50) {\r\n this.colDefs[this.resizingColumnIndex].width = newWidth;\r\n }\r\n };\r\n\r\n /**\r\n * @description Stops the column resizing operation.\r\n * Clears resizing state and removes mouse event listeners.\r\n * @author Anand Pandey\r\n * @param {MouseEvent} event - Mouse up event ending the resize action.\r\n * @returns {void}\r\n */\r\n stopResize = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n this.resizingColumnIndex = null;\r\n this.isResizing = false;\r\n document.removeEventListener('mousemove', this.onMouseMove);\r\n document.removeEventListener('mouseup', this.stopResize);\r\n };\r\n\r\n /**\r\n * @description Recursively groups row data into a hierarchical structure based on the provided group keys.\r\n * @author Anand Pandey\r\n * @param {any[]} data - The row data to be grouped.\r\n * @param {string[]} groupKeys - Ordered list of column keys to group by.\r\n * @returns {any[]} A hierarchical grouped structure containing nested group nodes.\r\n */\r\n groupData(data: any[], groupKeys: string[]): any {\r\n if (groupKeys.length === 0) return data;\r\n const [currentKey, ...restKeys] = groupKeys;\r\n\r\n const groups: any = {};\r\n for (const row of data) {\r\n const key = row[currentKey] ?? '';\r\n if (!groups[key]) groups[key] = [];\r\n groups[key].push(row);\r\n }\r\n\r\n // recursively group child arrays\r\n\r\n let result = [];\r\n\r\n for (const key of Object.keys(groups)) {\r\n result.push({\r\n key,\r\n field: currentKey,\r\n expanded: false,\r\n children: this.groupData(groups[key], restKeys),\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * @description Toggles the expand/collapse state of a group node.\r\n * @author Anand Pandey\r\n * @param {any} node - The group node whose expanded state needs to be toggled.\r\n * @returns {void}\r\n */\r\n\r\n toggleGroup(node: any) {\r\n node.expanded = !node.expanded;\r\n }\r\n\r\n /**\r\n * @description Pin column on the left side.\r\n * @author Anand Pandey\r\n * @param {any} col - The selected column details from table on clicking pin or unpin from three dots menu.\r\n * @param {number} index - The index of column from table on clicking pin or unpin from three dots menu.\r\n * @returns {void}\r\n */\r\n\r\n pinColumn(col: any, index: number) {\r\n col.pinned = !col.pinned;\r\n if (col.pinned) {\r\n this.colDefs.splice(index, 1);\r\n // const pinnedCount = this.colDefs.filter((col) => col.pinned).length;\r\n // this.colDefs.splice(pinnedCount, 0, col);\r\n this.colDefs = [col, ...this.colDefs];\r\n } else {\r\n const indx = this.originalColDefs.findIndex(\r\n (dt) => dt.fieldName === col.fieldName\r\n );\r\n if (indx > 0) {\r\n this.colDefs.splice(index, 1);\r\n this.colDefs.splice(indx, 0, col);\r\n }\r\n }\r\n this.colDefs.forEach((dt, indx) => {\r\n if (indx > 0 && dt.pinned) {\r\n dt.pinned = false;\r\n const id = this.originalColDefs.findIndex(\r\n (colDt) => colDt.fieldName === dt.fieldName\r\n );\r\n if (id > 0) {\r\n this.colDefs.splice(indx, 1);\r\n this.colDefs.splice(id, 0, dt);\r\n }\r\n }\r\n });\r\n this.updatePinnedOffsets();\r\n this.onClickOutside();\r\n }\r\n\r\n /**\r\n * @description Updates the horizontal left offsets of pinned columns by assigning cumulative widths to each pinned column and resetting non-pinned columns.\r\n * @author Anand\r\n * @returns void\r\n */\r\n updatePinnedOffsets() {\r\n let leftOffset = 0;\r\n\r\n this.colDefs.forEach((col) => {\r\n if (col.pinned) {\r\n col.left = leftOffset;\r\n leftOffset += col.width || 120;\r\n } else {\r\n col.left = null;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @description Method to parse column value from rowdata object\r\n * according to given field value in column Defination\r\n * @author Tarun Kumar\r\n * @param row - current row object\r\n * @param toParse - field value\r\n * @returns string\r\n */\r\n parseColValue(row: any, toParse: string): string {\r\n if (!toParse?.includes('.')) {\r\n return row[toParse] || '-';\r\n } else {\r\n let toParseArr = toParse.split('.');\r\n let val = row;\r\n for (const key of toParseArr) {\r\n val =\r\n row?.[val.key] && typeof row[val.key] === 'object'\r\n ? row[val.key].name\r\n : row[val.key] ?? '';\r\n // val = val[key];\r\n }\r\n return val || '-';\r\n }\r\n }\r\n\r\n /**\r\n * @description method to reset table configuration\r\n * @author Tarun Kumar\r\n * @param none\r\n * @returns void\r\n */\r\n resetTableConfig(): void {\r\n this.pageDetails.pageSize = 20;\r\n this.pageDetails.currentPage = 1;\r\n this.pageDetails.totalPages = 1;\r\n this.recordsToShow.min = 0;\r\n this.recordsToShow.max = 20;\r\n this.setPageCount();\r\n }\r\n\r\n /**\r\n * @description method to set total pages count\r\n * @author Tarun Kumar\r\n * @param none\r\n * @returns void\r\n */\r\n setPageCount(): void {\r\n this.pageDetails.totalPages = Math.ceil(\r\n this.totalRecords / this.pageDetails.pageSize\r\n );\r\n }\r\n\r\n /**\r\n * @description method to update table on page size change\r\n * @author Tarun Kumar\r\n * @param event\r\n * @returns void\r\n */\r\n onPageSizeChanged(event: any): void {\r\n this.recordsToShow.min = 0;\r\n this.recordsToShow.max = parseInt(event);\r\n this.pageDetails.currentPage = 1;\r\n this.pageDetails.pageSize = parseInt(event);\r\n this.setPageCount();\r\n this.onPaginationChange.emit({\r\n page: this.pageDetails.currentPage - 1,\r\n pageSize: this.pageDetails.pageSize,\r\n });\r\n }\r\n\r\n /**\r\n * @description method to update table on previous button click\r\n * @author Tarun Kumar\r\n */\r\n onBtPrevClick(): void {\r\n this.recordsToShow.min = this.recordsToShow.min - this.pageDetails.pageSize;\r\n this.recordsToShow.max = this.recordsToShow.max - this.pageDetails.pageSize;\r\n if (this.pageDetails.currentPage > 1)\r\n this.pageDetails.currentPage = this.pageDetails.currentPage - 1;\r\n\r\n this.onPaginationChange.emit({\r\n page: this.pageDetails.currentPage - 1,\r\n pageSize: this.pageDetails.pageSize,\r\n });\r\n }\r\n\r\n /**\r\n * @description method to update table on next button click\r\n * @author Tarun Kumar\r\n */\r\n onBtNextClick(): void {\r\n this.recordsToShow.min = this.recordsToShow.min + this.pageDetails.pageSize;\r\n this.recordsToShow.max = this.recordsToShow.max + this.pageDetails.pageSize;\r\n\r\n if (this.pageDetails.currentPage < this.pageDetails.totalPages)\r\n this.pageDetails.currentPage = this.pageDetails.currentPage + 1;\r\n\r\n this.onPaginationChange.emit({\r\n page: this.pageDetails.currentPage - 1,\r\n pageSize: this.pageDetails.pageSize,\r\n });\r\n }\r\n\r\n /**\r\n * @description method to update table on selecting any page randomly\r\n * @author Tarun Kumar\r\n * @param event\r\n */\r\n goToSelectedPage(event: any): void {\r\n let pageNo = event.target.value;\r\n if (pageNo < 1) {\r\n this.pageDetails.currentPage = 1;\r\n } else if (pageNo > this.pageDetails.totalPages) {\r\n this.pageDetails.currentPage = this.pageDetails.totalPages;\r\n }\r\n this.recordsToShow.max =\r\n this.pageDetails.currentPage * this.pageDetails.pageSize;\r\n this.recordsToShow.min =\r\n this.pageDetails.currentPage * this.pageDetails.pageSize -\r\n this.pageDetails.pageSize;\r\n\r\n this.onPaginationChange.emit({\r\n page: this.pageDetails.currentPage - 1,\r\n pageSize: this.pageDetails.pageSize,\r\n });\r\n }\r\n\r\n /**\r\n * @description method to sort data according to type and column\r\n * @author Tarun Kumar\r\n * @param sortingColumIndex\r\n * @param col\r\n * @param sortingType\r\n */\r\n onSortingRowData(sortingColumIndex: number, col: any): void {\r\n if (!col.sortable) return;\r\n this.sortingColumnIndex = sortingColumIndex;\r\n this.sortingType = !this.sortingType\r\n ? 'asc'\r\n : this.sortingType == 'asc'\r\n ? 'dsc'\r\n : 'asc';\r\n if (this.sortingType == 'asc' || this.sortingType == '') {\r\n this.ascendingOrder(col?.fieldName);\r\n } else {\r\n this.descendingOrder(col?.fieldName);\r\n }\r\n this.getGroupedData();\r\n }\r\n\r\n /**\r\n * @description method to sort table in ascending order according to given field\r\n * @param fieldName\r\n */\r\n ascendingOrder(fieldName: string): void {\r\n this.rowData = this.rowData.sort((a, b) => {\r\n if (this.parseColValue(a, fieldName) > this.parseColValue(b, fieldName)) {\r\n return 1;\r\n } else {\r\n return -1;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @description method to sort table in descending order according to given field\r\n * @param fieldName\r\n */\r\n descendingOrder(fieldName: string): void {\r\n this.rowData = this.rowData.sort((a, b) => {\r\n if (this.parseColValue(a, fieldName) > this.parseColValue(b, fieldName)) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @description method to check/uncheck all rows on header checkbox selection/deselection\r\n * @author Tarun Kumar\r\n * @param event\r\n */\r\n onHeaderCheckboxChange(event: any): void {\r\n if (event.target.checked) {\r\n this.rowData = this.rowData.map((data) => {\r\n data.isSelected = true;\r\n return data;\r\n });\r\n this.selectedRow = JSON.parse(JSON.stringify(this.rowData));\r\n this.onCheckboxSelection.emit(this.rowData);\r\n } else {\r\n this.rowData = this.rowData.map((data) => {\r\n data.isSelected = false;\r\n return data;\r\n });\r\n this.selectedRow = [];\r\n this.onCheckboxSelection.emit([]);\r\n }\r\n }\r\n\r\n /**\r\n * @description method to check/uncheck row on row checkbox selection/deselection\r\n * @author Tarun Kumar\r\n * @param event\r\n */\r\n onRowCheckboxSelection(event: any): void {\r\n if (event.target.checked) {\r\n let ind = this.rowData.findIndex(\r\n (item: any) => item.rowId == event.target.id\r\n );\r\n this.rowData[ind].isSelected = true;\r\n if (\r\n this.checkboxSelectionType != 'multiple' &&\r\n this.selectedRow.length > 0\r\n ) {\r\n (\r\n document.getElementById(this.selectedRow[0].rowId) as HTMLInputElement\r\n ).checked = false;\r\n this.selectedRow = [];\r\n }\r\n this.selectedRow.push(this.rowData[ind]);\r\n\r\n this.onCheckboxSelection.emit(this.selectedRow);\r\n } else {\r\n let ind = this.rowData.findIndex(\r\n (item: any) => item.rowId == event.target.id\r\n );\r\n this.rowData[ind].isSelected = false;\r\n let i = this.selectedRow.findIndex(\r\n (item: any) => item.rowId == event.target.id\r\n );\r\n this.selectedRow.splice(i, 1);\r\n this.onCheckboxSelection.emit(this.selectedRow);\r\n }\r\n this.cd.detectChanges();\r\n }\r\n /**\r\n * @description method to check/uncheck all rows on header checkbox selection/deselection\r\n * @author Tarun Kumar\r\n * @param col\r\n * @returns {object}\r\n */\r\n getStyle(col: any): object {\r\n const style: any = {\r\n width: `${col.width ?? 150}px`,\r\n minWidth: `${col.minWidth ?? 50}px`,\r\n };\r\n if (col.isAction) {\r\n style.position = 'sticky';\r\n style.right = '0px';\r\n style.zIndex = 20;\r\n style.background = '#fff';\r\n style.width = '30px';\r\n style.minWidth = '30px';\r\n } else if (col.pinned) {\r\n style.position = 'sticky';\r\n style.left = col.left + 'px';\r\n style.zIndex = 12;\r\n style.background = '#fff';\r\n } else {\r\n style.position = '';\r\n }\r\n\r\n return style;\r\n }\r\n onClickOutside() {\r\n this.showPageSizeList = false;\r\n this.activeFilterIndex = null;\r\n this.menuVisible = this.menuVisible.map(() => false);\r\n }\r\n checkCondition(data: any): boolean {\r\n if (data.status) return true;\r\n else return false;\r\n }\r\n infinityScroll(event: any) {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.rowData.length\r\n ) {\r\n this.onScrollEmitter.emit();\r\n }\r\n }\r\n\r\n checkAllSelected(): boolean {\r\n if (!this.rowData.length) return false;\r\n return this.selectedRow.length == this.rowData.length;\r\n }\r\n checkInterminate(): boolean {\r\n if (!this.rowData.length) return false;\r\n return (\r\n this.selectedRow.length > 0 &&\r\n this.selectedRow.length < this.rowData.length\r\n );\r\n }\r\n\r\n /**\r\n * @author Tarun Kumar\r\n * @description function triggered when the drag starts\r\n * @param {event object, index}\r\n * @returns {void}\r\n */\r\n onDragStart(event: DragEvent, index: number) {\r\n if (this.isResizing) {\r\n event.preventDefault();\r\n return;\r\n }\r\n this.draggedIndex = index;\r\n event.dataTransfer?.setData('text/plain', index.toString());\r\n }\r\n\r\n /**\r\n * @author Tarun Kumar\r\n * @description function to track the index of the element being dragged over and allow dropping\r\n * @param {event object, index}\r\n * @returns {void}\r\n */\r\n onDragOver(event: DragEvent, index: number) {\r\n event.preventDefault();\r\n this.isResizing = false;\r\n if (this.dragOverIndex !== index) {\r\n this.dragOverIndex = index;\r\n }\r\n }\r\n\r\n /**\r\n * @author Tarun Kumar\r\n * @description function to Reorder the items on drop\r\n * @param {event object, index}\r\n * @returns {void}\r\n */\r\n onDrop(event: DragEvent, index: number) {\r\n event.preventDefault();\r\n if (this.draggedIndex === null) return;\r\n const draggedItem = this.colDefs[this.draggedIndex];\r\n this.colDefs.splice(this.draggedIndex, 1);\r\n this.colDefs.splice(index, 0, draggedItem);\r\n this.draggedIndex = null;\r\n this.dragOverIndex = null;\r\n }\r\n\r\n /**\r\n * @author Tarun Kumar\r\n * @description function to reset dragOverIndex when the drag ends\r\n * @param {none}\r\n * @returns {void}\r\n */\r\n onDragEnd() {\r\n this.draggedIndex = null;\r\n this.dragOverIndex = null;\r\n }\r\n\r\n toggleFilter(col: any, index: number, event: MouseEvent) {\r\n event.stopPropagation(); // prevent header click from triggering sort\r\n this.activeFilterIndex = this.activeFilterIndex === index ? null : index;\r\n this.menuVisible = this.menuVisible.map(() => false);\r\n }\r\n}\r\n","<div class=\"tableArea\">\r\n <div\r\n class=\"table_wrapper\"\r\n id=\"container_scroll\"\r\n (scroll)=\"infinityScroll($event)\"\r\n [ngStyle]=\"{ height: height + 'px' }\"\r\n >\r\n <table cellspacing=\"0\" cellpadding=\"0\">\r\n <thead class=\"sticky-top\">\r\n <tr>\r\n @if (checkBoxSelection && checkboxSelectionType == 'multiple') {\r\n <th style=\"width: 50px\">\r\n <span\r\n ><input\r\n class=\"form-check-input cursor-pointer\"\r\n type=\"checkbox\"\r\n name=\"\"\r\n id=\"\"\r\n [checked]=\"checkAllSelected()\"\r\n [indeterminate]=\"checkInterminate()\"\r\n (change)=\"onHeaderCheckboxChange($event)\"\r\n /></span>\r\n </th>\r\n } @for (col of colDefs; track $index) {\r\n <th\r\n [ngStyle]=\"getStyle(col)\"\r\n [ngClass]=\"{ 'drag-over': dragOverIndex === $index }\"\r\n [draggable]=\"!isResizing\"\r\n (dragstart)=\"onDragStart($event, $index)\"\r\n (dragover)=\"onDragOver($event, $index)\"\r\n (drop)=\"onDrop($event, $index)\"\r\n (dragend)=\"onDragEnd()\"\r\n >\r\n <div class=\"th_wraper\">\r\n <div\r\n class=\"flex-center\"\r\n [ngStyle]=\"getStyle(col)\"\r\n (click)=\"onSortingRowData($index, col)\"\r\n >\r\n <span class=\"ellipsis headerName\">{{ col?.headerName }}</span>\r\n\r\n @if (sortingRequired && sortingColumnIndex == $index &&\r\n col?.sortable) {\r\n <span class=\"headerName-icon\">\r\n <ul class=\"\">\r\n @if(sortingType){\r\n <li class=\"cursor-pointer\">\r\n <img\r\n src=\"images/sort_up.svg\"\r\n class=\"sorting_up\"\r\n [ngClass]=\"\r\n sortingColumnIndex == $index && sortingType == 'asc'\r\n ? 'd-none'\r\n : ''\r\n \"\r\n />\r\n </li>\r\n <li class=\"cursor-pointer\">\r\n <!-- <i class=\"fa fa-caret-down\" [ngClass]=\"sortingColumnIndex == $index && sortingType == 'dsc' ? 'muted_sort' : ''\"></i> -->\r\n <img\r\n src=\"images/sort_down.svg\"\r\n class=\"sorting_down\"\r\n [ngClass]=\"\r\n sortingColumnIndex == $index && sortingType == 'dsc'\r\n ? 'd-none'\r\n : ''\r\n \"\r\n />\r\n </li>\r\n\r\n }\r\n </ul>\r\n </span>\r\n\r\n }\r\n </div>\r\n <div class=\"filter_three_dot_wrapper\">\r\n <!-- Column Filters Logic-->\r\n @if(filterRequired && col.filterable){\r\n <div\r\n class=\"filters\"\r\n (click)=\"toggleFilter(col, $index, $event)\"\r\n >\r\n <img\r\n src=\"images/filter-icon.svg\"\r\n class=\"filter-icon\"\r\n [ngClass]=\"\r\n activeFilters.has(col.fieldName)\r\n ? 'filter-icon-active'\r\n : 'filter-icon'\r\n \"\r\n />\r\n\r\n @if (activeFilterIndex === $index) {\r\n <div\r\n class=\"filter-popup\"\r\n id=\"filter-popup-{{ $index }}\"\r\n (click)=\"$event.stopPropagation()\"\r\n appOutsideClick\r\n (clickOutside)=\"onClickOutside()\"\r\n >\r\n <!-- Text Filter -->\r\n @if(col.filterType === 'text'){\r\n <select [(ngModel)]=\"col.textFilters[0].filterType\">\r\n <option value=\"contains\">Contains</option>\r\n <option value=\"doesNotContain\">Does Not Contain</option>\r\n <option value=\"equals\">Equals</option>\r\n <option value=\"doesNotEqual\">Does Not Equal</option>\r\n <option value=\"startsWith\">Starts With</option>\r\n <option value=\"endsWith\">Ends With</option>\r\n </select>\r\n\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.textFilters[0].filterValue\"\r\n placeholder=\"Filter…\"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n\r\n @if(col.textFilters[0].filterValue){\r\n <div class=\"logic-row\">\r\n <label class=\"logic-item\">\r\n <input\r\n type=\"radio\"\r\n name=\"textLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.textLogic\"\r\n value=\"AND\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n AND\r\n </label>\r\n\r\n <label class=\"logic-item\">\r\n <input\r\n type=\"radio\"\r\n name=\"textLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.textLogic\"\r\n value=\"OR\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n OR\r\n </label>\r\n </div>\r\n\r\n <select [(ngModel)]=\"col.textFilters[1].filterType\">\r\n <option value=\"contains\">Contains</option>\r\n <option value=\"doesNotContain\">Does Not Contain</option>\r\n <option value=\"equals\">Equals</option>\r\n <option value=\"doesNotEqual\">Does Not Equal</option>\r\n <option value=\"startsWith\">Starts With</option>\r\n <option value=\"endsWith\">Ends With</option>\r\n </select>\r\n\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.textFilters[1].filterValue\"\r\n placeholder=\"Filter…\"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n } }\r\n\r\n <!-- Number Filter -->\r\n @if(col.filterType === 'number'){\r\n <select [(ngModel)]=\"col.numberFilters[0].filterType\">\r\n <option value=\"=\">Equals</option>\r\n <option value=\">\">Greater Than</option>\r\n <option value=\"<\">Less Than</option>\r\n <option value=\">=\">>=</option>\r\n <option value=\"<=\"><=</option>\r\n </select>\r\n\r\n <input\r\n type=\"number\"\r\n [(ngModel)]=\"col.numberFilters[0].numberValue\"\r\n (input)=\"applyAllFilters()\"\r\n />\r\n\r\n @if(col.numberFilters[0].numberValue){\r\n <div class=\"logic-row\">\r\n <label class=\"logic-item\">\r\n <input\r\n type=\"radio\"\r\n name=\"textLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.textLogic\"\r\n value=\"AND\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n AND\r\n </label>\r\n\r\n <label class=\"logic-item\">\r\n <input\r\n type=\"radio\"\r\n name=\"textLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.textLogic\"\r\n value=\"OR\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n OR\r\n </label>\r\n </div>\r\n\r\n <select [(ngModel)]=\"col.numberFilters[1].filterType\">\r\n <option value=\"=\">Equals</option>\r\n <option value=\">\">Greater Than</option>\r\n <option value=\"<\">Less Than</option>\r\n <option value=\">=\">>=</option>\r\n <option value=\"<=\"><=</option>\r\n </select>\r\n\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.numberFilters[1].numberValue\"\r\n placeholder=\"Filter…\"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n } }\r\n\r\n <!-- DATE FILTER -->\r\n @if(col.filterType === 'date'){\r\n <select [(ngModel)]=\"col.dateFilters[0].filterType\">\r\n <option value=\"=\">Equals</option>\r\n <option value=\">\">Greater Than</option>\r\n <option value=\"<\">Less Than</option>\r\n <option value=\">=\">>=</option>\r\n <option value=\"<=\"><=</option>\r\n </select>\r\n <input\r\n type=\"date\"\r\n [(ngModel)]=\"col.dateFilters[0].dateValue\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n\r\n @if(col.dateFilters[0].dateValue){\r\n <div class=\"logic-row\">\r\n <label class=\"logic-item\">\r\n <input\r\n type=\"radio\"\r\n name=\"textLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.textLogic\"\r\n value=\"AND\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n AND\r\n </label>\r\n\r\n <label class=\"logic-item\">\r\n <input\r\n type=\"radio\"\r\n name=\"textLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.textLogic\"\r\n value=\"OR\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n OR\r\n </label>\r\n </div>\r\n <select [(ngModel)]=\"col.dateFilters[1].filterType\">\r\n <option value=\"=\">Equals</option>\r\n <option value=\">\">Greater Than</option>\r\n <option value=\"<\">Less Than</option>\r\n <option value=\">=\">>=</option>\r\n <option value=\"<=\"><=</option>\r\n </select>\r\n <input\r\n type=\"date\"\r\n [(ngModel)]=\"col.dateFilters[1].dateValue\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n } }\r\n\r\n <!-- SET FILTER (CHECKBOX LIST) -->\r\n @if(col.filterType === 'set'){\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search...\"\r\n (input)=\"filterSetOptions(col, $event)\"\r\n />\r\n\r\n <div class=\"set-options\">\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isAllSelected(col)\"\r\n (change)=\"toggleSelectAll(col, $event)\"\r\n />\r\n (Select All)\r\n </label>\r\n\r\n @for(opt of col.filteredOptions; track $index){\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"col.selectedValues.has(opt)\"\r\n (change)=\"toggleSetOption(col, opt, $event)\"\r\n />\r\n {{ opt }}\r\n </label>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Three dots menu-->\r\n @if(threeDotsMenuRequired && col.columnAction){\r\n\r\n <div class=\"three-dots\" (click)=\"openMenu($event, col, $index)\">\r\n <img src=\"images/more-vertical.svg\" />\r\n </div>\r\n } @if(!col.isAction){\r\n <span\r\n class=\"resize-handle\"\r\n (mousedown)=\"startResize($event, $index)\"\r\n >\r\n |\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- popup open -->\r\n @if(menuVisible[$index]){\r\n <div\r\n class=\"column-menu\"\r\n [ngStyle]=\"menuPosition[$index]\"\r\n (click)=\"$event.stopPropagation()\"\r\n appOutsideClick\r\n (clickOutside)=\"onClickOutside()\"\r\n >\r\n <ul>\r\n @if(sortingType === 'dsc' || sortingType === ''){\r\n <li (click)=\"onSort(col?.fieldName, 'asc')\">\r\n <img src=\"images/arrow-up.svg\" class=\"sorting_up\" />\r\n Sort Ascending\r\n </li>\r\n } @if(sortingType === 'asc' || sortingType === ''){\r\n <li (click)=\"onSort(col?.fieldName, 'dsc')\">\r\n <img src=\"images/arrow-down.svg\" class=\"sorting_up\" />\r\n Sort Descending\r\n </li>\r\n } @if(sortingType === 'asc' || sortingType === 'dsc'){\r\n <li (click)=\"onSort(col?.fieldName, '')\">\r\n <span>\r\n <img src=\"images/chevron-up.svg\" class=\"sorting_up\" />\r\n <img src=\"images/chevron-down.svg\" class=\"sorting_up\" />\r\n </span>\r\n Clear Sort\r\n </li>\r\n }\r\n <li (click)=\"pinColumn(col, $index)\">\r\n <img src=\"images/pin.svg\" class=\"sorting_up\" />\r\n {{ col.pinned ? \"Unpin Column\" : \"Pin Column\" }}\r\n </li>\r\n </ul>\r\n </div>\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if(groupedResult && groupedResult.length > 0){ @for(group of\r\n groupedResult; track group.key){\r\n <tr (click)=\"toggleGroup(group)\">\r\n <td\r\n class=\"group-cell\"\r\n [attr.colspan]=\"colDefs.length + (checkBoxSelection ? 1 : 0)\"\r\n >\r\n <span class=\"group-toggle\">\r\n <img\r\n src=\"images/{{\r\n group.expanded ? 'chevron-down.svg' : 'chevron-right.svg'\r\n }}\"\r\n />\r\n {{ group.key }} ({{ group.children.length }})\r\n </span>\r\n </td>\r\n </tr>\r\n\r\n @if(group.expanded){\r\n <!-- CASE 1: CHILDREN ARE MORE GROUPS -->\r\n @if (group.children[0]?.children) { @for (child of group.children; track\r\n child.key) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: child,\r\n colDefs: colDefs,\r\n checkBoxSelection: checkBoxSelection,\r\n level: 1\r\n }\"\r\n ></ng-container>\r\n } }\r\n\r\n <!-- CASE 2: CHILDREN ARE RAW ROWS -->\r\n @if (!group.children[0]?.children) { @for (row of group.children; track\r\n row.rowId) {\r\n <tr [ngClass]=\"row | addClass : tableOptions\">\r\n <!-- Checkbox column if any -->\r\n @if (checkBoxSelection) {\r\n <td>\r\n <input type=\"checkbox\" [checked]=\"row.isSelected\" />\r\n </td>\r\n }\r\n\r\n <!-- Render columns -->\r\n @for (col of colDefs; track $index) {\r\n <td [ngStyle]=\"getStyle(col)\">\r\n {{ row[col.fieldName] }}\r\n </td>\r\n }\r\n </tr>\r\n } } } } } @else{ @for (data of rowData; track data.rowId) {\r\n <tr [ngClass]=\"data | addClass : tableOptions\">\r\n @if (checkBoxSelection) {\r\n <td style=\"min-width: 50px\">\r\n @if (checkboxSelectionType=='multiple') {\r\n <span\r\n ><input\r\n type=\"checkbox\"\r\n class=\"form-check-input pointer\"\r\n name=\"\"\r\n id=\"{{ data.rowId }}\"\r\n [checked]=\"data?.isSelected\"\r\n (change)=\"onRowCheckboxSelection($event)\"\r\n /></span>\r\n\r\n }@else{\r\n <span class=\"checkboxInput\">\r\n <input\r\n type=\"radio\"\r\n name=\"\"\r\n id=\"{{ data.rowId }}\"\r\n [checked]=\"data?.isSelected\"\r\n (change)=\"onRowCheckboxSelection($event)\"\r\n />\r\n </span>\r\n\r\n }\r\n </td>\r\n } @for (col of colDefs; track $index) {\r\n <td\r\n [ngStyle]=\"getStyle(col)\"\r\n [ngClass]=\"[\r\n col?.addClass ? col.addClass(data) : '',\r\n col.pinned ? 'pinned' : ''\r\n ]\"\r\n >\r\n @if (!col?.cellRenderer) {\r\n <div class=\"cell-value\">\r\n <div\r\n class=\"more_data_wrapper\"\r\n [ngClass]=\"{ ellipsis: !col.wrapText }\"\r\n >\r\n {{ parseColValue(data, col.fieldName) }}\r\n </div>\r\n <div class=\"see_more_data\">\r\n <div class=\"item\">\r\n <span class=\"desc\">\r\n {{ parseColValue(data, col.fieldName) }}</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n } @else{\r\n <div\r\n [rowParam]=\"data\"\r\n [col]=\"col\"\r\n [api]=\"tableOptions\"\r\n [currentValue]=\"data[col.fieldName]\"\r\n appRendererParser\r\n ></div>\r\n }\r\n <!-- Commented for later use -->\r\n <!-- <div class=\"tool_tip\">\r\n <span class=\"\"> {{ parseColValue(data, col.fieldName) }}aditya </span>\r\n </div> -->\r\n </td>\r\n }\r\n </tr>\r\n } @empty {\r\n <tr>\r\n <td [attr.colspan]=\"colDefs.length + 1\">\r\n <div class=\"small_data\">\r\n @if (tableOptions?.noDataTemplate) {\r\n <ng-container\r\n *ngTemplateOutlet=\"tableOptions?.noDataTemplate\"\r\n ></ng-container>\r\n\r\n }@else{\r\n <!-- need to style it properly then we will add it -->\r\n <span>No Data To Show</span>\r\n\r\n }\r\n </div>\r\n </td>\r\n </tr>\r\n\r\n } }\r\n </tbody>\r\n\r\n <ng-template\r\n #groupTemplate\r\n let-node\r\n let-colDefs=\"colDefs\"\r\n let-checkBoxSelection=\"checkBoxSelection\"\r\n let-level=\"level\"\r\n >\r\n <!-- GROUP HEADER -->\r\n <tr (click)=\"toggleGroup(node)\">\r\n <td\r\n [attr.colspan]=\"colDefs.length + (checkBoxSelection ? 1 : 0)\"\r\n [style.paddingLeft.px]=\"level * 20\"\r\n class=\"group-cell\"\r\n >\r\n <span class=\"group-toggle\">\r\n <img\r\n src=\"images/{{\r\n node.expanded ? 'chevron-down.svg' : 'chevron-right.svg'\r\n }}\"\r\n />\r\n {{ node.key }} ({{ node.children.length }})\r\n </span>\r\n </td>\r\n </tr>\r\n\r\n <!-- CHILDREN -->\r\n @if (node.expanded) {\r\n\r\n <!-- CASE: more groups -->\r\n @if (node.children[0]?.children) { @for (child of node.children; track\r\n child.key) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: child,\r\n colDefs: colDefs,\r\n checkBoxSelection: checkBoxSelection,\r\n level: level + 1\r\n }\"\r\n >\r\n </ng-container>\r\n } }\r\n\r\n <!-- CASE: final rows -->\r\n @if (!node.children[0]?.children) { @for (row of node.children; track\r\n row.rowId) {\r\n <tr>\r\n @if (checkBoxSelection) {\r\n <td><input type=\"checkbox\" [checked]=\"row.isSelected\" /></td>\r\n } @for (col of colDefs; track $index) {\r\n <td>{{ row[col.fieldName] }}</td>\r\n }\r\n </tr>\r\n } } }\r\n </ng-template>\r\n </table>\r\n </div>\r\n <!-- Table Wrapper Ends-->\r\n @if(paginationRequired){\r\n <div class=\"pagination_main\">\r\n <div class=\"entries_details\">\r\n <span>Showing</span>\r\n <div\r\n class=\"pagination_select\"\r\n appOutsideClick\r\n (clickOutside)=\"onClickOutside()\"\r\n >\r\n <div\r\n class=\"select_dropdown pointer\"\r\n (click)=\"showPageSizeList = !showPageSizeList\"\r\n >\r\n <p class=\"select_text mb-0\">{{ pageDetails.pageSize }}</p>\r\n <span class=\"chevron_img\">\r\n <img src=\"images/chevron-down.svg\" class=\"pointer\" />\r\n </span>\r\n </div>\r\n @if(showPageSizeList){\r\n <div class=\"select_option\">\r\n @for(option of pageSizeList;track $index){\r\n <span\r\n class=\"pointer\"\r\n (click)=\"onPageSizeChanged(option); onClickOutside()\"\r\n >{{ option }}</span\r\n >\r\n }\r\n </div>\r\n }\r\n </div>\r\n <span\r\n >Rows | {{ totalRecords > 0 ? recordsToShow.min + 1 : 0 }} -\r\n {{\r\n recordsToShow.max > totalRecords ? totalRecords : recordsToShow.max\r\n }}\r\n of\r\n {{ totalRecords }} Entries</span\r\n >\r\n </div>\r\n <div class=\"pagination_form flex-center\">\r\n <span>Page</span>\r\n\r\n <button\r\n class=\"outlined_btn prev_btn\"\r\n [ngClass]=\"pageDetails.currentPage > 1 ? '' : 'disable_btn'\"\r\n type=\"button\"\r\n (click)=\"onBtPrevClick()\"\r\n >\r\n <span> < </span>\r\n </button>\r\n <div>\r\n <input\r\n class=\"input_style right\"\r\n type=\"number\"\r\n [(ngModel)]=\"pageDetails.currentPage\"\r\n (change)=\"goToSelectedPage($event)\"\r\n name=\"\"\r\n id=\"\"\r\n />\r\n </div>\r\n <button\r\n class=\"outlined_btn next_btn\"\r\n type=\"button\"\r\n [ngClass]=\"\r\n pageDetails.currentPage < pageDetails.totalPages ? '' : 'disable_btn'\r\n \"\r\n (click)=\"onBtNextClick()\"\r\n >\r\n <span> > </span>\r\n </button>\r\n <span>of {{ pageDetails.totalPages }}</span>\r\n </div>\r\n </div>\r\n }\r\n <!-- Pagination Ends -->\r\n</div>\r\n","/*\r\n * Public API Surface of cats-data-grid\r\n */\r\n\r\nexport * from './lib/services/cats-data-grid.service';\r\nexport * from './lib/cats-data-grid.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cats-data-grid.mjs","sources":["../../../projects/cats-data-grid/src/lib/services/cats-data-grid.service.ts","../../../projects/cats-data-grid/src/lib/pipes/add-class.pipe.ts","../../../projects/cats-data-grid/src/lib/directives/outside-click.directive.ts","../../../projects/cats-data-grid/src/lib/directives/renderer-parser.directive.ts","../../../projects/cats-data-grid/src/lib/common-components/common-input/common-input.component.ts","../../../projects/cats-data-grid/src/lib/common-components/common-input/common-input.component.html","../../../projects/cats-data-grid/src/lib/directives/adaptive-position.directive.ts","../../../projects/cats-data-grid/src/lib/common-components/common-calendar/common-calendar.component.ts","../../../projects/cats-data-grid/src/lib/common-components/common-calendar/common-calendar.component.html","../../../projects/cats-data-grid/src/lib/cats-data-grid.component.ts","../../../projects/cats-data-grid/src/lib/cats-data-grid.component.html","../../../projects/cats-data-grid/src/public-api.ts","../../../projects/cats-data-grid/src/cats-data-grid.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CatsDataGridService {\r\n\r\n constructor() { }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'addClass'\r\n})\r\nexport class AddClassPipe implements PipeTransform {\r\n\r\n transform(value: any, tableOption: any): string {\r\n if (tableOption?.addClasses) {\r\n return tableOption.addClasses(value)\r\n }\r\n return '';\r\n }\r\n\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appOutsideClick]',\r\n standalone: true,\r\n})\r\nexport class OutsideClickDirective implements OnInit, OnDestroy {\r\n @Output() clickOutside = new EventEmitter();\r\n constructor(private elementRef: ElementRef) {}\r\n private onClick = (event: MouseEvent) => {\r\n const target = event.target as HTMLElement;\r\n if (!this.elementRef.nativeElement.contains(target)) {\r\n this.clickOutside.emit(event);\r\n }\r\n };\r\n\r\n ngOnInit() {\r\n document.addEventListener('click', this.onClick, true);\r\n }\r\n\r\n ngOnDestroy() {\r\n document.removeEventListener('click', this.onClick, true);\r\n }\r\n}\r\n","import {\r\n Component,\r\n Directive,\r\n ElementRef,\r\n Input,\r\n OnInit,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appRendererParser]',\r\n})\r\nexport class RendererParserDirective implements OnInit {\r\n @Input() rowParam: any;\r\n @Input() col: any;\r\n @Input() api: any;\r\n @Input() currentValue: any;\r\n ref: any;\r\n constructor(private el: ViewContainerRef, private er: ElementRef) {}\r\n ngOnInit() {\r\n this.el?.clear();\r\n let params: any = {\r\n data: this.rowParam,\r\n value: this.currentValue,\r\n cellParams: this.col?.cellRendererParams,\r\n col: this.col,\r\n };\r\n if (\r\n this.col?.cellRenderer?.prototype &&\r\n this.col.cellRenderer.prototype?.constructor == this.col.cellRenderer\r\n ) {\r\n this.ref = this.el.createComponent(this.col?.cellRenderer);\r\n this.ref.instance?.cellInit(params, this.api);\r\n } else if (typeof this.col?.cellRenderer == 'function') {\r\n let newDiv = document.createElement('div');\r\n newDiv.className = 'more_data_wrapper';\r\n newDiv.innerHTML = this.col.cellRenderer(params);\r\n let toltipDiv = document.createElement('div');\r\n let itemDiv = document.createElement('div');\r\n let descDiv = document.createElement('div');\r\n toltipDiv.className = 'see_more_data';\r\n itemDiv.className = 'item';\r\n descDiv.className = 'desc';\r\n descDiv.innerHTML = newDiv.innerText;\r\n itemDiv.appendChild(descDiv);\r\n toltipDiv.appendChild(itemDiv);\r\n this.er.nativeElement.appendChild(newDiv);\r\n this.er.nativeElement.appendChild(toltipDiv);\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-common-input',\r\n imports: [CommonModule],\r\n templateUrl: './common-input.component.html',\r\n styleUrl: './common-input.component.scss',\r\n})\r\nexport class CommonInputComponent {\r\n @Input() options: { label: string; value: any }[] = [];\r\n @Input() selectedValue: any;\r\n @Input() placeholder = 'Select';\r\n @Input() elementType = 'dropdown';\r\n\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n showDropdown = false;\r\n\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n }\r\n\r\n selectOption(option: any): void {\r\n this.selectedValue = option.value;\r\n this.valueChange.emit(option.value);\r\n this.showDropdown = false;\r\n }\r\n\r\n get selectedLabel(): string {\r\n return (\r\n this.options.find((o) => o.value === this.selectedValue)?.label ||\r\n this.placeholder\r\n );\r\n }\r\n\r\n // optional: close on outside click\r\n @HostListener('document:click', ['$event'])\r\n closeOnOutsideClick(event: MouseEvent): void {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.text_filter_section')) {\r\n this.showDropdown = false;\r\n }\r\n }\r\n}\r\n","<!-- dropdown -->\r\n@if(elementType === 'dropdown'){\r\n<div class=\"text_filter_section\">\r\n <div class=\"single_select_dropdown\" (click)=\"toggleDropdown()\">\r\n <div class=\"left_details\">\r\n <span class=\"placeholderColor textTruncate\">\r\n {{ selectedLabel }}\r\n </span>\r\n </div>\r\n\r\n <span class=\"arrow_icon\">\r\n <img\r\n src=\"images/chevron-up.svg\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n src=\"images/chevron-down.svg\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </span>\r\n </div>\r\n\r\n @if (showDropdown) {\r\n <div class=\"dropdown_list\" id=\"container_scroll\">\r\n <ul>\r\n @for (option of options; track option.value) {\r\n <li (click)=\"selectOption(option)\">\r\n <span class=\"textTruncate\">{{ option.label }}</span>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Input,\r\n Renderer2,\r\n HostListener,\r\n OnDestroy,\r\n AfterViewInit,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[adaptivePosition]',\r\n})\r\nexport class AdaptivePositionDirective implements AfterViewInit, OnDestroy {\r\n @Input('adaptive') dropdown!: HTMLElement;\r\n @Input() trigger!: HTMLElement;\r\n @Input() parentContainer!: HTMLElement;\r\n @Input() matchWidth: boolean = true;\r\n @Input() closeOnOutside: boolean = true;\r\n @Input() isAction: boolean = false;\r\n @Input() isColumnActionMenu: boolean = false;\r\n\r\n resizeObserver!: ResizeObserver;\r\n isOpen = false;\r\n menuItems: HTMLElement[] = [];\r\n focusedIndex = -1;\r\n\r\n constructor(private host: ElementRef) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.setupBaseStyles();\r\n this.observeResize();\r\n }\r\n\r\n // @HostListener('click', ['$event'])\r\n // toggle(event: Event) {\r\n // event.stopPropagation();\r\n // this.isOpen ? this.close() : this.open();\r\n // }\r\n\r\n open() {\r\n this.isOpen = true;\r\n this.dropdown.classList.remove('hidden');\r\n this.dropdown.setAttribute('role', 'listbox');\r\n this.host.nativeElement.setAttribute('aria-expanded', 'true');\r\n this.prepareItems();\r\n this.positionDropdown();\r\n\r\n if (this.closeOnOutside)\r\n document.addEventListener('click', this.handleOutsideClick);\r\n }\r\n\r\n close() {\r\n this.isOpen = false;\r\n this.dropdown.classList.add('hidden');\r\n this.host.nativeElement.setAttribute('aria-expanded', 'false');\r\n document.removeEventListener('click', this.handleOutsideClick);\r\n this.focusedIndex = -1;\r\n }\r\n\r\n positionDropdown() {\r\n if (!this.trigger) return;\r\n\r\n const dropdown = this.host.nativeElement;\r\n const parent =\r\n this.parentContainer ||\r\n this.trigger.closest('.table_wrapper') ||\r\n document.body ||\r\n this.trigger.offsetParent!;\r\n if (!parent) return;\r\n\r\n const t = this.trigger.getBoundingClientRect();\r\n const p = parent.getBoundingClientRect();\r\n const dH = dropdown.offsetHeight;\r\n const dW = dropdown.offsetWidth;\r\n\r\n const spaceBelow = p.bottom - t.bottom;\r\n const spaceAbove = t.top - p.top;\r\n const spaceRight = p.right - t.left;\r\n const spaceLeft = t.right - p.left;\r\n\r\n if (spaceBelow < dH && spaceAbove > dH) {\r\n dropdown.style.bottom = `${this.trigger.offsetHeight}px`;\r\n dropdown.style.top = 'auto';\r\n dropdown.classList.add('drop-up');\r\n dropdown.classList.remove('drop-down');\r\n }\r\n\r\n if (spaceRight < dW && spaceLeft > dW) {\r\n dropdown.style.right = '0';\r\n dropdown.style.left = 'auto';\r\n dropdown.classList.add('align-right');\r\n if (this.isColumnActionMenu) dropdown.style.right = '0';\r\n }\r\n\r\n if (this.isAction) dropdown.style.right = '70px';\r\n if (this.matchWidth) dropdown.style.width = `${this.trigger.offsetWidth}px`;\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n handleKeys(e: KeyboardEvent) {\r\n if (!this.isOpen) return;\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n this.moveFocus(1);\r\n e.preventDefault();\r\n break;\r\n case 'ArrowUp':\r\n this.moveFocus(-1);\r\n e.preventDefault();\r\n break;\r\n case 'Home':\r\n this.focusItem(0);\r\n e.preventDefault();\r\n break;\r\n case 'End':\r\n this.focusItem(this.menuItems.length - 1);\r\n e.preventDefault();\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n this.selectFocused();\r\n e.preventDefault();\r\n break;\r\n case 'Escape':\r\n this.close();\r\n break;\r\n }\r\n }\r\n\r\n moveFocus(delta: number) {\r\n this.focusedIndex =\r\n (this.focusedIndex + delta + this.menuItems.length) %\r\n this.menuItems.length;\r\n this.focusItem(this.focusedIndex);\r\n }\r\n\r\n focusItem(index: number) {\r\n this.focusedIndex = index;\r\n this.menuItems.forEach((i) => i.classList.remove('focused'));\r\n\r\n const item = this.menuItems[index];\r\n item.classList.add('focused');\r\n item.scrollIntoView({ block: 'nearest' });\r\n }\r\n\r\n selectFocused() {\r\n if (this.focusedIndex >= 0) this.menuItems[this.focusedIndex].click();\r\n this.close();\r\n }\r\n\r\n prepareItems() {\r\n this.menuItems = Array.from(\r\n this.dropdown.querySelectorAll('[role=\"option\"], li, div')\r\n );\r\n this.menuItems.forEach((el) => el.setAttribute('tabindex', '-1'));\r\n }\r\n\r\n handleOutsideClick = (e: Event) => {\r\n const target = e.target;\r\n if (\r\n !(target instanceof Node) ||\r\n (!this.host.nativeElement.contains(target) &&\r\n !this.dropdown.contains(target))\r\n ) {\r\n this.close();\r\n }\r\n };\r\n\r\n setupBaseStyles() {\r\n const dropdown = this.host.nativeElement;\r\n dropdown.style.position = 'absolute';\r\n this.host.nativeElement.setAttribute('role', 'button');\r\n this.positionDropdown();\r\n }\r\n\r\n observeResize() {\r\n const parent = this.parentContainer || this.host.nativeElement.offsetParent;\r\n this.resizeObserver = new ResizeObserver(() => {\r\n if (this.isOpen) this.positionDropdown();\r\n });\r\n this.resizeObserver.observe(this.host.nativeElement);\r\n this.resizeObserver.observe(this.trigger);\r\n if (parent) this.resizeObserver.observe(parent);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.resizeObserver?.disconnect();\r\n document.removeEventListener('click', this.handleOutsideClick);\r\n }\r\n}\r\n","import { CommonModule, DatePipe } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\n\r\nexport interface DateConfig {\r\n selectionMode: 'single' | 'range';\r\n enableTime?: boolean;\r\n}\r\nexport interface IRange {\r\n value: Date;\r\n label: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-common-calendar',\r\n\r\n imports: [CommonModule, OutsideClickDirective],\r\n templateUrl: './common-calendar.component.html',\r\n styleUrl: './common-calendar.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: CommonCalendarComponent,\r\n multi: true,\r\n },\r\n DatePipe,\r\n ],\r\n})\r\nexport class CommonCalendarComponent implements OnInit, OnChanges {\r\n @Output() dateTimeSelected = new EventEmitter<any>();\r\n @Input() dateConfig!: DateConfig;\r\n @Input() minDate?: string;\r\n @Input() maxDate?: string;\r\n @Input() preSelectedValue: any;\r\n selectedDateTime: any;\r\n currentDate = new Date();\r\n currentMonth = this.currentDate.getMonth();\r\n currentYear = this.currentDate.getFullYear();\r\n selectedDate: number | null = null;\r\n selectedTime: string | null = null;\r\n calendar: number[][] = [];\r\n timeSlots: IRange[] = [];\r\n rangeStart: number | null = null;\r\n rangeEnd: number | null = null;\r\n selectedMonth: any;\r\n selectedYear: any;\r\n control!: AbstractControl<any, any>;\r\n disableControl: boolean = false;\r\n date: any = '';\r\n calendarView: string = 'defaultView';\r\n yearRange: number[] = [];\r\n daysInMonth: any[] = [];\r\n selectedDay: number = 0;\r\n selectedStartDate: any;\r\n selectedEndDate: any;\r\n isOpen: boolean = false;\r\n showYearSelector = false;\r\n monthRange: any = {\r\n '0': 'JAN',\r\n '01': 'FEB',\r\n '02': 'MAR',\r\n '03': 'APR',\r\n '04': 'MAY',\r\n '05': 'JUN',\r\n '06': 'JUL',\r\n '07': 'AUG',\r\n '08': 'SEP',\r\n '09': 'OCT',\r\n '10': 'NOV',\r\n '11': 'DEC',\r\n };\r\n constructor(\r\n // @Inject(LOCALE_ID) private locale: string,\r\n private cd: ChangeDetectorRef,\r\n private datePipe: DatePipe\r\n ) {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['selectedDateTime']?.currentValue) {\r\n this.selectedDateTime = [];\r\n } else {\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n ngOnInit(): void {\r\n this.generateYearRange();\r\n // this.generateCalendar();\r\n this.generateTimeRanges();\r\n if (this.preSelectedValue) {\r\n this.initializeCalendar();\r\n }\r\n }\r\n\r\n private onTouchedCallback: () => void = () => {};\r\n private onChangeCallback: (_: any) => void = () => {};\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.selectedDateTime = value;\r\n this.onChangeCallback(value);\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (this.control) {\r\n isDisabled ? this.control.disable() : this.control.enable();\r\n }\r\n }\r\n /**\r\n * @description Validates date time picker component\r\n * @author Shiva Kant\r\n * @param control\r\n * @returns validate\r\n */\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n this.control = control;\r\n const selected = this.date ? new Date(this.date) : null;\r\n\r\n // Check required manually\r\n const isRequired =\r\n control.validator && control.validator(control)?.['required'];\r\n\r\n if (\r\n (isRequired || control.hasError('required')) &&\r\n (!this.date || !this.selectedDay)\r\n ) {\r\n return { required: true };\r\n } else if (this.minDate && selected && selected < new Date(this.minDate)) {\r\n return { minDate: true };\r\n } else if (this.maxDate && selected && selected > new Date(this.maxDate)) {\r\n return { maxDate: true };\r\n }\r\n\r\n return null;\r\n }\r\n /**\r\n * @description method to toggleCalendar\r\n * @author Shiva Kant\r\n */\r\n toggleCalendar(): void {\r\n this.isOpen = !this.isOpen;\r\n if (this.date && this.isOpen) {\r\n this.currentDate = new Date(this.date);\r\n this.selectedDay = this.currentDate.getDate();\r\n }\r\n this.calendarView = 'defaultView';\r\n this.generateCalendar();\r\n if (this.isOpen) {\r\n let ele = document.getElementsByClassName('calendar-footer');\r\n setTimeout(() => {\r\n ele[0]?.scrollIntoView();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @description Closes calendar\r\n * @author Shiva Kant\r\n */\r\n closeCalendar(): void {\r\n this.isOpen = false;\r\n this.calendarView = 'defaultView';\r\n }\r\n /**\r\n * @description Method to Gets month year\r\n * @author Shiva Kant\r\n * @returns month year\r\n */\r\n getMonthYear(): { month: string; year: string } {\r\n return {\r\n month: this.currentDate.toLocaleString('default', {\r\n month: 'long',\r\n }),\r\n year: this.currentDate.toLocaleString('default', {\r\n year: 'numeric',\r\n }),\r\n };\r\n }\r\n\r\n /**\r\n * @description Method to Updates current year month\r\n * @author Shiva Kant\r\n */\r\n updateCurrentYearMonth(): void {\r\n this.currentYear = this.currentDate.getFullYear();\r\n this.currentMonth = this.currentDate.getMonth();\r\n }\r\n\r\n /**\r\n * @description Method to Selects year\r\n * @author Shiva Kant\r\n * @param year\r\n */\r\n selectYear(year: number): void {\r\n this.currentDate.setFullYear(year);\r\n this.updateCurrentYearMonth();\r\n this.showYearSelector = false;\r\n this.calendarView = 'defaultView';\r\n this.selectedDay = 0;\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * @description Method to Selects month\r\n * @author Shiva Kant\r\n * @param month\r\n */\r\n selectMonth(month: any): void {\r\n this.currentDate.setMonth(month);\r\n this.updateCurrentYearMonth();\r\n this.calendarView = 'defaultView';\r\n this.selectedDay = 0;\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * @description Method to Previous year range\r\n * @author Shiva Kant\r\n */\r\n previousYearRange(): void {\r\n this.yearRange = this.yearRange.map((year) => year - 18);\r\n }\r\n\r\n /**\r\n * @description Method to Next year range\r\n * @author Shiva Kant\r\n */\r\n nextYearRange(): void {\r\n this.yearRange = this.yearRange.map((year) => year + 18);\r\n }\r\n\r\n /**\r\n * @description Method to Toggles year selector\r\n * @author Shiva Kant\r\n */\r\n toggleYearSelector(): void {\r\n this.showYearSelector = !this.showYearSelector;\r\n this.generateYearRange();\r\n }\r\n /**\r\n * @description Method to Generates year range\r\n * @author Shiva Kant\r\n */\r\n generateYearRange(): void {\r\n const currentYear = this.currentDate.getFullYear();\r\n const startYear = currentYear - (currentYear % 20);\r\n this.yearRange = Array.from({ length: 18 }, (_, i) => startYear + i);\r\n }\r\n /**\r\n * @description Method to Determines whether date selectable is\r\n * @author Shiva Kant\r\n * @param date\r\n * @returns true if date selectable\r\n */\r\n isDateSelectable(date: Date): boolean {\r\n const min = this.minDate ? new Date(this.minDate) : null;\r\n const max = this.maxDate ? new Date(this.maxDate) : null;\r\n if (min && date < min) return false;\r\n if (max && date > max) return false;\r\n return true;\r\n }\r\n /**\r\n * @description Method to Determines whether day disabled is\r\n * @author Shiva Kant\r\n * @param day\r\n * @returns true if day disabled\r\n */\r\n isDayDisabled(day: number): boolean {\r\n const date = new Date(\r\n this.currentDate.getFullYear(),\r\n this.currentDate.getMonth(),\r\n day\r\n );\r\n return !this.isDateSelectable(date);\r\n }\r\n /**\r\n * @description Method to Generates calendar\r\n * @author Shiva Kant\r\n */\r\n generateCalendar(): void {\r\n const year = this.currentDate.getFullYear();\r\n const month = this.currentDate.getMonth();\r\n\r\n const firstDayOfMonth = new Date(year, month, 1);\r\n const firstWeekDay = (firstDayOfMonth.getDay() + 6) % 7; // Convert Sunday (0) to 6, Monday is 0\r\n\r\n const daysInCurrentMonth = new Date(year, month + 1, 0).getDate();\r\n const daysInPreviousMonth = new Date(year, month, 0).getDate();\r\n\r\n const totalCells = 42; // 6 rows of 7 days\r\n const calendarDays: { day: number; date: Date; isCurrentMonth: boolean }[] =\r\n [];\r\n\r\n // Fill previous month days\r\n for (let i = firstWeekDay - 1; i >= 0; i--) {\r\n const day = daysInPreviousMonth - i;\r\n const date = new Date(year, month - 1, day);\r\n calendarDays.push({ day, date, isCurrentMonth: false });\r\n }\r\n\r\n // Fill current month days\r\n for (let day = 1; day <= daysInCurrentMonth; day++) {\r\n const date = new Date(year, month, day);\r\n calendarDays.push({ day, date, isCurrentMonth: true });\r\n }\r\n\r\n // Fill next month days\r\n const remaining = totalCells - calendarDays.length;\r\n for (let day = 1; day <= remaining; day++) {\r\n const date = new Date(year, month + 1, day);\r\n calendarDays.push({ day, date, isCurrentMonth: false });\r\n }\r\n\r\n this.daysInMonth = calendarDays;\r\n }\r\n\r\n /**\r\n * @description Method to Previous month\r\n * @author Shiva Kant\r\n */\r\n previousMonth(): void {\r\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\r\n this.updateCurrentYearMonth();\r\n this.selectedDay = 0;\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * @description Method to Next month\r\n * @author Shiva Kant\r\n */\r\n nextMonth(): void {\r\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\r\n this.updateCurrentYearMonth();\r\n this.selectedDay = 0;\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * @description Method to Initializes calendar when preSelectedValue date\r\n * @author Shiva Kant\r\n * @returns calendar\r\n */\r\n initializeCalendar(): void {\r\n if (!this.preSelectedValue) return;\r\n\r\n // Case 1: Single date (string or Date)\r\n if (\r\n typeof this.preSelectedValue === 'string' ||\r\n this.preSelectedValue instanceof Date\r\n ) {\r\n const date = new Date(this.preSelectedValue);\r\n this.selectedDate = date.getDate();\r\n this.selectedMonth = date.getMonth();\r\n this.selectedYear = date.getFullYear();\r\n this.selectedTime = this.formatTime(date);\r\n\r\n // Update current view to show the month/year\r\n this.currentDate = new Date(\r\n this.selectedYear,\r\n this.selectedMonth,\r\n this.selectedDate\r\n );\r\n this.generateCalendar();\r\n }\r\n\r\n // Case 2: Range of dates\r\n else if (this.preSelectedValue.start && this.preSelectedValue.end) {\r\n const startDate = new Date(this.preSelectedValue.start);\r\n const endDate = new Date(this.preSelectedValue.end);\r\n\r\n // Patch component state\r\n this.rangeStart = startDate.getDate();\r\n this.rangeEnd = endDate.getDate();\r\n\r\n this.selectedStartDate = startDate;\r\n this.selectedEndDate = endDate;\r\n\r\n this.selectedMonth = startDate.getMonth();\r\n this.selectedYear = startDate.getFullYear();\r\n\r\n // Set the current calendar view to the start month/year\r\n this.currentDate = new Date(this.selectedYear, this.selectedMonth, 1);\r\n this.generateCalendar();\r\n\r\n // Optional: If your calendar requires a single selectedTime for range, you could pick start or end\r\n this.selectedTime = this.formatTime(startDate);\r\n\r\n // Emit initial range value\r\n this.emitDateTime();\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to Selects date\r\n * @author Shiva Kant\r\n * @param date\r\n */\r\n selectDate(date: number): void {\r\n const selectedFullDate = new Date(\r\n this.currentYear,\r\n this.currentMonth,\r\n date\r\n );\r\n selectedFullDate.setHours(0, 0, 0, 0);\r\n\r\n this.selectedMonth = this.currentMonth;\r\n this.selectedYear = this.currentYear;\r\n\r\n if (this.dateConfig.selectionMode === 'single') {\r\n this.selectedDate = date;\r\n this.rangeStart = null;\r\n this.rangeEnd = null;\r\n } else {\r\n if (!this.rangeStart || this.rangeEnd) {\r\n this.rangeStart = date;\r\n this.rangeEnd = null;\r\n } else {\r\n this.rangeEnd = date < this.rangeStart ? this.rangeStart : date;\r\n this.rangeStart = date < this.rangeStart ? date : this.rangeStart;\r\n }\r\n }\r\n\r\n this.emitDateTime();\r\n }\r\n\r\n /**\r\n * @description Method to Selects time\r\n * @author Shiva Kant\r\n * @param time\r\n */\r\n selectTime(time: string): void {\r\n this.selectedTime = time;\r\n this.emitDateTime();\r\n }\r\n /**\r\n * @description Method to Determines whether selected date is\r\n * @author Shiva Kant\r\n * @param date\r\n * @returns\r\n */\r\n isSelectedDate(date: number, month: number, year: number): boolean {\r\n if (this.dateConfig.selectionMode === 'single') {\r\n // Check if the day, month, and year match\r\n return (\r\n this.selectedDate === date &&\r\n this.selectedMonth === month &&\r\n this.selectedYear === year\r\n );\r\n } else if (this.dateConfig.selectionMode === 'range') {\r\n // Range selection checks, ensuring both start and end dates are within the same month and year\r\n return !!(\r\n (this.rangeStart &&\r\n this.rangeStart === date &&\r\n this.selectedMonth === month &&\r\n this.selectedYear === year) ||\r\n (this.rangeEnd &&\r\n this.rangeEnd === date &&\r\n this.selectedMonth === month &&\r\n this.selectedYear === year) ||\r\n (this.rangeStart &&\r\n this.rangeEnd &&\r\n date > this.rangeStart &&\r\n date < this.rangeEnd &&\r\n this.selectedMonth === month &&\r\n this.selectedYear === year)\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * @description Method to Generates time ranges\r\n * @author Shiva Kant\r\n */\r\n generateTimeRanges(): void {\r\n const startTime = new Date();\r\n startTime.setHours(0, 0, 0, 0);\r\n this.timeSlots = Array.from({ length: 48 }, (_, i) => {\r\n const time = new Date(startTime.getTime() + i * 30 * 60 * 1000);\r\n return { value: time, label: this.formatTime(time) };\r\n });\r\n }\r\n\r\n /**\r\n * @description Method to Formats time\r\n * @author Shiva Kant\r\n * @param date\r\n * @returns time\r\n */\r\n formatTime(date: Date): string {\r\n return date.toLocaleTimeString('en-US', {\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n hour12: true,\r\n });\r\n }\r\n /**\r\n * @description Method to Formats date time\r\n * @author Shiva Kant\r\n * @param fullDate\r\n * @param selectedTime\r\n * @returns date time\r\n */\r\n formatDateTime(fullDate: Date, selectedTime: string | null): string {\r\n const date = new Date(fullDate);\r\n\r\n if (!selectedTime) {\r\n // Only date formatting when time not required\r\n return this.datePipe.transform(date, 'MM/dd/yyyy')!;\r\n }\r\n\r\n const [time, period] = selectedTime.split(' ');\r\n let [hours, minutes] = time.split(':').map(Number);\r\n\r\n // Convert 12-hour → 24-hour\r\n if (period === 'PM' && hours !== 12) hours += 12;\r\n if (period === 'AM' && hours === 12) hours = 0;\r\n\r\n date.setHours(hours, minutes, 0, 0);\r\n\r\n return this.datePipe.transform(date, 'yyyy/MM/dd hh:mm a')!;\r\n }\r\n\r\n /**\r\n * @description Method to Emits date time\r\n * @author Shiva Kant\r\n * @returns date time\r\n */\r\n emitDateTime(): void {\r\n if (this.dateConfig.enableTime && !this.selectedTime) {\r\n return; // wait until user selects time\r\n }\r\n if (this.dateConfig.selectionMode === 'single') {\r\n if (!this.selectedDate) return;\r\n\r\n const fullDate = new Date(\r\n this.currentYear,\r\n this.currentMonth,\r\n this.selectedDate\r\n );\r\n\r\n this.selectedDateTime = this.formatDateTime(\r\n fullDate || '',\r\n this.dateConfig.enableTime ? this.selectedTime : null\r\n );\r\n\r\n this.writeValue(this.selectedDateTime);\r\n this.date = this.selectedDate;\r\n this.dateTimeSelected.emit(this.selectedDateTime);\r\n this.closeCalendar();\r\n return;\r\n }\r\n if (this.dateConfig.selectionMode === 'range') {\r\n if (!this.rangeStart || !this.rangeEnd) return;\r\n\r\n const startDate = new Date(\r\n this.currentYear,\r\n this.currentMonth,\r\n this.rangeStart\r\n );\r\n const endDate = new Date(\r\n this.currentYear,\r\n this.currentMonth,\r\n this.rangeEnd\r\n );\r\n\r\n const startDateTime = this.formatDateTime(\r\n startDate,\r\n this.dateConfig.enableTime ? this.selectedTime : null\r\n );\r\n const endDateTime = this.formatDateTime(\r\n endDate,\r\n this.dateConfig.enableTime ? this.selectedTime : null\r\n );\r\n\r\n const rangeResult = { start: startDateTime, end: endDateTime };\r\n\r\n this.writeValue(rangeResult);\r\n this.dateTimeSelected.emit(rangeResult);\r\n this.closeCalendar();\r\n }\r\n }\r\n}\r\n","<!-- Calendar -->\r\n\r\n<div\r\n class=\"calendar_wrapper\"\r\n appOutsideClick\r\n (clickOutSide)=\"closeCalendar()\"\r\n [ngClass]=\"{ 'pe-none': disableControl }\"\r\n>\r\n <div class=\"date_box\" (click)=\"toggleCalendar()\">\r\n @if (dateConfig.selectionMode=='single') {\r\n\r\n <input\r\n type=\"text\"\r\n placeholder=\"Select Date\"\r\n [value]=\"selectedDateTime\"\r\n readonly\r\n [disabled]=\"disableControl\"\r\n />\r\n } @else {\r\n <input\r\n type=\"text\"\r\n placeholder=\"Select date Range\"\r\n [value]=\"\r\n selectedDateTime.start\r\n | date\r\n : 'MM/dd/yyyy' +\r\n ' - ' +\r\n (selectedDateTime.end | date : 'MM/dd/yyyy')\r\n \"\r\n readonly\r\n />\r\n }\r\n <!-- <i-feather name=\"calendar\" class=\"calendar_icon\"></i-feather> -->\r\n <img src=\"images/calendar.svg\" alt=\"\" />\r\n </div>\r\n @if (isOpen) {\r\n <div class=\"calendar-popup\">\r\n <div class=\"calendar_container\">\r\n <!-- for the header -->\r\n <div class=\"calendar-header\">\r\n <div class=\"month-year\">\r\n <span class=\"month\" (click)=\"calendarView = 'monthView'\">\r\n {{ getMonthYear().month }},</span\r\n >\r\n <div class=\"year\" (click)=\"calendarView = 'yearView'\">\r\n <span>\r\n {{ getMonthYear().year }}\r\n </span>\r\n <img src=\"images/chevron-down.svg\" class=\"year_arrow\" alt=\"\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"arrow_container\">\r\n <span class=\"navigation-button\" (click)=\"previousMonth()\">\r\n <img src=\"images/arrow-up.svg\" alt=\"\" />\r\n </span>\r\n\r\n <span class=\"navigation-button\" (click)=\"nextMonth()\">\r\n <img src=\"images/arrow-down.svg\" alt=\"\" />\r\n </span>\r\n </div>\r\n </div>\r\n @if(calendarView === \"monthView\"){\r\n <div class=\"month-grid\">\r\n @for(month of monthRange | keyvalue; track $index){\r\n <span\r\n class=\"month\"\r\n (click)=\"selectMonth(month.key)\"\r\n [ngClass]=\"{ selected: month.key == currentDate.getMonth() }\"\r\n >{{ month.value }}</span\r\n >\r\n }\r\n </div>\r\n } @else if(calendarView === 'yearView'){\r\n <div class=\"year-selector\">\r\n <span class=\"navigation-button pointer\" (click)=\"previousYearRange()\">\r\n <img src=\"images/chevron-left.svg\" alt=\"\" />\r\n </span>\r\n <div class=\"year-grid\">\r\n @for(year of yearRange;track $index){\r\n <span\r\n class=\"year\"\r\n (click)=\"selectYear(year)\"\r\n [ngClass]=\"{ selected: year == currentDate.getFullYear() }\"\r\n >{{ year }}</span\r\n >\r\n }\r\n </div>\r\n <span class=\"navigation-button pointer\" (click)=\"nextYearRange()\">\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </span>\r\n </div>\r\n } @else {\r\n <div class=\"calendar_body\">\r\n <div class=\"calendar-grid\">\r\n <!-- Day names -->\r\n @for (day of ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']; track $index)\r\n {\r\n\r\n <div class=\"days_name\">\r\n {{ day }}\r\n </div>\r\n }\r\n\r\n <!-- Calendar dates -->\r\n @for (dayObj of daysInMonth; track $index) {\r\n <div\r\n class=\"calendar-day\"\r\n [ngClass]=\"{\r\n active:\r\n dayObj.isCurrentMonth &&\r\n dateConfig.selectionMode === 'single' &&\r\n isSelectedDate(\r\n dayObj.day,\r\n dayObj.date.getMonth(),\r\n dayObj.date.getFullYear()\r\n ),\r\n\r\n active_start:\r\n dayObj.isCurrentMonth &&\r\n dateConfig.selectionMode === 'range' &&\r\n isSelectedDate(\r\n dayObj.day,\r\n dayObj.date.getMonth(),\r\n dayObj.date.getFullYear()\r\n ) &&\r\n dayObj.day === rangeStart,\r\n\r\n active_end:\r\n dayObj.isCurrentMonth &&\r\n dateConfig.selectionMode === 'range' &&\r\n isSelectedDate(\r\n dayObj.day,\r\n dayObj.date.getMonth(),\r\n dayObj.date.getFullYear()\r\n ) &&\r\n dayObj.day === rangeEnd,\r\n\r\n range_between_active:\r\n dayObj.isCurrentMonth &&\r\n dateConfig.selectionMode === 'range' &&\r\n isSelectedDate(\r\n dayObj.day,\r\n dayObj.date.getMonth(),\r\n dayObj.date.getFullYear()\r\n ) &&\r\n rangeStart != null &&\r\n rangeEnd != null &&\r\n dayObj.day > rangeStart &&\r\n dayObj.day < rangeEnd,\r\n\r\n other_month: !dayObj.isCurrentMonth,\r\n disabled: isDayDisabled(dayObj.day),\r\n notInCurrentMonth: !dayObj.isCurrentMonth\r\n }\"\r\n (click)=\"\r\n dayObj.isCurrentMonth &&\r\n !isDayDisabled(dayObj.day) &&\r\n selectDate(dayObj.day)\r\n \"\r\n >\r\n {{ dayObj.day }}\r\n </div>\r\n }\r\n </div>\r\n <div class=\"bottom_btn\">\r\n <div class=\"btn\">Clear</div>\r\n <div class=\"btn\">Today</div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <!-- TIME SLOTS (only if showTime = true) -->\r\n @if (dateConfig.enableTime) {\r\n <div class=\"times\">\r\n <div class=\"time-picker\">\r\n <div class=\"time-column\">\r\n @for (timeSlot of timeSlots; track $index) {\r\n <span\r\n class=\"span_time\"\r\n [ngClass]=\"{ active: selectedTime === timeSlot.label }\"\r\n (click)=\"selectTime(timeSlot.label)\"\r\n >\r\n {{ timeSlot.label }}\r\n </span>\r\n }\r\n </div>\r\n\r\n <div class=\"time-column\">\r\n @for (timeSlot of timeSlots; track $index) {\r\n <span\r\n class=\"span_time\"\r\n [ngClass]=\"{ active: selectedTime === timeSlot.label }\"\r\n >\r\n {{ timeSlot.label }}\r\n </span>\r\n }\r\n </div>\r\n\r\n <div class=\"time-column\">\r\n @for (timeSlot of timeSlots; track $index) {\r\n <span\r\n class=\"span_time\"\r\n [ngClass]=\"{ active: selectedTime === timeSlot.label }\"\r\n >\r\n {{ timeSlot.label }}\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- center selection indicator -->\r\n <div class=\"center-highlight\"></div>\r\n </div>\r\n\r\n <!-- @for (timeSlot of timeSlots; track $index) {\r\n <span\r\n class=\"span_time\"\r\n [ngClass]=\"{ active: selectedTime === timeSlot.label }\"\r\n (click)=\"selectTime(timeSlot.label)\"\r\n >\r\n {{ timeSlot.label }}\r\n </span>\r\n } -->\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { AddClassPipe } from './pipes/add-class.pipe';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { OutsideClickDirective } from './directives/outside-click.directive';\r\nimport { RendererParserDirective } from './directives/renderer-parser.directive';\r\nimport { CommonInputComponent } from './common-components/common-input/common-input.component';\r\nimport { AdaptivePositionDirective } from './directives/adaptive-position.directive';\r\nimport {\r\n CommonCalendarComponent,\r\n DateConfig,\r\n} from './common-components/common-calendar/common-calendar.component';\r\n\r\n@Component({\r\n selector: 'cats-data-grid',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n CommonCalendarComponent,\r\n OutsideClickDirective,\r\n AdaptivePositionDirective,\r\n RendererParserDirective,\r\n AddClassPipe,\r\n CommonInputComponent,\r\n ],\r\n templateUrl: './cats-data-grid.component.html',\r\n styleUrl: './cats-data-grid.component.scss',\r\n})\r\nexport class CatsDataGridComponent implements OnChanges, OnInit {\r\n @Input() tableOptions: any;\r\n @Input() totalRecords: number = 0;\r\n @Input() sortingRequired = true;\r\n @Input() checkBoxSelection = false;\r\n @Input() checkboxSelectionType = 'multiple';\r\n @Input() rowData: any[] = [];\r\n @Input() colDefs: any[] = [];\r\n @Input() paginationRequired = true;\r\n @Input() selectedRowEmpty: boolean = false;\r\n @Input() filterRequired: boolean = true;\r\n @Input() threeDotsMenuRequired: boolean = true;\r\n showDropdown: boolean = false;\r\n\r\n @Input() height: number = 400;\r\n @Input() groupByRequired: boolean = false;\r\n @Output() onPaginationChange = new EventEmitter();\r\n @Output() onCheckboxSelection = new EventEmitter();\r\n @Output() onScrollEmitter = new EventEmitter();\r\n @Output() filter = new EventEmitter();\r\n\r\n activeFilterIndex: number | null = null;\r\n originalRowData: any[] = [];\r\n\r\n pageDetails: any = {\r\n pageSize: 20,\r\n totalPages: 1,\r\n currentPage: 1,\r\n };\r\n recordsToShow: any = {\r\n min: 0,\r\n max: 20,\r\n };\r\n sortingColumnIndex!: number;\r\n sortingType: any = {};\r\n selectedRow: any[] = [];\r\n\r\n @Input() pageSizeList: number[] = [20, 50, 75, 100];\r\n showPageSizeList: boolean = false;\r\n dragOverIndex: null | number = null;\r\n draggedIndex: null | number = null;\r\n originalColDefs: any[] = [];\r\n filteredRowData: any[] = [];\r\n filteredData: any[] = [];\r\n currentColumn: any;\r\n currentIndex!: number;\r\n menuVisible: boolean[] = [];\r\n menuPosition: any[] = [];\r\n activeFilters: Set<any> = new Set<any>();\r\n resizingColumnIndex: number | null = null;\r\n startX: number = 0;\r\n startWidth: number = 0;\r\n isResizing: boolean = false;\r\n groupedResult: any[] = [];\r\n showMoveIcon: any = {};\r\n columnDraggable: any[] = [];\r\n activeGroups: any[] = [];\r\n groupBy: string[] = [];\r\n dragGroupIndex: number | null = null;\r\n\r\n dateConfig: DateConfig = {\r\n selectionMode: 'single',\r\n enableTime: false,\r\n };\r\n\r\n filterOptions = [\r\n { label: 'Contains', value: 'contains' },\r\n { label: 'Does Not Contain', value: 'doesNotContain' },\r\n { label: 'Equals', value: 'equals' },\r\n { label: 'Does Not Equal', value: 'doesNotEqual' },\r\n { label: 'Starts With', value: 'startsWith' },\r\n { label: 'Ends With', value: 'endsWith' },\r\n ];\r\n\r\n numberFilterOptions = [\r\n { label: 'Equals', value: '=' },\r\n { label: 'Greater Than', value: '>' },\r\n { label: 'Less Than', value: '<' },\r\n { label: 'Greater Than or Equal', value: '>=' },\r\n { label: 'Less Than or Equal', value: '<=' },\r\n ];\r\n showPin: boolean = false;\r\n pinActionClicked: any = {};\r\n constructor(private cd: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n this.originalRowData = structuredClone(this.rowData);\r\n this.filteredRowData = structuredClone(this.rowData);\r\n this.originalColDefs = [...this.colDefs];\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['colDefs']?.currentValue) {\r\n this.resetTableConfig();\r\n this.colDefs = this.getUpdatedColDefs(changes['colDefs']?.currentValue);\r\n }\r\n if (changes['totalRecords']?.currentValue) {\r\n this.setPageCount();\r\n }\r\n if (changes['rowData']?.currentValue) {\r\n if (this.selectedRowEmpty) this.selectedRow = [];\r\n this.rowData = changes['rowData']?.currentValue.map(\r\n (row: any, i: number) => {\r\n row.rowId = `${Date.now()}_${i}`;\r\n if (row?.isSelected) [...this.selectedRow, row];\r\n return row;\r\n }\r\n );\r\n // this.originalRowData = structuredClone(this.rowData);\r\n this.getGroupedData();\r\n }\r\n }\r\n\r\n /**\r\n * @description Prepares and normalizes column definitions for filtering and menu behavior\r\n * @author Anand Pandey\r\n * @param {any[]} colDefs - Raw column definitions received from the parent.\r\n * @returns {any[]} - Updated column definitions with filter/menu\r\n */\r\n getUpdatedColDefs(colDefs: any[]) {\r\n return colDefs.map((col, index) => {\r\n this.sortingType[index] = '';\r\n col.colId = `${Date.now()}_${index}`;\r\n if (col.fieldName === 'action') {\r\n col.isAction = true;\r\n }\r\n\r\n if (!col.filterType && !col.isAction) {\r\n col.filterType = 'text';\r\n }\r\n\r\n col.textLogic = 'AND';\r\n col.numberLogic = 'AND';\r\n let updatedCol = {\r\n ...col,\r\n filterable: col.filterable ?? true,\r\n columnAction: col.columnAction ?? true,\r\n sortable: col.sortable ?? true,\r\n };\r\n\r\n if (!updatedCol.filterable) {\r\n return updatedCol;\r\n }\r\n\r\n switch (col.filterType) {\r\n case 'text':\r\n updatedCol = {\r\n ...updatedCol,\r\n textFilters: [\r\n {\r\n filterType: 'contains',\r\n filterValue: '',\r\n },\r\n {\r\n filterType: 'startsWith',\r\n filterValue: '',\r\n },\r\n ],\r\n };\r\n break;\r\n\r\n case 'number':\r\n case 'date':\r\n updatedCol = {\r\n ...updatedCol,\r\n dateValue: '',\r\n numberFilters: [\r\n {\r\n filterType: '=',\r\n numberValue: '',\r\n },\r\n {\r\n filterType: '=',\r\n numberValue: '',\r\n },\r\n ],\r\n dateFilters: [\r\n {\r\n filterType: '=',\r\n dateValue: '',\r\n },\r\n {\r\n filterType: '=',\r\n dateValue: '',\r\n },\r\n ],\r\n };\r\n break;\r\n\r\n case 'set':\r\n const options = [\r\n ...new Set(\r\n this.rowData.flatMap((r) => {\r\n return this.normalizeSetFilterType(\r\n r[col.fieldName],\r\n col?.cellRendererParams?.tagKey\r\n )?.filter(Boolean);\r\n })\r\n ),\r\n ];\r\n updatedCol = {\r\n ...updatedCol,\r\n options,\r\n filteredOptions: options,\r\n selectedValues: new Set(options),\r\n };\r\n break;\r\n }\r\n\r\n return updatedCol;\r\n });\r\n }\r\n\r\n normalizeSetFilterType(value: any, key: string) {\r\n if (!value) return;\r\n\r\n if (Array.isArray(value) && typeof value[0] === 'string') {\r\n return value;\r\n }\r\n if (Array.isArray(value) && typeof value[0] === 'object') {\r\n return (value = value.map((val) => val[key]));\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return [value];\r\n }\r\n\r\n if (typeof value === 'object') {\r\n return [value[key]];\r\n }\r\n\r\n return [];\r\n }\r\n\r\n /**\r\n * @description - Evaluates a text-based filter condition on a given field value.\r\n * @author Anand Pandey\r\n * @param {string} type - The type of text filter to apply ('contains' | 'doesNotContain' | 'equals' etc).\r\n * @param {string} fieldValue - The actual value from the data row being evaluated.\r\n * @param {string} value - The user-entered filter value to compare against.\r\n * @returns {boolean} `true` if the fieldValue satisfies the specified filter condition,\r\n * otherwise `false`.\r\n */\r\n evaluateTextFilterCondition(\r\n type: string,\r\n fieldValue: string,\r\n value: string\r\n ): boolean {\r\n switch (type) {\r\n case 'contains':\r\n return fieldValue.includes(value);\r\n case 'doesNotContain':\r\n return !fieldValue.includes(value);\r\n case 'equals':\r\n return fieldValue === value;\r\n case 'doesNotEqual':\r\n return fieldValue !== value;\r\n case 'startsWith':\r\n return fieldValue.startsWith(value);\r\n case 'endsWith':\r\n return fieldValue.endsWith(value);\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n /**\r\n * @description - Evaluates number/date filter conditions.\r\n * @author Anand\r\n * @param {string} type - Comparison operator ('=' | '>' | '<' | '>=' | '<=').\r\n * @param {number|string} fieldValue - Actual value from the row (number or timestamp).\r\n * @param {number|string} value - User-entered value for comparison.\r\n * @returns {boolean} True if the condition matches, otherwise false.\r\n */\r\n evaluateNumDateFilterCondition(\r\n type: string,\r\n fieldValue: number | string,\r\n value: number | string\r\n ): boolean {\r\n switch (type) {\r\n case '=':\r\n return fieldValue === value;\r\n case '>':\r\n return fieldValue > value;\r\n case '<':\r\n return fieldValue < value;\r\n case '>=':\r\n return fieldValue >= value;\r\n case '<=':\r\n return fieldValue <= value;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to filter data according to filterType and comparator selection\r\n * @author Anand Pandey\r\n * @param {}\r\n * @returns void\r\n */\r\n applyAllFilters() {\r\n let result: any[] = structuredClone(this.originalRowData);\r\n\r\n this.colDefs.forEach((col) => {\r\n const field = col.fieldName;\r\n\r\n // *********** TEXT FILTER ***********\r\n if (col.filterType === 'text') {\r\n const [c1, c2] = col.textFilters;\r\n\r\n const textVal1 = c1.filterValue?.toLowerCase().trim();\r\n const textVal2 = c2.filterValue?.toLowerCase().trim();\r\n if (!textVal1 && !textVal2) {\r\n this.activeFilters.delete(col.fieldName);\r\n return;\r\n }\r\n this.activeFilters.add(col.fieldName);\r\n\r\n result = result.filter((r) => {\r\n const fieldVal = String(r[field]).toLowerCase();\r\n const cond1 = textVal1\r\n ? this.evaluateTextFilterCondition(\r\n c1.filterType,\r\n fieldVal,\r\n textVal1\r\n )\r\n : false;\r\n const cond2 = textVal2\r\n ? this.evaluateTextFilterCondition(\r\n c2.filterType,\r\n fieldVal,\r\n textVal2\r\n )\r\n : false;\r\n\r\n return col.textLogic === 'AND' ? cond1 && cond2 : cond1 || cond2;\r\n });\r\n }\r\n\r\n // *********** NUMBER FILTER ***********\r\n if (col.filterType === 'number') {\r\n const [c1, c2] = col.numberFilters;\r\n const numValue1 = Number(c1.numberValue);\r\n const numValue2 = Number(c2.numberValue);\r\n\r\n if (!numValue1 && !numValue2) {\r\n this.activeFilters.delete(col.fieldName);\r\n return;\r\n }\r\n this.activeFilters.add(col.fieldName);\r\n\r\n result = result.filter((r) => {\r\n const fieldVal = Number(r[field]);\r\n const cond1 = numValue1\r\n ? this.evaluateNumDateFilterCondition(\r\n c1.filterType,\r\n fieldVal,\r\n numValue1\r\n )\r\n : false;\r\n const cond2 = numValue2\r\n ? this.evaluateNumDateFilterCondition(\r\n c2.filterType,\r\n fieldVal,\r\n numValue2\r\n )\r\n : false;\r\n\r\n return col.textLogic === 'AND' ? cond1 && cond2 : cond1 || cond2;\r\n });\r\n }\r\n\r\n // *********** DATE FILTER ***********\r\n if (col.filterType === 'date') {\r\n const [c1, c2] = col.dateFilters;\r\n const selected1 = this.normalizeDate(c1.dateValue);\r\n const selected2 = this.normalizeDate(c2.dateValue);\r\n if (!selected1 && !selected2) {\r\n this.activeFilters.delete(col.fieldName);\r\n return;\r\n }\r\n this.activeFilters.add(col.fieldName);\r\n result = result.filter((r) => {\r\n const fieldVal = this.normalizeDate(r[field]);\r\n const cond1 = selected1\r\n ? this.evaluateNumDateFilterCondition(\r\n c1.filterType,\r\n fieldVal ?? r[field],\r\n selected1\r\n )\r\n : false;\r\n const cond2 = selected2\r\n ? this.evaluateNumDateFilterCondition(\r\n c2.filterType,\r\n fieldVal ?? r[field],\r\n selected2\r\n )\r\n : false;\r\n\r\n return col.textLogic === 'AND' ? cond1 && cond2 : cond1 || cond2;\r\n });\r\n }\r\n\r\n // *********** SET FILTER ***********\r\n if (col.filterType === 'set') {\r\n if (\r\n col.selectedValues?.size >= 0 &&\r\n col.selectedValues?.size !== col.options.length\r\n ) {\r\n result = result.filter((r) => {\r\n const value: any = r[field];\r\n\r\n if (\r\n Array.isArray(value) &&\r\n value.every((val) => typeof val !== 'object')\r\n ) {\r\n return value.some((m) => col.selectedValues.has(m));\r\n }\r\n\r\n if (\r\n Array.isArray(value) &&\r\n value.every((val) => typeof val === 'object')\r\n ) {\r\n return value.some((m) =>\r\n col.selectedValues.has(m[col?.cellRendererParams?.tagKey])\r\n );\r\n }\r\n\r\n return col.selectedValues.has(r[field]);\r\n });\r\n this.activeFilters.add(col.fieldName);\r\n } else {\r\n this.activeFilters.delete(col.fieldName);\r\n }\r\n }\r\n });\r\n\r\n this.filteredData = result;\r\n this.rowData = this.filteredData;\r\n this.getGroupedData();\r\n this.filter.emit(this.filteredData);\r\n }\r\n\r\n resetFilter(col: any) {\r\n switch (col.filterType) {\r\n case 'text': {\r\n col.textFilters.forEach((f: any) => (f.filterValue = ''));\r\n col.textLogic = 'AND';\r\n break;\r\n }\r\n\r\n case 'number': {\r\n col.numberFilters.forEach((f: any) => (f.numberValue = ''));\r\n col.numberLogic = 'AND';\r\n break;\r\n }\r\n\r\n case 'date': {\r\n col.dateFilters.forEach((f: any) => (f.dateValue = ''));\r\n col.textLogic = 'AND';\r\n break;\r\n }\r\n\r\n case 'set': {\r\n // Select all values again\r\n col.selectedValues = new Set(col.options);\r\n break;\r\n }\r\n }\r\n\r\n // Remove active flag\r\n this.activeFilters.delete(col.fieldName);\r\n\r\n // Re-apply all filters\r\n this.applyAllFilters();\r\n }\r\n\r\n /**\r\n * @description Method to change the data format to utc\r\n * @author Anand Pandey\r\n * @param {date} - date value to be changed\r\n * @returns date in milliseconds\r\n */\r\n normalizeDate(dateStr: string) {\r\n const d = new Date(dateStr);\r\n if (isNaN(d.getTime())) return null;\r\n return new Date(\r\n Date.UTC(d.getFullYear(), d.getMonth(), d.getDate())\r\n ).getTime();\r\n }\r\n\r\n /**\r\n * @description\r\n * Filters the available set options inside a Set Filter (checkbox filter)\r\n * based on the user's search text. This updates only the list shown in\r\n * the dropdown\r\n * @author Anand Pandey\r\n * @param col - Column definition object containing filter config\r\n * @param event - Input event from the search textbox\r\n * @returns void\r\n */\r\n filterSetOptions(col: any, event: any) {\r\n const text = event.target.value.toLowerCase();\r\n col.filteredOptions = col.options.filter((option: any) =>\r\n String(option).toLowerCase().includes(text)\r\n );\r\n }\r\n\r\n /**\r\n * @description\r\n * Toggles an individual checkbox option inside a Set Filter. *\r\n * @author Anand Pandey\r\n * @param col - Column definition object\r\n * @param opt - Selected option value\r\n * @param event - Checkbox change event\r\n * @returns void\r\n */\r\n toggleSetOption(col: any, opt: any, event: any) {\r\n if (event.target.checked) col.selectedValues.add(opt);\r\n else col.selectedValues.delete(opt);\r\n\r\n this.applyAllFilters();\r\n }\r\n\r\n /**\r\n * @description * Selects or deselects all checkbox options in the Set Filter.\r\n * @author Anand Pandey\r\n * @param col - Column definition object\r\n * @param event - Checkbox change event\r\n * @returns void\r\n */\r\n toggleSelectAll(col: any, event: any) {\r\n if (event.target.checked) {\r\n col.options.forEach((option: any) => col.selectedValues.add(option));\r\n } else {\r\n col.selectedValues.clear();\r\n }\r\n this.applyAllFilters();\r\n }\r\n\r\n /**\r\n * @description\r\n * Checks whether all options inside a Set Filter are currently selected.\r\n * @author Anand Pandey\r\n * @param col - Column definition object\r\n * @returns boolean - TRUE if all options are selected, otherwise FALSE.\r\n */\r\n isAllSelected(col: any) {\r\n return (\r\n col.options?.length > 0 && col.options?.length === col.selectedValues.size\r\n );\r\n }\r\n\r\n /**\r\n * @description\r\n * Opens the three-dots column menu for the selected column.\r\n * Opens only the menu belonging to the clicked column index\r\n * @author Anand Pandey\r\n * @param {MouseEvent} event - The click event triggered on the three-dots icon.\r\n * @param {any} col - The column definition object for which menu is opened.\r\n * @param {number} index - Index of the column whose menu has been requested.\r\n * @returns {void}\r\n */\r\n openMenu(event: MouseEvent, col: any, index: number) {\r\n event.stopPropagation();\r\n this.showPin = false;\r\n this.activeFilterIndex = null;\r\n this.menuVisible = this.menuVisible.map(() => false);\r\n\r\n if (!this.menuVisible[index]) this.menuVisible[index] = false;\r\n\r\n const rect = (event.target as HTMLElement).getBoundingClientRect();\r\n this.menuVisible[index] = true;\r\n }\r\n\r\n /**\r\n * @description Sort from three dots menu pop up.\r\n * @author Anand Pandey\r\n * @param {fieldName} string - fieldname.\r\n * @param {string} type - Type defines the sorting type whether this is ascending, descending.\r\n * @returns {void}\r\n */\r\n onSort(col: any, type: string, sortingColumIndex: number) {\r\n this.sortingType[sortingColumIndex] = type;\r\n this.sortingColumnIndex = sortingColumIndex;\r\n Object.keys(this.sortingType).forEach((k) => {\r\n if (k !== String(sortingColumIndex)) this.sortingType[k] = '';\r\n });\r\n if (this.sortingType[sortingColumIndex] == 'asc') {\r\n this.ascendingOrder(col);\r\n } else if (this.sortingType[sortingColumIndex] == 'dsc') {\r\n this.descendingOrder(col);\r\n } else {\r\n this.rowData = structuredClone(this.originalRowData);\r\n }\r\n // if (this.sortingType[sortingColumIndex] == '') {\r\n // this.rowData = this.originalRowData;\r\n // }\r\n this.getGroupedData();\r\n this.menuVisible[this.currentIndex] = false;\r\n }\r\n\r\n /**\r\n * @description Generates grouped data based on the selected `groupBy` columns..\r\n * @author Anand Pandey\r\n * @returns void\r\n */\r\n getGroupedData() {\r\n if (this.groupBy && this.groupBy.length > 0) {\r\n this.groupedResult = this.groupData(this.rowData, this.groupBy) || [];\r\n }\r\n }\r\n\r\n /**\r\n * @description Initializes column resize operation when the user presses the mouse on the resize handle.\r\n * @author Anand Pandey\r\n * @param {MouseEvent} event - The mousedown event triggered on the resize handle.\r\n * @param {number} index - Index of the column being resized.\r\n * @returns {void}\r\n */\r\n startResize(event: MouseEvent, index: number) {\r\n event.preventDefault();\r\n this.isResizing = true;\r\n this.resizingColumnIndex = index;\r\n this.startX = event.clientX;\r\n this.startWidth = this.colDefs[index].width;\r\n\r\n document.addEventListener('mousemove', this.onMouseMove);\r\n document.addEventListener('mouseup', this.stopResize);\r\n }\r\n\r\n /**\r\n * @description Handles column resizing as the mouse moves.\r\n * @author Anand Pandey\r\n * @param {MouseEvent} event - Mouse movement event during resizing.\r\n * @returns {void}\r\n */\r\n onMouseMove = (event: MouseEvent) => {\r\n if (\r\n this.resizingColumnIndex === null ||\r\n this.resizingColumnIndex === undefined\r\n )\r\n return;\r\n\r\n const movement = event.clientX - this.startX;\r\n const newWidth = this.startWidth + movement;\r\n\r\n if (newWidth > 50) {\r\n this.colDefs[this.resizingColumnIndex].width = newWidth;\r\n }\r\n };\r\n\r\n /**\r\n * @description Stops the column resizing operation.\r\n * Clears resizing state and removes mouse event listeners.\r\n * @author Anand Pandey\r\n * @param {MouseEvent} event - Mouse up event ending the resize action.\r\n * @returns {void}\r\n */\r\n stopResize = (event: MouseEvent) => {\r\n event.stopPropagation();\r\n this.resizingColumnIndex = null;\r\n this.isResizing = false;\r\n document.removeEventListener('mousemove', this.onMouseMove);\r\n document.removeEventListener('mouseup', this.stopResize);\r\n };\r\n\r\n /**\r\n * @description Recursively groups row data into a hierarchical structure based on the provided group keys.\r\n * @author Anand Pandey\r\n * @param {any[]} data - The row data to be grouped.\r\n * @param {string[]} groupKeys - Ordered list of column keys to group by.\r\n * @returns {any[]} A hierarchical grouped structure containing nested group nodes.\r\n */\r\n groupData(data: any[], groupKeys: string[]): any {\r\n if (groupKeys.length === 0) return data;\r\n const [currentKey, ...restKeys] = groupKeys;\r\n\r\n const groups: any = {};\r\n for (const row of data) {\r\n const key = row[currentKey] ?? '';\r\n if (!groups[key]) groups[key] = [];\r\n groups[key].push(row);\r\n }\r\n\r\n // recursively group child arrays\r\n\r\n let result = [];\r\n\r\n for (const key of Object.keys(groups)) {\r\n result.push({\r\n key,\r\n field: currentKey,\r\n expanded: false,\r\n children: this.groupData(groups[key], restKeys),\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * @description Toggles the expand/collapse state of a group node.\r\n * @author Anand Pandey\r\n * @param {any} node - The group node whose expanded state needs to be toggled.\r\n * @returns {void}\r\n */\r\n\r\n toggleGroup(node: any) {\r\n node.expanded = !node.expanded;\r\n }\r\n\r\n /**\r\n * @description Pin column on the left side.\r\n * @author Anand Pandey\r\n * @param {any} col - The selected column details from table on clicking pin or unpin from three dots menu.\r\n * @param {number} index - The index of column from table on clicking pin or unpin from three dots menu.\r\n * @returns {void}\r\n */\r\n\r\n pinColumn(col: any, index: number, direction: string) {\r\n this.pinActionClicked[col.colId] = direction;\r\n col.leftPinned = direction === 'left';\r\n col.rightPinned = direction === 'right';\r\n\r\n if (col.leftPinned) {\r\n this.colDefs.splice(index, 1);\r\n this.colDefs = [col, ...this.colDefs];\r\n } else if (col.rightPinned) {\r\n this.colDefs.splice(index, 1);\r\n this.colDefs.splice(this.colDefs.length - 1, 0, col);\r\n } else {\r\n const indx = this.originalColDefs.findIndex(\r\n (dt) => dt.fieldName === col.fieldName\r\n );\r\n if (index >= 0) {\r\n this.colDefs.splice(index, 1);\r\n this.colDefs.splice(indx, 0, col);\r\n }\r\n }\r\n\r\n this.updatePinnedOffsets();\r\n this.onClickOutside();\r\n }\r\n\r\n showPinActions() {\r\n this.showPin = true;\r\n }\r\n\r\n hidePinActions() {\r\n this.showPin = false;\r\n }\r\n\r\n /**\r\n * @description Updates the horizontal left and right offsets of pinned columns by assigning cumulative widths to each pinned column and resetting non-pinned columns.\r\n * @author Anand Pandey\r\n * @returns void\r\n */\r\n\r\n updatePinnedOffsets() {\r\n let leftOffset = 0;\r\n let rightOffset = 0;\r\n\r\n // LEFT pinned (normal order)\r\n this.colDefs.forEach((col) => {\r\n if (col.leftPinned) {\r\n col.left = leftOffset;\r\n col.right = null;\r\n leftOffset += col.width || 120;\r\n }\r\n });\r\n\r\n // RIGHT pinned (REVERSE order)\r\n [...this.colDefs].reverse().forEach((col) => {\r\n if (col.rightPinned) {\r\n col.right = rightOffset;\r\n col.left = null;\r\n rightOffset += col.width || 120;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @description Method to parse column value from rowdata object\r\n * according to given field value in column Defination\r\n * @author Tarun Kumar\r\n * @param row - current row object\r\n * @param toParse - field value\r\n * @returns string\r\n */\r\n parseColValue(row: any, col: any): any {\r\n if (!col?.fieldName?.includes('.')) {\r\n if (Array.isArray(row[col.fieldName])) {\r\n if (row[col.fieldName].every((dt: string) => typeof dt === 'string')) {\r\n return row[col.fieldName][0];\r\n }\r\n\r\n if (row[col.fieldName].every((dt: any) => typeof dt === 'object')) {\r\n return row[col.fieldName][0][col.cellRendererParams.tagKey];\r\n }\r\n }\r\n return row[col.fieldName] || '-';\r\n } else {\r\n let toParseArr = col?.fieldName.split('.');\r\n let val = row;\r\n for (const key of toParseArr) {\r\n val =\r\n row?.[val.key] && typeof row[val.key] === 'object'\r\n ? row[val.key].name\r\n : row[val.key] ?? '';\r\n // val = val[key];\r\n }\r\n return val || '-';\r\n }\r\n }\r\n\r\n /**\r\n * @description method to reset table configuration\r\n * @author Tarun Kumar\r\n * @param none\r\n * @returns void\r\n */\r\n resetTableConfig(): void {\r\n this.pageDetails.pageSize = 20;\r\n this.pageDetails.currentPage = 1;\r\n this.pageDetails.totalPages = 1;\r\n this.recordsToShow.min = 0;\r\n this.recordsToShow.max = 20;\r\n this.setPageCount();\r\n }\r\n\r\n /**\r\n * @description method to set total pages count\r\n * @author Tarun Kumar\r\n * @param none\r\n * @returns void\r\n */\r\n setPageCount(): void {\r\n this.pageDetails.totalPages = Math.ceil(\r\n this.totalRecords / this.pageDetails.pageSize\r\n );\r\n }\r\n\r\n /**\r\n * @description method to update table on page size change\r\n * @author Tarun Kumar\r\n * @param event\r\n * @returns void\r\n */\r\n onPageSizeChanged(event: any): void {\r\n this.recordsToShow.min = 0;\r\n this.recordsToShow.max = parseInt(event);\r\n this.pageDetails.currentPage = 1;\r\n this.pageDetails.pageSize = parseInt(event);\r\n this.setPageCount();\r\n this.onPaginationChange.emit({\r\n page: this.pageDetails.currentPage - 1,\r\n pageSize: this.pageDetails.pageSize,\r\n });\r\n }\r\n\r\n /**\r\n * @description method to update table on previous button click\r\n * @author Tarun Kumar\r\n */\r\n onBtPrevClick(): void {\r\n this.recordsToShow.min = this.recordsToShow.min - this.pageDetails.pageSize;\r\n this.recordsToShow.max = this.recordsToShow.max - this.pageDetails.pageSize;\r\n if (this.pageDetails.currentPage > 1)\r\n this.pageDetails.currentPage = this.pageDetails.currentPage - 1;\r\n\r\n this.onPaginationChange.emit({\r\n page: this.pageDetails.currentPage - 1,\r\n pageSize: this.pageDetails.pageSize,\r\n });\r\n }\r\n\r\n /**\r\n * @description method to update table on next button click\r\n * @author Tarun Kumar\r\n */\r\n onBtNextClick(): void {\r\n this.recordsToShow.min = this.recordsToShow.min + this.pageDetails.pageSize;\r\n this.recordsToShow.max = this.recordsToShow.max + this.pageDetails.pageSize;\r\n\r\n if (this.pageDetails.currentPage < this.pageDetails.totalPages)\r\n this.pageDetails.currentPage = this.pageDetails.currentPage + 1;\r\n\r\n this.onPaginationChange.emit({\r\n page: this.pageDetails.currentPage - 1,\r\n pageSize: this.pageDetails.pageSize,\r\n });\r\n }\r\n\r\n /**\r\n * @description method to update table on selecting any page randomly\r\n * @author Tarun Kumar\r\n * @param event\r\n */\r\n goToSelectedPage(event: any): void {\r\n let pageNo = event.target.value;\r\n if (pageNo < 1) {\r\n this.pageDetails.currentPage = 1;\r\n } else if (pageNo > this.pageDetails.totalPages) {\r\n this.pageDetails.currentPage = this.pageDetails.totalPages;\r\n }\r\n this.recordsToShow.max =\r\n this.pageDetails.currentPage * this.pageDetails.pageSize;\r\n this.recordsToShow.min =\r\n this.pageDetails.currentPage * this.pageDetails.pageSize -\r\n this.pageDetails.pageSize;\r\n\r\n this.onPaginationChange.emit({\r\n page: this.pageDetails.currentPage - 1,\r\n pageSize: this.pageDetails.pageSize,\r\n });\r\n }\r\n\r\n /**\r\n * @description method to sort data according to type and column\r\n * @author Tarun Kumar\r\n * @param sortingColumIndex\r\n * @param col\r\n * @param sortingType\r\n */\r\n onSortingRowData(sortingColumIndex: number, col: any): void {\r\n if (!col.sortable) return;\r\n this.sortingColumnIndex = sortingColumIndex;\r\n Object.keys(this.sortingType).forEach((k) => {\r\n if (k !== String(sortingColumIndex)) this.sortingType[k] = '';\r\n });\r\n\r\n if (!this.sortingType[sortingColumIndex]) {\r\n this.sortingType[sortingColumIndex] = 'asc';\r\n } else {\r\n this.sortingType[sortingColumIndex] =\r\n this.sortingType[sortingColumIndex] === 'asc' ? 'dsc' : '';\r\n }\r\n\r\n if (this.sortingType[sortingColumIndex] == 'asc') {\r\n this.ascendingOrder(col);\r\n } else if (this.sortingType[sortingColumIndex] == 'dsc') {\r\n this.descendingOrder(col);\r\n } else {\r\n this.rowData = structuredClone(this.originalRowData);\r\n }\r\n\r\n this.getGroupedData();\r\n }\r\n\r\n /**\r\n * @description method to sort table in ascending order according to given field\r\n * @param fieldName\r\n */\r\n ascendingOrder(col: any): void {\r\n this.rowData = this.rowData.sort((a, b) => {\r\n const valA = this.parseColValue(a, col);\r\n const valB = this.parseColValue(b, col);\r\n if (typeof valA === 'string' && typeof valB === 'string') {\r\n return valA.localeCompare(valB);\r\n } else {\r\n if (valA > valB) {\r\n return 1;\r\n } else {\r\n return -1;\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @description method to sort table in descending order according to given field\r\n * @param fieldName\r\n */\r\n descendingOrder(col: any): void {\r\n this.rowData = this.rowData.sort((a, b) => {\r\n const valA = this.parseColValue(a, col);\r\n const valB = this.parseColValue(b, col);\r\n if (typeof valA === 'string' && typeof valB === 'string') {\r\n return valA.localeCompare(valB) * -1;\r\n } else {\r\n if (valA > valB) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @description method to check/uncheck all rows on header checkbox selection/deselection\r\n * @author Tarun Kumar\r\n * @param event\r\n */\r\n onHeaderCheckboxChange(event: any): void {\r\n if (event.target.checked) {\r\n this.rowData = this.rowData.map((data) => {\r\n data.isSelected = true;\r\n return data;\r\n });\r\n this.selectedRow = JSON.parse(JSON.stringify(this.rowData));\r\n this.onCheckboxSelection.emit(this.rowData);\r\n } else {\r\n this.rowData = this.rowData.map((data) => {\r\n data.isSelected = false;\r\n return data;\r\n });\r\n this.selectedRow = [];\r\n this.onCheckboxSelection.emit([]);\r\n }\r\n }\r\n\r\n /**\r\n * @description method to check/uncheck row on row checkbox selection/deselection\r\n * @author Tarun Kumar\r\n * @param event\r\n */\r\n onRowCheckboxSelection(event: any): void {\r\n if (event.target.checked) {\r\n let ind = this.rowData.findIndex(\r\n (item: any) => item.rowId == event.target.id\r\n );\r\n this.rowData[ind].isSelected = true;\r\n if (\r\n this.checkboxSelectionType != 'multiple' &&\r\n this.selectedRow.length > 0\r\n ) {\r\n (\r\n document.getElementById(this.selectedRow[0].rowId) as HTMLInputElement\r\n ).checked = false;\r\n this.selectedRow = [];\r\n }\r\n this.selectedRow.push(this.rowData[ind]);\r\n\r\n this.onCheckboxSelection.emit(this.selectedRow);\r\n } else {\r\n let ind = this.rowData.findIndex(\r\n (item: any) => item.rowId == event.target.id\r\n );\r\n this.rowData[ind].isSelected = false;\r\n let i = this.selectedRow.findIndex(\r\n (item: any) => item.rowId == event.target.id\r\n );\r\n this.selectedRow.splice(i, 1);\r\n this.onCheckboxSelection.emit(this.selectedRow);\r\n }\r\n this.cd.detectChanges();\r\n }\r\n /**\r\n * @description method to check/uncheck all rows on header checkbox selection/deselection\r\n * @author Tarun Kumar\r\n * @param col\r\n * @returns {object}\r\n */\r\n getStyle(col: any, type?: string): object {\r\n const style: any = {\r\n width: `${col.width ?? 150}px`,\r\n minWidth: `${col.minWidth ?? 50}px`,\r\n };\r\n if (col.isAction) {\r\n style.position = 'sticky';\r\n style.right = '0px';\r\n style.zIndex = 1;\r\n style.background = '#fff';\r\n style.width = '60px';\r\n style.minWidth = '60px';\r\n } else if (col.leftPinned) {\r\n style.position = 'sticky';\r\n style.left = col.left + 'px';\r\n style.zIndex = 12;\r\n style.background = '#fff';\r\n } else if (col.rightPinned) {\r\n style.position = 'sticky';\r\n style.right = col.right + 'px';\r\n style.zIndex = 12;\r\n style.background = '#fff';\r\n } else {\r\n style.position = '';\r\n }\r\n if (type === 'action') {\r\n style.background = '#f0f0f0';\r\n }\r\n return style;\r\n }\r\n onClickOutside() {\r\n this.showPageSizeList = false;\r\n this.activeFilterIndex = null;\r\n this.menuVisible = this.menuVisible.map(() => false);\r\n }\r\n checkCondition(data: any): boolean {\r\n if (data.status) return true;\r\n else return false;\r\n }\r\n infinityScroll(event: any) {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.rowData.length\r\n ) {\r\n this.onScrollEmitter.emit();\r\n }\r\n }\r\n\r\n checkAllSelected(): boolean {\r\n if (!this.rowData.length) return false;\r\n return this.selectedRow.length == this.rowData.length;\r\n }\r\n checkInterminate(): boolean {\r\n if (!this.rowData.length) return false;\r\n return (\r\n this.selectedRow.length > 0 &&\r\n this.selectedRow.length < this.rowData.length\r\n );\r\n }\r\n\r\n /**\r\n * @author Tarun Kumar\r\n * @description function triggered when the drag starts\r\n * @param {event object, index}\r\n * @returns {void}\r\n */\r\n onDragStart(event: DragEvent, index: number) {\r\n this.dragGroupIndex = null;\r\n const target = event.target as HTMLElement;\r\n if (this.isResizing) {\r\n event.preventDefault();\r\n return;\r\n }\r\n this.draggedIndex = index;\r\n\r\n // For column reorder.\r\n event.dataTransfer?.setData('text/plain', index.toString());\r\n\r\n // For group panel\r\n event.dataTransfer?.setData('columnIndex', index.toString());\r\n\r\n const th = target.closest('th') as HTMLElement;\r\n if (!th) return;\r\n const clone = th.cloneNode(true) as HTMLElement;\r\n\r\n this.copyComputedStyles(th, clone);\r\n\r\n clone.style.position = 'absolute';\r\n clone.style.top = '-9999px';\r\n clone.style.left = '-9999px';\r\n clone.style.pointerEvents = 'none';\r\n\r\n document.body.appendChild(clone);\r\n event.dataTransfer?.setDragImage(clone, 0, 0);\r\n setTimeout(() => clone.remove(), 0);\r\n }\r\n\r\n onGroupDragStart(event: DragEvent, index: number) {\r\n event.dataTransfer?.setData('groupIndex', index.toString());\r\n this.dragGroupIndex = index;\r\n }\r\n\r\n /**\r\n * @author Anand Pandey\r\n * @description Copies computed CSS styles from the source element to the target element, including all child elements recursively.\r\n * @param {HTMLElement} source - Original element.\r\n * @param {HTMLElement} target - Cloned element.\r\n * @returns {void}\r\n */\r\n copyComputedStyles(source: HTMLElement, target: HTMLElement) {\r\n const computed = window.getComputedStyle(source);\r\n for (const prop of computed) {\r\n target.style.setProperty(prop, computed.getPropertyValue(prop));\r\n }\r\n\r\n // Copy children styles recursively\r\n const sourceChildren = Array.from(source.children) as HTMLElement[];\r\n const targetChildren = Array.from(target.children) as HTMLElement[];\r\n\r\n sourceChildren.forEach((srcChild, i) => {\r\n const tgtChild = targetChildren[i] as HTMLElement;\r\n if (srcChild && tgtChild) {\r\n this.copyComputedStyles(srcChild, tgtChild);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @author Tarun Kumar\r\n * @description function to track the index of the element being dragged over and allow dropping\r\n * @param {event object, index}\r\n * @returns {void}\r\n */\r\n onDragOver(event: DragEvent, index: number) {\r\n event.preventDefault();\r\n this.isResizing = false;\r\n if (this.dragOverIndex !== index) {\r\n this.dragOverIndex = index;\r\n }\r\n }\r\n\r\n /**\r\n * @author Tarun Kumar\r\n * @description function to Reorder the items on drop\r\n * @param {event object, index}\r\n * @returns {void}\r\n */\r\n onDrop(event: DragEvent, index: number) {\r\n event.preventDefault();\r\n if (this.draggedIndex === null) return;\r\n const draggedItem = this.colDefs[this.draggedIndex];\r\n this.colDefs.splice(this.draggedIndex, 1);\r\n this.colDefs.splice(index, 0, draggedItem);\r\n this.draggedIndex = null;\r\n this.dragOverIndex = null;\r\n }\r\n\r\n /**\r\n * @author Tarun Kumar\r\n * @description function to reset dragOverIndex when the drag ends\r\n * @param {none}\r\n * @returns {void}\r\n */\r\n onDragEnd() {\r\n this.draggedIndex = null;\r\n this.dragOverIndex = null;\r\n }\r\n\r\n /**\r\n * @description Handles drag over on group panel to allow dropping.\r\n * @author Anand Pandey\r\n * @param {DragEvent} event\r\n * @returns {void}\r\n */\r\n onGroupDragOver(event: DragEvent) {\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * @description Handles drag over on a group tag and updates the target index for reordering.\r\n * @author Anand Pandey\r\n * @param {DragEvent} event\r\n * @param {number} index\r\n * @returns {void}\r\n */\r\n onActiveDragOver(event: DragEvent, index: number) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.dragGroupIndex = index;\r\n }\r\n\r\n /**\r\n * @description Handles drop on group panel and routes the drop to group reordering or column grouping logic.\r\n * @author Anand Pandey\r\n * @param {DragEvent} event\r\n * @returns {void}\r\n */\r\n onGroupDrop(event: DragEvent) {\r\n const colIndex = Number(event.dataTransfer?.getData('columnIndex'));\r\n const groupIndex = Number(event.dataTransfer?.getData('groupIndex'));\r\n const target = event.target as HTMLElement;\r\n const isOverGroupPanel = target.closest('.group-tag');\r\n if (\r\n this.dragGroupIndex !== null &&\r\n this.dragGroupIndex >= 0 &&\r\n groupIndex >= 0\r\n ) {\r\n if (!isOverGroupPanel) {\r\n this.dragGroupIndex = this.activeGroups.length - 1;\r\n }\r\n this.onActiveGroupDrop(event, this.dragGroupIndex);\r\n } else {\r\n if (isNaN(colIndex)) return;\r\n if (colIndex) this.dragGroupIndex = null;\r\n\r\n const col = this.colDefs[colIndex];\r\n\r\n const el = this.activeGroups.find((c) => c.fieldName === col.fieldName);\r\n if (!el) {\r\n this.activeGroups.push(col);\r\n this.groupBy.push(col.fieldName);\r\n }\r\n this.colDefs.splice(colIndex, 1);\r\n // this.applyGrouping();\r\n this.getGroupedData();\r\n }\r\n }\r\n\r\n /**\r\n * @description Handles column grouping triggered from the column action menu by adding the column to the active group list,\r\n * removing it from visible columns, and recalculating grouped row data.\r\n *\r\n * @param {any} col - The column definition selected for grouping.\r\n * @param {number} index - Index of the column in the current column definitions array.\r\n * @returns {void}\r\n */\r\n\r\n groupByColumnAction(col: any, index: number) {\r\n this.activeGroups.push(col);\r\n this.groupBy.push(col.fieldName);\r\n this.colDefs.splice(index, 1);\r\n this.getGroupedData();\r\n this.onClickOutside();\r\n }\r\n\r\n /**\r\n * @description Handles drop on a group tag and reorders the active groups accordingly.\r\n * @author Anand Pandey\r\n * @param {DragEvent} event\r\n * @param {number} index\r\n * @returns {void}\r\n */\r\n onActiveGroupDrop(event: DragEvent, index: number) {\r\n event.stopPropagation();\r\n const groupIndex = Number(event.dataTransfer?.getData('groupIndex'));\r\n if (isNaN(groupIndex)) return;\r\n if (groupIndex === index) return;\r\n const item = this.groupBy.splice(groupIndex, 1)[0];\r\n this.groupBy.splice(index, 0, item);\r\n\r\n const col = this.activeGroups.splice(groupIndex, 1)[0];\r\n this.activeGroups.splice(index, 0, col);\r\n this.getGroupedData();\r\n }\r\n\r\n /**\r\n * @description Removes a group tag and restores the column to available columns list.\r\n * @author Anand Pandey\r\n * @param {any} col\r\n * @param {number} id\r\n * @returns {void}\r\n */\r\n removeGroup(col: any, id: number) {\r\n this.activeGroups.splice(id, 1);\r\n const colIndex = this.originalColDefs.findIndex(\r\n (dt) => dt.fieldName === col.fieldName\r\n );\r\n this.colDefs.splice(colIndex, 0, col);\r\n this.groupBy.splice(id, 1);\r\n if (this.groupBy.length === 0) {\r\n this.groupedResult = [];\r\n } else {\r\n this.getGroupedData();\r\n }\r\n }\r\n\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n }\r\n\r\n selectFilter(option: any, col: any): void {\r\n col.textFilters[0].filterType = option.value;\r\n this.showDropdown = false;\r\n }\r\n\r\n getSelectedFilterLabel(value: string): string {\r\n return this.filterOptions.find((o) => o.value === value)?.label || '';\r\n }\r\n\r\n toggleFilter(col: any, index: number, event: MouseEvent) {\r\n event.stopPropagation();\r\n this.activeFilterIndex = this.activeFilterIndex === index ? null : index;\r\n this.menuVisible = this.menuVisible.map(() => false);\r\n }\r\n\r\n onMouseEnterHeader(index: number) {\r\n this.showMoveIcon[index] = true;\r\n }\r\n\r\n onMouseLeaveHeader(index: number) {\r\n this.showMoveIcon[index] = false;\r\n }\r\n\r\n enableColumnDrag(event: MouseEvent, index: number) {\r\n event.stopPropagation();\r\n this.columnDraggable[index] = true;\r\n }\r\n\r\n disableColumnDrag(event: MouseEvent, index: number) {\r\n event.stopPropagation();\r\n this.columnDraggable[index] = false;\r\n }\r\n\r\n dateTimeSelected(date: any) {\r\n this.applyAllFilters();\r\n }\r\n}\r\n","<div class=\"tableArea\">\r\n @if(groupByRequired){\r\n <!-- Group Panel -->\r\n <div\r\n class=\"group_panel\"\r\n (dragover)=\"onGroupDragOver($event)\"\r\n (drop)=\"onGroupDrop($event)\"\r\n >\r\n <img alt=\"\" src=\"images/t-data-pipeline.svg\" class=\"icon\" />\r\n @for(g of activeGroups; track $index){\r\n <div\r\n class=\"group_tag\"\r\n draggable=\"true\"\r\n (dragstart)=\"onGroupDragStart($event, $index)\"\r\n (dragover)=\"onActiveDragOver($event, $index)\"\r\n (drop)=\"onActiveGroupDrop($event, $index)\"\r\n >\r\n <img src=\"images/t-gripper.svg\" alt=\"\" />\r\n <span>{{ g.headerName }}</span>\r\n <button class=\"remove_tag\" (click)=\"removeGroup(g, $index)\">\r\n <img src=\"images/t-x.svg\" alt=\"\" />\r\n </button>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" class=\"divider\" />\r\n } @if(activeGroups.length === 0){\r\n <div class=\"group_placeholder\">Drag here to set row groups</div>\r\n }\r\n </div>\r\n }\r\n <div\r\n class=\"table_wrapper\"\r\n id=\"container_scroll\"\r\n #parent\r\n (scroll)=\"infinityScroll($event)\"\r\n [ngStyle]=\"{ height: height + 'px' }\"\r\n >\r\n <table cellspacing=\"0\" cellpadding=\"0\">\r\n <thead class=\"sticky-top\">\r\n <tr>\r\n @if (checkBoxSelection && checkboxSelectionType == 'multiple') {\r\n <th style=\"width: 50px\">\r\n <span class=\"checkbox_container\"\r\n ><input\r\n class=\"pointer\"\r\n type=\"checkbox\"\r\n name=\"\"\r\n id=\"\"\r\n [checked]=\"checkAllSelected()\"\r\n [indeterminate]=\"checkInterminate()\"\r\n (change)=\"onHeaderCheckboxChange($event)\"\r\n /></span>\r\n </th>\r\n\r\n } @else{\r\n <th></th>\r\n } @if(activeGroups.length > 0){\r\n <th class=\"active_group\">\r\n <div class=\"th_wraper\">\r\n <div class=\"text_wrapper\">\r\n <span class=\"ellipsis headerName\">Group</span>\r\n </div>\r\n <div class=\"filter_three_dot_wrapper\">\r\n <div class=\"three-dots\">\r\n <img src=\"images/t-more-vertical.svg\" />\r\n </div>\r\n </div>\r\n </div>\r\n </th>\r\n } @for (col of colDefs; track col.colId) {\r\n <th\r\n [ngStyle]=\"getStyle(col, 'action')\"\r\n [ngClass]=\"{ 'drag-over': dragOverIndex === $index }\"\r\n (dragover)=\"onDragOver($event, $index)\"\r\n (drop)=\"onDrop($event, $index)\"\r\n (mouseenter)=\"onMouseEnterHeader($index)\"\r\n (mouseleave)=\"onMouseLeaveHeader($index)\"\r\n >\r\n <div class=\"th_wraper\">\r\n <div\r\n class=\"text_wrapper\"\r\n [ngStyle]=\"getStyle(col, 'action')\"\r\n (click)=\"onSortingRowData($index, col)\"\r\n >\r\n @if(showMoveIcon[$index] && !col.isAction){\r\n <img\r\n src=\"images/t-move.svg\"\r\n class=\"move-icon\"\r\n [draggable]=\"!isResizing || columnDraggable[$index]\"\r\n (dragstart)=\"onDragStart($event, $index)\"\r\n (dragend)=\"onDragEnd()\"\r\n (mouseenter)=\"enableColumnDrag($event, $index)\"\r\n (mouseleave)=\"disableColumnDrag($event, $index)\"\r\n />\r\n\r\n }\r\n <span class=\"ellipsis headerName\">{{ col?.headerName }}</span>\r\n\r\n @if (sortingRequired && sortingColumnIndex == $index &&\r\n col?.sortable && !col.isAction) {\r\n <span class=\"sorting_icon\">\r\n @if(sortingType[$index]=== 'asc'){\r\n <img\r\n src=\"images/t-arrow-up.svg\"\r\n class=\"sorting_up\"\r\n [draggable]=\"false\"\r\n (dragstart)=\"\r\n $event.preventDefault(); $event.stopPropagation()\r\n \"\r\n />\r\n } @if(sortingType[$index]=== 'dsc'){\r\n <!-- <i class=\"fa fa-caret-down\" [ngClass]=\"sortingColumnIndex == $index && sortingType == 'dsc' ? 'muted_sort' : ''\"></i> -->\r\n <img\r\n src=\"images/t-arrow-down.svg\"\r\n class=\"sorting_down\"\r\n [draggable]=\"false\"\r\n (dragstart)=\"\r\n $event.preventDefault(); $event.stopPropagation()\r\n \"\r\n />\r\n }\r\n </span>\r\n\r\n }\r\n </div>\r\n <div class=\"filter_three_dot_wrapper\">\r\n <!-- Column Filters Logic-->\r\n @if(filterRequired && col.filterable){\r\n <div\r\n #trigger\r\n class=\"filters\"\r\n (click)=\"toggleFilter(col, $index, $event)\"\r\n >\r\n @if(activeFilters.has(col.fieldName)){\r\n <img\r\n src=\"images/t-filter-applied.svg\"\r\n class=\"filter-icon\"\r\n [draggable]=\"false\"\r\n (dragstart)=\"\r\n $event.preventDefault(); $event.stopPropagation()\r\n \"\r\n />\r\n }@else {\r\n <img\r\n src=\"images/t-filter.svg\"\r\n class=\"filter-icon\"\r\n [draggable]=\"false\"\r\n (dragstart)=\"\r\n $event.preventDefault(); $event.stopPropagation()\r\n \"\r\n />\r\n } @if (activeFilterIndex === $index) {\r\n <div\r\n adaptivePosition\r\n [trigger]=\"trigger\"\r\n [parentContainer]=\"parent\"\r\n [matchWidth]=\"false\"\r\n class=\"filter_wrapper\"\r\n id=\"filter_wrapper-{{ $index }}\"\r\n (click)=\"$event.stopPropagation()\"\r\n appOutsideClick\r\n (clickOutside)=\"onClickOutside()\"\r\n >\r\n <!-- Text Filter -->\r\n @if(col.filterType === 'text'){\r\n\r\n <lib-common-input\r\n [options]=\"filterOptions\"\r\n [selectedValue]=\"col.textFilters[0].filterType\"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"col.textFilters[0].filterType = $event\"\r\n ></lib-common-input>\r\n\r\n <div class=\"search_input\">\r\n <img src=\"images/search.svg\" alt=\"\" />\r\n <input\r\n type=\"text\"\r\n placeholder=\"Filter\"\r\n [(ngModel)]=\"col.textFilters[0].filterValue\"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n\r\n <!-- <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.textFilters[0].filterValue\"\r\n placeholder=\"Filter…\"\r\n (keyup)=\"applyAllFilters()\"\r\n /> -->\r\n\r\n @if(col.textFilters[0].filterValue){\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"textLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.textLogic\"\r\n value=\"AND\"\r\n id=\"{{ $index }}\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n <label [for]=\"$index\">AND</label>\r\n\r\n <input\r\n type=\"radio\"\r\n name=\"textLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.textLogic\"\r\n value=\"OR\"\r\n id=\"{{ $index + 1 }}\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n <label [for]=\"$index + 1\">OR</label>\r\n </div>\r\n\r\n <lib-common-input\r\n [options]=\"filterOptions\"\r\n [selectedValue]=\"col.textFilters[1].filterType\"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"col.textFilters[1].filterType = $event\"\r\n ></lib-common-input>\r\n <!-- <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.textFilters[1].filterValue\"\r\n placeholder=\"Filter…\"\r\n (keyup)=\"applyAllFilters()\"\r\n /> -->\r\n\r\n <div class=\"search_input\">\r\n <img src=\"images/search.svg\" alt=\"\" />\r\n <input\r\n type=\"text\"\r\n placeholder=\"Filter\"\r\n [(ngModel)]=\"col.textFilters[1].filterValue\"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n } }\r\n\r\n <!-- Number Filter -->\r\n @if(col.filterType === 'number'){\r\n\r\n <lib-common-input\r\n [options]=\"numberFilterOptions\"\r\n [selectedValue]=\"col.numberFilters[0].filterType\"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"col.numberFilters[0].filterType = $event\"\r\n ></lib-common-input>\r\n\r\n <!-- <input\r\n type=\"number\"\r\n [(ngModel)]=\"col.numberFilters[0].numberValue\"\r\n (input)=\"applyAllFilters()\"\r\n /> -->\r\n\r\n <div class=\"search_input\">\r\n <img src=\"images/search.svg\" alt=\"\" />\r\n <input\r\n type=\"number\"\r\n placeholder=\"Filter\"\r\n [(ngModel)]=\"col.numberFilters[0].numberValue\"\r\n (input)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n\r\n @if(col.numberFilters[0].numberValue){\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"textLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.textLogic\"\r\n value=\"AND\"\r\n id=\"{{ $index }}\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n <label [for]=\"$index\">AND</label>\r\n\r\n <input\r\n type=\"radio\"\r\n name=\"textLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.textLogic\"\r\n value=\"OR\"\r\n id=\"{{ $index + 1 }}\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n <label [for]=\"$index + 1\">OR</label>\r\n </div>\r\n\r\n <lib-common-input\r\n [options]=\"numberFilterOptions\"\r\n [selectedValue]=\"col.numberFilters[1].filterType\"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"col.numberFilters[1].filterType = $event\"\r\n ></lib-common-input>\r\n\r\n <div class=\"search_input\">\r\n <img src=\"images/search.svg\" alt=\"\" />\r\n <input\r\n type=\"text\"\r\n placeholder=\"Filter\"\r\n [(ngModel)]=\"col.numberFilters[1].numberValue\"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n <!-- <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.numberFilters[1].numberValue\"\r\n placeholder=\"Filter…\"\r\n (keyup)=\"applyAllFilters()\"\r\n /> -->\r\n } }\r\n\r\n <!-- DATE FILTER -->\r\n @if(col.filterType === 'date'){\r\n\r\n <lib-common-input\r\n [options]=\"numberFilterOptions\"\r\n [selectedValue]=\"col.dateFilters[0].filterType\"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"col.dateFilters[0].filterType = $event\"\r\n ></lib-common-input>\r\n\r\n <!-- <input\r\n type=\"date\"\r\n [(ngModel)]=\"col.dateFilters[0].dateValue\"\r\n (change)=\"applyAllFilters()\"\r\n /> -->\r\n <lib-common-calendar\r\n [dateConfig]=\"dateConfig\"\r\n [(ngModel)]=\"col.dateFilters[0].dateValue\"\r\n (dateTimeSelected)=\"dateTimeSelected($event)\"\r\n ></lib-common-calendar>\r\n\r\n @if(col.dateFilters[0].dateValue){\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"textLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.textLogic\"\r\n value=\"AND\"\r\n id=\"{{ $index }}\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n <label [for]=\"$index\">AND</label>\r\n\r\n <input\r\n type=\"radio\"\r\n name=\"textLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.textLogic\"\r\n value=\"OR\"\r\n id=\"{{ $index + 1 }}\"\r\n (change)=\"applyAllFilters()\"\r\n />\r\n <label [for]=\"$index + 1\">OR</label>\r\n </div>\r\n\r\n <lib-common-input\r\n [options]=\"numberFilterOptions\"\r\n [selectedValue]=\"col.dateFilters[1].filterType\"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"col.dateFilters[1].filterType = $event\"\r\n ></lib-common-input>\r\n\r\n <lib-common-calendar\r\n [dateConfig]=\"dateConfig\"\r\n [(ngModel)]=\"col.dateFilters[1].dateValue\"\r\n (dateTimeSelected)=\"dateTimeSelected($event)\"\r\n ></lib-common-calendar>\r\n } }\r\n\r\n <!-- SET FILTER (CHECKBOX LIST) -->\r\n @if(col.filterType === 'set'){\r\n <!-- <input\r\n type=\"text\"\r\n placeholder=\"Search...\"\r\n (input)=\"filterSetOptions(col, $event)\"\r\n /> -->\r\n <div class=\"search_input\">\r\n <img src=\"images/search.svg\" alt=\"\" />\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search...\"\r\n (input)=\"filterSetOptions(col, $event)\"\r\n />\r\n </div>\r\n\r\n <div class=\"set_option_details\">\r\n <label class=\"checkbox_container\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isAllSelected(col)\"\r\n (change)=\"toggleSelectAll(col, $event)\"\r\n />\r\n (Select All)\r\n </label>\r\n <div class=\"set_options\" id=\"container_scroll\">\r\n @for(opt of col.filteredOptions; track $index){\r\n <label class=\"checkbox_container\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"col.selectedValues.has(opt)\"\r\n (change)=\"toggleSetOption(col, opt, $event)\"\r\n />\r\n {{ opt }}\r\n </label>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <div class=\"filter_btn\">\r\n <button\r\n class=\"reset_btn\"\r\n type=\"button\"\r\n (click)=\"resetFilter(col)\"\r\n >\r\n Reset\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Three dots menu-->\r\n <div #triggerColMenu>\r\n @if(threeDotsMenuRequired && col.columnAction){\r\n\r\n <div\r\n class=\"three-dots\"\r\n (click)=\"openMenu($event, col, $index)\"\r\n >\r\n <img\r\n src=\"images/t-more-vertical.svg\"\r\n [draggable]=\"false\"\r\n (dragstart)=\"\r\n $event.preventDefault(); $event.stopPropagation()\r\n \"\r\n />\r\n </div>\r\n }\r\n </div>\r\n @if(!col.isAction){\r\n <span\r\n class=\"resize-handle\"\r\n (mousedown)=\"startResize($event, $index)\"\r\n >\r\n |\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- popup open -->\r\n @if(menuVisible[$index]){\r\n <div\r\n class=\"dropdown_wrapper\"\r\n adaptivePosition\r\n [trigger]=\"triggerColMenu\"\r\n [parentContainer]=\"parent\"\r\n [matchWidth]=\"false\"\r\n [isColumnActionMenu]=\"true\"\r\n (click)=\"$event.stopPropagation()\"\r\n appOutsideClick\r\n (clickOutside)=\"onClickOutside()\"\r\n >\r\n <div class=\"right_click_dropdown\" id=\"container_scroll\">\r\n @if(sortingType[$index] === 'dsc' || sortingType[$index] ===\r\n ''){\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"onSort(col, 'asc', $index)\"\r\n >\r\n <div class=\"left_item\">\r\n <img\r\n src=\"images/arrow-up.svg\"\r\n class=\"sorting_up\"\r\n [ngClass]=\"{ disable: !col.sortable }\"\r\n />\r\n <span class=\"text\">Sort Ascending</span>\r\n </div>\r\n </div>\r\n } @if(sortingType[$index] === 'asc' || sortingType[$index] ===\r\n ''){\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"onSort(col, 'dsc', $index)\"\r\n >\r\n <div class=\"left_item\">\r\n <img src=\"images/arrow-down.svg\" />\r\n <span class=\"text\">Sort Descending</span>\r\n </div>\r\n </div>\r\n } @if(sortingType[$index] === 'asc' || sortingType[$index] ===\r\n 'dsc'){\r\n <div class=\"right_click_item\" (click)=\"onSort(col, '', $index)\">\r\n <div class=\"left_item\">\r\n <img src=\"images/trash-2.svg\" />\r\n <span class=\"text\">Clear Sort</span>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"divder\"></div>\r\n\r\n <div\r\n class=\"right_click_item\"\r\n (mouseenter)=\"showPinActions()\"\r\n (mouseleave)=\"hidePinActions()\"\r\n >\r\n <div class=\"left_item\">\r\n <img src=\"images/pin.svg\" />\r\n <span class=\"text\">Pin Column</span>\r\n </div>\r\n <div class=\"right_item\">\r\n <img src=\"images/chevron-right.svg\" />\r\n @if(showPin){\r\n <div class=\"second_dropdown\">\r\n <div\r\n (click)=\"pinColumn(col, $index, 'none')\"\r\n class=\"right_click_item\"\r\n >\r\n <div class=\"left_item\">\r\n @if((pinActionClicked[col.colId]?? 'none') ===\r\n 'none'){\r\n <img src=\"images/check.svg\" />\r\n } @else{\r\n <img src=\"\" alt=\"\" />\r\n }\r\n <span class=\"text\">No Pin</span>\r\n </div>\r\n </div>\r\n <div\r\n (click)=\"pinColumn(col, $index, 'left')\"\r\n class=\"right_click_item\"\r\n >\r\n <div class=\"left_item\">\r\n @if(pinActionClicked[col.colId] === 'left'){\r\n <img src=\"images/check.svg\" />\r\n } @else{\r\n <img src=\"\" alt=\"\" />\r\n }\r\n <span class=\"text\">Pin Left</span>\r\n </div>\r\n </div>\r\n <div\r\n (click)=\"pinColumn(col, $index, 'right')\"\r\n class=\"right_click_item\"\r\n >\r\n <div class=\"left_item\">\r\n @if(pinActionClicked[col.colId] === 'right'){\r\n <img src=\"images/check.svg\" />\r\n } @else{\r\n <img src=\"\" alt=\"\" />\r\n }\r\n <span class=\"text\">Pin Right</span>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- <div\r\n class=\"right_click_item\"\r\n (click)=\"pinColumn(col, $index, 'left')\"\r\n >\r\n <div class=\"left_item\">\r\n <img src=\"images/pin.svg\" />\r\n <span class=\"text\">{{\r\n col.leftPinned ? \"Unpin Left Column\" : \"Pin Column Left\"\r\n }}</span>\r\n </div>\r\n </div>\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"pinColumn(col, $index, 'right')\"\r\n >\r\n <div class=\"left_item\">\r\n <img src=\"images/pin.svg\" />\r\n <span class=\"text\">\r\n {{\r\n col.rightPinned\r\n ? \"Unpin Right Column\"\r\n : \"Pin Column Right\"\r\n }}\r\n </span>\r\n </div>\r\n <div class=\"right_item\">\r\n <img src=\"images/arrow-right.svg\" alt=\"\" />\r\n </div>\r\n </div> -->\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <img src=\"\" alt=\"\" />\r\n <span class=\"text\">Autosize This Column</span>\r\n </div>\r\n </div>\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <img src=\"\" alt=\"\" />\r\n <span class=\"text\">Autosize All Columns</span>\r\n </div>\r\n </div>\r\n <div class=\"right_click_item\">\r\n <div\r\n class=\"left_item\"\r\n (click)=\"groupByColumnAction(col, $index)\"\r\n >\r\n <img src=\"images/t-group-by-name.svg\" alt=\"\" />\r\n <span class=\"text\">Group by {{ col.headerName }}</span>\r\n </div>\r\n </div>\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <img src=\"images/t-choose-column.svg\" alt=\"\" />\r\n <span class=\"text\">Choose Columns</span>\r\n </div>\r\n </div>\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <img src=\"\" alt=\"\" />\r\n <span class=\"text\">Reset Columns</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if(groupedResult && groupedResult.length > 0){ @for(group of\r\n groupedResult; track group.key){\r\n <tr (click)=\"toggleGroup(group)\">\r\n <td\r\n class=\"group-cell\"\r\n [attr.colspan]=\"\r\n colDefs.length +\r\n (checkBoxSelection ? 1 : 0) +\r\n (activeGroups.length > 0 ? 1 : 0)\r\n \"\r\n >\r\n <span class=\"group-toggle\">\r\n <img\r\n src=\"images/{{\r\n group.expanded ? 'chevron-down.svg' : 'chevron-right.svg'\r\n }}\"\r\n />\r\n {{ group.key }} ({{ group.children.length }})\r\n </span>\r\n </td>\r\n </tr>\r\n\r\n @if(group.expanded){\r\n <!-- CASE 1: CHILDREN ARE MORE GROUPS -->\r\n @if (group.children[0]?.children) { @for (child of group.children; track\r\n child.key) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: child,\r\n colDefs: colDefs,\r\n checkBoxSelection: checkBoxSelection,\r\n activeGroups: activeGroups,\r\n level: 1\r\n }\"\r\n ></ng-container>\r\n } }\r\n\r\n <!-- CASE 2: CHILDREN ARE RAW ROWS -->\r\n @if (!group.children[0]?.children) { @for (row of group.children; track\r\n row.rowId) {\r\n <tr [ngClass]=\"row | addClass : tableOptions\">\r\n <!-- Checkbox column if any -->\r\n @if (checkBoxSelection) {\r\n <td>\r\n <span class=\"checkbox_container\">\r\n <input type=\"checkbox\" [checked]=\"row.isSelected\"\r\n /></span>\r\n </td>\r\n } @if (activeGroups.length > 0) {\r\n <td class=\"group-placeholder\"></td>\r\n }\r\n\r\n <!-- Render columns -->\r\n @for (col of colDefs; track col.colId) {\r\n <td [ngStyle]=\"getStyle(col)\">\r\n <!-- {{ row[col.fieldName] }} -->\r\n @if (!col?.cellRenderer) {\r\n <div class=\"cell-value\">\r\n <div\r\n class=\"more_data_wrapper\"\r\n [ngClass]=\"{ ellipsis: !col.wrapText }\"\r\n >\r\n {{ parseColValue(row, col) }}\r\n </div>\r\n <div class=\"see_more_data\" id=\"container_scroll\">\r\n <div class=\"item\">\r\n <span class=\"desc\"> {{ parseColValue(row, col) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n } @else{\r\n <div\r\n [rowParam]=\"row\"\r\n [col]=\"col\"\r\n [api]=\"tableOptions\"\r\n [currentValue]=\"row[col.fieldName]\"\r\n appRendererParser\r\n ></div>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n } } } } } @else{ @for (data of rowData; track data.rowId) {\r\n <tr [ngClass]=\"data | addClass : tableOptions\">\r\n @if (checkBoxSelection) {\r\n <td style=\"min-width: 50px\">\r\n @if (checkboxSelectionType=='multiple') {\r\n <span class=\"checkbox_container\"\r\n ><input\r\n type=\"checkbox\"\r\n class=\"pointer\"\r\n name=\"\"\r\n id=\"{{ data.rowId }}\"\r\n [checked]=\"data?.isSelected\"\r\n (change)=\"onRowCheckboxSelection($event)\"\r\n /></span>\r\n\r\n }@else{\r\n <span class=\"radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"\"\r\n id=\"{{ data.rowId }}\"\r\n [checked]=\"data?.isSelected\"\r\n (change)=\"onRowCheckboxSelection($event)\"\r\n />\r\n <label [for]=\"data.rowId\"></label>\r\n </span>\r\n\r\n }\r\n </td>\r\n } @for (col of colDefs; track col.colId) {\r\n <td\r\n [ngStyle]=\"getStyle(col)\"\r\n [ngClass]=\"[col?.addClass ? col.addClass(data) : '']\"\r\n >\r\n @if (!col?.cellRenderer) {\r\n <div class=\"cell-value\">\r\n <div\r\n class=\"more_data_wrapper\"\r\n [ngClass]=\"{ ellipsis: !col.wrapText }\"\r\n >\r\n {{ parseColValue(data, col) }}\r\n </div>\r\n <div class=\"see_more_data\" id=\"container_scroll\">\r\n <div class=\"item\">\r\n <span class=\"desc\"> {{ parseColValue(data, col) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n } @else{\r\n <div\r\n [rowParam]=\"data\"\r\n [col]=\"col\"\r\n [api]=\"tableOptions\"\r\n [currentValue]=\"data[col.fieldName]\"\r\n appRendererParser\r\n ></div>\r\n }\r\n <!-- Commented for later use -->\r\n <!-- <div class=\"tool_tip\">\r\n <span class=\"\"> {{ parseColValue(data, col.fieldName) }}aditya </span>\r\n </div> -->\r\n </td>\r\n }\r\n </tr>\r\n } @empty {\r\n <tr>\r\n <td\r\n [attr.colspan]=\"\r\n colDefs.length +\r\n (checkBoxSelection ? 1 : 0) +\r\n (activeGroups.length > 0 ? 1 : 0)\r\n \"\r\n >\r\n <div class=\"small_data\">\r\n @if (tableOptions?.noDataTemplate) {\r\n <ng-container\r\n *ngTemplateOutlet=\"tableOptions?.noDataTemplate\"\r\n ></ng-container>\r\n\r\n }@else{\r\n <!-- need to style it properly then we will add it -->\r\n <span>No Data To Show</span>\r\n\r\n }\r\n </div>\r\n </td>\r\n </tr>\r\n\r\n } }\r\n </tbody>\r\n\r\n <ng-template\r\n #groupTemplate\r\n let-node\r\n let-colDefs=\"colDefs\"\r\n let-checkBoxSelection=\"checkBoxSelection\"\r\n let-activeGroups=\"activeGroups\"\r\n let-level=\"level\"\r\n >\r\n <!-- GROUP HEADER -->\r\n <tr (click)=\"toggleGroup(node)\">\r\n <td\r\n [attr.colspan]=\"\r\n colDefs.length +\r\n (checkBoxSelection ? 1 : 0) +\r\n (activeGroups.length > 0 ? 1 : 0)\r\n \"\r\n [style.paddingLeft.px]=\"level * 20\"\r\n class=\"group-cell\"\r\n >\r\n <span class=\"group-toggle\">\r\n <img\r\n src=\"images/{{\r\n node.expanded ? 'chevron-down.svg' : 'chevron-right.svg'\r\n }}\"\r\n />\r\n {{ node.key }} ({{ node.children.length }})\r\n </span>\r\n </td>\r\n </tr>\r\n\r\n <!-- CHILDREN -->\r\n @if (node.expanded) {\r\n\r\n <!-- CASE: more groups -->\r\n @if (node.children[0]?.children) { @for (child of node.children; track\r\n child.key) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: child,\r\n colDefs: colDefs,\r\n checkBoxSelection: checkBoxSelection,\r\n activeGroups: activeGroups,\r\n level: level + 1\r\n }\"\r\n >\r\n </ng-container>\r\n } }\r\n\r\n <!-- CASE: final rows -->\r\n @if (!node.children[0]?.children) { @for (row of node.children; track\r\n row.rowId) {\r\n\r\n <tr [ngClass]=\"row | addClass : tableOptions\">\r\n <!-- Checkbox column if any -->\r\n @if (checkBoxSelection) {\r\n <td>\r\n <span class=\"checkbox_container\">\r\n <input type=\"checkbox\" [checked]=\"row.isSelected\"\r\n /></span>\r\n </td>\r\n } @if (activeGroups.length > 0) {\r\n <td class=\"group-placeholder\"></td>\r\n }\r\n\r\n <!-- Render columns -->\r\n @for (col of colDefs; track col.colId) {\r\n <td [ngStyle]=\"getStyle(col)\">\r\n <!-- {{ row[col.fieldName] }} -->\r\n @if (!col?.cellRenderer) {\r\n <div class=\"cell-value\">\r\n <div\r\n class=\"more_data_wrapper\"\r\n [ngClass]=\"{ ellipsis: !col.wrapText }\"\r\n >\r\n {{ parseColValue(row, col) }}\r\n </div>\r\n <div class=\"see_more_data\" id=\"container_scroll\">\r\n <div class=\"item\">\r\n <span class=\"desc\"> {{ parseColValue(row, col) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n } @else{\r\n <div\r\n [rowParam]=\"row\"\r\n [col]=\"col\"\r\n [api]=\"tableOptions\"\r\n [currentValue]=\"row[col.fieldName]\"\r\n appRendererParser\r\n ></div>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n } } }\r\n </ng-template>\r\n </table>\r\n </div>\r\n <!-- Table Wrapper Ends-->\r\n @if(paginationRequired){\r\n <div class=\"pagination_main\">\r\n <div class=\"entries_details\">\r\n <span>Showing</span>\r\n <div class=\"pagination_select\">\r\n <div\r\n class=\"select_dropdown pointer\"\r\n (click)=\"showPageSizeList = !showPageSizeList\"\r\n >\r\n <p class=\"select_text mb-0\">{{ pageDetails.pageSize }}</p>\r\n <span class=\"chevron_img\">\r\n <img src=\"images/chevron-down.svg\" class=\"pointer\" />\r\n </span>\r\n </div>\r\n @if(showPageSizeList){\r\n <div class=\"select_option\">\r\n @for(option of pageSizeList;track $index){\r\n <span\r\n class=\"pointer\"\r\n (click)=\"onPageSizeChanged(option); onClickOutside()\"\r\n >{{ option }}</span\r\n >\r\n }\r\n </div>\r\n }\r\n </div>\r\n <span\r\n >Rows | {{ totalRecords > 0 ? recordsToShow.min + 1 : 0 }} -\r\n {{\r\n recordsToShow.max > totalRecords ? totalRecords : recordsToShow.max\r\n }}\r\n of\r\n {{ totalRecords }} Entries</span\r\n >\r\n </div>\r\n <div class=\"pagination_form\">\r\n <!-- <span>Page</span> -->\r\n\r\n <button class=\"outlined_btn first_btn\" type=\"button\">\r\n <span> <img src=\"images/chevrons-left.svg\" alt=\"\" /> </span>\r\n </button>\r\n <button\r\n class=\"outlined_btn prev_btn\"\r\n [ngClass]=\"pageDetails.currentPage > 1 ? '' : 'disable_btn'\"\r\n type=\"button\"\r\n (click)=\"onBtPrevClick()\"\r\n >\r\n <span> <img src=\"images/chevron-left.svg\" alt=\"\" /> </span>\r\n </button>\r\n <div>\r\n <input\r\n class=\"input_style\"\r\n type=\"number\"\r\n [(ngModel)]=\"pageDetails.currentPage\"\r\n (change)=\"goToSelectedPage($event)\"\r\n name=\"\"\r\n id=\"\"\r\n />\r\n </div>\r\n <button\r\n class=\"outlined_btn next_btn\"\r\n type=\"button\"\r\n [ngClass]=\"\r\n pageDetails.currentPage < pageDetails.totalPages ? '' : 'disable_btn'\r\n \"\r\n (click)=\"onBtNextClick()\"\r\n >\r\n <span> <img src=\"images/chevron-right.svg\" alt=\"\" /> </span>\r\n </button>\r\n <!-- <span>of {{ pageDetails.totalPages }}</span> -->\r\n\r\n <button class=\"outlined_btn last_btn\" type=\"button\">\r\n <span> <img src=\"images/chevrons-right.svg\" alt=\"\" /> </span>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n <!-- Pagination Ends -->\r\n</div>\r\n\r\n<!-- cell right click code start here -->\r\n<div class=\"dropdown_wrapper d-none\">\r\n <div class=\"right_click_dropdown\">\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <img src=\"images/scissors.svg\" />\r\n <span class=\"text\">Cut</span>\r\n </div>\r\n\r\n <span class=\"right_item\">Ctrl+X</span>\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <img src=\"images/copy.svg\" alt=\"\" />\r\n <span class=\"text\">Copy</span>\r\n </div>\r\n\r\n <span class=\"right_item\">Ctrl+C</span>\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <img src=\"images/copy.svg\" alt=\"\" />\r\n <span class=\"text\">Copy with Headers</span>\r\n </div>\r\n <span class=\"right_item\"></span>\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <img src=\"images/copy.svg\" alt=\"\" />\r\n <span class=\"text\">Copy with Group Headers</span>\r\n </div>\r\n <span class=\"right_item\"></span>\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <img src=\"images/clipboard.svg\" alt=\"\" />\r\n <span class=\"text\">Paste</span>\r\n </div>\r\n\r\n <span class=\"right_item\">Ctrl+V</span>\r\n </div>\r\n\r\n <div class=\"right_click_item active\">\r\n <div class=\"left_item\">\r\n <img src=\"images/bar-chart.svg\" alt=\"\" />\r\n <span class=\"text\">Chart</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <img src=\"images/download.svg\" alt=\"\" />\r\n <span class=\"text\">Export</span>\r\n </div>\r\n\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Chart section Start Here -->\r\n <div class=\"second_dropdown\">\r\n <div class=\"right_click_item active\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Column</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Bar</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Pie</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Line</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Area</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">XY(Scatter)</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Polar</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Stastical</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Hierarchical</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Specialized</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Funnel</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Combination</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Export Section start Here -->\r\n <div class=\"export_section d-none\">\r\n <div class=\"right_click_item active\">\r\n <div class=\"left_item\">\r\n <img src=\"images/file.svg\" alt=\"\" />\r\n <span class=\"text\">CSV Report</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <img src=\"images/file.svg\" alt=\"\" />\r\n <span class=\"text\">Excel Report</span>\r\n </div>\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Column Group Section Start Here -->\r\n <div class=\"third_dropdown\">\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Grouped</span>\r\n </div>\r\n </div>\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">Stacked</span>\r\n </div>\r\n </div>\r\n <div class=\"right_click_item\">\r\n <div class=\"left_item\">\r\n <span class=\"text\">100% Stacked</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","/*\r\n * Public API Surface of cats-data-grid\r\n */\r\n\r\nexport * from './lib/services/cats-data-grid.service';\r\nexport * from './lib/cats-data-grid.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}