cats-data-grid 2.0.69 → 2.0.71

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/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/common-components/tooltip/tooltip.component.ts","../../../projects/cats-data-grid/src/lib/common-components/tooltip/tooltip.component.html","../../../projects/cats-data-grid/src/lib/directives/tooltip.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/lib/renderers/common-renderer/common-renderer.component.ts","../../../projects/cats-data-grid/src/lib/renderers/common-renderer/common-renderer.component.html","../../../projects/cats-data-grid/src/lib/common-components/common-tree-table/common-tree-table.component.ts","../../../projects/cats-data-grid/src/lib/common-components/common-tree-table/common-tree-table.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, context: any): string {\r\n if (context?.addClasses) {\r\n return context.addClasses(value)\r\n }\r\n else if(context?.cellValueClass) {\r\n return context.cellValueClass(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 this.ref.location.nativeElement.style.width = '100%';\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=\"table_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 ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\nimport { AdaptivePositionDirective } from '../../directives/adaptive-position.directive';\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, AdaptivePositionDirective],\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\r\n implements OnInit, OnChanges, ControlValueAccessor\r\n{\r\n @Output() dateTimeSelected = new EventEmitter<any>();\r\n @Output() clearDateEvent = 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['preSelectedValue']) {\r\n this.selectedDateTime = _changes['preSelectedValue']?.currentValue;\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 selectCurrentMonthYear() {\r\n this.currentDate = new Date();\r\n this.currentMonth = this.currentDate.getMonth();\r\n this.currentYear = this.currentDate.getFullYear();\r\n this.selectedMonth = this.currentMonth;\r\n this.selectedYear = this.currentYear;\r\n this.selectedDate = null;\r\n }\r\n /**\r\n * @description method to toggleCalendar\r\n * @author Shiva Kant\r\n */\r\n toggleCalendar(): void {\r\n if (!this.selectedDateTime) {\r\n this.selectCurrentMonthYear();\r\n }\r\n this.isOpen = !this.isOpen;\r\n if (this.isOpen) {\r\n // If a date is already selected, open that month/year\r\n if (this.selectedDate != null) {\r\n this.currentDate = new Date(\r\n this.selectedYear,\r\n this.selectedMonth,\r\n this.selectedDate,\r\n );\r\n }\r\n this.updateCurrentYearMonth();\r\n this.generateCalendar();\r\n setTimeout(() => {\r\n const ele = document.getElementsByClassName('calendar-footer');\r\n ele[0]?.scrollIntoView();\r\n });\r\n }\r\n this.calendarView = 'defaultView';\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.selectedYear,\r\n this.selectedMonth,\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.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 hideCalender() {\r\n this.closeCalendar();\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()\" #trigger>\r\n @if (dateConfig.selectionMode == \"single\") {\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\r\n class=\"calendar-popup\"\r\n adaptivePosition\r\n [trigger]=\"trigger\"\r\n [matchWidth]=\"false\"\r\n appOutsideClick\r\n (clickOutside)=\"hideCalender()\"\r\n >\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\r\n class=\"navigation-button pointer\"\r\n (click)=\"previousYearRange()\"\r\n >\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 (\r\n day of [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"];\r\n track $index\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 { Component, Input, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport type { TooltipPosition } from '../../directives/tooltip.directive';\r\n\r\n@Component({\r\n selector: 'app-tooltip',\r\n standalone: true,\r\n imports: [CommonModule],\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: './tooltip.component.html',\r\n styleUrls: ['./tooltip.component.scss'],\r\n})\r\nexport class TooltipComponent {\r\n @Input() content: string = '';\r\n @Input() position: TooltipPosition = 'top';\r\n @Input() bgColor: string = '#333333';\r\n @Input() textColor: string = '#ffffff';\r\n @Input() padding: string = '8px 12px';\r\n @Input() fontSize: string = '12px';\r\n @Input() borderRadius: string = '4px';\r\n @Input() maxWidth: string = '300px';\r\n\r\n get styleObj() {\r\n return {\r\n 'background-color': this.bgColor,\r\n color: this.textColor,\r\n padding: this.padding,\r\n 'font-size': this.fontSize,\r\n 'border-radius': this.borderRadius,\r\n 'max-width': this.maxWidth,\r\n };\r\n }\r\n}\r\n","<div\r\n class=\"app-tooltip-wrapper\"\r\n [ngClass]=\"'tooltip-' + position\"\r\n [ngStyle]=\"styleObj\"\r\n>\r\n {{ content }}\r\n <div class=\"tooltip-arrow\"></div>\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n OnDestroy,\r\n Renderer2,\r\n ApplicationRef,\r\n Injector,\r\n NgZone,\r\n} from '@angular/core';\r\nimport { TooltipComponent } from '../common-components/tooltip/tooltip.component';\r\nimport { createComponent } from '@angular/core';\r\n\r\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right' | 'adaptive';\r\n\r\n@Directive({\r\n selector: '[appTooltip]',\r\n standalone: true,\r\n})\r\nexport class TooltipDirective implements OnInit, OnDestroy {\r\n @Input('appTooltip') content: string = '';\r\n @Input() tooltipPosition: TooltipPosition = 'adaptive';\r\n @Input() tooltipDelay: number = 300; // milliseconds\r\n @Input() tooltipBgColor: string = '#333333';\r\n @Input() tooltipTextColor: string = '#ffffff';\r\n @Input() tooltipPadding: string = '8px 12px';\r\n @Input() tooltipFontSize: string = '12px';\r\n @Input() tooltipBorderRadius: string = '4px';\r\n @Input() tooltipMaxWidth: string = '300px';\r\n @Input() followCursor: boolean = true;\r\n @Input() tooltipParentContainer: HTMLElement | null = null;\r\n\r\n private tooltipElement: HTMLElement | null = null;\r\n private showTimeout: any;\r\n private elementRect: DOMRect | null = null;\r\n private currentPosition: TooltipPosition = 'top';\r\n private componentRef: any = null;\r\n private cursorX: number = 0;\r\n private cursorY: number = 0;\r\n private isTooltipShown: boolean = false;\r\n\r\n constructor(\r\n private elementRef: ElementRef<HTMLElement>,\r\n private renderer: Renderer2,\r\n private appRef: ApplicationRef,\r\n private injector: Injector,\r\n private ngZone: NgZone,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.renderer.addClass(this.elementRef.nativeElement, 'tooltip-trigger');\r\n }\r\n\r\n @HostListener('mouseenter', ['$event'])\r\n onMouseEnter(event: MouseEvent): void {\r\n if (!this.content) return;\r\n\r\n this.cursorX = event.clientX;\r\n this.cursorY = event.clientY;\r\n\r\n this.showTimeout = setTimeout(() => {\r\n this.show();\r\n }, this.tooltipDelay);\r\n }\r\n\r\n @HostListener('mouseleave')\r\n onMouseLeave(): void {\r\n clearTimeout(this.showTimeout);\r\n this.hide();\r\n }\r\n\r\n @HostListener('mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent): void {\r\n if (!this.isTooltipShown || !this.followCursor) return;\r\n\r\n this.cursorX = event.clientX;\r\n this.cursorY = event.clientY;\r\n\r\n this.positionTooltip();\r\n }\r\n\r\n private show(): void {\r\n if (this.tooltipElement) return;\r\n\r\n this.elementRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n\r\n // Use NgZone to avoid change detection issues\r\n this.ngZone.run(() => {\r\n try {\r\n // Create tooltip component with proper injector\r\n const componentRef = createComponent(TooltipComponent, {\r\n environmentInjector: this.appRef.injector,\r\n });\r\n\r\n // Configure component instance\r\n componentRef.instance.content = this.content;\r\n componentRef.instance.bgColor = this.tooltipBgColor;\r\n componentRef.instance.textColor = this.tooltipTextColor;\r\n componentRef.instance.padding = this.tooltipPadding;\r\n componentRef.instance.fontSize = this.tooltipFontSize;\r\n componentRef.instance.borderRadius = this.tooltipBorderRadius;\r\n componentRef.instance.maxWidth = this.tooltipMaxWidth;\r\n\r\n // Calculate adaptive position before rendering\r\n this.currentPosition = this.calculateAdaptivePosition();\r\n componentRef.instance.position = this.currentPosition;\r\n\r\n // Mark for check\r\n componentRef.changeDetectorRef.detectChanges();\r\n\r\n // Get the DOM element\r\n this.tooltipElement = componentRef.location.nativeElement.querySelector('.app-tooltip-wrapper') as HTMLElement;\r\n\r\n // If direct query didn't work, try the root element\r\n if (!this.tooltipElement) {\r\n this.tooltipElement = (componentRef.location.nativeElement as HTMLElement).children[0] as HTMLElement;\r\n }\r\n\r\n // If still not found, use the whole element\r\n if (!this.tooltipElement) {\r\n this.tooltipElement = componentRef.location.nativeElement as HTMLElement;\r\n }\r\n\r\n // Append to body to avoid layout issues\r\n this.renderer.appendChild(document.body, componentRef.location.nativeElement);\r\n\r\n // Position the tooltip\r\n this.isTooltipShown = true;\r\n this.positionTooltip();\r\n\r\n // Store reference for cleanup\r\n this.componentRef = componentRef;\r\n } catch (error) {\r\n console.warn('Tooltip directive: Error creating tooltip component', error);\r\n // Fallback silent fail - tooltip just won't show but app continues\r\n }\r\n });\r\n }\r\n\r\n private calculateAdaptivePosition(): TooltipPosition {\r\n if (this.tooltipPosition !== 'adaptive') {\r\n return this.tooltipPosition;\r\n }\r\n\r\n if (!this.elementRect) return 'top';\r\n\r\n // Find the parent container with overflow or positioning context\r\n const parentContainer = this.findParentContainer();\r\n const parentRect = parentContainer.getBoundingClientRect();\r\n\r\n const threshold = 120; // minimum space needed\r\n const gap = 10;\r\n\r\n // Calculate available space within parent container\r\n const spaceAbove = this.elementRect.top - parentRect.top;\r\n const spaceBelow = parentRect.bottom - this.elementRect.bottom;\r\n const spaceLeft = this.elementRect.left - parentRect.left;\r\n const spaceRight = parentRect.right - this.elementRect.right;\r\n\r\n // Prefer vertical positions if there's adequate space\r\n if (spaceBelow >= threshold) return 'bottom';\r\n if (spaceAbove >= threshold) return 'top';\r\n\r\n // Fall back to horizontal positions\r\n if (spaceRight >= threshold) return 'right';\r\n if (spaceLeft >= threshold) return 'left';\r\n\r\n // If no position has enough space, use the direction with most available space\r\n const spaces: Record<Exclude<TooltipPosition, 'adaptive'>, number> = {\r\n top: spaceAbove,\r\n bottom: spaceBelow,\r\n left: spaceLeft,\r\n right: spaceRight,\r\n };\r\n\r\n const bestPosition = (\r\n Object.keys(spaces) as Array<Exclude<TooltipPosition, 'adaptive'>>\r\n ).reduce((prev, curr) => (spaces[curr] > spaces[prev] ? curr : prev));\r\n\r\n return bestPosition;\r\n }\r\n\r\n private findParentContainer(): HTMLElement {\r\n // If a parent container is explicitly provided, use it\r\n if (this.tooltipParentContainer) {\r\n return this.tooltipParentContainer;\r\n }\r\n\r\n let element = this.elementRef.nativeElement.parentElement;\r\n\r\n // Traverse up the DOM to find a scrollable or positioned container\r\n while (element) {\r\n const style = window.getComputedStyle(element);\r\n const isScrollable =\r\n element.scrollHeight > element.clientHeight ||\r\n element.scrollWidth > element.clientWidth;\r\n const isPositioned =\r\n style.position === 'absolute' ||\r\n style.position === 'relative' ||\r\n style.position === 'fixed';\r\n\r\n if (isScrollable || isPositioned) {\r\n return element;\r\n }\r\n\r\n element = element.parentElement;\r\n }\r\n\r\n // If no container found, use the document body\r\n return document.body;\r\n }\r\n\r\n private positionTooltip(): void {\r\n if (!this.tooltipElement) return;\r\n\r\n // Use requestAnimationFrame to ensure DOM is ready\r\n requestAnimationFrame(() => {\r\n if (!this.tooltipElement) return;\r\n\r\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\r\n\r\n // If tooltip isn't rendered yet, retry\r\n if (tooltipRect.width === 0 || tooltipRect.height === 0) {\r\n requestAnimationFrame(() => this.positionTooltip());\r\n return;\r\n }\r\n\r\n const gap = 10;\r\n const offset = 15; // Offset from cursor\r\n let top = 0;\r\n let left = 0;\r\n let finalPosition = this.currentPosition;\r\n\r\n if (this.followCursor) {\r\n // Position tooltip relative to cursor\r\n const preferredPosition = this.currentPosition;\r\n\r\n switch (preferredPosition) {\r\n case 'top':\r\n top = this.cursorY - tooltipRect.height - gap;\r\n left = this.cursorX - tooltipRect.width / 2;\r\n break;\r\n case 'bottom':\r\n top = this.cursorY + offset;\r\n left = this.cursorX - tooltipRect.width / 2;\r\n break;\r\n case 'left':\r\n top = this.cursorY - tooltipRect.height / 2;\r\n left = this.cursorX - tooltipRect.width - gap;\r\n break;\r\n case 'right':\r\n top = this.cursorY - tooltipRect.height / 2;\r\n left = this.cursorX + offset;\r\n break;\r\n }\r\n } else if (this.elementRect) {\r\n // Position tooltip relative to element\r\n switch (this.currentPosition) {\r\n case 'top':\r\n top = this.elementRect.top - tooltipRect.height - gap;\r\n left = this.elementRect.left + this.elementRect.width / 2 - tooltipRect.width / 2;\r\n break;\r\n case 'bottom':\r\n top = this.elementRect.bottom + gap;\r\n left = this.elementRect.left + this.elementRect.width / 2 - tooltipRect.width / 2;\r\n break;\r\n case 'left':\r\n top = this.elementRect.top + this.elementRect.height / 2 - tooltipRect.height / 2;\r\n left = this.elementRect.left - tooltipRect.width - gap;\r\n break;\r\n case 'right':\r\n top = this.elementRect.top + this.elementRect.height / 2 - tooltipRect.height / 2;\r\n left = this.elementRect.right + gap;\r\n break;\r\n }\r\n }\r\n\r\n // Adjust for parent container and viewport boundaries\r\n const parentContainer = this.findParentContainer();\r\n const parentRect = parentContainer.getBoundingClientRect();\r\n const windowHeight = window.innerHeight;\r\n const windowWidth = window.innerWidth;\r\n const padding = 5;\r\n let arrowPos = 'center';\r\n\r\n // Use parent container bounds if available, otherwise use window bounds\r\n const containerTop = Math.max(parentRect.top, 0);\r\n const containerBottom = Math.min(parentRect.bottom, windowHeight);\r\n const containerLeft = Math.max(parentRect.left, 0);\r\n const containerRight = Math.min(parentRect.right, windowWidth);\r\n\r\n // Check vertical boundaries within container and adjust position if needed\r\n if (top < containerTop + padding) {\r\n top = containerTop + padding;\r\n if (this.currentPosition === 'top') {\r\n finalPosition = 'bottom';\r\n if (this.followCursor) {\r\n top = this.cursorY + offset;\r\n } else if (this.elementRect) {\r\n top = this.elementRect.bottom + gap;\r\n }\r\n }\r\n arrowPos = 'top-adjust';\r\n } else if (top + tooltipRect.height > containerBottom - padding) {\r\n top = containerBottom - tooltipRect.height - padding;\r\n if (this.currentPosition === 'bottom') {\r\n finalPosition = 'top';\r\n if (this.followCursor) {\r\n top = this.cursorY - tooltipRect.height - gap;\r\n } else if (this.elementRect) {\r\n top = this.elementRect.top - tooltipRect.height - gap;\r\n }\r\n }\r\n arrowPos = 'bottom-adjust';\r\n }\r\n\r\n // Check horizontal boundaries within container and adjust position if needed\r\n if (left < containerLeft + padding) {\r\n left = containerLeft + padding;\r\n if (this.currentPosition === 'left') {\r\n finalPosition = 'right';\r\n if (this.followCursor) {\r\n left = this.cursorX + offset;\r\n } else if (this.elementRect) {\r\n left = this.elementRect.right + gap;\r\n }\r\n }\r\n arrowPos = 'left-adjust';\r\n } else if (left + tooltipRect.width > containerRight - padding) {\r\n left = containerRight - tooltipRect.width - padding;\r\n if (this.currentPosition === 'right') {\r\n finalPosition = 'left';\r\n if (this.followCursor) {\r\n left = this.cursorX - tooltipRect.width - gap;\r\n } else if (this.elementRect) {\r\n left = this.elementRect.left - tooltipRect.width - gap;\r\n }\r\n }\r\n arrowPos = 'right-adjust';\r\n }\r\n\r\n // Update position class if it changed\r\n if (finalPosition !== this.currentPosition) {\r\n this.currentPosition = finalPosition;\r\n this.tooltipElement!.className = `app-tooltip-wrapper tooltip-${finalPosition}`;\r\n }\r\n\r\n // Store arrow adjustment info for CSS styling\r\n this.renderer.setAttribute(this.tooltipElement, 'data-arrow-pos', arrowPos);\r\n this.renderer.setStyle(this.tooltipElement, 'position', 'fixed');\r\n this.renderer.setStyle(this.tooltipElement, 'top', `${Math.round(top)}px`);\r\n this.renderer.setStyle(this.tooltipElement, 'left', `${Math.round(left)}px`);\r\n });\r\n }\r\n\r\n private hide(): void {\r\n this.isTooltipShown = false;\r\n if (this.tooltipElement && this.tooltipElement.parentNode) {\r\n this.renderer.removeChild(this.tooltipElement.parentNode, this.tooltipElement);\r\n this.tooltipElement = null;\r\n }\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n this.appRef.detachView(this.componentRef.hostView);\r\n this.componentRef = null;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n clearTimeout(this.showTimeout);\r\n this.hide();\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 ElementRef,\r\n EventEmitter,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } 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\nimport { TooltipDirective } from './directives/tooltip.directive';\r\n\r\nexport class ColDefs {\r\n fieldName!: string;\r\n headerName!: string;\r\n width!: number;\r\n minWidth!: number;\r\n sortable: boolean = true;\r\n filterable: boolean = true;\r\n cellRenderer: any;\r\n}\r\n\r\nexport interface ColumnFilter {\r\n fieldName: string;\r\n filterLogic: string;\r\n filters: FilterCondition[];\r\n}\r\nexport interface FilterCondition {\r\n filterOperation: string;\r\n filterValue: any;\r\n}\r\n@Component({\r\n selector: 'cats-data-grid',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CommonCalendarComponent,\r\n OutsideClickDirective,\r\n AdaptivePositionDirective,\r\n RendererParserDirective,\r\n AddClassPipe,\r\n CommonInputComponent,\r\n TooltipDirective,\r\n ],\r\n templateUrl: './cats-data-grid.component.html',\r\n styleUrls: ['./cats-data-grid.component.scss'],\r\n})\r\nexport class CatsDataGridComponent implements OnChanges, OnInit {\r\n @ViewChild('pinMenu') pinMenu!: ElementRef;\r\n @ViewChild('colActionMenu') colActionMenu!: ElementRef;\r\n @ViewChild('table') table!: ElementRef;\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 @Input() settingsRequired: boolean = true;\r\n @Input() settingsClicked: boolean = false;\r\n @Input() resetPage = true;\r\n @Input() rowId: any = null;\r\n @Input() bigRows: boolean = false;\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 @Output() onHideSettings = new EventEmitter();\r\n @Output() onCellEdit = new EventEmitter();\r\n @Output() onColCongifgChange = new EventEmitter();\r\n\r\n activeFilterIndex: number | null = null;\r\n originalRowData: any[] = [];\r\n activeAll = true;\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 @Input() groupByField: 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 private removeMouseMove!: () => void;\r\n private removeMouseUp!: () => void;\r\n private rafId: number | null = null;\r\n @Input() appliedFilters: ColumnFilter[] = [];\r\n @Input() rowGripFieldName!: string;\r\n @Input() pageNumber!: number;\r\n @Input() pageSize!: number;\r\n @Output() appliedFiltersEvent = new EventEmitter<ColumnFilter[]>();\r\n @Output() activeGroupsEvent = new EventEmitter<any[]>();\r\n @Input() dynamicGroupingFiltering: boolean = false;\r\n @Input() isRowsEditable: boolean = false;\r\n atLeastOneColumnChecked: boolean = true;\r\n draggedRowData: any = {};\r\n firstCol: any;\r\n isRowSelected: boolean = false;\r\n @Output() onRowClicked = new EventEmitter<any>();\r\n @Output() onCellClicked = new EventEmitter<any>();\r\n\r\n isCellDblClicked: any = {};\r\n cellClickedCtrl = new FormControl('');\r\n previousId: string = '';\r\n editingRow: any = null;\r\n editingField: string = '';\r\n clickTimer: any = null;\r\n clickDelay = 200;\r\n cellClickedColumn: any;\r\n enterPressed: boolean = false;\r\n leftPinned: any = [];\r\n rightPinned: any = [];\r\n centerArea: any = [];\r\n groupingDisabled: boolean = false;\r\n draggableColumn: any;\r\n constructor(\r\n private renderer: Renderer2,\r\n private zone: NgZone,\r\n private cd: ChangeDetectorRef,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n // if (this.colDefs && this.colDefs.length > 0) {\r\n // this.firstCol = this.colDefs[0];\r\n // }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['pageNumber']?.currentValue) {\r\n this.pageDetails.currentPage = changes['pageNumber']?.currentValue;\r\n this.recordsToShow.min =\r\n (this.pageDetails.currentPage - 1) * this.pageDetails.pageSize;\r\n this.recordsToShow.max =\r\n this.pageDetails.currentPage * this.pageDetails.pageSize;\r\n this.clearAllFilter();\r\n }\r\n if (changes['pageSize']?.currentValue) {\r\n this.pageDetails.pageSize = changes['pageSize']?.currentValue;\r\n this.recordsToShow.min =\r\n (this.pageDetails.currentPage - 1) * this.pageDetails.pageSize;\r\n this.recordsToShow.max =\r\n this.pageDetails.currentPage * this.pageDetails.pageSize;\r\n }\r\n if (changes['colDefs']?.currentValue) {\r\n // this.resetPagination();\r\n\r\n this.colDefs = this.getUpdatedColDefs(changes['colDefs']?.currentValue);\r\n setTimeout(() => {\r\n this.applyAllFilters();\r\n });\r\n this.originalColDefs = [...this.colDefs];\r\n this.centerArea = [...this.colDefs];\r\n [...this.colDefs].forEach((col: any) => {\r\n if (col.pin) {\r\n const index = this.colDefs.findIndex((c) => c.colId === col.colId);\r\n this.pinColumn(this.colDefs[index], index, col.pin);\r\n }\r\n });\r\n }\r\n\r\n if (changes['totalRecords']?.currentValue && this.resetPage) {\r\n this.resetPagination();\r\n } else {\r\n this.setPageCount();\r\n }\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 if (row[this.rowId]) {\r\n row.rowId = row[this.rowId];\r\n } else {\r\n row.rowId = `${Date.now()}_${i}`;\r\n }\r\n if (row?.isSelected) this.selectedRow.push(row);\r\n return row;\r\n },\r\n );\r\n\r\n if (this.dynamicGroupingFiltering && this.groupBy.length > 0) {\r\n this.groupedResult = structuredClone(this.rowData);\r\n }\r\n if (!this.activeFilters.size) {\r\n this.originalRowData = structuredClone(this.rowData);\r\n }\r\n\r\n this.getGroupedData();\r\n }\r\n\r\n if (changes['groupByField']?.currentValue) {\r\n this.activeGroups = [];\r\n this.groupBy = [];\r\n const groupByField = changes['groupByField'].currentValue;\r\n const col = this.getColumnDetail(this.colDefs, groupByField);\r\n this.activeGroups.push(...col);\r\n this.groupBy.push(groupByField);\r\n this.getGroupedData();\r\n }\r\n }\r\n\r\n getColumnDetail(colDefs: any, groupByField: any) {\r\n return colDefs.filter((col: any) => col.fieldName === groupByField);\r\n }\r\n\r\n activeAllSelection(event: Event) {\r\n // let checked = (event.target as HTMLInputElement).checked;\r\n // if (checked) {\r\n // this.colDefs = this.originalColDefs.map((dt) => {\r\n // if (!dt.active && !dt.headerLocked) {\r\n // dt.active = true;\r\n // }\r\n // this.atLeastOneColumnChecked = true;\r\n // return dt;\r\n // });\r\n // } else {\r\n // this.colDefs = this.originalColDefs.map((dt) => {\r\n // if (dt.active && !dt.headerLocked) {\r\n // dt.active = false;\r\n // }\r\n // this.atLeastOneColumnChecked = false;\r\n // return dt;\r\n // });\r\n // }\r\n\r\n const checked = (event.target as HTMLInputElement).checked;\r\n this.colDefs = this.originalColDefs.map((col) => {\r\n if (col.headerLocked) {\r\n col.active = true;\r\n } else {\r\n col.active = checked;\r\n }\r\n return col;\r\n });\r\n this.activeAll = this.colDefs.every((dt) => dt.active);\r\n this.getActiveCols();\r\n this.atLeastOneColumnChecked = this.colDefs.some((dt) => dt.active);\r\n }\r\n\r\n changeActiveColSelection(event: Event, col: any) {\r\n col.active = !col.active;\r\n this.atLeastOneColumnChecked = this.originalColDefs.some(\r\n (dt: any) => dt.active,\r\n );\r\n this.getActiveCols();\r\n\r\n // Update activeAll state\r\n this.activeAll = this.originalColDefs.every((dt: any) => dt.active);\r\n }\r\n\r\n getActiveCols() {\r\n const activeCols = this.colDefs\r\n .filter((col: any) => col.active)\r\n .map((c: any) => {\r\n if (c.fieldName.includes('.')) {\r\n c.fieldName = c.fieldName.split('.')[0];\r\n }\r\n return c.fieldName;\r\n });\r\n this.onColCongifgChange.emit(activeCols);\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 if (!col.filterLogic) {\r\n col.filterLogic = 'OR';\r\n }\r\n\r\n let updatedCol = {\r\n ...col,\r\n active: col.active ?? true,\r\n locked: col.locked ?? false,\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 filters: [\r\n {\r\n filterOperation: 'contains',\r\n filterValue: '',\r\n },\r\n {\r\n filterOperation: '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 filterValue: '',\r\n filters: [\r\n {\r\n filterOperation: '=',\r\n filterValue: '',\r\n },\r\n {\r\n filterOperation: '=',\r\n filterValue: '',\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 let fieldName = col.fieldName;\r\n\r\n if (fieldName.includes('.')) {\r\n fieldName = fieldName.split('.')[0];\r\n }\r\n\r\n return this.normalizeSetFilterType(\r\n r[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 if (this.appliedFilters.length > 0) {\r\n const appliedFilter = this.appliedFilters.find(\r\n (f) => f.fieldName === col.fieldName,\r\n );\r\n if (appliedFilter) {\r\n switch (col.filterType) {\r\n case 'text':\r\n case 'number':\r\n case 'date':\r\n updatedCol = {\r\n ...updatedCol,\r\n filters: appliedFilter.filters,\r\n filterLogic: appliedFilter.filterLogic,\r\n };\r\n\r\n break;\r\n case 'set':\r\n const options = [\r\n ...new Set(\r\n this.rowData.flatMap((r) => {\r\n let fieldName = col.fieldName;\r\n\r\n if (fieldName.includes('.')) {\r\n fieldName = fieldName.split('.')[0];\r\n }\r\n return this.normalizeSetFilterType(\r\n r[fieldName],\r\n col?.cellRendererParams?.tagKey,\r\n )?.filter(Boolean);\r\n }),\r\n ),\r\n ];\r\n const selectedValues = new Set(\r\n appliedFilter.filters.map((f) => f.filterValue),\r\n );\r\n updatedCol = {\r\n ...updatedCol,\r\n options,\r\n filteredOptions: options,\r\n selectedValues,\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n return updatedCol;\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 filterOperation 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 let field = col.fieldName;\r\n\r\n // if (field.includes('.')) {\r\n // const a = field.split('.');\r\n // field = a[0];\r\n // }\r\n if (col?.filterable) {\r\n if (col.filterType === 'text') {\r\n // *********** TEXT FILTER ***********\r\n const [c1, c2] = col.filters;\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 =\r\n this.evaluateFieldValue(r, field)?.toLowerCase() || '';\r\n const cond1 = textVal1\r\n ? this.evaluateTextFilterCondition(\r\n c1.filterOperation,\r\n fieldVal,\r\n textVal1,\r\n )\r\n : false;\r\n const cond2 = textVal2\r\n ? this.evaluateTextFilterCondition(\r\n c2.filterOperation,\r\n fieldVal,\r\n textVal2,\r\n )\r\n : false;\r\n\r\n return col.filterLogic === '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.filters;\r\n const numValue1 = Number(c1.filterValue);\r\n const numValue2 = Number(c2.filterValue);\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.filterOperation,\r\n fieldVal,\r\n numValue1,\r\n )\r\n : false;\r\n const cond2 = numValue2\r\n ? this.evaluateNumDateFilterCondition(\r\n c2.filterOperation,\r\n fieldVal,\r\n numValue2,\r\n )\r\n : false;\r\n\r\n return col.filterLogic === '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.filters;\r\n const selected1 = this.normalizeDate(c1.filterValue);\r\n const selected2 = this.normalizeDate(c2.filterValue);\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.filterOperation,\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.filterOperation,\r\n fieldVal ?? r[field],\r\n selected2,\r\n )\r\n : false;\r\n\r\n return col.filterLogic === '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 if (this.activeFilters.has(col.fieldName)) {\r\n let filterObj: ColumnFilter = {\r\n fieldName: col.fieldName,\r\n filterLogic: col.filterLogic,\r\n filters: col.filters,\r\n };\r\n if (col.filterType === 'set') {\r\n filterObj.filters = Array(...col.selectedValues).map(\r\n (f: string) => ({\r\n filterOperation: '=',\r\n filterValue: f,\r\n }),\r\n );\r\n filterObj.filterLogic = 'OR';\r\n }\r\n const existingIndex = this.appliedFilters.findIndex(\r\n (f) => f.fieldName === col.fieldName,\r\n );\r\n if (existingIndex === -1) {\r\n this.appliedFilters.push(filterObj);\r\n } else {\r\n this.appliedFilters[existingIndex] = filterObj;\r\n }\r\n } else {\r\n this.appliedFilters = this.appliedFilters.filter(\r\n (f) => f.fieldName !== col.fieldName,\r\n );\r\n }\r\n }\r\n });\r\n\r\n if (this.dynamicGroupingFiltering) {\r\n this.appliedFiltersEvent.emit(this.appliedFilters);\r\n return;\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 evaluateFieldValue(row: any, field: string): any {\r\n if (field.includes('.')) {\r\n const parts = field.split('.');\r\n let value = row;\r\n for (const part of parts) {\r\n value = value?.[part];\r\n }\r\n return value;\r\n }\r\n return row[field];\r\n }\r\n\r\n resetFilter(col: any) {\r\n switch (col.filterType) {\r\n case 'text':\r\n case 'number':\r\n case 'date': {\r\n col.filters.forEach((f: any) => (f.filterValue = null));\r\n col.filterLogic = 'OR';\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 this.appliedFilters = this.appliedFilters.filter(\r\n (f) => f.fieldName !== col.fieldName,\r\n );\r\n // Remove active flag\r\n this.activeFilters.delete(col.fieldName);\r\n\r\n // Re-apply all filters\r\n if (this.dynamicGroupingFiltering) {\r\n this.appliedFiltersEvent.emit(this.appliedFilters);\r\n return;\r\n }\r\n this.applyAllFilters();\r\n }\r\n\r\n removeActiveFilter(col: any) {\r\n this.activeFilters.delete(col.fieldName);\r\n const column = this.colDefs.find((c) => c.fieldName === col.fieldName);\r\n if (column) {\r\n if (column.filterType === 'set') {\r\n column.selectedValues = new Set(column.options); // clear set filter\r\n } else {\r\n column.filters.forEach((f: any) => {\r\n f.filterValue = '';\r\n });\r\n }\r\n }\r\n this.appliedFilters = this.appliedFilters.filter(\r\n (f) => f.fieldName !== col.fieldName,\r\n );\r\n\r\n if (this.dynamicGroupingFiltering) {\r\n this.appliedFiltersEvent.emit(this.appliedFilters);\r\n return;\r\n }\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 this.menuVisible[index] = true;\r\n\r\n // setTimeout(() => {\r\n // const rect = (event.target as HTMLElement).getBoundingClientRect();\r\n // const el = this.colActionMenu?.nativeElement;\r\n // const leftAvailableSpace = rect.left;\r\n // const elWidth = el.offsetWidth;\r\n // if (leftAvailableSpace < elWidth) {\r\n // el.style.right = 'unset';\r\n // el.style.left = '0px';\r\n // }\r\n // });\r\n setTimeout(() => {\r\n const table = this.table?.nativeElement;\r\n const tableRect = table.getBoundingClientRect();\r\n const rect = (event.target as HTMLElement).getBoundingClientRect();\r\n const el = this.colActionMenu?.nativeElement;\r\n const elWidth = el.offsetWidth;\r\n const popUpLeftWidth = rect.left - elWidth;\r\n if (popUpLeftWidth < tableRect.left) {\r\n el.style.right = 'unset';\r\n el.style.left = '0px';\r\n }\r\n });\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 if (this.dynamicGroupingFiltering) {\r\n return;\r\n }\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 event.stopPropagation();\r\n\r\n this.isResizing = true;\r\n this.resizingColumnIndex = index;\r\n this.startX = event.clientX;\r\n this.startWidth = this.colDefs[index].width ?? 150;\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.removeMouseMove = this.renderer.listen(\r\n 'document',\r\n 'mousemove',\r\n (e: MouseEvent) => this.onMouseMove(e),\r\n );\r\n\r\n this.removeMouseUp = this.renderer.listen(\r\n 'document',\r\n 'mouseup',\r\n (e: MouseEvent) => this.stopResize(e),\r\n );\r\n });\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 (this.resizingColumnIndex == null || this.rafId) return;\r\n\r\n this.rafId = requestAnimationFrame(() => {\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.zone.run(() => {\r\n this.colDefs[this.resizingColumnIndex!].width = newWidth;\r\n this.cd.markForCheck();\r\n });\r\n }\r\n\r\n this.rafId = null;\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\r\n this.isResizing = false;\r\n this.resizingColumnIndex = null;\r\n\r\n this.removeMouseMove?.();\r\n this.removeMouseUp?.();\r\n\r\n if (this.rafId) {\r\n cancelAnimationFrame(this.rafId);\r\n this.rafId = null;\r\n }\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 // if (col.pin) {\r\n // col.pin = direction;\r\n // }\r\n\r\n // col.leftPinned = direction === 'left';\r\n // col.rightPinned = direction === 'right';\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 pinColumn(col: any, index: number, direction: string) {\r\n this.pinActionClicked[col.colId] = direction;\r\n if (col.pin) {\r\n col.pin = direction;\r\n }\r\n this.leftPinned = this.leftPinned.filter((c: any) => c.colId !== col.colId);\r\n this.rightPinned = this.rightPinned.filter(\r\n (c: any) => c.colId !== col.colId,\r\n );\r\n\r\n if (col.fieldName !== 'action') {\r\n this.centerArea = this.centerArea.filter(\r\n (c: any) => c.colId !== col.colId,\r\n );\r\n }\r\n\r\n col.leftPinned = direction === 'left';\r\n col.rightPinned = direction === 'right';\r\n\r\n if (col.leftPinned) {\r\n this.leftPinned.push(col);\r\n } else if (col.rightPinned) {\r\n this.rightPinned.unshift(col);\r\n } else {\r\n const indx = this.centerArea.findIndex(\r\n (dt: any) => dt.fieldName === col.fieldName,\r\n );\r\n if (index >= 0) {\r\n this.centerArea.splice(indx, 0, col);\r\n }\r\n }\r\n\r\n const fixedCols = this.centerArea.filter(\r\n (c: any) => c.fieldName === 'action',\r\n );\r\n\r\n const movableCols = this.centerArea.filter(\r\n (c: any) => c.fieldName !== 'action',\r\n );\r\n this.colDefs = [\r\n ...this.leftPinned,\r\n ...movableCols,\r\n ...this.rightPinned,\r\n ...fixedCols,\r\n ];\r\n\r\n this.updatePinnedOffsets();\r\n this.onClickOutside();\r\n }\r\n\r\n showPinActions(event: MouseEvent) {\r\n event.stopPropagation();\r\n const parentEl = event.currentTarget as HTMLElement;\r\n\r\n this.showPin = true;\r\n setTimeout(() => {\r\n const menuEl = this.pinMenu?.nativeElement;\r\n if (!menuEl || !parentEl) return;\r\n const parentRect = parentEl.getBoundingClientRect();\r\n const menuWidth = menuEl.offsetWidth;\r\n\r\n const viewPortWidth = window.innerWidth;\r\n let x = parentRect.right;\r\n\r\n if (x + menuWidth > viewPortWidth) {\r\n menuEl.style.right = `${parentRect.width}px`;\r\n }\r\n });\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 // 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] || 'N/A';\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 = val?.[key];\r\n }\r\n return val || 'N/A';\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 resetPagination(): 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 = this.pageDetails.pageSize;\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 if (!data.isLocked) 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 event.stopPropagation();\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 maxWidth: `${col.maxWidth}px`,\r\n };\r\n if (col.isAction) {\r\n style.position = 'sticky';\r\n style.right = '0px';\r\n style.zIndex = 14;\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\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, col: any) {\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 this.draggableColumn = col;\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 this.groupingDisabled = this.draggableColumn?.disableGrouping ?? false;\r\n if (this.groupingDisabled) {\r\n event.dataTransfer!.dropEffect = 'none';\r\n this.groupingDisabled = false;\r\n return;\r\n }\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 col = this.colDefs[colIndex];\r\n if (col.disableGrouping) return;\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 if (this.dynamicGroupingFiltering) {\r\n this.activeGroupsEvent.emit(this.groupBy);\r\n return;\r\n }\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 if (col.disableGrouping) return;\r\n this.activeGroups.push(col);\r\n this.groupBy.push(col.fieldName);\r\n this.colDefs.splice(index, 1);\r\n if (this.dynamicGroupingFiltering) {\r\n this.activeGroupsEvent.emit(this.groupBy);\r\n return;\r\n }\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 if (this.dynamicGroupingFiltering) {\r\n this.activeGroupsEvent.emit(this.groupBy);\r\n return;\r\n }\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 if (this.dynamicGroupingFiltering) {\r\n this.activeGroupsEvent.emit(this.groupBy);\r\n return;\r\n }\r\n } else {\r\n if (this.dynamicGroupingFiltering) {\r\n this.activeGroupsEvent.emit(this.groupBy);\r\n return;\r\n }\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.filters[0].filterOperation = 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 convertToNumber(value: number | string): number {\r\n return Number(value);\r\n }\r\n\r\n hideSettings(): void {\r\n this.onHideSettings.emit(false);\r\n }\r\n\r\n dragRow(e: Event, row: any) {\r\n this.draggedRowData = row;\r\n this.isRowSelected = this.selectedRow.some((s) => s.rowId === row.rowId);\r\n }\r\n\r\n allowRowDrop(e: Event) {\r\n e.preventDefault();\r\n }\r\n dropRow(targetRow: any) {\r\n let sourceIndex = null;\r\n let targetIndex = this.rowData.findIndex(\r\n (dt: any) => dt.rowId === targetRow.rowId,\r\n );\r\n\r\n if (this.selectedRow.length > 0 && this.isRowSelected) {\r\n sourceIndex = this.rowData.findIndex(\r\n (dt: any) => dt.rowId === this.selectedRow[0].rowId,\r\n );\r\n\r\n const selectedIds = new Set(this.selectedRow.map((r) => r.rowId));\r\n this.rowData = this.rowData.filter((dt) => !selectedIds.has(dt.rowId));\r\n if (sourceIndex > this.rowData.length) {\r\n sourceIndex = sourceIndex - this.selectedRow.length + 1;\r\n }\r\n\r\n if (targetIndex >= this.rowData.length) {\r\n targetIndex = targetIndex - this.selectedRow.length + 1;\r\n }\r\n this.rowData.splice(sourceIndex, 0, ...this.selectedRow);\r\n } else {\r\n sourceIndex = this.rowData.findIndex(\r\n (dt: any) => dt.rowId === this.draggedRowData.rowId,\r\n );\r\n }\r\n if (sourceIndex < 0 || targetIndex < 0) return;\r\n this.moveRow(sourceIndex, targetIndex);\r\n }\r\n\r\n moveRow(from: number, to: number) {\r\n let rowMoved = [];\r\n if (this.selectedRow.length > 0 && this.isRowSelected) {\r\n rowMoved = this.rowData.splice(from, this.selectedRow.length);\r\n } else {\r\n rowMoved = this.rowData.splice(from, 1);\r\n }\r\n\r\n this.rowData.splice(to, 0, ...rowMoved);\r\n this.isRowSelected = false;\r\n }\r\n\r\n clearAllFilter() {\r\n this.colDefs?.forEach((col) => {\r\n this.resetFilter(col);\r\n });\r\n }\r\n\r\n onBtFirstClick(): void {\r\n this.pageDetails.currentPage = 1;\r\n this.recordsToShow.min = 0;\r\n this.recordsToShow.max = 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 onBtLastClick(): void {\r\n this.pageDetails.currentPage = this.pageDetails.totalPages;\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 onRowClick(row: any) {\r\n this.onRowClicked.emit({ row });\r\n }\r\n\r\n onCellClick(row: any, col: any) {\r\n if (this.clickTimer) {\r\n clearTimeout(this.clickTimer);\r\n }\r\n\r\n this.clickTimer = setTimeout(() => {\r\n this.onCellClicked.emit({ row, col });\r\n }, this.clickDelay);\r\n }\r\n\r\n onCellDblClick(row: any, col: any) {\r\n this.cellClickedColumn = col;\r\n if (this.clickTimer) {\r\n clearTimeout(this.clickTimer);\r\n this.clickTimer = null;\r\n }\r\n if (!col.editable) return;\r\n if (this.previousId) {\r\n this.isCellDblClicked[this.previousId] = false;\r\n }\r\n\r\n const id = `${col.colId}-${row.rowId}`;\r\n this.isCellDblClicked[id] = true;\r\n let fieldName = col.fieldName;\r\n const fieldValue = this.evaluateFieldValue(row, col.fieldName) || '';\r\n\r\n this.editingRow = row;\r\n this.editingField = fieldName;\r\n this.cellClickedCtrl.setValue(fieldValue);\r\n this.previousId = id;\r\n }\r\n\r\n onEnter() {\r\n this.enterPressed = true;\r\n this.onCellEditSave();\r\n }\r\n\r\n onBlur() {\r\n if (this.enterPressed) {\r\n this.enterPressed = false;\r\n return;\r\n }\r\n this.onCellEditSave();\r\n }\r\n\r\n onCellEditSave() {\r\n if (this.editingRow && this.editingField) {\r\n this.setFieldValue(\r\n this.editingRow,\r\n this.editingField,\r\n this.cellClickedCtrl.value,\r\n );\r\n }\r\n this.onCellEdit.emit({\r\n row: this.editingRow,\r\n col: this.cellClickedColumn,\r\n changedValue: this.cellClickedCtrl.value,\r\n });\r\n\r\n if (this.previousId) {\r\n this.isCellDblClicked[this.previousId] = false;\r\n }\r\n\r\n this.editingRow = null;\r\n this.editingField = '';\r\n }\r\n\r\n setFieldValue(row: any, field: string, value: any) {\r\n if (field.includes('.')) {\r\n const parts = field.split('.');\r\n let obj = row;\r\n\r\n for (let i = 0; i < parts.length - 1; i++) {\r\n obj = obj?.[parts[i]];\r\n if (!obj) return;\r\n }\r\n\r\n obj[parts[parts.length - 1]] = value;\r\n } else {\r\n row[field] = value;\r\n }\r\n }\r\n}\r\n","<div class=\"tableArea\" [ngClass]=\"{ large: bigRows }\" #table>\r\n @if (settingsRequired && settingsClicked) {\r\n <div\r\n class=\"setting_options\"\r\n appOutsideClick\r\n (clickOutside)=\"hideSettings()\"\r\n >\r\n <div class=\"column_header\">Select Headers</div>\r\n <div class=\"checkbox_container\">\r\n <input\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"activeAll\"\r\n (change)=\"activeAllSelection($event)\"\r\n />\r\n <span>Select All</span>\r\n </div>\r\n\r\n <div class=\"item_container\" id=\"table_scroll\">\r\n @for (col of colDefs; track col.colId) {\r\n <div class=\"column_item checkbox_container\">\r\n <input\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"col.active\"\r\n (change)=\"changeActiveColSelection($event, col)\"\r\n [disabled]=\"col.headerLocked\"\r\n />\r\n <span>{{ col.headerName | titlecase }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @if (groupByRequired) {\r\n <!-- Group Panel -->\r\n <div\r\n class=\"group_panel\"\r\n [ngClass]=\"{ disable_group: groupingDisabled }\"\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 }\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 @if (activeFilters.size > 0) {\r\n <div class=\"active_filters_container\">\r\n <div class=\"tag_wrapper\">\r\n @for (filter of appliedFilters; track filter.fieldName) {\r\n @if (filter.filters?.length) {\r\n <div class=\"active_filter_tag\">\r\n <div class=\"active_filter_label ellipsis\">\r\n @for (item of filter.filters; track $index) {\r\n @if (item.filterValue) {\r\n @if ($index > 0 && item.filterValue) {\r\n <span class=\"filter_logic\">\r\n {{ filter.filterLogic }}\r\n </span>\r\n }\r\n <span class=\"filter_field\"\r\n >{{ filter.fieldName.split(\".\")[0] }}:</span\r\n >\r\n <span class=\"\">\r\n {{\r\n item.filterOperation == \"=\" ||\r\n item.filterOperation == \"equals\"\r\n ? \":\"\r\n : item.filterOperation\r\n }}</span\r\n >\r\n <span class=\"filter_value\">{{ item.filterValue }}</span>\r\n }\r\n }\r\n </div>\r\n <button\r\n class=\"remove_filter_btn\"\r\n (click)=\"removeActiveFilter(filter)\"\r\n >\r\n <img src=\"images/t-x.svg\" alt=\"\" />\r\n </button>\r\n </div>\r\n }\r\n }\r\n </div>\r\n <div class=\"clear_all\" (click)=\"clearAllFilter()\">Clear All Filters</div>\r\n </div>\r\n }\r\n <div\r\n class=\"table_wrapper global\"\r\n id=\"table_scroll\"\r\n #parent\r\n (scroll)=\"infinityScroll($event)\"\r\n [ngClass]=\"{ tbody_height: activeFilters.size > 0 }\"\r\n [class.no-horizontal-scroll]=\"\r\n (!rowData || rowData.length === 0) &&\r\n (!groupedResult || groupedResult.length === 0)\r\n \"\r\n >\r\n <div class=\"table-inner-wrapper\">\r\n <table cellspacing=\"0\" cellpadding=\"0\">\r\n <thead class=\"sticky-top\">\r\n <tr>\r\n @if (\r\n checkBoxSelection &&\r\n checkboxSelectionType == \"multiple\" &&\r\n atLeastOneColumnChecked\r\n ) {\r\n <th style=\"min-width: 50px; width: 50px\">\r\n <div class=\"th_wraper\">\r\n <span class=\"checkbox_container\"\r\n ><input\r\n class=\"pointer custom_check_box\"\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 <div class=\"filter_three_dot_wrapper\">\r\n <span class=\"resize-handle default_cursor\"> | </span>\r\n </div>\r\n </div>\r\n </th>\r\n } @else {\r\n @if (checkBoxSelection && checkboxSelectionType == \"single\") {\r\n <th style=\"min-width: 50px; width: 50px\"></th>\r\n }\r\n }\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 }\r\n @for (col of colDefs; track col.colId) {\r\n @if (col.active) {\r\n <th\r\n [ngStyle]=\"getStyle(col, 'action')\"\r\n [ngClass]=\"{\r\n 'drag-over': dragOverIndex === $index,\r\n pinned_column: col.leftPinned || col.rightPinned,\r\n }\"\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, col)\"\r\n (dragend)=\"onDragEnd()\"\r\n (mouseenter)=\"enableColumnDrag($event, $index)\"\r\n (mouseleave)=\"disableColumnDrag($event, $index)\"\r\n />\r\n }\r\n <span class=\"ellipsis headerName\">{{\r\n col?.headerName\r\n }}</span>\r\n\r\n @if (\r\n sortingRequired &&\r\n sortingColumnIndex == $index &&\r\n col?.sortable &&\r\n !col.isAction\r\n ) {\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();\r\n $event.stopPropagation()\r\n \"\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();\r\n $event.stopPropagation()\r\n \"\r\n />\r\n }\r\n </span>\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();\r\n $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();\r\n $event.stopPropagation()\r\n \"\r\n />\r\n }\r\n @if (activeFilterIndex === $index) {\r\n <div class=\"filt_wrap\">\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 <lib-common-input\r\n [options]=\"filterOptions\"\r\n [selectedValue]=\"\r\n col.filters[0].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters[0].filterOperation = $event;\r\n applyAllFilters()\r\n \"\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.filters[0].filterValue\"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n\r\n @if (col.filters[0].filterValue) {\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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]=\"\r\n col.filters[1].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters[1].filterOperation = $event;\r\n applyAllFilters()\r\n \"\r\n ></lib-common-input>\r\n <!-- <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.filters[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.filters[1].filterValue\"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n }\r\n }\r\n\r\n <!-- Number Filter -->\r\n @if (col.filterType === \"number\") {\r\n <lib-common-input\r\n [options]=\"numberFilterOptions\"\r\n [selectedValue]=\"\r\n col.filters[0].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters[0].filterOperation = $event;\r\n applyAllFilters()\r\n \"\r\n ></lib-common-input>\r\n\r\n <!-- <input\r\n type=\"number\"\r\n [(ngModel)]=\"col.filters[0].filterValue\"\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.filters[0].filterValue\"\r\n (input)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n\r\n @if (col.filters[0].filterValue) {\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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]=\"\r\n col.filters[1].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters[1].filterOperation = $event;\r\n applyAllFilters()\r\n \"\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.filters[1].filterValue\"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n <!-- <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.filters[1].filterValue\"\r\n placeholder=\"Filter…\"\r\n (keyup)=\"applyAllFilters()\"\r\n /> -->\r\n }\r\n }\r\n\r\n <!-- DATE FILTER -->\r\n @if (col.filterType === \"date\") {\r\n <lib-common-input\r\n [options]=\"numberFilterOptions\"\r\n [selectedValue]=\"\r\n col.filters[0].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters[0].filterOperation = $event;\r\n applyAllFilters()\r\n \"\r\n ></lib-common-input>\r\n\r\n <!-- <input\r\n type=\"date\"\r\n [(ngModel)]=\"col.filters[0].filterValue\"\r\n (change)=\"applyAllFilters()\"\r\n /> -->\r\n <lib-common-calendar\r\n [dateConfig]=\"dateConfig\"\r\n [(ngModel)]=\"col.filters[0].filterValue\"\r\n [preSelectedValue]=\"\r\n col.filters[0].filterValue\r\n \"\r\n (dateTimeSelected)=\"\r\n dateTimeSelected($event)\r\n \"\r\n ></lib-common-calendar>\r\n\r\n @if (col.filters[0].filterValue) {\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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]=\"\r\n col.filters[1].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters[1].filterOperation = $event;\r\n applyAllFilters()\r\n \"\r\n ></lib-common-input>\r\n\r\n <lib-common-calendar\r\n [dateConfig]=\"dateConfig\"\r\n [(ngModel)]=\"col.filters[1].filterValue\"\r\n [preSelectedValue]=\"\r\n col.filters[1].filterValue\r\n \"\r\n (dateTimeSelected)=\"\r\n dateTimeSelected($event)\r\n \"\r\n ></lib-common-calendar>\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 <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 class=\"custom_check_box\"\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=\"table_scroll\">\r\n @for (\r\n opt of col.filteredOptions;\r\n track $index\r\n ) {\r\n <label class=\"checkbox_container\">\r\n <input\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"\r\n col.selectedValues.has(opt)\r\n \"\r\n (change)=\"\r\n toggleSetOption(col, opt, $event)\r\n \"\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 </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 <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();\r\n $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 #colActionMenu\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=\"table_scroll\">\r\n @if (\r\n sortingType[$index] === \"dsc\" ||\r\n 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 }\r\n @if (\r\n sortingType[$index] === \"asc\" ||\r\n 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 }\r\n @if (\r\n sortingType[$index] === \"asc\" ||\r\n sortingType[$index] === \"dsc\"\r\n ) {\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"onSort(col, '', $index)\"\r\n >\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($event)\"\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\" #pinMenu>\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 (\r\n (pinActionClicked[col.colId] ??\r\n \"none\") === \"none\"\r\n ) {\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 (\r\n pinActionClicked[col.colId] === \"left\"\r\n ) {\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 (\r\n pinActionClicked[col.colId] === \"right\"\r\n ) {\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\r\n class=\"right_click_item\"\r\n [ngClass]=\"{\r\n disabled_option:\r\n !groupByRequired || col.disableGrouping,\r\n }\"\r\n >\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\"\r\n >Group by {{ col.headerName }}</span\r\n >\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 }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if (groupedResult && groupedResult.length > 0) {\r\n @for (group of 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\r\n ? 'chevron-down.svg'\r\n : '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) {\r\n @for (child of group.children; track 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\r\n <!-- CASE 2: CHILDREN ARE RAW ROWS -->\r\n @if (!group.children[0]?.children) {\r\n @for (row of group.children; track 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\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"row.isSelected\"\r\n /></span>\r\n </td>\r\n }\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\r\n [ngStyle]=\"getStyle(col)\"\r\n [ngClass]=\"[\r\n col?.addClass ? col.addClass(row) : '',\r\n col.leftPinned || col.rightPinned\r\n ? 'pinned_column'\r\n : '',\r\n ]\"\r\n >\r\n <!-- {{ row[col.fieldName] }} -->\r\n @if (!col?.cellRenderer) {\r\n <div class=\"cell-value ellipsis\">\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=\"table_scroll\">\r\n <div class=\"item\">\r\n <span class=\"desc\">\r\n {{ parseColValue(row, col) }}</span\r\n >\r\n </div>\r\n </div>\r\n </div>\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 }\r\n }\r\n }\r\n } @else {\r\n @for (data of rowData; track data.rowId) {\r\n <tr\r\n [ngClass]=\"data | addClass: tableOptions\"\r\n (dragover)=\"allowRowDrop($event)\"\r\n (drop)=\"dropRow(data)\"\r\n (click)=\"onRowClick(data)\"\r\n >\r\n @if (checkBoxSelection && atLeastOneColumnChecked) {\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 custom_check_box\"\r\n name=\"\"\r\n id=\"{{ data.rowId }}\"\r\n [disabled]=\"data.isLocked\"\r\n [checked]=\"data.isSelected || data.isLocked\"\r\n (change)=\"onRowCheckboxSelection($event)\"\r\n /></span>\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 </td>\r\n }\r\n @for (col of colDefs; track col.colId) {\r\n @if (col.active) {\r\n <td\r\n (click)=\"onCellClick(data, col)\"\r\n (dblclick)=\"onCellDblClick(data, col)\"\r\n [ngStyle]=\"getStyle(col)\"\r\n [ngClass]=\"[\r\n col?.addClass ? col.addClass(data) : '',\r\n col.leftPinned || col.rightPinned\r\n ? 'pinned_column'\r\n : '',\r\n ]\"\r\n class=\"table_cell\"\r\n >\r\n <div class=\"col_wrapper\">\r\n @if (\r\n isRowsEditable &&\r\n isCellDblClicked[col.colId + \"-\" + data.rowId]\r\n ) {\r\n <input\r\n [formControl]=\"cellClickedCtrl\"\r\n type=\"text\"\r\n name=\"cellClickedCtrl\"\r\n (blur)=\"onBlur()\"\r\n (keydown.enter)=\"onEnter()\"\r\n />\r\n }\r\n @if (\r\n rowGripFieldName &&\r\n rowGripFieldName === col?.fieldName\r\n ) {\r\n <div\r\n [draggable]=\"true\"\r\n (dragstart)=\"dragRow($event, data)\"\r\n class=\"gripper\"\r\n >\r\n <img class=\"gripper-img\" src=\"images/gripper.svg\" />\r\n </div>\r\n }\r\n\r\n @if (!col?.cellRenderer) {\r\n <div class=\"cell-value ellipsis\">\r\n <div\r\n class=\"more_data_wrapper\"\r\n [ngClass]=\"{ ellipsis: !col.wrapText }\"\r\n >\r\n <span\r\n class=\"node_label\"\r\n [appTooltip]=\"parseColValue(data, col) || 'N/A'\"\r\n tooltipPosition=\"adaptive\"\r\n [tooltipParentContainer]=\"parent\"\r\n >{{ parseColValue(data, col) }}</span\r\n >\r\n </div>\r\n <!-- <div class=\"see_more_data\" id=\"table_scroll\">\r\n <div class=\"item\">\r\n <span class=\"desc\">\r\n {{ parseColValue(data, col) }}</span\r\n >\r\n </div>\r\n </div> -->\r\n </div>\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 </div>\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 }\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 <!-- CASE: more groups -->\r\n @if (node.children[0]?.children) {\r\n @for (child of node.children; track 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\r\n <!-- CASE: final rows -->\r\n @if (!node.children[0]?.children) {\r\n @for (row of node.children; track 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\r\n type=\"checkbox custom_check_box\"\r\n [checked]=\"row.isSelected\"\r\n /></span>\r\n </td>\r\n }\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\r\n [ngStyle]=\"getStyle(col)\"\r\n [ngClass]=\"[\r\n col.leftPinned || col.rightPinned\r\n ? 'pinned_column'\r\n : '',\r\n ]\"\r\n >\r\n <!-- {{ row[col.fieldName] }} -->\r\n @if (!col?.cellRenderer) {\r\n <div class=\"cell-value ellipsis\">\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=\"table_scroll\">\r\n <div class=\"item\">\r\n <span class=\"desc\">\r\n {{ parseColValue(row, col) }}</span\r\n >\r\n </div>\r\n </div>\r\n </div>\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 }\r\n }\r\n </ng-template>\r\n </table>\r\n\r\n @if (\r\n (!rowData || rowData.length === 0) &&\r\n (!groupedResult || groupedResult.length === 0)\r\n ) {\r\n <div class=\"empty_overlay\">\r\n <div class=\"empty_content\">\r\n @if (tableOptions?.noDataTemplate) {\r\n <ng-container\r\n *ngTemplateOutlet=\"tableOptions.noDataTemplate\"\r\n ></ng-container>\r\n } @else {\r\n <span>No Data To Show</span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\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\r\n class=\"select_option\"\r\n appOutsideClick\r\n (clickOutside)=\"onClickOutside()\"\r\n >\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 |\r\n {{ totalRecords > 0 ? convertToNumber(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\r\n class=\"outlined_btn first_btn\"\r\n type=\"button\"\r\n (click)=\"onBtFirstClick()\"\r\n [ngClass]=\"pageDetails.currentPage > 1 ? '' : 'disable_btn'\"\r\n >\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\r\n ? ''\r\n : '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\r\n class=\"outlined_btn last_btn\"\r\n type=\"button\"\r\n (click)=\"onBtLastClick()\"\r\n [ngClass]=\"\r\n pageDetails.currentPage < pageDetails.totalPages\r\n ? ''\r\n : 'disable_btn'\r\n \"\r\n >\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","import { Component, HostListener, Input, signal } from '@angular/core';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nimport { AdaptivePositionDirective } from '../../directives/adaptive-position.directive';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AddClassPipe } from '../../pipes/add-class.pipe';\r\nimport { TooltipDirective } from '../../directives/tooltip.directive';\r\n\r\n@Component({\r\n selector: 'lib-common-renderer',\r\n imports: [\r\n OutsideClickDirective,\r\n AdaptivePositionDirective,\r\n CommonModule,\r\n AddClassPipe,\r\n TooltipDirective,\r\n ],\r\n templateUrl: './common-renderer.component.html',\r\n styleUrl: './common-renderer.component.scss',\r\n})\r\nexport class CommonRendererComponent {\r\n parentContainer!: HTMLElement;\r\n params: any;\r\n\r\n private static _activeRowId = signal<number | null>(null);\r\n private static _activeTagId = signal<string | null>(null);\r\n\r\n // wrapper to access static signal easily\r\n activeRowId = CommonRendererComponent._activeRowId;\r\n activeTagId = CommonRendererComponent._activeTagId;\r\n clickTimer: any = null;\r\n clickDelay = 250;\r\n\r\n maxVisible: number = 2;\r\n data: any;\r\n paramsVal: any;\r\n tagClasses: any;\r\n\r\n cellInit(params: any, data: any) {\r\n this.params = params;\r\n this.data = data;\r\n this.paramsVal = this.parseColValue(params.data, params.col);\r\n this.parentContainer = document.body;\r\n }\r\n\r\n /**\r\n * @description Returns the renderer type defined in cellRendererParams.\r\n * @author Anand Pandey\r\n * @returns {string | undefined}\r\n */\r\n get type() {\r\n return this.params?.cellParams?.type;\r\n }\r\n\r\n get subType() {\r\n return this.params?.cellParams?.subType;\r\n }\r\n /**\r\n * @description Returns the renderer subtype defined in cellRendererParams.\r\n * @author Anand Pandey\r\n * @returns {string | undefined}\r\n */\r\n get actionSubType() {\r\n return this.params?.cellParams?.subType;\r\n }\r\n\r\n /**\r\n * @description Returns the cell value from params or fallback to row data field.\r\n * @author Anand Pandey\r\n * @returns {any}\r\n */\r\n get value() {\r\n return this.params?.value ?? this.params?.data?.[this.params?.field];\r\n }\r\n\r\n /**\r\n * @description Returns the list of actions configured for the action menu.\r\n * @author Anand Pandey\r\n * @returns {any[]}\r\n */\r\n get actions() {\r\n return this.params?.cellParams?.actions.map((action: any) => {\r\n return {\r\n ...action,\r\n class: action.class || '',\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * @description Determines whether the current row's action menu should be open.\r\n * @author Anand Pandey\r\n * @returns {boolean}\r\n */\r\n get openActionMenu() {\r\n return this.activeRowId() === this.params.data.rowId;\r\n }\r\n\r\n /**\r\n * @description Emits a callback function defined in cellRendererParams.\r\n * @author Anand Pandey\r\n * @param {string} eventName\r\n * @param {any} data\r\n * @returns {void}\r\n */\r\n emit(eventName: string, data: any) {\r\n const handler = this.params?.cellParams?.[eventName];\r\n if (typeof handler === 'function') handler(data);\r\n }\r\n\r\n /**\r\n * @description Handles switch toggle and emits value change event.\r\n * @author Anand Pandey\r\n * @param {Event} event\r\n * @returns {void}\r\n */\r\n onToggle(event: any) {\r\n this.emit('onToggle', {\r\n params: this.params,\r\n row: this.params.data,\r\n value: event.target.checked,\r\n });\r\n }\r\n\r\n /**\r\n * @description Toggles the three-dots action menu for the current row.\r\n * @author Anand Pandey\r\n * @returns {void}\r\n */\r\n onThreeDotsMenuClick() {\r\n if (this.openActionMenu) {\r\n this.activeRowId.set(null);\r\n } else {\r\n this.activeRowId.set(this.params.data.rowId);\r\n }\r\n }\r\n\r\n /**\r\n * @description Handles click on an action option and emits selected action event.\r\n * @author Anand Pandey\r\n * @param {any} action\r\n * @returns {void}\r\n */\r\n onActionClick(action: any) {\r\n this.activeRowId.set(null);\r\n this.emit('onAction', {\r\n row: this.params.data,\r\n action,\r\n });\r\n }\r\n\r\n linkSingleClick() {\r\n if (this.clickTimer) {\r\n clearTimeout(this.clickTimer);\r\n this.clickTimer = null;\r\n }\r\n this.clickTimer = setTimeout(() => {\r\n this.emit('onLinkClick', {\r\n params: this.params,\r\n row: this.params.data,\r\n event: 'singleClick',\r\n });\r\n this.clickTimer = null;\r\n }, this.clickDelay);\r\n }\r\n\r\n linkDoubleClick() {\r\n if (this.clickTimer) {\r\n clearTimeout(this.clickTimer);\r\n this.clickTimer = null;\r\n }\r\n this.emit('onLinkClick', {\r\n params: this.params,\r\n row: this.params.data,\r\n event: 'doubleClick',\r\n });\r\n }\r\n\r\n /**\r\n * @description Closes the action menu when clicking outside the component.\r\n * @author Anand Pandey\r\n * @param {Event} e\r\n * @returns {void}\r\n */\r\n clickOutside(e: any) {\r\n this.activeRowId.set(null);\r\n }\r\n\r\n /**\r\n * @description Returns the complete list of tags after normalizing value input (supports array, object, string).\r\n * @author Anand Pandey\r\n * @returns {string[]}\r\n */\r\n get allTags(): any {\r\n return this.transformValue('tagKey', 'tagValue');\r\n }\r\n\r\n /**\r\n * @description Returns the subset of tags that should be visibly displayed in the UI based on maxVisible count.\r\n * @author Anand Pandey\r\n * @returns {string[]}\r\n */\r\n get visibleTags() {\r\n return this.allTags.slice(0, this.maxVisible);\r\n }\r\n\r\n /**\r\n * @description Returns the count of tags hidden behind the \"+\" more indicator.\r\n * @author Anand Pandey\r\n * @returns {number}\r\n */\r\n get hiddenCount() {\r\n return Math.max(0, this.allTags.length - this.maxVisible);\r\n }\r\n\r\n /**\r\n * @description Determines whether the dropdown should be open for the current row based on activeTagId.\r\n * @author Anand Pandey\r\n * @returns {boolean}\r\n */\r\n get openDropdown() {\r\n return (\r\n this.activeTagId() ===\r\n `${this.params.col.fieldName}-${this.params.data.rowId}`\r\n );\r\n }\r\n\r\n /**\r\n * @description Handles hover entry and activates dropdown if cursor enters +icon, hidden-list, dropdown or its items.\r\n * @author Anand Pandey\r\n * @param {MouseEvent} event\r\n * @returns {void}\r\n */\r\n toggleDropdown(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n if (\r\n target &&\r\n (target.closest('.hidden_list') ||\r\n target.closest('.tag_more') ||\r\n target.closest('.tag_dropdown') ||\r\n target.closest('.dropdown_item') ||\r\n this.openDropdown)\r\n ) {\r\n this.activeTagId.set(\r\n `${this.params.col.fieldName}-${this.params.data.rowId}`,\r\n );\r\n return;\r\n }\r\n if (this.openDropdown) {\r\n this.activeTagId.set(null);\r\n }\r\n }\r\n\r\n /**\r\n * @description Closes the dropdown only when cursor leaves the entire component area and not moving inside child elements.\r\n * @author Anand Pandey\r\n * @param {MouseEvent} event\r\n * @returns {void}\r\n */\r\n closeDropdown(event: MouseEvent) {\r\n const target = event.relatedTarget as HTMLElement;\r\n\r\n if (\r\n target &&\r\n (target.closest('.tag_wrapper') ||\r\n target.closest('.hidden_list') ||\r\n target.closest('.tag_more') ||\r\n target.closest('tag_dropdown') ||\r\n target.closest('dropdown_item'))\r\n ) {\r\n return;\r\n }\r\n this.activeTagId.set(null);\r\n }\r\n\r\n /**\r\n * @description Returns normalized link values derived from the cell `value`.\r\n * Uses the configured `linkKey` from `cellParams` to extract display data\r\n * @author Anand Pandey\r\n * @returns {Array<{ linkValue: string; class: string }>} Normalized link values\r\n */\r\n get linkVal(): any {\r\n return this.parseColValue(this.params.data, this.params.col);\r\n }\r\n\r\n /**\r\n * @description Normalizes the component `value` into a consistent array structure.\r\n * @author Anand Pandey\r\n * @param {string} key Key in `cellParams` used to determine which field to read from object values\r\n * @param {string} valueProp Property name assigned to the normalized output value\r\n * @returns {Array<{ [key: string]: string; class: string }>} Array of normalized value objects\r\n */\r\n transformValue(key: string, valueProp: any) {\r\n const value = this.value;\r\n if (!value) return [];\r\n\r\n if (Array.isArray(value)) {\r\n return value.map((val) => {\r\n if (typeof val === 'object') {\r\n return {\r\n [valueProp]: val[this.params.cellParams?.[key]],\r\n class: val['class'] || '',\r\n ...val,\r\n };\r\n } else {\r\n return { [valueProp]: String(val).trim(), class: '' };\r\n }\r\n });\r\n } else if (!Array.isArray(value) && typeof value === 'object') {\r\n return [\r\n {\r\n [valueProp]: value[this.params.cellParams?.[key]],\r\n class: value['class'] || '',\r\n ...value,\r\n },\r\n ];\r\n }\r\n return [{ [valueProp]: String(value).trim(), class: '' }];\r\n }\r\n\r\n parseColValue(row: any, col: any): any {\r\n if (!col?.fieldName?.includes('.')) {\r\n return row[col.fieldName] || 'N/A';\r\n } else {\r\n const keys = col.fieldName\r\n .replace(/\\[(\\d+)\\]/g, '.$1')\r\n .split('.')\r\n .filter(Boolean);\r\n let val = row;\r\n\r\n for (const key of keys) {\r\n if (Array.isArray(val)) {\r\n val = val.map((v) => v?.[key]).filter(Boolean);\r\n } else {\r\n val = val?.[key];\r\n }\r\n\r\n if (val === undefined || val === null) {\r\n return 'N/A';\r\n }\r\n }\r\n return val || 'N/A';\r\n }\r\n }\r\n}\r\n","<!-- Switch -->\r\n@if (type === \"switch\") {\r\n <div class=\"table_switch_wrapper\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" [checked]=\"value\" (change)=\"onToggle($event)\" />\r\n <span class=\"slider\"></span>\r\n </label>\r\n </div>\r\n}\r\n\r\n<!-- Action Menu -->\r\n\r\n@if (type === \"action-menu\") {\r\n <div class=\"action-menu\">\r\n <button class=\"action_dots\" (click)=\"onThreeDotsMenuClick()\" #tagTrigger>\r\n <img src=\"images/more-{{ actionSubType || 'vertical' }}.svg\" />\r\n </button>\r\n\r\n @if (openActionMenu) {\r\n <div\r\n class=\"menu\"\r\n appOutsideClick\r\n (clickOutside)=\"clickOutside($event)\"\r\n adaptivePosition\r\n [trigger]=\"tagTrigger\"\r\n [isAction]=\"true\"\r\n [matchWidth]=\"false\"\r\n >\r\n <div class=\"item_wrapper\" id=\"table_scroll\">\r\n @for (act of actions; track $index) {\r\n <div\r\n class=\"{{ 'menu_item' + ' ' + act.class }}\"\r\n [ngClass]=\"{\r\n disabled_item:\r\n params?.data?.disabledActions?.includes(act.label) ||\r\n act.disabled,\r\n }\"\r\n (click)=\"onActionClick(act)\"\r\n >\r\n @if (act.icon) {\r\n <img src=\"images/{{ act.icon }}.svg\" />\r\n } @else {\r\n <img src=\"{{ act?.image }}\" />\r\n }\r\n\r\n <span class=\"ellipsis\">{{ act.label }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n}\r\n\r\n<!-- Tags -->\r\n\r\n@if (type === \"tag\") {\r\n <div class=\"tag_wrapper\" #tagTrigger (mouseout)=\"closeDropdown($event)\">\r\n @for (tag of visibleTags; track $index) {\r\n <div\r\n class=\"{{ 'tag_chip' + ' ' + tag.class }}\"\r\n [ngClass]=\"paramsVal | addClass: params.cellParams\"\r\n >\r\n @if (subType === \"badge\") {\r\n <span class=\"circle\" [class]=\"tag.badgeClass\"></span>\r\n }\r\n @if (tag.image) {\r\n <img src=\"{{ tag.image }}\" alt=\"\" class=\"icon\" />\r\n }\r\n\r\n <div class=\"more_data_section\">\r\n <!-- <span class=\"textTruncate\"> {{ tag.tagValue }}</span> -->\r\n <div class=\"cell-value ellipsis\">\r\n <div class=\"more_data_wrapper textTruncate\">\r\n <span\r\n class=\"node_label\"\r\n [appTooltip]=\"tag.tagValue || 'N/A'\"\r\n tooltipPosition=\"adaptive\"\r\n [tooltipParentContainer]=\"parentContainer\"\r\n >{{ tag.tagValue }}</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @if (hiddenCount > 0) {\r\n <div class=\"hidden_list\">\r\n <span class=\"tag_more\" (mouseover)=\"toggleDropdown($event)\"\r\n >+{{ hiddenCount }}</span\r\n >\r\n @if (openDropdown) {\r\n <div\r\n class=\"tag_dropdown\"\r\n id=\"table_scroll\"\r\n adaptivePosition\r\n [trigger]=\"tagTrigger\"\r\n [matchWidth]=\"false\"\r\n >\r\n @for (tag of allTags; track $index) {\r\n <div class=\"{{ 'dropdown_item' + ' ' + tag.class }}\">\r\n {{ tag.tagValue }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n\r\n@if (type === \"link\") {\r\n <div class=\"more_data_section cell-value ellipsis\">\r\n <!-- @for (link of linkVal; track $index) { -->\r\n <div class=\"more_data_wrapper textTruncate\">\r\n <span\r\n class=\"grid-link\"\r\n (click)=\"linkSingleClick()\"\r\n (dblclick)=\"linkDoubleClick()\"\r\n [appTooltip]=\"linkVal || 'N/A'\"\r\n tooltipPosition=\"adaptive\"\r\n [tooltipParentContainer]=\"parentContainer\"\r\n >\r\n {{ linkVal }}\r\n >\r\n </span>\r\n </div>\r\n <!-- <div class=\"see_more_data\" id=\"table_scroll\">\r\n <div class=\"item\">\r\n <span class=\"desc\"> {{ linkVal }}</span>\r\n </div>\r\n </div> -->\r\n <!-- } -->\r\n </div>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n DoCheck,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AdaptivePositionDirective } from '../../directives/adaptive-position.directive';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nimport { RendererParserDirective } from '../../directives/renderer-parser.directive';\r\nimport { TooltipDirective } from '../../directives/tooltip.directive';\r\nimport { CommonInputComponent } from '../common-input/common-input.component';\r\nimport {\r\n CommonCalendarComponent,\r\n DateConfig,\r\n} from '../common-calendar/common-calendar.component';\r\n\r\nexport interface CatsTreeTableColumn {\r\n fieldName: string;\r\n header?: string;\r\n width?: number;\r\n minWidth?: number;\r\n maxWidth?: number;\r\n class?: string;\r\n colId?: string;\r\n sortable?: boolean;\r\n filterable?: boolean;\r\n filterType?: 'text' | 'number' | 'date' | 'set';\r\n leftPinned?: boolean;\r\n rightPinned?: boolean;\r\n leftOffset?: number;\r\n rightOffset?: number;\r\n active?: boolean;\r\n filters?: TreeFilterCondition[];\r\n options?: any[];\r\n filteredOptions?: any[];\r\n selectedValues?: Set<any>;\r\n cellRenderer?: any;\r\n cellRendererParams?: any;\r\n filterLogic?: 'AND' | 'OR';\r\n headerLocked?: boolean;\r\n}\r\n\r\nexport interface TreeFilterCondition {\r\n filterOperation: string;\r\n filterValue: any;\r\n}\r\n\r\nexport interface CatsTreeRowOptions {\r\n showCheckbox?: boolean;\r\n showToggle?: boolean;\r\n showNodeIcon?: boolean;\r\n showLink?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface CatsTreeExpandEvent<T = any> {\r\n node: T;\r\n level: number;\r\n path: T[];\r\n expanded: boolean;\r\n}\r\n\r\nexport interface CatsTreeSelectionChangeEvent<T = any> {\r\n node?: T;\r\n level?: number;\r\n path?: T[];\r\n checked: boolean;\r\n selectedNodes: T[];\r\n}\r\n\r\nexport interface CatsTreeLinkClickEvent<T = any> {\r\n node: T;\r\n level: number;\r\n path: T[];\r\n url: string | null;\r\n col: CatsTreeTableColumn;\r\n}\r\n\r\ntype RowKind = 'node' | 'loading' | 'no-data';\r\n\r\ninterface RowView<T = any> {\r\n kind: RowKind;\r\n level: number;\r\n path: T[];\r\n node: T;\r\n trackKey: string | number;\r\n}\r\n\r\n@Component({\r\n selector: 'cats-tree-table',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n OutsideClickDirective,\r\n AdaptivePositionDirective,\r\n RendererParserDirective,\r\n TooltipDirective,\r\n CommonInputComponent,\r\n CommonCalendarComponent,\r\n ],\r\n templateUrl: './common-tree-table.component.html',\r\n styleUrls: ['./common-tree-table.component.scss'],\r\n})\r\nexport class CommonTreeTableComponent<T = any>\r\n implements OnChanges, DoCheck, AfterViewInit, OnDestroy\r\n{\r\n @ViewChild('table', { static: true }) tableAreaRef!: ElementRef<HTMLElement>;\r\n @ViewChild('pinMenu') pinMenu?: ElementRef<HTMLElement>;\r\n @Input() data: T[] = [];\r\n @Input() columns: CatsTreeTableColumn[] = [\r\n { fieldName: 'name', header: 'Name' },\r\n ];\r\n @Input() tableOptions: any = {};\r\n\r\n @Input() idField: string = 'id';\r\n rowId: string = 'rowId';\r\n @Input() labelField: string = 'name';\r\n @Input() childrenField: string = 'array';\r\n @Input() treeColumnField?: string;\r\n\r\n @Input() indentPx: number = 24;\r\n @Input() showHeader: boolean = true;\r\n\r\n @Input() expandIcon: string = 'chevron-right.svg';\r\n @Input() collapseIcon: string = 'chevron-down.svg';\r\n @Input() iconBasePath: string = 'images';\r\n\r\n @Input() showCheckbox: boolean = false;\r\n @Input() showNodeIcon: boolean = true;\r\n @Input() noDataText: string = 'No data found';\r\n @Input() loadingText: string = 'Loading...';\r\n\r\n @Input() emitExpandAlways: boolean = true;\r\n\r\n // New sorting, filtering, and customization inputs\r\n @Input() sortingRequired: boolean = true;\r\n @Input() filterRequired: boolean = false;\r\n @Input() threeDotsMenuRequired: boolean = true;\r\n @Input() settingsRequired: boolean = true;\r\n @Input() settingsClicked: boolean = false;\r\n @Input() checkBoxSelection: boolean = false;\r\n @Input() checkboxSelectionType: 'multiple' | 'single' = 'multiple';\r\n\r\n @Input() paginationRequired: boolean = true;\r\n @Input() pageSizeList: number[] = [20, 50, 75, 100];\r\n @Input() totalRecords: number = 0;\r\n @Input() resetPage: boolean = true;\r\n\r\n @Input() isExpandable: (node: T, level: number, path: T[]) => boolean = (\r\n node,\r\n ) => {\r\n const children = (node as any)?.[this.childrenField];\r\n return Array.isArray(children) ? children.length > 0 : false;\r\n };\r\n\r\n @Input() rowOptionsResolver: (\r\n node: T,\r\n level: number,\r\n path: T[],\r\n ) => CatsTreeRowOptions = () => ({});\r\n\r\n @Input() nodeIconResolver: (\r\n node: T,\r\n level: number,\r\n path: T[],\r\n expanded: boolean,\r\n ) => string | null = () => null;\r\n\r\n @Input() linkResolver: (node: T, level: number, path: T[]) => string | null =\r\n () => null;\r\n\r\n @Output() nodeToggle = new EventEmitter<CatsTreeExpandEvent<T>>();\r\n @Output() selectionChange = new EventEmitter<\r\n CatsTreeSelectionChangeEvent<T>\r\n >();\r\n @Output() linkClick = new EventEmitter<CatsTreeLinkClickEvent<T>>();\r\n @Output() linkDoubleClick = new EventEmitter<CatsTreeLinkClickEvent<T>>();\r\n @Output() onHideSettings = new EventEmitter();\r\n @Output() onPaginationChange = new EventEmitter();\r\n dateConfig: DateConfig = {\r\n selectionMode: 'single',\r\n enableTime: false,\r\n };\r\n\r\n protected rows: RowView<T>[] = [];\r\n private linkClickTimer: any = null;\r\n private linkClickDelay = 250;\r\n\r\n // Pagination properties\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\r\n // Sorting, filtering, and column management properties\r\n sortingColumnIndex: number | null = null;\r\n sortingType: { [key: number]: string } = {};\r\n filteredData: T[] = [];\r\n originalRowData: T[] = [];\r\n // activeFilters: Map<string, any> = new Map();\r\n activeFilters: Set<any> = new Set<any>();\r\n appliedFilters: any[] = [];\r\n menuVisible: boolean[] = [];\r\n dragOverIndex: number | null = null;\r\n draggedIndex: number | null = null;\r\n activeFilterIndex: number | null = null;\r\n resizingColumnIndex: number | null = null;\r\n startX: number = 0;\r\n startWidth: number = 0;\r\n isResizing: boolean = false;\r\n showMoveIcon: { [key: number]: boolean } = {};\r\n showPin = false;\r\n pinActionClicked: Record<string, string> = {};\r\n columnDraggable: boolean[] = [];\r\n showPageSizeList: boolean = false;\r\n activeAll: boolean = true;\r\n atLeastOneColumnChecked: boolean = true;\r\n selectedRow: T[] = [];\r\n originalColumns: CatsTreeTableColumn[] = [];\r\n\r\n private removeMouseMove: (() => void) | null = null;\r\n private removeMouseUp: (() => void) | null = null;\r\n private rafId: number | null = null;\r\n private removeDragOver: (() => void) | null = null;\r\n private removeDrop: (() => void) | null = null;\r\n private originalExpandedKeys = new Set<any>();\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\r\n private expandedKeys = new Set<string | number>();\r\n private selectedKeys = new Set<string | number>();\r\n private fallbackKey = new WeakMap<object, number>();\r\n private fallbackSeq = 1;\r\n private resolvedTreeColumnField?: string;\r\n\r\n constructor(\r\n private renderer: Renderer2,\r\n private zone: NgZone,\r\n private cd: ChangeDetectorRef,\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n const el = this.tableAreaRef?.nativeElement;\r\n if (!el) return;\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.removeDragOver = this.renderer.listen(\r\n el,\r\n 'dragover',\r\n (event: DragEvent) => {\r\n if (this.isResizing) return;\r\n event.preventDefault();\r\n\r\n const th = (event.target as HTMLElement | null)?.closest?.(\r\n 'th',\r\n ) as HTMLElement | null;\r\n const rawIdx = th?.dataset?.['colIdx'];\r\n if (!rawIdx) return;\r\n\r\n const idx = Number.parseInt(rawIdx, 10);\r\n if (Number.isNaN(idx)) return;\r\n if (this.dragOverIndex === idx) return;\r\n\r\n this.zone.run(() => {\r\n this.dragOverIndex = idx;\r\n });\r\n },\r\n );\r\n\r\n this.removeDrop = this.renderer.listen(el, 'drop', (event: DragEvent) => {\r\n event.preventDefault();\r\n\r\n const th = (event.target as HTMLElement | null)?.closest?.(\r\n 'th',\r\n ) as HTMLElement | null;\r\n const rawIdx = th?.dataset?.['colIdx'];\r\n if (!rawIdx) return;\r\n\r\n const idx = Number.parseInt(rawIdx, 10);\r\n if (Number.isNaN(idx)) return;\r\n\r\n this.zone.run(() => {\r\n this.onDrop(event, idx);\r\n });\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeDragOver?.();\r\n this.removeDrop?.();\r\n this.removeMouseMove?.();\r\n this.removeMouseUp?.();\r\n if (this.rafId) cancelAnimationFrame(this.rafId);\r\n this.renderer.removeStyle(document.body, 'cursor');\r\n this.renderer.removeStyle(document.body, 'user-select');\r\n }\r\n\r\n getUpdatedColDefs(colDefs: any[]) {\r\n const flattenTree = (data: any[]): any[] => {\r\n const result: any[] = [];\r\n\r\n const recurse = (nodes: any[], parentTreeId = '') => {\r\n nodes.forEach((node) => {\r\n const currentTreeId = parentTreeId + node[this.idField];\r\n node[this.rowId] = currentTreeId;\r\n result.push(node);\r\n if (node.array && Array.isArray(node.array)) {\r\n recurse(node.array, currentTreeId);\r\n }\r\n });\r\n };\r\n\r\n recurse(data);\r\n return result;\r\n };\r\n\r\n const flatRows = flattenTree(this.data);\r\n\r\n return colDefs.map((col, index) => {\r\n // Reset sorting type per column\r\n this.sortingType[index] = '';\r\n\r\n col.colId = `${Date.now()}_${index}`;\r\n\r\n if (!col.filterType && !col.isAction) {\r\n col.filterType = 'text';\r\n }\r\n\r\n if (!col.filterLogic) {\r\n col.filterLogic = 'OR';\r\n }\r\n\r\n let updatedCol = {\r\n ...col,\r\n active: col.active ?? true,\r\n locked: col.locked ?? false,\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 // --------------------------------------------------------------------\r\n // SET FILTER TYPE\r\n // --------------------------------------------------------------------\r\n switch (col.filterType) {\r\n case 'text':\r\n updatedCol = {\r\n ...updatedCol,\r\n filters: [\r\n {\r\n filterOperation: 'contains',\r\n filterValue: '',\r\n },\r\n {\r\n filterOperation: '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 filters: [\r\n {\r\n filterOperation: '=',\r\n filterValue: '',\r\n },\r\n {\r\n filterOperation: '=',\r\n filterValue: '',\r\n },\r\n ],\r\n };\r\n break;\r\n\r\n case 'set':\r\n let fieldName = col.fieldName;\r\n\r\n if (fieldName.includes('.')) {\r\n fieldName = fieldName.split('.')[0];\r\n }\r\n\r\n const options = [\r\n ...new Set(\r\n flatRows\r\n .flatMap((r: any) =>\r\n this.normalizeSetFilterType(\r\n r[fieldName],\r\n col?.cellRendererParams?.tagKey,\r\n ),\r\n )\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 // --------------------------------------------------------------------\r\n // RESTORE APPLIED FILTERS (PERSISTENCE)\r\n // --------------------------------------------------------------------\r\n if (this.appliedFilters.length > 0) {\r\n const appliedFilter = this.appliedFilters.find(\r\n (f) => f.fieldName === col.fieldName,\r\n );\r\n\r\n if (appliedFilter) {\r\n switch (col.filterType) {\r\n case 'text':\r\n case 'number':\r\n case 'date':\r\n updatedCol = {\r\n ...updatedCol,\r\n filters: appliedFilter.filters,\r\n filterLogic: appliedFilter.filterLogic,\r\n };\r\n break;\r\n\r\n case 'set':\r\n let fieldName = col.fieldName;\r\n if (fieldName.includes('.')) {\r\n fieldName = fieldName.split('.')[0];\r\n }\r\n\r\n const options = [\r\n ...new Set(\r\n flatRows\r\n .flatMap((r: any) =>\r\n this.normalizeSetFilterType(\r\n r[fieldName],\r\n col?.cellRendererParams?.tagKey,\r\n ),\r\n )\r\n .filter(Boolean),\r\n ),\r\n ];\r\n\r\n const selectedValues = new Set(\r\n appliedFilter.filters.map((f: any) => f.filterValue),\r\n );\r\n\r\n updatedCol = {\r\n ...updatedCol,\r\n options,\r\n filteredOptions: options,\r\n selectedValues,\r\n };\r\n break;\r\n }\r\n }\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 ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['data'] || changes['columns']) {\r\n // this.initializeColumns();\r\n\r\n this.columns = this.getUpdatedColDefs(changes['columns']?.currentValue);\r\n this.originalRowData = structuredClone(this.data || []);\r\n this.rebuildRows();\r\n }\r\n if (changes['totalRecords']?.currentValue && this.resetPage) {\r\n this.resetPagination();\r\n } else {\r\n this.setPageCount();\r\n }\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.rebuildRows();\r\n }\r\n\r\n protected get treeColumn(): CatsTreeTableColumn {\r\n const preferredField = this.treeColumnField ?? this.resolvedTreeColumnField;\r\n if (preferredField) {\r\n const found = this.columns?.find((c) => c.fieldName === preferredField);\r\n if (found) return found;\r\n }\r\n return this.columns?.[0] ?? { fieldName: this.labelField, header: 'Name' };\r\n }\r\n\r\n /**\r\n * Initialize column properties for filtering, sorting, and customization\r\n */\r\n private initializeColumns(): void {\r\n this.columns = this.columns.map((col, index) => {\r\n if (!col.colId) col.colId = col.fieldName;\r\n if (col.sortable === undefined) col.sortable = true;\r\n if (col.filterable === undefined) col.filterable = false;\r\n if (col.filterType === undefined) col.filterType = 'text';\r\n if (col.active === undefined) col.active = true;\r\n if (col.width === undefined) col.width = 150;\r\n if (col.minWidth === undefined) col.minWidth = 50;\r\n if (!col.filters) {\r\n col.filters = [\r\n { filterOperation: 'contains', filterValue: '' },\r\n { filterOperation: 'contains', filterValue: '' },\r\n ];\r\n }\r\n if (!col.selectedValues) col.selectedValues = new Set();\r\n if (!col.options && col.filterType === 'set') {\r\n col.options = this.extractUniqueValues(this.data || [], col.fieldName);\r\n col.filteredOptions = [...(col.options || [])];\r\n }\r\n if (!this.menuVisible[index]) this.menuVisible[index] = false;\r\n\r\n const key = col.colId || col.fieldName;\r\n if (this.pinActionClicked[key] == null) {\r\n this.pinActionClicked[key] = col.leftPinned\r\n ? 'left'\r\n : col.rightPinned\r\n ? 'right'\r\n : 'none';\r\n }\r\n return col;\r\n });\r\n\r\n // If the consumer didn't specify a tree column, keep the initial first column as the tree UI column\r\n // even when columns are later reordered (pin/drag).\r\n if (!this.treeColumnField) {\r\n const firstField = this.columns?.[0]?.fieldName;\r\n if (\r\n firstField &&\r\n (this.resolvedTreeColumnField == null ||\r\n !this.columns.some(\r\n (c) => c.fieldName === this.resolvedTreeColumnField,\r\n ))\r\n ) {\r\n this.resolvedTreeColumnField = firstField;\r\n }\r\n }\r\n\r\n this.saveColumnState();\r\n }\r\n\r\n /**\r\n * Extract unique values from data for set filter\r\n */\r\n private extractUniqueValues(data: T[], fieldName: string): any[] {\r\n const values = new Set<any>();\r\n const visit = (nodes: T[]) => {\r\n for (const node of nodes) {\r\n values.add(this.getValue(node, fieldName));\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) visit(children);\r\n }\r\n };\r\n visit(data);\r\n return Array.from(values);\r\n }\r\n\r\n /**\r\n * Sort data based on column and sorting type\r\n */\r\n protected onSortingRowData(\r\n sortingColumnIndex: number,\r\n col: CatsTreeTableColumn,\r\n ): void {\r\n if (!col.sortable) return;\r\n\r\n this.sortingColumnIndex = sortingColumnIndex;\r\n Object.keys(this.sortingType).forEach((k) => {\r\n if (Number(k) !== sortingColumnIndex) delete this.sortingType[Number(k)];\r\n });\r\n\r\n if (!this.sortingType[sortingColumnIndex]) {\r\n this.sortingType[sortingColumnIndex] = 'asc';\r\n } else if (this.sortingType[sortingColumnIndex] === 'asc') {\r\n this.sortingType[sortingColumnIndex] = 'dsc';\r\n } else {\r\n this.sortingType[sortingColumnIndex] = '';\r\n delete this.sortingType[sortingColumnIndex];\r\n }\r\n\r\n this.applySort();\r\n this.rebuildRows();\r\n }\r\n\r\n /**\r\n * Sort from the three-dots menu with an explicit direction (matches `cats-data-grid` UX).\r\n */\r\n protected onSort(\r\n col: CatsTreeTableColumn,\r\n type: string,\r\n sortingColumIndex: number,\r\n ): void {\r\n if (!col.sortable) return;\r\n\r\n this.sortingType[sortingColumIndex] = type;\r\n this.sortingColumnIndex = type ? sortingColumIndex : null;\r\n\r\n Object.keys(this.sortingType).forEach((k) => {\r\n if (k !== String(sortingColumIndex)) this.sortingType[Number(k)] = '';\r\n });\r\n\r\n if (type === 'asc' || type === 'dsc') {\r\n this.applySort();\r\n } else {\r\n this.data = structuredClone(this.originalRowData || []);\r\n }\r\n\r\n this.rebuildRows();\r\n this.onClickOutside();\r\n }\r\n\r\n /**\r\n * Apply sorting to the row data\r\n */\r\n private applySort(): void {\r\n if (this.sortingColumnIndex === null) return;\r\n\r\n const col = this.columns[this.sortingColumnIndex];\r\n const sortType = this.sortingType[this.sortingColumnIndex];\r\n\r\n if (!sortType) return;\r\n\r\n const sortFn = (a: T, b: T) => {\r\n const aVal = this.getValue(a, col.fieldName);\r\n const bVal = this.getValue(b, col.fieldName);\r\n\r\n if (aVal === bVal) return 0;\r\n if (aVal === null || aVal === undefined) return 1;\r\n if (bVal === null || bVal === undefined) return -1;\r\n\r\n if (sortType === 'asc') {\r\n return aVal > bVal ? 1 : -1;\r\n } else {\r\n return aVal < bVal ? 1 : -1;\r\n }\r\n };\r\n\r\n const visit = (nodes: T[]) => {\r\n nodes.sort(sortFn);\r\n for (const node of nodes) {\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) visit(children);\r\n }\r\n };\r\n\r\n visit(this.data || []);\r\n }\r\n\r\n /**\r\n * Apply all active filters\r\n */\r\n // applyAllFilters(): void {\r\n // let result: T[] = structuredClone(this.originalRowData);\r\n\r\n // this.columns.forEach((col) => {\r\n // if (!col.filters || col.filterType === 'set') return;\r\n\r\n // const hasFirstValue = col.filters[0]?.filterValue;\r\n // if (!hasFirstValue) return;\r\n\r\n // result = result.filter((row) => {\r\n // const fieldValue = String(this.getValue(row, col.fieldName)).toLowerCase();\r\n // const filterOp = col.filters?.[0]?.filterOperation;\r\n // const filterVal = String(col.filters?.[0]?.filterValue).toLowerCase();\r\n\r\n // if (!this.evaluateTextFilterCondition(filterOp || '', fieldValue, filterVal)) {\r\n // return false;\r\n // }\r\n\r\n // if (col.filters?.[1]?.filterValue) {\r\n // const secondOp = col.filters[1].filterOperation;\r\n // const secondVal = String(col.filters[1].filterValue).toLowerCase();\r\n // return this.evaluateTextFilterCondition(secondOp || '', fieldValue, secondVal);\r\n // }\r\n\r\n // return true;\r\n // });\r\n // });\r\n\r\n // this.filteredData = result;\r\n // this.data = this.filteredData;\r\n // this.rebuildRows();\r\n // }\r\n\r\n applyAllFilters(): void {\r\n // 1. Check if ALL column filters are empty\r\n const allFiltersEmpty = this.columns.every(\r\n (col) => !col.filters || col.filters.every((f) => !f.filterValue),\r\n );\r\n\r\n // 2. If filters are cleared → restore original expansion & data\r\n if (allFiltersEmpty) {\r\n this.expandedKeys = new Set(this.originalExpandedKeys); // restore\r\n // this.expandedKeys.clear()\r\n this.filteredData = this.originalRowData;\r\n this.data = this.originalRowData;\r\n this.rebuildRows();\r\n return;\r\n }\r\n let cloned = structuredClone(this.originalRowData);\r\n this.activeFilters.clear();\r\n this.columns.forEach((col: any) => {\r\n if (col.filterable) {\r\n if (col.filterType === 'text') {\r\n // *********** TEXT FILTER ***********\r\n const [c1, c2] = col.filters;\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 let filteredTree;\r\n if (this.activeFilters.size == 1) {\r\n // cloned = structuredClone(this.originalRowData);\r\n filteredTree = this.filterTree(cloned);\r\n } else {\r\n filteredTree = this.filterTree(this.data);\r\n }\r\n\r\n this.expandAllParentsAfterFilter(filteredTree);\r\n this.filteredData = filteredTree;\r\n this.data = filteredTree;\r\n this.rebuildRows();\r\n }\r\n }\r\n });\r\n }\r\n\r\n private expandAllParentsAfterFilter(tree: any[]): void {\r\n const traverse = (nodes: any[]) => {\r\n for (const node of nodes) {\r\n const children = node.array || node.children;\r\n\r\n // If node has children → expand it\r\n if (Array.isArray(children) && children.length > 0) {\r\n const key = this.getNodeKey(node);\r\n this.expandedKeys.add(key); // <-- EXPAND HERE\r\n traverse(children);\r\n }\r\n }\r\n };\r\n\r\n traverse(tree);\r\n }\r\n\r\n // private filterTree(data: any[]): any[] {\r\n // const filtered: any[] = [];\r\n\r\n // data.forEach((node) => {\r\n // let newNode = { ...node };\r\n\r\n // // If children exist → recursively filter them\r\n // if (node.array && node.array.length) {\r\n // newNode.array = this.filterTree(node.array);\r\n // }\r\n\r\n // const isLeafMatch = this.matchesAllFilters(node);\r\n // const hasChildMatch = newNode.array && newNode.array.length > 0;\r\n\r\n // // Keep node if itself matches OR its child matches\r\n // if (isLeafMatch || hasChildMatch) {\r\n // filtered.push(newNode);\r\n // }\r\n // });\r\n\r\n // return filtered;\r\n // }\r\n\r\n private filterTree(data: any[]): any[] {\r\n const filtered: any[] = [];\r\n\r\n data.forEach((node) => {\r\n const nodeMatches = this.matchesAllFilters(node);\r\n\r\n // Case 1: Parent matches → keep ALL children UNFILTERED\r\n if (nodeMatches) {\r\n filtered.push({\r\n ...node,\r\n array: node.array ? structuredClone(node.array) : [],\r\n });\r\n return;\r\n }\r\n\r\n // Case 2: Parent does NOT match → filter children\r\n let filteredChildren = [];\r\n\r\n if (node.array && node.array.length > 0) {\r\n filteredChildren = this.filterTree(node.array);\r\n }\r\n\r\n // If children match → keep parent with filtered children\r\n if (filteredChildren.length > 0) {\r\n filtered.push({\r\n ...node,\r\n array: filteredChildren,\r\n });\r\n }\r\n\r\n // Otherwise → remove this node entirely\r\n });\r\n\r\n return filtered;\r\n }\r\n\r\n private matchesAllFilters(row: any): boolean {\r\n let result = true;\r\n\r\n for (const col of this.columns) {\r\n if (!col.filters || col.filterType === 'set') continue;\r\n\r\n const f1 = col.filters[0];\r\n const f2 = col.filters[1];\r\n\r\n const fieldValue = String(\r\n this.getValue(row, col.fieldName),\r\n ).toLowerCase();\r\n\r\n const fv1 = f1?.filterValue?.toString().toLowerCase() || '';\r\n const fv2 = f2?.filterValue?.toString().toLowerCase() || '';\r\n\r\n const op1 = f1?.filterOperation || '';\r\n const op2 = f2?.filterOperation || '';\r\n\r\n const logic = col.filterLogic || 'AND';\r\n\r\n const hasF1 = !!fv1;\r\n const hasF2 = !!fv2;\r\n\r\n // when no filters -> skip this column\r\n if (!hasF1 && !hasF2) continue;\r\n\r\n let colResult = true;\r\n\r\n if (hasF1 && !hasF2) {\r\n colResult = this.evaluateTextFilterCondition(op1, fieldValue, fv1);\r\n } else if (!hasF1 && hasF2) {\r\n colResult = this.evaluateTextFilterCondition(op2, fieldValue, fv2);\r\n } else {\r\n // both filters exist → AND / OR\r\n const m1 = this.evaluateTextFilterCondition(op1, fieldValue, fv1);\r\n const m2 = this.evaluateTextFilterCondition(op2, fieldValue, fv2);\r\n colResult = logic === 'AND' ? m1 && m2 : m1 || m2;\r\n }\r\n\r\n // merge column result with global result\r\n result = colResult;\r\n }\r\n\r\n return result;\r\n }\r\n // private matchesAllFilters(row: any): boolean {\r\n // let isMatch = true;\r\n\r\n // this.columns.forEach((col) => {\r\n // if (!col.filters || col.filterType === 'set') return;\r\n\r\n // const f1 = col.filters[0];\r\n // if (!f1?.filterValue) return;\r\n\r\n // const fieldValue = String(\r\n // this.getValue(row, col.fieldName),\r\n // ).toLowerCase();\r\n\r\n // if (\r\n // !this.evaluateTextFilterCondition(\r\n // f1.filterOperation || '',\r\n // fieldValue,\r\n // String(f1.filterValue).toLowerCase(),\r\n // )\r\n // ) {\r\n // isMatch = false;\r\n // return;\r\n // }\r\n\r\n // if (col.filters[1]?.filterValue) {\r\n // const f2 = col.filters[1];\r\n // const fv2 = String(f2.filterValue).toLowerCase();\r\n\r\n // if (\r\n // !this.evaluateTextFilterCondition(\r\n // f2.filterOperation || '',\r\n // fieldValue,\r\n // fv2,\r\n // )\r\n // ) {\r\n // isMatch = false;\r\n // }\r\n // }\r\n // });\r\n\r\n // return isMatch;\r\n // }\r\n\r\n /**\r\n * Evaluate text filter condition\r\n */\r\n private 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 * Toggle column filter visibility\r\n */\r\n protected toggleFilter(\r\n col: CatsTreeTableColumn,\r\n index: number,\r\n event: MouseEvent,\r\n ): void {\r\n event.stopPropagation();\r\n this.activeFilterIndex = this.activeFilterIndex === index ? null : index;\r\n }\r\n\r\n /**\r\n * Reset filter for a column\r\n */\r\n protected resetFilter(col: CatsTreeTableColumn): void {\r\n if (col.filters) {\r\n col.filters.forEach((f) => (f.filterValue = ''));\r\n }\r\n if (col.selectedValues) col.selectedValues.clear();\r\n this.activeFilters.delete(col.fieldName);\r\n this.applyAllFilters();\r\n }\r\n\r\n /**\r\n * Start column resize\r\n */\r\n protected startResize(event: MouseEvent, index: number): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.isResizing = true;\r\n this.resizingColumnIndex = index;\r\n this.startX = event.clientX;\r\n this.startWidth = this.columns[index].width ?? 150;\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.renderer.setStyle(document.body, 'cursor', 'col-resize');\r\n this.renderer.setStyle(document.body, 'user-select', 'none');\r\n this.removeMouseMove = this.renderer.listen(\r\n 'document',\r\n 'mousemove',\r\n this.onMouseMove,\r\n );\r\n this.removeMouseUp = this.renderer.listen(\r\n 'document',\r\n 'mouseup',\r\n this.stopResize,\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Handle mouse move during resize\r\n */\r\n private onMouseMove = (event: MouseEvent): void => {\r\n if (this.resizingColumnIndex === null || this.rafId) return;\r\n\r\n this.rafId = requestAnimationFrame(() => {\r\n const movement = event.clientX - this.startX;\r\n const newWidth = this.startWidth + movement;\r\n const minWidth = this.columns[this.resizingColumnIndex!]?.minWidth ?? 50;\r\n\r\n if (newWidth > minWidth) {\r\n this.zone.run(() => {\r\n this.columns[this.resizingColumnIndex!].width = newWidth;\r\n // recalc pinned offsets in case a pinned column changed width\r\n this.updatePinnedOffsets();\r\n this.cd.markForCheck();\r\n });\r\n }\r\n\r\n this.rafId = null;\r\n });\r\n };\r\n\r\n /**\r\n * Stop column resize\r\n */\r\n private stopResize = (): void => {\r\n this.isResizing = false;\r\n this.resizingColumnIndex = null;\r\n this.removeMouseMove?.();\r\n this.removeMouseUp?.();\r\n this.renderer.removeStyle(document.body, 'cursor');\r\n this.renderer.removeStyle(document.body, 'user-select');\r\n if (this.rafId) {\r\n cancelAnimationFrame(this.rafId);\r\n this.rafId = null;\r\n }\r\n };\r\n\r\n /**\r\n * Handle column drag start\r\n */\r\n protected onDragStart(event: DragEvent, index: number): void {\r\n if (this.isResizing) return;\r\n this.draggedIndex = index;\r\n event.dataTransfer?.setData('text/plain', index.toString());\r\n }\r\n\r\n /**\r\n * Handle column drag over\r\n */\r\n protected onDragOver(event: DragEvent, index: number): void {\r\n event.preventDefault();\r\n this.isResizing = false;\r\n if (this.dragOverIndex !== index) this.dragOverIndex = index;\r\n }\r\n\r\n /**\r\n * Handle column drop\r\n */\r\n protected onDrop(event: DragEvent, index: number): void {\r\n event.preventDefault();\r\n if (this.draggedIndex === null) return;\r\n const draggedItem = this.columns[this.draggedIndex];\r\n this.columns.splice(this.draggedIndex, 1);\r\n this.columns.splice(index, 0, draggedItem);\r\n this.draggedIndex = null;\r\n this.dragOverIndex = null;\r\n this.updatePinnedOffsets();\r\n }\r\n\r\n /**\r\n * Handle drag end\r\n */\r\n protected onDragEnd(): void {\r\n this.draggedIndex = null;\r\n this.dragOverIndex = null;\r\n }\r\n\r\n /**\r\n * Pin column to left or right\r\n */\r\n protected pinColumn(\r\n col: CatsTreeTableColumn,\r\n index: number,\r\n direction: string,\r\n ): void {\r\n const key = col.colId || col.fieldName;\r\n this.pinActionClicked[key] = direction;\r\n\r\n col.leftPinned = direction === 'left';\r\n col.rightPinned = direction === 'right';\r\n\r\n // Reorder columns to mirror `cats-data-grid` behavior.\r\n const currentIndex = this.columns.findIndex(\r\n (c) => (c.colId || c.fieldName) === key,\r\n );\r\n if (currentIndex >= 0) {\r\n this.columns.splice(currentIndex, 1);\r\n } else if (index >= 0 && index < this.columns.length) {\r\n this.columns.splice(index, 1);\r\n }\r\n\r\n if (direction === 'left') {\r\n this.columns = [col, ...this.columns];\r\n } else if (direction === 'right') {\r\n this.columns = [...this.columns, col];\r\n } else {\r\n const leftPinned = this.columns.filter((c) => c.leftPinned);\r\n const rightPinned = this.columns.filter((c) => c.rightPinned);\r\n const middle = this.columns.filter(\r\n (c) => !c.leftPinned && !c.rightPinned,\r\n );\r\n\r\n const byKey = new Map<string, CatsTreeTableColumn>();\r\n for (const c of middle) byKey.set(c.colId || c.fieldName, c);\r\n byKey.set(key, col);\r\n\r\n const originalKeys = (this.originalColumns || []).map(\r\n (c) => c.colId || c.fieldName,\r\n );\r\n const orderedMiddle: CatsTreeTableColumn[] = [];\r\n for (const k of originalKeys) {\r\n const match = byKey.get(k);\r\n if (match) orderedMiddle.push(match);\r\n }\r\n for (const [k, v] of byKey.entries()) {\r\n if (!originalKeys.includes(k)) orderedMiddle.push(v);\r\n }\r\n\r\n this.columns = [...leftPinned, ...orderedMiddle, ...rightPinned];\r\n }\r\n\r\n this.updatePinnedOffsets();\r\n this.showPin = false;\r\n this.onClickOutside();\r\n }\r\n\r\n protected showPinActions(event: MouseEvent): void {\r\n event.stopPropagation();\r\n const parentEl = event.currentTarget as HTMLElement | null;\r\n this.showPin = true;\r\n\r\n // Flip the submenu to open left if it would overflow the viewport.\r\n setTimeout(() => {\r\n const menuEl = this.pinMenu?.nativeElement;\r\n if (!menuEl || !parentEl) return;\r\n\r\n const parentRect = parentEl.getBoundingClientRect();\r\n const menuWidth = menuEl.offsetWidth;\r\n const viewPortWidth = window.innerWidth;\r\n const x = parentRect.right;\r\n\r\n if (x + menuWidth > viewPortWidth) {\r\n menuEl.style.right = `${parentRect.width}px`;\r\n } else {\r\n menuEl.style.right = '';\r\n }\r\n });\r\n }\r\n\r\n protected hidePinActions(): void {\r\n this.showPin = false;\r\n }\r\n\r\n /**\r\n * Update pinned column offsets\r\n */\r\n protected updatePinnedOffsets(): void {\r\n let leftOffset = 0;\r\n let rightOffset = 0;\r\n\r\n this.columns.forEach((col) => {\r\n if (col.leftPinned) {\r\n col.leftOffset = leftOffset;\r\n leftOffset += col.width ?? 150;\r\n } else {\r\n col.leftOffset = undefined;\r\n }\r\n });\r\n\r\n [...this.columns].reverse().forEach((col) => {\r\n if (col.rightPinned) {\r\n col.rightOffset = rightOffset;\r\n rightOffset += col.width ?? 150;\r\n } else {\r\n col.rightOffset = undefined;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Filter set options based on search text\r\n */\r\n protected filterSetOptions(col: CatsTreeTableColumn, event: any): void {\r\n const text = event.target.value.toLowerCase();\r\n col.filteredOptions =\r\n col.options?.filter((option: any) =>\r\n String(option).toLowerCase().includes(text),\r\n ) || [];\r\n }\r\n\r\n /**\r\n * Toggle set filter option\r\n */\r\n protected toggleSetOption(\r\n col: CatsTreeTableColumn,\r\n option: any,\r\n event: any,\r\n ): void {\r\n if ((event.target as HTMLInputElement).checked) {\r\n col.selectedValues?.add(option);\r\n } else {\r\n col.selectedValues?.delete(option);\r\n }\r\n this.applyAllFilters();\r\n }\r\n\r\n /**\r\n * Toggle select all in set filter\r\n */\r\n protected toggleSelectAllSetFilter(\r\n col: CatsTreeTableColumn,\r\n event: any,\r\n ): void {\r\n col.selectedValues?.clear();\r\n if ((event.target as HTMLInputElement).checked) {\r\n col.options?.forEach((o: any) => col.selectedValues?.add(o));\r\n }\r\n this.applyAllFilters();\r\n }\r\n\r\n /**\r\n * Get column style\r\n */\r\n protected getStyle(col: CatsTreeTableColumn): any {\r\n const style: any = {\r\n width: `${col.width ?? 200}px`,\r\n minWidth: `${col.minWidth ?? 50}px`,\r\n };\r\n if (col.leftPinned) {\r\n style.position = 'sticky';\r\n style.left = `${col.leftOffset ?? 0}px`;\r\n style.zIndex = 1;\r\n } else if (col.rightPinned) {\r\n style.position = 'sticky';\r\n style.right = `${col.rightOffset ?? 0}px`;\r\n style.zIndex = 1;\r\n }\r\n return style;\r\n }\r\n\r\n /**\r\n * Toggle column visibility\r\n */\r\n protected changeActiveColSelection(\r\n event: Event,\r\n col: CatsTreeTableColumn,\r\n ): void {\r\n // Prevent deselection of locked headers\r\n if (col.headerLocked) {\r\n col.active = true;\r\n return;\r\n }\r\n col.active = (event.target as HTMLInputElement).checked;\r\n this.atLeastOneColumnChecked = this.columns.some((dt) => dt.active);\r\n // Update activeAll state\r\n this.activeAll = this.columns.every((dt) => dt.active);\r\n // this.saveColumnState();\r\n }\r\n\r\n /**\r\n * Compute minimum table width based on active column widths\r\n */\r\n protected getTableMinWidth(): number {\r\n return this.columns\r\n .filter((c) => c.active)\r\n .reduce((sum, c) => sum + (c.width ?? 150), 0);\r\n }\r\n\r\n /**\r\n * Select/deselect all columns\r\n */\r\n protected activeAllSelection(event: Event): void {\r\n const checked = (event.target as HTMLInputElement).checked;\r\n this.columns.forEach((col) => {\r\n if (col.headerLocked) {\r\n col.active = true;\r\n } else {\r\n col.active = checked;\r\n }\r\n });\r\n this.activeAll = this.columns.every((dt) => dt.active);\r\n this.atLeastOneColumnChecked = this.columns.some((dt) => dt.active);\r\n // this.saveColumnState();\r\n }\r\n\r\n /**\r\n * Hide settings\r\n */\r\n protected hideSettings(): void {\r\n this.onHideSettings.emit();\r\n }\r\n\r\n /**\r\n * Close all menus\r\n */\r\n protected onClickOutside(): void {\r\n this.activeFilterIndex = null;\r\n this.showPin = false;\r\n this.showPageSizeList = false;\r\n this.menuVisible = this.menuVisible.map(() => false);\r\n }\r\n\r\n /**\r\n * Open column menu\r\n */\r\n protected openMenu(\r\n event: MouseEvent,\r\n col: CatsTreeTableColumn,\r\n index: number,\r\n ): void {\r\n event.stopPropagation();\r\n this.activeFilterIndex = null;\r\n this.showPin = false;\r\n this.menuVisible = this.menuVisible.map(() => false);\r\n this.menuVisible[index] = true;\r\n }\r\n\r\n /**\r\n * Recursively select all children of a node\r\n */\r\n private selectAllChildren(node: T): void {\r\n const key = this.getNodeKey(node);\r\n this.selectedKeys.add(key);\r\n\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) {\r\n for (const child of children) {\r\n this.selectAllChildren(child);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Recursively deselect all children of a node\r\n */\r\n private deselectAllChildren(node: T): void {\r\n const key = this.getNodeKey(node);\r\n this.selectedKeys.delete(key);\r\n\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) {\r\n for (const child of children) {\r\n this.deselectAllChildren(child);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Recursively select all nodes in the tree\r\n */\r\n private selectAllNodes(nodes: T[]): void {\r\n for (const node of nodes) {\r\n this.selectAllChildren(node);\r\n }\r\n }\r\n\r\n /**\r\n * Recursively deselect all nodes in the tree\r\n */\r\n private deselectAllNodes(nodes: T[]): void {\r\n for (const node of nodes) {\r\n this.deselectAllChildren(node);\r\n }\r\n }\r\n\r\n // /**\r\n // * Check if all children of a node are selected\r\n // */\r\n // private areAllChildrenSelected(node: T): boolean {\r\n // const children = this.getChildren(node);\r\n // if (!Array.isArray(children) || children.length === 0) {\r\n // return true;\r\n // }\r\n\r\n // for (const child of children) {\r\n // const childKey = this.getNodeKey(child);\r\n // if (!this.selectedKeys.has(childKey)) {\r\n // return false;\r\n // }\r\n // }\r\n // return true;\r\n // }\r\n\r\n // /**\r\n // * Check if any children of a node are selected\r\n // */\r\n // private areAnyChildrenSelected(node: T): boolean {\r\n // const children = this.getChildren(node);\r\n // if (!Array.isArray(children) || children.length === 0) {\r\n // return false;\r\n // }\r\n\r\n // for (const child of children) {\r\n // const childKey = this.getNodeKey(child);\r\n // if (this.selectedKeys.has(childKey)) {\r\n // return true;\r\n // }\r\n // }\r\n // return false;\r\n // }\r\n\r\n /**\r\n * Update parent node selection based on children state\r\n */\r\n private updateParentSelection(parentPath: T[]): void {\r\n // Update parents bottom-up\r\n for (let i = parentPath.length - 1; i >= 0; i--) {\r\n const parent = parentPath[i];\r\n const children = this.getChildren(parent);\r\n\r\n if (!Array.isArray(children) || children.length === 0) {\r\n continue;\r\n }\r\n\r\n // Check if all children are selected\r\n const allSelected = children.every((child) =>\r\n this.selectedKeys.has(this.getNodeKey(child)),\r\n );\r\n const parentKey = this.getNodeKey(parent);\r\n\r\n if (allSelected) {\r\n // Auto-select parent if all children are selected\r\n this.selectedKeys.add(parentKey);\r\n }\r\n // Note: We don't auto-deselect parent when children are deselected\r\n // This allows manual parent selection independent of children\r\n }\r\n }\r\n\r\n /**\r\n * On header checkbox change - select all nodes hierarchically\r\n */\r\n protected onHeaderCheckboxChange(event: any): void {\r\n if (event.target.checked) {\r\n this.selectAllNodes(this.data || []);\r\n } else {\r\n this.deselectAllNodes(this.data || []);\r\n }\r\n this.selectionChange.emit({\r\n checked: event.target.checked,\r\n selectedNodes: this.data || [],\r\n });\r\n\r\n this.cd.markForCheck();\r\n }\r\n\r\n /**\r\n * On row checkbox change\r\n */\r\n protected onRowCheckboxChange(event: any, node: T): void {\r\n if (event.target.checked) {\r\n if (!this.selectedRow.includes(node)) {\r\n this.selectedRow.push(node);\r\n }\r\n } else {\r\n this.selectedRow = this.selectedRow.filter((r) => r !== node);\r\n }\r\n }\r\n\r\n /**\r\n * Check if all rows are selected\r\n */\r\n protected checkAllSelected(): boolean {\r\n return this.selectedRow.length === this.data.length && this.data.length > 0;\r\n }\r\n\r\n /**\r\n * Check if some rows are selected (indeterminate state)\r\n */\r\n protected checkIndeterminate(): boolean {\r\n return (\r\n this.selectedRow.length > 0 && this.selectedRow.length < this.data.length\r\n );\r\n }\r\n\r\n /**\r\n * Check if row is selected\r\n */\r\n protected isRowSelected(node: T): boolean {\r\n return this.selectedRow.includes(node);\r\n }\r\n\r\n /**\r\n * Check if a node has indeterminate selection state (some but not all children selected)\r\n */\r\n protected isNodeIndeterminate(node: T): boolean {\r\n const children = this.getChildren(node);\r\n if (!Array.isArray(children) || children.length === 0) {\r\n return false;\r\n }\r\n\r\n let selectedCount = 0;\r\n for (const child of children) {\r\n const childKey = this.getNodeKey(child);\r\n if (this.selectedKeys.has(childKey)) {\r\n selectedCount++;\r\n }\r\n }\r\n\r\n // Indeterminate if some but not all children are selected\r\n return selectedCount > 0 && selectedCount < children.length;\r\n }\r\n\r\n /**\r\n * Check header checkbox indeterminate state\r\n */\r\n protected checkHeaderIndeterminate(): boolean {\r\n if (this.selectedKeys.size === 0) return false;\r\n\r\n // Count total nodes in tree\r\n let totalNodes = 0;\r\n const countNodes = (nodes: T[]) => {\r\n for (const node of nodes) {\r\n totalNodes++;\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) {\r\n countNodes(children);\r\n }\r\n }\r\n };\r\n countNodes(this.data || []);\r\n\r\n return this.selectedKeys.size > 0 && this.selectedKeys.size < totalNodes;\r\n }\r\n\r\n /**\r\n * Check if header checkbox should be checked\r\n */\r\n protected checkHeaderChecked(): boolean {\r\n if (this.selectedKeys.size === 0) return false;\r\n\r\n // Count total nodes in tree\r\n let totalNodes = 0;\r\n const countNodes = (nodes: T[]) => {\r\n for (const node of nodes) {\r\n totalNodes++;\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) {\r\n countNodes(children);\r\n }\r\n }\r\n };\r\n countNodes(this.data || []);\r\n\r\n return this.selectedKeys.size === totalNodes;\r\n }\r\n\r\n protected toggle(node: T, level: number, path: T[]): void {\r\n const key = this.getNodeKey(node);\r\n if (this.expandedKeys.has(key)) {\r\n this.expandedKeys.delete(key);\r\n // Recursively collapse all children\r\n this.collapseAllChildren(node);\r\n this.nodeToggle.emit({ node, level, path, expanded: false });\r\n this.rebuildRows();\r\n return;\r\n }\r\n\r\n this.expandedKeys.add(key);\r\n this.originalExpandedKeys = new Set(this.expandedKeys);\r\n if (this.emitExpandAlways || this.getChildren(node) == null) {\r\n this.nodeToggle.emit({ node, level, path, expanded: true });\r\n }\r\n this.rebuildRows();\r\n }\r\n\r\n /**\r\n * Recursively collapse all children of a node\r\n */\r\n private collapseAllChildren(node: T): void {\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) {\r\n for (const child of children) {\r\n const childKey = this.getNodeKey(child);\r\n this.expandedKeys.delete(childKey);\r\n this.collapseAllChildren(child);\r\n }\r\n }\r\n }\r\n\r\n protected isExpanded(node: T): boolean {\r\n return this.expandedKeys.has(this.getNodeKey(node));\r\n }\r\n\r\n protected onCheckboxChange(\r\n node: T,\r\n level: number,\r\n path: T[],\r\n checked: boolean,\r\n ): void {\r\n const key = this.getNodeKey(node);\r\n\r\n if (checked) {\r\n // When node is checked, select all its children recursively\r\n this.selectAllChildren(node);\r\n\r\n // Auto-select all parents if all their children are selected\r\n this.updateParentSelection(path);\r\n } else {\r\n // When node is unchecked, deselect all its children recursively\r\n this.deselectAllChildren(node);\r\n }\r\n\r\n this.selectionChange.emit({\r\n node,\r\n level,\r\n path,\r\n checked,\r\n selectedNodes: this.getSelectedNodes(),\r\n });\r\n\r\n this.cd.markForCheck();\r\n }\r\n\r\n protected isChecked(node: T): boolean {\r\n return this.selectedKeys.has(this.getNodeKey(node));\r\n }\r\n\r\n protected onLinkClicked(\r\n e: MouseEvent,\r\n node: T,\r\n level: number,\r\n path: T[],\r\n col: CatsTreeTableColumn,\r\n ): void {\r\n // Timer-based single/double click logic\r\n if (this.linkClickTimer) {\r\n clearTimeout(this.linkClickTimer);\r\n this.linkClickTimer = null;\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.linkClickTimer = setTimeout(() => {\r\n this.linkClick.emit({\r\n node,\r\n level,\r\n path,\r\n url: this.linkResolver(node, level, path),\r\n col,\r\n });\r\n this.linkClickTimer = null;\r\n }, this.linkClickDelay);\r\n }\r\n\r\n protected onLinkDoubleClicked(\r\n e: MouseEvent,\r\n node: T,\r\n level: number,\r\n path: T[],\r\n col: CatsTreeTableColumn,\r\n ): void {\r\n // Cancel single click timer and emit double click\r\n if (this.linkClickTimer) {\r\n clearTimeout(this.linkClickTimer);\r\n this.linkClickTimer = null;\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.linkDoubleClick.emit({\r\n node,\r\n level,\r\n path,\r\n url: this.linkResolver(node, level, path),\r\n col,\r\n });\r\n }\r\n\r\n protected resolveIconSrc(icon: string | null): string | null {\r\n if (!icon) return null;\r\n if (\r\n icon.includes('/') ||\r\n icon.startsWith('http://') ||\r\n icon.startsWith('https://')\r\n ) {\r\n return icon;\r\n }\r\n return `${this.iconBasePath}/${icon}`;\r\n }\r\n\r\n protected getValue(node: T, fieldPath: string): any {\r\n if (!fieldPath) return '';\r\n const parts = fieldPath.split('.');\r\n let cur: any = node as any;\r\n for (const part of parts) {\r\n if (cur == null || typeof cur !== 'object') return '';\r\n cur = cur?.[part];\r\n }\r\n return cur ?? '';\r\n }\r\n\r\n protected isNodeRow(row: RowView<T>): boolean {\r\n return row.kind === 'node';\r\n }\r\n\r\n protected rowOptions(row: RowView<T>): CatsTreeRowOptions {\r\n return this.rowOptionsResolver(row.node, row.level, row.path) || {};\r\n }\r\n\r\n protected showToggleFor(row: RowView<T>): boolean {\r\n const opts = this.rowOptions(row);\r\n if (opts.showToggle === false) return false;\r\n return this.isExpandable(row.node, row.level, row.path);\r\n }\r\n\r\n protected showCheckboxFor(row: RowView<T>): boolean {\r\n const opts = this.rowOptions(row);\r\n if (opts.showCheckbox != null) return !!opts.showCheckbox;\r\n return this.showCheckbox;\r\n }\r\n\r\n protected showNodeIconFor(row: RowView<T>): boolean {\r\n const opts = this.rowOptions(row);\r\n if (opts.showNodeIcon != null) return !!opts.showNodeIcon;\r\n return this.showNodeIcon;\r\n }\r\n\r\n protected showLinkFor(row: RowView<T>): boolean {\r\n const opts = this.rowOptions(row);\r\n if (opts.showLink != null) return !!opts.showLink;\r\n return this.linkResolver(row.node, row.level, row.path) != null;\r\n }\r\n\r\n protected isDisabledRow(row: RowView<T>): boolean {\r\n return !!this.rowOptions(row)?.disabled;\r\n }\r\n\r\n protected labelFor(row: RowView<T>): any {\r\n return this.getValue(row.node, this.labelField);\r\n }\r\n\r\n protected toggleIconFor(row: RowView<T>): string {\r\n if (this.isExpanded(row.node)) {\r\n }\r\n return this.isExpanded(row.node) ? this.collapseIcon : this.expandIcon;\r\n }\r\n\r\n protected nodeIconFor(row: RowView<T>): string | null {\r\n return this.nodeIconResolver(\r\n row.node,\r\n row.level,\r\n row.path,\r\n this.isExpanded(row.node),\r\n );\r\n }\r\n\r\n protected linkUrlFor(row: RowView<T>): string | null {\r\n return this.linkResolver(row.node, row.level, row.path);\r\n }\r\n\r\n /**\r\n * Set page count based on total records and page size\r\n */\r\n protected setPageCount(): void {\r\n if (this.totalRecords === 0) {\r\n this.pageDetails.totalPages = 1;\r\n } else {\r\n this.pageDetails.totalPages = Math.ceil(\r\n this.totalRecords / this.pageDetails.pageSize,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * On page size changed\r\n */\r\n protected 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 * On first button click\r\n */\r\n protected onBtFirstClick(): void {\r\n this.pageDetails.currentPage = 1;\r\n this.recordsToShow.min = 0;\r\n this.recordsToShow.max = 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 * On previous button click\r\n */\r\n protected 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 * On next button click\r\n */\r\n protected 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 * On last button click\r\n */\r\n protected onBtLastClick(): void {\r\n this.pageDetails.currentPage = this.pageDetails.totalPages;\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 * Go to selected page\r\n */\r\n protected 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 reset table configuration\r\n * @author Tarun Kumar\r\n * @param none\r\n * @returns void\r\n */\r\n resetPagination(): 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 = this.pageDetails.pageSize;\r\n this.setPageCount();\r\n }\r\n\r\n /**\r\n * Convert to number\r\n */\r\n protected convertToNumber(val: any): number {\r\n return parseInt(val);\r\n }\r\n\r\n private getChildren(node: T): any[] | null | undefined {\r\n return (node as any)?.[this.childrenField];\r\n }\r\n\r\n private rebuildRows(): void {\r\n const next: RowView<T>[] = [];\r\n for (const root of this.data || []) {\r\n this.walk(root, 0, [], next);\r\n }\r\n this.rows = next;\r\n }\r\n\r\n private walk(\r\n node: T,\r\n level: number,\r\n parentPath: T[],\r\n out: RowView<T>[],\r\n ): void {\r\n const path = [...parentPath, node];\r\n out.push({\r\n kind: 'node',\r\n node,\r\n level,\r\n path,\r\n trackKey: this.getNodeKey(node),\r\n });\r\n\r\n if (!this.isExpanded(node) || !this.isExpandable(node, level, path)) return;\r\n\r\n const children = this.getChildren(node);\r\n if (children == null) {\r\n out.push({\r\n kind: 'loading',\r\n node,\r\n level: level + 1,\r\n path,\r\n trackKey: `${this.getNodeKey(node)}::loading`,\r\n } as any);\r\n return;\r\n }\r\n\r\n if (!Array.isArray(children) || children.length === 0) {\r\n out.push({\r\n kind: 'no-data',\r\n node,\r\n level: level + 1,\r\n path,\r\n trackKey: `${this.getNodeKey(node)}::no-data`,\r\n } as any);\r\n return;\r\n }\r\n\r\n for (const child of children) {\r\n this.walk(child, level + 1, path, out);\r\n }\r\n }\r\n\r\n private getNodeKey(node: T): string | number {\r\n const anyNode = node as any;\r\n // const direct = anyNode?.[this.idField];\r\n const direct = anyNode?.[this.rowId];\r\n if (direct != null) return direct;\r\n if (typeof node === 'object' && node != null) {\r\n const existing = this.fallbackKey.get(node as any);\r\n if (existing != null) return existing;\r\n const next = this.fallbackSeq++;\r\n this.fallbackKey.set(node as any, next);\r\n return next;\r\n }\r\n return String(node);\r\n }\r\n\r\n private getSelectedNodes(): T[] {\r\n const selected: T[] = [];\r\n const visit = (nodes: T[]) => {\r\n for (const n of nodes) {\r\n if (this.selectedKeys.has(this.getNodeKey(n))) selected.push(n);\r\n const children = this.getChildren(n);\r\n if (Array.isArray(children) && children.length > 0)\r\n visit(children as T[]);\r\n }\r\n };\r\n visit(this.data || []);\r\n return selected;\r\n }\r\n\r\n /**\r\n * Autosize column to fit content\r\n */\r\n protected autosizeColumn(col: CatsTreeTableColumn, index: number): void {\r\n const min = col.minWidth ?? 50;\r\n const max = col.maxWidth ?? 500;\r\n const estimatedWidth = Math.min(Math.max(150, min), max);\r\n col.width = estimatedWidth;\r\n this.updatePinnedOffsets();\r\n }\r\n\r\n /**\r\n * Autosize all columns\r\n */\r\n protected autosizeAllColumns(): void {\r\n this.columns.forEach((col) => {\r\n const min = col.minWidth ?? 50;\r\n const max = col.maxWidth ?? 500;\r\n const estimatedWidth = Math.min(Math.max(150, min), max);\r\n col.width = estimatedWidth;\r\n });\r\n this.updatePinnedOffsets();\r\n }\r\n\r\n /**\r\n * Group by column\r\n */\r\n protected groupByColumn(col: CatsTreeTableColumn, index: number): void {\r\n // Emit event or handle grouping logic\r\n }\r\n\r\n /**\r\n * Show column chooser\r\n */\r\n protected showColumnChooser(colIdx: number): void {\r\n // Toggle settings to show column chooser\r\n this.onClickOutside();\r\n }\r\n\r\n /**\r\n * Reset columns to original state\r\n */\r\n protected resetColumns(): void {\r\n if (this.originalColumns.length > 0) {\r\n this.columns = structuredClone(this.originalColumns);\r\n this.rebuildRows();\r\n }\r\n }\r\n\r\n /**\r\n * Save column state\r\n */\r\n private saveColumnState(): void {\r\n if (this.originalColumns.length === 0) {\r\n this.originalColumns = JSON.parse(JSON.stringify(this.columns));\r\n }\r\n }\r\n\r\n /**\r\n * Returns filtered hierarchy based on column filters with AND/OR logic, including number filter support\r\n */\r\n getFilteredHierarchy(): T[] {\r\n const filterColumns = this.columns.filter(\r\n (col) =>\r\n col.filterable &&\r\n (col.filters?.some((f) => f.filterValue) ||\r\n (col.filterType === 'set' &&\r\n col.selectedValues &&\r\n col.selectedValues.size > 0)),\r\n );\r\n if (filterColumns.length === 0)\r\n return structuredClone(this.originalRowData);\r\n\r\n const filterFn = (node: T): boolean => {\r\n return filterColumns.every((col) => {\r\n let value = this.getValue(node, col.fieldName);\r\n if (col.filterType === 'set') {\r\n return col.selectedValues?.has(value);\r\n } else if (col.filterType === 'number') {\r\n const conds =\r\n col.filters?.filter(\r\n (f) =>\r\n f.filterValue !== '' &&\r\n f.filterValue !== null &&\r\n f.filterValue !== undefined,\r\n ) || [];\r\n if (conds.length === 0) return true;\r\n if (col.filterLogic === 'AND') {\r\n return conds.every((f) =>\r\n this.evaluateNumberFilterCondition(\r\n f.filterOperation,\r\n value,\r\n f.filterValue,\r\n ),\r\n );\r\n } else {\r\n return conds.some((f) =>\r\n this.evaluateNumberFilterCondition(\r\n f.filterOperation,\r\n value,\r\n f.filterValue,\r\n ),\r\n );\r\n }\r\n } else {\r\n const conds = col.filters?.filter((f) => f.filterValue) || [];\r\n if (conds.length === 0) return true;\r\n if (col.filterLogic === 'AND') {\r\n return conds.every((f) =>\r\n this.evaluateTextFilterCondition(\r\n f.filterOperation,\r\n String(value).toLowerCase(),\r\n String(f.filterValue).toLowerCase(),\r\n ),\r\n );\r\n } else {\r\n return conds.some((f) =>\r\n this.evaluateTextFilterCondition(\r\n f.filterOperation,\r\n String(value).toLowerCase(),\r\n String(f.filterValue).toLowerCase(),\r\n ),\r\n );\r\n }\r\n }\r\n });\r\n };\r\n\r\n const filterTree = (nodes: T[]): T[] => {\r\n const result: T[] = [];\r\n for (const node of nodes) {\r\n const children = this.getChildren(node);\r\n let filteredChildren: T[] = [];\r\n if (Array.isArray(children)) {\r\n filteredChildren = filterTree(children);\r\n }\r\n if (filterFn(node) || filteredChildren.length > 0) {\r\n const clone: any = { ...node };\r\n if (Array.isArray(children)) {\r\n clone[this.childrenField] = filteredChildren;\r\n }\r\n result.push(clone);\r\n }\r\n }\r\n return result;\r\n };\r\n return filterTree(this.originalRowData);\r\n }\r\n\r\n /**\r\n * Evaluate number filter condition\r\n */\r\n private evaluateNumberFilterCondition(\r\n type: string,\r\n fieldValue: any,\r\n value: any,\r\n ): boolean {\r\n const numField = Number(fieldValue);\r\n const numValue = Number(value);\r\n if (isNaN(numField) || isNaN(numValue)) return false;\r\n switch (type) {\r\n case '=':\r\n case 'equals':\r\n return numField === numValue;\r\n case '>':\r\n return numField > numValue;\r\n case '<':\r\n return numField < numValue;\r\n case '>=':\r\n return numField >= numValue;\r\n case '<=':\r\n return numField <= numValue;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n dateTimeSelected(date: any) {\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 * 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","<div class=\"tableArea\" #table [class.is-resizing]=\"isResizing\">\r\n <!-- Settings Panel for Column Selection -->\r\n @if (settingsRequired && settingsClicked) {\r\n <div\r\n class=\"setting_options\"\r\n appOutsideClick\r\n (clickOutside)=\"hideSettings()\"\r\n >\r\n <div class=\"column_header\">Select Headers</div>\r\n <div class=\"checkbox_container\">\r\n <input\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"activeAll\"\r\n (change)=\"activeAllSelection($event)\"\r\n />\r\n <span>Select All</span>\r\n </div>\r\n\r\n <div class=\"item_container\" id=\"table_scroll\">\r\n @for (col of columns; track col.fieldName) {\r\n <div class=\"column_item checkbox_container\">\r\n <input\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"col.active\"\r\n [disabled]=\"col.headerLocked\"\r\n (change)=\"changeActiveColSelection($event, col)\"\r\n />\r\n <span>{{ col.header || col.fieldName | titlecase }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Main Table Wrapper -->\r\n <div\r\n class=\"table_wrapper global\"\r\n id=\"table_scroll\"\r\n [class.no-horizontal-scroll]=\"!rows || rows.length === 0\"\r\n #parent\r\n >\r\n <div class=\"table-inner-wrapper\">\r\n <table cellspacing=\"0\" cellpadding=\"0\">\r\n <thead class=\"sticky-top\">\r\n <tr>\r\n <!-- Checkbox header column -->\r\n @if (checkBoxSelection && atLeastOneColumnChecked) {\r\n <th style=\"min-width: 50px; width: 50px; max-width: 50px\">\r\n <div class=\"th_wraper\">\r\n <div class=\"checkbox_container\">\r\n <input\r\n class=\"pointer custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"checkHeaderChecked()\"\r\n [indeterminate]=\"checkHeaderIndeterminate()\"\r\n (change)=\"onHeaderCheckboxChange($event)\"\r\n />\r\n </div>\r\n <div class=\"filter_three_dot_wrapper\">\r\n <span class=\"resize-handle default_cursor\"> | </span>\r\n </div>\r\n </div>\r\n </th>\r\n }\r\n\r\n <!-- Column Headers -->\r\n @for (col of columns; track col.fieldName; let colIdx = $index) {\r\n @if (col.active !== false) {\r\n <th\r\n [ngStyle]=\"getStyle(col)\"\r\n [attr.data-col-idx]=\"colIdx\"\r\n [ngClass]=\"{\r\n 'drag-over': dragOverIndex === colIdx,\r\n pinned_column: col.leftPinned || col.rightPinned,\r\n }\"\r\n (mouseenter)=\"showMoveIcon[colIdx] = true\"\r\n (mouseleave)=\"showMoveIcon[colIdx] = false\"\r\n >\r\n <div class=\"th_wraper\">\r\n <!-- Sortable column header -->\r\n <div\r\n class=\"text_wrapper\"\r\n [ngClass]=\"{ sortable: col.sortable }\"\r\n (click)=\"onSortingRowData(colIdx, col)\"\r\n >\r\n @if (showMoveIcon[colIdx] && col.sortable) {\r\n <img\r\n src=\"images/t-move.svg\"\r\n class=\"move-icon\"\r\n [draggable]=\"!isResizing\"\r\n (dragstart)=\"onDragStart($event, colIdx)\"\r\n (dragend)=\"onDragEnd()\"\r\n />\r\n }\r\n <span class=\"ellipsis headerName\">{{\r\n col.header || col.fieldName\r\n }}</span>\r\n\r\n <!-- Sorting indicator -->\r\n @if (\r\n sortingRequired &&\r\n sortingColumnIndex === colIdx &&\r\n col.sortable\r\n ) {\r\n <span class=\"sorting_icon\">\r\n @if (sortingType[colIdx] === \"asc\") {\r\n <img src=\"images/t-arrow-up.svg\" alt=\"Ascending\" />\r\n } @else if (sortingType[colIdx] === \"dsc\") {\r\n <img\r\n src=\"images/t-arrow-down.svg\"\r\n alt=\"Descending\"\r\n />\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- Filter and Menu -->\r\n <div class=\"filter_three_dot_wrapper\">\r\n <!-- Filter Icon -->\r\n @if (filterRequired && col.filterable) {\r\n <div\r\n #trigger\r\n class=\"filters\"\r\n (click)=\"toggleFilter(col, colIdx, $event)\"\r\n >\r\n @if (activeFilters.has(col.fieldName)) {\r\n <img\r\n src=\"images/t-filter-applied.svg\"\r\n alt=\"Filter active\"\r\n class=\"filter-icon\"\r\n [draggable]=\"false\"\r\n (dragstart)=\"\r\n $event.preventDefault();\r\n $event.stopPropagation()\r\n \"\r\n />\r\n } @else {\r\n <img\r\n src=\"images/t-filter.svg\"\r\n alt=\"Filter\"\r\n class=\"filter-icon\"\r\n [draggable]=\"false\"\r\n (dragstart)=\"\r\n $event.preventDefault();\r\n $event.stopPropagation()\r\n \"\r\n />\r\n }\r\n\r\n <!-- Filter Dropdown -->\r\n @if (activeFilterIndex === $index) {\r\n <div class=\"filt_wrap\">\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 <lib-common-input\r\n [options]=\"filterOptions\"\r\n [selectedValue]=\"\r\n col.filters![0].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters![0].filterOperation = $event;\r\n applyAllFilters()\r\n \"\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.filters![0].filterValue\"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n\r\n @if (col.filters![0].filterValue) {\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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]=\"\r\n col.filters![1].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters![1].filterOperation =\r\n $event;\r\n applyAllFilters()\r\n \"\r\n ></lib-common-input>\r\n <!-- <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.filters[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)]=\"\r\n col.filters![1].filterValue\r\n \"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n }\r\n }\r\n\r\n <!-- Number Filter -->\r\n @if (col.filterType === \"number\") {\r\n <lib-common-input\r\n [options]=\"numberFilterOptions\"\r\n [selectedValue]=\"\r\n col.filters![0].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters![0].filterOperation = $event;\r\n applyAllFilters()\r\n \"\r\n ></lib-common-input>\r\n\r\n <!-- <input\r\n type=\"number\"\r\n [(ngModel)]=\"col.filters[0].filterValue\"\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.filters![0].filterValue\"\r\n (input)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n\r\n @if (col.filters![0].filterValue) {\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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]=\"\r\n col.filters![1].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters![1].filterOperation =\r\n $event;\r\n applyAllFilters()\r\n \"\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)]=\"\r\n col.filters![1].filterValue\r\n \"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n <!-- <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.filters[1].filterValue\"\r\n placeholder=\"Filter…\"\r\n (keyup)=\"applyAllFilters()\"\r\n /> -->\r\n }\r\n }\r\n\r\n <!-- DATE FILTER -->\r\n @if (col.filterType === \"date\") {\r\n <lib-common-input\r\n [options]=\"numberFilterOptions\"\r\n [selectedValue]=\"\r\n col.filters![0].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters![0].filterOperation = $event;\r\n applyAllFilters()\r\n \"\r\n ></lib-common-input>\r\n\r\n <!-- <input\r\n type=\"date\"\r\n [(ngModel)]=\"col.filters[0].filterValue\"\r\n (change)=\"applyAllFilters()\"\r\n /> -->\r\n <lib-common-calendar\r\n [dateConfig]=\"dateConfig\"\r\n [(ngModel)]=\"col.filters![0].filterValue\"\r\n [preSelectedValue]=\"\r\n col.filters![0].filterValue\r\n \"\r\n (dateTimeSelected)=\"\r\n dateTimeSelected($event)\r\n \"\r\n ></lib-common-calendar>\r\n\r\n @if (col.filters![0].filterValue) {\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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]=\"\r\n col.filters![1].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters![1].filterOperation =\r\n $event;\r\n applyAllFilters()\r\n \"\r\n ></lib-common-input>\r\n\r\n <lib-common-calendar\r\n [dateConfig]=\"dateConfig\"\r\n [(ngModel)]=\"col.filters![1].filterValue\"\r\n [preSelectedValue]=\"\r\n col.filters![1].filterValue\r\n \"\r\n (dateTimeSelected)=\"\r\n dateTimeSelected($event)\r\n \"\r\n ></lib-common-calendar>\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 <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 class=\"custom_check_box\"\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=\"table_scroll\">\r\n @for (\r\n opt of col.filteredOptions;\r\n track $index\r\n ) {\r\n <label class=\"checkbox_container\">\r\n <input\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"\r\n col.selectedValues!.has(opt)\r\n \"\r\n (change)=\"\r\n toggleSetOption(col, opt, $event)\r\n \"\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 </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Three dots menu-->\r\n <div #triggerColMenu>\r\n @if (threeDotsMenuRequired) {\r\n <div\r\n class=\"three-dots\"\r\n (click)=\"openMenu($event, col, colIdx)\"\r\n >\r\n <img\r\n src=\"images/t-more-vertical.svg\"\r\n alt=\"Menu\"\r\n [draggable]=\"false\"\r\n (dragstart)=\"\r\n $event.preventDefault();\r\n $event.stopPropagation()\r\n \"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Column Resize Handle -->\r\n <span\r\n class=\"resize-handle\"\r\n (mousedown)=\"startResize($event, colIdx)\"\r\n >\r\n |\r\n </span>\r\n </div>\r\n </div>\r\n\r\n @if (menuVisible[colIdx]) {\r\n <div\r\n #colActionMenu\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=\"table_scroll\">\r\n <!-- Sort Ascending -->\r\n @if (\r\n sortingType[colIdx] === \"dsc\" || !sortingType[colIdx]\r\n ) {\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"onSort(col, 'asc', colIdx)\"\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 }\r\n\r\n <!-- Sort Descending -->\r\n @if (\r\n sortingType[colIdx] === \"asc\" || !sortingType[colIdx]\r\n ) {\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"onSort(col, 'dsc', colIdx)\"\r\n >\r\n <div class=\"left_item\">\r\n <img src=\"images/arrow-down.svg\" alt=\"\" />\r\n <span class=\"text\">Sort Descending</span>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Clear Sort -->\r\n @if (\r\n sortingType[colIdx] === \"asc\" ||\r\n sortingType[colIdx] === \"dsc\"\r\n ) {\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"onSort(col, '', colIdx)\"\r\n >\r\n <div class=\"left_item\">\r\n <img src=\"images/trash-2.svg\" alt=\"\" />\r\n <span class=\"text\">Clear Sort</span>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"divder\"></div>\r\n\r\n <!-- Pin Column -->\r\n <div\r\n class=\"right_click_item\"\r\n (mouseenter)=\"showPinActions($event)\"\r\n (mouseleave)=\"hidePinActions()\"\r\n >\r\n <div class=\"left_item\">\r\n <img src=\"images/pin.svg\" alt=\"\" />\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\" alt=\"\" />\r\n @if (showPin) {\r\n <div class=\"second_dropdown\" #pinMenu>\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"pinColumn(col, colIdx, 'none')\"\r\n >\r\n <div class=\"left_item\">\r\n @if (\r\n ((col.colId &&\r\n pinActionClicked[col.colId]) ??\r\n \"none\") === \"none\"\r\n ) {\r\n <img src=\"images/check.svg\" alt=\"\" />\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 class=\"right_click_item\"\r\n (click)=\"pinColumn(col, colIdx, 'left')\"\r\n >\r\n <div class=\"left_item\">\r\n @if (\r\n pinActionClicked[\r\n col.colId || col.fieldName\r\n ] === \"left\"\r\n ) {\r\n <img src=\"images/check.svg\" alt=\"\" />\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 class=\"right_click_item\"\r\n (click)=\"pinColumn(col, colIdx, 'right')\"\r\n >\r\n <div class=\"left_item\">\r\n @if (\r\n pinActionClicked[\r\n col.colId || col.fieldName\r\n ] === \"right\"\r\n ) {\r\n <img src=\"images/check.svg\" alt=\"\" />\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 <!-- Autosize This Column -->\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"autosizeColumn(col, colIdx)\"\r\n >\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\r\n <!-- Autosize All Columns -->\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"autosizeAllColumns()\"\r\n >\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\r\n <!-- <div class=\"divder\"></div> -->\r\n\r\n <!-- Group by Column -->\r\n <!-- <div class=\"right_click_item\" (click)=\"groupByColumn(col, colIdx)\">\r\n\t <div class=\"left_item\">\r\n\t <img src=\"\" alt=\"\" />\r\n\t <span class=\"text\">Group by {{ col.header || col.fieldName }}</span>\r\n\t </div>\r\n\t </div> -->\r\n\r\n <!-- Choose Columns -->\r\n <!-- <div class=\"right_click_item\" (click)=\"showColumnChooser(colIdx)\">\r\n\t <div class=\"left_item\">\r\n\t <img src=\"\" alt=\"\" />\r\n\t <span class=\"text\">Choose Columns</span>\r\n\t </div>\r\n\t </div> -->\r\n\r\n <!-- Reset Columns -->\r\n <!-- <div class=\"right_click_item\">\r\n\t <div class=\"left_item\">\r\n\t <img src=\"\" alt=\"\" />\r\n\t <span class=\"text\">Reset Columns</span>\r\n\t </div>\r\n\t </div> -->\r\n </div>\r\n </div>\r\n }\r\n </th>\r\n }\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n @for (row of rows; track row.trackKey) {\r\n @if (row.kind === \"node\") {\r\n <tr [class.disabled]=\"isDisabledRow(row)\">\r\n <!-- Checkbox column -->\r\n @if (checkBoxSelection && atLeastOneColumnChecked) {\r\n <td style=\"min-width: 50px; max-width: 50px\">\r\n @if (checkboxSelectionType === \"multiple\") {\r\n @if (showCheckboxFor(row)) {\r\n <span class=\"checkbox_container\">\r\n <input\r\n type=\"checkbox\"\r\n [disabled]=\"isDisabledRow(row)\"\r\n [indeterminate]=\"isNodeIndeterminate(row.node)\"\r\n [checked]=\"isChecked(row.node)\"\r\n (change)=\"\r\n onCheckboxChange(\r\n row.node,\r\n row.level,\r\n row.path,\r\n $any($event.target).checked\r\n )\r\n \"\r\n />\r\n <label [for]=\"'row_' + row.trackKey\"></label>\r\n </span>\r\n }\r\n } @else {\r\n <span class=\"radio_option\">\r\n <input\r\n type=\"radio\"\r\n [name]=\"'row_' + row.trackKey\"\r\n [checked]=\"isChecked(row.node)\"\r\n (change)=\"\r\n onCheckboxChange(\r\n row.node,\r\n row.level,\r\n row.path,\r\n $any($event.target).checked\r\n )\r\n \"\r\n />\r\n <label [for]=\"'row_' + row.trackKey\"></label>\r\n </span>\r\n }\r\n </td>\r\n }\r\n\r\n <!-- Data columns -->\r\n @for (\r\n col of columns;\r\n track col.fieldName;\r\n let colIndex = $index\r\n ) {\r\n @if (col.active !== false) {\r\n <td\r\n [ngStyle]=\"getStyle(col)\"\r\n [ngClass]=\"[\r\n col.leftPinned || col.rightPinned\r\n ? 'pinned_column'\r\n : '',\r\n ]\"\r\n class=\"table_cell\"\r\n >\r\n @if (col.fieldName === treeColumn.fieldName) {\r\n @if (!col?.cellRenderer) {\r\n <div\r\n class=\"tree_cell\"\r\n [style.padding-left.px]=\"row.level * indentPx\"\r\n >\r\n @if (showToggleFor(row)) {\r\n <button\r\n class=\"toggle_btn\"\r\n type=\"button\"\r\n [disabled]=\"isDisabledRow(row)\"\r\n (click)=\"toggle(row.node, row.level, row.path)\"\r\n >\r\n <img\r\n [src]=\"resolveIconSrc(toggleIconFor(row))\"\r\n alt=\"\"\r\n />\r\n </button>\r\n } @else {\r\n <span class=\"toggle_spacer\"></span>\r\n }\r\n\r\n <!-- @if (showCheckboxFor(row)) {\r\n <input\r\n type=\"checkbox\"\r\n [disabled]=\"isDisabledRow(row)\"\r\n [checked]=\"isChecked(row.node)\"\r\n (change)=\"\r\n onCheckboxChange(\r\n row.node,\r\n row.level,\r\n row.path,\r\n ($any($event.target).checked)\r\n )\r\n \"\r\n />\r\n } -->\r\n\r\n @if (showNodeIconFor(row)) {\r\n @if (nodeIconFor(row); as icon) {\r\n <img\r\n class=\"node_icon\"\r\n [src]=\"resolveIconSrc(icon)\"\r\n alt=\"\"\r\n />\r\n }\r\n }\r\n\r\n @if (showLinkFor(row) && linkUrlFor(row); as url) {\r\n <a\r\n class=\"node_link ellipsis\"\r\n [appTooltip]=\"labelFor(row) || 'N/A'\"\r\n tooltipPosition=\"adaptive\"\r\n [tooltipParentContainer]=\"parent\"\r\n (click)=\"\r\n onLinkClicked(\r\n $event,\r\n row.node,\r\n row.level,\r\n row.path,\r\n col\r\n )\r\n \"\r\n (dblclick)=\"\r\n onLinkDoubleClicked(\r\n $event,\r\n row.node,\r\n row.level,\r\n row.path,\r\n col\r\n )\r\n \"\r\n >\r\n {{ labelFor(row) || \"N/A\" }}\r\n </a>\r\n } @else {\r\n <span\r\n class=\"node_label\"\r\n [appTooltip]=\"labelFor(row) || 'N/A'\"\r\n tooltipPosition=\"adaptive\"\r\n [tooltipParentContainer]=\"parent\"\r\n >{{ labelFor(row) || \"N/A\" }}</span\r\n >\r\n }\r\n </div>\r\n } @else {\r\n <div\r\n [rowParam]=\"row.node\"\r\n [col]=\"col\"\r\n [api]=\"tableOptions\"\r\n [currentValue]=\"getValue(row.node, col.fieldName)\"\r\n appRendererParser\r\n [style.padding-left.px]=\"row.level * indentPx\"\r\n ></div>\r\n }\r\n } @else {\r\n <div class=\"col_wrapper\">\r\n @if (!col?.cellRenderer) {\r\n <span\r\n class=\"ellipsis\"\r\n [appTooltip]=\"\r\n getValue(row.node, col.fieldName) || 'N/A'\r\n \"\r\n tooltipPosition=\"adaptive\"\r\n [tooltipParentContainer]=\"parent\"\r\n >\r\n {{\r\n getValue(row.node, col.fieldName) || \"N/A\"\r\n }}</span\r\n >\r\n } @else {\r\n <div\r\n [rowParam]=\"row.node\"\r\n [col]=\"col\"\r\n [api]=\"tableOptions\"\r\n [currentValue]=\"getValue(row.node, col.fieldName)\"\r\n appRendererParser\r\n ></div>\r\n }\r\n </div>\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n } @else if (row.kind === \"loading\") {\r\n <tr class=\"meta_row\">\r\n <td\r\n [attr.colspan]=\"columns.length + (checkBoxSelection ? 1 : 0)\"\r\n >\r\n <div\r\n class=\"meta_cell\"\r\n [style.padding-left.px]=\"row.level * indentPx\"\r\n >\r\n {{ loadingText }}\r\n </div>\r\n </td>\r\n </tr>\r\n } @else if (row.kind === \"no-data\") {\r\n <tr class=\"meta_row\">\r\n <td\r\n [attr.colspan]=\"columns.length + (checkBoxSelection ? 1 : 0)\"\r\n >\r\n <div\r\n class=\"meta_cell\"\r\n [style.padding-left.px]=\"row.level * indentPx\"\r\n >\r\n {{ noDataText }}\r\n </div>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n\r\n @if (!rows || rows.length === 0) {\r\n <div class=\"empty_overlay\">\r\n <div class=\"empty_content\">\r\n <span>{{ noDataText }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Pagination -->\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\r\n class=\"select_option\"\r\n appOutsideClick\r\n (clickOutside)=\"onClickOutside()\"\r\n >\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 |\r\n {{ totalRecords > 0 ? convertToNumber(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 <button\r\n class=\"outlined_btn first_btn\"\r\n type=\"button\"\r\n (click)=\"onBtFirstClick()\"\r\n [ngClass]=\"pageDetails.currentPage > 1 ? '' : 'disable_btn'\"\r\n >\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\r\n ? ''\r\n : '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 <button\r\n class=\"outlined_btn last_btn\"\r\n type=\"button\"\r\n (click)=\"onBtLastClick()\"\r\n [ngClass]=\"\r\n pageDetails.currentPage < pageDetails.totalPages\r\n ? ''\r\n : 'disable_btn'\r\n \"\r\n >\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 * 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\nexport * from './lib/renderers/common-renderer/common-renderer.component';\r\nexport * from './lib/common-components/common-tree-table/common-tree-table.component';\r\nexport * from './lib/directives/tooltip.directive';\r\nexport * from './lib/common-components/tooltip/tooltip.component';\r\nexport * from './lib/directives/adaptive-position.directive';","/**\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/common-components/tooltip/tooltip.component.ts","../../../projects/cats-data-grid/src/lib/common-components/tooltip/tooltip.component.html","../../../projects/cats-data-grid/src/lib/directives/tooltip.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/lib/renderers/common-renderer/common-renderer.component.ts","../../../projects/cats-data-grid/src/lib/renderers/common-renderer/common-renderer.component.html","../../../projects/cats-data-grid/src/lib/common-components/common-tree-table/common-tree-table.component.ts","../../../projects/cats-data-grid/src/lib/common-components/common-tree-table/common-tree-table.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, context: any): string {\r\n if (context?.addClasses) {\r\n return context.addClasses(value)\r\n }\r\n else if(context?.cellValueClass) {\r\n return context.cellValueClass(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 this.ref.location.nativeElement.style.width = '100%';\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=\"table_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 ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\nimport { AdaptivePositionDirective } from '../../directives/adaptive-position.directive';\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, AdaptivePositionDirective],\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\r\n implements OnInit, OnChanges, ControlValueAccessor\r\n{\r\n @Output() dateTimeSelected = new EventEmitter<any>();\r\n @Output() clearDateEvent = 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['preSelectedValue']) {\r\n this.selectedDateTime = _changes['preSelectedValue']?.currentValue;\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 selectCurrentMonthYear() {\r\n this.currentDate = new Date();\r\n this.currentMonth = this.currentDate.getMonth();\r\n this.currentYear = this.currentDate.getFullYear();\r\n this.selectedMonth = this.currentMonth;\r\n this.selectedYear = this.currentYear;\r\n this.selectedDate = null;\r\n }\r\n /**\r\n * @description method to toggleCalendar\r\n * @author Shiva Kant\r\n */\r\n toggleCalendar(): void {\r\n if (!this.selectedDateTime) {\r\n this.selectCurrentMonthYear();\r\n }\r\n this.isOpen = !this.isOpen;\r\n if (this.isOpen) {\r\n // If a date is already selected, open that month/year\r\n if (this.selectedDate != null) {\r\n this.currentDate = new Date(\r\n this.selectedYear,\r\n this.selectedMonth,\r\n this.selectedDate,\r\n );\r\n }\r\n this.updateCurrentYearMonth();\r\n this.generateCalendar();\r\n setTimeout(() => {\r\n const ele = document.getElementsByClassName('calendar-footer');\r\n ele[0]?.scrollIntoView();\r\n });\r\n }\r\n this.calendarView = 'defaultView';\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.selectedYear,\r\n this.selectedMonth,\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.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 hideCalender() {\r\n this.closeCalendar();\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()\" #trigger>\r\n @if (dateConfig.selectionMode == \"single\") {\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\r\n class=\"calendar-popup\"\r\n adaptivePosition\r\n [trigger]=\"trigger\"\r\n [matchWidth]=\"false\"\r\n appOutsideClick\r\n (clickOutside)=\"hideCalender()\"\r\n >\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\r\n class=\"navigation-button pointer\"\r\n (click)=\"previousYearRange()\"\r\n >\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 (\r\n day of [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"];\r\n track $index\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 { Component, Input, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport type { TooltipPosition } from '../../directives/tooltip.directive';\r\n\r\n@Component({\r\n selector: 'app-tooltip',\r\n standalone: true,\r\n imports: [CommonModule],\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: './tooltip.component.html',\r\n styleUrls: ['./tooltip.component.scss'],\r\n})\r\nexport class TooltipComponent {\r\n @Input() content: string = '';\r\n @Input() position: TooltipPosition = 'top';\r\n @Input() bgColor: string = '#333333';\r\n @Input() textColor: string = '#ffffff';\r\n @Input() padding: string = '8px 12px';\r\n @Input() fontSize: string = '12px';\r\n @Input() borderRadius: string = '4px';\r\n @Input() maxWidth: string = '300px';\r\n\r\n get styleObj() {\r\n return {\r\n 'background-color': this.bgColor,\r\n color: this.textColor,\r\n padding: this.padding,\r\n 'font-size': this.fontSize,\r\n 'border-radius': this.borderRadius,\r\n 'max-width': this.maxWidth,\r\n };\r\n }\r\n}\r\n","<div\r\n class=\"app-tooltip-wrapper\"\r\n [ngClass]=\"'tooltip-' + position\"\r\n [ngStyle]=\"styleObj\"\r\n>\r\n {{ content }}\r\n <div class=\"tooltip-arrow\"></div>\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n OnDestroy,\r\n Renderer2,\r\n ApplicationRef,\r\n Injector,\r\n NgZone,\r\n} from '@angular/core';\r\nimport { TooltipComponent } from '../common-components/tooltip/tooltip.component';\r\nimport { createComponent } from '@angular/core';\r\n\r\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right' | 'adaptive';\r\n\r\n@Directive({\r\n selector: '[appTooltip]',\r\n standalone: true,\r\n})\r\nexport class TooltipDirective implements OnInit, OnDestroy {\r\n @Input('appTooltip') content: string = '';\r\n @Input() tooltipPosition: TooltipPosition = 'adaptive';\r\n @Input() tooltipDelay: number = 300; // milliseconds\r\n @Input() tooltipBgColor: string = '#333333';\r\n @Input() tooltipTextColor: string = '#ffffff';\r\n @Input() tooltipPadding: string = '8px 12px';\r\n @Input() tooltipFontSize: string = '12px';\r\n @Input() tooltipBorderRadius: string = '4px';\r\n @Input() tooltipMaxWidth: string = '300px';\r\n @Input() followCursor: boolean = true;\r\n @Input() tooltipParentContainer: HTMLElement | null = null;\r\n\r\n private tooltipElement: HTMLElement | null = null;\r\n private showTimeout: any;\r\n private elementRect: DOMRect | null = null;\r\n private currentPosition: TooltipPosition = 'top';\r\n private componentRef: any = null;\r\n private cursorX: number = 0;\r\n private cursorY: number = 0;\r\n private isTooltipShown: boolean = false;\r\n\r\n constructor(\r\n private elementRef: ElementRef<HTMLElement>,\r\n private renderer: Renderer2,\r\n private appRef: ApplicationRef,\r\n private injector: Injector,\r\n private ngZone: NgZone,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.renderer.addClass(this.elementRef.nativeElement, 'tooltip-trigger');\r\n }\r\n\r\n @HostListener('mouseenter', ['$event'])\r\n onMouseEnter(event: MouseEvent): void {\r\n if (!this.content) return;\r\n\r\n this.cursorX = event.clientX;\r\n this.cursorY = event.clientY;\r\n\r\n this.showTimeout = setTimeout(() => {\r\n this.show();\r\n }, this.tooltipDelay);\r\n }\r\n\r\n @HostListener('mouseleave')\r\n onMouseLeave(): void {\r\n clearTimeout(this.showTimeout);\r\n this.hide();\r\n }\r\n\r\n @HostListener('mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent): void {\r\n if (!this.isTooltipShown || !this.followCursor) return;\r\n\r\n this.cursorX = event.clientX;\r\n this.cursorY = event.clientY;\r\n\r\n this.positionTooltip();\r\n }\r\n\r\n private show(): void {\r\n if (this.tooltipElement) return;\r\n\r\n this.elementRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n\r\n // Use NgZone to avoid change detection issues\r\n this.ngZone.run(() => {\r\n try {\r\n // Create tooltip component with proper injector\r\n const componentRef = createComponent(TooltipComponent, {\r\n environmentInjector: this.appRef.injector,\r\n });\r\n\r\n // Configure component instance\r\n componentRef.instance.content = this.content;\r\n componentRef.instance.bgColor = this.tooltipBgColor;\r\n componentRef.instance.textColor = this.tooltipTextColor;\r\n componentRef.instance.padding = this.tooltipPadding;\r\n componentRef.instance.fontSize = this.tooltipFontSize;\r\n componentRef.instance.borderRadius = this.tooltipBorderRadius;\r\n componentRef.instance.maxWidth = this.tooltipMaxWidth;\r\n\r\n // Calculate adaptive position before rendering\r\n this.currentPosition = this.calculateAdaptivePosition();\r\n componentRef.instance.position = this.currentPosition;\r\n\r\n // Mark for check\r\n componentRef.changeDetectorRef.detectChanges();\r\n\r\n // Get the DOM element\r\n this.tooltipElement = componentRef.location.nativeElement.querySelector('.app-tooltip-wrapper') as HTMLElement;\r\n\r\n // If direct query didn't work, try the root element\r\n if (!this.tooltipElement) {\r\n this.tooltipElement = (componentRef.location.nativeElement as HTMLElement).children[0] as HTMLElement;\r\n }\r\n\r\n // If still not found, use the whole element\r\n if (!this.tooltipElement) {\r\n this.tooltipElement = componentRef.location.nativeElement as HTMLElement;\r\n }\r\n\r\n // Append to body to avoid layout issues\r\n this.renderer.appendChild(document.body, componentRef.location.nativeElement);\r\n\r\n // Position the tooltip\r\n this.isTooltipShown = true;\r\n this.positionTooltip();\r\n\r\n // Store reference for cleanup\r\n this.componentRef = componentRef;\r\n } catch (error) {\r\n console.warn('Tooltip directive: Error creating tooltip component', error);\r\n // Fallback silent fail - tooltip just won't show but app continues\r\n }\r\n });\r\n }\r\n\r\n private calculateAdaptivePosition(): TooltipPosition {\r\n if (this.tooltipPosition !== 'adaptive') {\r\n return this.tooltipPosition;\r\n }\r\n\r\n if (!this.elementRect) return 'top';\r\n\r\n // Find the parent container with overflow or positioning context\r\n const parentContainer = this.findParentContainer();\r\n const parentRect = parentContainer.getBoundingClientRect();\r\n\r\n const threshold = 120; // minimum space needed\r\n const gap = 10;\r\n\r\n // Calculate available space within parent container\r\n const spaceAbove = this.elementRect.top - parentRect.top;\r\n const spaceBelow = parentRect.bottom - this.elementRect.bottom;\r\n const spaceLeft = this.elementRect.left - parentRect.left;\r\n const spaceRight = parentRect.right - this.elementRect.right;\r\n\r\n // Prefer vertical positions if there's adequate space\r\n if (spaceBelow >= threshold) return 'bottom';\r\n if (spaceAbove >= threshold) return 'top';\r\n\r\n // Fall back to horizontal positions\r\n if (spaceRight >= threshold) return 'right';\r\n if (spaceLeft >= threshold) return 'left';\r\n\r\n // If no position has enough space, use the direction with most available space\r\n const spaces: Record<Exclude<TooltipPosition, 'adaptive'>, number> = {\r\n top: spaceAbove,\r\n bottom: spaceBelow,\r\n left: spaceLeft,\r\n right: spaceRight,\r\n };\r\n\r\n const bestPosition = (\r\n Object.keys(spaces) as Array<Exclude<TooltipPosition, 'adaptive'>>\r\n ).reduce((prev, curr) => (spaces[curr] > spaces[prev] ? curr : prev));\r\n\r\n return bestPosition;\r\n }\r\n\r\n private findParentContainer(): HTMLElement {\r\n // If a parent container is explicitly provided, use it\r\n if (this.tooltipParentContainer) {\r\n return this.tooltipParentContainer;\r\n }\r\n\r\n let element = this.elementRef.nativeElement.parentElement;\r\n\r\n // Traverse up the DOM to find a scrollable or positioned container\r\n while (element) {\r\n const style = window.getComputedStyle(element);\r\n const isScrollable =\r\n element.scrollHeight > element.clientHeight ||\r\n element.scrollWidth > element.clientWidth;\r\n const isPositioned =\r\n style.position === 'absolute' ||\r\n style.position === 'relative' ||\r\n style.position === 'fixed';\r\n\r\n if (isScrollable || isPositioned) {\r\n return element;\r\n }\r\n\r\n element = element.parentElement;\r\n }\r\n\r\n // If no container found, use the document body\r\n return document.body;\r\n }\r\n\r\n private positionTooltip(): void {\r\n if (!this.tooltipElement) return;\r\n\r\n // Use requestAnimationFrame to ensure DOM is ready\r\n requestAnimationFrame(() => {\r\n if (!this.tooltipElement) return;\r\n\r\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\r\n\r\n // If tooltip isn't rendered yet, retry\r\n if (tooltipRect.width === 0 || tooltipRect.height === 0) {\r\n requestAnimationFrame(() => this.positionTooltip());\r\n return;\r\n }\r\n\r\n const gap = 10;\r\n const offset = 15; // Offset from cursor\r\n let top = 0;\r\n let left = 0;\r\n let finalPosition = this.currentPosition;\r\n\r\n if (this.followCursor) {\r\n // Position tooltip relative to cursor\r\n const preferredPosition = this.currentPosition;\r\n\r\n switch (preferredPosition) {\r\n case 'top':\r\n top = this.cursorY - tooltipRect.height - gap;\r\n left = this.cursorX - tooltipRect.width / 2;\r\n break;\r\n case 'bottom':\r\n top = this.cursorY + offset;\r\n left = this.cursorX - tooltipRect.width / 2;\r\n break;\r\n case 'left':\r\n top = this.cursorY - tooltipRect.height / 2;\r\n left = this.cursorX - tooltipRect.width - gap;\r\n break;\r\n case 'right':\r\n top = this.cursorY - tooltipRect.height / 2;\r\n left = this.cursorX + offset;\r\n break;\r\n }\r\n } else if (this.elementRect) {\r\n // Position tooltip relative to element\r\n switch (this.currentPosition) {\r\n case 'top':\r\n top = this.elementRect.top - tooltipRect.height - gap;\r\n left = this.elementRect.left + this.elementRect.width / 2 - tooltipRect.width / 2;\r\n break;\r\n case 'bottom':\r\n top = this.elementRect.bottom + gap;\r\n left = this.elementRect.left + this.elementRect.width / 2 - tooltipRect.width / 2;\r\n break;\r\n case 'left':\r\n top = this.elementRect.top + this.elementRect.height / 2 - tooltipRect.height / 2;\r\n left = this.elementRect.left - tooltipRect.width - gap;\r\n break;\r\n case 'right':\r\n top = this.elementRect.top + this.elementRect.height / 2 - tooltipRect.height / 2;\r\n left = this.elementRect.right + gap;\r\n break;\r\n }\r\n }\r\n\r\n // Adjust for parent container and viewport boundaries\r\n const parentContainer = this.findParentContainer();\r\n const parentRect = parentContainer.getBoundingClientRect();\r\n const windowHeight = window.innerHeight;\r\n const windowWidth = window.innerWidth;\r\n const padding = 5;\r\n let arrowPos = 'center';\r\n\r\n // Use parent container bounds if available, otherwise use window bounds\r\n const containerTop = Math.max(parentRect.top, 0);\r\n const containerBottom = Math.min(parentRect.bottom, windowHeight);\r\n const containerLeft = Math.max(parentRect.left, 0);\r\n const containerRight = Math.min(parentRect.right, windowWidth);\r\n\r\n // Check vertical boundaries within container and adjust position if needed\r\n if (top < containerTop + padding) {\r\n top = containerTop + padding;\r\n if (this.currentPosition === 'top') {\r\n finalPosition = 'bottom';\r\n if (this.followCursor) {\r\n top = this.cursorY + offset;\r\n } else if (this.elementRect) {\r\n top = this.elementRect.bottom + gap;\r\n }\r\n }\r\n arrowPos = 'top-adjust';\r\n } else if (top + tooltipRect.height > containerBottom - padding) {\r\n top = containerBottom - tooltipRect.height - padding;\r\n if (this.currentPosition === 'bottom') {\r\n finalPosition = 'top';\r\n if (this.followCursor) {\r\n top = this.cursorY - tooltipRect.height - gap;\r\n } else if (this.elementRect) {\r\n top = this.elementRect.top - tooltipRect.height - gap;\r\n }\r\n }\r\n arrowPos = 'bottom-adjust';\r\n }\r\n\r\n // Check horizontal boundaries within container and adjust position if needed\r\n if (left < containerLeft + padding) {\r\n left = containerLeft + padding;\r\n if (this.currentPosition === 'left') {\r\n finalPosition = 'right';\r\n if (this.followCursor) {\r\n left = this.cursorX + offset;\r\n } else if (this.elementRect) {\r\n left = this.elementRect.right + gap;\r\n }\r\n }\r\n arrowPos = 'left-adjust';\r\n } else if (left + tooltipRect.width > containerRight - padding) {\r\n left = containerRight - tooltipRect.width - padding;\r\n if (this.currentPosition === 'right') {\r\n finalPosition = 'left';\r\n if (this.followCursor) {\r\n left = this.cursorX - tooltipRect.width - gap;\r\n } else if (this.elementRect) {\r\n left = this.elementRect.left - tooltipRect.width - gap;\r\n }\r\n }\r\n arrowPos = 'right-adjust';\r\n }\r\n\r\n // Update position class if it changed\r\n if (finalPosition !== this.currentPosition) {\r\n this.currentPosition = finalPosition;\r\n this.tooltipElement!.className = `app-tooltip-wrapper tooltip-${finalPosition}`;\r\n }\r\n\r\n // Store arrow adjustment info for CSS styling\r\n this.renderer.setAttribute(this.tooltipElement, 'data-arrow-pos', arrowPos);\r\n this.renderer.setStyle(this.tooltipElement, 'position', 'fixed');\r\n this.renderer.setStyle(this.tooltipElement, 'top', `${Math.round(top)}px`);\r\n this.renderer.setStyle(this.tooltipElement, 'left', `${Math.round(left)}px`);\r\n });\r\n }\r\n\r\n private hide(): void {\r\n this.isTooltipShown = false;\r\n if (this.tooltipElement && this.tooltipElement.parentNode) {\r\n this.renderer.removeChild(this.tooltipElement.parentNode, this.tooltipElement);\r\n this.tooltipElement = null;\r\n }\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n this.appRef.detachView(this.componentRef.hostView);\r\n this.componentRef = null;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n clearTimeout(this.showTimeout);\r\n this.hide();\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 ElementRef,\r\n EventEmitter,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } 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\nimport { TooltipDirective } from './directives/tooltip.directive';\r\n\r\nexport class ColDefs {\r\n fieldName!: string;\r\n headerName!: string;\r\n width!: number;\r\n minWidth!: number;\r\n sortable: boolean = true;\r\n filterable: boolean = true;\r\n cellRenderer: any;\r\n}\r\n\r\nexport interface ColumnFilter {\r\n fieldName: string;\r\n filterLogic: string;\r\n filters: FilterCondition[];\r\n}\r\nexport interface FilterCondition {\r\n filterOperation: string;\r\n filterValue: any;\r\n}\r\n@Component({\r\n selector: 'cats-data-grid',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CommonCalendarComponent,\r\n OutsideClickDirective,\r\n AdaptivePositionDirective,\r\n RendererParserDirective,\r\n AddClassPipe,\r\n CommonInputComponent,\r\n TooltipDirective,\r\n ],\r\n templateUrl: './cats-data-grid.component.html',\r\n styleUrls: ['./cats-data-grid.component.scss'],\r\n})\r\nexport class CatsDataGridComponent implements OnChanges, OnInit {\r\n @ViewChild('pinMenu') pinMenu!: ElementRef;\r\n @ViewChild('colActionMenu') colActionMenu!: ElementRef;\r\n @ViewChild('table') table!: ElementRef;\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({ required: true }) rowData: any[] = [];\r\n @Input({ required: true }) 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 @Input() settingsRequired: boolean = true;\r\n @Input() settingsClicked: boolean = false;\r\n @Input() resetPage = true;\r\n @Input() rowId: any = null;\r\n @Input() bigRows: boolean = false;\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 @Output() onHideSettings = new EventEmitter();\r\n @Output() onCellEdit = new EventEmitter();\r\n @Output() onColCongifgChange = new EventEmitter();\r\n\r\n activeFilterIndex: number | null = null;\r\n originalRowData: any[] = [];\r\n activeAll = true;\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 @Input() groupByField: 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 private removeMouseMove!: () => void;\r\n private removeMouseUp!: () => void;\r\n private rafId: number | null = null;\r\n @Input() appliedFilters: ColumnFilter[] = [];\r\n @Input() rowGripFieldName!: string;\r\n @Input() pageNumber!: number;\r\n @Input() pageSize!: number;\r\n @Output() appliedFiltersEvent = new EventEmitter<ColumnFilter[]>();\r\n @Output() activeGroupsEvent = new EventEmitter<any[]>();\r\n @Input() dynamicGroupingFiltering: boolean = false;\r\n @Input() isRowsEditable: boolean = false;\r\n @Input() showSkeleton: boolean = false;\r\n atLeastOneColumnChecked: boolean = true;\r\n draggedRowData: any = {};\r\n firstCol: any;\r\n isRowSelected: boolean = false;\r\n @Output() onRowClicked = new EventEmitter<any>();\r\n @Output() onCellClicked = new EventEmitter<any>();\r\n\r\n isCellDblClicked: any = {};\r\n cellClickedCtrl = new FormControl('');\r\n previousId: string = '';\r\n editingRow: any = null;\r\n editingField: string = '';\r\n clickTimer: any = null;\r\n clickDelay = 200;\r\n cellClickedColumn: any;\r\n enterPressed: boolean = false;\r\n leftPinned: any = [];\r\n rightPinned: any = [];\r\n centerArea: any = [];\r\n groupingDisabled: boolean = false;\r\n draggableColumn: any;\r\n @Input() skeletonRowsLength: number = 8;\r\n @Input() skeletonColsLength: number = 8;\r\n skeletonRows: any = [];\r\n skeletonCols: any = [];\r\n constructor(\r\n private renderer: Renderer2,\r\n private zone: NgZone,\r\n private cd: ChangeDetectorRef,\r\n ) {}\r\n\r\n ngOnInit(): void {}\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['skeletonColsLength']?.currentValue) {\r\n this.skeletonColsLength = changes['skeletonColsLength']?.currentValue;\r\n }\r\n\r\n if (changes['pageNumber']?.currentValue) {\r\n this.pageDetails.currentPage = changes['pageNumber']?.currentValue;\r\n this.recordsToShow.min =\r\n (this.pageDetails.currentPage - 1) * this.pageDetails.pageSize;\r\n this.recordsToShow.max =\r\n this.pageDetails.currentPage * this.pageDetails.pageSize;\r\n this.clearAllFilter();\r\n }\r\n if (changes['pageSize']?.currentValue) {\r\n this.pageDetails.pageSize = changes['pageSize']?.currentValue;\r\n this.recordsToShow.min =\r\n (this.pageDetails.currentPage - 1) * this.pageDetails.pageSize;\r\n this.recordsToShow.max =\r\n this.pageDetails.currentPage * this.pageDetails.pageSize;\r\n }\r\n\r\n if (changes['colDefs']?.currentValue) {\r\n // this.resetPagination();\r\n const colDefs = changes['colDefs']?.currentValue;\r\n if (colDefs.length > 0) {\r\n this.skeletonColsLength = changes['colDefs']?.currentValue.length;\r\n }\r\n this.skeletonCols = Array.from(\r\n { length: this.skeletonColsLength },\r\n (_, i) => i,\r\n );\r\n this.skeletonRows = Array.from(\r\n { length: this.skeletonRowsLength },\r\n (_, i) => i,\r\n );\r\n\r\n this.colDefs = this.getUpdatedColDefs(changes['colDefs']?.currentValue);\r\n setTimeout(() => {\r\n this.applyAllFilters();\r\n });\r\n this.originalColDefs = [...this.colDefs];\r\n this.centerArea = [...this.colDefs];\r\n [...this.colDefs].forEach((col: any) => {\r\n if (col.pin) {\r\n const index = this.colDefs.findIndex((c) => c.colId === col.colId);\r\n this.pinColumn(this.colDefs[index], index, col.pin);\r\n }\r\n });\r\n }\r\n\r\n if (changes['totalRecords']?.currentValue && this.resetPage) {\r\n this.resetPagination();\r\n } else {\r\n this.setPageCount();\r\n }\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 if (row[this.rowId]) {\r\n row.rowId = row[this.rowId];\r\n } else {\r\n row.rowId = `${Date.now()}_${i}`;\r\n }\r\n if (row?.isSelected) this.selectedRow.push(row);\r\n return row;\r\n },\r\n );\r\n\r\n if (this.dynamicGroupingFiltering && this.groupBy.length > 0) {\r\n this.groupedResult = structuredClone(this.rowData);\r\n }\r\n if (!this.activeFilters.size) {\r\n this.originalRowData = structuredClone(this.rowData);\r\n }\r\n\r\n this.getGroupedData();\r\n }\r\n\r\n if (changes['groupByField']?.currentValue) {\r\n this.activeGroups = [];\r\n this.groupBy = [];\r\n const groupByField = changes['groupByField'].currentValue;\r\n const col = this.getColumnDetail(this.colDefs, groupByField);\r\n this.activeGroups.push(...col);\r\n this.groupBy.push(groupByField);\r\n this.getGroupedData();\r\n }\r\n }\r\n\r\n getColumnDetail(colDefs: any, groupByField: any) {\r\n return colDefs.filter((col: any) => col.fieldName === groupByField);\r\n }\r\n\r\n activeAllSelection(event: Event) {\r\n // let checked = (event.target as HTMLInputElement).checked;\r\n // if (checked) {\r\n // this.colDefs = this.originalColDefs.map((dt) => {\r\n // if (!dt.active && !dt.headerLocked) {\r\n // dt.active = true;\r\n // }\r\n // this.atLeastOneColumnChecked = true;\r\n // return dt;\r\n // });\r\n // } else {\r\n // this.colDefs = this.originalColDefs.map((dt) => {\r\n // if (dt.active && !dt.headerLocked) {\r\n // dt.active = false;\r\n // }\r\n // this.atLeastOneColumnChecked = false;\r\n // return dt;\r\n // });\r\n // }\r\n\r\n const checked = (event.target as HTMLInputElement).checked;\r\n this.colDefs = this.originalColDefs.map((col) => {\r\n if (col.headerLocked) {\r\n col.active = true;\r\n } else {\r\n col.active = checked;\r\n }\r\n return col;\r\n });\r\n this.activeAll = this.colDefs.every((dt) => dt.active);\r\n this.getActiveCols();\r\n this.atLeastOneColumnChecked = this.colDefs.some((dt) => dt.active);\r\n }\r\n\r\n changeActiveColSelection(event: Event, col: any) {\r\n col.active = !col.active;\r\n this.atLeastOneColumnChecked = this.originalColDefs.some(\r\n (dt: any) => dt.active,\r\n );\r\n this.getActiveCols();\r\n\r\n // Update activeAll state\r\n this.activeAll = this.originalColDefs.every((dt: any) => dt.active);\r\n }\r\n\r\n getActiveCols() {\r\n const activeCols = this.colDefs\r\n .filter((col: any) => col.active)\r\n .map((c: any) => {\r\n if (c.fieldName.includes('.')) {\r\n c.fieldName = c.fieldName.split('.')[0];\r\n }\r\n return c.fieldName;\r\n });\r\n this.onColCongifgChange.emit(activeCols);\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 if (!col.filterLogic) {\r\n col.filterLogic = 'OR';\r\n }\r\n\r\n let updatedCol = {\r\n ...col,\r\n active: col.active ?? true,\r\n locked: col.locked ?? false,\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 filters: [\r\n {\r\n filterOperation: 'contains',\r\n filterValue: '',\r\n },\r\n {\r\n filterOperation: '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 filterValue: '',\r\n filters: [\r\n {\r\n filterOperation: '=',\r\n filterValue: '',\r\n },\r\n {\r\n filterOperation: '=',\r\n filterValue: '',\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 let fieldName = col.fieldName;\r\n\r\n if (fieldName.includes('.')) {\r\n fieldName = fieldName.split('.')[0];\r\n }\r\n\r\n return this.normalizeSetFilterType(\r\n r[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 if (this.appliedFilters.length > 0) {\r\n const appliedFilter = this.appliedFilters.find(\r\n (f) => f.fieldName === col.fieldName,\r\n );\r\n if (appliedFilter) {\r\n switch (col.filterType) {\r\n case 'text':\r\n case 'number':\r\n case 'date':\r\n updatedCol = {\r\n ...updatedCol,\r\n filters: appliedFilter.filters,\r\n filterLogic: appliedFilter.filterLogic,\r\n };\r\n\r\n break;\r\n case 'set':\r\n const options = [\r\n ...new Set(\r\n this.rowData.flatMap((r) => {\r\n let fieldName = col.fieldName;\r\n\r\n if (fieldName.includes('.')) {\r\n fieldName = fieldName.split('.')[0];\r\n }\r\n return this.normalizeSetFilterType(\r\n r[fieldName],\r\n col?.cellRendererParams?.tagKey,\r\n )?.filter(Boolean);\r\n }),\r\n ),\r\n ];\r\n const selectedValues = new Set(\r\n appliedFilter.filters.map((f) => f.filterValue),\r\n );\r\n updatedCol = {\r\n ...updatedCol,\r\n options,\r\n filteredOptions: options,\r\n selectedValues,\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n return updatedCol;\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 filterOperation 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 let field = col.fieldName;\r\n\r\n // if (field.includes('.')) {\r\n // const a = field.split('.');\r\n // field = a[0];\r\n // }\r\n if (col?.filterable) {\r\n if (col.filterType === 'text') {\r\n // *********** TEXT FILTER ***********\r\n const [c1, c2] = col.filters;\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 =\r\n this.evaluateFieldValue(r, field)?.toLowerCase() || '';\r\n const cond1 = textVal1\r\n ? this.evaluateTextFilterCondition(\r\n c1.filterOperation,\r\n fieldVal,\r\n textVal1,\r\n )\r\n : false;\r\n const cond2 = textVal2\r\n ? this.evaluateTextFilterCondition(\r\n c2.filterOperation,\r\n fieldVal,\r\n textVal2,\r\n )\r\n : false;\r\n\r\n return col.filterLogic === '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.filters;\r\n const numValue1 = Number(c1.filterValue);\r\n const numValue2 = Number(c2.filterValue);\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.filterOperation,\r\n fieldVal,\r\n numValue1,\r\n )\r\n : false;\r\n const cond2 = numValue2\r\n ? this.evaluateNumDateFilterCondition(\r\n c2.filterOperation,\r\n fieldVal,\r\n numValue2,\r\n )\r\n : false;\r\n\r\n return col.filterLogic === '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.filters;\r\n const selected1 = this.normalizeDate(c1.filterValue);\r\n const selected2 = this.normalizeDate(c2.filterValue);\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.filterOperation,\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.filterOperation,\r\n fieldVal ?? r[field],\r\n selected2,\r\n )\r\n : false;\r\n\r\n return col.filterLogic === '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 if (this.activeFilters.has(col.fieldName)) {\r\n let filterObj: ColumnFilter = {\r\n fieldName: col.fieldName,\r\n filterLogic: col.filterLogic,\r\n filters: col.filters,\r\n };\r\n if (col.filterType === 'set') {\r\n filterObj.filters = Array(...col.selectedValues).map(\r\n (f: string) => ({\r\n filterOperation: '=',\r\n filterValue: f,\r\n }),\r\n );\r\n filterObj.filterLogic = 'OR';\r\n }\r\n const existingIndex = this.appliedFilters.findIndex(\r\n (f) => f.fieldName === col.fieldName,\r\n );\r\n if (existingIndex === -1) {\r\n this.appliedFilters.push(filterObj);\r\n } else {\r\n this.appliedFilters[existingIndex] = filterObj;\r\n }\r\n } else {\r\n this.appliedFilters = this.appliedFilters.filter(\r\n (f) => f.fieldName !== col.fieldName,\r\n );\r\n }\r\n }\r\n });\r\n\r\n if (this.dynamicGroupingFiltering) {\r\n this.appliedFiltersEvent.emit(this.appliedFilters);\r\n return;\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 evaluateFieldValue(row: any, field: string): any {\r\n if (field.includes('.')) {\r\n const parts = field.split('.');\r\n let value = row;\r\n for (const part of parts) {\r\n value = value?.[part];\r\n }\r\n return value;\r\n }\r\n return row[field];\r\n }\r\n\r\n resetFilter(col: any) {\r\n switch (col.filterType) {\r\n case 'text':\r\n case 'number':\r\n case 'date': {\r\n col.filters.forEach((f: any) => (f.filterValue = null));\r\n col.filterLogic = 'OR';\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 this.appliedFilters = this.appliedFilters.filter(\r\n (f) => f.fieldName !== col.fieldName,\r\n );\r\n // Remove active flag\r\n this.activeFilters.delete(col.fieldName);\r\n\r\n // Re-apply all filters\r\n if (this.dynamicGroupingFiltering) {\r\n this.appliedFiltersEvent.emit(this.appliedFilters);\r\n return;\r\n }\r\n this.applyAllFilters();\r\n }\r\n\r\n removeActiveFilter(col: any) {\r\n this.activeFilters.delete(col.fieldName);\r\n const column = this.colDefs.find((c) => c.fieldName === col.fieldName);\r\n if (column) {\r\n if (column.filterType === 'set') {\r\n column.selectedValues = new Set(column.options); // clear set filter\r\n } else {\r\n column.filters.forEach((f: any) => {\r\n f.filterValue = '';\r\n });\r\n }\r\n }\r\n this.appliedFilters = this.appliedFilters.filter(\r\n (f) => f.fieldName !== col.fieldName,\r\n );\r\n\r\n if (this.dynamicGroupingFiltering) {\r\n this.appliedFiltersEvent.emit(this.appliedFilters);\r\n return;\r\n }\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 this.menuVisible[index] = true;\r\n\r\n // setTimeout(() => {\r\n // const rect = (event.target as HTMLElement).getBoundingClientRect();\r\n // const el = this.colActionMenu?.nativeElement;\r\n // const leftAvailableSpace = rect.left;\r\n // const elWidth = el.offsetWidth;\r\n // if (leftAvailableSpace < elWidth) {\r\n // el.style.right = 'unset';\r\n // el.style.left = '0px';\r\n // }\r\n // });\r\n setTimeout(() => {\r\n const table = this.table?.nativeElement;\r\n const tableRect = table.getBoundingClientRect();\r\n const rect = (event.target as HTMLElement).getBoundingClientRect();\r\n const el = this.colActionMenu?.nativeElement;\r\n const elWidth = el.offsetWidth;\r\n const popUpLeftWidth = rect.left - elWidth;\r\n if (popUpLeftWidth < tableRect.left) {\r\n el.style.right = 'unset';\r\n el.style.left = '0px';\r\n }\r\n });\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 if (this.dynamicGroupingFiltering) {\r\n return;\r\n }\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 event.stopPropagation();\r\n\r\n this.isResizing = true;\r\n this.resizingColumnIndex = index;\r\n this.startX = event.clientX;\r\n this.startWidth = this.colDefs[index].width ?? 150;\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.removeMouseMove = this.renderer.listen(\r\n 'document',\r\n 'mousemove',\r\n (e: MouseEvent) => this.onMouseMove(e),\r\n );\r\n\r\n this.removeMouseUp = this.renderer.listen(\r\n 'document',\r\n 'mouseup',\r\n (e: MouseEvent) => this.stopResize(e),\r\n );\r\n });\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 (this.resizingColumnIndex == null || this.rafId) return;\r\n\r\n this.rafId = requestAnimationFrame(() => {\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.zone.run(() => {\r\n this.colDefs[this.resizingColumnIndex!].width = newWidth;\r\n this.cd.markForCheck();\r\n });\r\n }\r\n\r\n this.rafId = null;\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\r\n this.isResizing = false;\r\n this.resizingColumnIndex = null;\r\n\r\n this.removeMouseMove?.();\r\n this.removeMouseUp?.();\r\n\r\n if (this.rafId) {\r\n cancelAnimationFrame(this.rafId);\r\n this.rafId = null;\r\n }\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 // if (col.pin) {\r\n // col.pin = direction;\r\n // }\r\n\r\n // col.leftPinned = direction === 'left';\r\n // col.rightPinned = direction === 'right';\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 pinColumn(col: any, index: number, direction: string) {\r\n this.pinActionClicked[col.colId] = direction;\r\n if (col.pin) {\r\n col.pin = direction;\r\n }\r\n this.leftPinned = this.leftPinned.filter((c: any) => c.colId !== col.colId);\r\n this.rightPinned = this.rightPinned.filter(\r\n (c: any) => c.colId !== col.colId,\r\n );\r\n\r\n if (col.fieldName !== 'action') {\r\n this.centerArea = this.centerArea.filter(\r\n (c: any) => c.colId !== col.colId,\r\n );\r\n }\r\n\r\n col.leftPinned = direction === 'left';\r\n col.rightPinned = direction === 'right';\r\n\r\n if (col.leftPinned) {\r\n this.leftPinned.push(col);\r\n } else if (col.rightPinned) {\r\n this.rightPinned.unshift(col);\r\n } else {\r\n const indx = this.centerArea.findIndex(\r\n (dt: any) => dt.fieldName === col.fieldName,\r\n );\r\n if (index >= 0) {\r\n this.centerArea.splice(indx, 0, col);\r\n }\r\n }\r\n\r\n const fixedCols = this.centerArea.filter(\r\n (c: any) => c.fieldName === 'action',\r\n );\r\n\r\n const movableCols = this.centerArea.filter(\r\n (c: any) => c.fieldName !== 'action',\r\n );\r\n this.colDefs = [\r\n ...this.leftPinned,\r\n ...movableCols,\r\n ...this.rightPinned,\r\n ...fixedCols,\r\n ];\r\n\r\n this.updatePinnedOffsets();\r\n this.onClickOutside();\r\n }\r\n\r\n showPinActions(event: MouseEvent) {\r\n event.stopPropagation();\r\n const parentEl = event.currentTarget as HTMLElement;\r\n\r\n this.showPin = true;\r\n setTimeout(() => {\r\n const menuEl = this.pinMenu?.nativeElement;\r\n if (!menuEl || !parentEl) return;\r\n const parentRect = parentEl.getBoundingClientRect();\r\n const menuWidth = menuEl.offsetWidth;\r\n\r\n const viewPortWidth = window.innerWidth;\r\n let x = parentRect.right;\r\n\r\n if (x + menuWidth > viewPortWidth) {\r\n menuEl.style.right = `${parentRect.width}px`;\r\n }\r\n });\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 // 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] || 'N/A';\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 = val?.[key];\r\n }\r\n return val || 'N/A';\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 resetPagination(): 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 = this.pageDetails.pageSize;\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 if (!data.isLocked) 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 event.stopPropagation();\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 maxWidth: `${col.maxWidth}px`,\r\n };\r\n if (col.isAction) {\r\n style.position = 'sticky';\r\n style.right = '0px';\r\n style.zIndex = 14;\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\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, col: any) {\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 this.draggableColumn = col;\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 this.groupingDisabled = this.draggableColumn?.disableGrouping ?? false;\r\n if (this.groupingDisabled) {\r\n event.dataTransfer!.dropEffect = 'none';\r\n this.groupingDisabled = false;\r\n return;\r\n }\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 col = this.colDefs[colIndex];\r\n if (col.disableGrouping) return;\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 if (this.dynamicGroupingFiltering) {\r\n this.activeGroupsEvent.emit(this.groupBy);\r\n return;\r\n }\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 if (col.disableGrouping) return;\r\n this.activeGroups.push(col);\r\n this.groupBy.push(col.fieldName);\r\n this.colDefs.splice(index, 1);\r\n if (this.dynamicGroupingFiltering) {\r\n this.activeGroupsEvent.emit(this.groupBy);\r\n return;\r\n }\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 if (this.dynamicGroupingFiltering) {\r\n this.activeGroupsEvent.emit(this.groupBy);\r\n return;\r\n }\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 if (this.dynamicGroupingFiltering) {\r\n this.activeGroupsEvent.emit(this.groupBy);\r\n return;\r\n }\r\n } else {\r\n if (this.dynamicGroupingFiltering) {\r\n this.activeGroupsEvent.emit(this.groupBy);\r\n return;\r\n }\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.filters[0].filterOperation = 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 convertToNumber(value: number | string): number {\r\n return Number(value);\r\n }\r\n\r\n hideSettings(): void {\r\n this.onHideSettings.emit(false);\r\n }\r\n\r\n dragRow(e: Event, row: any) {\r\n this.draggedRowData = row;\r\n this.isRowSelected = this.selectedRow.some((s) => s.rowId === row.rowId);\r\n }\r\n\r\n allowRowDrop(e: Event) {\r\n e.preventDefault();\r\n }\r\n dropRow(targetRow: any) {\r\n let sourceIndex = null;\r\n let targetIndex = this.rowData.findIndex(\r\n (dt: any) => dt.rowId === targetRow.rowId,\r\n );\r\n\r\n if (this.selectedRow.length > 0 && this.isRowSelected) {\r\n sourceIndex = this.rowData.findIndex(\r\n (dt: any) => dt.rowId === this.selectedRow[0].rowId,\r\n );\r\n\r\n const selectedIds = new Set(this.selectedRow.map((r) => r.rowId));\r\n this.rowData = this.rowData.filter((dt) => !selectedIds.has(dt.rowId));\r\n if (sourceIndex > this.rowData.length) {\r\n sourceIndex = sourceIndex - this.selectedRow.length + 1;\r\n }\r\n\r\n if (targetIndex >= this.rowData.length) {\r\n targetIndex = targetIndex - this.selectedRow.length + 1;\r\n }\r\n this.rowData.splice(sourceIndex, 0, ...this.selectedRow);\r\n } else {\r\n sourceIndex = this.rowData.findIndex(\r\n (dt: any) => dt.rowId === this.draggedRowData.rowId,\r\n );\r\n }\r\n if (sourceIndex < 0 || targetIndex < 0) return;\r\n this.moveRow(sourceIndex, targetIndex);\r\n }\r\n\r\n moveRow(from: number, to: number) {\r\n let rowMoved = [];\r\n if (this.selectedRow.length > 0 && this.isRowSelected) {\r\n rowMoved = this.rowData.splice(from, this.selectedRow.length);\r\n } else {\r\n rowMoved = this.rowData.splice(from, 1);\r\n }\r\n\r\n this.rowData.splice(to, 0, ...rowMoved);\r\n this.isRowSelected = false;\r\n }\r\n\r\n clearAllFilter() {\r\n this.colDefs?.forEach((col) => {\r\n this.resetFilter(col);\r\n });\r\n }\r\n\r\n onBtFirstClick(): void {\r\n this.pageDetails.currentPage = 1;\r\n this.recordsToShow.min = 0;\r\n this.recordsToShow.max = 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 onBtLastClick(): void {\r\n this.pageDetails.currentPage = this.pageDetails.totalPages;\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 onRowClick(row: any) {\r\n this.onRowClicked.emit({ row });\r\n }\r\n\r\n onCellClick(row: any, col: any) {\r\n if (this.clickTimer) {\r\n clearTimeout(this.clickTimer);\r\n }\r\n\r\n this.clickTimer = setTimeout(() => {\r\n this.onCellClicked.emit({ row, col });\r\n }, this.clickDelay);\r\n }\r\n\r\n onCellDblClick(row: any, col: any) {\r\n this.cellClickedColumn = col;\r\n if (this.clickTimer) {\r\n clearTimeout(this.clickTimer);\r\n this.clickTimer = null;\r\n }\r\n if (!col.editable) return;\r\n if (this.previousId) {\r\n this.isCellDblClicked[this.previousId] = false;\r\n }\r\n\r\n const id = `${col.colId}-${row.rowId}`;\r\n this.isCellDblClicked[id] = true;\r\n let fieldName = col.fieldName;\r\n const fieldValue = this.evaluateFieldValue(row, col.fieldName) || '';\r\n\r\n this.editingRow = row;\r\n this.editingField = fieldName;\r\n this.cellClickedCtrl.setValue(fieldValue);\r\n this.previousId = id;\r\n }\r\n\r\n onEnter() {\r\n this.enterPressed = true;\r\n this.onCellEditSave();\r\n }\r\n\r\n onBlur() {\r\n if (this.enterPressed) {\r\n this.enterPressed = false;\r\n return;\r\n }\r\n this.onCellEditSave();\r\n }\r\n\r\n onCellEditSave() {\r\n if (this.editingRow && this.editingField) {\r\n this.setFieldValue(\r\n this.editingRow,\r\n this.editingField,\r\n this.cellClickedCtrl.value,\r\n );\r\n }\r\n this.onCellEdit.emit({\r\n row: this.editingRow,\r\n col: this.cellClickedColumn,\r\n changedValue: this.cellClickedCtrl.value,\r\n });\r\n\r\n if (this.previousId) {\r\n this.isCellDblClicked[this.previousId] = false;\r\n }\r\n\r\n this.editingRow = null;\r\n this.editingField = '';\r\n }\r\n\r\n setFieldValue(row: any, field: string, value: any) {\r\n if (field.includes('.')) {\r\n const parts = field.split('.');\r\n let obj = row;\r\n\r\n for (let i = 0; i < parts.length - 1; i++) {\r\n obj = obj?.[parts[i]];\r\n if (!obj) return;\r\n }\r\n\r\n obj[parts[parts.length - 1]] = value;\r\n } else {\r\n row[field] = value;\r\n }\r\n }\r\n}\r\n","<div class=\"tableArea\" [ngClass]=\"{ large: bigRows }\" #table>\r\n @if (settingsRequired && settingsClicked) {\r\n <div\r\n class=\"setting_options\"\r\n appOutsideClick\r\n (clickOutside)=\"hideSettings()\"\r\n >\r\n <div class=\"column_header\">Select Headers</div>\r\n <div class=\"checkbox_container\">\r\n <input\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"activeAll\"\r\n (change)=\"activeAllSelection($event)\"\r\n />\r\n <span>Select All</span>\r\n </div>\r\n\r\n <div class=\"item_container\" id=\"table_scroll\">\r\n @for (col of colDefs; track col.colId) {\r\n <div class=\"column_item checkbox_container\">\r\n <input\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"col.active\"\r\n (change)=\"changeActiveColSelection($event, col)\"\r\n [disabled]=\"col.headerLocked\"\r\n />\r\n <span>{{ col.headerName | titlecase }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @if (groupByRequired && colDefs.length > 0) {\r\n <!-- Group Panel -->\r\n <div\r\n class=\"group_panel\"\r\n [ngClass]=\"{ disable_group: groupingDisabled }\"\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 }\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 @if (activeFilters.size > 0) {\r\n <div class=\"active_filters_container\">\r\n <div class=\"tag_wrapper\">\r\n @for (filter of appliedFilters; track filter.fieldName) {\r\n @if (filter.filters?.length) {\r\n <div class=\"active_filter_tag\">\r\n <div class=\"active_filter_label ellipsis\">\r\n @for (item of filter.filters; track $index) {\r\n @if (item.filterValue) {\r\n @if ($index > 0 && item.filterValue) {\r\n <span class=\"filter_logic\">\r\n {{ filter.filterLogic }}\r\n </span>\r\n }\r\n <span class=\"filter_field\"\r\n >{{ filter.fieldName.split(\".\")[0] }}:</span\r\n >\r\n <span class=\"\">\r\n {{\r\n item.filterOperation == \"=\" ||\r\n item.filterOperation == \"equals\"\r\n ? \":\"\r\n : item.filterOperation\r\n }}</span\r\n >\r\n <span class=\"filter_value\">{{ item.filterValue }}</span>\r\n }\r\n }\r\n </div>\r\n <button\r\n class=\"remove_filter_btn\"\r\n (click)=\"removeActiveFilter(filter)\"\r\n >\r\n <img src=\"images/t-x.svg\" alt=\"\" />\r\n </button>\r\n </div>\r\n }\r\n }\r\n </div>\r\n <div class=\"clear_all\" (click)=\"clearAllFilter()\">Clear All Filters</div>\r\n </div>\r\n }\r\n <div\r\n class=\"table_wrapper global\"\r\n id=\"table_scroll\"\r\n #parent\r\n (scroll)=\"infinityScroll($event)\"\r\n [ngClass]=\"{ tbody_height: activeFilters.size > 0 }\"\r\n [class.no-horizontal-scroll]=\"\r\n (!rowData || rowData.length === 0) &&\r\n (!groupedResult || groupedResult.length === 0)\r\n \"\r\n >\r\n <div class=\"table-inner-wrapper\">\r\n <table cellspacing=\"0\" cellpadding=\"0\">\r\n <thead class=\"sticky-top\">\r\n @if (colDefs?.length === 0 && showSkeleton) {\r\n <tr>\r\n @for (c of skeletonCols; track $index) {\r\n <th>\r\n <div class=\"th_wraper\">\r\n <div class=\"line\"></div>\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n } @else {\r\n <tr>\r\n @if (\r\n checkBoxSelection &&\r\n checkboxSelectionType == \"multiple\" &&\r\n atLeastOneColumnChecked\r\n ) {\r\n <th style=\"min-width: 50px; width: 50px\">\r\n <div class=\"th_wraper\">\r\n <span class=\"checkbox_container\"\r\n ><input\r\n class=\"pointer custom_check_box\"\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 <div class=\"filter_three_dot_wrapper\">\r\n <span class=\"resize-handle default_cursor\"> | </span>\r\n </div>\r\n </div>\r\n </th>\r\n } @else {\r\n @if (checkBoxSelection && checkboxSelectionType == \"single\") {\r\n <th style=\"min-width: 50px; width: 50px\"></th>\r\n }\r\n }\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 }\r\n @for (col of colDefs; track col.colId) {\r\n @if (col.active) {\r\n <th\r\n [ngStyle]=\"getStyle(col, 'action')\"\r\n [ngClass]=\"{\r\n 'drag-over': dragOverIndex === $index,\r\n pinned_column: col.leftPinned || col.rightPinned,\r\n }\"\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, col)\"\r\n (dragend)=\"onDragEnd()\"\r\n (mouseenter)=\"enableColumnDrag($event, $index)\"\r\n (mouseleave)=\"disableColumnDrag($event, $index)\"\r\n />\r\n }\r\n <span class=\"ellipsis headerName\">{{\r\n col?.headerName\r\n }}</span>\r\n\r\n @if (\r\n sortingRequired &&\r\n sortingColumnIndex == $index &&\r\n col?.sortable &&\r\n !col.isAction\r\n ) {\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();\r\n $event.stopPropagation()\r\n \"\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();\r\n $event.stopPropagation()\r\n \"\r\n />\r\n }\r\n </span>\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();\r\n $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();\r\n $event.stopPropagation()\r\n \"\r\n />\r\n }\r\n @if (activeFilterIndex === $index) {\r\n <div class=\"filt_wrap\">\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 <lib-common-input\r\n [options]=\"filterOptions\"\r\n [selectedValue]=\"\r\n col.filters[0].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters[0].filterOperation = $event;\r\n applyAllFilters()\r\n \"\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.filters[0].filterValue\"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n\r\n @if (col.filters[0].filterValue) {\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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]=\"\r\n col.filters[1].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters[1].filterOperation =\r\n $event;\r\n applyAllFilters()\r\n \"\r\n ></lib-common-input>\r\n <!-- <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.filters[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)]=\"\r\n col.filters[1].filterValue\r\n \"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n }\r\n }\r\n\r\n <!-- Number Filter -->\r\n @if (col.filterType === \"number\") {\r\n <lib-common-input\r\n [options]=\"numberFilterOptions\"\r\n [selectedValue]=\"\r\n col.filters[0].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters[0].filterOperation = $event;\r\n applyAllFilters()\r\n \"\r\n ></lib-common-input>\r\n\r\n <!-- <input\r\n type=\"number\"\r\n [(ngModel)]=\"col.filters[0].filterValue\"\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.filters[0].filterValue\"\r\n (input)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n\r\n @if (col.filters[0].filterValue) {\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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]=\"\r\n col.filters[1].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters[1].filterOperation =\r\n $event;\r\n applyAllFilters()\r\n \"\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)]=\"\r\n col.filters[1].filterValue\r\n \"\r\n (keyup)=\"applyAllFilters()\"\r\n />\r\n </div>\r\n <!-- <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.filters[1].filterValue\"\r\n placeholder=\"Filter…\"\r\n (keyup)=\"applyAllFilters()\"\r\n /> -->\r\n }\r\n }\r\n\r\n <!-- DATE FILTER -->\r\n @if (col.filterType === \"date\") {\r\n <lib-common-input\r\n [options]=\"numberFilterOptions\"\r\n [selectedValue]=\"\r\n col.filters[0].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters[0].filterOperation = $event;\r\n applyAllFilters()\r\n \"\r\n ></lib-common-input>\r\n\r\n <!-- <input\r\n type=\"date\"\r\n [(ngModel)]=\"col.filters[0].filterValue\"\r\n (change)=\"applyAllFilters()\"\r\n /> -->\r\n <lib-common-calendar\r\n [dateConfig]=\"dateConfig\"\r\n [(ngModel)]=\"col.filters[0].filterValue\"\r\n [preSelectedValue]=\"\r\n col.filters[0].filterValue\r\n \"\r\n (dateTimeSelected)=\"\r\n dateTimeSelected($event)\r\n \"\r\n ></lib-common-calendar>\r\n\r\n @if (col.filters[0].filterValue) {\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\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]=\"\r\n col.filters[1].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters[1].filterOperation =\r\n $event;\r\n applyAllFilters()\r\n \"\r\n ></lib-common-input>\r\n\r\n <lib-common-calendar\r\n [dateConfig]=\"dateConfig\"\r\n [(ngModel)]=\"col.filters[1].filterValue\"\r\n [preSelectedValue]=\"\r\n col.filters[1].filterValue\r\n \"\r\n (dateTimeSelected)=\"\r\n dateTimeSelected($event)\r\n \"\r\n ></lib-common-calendar>\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 <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 class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"isAllSelected(col)\"\r\n (change)=\"\r\n toggleSelectAll(col, $event)\r\n \"\r\n />\r\n (Select All)\r\n </label>\r\n <div\r\n class=\"set_options\"\r\n id=\"table_scroll\"\r\n >\r\n @for (\r\n opt of col.filteredOptions;\r\n track $index\r\n ) {\r\n <label class=\"checkbox_container\">\r\n <input\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"\r\n col.selectedValues.has(opt)\r\n \"\r\n (change)=\"\r\n toggleSetOption(\r\n col,\r\n opt,\r\n $event\r\n )\r\n \"\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 </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 <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();\r\n $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 #colActionMenu\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=\"table_scroll\">\r\n @if (\r\n sortingType[$index] === \"dsc\" ||\r\n 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 }\r\n @if (\r\n sortingType[$index] === \"asc\" ||\r\n 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 }\r\n @if (\r\n sortingType[$index] === \"asc\" ||\r\n sortingType[$index] === \"dsc\"\r\n ) {\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"onSort(col, '', $index)\"\r\n >\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($event)\"\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\" #pinMenu>\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 (\r\n (pinActionClicked[col.colId] ??\r\n \"none\") === \"none\"\r\n ) {\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 (\r\n pinActionClicked[col.colId] === \"left\"\r\n ) {\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 (\r\n pinActionClicked[col.colId] === \"right\"\r\n ) {\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\r\n class=\"right_click_item\"\r\n [ngClass]=\"{\r\n disabled_option:\r\n !groupByRequired || col.disableGrouping,\r\n }\"\r\n >\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\"\r\n >Group by {{ col.headerName }}</span\r\n >\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 }\r\n </tr>\r\n }\r\n </thead>\r\n\r\n <tbody>\r\n @if (rowData?.length === 0 && showSkeleton) {\r\n @for (r of skeletonRows; track $index) {\r\n <tr>\r\n @for (c of skeletonCols; track $index) {\r\n <td>\r\n <div class=\"line\"></div>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n } @else {\r\n @if (groupedResult && groupedResult.length > 0) {\r\n @for (group of 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\r\n ? 'chevron-down.svg'\r\n : '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) {\r\n @for (child of group.children; track 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\r\n <!-- CASE 2: CHILDREN ARE RAW ROWS -->\r\n @if (!group.children[0]?.children) {\r\n @for (row of group.children; track 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\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"row.isSelected\"\r\n /></span>\r\n </td>\r\n }\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\r\n [ngStyle]=\"getStyle(col)\"\r\n [ngClass]=\"[\r\n col?.addClass ? col.addClass(row) : '',\r\n col.leftPinned || col.rightPinned\r\n ? 'pinned_column'\r\n : '',\r\n ]\"\r\n >\r\n <!-- {{ row[col.fieldName] }} -->\r\n @if (!col?.cellRenderer) {\r\n <div class=\"cell-value ellipsis\">\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=\"table_scroll\">\r\n <div class=\"item\">\r\n <span class=\"desc\">\r\n {{ parseColValue(row, col) }}</span\r\n >\r\n </div>\r\n </div>\r\n </div>\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 }\r\n }\r\n }\r\n } @else {\r\n @for (data of rowData; track data.rowId) {\r\n <tr\r\n [ngClass]=\"data | addClass: tableOptions\"\r\n (dragover)=\"allowRowDrop($event)\"\r\n (drop)=\"dropRow(data)\"\r\n (click)=\"onRowClick(data)\"\r\n >\r\n @if (checkBoxSelection && atLeastOneColumnChecked) {\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 custom_check_box\"\r\n name=\"\"\r\n id=\"{{ data.rowId }}\"\r\n [disabled]=\"data.isLocked\"\r\n [checked]=\"data.isSelected || data.isLocked\"\r\n (change)=\"onRowCheckboxSelection($event)\"\r\n /></span>\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 </td>\r\n }\r\n @for (col of colDefs; track col.colId) {\r\n @if (col.active) {\r\n <td\r\n (click)=\"onCellClick(data, col)\"\r\n (dblclick)=\"onCellDblClick(data, col)\"\r\n [ngStyle]=\"getStyle(col)\"\r\n [ngClass]=\"[\r\n col?.addClass ? col.addClass(data) : '',\r\n col.leftPinned || col.rightPinned\r\n ? 'pinned_column'\r\n : '',\r\n ]\"\r\n class=\"table_cell\"\r\n >\r\n <div class=\"col_wrapper\">\r\n @if (\r\n isRowsEditable &&\r\n isCellDblClicked[col.colId + \"-\" + data.rowId]\r\n ) {\r\n <input\r\n [formControl]=\"cellClickedCtrl\"\r\n type=\"text\"\r\n name=\"cellClickedCtrl\"\r\n (blur)=\"onBlur()\"\r\n (keydown.enter)=\"onEnter()\"\r\n />\r\n }\r\n @if (\r\n rowGripFieldName &&\r\n rowGripFieldName === col?.fieldName\r\n ) {\r\n <div\r\n [draggable]=\"true\"\r\n (dragstart)=\"dragRow($event, data)\"\r\n class=\"gripper\"\r\n >\r\n <img\r\n class=\"gripper-img\"\r\n src=\"images/gripper.svg\"\r\n />\r\n </div>\r\n }\r\n\r\n @if (!col?.cellRenderer) {\r\n <div class=\"cell-value ellipsis\">\r\n <div\r\n class=\"more_data_wrapper\"\r\n [ngClass]=\"{ ellipsis: !col.wrapText }\"\r\n >\r\n <span\r\n class=\"node_label\"\r\n [appTooltip]=\"\r\n parseColValue(data, col) || 'N/A'\r\n \"\r\n tooltipPosition=\"adaptive\"\r\n [tooltipParentContainer]=\"parent\"\r\n >{{ parseColValue(data, col) }}</span\r\n >\r\n </div>\r\n <!-- <div class=\"see_more_data\" id=\"table_scroll\">\r\n <div class=\"item\">\r\n <span class=\"desc\">\r\n {{ parseColValue(data, col) }}</span\r\n >\r\n </div>\r\n </div> -->\r\n </div>\r\n } @else {\r\n <div\r\n [rowParam]=\"data\"\r\n [col]=\"col\"\r\n [api]=\"tableOptions\"\r\n [currentValue]=\"\r\n data[col.fieldName] || parseColValue(data, col)\r\n \"\r\n appRendererParser\r\n ></div>\r\n }\r\n </div>\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 }\r\n </tr>\r\n }\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 <!-- CASE: more groups -->\r\n @if (node.children[0]?.children) {\r\n @for (child of node.children; track 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\r\n <!-- CASE: final rows -->\r\n @if (!node.children[0]?.children) {\r\n @for (row of node.children; track 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\r\n type=\"checkbox custom_check_box\"\r\n [checked]=\"row.isSelected\"\r\n /></span>\r\n </td>\r\n }\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\r\n [ngStyle]=\"getStyle(col)\"\r\n [ngClass]=\"[\r\n col.leftPinned || col.rightPinned\r\n ? 'pinned_column'\r\n : '',\r\n ]\"\r\n >\r\n <!-- {{ row[col.fieldName] }} -->\r\n @if (!col?.cellRenderer) {\r\n <div class=\"cell-value ellipsis\">\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=\"table_scroll\">\r\n <div class=\"item\">\r\n <span class=\"desc\">\r\n {{ parseColValue(row, col) }}</span\r\n >\r\n </div>\r\n </div>\r\n </div>\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 }\r\n }\r\n </ng-template>\r\n </table>\r\n\r\n @if (\r\n (!rowData || rowData.length === 0) &&\r\n (!groupedResult || groupedResult.length === 0)\r\n ) {\r\n <div class=\"empty_overlay\">\r\n <div class=\"empty_content\">\r\n @if (tableOptions?.noDataTemplate) {\r\n <ng-container\r\n *ngTemplateOutlet=\"tableOptions.noDataTemplate\"\r\n ></ng-container>\r\n } @else {\r\n <span>No Data To Show</span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- Table Wrapper Ends-->\r\n @if (paginationRequired && colDefs.length > 0) {\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\r\n class=\"select_option\"\r\n appOutsideClick\r\n (clickOutside)=\"onClickOutside()\"\r\n >\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 |\r\n {{ totalRecords > 0 ? convertToNumber(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\r\n class=\"outlined_btn first_btn\"\r\n type=\"button\"\r\n (click)=\"onBtFirstClick()\"\r\n [ngClass]=\"pageDetails.currentPage > 1 ? '' : 'disable_btn'\"\r\n >\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\r\n ? ''\r\n : '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\r\n class=\"outlined_btn last_btn\"\r\n type=\"button\"\r\n (click)=\"onBtLastClick()\"\r\n [ngClass]=\"\r\n pageDetails.currentPage < pageDetails.totalPages\r\n ? ''\r\n : 'disable_btn'\r\n \"\r\n >\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","import { Component, HostListener, Input, signal } from '@angular/core';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nimport { AdaptivePositionDirective } from '../../directives/adaptive-position.directive';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AddClassPipe } from '../../pipes/add-class.pipe';\r\nimport { TooltipDirective } from '../../directives/tooltip.directive';\r\n\r\n@Component({\r\n selector: 'lib-common-renderer',\r\n imports: [\r\n OutsideClickDirective,\r\n AdaptivePositionDirective,\r\n CommonModule,\r\n AddClassPipe,\r\n TooltipDirective,\r\n ],\r\n templateUrl: './common-renderer.component.html',\r\n styleUrl: './common-renderer.component.scss',\r\n})\r\nexport class CommonRendererComponent {\r\n parentContainer!: HTMLElement;\r\n params: any;\r\n\r\n private static _activeRowId = signal<number | null>(null);\r\n private static _activeTagId = signal<string | null>(null);\r\n\r\n // wrapper to access static signal easily\r\n activeRowId = CommonRendererComponent._activeRowId;\r\n activeTagId = CommonRendererComponent._activeTagId;\r\n clickTimer: any = null;\r\n clickDelay = 250;\r\n\r\n maxVisible: number = 2;\r\n data: any;\r\n paramsVal: any;\r\n tagClasses: any;\r\n\r\n cellInit(params: any, data: any) {\r\n this.params = params;\r\n this.data = data;\r\n this.paramsVal = this.parseColValue(params.data, params.col);\r\n this.parentContainer = document.body;\r\n }\r\n\r\n /**\r\n * @description Returns the renderer type defined in cellRendererParams.\r\n * @author Anand Pandey\r\n * @returns {string | undefined}\r\n */\r\n get type() {\r\n return this.params?.cellParams?.type;\r\n }\r\n\r\n get subType() {\r\n return this.params?.cellParams?.subType;\r\n }\r\n /**\r\n * @description Returns the renderer subtype defined in cellRendererParams.\r\n * @author Anand Pandey\r\n * @returns {string | undefined}\r\n */\r\n get actionSubType() {\r\n return this.params?.cellParams?.subType;\r\n }\r\n\r\n /**\r\n * @description Returns the cell value from params or fallback to row data field.\r\n * @author Anand Pandey\r\n * @returns {any}\r\n */\r\n get value() {\r\n return this.params?.value ?? this.params?.data?.[this.params?.field];\r\n }\r\n\r\n /**\r\n * @description Returns the list of actions configured for the action menu.\r\n * @author Anand Pandey\r\n * @returns {any[]}\r\n */\r\n get actions() {\r\n return this.params?.cellParams?.actions.map((action: any) => {\r\n return {\r\n ...action,\r\n class: action.class || '',\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * @description Determines whether the current row's action menu should be open.\r\n * @author Anand Pandey\r\n * @returns {boolean}\r\n */\r\n get openActionMenu() {\r\n return this.activeRowId() === this.params.data.rowId;\r\n }\r\n\r\n /**\r\n * @description Emits a callback function defined in cellRendererParams.\r\n * @author Anand Pandey\r\n * @param {string} eventName\r\n * @param {any} data\r\n * @returns {void}\r\n */\r\n emit(eventName: string, data: any) {\r\n const handler = this.params?.cellParams?.[eventName];\r\n if (typeof handler === 'function') handler(data);\r\n }\r\n\r\n /**\r\n * @description Handles switch toggle and emits value change event.\r\n * @author Anand Pandey\r\n * @param {Event} event\r\n * @returns {void}\r\n */\r\n onToggle(event: any) {\r\n this.emit('onToggle', {\r\n params: this.params,\r\n row: this.params.data,\r\n value: event.target.checked,\r\n });\r\n }\r\n\r\n /**\r\n * @description Toggles the three-dots action menu for the current row.\r\n * @author Anand Pandey\r\n * @returns {void}\r\n */\r\n onThreeDotsMenuClick() {\r\n if (this.openActionMenu) {\r\n this.activeRowId.set(null);\r\n } else {\r\n this.activeRowId.set(this.params.data.rowId);\r\n }\r\n }\r\n\r\n /**\r\n * @description Handles click on an action option and emits selected action event.\r\n * @author Anand Pandey\r\n * @param {any} action\r\n * @returns {void}\r\n */\r\n onActionClick(action: any) {\r\n this.activeRowId.set(null);\r\n this.emit('onAction', {\r\n row: this.params.data,\r\n action,\r\n });\r\n }\r\n\r\n linkSingleClick() {\r\n if (this.clickTimer) {\r\n clearTimeout(this.clickTimer);\r\n this.clickTimer = null;\r\n }\r\n this.clickTimer = setTimeout(() => {\r\n this.emit('onLinkClick', {\r\n params: this.params,\r\n row: this.params.data,\r\n event: 'singleClick',\r\n });\r\n this.clickTimer = null;\r\n }, this.clickDelay);\r\n }\r\n\r\n linkDoubleClick() {\r\n if (this.clickTimer) {\r\n clearTimeout(this.clickTimer);\r\n this.clickTimer = null;\r\n }\r\n this.emit('onLinkClick', {\r\n params: this.params,\r\n row: this.params.data,\r\n event: 'doubleClick',\r\n });\r\n }\r\n\r\n /**\r\n * @description Closes the action menu when clicking outside the component.\r\n * @author Anand Pandey\r\n * @param {Event} e\r\n * @returns {void}\r\n */\r\n clickOutside(e: any) {\r\n this.activeRowId.set(null);\r\n }\r\n\r\n /**\r\n * @description Returns the complete list of tags after normalizing value input (supports array, object, string).\r\n * @author Anand Pandey\r\n * @returns {string[]}\r\n */\r\n get allTags(): any {\r\n return this.transformValue('tagKey', 'tagValue');\r\n }\r\n\r\n /**\r\n * @description Returns the subset of tags that should be visibly displayed in the UI based on maxVisible count.\r\n * @author Anand Pandey\r\n * @returns {string[]}\r\n */\r\n get visibleTags() {\r\n return this.allTags.slice(0, this.maxVisible);\r\n }\r\n\r\n /**\r\n * @description Returns the count of tags hidden behind the \"+\" more indicator.\r\n * @author Anand Pandey\r\n * @returns {number}\r\n */\r\n get hiddenCount() {\r\n return Math.max(0, this.allTags.length - this.maxVisible);\r\n }\r\n\r\n /**\r\n * @description Determines whether the dropdown should be open for the current row based on activeTagId.\r\n * @author Anand Pandey\r\n * @returns {boolean}\r\n */\r\n get openDropdown() {\r\n return (\r\n this.activeTagId() ===\r\n `${this.params.col.fieldName}-${this.params.data.rowId}`\r\n );\r\n }\r\n\r\n /**\r\n * @description Handles hover entry and activates dropdown if cursor enters +icon, hidden-list, dropdown or its items.\r\n * @author Anand Pandey\r\n * @param {MouseEvent} event\r\n * @returns {void}\r\n */\r\n toggleDropdown(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n if (\r\n target &&\r\n (target.closest('.hidden_list') ||\r\n target.closest('.tag_more') ||\r\n target.closest('.tag_dropdown') ||\r\n target.closest('.dropdown_item') ||\r\n this.openDropdown)\r\n ) {\r\n this.activeTagId.set(\r\n `${this.params.col.fieldName}-${this.params.data.rowId}`,\r\n );\r\n return;\r\n }\r\n if (this.openDropdown) {\r\n this.activeTagId.set(null);\r\n }\r\n }\r\n\r\n /**\r\n * @description Closes the dropdown only when cursor leaves the entire component area and not moving inside child elements.\r\n * @author Anand Pandey\r\n * @param {MouseEvent} event\r\n * @returns {void}\r\n */\r\n closeDropdown(event: MouseEvent) {\r\n const target = event.relatedTarget as HTMLElement;\r\n\r\n if (\r\n target &&\r\n (target.closest('.tag_wrapper') ||\r\n target.closest('.hidden_list') ||\r\n target.closest('.tag_more') ||\r\n target.closest('tag_dropdown') ||\r\n target.closest('dropdown_item'))\r\n ) {\r\n return;\r\n }\r\n this.activeTagId.set(null);\r\n }\r\n\r\n /**\r\n * @description Returns normalized link values derived from the cell `value`.\r\n * Uses the configured `linkKey` from `cellParams` to extract display data\r\n * @author Anand Pandey\r\n * @returns {Array<{ linkValue: string; class: string }>} Normalized link values\r\n */\r\n get linkVal(): any {\r\n return this.parseColValue(this.params.data, this.params.col);\r\n }\r\n\r\n /**\r\n * @description Normalizes the component `value` into a consistent array structure.\r\n * @author Anand Pandey\r\n * @param {string} key Key in `cellParams` used to determine which field to read from object values\r\n * @param {string} valueProp Property name assigned to the normalized output value\r\n * @returns {Array<{ [key: string]: string; class: string }>} Array of normalized value objects\r\n */\r\n transformValue(key: string, valueProp: any) {\r\n const value = this.value;\r\n if (!value) return [];\r\n\r\n if (Array.isArray(value)) {\r\n return value.map((val) => {\r\n if (typeof val === 'object') {\r\n return {\r\n [valueProp]: val[this.params.cellParams?.[key]],\r\n class: val['class'] || '',\r\n ...val,\r\n };\r\n } else {\r\n return { [valueProp]: String(val).trim(), class: '' };\r\n }\r\n });\r\n } else if (!Array.isArray(value) && typeof value === 'object') {\r\n return [\r\n {\r\n [valueProp]: value[this.params.cellParams?.[key]],\r\n class: value['class'] || '',\r\n ...value,\r\n },\r\n ];\r\n }\r\n return [{ [valueProp]: String(value).trim(), class: '' }];\r\n }\r\n\r\n parseColValue(row: any, col: any): any {\r\n if (!col?.fieldName?.includes('.')) {\r\n return row[col.fieldName] || 'N/A';\r\n } else {\r\n const keys = col.fieldName\r\n .replace(/\\[(\\d+)\\]/g, '.$1')\r\n .split('.')\r\n .filter(Boolean);\r\n let val = row;\r\n\r\n for (const key of keys) {\r\n if (Array.isArray(val)) {\r\n val = val.map((v) => v?.[key]).filter(Boolean);\r\n } else {\r\n val = val?.[key];\r\n }\r\n\r\n if (val === undefined || val === null) {\r\n return 'N/A';\r\n }\r\n }\r\n return val || 'N/A';\r\n }\r\n }\r\n}\r\n","<!-- Switch -->\r\n@if (type === \"switch\") {\r\n <div class=\"table_switch_wrapper\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" [checked]=\"value\" (change)=\"onToggle($event)\" />\r\n <span class=\"slider\"></span>\r\n </label>\r\n </div>\r\n}\r\n\r\n<!-- Action Menu -->\r\n\r\n@if (type === \"action-menu\") {\r\n <div class=\"action-menu\">\r\n <button class=\"action_dots\" (click)=\"onThreeDotsMenuClick()\" #tagTrigger>\r\n <img src=\"images/more-{{ actionSubType || 'vertical' }}.svg\" />\r\n </button>\r\n\r\n @if (openActionMenu) {\r\n <div\r\n class=\"menu\"\r\n appOutsideClick\r\n (clickOutside)=\"clickOutside($event)\"\r\n adaptivePosition\r\n [trigger]=\"tagTrigger\"\r\n [isAction]=\"true\"\r\n [matchWidth]=\"false\"\r\n >\r\n <div class=\"item_wrapper\" id=\"table_scroll\">\r\n @for (act of actions; track $index) {\r\n <div\r\n class=\"{{ 'menu_item' + ' ' + act.class }}\"\r\n [ngClass]=\"{\r\n disabled_item:\r\n params?.data?.disabledActions?.includes(act.label) ||\r\n act.disabled,\r\n }\"\r\n (click)=\"onActionClick(act)\"\r\n >\r\n @if (act.icon) {\r\n <img src=\"images/{{ act.icon }}.svg\" />\r\n } @else {\r\n <img src=\"{{ act?.image }}\" />\r\n }\r\n\r\n <span class=\"ellipsis\">{{ act.label }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n}\r\n\r\n<!-- Tags -->\r\n\r\n@if (type === \"tag\") {\r\n <div class=\"tag_wrapper\" #tagTrigger (mouseout)=\"closeDropdown($event)\">\r\n @for (tag of visibleTags; track $index) {\r\n <div\r\n class=\"{{ 'tag_chip' + ' ' + tag.class }}\"\r\n [ngClass]=\"paramsVal | addClass: params.cellParams\"\r\n >\r\n @if (subType === \"badge\") {\r\n <span class=\"circle\" [class]=\"tag.badgeClass\"></span>\r\n }\r\n @if (tag.image) {\r\n <img src=\"{{ tag.image }}\" alt=\"\" class=\"icon\" />\r\n }\r\n\r\n <div class=\"more_data_section\">\r\n <!-- <span class=\"textTruncate\"> {{ tag.tagValue }}</span> -->\r\n <div class=\"cell-value ellipsis\">\r\n <div class=\"more_data_wrapper textTruncate\">\r\n <span\r\n class=\"node_label\"\r\n [appTooltip]=\"tag.tagValue || 'N/A'\"\r\n tooltipPosition=\"adaptive\"\r\n [tooltipParentContainer]=\"parentContainer\"\r\n >{{ tag.tagValue }}</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @if (hiddenCount > 0) {\r\n <div class=\"hidden_list\">\r\n <span class=\"tag_more\" (mouseover)=\"toggleDropdown($event)\"\r\n >+{{ hiddenCount }}</span\r\n >\r\n @if (openDropdown) {\r\n <div\r\n class=\"tag_dropdown\"\r\n id=\"table_scroll\"\r\n adaptivePosition\r\n [trigger]=\"tagTrigger\"\r\n [matchWidth]=\"false\"\r\n >\r\n @for (tag of allTags; track $index) {\r\n <div class=\"{{ 'dropdown_item' + ' ' + tag.class }}\">\r\n {{ tag.tagValue }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n\r\n@if (type === \"link\") {\r\n <div class=\"more_data_section cell-value ellipsis\">\r\n <!-- @for (link of linkVal; track $index) { -->\r\n <div class=\"more_data_wrapper textTruncate\">\r\n <span\r\n class=\"grid-link\"\r\n (click)=\"linkSingleClick()\"\r\n (dblclick)=\"linkDoubleClick()\"\r\n [appTooltip]=\"linkVal || 'N/A'\"\r\n tooltipPosition=\"adaptive\"\r\n [tooltipParentContainer]=\"parentContainer\"\r\n >\r\n {{ linkVal }}\r\n </span>\r\n </div>\r\n <!-- <div class=\"see_more_data\" id=\"table_scroll\">\r\n <div class=\"item\">\r\n <span class=\"desc\"> {{ linkVal }}</span>\r\n </div>\r\n </div> -->\r\n <!-- } -->\r\n </div>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n DoCheck,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AdaptivePositionDirective } from '../../directives/adaptive-position.directive';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nimport { RendererParserDirective } from '../../directives/renderer-parser.directive';\r\nimport { TooltipDirective } from '../../directives/tooltip.directive';\r\nimport { CommonInputComponent } from '../common-input/common-input.component';\r\nimport {\r\n CommonCalendarComponent,\r\n DateConfig,\r\n} from '../common-calendar/common-calendar.component';\r\n\r\nexport interface CatsTreeTableColumn {\r\n fieldName: string;\r\n header?: string;\r\n width?: number;\r\n minWidth?: number;\r\n maxWidth?: number;\r\n class?: string;\r\n colId?: string;\r\n sortable?: boolean;\r\n filterable?: boolean;\r\n filterType?: 'text' | 'number' | 'date' | 'set';\r\n leftPinned?: boolean;\r\n rightPinned?: boolean;\r\n leftOffset?: number;\r\n rightOffset?: number;\r\n active?: boolean;\r\n filters?: TreeFilterCondition[];\r\n options?: any[];\r\n filteredOptions?: any[];\r\n selectedValues?: Set<any>;\r\n cellRenderer?: any;\r\n cellRendererParams?: any;\r\n filterLogic?: 'AND' | 'OR';\r\n headerLocked?: boolean;\r\n}\r\n\r\nexport interface TreeFilterCondition {\r\n filterOperation: string;\r\n filterValue: any;\r\n}\r\n\r\nexport interface CatsTreeRowOptions {\r\n showCheckbox?: boolean;\r\n showToggle?: boolean;\r\n showNodeIcon?: boolean;\r\n showLink?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface CatsTreeExpandEvent<T = any> {\r\n node: T;\r\n level: number;\r\n path: T[];\r\n expanded: boolean;\r\n}\r\n\r\nexport interface CatsTreeSelectionChangeEvent<T = any> {\r\n node?: T;\r\n level?: number;\r\n path?: T[];\r\n checked: boolean;\r\n selectedNodes: T[];\r\n}\r\n\r\nexport interface CatsTreeLinkClickEvent<T = any> {\r\n node: T;\r\n level: number;\r\n path: T[];\r\n url: string | null;\r\n col: CatsTreeTableColumn;\r\n}\r\n\r\ntype RowKind = 'node' | 'loading' | 'no-data';\r\n\r\ninterface RowView<T = any> {\r\n kind: RowKind;\r\n level: number;\r\n path: T[];\r\n node: T;\r\n trackKey: string | number;\r\n}\r\n\r\n@Component({\r\n selector: 'cats-tree-table',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n OutsideClickDirective,\r\n AdaptivePositionDirective,\r\n RendererParserDirective,\r\n TooltipDirective,\r\n CommonInputComponent,\r\n CommonCalendarComponent,\r\n ],\r\n templateUrl: './common-tree-table.component.html',\r\n styleUrls: ['./common-tree-table.component.scss'],\r\n})\r\nexport class CommonTreeTableComponent<T = any>\r\n implements OnChanges, DoCheck, AfterViewInit, OnDestroy\r\n{\r\n @ViewChild('table', { static: true }) tableAreaRef!: ElementRef<HTMLElement>;\r\n @ViewChild('pinMenu') pinMenu?: ElementRef<HTMLElement>;\r\n @Input() data: T[] = [];\r\n @Input() columns: CatsTreeTableColumn[] = [\r\n { fieldName: 'name', header: 'Name' },\r\n ];\r\n @Input() tableOptions: any = {};\r\n\r\n @Input() idField: string = 'id';\r\n rowId: string = 'rowId';\r\n @Input() labelField: string = 'name';\r\n @Input() childrenField: string = 'array';\r\n @Input() treeColumnField?: string;\r\n\r\n @Input() indentPx: number = 24;\r\n @Input() showHeader: boolean = true;\r\n\r\n @Input() expandIcon: string = 'chevron-right.svg';\r\n @Input() collapseIcon: string = 'chevron-down.svg';\r\n @Input() iconBasePath: string = 'images';\r\n\r\n @Input() showCheckbox: boolean = false;\r\n @Input() showNodeIcon: boolean = true;\r\n @Input() noDataText: string = 'No data found';\r\n @Input() loadingText: string = 'Loading...';\r\n\r\n @Input() emitExpandAlways: boolean = true;\r\n\r\n // New sorting, filtering, and customization inputs\r\n @Input() sortingRequired: boolean = true;\r\n @Input() filterRequired: boolean = false;\r\n @Input() threeDotsMenuRequired: boolean = true;\r\n @Input() settingsRequired: boolean = true;\r\n @Input() settingsClicked: boolean = false;\r\n @Input() checkBoxSelection: boolean = false;\r\n @Input() checkboxSelectionType: 'multiple' | 'single' = 'multiple';\r\n\r\n @Input() paginationRequired: boolean = true;\r\n @Input() pageSizeList: number[] = [20, 50, 75, 100];\r\n @Input() totalRecords: number = 0;\r\n @Input() resetPage: boolean = true;\r\n\r\n @Input() isExpandable: (node: T, level: number, path: T[]) => boolean = (\r\n node,\r\n ) => {\r\n const children = (node as any)?.[this.childrenField];\r\n return Array.isArray(children) ? children.length > 0 : false;\r\n };\r\n\r\n @Input() rowOptionsResolver: (\r\n node: T,\r\n level: number,\r\n path: T[],\r\n ) => CatsTreeRowOptions = () => ({});\r\n\r\n @Input() nodeIconResolver: (\r\n node: T,\r\n level: number,\r\n path: T[],\r\n expanded: boolean,\r\n ) => string | null = () => null;\r\n\r\n @Input() linkResolver: (node: T, level: number, path: T[]) => string | null =\r\n () => null;\r\n @Input() showSkeleton: boolean = false;\r\n @Output() nodeToggle = new EventEmitter<CatsTreeExpandEvent<T>>();\r\n @Output() selectionChange = new EventEmitter<\r\n CatsTreeSelectionChangeEvent<T>\r\n >();\r\n @Output() linkClick = new EventEmitter<CatsTreeLinkClickEvent<T>>();\r\n @Output() linkDoubleClick = new EventEmitter<CatsTreeLinkClickEvent<T>>();\r\n @Output() onHideSettings = new EventEmitter();\r\n @Output() onPaginationChange = new EventEmitter();\r\n dateConfig: DateConfig = {\r\n selectionMode: 'single',\r\n enableTime: false,\r\n };\r\n\r\n protected rows: RowView<T>[] = [];\r\n private linkClickTimer: any = null;\r\n private linkClickDelay = 250;\r\n\r\n // Pagination properties\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\r\n // Sorting, filtering, and column management properties\r\n sortingColumnIndex: number | null = null;\r\n sortingType: { [key: number]: string } = {};\r\n filteredData: T[] = [];\r\n originalRowData: T[] = [];\r\n // activeFilters: Map<string, any> = new Map();\r\n activeFilters: Set<any> = new Set<any>();\r\n appliedFilters: any[] = [];\r\n menuVisible: boolean[] = [];\r\n dragOverIndex: number | null = null;\r\n draggedIndex: number | null = null;\r\n activeFilterIndex: number | null = null;\r\n resizingColumnIndex: number | null = null;\r\n startX: number = 0;\r\n startWidth: number = 0;\r\n isResizing: boolean = false;\r\n showMoveIcon: { [key: number]: boolean } = {};\r\n showPin = false;\r\n pinActionClicked: Record<string, string> = {};\r\n columnDraggable: boolean[] = [];\r\n showPageSizeList: boolean = false;\r\n activeAll: boolean = true;\r\n atLeastOneColumnChecked: boolean = true;\r\n selectedRow: T[] = [];\r\n originalColumns: CatsTreeTableColumn[] = [];\r\n\r\n @Input() skeletonRowsLength: number = 8;\r\n @Input() skeletonColsLength: number = 8;\r\n skeletonRows: any = [];\r\n skeletonCols: any = [];\r\n\r\n private removeMouseMove: (() => void) | null = null;\r\n private removeMouseUp: (() => void) | null = null;\r\n private rafId: number | null = null;\r\n private removeDragOver: (() => void) | null = null;\r\n private removeDrop: (() => void) | null = null;\r\n private originalExpandedKeys = new Set<any>();\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\r\n private expandedKeys = new Set<string | number>();\r\n private selectedKeys = new Set<string | number>();\r\n private fallbackKey = new WeakMap<object, number>();\r\n private fallbackSeq = 1;\r\n private resolvedTreeColumnField?: string;\r\n activeColumns: CatsTreeTableColumn[] = [];\r\n\r\n constructor(\r\n private renderer: Renderer2,\r\n private zone: NgZone,\r\n private cd: ChangeDetectorRef,\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n const el = this.tableAreaRef?.nativeElement;\r\n if (!el) return;\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.removeDragOver = this.renderer.listen(\r\n el,\r\n 'dragover',\r\n (event: DragEvent) => {\r\n if (this.isResizing) return;\r\n event.preventDefault();\r\n\r\n const th = (event.target as HTMLElement | null)?.closest?.(\r\n 'th',\r\n ) as HTMLElement | null;\r\n const rawIdx = th?.dataset?.['colIdx'];\r\n if (!rawIdx) return;\r\n\r\n const idx = Number.parseInt(rawIdx, 10);\r\n if (Number.isNaN(idx)) return;\r\n if (this.dragOverIndex === idx) return;\r\n\r\n this.zone.run(() => {\r\n this.dragOverIndex = idx;\r\n });\r\n },\r\n );\r\n\r\n this.removeDrop = this.renderer.listen(el, 'drop', (event: DragEvent) => {\r\n event.preventDefault();\r\n\r\n const th = (event.target as HTMLElement | null)?.closest?.(\r\n 'th',\r\n ) as HTMLElement | null;\r\n const rawIdx = th?.dataset?.['colIdx'];\r\n if (!rawIdx) return;\r\n\r\n const idx = Number.parseInt(rawIdx, 10);\r\n if (Number.isNaN(idx)) return;\r\n\r\n this.zone.run(() => {\r\n this.onDrop(event, idx);\r\n });\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeDragOver?.();\r\n this.removeDrop?.();\r\n this.removeMouseMove?.();\r\n this.removeMouseUp?.();\r\n if (this.rafId) cancelAnimationFrame(this.rafId);\r\n this.renderer.removeStyle(document.body, 'cursor');\r\n this.renderer.removeStyle(document.body, 'user-select');\r\n }\r\n\r\n getUpdatedColDefs(colDefs: any[]) {\r\n const flattenTree = (data: any[]): any[] => {\r\n const result: any[] = [];\r\n\r\n const recurse = (nodes: any[], parentTreeId = '') => {\r\n nodes.forEach((node) => {\r\n const currentTreeId = parentTreeId + node[this.idField];\r\n node[this.rowId] = currentTreeId;\r\n result.push(node);\r\n if (node.array && Array.isArray(node.array)) {\r\n recurse(node.array, currentTreeId);\r\n }\r\n });\r\n };\r\n\r\n recurse(data);\r\n return result;\r\n };\r\n\r\n const flatRows = flattenTree(this.data);\r\n\r\n return colDefs.map((col, index) => {\r\n // Reset sorting type per column\r\n this.sortingType[index] = '';\r\n\r\n col.colId = `${Date.now()}_${index}`;\r\n\r\n if (!col.filterType && !col.isAction) {\r\n col.filterType = 'text';\r\n }\r\n\r\n if (!col.filterLogic) {\r\n col.filterLogic = 'OR';\r\n }\r\n\r\n let updatedCol = {\r\n ...col,\r\n active: col.active ?? true,\r\n locked: col.locked ?? false,\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 // --------------------------------------------------------------------\r\n // SET FILTER TYPE\r\n // --------------------------------------------------------------------\r\n switch (col.filterType) {\r\n case 'text':\r\n updatedCol = {\r\n ...updatedCol,\r\n filters: [\r\n {\r\n filterOperation: 'contains',\r\n filterValue: '',\r\n },\r\n {\r\n filterOperation: '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 filters: [\r\n {\r\n filterOperation: '=',\r\n filterValue: '',\r\n },\r\n {\r\n filterOperation: '=',\r\n filterValue: '',\r\n },\r\n ],\r\n };\r\n break;\r\n\r\n case 'set':\r\n let fieldName = col.fieldName;\r\n\r\n if (fieldName.includes('.')) {\r\n fieldName = fieldName.split('.')[0];\r\n }\r\n\r\n const options = [\r\n ...new Set(\r\n flatRows\r\n .flatMap((r: any) =>\r\n this.normalizeSetFilterType(\r\n r[fieldName],\r\n col?.cellRendererParams?.tagKey,\r\n ),\r\n )\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 // --------------------------------------------------------------------\r\n // RESTORE APPLIED FILTERS (PERSISTENCE)\r\n // --------------------------------------------------------------------\r\n if (this.appliedFilters.length > 0) {\r\n const appliedFilter = this.appliedFilters.find(\r\n (f) => f.fieldName === col.fieldName,\r\n );\r\n\r\n if (appliedFilter) {\r\n switch (col.filterType) {\r\n case 'text':\r\n case 'number':\r\n case 'date':\r\n updatedCol = {\r\n ...updatedCol,\r\n filters: appliedFilter.filters,\r\n filterLogic: appliedFilter.filterLogic,\r\n };\r\n break;\r\n\r\n case 'set':\r\n let fieldName = col.fieldName;\r\n if (fieldName.includes('.')) {\r\n fieldName = fieldName.split('.')[0];\r\n }\r\n\r\n const options = [\r\n ...new Set(\r\n flatRows\r\n .flatMap((r: any) =>\r\n this.normalizeSetFilterType(\r\n r[fieldName],\r\n col?.cellRendererParams?.tagKey,\r\n ),\r\n )\r\n .filter(Boolean),\r\n ),\r\n ];\r\n\r\n const selectedValues = new Set(\r\n appliedFilter.filters.map((f: any) => f.filterValue),\r\n );\r\n\r\n updatedCol = {\r\n ...updatedCol,\r\n options,\r\n filteredOptions: options,\r\n selectedValues,\r\n };\r\n break;\r\n }\r\n }\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 ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['skeletonColsLength']?.currentValue) {\r\n this.skeletonColsLength = changes['skeletonColsLength']?.currentValue;\r\n }\r\n if (changes['data'] || changes['columns']) {\r\n const columns = changes['columns']?.currentValue;\r\n if (columns.length > 0) {\r\n this.skeletonColsLength = changes['columns']?.currentValue.length;\r\n }\r\n this.skeletonCols = Array.from(\r\n { length: this.skeletonColsLength },\r\n (_, i) => i,\r\n );\r\n this.skeletonRows = Array.from(\r\n { length: this.skeletonRowsLength },\r\n (_, i) => i,\r\n );\r\n // this.initializeColumns();\r\n const colDefs = changes['columns']?.currentValue;\r\n if (Array.isArray(colDefs)) {\r\n this.columns = this.getUpdatedColDefs(colDefs);\r\n }\r\n\r\n this.originalRowData = structuredClone(this.data || []);\r\n this.rebuildRows();\r\n }\r\n if (changes['totalRecords']?.currentValue && this.resetPage) {\r\n this.resetPagination();\r\n } else {\r\n this.setPageCount();\r\n }\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.rebuildRows();\r\n }\r\n\r\n protected get treeColumn(): CatsTreeTableColumn {\r\n const preferredField = this.treeColumnField ?? this.resolvedTreeColumnField;\r\n if (preferredField) {\r\n const found = this.columns?.find((c) => c.fieldName === preferredField);\r\n if (found) return found;\r\n }\r\n return this.columns?.[0] ?? { fieldName: this.labelField, header: 'Name' };\r\n }\r\n\r\n /**\r\n * Initialize column properties for filtering, sorting, and customization\r\n */\r\n private initializeColumns(): void {\r\n this.columns = this.columns.map((col, index) => {\r\n if (!col.colId) col.colId = col.fieldName;\r\n if (col.sortable === undefined) col.sortable = true;\r\n if (col.filterable === undefined) col.filterable = false;\r\n if (col.filterType === undefined) col.filterType = 'text';\r\n if (col.active === undefined) col.active = true;\r\n if (col.width === undefined) col.width = 150;\r\n if (col.minWidth === undefined) col.minWidth = 50;\r\n if (!col.filters) {\r\n col.filters = [\r\n { filterOperation: 'contains', filterValue: '' },\r\n { filterOperation: 'contains', filterValue: '' },\r\n ];\r\n }\r\n if (!col.selectedValues) col.selectedValues = new Set();\r\n if (!col.options && col.filterType === 'set') {\r\n col.options = this.extractUniqueValues(this.data || [], col.fieldName);\r\n col.filteredOptions = [...(col.options || [])];\r\n }\r\n if (!this.menuVisible[index]) this.menuVisible[index] = false;\r\n\r\n const key = col.colId || col.fieldName;\r\n if (this.pinActionClicked[key] == null) {\r\n this.pinActionClicked[key] = col.leftPinned\r\n ? 'left'\r\n : col.rightPinned\r\n ? 'right'\r\n : 'none';\r\n }\r\n return col;\r\n });\r\n\r\n // If the consumer didn't specify a tree column, keep the initial first column as the tree UI column\r\n // even when columns are later reordered (pin/drag).\r\n if (!this.treeColumnField) {\r\n const firstField = this.columns?.[0]?.fieldName;\r\n if (\r\n firstField &&\r\n (this.resolvedTreeColumnField == null ||\r\n !this.columns.some(\r\n (c) => c.fieldName === this.resolvedTreeColumnField,\r\n ))\r\n ) {\r\n this.resolvedTreeColumnField = firstField;\r\n }\r\n }\r\n\r\n this.saveColumnState();\r\n }\r\n\r\n /**\r\n * Extract unique values from data for set filter\r\n */\r\n private extractUniqueValues(data: T[], fieldName: string): any[] {\r\n const values = new Set<any>();\r\n const visit = (nodes: T[]) => {\r\n for (const node of nodes) {\r\n values.add(this.getValue(node, fieldName));\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) visit(children);\r\n }\r\n };\r\n visit(data);\r\n return Array.from(values);\r\n }\r\n\r\n /**\r\n * Sort data based on column and sorting type\r\n */\r\n protected onSortingRowData(\r\n sortingColumnIndex: number,\r\n col: CatsTreeTableColumn,\r\n ): void {\r\n if (!col.sortable) return;\r\n\r\n this.sortingColumnIndex = sortingColumnIndex;\r\n Object.keys(this.sortingType).forEach((k) => {\r\n if (Number(k) !== sortingColumnIndex) delete this.sortingType[Number(k)];\r\n });\r\n\r\n if (!this.sortingType[sortingColumnIndex]) {\r\n this.sortingType[sortingColumnIndex] = 'asc';\r\n } else if (this.sortingType[sortingColumnIndex] === 'asc') {\r\n this.sortingType[sortingColumnIndex] = 'dsc';\r\n } else {\r\n this.sortingType[sortingColumnIndex] = '';\r\n delete this.sortingType[sortingColumnIndex];\r\n }\r\n\r\n this.applySort();\r\n this.rebuildRows();\r\n }\r\n\r\n /**\r\n * Sort from the three-dots menu with an explicit direction (matches `cats-data-grid` UX).\r\n */\r\n protected onSort(\r\n col: CatsTreeTableColumn,\r\n type: string,\r\n sortingColumIndex: number,\r\n ): void {\r\n if (!col.sortable) return;\r\n\r\n this.sortingType[sortingColumIndex] = type;\r\n this.sortingColumnIndex = type ? sortingColumIndex : null;\r\n\r\n Object.keys(this.sortingType).forEach((k) => {\r\n if (k !== String(sortingColumIndex)) this.sortingType[Number(k)] = '';\r\n });\r\n\r\n if (type === 'asc' || type === 'dsc') {\r\n this.applySort();\r\n } else {\r\n this.data = structuredClone(this.originalRowData || []);\r\n }\r\n\r\n this.rebuildRows();\r\n this.onClickOutside();\r\n }\r\n\r\n /**\r\n * Apply sorting to the row data\r\n */\r\n private applySort(): void {\r\n if (this.sortingColumnIndex === null) return;\r\n\r\n const col = this.columns[this.sortingColumnIndex];\r\n const sortType = this.sortingType[this.sortingColumnIndex];\r\n\r\n if (!sortType) return;\r\n\r\n const sortFn = (a: T, b: T) => {\r\n const aVal = this.getValue(a, col.fieldName);\r\n const bVal = this.getValue(b, col.fieldName);\r\n\r\n if (aVal === bVal) return 0;\r\n if (aVal === null || aVal === undefined) return 1;\r\n if (bVal === null || bVal === undefined) return -1;\r\n\r\n if (sortType === 'asc') {\r\n return aVal > bVal ? 1 : -1;\r\n } else {\r\n return aVal < bVal ? 1 : -1;\r\n }\r\n };\r\n\r\n const visit = (nodes: T[]) => {\r\n nodes.sort(sortFn);\r\n for (const node of nodes) {\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) visit(children);\r\n }\r\n };\r\n\r\n visit(this.data || []);\r\n }\r\n\r\n applyAllFilters(col?: any): void {\r\n // Collect active filter columns\r\n const activeCols = this.columns.filter(\r\n (c) =>\r\n c.filterable &&\r\n c.filterType === 'text' &&\r\n c.filters?.some((f) => f.filterValue?.trim()),\r\n );\r\n\r\n if (activeCols.length === 0) {\r\n this.filteredData = structuredClone(this.originalRowData);\r\n this.data = this.filteredData;\r\n this.activeFilters.clear();\r\n this.expandedKeys = new Set(this.originalExpandedKeys);\r\n this.rebuildRows();\r\n return;\r\n }\r\n\r\n let filtered = structuredClone(this.originalRowData);\r\n\r\n if (col && col.filters?.every((c: any) => !c.filterValue)) {\r\n this.activeFilters.delete(col.fieldName);\r\n }\r\n for (const col of activeCols) {\r\n this.activeFilters.add(col.fieldName);\r\n\r\n filtered = this.filterTreeByColumn(filtered, col);\r\n }\r\n\r\n this.expandedKeys.clear();\r\n this.expandAllParentsAfterFilter(filtered);\r\n\r\n this.filteredData = filtered;\r\n this.data = filtered;\r\n this.rebuildRows();\r\n }\r\n\r\n private filterTreeByColumn(nodes: any[], col: any): any[] {\r\n const result = [];\r\n\r\n for (const node of nodes) {\r\n const children = node.array || [];\r\n\r\n const matches = this.matchesSingleColumn(node, col);\r\n\r\n if (matches) {\r\n // Node matches → keep node + all children\r\n result.push({\r\n ...node,\r\n array: structuredClone(children),\r\n });\r\n continue;\r\n }\r\n\r\n let filteredChildren = [];\r\n\r\n if (children.length > 0) {\r\n filteredChildren = this.filterTreeByColumn(children, col);\r\n }\r\n\r\n if (filteredChildren.length > 0) {\r\n result.push({\r\n ...node,\r\n array: filteredChildren,\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private matchesSingleColumn(row: any, col: any): boolean {\r\n const f1 = col.filters[0];\r\n const f2 = col.filters[1];\r\n\r\n const fieldValue = String(this.getValue(row, col.fieldName)).toLowerCase();\r\n\r\n const fv1 = f1?.filterValue?.toLowerCase() || '';\r\n const fv2 = f2?.filterValue?.toLowerCase() || '';\r\n\r\n const op1 = f1?.filterOperation || '';\r\n const op2 = f2?.filterOperation || '';\r\n const logic = col.filterLogic || 'AND';\r\n\r\n const hasF1 = fv1 !== '';\r\n const hasF2 = fv2 !== '';\r\n\r\n if (!hasF1 && !hasF2) return true; // No filter → always match\r\n\r\n const m1 = hasF1\r\n ? this.evaluateTextFilterCondition(op1, fieldValue, fv1)\r\n : false;\r\n const m2 = hasF2\r\n ? this.evaluateTextFilterCondition(op2, fieldValue, fv2)\r\n : false;\r\n\r\n if (hasF1 && !hasF2) return m1;\r\n if (!hasF1 && hasF2) return m2;\r\n\r\n return logic === 'AND' ? m1 && m2 : m1 || m2;\r\n }\r\n\r\n private expandAllParentsAfterFilter(tree: any[]): void {\r\n const walk = (nodes: any[]) => {\r\n for (const node of nodes) {\r\n const children = node.array || node.children;\r\n const key = this.getNodeKey(node);\r\n\r\n if (children && children.length > 0) {\r\n this.expandedKeys.add(key);\r\n walk(children);\r\n }\r\n }\r\n };\r\n\r\n walk(tree);\r\n }\r\n\r\n /**\r\n * Evaluate text filter condition\r\n */\r\n private 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 * Toggle column filter visibility\r\n */\r\n protected toggleFilter(\r\n col: CatsTreeTableColumn,\r\n index: number,\r\n event: MouseEvent,\r\n ): void {\r\n event.stopPropagation();\r\n this.activeFilterIndex = this.activeFilterIndex === index ? null : index;\r\n }\r\n\r\n /**\r\n * Reset filter for a column\r\n */\r\n protected resetFilter(col: CatsTreeTableColumn): void {\r\n if (col.filters) {\r\n col.filters.forEach((f) => (f.filterValue = ''));\r\n }\r\n if (col.selectedValues) col.selectedValues.clear();\r\n this.activeFilters.delete(col.fieldName);\r\n this.applyAllFilters();\r\n }\r\n\r\n /**\r\n * Start column resize\r\n */\r\n protected startResize(event: MouseEvent, index: number): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.isResizing = true;\r\n this.resizingColumnIndex = index;\r\n this.startX = event.clientX;\r\n this.startWidth = this.columns[index].width ?? 150;\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.renderer.setStyle(document.body, 'cursor', 'col-resize');\r\n this.renderer.setStyle(document.body, 'user-select', 'none');\r\n this.removeMouseMove = this.renderer.listen(\r\n 'document',\r\n 'mousemove',\r\n this.onMouseMove,\r\n );\r\n this.removeMouseUp = this.renderer.listen(\r\n 'document',\r\n 'mouseup',\r\n this.stopResize,\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Handle mouse move during resize\r\n */\r\n private onMouseMove = (event: MouseEvent): void => {\r\n if (this.resizingColumnIndex === null || this.rafId) return;\r\n\r\n this.rafId = requestAnimationFrame(() => {\r\n const movement = event.clientX - this.startX;\r\n const newWidth = this.startWidth + movement;\r\n const minWidth = this.columns[this.resizingColumnIndex!]?.minWidth ?? 50;\r\n\r\n if (newWidth > minWidth) {\r\n this.zone.run(() => {\r\n this.columns[this.resizingColumnIndex!].width = newWidth;\r\n // recalc pinned offsets in case a pinned column changed width\r\n this.updatePinnedOffsets();\r\n this.cd.markForCheck();\r\n });\r\n }\r\n\r\n this.rafId = null;\r\n });\r\n };\r\n\r\n /**\r\n * Stop column resize\r\n */\r\n private stopResize = (): void => {\r\n this.isResizing = false;\r\n this.resizingColumnIndex = null;\r\n this.removeMouseMove?.();\r\n this.removeMouseUp?.();\r\n this.renderer.removeStyle(document.body, 'cursor');\r\n this.renderer.removeStyle(document.body, 'user-select');\r\n if (this.rafId) {\r\n cancelAnimationFrame(this.rafId);\r\n this.rafId = null;\r\n }\r\n };\r\n\r\n /**\r\n * Handle column drag start\r\n */\r\n protected onDragStart(event: DragEvent, index: number): void {\r\n if (this.isResizing) return;\r\n this.draggedIndex = index;\r\n event.dataTransfer?.setData('text/plain', index.toString());\r\n }\r\n\r\n /**\r\n * Handle column drag over\r\n */\r\n protected onDragOver(event: DragEvent, index: number): void {\r\n event.preventDefault();\r\n this.isResizing = false;\r\n if (this.dragOverIndex !== index) this.dragOverIndex = index;\r\n }\r\n\r\n /**\r\n * Handle column drop\r\n */\r\n protected onDrop(event: DragEvent, index: number): void {\r\n event.preventDefault();\r\n if (this.draggedIndex === null) return;\r\n const draggedItem = this.columns[this.draggedIndex];\r\n this.columns.splice(this.draggedIndex, 1);\r\n this.columns.splice(index, 0, draggedItem);\r\n this.draggedIndex = null;\r\n this.dragOverIndex = null;\r\n this.updatePinnedOffsets();\r\n }\r\n\r\n /**\r\n * Handle drag end\r\n */\r\n protected onDragEnd(): void {\r\n this.draggedIndex = null;\r\n this.dragOverIndex = null;\r\n }\r\n\r\n /**\r\n * Pin column to left or right\r\n */\r\n protected pinColumn(\r\n col: CatsTreeTableColumn,\r\n index: number,\r\n direction: string,\r\n ): void {\r\n const key = col.colId || col.fieldName;\r\n this.pinActionClicked[key] = direction;\r\n\r\n col.leftPinned = direction === 'left';\r\n col.rightPinned = direction === 'right';\r\n\r\n // Reorder columns to mirror `cats-data-grid` behavior.\r\n const currentIndex = this.columns.findIndex(\r\n (c) => (c.colId || c.fieldName) === key,\r\n );\r\n if (currentIndex >= 0) {\r\n this.columns.splice(currentIndex, 1);\r\n } else if (index >= 0 && index < this.columns.length) {\r\n this.columns.splice(index, 1);\r\n }\r\n\r\n if (direction === 'left') {\r\n this.columns = [col, ...this.columns];\r\n } else if (direction === 'right') {\r\n this.columns = [...this.columns, col];\r\n } else {\r\n const leftPinned = this.columns.filter((c) => c.leftPinned);\r\n const rightPinned = this.columns.filter((c) => c.rightPinned);\r\n const middle = this.columns.filter(\r\n (c) => !c.leftPinned && !c.rightPinned,\r\n );\r\n\r\n const byKey = new Map<string, CatsTreeTableColumn>();\r\n for (const c of middle) byKey.set(c.colId || c.fieldName, c);\r\n byKey.set(key, col);\r\n\r\n const originalKeys = (this.originalColumns || []).map(\r\n (c) => c.colId || c.fieldName,\r\n );\r\n const orderedMiddle: CatsTreeTableColumn[] = [];\r\n for (const k of originalKeys) {\r\n const match = byKey.get(k);\r\n if (match) orderedMiddle.push(match);\r\n }\r\n for (const [k, v] of byKey.entries()) {\r\n if (!originalKeys.includes(k)) orderedMiddle.push(v);\r\n }\r\n\r\n this.columns = [...leftPinned, ...orderedMiddle, ...rightPinned];\r\n }\r\n\r\n this.updatePinnedOffsets();\r\n this.showPin = false;\r\n this.onClickOutside();\r\n }\r\n\r\n protected showPinActions(event: MouseEvent): void {\r\n event.stopPropagation();\r\n const parentEl = event.currentTarget as HTMLElement | null;\r\n this.showPin = true;\r\n\r\n // Flip the submenu to open left if it would overflow the viewport.\r\n setTimeout(() => {\r\n const menuEl = this.pinMenu?.nativeElement;\r\n if (!menuEl || !parentEl) return;\r\n\r\n const parentRect = parentEl.getBoundingClientRect();\r\n const menuWidth = menuEl.offsetWidth;\r\n const viewPortWidth = window.innerWidth;\r\n const x = parentRect.right;\r\n\r\n if (x + menuWidth > viewPortWidth) {\r\n menuEl.style.right = `${parentRect.width}px`;\r\n } else {\r\n menuEl.style.right = '';\r\n }\r\n });\r\n }\r\n\r\n protected hidePinActions(): void {\r\n this.showPin = false;\r\n }\r\n\r\n /**\r\n * Update pinned column offsets\r\n */\r\n protected updatePinnedOffsets(): void {\r\n let leftOffset = 0;\r\n let rightOffset = 0;\r\n\r\n this.columns.forEach((col) => {\r\n if (col.leftPinned) {\r\n col.leftOffset = leftOffset;\r\n leftOffset += col.width ?? 150;\r\n } else {\r\n col.leftOffset = undefined;\r\n }\r\n });\r\n\r\n [...this.columns].reverse().forEach((col) => {\r\n if (col.rightPinned) {\r\n col.rightOffset = rightOffset;\r\n rightOffset += col.width ?? 150;\r\n } else {\r\n col.rightOffset = undefined;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Filter set options based on search text\r\n */\r\n protected filterSetOptions(col: CatsTreeTableColumn, event: any): void {\r\n const text = event.target.value.toLowerCase();\r\n col.filteredOptions =\r\n col.options?.filter((option: any) =>\r\n String(option).toLowerCase().includes(text),\r\n ) || [];\r\n }\r\n\r\n /**\r\n * Toggle set filter option\r\n */\r\n protected toggleSetOption(\r\n col: CatsTreeTableColumn,\r\n option: any,\r\n event: any,\r\n ): void {\r\n if ((event.target as HTMLInputElement).checked) {\r\n col.selectedValues?.add(option);\r\n } else {\r\n col.selectedValues?.delete(option);\r\n }\r\n this.applyAllFilters();\r\n }\r\n\r\n /**\r\n * Toggle select all in set filter\r\n */\r\n protected toggleSelectAllSetFilter(\r\n col: CatsTreeTableColumn,\r\n event: any,\r\n ): void {\r\n col.selectedValues?.clear();\r\n if ((event.target as HTMLInputElement).checked) {\r\n col.options?.forEach((o: any) => col.selectedValues?.add(o));\r\n }\r\n this.applyAllFilters();\r\n }\r\n\r\n /**\r\n * Get column style\r\n */\r\n protected getStyle(col: CatsTreeTableColumn): any {\r\n const style: any = {\r\n width: `${col.width ?? 200}px`,\r\n minWidth: `${col.minWidth ?? 50}px`,\r\n };\r\n if (col.leftPinned) {\r\n style.position = 'sticky';\r\n style.left = `${col.leftOffset ?? 0}px`;\r\n style.zIndex = 1;\r\n } else if (col.rightPinned) {\r\n style.position = 'sticky';\r\n style.right = `${col.rightOffset ?? 0}px`;\r\n style.zIndex = 1;\r\n }\r\n return style;\r\n }\r\n\r\n /**\r\n * Toggle column visibility\r\n */\r\n protected changeActiveColSelection(\r\n event: Event,\r\n col: CatsTreeTableColumn,\r\n ): void {\r\n // Prevent deselection of locked headers\r\n if (col.headerLocked) {\r\n col.active = true;\r\n return;\r\n }\r\n col.active = (event.target as HTMLInputElement).checked;\r\n this.atLeastOneColumnChecked = this.columns.some((dt) => dt.active);\r\n // Update activeAll state\r\n this.activeAll = this.columns.every((dt) => dt.active);\r\n // this.saveColumnState();\r\n }\r\n\r\n /**\r\n * Compute minimum table width based on active column widths\r\n */\r\n protected getTableMinWidth(): number {\r\n return this.columns\r\n .filter((c) => c.active)\r\n .reduce((sum, c) => sum + (c.width ?? 150), 0);\r\n }\r\n\r\n /**\r\n * Select/deselect all columns\r\n */\r\n protected activeAllSelection(event: Event): void {\r\n const checked = (event.target as HTMLInputElement).checked;\r\n this.columns.forEach((col) => {\r\n if (col.headerLocked) {\r\n col.active = true;\r\n } else {\r\n col.active = checked;\r\n }\r\n });\r\n this.activeAll = this.columns.every((dt) => dt.active);\r\n this.atLeastOneColumnChecked = this.columns.some((dt) => dt.active);\r\n // this.saveColumnState();\r\n }\r\n\r\n /**\r\n * Hide settings\r\n */\r\n protected hideSettings(): void {\r\n this.onHideSettings.emit();\r\n }\r\n\r\n /**\r\n * Close all menus\r\n */\r\n protected onClickOutside(): void {\r\n this.activeFilterIndex = null;\r\n this.showPin = false;\r\n this.showPageSizeList = false;\r\n this.menuVisible = this.menuVisible.map(() => false);\r\n }\r\n\r\n /**\r\n * Open column menu\r\n */\r\n protected openMenu(\r\n event: MouseEvent,\r\n col: CatsTreeTableColumn,\r\n index: number,\r\n ): void {\r\n event.stopPropagation();\r\n this.activeFilterIndex = null;\r\n this.showPin = false;\r\n this.menuVisible = this.menuVisible.map(() => false);\r\n this.menuVisible[index] = true;\r\n }\r\n\r\n /**\r\n * Recursively select all children of a node\r\n */\r\n private selectAllChildren(node: T): void {\r\n const key = this.getNodeKey(node);\r\n this.selectedKeys.add(key);\r\n\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) {\r\n for (const child of children) {\r\n this.selectAllChildren(child);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Recursively deselect all children of a node\r\n */\r\n private deselectAllChildren(node: T): void {\r\n const key = this.getNodeKey(node);\r\n this.selectedKeys.delete(key);\r\n\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) {\r\n for (const child of children) {\r\n this.deselectAllChildren(child);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Recursively select all nodes in the tree\r\n */\r\n private selectAllNodes(nodes: T[]): void {\r\n for (const node of nodes) {\r\n this.selectAllChildren(node);\r\n }\r\n }\r\n\r\n /**\r\n * Recursively deselect all nodes in the tree\r\n */\r\n private deselectAllNodes(nodes: T[]): void {\r\n for (const node of nodes) {\r\n this.deselectAllChildren(node);\r\n }\r\n }\r\n\r\n // /**\r\n // * Check if all children of a node are selected\r\n // */\r\n // private areAllChildrenSelected(node: T): boolean {\r\n // const children = this.getChildren(node);\r\n // if (!Array.isArray(children) || children.length === 0) {\r\n // return true;\r\n // }\r\n\r\n // for (const child of children) {\r\n // const childKey = this.getNodeKey(child);\r\n // if (!this.selectedKeys.has(childKey)) {\r\n // return false;\r\n // }\r\n // }\r\n // return true;\r\n // }\r\n\r\n // /**\r\n // * Check if any children of a node are selected\r\n // */\r\n // private areAnyChildrenSelected(node: T): boolean {\r\n // const children = this.getChildren(node);\r\n // if (!Array.isArray(children) || children.length === 0) {\r\n // return false;\r\n // }\r\n\r\n // for (const child of children) {\r\n // const childKey = this.getNodeKey(child);\r\n // if (this.selectedKeys.has(childKey)) {\r\n // return true;\r\n // }\r\n // }\r\n // return false;\r\n // }\r\n\r\n /**\r\n * Update parent node selection based on children state\r\n */\r\n private updateParentSelection(parentPath: T[]): void {\r\n // Update parents bottom-up\r\n for (let i = parentPath.length - 1; i >= 0; i--) {\r\n const parent = parentPath[i];\r\n const children = this.getChildren(parent);\r\n\r\n if (!Array.isArray(children) || children.length === 0) {\r\n continue;\r\n }\r\n\r\n // Check if all children are selected\r\n const allSelected = children.every((child) =>\r\n this.selectedKeys.has(this.getNodeKey(child)),\r\n );\r\n const parentKey = this.getNodeKey(parent);\r\n\r\n if (allSelected) {\r\n // Auto-select parent if all children are selected\r\n this.selectedKeys.add(parentKey);\r\n }\r\n // Note: We don't auto-deselect parent when children are deselected\r\n // This allows manual parent selection independent of children\r\n }\r\n }\r\n\r\n /**\r\n * On header checkbox change - select all nodes hierarchically\r\n */\r\n protected onHeaderCheckboxChange(event: any): void {\r\n if (event.target.checked) {\r\n this.selectAllNodes(this.data || []);\r\n } else {\r\n this.deselectAllNodes(this.data || []);\r\n }\r\n this.selectionChange.emit({\r\n checked: event.target.checked,\r\n selectedNodes: this.data || [],\r\n });\r\n\r\n this.cd.markForCheck();\r\n }\r\n\r\n /**\r\n * On row checkbox change\r\n */\r\n protected onRowCheckboxChange(event: any, node: T): void {\r\n if (event.target.checked) {\r\n if (!this.selectedRow.includes(node)) {\r\n this.selectedRow.push(node);\r\n }\r\n } else {\r\n this.selectedRow = this.selectedRow.filter((r) => r !== node);\r\n }\r\n }\r\n\r\n /**\r\n * Check if all rows are selected\r\n */\r\n protected checkAllSelected(): boolean {\r\n return this.selectedRow.length === this.data.length && this.data.length > 0;\r\n }\r\n\r\n /**\r\n * Check if some rows are selected (indeterminate state)\r\n */\r\n protected checkIndeterminate(): boolean {\r\n return (\r\n this.selectedRow.length > 0 && this.selectedRow.length < this.data.length\r\n );\r\n }\r\n\r\n /**\r\n * Check if row is selected\r\n */\r\n protected isRowSelected(node: T): boolean {\r\n return this.selectedRow.includes(node);\r\n }\r\n\r\n /**\r\n * Check if a node has indeterminate selection state (some but not all children selected)\r\n */\r\n protected isNodeIndeterminate(node: T): boolean {\r\n const children = this.getChildren(node);\r\n if (!Array.isArray(children) || children.length === 0) {\r\n return false;\r\n }\r\n\r\n let selectedCount = 0;\r\n for (const child of children) {\r\n const childKey = this.getNodeKey(child);\r\n if (this.selectedKeys.has(childKey)) {\r\n selectedCount++;\r\n }\r\n }\r\n\r\n // Indeterminate if some but not all children are selected\r\n return selectedCount > 0 && selectedCount < children.length;\r\n }\r\n\r\n /**\r\n * Check header checkbox indeterminate state\r\n */\r\n protected checkHeaderIndeterminate(): boolean {\r\n if (this.selectedKeys.size === 0) return false;\r\n\r\n // Count total nodes in tree\r\n let totalNodes = 0;\r\n const countNodes = (nodes: T[]) => {\r\n for (const node of nodes) {\r\n totalNodes++;\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) {\r\n countNodes(children);\r\n }\r\n }\r\n };\r\n countNodes(this.data || []);\r\n\r\n return this.selectedKeys.size > 0 && this.selectedKeys.size < totalNodes;\r\n }\r\n\r\n /**\r\n * Check if header checkbox should be checked\r\n */\r\n protected checkHeaderChecked(): boolean {\r\n if (this.selectedKeys.size === 0) return false;\r\n\r\n // Count total nodes in tree\r\n let totalNodes = 0;\r\n const countNodes = (nodes: T[]) => {\r\n for (const node of nodes) {\r\n totalNodes++;\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) {\r\n countNodes(children);\r\n }\r\n }\r\n };\r\n countNodes(this.data || []);\r\n\r\n return this.selectedKeys.size === totalNodes;\r\n }\r\n\r\n protected toggle(node: T, level: number, path: T[]): void {\r\n const key = this.getNodeKey(node);\r\n if (this.expandedKeys.has(key)) {\r\n this.expandedKeys.delete(key);\r\n // Recursively collapse all children\r\n this.collapseAllChildren(node);\r\n this.nodeToggle.emit({ node, level, path, expanded: false });\r\n this.rebuildRows();\r\n return;\r\n }\r\n\r\n this.expandedKeys.add(key);\r\n this.originalExpandedKeys = new Set(this.expandedKeys);\r\n if (this.emitExpandAlways || this.getChildren(node) == null) {\r\n this.nodeToggle.emit({ node, level, path, expanded: true });\r\n }\r\n this.rebuildRows();\r\n }\r\n\r\n /**\r\n * Recursively collapse all children of a node\r\n */\r\n private collapseAllChildren(node: T): void {\r\n const children = this.getChildren(node);\r\n if (Array.isArray(children)) {\r\n for (const child of children) {\r\n const childKey = this.getNodeKey(child);\r\n this.expandedKeys.delete(childKey);\r\n this.collapseAllChildren(child);\r\n }\r\n }\r\n }\r\n\r\n protected isExpanded(node: T): boolean {\r\n return this.expandedKeys.has(this.getNodeKey(node));\r\n }\r\n\r\n protected onCheckboxChange(\r\n node: T,\r\n level: number,\r\n path: T[],\r\n checked: boolean,\r\n ): void {\r\n const key = this.getNodeKey(node);\r\n\r\n if (checked) {\r\n // When node is checked, select all its children recursively\r\n this.selectAllChildren(node);\r\n\r\n // Auto-select all parents if all their children are selected\r\n this.updateParentSelection(path);\r\n } else {\r\n // When node is unchecked, deselect all its children recursively\r\n this.deselectAllChildren(node);\r\n }\r\n\r\n this.selectionChange.emit({\r\n node,\r\n level,\r\n path,\r\n checked,\r\n selectedNodes: this.getSelectedNodes(),\r\n });\r\n\r\n this.cd.markForCheck();\r\n }\r\n\r\n protected isChecked(node: T): boolean {\r\n return this.selectedKeys.has(this.getNodeKey(node));\r\n }\r\n\r\n protected onLinkClicked(\r\n e: MouseEvent,\r\n node: T,\r\n level: number,\r\n path: T[],\r\n col: CatsTreeTableColumn,\r\n ): void {\r\n // Timer-based single/double click logic\r\n if (this.linkClickTimer) {\r\n clearTimeout(this.linkClickTimer);\r\n this.linkClickTimer = null;\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.linkClickTimer = setTimeout(() => {\r\n this.linkClick.emit({\r\n node,\r\n level,\r\n path,\r\n url: this.linkResolver(node, level, path),\r\n col,\r\n });\r\n this.linkClickTimer = null;\r\n }, this.linkClickDelay);\r\n }\r\n\r\n protected onLinkDoubleClicked(\r\n e: MouseEvent,\r\n node: T,\r\n level: number,\r\n path: T[],\r\n col: CatsTreeTableColumn,\r\n ): void {\r\n // Cancel single click timer and emit double click\r\n if (this.linkClickTimer) {\r\n clearTimeout(this.linkClickTimer);\r\n this.linkClickTimer = null;\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.linkDoubleClick.emit({\r\n node,\r\n level,\r\n path,\r\n url: this.linkResolver(node, level, path),\r\n col,\r\n });\r\n }\r\n\r\n protected resolveIconSrc(icon: string | null): string | null {\r\n if (!icon) return null;\r\n if (\r\n icon.includes('/') ||\r\n icon.startsWith('http://') ||\r\n icon.startsWith('https://')\r\n ) {\r\n return icon;\r\n }\r\n return `${this.iconBasePath}/${icon}`;\r\n }\r\n\r\n protected getValue(node: T, fieldPath: string): any {\r\n if (!fieldPath) return '';\r\n const parts = fieldPath.split('.');\r\n let cur: any = node as any;\r\n for (const part of parts) {\r\n if (cur == null || typeof cur !== 'object') return '';\r\n cur = cur?.[part];\r\n }\r\n return cur ?? '';\r\n }\r\n\r\n protected isNodeRow(row: RowView<T>): boolean {\r\n return row.kind === 'node';\r\n }\r\n\r\n protected rowOptions(row: RowView<T>): CatsTreeRowOptions {\r\n return this.rowOptionsResolver(row.node, row.level, row.path) || {};\r\n }\r\n\r\n protected showToggleFor(row: RowView<T>): boolean {\r\n const opts = this.rowOptions(row);\r\n if (opts.showToggle === false) return false;\r\n return this.isExpandable(row.node, row.level, row.path);\r\n }\r\n\r\n protected showCheckboxFor(row: RowView<T>): boolean {\r\n const opts = this.rowOptions(row);\r\n if (opts.showCheckbox != null) return !!opts.showCheckbox;\r\n return this.showCheckbox;\r\n }\r\n\r\n protected showNodeIconFor(row: RowView<T>): boolean {\r\n const opts = this.rowOptions(row);\r\n if (opts.showNodeIcon != null) return !!opts.showNodeIcon;\r\n return this.showNodeIcon;\r\n }\r\n\r\n protected showLinkFor(row: RowView<T>): boolean {\r\n const opts = this.rowOptions(row);\r\n if (opts.showLink != null) return !!opts.showLink;\r\n return this.linkResolver(row.node, row.level, row.path) != null;\r\n }\r\n\r\n protected isDisabledRow(row: RowView<T>): boolean {\r\n return !!this.rowOptions(row)?.disabled;\r\n }\r\n\r\n protected labelFor(row: RowView<T>): any {\r\n return this.getValue(row.node, this.labelField);\r\n }\r\n\r\n protected toggleIconFor(row: RowView<T>): string {\r\n if (this.isExpanded(row.node)) {\r\n }\r\n return this.isExpanded(row.node) ? this.collapseIcon : this.expandIcon;\r\n }\r\n\r\n protected nodeIconFor(row: RowView<T>): string | null {\r\n return this.nodeIconResolver(\r\n row.node,\r\n row.level,\r\n row.path,\r\n this.isExpanded(row.node),\r\n );\r\n }\r\n\r\n protected linkUrlFor(row: RowView<T>): string | null {\r\n return this.linkResolver(row.node, row.level, row.path);\r\n }\r\n\r\n /**\r\n * Set page count based on total records and page size\r\n */\r\n protected setPageCount(): void {\r\n if (this.totalRecords === 0) {\r\n this.pageDetails.totalPages = 1;\r\n } else {\r\n this.pageDetails.totalPages = Math.ceil(\r\n this.totalRecords / this.pageDetails.pageSize,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * On page size changed\r\n */\r\n protected 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 * On first button click\r\n */\r\n protected onBtFirstClick(): void {\r\n this.pageDetails.currentPage = 1;\r\n this.recordsToShow.min = 0;\r\n this.recordsToShow.max = 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 * On previous button click\r\n */\r\n protected 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 * On next button click\r\n */\r\n protected 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 * On last button click\r\n */\r\n protected onBtLastClick(): void {\r\n this.pageDetails.currentPage = this.pageDetails.totalPages;\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 * Go to selected page\r\n */\r\n protected 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 reset table configuration\r\n * @author Tarun Kumar\r\n * @param none\r\n * @returns void\r\n */\r\n resetPagination(): 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 = this.pageDetails.pageSize;\r\n this.setPageCount();\r\n }\r\n\r\n /**\r\n * Convert to number\r\n */\r\n protected convertToNumber(val: any): number {\r\n return parseInt(val);\r\n }\r\n\r\n private getChildren(node: T): any[] | null | undefined {\r\n return (node as any)?.[this.childrenField];\r\n }\r\n\r\n private rebuildRows(): void {\r\n const next: RowView<T>[] = [];\r\n for (const root of this.data || []) {\r\n this.walk(root, 0, [], next);\r\n }\r\n this.rows = next;\r\n }\r\n\r\n private walk(\r\n node: T,\r\n level: number,\r\n parentPath: T[],\r\n out: RowView<T>[],\r\n ): void {\r\n const path = [...parentPath, node];\r\n out.push({\r\n kind: 'node',\r\n node,\r\n level,\r\n path,\r\n trackKey: this.getNodeKey(node),\r\n });\r\n\r\n if (!this.isExpanded(node) || !this.isExpandable(node, level, path)) return;\r\n\r\n const children = this.getChildren(node);\r\n if (children == null) {\r\n out.push({\r\n kind: 'loading',\r\n node,\r\n level: level + 1,\r\n path,\r\n trackKey: `${this.getNodeKey(node)}::loading`,\r\n } as any);\r\n return;\r\n }\r\n\r\n if (!Array.isArray(children) || children.length === 0) {\r\n out.push({\r\n kind: 'no-data',\r\n node,\r\n level: level + 1,\r\n path,\r\n trackKey: `${this.getNodeKey(node)}::no-data`,\r\n } as any);\r\n return;\r\n }\r\n\r\n for (const child of children) {\r\n this.walk(child, level + 1, path, out);\r\n }\r\n }\r\n\r\n private getNodeKey(node: T): string | number {\r\n const anyNode = node as any;\r\n // const direct = anyNode?.[this.idField];\r\n const direct = anyNode?.[this.rowId];\r\n if (direct != null) return direct;\r\n if (typeof node === 'object' && node != null) {\r\n const existing = this.fallbackKey.get(node as any);\r\n if (existing != null) return existing;\r\n const next = this.fallbackSeq++;\r\n this.fallbackKey.set(node as any, next);\r\n return next;\r\n }\r\n return String(node);\r\n }\r\n\r\n private getSelectedNodes(): T[] {\r\n const selected: T[] = [];\r\n const visit = (nodes: T[]) => {\r\n for (const n of nodes) {\r\n if (this.selectedKeys.has(this.getNodeKey(n))) selected.push(n);\r\n const children = this.getChildren(n);\r\n if (Array.isArray(children) && children.length > 0)\r\n visit(children as T[]);\r\n }\r\n };\r\n visit(this.data || []);\r\n return selected;\r\n }\r\n\r\n /**\r\n * Autosize column to fit content\r\n */\r\n protected autosizeColumn(col: CatsTreeTableColumn, index: number): void {\r\n const min = col.minWidth ?? 50;\r\n const max = col.maxWidth ?? 500;\r\n const estimatedWidth = Math.min(Math.max(150, min), max);\r\n col.width = estimatedWidth;\r\n this.updatePinnedOffsets();\r\n }\r\n\r\n /**\r\n * Autosize all columns\r\n */\r\n protected autosizeAllColumns(): void {\r\n this.columns.forEach((col) => {\r\n const min = col.minWidth ?? 50;\r\n const max = col.maxWidth ?? 500;\r\n const estimatedWidth = Math.min(Math.max(150, min), max);\r\n col.width = estimatedWidth;\r\n });\r\n this.updatePinnedOffsets();\r\n }\r\n\r\n /**\r\n * Group by column\r\n */\r\n protected groupByColumn(col: CatsTreeTableColumn, index: number): void {\r\n // Emit event or handle grouping logic\r\n }\r\n\r\n /**\r\n * Show column chooser\r\n */\r\n protected showColumnChooser(colIdx: number): void {\r\n // Toggle settings to show column chooser\r\n this.onClickOutside();\r\n }\r\n\r\n /**\r\n * Reset columns to original state\r\n */\r\n protected resetColumns(): void {\r\n if (this.originalColumns.length > 0) {\r\n this.columns = structuredClone(this.originalColumns);\r\n this.rebuildRows();\r\n }\r\n }\r\n\r\n /**\r\n * Save column state\r\n */\r\n private saveColumnState(): void {\r\n if (this.originalColumns.length === 0) {\r\n this.originalColumns = JSON.parse(JSON.stringify(this.columns));\r\n }\r\n }\r\n\r\n /**\r\n * Returns filtered hierarchy based on column filters with AND/OR logic, including number filter support\r\n */\r\n getFilteredHierarchy(): T[] {\r\n const filterColumns = this.columns.filter(\r\n (col) =>\r\n col.filterable &&\r\n (col.filters?.some((f) => f.filterValue) ||\r\n (col.filterType === 'set' &&\r\n col.selectedValues &&\r\n col.selectedValues.size > 0)),\r\n );\r\n if (filterColumns.length === 0)\r\n return structuredClone(this.originalRowData);\r\n\r\n const filterFn = (node: T): boolean => {\r\n return filterColumns.every((col) => {\r\n let value = this.getValue(node, col.fieldName);\r\n if (col.filterType === 'set') {\r\n return col.selectedValues?.has(value);\r\n } else if (col.filterType === 'number') {\r\n const conds =\r\n col.filters?.filter(\r\n (f) =>\r\n f.filterValue !== '' &&\r\n f.filterValue !== null &&\r\n f.filterValue !== undefined,\r\n ) || [];\r\n if (conds.length === 0) return true;\r\n if (col.filterLogic === 'AND') {\r\n return conds.every((f) =>\r\n this.evaluateNumberFilterCondition(\r\n f.filterOperation,\r\n value,\r\n f.filterValue,\r\n ),\r\n );\r\n } else {\r\n return conds.some((f) =>\r\n this.evaluateNumberFilterCondition(\r\n f.filterOperation,\r\n value,\r\n f.filterValue,\r\n ),\r\n );\r\n }\r\n } else {\r\n const conds = col.filters?.filter((f) => f.filterValue) || [];\r\n if (conds.length === 0) return true;\r\n if (col.filterLogic === 'AND') {\r\n return conds.every((f) =>\r\n this.evaluateTextFilterCondition(\r\n f.filterOperation,\r\n String(value).toLowerCase(),\r\n String(f.filterValue).toLowerCase(),\r\n ),\r\n );\r\n } else {\r\n return conds.some((f) =>\r\n this.evaluateTextFilterCondition(\r\n f.filterOperation,\r\n String(value).toLowerCase(),\r\n String(f.filterValue).toLowerCase(),\r\n ),\r\n );\r\n }\r\n }\r\n });\r\n };\r\n\r\n const filterTree = (nodes: T[]): T[] => {\r\n const result: T[] = [];\r\n for (const node of nodes) {\r\n const children = this.getChildren(node);\r\n let filteredChildren: T[] = [];\r\n if (Array.isArray(children)) {\r\n filteredChildren = filterTree(children);\r\n }\r\n if (filterFn(node) || filteredChildren.length > 0) {\r\n const clone: any = { ...node };\r\n if (Array.isArray(children)) {\r\n clone[this.childrenField] = filteredChildren;\r\n }\r\n result.push(clone);\r\n }\r\n }\r\n return result;\r\n };\r\n return filterTree(this.originalRowData);\r\n }\r\n\r\n /**\r\n * Evaluate number filter condition\r\n */\r\n private evaluateNumberFilterCondition(\r\n type: string,\r\n fieldValue: any,\r\n value: any,\r\n ): boolean {\r\n const numField = Number(fieldValue);\r\n const numValue = Number(value);\r\n if (isNaN(numField) || isNaN(numValue)) return false;\r\n switch (type) {\r\n case '=':\r\n case 'equals':\r\n return numField === numValue;\r\n case '>':\r\n return numField > numValue;\r\n case '<':\r\n return numField < numValue;\r\n case '>=':\r\n return numField >= numValue;\r\n case '<=':\r\n return numField <= numValue;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n dateTimeSelected(date: any) {\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 * 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","<div class=\"tableArea\" #table [class.is-resizing]=\"isResizing\">\r\n <!-- Settings Panel for Column Selection -->\r\n @if (settingsRequired && settingsClicked) {\r\n <div\r\n class=\"setting_options\"\r\n appOutsideClick\r\n (clickOutside)=\"hideSettings()\"\r\n >\r\n <div class=\"column_header\">Select Headers</div>\r\n <div class=\"checkbox_container\">\r\n <input\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"activeAll\"\r\n (change)=\"activeAllSelection($event)\"\r\n />\r\n <span>Select All</span>\r\n </div>\r\n\r\n <div class=\"item_container\" id=\"table_scroll\">\r\n @for (col of columns; track col.fieldName) {\r\n <div class=\"column_item checkbox_container\">\r\n <input\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"col.active\"\r\n [disabled]=\"col.headerLocked\"\r\n (change)=\"changeActiveColSelection($event, col)\"\r\n />\r\n <span>{{ col.header || col.fieldName | titlecase }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Main Table Wrapper -->\r\n <div\r\n class=\"table_wrapper global\"\r\n id=\"table_scroll\"\r\n [class.no-horizontal-scroll]=\"!rows || rows.length === 0\"\r\n #parent\r\n >\r\n <div class=\"table-inner-wrapper\">\r\n <table cellspacing=\"0\" cellpadding=\"0\">\r\n <thead class=\"sticky-top\">\r\n @if (columns.length === 0 && showSkeleton) {\r\n <tr>\r\n @for (c of skeletonCols; track $index) {\r\n <th>\r\n <div class=\"th_wraper\">\r\n <div class=\"line\"></div>\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n } @else {\r\n <tr>\r\n <!-- Checkbox header column -->\r\n @if (checkBoxSelection && atLeastOneColumnChecked) {\r\n <th style=\"min-width: 50px; width: 50px; max-width: 50px\">\r\n <div class=\"th_wraper\">\r\n <div class=\"checkbox_container\">\r\n <input\r\n class=\"pointer custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"checkHeaderChecked()\"\r\n [indeterminate]=\"checkHeaderIndeterminate()\"\r\n (change)=\"onHeaderCheckboxChange($event)\"\r\n />\r\n </div>\r\n <div class=\"filter_three_dot_wrapper\">\r\n <span class=\"resize-handle default_cursor\"> | </span>\r\n </div>\r\n </div>\r\n </th>\r\n }\r\n\r\n <!-- Column Headers -->\r\n @for (col of columns; track col.fieldName; let colIdx = $index) {\r\n @if (col.active !== false) {\r\n <th\r\n [ngStyle]=\"getStyle(col)\"\r\n [attr.data-col-idx]=\"colIdx\"\r\n [ngClass]=\"{\r\n 'drag-over': dragOverIndex === colIdx,\r\n pinned_column: col.leftPinned || col.rightPinned,\r\n }\"\r\n (mouseenter)=\"showMoveIcon[colIdx] = true\"\r\n (mouseleave)=\"showMoveIcon[colIdx] = false\"\r\n >\r\n <div class=\"th_wraper\">\r\n <!-- Sortable column header -->\r\n <div\r\n class=\"text_wrapper\"\r\n [ngClass]=\"{ sortable: col.sortable }\"\r\n (click)=\"onSortingRowData(colIdx, col)\"\r\n >\r\n @if (showMoveIcon[colIdx] && col.sortable) {\r\n <img\r\n src=\"images/t-move.svg\"\r\n class=\"move-icon\"\r\n [draggable]=\"!isResizing\"\r\n (dragstart)=\"onDragStart($event, colIdx)\"\r\n (dragend)=\"onDragEnd()\"\r\n />\r\n }\r\n <span class=\"ellipsis headerName\">{{\r\n col.header || col.fieldName\r\n }}</span>\r\n\r\n <!-- Sorting indicator -->\r\n @if (\r\n sortingRequired &&\r\n sortingColumnIndex === colIdx &&\r\n col.sortable\r\n ) {\r\n <span class=\"sorting_icon\">\r\n @if (sortingType[colIdx] === \"asc\") {\r\n <img\r\n src=\"images/t-arrow-up.svg\"\r\n alt=\"Ascending\"\r\n />\r\n } @else if (sortingType[colIdx] === \"dsc\") {\r\n <img\r\n src=\"images/t-arrow-down.svg\"\r\n alt=\"Descending\"\r\n />\r\n }\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- Filter and Menu -->\r\n <div class=\"filter_three_dot_wrapper\">\r\n <!-- Filter Icon -->\r\n @if (filterRequired && col.filterable) {\r\n <div\r\n #trigger\r\n class=\"filters\"\r\n (click)=\"toggleFilter(col, colIdx, $event)\"\r\n >\r\n @if (activeFilters.has(col.fieldName)) {\r\n <img\r\n src=\"images/t-filter-applied.svg\"\r\n alt=\"Filter active\"\r\n class=\"filter-icon\"\r\n [draggable]=\"false\"\r\n (dragstart)=\"\r\n $event.preventDefault();\r\n $event.stopPropagation()\r\n \"\r\n />\r\n } @else {\r\n <img\r\n src=\"images/t-filter.svg\"\r\n alt=\"Filter\"\r\n class=\"filter-icon\"\r\n [draggable]=\"false\"\r\n (dragstart)=\"\r\n $event.preventDefault();\r\n $event.stopPropagation()\r\n \"\r\n />\r\n }\r\n\r\n <!-- Filter Dropdown -->\r\n @if (activeFilterIndex === $index) {\r\n <div class=\"filt_wrap\">\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 <lib-common-input\r\n [options]=\"filterOptions\"\r\n [selectedValue]=\"\r\n col.filters![0].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters![0].filterOperation =\r\n $event;\r\n applyAllFilters(col)\r\n \"\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)]=\"\r\n col.filters![0].filterValue\r\n \"\r\n (keyup)=\"applyAllFilters(col)\"\r\n />\r\n </div>\r\n\r\n @if (col.filters![0].filterValue) {\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\r\n value=\"AND\"\r\n id=\"{{ $index }}\"\r\n (change)=\"applyAllFilters(col)\"\r\n />\r\n <label [for]=\"$index\">AND</label>\r\n\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\r\n value=\"OR\"\r\n id=\"{{ $index + 1 }}\"\r\n (change)=\"applyAllFilters(col)\"\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]=\"\r\n col.filters![1].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters![1].filterOperation =\r\n $event;\r\n applyAllFilters(col)\r\n \"\r\n ></lib-common-input>\r\n <!-- <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.filters[1].filterValue\"\r\n placeholder=\"Filter…\"\r\n (keyup)=\"applyAllFilters(col)\"\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)]=\"\r\n col.filters![1].filterValue\r\n \"\r\n (keyup)=\"applyAllFilters(col)\"\r\n />\r\n </div>\r\n }\r\n }\r\n\r\n <!-- Number Filter -->\r\n @if (col.filterType === \"number\") {\r\n <lib-common-input\r\n [options]=\"numberFilterOptions\"\r\n [selectedValue]=\"\r\n col.filters![0].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters![0].filterOperation =\r\n $event;\r\n applyAllFilters(col)\r\n \"\r\n ></lib-common-input>\r\n\r\n <!-- <input\r\n type=\"number\"\r\n [(ngModel)]=\"col.filters[0].filterValue\"\r\n (input)=\"applyAllFilters(col)\"\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)]=\"\r\n col.filters![0].filterValue\r\n \"\r\n (input)=\"applyAllFilters(col)\"\r\n />\r\n </div>\r\n\r\n @if (col.filters![0].filterValue) {\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\r\n value=\"AND\"\r\n id=\"{{ $index }}\"\r\n (change)=\"applyAllFilters(col)\"\r\n />\r\n <label [for]=\"$index\">AND</label>\r\n\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\r\n value=\"OR\"\r\n id=\"{{ $index + 1 }}\"\r\n (change)=\"applyAllFilters(col)\"\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]=\"\r\n col.filters![1].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters![1].filterOperation =\r\n $event;\r\n applyAllFilters(col)\r\n \"\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)]=\"\r\n col.filters![1].filterValue\r\n \"\r\n (keyup)=\"applyAllFilters(col)\"\r\n />\r\n </div>\r\n <!-- <input\r\n type=\"text\"\r\n [(ngModel)]=\"col.filters[1].filterValue\"\r\n placeholder=\"Filter…\"\r\n (keyup)=\"applyAllFilters(col)\"\r\n /> -->\r\n }\r\n }\r\n\r\n <!-- DATE FILTER -->\r\n @if (col.filterType === \"date\") {\r\n <lib-common-input\r\n [options]=\"numberFilterOptions\"\r\n [selectedValue]=\"\r\n col.filters![0].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters![0].filterOperation =\r\n $event;\r\n applyAllFilters(col)\r\n \"\r\n ></lib-common-input>\r\n\r\n <!-- <input\r\n type=\"date\"\r\n [(ngModel)]=\"col.filters[0].filterValue\"\r\n (change)=\"applyAllFilters(col)\"\r\n /> -->\r\n <lib-common-calendar\r\n [dateConfig]=\"dateConfig\"\r\n [(ngModel)]=\"col.filters![0].filterValue\"\r\n [preSelectedValue]=\"\r\n col.filters![0].filterValue\r\n \"\r\n (dateTimeSelected)=\"\r\n dateTimeSelected($event)\r\n \"\r\n ></lib-common-calendar>\r\n\r\n @if (col.filters![0].filterValue) {\r\n <div class=\"logic-row radio_option\">\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\r\n value=\"AND\"\r\n id=\"{{ $index }}\"\r\n (change)=\"applyAllFilters(col)\"\r\n />\r\n <label [for]=\"$index\">AND</label>\r\n\r\n <input\r\n type=\"radio\"\r\n name=\"filterLogic{{ col.fieldName }}\"\r\n [(ngModel)]=\"col.filterLogic\"\r\n value=\"OR\"\r\n id=\"{{ $index + 1 }}\"\r\n (change)=\"applyAllFilters(col)\"\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]=\"\r\n col.filters![1].filterOperation\r\n \"\r\n placeholder=\"Select filter\"\r\n (valueChange)=\"\r\n col.filters![1].filterOperation =\r\n $event;\r\n applyAllFilters(col)\r\n \"\r\n ></lib-common-input>\r\n\r\n <lib-common-calendar\r\n [dateConfig]=\"dateConfig\"\r\n [(ngModel)]=\"\r\n col.filters![1].filterValue\r\n \"\r\n [preSelectedValue]=\"\r\n col.filters![1].filterValue\r\n \"\r\n (dateTimeSelected)=\"\r\n dateTimeSelected($event)\r\n \"\r\n ></lib-common-calendar>\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 <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 class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"isAllSelected(col)\"\r\n (change)=\"\r\n toggleSelectAll(col, $event)\r\n \"\r\n />\r\n (Select All)\r\n </label>\r\n <div\r\n class=\"set_options\"\r\n id=\"table_scroll\"\r\n >\r\n @for (\r\n opt of col.filteredOptions;\r\n track $index\r\n ) {\r\n <label class=\"checkbox_container\">\r\n <input\r\n class=\"custom_check_box\"\r\n type=\"checkbox\"\r\n [checked]=\"\r\n col.selectedValues!.has(opt)\r\n \"\r\n (change)=\"\r\n toggleSetOption(\r\n col,\r\n opt,\r\n $event\r\n )\r\n \"\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 </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Three dots menu-->\r\n <div #triggerColMenu>\r\n @if (threeDotsMenuRequired) {\r\n <div\r\n class=\"three-dots\"\r\n (click)=\"openMenu($event, col, colIdx)\"\r\n >\r\n <img\r\n src=\"images/t-more-vertical.svg\"\r\n alt=\"Menu\"\r\n [draggable]=\"false\"\r\n (dragstart)=\"\r\n $event.preventDefault();\r\n $event.stopPropagation()\r\n \"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Column Resize Handle -->\r\n <span\r\n class=\"resize-handle\"\r\n (mousedown)=\"startResize($event, colIdx)\"\r\n >\r\n |\r\n </span>\r\n </div>\r\n </div>\r\n\r\n @if (menuVisible[colIdx]) {\r\n <div\r\n #colActionMenu\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=\"table_scroll\">\r\n <!-- Sort Ascending -->\r\n @if (\r\n sortingType[colIdx] === \"dsc\" ||\r\n !sortingType[colIdx]\r\n ) {\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"onSort(col, 'asc', colIdx)\"\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 }\r\n\r\n <!-- Sort Descending -->\r\n @if (\r\n sortingType[colIdx] === \"asc\" ||\r\n !sortingType[colIdx]\r\n ) {\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"onSort(col, 'dsc', colIdx)\"\r\n >\r\n <div class=\"left_item\">\r\n <img src=\"images/arrow-down.svg\" alt=\"\" />\r\n <span class=\"text\">Sort Descending</span>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Clear Sort -->\r\n @if (\r\n sortingType[colIdx] === \"asc\" ||\r\n sortingType[colIdx] === \"dsc\"\r\n ) {\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"onSort(col, '', colIdx)\"\r\n >\r\n <div class=\"left_item\">\r\n <img src=\"images/trash-2.svg\" alt=\"\" />\r\n <span class=\"text\">Clear Sort</span>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"divder\"></div>\r\n\r\n <!-- Pin Column -->\r\n <div\r\n class=\"right_click_item\"\r\n (mouseenter)=\"showPinActions($event)\"\r\n (mouseleave)=\"hidePinActions()\"\r\n >\r\n <div class=\"left_item\">\r\n <img src=\"images/pin.svg\" alt=\"\" />\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\" alt=\"\" />\r\n @if (showPin) {\r\n <div class=\"second_dropdown\" #pinMenu>\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"pinColumn(col, colIdx, 'none')\"\r\n >\r\n <div class=\"left_item\">\r\n @if (\r\n ((col.colId &&\r\n pinActionClicked[col.colId]) ??\r\n \"none\") === \"none\"\r\n ) {\r\n <img src=\"images/check.svg\" alt=\"\" />\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 class=\"right_click_item\"\r\n (click)=\"pinColumn(col, colIdx, 'left')\"\r\n >\r\n <div class=\"left_item\">\r\n @if (\r\n pinActionClicked[\r\n col.colId || col.fieldName\r\n ] === \"left\"\r\n ) {\r\n <img src=\"images/check.svg\" alt=\"\" />\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 class=\"right_click_item\"\r\n (click)=\"pinColumn(col, colIdx, 'right')\"\r\n >\r\n <div class=\"left_item\">\r\n @if (\r\n pinActionClicked[\r\n col.colId || col.fieldName\r\n ] === \"right\"\r\n ) {\r\n <img src=\"images/check.svg\" alt=\"\" />\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 <!-- Autosize This Column -->\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"autosizeColumn(col, colIdx)\"\r\n >\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\r\n <!-- Autosize All Columns -->\r\n <div\r\n class=\"right_click_item\"\r\n (click)=\"autosizeAllColumns()\"\r\n >\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\r\n <!-- <div class=\"divder\"></div> -->\r\n\r\n <!-- Group by Column -->\r\n <!-- <div class=\"right_click_item\" (click)=\"groupByColumn(col, colIdx)\">\r\n\t <div class=\"left_item\">\r\n\t <img src=\"\" alt=\"\" />\r\n\t <span class=\"text\">Group by {{ col.header || col.fieldName }}</span>\r\n\t </div>\r\n\t </div> -->\r\n\r\n <!-- Choose Columns -->\r\n <!-- <div class=\"right_click_item\" (click)=\"showColumnChooser(colIdx)\">\r\n\t <div class=\"left_item\">\r\n\t <img src=\"\" alt=\"\" />\r\n\t <span class=\"text\">Choose Columns</span>\r\n\t </div>\r\n\t </div> -->\r\n\r\n <!-- Reset Columns -->\r\n <!-- <div class=\"right_click_item\">\r\n\t <div class=\"left_item\">\r\n\t <img src=\"\" alt=\"\" />\r\n\t <span class=\"text\">Reset Columns</span>\r\n\t </div>\r\n\t </div> -->\r\n </div>\r\n </div>\r\n }\r\n </th>\r\n }\r\n }\r\n </tr>\r\n }\r\n </thead>\r\n\r\n <tbody>\r\n @if (rows.length === 0 && showSkeleton) {\r\n @for (r of skeletonRows; track $index) {\r\n <tr>\r\n @for (c of skeletonCols; track $index) {\r\n <td>\r\n <div class=\"line\"></div>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n } @else {\r\n @for (row of rows; track row.trackKey) {\r\n @if (row.kind === \"node\") {\r\n <tr [class.disabled]=\"isDisabledRow(row)\">\r\n <!-- Checkbox column -->\r\n @if (checkBoxSelection && atLeastOneColumnChecked) {\r\n <td style=\"min-width: 50px; max-width: 50px\">\r\n @if (checkboxSelectionType === \"multiple\") {\r\n @if (showCheckboxFor(row)) {\r\n <span class=\"checkbox_container\">\r\n <input\r\n type=\"checkbox\"\r\n [disabled]=\"isDisabledRow(row)\"\r\n [indeterminate]=\"isNodeIndeterminate(row.node)\"\r\n [checked]=\"isChecked(row.node)\"\r\n (change)=\"\r\n onCheckboxChange(\r\n row.node,\r\n row.level,\r\n row.path,\r\n $any($event.target).checked\r\n )\r\n \"\r\n />\r\n <label [for]=\"'row_' + row.trackKey\"></label>\r\n </span>\r\n }\r\n } @else {\r\n <span class=\"radio_option\">\r\n <input\r\n type=\"radio\"\r\n [name]=\"'row_' + row.trackKey\"\r\n [checked]=\"isChecked(row.node)\"\r\n (change)=\"\r\n onCheckboxChange(\r\n row.node,\r\n row.level,\r\n row.path,\r\n $any($event.target).checked\r\n )\r\n \"\r\n />\r\n <label [for]=\"'row_' + row.trackKey\"></label>\r\n </span>\r\n }\r\n </td>\r\n }\r\n\r\n <!-- Data columns -->\r\n @for (\r\n col of columns;\r\n track col.fieldName;\r\n let colIndex = $index\r\n ) {\r\n @if (col.active !== false) {\r\n <td\r\n [ngStyle]=\"getStyle(col)\"\r\n [ngClass]=\"[\r\n col.leftPinned || col.rightPinned\r\n ? 'pinned_column'\r\n : '',\r\n ]\"\r\n class=\"table_cell\"\r\n >\r\n @if (col.fieldName === treeColumn.fieldName) {\r\n @if (!col?.cellRenderer) {\r\n <div\r\n class=\"tree_cell\"\r\n [style.padding-left.px]=\"row.level * indentPx\"\r\n >\r\n @if (showToggleFor(row)) {\r\n <button\r\n class=\"toggle_btn\"\r\n type=\"button\"\r\n [disabled]=\"isDisabledRow(row)\"\r\n (click)=\"\r\n toggle(row.node, row.level, row.path)\r\n \"\r\n >\r\n <img\r\n [src]=\"resolveIconSrc(toggleIconFor(row))\"\r\n alt=\"\"\r\n />\r\n </button>\r\n } @else {\r\n <span class=\"toggle_spacer\"></span>\r\n }\r\n\r\n <!-- @if (showCheckboxFor(row)) {\r\n <input\r\n type=\"checkbox\"\r\n [disabled]=\"isDisabledRow(row)\"\r\n [checked]=\"isChecked(row.node)\"\r\n (change)=\"\r\n onCheckboxChange(\r\n row.node,\r\n row.level,\r\n row.path,\r\n ($any($event.target).checked)\r\n )\r\n \"\r\n />\r\n } -->\r\n\r\n @if (showNodeIconFor(row)) {\r\n @if (nodeIconFor(row); as icon) {\r\n <img\r\n class=\"node_icon\"\r\n [src]=\"resolveIconSrc(icon)\"\r\n alt=\"\"\r\n />\r\n }\r\n }\r\n\r\n @if (\r\n showLinkFor(row) && linkUrlFor(row);\r\n as url\r\n ) {\r\n <a\r\n class=\"node_link ellipsis\"\r\n [appTooltip]=\"labelFor(row) || 'N/A'\"\r\n tooltipPosition=\"adaptive\"\r\n [tooltipParentContainer]=\"parent\"\r\n (click)=\"\r\n onLinkClicked(\r\n $event,\r\n row.node,\r\n row.level,\r\n row.path,\r\n col\r\n )\r\n \"\r\n (dblclick)=\"\r\n onLinkDoubleClicked(\r\n $event,\r\n row.node,\r\n row.level,\r\n row.path,\r\n col\r\n )\r\n \"\r\n >\r\n {{ labelFor(row) || \"N/A\" }}\r\n </a>\r\n } @else {\r\n <span\r\n class=\"node_label\"\r\n [appTooltip]=\"labelFor(row) || 'N/A'\"\r\n tooltipPosition=\"adaptive\"\r\n [tooltipParentContainer]=\"parent\"\r\n >{{ labelFor(row) || \"N/A\" }}</span\r\n >\r\n }\r\n </div>\r\n } @else {\r\n <div\r\n [rowParam]=\"row.node\"\r\n [col]=\"col\"\r\n [api]=\"tableOptions\"\r\n [currentValue]=\"getValue(row.node, col.fieldName)\"\r\n appRendererParser\r\n [style.padding-left.px]=\"row.level * indentPx\"\r\n ></div>\r\n }\r\n } @else {\r\n <div class=\"col_wrapper\">\r\n @if (!col?.cellRenderer) {\r\n <span\r\n class=\"ellipsis\"\r\n [appTooltip]=\"\r\n getValue(row.node, col.fieldName) || 'N/A'\r\n \"\r\n tooltipPosition=\"adaptive\"\r\n [tooltipParentContainer]=\"parent\"\r\n >\r\n {{\r\n getValue(row.node, col.fieldName) || \"N/A\"\r\n }}</span\r\n >\r\n } @else {\r\n <div\r\n [rowParam]=\"row.node\"\r\n [col]=\"col\"\r\n [api]=\"tableOptions\"\r\n [currentValue]=\"\r\n getValue(row.node, col.fieldName)\r\n \"\r\n appRendererParser\r\n ></div>\r\n }\r\n </div>\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n } @else if (row.kind === \"loading\") {\r\n <tr class=\"meta_row\">\r\n <td\r\n [attr.colspan]=\"\r\n columns.length + (checkBoxSelection ? 1 : 0)\r\n \"\r\n >\r\n <div\r\n class=\"meta_cell\"\r\n [style.padding-left.px]=\"row.level * indentPx\"\r\n >\r\n {{ loadingText }}\r\n </div>\r\n </td>\r\n </tr>\r\n } @else if (row.kind === \"no-data\") {\r\n <tr class=\"meta_row\">\r\n <td\r\n [attr.colspan]=\"\r\n columns.length + (checkBoxSelection ? 1 : 0)\r\n \"\r\n >\r\n <div\r\n class=\"meta_cell\"\r\n [style.padding-left.px]=\"row.level * indentPx\"\r\n >\r\n {{ noDataText }}\r\n </div>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n\r\n @if (!rows || rows.length === 0) {\r\n <div class=\"empty_overlay\">\r\n <div class=\"empty_content\">\r\n <span>{{ noDataText }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Pagination -->\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\r\n class=\"select_option\"\r\n appOutsideClick\r\n (clickOutside)=\"onClickOutside()\"\r\n >\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 |\r\n {{ totalRecords > 0 ? convertToNumber(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 <button\r\n class=\"outlined_btn first_btn\"\r\n type=\"button\"\r\n (click)=\"onBtFirstClick()\"\r\n [ngClass]=\"pageDetails.currentPage > 1 ? '' : 'disable_btn'\"\r\n >\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\r\n ? ''\r\n : '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 <button\r\n class=\"outlined_btn last_btn\"\r\n type=\"button\"\r\n (click)=\"onBtLastClick()\"\r\n [ngClass]=\"\r\n pageDetails.currentPage < pageDetails.totalPages\r\n ? ''\r\n : 'disable_btn'\r\n \"\r\n >\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 * 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\nexport * from './lib/renderers/common-renderer/common-renderer.component';\r\nexport * from './lib/common-components/common-tree-table/common-tree-table.component';\r\nexport * from './lib/directives/tooltip.directive';\r\nexport * from './lib/common-components/tooltip/tooltip.component';\r\nexport * from './lib/directives/adaptive-position.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}