@servicemind.tis/tis-smart-table-viewer 2.3.5 → 2.3.6

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":"servicemind.tis-tis-smart-table-viewer.mjs","sources":["../../../projects/tis-smart-table-viewer/src/lib/tis-smart-table-viewer.service.ts","../../../projects/tis-smart-table-viewer/src/lib/datasources/api.datasource.ts","../../../projects/tis-smart-table-viewer/src/lib/services/api.service.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/storage-helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/timeout-manager.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/date-time.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/query-params.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/filter-display.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/validation.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/collection.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/url.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/directives/scrolling/scrolling.directive.ts","../../../projects/tis-smart-table-viewer/src/lib/services/user-customization.service.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component.html","../../../projects/tis-smart-table-viewer/src/lib/services/tis-helper.service.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component.html","../../../projects/tis-smart-table-viewer/src/lib/components/create-columns-template/create-columns-template.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/create-columns-template/create-columns-template.component.html","../../../projects/tis-smart-table-viewer/src/lib/components/tis-columns-btn/tis-columns-btn.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-columns-btn/tis-columns-btn.component.html","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date-time.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date-time-with-seconds.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component.html","../../../projects/tis-smart-table-viewer/src/lib/pipes/quantity.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/money.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/tis-smart-table-viewer.module.ts","../../../projects/tis-smart-table-viewer/src/public-api.ts","../../../projects/tis-smart-table-viewer/src/servicemind.tis-tis-smart-table-viewer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TisSmartTableViewerService {\n\n constructor() { }\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subscription, of, Subject, takeUntil } from 'rxjs';\nimport { catchError, finalize } from 'rxjs/operators';\nimport { ApiService } from '../services/api.service';\n\nexport class ApiDataSource implements DataSource<any> {\n\n private apiSubs!: Subscription;\n\n apiSubject = new BehaviorSubject<any[]>([]);\n extraDataSubject = new BehaviorSubject<any>(null);\n\n private loadingSubject = new BehaviorSubject<boolean>(false);\n public loading$ = this.loadingSubject.asObservable();\n\n public totalDataLength = new BehaviorSubject<number | null>(null);\n public totalDataLength$ = this.totalDataLength.asObservable();\n\n constructor(private apiService: ApiService) { \n console.log(' DataSource Initialized...')\n }\n\n connect(collectionViewer: CollectionViewer): Observable<any[]> {\n return this.apiSubject.asObservable();\n }\n\n disconnect(collectionViewer: CollectionViewer): void {\n this.apiSubject.complete();\n this.extraDataSubject.complete();\n this.loadingSubject.complete();\n\n if(this.apiSubs) {\n this.apiSubs.unsubscribe();\n }\n }\n\n load(url: string, pageIndex: number, pageSize: number, search: string, filter?: object, sortFilter?: object) {\n\n if(this.apiSubs) {\n this.apiSubs.unsubscribe();\n }\n\n this.loadingSubject.next(true);\n this.apiSubs = this.apiService.getList(url, (pageIndex + 1), pageSize, search, {filter}, {sortFilter}).pipe(\n catchError(() => of([])),\n finalize(() => this.loadingSubject.next(false))\n ).subscribe(r => {\n console.log(`DataSource: Url: ${url}, Reply:`, r);\n if (r?.data?.length > 0) {\n this.totalDataLength.next(r?.total);\n }\n else {\n this.totalDataLength.next(0);\n }\n this.apiSubject.next(r?.data);\n this.extraDataSubject.next(r?.extraData);\n });\n }\n\n loadWithCancellation(url: string, pageIndex: number, pageSize: number, search: string, filter?: object, sortFilter?: object, cancelSubject?: Subject<void>) {\n\n if(this.apiSubs) {\n this.apiSubs.unsubscribe();\n }\n\n this.loadingSubject.next(true);\n \n let apiCall$ = this.apiService.getList(url, (pageIndex + 1), pageSize, search, {filter}, {sortFilter}).pipe(\n catchError(() => of([])),\n finalize(() => this.loadingSubject.next(false))\n );\n\n // Add cancellation capability if provided\n if (cancelSubject) {\n apiCall$ = apiCall$.pipe(takeUntil(cancelSubject));\n }\n\n this.apiSubs = apiCall$.subscribe(r => {\n console.log(`DataSource: Url: ${url}, Reply:`, r);\n if (r?.data?.length > 0) {\n this.totalDataLength.next(r?.total);\n }\n else {\n this.totalDataLength.next(0);\n }\n this.apiSubject.next(r?.data);\n this.extraDataSubject.next(r?.extraData);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n private token = '';\n\n constructor(private http: HttpClient) {\n }\n\n getList(apiUrl: string, currentPage: number = 1, limit = 10, search = '', filters?: object, sortFilter?: object): Observable<any> {\n const body = { ...filters, ...sortFilter };\n\n if(this.token) {\n return this.http.post(`${apiUrl}?current_page=${currentPage}&per_page=${limit}&search=${search}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(`${apiUrl}?current_page=${currentPage}&per_page=${limit}&search=${search}`, body);\n }\n}\n","\nexport const setToLocalStorageWithExpiry = (key: string, value: any, ttl = 9 * 1000 * 60 * 60) => {\n const now = new Date();\n // `item` is an object which contains the original value\n // as well as the time when it's supposed to expire\n const item = {\n value,\n expiry: now.getTime() + ttl\n };\n localStorage.setItem(key, JSON.stringify(item));\n};\n\n\nexport const getFromLocalStorageWithExpiry = (key: string) => {\n const itemStr = localStorage.getItem(key);\n // if the item doesn't exist, return null\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n const now = new Date();\n\n if (!item.expiry) {\n localStorage.removeItem(key);\n return null;\n }\n\n // compare the expiry time of the item with the current time\n if (now.getTime() > item.expiry) {\n // If the item is expired, delete the item from storage\n // and return null\n localStorage.removeItem(key);\n return null;\n }\n return item.value;\n};\n\nexport const removeMultipleKeys = (keys: string[]) => {\n console.log('Storage Helper: Keys To Remove:', keys);\n keys.forEach(key => {\n localStorage.removeItem(key);\n });\n}","/**\n * TimeoutManager - A utility class for managing timeouts to prevent memory leaks\n * \n * This class provides a centralized way to create, track, and clean up setTimeout calls.\n * It automatically handles cleanup when component is destroyed to prevent memory leaks.\n * \n * @example\n * ```typescript\n * export class MyComponent implements OnDestroy {\n * private timeoutManager = new TimeoutManager();\n * \n * someMethod() {\n * this.timeoutManager.createTimeout(() => {\n * console.log('Delayed execution');\n * }, 1000);\n * }\n * \n * ngOnDestroy() {\n * this.timeoutManager.clearAll(); // Clean up all pending timeouts\n * }\n * }\n * ```\n */\nexport class TimeoutManager {\n private activeTimeouts: Set<ReturnType<typeof setTimeout>> = new Set();\n\n /**\n * Creates a tracked timeout that will be automatically cleaned up\n * @param callback - Function to execute after delay\n * @param delay - Delay in milliseconds\n * @returns The timeout ID (same as setTimeout return value)\n */\n createTimeout(callback: () => void, delay: number): ReturnType<typeof setTimeout> {\n const timeoutId = setTimeout(() => {\n // Auto-remove from tracking when timeout executes naturally\n this.activeTimeouts.delete(timeoutId);\n callback();\n }, delay);\n\n // Add to tracking set\n this.activeTimeouts.add(timeoutId);\n return timeoutId;\n }\n\n /**\n * Manually clear a specific timeout\n * @param timeoutId - The timeout ID returned from createTimeout\n */\n clearTimeout(timeoutId: ReturnType<typeof setTimeout>): void {\n if (this.activeTimeouts.has(timeoutId)) {\n clearTimeout(timeoutId);\n this.activeTimeouts.delete(timeoutId);\n }\n }\n\n /**\n * Clear all pending timeouts\n * This should be called in ngOnDestroy to prevent memory leaks\n */\n clearAll(): void {\n this.activeTimeouts.forEach(timeoutId => clearTimeout(timeoutId));\n this.activeTimeouts.clear();\n }\n\n /**\n * Get the number of active (pending) timeouts\n * Useful for debugging and testing\n */\n get activeCount(): number {\n return this.activeTimeouts.size;\n }\n\n /**\n * Check if a specific timeout is still active\n * @param timeoutId - The timeout ID to check\n */\n isActive(timeoutId: ReturnType<typeof setTimeout>): boolean {\n return this.activeTimeouts.has(timeoutId);\n }\n}\n\n/**\n * Static helper functions for one-off timeout usage\n * Use the TimeoutManager class for more comprehensive timeout management\n */\nexport class TimeoutHelper {\n /**\n * Create a single tracked timeout with external cleanup responsibility\n * @param callback - Function to execute after delay\n * @param delay - Delay in milliseconds\n * @param trackingSet - Set to track the timeout for cleanup\n * @returns The timeout ID\n */\n static createTrackedTimeout(\n callback: () => void, \n delay: number,\n trackingSet: Set<ReturnType<typeof setTimeout>>\n ): ReturnType<typeof setTimeout> {\n const timeoutId = setTimeout(() => {\n trackingSet.delete(timeoutId);\n callback();\n }, delay);\n \n trackingSet.add(timeoutId);\n return timeoutId;\n }\n\n /**\n * Clear all timeouts in a tracking set\n * @param trackingSet - Set containing timeout IDs to clear\n */\n static clearAllTimeouts(trackingSet: Set<ReturnType<typeof setTimeout>>): void {\n trackingSet.forEach(timeoutId => clearTimeout(timeoutId));\n trackingSet.clear();\n }\n}\n","import { DateTime } from 'luxon';\n\n/**\n * Centralized date/time utility helper for consistent date handling across the library.\n * Provides common date formatting and conversion functions to avoid code duplication.\n */\nexport class DateTimeHelper {\n \n /**\n * Formats a date value for display based on form control type\n * @param value - The date value (Date, DateTime, string, number)\n * @param formControlType - The type of form control ('date', 'date-time', etc.)\n * @returns Formatted date string\n */\n static formatForDisplay(value: any, formControlType: string): string {\n if (!value) return '';\n \n const dateTime = this.toDateTime(value);\n if (!dateTime?.isValid) return '';\n \n switch (formControlType) {\n case 'date':\n return dateTime.toFormat('dd-MM-yyyy');\n case 'date-time':\n return dateTime.toFormat('dd-MM-yyyy HH:mm');\n case 'date-time-with-seconds':\n return dateTime.toFormat('dd-MM-yyyy HH:mm:ss');\n default:\n return dateTime.toFormat('dd-MM-yyyy');\n }\n }\n \n /**\n * Converts various date formats to DateTime object\n * @param value - Date value in various formats\n * @returns DateTime object or null if invalid\n */\n static toDateTime(value: any): DateTime | null {\n if (!value) return null;\n \n if (DateTime.isDateTime(value)) {\n return value;\n }\n \n if (value instanceof Date) {\n return DateTime.fromJSDate(value);\n }\n \n if (typeof value === 'string' && value !== '') {\n // Try parsing as milliseconds first (if numeric string)\n const numValue = Number(value);\n if (!isNaN(numValue) && numValue > 0) {\n return DateTime.fromMillis(numValue);\n }\n // Try parsing as ISO string\n return DateTime.fromISO(value);\n }\n \n if (typeof value === 'number') {\n return DateTime.fromMillis(value);\n }\n \n return null;\n }\n \n /**\n * Converts date/DateTime objects to milliseconds for API calls\n * @param value - Date value\n * @returns Milliseconds or original value if not a date\n */\n static toMilliseconds(value: any): any {\n if (!value) return value;\n \n if (value instanceof Date) {\n return DateTime.fromJSDate(value).toMillis();\n }\n \n if (DateTime.isDateTime(value)) {\n return value.toMillis();\n }\n \n return value;\n }\n \n /**\n * Checks if a query parameter key represents a date field\n * @param key - Query parameter key\n * @param value - Query parameter value\n * @returns True if it's a date field\n */\n static isDateQueryParam(key: string, value: string): boolean {\n return key.toLowerCase().includes('date') && value.length === 13;\n }\n \n /**\n * Parses date from query parameters\n * @param value - Query parameter value (milliseconds as string)\n * @returns DateTime object\n */\n static parseFromQueryParam(value: string): DateTime {\n return DateTime.fromMillis(Number(value));\n }\n}\n","import { DateTimeHelper } from './date-time.helper';\n\n/**\n * Centralized query parameter utility helper for consistent URL parameter handling.\n * Provides common functions for parsing, validating, and transforming query parameters.\n */\nexport class QueryParamsHelper {\n \n /**\n * Parses query parameters from URL and handles type conversions\n * @param url - Full URL string\n * @returns Parsed query parameters object\n */\n static parseQueryParams(url: string): Record<string, string | string[]> {\n const urlObj = new URL(url);\n const params = new URLSearchParams(urlObj.search);\n const paramsObj: Record<string, string | string[]> = {};\n\n params.forEach((value, key) => {\n // Check if the parameter already exists (for handling multiple values)\n if (paramsObj.hasOwnProperty(key)) {\n // If it's not already an array, convert it to an array\n if (!Array.isArray(paramsObj[key])) {\n paramsObj[key] = [paramsObj[key] as string];\n }\n // Push the new value to the existing array\n (paramsObj[key] as string[]).push(value);\n } else {\n // Assign the value to the key in the object\n paramsObj[key] = value;\n }\n });\n\n return paramsObj;\n }\n \n /**\n * Checks if a query parameter value is valid (not empty, null, or undefined)\n * @param value - Query parameter value\n * @returns True if valid\n */\n static isValidParam(value: any): boolean {\n return value && value !== '' && value !== 'null' && value !== 'undefined';\n }\n \n /**\n * Processes a query parameter value and handles arrays\n * @param value - Raw query parameter value\n * @returns Processed value (string or array)\n */\n static processParamValue(value: string): string | string[] {\n if (value.includes(',')) {\n return value.split(',');\n }\n return value;\n }\n \n /**\n * Processes query parameters for filter form with type conversions\n * @param queryParams - Raw query parameters\n * @param columnsCodeMapping - Column mapping for transformations\n * @returns Processed filter and sort objects\n */\n static processForFilters(\n queryParams: any, \n columnsCodeMapping: any[]\n ): { filterParams: any; sortParams: any; pageIndex: number; pageSize: number; search: string } {\n const filterParams: any = {};\n const sortParams: any = {};\n let pageIndex = 0;\n let pageSize = 10;\n let search = '';\n\n for (const key in queryParams) {\n if (!this.isValidParam(queryParams[key])) continue;\n\n let fixedKeyMatched = false;\n const value = queryParams[key];\n\n // Handle fixed parameters\n if (key.toLowerCase() === 'pageindex') {\n pageIndex = Number(value);\n fixedKeyMatched = true;\n } else if (key.toLowerCase() === 'pagesize') {\n pageSize = Number(value);\n fixedKeyMatched = true;\n } else if (key.toLowerCase() === 'sortby') {\n sortParams.sortBy = value;\n fixedKeyMatched = true;\n } else if (key.toLowerCase() === 'sortorder') {\n sortParams.sortOrder = value;\n fixedKeyMatched = true;\n } else if (key.toLowerCase() === 'search') {\n search = value;\n fixedKeyMatched = true;\n } else if (DateTimeHelper.isDateQueryParam(key, value)) {\n // Handle date parameters\n filterParams[key] = DateTimeHelper.parseFromQueryParam(value);\n fixedKeyMatched = true;\n }\n\n if (!fixedKeyMatched) {\n filterParams[key] = this.processParamValue(value);\n \n // Apply transformation if mapping exists\n const mapping = columnsCodeMapping.find(ccm => ccm.filterFormKey === key);\n if (mapping?.transformQueryParamFn) {\n filterParams[key] = mapping.transformQueryParamFn(filterParams[key]);\n }\n }\n }\n\n return { filterParams, sortParams, pageIndex, pageSize, search };\n }\n \n /**\n * Builds query string from filter data with proper encoding\n * @param filterData - Filter form data\n * @param sortParams - Sort parameters\n * @param pageIndex - Current page index\n * @param pageSize - Current page size \n * @param search - Search term\n * @returns URLSearchParams object\n */\n static buildQueryString(\n filterData: any, \n sortParams: any, \n pageIndex: number, \n pageSize: number, \n search: string\n ): URLSearchParams {\n const qs = new URLSearchParams();\n \n // Process filter data\n if (filterData) {\n const processedFilter = { ...filterData };\n \n // Convert date objects to milliseconds\n for (const key in processedFilter) {\n processedFilter[key] = DateTimeHelper.toMilliseconds(processedFilter[key]);\n }\n \n // Append filter parameters\n Object.keys(processedFilter).forEach(key => {\n const value = processedFilter[key];\n if (this.isValidParam(value)) {\n if (value === '*') {\n qs.append(key, '');\n } else {\n qs.append(key, value);\n }\n }\n });\n }\n \n // Append sort parameters\n if (sortParams) {\n Object.keys(sortParams).forEach(key => {\n if (this.isValidParam(sortParams[key])) {\n qs.append(key, sortParams[key]);\n }\n });\n }\n \n // Append pagination and search\n qs.append('pageIndex', pageIndex.toString());\n qs.append('pageSize', pageSize.toString());\n \n if (search !== '') {\n qs.append('search', search);\n }\n \n return qs;\n }\n}\n","import { DateTimeHelper } from './date-time.helper';\nimport type { \n SelectedFilterDisplayValueType, \n SelectedFiltersGroupedValuesType,\n SelectedFilterDisplayValuesType \n} from '../interfaces';\n\n/**\n * Centralized filter display utility helper for managing filter value formatting and grouping.\n * Handles the complex logic of grouping and displaying filter values in a consistent manner.\n */\nexport class FilterDisplayHelper {\n \n /**\n * Formats filter values based on form control type for display\n * @param items - Array of filter display values\n * @returns Processed array with formatted display values\n */\n static formatFilterValuesForDisplay(items: SelectedFilterDisplayValueType[]): SelectedFilterDisplayValueType[] {\n return items.map(item => {\n const processedItem = { ...item };\n \n // Handle different form control types\n switch (item.formControlType) {\n case 'input':\n case 'checkbox':\n // No special formatting needed\n break;\n case 'date':\n processedItem.valueKey = DateTimeHelper.formatForDisplay(item.value, 'date');\n break;\n case 'date-time':\n processedItem.valueKey = DateTimeHelper.formatForDisplay(item.value, 'date-time');\n break;\n default:\n // Keep original valueKey if no special handling needed\n break;\n }\n \n return processedItem;\n });\n }\n \n /**\n * Groups filter values by form control attributes\n * @param data - Array of filter display values\n * @returns Grouped filter values\n */\n static groupByFormControlAttributes(data: SelectedFilterDisplayValueType[]): SelectedFiltersGroupedValuesType[] {\n const groups: Record<string, SelectedFiltersGroupedValuesType> = {};\n \n // First format the data for display\n const formattedData = this.formatFilterValuesForDisplay(data);\n\n formattedData.forEach(item => {\n const key = `${item.formControlName}-${item.formControlType}`;\n \n if (!groups[key]) {\n groups[key] = {\n formControlName: item.formControlName,\n formControlType: item.formControlType,\n arrValues: []\n };\n }\n \n const isSingleValue = this.isSingleValueFormControl(item.formControlType, item.isSingleValue);\n \n // Check if only the last value should be kept due to isSingleValue or duplicated value/valueKey\n if (isSingleValue) {\n groups[key].arrValues = [item]; // Replace with the current item\n } else {\n // Check for duplicate value and valueKey in the current array\n const existingIndex = groups[key].arrValues.findIndex(x => \n x.value === item.value && x.valueKey === item.valueKey\n );\n \n if (existingIndex !== -1) {\n groups[key].arrValues[existingIndex] = item; // Replace the duplicate\n } else {\n groups[key].arrValues.push(item); // Add new item\n }\n }\n });\n\n return Object.values(groups);\n }\n \n /**\n * Determines if a form control should only have single values\n * @param formControlType - Type of form control\n * @param explicitSingleValue - Explicit single value flag\n * @returns True if single value control\n */\n static isSingleValueFormControl(formControlType: string, explicitSingleValue?: boolean): boolean {\n if (explicitSingleValue !== undefined) {\n return explicitSingleValue;\n }\n \n return ['input', 'radio', 'date', 'date-time', 'toggle'].includes(formControlType);\n }\n \n /**\n * Updates selected filter values by replacing values for a specific form control\n * @param currentValues - Current selected filter values\n * @param newValues - New values to add/update\n * @param formControlName - Name of the form control being updated\n * @returns Updated filter values and grouped values\n */\n static updateSelectedFilterValues(\n currentValues: SelectedFilterDisplayValuesType,\n newValues: SelectedFilterDisplayValueType | SelectedFilterDisplayValuesType,\n formControlName?: string\n ): { \n selectedFilterValues: SelectedFilterDisplayValuesType;\n selectedFilterGroupedValues: SelectedFiltersGroupedValuesType[];\n } {\n let targetFormControlName: string;\n let newValuesArray: SelectedFilterDisplayValueType[];\n \n if (Array.isArray(newValues)) {\n newValuesArray = newValues;\n targetFormControlName = formControlName || newValues[0]?.formControlName;\n } else {\n newValuesArray = [newValues];\n targetFormControlName = formControlName || newValues?.formControlName;\n }\n \n // Remove existing values for this form control\n const filteredValues = currentValues.filter(\n sfv => sfv.formControlName !== targetFormControlName\n );\n \n // Group the new values\n const newGroupedValues = this.groupByFormControlAttributes(newValuesArray);\n \n // Add new values for the target form control\n newGroupedValues.forEach(gv => {\n if (gv.formControlName === targetFormControlName) {\n gv.arrValues.forEach(v => {\n filteredValues.push(v);\n });\n }\n });\n \n // Return updated values and all grouped values\n const allGroupedValues = this.groupByFormControlAttributes(filteredValues);\n \n return {\n selectedFilterValues: filteredValues,\n selectedFilterGroupedValues: allGroupedValues\n };\n }\n \n /**\n * Filters selected values to only show those present in query parameters\n * @param selectedValues - All selected filter values\n * @param queryParams - Current query parameters\n * @returns Filtered values for display\n */\n static getValuesForDisplay(\n selectedValues: SelectedFilterDisplayValuesType,\n queryParams: any\n ): SelectedFilterDisplayValuesType {\n return selectedValues.filter(sf => queryParams.hasOwnProperty(sf.formControlName));\n }\n \n /**\n * Removes a specific filter value from the collection\n * @param selectedValues - Current selected filter values\n * @param filterToRemove - Filter value to remove\n * @returns Updated filter values\n */\n static removeFilterValue(\n selectedValues: SelectedFilterDisplayValuesType,\n filterToRemove: SelectedFilterDisplayValueType\n ): SelectedFilterDisplayValuesType {\n return selectedValues.filter(sfv => \n !(sfv.formControlName === filterToRemove.formControlName && \n sfv.valueKey === filterToRemove.valueKey)\n );\n }\n}\n","/**\n * Centralized validation utility helper for common validation tasks.\n * Provides reusable validation functions to avoid code duplication.\n */\nexport class ValidationHelper {\n \n /**\n * Checks if a value is not null, undefined, or empty string\n * @param value - Value to check\n * @returns True if value has content\n */\n static hasValue(value: any): boolean {\n return value !== null && value !== undefined && value !== '';\n }\n \n /**\n * Checks if any values in an object are non-empty\n * @param obj - Object to check\n * @returns True if any value is non-empty\n */\n static hasNonEmptyValue(obj: any): boolean {\n if (!obj) return false;\n return Object.values(obj).some(value => this.hasValue(value));\n }\n \n /**\n * Checks if a form has any non-empty values\n * @param formData - Form data object\n * @returns True if form has any data\n */\n static hasFormData(formData: any): boolean {\n if (!formData) return false;\n return this.hasNonEmptyValue(formData);\n }\n \n /**\n * Validates if an array has items\n * @param array - Array to check\n * @returns True if array exists and has items\n */\n static hasItems(array: any[]): boolean {\n return Array.isArray(array) && array.length > 0;\n }\n \n /**\n * Checks if a URL is valid\n * @param url - URL string to validate\n * @returns True if URL is valid\n */\n static isValidUrl(url: string): boolean {\n if (!url || typeof url !== 'string') return false;\n \n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n \n /**\n * Validates if a string is a valid number\n * @param value - Value to check\n * @returns True if value is a valid number\n */\n static isValidNumber(value: any): boolean {\n return !isNaN(Number(value)) && isFinite(Number(value));\n }\n \n /**\n * Checks if an object has a specific property with a valid value\n * @param obj - Object to check\n * @param property - Property name\n * @returns True if property exists and has a value\n */\n static hasProperty(obj: any, property: string): boolean {\n return obj && obj.hasOwnProperty(property) && this.hasValue(obj[property]);\n }\n \n /**\n * Validates if a selection model row has the required key\n * @param row - Row object\n * @param keyName - Key property name\n * @returns True if row has the key property with a value\n */\n static hasRowKey(row: any, keyName: string): boolean {\n return row && this.hasProperty(row, keyName);\n }\n \n /**\n * Checks if a filter value should be processed (not null, empty, or invalid)\n * @param value - Filter value\n * @returns True if filter value is valid for processing\n */\n static isValidFilterValue(value: any): boolean {\n if (!this.hasValue(value)) return false;\n \n // Check for common invalid filter values\n const invalidValues = ['null', 'undefined', '*'];\n if (typeof value === 'string' && invalidValues.includes(value)) {\n return value === '*'; // Special case: '*' is valid but gets converted to empty string\n }\n \n return true;\n }\n \n /**\n * Validates pagination parameters\n * @param pageIndex - Page index\n * @param pageSize - Page size\n * @returns Object with validation results\n */\n static validatePagination(pageIndex: any, pageSize: any): { \n isValid: boolean; \n pageIndex: number; \n pageSize: number; \n } {\n const validPageIndex = this.isValidNumber(pageIndex) ? Number(pageIndex) : 0;\n const validPageSize = this.isValidNumber(pageSize) ? Number(pageSize) : 10;\n \n return {\n isValid: validPageIndex >= 0 && validPageSize > 0,\n pageIndex: Math.max(0, validPageIndex),\n pageSize: Math.max(1, validPageSize)\n };\n }\n}\n","/**\n * Centralized collection management utility helper for common array and object operations.\n * Provides reusable functions for managing collections, selections, and data structures.\n */\nexport class CollectionHelper {\n \n /**\n * Safely clears an array if it exists\n * @param array - Array to clear\n */\n static clearArray(array: any[]): void {\n if (Array.isArray(array)) {\n array.length = 0;\n }\n }\n \n /**\n * Safely clears a Set if it exists\n * @param set - Set to clear\n */\n static clearSet(set: Set<any>): void {\n if (set instanceof Set) {\n set.clear();\n }\n }\n \n /**\n * Safely clears a Map if it exists\n * @param map - Map to clear\n */\n static clearMap(map: Map<any, any>): void {\n if (map instanceof Map) {\n map.clear();\n }\n }\n \n /**\n * Gets a consistent identifier for a row based on available keys\n * @param row - Row object\n * @param primaryKey - Primary key property name (default: 'id')\n * @param fallbackKey - Fallback key property name\n * @returns Row identifier or JSON string as last resort\n */\n static getRowIdentifier(row: any, primaryKey: string = 'id', fallbackKey?: string): string | number {\n if (!row) return '';\n \n // Try primary key first\n if (row[primaryKey] !== undefined && row[primaryKey] !== null) {\n return row[primaryKey];\n }\n \n // Try fallback key if provided\n if (fallbackKey && row[fallbackKey] !== undefined && row[fallbackKey] !== null) {\n return row[fallbackKey];\n }\n \n // Last resort: stringify the object (not recommended for large objects)\n return JSON.stringify(row);\n }\n \n /**\n * Creates a hash from an array of objects for cache validation\n * @param items - Array of items to hash\n * @param keyExtractor - Function to extract key from each item\n * @returns Hash string\n */\n static createArrayHash<T>(items: T[], keyExtractor: (item: T) => string): string {\n if (!Array.isArray(items)) return '';\n return JSON.stringify(items.map(keyExtractor));\n }\n \n /**\n * Safely filters an array with predicate function\n * @param array - Array to filter\n * @param predicate - Filter predicate function\n * @returns Filtered array or empty array if input is invalid\n */\n static safeFilter<T>(array: T[], predicate: (item: T) => boolean): T[] {\n if (!Array.isArray(array)) return [];\n return array.filter(predicate);\n }\n \n /**\n * Safely maps an array with transform function\n * @param array - Array to map\n * @param transform - Transform function\n * @returns Mapped array or empty array if input is invalid\n */\n static safeMap<T, U>(array: T[], transform: (item: T) => U): U[] {\n if (!Array.isArray(array)) return [];\n return array.map(transform);\n }\n \n /**\n * Safely finds an item in array\n * @param array - Array to search\n * @param predicate - Find predicate function\n * @returns Found item or undefined\n */\n static safeFind<T>(array: T[], predicate: (item: T) => boolean): T | undefined {\n if (!Array.isArray(array)) return undefined;\n return array.find(predicate);\n }\n \n /**\n * Creates a Map from an array for O(1) lookups\n * @param array - Array to convert\n * @param keyExtractor - Function to extract key from each item\n * @returns Map with keys and items\n */\n static createLookupMap<T>(array: T[], keyExtractor: (item: T) => string): Map<string, T> {\n const map = new Map<string, T>();\n if (!Array.isArray(array)) return map;\n \n array.forEach(item => {\n const key = keyExtractor(item);\n map.set(key, item);\n });\n \n return map;\n }\n \n /**\n * Checks if two arrays have the same items (order doesn't matter)\n * @param array1 - First array\n * @param array2 - Second array\n * @param keyExtractor - Function to extract comparison key\n * @returns True if arrays contain same items\n */\n static arraysEqual<T>(\n array1: T[], \n array2: T[], \n keyExtractor?: (item: T) => any\n ): boolean {\n if (!Array.isArray(array1) || !Array.isArray(array2)) return false;\n if (array1.length !== array2.length) return false;\n \n if (keyExtractor) {\n const keys1 = array1.map(keyExtractor).sort();\n const keys2 = array2.map(keyExtractor).sort();\n return JSON.stringify(keys1) === JSON.stringify(keys2);\n } else {\n return JSON.stringify([...array1].sort()) === JSON.stringify([...array2].sort());\n }\n }\n \n /**\n * Safely removes items from a Set based on a predicate\n * @param set - Set to modify\n * @param predicate - Function to determine if item should be removed\n */\n static removeFromSet<T>(set: Set<T>, predicate: (item: T) => boolean): void {\n if (!(set instanceof Set)) return;\n \n const itemsToRemove: T[] = [];\n set.forEach(item => {\n if (predicate(item)) {\n itemsToRemove.push(item);\n }\n });\n \n itemsToRemove.forEach(item => set.delete(item));\n }\n \n /**\n * Safely clones an array to prevent mutation issues\n * @param array - Array to clone\n * @returns Cloned array or empty array if input is invalid\n */\n static cloneArray<T>(array: T[]): T[] {\n if (!Array.isArray(array)) return [];\n return [...array];\n }\n \n /**\n * Performs safe property access with default value\n * @param obj - Object to access\n * @param path - Property path (e.g., 'user.profile.name')\n * @param defaultValue - Default value if property doesn't exist\n * @returns Property value or default\n */\n static getNestedProperty(obj: any, path: string, defaultValue: any = null): any {\n if (!obj || !path) return defaultValue;\n \n // If there is no '.', just return the direct property\n if (!path.includes('.')) {\n return obj[path] !== undefined ? obj[path] : defaultValue;\n }\n \n // Otherwise, traverse the nested properties\n try {\n return path.split('.').reduce((acc, part) => {\n return acc && acc[part] !== undefined ? acc[part] : defaultValue;\n }, obj);\n } catch {\n return defaultValue;\n }\n }\n}\n","import { Location } from '@angular/common';\nimport { Router } from '@angular/router';\n\n/**\n * Centralized URL and navigation utility helper.\n * Provides common functions for URL manipulation and navigation.\n */\nexport class UrlHelper {\n \n /**\n * Extracts the home URL from current window location\n * @returns Home URL path\n */\n static getHomeUrl(): string {\n const pathname = window.location.pathname;\n return `/${pathname.split('/')[1]}`;\n }\n \n /**\n * Safely navigates to a URL if it's valid\n * @param router - Angular Router instance\n * @param url - URL to navigate to\n * @returns Promise<boolean> - Navigation result\n */\n static safeNavigate(router: Router, url: string): Promise<boolean> | null {\n if (!url || typeof url !== 'string') {\n return null;\n }\n \n try {\n return router.navigateByUrl(url);\n } catch (error) {\n console.warn('Navigation error:', error);\n return null;\n }\n }\n \n /**\n * Updates the browser URL without navigation using Location service\n * @param location - Angular Location service\n * @param baseUrl - Base URL path\n * @param queryString - Query string parameters\n */\n static updateUrl(location: Location, baseUrl: string, queryString: string): void {\n const newUrl = `${baseUrl}?${queryString}`;\n const currentUrl = window.location.pathname + window.location.search;\n \n if (currentUrl !== newUrl) {\n location.go(newUrl);\n }\n }\n \n /**\n * Builds a complete URL with query parameters\n * @param baseUrl - Base URL path\n * @param queryParams - URLSearchParams object\n * @returns Complete URL string\n */\n static buildUrl(baseUrl: string, queryParams: URLSearchParams): string {\n const queryString = queryParams.toString();\n return queryString ? `${baseUrl}?${queryString}` : baseUrl;\n }\n \n /**\n * Gets the base URL without query parameters\n * @param router - Angular Router instance\n * @returns Base URL string\n */\n static getBaseUrl(router: Router): string {\n return router.url.split('?')[0];\n }\n \n /**\n * Checks if current URL differs from generated URL\n * @param generatedUrl - Generated URL to compare\n * @returns True if URLs are different\n */\n static hasUrlChanged(generatedUrl: string): boolean {\n const currentUrl = window.location.pathname + window.location.search;\n return currentUrl !== generatedUrl;\n }\n \n /**\n * Extracts query parameters from a URL string\n * @param url - Full URL string\n * @returns URLSearchParams object\n */\n static extractQueryParams(url: string): URLSearchParams | null {\n try {\n const urlObj = new URL(url);\n return new URLSearchParams(urlObj.search);\n } catch (error) {\n console.warn('Invalid URL for query param extraction:', url);\n return null;\n }\n }\n \n /**\n * Handles button click actions (URL navigation or callback execution)\n * @param router - Angular Router instance\n * @param config - Button configuration object\n * @param primaryUrlKey - Primary URL property name (default: 'btnUrl')\n * @param primaryClickKey - Primary click handler property name (default: 'btnClick')\n */\n static handleButtonClick(\n router: Router, \n config: any, \n primaryUrlKey: string = 'btnUrl',\n primaryClickKey: string = 'btnClick'\n ): void {\n if (!config) return;\n \n // Try callback first\n if (config[primaryClickKey] && typeof config[primaryClickKey] === 'function') {\n try {\n config[primaryClickKey]();\n } catch (error) {\n console.warn('Error executing button callback:', error);\n }\n } \n // Fallback to URL navigation\n else if (config[primaryUrlKey]) {\n this.safeNavigate(router, config[primaryUrlKey]);\n }\n }\n \n /**\n * Handles secondary button click actions\n * @param router - Angular Router instance\n * @param config - Button configuration object\n */\n static handleSecondaryButtonClick(router: Router, config: any): void {\n this.handleButtonClick(router, config, 'secondBtnUrl', 'secondBtnClick');\n }\n \n /**\n * Validates if a URL string is properly formatted\n * @param url - URL to validate\n * @returns True if URL is valid\n */\n static isValidUrl(url: string): boolean {\n if (!url || typeof url !== 'string') return false;\n \n try {\n // Allow relative URLs starting with '/'\n if (url.startsWith('/')) return true;\n \n // Validate absolute URLs\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n \n /**\n * Safely encodes URL parameters\n * @param value - Value to encode\n * @returns Encoded string\n */\n static encodeParam(value: any): string {\n if (value === null || value === undefined) return '';\n return encodeURIComponent(String(value));\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[appScrolling]',\n standalone: false\n})\nexport class ScrollingDirective {\n constructor(private el: ElementRef) { }\n \n @Input() appScrolling: boolean = false;\n\n // @HostListener('mouseenter') onMouseEnter() {}\n\n @HostListener('mouseleave') onMouseLeave() {\n // console.log(\"==== appScrolling mouseleave ===\", this.el.nativeElement, this.appScrolling);\n this.el.nativeElement.classList.remove('more-scrollbar-width', 'more-scrollbar-height')\n }\n\n @HostListener('mousemove', ['$event']) onMousemove(event: MouseEvent) {\n // console.log(\"==== appScrolling mousemove clientX-clientY ===\", event.clientX, event.clientY);\n // console.log(\"==== appScrolling mousemove clientWidth-clientHeight ===\", this.el.nativeElement.clientWidth, this.el.nativeElement.clientHeight);\n // console.log(\"==== appScrolling mousemove offsetX-offsetY ===\", this.el.nativeElement.offsetX, this.el.nativeElement.offsetY);\n // console.log(\"==== appScrolling mousemove offsetWidth-offsetLeft ===\", this.el.nativeElement.offsetWidth, this.el.nativeElement.offsetLeft);\n // console.log(\"==== appScrolling mousemove json ===\", {\n // clientX: event.clientX,\n // clientY: event.clientY,\n // clientWidth: this.el.nativeElement.clientWidth,\n // clientHeight: this.el.nativeElement.clientHeight,\n // offsetX: this.el.nativeElement.offsetX,\n // offsetY: this.el.nativeElement.offsetY,\n // offsetWidth: this.el.nativeElement.offsetWidth,\n // offsetLeft: this.el.nativeElement.offsetLeft,\n // rect: this.el.nativeElement.getBoundingClientRect()\n // });\n\n const rect = this.el.nativeElement.getBoundingClientRect()\n\n let xDistance = rect.left + this.el.nativeElement.clientWidth + 10 - event.clientX;\n // console.log(\"=== appScrolling mousemove xDistance ===\", xDistance);\n xDistance < 15 && xDistance > -15 ? this.el.nativeElement.classList.add('more-scrollbar-width'): this.el.nativeElement.classList.remove('more-scrollbar-width');\n\n let yDistance = rect.top + this.el.nativeElement.clientHeight + 15 - event.clientY;\n // console.log(\"=== appScrolling mousemove yDistance ===\", yDistance);\n yDistance < 20 && yDistance > -20 ? this.el.nativeElement.classList.add('more-scrollbar-height'): this.el.nativeElement.classList.remove('more-scrollbar-height');\n // this.el.nativeElement.classList.remove('more-scrollbar-width', 'more-scrollbar-height')\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserCustomizationService {\n private token = '';\n\n constructor(private http: HttpClient) {}\n\n getColumnsTemplates(url: string, listComponent: string): Observable<any> {\n if(this.token) {\n return this.http.get(`${url}?listComponent=${listComponent}`, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.get(`${url}?listComponent=${listComponent}`);\n }\n\n addColumnsTemplate(url: string, body: any): Observable<any> {\n if(this.token) {\n return this.http.post(`${url}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(url, body);\n }\n\n updateColumnsTemplate(url: string, body: any): Observable<any> {\n if(this.token) {\n return this.http.post(`${url}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(url, body);\n }\n\n deleteColumnsTemplate(url: string, body: any): Observable<any> {\n if(this.token) {\n return this.http.put(`${url}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.put(url, body);\n }\n\n getSelectedColumnsTemplate(url: string, listComponent: string): Observable<any> {\n if(this.token) {\n return this.http.get(`${url}?listComponent=${listComponent}`, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.get(`${url}?listComponent=${listComponent}`);\n }\n\n updateSelectedColumnsTemplate(url: string, body: any): Observable<any> {\n if(this.token) {\n return this.http.post(`${url}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(url, body);\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'tis-smart-table-error-dialog',\n standalone: false,\n templateUrl: './tis-smart-table-error-dialog.component.html',\n styleUrl: './tis-smart-table-error-dialog.component.css'\n})\nexport class TisSmartTableErrorDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<TisSmartTableErrorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {\n this.dialogRef.addPanelClass(['tis-smart-table-error-dialog']);\n }\n\n onClose(): void {\n this.dialogRef.close();\n }\n}\n","<h1 mat-dialog-title>\n <mat-icon class=\"{{data?.iconClass}}\">{{data?.icon}}</mat-icon>\n {{data?.title}}\n</h1>\n<div mat-dialog-content>\n {{data?.message}}\n</div>\n<div mat-dialog-actions>\n <button mat-button class=\"tis-text-upper {{data?.buttonClass ?? 'tis-btn-primary'}}\" (click)=\"onClose()\" cdkFocusInitial *ngIf=\"data?.buttonText && data?.buttonText != ''\">{{data?.buttonText}}</button>\n</div>","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatSnackBar, MatSnackBarRef, TextOnlySnackBar } from '@angular/material/snack-bar';\nimport { TisSmartTableErrorDialogComponent } from '../components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component';\nimport { Observable } from 'rxjs';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TisHelperService {\n\n constructor(\n private snackBar: MatSnackBar,\n private dialog: MatDialog,\n private http: HttpClient\n ) { }\n\n showHttpErrorMsg(error: HttpErrorResponse, duration = 5000) {\n console.log('httpError: ', error);\n\n let errorMessage = 'Some Unknown Error Occurred.';\n let errorCode = 'Unknown Error';\n const httpError = error;\n\n if (httpError.status >= 400) {\n const errorFromServer = httpError.error;\n if (Array.isArray(errorFromServer) && errorFromServer.length > 0) {\n errorMessage = errorFromServer[0].message;\n errorCode = errorFromServer[0].code;\n }\n } else if (httpError.status < 100) {\n errorMessage = httpError.message;\n errorCode = httpError.statusText;\n }\n\n if (errorCode == \"VALIDATION_ERROR\" || errorCode == \"NOT_FOUND_ERROR\" || errorCode == \"THIRD_PARTY_API_ERROR\") {\n let confirmBoxData: any = {\n title: \"Error !\",\n message: errorMessage,\n icon: \"error\",\n iconClass: \"tis-text-danger\",\n buttonText: \"Ok\",\n buttonClass: \"tis-btn-primary\",\n };\n\n const dialogRef: MatDialogRef<TisSmartTableErrorDialogComponent> = this.dialog.open(TisSmartTableErrorDialogComponent, {\n width: \"550px\",\n panelClass: ['tis-simple-confirmation'],\n data: confirmBoxData,\n disableClose: false,\n });\n\n return dialogRef;\n\n } else {\n const snackbarRef: MatSnackBarRef<TextOnlySnackBar> = this.snackBar.open(errorMessage, 'Error', { duration: duration });\n return snackbarRef;\n }\n\n }\n\n showSuccessMsg(message: string, title: string, duration = 5000) {\n this.snackBar.open(message, title, {\n duration: duration\n })\n }\n\n showErrorMsg(message: string, title: string, duration = 5000) {\n this.snackBar.open(message, title, {\n duration: duration\n })\n }\n\n sortArrayByOrder(A: string[], B: string[]): string[] {\n const sortedA = [];\n for (const element of B) {\n const index = A.indexOf(element);\n if (index !== -1) {\n sortedA.push(A[index]);\n A.splice(index, 1);\n }\n }\n return [...sortedA, ...A]; // Combine sorted elements with remaining elements\n }\n\n}","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'tis-smart-table-confirmation-dialog',\n standalone: false,\n templateUrl: './tis-smart-table-confirmation-dialog.component.html',\n styleUrl: './tis-smart-table-confirmation-dialog.component.css'\n})\nexport class TisSmartTableConfirmationDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<TisSmartTableConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {\n this.dialogRef.addPanelClass(['tis-smart-table-confirmation-dialog']);\n }\n\n onClose(status: boolean | null): void {\n this.dialogRef.close(status);\n }\n}\n","<h1 mat-dialog-title style=\"gap: 10px; justify-content: start; width: 100%; align-items: center; display: flex; padding: 8px 16px;\">\n <mat-icon class=\"{{data?.iconClass}}\" style=\"color: var(--tis-cancel, #bb333b)\">{{data?.icon}}</mat-icon>\n <span>{{data?.title}}</span>\n</h1>\n<div mat-dialog-content style=\"padding: 20px 24px; padding-top: 0px;\">\n @if(data?.html){\n <h5 class=\"title\">{{data?.message}}</h5>\n <div [innerHTML]=\"data.html\">\n </div>\n }\n @else {\n <span>{{data?.message}}</span>\n }\n</div>\n<div mat-dialog-actions style=\"border-top: 1px solid rgba(0, 0, 0, 0.12); justify-content: end;\">\n <button mat-button class=\"{{data?.cancelButtonClass}}\" style=\"color: var(--tis-primary, var(--mat-sys-primary))\" (click)=\"onClose(false)\" *ngIf=\"data?.cancelButtonText && data?.cancelButtonText != ''\">{{data?.cancelButtonText}}</button>\n <button mat-button class=\"{{data?.approveButtonClass}}\" style=\"color: var(--tis-cancel, #bb333b)\" (click)=\"onClose(true)\" cdkFocusInitial *ngIf=\"data?.approveButtonText && data?.approveButtonText != ''\">{{data?.approveButtonText}}</button>\n</div>","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, Inject } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { TisHelperService } from '../../services/tis-helper.service';\nimport { UserCustomizationService } from '../../services/user-customization.service';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-create-columns-template',\n templateUrl: './create-columns-template.component.html',\n styleUrl: './create-columns-template.component.css',\n standalone: false\n})\nexport class CreateColumnsTemplateComponent {\n loading: boolean = false;\n updatingTemplate: boolean = false;\n savingTemplate: boolean = false;\n columns: any = [];\n displayedColumns: any = [];\n listComponentColumns: any;\n listComponentColumnsTemplateDetail: any;\n form!: FormGroup;\n userId!: number;\n translationReadKey!: string\n customColumns: any;\n t: any;\n columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n\n constructor(\n public dialogRef: MatDialogRef<CreateColumnsTemplateComponent>,\n private helper: TisHelperService,\n private snackBar: MatSnackBar,\n private userCustomizationService: UserCustomizationService,\n @Inject(MAT_DIALOG_DATA) public data: any,\n // private translocoService: TranslocoService,\n ) {\n this.translationReadKey = this.data?.translationReadKey ?? '';\n \n if(this.data?.customColumns){\n this.customColumns = this.data?.customColumns ?? {};\n }\n\n if(this.data?.columnCustomizationUrlConfig){\n this.columnCustomizationUrlConfig = this.data.columnCustomizationUrlConfig;\n }\n \n this.dialogRef.addPanelClass(['tis-create-columns-template']);\n }\n\n ngOnInit(): void {\n this.t = this.data?.t || {};\n this.columns = JSON.parse(JSON.stringify(this.data.columns));\n this.displayedColumns = JSON.parse(JSON.stringify(this.data.displayColumns));\n this.displayedColumns = this.data.displayColumns;\n\n if(this.data?.defaultSelectedState == null || this.data?.defaultSelectedState == 'undefined') {\n this.data.defaultSelectedState = true;\n }\n\n if(this.data?.selectedTemplateId && this.displayedColumns?.length){\n this.columns = this.helper.sortArrayByOrder(JSON.parse(JSON.stringify(this.columns)), JSON.parse(JSON.stringify(this.displayedColumns)));\n }\n \n this.listComponentColumns = this.columns.map((col: any, ndx: number) => ({ id: ndx + 1, isSelected: this.data?.defaultSelectedState === true ? true : (this.displayedColumns?.indexOf(col) >= 0 ? true : false), column: col }));\n\n this.createForm();\n\n // this.store.select('auth').subscribe((authState: fromAuth.State) => {\n // console.log('Current AuthState:', authState);\n // if(authState?.user?.id){\n // this.userId = authState.user.id;\n // }\n // })\n }\n\n ngAfterViewInit(){\n // this.translocoService.selectTranslate('lang', {}, 'shared').subscribe((translation: string) => {\n // this.tl = this.translocoService.translateObject('createColumnsTemplateComponent', {}, 'shared');\n // });\n }\n\n createForm() {\n this.form = new FormGroup({\n name: new FormControl(this.data?.name ?? '', Validators.required),\n enableStickiness: new FormControl(true),\n fromStartColumnNumber: new FormControl(this.data?.fromStartColumnNumber ? Number(this.data?.fromStartColumnNumber) : 0, Validators.required),\n fromEndColumnNumber: new FormControl(this.data?.fromEndColumnNumber ? Number(this.data?.fromEndColumnNumber) : 0, Validators.required),\n });\n }\n\n get name(){\n return (this.form.get('name') as FormControl)\n }\n \n get listComponentColumnsTemplateName(){\n return this.name.value;\n }\n\n get orgDisplayColumns(){\n return this.displayedColumns;\n }\n\n drop(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.listComponentColumns, event.previousIndex, event.currentIndex);\n }\n\n onSubmit() {\n const orgDisplayColumns = this.orgDisplayColumns;\n\n if(this.form.invalid){\n return ;\n }\n\n // Get selected columns (first filter on selected column and then get column array)\n this.displayedColumns = this.listComponentColumns.filter((r: any) => { if(r.isSelected) return r.column } ).map((r: any) => r.column);\n if(this.displayedColumns.length <= 0){\n this.snackBar.open(\"Please select at least one column\", \"ok\", {\n duration: 4000\n })\n return ;\n }\n console.log('new and org display columns: ', this.displayedColumns, orgDisplayColumns);\n\n this.acceptTemplateNameAndSave();\n\n }\n\n acceptTemplateNameAndSave() {\n let data = {\n listComponentName: this.data.listComponentName,\n name: this.name.getRawValue(),\n enableStickiness: this.form.getRawValue().enableStickiness,\n fromStartColumnNumber: this.form.getRawValue().fromStartColumnNumber,\n fromEndColumnNumber: this.form.getRawValue().fromEndColumnNumber,\n defaultColumns: this.columns.join(),\n displayColumns: this.displayedColumns.join()\n }\n\n console.log('save value: ', data);\n \n this.savingTemplate = true;\n this.loading = true;\n if(this.data?.selectedTemplateId){\n this.userCustomizationService.updateColumnsTemplate(this.columnCustomizationUrlConfig.update, {id: this.data?.selectedTemplateId, ...data}).subscribe(r => {\n console.log(\"add response: \", r);\n // this.loading = false;\n this.helper.showSuccessMsg(r.message, 'Success');\n let selectedTemplate = {\n ...r.data,\n ...data,\n isUpdated: true,\n }\n this.onClose(selectedTemplate);\n }, err => {\n this.loading = false;\n this.savingTemplate = false;\n this.helper.showHttpErrorMsg(err);\n })\n }\n else{\n this.userCustomizationService.addColumnsTemplate(this.columnCustomizationUrlConfig.add, data).subscribe(r => {\n console.log(\"add response: \", r);\n // this.loading = false;\n this.helper.showSuccessMsg(r.message, 'Success');\n let selectedTemplate = {\n ...r.data,\n ...data\n }\n this.onClose(selectedTemplate);\n }, err => {\n console.log(err);\n this.loading = false;\n this.savingTemplate = false;\n this.helper.showHttpErrorMsg(err);\n })\n }\n }\n\n onChangeColumnStatus(status: boolean, data: any){\n if(status == false){\n let leftColumn = data.id;\n let rightColumn = this.listComponentColumns?.length - (data.id - 1);\n let formValue = this.form.getRawValue();\n if(formValue?.fromStartColumnNumber == leftColumn){\n this.form.patchValue({\n fromStartColumnNumber: 0\n });\n }\n\n if(formValue?.fromEndColumnNumber == rightColumn){\n this.form.patchValue({\n fromEndColumnNumber: 0\n });\n }\n }\n }\n\n onClose(data: any = null){\n this.dialogRef.close(data);\n }\n}\n","\n<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <h1 mat-dialog-title style=\"padding: 16px 24px; background-color: #e0e0e0; display: flex; justify-content: space-between; width: 100%; align-items: center;\">\n {{t?.createColumnsTemplate?.title}}\n <mat-icon (click)=\"onClose()\" style=\"cursor: pointer;\">clear</mat-icon>\n </h1>\n <div style=\"padding: 15px; padding-bottom: 0px;\">\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.templateName}}</mat-label>\n <input matInput formControlName=\"name\" placeholder=\"{{t?.createColumnsTemplate?.enterTemplateName}}\" />\n </mat-form-field>\n </div>\n\n <mat-dialog-content [appScrolling]=\"true\" class=\"w-100 p-0 m-0\" style=\"max-height: 60vh !important;\">\n <div cdkDropList class=\"example-list\" (cdkDropListDropped)=\"drop($event)\">\n <div class=\"example-box\" *ngFor=\"let item of listComponentColumns, let ndx = index\" cdkDrag>\n <div class=\"width-100 example-div\">\n <div class=\"example-item flex flex-row items-center\">\n <mat-icon cdkDragHandle style=\"cursor: pointer; color: rgba(0, 0, 0, 0.54); font-size: 19px; width: 19px; height: 19px;\">drag_indicator</mat-icon>\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </div>\n <mat-checkbox color=\"primary\" [(ngModel)]=\"item.isSelected\" (ngModelChange)=\"onChangeColumnStatus($event, item)\" [ngModelOptions]=\"{standalone: true}\"></mat-checkbox>\n </div>\n </div>\n </div>\n </mat-dialog-content>\n\n @if(form.value?.enableStickiness){\n <div style=\"padding: 15px; padding-bottom: 0px;\">\n <div style=\"display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem;\">\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.freezeColumnFromLeft}}</mat-label>\n <mat-select formControlName=\"fromStartColumnNumber\">\n <mat-option [value]=\"0\">None</mat-option>\n @for (item of listComponentColumns; track item; let i = $index; let l = $last;) {\n @if(item?.isSelected){\n <mat-option [value]=\"(i+1)\">\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.freezeColumnFromRight}}</mat-label>\n <mat-select formControlName=\"fromEndColumnNumber\">\n <mat-option [value]=\"0\">None</mat-option>\n @for (item of listComponentColumns; track item; let i = $index; let l = $last;) {\n @if(item?.isSelected){\n <mat-option [value]=\"(listComponentColumns?.length - i)\">\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n }\n\n <div mat-dialog-actions>\n <button mat-button type=\"button\" class=\"tis-cancel-button\" mat-dialog-close [disabled]=\"loading\">{{t?.createColumnsTemplate?.cancel}}</button>\n <button mat-flat-button type=\"submit\" class=\"tis-submit-button\" cdkFocusInitial [disabled]=\"savingTemplate\">\n {{data?.selectedTemplateId ? t?.createColumnsTemplate?.update : t?.createColumnsTemplate?.save}}\n @if(savingTemplate){\n <i class=\"fas fa-spinner fa-spin\"></i>\n }\n </button>\n </div>\n</form>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UserCustomizationService } from '../../services/user-customization.service';\nimport { TisHelperService } from '../../services/tis-helper.service';\nimport { TisSmartTableConfirmationDialogComponent } from '../tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component';\nimport { CreateColumnsTemplateComponent } from '../create-columns-template/create-columns-template.component';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-columns-btn',\n templateUrl: './tis-columns-btn.component.html',\n styleUrl: './tis-columns-btn.component.css',\n standalone: false\n})\nexport class TisColumnsBtnComponent {\n static readonly COMPONENT_NAME = 'TisColumnsBtnComponent';\n\n @Input({ required: true }) columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n @Input() t: any = {};\n @Input({required: true}) componentName!: string;\n @Input({required: true}) defaultColumns!: string[];\n @Input({required: true}) columns!: string[];\n @Input() skipTranslation: boolean = false;\n @Input() customColumns?: object;\n @Input() selectedTemplate: any = {\n id: -1,\n name: 'Default',\n fromStartColumnNumber: 0,\n fromEndColumnNumber: 0,\n };\n\n @Output() selectedTemplateChange = new EventEmitter();\n @Output() displayedColumnsChange = new EventEmitter();\n @Output() fromStartColumnNumberChange = new EventEmitter();\n @Output() fromEndColumnNumberChange = new EventEmitter();\n displayedColumns: any[] = [];\n templates: any[] = [];\n isDeleteTemplate = false;\n isEditTemplate = false;\n\n constructor(\n private helper: TisHelperService,\n private userCustomizationService: UserCustomizationService,\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n this.getColumnsTemplates();\n // setTimeout(() => {\n // this.createNewTemplateDialog();\n // }, 2000);\n }\n\n public createNewTemplateDialog(stData: any = null) {\n if(!this.componentName) return;\n\n let data = {\n name: stData ? stData.name : null,\n enableStickiness: stData ? stData.enableStickiness : false,\n fromStartColumnNumber: stData ? stData.fromStartColumnNumber : 0,\n fromEndColumnNumber: stData ? stData.fromEndColumnNumber : 0,\n listComponentName: this.componentName,\n selectedTemplateId: stData ? stData?.id : null,\n defaultSelectedState: stData && stData?.id ? false : true,\n defaultColumns: this.defaultColumns,\n columns: this.columns,\n displayColumns: stData ? stData?.displayColumns?.split(',') : this.displayedColumns,\n t: this.t,\n skipTranslation: this.skipTranslation,\n customColumns: this.customColumns,\n columnCustomizationUrlConfig: this.columnCustomizationUrlConfig\n };\n\n const dialogRef = this.dialog.open(CreateColumnsTemplateComponent, {\n width: \"35%\",\n minWidth: '370px',\n data: data,\n panelClass: ['tis-create-new-columns-template'],\n disableClose: true,\n });\n\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n console.log(\"=== createNewTemplateDialog ===\", res);\n \n if(res?.isUpdated){\n this.templates = this.templates?.map(t =>{\n if(t.id == res?.id){\n t = res;\n }\n return t;\n });\n }\n else{\n this.templates = [res, ...this.templates];\n }\n this.selectedTemplate = res;\n this.selectedTemplateChange.emit(this.selectedTemplate);\n this.changeDisplayColumns();\n }\n });\n }\n\n getColumnsTemplates() {\n this.userCustomizationService.getColumnsTemplates(this.columnCustomizationUrlConfig.list, this.componentName).subscribe(r => {\n console.log(\"getColumnsTemplates:\", r.data);\n this.templates = r?.data ?? [];\n setTimeout(() => {\n this.getSelectedColumnsTemplate();\n }, 100);\n });\n }\n\n getSelectedColumnsTemplate() {\n this.userCustomizationService.getSelectedColumnsTemplate(this.columnCustomizationUrlConfig.getSelectedTemplate, this.componentName).subscribe((r) => {\n console.log(\"getSelectedColumnsTemplate:\", r.data);\n if (r?.data && Object.keys(r?.data).length != 0) {\n if(r.data?.listComponentColumnsTemplateId > 0){\n this.selectedTemplate = this.templates?.find((t: any) => t.id == r.data?.listComponentColumnsTemplateId);\n this.selectedTemplateChange.emit(this.selectedTemplate);\n }\n console.log(\"getSelectedColumnsTemplate:\", this.templates, this.selectedTemplate);\n this.changeDisplayColumns();\n }\n });\n }\n\n onSelectedTemplate(templateId: number){\n setTimeout(() => {\n if(this.isDeleteTemplate){\n console.log(\"onSelectedTemplate:\", this.isDeleteTemplate);\n let confirmBoxData: any = {\n title: this.t?.deleteColumnsTemplate?.title,\n message: this.t?.deleteColumnsTemplate?.message,\n iconClass: \"tis-text-danger\",\n icon: \"delete\",\n approveButtonText: this.t?.deleteColumnsTemplate?.yes,\n approveButtonClass: \"tis-btn-danger\",\n cancelButtonText: this.t?.deleteColumnsTemplate?.no,\n cancelButtonClass: \"tis-btn-primary\"\n };\n \n const dialogRef = this.dialog.open(TisSmartTableConfirmationDialogComponent, {\n width: \"30%\",\n minWidth: '370px',\n // panelClass: ['tis-simple-confirmation'],\n data: confirmBoxData,\n disableClose: true,\n });\n \n dialogRef.afterClosed().subscribe((result) => {\n console.log(\"The dialog was closed with result:\", result);\n if (result) {\n this.userCustomizationService.deleteColumnsTemplate(this.columnCustomizationUrlConfig.delete, {id: templateId, isSelectedTemplate: this.selectedTemplate?.id == templateId}).subscribe((r) => {\n this.helper.showSuccessMsg('Columns template has been deleted successfully', 'Done');\n this.templates.splice(this.templates.findIndex(ee => ee.id == templateId), 1);\n if(this.selectedTemplate?.id == templateId){\n this.selectedTemplate = {\n id: -1,\n name: 'Default',\n fromStartColumnNumber: 0,\n fromEndColumnNumber: 0,\n };\n this.selectedTemplateChange.emit(this.selectedTemplate);\n this.changeDisplayColumns();\n }\n }, err => this.helper.showHttpErrorMsg(err));\n }\n });\n }\n else if(this.isEditTemplate){\n console.log(\"onSelectedTemplate:\", this.isEditTemplate);\n let st = this.templates?.find((t: any) => t.id == templateId);\n this.createNewTemplateDialog(st);\n }\n else{\n if(this.selectedTemplate?.id != templateId){\n if(templateId > 0){\n this.selectedTemplate = this.templates?.find((t: any) => t.id == templateId);\n }\n else{\n this.selectedTemplate = {\n id: -1,\n name: 'Default'\n };\n }\n this.selectedTemplateChange.emit(this.selectedTemplate);\n this.userCustomizationService.updateSelectedColumnsTemplate(this.columnCustomizationUrlConfig.updateSelectedTemplate, {id: this.selectedTemplate?.id, listComponentName: this.componentName}).subscribe((r) => {\n this.changeDisplayColumns();\n });\n }\n }\n\n this.isDeleteTemplate = false;\n this.isEditTemplate = false;\n }, 200); \n }\n\n changeDisplayColumns(){\n if(this.selectedTemplate?.id > 0){\n this.displayedColumns = this.selectedTemplate.displayColumns?.split(',')\n }\n else{\n this.displayedColumns = this.defaultColumns;\n }\n\n this.displayedColumnsChange.emit(this.displayedColumns);\n this.fromStartColumnNumberChange.emit(this.selectedTemplate?.fromStartColumnNumber ?? 0);\n this.fromEndColumnNumberChange.emit(this.selectedTemplate?.fromEndColumnNumber ?? 0);\n }\n\n onMouseOverOut(event: Event, color: string) {\n const target = event.target as HTMLElement;\n target.style.color = color;\n }\n \n onMouseOut(event: Event) {\n const target = event.target as HTMLElement;\n target.style.color = `color: var(--tis-primary, var(--mat-sys-primary, #3838a2)) !important;`;\n }\n}\n","<!-- shared.tisColumnsBtnComponent -->\n<button mat-flat-button class=\"tis-columns-btn\" style=\"background-color: var(--tis-light, #f5f5f5); color: black;\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>view_week</mat-icon>\n <span style=\"display: flex; flex-direction: row;\">\n {{selectedTemplate?.name}}\n <mat-icon style=\"width: 15px; height: 15px; font-size: 20px; line-height: 16px;\">arrow_drop_down</mat-icon>\n </span>\n</button>\n<mat-menu #menu=\"matMenu\" class=\"tis-columns-btn-mat-menu\">\n <button mat-menu-item (click)=\"selectedTemplate?.id != -1 ? onSelectedTemplate(-1) : null\">\n <mat-icon>{{selectedTemplate?.id == -1 ? 'done': ''}}</mat-icon>\n Default\n </button>\n <button mat-menu-item *ngFor=\"let template of templates\" (click)=\"onSelectedTemplate(template?.id)\">\n <mat-icon>{{template?.id == selectedTemplate?.id ? 'done': ''}}</mat-icon>\n <span style=\"padding-right: 4rem;\">{{template.name}}</span>\n <mat-icon style=\"position: absolute; right: 0;\" class=\"delete-button\" (mouseover)=\"onMouseOverOut($event, `var(--tis-delete-icon, #bb333b)`)\" (mouseout)=\"onMouseOverOut($event, '')\" (click)=\"isDeleteTemplate = true\">delete</mat-icon>\n <mat-icon style=\"position: absolute; right: 2rem;\" class=\"edit-button\" (mouseover)=\"onMouseOverOut($event, `var(--tis-edit-icon, var(--mat-sys-primary, #3838a2))`)\" (mouseout)=\"onMouseOverOut($event, '')\" (click)=\"isEditTemplate = true\">edit</mat-icon>\n </button>\n <mat-divider class=\"tis-mat-divider\" style=\"margin: 0px;\"></mat-divider>\n <button mat-menu-item class=\"tis-create-columns-template-button\" style=\"color: var(--tis-primary, var(--mat-sys-primary, #3838a2));\" (click)=\"createNewTemplateDialog()\"><mat-icon style=\"color: var(--tis-primary, var(--mat-sys-primary, #3838a2));\">add</mat-icon> {{t?.tisColumnsBtnComponent?.createNewView}}</button>\n</mat-menu>","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n@Pipe({\n name: 'tisDate',\n standalone: false\n})\nexport class TisDatePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy');\n } else if (value instanceof Date) {\n return DateTime.fromJSDate(value).toFormat('dd MMM yyyy');\n } else if (value === null || value === undefined) {\n return '';\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n\n@Pipe({\n name: 'tisDateTime',\n standalone: false\n})\nexport class TisDateTimePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy hh:mm a');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy hh:mm a');\n } else if (value === null || value === undefined) {\n return '';\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n\n@Pipe({\n name: 'tisDateTimeWithSeconds',\n standalone: false\n})\nexport class TisDateTimeWithSecondsPipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy hh:mm:ss a');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy hh:mm:ss a');\n } else if (value === null || value === undefined) {\n return '';\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { CdkColumnDef } from '@angular/cdk/table';\nimport { Component, EventEmitter, Input, Output, SimpleChanges, ViewChild, OnDestroy } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription, Subject, takeUntil, tap, Observable, map, shareReplay, distinctUntilChanged, debounceTime } from 'rxjs';\nimport type { SmartTableWrapperRowsConfig } from '../../interfaces';\nimport { AnyKeyValueObject, SelectedFilterDisplayValuesType, SelectedFilterDisplayValueType, SelectedFiltersGroupedValuesType, SmartTableWrapperColumnsConfig } from '../../interfaces';\nimport { CollectionViewer, SelectionModel } from '@angular/cdk/collections';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ApiDataSource } from '../../datasources/api.datasource';\nimport { ApiService } from '../../services/api.service';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport * as storageHelper from '../../helpers/storage-helper';\nimport { TimeoutManager } from '../../helpers/timeout-manager.helper';\nimport { QueryParamsHelper } from '../../helpers/query-params.helper';\nimport { FilterDisplayHelper } from '../../helpers/filter-display.helper';\nimport { ValidationHelper } from '../../helpers/validation.helper';\nimport { CollectionHelper } from '../../helpers/collection.helper';\nimport { UrlHelper } from '../../helpers/url.helper';\nimport { Location } from '@angular/common';\nimport type { DataNotFoundConfig } from '../../interfaces/data-not-found-config.type';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-smart-table-viewer',\n standalone: false,\n templateUrl: './tis-smart-table-viewer.component.html',\n styleUrl: './tis-smart-table-viewer.component.css',\n providers: [CdkColumnDef],\n})\nexport class TisSmartTableViewerComponent implements OnDestroy {\n homeUrl = '';\n\n @Input({ required: true }) columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n @Input({ required: true }) t: any = {};\n @Input({ required: true }) componentName = '';\n @Input({ required: true }) mainTitle!: string;\n @Input() searchPlaceholder!: string;\n @Input() breadcrumbs: { url: string, name: string }[] = [];\n @Input() hideHeader = false;\n @Input() hideTableHeader = false;\n @Input() hidePaginator = false;\n @Input() keepFilterInUrl = true;\n @Input() disableBorderedView = false;\n @Input() displayColumnsSelectionButton = true;\n @Input() loadDataApiBaseUrl!: string;\n @Input() startStickyColumnCount!: number;\n @Input() endStickyColumnCount!: number;\n @Input() loaderPosition: 'top' | 'bottom' = 'top';\n @Input({ required: true }) dataNotFoundConfig: DataNotFoundConfig = {\n title: 'No Data Found',\n desc: 'There is no data. Please click on button to add',\n btnText: 'Add New',\n btnUrl: '',\n btnClick: null,\n secondBtnText: '',\n secondBtnUrl: '',\n secondBtnClick: null\n };\n @Input() showFilterButtonSection!: boolean;\n\n @Input({ required: true }) columnsCodeMapping!: SmartTableWrapperColumnsConfig[];\n autoRenderColumns!: SmartTableWrapperColumnsConfig[];\n templateRenderColumns!: SmartTableWrapperColumnsConfig[];\n\n @Input() defaultDisplayedColumns!: string[];\n displayedColumns!: string[];\n defaultColumns!: string[];\n columns!: string[];\n\n @Output() displayedColumnsChange = new EventEmitter<string[]>();\n usersColumnSelectionDetail: any;\n\n @Input() defaultSortObj: any = {};\n sortObj: any = {};\n @Output() sortObjChange = new EventEmitter<AnyKeyValueObject>();\n\n @Input() loadingSpinnerDiameter = 30;\n @Input() pageSizeOptions = [5, 10, 25, 100];\n\n @Input() pageSize = 10;\n @Output() pageSizeChange = new EventEmitter<number>();\n @Input() useGlobalPageSize = true;\n\n @Input() pageIndex = 0;\n @Output() pageIndexChange = new EventEmitter<number>();\n\n @Input() filterFormGroup: FormGroup = new FormGroup({});\n\n @Input() rowsConfig: SmartTableWrapperRowsConfig = {\n backgroundApplyFunction: () => null // Default blank function\n };\n\n @Output() onDataLoaded = new EventEmitter<boolean>();\n @Output() onSetExtraData = new EventEmitter<any>();\n @Output() onSetTotal = new EventEmitter<number>();\n\n selectedTemplate: any = {\n id: -1,\n name: 'Default',\n fromStartColumnNumber: 0,\n fromEndColumnNumber: 0,\n };\n\n selectedFilterValues: SelectedFilterDisplayValuesType = [];\n finalSelectedFilterValuesToDisplay: SelectedFilterDisplayValuesType = [];\n selectedFilterGroupedValues: SelectedFiltersGroupedValuesType[] = [];\n isShowFilter = false;\n filterFormGroupSubscription!: Subscription;\n filterHasNonEmptyValue = false;\n\n filterApplied = false;\n resetFlag = false;\n initialLoading = true;\n displayAfterFilterRemoved = false;\n\n filterFromQueryParams: any = {};\n sortFromQueryParams: any = {};\n\n search = '';\n searchCtrl = new FormControl();\n private _onDestroy = new Subject<void>();\n\n // Additional subscriptions that need cleanup\n private _selectionSubscription!: Subscription;\n private _handsetSubscription!: Subscription;\n private _queryParamsSubscription!: Subscription;\n\n // Memory-efficient caching\n private _columnMappingCache: Map<string, SmartTableWrapperColumnsConfig> = new Map();\n private _displayedColumnsCache: string[] = [];\n private _lastColumnsCodeMappingHash: string = '';\n\n // Race condition prevention\n private _currentRequestSubject = new Subject<void>();\n \n // Timeout management for proper cleanup - prevent memory leaks\n private timeoutManager = new TimeoutManager();\n \n // Computed row backgrounds for optimal performance\n private computedRowBackgrounds = new Map<string, string | null>();\n \n dataSource!: ApiDataSource;\n\n private _sort!: MatSort;\n private _sortSubscription!: Subscription;\n @ViewChild(MatSort) set sort(value: MatSort) {\n this._sort = value;\n if (this._sort) {\n\n if (this._sortSubscription) {\n this._sortSubscription.unsubscribe();\n }\n\n this._sortSubscription = this._sort.sortChange.pipe(\n takeUntil(this._onDestroy),\n ).subscribe((ch) => {\n this.handleSortingChanges(ch);\n });\n }\n }\n\n private _paginator!: MatPaginator;\n private _paginatorSubscription!: Subscription;\n @ViewChild(MatPaginator) set paginator(value: MatPaginator) {\n this._paginator = value;\n if (this._paginator) {\n\n if (this._paginatorSubscription) {\n this._paginatorSubscription.unsubscribe();\n }\n\n this._paginatorSubscription = this._paginator.page.pipe(\n takeUntil(this._onDestroy),\n tap(() => {\n this.onPaginationChanges();\n })\n ).subscribe();\n }\n }\n\n\n loadingSubscription!: Subscription;\n dataLengthSubscription!: Subscription;\n\n @Input() enableRowsSelection = false;\n @Input() enableAllRowsSelection = false;\n @Input() onlySingleSelection = false;\n @Input() selectedRowIds!: (number | string)[];\n @Input() selectedRowKey: string = 'id';\n @Input() selectedRows!: any[];\n @Output() selectedRowsChange = new EventEmitter<any>();\n\n selection = new SelectionModel<any>(true, []);\n selectedIds: Set<number | string> = new Set();\n isAllRowsSelected = false;\n @Output() allRowsSelectedChange = new EventEmitter<boolean>(false);\n\n @Input() enableDragNDrop = false;\n @Output() listDataSequenceChange = new EventEmitter<any>();\n \n @Input() isExpansion: boolean = false;\n @Input() isExpandedRow: boolean = false;\n @Input() expandedTemplate: any;\n isAllExpanded: boolean = false;\n \n // Expansion state management - avoid direct mutation\n private expandedRowIds: Set<string | number> = new Set();\n\n isHandset$!: Observable<boolean>;\n isMobile: boolean = false;\n\n constructor(\n // private userCustomizationService: UserCustomizationService,\n private dialog: MatDialog,\n private apiService: ApiService,\n private route: ActivatedRoute,\n private router: Router,\n private location: Location,\n private breakpointObserver: BreakpointObserver\n ) {\n // Store subscription reference for proper cleanup\n this._selectionSubscription = this.selection.changed.subscribe(change => {\n change.added.forEach(item => {\n if (item && item[this.selectedRowKey] !== undefined) {\n this.selectedIds.add(item[this.selectedRowKey]);\n }\n });\n change.removed.forEach(item => {\n if (item && item[this.selectedRowKey] !== undefined) {\n this.selectedIds.delete(item[this.selectedRowKey]);\n }\n });\n });\n }\n\n ngOnInit(): void {\n\n this.isHandset$ = this.breakpointObserver.observe([Breakpoints.Handset])\n .pipe(\n map(result => result.matches),\n shareReplay()\n );\n\n this._handsetSubscription = this.isHandset$.subscribe(r => {\n this.isMobile = r;\n });\n\n this.setDefaultColumns();\n\n this.getHomeUrl();\n\n this._queryParamsSubscription = this.route.queryParams.subscribe(qp => {\n // Initialize objects\n this.filterFromQueryParams = {};\n this.sortFromQueryParams = {};\n \n if (this.keepFilterInUrl) {\n const { filterParams, sortParams, pageIndex, pageSize, search } = \n QueryParamsHelper.processForFilters(qp, this.columnsCodeMapping);\n \n this.filterFromQueryParams = filterParams;\n this.sortFromQueryParams = sortParams;\n this.pageIndex = pageIndex;\n this.pageSize = pageSize;\n this.search = search;\n this.searchCtrl.patchValue(this.search);\n \n this.filterFormGroup.patchValue(this.filterFromQueryParams);\n\n if (ValidationHelper.hasProperty(this.sortFromQueryParams, 'sortBy') && \n ValidationHelper.hasProperty(this.sortFromQueryParams, 'sortOrder')) {\n this.sortObj = this.sortFromQueryParams;\n this.sortObjChange.emit(this.sortObj);\n }\n }\n\n this.filterApplied = ValidationHelper.hasNonEmptyValue(this.filterFromQueryParams);\n this.getList();\n });\n\n this.searchCtrl.valueChanges\n .pipe(takeUntil(this._onDestroy), debounceTime(400), distinctUntilChanged())\n .subscribe((search) => {\n this.search = search;\n this.resetFlag = true; // B/c every time search is made, make sure we go to first page...\n this.getList(false);\n });\n }\n\n\n ngOnChanges(changes: SimpleChanges): void {\n // console.log(`[table-list-view-wrapper]: ngOnChanges:`, changes);\n\n if (changes['defaultDisplayedColumns']) {\n this.handleDisplayedColumns('defaultDisplayedColumns');\n }\n\n if (changes['columnsCodeMapping']) {\n this.columnsCodeMapping = changes['columnsCodeMapping'].currentValue;\n this.handleDisplayedColumns('columnsCodeMapping');\n\n this.columns = this.columnsCodeMapping.map(c => c.name);\n this.autoRenderColumns = this.columnsCodeMapping.filter(c => c.hasOwnProperty('valueKey'));\n this.templateRenderColumns = this.columnsCodeMapping.filter(c => c.hasOwnProperty('template'));\n }\n\n if (changes['pageIndex']) {\n this.pageIndex = changes['pageIndex'].currentValue;\n }\n\n if (changes['pageSize']) {\n if (!changes['pageSize'].isFirstChange) {\n this.pageSize = changes['pageSize'].currentValue;\n } else {\n if (this.useGlobalPageSize) {\n let userDefaultPageSize = storageHelper.getFromLocalStorageWithExpiry('user_pagination_page_size');\n this.pageSize = userDefaultPageSize ? userDefaultPageSize : changes['pageSize'].currentValue;\n }\n }\n }\n\n\n if (changes['loadDataApiBaseUrl']) {\n if (changes['loadDataApiBaseUrl'].currentValue) {\n if (this.loadingSubscription) {\n this.loadingSubscription.unsubscribe();\n }\n\n if (this.dataLengthSubscription) {\n this.dataLengthSubscription.unsubscribe();\n }\n\n this.dataSource = new ApiDataSource(this.apiService);\n\n this.loadingSubscription = this.dataSource.loading$.subscribe(loading => {\n if (!loading) {\n if(this._paginator){\n this._paginator.pageIndex = this.pageIndex;\n this._paginator.pageSize = this.pageSize;\n }\n // Clear background cache when new data arrives\n this.clearRowBackgroundCache();\n // Pre-compute all row backgrounds for optimal performance\n this.computeAllRowBackgrounds();\n \n this.checkAllRowsSelected();\n this.onDataLoaded.emit(true);\n this.onSetExtraData.emit(this.dataSource.extraDataSubject.value);\n // if (this.selectedRowIds && this.selectedRowIds.length) {\n // setTimeout(() => {\n // this.setSelectedRows();\n // }, 200);\n // }\n }\n });\n\n this.dataLengthSubscription = this.dataSource.totalDataLength$.subscribe((total: any) => {\n if (total !== null) {\n this.initialLoading = false;\n this.onSetTotal.emit(total);\n // console.log('[table-list-view-wrapper]: dataSource total total:', total);\n }\n });\n }\n }\n\n\n if (changes['filterFormGroup']) {\n if (this.filterFormGroupSubscription) {\n this.filterFormGroupSubscription.unsubscribe();\n }\n\n this.filterFormGroupSubscription = this.filterFormGroup.valueChanges\n .pipe(takeUntil(this._onDestroy), distinctUntilChanged()).subscribe(val => {\n this.filterHasNonEmptyValue = ValidationHelper.hasNonEmptyValue(val);\n })\n }\n\n\n if (changes['selectedRows']) {\n this.selectedRows = changes['selectedRows'].currentValue;\n if (this.selectedRows && this.selectedRows.length) {\n // TODO:: Leave for now..... (Not able to decide whether in future we need to pass whole row or ids only)\n }\n }\n\n if (changes['selectedRowIds']) {\n this.selectedRowIds = changes['selectedRowIds'].currentValue;\n if (this.selectedRowIds && this.selectedRowIds.length) {\n this.setSelectedRows();\n }\n }\n\n if (changes['defaultSortObj']?.currentValue) {\n this.defaultSortObj = changes['defaultSortObj'].currentValue;\n\n this.handleSortingChanges({\n direction: this.defaultSortObj.sortOrder,\n active: this.defaultSortObj.sortBy\n });\n }\n }\n\n\n ngOnDestroy(): void {\n // Complete the destroy subject first to trigger takeUntil operators\n this._onDestroy.next();\n this._onDestroy.complete();\n\n // Clean up all subscriptions\n this._sortSubscription?.unsubscribe();\n this._paginatorSubscription?.unsubscribe();\n this.loadingSubscription?.unsubscribe();\n this.dataLengthSubscription?.unsubscribe();\n this.filterFormGroupSubscription?.unsubscribe();\n \n // Clean up additional subscriptions\n this._selectionSubscription?.unsubscribe();\n this._handsetSubscription?.unsubscribe();\n this._queryParamsSubscription?.unsubscribe();\n\n // Clean up selection model and data structures using CollectionHelper\n this.selection.clear();\n CollectionHelper.clearSet(this.selectedIds);\n CollectionHelper.clearSet(this.expandedRowIds);\n \n // Clear arrays to free memory using CollectionHelper\n CollectionHelper.clearArray(this.selectedFilterValues);\n CollectionHelper.clearArray(this.finalSelectedFilterValuesToDisplay);\n CollectionHelper.clearArray(this.selectedFilterGroupedValues);\n CollectionHelper.clearArray(this.displayedColumns);\n \n // Clear caches to free memory\n CollectionHelper.clearMap(this._columnMappingCache);\n CollectionHelper.clearArray(this._displayedColumnsCache);\n this._lastColumnsCodeMappingHash = '';\n CollectionHelper.clearMap(this.computedRowBackgrounds);\n \n // Complete race condition prevention subject\n this._currentRequestSubject.next();\n this._currentRequestSubject.complete();\n \n // Clear all pending timeouts to prevent memory leaks\n this.timeoutManager.clearAll();\n \n // Disconnect data source to stop API calls and complete observables\n if (this.dataSource) {\n this.dataSource.disconnect({} as CollectionViewer);\n }\n }\n\n setDefaultColumns() {\n if (this.defaultDisplayedColumns && this.defaultDisplayedColumns.length) {\n this.defaultColumns = this.defaultDisplayedColumns;\n } else {\n this.defaultColumns = this.columnsCodeMapping.map(c => c.name);\n }\n }\n\n\n handleDisplayedColumns(msg: String = '') {\n\n if(this.selectedTemplate?.id > 0 && this.defaultDisplayedColumns && this.defaultDisplayedColumns.length){\n this.displayedColumns = this.defaultDisplayedColumns.filter(c => this._columnMappingCache.has(c));\n }\n else{\n // Create a hash of current columns to check if cache is valid\n const columnsHash = JSON.stringify(this.columnsCodeMapping.map(c => c.name));\n // Use cache if columns haven't changed\n if (this._lastColumnsCodeMappingHash === columnsHash && this._displayedColumnsCache.length > 0) {\n this.displayedColumns = [...this._displayedColumnsCache];\n } else {\n // Update cache\n this.updateColumnMappingCache();\n this._lastColumnsCodeMappingHash = columnsHash;\n \n if (this.defaultDisplayedColumns && this.defaultDisplayedColumns.length) {\n this.displayedColumns = this.defaultDisplayedColumns.filter(c => this._columnMappingCache.has(c));\n } else {\n this.displayedColumns = this.columnsCodeMapping.map(c => c?.columnDef || c.name);\n }\n \n // Cache the result before adding selection/drag columns\n this._displayedColumnsCache = [...this.displayedColumns];\n }\n }\n\n // Add selection and drag columns (these are dynamic and shouldn't be cached)\n const finalColumns = [...this.displayedColumns];\n \n if (this.enableRowsSelection) {\n finalColumns.unshift('Select');\n }\n\n if (this.enableDragNDrop) {\n finalColumns.unshift('drag');\n }\n \n console.log(`=== handleDisplayedColumns :: ${msg} :: finalColumns ===`, finalColumns);\n \n this.displayedColumns = finalColumns;\n this.displayedColumnsChange.emit(this.displayedColumns);\n }\n\n private updateColumnMappingCache(): void {\n this._columnMappingCache.clear();\n this.columnsCodeMapping.forEach(column => {\n this._columnMappingCache.set(column.name, column);\n });\n }\n\n // TrackBy functions for optimal rendering performance\n trackByBreadcrumb(index: number, breadcrumb: { url: string, name: string }): string {\n return breadcrumb.url + breadcrumb.name || index.toString();\n }\n\n trackByFilterValue(index: number, filterValue: SelectedFilterDisplayValueType): string {\n return `${filterValue.formControlName}_${filterValue.valueKey}_${filterValue.value}`;\n }\n\n trackByAutoColumn(index: number, column: SmartTableWrapperColumnsConfig): string {\n return column.name + (column.serverKeyCode || '');\n }\n\n trackByTemplateColumn(index: number, column: SmartTableWrapperColumnsConfig): string {\n return column.name + (column.serverKeyCode || '');\n }\n\n trackByTableRow(index: number, row: any): any {\n return row.id || row[this.selectedRowKey] || index;\n }\n\n // Helper method to get consistent row identifier for expansion tracking\n private getRowIdentifier(row: any): string | number {\n return CollectionHelper.getRowIdentifier(row, 'id', this.selectedRowKey);\n }\n\n // Helper method to check if a row is expanded (non-mutating)\n public isRowExpanded(row: any): boolean {\n if (!this.isExpansion) return false;\n const rowId = this.getRowIdentifier(row);\n return this.expandedRowIds.has(rowId);\n }\n\n // Clear background cache when data changes to ensure fresh calculations\n private clearRowBackgroundCache(): void {\n this.computedRowBackgrounds.clear();\n }\n\n // Compute all row backgrounds when data changes (runs once per data load)\n private computeAllRowBackgrounds(): void {\n if (!this.dataSource?.apiSubject.value || !this.rowsConfig.backgroundApplyFunction) {\n return;\n }\n \n this.computedRowBackgrounds.clear();\n this.dataSource.apiSubject.value.forEach((row:any) => {\n const rowId = row?.id || row?.[this.selectedRowKey] || JSON.stringify(row);\n try {\n const background = this.rowsConfig.backgroundApplyFunction!(row);\n this.computedRowBackgrounds.set(rowId, background);\n } catch (error) {\n console.warn('Error computing row background:', error);\n this.computedRowBackgrounds.set(rowId, null);\n }\n }); \n }\n\n\n handleSortingChanges(ch: any) {\n this.sortObj = { sortOrder: ch.direction, sortBy: this.columnsCodeMapping.find(c => c.name === ch.active)?.serverKeyCode };\n this.sortFromQueryParams.sortBy = this.sortObj.sortBy;\n this.sortFromQueryParams.sortOrder = this.sortObj.sortOrder;\n this.resetFlag = true;\n this.getList();\n }\n\n\n private getHomeUrl() {\n this.homeUrl = UrlHelper.getHomeUrl();\n }\n\n\n getNestedValue(obj: any, path: string): any {\n return CollectionHelper.getNestedProperty(obj, path);\n }\n\n\n\n private groupByFormControlAttributes(data: SelectedFilterDisplayValueType[]): SelectedFiltersGroupedValuesType[] {\n return FilterDisplayHelper.groupByFormControlAttributes(data);\n }\n\n updateSelectedFilterValues(values: SelectedFilterDisplayValueType | SelectedFilterDisplayValuesType) {\n let currentFormControlName: string;\n if (Array.isArray(values)) {\n currentFormControlName = values[0]?.formControlName;\n } else {\n currentFormControlName = values?.formControlName;\n }\n\n const result = FilterDisplayHelper.updateSelectedFilterValues(\n this.selectedFilterValues, \n values, \n currentFormControlName\n );\n \n this.selectedFilterValues = result.selectedFilterValues;\n this.selectedFilterGroupedValues = result.selectedFilterGroupedValues;\n this.displayAfterFilterRemoved = true;\n this.getFinalSelectedFilterValuesToDisplay();\n }\n\n getFinalSelectedFilterValuesToDisplay() {\n this.finalSelectedFilterValuesToDisplay = FilterDisplayHelper.getValuesForDisplay(\n this.selectedFilterValues, \n this.filterFromQueryParams\n );\n }\n\n removeParticularFilter(f: SelectedFilterDisplayValueType) {\n let val = this.filterFormGroup.get(f.formControlName)?.value;\n \n if (Array.isArray(val)) {\n val = val.filter(v => v != f.value);\n this.filterFormGroup.get(f.formControlName)?.patchValue(val);\n } else {\n this.filterFormGroup.get(f.formControlName)?.reset();\n }\n \n this.selectedFilterValues = FilterDisplayHelper.removeFilterValue(this.selectedFilterValues, f);\n this.displayAfterFilterRemoved = true;\n \n this.timeoutManager.createTimeout(() => {\n this.filterRecords();\n }, 500);\n }\n\n\n filterRecords() {\n this.filterApplied = true;\n this.resetFlag = true;\n // Clear computed backgrounds before loading filtered data\n this.clearRowBackgroundCache();\n this.timeoutManager.createTimeout(() => {\n this.getList(true);\n this.isShowFilter = false;\n }, 500);\n }\n\n public resetFilters() {\n this.filterApplied = false;\n // Clear computed backgrounds before reset\n this.clearRowBackgroundCache();\n this.timeoutManager.createTimeout(() => {\n this.resetFlag = true;\n this.filterFromQueryParams = {};\n this.sortFromQueryParams = {};\n this.selectedFilterGroupedValues = [];\n this.selectedFilterValues = [];\n this.getList();\n }, 250);\n }\n\n public getList(forceFromObject = false) {\n // Cancel any previous request to prevent race conditions\n this._currentRequestSubject.next();\n \n this.isAllExpanded = false;\n // Clear expansion state when loading new data to avoid stale expansion state\n CollectionHelper.clearSet(this.expandedRowIds);\n \n const filterFormData = this.filterFormGroup?.value;\n this.filterHasNonEmptyValue = ValidationHelper.hasFormData(filterFormData);\n\n // Build query string using helper\n const qs = QueryParamsHelper.buildQueryString(\n filterFormData,\n this.sortFromQueryParams,\n this.resetFlag ? 0 : this.pageIndex,\n this.pageSize,\n this.search\n );\n\n if (this.resetFlag) {\n this.pageIndex = 0;\n }\n\n if (this._paginator) {\n this._paginator.pageIndex = this.pageIndex;\n this._paginator.pageSize = this.pageSize;\n }\n\n // Update URL if needed\n const baseUrl = UrlHelper.getBaseUrl(this.router);\n const genUrl = UrlHelper.buildUrl(baseUrl, qs);\n \n if (this.keepFilterInUrl && UrlHelper.hasUrlChanged(genUrl)) {\n UrlHelper.updateUrl(this.location, baseUrl, qs.toString());\n this.filterFromQueryParams = QueryParamsHelper.parseQueryParams(window.location.href);\n }\n\n // Load data with race condition protection\n this.dataSource.loadWithCancellation(\n this.loadDataApiBaseUrl, \n this.pageIndex, \n this.pageSize, \n this.search, \n filterFormData, // Pass original form data - datasource will handle conversions\n this.sortObj,\n this._currentRequestSubject\n );\n this.getFinalSelectedFilterValuesToDisplay();\n\n this.resetFlag = false;\n }\n\n\n onPaginationChanges() {\n if (this.pageIndex != this._paginator.pageIndex) {\n this.pageIndex = this._paginator.pageIndex;\n // Clear computed backgrounds before loading new page data\n this.clearRowBackgroundCache();\n this.getList();\n this.pageIndexChange.emit(this.pageIndex);\n }\n\n if (this.pageSize != this._paginator.pageSize) {\n this.pageSize = this._paginator.pageSize;\n // Clear computed backgrounds before loading new page size data\n this.clearRowBackgroundCache();\n this.getList();\n this.pageSizeChange.emit(this.pageSize);\n storageHelper.setToLocalStorageWithExpiry('user_pagination_page_size', this.pageSize, 1000 * 60 * 60 * 24 * 15);\n }\n\n }\n\n onSetSelectedTemplate(data: any) {\n console.log(\"=== onSetSelectedTemplate ===\", data);\n // this.selectedTemplate = data;\n }\n\n onChangeDisplayColumns(columns: string[]) {\n console.log(\"=== onChangeDisplayColumns ===\", columns);\n \n this.defaultDisplayedColumns = columns;\n this.handleDisplayedColumns('onChangeDisplayColumns');\n }\n\n onChangeFromStartColumnNumber(columnNumber: number) {\n this.startStickyColumnCount = columnNumber;\n }\n\n onChangeFromEndColumnNumber(columnNumber: number) {\n this.endStickyColumnCount = columnNumber;\n }\n\n goToUrl(url: string) {\n UrlHelper.safeNavigate(this.router, url);\n }\n\n toggleSelection(status: MatCheckboxChange, row: any): void {\n if (this.onlySingleSelection && status.checked) {\n this.selection.clear();\n }\n this.selection.toggle(row);\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n\n checkAllRowsSelected() {\n this.isAllRowsSelected = this.selection.selected.length === this.dataSource.apiSubject.value.length;\n this.allRowsSelectedChange.emit(this.isAllRowsSelected);\n }\n\n\n toggleAllRows(): void {\n if (this.isAllRowsSelected) {\n this.selection.clear();\n } else {\n this.dataSource.apiSubject.value.forEach(row => {\n this.selection.select(row);\n });\n }\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n stopPropagation($event: any) {\n $event.stopPropagation();\n }\n\n isChecked(row: any): boolean {\n return ValidationHelper.hasRowKey(row, this.selectedRowKey) && \n this.selectedIds.has(row[this.selectedRowKey]);\n }\n\n getQueryParams(url: string): Record<string, string | string[]> {\n return QueryParamsHelper.parseQueryParams(url);\n }\n\n\n isStickyStart(columnName: string): boolean {\n const index = this.displayedColumns.indexOf(columnName);\n return index !== -1 && index < this.startStickyColumnCount;\n }\n\n isStickyEnd(columnName: string): boolean {\n const index = this.displayedColumns.indexOf(columnName);\n if (index === -1) return false;\n return index >= this.displayedColumns.length - this.endStickyColumnCount;\n }\n\n getColumnClasses(column: SmartTableWrapperColumnsConfig): { [key: string]: boolean } {\n // Check if alignment is explicitly specified\n if (column.align) {\n return {\n 'text-right': column.align === 'right',\n 'text-left': column.align === 'left',\n 'text-center': column.align === 'center'\n };\n } else {\n // Default alignment based on column type\n switch (column.type) {\n case 'money':\n case 'quantity':\n return { 'text-right': true };\n case 'number':\n return { 'text-center': true };\n default:\n return {};\n }\n }\n }\n\n\n // Optimized getRowBackground - simple O(1) lookup\n getRowBackground(row: any): string | null {\n // Early return if no background function is provided\n if (!this.rowsConfig.backgroundApplyFunction) {\n return null;\n }\n\n const rowId = row?.id || row?.[this.selectedRowKey] || JSON.stringify(row);\n \n // If not computed yet, compute on-demand (fallback)\n if (!this.computedRowBackgrounds.has(rowId)) {\n try {\n const background = this.rowsConfig.backgroundApplyFunction(row);\n this.computedRowBackgrounds.set(rowId, background);\n return background;\n } catch (error) {\n console.warn('Error computing row background:', error);\n return null;\n }\n }\n \n return this.computedRowBackgrounds.get(rowId) || null;\n }\n\n\n drop(event: CdkDragDrop<any[]>) {\n // Ignore if the item was dropped at the same index\n if (event.previousIndex === event.currentIndex) {\n return;\n }\n\n // Access current data from apiSubject\n const currentData = [...this.dataSource.apiSubject.value];\n\n if (!currentData || currentData.length === 0) {\n return;\n }\n\n // Rearrange items based on the drop event\n moveItemInArray(currentData, event.previousIndex, event.currentIndex);\n\n // Update the apiSubject with reordered data\n this.dataSource.apiSubject.next(currentData);\n\n // We need to emit this also\n this.listDataSequenceChange.emit(currentData);\n }\n\n handleButtonClick(config: any) {\n UrlHelper.handleButtonClick(this.router, config);\n }\n\n handleSecondButtonClick(config: any) {\n UrlHelper.handleSecondaryButtonClick(this.router, config);\n }\n\n setSelectedRows(){\n this.selection.clear();\n this.dataSource.apiSubject.value.forEach(row => {\n if(this.selectedRowIds.indexOf(row[this.selectedRowKey]) != -1){\n this.selection.select(row);\n }\n });\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n }\n\n public resetSelectedRows(){\n this.isAllRowsSelected = false;\n this.selection.clear();\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n }\n\n /** Toggles the expanded state of an element. */\n public toggleExpand(element: any) {\n if (!this.isExpansion || !element) {\n return;\n }\n \n const rowId = this.getRowIdentifier(element);\n \n if (this.expandedRowIds.has(rowId)) {\n this.expandedRowIds.delete(rowId);\n } else {\n this.expandedRowIds.add(rowId);\n }\n }\n\n public expandAllRow(){\n if (!this.isExpansion || !this.dataSource?.apiSubject?.value) {\n return;\n }\n \n this.isAllExpanded = !this.isAllExpanded;\n \n if (this.isAllExpanded) {\n // Add all row IDs to expanded set\n this.dataSource.apiSubject.value.forEach(row => {\n const rowId = this.getRowIdentifier(row);\n this.expandedRowIds.add(rowId);\n });\n } else {\n // Clear all expanded rows\n this.expandedRowIds.clear();\n }\n }\n}\n","<section [class.tis-page]=\"!hideHeader\">\n <div class=\"tis-page-header\" *ngIf=\"!hideHeader\">\n <nav aria-label=\"tis-breadcrumb\">\n <ol class=\"tis-breadcrumb\">\n <li class=\"tis-breadcrumb-item\"><a href=\"javascript:;\" [routerLink]=\"homeUrl\">{{t?.home}}</a></li>\n @for(breadcrumb of breadcrumbs; track trackByBreadcrumb($index, breadcrumb)) {\n <li class=\"tis-breadcrumb-item\" *ngIf=\"breadcrumb?.url\">\n <a href=\"javascript:;\" (click)=\"goToUrl(breadcrumb.url)\">{{breadcrumb?.name}}</a>\n </li>\n }\n <li class=\"tis-breadcrumb-item active\">\n {{mainTitle}}\n </li>\n </ol>\n </nav>\n <ng-content select=\"[slot='top-buttons-section']\"></ng-content>\n </div>\n <h1 class=\"tis-page-title\" *ngIf=\"!hideHeader\">{{mainTitle}}</h1>\n <div class=\"tis-page-body\">\n <div class=\"tis-page-body-content\">\n\n @if(initialLoading){\n <div class=\"tis-d-flex tis-justify-content-center pb-2 pt-7\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"60\"></mat-progress-spinner>\n </div>\n } @else {\n\n @if ((dataSource?.totalDataLength$ | async) || (dataSource?.loading$ | async) || search ||\n filterHasNonEmptyValue || showFilterButtonSection || displayAfterFilterRemoved) {\n <div class=\"tis-table-container\">\n @if(!hideTableHeader){\n <div class=\"tis-table-container-header\">\n <ul class=\"tis-inline-group\">\n <li class=\"tis-inline-group-item\">\n <tis-columns-btn [columnCustomizationUrlConfig]=\"columnCustomizationUrlConfig\" [t]=\"t\"\n [componentName]=\"componentName\" [(selectedTemplate)]=\"selectedTemplate\" [defaultColumns]=\"defaultColumns\" [columns]=\"columns\"\n (selectedTemplateChange)=\"onSetSelectedTemplate($event)\"\n (displayedColumnsChange)=\"onChangeDisplayColumns($event)\"\n (fromStartColumnNumberChange)=\"onChangeFromStartColumnNumber($event)\"\n (fromEndColumnNumberChange)=\"onChangeFromEndColumnNumber($event)\"></tis-columns-btn>\n </li>\n <ng-content select=\"[slot='filter-button-section']\"></ng-content>\n </ul>\n <div class=\"flex items-center\">\n <ul class=\"tis-inline-group\">\n <ng-content select=\"[slot='filter-right-button-section']\"></ng-content>\n </ul>\n @if(!isMobile && searchPlaceholder && searchPlaceholder != ''){\n <mat-form-field\n class=\"custom-mat-form-field-mb-0 search-mat-form-field ml-3 tis-table-search-field\"\n appearance=\"outline\">\n <span class=\"material-icons\" matPrefix>search</span>\n <input matInput [formControl]=\"searchCtrl\" [placeholder]=\"searchPlaceholder\">\n <span class=\"material-icons mr-2 tis-curser-pointer\" matSuffix\n (click)=\"searchCtrl.setValue('')\"\n *ngIf=\"searchCtrl.value && searchCtrl.value != ''\">close</span>\n </mat-form-field>\n }\n </div>\n </div>\n }\n\n @if (filterFormGroup) {\n\n <ng-content select=\"[slot='filter-form-section']\"></ng-content>\n\n @if(finalSelectedFilterValuesToDisplay.length && filterApplied) {\n <div class=\"flex gap-3 mb-3 filter-applied-section md-hide-scrollbar\">\n @for(v of finalSelectedFilterValuesToDisplay; track trackByFilterValue($index, v)) {\n @if (v) {\n <span class=\"tis-filter-badge\" style=\"white-space: nowrap;\">\n @if(v.labelKey && v.labelKey != '' && (v.valueKey || v.value)) {\n <span class=\"font-semibold\"> {{v.labelKey }} </span>\n }\n @if(v.valueKey) {\n {{v.valueKey }}\n } @else {\n {{v.value }}\n }\n <span class=\"material-icons tis-curser-pointer\"\n (click)=\"removeParticularFilter(v)\">cancel</span>\n </span>\n }\n }\n </div>\n }\n }\n\n @if(isMobile && searchPlaceholder && searchPlaceholder != ''){\n <mat-form-field\n class=\"custom-mat-form-field-mb-0 search-mat-form-field mb-3 tis-table-search-field\"\n appearance=\"outline\">\n <span class=\"material-icons\" matPrefix>search</span>\n <input matInput [formControl]=\"searchCtrl\" [placeholder]=\"searchPlaceholder\">\n <span class=\"material-icons mr-2 tis-curser-pointer\" matSuffix\n (click)=\"searchCtrl.setValue('')\"\n *ngIf=\"searchCtrl.value && searchCtrl.value != ''\">close</span>\n </mat-form-field>\n }\n\n \n @if(loaderPosition == 'top'){\n @if(dataSource?.loading$ | async){\n <div class=\"tis-d-flex tis-justify-content-center py-2\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"loadingSpinnerDiameter\"></mat-progress-spinner>\n </div>\n }\n }\n <div class=\"tis-table-container-body\">\n <div class=\"tis-table-wrapper\" [appScrolling]=\"true\">\n\n <!--Table Here-->\n <table mat-table matSort [dataSource]=\"dataSource\" class=\"tis-table\" [class.tis-table-bordered]=\"disableBorderedView == false\" cdkDropList (cdkDropListDropped)=\"drop($event)\" [cdkDropListLockAxis]=\"'y'\" multiTemplateDataRows>\n\n @if (enableRowsSelection) {\n <ng-container matColumnDef=\"Select\">\n <th mat-header-cell *matHeaderCellDef>\n @if (enableAllRowsSelection) {\n <mat-checkbox color=\"primary\" (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"isAllRowsSelected\"\n [indeterminate]=\"selection.hasValue() && !isAllRowsSelected\">\n </mat-checkbox>\n }\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox color=\"primary\" (click)=\"stopPropagation($event)\" (change)=\"$event ? toggleSelection($event, row) : null\" [checked]=\"isChecked(row)\"></mat-checkbox>\n </td>\n </ng-container>\n }\n\n @for(column of autoRenderColumns; track trackByAutoColumn($index, column); let i = $index; let l = $last){\n <!-- [sticky]=\"i < startStickyColumnCount\" [stickyEnd]=\"i > (autoRenderColumns?.length - endStickyColumnCount)\" -->\n <ng-container [matColumnDef]=\"column?.columnDef || column.name\" [sticky]=\"isStickyStart(column?.columnDef || column.name)\" [stickyEnd]=\"isStickyEnd(column?.columnDef || column.name)\">\n @if(column.type == 'expand') {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n <div style=\"display: flex; align-items: center; gap: 5px;\">\n <span>{{ column?.columnName ? column?.columnName : t[column.name] }}</span>\n <mat-icon *ngIf=\"!isAllExpanded\">expand_more</mat-icon>\n <mat-icon *ngIf=\"isAllExpanded\">expand_less</mat-icon>\n </div>\n </th>\n }\n @else if(column.sort) {\n <th mat-header-cell mat-sort-header *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n @else {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n \n\n @if(column.type == 'date'){\n <td mat-cell *matCellDef=\"let element\" class=\"1al-{{column.align}} 1ty-{{column.type}}\" >\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | tisDate) : ''}}\n </p>\n </td>\n } @else if(column.type == 'date-time'){\n <td mat-cell *matCellDef=\"let element\" class=\"2al-{{column.align}} 2ty-{{column.type}}\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | tisDateTime) : ''}}\n </p>\n </td>\n } @else if(column.type == 'date-time-with-seconds'){\n <td mat-cell *matCellDef=\"let element\" class=\"2al-{{column.align}} 2ty-{{column.type}}\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | tisDateTimeWithSeconds) : ''}}\n </p>\n </td>\n } @else {\n <td mat-cell *matCellDef=\"let element\" class=\"3al-{{column.align}} 3ty-{{column.type}}\" [ngClass]=\"getColumnClasses(column)\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n @if (column.type == 'quantity') {\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | number : '1.4-4') : '-' }}\n } @else if (column.type == 'money') {\n {{ column.valueKey && (getNestedValue(element, column.valueKey))?.toFixed(2) }}\n } @else {\n {{ column.valueKey && getNestedValue(element, column.valueKey) }}\n }\n </p>\n </td>\n }\n </ng-container>\n\n }\n\n\n @for(column of templateRenderColumns; track trackByTemplateColumn($index, column); let i = $index; let l = $last){\n <!-- [sticky]=\"i < startStickyColumnCount\" [stickyEnd]=\"l\" -->\n <ng-container [matColumnDef]=\"column?.columnDef || column.name\" [sticky]=\"isStickyStart(column?.columnDef || column.name)\" [stickyEnd]=\"isStickyEnd(column?.columnDef || column.name)\">\n @if(column.type == 'expand') {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n <div style=\"display: flex; align-items: center; gap: 5px; cursor: pointer;\" (click)=\"expandAllRow()\">\n <span>{{ column?.columnName ? column?.columnName : t[column.name] }}</span>\n <mat-icon *ngIf=\"!isAllExpanded\">expand_more</mat-icon>\n <mat-icon *ngIf=\"isAllExpanded\">expand_less</mat-icon>\n </div>\n </th>\n }\n @else if(column.sort) {\n <th mat-header-cell *matHeaderCellDef mat-sort-header [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n @else {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" class=\"4al-{{column.align}} 4ty-{{column.type}}\" [ngClass]=\"getColumnClasses(column)\">\n <ng-container *ngIf=\"column.template as template\">\n <ng-container *ngTemplateOutlet=\"template; context: { colDef: column, colData: element }\"></ng-container>\n </ng-container>\n </td>\n </ng-container>\n }\n\n <!--Drag Column Def Start-->\n <ng-container [matColumnDef]=\"'drag'\" >\n <th mat-header-cell *matHeaderCellDef>\n --\n </th>\n <td mat-cell *matCellDef=\"let element\" class=\"5al-drag 5ty-drag\">\n <mat-icon cdkDragHandle class=\"tis-curser-pointer\" style=\"color: rgba(0, 0, 0, 0.54); font-size: 19px; width: 19px; height: 19px;\">drag_indicator</mat-icon>\n </td>\n </ng-container>\n <!--Drag Column Def End-->\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"displayedColumns.length\" [style.border-bottom-width]=\"isRowExpanded(element) ? '1px' : '0px'\" style=\"padding: 0px !important;\">\n <div class=\"tis-element-detail-wrapper\" [class.tis-element-detail-wrapper-expanded]=\"isRowExpanded(element)\">\n <ng-container *ngIf=\"expandedTemplate as template\">\n <ng-container *ngTemplateOutlet=\"template; context: { colData: element }\"></ng-container>\n </ng-container>\n </div>\n </td>\n </ng-container>\n\n\n <tr class=\"mat-row\" *matNoDataRow>\n <td class=\"mat-cell\" [attr.colspan]=\"displayedColumns.length\">\n <div class=\"tis-data-not-found\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"130\" height=\"126.89\" viewBox=\"0 0 647.63626 632.17383\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" role=\"img\" artist=\"Katerina Limpitsouni\" source=\"https://undraw.co/\">\n <path d=\"M687.3279,276.08691H512.81813a15.01828,15.01828,0,0,0-15,15v387.85l-2,.61005-42.81006,13.11a8.00676,8.00676,0,0,1-9.98974-5.31L315.678,271.39691a8.00313,8.00313,0,0,1,5.31006-9.99l65.97022-20.2,191.25-58.54,65.96972-20.2a7.98927,7.98927,0,0,1,9.99024,5.3l32.5498,106.32Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#f2f2f2\"/>\n <path d=\"M725.408,274.08691l-39.23-128.14a16.99368,16.99368,0,0,0-21.23-11.28l-92.75,28.39L380.95827,221.60693l-92.75,28.4a17.0152,17.0152,0,0,0-11.28028,21.23l134.08008,437.93a17.02661,17.02661,0,0,0,16.26026,12.03,16.78926,16.78926,0,0,0,4.96972-.75l63.58008-19.46,2-.62v-2.09l-2,.61-64.16992,19.65a15.01489,15.01489,0,0,1-18.73-9.95l-134.06983-437.94a14.97935,14.97935,0,0,1,9.94971-18.73l92.75-28.4,191.24024-58.54,92.75-28.4a15.15551,15.15551,0,0,1,4.40966-.66,15.01461,15.01461,0,0,1,14.32032,10.61l39.0498,127.56.62012,2h2.08008Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M398.86279,261.73389a9.0157,9.0157,0,0,1-8.61133-6.3667l-12.88037-42.07178a8.99884,8.99884,0,0,1,5.9712-11.24023l175.939-53.86377a9.00867,9.00867,0,0,1,11.24072,5.9707l12.88037,42.07227a9.01029,9.01029,0,0,1-5.9707,11.24072L401.49219,261.33887A8.976,8.976,0,0,1,398.86279,261.73389Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"12.66462\" fill=\"#fff\"/>\n <path d=\"M878.81836,716.08691h-338a8.50981,8.50981,0,0,1-8.5-8.5v-405a8.50951,8.50951,0,0,1,8.5-8.5h338a8.50982,8.50982,0,0,1,8.5,8.5v405A8.51013,8.51013,0,0,1,878.81836,716.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#e6e6e6\"/>\n <path d=\"M723.31813,274.08691h-210.5a17.02411,17.02411,0,0,0-17,17v407.8l2-.61v-407.19a15.01828,15.01828,0,0,1,15-15H723.93825Zm183.5,0h-394a17.02411,17.02411,0,0,0-17,17v458a17.0241,17.0241,0,0,0,17,17h394a17.0241,17.0241,0,0,0,17-17v-458A17.02411,17.02411,0,0,0,906.81813,274.08691Zm15,475a15.01828,15.01828,0,0,1-15,15h-394a15.01828,15.01828,0,0,1-15-15v-458a15.01828,15.01828,0,0,1,15-15h394a15.01828,15.01828,0,0,1,15,15Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M801.81836,318.08691h-184a9.01015,9.01015,0,0,1-9-9v-44a9.01016,9.01016,0,0,1,9-9h184a9.01016,9.01016,0,0,1,9,9v44A9.01015,9.01015,0,0,1,801.81836,318.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"12.18187\" fill=\"#fff\"/>\n </svg>\n <h5 class=\"tis-h5\">{{dataNotFoundConfig.title}}</h5>\n </div>\n </td>\n </tr>\n\n <!-- Apply Drag and Drop to tbody -->\n @if(enableDragNDrop) {\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngStyle]=\"{'background-color': getRowBackground(row) || 'inherit'}\" [class.tis-curser-pointer]=\"isExpandedRow\" (click)=\"(isExpansion && isExpandedRow) ? toggleExpand(row) : null\" cdkDrag></tr>\n }\n\n @if(!enableDragNDrop) {\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngStyle]=\"{'background-color': getRowBackground(row) || 'inherit'}\" [class.tis-curser-pointer]=\"isExpandedRow\" (click)=\"(isExpansion && isExpandedRow) ? toggleExpand(row) : null\"></tr>\n } \n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"tis-detail-row\"></tr>\n </table>\n <!--Table End-->\n\n </div>\n @if(loaderPosition == 'bottom'){\n @if(dataSource?.loading$ | async){\n <div class=\"tis-d-flex tis-justify-content-center py-2\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"loadingSpinnerDiameter\"></mat-progress-spinner>\n </div>\n }\n }\n @if (!hidePaginator) {\n <div class=\"tis-table-paginator\">\n <mat-paginator [length]=\"dataSource?.totalDataLength?.value\" [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons></mat-paginator>\n </div>\n }\n </div>\n </div>\n } @else {\n\n @if(dataNotFoundConfig) {\n <div class=\"tis-data-not-found\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"130\" height=\"126.89\" viewBox=\"0 0 647.63626 632.17383\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" role=\"img\" artist=\"Katerina Limpitsouni\" source=\"https://undraw.co/\">\n <path d=\"M687.3279,276.08691H512.81813a15.01828,15.01828,0,0,0-15,15v387.85l-2,.61005-42.81006,13.11a8.00676,8.00676,0,0,1-9.98974-5.31L315.678,271.39691a8.00313,8.00313,0,0,1,5.31006-9.99l65.97022-20.2,191.25-58.54,65.96972-20.2a7.98927,7.98927,0,0,1,9.99024,5.3l32.5498,106.32Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#f2f2f2\"/>\n <path d=\"M725.408,274.08691l-39.23-128.14a16.99368,16.99368,0,0,0-21.23-11.28l-92.75,28.39L380.95827,221.60693l-92.75,28.4a17.0152,17.0152,0,0,0-11.28028,21.23l134.08008,437.93a17.02661,17.02661,0,0,0,16.26026,12.03,16.78926,16.78926,0,0,0,4.96972-.75l63.58008-19.46,2-.62v-2.09l-2,.61-64.16992,19.65a15.01489,15.01489,0,0,1-18.73-9.95l-134.06983-437.94a14.97935,14.97935,0,0,1,9.94971-18.73l92.75-28.4,191.24024-58.54,92.75-28.4a15.15551,15.15551,0,0,1,4.40966-.66,15.01461,15.01461,0,0,1,14.32032,10.61l39.0498,127.56.62012,2h2.08008Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M398.86279,261.73389a9.0157,9.0157,0,0,1-8.61133-6.3667l-12.88037-42.07178a8.99884,8.99884,0,0,1,5.9712-11.24023l175.939-53.86377a9.00867,9.00867,0,0,1,11.24072,5.9707l12.88037,42.07227a9.01029,9.01029,0,0,1-5.9707,11.24072L401.49219,261.33887A8.976,8.976,0,0,1,398.86279,261.73389Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"12.66462\" fill=\"#fff\"/>\n <path d=\"M878.81836,716.08691h-338a8.50981,8.50981,0,0,1-8.5-8.5v-405a8.50951,8.50951,0,0,1,8.5-8.5h338a8.50982,8.50982,0,0,1,8.5,8.5v405A8.51013,8.51013,0,0,1,878.81836,716.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#e6e6e6\"/>\n <path d=\"M723.31813,274.08691h-210.5a17.02411,17.02411,0,0,0-17,17v407.8l2-.61v-407.19a15.01828,15.01828,0,0,1,15-15H723.93825Zm183.5,0h-394a17.02411,17.02411,0,0,0-17,17v458a17.0241,17.0241,0,0,0,17,17h394a17.0241,17.0241,0,0,0,17-17v-458A17.02411,17.02411,0,0,0,906.81813,274.08691Zm15,475a15.01828,15.01828,0,0,1-15,15h-394a15.01828,15.01828,0,0,1-15-15v-458a15.01828,15.01828,0,0,1,15-15h394a15.01828,15.01828,0,0,1,15,15Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M801.81836,318.08691h-184a9.01015,9.01015,0,0,1-9-9v-44a9.01016,9.01016,0,0,1,9-9h184a9.01016,9.01016,0,0,1,9,9v44A9.01015,9.01015,0,0,1,801.81836,318.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"12.18187\" fill=\"#fff\"/>\n </svg>\n <h5 class=\"tis-h5\">{{dataNotFoundConfig.title}}</h5>\n <p class=\"tis-p\">{{dataNotFoundConfig.desc}}</p>\n @if((dataNotFoundConfig.btnUrl || dataNotFoundConfig?.btnClick) && dataNotFoundConfig.btnText) {\n <button mat-flat-button color=\"primary\" class=\"tis-text-upper\"\n (click)=\"handleButtonClick(dataNotFoundConfig)\">\n <mat-icon>add</mat-icon>\n {{dataNotFoundConfig.btnText}}\n </button>\n }\n @if((dataNotFoundConfig.secondBtnUrl || dataNotFoundConfig?.secondBtnClick) && dataNotFoundConfig.secondBtnText) {\n <button mat-stroked-button color=\"primary\" class=\"tis-text-upper\"\n (click)=\"handleSecondButtonClick(dataNotFoundConfig)\">\n <mat-icon>add</mat-icon>\n {{dataNotFoundConfig.secondBtnText}}\n </button>\n }\n </div>\n }\n\n }\n\n }\n\n </div>\n </div>\n</section>","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'qty',\n standalone: false\n})\nexport class Quantity implements PipeTransform {\n decimalPoints = 4;\n\n transform(value: number | string): any {\n if(Number(value) > 0){\n let roundValue: any = this.roundNumber(Number(value), this.decimalPoints);\n let roundValueArr = String(roundValue)?.split('.');\n if(roundValueArr?.length > 1){\n let currentDesimal = roundValueArr[1];\n if(currentDesimal?.length < this.decimalPoints){\n roundValue = `${roundValue}`;\n for (let index = 0; index < (this.decimalPoints - currentDesimal?.length); index++) {\n roundValue = `${roundValue}0`;\n }\n }\n }\n else{\n roundValue = `${roundValueArr[0]}.0000`;\n }\n return roundValue;\n }\n else{\n return 0;\n }\n }\n\n roundNumber(number: number, decimals = 0) {\n const multiplier = Math.pow(10, decimals);\n return Math.round(number * multiplier) / multiplier;\n }\n\n\n}","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'money',\n standalone: false\n})\nexport class Money implements PipeTransform {\n decimalPoints = 4;\n\n transform(value: number | string): any {\n if(Number(value) > 0){\n let roundValue: any = this.roundNumber(Number(value), this.decimalPoints);\n let roundValueArr = String(roundValue)?.split('.');\n if(roundValueArr?.length > 1){\n let currentDesimal = roundValueArr[1];\n if(currentDesimal?.length < this.decimalPoints){\n roundValue = `${roundValue}`;\n for (let index = 0; index < (this.decimalPoints - currentDesimal?.length); index++) {\n roundValue = `${roundValue}0`;\n }\n }\n }\n else{\n roundValue = `${roundValueArr[0]}.0000`;\n }\n return roundValue;\n }\n else{\n return 0;\n }\n }\n\n roundNumber(number: number, decimals = 0) {\n const multiplier = Math.pow(10, decimals);\n return Math.round(number * multiplier) / multiplier;\n }\n\n\n}","import { NgModule } from '@angular/core';\nimport { TisSmartTableViewerComponent } from './components/tis-smart-table-viewer/tis-smart-table-viewer.component';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, RouterOutlet } from '@angular/router';\nimport { LayoutModule } from '@angular/cdk/layout';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { TisColumnsBtnComponent } from './components/tis-columns-btn/tis-columns-btn.component';\nimport { TisSmartTableConfirmationDialogComponent } from './components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component';\nimport { TisSmartTableErrorDialogComponent } from './components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component';\nimport { CreateColumnsTemplateComponent } from './components/create-columns-template/create-columns-template.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { ScrollingDirective } from './directives/scrolling/scrolling.directive';\nimport { TisDatePipe } from './pipes/tis-date.pipe';\nimport { TisDateTimePipe } from './pipes/tis-date-time.pipe';\nimport { TisDateTimeWithSecondsPipe } from './pipes/tis-date-time-with-seconds.pipe';\nimport { Quantity } from './pipes/quantity.pipe';\nimport { Money } from './pipes/money.pipe';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatSortModule } from '@angular/material/sort';\n\n\nconst directives = [\n ScrollingDirective\n];\n\nconst pipes = [\n TisDatePipe,\n TisDateTimePipe,\n TisDateTimeWithSecondsPipe,\n Quantity,\n Money,\n];\n\nconst uiImports = [\n MatTooltipModule,\n MatIconModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSnackBarModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n MatPaginatorModule,\n LayoutModule, // For Breakpoint Observer,\n MatDialogModule,\n MatTableModule,\n MatCheckboxModule,\n MatMenuModule,\n MatDividerModule,\n MatSortModule\n];\n\n\n@NgModule({\n declarations: [\n ...directives,\n ...pipes,\n TisSmartTableViewerComponent,\n TisColumnsBtnComponent,\n CreateColumnsTemplateComponent,\n TisSmartTableErrorDialogComponent,\n TisSmartTableConfirmationDialogComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterLink,\n RouterOutlet,\n ...uiImports,\n DragDropModule\n ],\n exports: [\n TisSmartTableViewerComponent\n ]\n})\nexport class TisSmartTableViewerModule { }\n","/*\n * Public API Surface of tis-smart-table-viewer\n */\n\nexport * from './lib/tis-smart-table-viewer.service';\nexport * from './lib/tis-smart-table-viewer.module';\nexport * from './lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component';\n\nexport * from './lib/interfaces';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4","i1","i3","i5","i7","i11","i14.ScrollingDirective","i1.TisHelperService","i2.UserCustomizationService","i6","i8","storageHelper.getFromLocalStorageWithExpiry","storageHelper.setToLocalStorageWithExpiry","i2.ApiService","i9","i10","i12","i13","i14","i16","i17.ScrollingDirective","i18.TisColumnsBtnComponent","i19.TisDatePipe","i20.TisDateTimePipe","i21.TisDateTimeWithSecondsPipe"],"mappings":"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"}
1
+ {"version":3,"file":"servicemind.tis-tis-smart-table-viewer.mjs","sources":["../../../projects/tis-smart-table-viewer/src/lib/tis-smart-table-viewer.service.ts","../../../projects/tis-smart-table-viewer/src/lib/datasources/api.datasource.ts","../../../projects/tis-smart-table-viewer/src/lib/services/api.service.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/storage-helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/timeout-manager.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/date-time.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/query-params.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/filter-display.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/validation.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/collection.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/url.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/directives/scrolling/scrolling.directive.ts","../../../projects/tis-smart-table-viewer/src/lib/services/user-customization.service.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component.html","../../../projects/tis-smart-table-viewer/src/lib/services/tis-helper.service.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component.html","../../../projects/tis-smart-table-viewer/src/lib/components/create-columns-template/create-columns-template.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/create-columns-template/create-columns-template.component.html","../../../projects/tis-smart-table-viewer/src/lib/components/tis-columns-btn/tis-columns-btn.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-columns-btn/tis-columns-btn.component.html","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date-time.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date-time-with-seconds.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component.html","../../../projects/tis-smart-table-viewer/src/lib/pipes/quantity.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/money.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/tis-smart-table-viewer.module.ts","../../../projects/tis-smart-table-viewer/src/public-api.ts","../../../projects/tis-smart-table-viewer/src/servicemind.tis-tis-smart-table-viewer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TisSmartTableViewerService {\n\n constructor() { }\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subscription, of, Subject, takeUntil } from 'rxjs';\nimport { catchError, finalize } from 'rxjs/operators';\nimport { ApiService } from '../services/api.service';\n\nexport class ApiDataSource implements DataSource<any> {\n\n private apiSubs!: Subscription;\n\n apiSubject = new BehaviorSubject<any[]>([]);\n extraDataSubject = new BehaviorSubject<any>(null);\n\n private loadingSubject = new BehaviorSubject<boolean>(false);\n public loading$ = this.loadingSubject.asObservable();\n\n public totalDataLength = new BehaviorSubject<number | null>(null);\n public totalDataLength$ = this.totalDataLength.asObservable();\n\n constructor(private apiService: ApiService) { \n console.log(' DataSource Initialized...')\n }\n\n connect(collectionViewer: CollectionViewer): Observable<any[]> {\n return this.apiSubject.asObservable();\n }\n\n disconnect(collectionViewer: CollectionViewer): void {\n this.apiSubject.complete();\n this.extraDataSubject.complete();\n this.loadingSubject.complete();\n\n if(this.apiSubs) {\n this.apiSubs.unsubscribe();\n }\n }\n\n load(url: string, pageIndex: number, pageSize: number, search: string, filter?: object, sortFilter?: object) {\n\n if(this.apiSubs) {\n this.apiSubs.unsubscribe();\n }\n\n this.loadingSubject.next(true);\n this.apiSubs = this.apiService.getList(url, (pageIndex + 1), pageSize, search, {filter}, {sortFilter}).pipe(\n catchError(() => of([])),\n finalize(() => this.loadingSubject.next(false))\n ).subscribe(r => {\n console.log(`DataSource: Url: ${url}, Reply:`, r);\n if (r?.data?.length > 0) {\n this.totalDataLength.next(r?.total);\n }\n else {\n this.totalDataLength.next(0);\n }\n this.apiSubject.next(r?.data);\n this.extraDataSubject.next(r?.extraData);\n });\n }\n\n loadWithCancellation(url: string, pageIndex: number, pageSize: number, search: string, filter?: object, sortFilter?: object, cancelSubject?: Subject<void>) {\n\n if(this.apiSubs) {\n this.apiSubs.unsubscribe();\n }\n\n this.loadingSubject.next(true);\n \n let apiCall$ = this.apiService.getList(url, (pageIndex + 1), pageSize, search, {filter}, {sortFilter}).pipe(\n catchError(() => of([])),\n finalize(() => this.loadingSubject.next(false))\n );\n\n // Add cancellation capability if provided\n if (cancelSubject) {\n apiCall$ = apiCall$.pipe(takeUntil(cancelSubject));\n }\n\n this.apiSubs = apiCall$.subscribe(r => {\n console.log(`DataSource: Url: ${url}, Reply:`, r);\n if (r?.data?.length > 0) {\n this.totalDataLength.next(r?.total);\n }\n else {\n this.totalDataLength.next(0);\n }\n this.apiSubject.next(r?.data);\n this.extraDataSubject.next(r?.extraData);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n private token = '';\n\n constructor(private http: HttpClient) {\n }\n\n getList(apiUrl: string, currentPage: number = 1, limit = 10, search = '', filters?: object, sortFilter?: object): Observable<any> {\n const body = { ...filters, ...sortFilter };\n\n if(this.token) {\n return this.http.post(`${apiUrl}?current_page=${currentPage}&per_page=${limit}&search=${search}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(`${apiUrl}?current_page=${currentPage}&per_page=${limit}&search=${search}`, body);\n }\n}\n","\nexport const setToLocalStorageWithExpiry = (key: string, value: any, ttl = 9 * 1000 * 60 * 60) => {\n const now = new Date();\n // `item` is an object which contains the original value\n // as well as the time when it's supposed to expire\n const item = {\n value,\n expiry: now.getTime() + ttl\n };\n localStorage.setItem(key, JSON.stringify(item));\n};\n\n\nexport const getFromLocalStorageWithExpiry = (key: string) => {\n const itemStr = localStorage.getItem(key);\n // if the item doesn't exist, return null\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n const now = new Date();\n\n if (!item.expiry) {\n localStorage.removeItem(key);\n return null;\n }\n\n // compare the expiry time of the item with the current time\n if (now.getTime() > item.expiry) {\n // If the item is expired, delete the item from storage\n // and return null\n localStorage.removeItem(key);\n return null;\n }\n return item.value;\n};\n\nexport const removeMultipleKeys = (keys: string[]) => {\n console.log('Storage Helper: Keys To Remove:', keys);\n keys.forEach(key => {\n localStorage.removeItem(key);\n });\n}","/**\n * TimeoutManager - A utility class for managing timeouts to prevent memory leaks\n * \n * This class provides a centralized way to create, track, and clean up setTimeout calls.\n * It automatically handles cleanup when component is destroyed to prevent memory leaks.\n * \n * @example\n * ```typescript\n * export class MyComponent implements OnDestroy {\n * private timeoutManager = new TimeoutManager();\n * \n * someMethod() {\n * this.timeoutManager.createTimeout(() => {\n * console.log('Delayed execution');\n * }, 1000);\n * }\n * \n * ngOnDestroy() {\n * this.timeoutManager.clearAll(); // Clean up all pending timeouts\n * }\n * }\n * ```\n */\nexport class TimeoutManager {\n private activeTimeouts: Set<ReturnType<typeof setTimeout>> = new Set();\n\n /**\n * Creates a tracked timeout that will be automatically cleaned up\n * @param callback - Function to execute after delay\n * @param delay - Delay in milliseconds\n * @returns The timeout ID (same as setTimeout return value)\n */\n createTimeout(callback: () => void, delay: number): ReturnType<typeof setTimeout> {\n const timeoutId = setTimeout(() => {\n // Auto-remove from tracking when timeout executes naturally\n this.activeTimeouts.delete(timeoutId);\n callback();\n }, delay);\n\n // Add to tracking set\n this.activeTimeouts.add(timeoutId);\n return timeoutId;\n }\n\n /**\n * Manually clear a specific timeout\n * @param timeoutId - The timeout ID returned from createTimeout\n */\n clearTimeout(timeoutId: ReturnType<typeof setTimeout>): void {\n if (this.activeTimeouts.has(timeoutId)) {\n clearTimeout(timeoutId);\n this.activeTimeouts.delete(timeoutId);\n }\n }\n\n /**\n * Clear all pending timeouts\n * This should be called in ngOnDestroy to prevent memory leaks\n */\n clearAll(): void {\n this.activeTimeouts.forEach(timeoutId => clearTimeout(timeoutId));\n this.activeTimeouts.clear();\n }\n\n /**\n * Get the number of active (pending) timeouts\n * Useful for debugging and testing\n */\n get activeCount(): number {\n return this.activeTimeouts.size;\n }\n\n /**\n * Check if a specific timeout is still active\n * @param timeoutId - The timeout ID to check\n */\n isActive(timeoutId: ReturnType<typeof setTimeout>): boolean {\n return this.activeTimeouts.has(timeoutId);\n }\n}\n\n/**\n * Static helper functions for one-off timeout usage\n * Use the TimeoutManager class for more comprehensive timeout management\n */\nexport class TimeoutHelper {\n /**\n * Create a single tracked timeout with external cleanup responsibility\n * @param callback - Function to execute after delay\n * @param delay - Delay in milliseconds\n * @param trackingSet - Set to track the timeout for cleanup\n * @returns The timeout ID\n */\n static createTrackedTimeout(\n callback: () => void, \n delay: number,\n trackingSet: Set<ReturnType<typeof setTimeout>>\n ): ReturnType<typeof setTimeout> {\n const timeoutId = setTimeout(() => {\n trackingSet.delete(timeoutId);\n callback();\n }, delay);\n \n trackingSet.add(timeoutId);\n return timeoutId;\n }\n\n /**\n * Clear all timeouts in a tracking set\n * @param trackingSet - Set containing timeout IDs to clear\n */\n static clearAllTimeouts(trackingSet: Set<ReturnType<typeof setTimeout>>): void {\n trackingSet.forEach(timeoutId => clearTimeout(timeoutId));\n trackingSet.clear();\n }\n}\n","import { DateTime } from 'luxon';\n\n/**\n * Centralized date/time utility helper for consistent date handling across the library.\n * Provides common date formatting and conversion functions to avoid code duplication.\n */\nexport class DateTimeHelper {\n \n /**\n * Formats a date value for display based on form control type\n * @param value - The date value (Date, DateTime, string, number)\n * @param formControlType - The type of form control ('date', 'date-time', etc.)\n * @returns Formatted date string\n */\n static formatForDisplay(value: any, formControlType: string): string {\n if (!value) return '';\n \n const dateTime = this.toDateTime(value);\n if (!dateTime?.isValid) return '';\n \n switch (formControlType) {\n case 'date':\n return dateTime.toFormat('dd-MM-yyyy');\n case 'date-time':\n return dateTime.toFormat('dd-MM-yyyy HH:mm');\n case 'date-time-with-seconds':\n return dateTime.toFormat('dd-MM-yyyy HH:mm:ss');\n default:\n return dateTime.toFormat('dd-MM-yyyy');\n }\n }\n \n /**\n * Converts various date formats to DateTime object\n * @param value - Date value in various formats\n * @returns DateTime object or null if invalid\n */\n static toDateTime(value: any): DateTime | null {\n if (!value) return null;\n \n if (DateTime.isDateTime(value)) {\n return value;\n }\n \n if (value instanceof Date) {\n return DateTime.fromJSDate(value);\n }\n \n if (typeof value === 'string' && value !== '') {\n // Try parsing as milliseconds first (if numeric string)\n const numValue = Number(value);\n if (!isNaN(numValue) && numValue > 0) {\n return DateTime.fromMillis(numValue);\n }\n // Try parsing as ISO string\n return DateTime.fromISO(value);\n }\n \n if (typeof value === 'number') {\n return DateTime.fromMillis(value);\n }\n \n return null;\n }\n \n /**\n * Converts date/DateTime objects to milliseconds for API calls\n * @param value - Date value\n * @returns Milliseconds or original value if not a date\n */\n static toMilliseconds(value: any): any {\n if (!value) return value;\n \n if (value instanceof Date) {\n return DateTime.fromJSDate(value).toMillis();\n }\n \n if (DateTime.isDateTime(value)) {\n return value.toMillis();\n }\n \n return value;\n }\n \n /**\n * Checks if a query parameter key represents a date field\n * @param key - Query parameter key\n * @param value - Query parameter value\n * @returns True if it's a date field\n */\n static isDateQueryParam(key: string, value: string): boolean {\n return key.toLowerCase().includes('date') && value.length === 13;\n }\n \n /**\n * Parses date from query parameters\n * @param value - Query parameter value (milliseconds as string)\n * @returns DateTime object\n */\n static parseFromQueryParam(value: string): DateTime {\n return DateTime.fromMillis(Number(value));\n }\n}\n","import { DateTimeHelper } from './date-time.helper';\n\n/**\n * Centralized query parameter utility helper for consistent URL parameter handling.\n * Provides common functions for parsing, validating, and transforming query parameters.\n */\nexport class QueryParamsHelper {\n \n /**\n * Parses query parameters from URL and handles type conversions\n * @param url - Full URL string\n * @returns Parsed query parameters object\n */\n static parseQueryParams(url: string): Record<string, string | string[]> {\n const urlObj = new URL(url);\n const params = new URLSearchParams(urlObj.search);\n const paramsObj: Record<string, string | string[]> = {};\n\n params.forEach((value, key) => {\n // Check if the parameter already exists (for handling multiple values)\n if (paramsObj.hasOwnProperty(key)) {\n // If it's not already an array, convert it to an array\n if (!Array.isArray(paramsObj[key])) {\n paramsObj[key] = [paramsObj[key] as string];\n }\n // Push the new value to the existing array\n (paramsObj[key] as string[]).push(value);\n } else {\n // Assign the value to the key in the object\n paramsObj[key] = value;\n }\n });\n\n return paramsObj;\n }\n \n /**\n * Checks if a query parameter value is valid (not empty, null, or undefined)\n * @param value - Query parameter value\n * @returns True if valid\n */\n static isValidParam(value: any): boolean {\n return value && value !== '' && value !== 'null' && value !== 'undefined';\n }\n \n /**\n * Processes a query parameter value and handles arrays\n * @param value - Raw query parameter value\n * @returns Processed value (string or array)\n */\n static processParamValue(value: string): string | string[] {\n if (value.includes(',')) {\n return value.split(',');\n }\n return value;\n }\n \n /**\n * Processes query parameters for filter form with type conversions\n * @param queryParams - Raw query parameters\n * @param columnsCodeMapping - Column mapping for transformations\n * @returns Processed filter and sort objects\n */\n static processForFilters(\n queryParams: any, \n columnsCodeMapping: any[]\n ): { filterParams: any; sortParams: any; pageIndex: number; pageSize: number; search: string } {\n const filterParams: any = {};\n const sortParams: any = {};\n let pageIndex = 0;\n let pageSize = 10;\n let search = '';\n\n for (const key in queryParams) {\n if (!this.isValidParam(queryParams[key])) continue;\n\n let fixedKeyMatched = false;\n const value = queryParams[key];\n\n // Handle fixed parameters\n if (key.toLowerCase() === 'pageindex') {\n pageIndex = Number(value);\n fixedKeyMatched = true;\n } else if (key.toLowerCase() === 'pagesize') {\n pageSize = Number(value);\n fixedKeyMatched = true;\n } else if (key.toLowerCase() === 'sortby') {\n sortParams.sortBy = value;\n fixedKeyMatched = true;\n } else if (key.toLowerCase() === 'sortorder') {\n sortParams.sortOrder = value;\n fixedKeyMatched = true;\n } else if (key.toLowerCase() === 'search') {\n search = value;\n fixedKeyMatched = true;\n } else if (DateTimeHelper.isDateQueryParam(key, value)) {\n // Handle date parameters\n filterParams[key] = DateTimeHelper.parseFromQueryParam(value);\n fixedKeyMatched = true;\n }\n\n if (!fixedKeyMatched) {\n filterParams[key] = this.processParamValue(value);\n \n // Apply transformation if mapping exists\n const mapping = columnsCodeMapping.find(ccm => ccm.filterFormKey === key);\n if (mapping?.transformQueryParamFn) {\n filterParams[key] = mapping.transformQueryParamFn(filterParams[key]);\n }\n }\n }\n\n return { filterParams, sortParams, pageIndex, pageSize, search };\n }\n \n /**\n * Builds query string from filter data with proper encoding\n * @param filterData - Filter form data\n * @param sortParams - Sort parameters\n * @param pageIndex - Current page index\n * @param pageSize - Current page size \n * @param search - Search term\n * @returns URLSearchParams object\n */\n static buildQueryString(\n filterData: any, \n sortParams: any, \n pageIndex: number, \n pageSize: number, \n search: string\n ): URLSearchParams {\n const qs = new URLSearchParams();\n \n // Process filter data\n if (filterData) {\n const processedFilter = { ...filterData };\n \n // Convert date objects to milliseconds\n for (const key in processedFilter) {\n processedFilter[key] = DateTimeHelper.toMilliseconds(processedFilter[key]);\n }\n \n // Append filter parameters\n Object.keys(processedFilter).forEach(key => {\n const value = processedFilter[key];\n if (this.isValidParam(value)) {\n if (value === '*') {\n qs.append(key, '');\n } else {\n qs.append(key, value);\n }\n }\n });\n }\n \n // Append sort parameters\n if (sortParams) {\n Object.keys(sortParams).forEach(key => {\n if (this.isValidParam(sortParams[key])) {\n qs.append(key, sortParams[key]);\n }\n });\n }\n \n // Append pagination and search\n qs.append('pageIndex', pageIndex.toString());\n qs.append('pageSize', pageSize.toString());\n \n if (search !== '') {\n qs.append('search', search);\n }\n \n return qs;\n }\n}\n","import { DateTimeHelper } from './date-time.helper';\nimport type { \n SelectedFilterDisplayValueType, \n SelectedFiltersGroupedValuesType,\n SelectedFilterDisplayValuesType \n} from '../interfaces';\n\n/**\n * Centralized filter display utility helper for managing filter value formatting and grouping.\n * Handles the complex logic of grouping and displaying filter values in a consistent manner.\n */\nexport class FilterDisplayHelper {\n \n /**\n * Formats filter values based on form control type for display\n * @param items - Array of filter display values\n * @returns Processed array with formatted display values\n */\n static formatFilterValuesForDisplay(items: SelectedFilterDisplayValueType[]): SelectedFilterDisplayValueType[] {\n return items.map(item => {\n const processedItem = { ...item };\n \n // Handle different form control types\n switch (item.formControlType) {\n case 'input':\n case 'checkbox':\n // No special formatting needed\n break;\n case 'date':\n processedItem.valueKey = DateTimeHelper.formatForDisplay(item.value, 'date');\n break;\n case 'date-time':\n processedItem.valueKey = DateTimeHelper.formatForDisplay(item.value, 'date-time');\n break;\n default:\n // Keep original valueKey if no special handling needed\n break;\n }\n \n return processedItem;\n });\n }\n \n /**\n * Groups filter values by form control attributes\n * @param data - Array of filter display values\n * @returns Grouped filter values\n */\n static groupByFormControlAttributes(data: SelectedFilterDisplayValueType[]): SelectedFiltersGroupedValuesType[] {\n const groups: Record<string, SelectedFiltersGroupedValuesType> = {};\n \n // First format the data for display\n const formattedData = this.formatFilterValuesForDisplay(data);\n\n formattedData.forEach(item => {\n const key = `${item.formControlName}-${item.formControlType}`;\n \n if (!groups[key]) {\n groups[key] = {\n formControlName: item.formControlName,\n formControlType: item.formControlType,\n arrValues: []\n };\n }\n \n const isSingleValue = this.isSingleValueFormControl(item.formControlType, item.isSingleValue);\n \n // Check if only the last value should be kept due to isSingleValue or duplicated value/valueKey\n if (isSingleValue) {\n groups[key].arrValues = [item]; // Replace with the current item\n } else {\n // Check for duplicate value and valueKey in the current array\n const existingIndex = groups[key].arrValues.findIndex(x => \n x.value === item.value && x.valueKey === item.valueKey\n );\n \n if (existingIndex !== -1) {\n groups[key].arrValues[existingIndex] = item; // Replace the duplicate\n } else {\n groups[key].arrValues.push(item); // Add new item\n }\n }\n });\n\n return Object.values(groups);\n }\n \n /**\n * Determines if a form control should only have single values\n * @param formControlType - Type of form control\n * @param explicitSingleValue - Explicit single value flag\n * @returns True if single value control\n */\n static isSingleValueFormControl(formControlType: string, explicitSingleValue?: boolean): boolean {\n if (explicitSingleValue !== undefined) {\n return explicitSingleValue;\n }\n \n return ['input', 'radio', 'date', 'date-time', 'toggle'].includes(formControlType);\n }\n \n /**\n * Updates selected filter values by replacing values for a specific form control\n * @param currentValues - Current selected filter values\n * @param newValues - New values to add/update\n * @param formControlName - Name of the form control being updated\n * @returns Updated filter values and grouped values\n */\n static updateSelectedFilterValues(\n currentValues: SelectedFilterDisplayValuesType,\n newValues: SelectedFilterDisplayValueType | SelectedFilterDisplayValuesType,\n formControlName?: string\n ): { \n selectedFilterValues: SelectedFilterDisplayValuesType;\n selectedFilterGroupedValues: SelectedFiltersGroupedValuesType[];\n } {\n let targetFormControlName: string;\n let newValuesArray: SelectedFilterDisplayValueType[];\n \n if (Array.isArray(newValues)) {\n newValuesArray = newValues;\n targetFormControlName = formControlName || newValues[0]?.formControlName;\n } else {\n newValuesArray = [newValues];\n targetFormControlName = formControlName || newValues?.formControlName;\n }\n \n // Remove existing values for this form control\n const filteredValues = currentValues.filter(\n sfv => sfv.formControlName !== targetFormControlName\n );\n \n // Group the new values\n const newGroupedValues = this.groupByFormControlAttributes(newValuesArray);\n \n // Add new values for the target form control\n newGroupedValues.forEach(gv => {\n if (gv.formControlName === targetFormControlName) {\n gv.arrValues.forEach(v => {\n filteredValues.push(v);\n });\n }\n });\n \n // Return updated values and all grouped values\n const allGroupedValues = this.groupByFormControlAttributes(filteredValues);\n \n return {\n selectedFilterValues: filteredValues,\n selectedFilterGroupedValues: allGroupedValues\n };\n }\n \n /**\n * Filters selected values to only show those present in query parameters\n * @param selectedValues - All selected filter values\n * @param queryParams - Current query parameters\n * @returns Filtered values for display\n */\n static getValuesForDisplay(\n selectedValues: SelectedFilterDisplayValuesType,\n queryParams: any\n ): SelectedFilterDisplayValuesType {\n return selectedValues.filter(sf => queryParams.hasOwnProperty(sf.formControlName));\n }\n \n /**\n * Removes a specific filter value from the collection\n * @param selectedValues - Current selected filter values\n * @param filterToRemove - Filter value to remove\n * @returns Updated filter values\n */\n static removeFilterValue(\n selectedValues: SelectedFilterDisplayValuesType,\n filterToRemove: SelectedFilterDisplayValueType\n ): SelectedFilterDisplayValuesType {\n return selectedValues.filter(sfv => \n !(sfv.formControlName === filterToRemove.formControlName && \n sfv.valueKey === filterToRemove.valueKey)\n );\n }\n}\n","/**\n * Centralized validation utility helper for common validation tasks.\n * Provides reusable validation functions to avoid code duplication.\n */\nexport class ValidationHelper {\n \n /**\n * Checks if a value is not null, undefined, or empty string\n * @param value - Value to check\n * @returns True if value has content\n */\n static hasValue(value: any): boolean {\n return value !== null && value !== undefined && value !== '';\n }\n \n /**\n * Checks if any values in an object are non-empty\n * @param obj - Object to check\n * @returns True if any value is non-empty\n */\n static hasNonEmptyValue(obj: any): boolean {\n if (!obj) return false;\n return Object.values(obj).some(value => this.hasValue(value));\n }\n \n /**\n * Checks if a form has any non-empty values\n * @param formData - Form data object\n * @returns True if form has any data\n */\n static hasFormData(formData: any): boolean {\n if (!formData) return false;\n return this.hasNonEmptyValue(formData);\n }\n \n /**\n * Validates if an array has items\n * @param array - Array to check\n * @returns True if array exists and has items\n */\n static hasItems(array: any[]): boolean {\n return Array.isArray(array) && array.length > 0;\n }\n \n /**\n * Checks if a URL is valid\n * @param url - URL string to validate\n * @returns True if URL is valid\n */\n static isValidUrl(url: string): boolean {\n if (!url || typeof url !== 'string') return false;\n \n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n \n /**\n * Validates if a string is a valid number\n * @param value - Value to check\n * @returns True if value is a valid number\n */\n static isValidNumber(value: any): boolean {\n return !isNaN(Number(value)) && isFinite(Number(value));\n }\n \n /**\n * Checks if an object has a specific property with a valid value\n * @param obj - Object to check\n * @param property - Property name\n * @returns True if property exists and has a value\n */\n static hasProperty(obj: any, property: string): boolean {\n return obj && obj.hasOwnProperty(property) && this.hasValue(obj[property]);\n }\n \n /**\n * Validates if a selection model row has the required key\n * @param row - Row object\n * @param keyName - Key property name\n * @returns True if row has the key property with a value\n */\n static hasRowKey(row: any, keyName: string): boolean {\n return row && this.hasProperty(row, keyName);\n }\n \n /**\n * Checks if a filter value should be processed (not null, empty, or invalid)\n * @param value - Filter value\n * @returns True if filter value is valid for processing\n */\n static isValidFilterValue(value: any): boolean {\n if (!this.hasValue(value)) return false;\n \n // Check for common invalid filter values\n const invalidValues = ['null', 'undefined', '*'];\n if (typeof value === 'string' && invalidValues.includes(value)) {\n return value === '*'; // Special case: '*' is valid but gets converted to empty string\n }\n \n return true;\n }\n \n /**\n * Validates pagination parameters\n * @param pageIndex - Page index\n * @param pageSize - Page size\n * @returns Object with validation results\n */\n static validatePagination(pageIndex: any, pageSize: any): { \n isValid: boolean; \n pageIndex: number; \n pageSize: number; \n } {\n const validPageIndex = this.isValidNumber(pageIndex) ? Number(pageIndex) : 0;\n const validPageSize = this.isValidNumber(pageSize) ? Number(pageSize) : 10;\n \n return {\n isValid: validPageIndex >= 0 && validPageSize > 0,\n pageIndex: Math.max(0, validPageIndex),\n pageSize: Math.max(1, validPageSize)\n };\n }\n}\n","/**\n * Centralized collection management utility helper for common array and object operations.\n * Provides reusable functions for managing collections, selections, and data structures.\n */\nexport class CollectionHelper {\n \n /**\n * Safely clears an array if it exists\n * @param array - Array to clear\n */\n static clearArray(array: any[]): void {\n if (Array.isArray(array)) {\n array.length = 0;\n }\n }\n \n /**\n * Safely clears a Set if it exists\n * @param set - Set to clear\n */\n static clearSet(set: Set<any>): void {\n if (set instanceof Set) {\n set.clear();\n }\n }\n \n /**\n * Safely clears a Map if it exists\n * @param map - Map to clear\n */\n static clearMap(map: Map<any, any>): void {\n if (map instanceof Map) {\n map.clear();\n }\n }\n \n /**\n * Gets a consistent identifier for a row based on available keys\n * @param row - Row object\n * @param primaryKey - Primary key property name (default: 'id')\n * @param fallbackKey - Fallback key property name\n * @returns Row identifier or JSON string as last resort\n */\n static getRowIdentifier(row: any, primaryKey: string = 'id', fallbackKey?: string): string | number {\n if (!row) return '';\n \n // Try primary key first\n if (row[primaryKey] !== undefined && row[primaryKey] !== null) {\n return row[primaryKey];\n }\n \n // Try fallback key if provided\n if (fallbackKey && row[fallbackKey] !== undefined && row[fallbackKey] !== null) {\n return row[fallbackKey];\n }\n \n // Last resort: stringify the object (not recommended for large objects)\n return JSON.stringify(row);\n }\n \n /**\n * Creates a hash from an array of objects for cache validation\n * @param items - Array of items to hash\n * @param keyExtractor - Function to extract key from each item\n * @returns Hash string\n */\n static createArrayHash<T>(items: T[], keyExtractor: (item: T) => string): string {\n if (!Array.isArray(items)) return '';\n return JSON.stringify(items.map(keyExtractor));\n }\n \n /**\n * Safely filters an array with predicate function\n * @param array - Array to filter\n * @param predicate - Filter predicate function\n * @returns Filtered array or empty array if input is invalid\n */\n static safeFilter<T>(array: T[], predicate: (item: T) => boolean): T[] {\n if (!Array.isArray(array)) return [];\n return array.filter(predicate);\n }\n \n /**\n * Safely maps an array with transform function\n * @param array - Array to map\n * @param transform - Transform function\n * @returns Mapped array or empty array if input is invalid\n */\n static safeMap<T, U>(array: T[], transform: (item: T) => U): U[] {\n if (!Array.isArray(array)) return [];\n return array.map(transform);\n }\n \n /**\n * Safely finds an item in array\n * @param array - Array to search\n * @param predicate - Find predicate function\n * @returns Found item or undefined\n */\n static safeFind<T>(array: T[], predicate: (item: T) => boolean): T | undefined {\n if (!Array.isArray(array)) return undefined;\n return array.find(predicate);\n }\n \n /**\n * Creates a Map from an array for O(1) lookups\n * @param array - Array to convert\n * @param keyExtractor - Function to extract key from each item\n * @returns Map with keys and items\n */\n static createLookupMap<T>(array: T[], keyExtractor: (item: T) => string): Map<string, T> {\n const map = new Map<string, T>();\n if (!Array.isArray(array)) return map;\n \n array.forEach(item => {\n const key = keyExtractor(item);\n map.set(key, item);\n });\n \n return map;\n }\n \n /**\n * Checks if two arrays have the same items (order doesn't matter)\n * @param array1 - First array\n * @param array2 - Second array\n * @param keyExtractor - Function to extract comparison key\n * @returns True if arrays contain same items\n */\n static arraysEqual<T>(\n array1: T[], \n array2: T[], \n keyExtractor?: (item: T) => any\n ): boolean {\n if (!Array.isArray(array1) || !Array.isArray(array2)) return false;\n if (array1.length !== array2.length) return false;\n \n if (keyExtractor) {\n const keys1 = array1.map(keyExtractor).sort();\n const keys2 = array2.map(keyExtractor).sort();\n return JSON.stringify(keys1) === JSON.stringify(keys2);\n } else {\n return JSON.stringify([...array1].sort()) === JSON.stringify([...array2].sort());\n }\n }\n \n /**\n * Safely removes items from a Set based on a predicate\n * @param set - Set to modify\n * @param predicate - Function to determine if item should be removed\n */\n static removeFromSet<T>(set: Set<T>, predicate: (item: T) => boolean): void {\n if (!(set instanceof Set)) return;\n \n const itemsToRemove: T[] = [];\n set.forEach(item => {\n if (predicate(item)) {\n itemsToRemove.push(item);\n }\n });\n \n itemsToRemove.forEach(item => set.delete(item));\n }\n \n /**\n * Safely clones an array to prevent mutation issues\n * @param array - Array to clone\n * @returns Cloned array or empty array if input is invalid\n */\n static cloneArray<T>(array: T[]): T[] {\n if (!Array.isArray(array)) return [];\n return [...array];\n }\n \n /**\n * Performs safe property access with default value\n * @param obj - Object to access\n * @param path - Property path (e.g., 'user.profile.name')\n * @param defaultValue - Default value if property doesn't exist\n * @returns Property value or default\n */\n static getNestedProperty(obj: any, path: string, defaultValue: any = null): any {\n if (!obj || !path) return defaultValue;\n \n // If there is no '.', just return the direct property\n if (!path.includes('.')) {\n return obj[path] !== undefined ? obj[path] : defaultValue;\n }\n \n // Otherwise, traverse the nested properties\n try {\n return path.split('.').reduce((acc, part) => {\n return acc && acc[part] !== undefined ? acc[part] : defaultValue;\n }, obj);\n } catch {\n return defaultValue;\n }\n }\n}\n","import { Location } from '@angular/common';\nimport { Router } from '@angular/router';\n\n/**\n * Centralized URL and navigation utility helper.\n * Provides common functions for URL manipulation and navigation.\n */\nexport class UrlHelper {\n \n /**\n * Extracts the home URL from current window location\n * @returns Home URL path\n */\n static getHomeUrl(): string {\n const pathname = window.location.pathname;\n return `/${pathname.split('/')[1]}`;\n }\n \n /**\n * Safely navigates to a URL if it's valid\n * @param router - Angular Router instance\n * @param url - URL to navigate to\n * @returns Promise<boolean> - Navigation result\n */\n static safeNavigate(router: Router, url: string): Promise<boolean> | null {\n if (!url || typeof url !== 'string') {\n return null;\n }\n \n try {\n return router.navigateByUrl(url);\n } catch (error) {\n console.warn('Navigation error:', error);\n return null;\n }\n }\n \n /**\n * Updates the browser URL without navigation using Location service\n * @param location - Angular Location service\n * @param baseUrl - Base URL path\n * @param queryString - Query string parameters\n */\n static updateUrl(location: Location, baseUrl: string, queryString: string): void {\n const newUrl = `${baseUrl}?${queryString}`;\n const currentUrl = window.location.pathname + window.location.search;\n \n if (currentUrl !== newUrl) {\n location.go(newUrl);\n }\n }\n \n /**\n * Builds a complete URL with query parameters\n * @param baseUrl - Base URL path\n * @param queryParams - URLSearchParams object\n * @returns Complete URL string\n */\n static buildUrl(baseUrl: string, queryParams: URLSearchParams): string {\n const queryString = queryParams.toString();\n return queryString ? `${baseUrl}?${queryString}` : baseUrl;\n }\n \n /**\n * Gets the base URL without query parameters\n * @param router - Angular Router instance\n * @returns Base URL string\n */\n static getBaseUrl(router: Router): string {\n return router.url.split('?')[0];\n }\n \n /**\n * Checks if current URL differs from generated URL\n * @param generatedUrl - Generated URL to compare\n * @returns True if URLs are different\n */\n static hasUrlChanged(generatedUrl: string): boolean {\n const currentUrl = window.location.pathname + window.location.search;\n return currentUrl !== generatedUrl;\n }\n \n /**\n * Extracts query parameters from a URL string\n * @param url - Full URL string\n * @returns URLSearchParams object\n */\n static extractQueryParams(url: string): URLSearchParams | null {\n try {\n const urlObj = new URL(url);\n return new URLSearchParams(urlObj.search);\n } catch (error) {\n console.warn('Invalid URL for query param extraction:', url);\n return null;\n }\n }\n \n /**\n * Handles button click actions (URL navigation or callback execution)\n * @param router - Angular Router instance\n * @param config - Button configuration object\n * @param primaryUrlKey - Primary URL property name (default: 'btnUrl')\n * @param primaryClickKey - Primary click handler property name (default: 'btnClick')\n */\n static handleButtonClick(\n router: Router, \n config: any, \n primaryUrlKey: string = 'btnUrl',\n primaryClickKey: string = 'btnClick'\n ): void {\n if (!config) return;\n \n // Try callback first\n if (config[primaryClickKey] && typeof config[primaryClickKey] === 'function') {\n try {\n config[primaryClickKey]();\n } catch (error) {\n console.warn('Error executing button callback:', error);\n }\n } \n // Fallback to URL navigation\n else if (config[primaryUrlKey]) {\n this.safeNavigate(router, config[primaryUrlKey]);\n }\n }\n \n /**\n * Handles secondary button click actions\n * @param router - Angular Router instance\n * @param config - Button configuration object\n */\n static handleSecondaryButtonClick(router: Router, config: any): void {\n this.handleButtonClick(router, config, 'secondBtnUrl', 'secondBtnClick');\n }\n \n /**\n * Validates if a URL string is properly formatted\n * @param url - URL to validate\n * @returns True if URL is valid\n */\n static isValidUrl(url: string): boolean {\n if (!url || typeof url !== 'string') return false;\n \n try {\n // Allow relative URLs starting with '/'\n if (url.startsWith('/')) return true;\n \n // Validate absolute URLs\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n \n /**\n * Safely encodes URL parameters\n * @param value - Value to encode\n * @returns Encoded string\n */\n static encodeParam(value: any): string {\n if (value === null || value === undefined) return '';\n return encodeURIComponent(String(value));\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[appScrolling]',\n standalone: false\n})\nexport class ScrollingDirective {\n constructor(private el: ElementRef) { }\n \n @Input() appScrolling: boolean = false;\n\n // @HostListener('mouseenter') onMouseEnter() {}\n\n @HostListener('mouseleave') onMouseLeave() {\n // console.log(\"==== appScrolling mouseleave ===\", this.el.nativeElement, this.appScrolling);\n this.el.nativeElement.classList.remove('more-scrollbar-width', 'more-scrollbar-height')\n }\n\n @HostListener('mousemove', ['$event']) onMousemove(event: MouseEvent) {\n // console.log(\"==== appScrolling mousemove clientX-clientY ===\", event.clientX, event.clientY);\n // console.log(\"==== appScrolling mousemove clientWidth-clientHeight ===\", this.el.nativeElement.clientWidth, this.el.nativeElement.clientHeight);\n // console.log(\"==== appScrolling mousemove offsetX-offsetY ===\", this.el.nativeElement.offsetX, this.el.nativeElement.offsetY);\n // console.log(\"==== appScrolling mousemove offsetWidth-offsetLeft ===\", this.el.nativeElement.offsetWidth, this.el.nativeElement.offsetLeft);\n // console.log(\"==== appScrolling mousemove json ===\", {\n // clientX: event.clientX,\n // clientY: event.clientY,\n // clientWidth: this.el.nativeElement.clientWidth,\n // clientHeight: this.el.nativeElement.clientHeight,\n // offsetX: this.el.nativeElement.offsetX,\n // offsetY: this.el.nativeElement.offsetY,\n // offsetWidth: this.el.nativeElement.offsetWidth,\n // offsetLeft: this.el.nativeElement.offsetLeft,\n // rect: this.el.nativeElement.getBoundingClientRect()\n // });\n\n const rect = this.el.nativeElement.getBoundingClientRect()\n\n let xDistance = rect.left + this.el.nativeElement.clientWidth + 10 - event.clientX;\n // console.log(\"=== appScrolling mousemove xDistance ===\", xDistance);\n xDistance < 15 && xDistance > -15 ? this.el.nativeElement.classList.add('more-scrollbar-width'): this.el.nativeElement.classList.remove('more-scrollbar-width');\n\n let yDistance = rect.top + this.el.nativeElement.clientHeight + 15 - event.clientY;\n // console.log(\"=== appScrolling mousemove yDistance ===\", yDistance);\n yDistance < 20 && yDistance > -20 ? this.el.nativeElement.classList.add('more-scrollbar-height'): this.el.nativeElement.classList.remove('more-scrollbar-height');\n // this.el.nativeElement.classList.remove('more-scrollbar-width', 'more-scrollbar-height')\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserCustomizationService {\n private token = '';\n\n constructor(private http: HttpClient) {}\n\n getColumnsTemplates(url: string, listComponent: string): Observable<any> {\n if(this.token) {\n return this.http.get(`${url}?listComponent=${listComponent}`, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.get(`${url}?listComponent=${listComponent}`);\n }\n\n addColumnsTemplate(url: string, body: any): Observable<any> {\n if(this.token) {\n return this.http.post(`${url}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(url, body);\n }\n\n updateColumnsTemplate(url: string, body: any): Observable<any> {\n if(this.token) {\n return this.http.post(`${url}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(url, body);\n }\n\n deleteColumnsTemplate(url: string, body: any): Observable<any> {\n if(this.token) {\n return this.http.put(`${url}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.put(url, body);\n }\n\n getSelectedColumnsTemplate(url: string, listComponent: string): Observable<any> {\n if(this.token) {\n return this.http.get(`${url}?listComponent=${listComponent}`, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.get(`${url}?listComponent=${listComponent}`);\n }\n\n updateSelectedColumnsTemplate(url: string, body: any): Observable<any> {\n if(this.token) {\n return this.http.post(`${url}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(url, body);\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'tis-smart-table-error-dialog',\n standalone: false,\n templateUrl: './tis-smart-table-error-dialog.component.html',\n styleUrl: './tis-smart-table-error-dialog.component.css'\n})\nexport class TisSmartTableErrorDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<TisSmartTableErrorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {\n this.dialogRef.addPanelClass(['tis-smart-table-error-dialog']);\n }\n\n onClose(): void {\n this.dialogRef.close();\n }\n}\n","<h1 mat-dialog-title>\n <mat-icon class=\"{{data?.iconClass}}\">{{data?.icon}}</mat-icon>\n {{data?.title}}\n</h1>\n<div mat-dialog-content>\n {{data?.message}}\n</div>\n<div mat-dialog-actions>\n <button mat-button class=\"tis-text-upper {{data?.buttonClass ?? 'tis-btn-primary'}}\" (click)=\"onClose()\" cdkFocusInitial *ngIf=\"data?.buttonText && data?.buttonText != ''\">{{data?.buttonText}}</button>\n</div>","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatSnackBar, MatSnackBarRef, TextOnlySnackBar } from '@angular/material/snack-bar';\nimport { TisSmartTableErrorDialogComponent } from '../components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component';\nimport { Observable } from 'rxjs';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TisHelperService {\n\n constructor(\n private snackBar: MatSnackBar,\n private dialog: MatDialog,\n private http: HttpClient\n ) { }\n\n showHttpErrorMsg(error: HttpErrorResponse, duration = 5000) {\n console.log('httpError: ', error);\n\n let errorMessage = 'Some Unknown Error Occurred.';\n let errorCode = 'Unknown Error';\n const httpError = error;\n\n if (httpError.status >= 400) {\n const errorFromServer = httpError.error;\n if (Array.isArray(errorFromServer) && errorFromServer.length > 0) {\n errorMessage = errorFromServer[0].message;\n errorCode = errorFromServer[0].code;\n }\n } else if (httpError.status < 100) {\n errorMessage = httpError.message;\n errorCode = httpError.statusText;\n }\n\n if (errorCode == \"VALIDATION_ERROR\" || errorCode == \"NOT_FOUND_ERROR\" || errorCode == \"THIRD_PARTY_API_ERROR\") {\n let confirmBoxData: any = {\n title: \"Error !\",\n message: errorMessage,\n icon: \"error\",\n iconClass: \"tis-text-danger\",\n buttonText: \"Ok\",\n buttonClass: \"tis-btn-primary\",\n };\n\n const dialogRef: MatDialogRef<TisSmartTableErrorDialogComponent> = this.dialog.open(TisSmartTableErrorDialogComponent, {\n width: \"550px\",\n panelClass: ['tis-simple-confirmation'],\n data: confirmBoxData,\n disableClose: false,\n });\n\n return dialogRef;\n\n } else {\n const snackbarRef: MatSnackBarRef<TextOnlySnackBar> = this.snackBar.open(errorMessage, 'Error', { duration: duration });\n return snackbarRef;\n }\n\n }\n\n showSuccessMsg(message: string, title: string, duration = 5000) {\n this.snackBar.open(message, title, {\n duration: duration\n })\n }\n\n showErrorMsg(message: string, title: string, duration = 5000) {\n this.snackBar.open(message, title, {\n duration: duration\n })\n }\n\n sortArrayByOrder(A: string[], B: string[]): string[] {\n const sortedA = [];\n for (const element of B) {\n const index = A.indexOf(element);\n if (index !== -1) {\n sortedA.push(A[index]);\n A.splice(index, 1);\n }\n }\n return [...sortedA, ...A]; // Combine sorted elements with remaining elements\n }\n\n}","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'tis-smart-table-confirmation-dialog',\n standalone: false,\n templateUrl: './tis-smart-table-confirmation-dialog.component.html',\n styleUrl: './tis-smart-table-confirmation-dialog.component.css'\n})\nexport class TisSmartTableConfirmationDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<TisSmartTableConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {\n this.dialogRef.addPanelClass(['tis-smart-table-confirmation-dialog']);\n }\n\n onClose(status: boolean | null): void {\n this.dialogRef.close(status);\n }\n}\n","<h1 mat-dialog-title style=\"gap: 10px; justify-content: start; width: 100%; align-items: center; display: flex; padding: 8px 16px;\">\n <mat-icon class=\"{{data?.iconClass}}\" style=\"color: var(--tis-cancel, #bb333b)\">{{data?.icon}}</mat-icon>\n <span>{{data?.title}}</span>\n</h1>\n<div mat-dialog-content style=\"padding: 20px 24px; padding-top: 0px;\">\n @if(data?.html){\n <h5 class=\"title\">{{data?.message}}</h5>\n <div [innerHTML]=\"data.html\">\n </div>\n }\n @else {\n <span>{{data?.message}}</span>\n }\n</div>\n<div mat-dialog-actions style=\"border-top: 1px solid rgba(0, 0, 0, 0.12); justify-content: end;\">\n <button mat-button class=\"{{data?.cancelButtonClass}}\" style=\"color: var(--tis-primary, var(--mat-sys-primary))\" (click)=\"onClose(false)\" *ngIf=\"data?.cancelButtonText && data?.cancelButtonText != ''\">{{data?.cancelButtonText}}</button>\n <button mat-button class=\"{{data?.approveButtonClass}}\" style=\"color: var(--tis-cancel, #bb333b)\" (click)=\"onClose(true)\" cdkFocusInitial *ngIf=\"data?.approveButtonText && data?.approveButtonText != ''\">{{data?.approveButtonText}}</button>\n</div>","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, Inject } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { TisHelperService } from '../../services/tis-helper.service';\nimport { UserCustomizationService } from '../../services/user-customization.service';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-create-columns-template',\n templateUrl: './create-columns-template.component.html',\n styleUrl: './create-columns-template.component.css',\n standalone: false\n})\nexport class CreateColumnsTemplateComponent {\n loading: boolean = false;\n updatingTemplate: boolean = false;\n savingTemplate: boolean = false;\n columns: any = [];\n displayedColumns: any = [];\n listComponentColumns: any;\n listComponentColumnsTemplateDetail: any;\n form!: FormGroup;\n userId!: number;\n translationReadKey!: string\n customColumns: any;\n t: any;\n columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n\n constructor(\n public dialogRef: MatDialogRef<CreateColumnsTemplateComponent>,\n private helper: TisHelperService,\n private snackBar: MatSnackBar,\n private userCustomizationService: UserCustomizationService,\n @Inject(MAT_DIALOG_DATA) public data: any,\n // private translocoService: TranslocoService,\n ) {\n this.translationReadKey = this.data?.translationReadKey ?? '';\n \n if(this.data?.customColumns){\n this.customColumns = this.data?.customColumns ?? {};\n }\n\n if(this.data?.columnCustomizationUrlConfig){\n this.columnCustomizationUrlConfig = this.data.columnCustomizationUrlConfig;\n }\n \n this.dialogRef.addPanelClass(['tis-create-columns-template']);\n }\n\n ngOnInit(): void {\n this.t = this.data?.t || {};\n this.columns = JSON.parse(JSON.stringify(this.data.columns));\n this.displayedColumns = JSON.parse(JSON.stringify(this.data.displayColumns));\n this.displayedColumns = this.data.displayColumns;\n\n if(this.data?.defaultSelectedState == null || this.data?.defaultSelectedState == 'undefined') {\n this.data.defaultSelectedState = true;\n }\n\n if(this.data?.selectedTemplateId && this.displayedColumns?.length){\n this.columns = this.helper.sortArrayByOrder(JSON.parse(JSON.stringify(this.columns)), JSON.parse(JSON.stringify(this.displayedColumns)));\n }\n \n this.listComponentColumns = this.columns.map((col: any, ndx: number) => ({ id: ndx + 1, isSelected: this.data?.defaultSelectedState === true ? true : (this.displayedColumns?.indexOf(col) >= 0 ? true : false), column: col }));\n\n this.createForm();\n\n // this.store.select('auth').subscribe((authState: fromAuth.State) => {\n // console.log('Current AuthState:', authState);\n // if(authState?.user?.id){\n // this.userId = authState.user.id;\n // }\n // })\n }\n\n ngAfterViewInit(){\n // this.translocoService.selectTranslate('lang', {}, 'shared').subscribe((translation: string) => {\n // this.tl = this.translocoService.translateObject('createColumnsTemplateComponent', {}, 'shared');\n // });\n }\n\n createForm() {\n this.form = new FormGroup({\n name: new FormControl(this.data?.name ?? '', Validators.required),\n enableStickiness: new FormControl(true),\n fromStartColumnNumber: new FormControl(this.data?.fromStartColumnNumber ? Number(this.data?.fromStartColumnNumber) : 0, Validators.required),\n fromEndColumnNumber: new FormControl(this.data?.fromEndColumnNumber ? Number(this.data?.fromEndColumnNumber) : 0, Validators.required),\n });\n }\n\n get name(){\n return (this.form.get('name') as FormControl)\n }\n \n get listComponentColumnsTemplateName(){\n return this.name.value;\n }\n\n get orgDisplayColumns(){\n return this.displayedColumns;\n }\n\n drop(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.listComponentColumns, event.previousIndex, event.currentIndex);\n }\n\n onSubmit() {\n const orgDisplayColumns = this.orgDisplayColumns;\n\n if(this.form.invalid){\n return ;\n }\n\n // Get selected columns (first filter on selected column and then get column array)\n this.displayedColumns = this.listComponentColumns.filter((r: any) => { if(r.isSelected) return r.column } ).map((r: any) => r.column);\n if(this.displayedColumns.length <= 0){\n this.snackBar.open(\"Please select at least one column\", \"ok\", {\n duration: 4000\n })\n return ;\n }\n console.log('new and org display columns: ', this.displayedColumns, orgDisplayColumns);\n\n this.acceptTemplateNameAndSave();\n\n }\n\n acceptTemplateNameAndSave() {\n let data = {\n listComponentName: this.data.listComponentName,\n name: this.name.getRawValue(),\n enableStickiness: this.form.getRawValue().enableStickiness,\n fromStartColumnNumber: this.form.getRawValue().fromStartColumnNumber,\n fromEndColumnNumber: this.form.getRawValue().fromEndColumnNumber,\n defaultColumns: this.columns.join(),\n displayColumns: this.displayedColumns.join()\n }\n\n console.log('save value: ', data);\n \n this.savingTemplate = true;\n this.loading = true;\n if(this.data?.selectedTemplateId){\n this.userCustomizationService.updateColumnsTemplate(this.columnCustomizationUrlConfig.update, {id: this.data?.selectedTemplateId, ...data}).subscribe(r => {\n console.log(\"add response: \", r);\n // this.loading = false;\n this.helper.showSuccessMsg(r.message, 'Success');\n let selectedTemplate = {\n ...r.data,\n ...data,\n isUpdated: true,\n }\n this.onClose(selectedTemplate);\n }, err => {\n this.loading = false;\n this.savingTemplate = false;\n this.helper.showHttpErrorMsg(err);\n })\n }\n else{\n this.userCustomizationService.addColumnsTemplate(this.columnCustomizationUrlConfig.add, data).subscribe(r => {\n console.log(\"add response: \", r);\n // this.loading = false;\n this.helper.showSuccessMsg(r.message, 'Success');\n let selectedTemplate = {\n ...r.data,\n ...data\n }\n this.onClose(selectedTemplate);\n }, err => {\n console.log(err);\n this.loading = false;\n this.savingTemplate = false;\n this.helper.showHttpErrorMsg(err);\n })\n }\n }\n\n onChangeColumnStatus(status: boolean, data: any){\n if(status == false){\n let leftColumn = data.id;\n let rightColumn = this.listComponentColumns?.length - (data.id - 1);\n let formValue = this.form.getRawValue();\n if(formValue?.fromStartColumnNumber == leftColumn){\n this.form.patchValue({\n fromStartColumnNumber: 0\n });\n }\n\n if(formValue?.fromEndColumnNumber == rightColumn){\n this.form.patchValue({\n fromEndColumnNumber: 0\n });\n }\n }\n }\n\n onClose(data: any = null){\n this.dialogRef.close(data);\n }\n}\n","\n<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <h1 mat-dialog-title style=\"padding: 16px 24px; background-color: #e0e0e0; display: flex; justify-content: space-between; width: 100%; align-items: center;\">\n {{t?.createColumnsTemplate?.title}}\n <mat-icon (click)=\"onClose()\" style=\"cursor: pointer;\">clear</mat-icon>\n </h1>\n <div style=\"padding: 15px; padding-bottom: 0px;\">\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.templateName}}</mat-label>\n <input matInput formControlName=\"name\" placeholder=\"{{t?.createColumnsTemplate?.enterTemplateName}}\" />\n </mat-form-field>\n </div>\n\n <mat-dialog-content [appScrolling]=\"true\" class=\"w-100 p-0 m-0\" style=\"max-height: 60vh !important;\">\n <div cdkDropList class=\"example-list\" (cdkDropListDropped)=\"drop($event)\">\n <div class=\"example-box\" *ngFor=\"let item of listComponentColumns, let ndx = index\" cdkDrag>\n <div class=\"width-100 example-div\">\n <div class=\"example-item flex flex-row items-center\">\n <mat-icon cdkDragHandle style=\"cursor: pointer; color: rgba(0, 0, 0, 0.54); font-size: 19px; width: 19px; height: 19px;\">drag_indicator</mat-icon>\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </div>\n <mat-checkbox color=\"primary\" [(ngModel)]=\"item.isSelected\" (ngModelChange)=\"onChangeColumnStatus($event, item)\" [ngModelOptions]=\"{standalone: true}\"></mat-checkbox>\n </div>\n </div>\n </div>\n </mat-dialog-content>\n\n @if(form.value?.enableStickiness){\n <div style=\"padding: 15px; padding-bottom: 0px;\">\n <div style=\"display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem;\">\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.freezeColumnFromLeft}}</mat-label>\n <mat-select formControlName=\"fromStartColumnNumber\">\n <mat-option [value]=\"0\">None</mat-option>\n @for (item of listComponentColumns; track item; let i = $index; let l = $last;) {\n @if(item?.isSelected){\n <mat-option [value]=\"(i+1)\">\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.freezeColumnFromRight}}</mat-label>\n <mat-select formControlName=\"fromEndColumnNumber\">\n <mat-option [value]=\"0\">None</mat-option>\n @for (item of listComponentColumns; track item; let i = $index; let l = $last;) {\n @if(item?.isSelected){\n <mat-option [value]=\"(listComponentColumns?.length - i)\">\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n }\n\n <div mat-dialog-actions>\n <button mat-button type=\"button\" class=\"tis-cancel-button\" mat-dialog-close [disabled]=\"loading\">{{t?.createColumnsTemplate?.cancel}}</button>\n <button mat-flat-button type=\"submit\" class=\"tis-submit-button\" cdkFocusInitial [disabled]=\"savingTemplate\">\n {{data?.selectedTemplateId ? t?.createColumnsTemplate?.update : t?.createColumnsTemplate?.save}}\n @if(savingTemplate){\n <i class=\"fas fa-spinner fa-spin\"></i>\n }\n </button>\n </div>\n</form>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UserCustomizationService } from '../../services/user-customization.service';\nimport { TisHelperService } from '../../services/tis-helper.service';\nimport { TisSmartTableConfirmationDialogComponent } from '../tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component';\nimport { CreateColumnsTemplateComponent } from '../create-columns-template/create-columns-template.component';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-columns-btn',\n templateUrl: './tis-columns-btn.component.html',\n styleUrl: './tis-columns-btn.component.css',\n standalone: false\n})\nexport class TisColumnsBtnComponent {\n static readonly COMPONENT_NAME = 'TisColumnsBtnComponent';\n\n @Input({ required: true }) columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n @Input() t: any = {};\n @Input({required: true}) componentName!: string;\n @Input({required: true}) defaultColumns!: string[];\n @Input({required: true}) columns!: string[];\n @Input() skipTranslation: boolean = false;\n @Input() customColumns?: object;\n @Input() selectedTemplate: any = {\n id: -1,\n name: 'Default',\n fromStartColumnNumber: 0,\n fromEndColumnNumber: 0,\n };\n\n @Output() selectedTemplateChange = new EventEmitter();\n @Output() displayedColumnsChange = new EventEmitter();\n @Output() fromStartColumnNumberChange = new EventEmitter();\n @Output() fromEndColumnNumberChange = new EventEmitter();\n displayedColumns: any[] = [];\n templates: any[] = [];\n isDeleteTemplate = false;\n isEditTemplate = false;\n\n constructor(\n private helper: TisHelperService,\n private userCustomizationService: UserCustomizationService,\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n this.getColumnsTemplates();\n // setTimeout(() => {\n // this.createNewTemplateDialog();\n // }, 2000);\n }\n\n public createNewTemplateDialog(stData: any = null) {\n if(!this.componentName) return;\n\n let data = {\n name: stData ? stData.name : null,\n enableStickiness: stData ? stData.enableStickiness : false,\n fromStartColumnNumber: stData ? stData.fromStartColumnNumber : 0,\n fromEndColumnNumber: stData ? stData.fromEndColumnNumber : 0,\n listComponentName: this.componentName,\n selectedTemplateId: stData ? stData?.id : null,\n defaultSelectedState: stData && stData?.id ? false : true,\n defaultColumns: this.defaultColumns,\n columns: this.columns,\n displayColumns: stData ? stData?.displayColumns?.split(',') : this.displayedColumns,\n t: this.t,\n skipTranslation: this.skipTranslation,\n customColumns: this.customColumns,\n columnCustomizationUrlConfig: this.columnCustomizationUrlConfig\n };\n\n const dialogRef = this.dialog.open(CreateColumnsTemplateComponent, {\n width: \"35%\",\n minWidth: '370px',\n data: data,\n panelClass: ['tis-create-new-columns-template'],\n disableClose: true,\n });\n\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n console.log(\"=== createNewTemplateDialog ===\", res);\n \n if(res?.isUpdated){\n this.templates = this.templates?.map(t =>{\n if(t.id == res?.id){\n t = res;\n }\n return t;\n });\n }\n else{\n this.templates = [res, ...this.templates];\n }\n this.selectedTemplate = res;\n this.selectedTemplateChange.emit(this.selectedTemplate);\n this.changeDisplayColumns();\n }\n });\n }\n\n getColumnsTemplates() {\n this.userCustomizationService.getColumnsTemplates(this.columnCustomizationUrlConfig.list, this.componentName).subscribe(r => {\n console.log(\"getColumnsTemplates:\", r.data);\n this.templates = r?.data ?? [];\n setTimeout(() => {\n this.getSelectedColumnsTemplate();\n }, 100);\n });\n }\n\n getSelectedColumnsTemplate() {\n this.userCustomizationService.getSelectedColumnsTemplate(this.columnCustomizationUrlConfig.getSelectedTemplate, this.componentName).subscribe((r) => {\n console.log(\"getSelectedColumnsTemplate:\", r.data);\n if (r?.data && Object.keys(r?.data).length != 0) {\n if(r.data?.listComponentColumnsTemplateId > 0){\n this.selectedTemplate = this.templates?.find((t: any) => t.id == r.data?.listComponentColumnsTemplateId);\n this.selectedTemplateChange.emit(this.selectedTemplate);\n }\n console.log(\"getSelectedColumnsTemplate:\", this.templates, this.selectedTemplate);\n this.changeDisplayColumns();\n }\n });\n }\n\n onSelectedTemplate(templateId: number){\n setTimeout(() => {\n if(this.isDeleteTemplate){\n console.log(\"onSelectedTemplate:\", this.isDeleteTemplate);\n let confirmBoxData: any = {\n title: this.t?.deleteColumnsTemplate?.title,\n message: this.t?.deleteColumnsTemplate?.message,\n iconClass: \"tis-text-danger\",\n icon: \"delete\",\n approveButtonText: this.t?.deleteColumnsTemplate?.yes,\n approveButtonClass: \"tis-btn-danger\",\n cancelButtonText: this.t?.deleteColumnsTemplate?.no,\n cancelButtonClass: \"tis-btn-primary\"\n };\n \n const dialogRef = this.dialog.open(TisSmartTableConfirmationDialogComponent, {\n width: \"30%\",\n minWidth: '370px',\n // panelClass: ['tis-simple-confirmation'],\n data: confirmBoxData,\n disableClose: true,\n });\n \n dialogRef.afterClosed().subscribe((result) => {\n console.log(\"The dialog was closed with result:\", result);\n if (result) {\n this.userCustomizationService.deleteColumnsTemplate(this.columnCustomizationUrlConfig.delete, {id: templateId, isSelectedTemplate: this.selectedTemplate?.id == templateId}).subscribe((r) => {\n this.helper.showSuccessMsg('Columns template has been deleted successfully', 'Done');\n this.templates.splice(this.templates.findIndex(ee => ee.id == templateId), 1);\n if(this.selectedTemplate?.id == templateId){\n this.selectedTemplate = {\n id: -1,\n name: 'Default',\n fromStartColumnNumber: 0,\n fromEndColumnNumber: 0,\n };\n this.selectedTemplateChange.emit(this.selectedTemplate);\n this.changeDisplayColumns();\n }\n }, err => this.helper.showHttpErrorMsg(err));\n }\n });\n }\n else if(this.isEditTemplate){\n console.log(\"onSelectedTemplate:\", this.isEditTemplate);\n let st = this.templates?.find((t: any) => t.id == templateId);\n this.createNewTemplateDialog(st);\n }\n else{\n if(this.selectedTemplate?.id != templateId){\n if(templateId > 0){\n this.selectedTemplate = this.templates?.find((t: any) => t.id == templateId);\n }\n else{\n this.selectedTemplate = {\n id: -1,\n name: 'Default'\n };\n }\n this.selectedTemplateChange.emit(this.selectedTemplate);\n this.userCustomizationService.updateSelectedColumnsTemplate(this.columnCustomizationUrlConfig.updateSelectedTemplate, {id: this.selectedTemplate?.id, listComponentName: this.componentName}).subscribe((r) => {\n this.changeDisplayColumns();\n });\n }\n }\n\n this.isDeleteTemplate = false;\n this.isEditTemplate = false;\n }, 200); \n }\n\n changeDisplayColumns(){\n if(this.selectedTemplate?.id > 0){\n this.displayedColumns = this.selectedTemplate.displayColumns?.split(',')\n }\n else{\n this.displayedColumns = this.defaultColumns;\n }\n\n this.displayedColumnsChange.emit(this.displayedColumns);\n this.fromStartColumnNumberChange.emit(this.selectedTemplate?.fromStartColumnNumber ?? 0);\n this.fromEndColumnNumberChange.emit(this.selectedTemplate?.fromEndColumnNumber ?? 0);\n }\n\n onMouseOverOut(event: Event, color: string) {\n const target = event.target as HTMLElement;\n target.style.color = color;\n }\n \n onMouseOut(event: Event) {\n const target = event.target as HTMLElement;\n target.style.color = `color: var(--tis-primary, var(--mat-sys-primary, #3838a2)) !important;`;\n }\n}\n","<!-- shared.tisColumnsBtnComponent -->\n<button mat-flat-button class=\"tis-columns-btn\" style=\"background-color: var(--tis-light, #f5f5f5); color: black;\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>view_week</mat-icon>\n <span style=\"display: flex; flex-direction: row;\">\n {{selectedTemplate?.name}}\n <mat-icon style=\"width: 15px; height: 15px; font-size: 20px; line-height: 16px;\">arrow_drop_down</mat-icon>\n </span>\n</button>\n<mat-menu #menu=\"matMenu\" class=\"tis-columns-btn-mat-menu\">\n <button mat-menu-item (click)=\"selectedTemplate?.id != -1 ? onSelectedTemplate(-1) : null\">\n <mat-icon>{{selectedTemplate?.id == -1 ? 'done': ''}}</mat-icon>\n Default\n </button>\n <button mat-menu-item *ngFor=\"let template of templates\" (click)=\"onSelectedTemplate(template?.id)\">\n <mat-icon>{{template?.id == selectedTemplate?.id ? 'done': ''}}</mat-icon>\n <span style=\"padding-right: 4rem;\">{{template.name}}</span>\n <mat-icon style=\"position: absolute; right: 0;\" class=\"delete-button\" (mouseover)=\"onMouseOverOut($event, `var(--tis-delete-icon, #bb333b)`)\" (mouseout)=\"onMouseOverOut($event, '')\" (click)=\"isDeleteTemplate = true\">delete</mat-icon>\n <mat-icon style=\"position: absolute; right: 2rem;\" class=\"edit-button\" (mouseover)=\"onMouseOverOut($event, `var(--tis-edit-icon, var(--mat-sys-primary, #3838a2))`)\" (mouseout)=\"onMouseOverOut($event, '')\" (click)=\"isEditTemplate = true\">edit</mat-icon>\n </button>\n <mat-divider class=\"tis-mat-divider\" style=\"margin: 0px;\"></mat-divider>\n <button mat-menu-item class=\"tis-create-columns-template-button\" style=\"color: var(--tis-primary, var(--mat-sys-primary, #3838a2));\" (click)=\"createNewTemplateDialog()\"><mat-icon style=\"color: var(--tis-primary, var(--mat-sys-primary, #3838a2));\">add</mat-icon> {{t?.tisColumnsBtnComponent?.createNewView}}</button>\n</mat-menu>","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n@Pipe({\n name: 'tisDate',\n standalone: false\n})\nexport class TisDatePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy');\n } else if (value instanceof Date) {\n return DateTime.fromJSDate(value).toFormat('dd MMM yyyy');\n } else if (value === null || value === undefined) {\n return '';\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n\n@Pipe({\n name: 'tisDateTime',\n standalone: false\n})\nexport class TisDateTimePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy hh:mm a');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy hh:mm a');\n } else if (value === null || value === undefined) {\n return '';\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n\n@Pipe({\n name: 'tisDateTimeWithSeconds',\n standalone: false\n})\nexport class TisDateTimeWithSecondsPipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy hh:mm:ss a');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy hh:mm:ss a');\n } else if (value === null || value === undefined) {\n return '';\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { CdkColumnDef } from '@angular/cdk/table';\nimport { Component, EventEmitter, Input, Output, SimpleChanges, ViewChild, OnDestroy } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription, Subject, takeUntil, tap, Observable, map, shareReplay, distinctUntilChanged, debounceTime } from 'rxjs';\nimport type { SmartTableWrapperRowsConfig } from '../../interfaces';\nimport { AnyKeyValueObject, SelectedFilterDisplayValuesType, SelectedFilterDisplayValueType, SelectedFiltersGroupedValuesType, SmartTableWrapperColumnsConfig } from '../../interfaces';\nimport { CollectionViewer, SelectionModel } from '@angular/cdk/collections';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ApiDataSource } from '../../datasources/api.datasource';\nimport { ApiService } from '../../services/api.service';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport * as storageHelper from '../../helpers/storage-helper';\nimport { TimeoutManager } from '../../helpers/timeout-manager.helper';\nimport { QueryParamsHelper } from '../../helpers/query-params.helper';\nimport { FilterDisplayHelper } from '../../helpers/filter-display.helper';\nimport { ValidationHelper } from '../../helpers/validation.helper';\nimport { CollectionHelper } from '../../helpers/collection.helper';\nimport { UrlHelper } from '../../helpers/url.helper';\nimport { Location } from '@angular/common';\nimport type { DataNotFoundConfig } from '../../interfaces/data-not-found-config.type';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-smart-table-viewer',\n standalone: false,\n templateUrl: './tis-smart-table-viewer.component.html',\n styleUrl: './tis-smart-table-viewer.component.css',\n providers: [CdkColumnDef],\n})\nexport class TisSmartTableViewerComponent implements OnDestroy {\n homeUrl = '';\n\n @Input({ required: true }) columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n @Input({ required: true }) t: any = {};\n @Input({ required: true }) componentName = '';\n @Input({ required: true }) mainTitle!: string;\n @Input() searchPlaceholder!: string;\n @Input() breadcrumbs: { url: string, name: string }[] = [];\n @Input() hideHeader = false;\n @Input() hideTableHeader = false;\n @Input() hidePaginator = false;\n @Input() keepFilterInUrl = true;\n @Input() disableBorderedView = false;\n @Input() displayColumnsSelectionButton = true;\n @Input() loadDataApiBaseUrl!: string;\n @Input() startStickyColumnCount!: number;\n @Input() endStickyColumnCount!: number;\n @Input() loaderPosition: 'top' | 'bottom' = 'top';\n @Input({ required: true }) dataNotFoundConfig: DataNotFoundConfig = {\n title: 'No Data Found',\n desc: 'There is no data. Please click on button to add',\n btnText: 'Add New',\n btnUrl: '',\n btnClick: null,\n secondBtnText: '',\n secondBtnUrl: '',\n secondBtnClick: null\n };\n @Input() showFilterButtonSection!: boolean;\n\n @Input({ required: true }) columnsCodeMapping!: SmartTableWrapperColumnsConfig[];\n autoRenderColumns!: SmartTableWrapperColumnsConfig[];\n templateRenderColumns!: SmartTableWrapperColumnsConfig[];\n\n @Input() defaultDisplayedColumns!: string[];\n displayedColumns!: string[];\n defaultColumns!: string[];\n columns!: string[];\n\n @Output() displayedColumnsChange = new EventEmitter<string[]>();\n usersColumnSelectionDetail: any;\n\n @Input() defaultSortObj: any = {};\n sortObj: any = {};\n @Output() sortObjChange = new EventEmitter<AnyKeyValueObject>();\n\n @Input() loadingSpinnerDiameter = 30;\n @Input() pageSizeOptions = [5, 10, 25, 100];\n\n @Input() pageSize = 10;\n @Output() pageSizeChange = new EventEmitter<number>();\n @Input() useGlobalPageSize = true;\n\n @Input() pageIndex = 0;\n @Output() pageIndexChange = new EventEmitter<number>();\n\n @Input() filterFormGroup: FormGroup = new FormGroup({});\n\n @Input() rowsConfig: SmartTableWrapperRowsConfig = {\n backgroundApplyFunction: () => null // Default blank function\n };\n\n @Output() onDataLoaded = new EventEmitter<boolean>();\n @Output() onSetExtraData = new EventEmitter<any>();\n @Output() onSetTotal = new EventEmitter<number>();\n\n selectedTemplate: any = {\n id: -1,\n name: 'Default',\n fromStartColumnNumber: 0,\n fromEndColumnNumber: 0,\n };\n\n selectedFilterValues: SelectedFilterDisplayValuesType = [];\n finalSelectedFilterValuesToDisplay: SelectedFilterDisplayValuesType = [];\n selectedFilterGroupedValues: SelectedFiltersGroupedValuesType[] = [];\n isShowFilter = false;\n filterFormGroupSubscription!: Subscription;\n filterHasNonEmptyValue = false;\n\n filterApplied = false;\n resetFlag = false;\n initialLoading = true;\n displayAfterFilterRemoved = false;\n\n filterFromQueryParams: any = {};\n sortFromQueryParams: any = {};\n\n search = '';\n searchCtrl = new FormControl();\n private _onDestroy = new Subject<void>();\n\n // Additional subscriptions that need cleanup\n private _selectionSubscription!: Subscription;\n private _handsetSubscription!: Subscription;\n private _queryParamsSubscription!: Subscription;\n\n // Memory-efficient caching\n private _columnMappingCache: Map<string, SmartTableWrapperColumnsConfig> = new Map();\n private _displayedColumnsCache: string[] = [];\n private _lastColumnsCodeMappingHash: string = '';\n\n // Race condition prevention\n private _currentRequestSubject = new Subject<void>();\n \n // Timeout management for proper cleanup - prevent memory leaks\n private timeoutManager = new TimeoutManager();\n \n // Computed row backgrounds for optimal performance\n private computedRowBackgrounds = new Map<string, string | null>();\n \n dataSource!: ApiDataSource;\n\n private _sort!: MatSort;\n private _sortSubscription!: Subscription;\n @ViewChild(MatSort) set sort(value: MatSort) {\n this._sort = value;\n if (this._sort) {\n\n if (this._sortSubscription) {\n this._sortSubscription.unsubscribe();\n }\n\n this._sortSubscription = this._sort.sortChange.pipe(\n takeUntil(this._onDestroy),\n ).subscribe((ch) => {\n this.handleSortingChanges(ch);\n });\n }\n }\n\n private _paginator!: MatPaginator;\n private _paginatorSubscription!: Subscription;\n @ViewChild(MatPaginator) set paginator(value: MatPaginator) {\n this._paginator = value;\n if (this._paginator) {\n\n if (this._paginatorSubscription) {\n this._paginatorSubscription.unsubscribe();\n }\n\n this._paginatorSubscription = this._paginator.page.pipe(\n takeUntil(this._onDestroy),\n tap(() => {\n this.onPaginationChanges();\n })\n ).subscribe();\n }\n }\n\n\n loadingSubscription!: Subscription;\n dataLengthSubscription!: Subscription;\n\n @Input() enableRowsSelection = false;\n @Input() enableAllRowsSelection = false;\n @Input() onlySingleSelection = false;\n @Input() selectedRowIds!: (number | string)[];\n @Input() selectedRowKey: string = 'id';\n @Input() selectedRows!: any[];\n @Output() selectedRowsChange = new EventEmitter<any>();\n\n selection = new SelectionModel<any>(true, []);\n selectedIds: Set<number | string> = new Set();\n isAllRowsSelected = false;\n @Output() allRowsSelectedChange = new EventEmitter<boolean>(false);\n\n @Input() enableDragNDrop = false;\n @Output() listDataSequenceChange = new EventEmitter<any>();\n \n @Input() isExpansion: boolean = false;\n @Input() isExpandedRow: boolean = false;\n @Input() expandedTemplate: any;\n isAllExpanded: boolean = false;\n \n // Expansion state management - avoid direct mutation\n private expandedRowIds: Set<string | number> = new Set();\n\n isHandset$!: Observable<boolean>;\n isMobile: boolean = false;\n\n constructor(\n // private userCustomizationService: UserCustomizationService,\n private dialog: MatDialog,\n private apiService: ApiService,\n private route: ActivatedRoute,\n private router: Router,\n private location: Location,\n private breakpointObserver: BreakpointObserver\n ) {\n // Store subscription reference for proper cleanup\n this._selectionSubscription = this.selection.changed.subscribe(change => {\n change.added.forEach(item => {\n if (item && item[this.selectedRowKey] !== undefined) {\n this.selectedIds.add(item[this.selectedRowKey]);\n }\n });\n change.removed.forEach(item => {\n if (item && item[this.selectedRowKey] !== undefined) {\n this.selectedIds.delete(item[this.selectedRowKey]);\n }\n });\n });\n }\n\n ngOnInit(): void {\n\n this.isHandset$ = this.breakpointObserver.observe([Breakpoints.Handset])\n .pipe(\n map(result => result.matches),\n shareReplay()\n );\n\n this._handsetSubscription = this.isHandset$.subscribe(r => {\n this.isMobile = r;\n });\n\n this.setDefaultColumns();\n\n this.getHomeUrl();\n\n this._queryParamsSubscription = this.route.queryParams.subscribe(qp => {\n // Initialize objects\n this.filterFromQueryParams = {};\n this.sortFromQueryParams = {};\n \n if (this.keepFilterInUrl) {\n const { filterParams, sortParams, pageIndex, pageSize, search } = \n QueryParamsHelper.processForFilters(qp, this.columnsCodeMapping);\n \n this.filterFromQueryParams = filterParams;\n this.sortFromQueryParams = sortParams;\n this.pageIndex = pageIndex;\n this.pageSize = pageSize;\n this.search = search;\n this.searchCtrl.patchValue(this.search);\n \n this.filterFormGroup.patchValue(this.filterFromQueryParams);\n\n if (ValidationHelper.hasProperty(this.sortFromQueryParams, 'sortBy') && \n ValidationHelper.hasProperty(this.sortFromQueryParams, 'sortOrder')) {\n this.sortObj = this.sortFromQueryParams;\n this.sortObjChange.emit(this.sortObj);\n }\n }\n\n this.filterApplied = ValidationHelper.hasNonEmptyValue(this.filterFromQueryParams);\n this.getList();\n });\n\n this.searchCtrl.valueChanges\n .pipe(takeUntil(this._onDestroy), debounceTime(400), distinctUntilChanged())\n .subscribe((search) => {\n this.search = search;\n this.resetFlag = true; // B/c every time search is made, make sure we go to first page...\n this.getList(false);\n });\n }\n\n\n ngOnChanges(changes: SimpleChanges): void {\n // console.log(`[table-list-view-wrapper]: ngOnChanges:`, changes);\n\n if (changes['defaultDisplayedColumns']) {\n this.handleDisplayedColumns('defaultDisplayedColumns');\n }\n\n if (changes['columnsCodeMapping']) {\n this.columnsCodeMapping = changes['columnsCodeMapping'].currentValue;\n this.handleDisplayedColumns('columnsCodeMapping');\n\n this.columns = this.columnsCodeMapping.map(c => c.name);\n this.autoRenderColumns = this.columnsCodeMapping.filter(c => c.hasOwnProperty('valueKey'));\n this.templateRenderColumns = this.columnsCodeMapping.filter(c => c.hasOwnProperty('template'));\n }\n\n if (changes['pageIndex']) {\n this.pageIndex = changes['pageIndex'].currentValue;\n }\n\n if (changes['pageSize']) {\n if (!changes['pageSize'].isFirstChange) {\n this.pageSize = changes['pageSize'].currentValue;\n } else {\n if (this.useGlobalPageSize) {\n let userDefaultPageSize = storageHelper.getFromLocalStorageWithExpiry('user_pagination_page_size');\n this.pageSize = userDefaultPageSize ? userDefaultPageSize : changes['pageSize'].currentValue;\n }\n }\n }\n\n\n if (changes['loadDataApiBaseUrl']) {\n if (changes['loadDataApiBaseUrl'].currentValue) {\n // Clean up existing subscriptions\n if (this.loadingSubscription) {\n this.loadingSubscription.unsubscribe();\n }\n\n if (this.dataLengthSubscription) {\n this.dataLengthSubscription.unsubscribe();\n }\n\n // ✅ FIX: Disconnect previous dataSource to prevent memory leaks\n if (this.dataSource) {\n this.dataSource.disconnect({} as CollectionViewer);\n }\n\n // Create new ApiDataSource\n this.dataSource = new ApiDataSource(this.apiService);\n\n this.loadingSubscription = this.dataSource.loading$.subscribe(loading => {\n if (!loading) {\n if(this._paginator){\n this._paginator.pageIndex = this.pageIndex;\n this._paginator.pageSize = this.pageSize;\n }\n // Clear background cache when new data arrives\n this.clearRowBackgroundCache();\n // Pre-compute all row backgrounds for optimal performance\n this.computeAllRowBackgrounds();\n \n this.checkAllRowsSelected();\n this.onDataLoaded.emit(true);\n this.onSetExtraData.emit(this.dataSource.extraDataSubject.value);\n // if (this.selectedRowIds && this.selectedRowIds.length) {\n // setTimeout(() => {\n // this.setSelectedRows();\n // }, 200);\n // }\n }\n });\n\n this.dataLengthSubscription = this.dataSource.totalDataLength$.subscribe((total: any) => {\n if (total !== null) {\n this.initialLoading = false;\n this.onSetTotal.emit(total);\n // console.log('[table-list-view-wrapper]: dataSource total total:', total);\n }\n });\n }\n }\n\n\n if (changes['filterFormGroup']) {\n if (this.filterFormGroupSubscription) {\n this.filterFormGroupSubscription.unsubscribe();\n }\n\n this.filterFormGroupSubscription = this.filterFormGroup.valueChanges\n .pipe(takeUntil(this._onDestroy), distinctUntilChanged()).subscribe(val => {\n this.filterHasNonEmptyValue = ValidationHelper.hasNonEmptyValue(val);\n })\n }\n\n\n if (changes['selectedRows']) {\n this.selectedRows = changes['selectedRows'].currentValue;\n if (this.selectedRows && this.selectedRows.length) {\n // TODO:: Leave for now..... (Not able to decide whether in future we need to pass whole row or ids only)\n }\n }\n\n if (changes['selectedRowIds']) {\n this.selectedRowIds = changes['selectedRowIds'].currentValue;\n if (this.selectedRowIds && this.selectedRowIds.length) {\n this.setSelectedRows();\n }\n }\n\n if (changes['defaultSortObj']?.currentValue) {\n this.defaultSortObj = changes['defaultSortObj'].currentValue;\n\n this.handleSortingChanges({\n direction: this.defaultSortObj.sortOrder,\n active: this.defaultSortObj.sortBy\n });\n }\n }\n\n\n ngOnDestroy(): void {\n // Complete the destroy subject first to trigger takeUntil operators\n this._onDestroy.next();\n this._onDestroy.complete();\n\n // Clean up all subscriptions\n this._sortSubscription?.unsubscribe();\n this._paginatorSubscription?.unsubscribe();\n this.loadingSubscription?.unsubscribe();\n this.dataLengthSubscription?.unsubscribe();\n this.filterFormGroupSubscription?.unsubscribe();\n \n // Clean up additional subscriptions\n this._selectionSubscription?.unsubscribe();\n this._handsetSubscription?.unsubscribe();\n this._queryParamsSubscription?.unsubscribe();\n\n // Clean up selection model and data structures using CollectionHelper\n this.selection.clear();\n CollectionHelper.clearSet(this.selectedIds);\n CollectionHelper.clearSet(this.expandedRowIds);\n \n // Clear arrays to free memory using CollectionHelper\n CollectionHelper.clearArray(this.selectedFilterValues);\n CollectionHelper.clearArray(this.finalSelectedFilterValuesToDisplay);\n CollectionHelper.clearArray(this.selectedFilterGroupedValues);\n CollectionHelper.clearArray(this.displayedColumns);\n \n // Clear caches to free memory\n CollectionHelper.clearMap(this._columnMappingCache);\n CollectionHelper.clearArray(this._displayedColumnsCache);\n this._lastColumnsCodeMappingHash = '';\n CollectionHelper.clearMap(this.computedRowBackgrounds);\n \n // Complete race condition prevention subject\n this._currentRequestSubject.next();\n this._currentRequestSubject.complete();\n \n // Clear all pending timeouts to prevent memory leaks\n this.timeoutManager.clearAll();\n \n // Disconnect data source to stop API calls and complete observables\n if (this.dataSource) {\n this.dataSource.disconnect({} as CollectionViewer);\n }\n }\n\n setDefaultColumns() {\n if (this.defaultDisplayedColumns && this.defaultDisplayedColumns.length) {\n this.defaultColumns = this.defaultDisplayedColumns;\n } else {\n this.defaultColumns = this.columnsCodeMapping.map(c => c.name);\n }\n }\n\n\n handleDisplayedColumns(msg: String = '') {\n\n if(this.selectedTemplate?.id > 0 && this.defaultDisplayedColumns && this.defaultDisplayedColumns.length){\n this.displayedColumns = this.defaultDisplayedColumns.filter(c => this._columnMappingCache.has(c));\n }\n else{\n // Create a hash of current columns to check if cache is valid\n const columnsHash = JSON.stringify(this.columnsCodeMapping.map(c => c.name));\n // Use cache if columns haven't changed\n if (this._lastColumnsCodeMappingHash === columnsHash && this._displayedColumnsCache.length > 0) {\n this.displayedColumns = [...this._displayedColumnsCache];\n } else {\n // Update cache\n this.updateColumnMappingCache();\n this._lastColumnsCodeMappingHash = columnsHash;\n \n if (this.defaultDisplayedColumns && this.defaultDisplayedColumns.length) {\n this.displayedColumns = this.defaultDisplayedColumns.filter(c => this._columnMappingCache.has(c));\n } else {\n this.displayedColumns = this.columnsCodeMapping.map(c => c?.columnDef || c.name);\n }\n \n // Cache the result before adding selection/drag columns\n this._displayedColumnsCache = [...this.displayedColumns];\n }\n }\n\n // Add selection and drag columns (these are dynamic and shouldn't be cached)\n const finalColumns = [...this.displayedColumns];\n \n if (this.enableRowsSelection) {\n finalColumns.unshift('Select');\n }\n\n if (this.enableDragNDrop) {\n finalColumns.unshift('drag');\n }\n \n console.log(`=== handleDisplayedColumns :: ${msg} :: finalColumns ===`, finalColumns);\n \n this.displayedColumns = finalColumns;\n this.displayedColumnsChange.emit(this.displayedColumns);\n }\n\n private updateColumnMappingCache(): void {\n this._columnMappingCache.clear();\n this.columnsCodeMapping.forEach(column => {\n this._columnMappingCache.set(column.name, column);\n });\n }\n\n // TrackBy functions for optimal rendering performance\n trackByBreadcrumb(index: number, breadcrumb: { url: string, name: string }): string {\n return breadcrumb.url + breadcrumb.name || index.toString();\n }\n\n trackByFilterValue(index: number, filterValue: SelectedFilterDisplayValueType): string {\n return `${filterValue.formControlName}_${filterValue.valueKey}_${filterValue.value}`;\n }\n\n trackByAutoColumn(index: number, column: SmartTableWrapperColumnsConfig): string {\n return column.name + (column.serverKeyCode || '');\n }\n\n trackByTemplateColumn(index: number, column: SmartTableWrapperColumnsConfig): string {\n return column.name + (column.serverKeyCode || '');\n }\n\n trackByTableRow(index: number, row: any): any {\n return row.id || row[this.selectedRowKey] || index;\n }\n\n // Helper method to get consistent row identifier for expansion tracking\n private getRowIdentifier(row: any): string | number {\n return CollectionHelper.getRowIdentifier(row, 'id', this.selectedRowKey);\n }\n\n // Helper method to check if a row is expanded (non-mutating)\n public isRowExpanded(row: any): boolean {\n if (!this.isExpansion) return false;\n const rowId = this.getRowIdentifier(row);\n return this.expandedRowIds.has(rowId);\n }\n\n // Clear background cache when data changes to ensure fresh calculations\n private clearRowBackgroundCache(): void {\n this.computedRowBackgrounds.clear();\n }\n\n // Compute all row backgrounds when data changes (runs once per data load)\n private computeAllRowBackgrounds(): void {\n if (!this.dataSource?.apiSubject.value || !this.rowsConfig.backgroundApplyFunction) {\n return;\n }\n \n this.computedRowBackgrounds.clear();\n this.dataSource.apiSubject.value.forEach((row:any) => {\n const rowId = row?.id || row?.[this.selectedRowKey] || JSON.stringify(row);\n try {\n const background = this.rowsConfig.backgroundApplyFunction!(row);\n this.computedRowBackgrounds.set(rowId, background);\n } catch (error) {\n console.warn('Error computing row background:', error);\n this.computedRowBackgrounds.set(rowId, null);\n }\n }); \n }\n\n\n handleSortingChanges(ch: any) {\n this.sortObj = { sortOrder: ch.direction, sortBy: this.columnsCodeMapping.find(c => c.name === ch.active)?.serverKeyCode };\n this.sortFromQueryParams.sortBy = this.sortObj.sortBy;\n this.sortFromQueryParams.sortOrder = this.sortObj.sortOrder;\n this.resetFlag = true;\n this.getList();\n }\n\n\n private getHomeUrl() {\n this.homeUrl = UrlHelper.getHomeUrl();\n }\n\n\n getNestedValue(obj: any, path: string): any {\n return CollectionHelper.getNestedProperty(obj, path);\n }\n\n\n\n private groupByFormControlAttributes(data: SelectedFilterDisplayValueType[]): SelectedFiltersGroupedValuesType[] {\n return FilterDisplayHelper.groupByFormControlAttributes(data);\n }\n\n updateSelectedFilterValues(values: SelectedFilterDisplayValueType | SelectedFilterDisplayValuesType) {\n let currentFormControlName: string;\n if (Array.isArray(values)) {\n currentFormControlName = values[0]?.formControlName;\n } else {\n currentFormControlName = values?.formControlName;\n }\n\n const result = FilterDisplayHelper.updateSelectedFilterValues(\n this.selectedFilterValues, \n values, \n currentFormControlName\n );\n \n this.selectedFilterValues = result.selectedFilterValues;\n this.selectedFilterGroupedValues = result.selectedFilterGroupedValues;\n this.displayAfterFilterRemoved = true;\n this.getFinalSelectedFilterValuesToDisplay();\n }\n\n getFinalSelectedFilterValuesToDisplay() {\n this.finalSelectedFilterValuesToDisplay = FilterDisplayHelper.getValuesForDisplay(\n this.selectedFilterValues, \n this.filterFromQueryParams\n );\n }\n\n removeParticularFilter(f: SelectedFilterDisplayValueType) {\n let val = this.filterFormGroup.get(f.formControlName)?.value;\n \n if (Array.isArray(val)) {\n val = val.filter(v => v != f.value);\n this.filterFormGroup.get(f.formControlName)?.patchValue(val);\n } else {\n this.filterFormGroup.get(f.formControlName)?.reset();\n }\n \n this.selectedFilterValues = FilterDisplayHelper.removeFilterValue(this.selectedFilterValues, f);\n this.displayAfterFilterRemoved = true;\n \n this.timeoutManager.createTimeout(() => {\n this.filterRecords();\n }, 500);\n }\n\n\n filterRecords() {\n this.filterApplied = true;\n this.resetFlag = true;\n // Clear computed backgrounds before loading filtered data\n this.clearRowBackgroundCache();\n this.timeoutManager.createTimeout(() => {\n this.getList(true);\n this.isShowFilter = false;\n }, 500);\n }\n\n public resetFilters() {\n this.filterApplied = false;\n // Clear computed backgrounds before reset\n this.clearRowBackgroundCache();\n this.timeoutManager.createTimeout(() => {\n this.resetFlag = true;\n this.filterFromQueryParams = {};\n this.sortFromQueryParams = {};\n this.selectedFilterGroupedValues = [];\n this.selectedFilterValues = [];\n this.getList();\n }, 250);\n }\n\n public getList(forceFromObject = false) {\n // Cancel any previous request to prevent race conditions\n this._currentRequestSubject.next();\n \n this.isAllExpanded = false;\n // Clear expansion state when loading new data to avoid stale expansion state\n CollectionHelper.clearSet(this.expandedRowIds);\n \n const filterFormData = this.filterFormGroup?.value;\n this.filterHasNonEmptyValue = ValidationHelper.hasFormData(filterFormData);\n\n // Build query string using helper\n const qs = QueryParamsHelper.buildQueryString(\n filterFormData,\n this.sortFromQueryParams,\n this.resetFlag ? 0 : this.pageIndex,\n this.pageSize,\n this.search\n );\n\n if (this.resetFlag) {\n this.pageIndex = 0;\n }\n\n if (this._paginator) {\n this._paginator.pageIndex = this.pageIndex;\n this._paginator.pageSize = this.pageSize;\n }\n\n // Update URL if needed\n const baseUrl = UrlHelper.getBaseUrl(this.router);\n const genUrl = UrlHelper.buildUrl(baseUrl, qs);\n \n if (this.keepFilterInUrl && UrlHelper.hasUrlChanged(genUrl)) {\n UrlHelper.updateUrl(this.location, baseUrl, qs.toString());\n this.filterFromQueryParams = QueryParamsHelper.parseQueryParams(window.location.href);\n }\n\n // Load data with race condition protection\n this.dataSource.loadWithCancellation(\n this.loadDataApiBaseUrl, \n this.pageIndex, \n this.pageSize, \n this.search, \n filterFormData, // Pass original form data - datasource will handle conversions\n this.sortObj,\n this._currentRequestSubject\n );\n this.getFinalSelectedFilterValuesToDisplay();\n\n this.resetFlag = false;\n }\n\n\n onPaginationChanges() {\n if (this.pageIndex != this._paginator.pageIndex) {\n this.pageIndex = this._paginator.pageIndex;\n // Clear computed backgrounds before loading new page data\n this.clearRowBackgroundCache();\n this.getList();\n this.pageIndexChange.emit(this.pageIndex);\n }\n\n if (this.pageSize != this._paginator.pageSize) {\n this.pageSize = this._paginator.pageSize;\n // Clear computed backgrounds before loading new page size data\n this.clearRowBackgroundCache();\n this.getList();\n this.pageSizeChange.emit(this.pageSize);\n storageHelper.setToLocalStorageWithExpiry('user_pagination_page_size', this.pageSize, 1000 * 60 * 60 * 24 * 15);\n }\n\n }\n\n onSetSelectedTemplate(data: any) {\n console.log(\"=== onSetSelectedTemplate ===\", data);\n // this.selectedTemplate = data;\n }\n\n onChangeDisplayColumns(columns: string[]) {\n console.log(\"=== onChangeDisplayColumns ===\", columns);\n \n this.defaultDisplayedColumns = columns;\n this.handleDisplayedColumns('onChangeDisplayColumns');\n }\n\n onChangeFromStartColumnNumber(columnNumber: number) {\n this.startStickyColumnCount = columnNumber;\n }\n\n onChangeFromEndColumnNumber(columnNumber: number) {\n this.endStickyColumnCount = columnNumber;\n }\n\n goToUrl(url: string) {\n UrlHelper.safeNavigate(this.router, url);\n }\n\n toggleSelection(status: MatCheckboxChange, row: any): void {\n // ✅ Add null guards to prevent crashes\n if (!row || !ValidationHelper.hasRowKey(row, this.selectedRowKey)) {\n return;\n }\n \n if (this.onlySingleSelection && status.checked) {\n this.selection.clear();\n }\n \n this.selection.toggle(row);\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n\n checkAllRowsSelected() {\n // ✅ Add comprehensive null guards to prevent crashes\n if (!this.dataSource?.apiSubject?.value || !Array.isArray(this.dataSource.apiSubject.value)) {\n this.isAllRowsSelected = false;\n this.allRowsSelectedChange.emit(this.isAllRowsSelected);\n return;\n }\n \n this.isAllRowsSelected = this.selection.selected.length === this.dataSource.apiSubject.value.length;\n this.allRowsSelectedChange.emit(this.isAllRowsSelected);\n }\n\n\n toggleAllRows(): void {\n // ✅ Add comprehensive null guards\n if (!this.dataSource?.apiSubject?.value || !Array.isArray(this.dataSource.apiSubject.value)) {\n return;\n }\n \n if (this.isAllRowsSelected) {\n this.selection.clear();\n } else {\n this.dataSource.apiSubject.value.forEach(row => {\n // ✅ Validate each row before selecting\n if (row && ValidationHelper.hasRowKey(row, this.selectedRowKey)) {\n this.selection.select(row);\n }\n });\n }\n \n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n stopPropagation($event: any) {\n $event.stopPropagation();\n }\n\n isChecked(row: any): boolean {\n // ✅ Add comprehensive null guards\n if (!row || \n !ValidationHelper.hasRowKey(row, this.selectedRowKey) || \n !this.selectedIds) {\n return false;\n }\n \n return this.selectedIds.has(row[this.selectedRowKey]);\n }\n\n getQueryParams(url: string): Record<string, string | string[]> {\n return QueryParamsHelper.parseQueryParams(url);\n }\n\n\n isStickyStart(columnName: string): boolean {\n const index = this.displayedColumns.indexOf(columnName);\n return index !== -1 && index < this.startStickyColumnCount;\n }\n\n isStickyEnd(columnName: string): boolean {\n const index = this.displayedColumns.indexOf(columnName);\n if (index === -1) return false;\n return index >= this.displayedColumns.length - this.endStickyColumnCount;\n }\n\n getColumnClasses(column: SmartTableWrapperColumnsConfig): { [key: string]: boolean } {\n // Check if alignment is explicitly specified\n if (column.align) {\n return {\n 'text-right': column.align === 'right',\n 'text-left': column.align === 'left',\n 'text-center': column.align === 'center'\n };\n } else {\n // Default alignment based on column type\n switch (column.type) {\n case 'money':\n case 'quantity':\n return { 'text-right': true };\n case 'number':\n return { 'text-center': true };\n default:\n return {};\n }\n }\n }\n\n\n // Optimized getRowBackground - simple O(1) lookup\n getRowBackground(row: any): string | null {\n // Early return if no background function is provided\n if (!this.rowsConfig.backgroundApplyFunction) {\n return null;\n }\n\n const rowId = row?.id || row?.[this.selectedRowKey] || JSON.stringify(row);\n \n // If not computed yet, compute on-demand (fallback)\n if (!this.computedRowBackgrounds.has(rowId)) {\n try {\n const background = this.rowsConfig.backgroundApplyFunction(row);\n this.computedRowBackgrounds.set(rowId, background);\n return background;\n } catch (error) {\n console.warn('Error computing row background:', error);\n return null;\n }\n }\n \n return this.computedRowBackgrounds.get(rowId) || null;\n }\n\n\n drop(event: CdkDragDrop<any[]>) {\n // ✅ Add null guards to prevent crashes\n if (!this.dataSource?.apiSubject?.value || !Array.isArray(this.dataSource.apiSubject.value)) {\n return;\n }\n \n // Ignore if the item was dropped at the same index\n if (event.previousIndex === event.currentIndex) {\n return;\n }\n\n // Access current data from apiSubject\n const currentData = [...this.dataSource.apiSubject.value];\n\n if (!currentData || currentData.length === 0) {\n return;\n }\n\n // Rearrange items based on the drop event\n moveItemInArray(currentData, event.previousIndex, event.currentIndex);\n\n // Update the apiSubject with reordered data\n this.dataSource.apiSubject.next(currentData);\n\n // We need to emit this also\n this.listDataSequenceChange.emit(currentData);\n }\n\n handleButtonClick(config: any) {\n UrlHelper.handleButtonClick(this.router, config);\n }\n\n handleSecondButtonClick(config: any) {\n UrlHelper.handleSecondaryButtonClick(this.router, config);\n }\n\n setSelectedRows(){\n // ✅ Add null guards to prevent crashes\n if (!this.dataSource?.apiSubject?.value || \n !Array.isArray(this.dataSource.apiSubject.value) || \n !this.selectedRowIds) {\n this.selection.clear();\n this.selectedRows = [];\n this.selectedRowsChange.emit(this.selectedRows);\n return;\n }\n \n this.selection.clear();\n \n // ✅ FIX: Convert array to Set for O(1) lookup instead of O(n) indexOf\n const selectedIdsSet = new Set(this.selectedRowIds);\n \n this.dataSource.apiSubject.value.forEach(row => {\n if (row && \n ValidationHelper.hasRowKey(row, this.selectedRowKey) && \n selectedIdsSet.has(row[this.selectedRowKey])) {\n this.selection.select(row);\n }\n });\n \n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n public resetSelectedRows(){\n this.isAllRowsSelected = false;\n this.selection.clear();\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n }\n\n /** Toggles the expanded state of an element. */\n public toggleExpand(element: any) {\n if (!this.isExpansion || !element) {\n return;\n }\n \n const rowId = this.getRowIdentifier(element);\n \n if (this.expandedRowIds.has(rowId)) {\n this.expandedRowIds.delete(rowId);\n } else {\n this.expandedRowIds.add(rowId);\n }\n }\n\n public expandAllRow(){\n if (!this.isExpansion || !this.dataSource?.apiSubject?.value) {\n return;\n }\n \n this.isAllExpanded = !this.isAllExpanded;\n \n if (this.isAllExpanded) {\n // Add all row IDs to expanded set\n this.dataSource.apiSubject.value.forEach(row => {\n const rowId = this.getRowIdentifier(row);\n this.expandedRowIds.add(rowId);\n });\n } else {\n // Clear all expanded rows\n this.expandedRowIds.clear();\n }\n }\n}\n","<section [class.tis-page]=\"!hideHeader\">\n <div class=\"tis-page-header\" *ngIf=\"!hideHeader\">\n <nav aria-label=\"tis-breadcrumb\">\n <ol class=\"tis-breadcrumb\">\n <li class=\"tis-breadcrumb-item\"><a href=\"javascript:;\" [routerLink]=\"homeUrl\">{{t?.home}}</a></li>\n @for(breadcrumb of breadcrumbs; track trackByBreadcrumb($index, breadcrumb)) {\n <li class=\"tis-breadcrumb-item\" *ngIf=\"breadcrumb?.url\">\n <a href=\"javascript:;\" (click)=\"goToUrl(breadcrumb.url)\">{{breadcrumb?.name}}</a>\n </li>\n }\n <li class=\"tis-breadcrumb-item active\">\n {{mainTitle}}\n </li>\n </ol>\n </nav>\n <ng-content select=\"[slot='top-buttons-section']\"></ng-content>\n </div>\n <h1 class=\"tis-page-title\" *ngIf=\"!hideHeader\">{{mainTitle}}</h1>\n <div class=\"tis-page-body\">\n <div class=\"tis-page-body-content\">\n\n @if(initialLoading){\n <div class=\"tis-d-flex tis-justify-content-center pb-2 pt-7\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"60\"></mat-progress-spinner>\n </div>\n } @else {\n\n @if ((dataSource?.totalDataLength$ | async) || (dataSource?.loading$ | async) || search ||\n filterHasNonEmptyValue || showFilterButtonSection || displayAfterFilterRemoved) {\n <div class=\"tis-table-container\">\n @if(!hideTableHeader){\n <div class=\"tis-table-container-header\">\n <ul class=\"tis-inline-group\">\n <li class=\"tis-inline-group-item\">\n <tis-columns-btn [columnCustomizationUrlConfig]=\"columnCustomizationUrlConfig\" [t]=\"t\"\n [componentName]=\"componentName\" [(selectedTemplate)]=\"selectedTemplate\" [defaultColumns]=\"defaultColumns\" [columns]=\"columns\"\n (selectedTemplateChange)=\"onSetSelectedTemplate($event)\"\n (displayedColumnsChange)=\"onChangeDisplayColumns($event)\"\n (fromStartColumnNumberChange)=\"onChangeFromStartColumnNumber($event)\"\n (fromEndColumnNumberChange)=\"onChangeFromEndColumnNumber($event)\"></tis-columns-btn>\n </li>\n <ng-content select=\"[slot='filter-button-section']\"></ng-content>\n </ul>\n <div class=\"flex items-center\">\n <ul class=\"tis-inline-group\">\n <ng-content select=\"[slot='filter-right-button-section']\"></ng-content>\n </ul>\n @if(!isMobile && searchPlaceholder && searchPlaceholder != ''){\n <mat-form-field\n class=\"custom-mat-form-field-mb-0 search-mat-form-field ml-3 tis-table-search-field\"\n appearance=\"outline\">\n <span class=\"material-icons\" matPrefix>search</span>\n <input matInput [formControl]=\"searchCtrl\" [placeholder]=\"searchPlaceholder\">\n <span class=\"material-icons mr-2 tis-curser-pointer\" matSuffix\n (click)=\"searchCtrl.setValue('')\"\n *ngIf=\"searchCtrl.value && searchCtrl.value != ''\">close</span>\n </mat-form-field>\n }\n </div>\n </div>\n }\n\n @if (filterFormGroup) {\n\n <ng-content select=\"[slot='filter-form-section']\"></ng-content>\n\n @if(finalSelectedFilterValuesToDisplay.length && filterApplied) {\n <div class=\"flex gap-3 mb-3 filter-applied-section md-hide-scrollbar\">\n @for(v of finalSelectedFilterValuesToDisplay; track trackByFilterValue($index, v)) {\n @if (v) {\n <span class=\"tis-filter-badge\" style=\"white-space: nowrap;\">\n @if(v.labelKey && v.labelKey != '' && (v.valueKey || v.value)) {\n <span class=\"font-semibold\"> {{v.labelKey }} </span>\n }\n @if(v.valueKey) {\n {{v.valueKey }}\n } @else {\n {{v.value }}\n }\n <span class=\"material-icons tis-curser-pointer\"\n (click)=\"removeParticularFilter(v)\">cancel</span>\n </span>\n }\n }\n </div>\n }\n }\n\n @if(isMobile && searchPlaceholder && searchPlaceholder != ''){\n <mat-form-field\n class=\"custom-mat-form-field-mb-0 search-mat-form-field mb-3 tis-table-search-field\"\n appearance=\"outline\">\n <span class=\"material-icons\" matPrefix>search</span>\n <input matInput [formControl]=\"searchCtrl\" [placeholder]=\"searchPlaceholder\">\n <span class=\"material-icons mr-2 tis-curser-pointer\" matSuffix\n (click)=\"searchCtrl.setValue('')\"\n *ngIf=\"searchCtrl.value && searchCtrl.value != ''\">close</span>\n </mat-form-field>\n }\n\n \n @if(loaderPosition == 'top'){\n @if(dataSource?.loading$ | async){\n <div class=\"tis-d-flex tis-justify-content-center py-2\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"loadingSpinnerDiameter\"></mat-progress-spinner>\n </div>\n }\n }\n <div class=\"tis-table-container-body\">\n <div class=\"tis-table-wrapper\" [appScrolling]=\"true\">\n\n <!--Table Here-->\n <table mat-table matSort [dataSource]=\"dataSource\" class=\"tis-table\" [class.tis-table-bordered]=\"disableBorderedView == false\" cdkDropList (cdkDropListDropped)=\"drop($event)\" [cdkDropListLockAxis]=\"'y'\" multiTemplateDataRows>\n\n @if (enableRowsSelection) {\n <ng-container matColumnDef=\"Select\">\n <th mat-header-cell *matHeaderCellDef>\n @if (enableAllRowsSelection) {\n <mat-checkbox color=\"primary\" (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"isAllRowsSelected\"\n [indeterminate]=\"selection.hasValue() && !isAllRowsSelected\">\n </mat-checkbox>\n }\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox color=\"primary\" (click)=\"stopPropagation($event)\" (change)=\"$event ? toggleSelection($event, row) : null\" [checked]=\"isChecked(row)\"></mat-checkbox>\n </td>\n </ng-container>\n }\n\n @for(column of autoRenderColumns; track trackByAutoColumn($index, column); let i = $index; let l = $last){\n <!-- [sticky]=\"i < startStickyColumnCount\" [stickyEnd]=\"i > (autoRenderColumns?.length - endStickyColumnCount)\" -->\n <ng-container [matColumnDef]=\"column?.columnDef || column.name\" [sticky]=\"isStickyStart(column?.columnDef || column.name)\" [stickyEnd]=\"isStickyEnd(column?.columnDef || column.name)\">\n @if(column.type == 'expand') {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n <div style=\"display: flex; align-items: center; gap: 5px;\">\n <span>{{ column?.columnName ? column?.columnName : t[column.name] }}</span>\n <mat-icon *ngIf=\"!isAllExpanded\">expand_more</mat-icon>\n <mat-icon *ngIf=\"isAllExpanded\">expand_less</mat-icon>\n </div>\n </th>\n }\n @else if(column.sort) {\n <th mat-header-cell mat-sort-header *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n @else {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n \n\n @if(column.type == 'date'){\n <td mat-cell *matCellDef=\"let element\" class=\"1al-{{column.align}} 1ty-{{column.type}}\" >\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | tisDate) : ''}}\n </p>\n </td>\n } @else if(column.type == 'date-time'){\n <td mat-cell *matCellDef=\"let element\" class=\"2al-{{column.align}} 2ty-{{column.type}}\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | tisDateTime) : ''}}\n </p>\n </td>\n } @else if(column.type == 'date-time-with-seconds'){\n <td mat-cell *matCellDef=\"let element\" class=\"2al-{{column.align}} 2ty-{{column.type}}\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | tisDateTimeWithSeconds) : ''}}\n </p>\n </td>\n } @else {\n <td mat-cell *matCellDef=\"let element\" class=\"3al-{{column.align}} 3ty-{{column.type}}\" [ngClass]=\"getColumnClasses(column)\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n @if (column.type == 'quantity') {\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | number : '1.4-4') : '-' }}\n } @else if (column.type == 'money') {\n {{ column.valueKey && (getNestedValue(element, column.valueKey))?.toFixed(2) }}\n } @else {\n {{ column.valueKey && getNestedValue(element, column.valueKey) }}\n }\n </p>\n </td>\n }\n </ng-container>\n\n }\n\n\n @for(column of templateRenderColumns; track trackByTemplateColumn($index, column); let i = $index; let l = $last){\n <!-- [sticky]=\"i < startStickyColumnCount\" [stickyEnd]=\"l\" -->\n <ng-container [matColumnDef]=\"column?.columnDef || column.name\" [sticky]=\"isStickyStart(column?.columnDef || column.name)\" [stickyEnd]=\"isStickyEnd(column?.columnDef || column.name)\">\n @if(column.type == 'expand') {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n <div style=\"display: flex; align-items: center; gap: 5px; cursor: pointer;\" (click)=\"expandAllRow()\">\n <span>{{ column?.columnName ? column?.columnName : t[column.name] }}</span>\n <mat-icon *ngIf=\"!isAllExpanded\">expand_more</mat-icon>\n <mat-icon *ngIf=\"isAllExpanded\">expand_less</mat-icon>\n </div>\n </th>\n }\n @else if(column.sort) {\n <th mat-header-cell *matHeaderCellDef mat-sort-header [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n @else {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" class=\"4al-{{column.align}} 4ty-{{column.type}}\" [ngClass]=\"getColumnClasses(column)\">\n <ng-container *ngIf=\"column.template as template\">\n <ng-container *ngTemplateOutlet=\"template; context: { colDef: column, colData: element }\"></ng-container>\n </ng-container>\n </td>\n </ng-container>\n }\n\n <!--Drag Column Def Start-->\n <ng-container [matColumnDef]=\"'drag'\" >\n <th mat-header-cell *matHeaderCellDef>\n --\n </th>\n <td mat-cell *matCellDef=\"let element\" class=\"5al-drag 5ty-drag\">\n <mat-icon cdkDragHandle class=\"tis-curser-pointer\" style=\"color: rgba(0, 0, 0, 0.54); font-size: 19px; width: 19px; height: 19px;\">drag_indicator</mat-icon>\n </td>\n </ng-container>\n <!--Drag Column Def End-->\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"displayedColumns.length\" [style.border-bottom-width]=\"isRowExpanded(element) ? '1px' : '0px'\" style=\"padding: 0px !important;\">\n <div class=\"tis-element-detail-wrapper\" [class.tis-element-detail-wrapper-expanded]=\"isRowExpanded(element)\">\n <ng-container *ngIf=\"expandedTemplate as template\">\n <ng-container *ngTemplateOutlet=\"template; context: { colData: element }\"></ng-container>\n </ng-container>\n </div>\n </td>\n </ng-container>\n\n\n <tr class=\"mat-row\" *matNoDataRow>\n <td class=\"mat-cell\" [attr.colspan]=\"displayedColumns.length\">\n <div class=\"tis-data-not-found\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"130\" height=\"126.89\" viewBox=\"0 0 647.63626 632.17383\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" role=\"img\" artist=\"Katerina Limpitsouni\" source=\"https://undraw.co/\">\n <path d=\"M687.3279,276.08691H512.81813a15.01828,15.01828,0,0,0-15,15v387.85l-2,.61005-42.81006,13.11a8.00676,8.00676,0,0,1-9.98974-5.31L315.678,271.39691a8.00313,8.00313,0,0,1,5.31006-9.99l65.97022-20.2,191.25-58.54,65.96972-20.2a7.98927,7.98927,0,0,1,9.99024,5.3l32.5498,106.32Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#f2f2f2\"/>\n <path d=\"M725.408,274.08691l-39.23-128.14a16.99368,16.99368,0,0,0-21.23-11.28l-92.75,28.39L380.95827,221.60693l-92.75,28.4a17.0152,17.0152,0,0,0-11.28028,21.23l134.08008,437.93a17.02661,17.02661,0,0,0,16.26026,12.03,16.78926,16.78926,0,0,0,4.96972-.75l63.58008-19.46,2-.62v-2.09l-2,.61-64.16992,19.65a15.01489,15.01489,0,0,1-18.73-9.95l-134.06983-437.94a14.97935,14.97935,0,0,1,9.94971-18.73l92.75-28.4,191.24024-58.54,92.75-28.4a15.15551,15.15551,0,0,1,4.40966-.66,15.01461,15.01461,0,0,1,14.32032,10.61l39.0498,127.56.62012,2h2.08008Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M398.86279,261.73389a9.0157,9.0157,0,0,1-8.61133-6.3667l-12.88037-42.07178a8.99884,8.99884,0,0,1,5.9712-11.24023l175.939-53.86377a9.00867,9.00867,0,0,1,11.24072,5.9707l12.88037,42.07227a9.01029,9.01029,0,0,1-5.9707,11.24072L401.49219,261.33887A8.976,8.976,0,0,1,398.86279,261.73389Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"12.66462\" fill=\"#fff\"/>\n <path d=\"M878.81836,716.08691h-338a8.50981,8.50981,0,0,1-8.5-8.5v-405a8.50951,8.50951,0,0,1,8.5-8.5h338a8.50982,8.50982,0,0,1,8.5,8.5v405A8.51013,8.51013,0,0,1,878.81836,716.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#e6e6e6\"/>\n <path d=\"M723.31813,274.08691h-210.5a17.02411,17.02411,0,0,0-17,17v407.8l2-.61v-407.19a15.01828,15.01828,0,0,1,15-15H723.93825Zm183.5,0h-394a17.02411,17.02411,0,0,0-17,17v458a17.0241,17.0241,0,0,0,17,17h394a17.0241,17.0241,0,0,0,17-17v-458A17.02411,17.02411,0,0,0,906.81813,274.08691Zm15,475a15.01828,15.01828,0,0,1-15,15h-394a15.01828,15.01828,0,0,1-15-15v-458a15.01828,15.01828,0,0,1,15-15h394a15.01828,15.01828,0,0,1,15,15Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M801.81836,318.08691h-184a9.01015,9.01015,0,0,1-9-9v-44a9.01016,9.01016,0,0,1,9-9h184a9.01016,9.01016,0,0,1,9,9v44A9.01015,9.01015,0,0,1,801.81836,318.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"12.18187\" fill=\"#fff\"/>\n </svg>\n <h5 class=\"tis-h5\">{{dataNotFoundConfig.title}}</h5>\n </div>\n </td>\n </tr>\n\n <!-- Apply Drag and Drop to tbody -->\n @if(enableDragNDrop) {\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngStyle]=\"{'background-color': getRowBackground(row) || 'inherit'}\" [class.tis-curser-pointer]=\"isExpandedRow\" (click)=\"(isExpansion && isExpandedRow) ? toggleExpand(row) : null\" cdkDrag></tr>\n }\n\n @if(!enableDragNDrop) {\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngStyle]=\"{'background-color': getRowBackground(row) || 'inherit'}\" [class.tis-curser-pointer]=\"isExpandedRow\" (click)=\"(isExpansion && isExpandedRow) ? toggleExpand(row) : null\"></tr>\n } \n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"tis-detail-row\"></tr>\n </table>\n <!--Table End-->\n\n </div>\n @if(loaderPosition == 'bottom'){\n @if(dataSource?.loading$ | async){\n <div class=\"tis-d-flex tis-justify-content-center py-2\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"loadingSpinnerDiameter\"></mat-progress-spinner>\n </div>\n }\n }\n @if (!hidePaginator) {\n <div class=\"tis-table-paginator\">\n <mat-paginator [length]=\"dataSource?.totalDataLength?.value\" [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons></mat-paginator>\n </div>\n }\n </div>\n </div>\n } @else {\n\n @if(dataNotFoundConfig) {\n <div class=\"tis-data-not-found\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"130\" height=\"126.89\" viewBox=\"0 0 647.63626 632.17383\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" role=\"img\" artist=\"Katerina Limpitsouni\" source=\"https://undraw.co/\">\n <path d=\"M687.3279,276.08691H512.81813a15.01828,15.01828,0,0,0-15,15v387.85l-2,.61005-42.81006,13.11a8.00676,8.00676,0,0,1-9.98974-5.31L315.678,271.39691a8.00313,8.00313,0,0,1,5.31006-9.99l65.97022-20.2,191.25-58.54,65.96972-20.2a7.98927,7.98927,0,0,1,9.99024,5.3l32.5498,106.32Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#f2f2f2\"/>\n <path d=\"M725.408,274.08691l-39.23-128.14a16.99368,16.99368,0,0,0-21.23-11.28l-92.75,28.39L380.95827,221.60693l-92.75,28.4a17.0152,17.0152,0,0,0-11.28028,21.23l134.08008,437.93a17.02661,17.02661,0,0,0,16.26026,12.03,16.78926,16.78926,0,0,0,4.96972-.75l63.58008-19.46,2-.62v-2.09l-2,.61-64.16992,19.65a15.01489,15.01489,0,0,1-18.73-9.95l-134.06983-437.94a14.97935,14.97935,0,0,1,9.94971-18.73l92.75-28.4,191.24024-58.54,92.75-28.4a15.15551,15.15551,0,0,1,4.40966-.66,15.01461,15.01461,0,0,1,14.32032,10.61l39.0498,127.56.62012,2h2.08008Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M398.86279,261.73389a9.0157,9.0157,0,0,1-8.61133-6.3667l-12.88037-42.07178a8.99884,8.99884,0,0,1,5.9712-11.24023l175.939-53.86377a9.00867,9.00867,0,0,1,11.24072,5.9707l12.88037,42.07227a9.01029,9.01029,0,0,1-5.9707,11.24072L401.49219,261.33887A8.976,8.976,0,0,1,398.86279,261.73389Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"12.66462\" fill=\"#fff\"/>\n <path d=\"M878.81836,716.08691h-338a8.50981,8.50981,0,0,1-8.5-8.5v-405a8.50951,8.50951,0,0,1,8.5-8.5h338a8.50982,8.50982,0,0,1,8.5,8.5v405A8.51013,8.51013,0,0,1,878.81836,716.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#e6e6e6\"/>\n <path d=\"M723.31813,274.08691h-210.5a17.02411,17.02411,0,0,0-17,17v407.8l2-.61v-407.19a15.01828,15.01828,0,0,1,15-15H723.93825Zm183.5,0h-394a17.02411,17.02411,0,0,0-17,17v458a17.0241,17.0241,0,0,0,17,17h394a17.0241,17.0241,0,0,0,17-17v-458A17.02411,17.02411,0,0,0,906.81813,274.08691Zm15,475a15.01828,15.01828,0,0,1-15,15h-394a15.01828,15.01828,0,0,1-15-15v-458a15.01828,15.01828,0,0,1,15-15h394a15.01828,15.01828,0,0,1,15,15Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M801.81836,318.08691h-184a9.01015,9.01015,0,0,1-9-9v-44a9.01016,9.01016,0,0,1,9-9h184a9.01016,9.01016,0,0,1,9,9v44A9.01015,9.01015,0,0,1,801.81836,318.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"12.18187\" fill=\"#fff\"/>\n </svg>\n <h5 class=\"tis-h5\">{{dataNotFoundConfig.title}}</h5>\n <p class=\"tis-p\">{{dataNotFoundConfig.desc}}</p>\n @if((dataNotFoundConfig.btnUrl || dataNotFoundConfig?.btnClick) && dataNotFoundConfig.btnText) {\n <button mat-flat-button color=\"primary\" class=\"tis-text-upper\"\n (click)=\"handleButtonClick(dataNotFoundConfig)\">\n <mat-icon>add</mat-icon>\n {{dataNotFoundConfig.btnText}}\n </button>\n }\n @if((dataNotFoundConfig.secondBtnUrl || dataNotFoundConfig?.secondBtnClick) && dataNotFoundConfig.secondBtnText) {\n <button mat-stroked-button color=\"primary\" class=\"tis-text-upper\"\n (click)=\"handleSecondButtonClick(dataNotFoundConfig)\">\n <mat-icon>add</mat-icon>\n {{dataNotFoundConfig.secondBtnText}}\n </button>\n }\n </div>\n }\n\n }\n\n }\n\n </div>\n </div>\n</section>","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'qty',\n standalone: false\n})\nexport class Quantity implements PipeTransform {\n decimalPoints = 4;\n\n transform(value: number | string): any {\n if(Number(value) > 0){\n let roundValue: any = this.roundNumber(Number(value), this.decimalPoints);\n let roundValueArr = String(roundValue)?.split('.');\n if(roundValueArr?.length > 1){\n let currentDesimal = roundValueArr[1];\n if(currentDesimal?.length < this.decimalPoints){\n roundValue = `${roundValue}`;\n for (let index = 0; index < (this.decimalPoints - currentDesimal?.length); index++) {\n roundValue = `${roundValue}0`;\n }\n }\n }\n else{\n roundValue = `${roundValueArr[0]}.0000`;\n }\n return roundValue;\n }\n else{\n return 0;\n }\n }\n\n roundNumber(number: number, decimals = 0) {\n const multiplier = Math.pow(10, decimals);\n return Math.round(number * multiplier) / multiplier;\n }\n\n\n}","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'money',\n standalone: false\n})\nexport class Money implements PipeTransform {\n decimalPoints = 4;\n\n transform(value: number | string): any {\n if(Number(value) > 0){\n let roundValue: any = this.roundNumber(Number(value), this.decimalPoints);\n let roundValueArr = String(roundValue)?.split('.');\n if(roundValueArr?.length > 1){\n let currentDesimal = roundValueArr[1];\n if(currentDesimal?.length < this.decimalPoints){\n roundValue = `${roundValue}`;\n for (let index = 0; index < (this.decimalPoints - currentDesimal?.length); index++) {\n roundValue = `${roundValue}0`;\n }\n }\n }\n else{\n roundValue = `${roundValueArr[0]}.0000`;\n }\n return roundValue;\n }\n else{\n return 0;\n }\n }\n\n roundNumber(number: number, decimals = 0) {\n const multiplier = Math.pow(10, decimals);\n return Math.round(number * multiplier) / multiplier;\n }\n\n\n}","import { NgModule } from '@angular/core';\nimport { TisSmartTableViewerComponent } from './components/tis-smart-table-viewer/tis-smart-table-viewer.component';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, RouterOutlet } from '@angular/router';\nimport { LayoutModule } from '@angular/cdk/layout';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { TisColumnsBtnComponent } from './components/tis-columns-btn/tis-columns-btn.component';\nimport { TisSmartTableConfirmationDialogComponent } from './components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component';\nimport { TisSmartTableErrorDialogComponent } from './components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component';\nimport { CreateColumnsTemplateComponent } from './components/create-columns-template/create-columns-template.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { ScrollingDirective } from './directives/scrolling/scrolling.directive';\nimport { TisDatePipe } from './pipes/tis-date.pipe';\nimport { TisDateTimePipe } from './pipes/tis-date-time.pipe';\nimport { TisDateTimeWithSecondsPipe } from './pipes/tis-date-time-with-seconds.pipe';\nimport { Quantity } from './pipes/quantity.pipe';\nimport { Money } from './pipes/money.pipe';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatSortModule } from '@angular/material/sort';\n\n\nconst directives = [\n ScrollingDirective\n];\n\nconst pipes = [\n TisDatePipe,\n TisDateTimePipe,\n TisDateTimeWithSecondsPipe,\n Quantity,\n Money,\n];\n\nconst uiImports = [\n MatTooltipModule,\n MatIconModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSnackBarModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n MatPaginatorModule,\n LayoutModule, // For Breakpoint Observer,\n MatDialogModule,\n MatTableModule,\n MatCheckboxModule,\n MatMenuModule,\n MatDividerModule,\n MatSortModule\n];\n\n\n@NgModule({\n declarations: [\n ...directives,\n ...pipes,\n TisSmartTableViewerComponent,\n TisColumnsBtnComponent,\n CreateColumnsTemplateComponent,\n TisSmartTableErrorDialogComponent,\n TisSmartTableConfirmationDialogComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterLink,\n RouterOutlet,\n ...uiImports,\n DragDropModule\n ],\n exports: [\n TisSmartTableViewerComponent\n ]\n})\nexport class TisSmartTableViewerModule { }\n","/*\n * Public API Surface of tis-smart-table-viewer\n */\n\nexport * from './lib/tis-smart-table-viewer.service';\nexport * from './lib/tis-smart-table-viewer.module';\nexport * from './lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component';\n\nexport * from './lib/interfaces';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4","i1","i3","i5","i7","i11","i14.ScrollingDirective","i1.TisHelperService","i2.UserCustomizationService","i6","i8","storageHelper.getFromLocalStorageWithExpiry","storageHelper.setToLocalStorageWithExpiry","i2.ApiService","i9","i10","i12","i13","i14","i16","i17.ScrollingDirective","i18.TisColumnsBtnComponent","i19.TisDatePipe","i20.TisDateTimePipe","i21.TisDateTimeWithSecondsPipe"],"mappings":"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"}