basesite-shared-grid-lib 21.0.1-beta.93 → 21.0.2
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":"basesite-shared-grid-lib.mjs","sources":["../../../projects/basesite-shared-grid-lib/src/lib/token-sharing.service.ts","../../../projects/basesite-shared-grid-lib/src/lib/grid-library.service.ts","../../../projects/basesite-shared-grid-lib/src/lib/helpers/utils.ts","../../../projects/basesite-shared-grid-lib/src/lib/helpers/oDataProvider.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/button-renderer/button-renderer.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/tooltip-renderer/custom-tooltip-renderer.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/dropdown-renderer/drop-down-renderer.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/cell-renderer/cell-renderer.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/fill-cell-renderer/fill-cell-renderer.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/date-filter/date-filter.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/date-filter/date-filter.component.html","../../../projects/basesite-shared-grid-lib/src/lib/formatters/column-value-formatter.ts","../../../projects/basesite-shared-grid-lib/src/lib/grid-library.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/date-header/date-header.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/header/header.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/grid-library.module.ts","../../../projects/basesite-shared-grid-lib/src/public-api.ts","../../../projects/basesite-shared-grid-lib/src/basesite-shared-grid-lib.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TokenSharingService {\r\n\r\n constructor() { }\r\n\r\n private tokenSubject = new BehaviorSubject<string>(\"\");\r\n token$ = this.tokenSubject.asObservable();\r\n updateToken(newToken:string){\r\n this.tokenSubject.next(newToken);\r\n }\r\n\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { TokenSharingService } from './token-sharing.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GridLibraryService {\r\n private baseUrl: any = 'https://localhost:7237/api';\r\n accessToken!: string;\r\n constructor(private httpClient: HttpClient,private _tokenSharingService:TokenSharingService) {\r\n this._tokenSharingService.token$.subscribe(res =>{\r\n if(res && res != \"\"){\r\n this.accessToken = res;\r\n }\r\n });\r\n this.setBaseUrl();\r\n } \r\n\r\n setBaseUrl(environment: any=\"\") {\r\n if (window.location.origin.includes('fcelspx')) {\r\n this.baseUrl = window.location.origin + '/designhub/api';\r\n }\r\n else if(environment=='uat'){\r\n this.baseUrl ='https://fcemsuat.intel.com/designhub/api'\r\n }\r\n else if(environment=='production'){\r\n this.baseUrl ='https://fcems.intel.com/designhub/api'\r\n }\r\n else {\r\n this.baseUrl = 'https://fcelspx-test.intel.com/designhub/api'\r\n }\r\n }\r\n\r\n getColDef(gridId: any): Observable<any> { \r\n return this.httpClient.get<any>(\r\n `${this.baseUrl}/GridConfiguration/${gridId}`, { headers: this.getRequestHeader()}\r\n );\r\n }\r\n\r\n saveColumnConfig(columnConfig:any){\r\n return this.httpClient.post<any>(\r\n `${this.baseUrl}/GridConfiguration/saveUIUserGridConfiguration`, columnConfig, { headers: this.getRequestHeader()}\r\n );\r\n }\r\n\r\n getGridState(gridId: number, loggedInUserId: number, siteId: number) {\r\n return this.httpClient.get<any>(\r\n `${this.baseUrl}/GridConfiguration?gridId=${gridId}&userId=${loggedInUserId}&siteId=${siteId}`, { headers: this.getRequestHeader() }\r\n );\r\n }\r\n\r\n getRequestHeader() {\r\n let reqHeader: any;\r\n\r\n if (this.accessToken) {\r\n reqHeader = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + this.accessToken\r\n });\r\n }\r\n else {\r\n reqHeader = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n });\r\n }\r\n \r\n return reqHeader;\r\n }\r\n\r\n getDataForExport(serverUrl: any): Observable<any> {\r\n return this.httpClient.get<any>(\r\n `${serverUrl}`, { headers: this.getRequestHeader() }\r\n );\r\n }\r\n}\r\n","export function escapeRegExp(string:any) {\r\n return string.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\r\n }\r\n \r\n export function replaceAll(str: string, search: string, replacement: string): string {\r\n return str.replace(new RegExp(escapeRegExp(search), \"g\"), replacement);\r\n }","import {\r\n IGetRowsParams,\r\n ColDef,\r\n ColGroupDef,\r\n ColumnVO,\r\n IServerSideGetRowsRequest,\r\n IServerSideGetRowsParams,\r\n} from 'ag-grid-community';\r\n\r\nimport {\r\n OdataQueryExtendFull,\r\n OdataQueryExtendOptions,\r\n OdataQueryOptions,\r\n PivotResultDat,\r\n} from './types';\r\n\r\nimport { replaceAll } from './utils';\r\nexport declare class OdataProviderOptions {\r\n /**\r\n * Function for call odata api\r\n */\r\n callApi: (query: string) => Promise<any>;\r\n /**\r\n * Name of field contain count of record results in grouping odata query\r\n * @default childCount\r\n */\r\n groupCountFieldName?: string;\r\n /**\r\n * Use in odata build query\r\n * @default false\r\n */\r\n isCaseSensitiveStringFilter?: boolean;\r\n /**\r\n * Callback for extend odata query options for implement user logic\r\n */\r\n beforeRequest?: (\r\n options: OdataQueryOptions,\r\n provider: OdataProvider,\r\n request: IGetRowsParams | IServerSideGetRowsRequest\r\n ) => void;\r\n /**\r\n * Callback for pivot or group for aplly column ag-grid settings\r\n * @example\r\n * <pre><code>\r\n * beforeSetSecondaryColumns = secondaryColumns => {\r\n for (let i = 0; i < secondaryColumns.length; i++) {\r\n const col = secondaryColumns[i]\r\n if (col.children) {\r\n beforeSetSecondaryColumns(col.children)\r\n } else {\r\n //Aplly new setting for group dyncamic created column\r\n // col.cellClassRules = \r\n // col.valueFormatter = \r\n }\r\n }\r\n }\r\n * </pre></code>\r\n */\r\n beforeSetSecondaryColumns?: (\r\n secondaryColDefs: (ColDef | ColGroupDef)[]\r\n ) => void;\r\n /**\r\n * Callback invoked after load data\r\n * @param options odata provider options\r\n * @param rowData data for ag-grid\r\n * @param totalCount total count records\r\n * \r\n * @example\r\n * <pre><code>\r\n afterLoadData = (options, rowData, totalCount) => {\r\n if (options.skip === 0 && rowData.length > 0) {\r\n gridApi.columnController.autoSizeAllColumns()\r\n }\r\n }\r\n * </code></pre>\r\n */\r\n afterLoadData?: (\r\n options: OdataQueryExtendOptions,\r\n rowData: any[],\r\n totalCount: number\r\n ) => void;\r\n /**\r\n * Callback for catch error\r\n */\r\n setError?: (\r\n error: any,\r\n params: IGetRowsParams | IServerSideGetRowsParams\r\n ) => void;\r\n /**\r\n * List of columns by id/field are case sensitive for build odata query\r\n */\r\n caseSensitiveColumns?: string[];\r\n /**\r\n * Use for specified column custom filter implementation\r\n * <pre><code>\r\n customFilters: {\r\n \"customer\": (colName,col,isCaseSensitiveStringFilter,provider) =>{\r\n return provider.odataOperator.in(\r\n colName,\r\n col.values\r\n )\r\n }\r\n }\r\n */\r\n customFilters?: {\r\n [index: string]: (\r\n colName: string,\r\n col: any,\r\n isCaseSensitiveStringFilter: boolean,\r\n provider: OdataProvider\r\n ) => string;\r\n };\r\n}\r\n\r\ndeclare interface CancelablePromise {\r\n promise: Promise<any>;\r\n cancel: () => void;\r\n}\r\nexport class OdataProvider implements OdataProviderOptions {\r\n /**\r\n * Function for call odata api\r\n */\r\n callApi!: (query: string) => Promise<any>;\r\n /**\r\n * Name of field contain count of record results in grouping odata query\r\n * @default childCount\r\n */\r\n groupCountFieldName: string = 'childCount';\r\n /**\r\n * Use in odata build query\r\n * @default false\r\n */\r\n isCaseSensitiveStringFilter: boolean = false;\r\n /**\r\n * Callback for extend odata query options for implement user logic\r\n */\r\n beforeRequest:\r\n | ((\r\n options: OdataQueryOptions,\r\n provider: OdataProvider,\r\n request: IGetRowsParams | IServerSideGetRowsRequest\r\n ) => void)\r\n | undefined;\r\n /**\r\n * Callback for pivot or group for aplly column ag-grid settings\r\n * @example\r\n * <pre><code>\r\n * beforeSetSecondaryColumns = secondaryColumns => {\r\n for (let i = 0; i < secondaryColumns.length; i++) {\r\n const col = secondaryColumns[i]\r\n if (col.children) {\r\n beforeSetSecondaryColumns(col.children)\r\n } else {\r\n //Aplly new setting for group dyncamic created column\r\n // col.cellClassRules = \r\n // col.valueFormatter = \r\n }\r\n }\r\n }\r\n * </pre></code>\r\n */\r\n beforeSetSecondaryColumns:\r\n | ((secondaryColDefs: (ColDef | ColGroupDef)[]) => void)\r\n | undefined;\r\n /**\r\n * Callback invoked after load data\r\n * @param options odata provider options\r\n * @param rowData data for ag-grid\r\n * @param totalCount total count records\r\n * \r\n * @example\r\n * <pre><code>\r\n afterLoadData = (options, rowData, totalCount) => {\r\n if (options.skip === 0 && rowData.length > 0) {\r\n gridApi.columnController.autoSizeAllColumns()\r\n }\r\n }\r\n * </code></pre>\r\n */\r\n afterLoadData:\r\n | ((\r\n options: OdataQueryExtendOptions,\r\n rowData: any[],\r\n totalCount: number\r\n ) => void)\r\n | undefined;\r\n /**\r\n * Callback for catch error\r\n */\r\n setError:\r\n | ((error: any, params: IGetRowsParams | IServerSideGetRowsParams) => void)\r\n | undefined;\r\n /**\r\n * List of columns by id/field are case sensitive for build odata query\r\n */\r\n caseSensitiveColumns?: string[];\r\n /**\r\n * Use for specified column custom filter implementation\r\n * <pre><code>\r\n customFilters: {\r\n \"customer\": (colName,col,isCaseSensitiveStringFilter,provider) =>{\r\n return provider.odataOperator.in(\r\n colName,\r\n col.values\r\n )\r\n }\r\n }\r\n */\r\n customFilters?: {\r\n [index: string]: (\r\n colName: string,\r\n col: any,\r\n isCaseSensitiveStringFilter: boolean,\r\n provider: OdataProvider\r\n ) => string;\r\n };\r\n cancelPromice: CancelablePromise;\r\n constructor(options: OdataProviderOptions) {\r\n Object.assign(this, options);\r\n if (this.callApi == null) {\r\n throw new Error('callApi must be specified');\r\n }\r\n if (typeof this.callApi !== 'function') {\r\n throw new Error('callApi must be a function');\r\n }\r\n if (\r\n this.beforeRequest != null &&\r\n typeof this.beforeRequest !== 'function'\r\n ) {\r\n throw new Error('beforeRequest must be a function');\r\n }\r\n if (\r\n this.afterLoadData != null &&\r\n typeof this.afterLoadData !== 'function'\r\n ) {\r\n throw new Error('afterLoadData must be a function');\r\n }\r\n if (this.setError != null && typeof this.setError !== 'function') {\r\n throw new Error('setError must be a function');\r\n }\r\n this.cancelPromice = this.createCancelablePromise();\r\n }\r\n\r\n /**Creator a cancelable Promise */\r\n createCancelablePromise = (): CancelablePromise => {\r\n let cancel: any;\r\n const pr = new Promise((_, reject) => {\r\n cancel = reject;\r\n }).catch(() => {});\r\n return {\r\n promise: pr,\r\n cancel,\r\n };\r\n };\r\n /**Odata query operations */\r\n odataOperator: any = {\r\n // Logical\r\n equals: (col: string, value1: string): string => `${col} eq ${value1}`,\r\n blank: (col: string, value1: string): string => `(${col} eq ${value1} or ${col} eq null)`,\r\n notBlank: (col: string, value1: string): string => `(${col} ne ${value1} and ${col} ne null)`,\r\n blankDate: (col: string, value1: string): string => `${col} eq null`,\r\n notBlankDate: (col: string, value1: string): string => `${col} ne null`,\r\n notEqual: (col: string, value1: string): string => `${col} ne ${value1}`,\r\n lessThan: (col: string, value1: string): string => `${col} lt ${value1}`,\r\n lessThanOrEqual: (col: string, value1: string): string =>\r\n `${col} le ${value1}`,\r\n greaterThan: (col: string, value1: string): string => `${col} gt ${value1}`,\r\n greaterThanOrEqual: (col: string, value1: string): string =>\r\n `${col} ge ${value1}`,\r\n inRange: (col: string, value1: string, value2: any): string =>\r\n `(${col} ge ${value1} and ${col} le ${value2})`,\r\n // String\r\n equalsStr: (\r\n col: string,\r\n value1: string,\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `${this.ifTolowerCol(\r\n col,\r\n isCaseSensitiveStringFilter\r\n )} eq ${this.ifTolower(value1, isCaseSensitiveStringFilter)}`,\r\n notEqualStr: (\r\n col: string,\r\n value1: string,\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `${this.ifTolowerCol(\r\n col,\r\n isCaseSensitiveStringFilter\r\n )} ne ${this.ifTolower(value1, isCaseSensitiveStringFilter)}`,\r\n contains: (\r\n col: string,\r\n value1: string,\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `contains(${this.ifTolowerCol(\r\n col,\r\n isCaseSensitiveStringFilter\r\n )},${this.ifTolower(value1, isCaseSensitiveStringFilter)})`,\r\n notContains: (\r\n col: string,\r\n value1: string,\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `contains(${this.ifTolowerCol(\r\n col,\r\n isCaseSensitiveStringFilter\r\n )},${this.ifTolower(value1, isCaseSensitiveStringFilter)}) eq false`,\r\n startsWith: (\r\n col: string,\r\n value1: string,\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `startswith(${this.ifTolowerCol(\r\n col,\r\n isCaseSensitiveStringFilter\r\n )},${this.ifTolower(value1, isCaseSensitiveStringFilter)}) eq true`,\r\n endsWith: (\r\n col: string,\r\n value1: string,\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `endswith(${this.ifTolowerCol(\r\n col,\r\n isCaseSensitiveStringFilter\r\n )},${this.ifTolower(value1, isCaseSensitiveStringFilter)}) eq true`,\r\n inStr: (\r\n col: string,\r\n values: string[],\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `${this.ifTolowerCol(col, isCaseSensitiveStringFilter)} in (${values\r\n .map(\r\n (x) =>\r\n `'${this.ifTolower(this.encode(x), isCaseSensitiveStringFilter)}'`\r\n )\r\n .join()})`,\r\n in: (col: string, values: string[]) =>\r\n `${col} in (${values.map((x) => `${this.encode(x)}`).join()})`,\r\n notIn: (col: string, values: string[]) =>\r\n `not (${col} in (${values.map((x) => `${x}`).join()}))`,\r\n // Date\r\n trunc: (col: string): string => `date(${col})`,\r\n };\r\n\r\n /**\r\n * Apply tolower for column in odata syntax\r\n * @param col column name\r\n * @param isCaseSensitiveStringFilter need apply tolower\r\n */\r\n ifTolowerCol = (col: string, isCaseSensitiveStringFilter: boolean): string =>\r\n isCaseSensitiveStringFilter ? col : `tolower(${col})`;\r\n\r\n /**\r\n *\r\n * @param value string value\r\n * @param isCaseSensitiveStringFilter need apply tolower\r\n */\r\n ifTolower = (value: string, isCaseSensitiveStringFilter: boolean): string =>\r\n isCaseSensitiveStringFilter ? value : value ? value.toLowerCase() : value;\r\n /**\r\n * Odata aggregation operations\r\n */\r\n odataAggregation: any = {\r\n // Logical\r\n sum: (col: string, asField?: any): string =>\r\n `${col} with sum as ${col || asField}`,\r\n min: (col: string, asField?: any): string =>\r\n `${col} with min as ${col || asField}`,\r\n max: (col: string, asField?: any): string =>\r\n `${col} with max as ${col || asField}`,\r\n avg: (col: string, asField?: any): string =>\r\n `${col} with average as ${col || asField}`,\r\n count: (col: string, asField?: any): string =>\r\n `$count as ${col || asField}`,\r\n };\r\n /**\r\n * Odata query builder\r\n * @param options parameter for odata query\r\n */\r\n toQuery = (options: OdataQueryExtendFull): string => {\r\n let path: string[] = [];\r\n if (options) {\r\n path.push('$count=true');\r\n }\r\n if (options.skip) {\r\n path.push(`$skip=${options.skip}`);\r\n }\r\n if (options.top) {\r\n path.push(`$top=${options.top}`);\r\n }\r\n if (options.sort && options.sort.length > 0) {\r\n path.push('$orderby=' + options.sort.join(','));\r\n }\r\n if (options.filter && options.filter.length > 0) {\r\n path.push('$filter=' + options.filter.join(' and '));\r\n }\r\n if (options.apply && options.apply.length > 0) {\r\n path.push('$apply=' + options.apply.join('/'));\r\n }\r\n if (options.expand && options.expand.length > 0) {\r\n path.push('$expand=' + options.expand.join(','));\r\n }\r\n if (options.select && options.select.length > 0) {\r\n path.push('$select=' + options.select.join(','));\r\n }\r\n let query: string = '';\r\n if (path.length > 0) {\r\n var defaultFilters = path.filter((x: any) => {\r\n if (\r\n x.indexOf('$count') >= 0 ||\r\n x.indexOf('$top') >= 0 ||\r\n x.indexOf('$orderby') >= 0 ||\r\n x.indexOf('$apply') >= 0 ||\r\n x.indexOf('$expand') >= 0 ||\r\n x.indexOf('$select') >= 0\r\n ) {\r\n return x;\r\n }\r\n });\r\n if (defaultFilters && defaultFilters.length > 0) {\r\n query = '?' + defaultFilters.join('&');\r\n }\r\n var customFilters = path.filter(function (obj) {\r\n return defaultFilters.indexOf(obj) == -1;\r\n });\r\n if (customFilters && customFilters.length > 0) {\r\n if (customFilters.length == 1) query = query + '&' + customFilters;\r\n else query = query + '&' + customFilters.join('and');\r\n }\r\n }\r\n query = query.replace('and$filter=', '&$filter=');\r\n return query;\r\n };\r\n /**\r\n * Add quotes for string value\r\n * @param value string value\r\n */\r\n encode = (value: string): string =>\r\n this.isStrVal(value) ? replaceAll(value, \"'\", \"''\") : value;\r\n /**\r\n * Conctat to date a time for create datetime format for odata query\r\n * @param value date string\r\n */\r\n toDateTime = (value: string): string | null => {\r\n const dt = new Date(value);\r\n if (isNaN(dt.getTime())) return null;\r\n const dt1 = new Date(\r\n Date.UTC(dt.getFullYear(), dt.getMonth(), dt.getDate())\r\n );\r\n return dt1.toISOString().split('T')[0]; //dt1.toISOString();\r\n };\r\n /**\r\n *\r\n * @param colName columnName\r\n * @returns is CaseSensitive for column\r\n */\r\n private getIsNeedCaseSensitive = (colName: string) => {\r\n if (\r\n !this.isCaseSensitiveStringFilter &&\r\n this.caseSensitiveColumns &&\r\n this.caseSensitiveColumns.length > 0\r\n ) {\r\n return this.caseSensitiveColumns.indexOf(colName) >= 0;\r\n }\r\n return this.isCaseSensitiveStringFilter;\r\n };\r\n /**\r\n * Convert ag-grid column filter to odata query\r\n * @param colName columnName\r\n * @param col ag-grid column\r\n */\r\n private getFilterOdata = (colName: string, col: any): string => {\r\n const me = this;\r\n const isCaseSensitiveStringFilter = me.getIsNeedCaseSensitive(colName);\r\n const customFilter = me.customFilters && me.customFilters[colName];\r\n colName = replaceAll(colName, '.', '/');\r\n colName = me.getWrapColumnName(colName);\r\n if (customFilter) {\r\n return customFilter(colName, col, isCaseSensitiveStringFilter, me);\r\n } else {\r\n switch (col.filterType) {\r\n case 'number':\r\n return me.odataOperator[col.type](colName, col.filter, col.filterTo);\r\n case 'text': {\r\n let operatorName = col.type;\r\n const filter = me.encode(col.filter) || '';\r\n // let filterTo = me.encode(col.filterTo);\r\n if (\r\n (operatorName === 'equals' || operatorName === 'notEqual') &&\r\n !isCaseSensitiveStringFilter\r\n ) {\r\n operatorName += 'Str';\r\n }\r\n return me.odataOperator[operatorName](\r\n colName,\r\n `'${filter}'`,\r\n isCaseSensitiveStringFilter\r\n );\r\n }\r\n case 'date':\r\n if(col.type == \"blank\"){\r\n return me.odataOperator[\"blankDate\"](colName, col.filter, col.filterTo);\r\n }\r\n else if(col.type == \"notBlank\"){\r\n return me.odataOperator[\"notBlankDate\"](colName, col.filter, col.filterTo);\r\n }\r\n else if (\r\n col.dateFrom != null &&\r\n me.toDateTime(col.dateFrom) != null &&\r\n (col.dateTo == null ||\r\n (col.dateTo != null && me.toDateTime(col.dateTo) != null))\r\n ) {\r\n return me.odataOperator[col.type](\r\n colName,\r\n `${me.toDateTime(col.dateFrom)}`,\r\n `${me.toDateTime(col.dateTo)}`\r\n );\r\n }\r\n break;\r\n case 'set': {\r\n if (!col.values || col.values.length === 0) {\r\n return '';\r\n }\r\n // Fill-cell / set-filter columns are always equality-matched against\r\n // a fixed list of backend-provided values, so the casing on both\r\n // sides is already known to match. Skip the tolower() wrap that the\r\n // generic string operators apply — wrapping the column in tolower()\r\n // forces a full scan because LOWER(col) cannot use any index, and\r\n // SQL Server's default collation is already case-insensitive.\r\n // Resulting predicate: `col eq 'Value'` (single) or\r\n // `(col eq 'V1' or col eq 'V2')` (multi).\r\n const equalsClauses = col.values.map((v: string) =>\r\n me.odataOperator.equals(colName, `'${me.encode(v)}'`)\r\n );\r\n return equalsClauses.length === 1\r\n ? equalsClauses[0]\r\n : `(${equalsClauses.join(' or ')})`;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n return '';\r\n };\r\n\r\n /**\r\n * Extract value from record by path to field\r\n * @param field path to column value\r\n * @param obj record\r\n */\r\n private getValue(field: string, obj: any): any {\r\n const paths = field.split('.');\r\n if (paths.length === 1) {\r\n return obj[field];\r\n } else {\r\n return paths.reduce((object, path) => {\r\n return (object || {})[path]; // Oliver Steele's pattern\r\n }, obj);\r\n }\r\n }\r\n\r\n /**\r\n * Caclulate pivot data for ag-grid from odata\r\n * @param pivotCols pivot columns\r\n * @param rowGroupCols row group columns\r\n * @param valueCols value columns\r\n * @param data odata result\r\n * @param countField count field name\r\n */\r\n private getPivot = (\r\n pivotCols: ColumnVO[],\r\n rowGroupCols: ColumnVO[],\r\n valueCols: ColumnVO[],\r\n data: any[],\r\n countField: string\r\n ): PivotResultDat => {\r\n // assume 1 pivot col and 1 value col for this example\r\n const me = this;\r\n const pivotData: any[] = [];\r\n const aggColsList: any[] = [];\r\n\r\n const colKeyExistsMap: any = {};\r\n\r\n const secondaryColDefs: any[] = [];\r\n const secondaryColDefsMap: any = {};\r\n\r\n data.forEach(function (item) {\r\n var pivotValues: string[] = [];\r\n pivotCols.forEach(function (pivotCol) {\r\n var pivotField = pivotCol.id;\r\n var pivotValue = me.getValue(pivotField, item);\r\n if (\r\n pivotValue !== null &&\r\n pivotValue !== undefined &&\r\n pivotValue.toString\r\n ) {\r\n pivotValues.push(pivotValue.toString());\r\n } else {\r\n pivotValues.push('-');\r\n }\r\n });\r\n\r\n // var pivotValue = item[pivotField].toString();\r\n var pivotItem: any = {};\r\n\r\n valueCols.forEach(function (valueCol) {\r\n var valField = valueCol.id;\r\n var colKey = createColKey(pivotValues, valField);\r\n\r\n var value = me.getValue(valField, item);\r\n pivotItem[colKey] = value;\r\n\r\n if (!colKeyExistsMap[colKey]) {\r\n addNewAggCol(colKey, valueCol);\r\n addNewSecondaryColDef(colKey, pivotValues, valueCol);\r\n colKeyExistsMap[colKey] = true;\r\n }\r\n });\r\n if (countField) {\r\n pivotItem[countField] = me.getValue(countField, item);\r\n }\r\n\r\n rowGroupCols.forEach(function (rowGroupCol) {\r\n var rowGroupField = rowGroupCol.id.split('.')[0];\r\n pivotItem[rowGroupField] = item[rowGroupField];\r\n });\r\n\r\n pivotData.push(pivotItem);\r\n });\r\n\r\n function addNewAggCol(colKey: string, valueCol: ColumnVO): void {\r\n var newCol = {\r\n id: colKey,\r\n field: colKey,\r\n aggFunc: valueCol.aggFunc,\r\n };\r\n aggColsList.push(newCol);\r\n }\r\n\r\n function addNewSecondaryColDef(\r\n colKey: any,\r\n pivotValues: any,\r\n valueCol: any\r\n ) {\r\n var parentGroup: any = null;\r\n\r\n var keyParts: any = [];\r\n\r\n pivotValues.forEach(function (pivotValue: any) {\r\n keyParts.push(pivotValue);\r\n var colKey = createColKey(keyParts);\r\n var groupColDef: any = secondaryColDefsMap[colKey];\r\n if (!groupColDef) {\r\n groupColDef = {\r\n groupId: colKey,\r\n headerName: pivotValue,\r\n children: [],\r\n };\r\n secondaryColDefsMap[colKey] = groupColDef;\r\n if (parentGroup) {\r\n parentGroup.children.push(groupColDef);\r\n } else {\r\n secondaryColDefs.push(groupColDef);\r\n }\r\n }\r\n parentGroup = groupColDef;\r\n });\r\n\r\n parentGroup.children.push({\r\n colId: colKey,\r\n headerName: valueCol.aggFunc + '(' + valueCol.displayName + ')',\r\n field: colKey,\r\n suppressMenu: true,\r\n sortable: false,\r\n });\r\n }\r\n\r\n function createColKey(pivotValues: string[], valueField?: string): string {\r\n var result = pivotValues.join('|');\r\n if (valueField !== undefined) {\r\n result += '|' + valueField;\r\n }\r\n result = replaceAll(result, '.', '*');\r\n return result;\r\n }\r\n\r\n return {\r\n data: pivotData,\r\n aggCols: aggColsList,\r\n secondaryColDefs: secondaryColDefs,\r\n };\r\n };\r\n\r\n /**\r\n *\r\n * @param rowData array odata result\r\n * @param rowGroupCols row group columns\r\n * @param groupKeys what groups the user is viewing\r\n * @param countField count field name\r\n */\r\n private buildGroupsFromData = (\r\n rowData: any[],\r\n rowGroupCols: ColumnVO[],\r\n groupKeys: string[],\r\n countField: string\r\n ): any[] => {\r\n const me = this;\r\n let rowGroupCol = rowGroupCols[groupKeys.length];\r\n let field = rowGroupCol.id;\r\n let mappedRowData = me.groupBy(rowData, field);\r\n let groups: any = [];\r\n\r\n me.iterateObject(mappedRowData, function (key, rowData) {\r\n var groupItem = me.aggregateList(rowData, countField);\r\n groupItem[field] = key;\r\n groups.push(groupItem);\r\n });\r\n return groups;\r\n };\r\n\r\n /**\r\n * Internal function for execute callback function for each property of object\r\n * @param object object contained odata grouped result\r\n * @param callback function do somthing\r\n */\r\n private iterateObject = (\r\n object: any,\r\n callback: (key: string, rowData: any[]) => void\r\n ): void => {\r\n if (!object) {\r\n return;\r\n }\r\n const keys = Object.keys(object);\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n const value = object[key];\r\n callback(key, value);\r\n }\r\n };\r\n\r\n /**\r\n * Prepeare grouped data\r\n * @param rowData array odata result\r\n * @param field grouping field\r\n */\r\n private groupBy = (rowData: any[], field: string): any => {\r\n var result: any = {};\r\n const me = this;\r\n rowData.forEach(function (item) {\r\n var key = me.getValue(field, item);\r\n var listForThisKey = result[key];\r\n if (!listForThisKey) {\r\n listForThisKey = [];\r\n result[key] = listForThisKey;\r\n }\r\n listForThisKey.push(item);\r\n });\r\n return result;\r\n };\r\n\r\n /**\r\n * Calculate total count records in group\r\n * @param rowData array odata result data\r\n * @param countField field contained count of all records\r\n */\r\n private aggregateList = (rowData: any[], countField: string): any => {\r\n var result: any = {};\r\n rowData.forEach((row) => {\r\n if (countField && row[countField] != null) {\r\n const totalCount = (result[countField] || 0) + (row[countField] || 0);\r\n delete row[countField];\r\n result[countField] = totalCount;\r\n }\r\n result = Object.assign(result, row);\r\n });\r\n return result;\r\n };\r\n\r\n /**\r\n * Calculate distinct values for input field from Odata api\r\n * @param field The field of the row to get the cells data from \r\n * @param callback The function for return distinct values for input field\r\n * @param beforeRequest The function for customize request\r\n * @example \r\n * <pre><code>\r\n * const setFilterValuesFuncParams = params => {\r\n * const me = this\r\n * const col = params.colDef.field\r\n * const storeName = me.getStoreName(col)\r\n * const callback = data => {\r\n * if (data) {\r\n * me.setState({ [storeName]: data })\r\n * params.success(data)\r\n * }\r\n * }\r\n * odataProviderInstance.getFilterValuesParams(params.colDef.field, callback)\r\n * }\r\n * \r\n * ///....\r\n * <AgGridColumn\r\n field=\"product\"\r\n headerName={'PRODUCT'}\r\n filter=\"agSetColumnFilter\"\r\n // rowGroup\r\n // enablePivot\r\n enableRowGroup\r\n filterParams={{\r\n values: setFilterValuesFuncParams,\r\n newRowsAction: 'keep'\r\n }}\r\n // filterParams={{caseSensitive: true}}\r\n />\r\n * </code></pre>\r\n */\r\n getFilterValuesParams = (\r\n field: string,\r\n callback: (data: any[]) => void,\r\n beforeRequest: (options: OdataQueryExtendFull) => void | undefined\r\n ): void => {\r\n const me = this;\r\n const options: OdataQueryExtendFull = {\r\n apply: [`groupby((${me.getWrapColumnName(field)}))`],\r\n };\r\n if (beforeRequest) {\r\n beforeRequest(options);\r\n }\r\n // OData wraps nested fields with '/' (e.g. parent/child); the response\r\n // mirrors that shape, so we walk the path instead of using the raw key.\r\n // We also fall back to a case-insensitive lookup because some OData\r\n // services return PascalCase property names regardless of the request\r\n // casing (e.g. asked for `dacStatus`, response is `DacStatus`).\r\n const readField = (row: any): any => {\r\n if (row == null) return undefined;\r\n if (Object.prototype.hasOwnProperty.call(row, field)) return row[field];\r\n const segments = String(field).split('.');\r\n let current: any = row;\r\n for (const seg of segments) {\r\n if (current == null) return undefined;\r\n if (Object.prototype.hasOwnProperty.call(current, seg)) {\r\n current = current[seg];\r\n continue;\r\n }\r\n // Case-insensitive key match as a last resort.\r\n const lower = seg.toLowerCase();\r\n const match = Object.keys(current).find(k => k.toLowerCase() === lower);\r\n if (!match) return undefined;\r\n current = current[match];\r\n }\r\n return current;\r\n };\r\n me.callApi(me.toQuery(options))\r\n .then((x) => {\r\n const values = x ? me.getOdataResult(x) || [] : [];\r\n const mapped = values.map((y: any) => readField(y));\r\n console.log(\r\n '[OdataProvider] getFilterValuesParams response for',\r\n field,\r\n '— rows:', values.length,\r\n '— sample keys:', values[0] ? Object.keys(values[0]) : '(none)',\r\n '— mapped sample:', mapped.slice(0, 5)\r\n );\r\n // Helpful diagnostic when the response shape doesn't match the field.\r\n if (values.length > 0 && mapped.every((v: any) => v === undefined)) {\r\n console.warn(\r\n '[OdataProvider] getFilterValuesParams: response had',\r\n values.length,\r\n 'rows but none contained field',\r\n field,\r\n '— sample row keys:',\r\n Object.keys(values[0] || {})\r\n );\r\n }\r\n callback(mapped);\r\n })\r\n .catch((err) => {\r\n console.error('[OdataProvider] getFilterValuesParams failed for field', field, err);\r\n // Always invoke the callback so AG Grid's set filter doesn't hang.\r\n callback([]);\r\n });\r\n };\r\n /**\r\n * Detect is string value\r\n * @param value\r\n */\r\n isStrVal = (value: any): boolean => typeof value === 'string';\r\n /**\r\n * Extartc values from odata response\r\n * @param response\r\n */\r\n private getOdataResult = (response: any): any =>\r\n Array.isArray(response) ? response : response.value;\r\n /**\r\n * Endocing column name to odata notation\r\n * @param colName column name\r\n */\r\n private getWrapColumnName = (colName: string | undefined): string =>\r\n colName ? replaceAll(colName, '.', '/') : '';\r\n /**\r\n * grid calls this to get rows for IServerSideDatasource\r\n * @param params ag-grid details for the request\r\n */\r\n /**\r\n * grid calls this to get rows implement\r\n * @param params ag-grid details for the request\r\n */\r\n public getRows(params: IGetRowsParams | IServerSideGetRowsParams): void {\r\n const me = this;\r\n const childCount = me.groupCountFieldName;\r\n const isServerMode = 'request' in params;\r\n const request = isServerMode\r\n ? (params as IServerSideGetRowsParams).request\r\n : (params as IGetRowsParams);\r\n const requestSrv = request as IServerSideGetRowsRequest;\r\n\r\n const pivotActive = !isServerMode\r\n ? false\r\n : requestSrv.pivotMode &&\r\n requestSrv.pivotCols.length > 0 &&\r\n requestSrv.valueCols.length > 0;\r\n\r\n if (!pivotActive) {\r\n let fn = (params as any).columnApi.setPivotResultColumns;\r\n if (fn != null) {\r\n // if ((params as any).columnApi.isPivotMode()) {\r\n (params as any).columnApi.setPivotResultColumns([]);\r\n // }\r\n } else {\r\n (params as any).columnApi.setSecondaryColumns([]);\r\n }\r\n }\r\n const options = me.getOdataOptions(params);\r\n const query = me.toQuery(options);\r\n if (\r\n options.skip === 0 &&\r\n (!isServerMode ||\r\n (isServerMode &&\r\n (params as IServerSideGetRowsParams).parentNode.level === -1))\r\n ) {\r\n me.cancelPromice.cancel();\r\n me.cancelPromice = me.createCancelablePromise();\r\n }\r\n Promise.race([me.cancelPromice.promise, me.callApi(query)]).then(\r\n async (x) => {\r\n if (!x) {\r\n // params.failCallback();\r\n return;\r\n } else {\r\n const values = me.getOdataResult(x);\r\n if (!pivotActive) {\r\n if (!options.apply) {\r\n me.setResult(\r\n params,\r\n isServerMode,\r\n values,\r\n x['@odata.count'] || x[0]?.totalCount\r\n );\r\n if (this.afterLoadData) {\r\n this.afterLoadData(\r\n options,\r\n values,\r\n x['@odata.count'] || x[0]?.totalCount\r\n );\r\n }\r\n } else {\r\n let count = values.length;\r\n if (count === options.top && options.skip === 0) {\r\n // If received grouped count of value large than requested then request total count of values\r\n me.callApi(query + '/aggregate($count as count)').then((y) => {\r\n count = me.getOdataResult(y)[0].count;\r\n me.setResult(params, isServerMode, values, count);\r\n });\r\n } else {\r\n if (options.skip != null && options.skip > 0) {\r\n count = null;\r\n }\r\n me.setResult(params, isServerMode, values, count);\r\n if (this.afterLoadData) {\r\n this.afterLoadData(options, values, count);\r\n }\r\n }\r\n }\r\n } else {\r\n let rowData = me.getOdataResult(x);\r\n // Check count\r\n if (\r\n rowData.length === options.top &&\r\n options.skip === 0 &&\r\n requestSrv.groupKeys.length === 0\r\n ) {\r\n let eof = false;\r\n while (!eof) {\r\n options.skip += options.top || 0;\r\n const subQuery = me.toQuery(options);\r\n const newRowData = await me.callApi(subQuery);\r\n if (!newRowData) {\r\n //params.failCallback();\r\n return;\r\n }\r\n eof = newRowData.length !== options.top;\r\n rowData = rowData.concat(newRowData);\r\n }\r\n }\r\n const pivotResult = me.getPivot(\r\n requestSrv.pivotCols,\r\n requestSrv.rowGroupCols,\r\n requestSrv.valueCols,\r\n rowData,\r\n childCount\r\n );\r\n rowData = pivotResult.data;\r\n const secondaryColDefs = pivotResult.secondaryColDefs;\r\n rowData = me.buildGroupsFromData(\r\n rowData,\r\n requestSrv.rowGroupCols,\r\n requestSrv.groupKeys,\r\n childCount\r\n );\r\n const totalCount =\r\n requestSrv.groupKeys.length === 0\r\n ? rowData.length\r\n : rowData.length === options.top\r\n ? null\r\n : rowData.length;\r\n // if (totalCount > (options.top || 0)) {\r\n // const serverSideBlock = (params as any).parentNode.rowModel\r\n // .rowNodeBlockLoader.blocks[0];\r\n // serverSideBlock.rowNodeCacheParams.blockSize = totalCount;\r\n // serverSideBlock.endRow = serverSideBlock.startRow + totalCount;\r\n // serverSideBlock.createRowNodes();\r\n // }\r\n me.setResult(params, isServerMode, rowData, totalCount);\r\n if (this.afterLoadData) {\r\n this.afterLoadData(options, rowData, totalCount);\r\n }\r\n if (requestSrv.groupKeys.length === 0) {\r\n if (this.beforeSetSecondaryColumns) {\r\n this.beforeSetSecondaryColumns(secondaryColDefs);\r\n }\r\n let fn = (params as any).columnApi.setPivotResultColumns;\r\n if (fn) {\r\n (params as any).columnApi.setPivotResultColumns(\r\n secondaryColDefs\r\n );\r\n } else {\r\n (params as any).columnApi.setSecondaryColumns(secondaryColDefs);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n (err) => {\r\n me.setResult(params, isServerMode, [], 0);\r\n if (this.setError) {\r\n this.setError(err, params);\r\n }\r\n }\r\n );\r\n }\r\n /**\r\n * Set result\r\n * @param params ag-grid details for the request\r\n * @param isServerMode detect type of params\r\n * @param rowsThisBlock data of the request\r\n * @param rowCount count of total result\r\n */\r\n private setResult = (\r\n params: IGetRowsParams | IServerSideGetRowsParams,\r\n isServerMode: boolean,\r\n rowsThisBlock: any[],\r\n rowCount?: number\r\n ): void => {\r\n if (isServerMode) {\r\n (params as IServerSideGetRowsParams).success({\r\n rowData: rowsThisBlock,\r\n rowCount: rowCount,\r\n });\r\n } else {\r\n (params as IGetRowsParams).successCallback(rowsThisBlock, rowCount);\r\n }\r\n };\r\n /**\r\n * Generate odata options for build query from ag-grid request\r\n * @param params ag-grid details for the request\r\n */\r\n getOdataOptions = (\r\n params: IGetRowsParams | IServerSideGetRowsParams\r\n ): OdataQueryExtendFull => {\r\n const me = this;\r\n const options: OdataQueryExtendFull = {};\r\n const isServerMode = 'request' in params;\r\n const request = isServerMode\r\n ? (params as IServerSideGetRowsParams).request\r\n : (params as IGetRowsParams);\r\n const childCount = me.groupCountFieldName;\r\n if (this.beforeRequest) {\r\n this.beforeRequest(options, this, request);\r\n }\r\n if (request.sortModel.length > 0) {\r\n const sort = options.sort || [];\r\n for (let i = 0; i < request.sortModel.length; i++) {\r\n const col = request.sortModel[i];\r\n let colName = me.getWrapColumnName(col.colId);\r\n if (col.sort !== 'asc') {\r\n colName += ' desc';\r\n }\r\n sort.push(colName);\r\n }\r\n options.sort = sort;\r\n }\r\n\r\n const filter = options.filter || [];\r\n for (const colName in request.filterModel) {\r\n if (request.filterModel.hasOwnProperty(colName)) {\r\n const col = request.filterModel[colName];\r\n let colFilter = '';\r\n if (!col.operator) {\r\n colFilter = me.getFilterOdata(colName, col);\r\n if (colFilter) {\r\n filter.push(colFilter);\r\n }\r\n } else {\r\n const condition1 = me.getFilterOdata(colName, col.condition1);\r\n const condition2 = me.getFilterOdata(colName, col.condition2);\r\n if (condition1 && condition2) {\r\n colFilter = `(${condition1} ${col.operator.toLowerCase()} ${condition2})`;\r\n filter.push(colFilter);\r\n }\r\n }\r\n }\r\n }\r\n\r\n let pivotActive = false;\r\n\r\n const apply = options.apply || [];\r\n if (isServerMode) {\r\n const requestSrv = request as IServerSideGetRowsRequest;\r\n pivotActive =\r\n requestSrv.pivotMode &&\r\n requestSrv.pivotCols.length > 0 &&\r\n requestSrv.valueCols.length > 0;\r\n if (requestSrv.rowGroupCols.length > 0) {\r\n const filterGroupBy: string[] = [];\r\n if (requestSrv.groupKeys.length < requestSrv.rowGroupCols.length) {\r\n // If request only groups\r\n for (let idx = 0; idx < requestSrv.groupKeys.length; idx++) {\r\n const colValue = requestSrv.groupKeys[idx];\r\n const condition = `${me.getWrapColumnName(\r\n requestSrv.rowGroupCols[idx].field\r\n )} eq ${\r\n (me.isStrVal(colValue) ? \"'\" : '') +\r\n me.encode(colValue) +\r\n (me.isStrVal(colValue) ? \"'\" : '')\r\n }`;\r\n filterGroupBy.push(condition);\r\n }\r\n if (filterGroupBy.length > 0 || filter.length > 0) {\r\n // Filters must by first\r\n apply.push(`filter(${filterGroupBy.concat(filter).join(' and ')})`);\r\n }\r\n\r\n const aggregate: string[] = [];\r\n if (childCount) {\r\n aggregate.push(me.odataAggregation.count(childCount));\r\n }\r\n if (requestSrv.valueCols.length > 0) {\r\n for (let idx = 0; idx < requestSrv.valueCols.length; idx++) {\r\n const colValue = requestSrv.valueCols[idx];\r\n colValue.aggFunc &&\r\n aggregate.push(\r\n me.odataAggregation[colValue.aggFunc](\r\n me.getWrapColumnName(colValue.field)\r\n )\r\n );\r\n }\r\n }\r\n let groups = [\r\n me.getWrapColumnName(\r\n requestSrv.rowGroupCols[requestSrv.groupKeys.length].field\r\n ),\r\n ];\r\n const sort = options.sort || [];\r\n const sortColOnly = sort.map((x) => x.split(' ')[0]);\r\n if (pivotActive) {\r\n groups = groups.concat(\r\n requestSrv.pivotCols.map((x) => me.getWrapColumnName(x.field))\r\n );\r\n groups.forEach((x) => {\r\n if (sortColOnly.indexOf(x) < 0) {\r\n sort.push(x);\r\n }\r\n });\r\n }\r\n options.sort = sort;\r\n apply.push(\r\n `groupby((${groups.join(',')})${\r\n aggregate.length > 0 ? `,aggregate(${aggregate.join(',')})` : ''\r\n })`\r\n );\r\n\r\n options.apply = apply;\r\n if (options.sort && options.sort.length > 0) {\r\n options.sort = options.sort.filter(\r\n (x) => groups.indexOf(x.split(' ')[0]) >= 0\r\n );\r\n }\r\n // delete options.sort;\r\n } else {\r\n // If request rowData by group filter\r\n for (let idx = 0; idx < requestSrv.groupKeys.length; idx++) {\r\n const colValue = requestSrv.groupKeys[idx];\r\n const condition = `${me.getWrapColumnName(\r\n requestSrv.rowGroupCols[idx].field\r\n )} eq ${\r\n (me.isStrVal(colValue) ? \"'\" : '') +\r\n me.encode(colValue) +\r\n (me.isStrVal(colValue) ? \"'\" : '')\r\n }`;\r\n filter.push(condition);\r\n }\r\n }\r\n }\r\n }\r\n if (filter.length > 0) {\r\n options.filter = filter;\r\n }\r\n if (apply.length > 0) {\r\n options.apply = apply;\r\n delete options.filter;\r\n delete options.expand;\r\n delete options.select;\r\n // options.sort = null;\r\n }\r\n options.skip = request.startRow;\r\n options.top = (request.endRow || 0) - (request.startRow || 0);\r\n\r\n if (!options.apply && options.skip === 0) {\r\n options.count = true;\r\n }\r\n return options;\r\n };\r\n /**\r\n * Generate odata query from ag-grid request\r\n * @param params ag-grid details for the request\r\n */\r\n getOdataQuery = (params: IGetRowsParams | IServerSideGetRowsParams): string =>\r\n this.toQuery(this.getOdataOptions(params));\r\n}\r\n\r\nexport class OdataProviderClient extends OdataProvider {\r\n public override getRows(params: IServerSideGetRowsParams) {\r\n super.getRows(params);\r\n }\r\n}\r\nexport class OdataServerSideProvider extends OdataProvider {\r\n public override getRows(params: IServerSideGetRowsParams): void {\r\n super.getRows(params);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\r\n\r\n@Component({\r\n selector: 'lib-button-renderer',\r\n template: `\r\n <button class=\"btn-actions\" type=\"button\" (click)=\"onClick($event)\" (mousedown)=\"onMouseDown($event)\" [attr.data-title]=\"params.tooltip\">\r\n @if (icon && !label) {\r\n <span> <i class=\"{{ icon }}\"></i> </span>\r\n }\r\n @if (!icon && label) {\r\n <span>{{ label }}</span>\r\n }\r\n @if (icon && label) {\r\n <span><i class=\"{{ icon }}\"></i> {{ label }}</span>\r\n }\r\n </button>\r\n `,\r\n standalone: false\r\n})\r\nexport class ButtonRendererComponent implements ICellRendererAngularComp {\r\n params: any;\r\n label: any;\r\n icon: any;\r\n\r\n agInit(params: any): void {\r\n this.params = params;\r\n this.label = this.params.label || null;\r\n this.icon = this.params.icon;\r\n }\r\n\r\n refresh(params?: any): boolean {\r\n return false;\r\n }\r\n\r\n onClick($event: any) {\r\n $event.stopPropagation();\r\n if (this.params.onClick instanceof Function) {\r\n // put anything into params u want pass into parents component\r\n const params = {\r\n event: $event,\r\n rowData: Object.assign({}, this.params.node.data, {\r\n buttonName: this.params.buttonName,\r\n buttonText: this.params.label,\r\n buttonIcon: this.params.icon,\r\n }),\r\n };\r\n this.params.onClick(params);\r\n }\r\n }\r\n onMouseDown($event: any) {\r\n $event.stopPropagation();\r\n }\r\n}\r\n","import { DatePipe } from '@angular/common';\r\nimport { Component } from '@angular/core';\r\nimport { ITooltipAngularComp } from 'ag-grid-angular';\r\nimport { ITooltipParams } from 'ag-grid-community';\r\n\r\n@Component({\r\n selector: 'tooltip-component',\r\n template: ` <div class=\"custom-tooltip\">\r\n <p>\r\n <span>{{ params.value }}</span>\r\n </p>\r\n </div>`,\r\n standalone: false\r\n})\r\nexport class CustomTooltip implements ITooltipAngularComp {\r\n constructor(private datePipe: DatePipe) {}\r\n public params!: { color: string } & ITooltipParams;\r\n agInit(params: { color: string } & ITooltipParams): void {\r\n this.params = params;\r\n params.value = params.valueFormatted;\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\r\n\r\n@Component({\r\n selector: 'lib-dropdown-renderer',\r\n template: `\r\n <div class=\"dropdown\">\r\n <button type=\"button\" class=\"btn btn-white\" data-toggle=\"dropdown\">\r\n <i class=\"fa fa-ellipsis-v\"></i>\r\n </button>\r\n <div class=\"dropdown-menu\">\r\n <!-- gridId == 15 -->\r\n @if (isGrid15) {\r\n @for (data of dropDownData; track data; let i = $index) {\r\n @if (i !== 4) {\r\n <a\r\n class=\"dropdown-item\"\r\n [href]=\"getUrl(i)\"\r\n (click)=\"onClick($event, i)\"\r\n [innerHTML]=\"data\"\r\n target=\"_self\"></a>\r\n }\r\n @if (i == 4) {\r\n <span\r\n class=\"dropdown-item\"\r\n (click)=\"onClick($event, i)\"\r\n [innerHTML]=\"data\"></span>\r\n }\r\n }\r\n } @else {\r\n @for (data of dropDownData; track data) {\r\n <span\r\n class=\"dropdown-item\"\r\n (click)=\"onClick($event)\"\r\n [innerHTML]=\"data\"></span>\r\n }\r\n }\r\n <!-- gridId != 15 -->\r\n </div>\r\n </div>\r\n `,\r\n standalone: false\r\n})\r\nexport class DropdownRenderer implements ICellRendererAngularComp {\r\n params: any;\r\n dropDownData: any;\r\n isGrid15: boolean = false; //Only changing renderer for home grid\r\n\r\n agInit(params: any): void {\r\n this.params = params;\r\n this.dropDownData = this.params.dropDownData ? this.params.dropDownData.split(',') : [];\r\n this.isGrid15 = this.params.dropDownData.toLowerCase().includes('create/view dac');\r\n }\r\n\r\n refresh(params?: any): boolean {\r\n return false;\r\n }\r\n\r\n onClick($event: any, index?: number) {\r\n if (this.isGrid15) {\r\n const toolId = this.params.node.data.toolId;\r\n const urls = [\r\n `/home/tool/details/${toolId}/tracker`,\r\n `/home/details/${toolId}`,\r\n `/home/lss/details/${toolId}`,\r\n `/home/tool/details/${toolId}/dac`\r\n ];\r\n\r\n if (\r\n ($event.ctrlKey || $event.metaKey) &&\r\n typeof index === 'number' &&\r\n urls[index] &&\r\n index != 4\r\n ) {\r\n $event.preventDefault();\r\n window.open(urls[index], '_blank');\r\n $event.stopPropagation();\r\n return;\r\n }\r\n }\r\n if (this.params.onClick instanceof Function) {\r\n const params = {\r\n event: $event,\r\n rowData: Object.assign({}, this.params.node.data, {\r\n buttonName: $event.target.innerText,\r\n }),\r\n };\r\n this.params.onClick(params);\r\n }\r\n }\r\n\r\n getUrl(index: number): string {\r\n const toolId = this.params?.node?.data?.toolId;\r\n const urls = [\r\n `/home/tool/details/${toolId}/tracker`,\r\n `/home/details/${toolId}`,\r\n `/home/lss/details/${toolId}`,\r\n `/home/tool/details/${toolId}/dac`\r\n ];\r\n return urls[index] || '#';\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\r\n\r\n@Component({\r\n selector: 'app-cell-data',\r\n template: `\r\n<span>\r\n {{ params.value }}\r\n</span>\r\n `,\r\n standalone: false\r\n})\r\nexport class CellRendererComponent implements ICellRendererAngularComp {\r\n params: any;\r\n agInit(params: any): void {\r\n this.params = params;\r\n }\r\n refresh(params?: any): boolean {\r\n return false;\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\r\n\r\n@Component({\r\n selector: 'app-fill-cell-data',\r\n template: `\r\n@if (params.value && params.field === 'dacStatus') {\r\n <span #dacIndicator class=\"status-fill-cell text-white\" [ngStyle]=\"{'background': rowData.dacIndicator? rowData.dacIndicator : '#fff', 'width':'178px'}\" >\r\n {{ params.value }}\r\n </span>\r\n}\r\n@if (params.value && params.field === 'completionStatus') {\r\n <span #pocIndicator class=\"status-fill-cell text-white\" [ngStyle]=\"{'background': rowData.pocIndicator? rowData.pocIndicator:'#fff', 'width':'95px'}\" >\r\n {{ params.value }}\r\n </span>\r\n}\r\n@if (params.value && params.field === 'funding') {\r\n <span #fundingIndicator class=\"status-fill-cell text-white\" [ngStyle]=\"{'background': rowData.fundingIndicator? rowData.fundingIndicator:'#fff', 'width':'108px'}\">\r\n {{ params.value }}\r\n </span>\r\n}\r\n@if (params.value && params.field === 'layout') {\r\n <span #layoutIndicator class=\"status-fill-cell text-white\" [ngStyle]=\"{'background': rowData.layoutIndicator? rowData.layoutIndicator:'#fff', 'width':'104px'}\">\r\n {{ params.value }}\r\n </span>\r\n}\r\n@if (params.value && params.field === 'facilityName') {\r\n <span #facilityIndicator class=\"info-fill-cell text-white\" [ngStyle]=\"{'background': 'var(--primary)'}\" >\r\n {{ params.value }}\r\n </span>\r\n}\r\n@if (params.value && params.field === 'aefirm') {\r\n <span #aeIndicator class=\"info-fill-cell text-black\" [ngStyle]=\"{'background': 'var(--gray-6)'}\" >\r\n {{ params.value }}\r\n </span>\r\n}\r\n@if (!params.value) {\r\n <span>{{params.value}}</span>\r\n}\r\n`,\r\n standalone: false\r\n})\r\nexport class FillCellRendererComponent implements ICellRendererAngularComp {\r\n params: any;\r\n rowData: any;\r\n agInit(params: any): void {\r\n this.params = params;\r\n this.rowData = params.data;\r\n }\r\n refresh(params?: any): boolean {\r\n return false;\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, forwardRef, OnInit, ViewChild, AfterViewInit } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DatePicker, DatePickerModule } from 'primeng/datepicker';\r\nimport { IFloatingFilter, IFloatingFilterParams } from 'ag-grid-community';\r\n\r\n@Component({\r\n selector: 'app-datepicker',\r\n standalone: true,\r\n imports: [CommonModule, DatePickerModule, FormsModule],\r\n templateUrl: './date-filter.component.html',\r\n styleUrls: ['./date-filter.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DatepickerComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class DatepickerComponent implements ControlValueAccessor, OnInit, AfterViewInit, OnInit, IFloatingFilter {\r\n @Input() disabled: boolean = false;\r\n @Input() selectionMode: 'single' | 'range' = 'range';\r\n @Input() showIcon: boolean = true;\r\n @Input() iconDisplay: 'input' | 'button' = 'input';\r\n @Input() appendTo: string = 'body';\r\n @Input() inline: boolean = false;\r\n @Input() showButtonBar: boolean = true;\r\n @Input() inputId: string = '';\r\n @Input() showOnFocus: boolean = false;\r\n @Input() gridComponent: any;\r\n\r\n @Output() ngModelChange = new EventEmitter<any>();\r\n\r\n params: IFloatingFilterParams | undefined;\r\n currentValue: any = null;\r\n dateFormat: string = 'yy-mm-dd'; // Important!!! Do not change the format due to primeNG issues with yyyy format\r\n placeholder: string = 'yyyy-mm-dd';\r\n isInvalid: boolean = false;\r\n value: Date | Date[] | null = null;\r\n uniqueId: string | undefined;\r\n @ViewChild('datepicker') datepicker: DatePicker | undefined;\r\n\r\n private onChange = (value: any) => { };\r\n private onTouched = () => { };\r\n\r\n private isManualInput = false;\r\n private preventPrimeNGUpdates = false;\r\n private currentInputValue: string = '';\r\n private lastEmittedValue: any = null;\r\n private previousValidValue: any = null;\r\n private hasStoredPreviousValue = false;\r\n private isDatepickerOpen = false;\r\n private lastKnownValue: any = null;\r\n private isRestoring = false;\r\n\r\n constructor() { \r\n const sampleDate = new Date(2000, 0, 2); // Jan 2, 2000\r\n let localeDate = sampleDate.toLocaleDateString();\r\n // Replace numbers with format tokens\r\n localeDate = localeDate\r\n .replace('2000', 'yyyy')\r\n .replace('00', 'yy')\r\n .replace('2', 'dd')\r\n .replace('1', 'MM');\r\n // Remove any remaining numbers\r\n this.dateFormat = localeDate.replace(/\\d+/g, '');\r\n this.placeholder = this.dateFormat.toLowerCase();\r\n this.dateFormat = this.placeholder.replace(/yyyy/g, 'yy');\r\n }\r\n\r\n // Date Floating Filter functions\r\n agInit(params: IFloatingFilterParams): void {\r\n this.params = params;\r\n if ((params as any).iconDisplay) {\r\n this.iconDisplay = (params as any).iconDisplay;\r\n }\r\n }\r\n\r\n onParentModelChanged(parentModel: any): void {\r\n // Update the floating filter when the main filter changes\r\n if (parentModel && (parentModel.dateFrom || parentModel.dateTo)) {\r\n const fromDateStr = parentModel.dateFrom ? this.extractDatePart(parentModel.dateFrom) : '';\r\n const toDateStr = parentModel.dateTo ? this.extractDatePart(parentModel.dateTo) : '';\r\n\r\n // Convert strings to Date objects for proper display in lspx-datepicker\r\n const fromDate = fromDateStr ? this.parseStringToDate(fromDateStr) : null;\r\n const toDate = toDateStr ? this.parseStringToDate(toDateStr) : null;\r\n\r\n // Set the current value as array of Date objects for range picker\r\n if (fromDate && toDate) {\r\n this.currentValue = [fromDate, toDate];\r\n } else if (fromDate) {\r\n this.currentValue = [fromDate, null];\r\n } else {\r\n this.currentValue = null;\r\n }\r\n } else {\r\n this.currentValue = null;\r\n }\r\n }\r\n\r\n private parseStringToDate(dateStr: string): Date | null {\r\n if (!dateStr || dateStr.trim() === '') return null;\r\n\r\n // Remove spaces and non-digit/non-hyphen characters\r\n const cleaned = dateStr.replace(/[^\\d-]/g, '');\r\n\r\n // Handle YYYYMMDD format\r\n if (/^\\d{8}$/.test(cleaned)) {\r\n const year = parseInt(cleaned.substring(0, 4), 10);\r\n const month = parseInt(cleaned.substring(4, 6), 10) - 1;\r\n const day = parseInt(cleaned.substring(6, 8), 10);\r\n const date = new Date(year, month, day);\r\n return !isNaN(date.getTime()) ? date : null;\r\n }\r\n\r\n // Handle YYYY-MM-DD format\r\n const parts = cleaned.split('-');\r\n if (parts.length === 3) {\r\n const year = parseInt(parts[0], 10);\r\n const month = parseInt(parts[1], 10) - 1;\r\n const day = parseInt(parts[2], 10);\r\n const date = new Date(year, month, day);\r\n return !isNaN(date.getTime()) ? date : null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n onDateChange(newValue: any): void {\r\n this.currentValue = newValue;\r\n\r\n // Only apply filter if we have a complete range or clearing the filter\r\n if (!newValue) {\r\n this.applyFilter(null);\r\n } else if (Array.isArray(newValue) && newValue.length === 2 && newValue[0] && newValue[1]) {\r\n this.applyFilter(newValue);\r\n }\r\n }\r\n\r\n private applyFilter(value: any): void {\r\n const filterModel = this.params?.api.getFilterModel();\r\n const colId = this.params?.column?.getColId();\r\n let isAlreadyCleared = false;\r\n\r\n if (colId) {\r\n isAlreadyCleared = !filterModel || !filterModel[colId];\r\n } else {\r\n isAlreadyCleared = false;\r\n }\r\n\r\n if (!value && isAlreadyCleared) {\r\n return;\r\n }\r\n\r\n this.params?.parentFilterInstance((instance) => {\r\n if (value && Array.isArray(value) && value.length === 2 && value[0] && value[1]) {\r\n // Convert yy-mm-dd format to yyyy-mm-dd for AG Grid filter\r\n const fromDate = this.convertToFullYear(value[0]);\r\n const toDate = this.convertToFullYear(value[1]);\r\n\r\n instance.setModel({\r\n filterType: 'date',\r\n type: 'inRange',\r\n dateFrom: fromDate,\r\n dateTo: toDate\r\n });\r\n } else {\r\n instance.setModel(null);\r\n }\r\n this.params?.api.onFilterChanged();\r\n });\r\n }\r\n\r\n private convertToFullYear(dateStr: string | Date): string {\r\n if (!dateStr) return '';\r\n\r\n // If it's a Date object, format it as YYYY-MM-DD\r\n if (dateStr instanceof Date) {\r\n const year = dateStr.getFullYear();\r\n const month = String(dateStr.getMonth() + 1).padStart(2, '0');\r\n const day = String(dateStr.getDate()).padStart(2, '0');\r\n return `${year}-${month}-${day}`;\r\n }\r\n\r\n // Otherwise, treat as string\r\n const parts = dateStr.split('-');\r\n if (parts.length === 3) {\r\n let year = parseInt(parts[0], 10);\r\n\r\n // Convert 2-digit year to 4-digit year\r\n if (year < 100) {\r\n year += year < 50 ? 2000 : 1900;\r\n }\r\n\r\n return `${year}-${parts[1]}-${parts[2]}`;\r\n }\r\n\r\n return dateStr;\r\n }\r\n\r\n private extractDatePart(dateStr: string): string {\r\n if (!dateStr) return '';\r\n // Remove time part if present (e.g., \"2025-05-11 00:00:00\" -> \"2025-05-11\")\r\n return dateStr.split(' ')[0];\r\n }\r\n // End Date Floating Filter functions\r\n\r\n // Date Picker functions\r\n ngOnInit() {\r\n this.uniqueId = this.inputId || `datepicker_${Math.random().toString(36).substr(2, 9)}`;\r\n \r\n if (this.selectionMode === 'range') {\r\n this.placeholder = this.placeholder || 'Enter start date (YYYYMMDD)';\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n // Get reference to the input element for direct manipulation\r\n if (this.datepicker && this.datepicker.inputfieldViewChild) {\r\n const inputElement = this.datepicker.inputfieldViewChild.nativeElement;\r\n \r\n // Override PrimeNG's input event handling completely\r\n inputElement.addEventListener('input', (event: any) => {\r\n event.stopImmediatePropagation(); // Stop PrimeNG from processing\r\n this.onInputChange(event);\r\n }, true);\r\n\r\n // Add focus event to capture the initial value when user starts editing\r\n inputElement.addEventListener('focus', (event: any) => {\r\n this.onInputFocus(event);\r\n });\r\n }\r\n }\r\n\r\n onInputFocus(event: any): void {\r\n // Store the current valid value when user starts editing\r\n if (!this.hasStoredPreviousValue && this.value !== null && this.value !== undefined) {\r\n this.previousValidValue = this.value;\r\n this.hasStoredPreviousValue = true;\r\n }\r\n }\r\n\r\n onInputChange(event: any): void {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value.replace(/\\D/g, '');\r\n \r\n // Store previous valid value when user starts editing (only if we don't have one stored)\r\n if (!this.hasStoredPreviousValue && this.value) {\r\n this.previousValidValue = this.value;\r\n this.hasStoredPreviousValue = true;\r\n }\r\n \r\n this.isManualInput = true;\r\n this.preventPrimeNGUpdates = true;\r\n \r\n if (this.datepicker) {\r\n this.datepicker.value = null;\r\n }\r\n \r\n // Format the value based on length\r\n let formattedValue = '';\r\n if (this.selectionMode === 'range') {\r\n // Format for range: YYYY-MM-DD YYYY-MM-DD\r\n if (value.length <= 4) {\r\n formattedValue = value;\r\n } else if (value.length <= 6) {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4);\r\n } else if (value.length <= 8) {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4, 6) + '-' + value.substring(6);\r\n } else if (value.length <= 12) {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4, 6) + '-' + value.substring(6, 8) + ' ' + value.substring(8);\r\n } else if (value.length <= 14) {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4, 6) + '-' + value.substring(6, 8) + ' ' + value.substring(8, 12) + '-' + value.substring(12);\r\n } else {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4, 6) + '-' + value.substring(6, 8) + ' ' + value.substring(8, 12) + '-' + value.substring(12, 14) + '-' + value.substring(14);\r\n }\r\n } else {\r\n // Format for single date: YYYY-MM-DD\r\n if (value.length <= 4) {\r\n formattedValue = value;\r\n } else if (value.length <= 6) {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4);\r\n } else {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4, 6) + '-' + value.substring(6);\r\n }\r\n }\r\n \r\n // Store the current cursor position\r\n const cursorPosition = input.selectionStart || 0;\r\n const oldLength = input.value.length;\r\n \r\n // Update the input value directly\r\n input.value = formattedValue;\r\n \r\n // Adjust cursor position after formatting\r\n const newLength = formattedValue.length;\r\n const lengthDiff = newLength - oldLength;\r\n const newCursorPosition = Math.max(0, cursorPosition + lengthDiff);\r\n \r\n // Restore cursor position\r\n setTimeout(() => {\r\n input.setSelectionRange(newCursorPosition, newCursorPosition);\r\n }, 0);\r\n \r\n // Store the raw value for later use\r\n this.currentInputValue = value;\r\n \r\n // Process complete dates and store them as valid values\r\n if (this.selectionMode === 'range') {\r\n if (value.length === 8) {\r\n // Single complete date in range mode\r\n const date = this.parseDate(value);\r\n if (date) {\r\n this.value = [date];\r\n // Store this as a valid value for potential restoration\r\n if (!this.hasStoredPreviousValue) {\r\n this.previousValidValue = [date];\r\n this.hasStoredPreviousValue = true;\r\n }\r\n \r\n const formattedDate = this.formatDateToString(date);\r\n this.onChange([formattedDate]);\r\n this.ngModelChange.emit([formattedDate]);\r\n this.applyFilter([date]);\r\n setTimeout(() => this.reconnectToPrimeNG(), 100);\r\n }\r\n } else if (value.length === 16) {\r\n // Complete date range\r\n const startDate = this.parseDate(value.substring(0, 8));\r\n const endDate = this.parseDate(value.substring(8, 16));\r\n \r\n if (startDate && endDate) {\r\n this.value = [startDate, endDate];\r\n // Update the stored valid value to the complete range\r\n this.previousValidValue = [startDate, endDate];\r\n \r\n const formattedDates = [\r\n this.formatDateToString(startDate),\r\n this.formatDateToString(endDate)\r\n ];\r\n this.onChange(formattedDates);\r\n this.ngModelChange.emit(formattedDates);\r\n this.applyFilter([startDate, endDate]);\r\n setTimeout(() => this.reconnectToPrimeNG(), 100);\r\n }\r\n }\r\n } else {\r\n // Single date mode\r\n if (value.length === 8) {\r\n const date = this.parseDate(value);\r\n if (date) {\r\n this.value = date;\r\n // Store this as a valid value for potential restoration\r\n if (!this.hasStoredPreviousValue) {\r\n this.previousValidValue = date;\r\n this.hasStoredPreviousValue = true;\r\n }\r\n \r\n const formattedDate = this.formatDateToString(date);\r\n this.onChange(formattedDate);\r\n this.ngModelChange.emit(formattedDate);\r\n this.applyFilter(date);\r\n setTimeout(() => this.reconnectToPrimeNG(), 100);\r\n }\r\n }\r\n }\r\n \r\n // Handle empty input\r\n if (value.length === 0) {\r\n this.value = null;\r\n this.onChange(null);\r\n this.ngModelChange.emit(null);\r\n this.applyFilter(null);\r\n this.reconnectToPrimeNG();\r\n }\r\n }\r\n\r\n onInputBlur(event: any): void {\r\n // Only block blur if datepicker is open AND user is not manually typing\r\n if (this.isDatepickerOpen && !this.isManualInput) {\r\n return;\r\n }\r\n \r\n const input = event.target as HTMLInputElement;\r\n const value = input.value.replace(/\\D/g, '');\r\n \r\n const maxLength = this.selectionMode === 'range' ? 16 : 8;\r\n const isIncomplete = value.length > 0 && value.length < maxLength;\r\n \r\n if (isIncomplete) {\r\n if (this.previousValidValue) {\r\n \r\n // Set restoration flag to block external interference\r\n this.isRestoring = true;\r\n \r\n // Reset flags to allow restoration\r\n this.isManualInput = false;\r\n this.preventPrimeNGUpdates = false;\r\n \r\n // Restore the previous valid value to both component and input\r\n this.value = this.previousValidValue;\r\n \r\n // Format the previous value for display in input\r\n let displayValue = '';\r\n if (this.selectionMode === 'range' && Array.isArray(this.previousValidValue)) {\r\n if (this.previousValidValue.length === 1) {\r\n displayValue = this.previousValidValue[0].toLocaleDateString();\r\n } else if (this.previousValidValue.length === 2) {\r\n const start = this.previousValidValue[0].toLocaleDateString();\r\n const end = this.previousValidValue[1].toLocaleDateString();\r\n displayValue = `${start} - ${end}`;\r\n }\r\n } else if (this.previousValidValue instanceof Date) {\r\n displayValue = this.previousValidValue.toLocaleDateString();\r\n }\r\n \r\n // Aggressive restoration - keep setting the value until it sticks\r\n const restoreInputValue = () => {\r\n input.value = displayValue;\r\n };\r\n \r\n // Initial restoration\r\n restoreInputValue();\r\n \r\n // Keep restoring every 10ms for the first 200ms to fight any interference\r\n const restorationInterval = setInterval(() => {\r\n if (input.value === '' || input.value !== displayValue.substring(0, 4) + '-' + displayValue.substring(4, 6) + '-' + displayValue.substring(6, 8) + ' ' + displayValue.substring(8, 12) + '-' + displayValue.substring(12, 14) + '-' + displayValue.substring(14, 16)) {\r\n restoreInputValue();\r\n }\r\n }, 10);\r\n \r\n // Stop aggressive restoration after 200ms\r\n setTimeout(() => {\r\n clearInterval(restorationInterval);\r\n }, 200);\r\n \r\n setTimeout(() => {\r\n // Clear restoration flag after sufficient time\r\n this.isRestoring = false;\r\n }, 500);\r\n \r\n // Delay reconnection to avoid interfering with restored input\r\n setTimeout(() => {\r\n this.reconnectToPrimeNG();\r\n }, 250); // Increased delay to allow aggressive restoration to finish\r\n \r\n } else {\r\n input.value = '';\r\n \r\n // Clear everything since there's no valid previous state\r\n this.value = null;\r\n this.onChange(null);\r\n this.ngModelChange.emit(null);\r\n this.reconnectToPrimeNG();\r\n }\r\n } else if (value.length === 0) {\r\n this.value = null;\r\n this.previousValidValue = null;\r\n this.hasStoredPreviousValue = false;\r\n \r\n // Emit null to clear the filter\r\n this.onChange(null);\r\n this.ngModelChange.emit(null);\r\n \r\n this.reconnectToPrimeNG();\r\n } else {\r\n // Complete date - just reconnect normally\r\n this.reconnectToPrimeNG();\r\n }\r\n\r\n this.isManualInput = false;\r\n this.preventPrimeNGUpdates = false;\r\n }\r\n\r\n onKeyDown(event: KeyboardEvent): void {\r\n // Allow: backspace, delete, tab, escape, enter, and navigation keys\r\n if ([8, 9, 27, 13, 46, 37, 38, 39, 40].indexOf(event.keyCode) !== -1 ||\r\n // Allow: Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+X\r\n (event.keyCode === 65 && event.ctrlKey === true) ||\r\n (event.keyCode === 67 && event.ctrlKey === true) ||\r\n (event.keyCode === 86 && event.ctrlKey === true) ||\r\n (event.keyCode === 88 && event.ctrlKey === true)) {\r\n \r\n // Handle Enter key to process incomplete dates\r\n if (event.keyCode === 13) {\r\n const input = event.target as HTMLInputElement;\r\n const value = input.value.replace(/\\D/g, '');\r\n if (value.length > 0 && value.length < 8) {\r\n // Clear incomplete date on Enter\r\n input.value = '';\r\n this.value = null;\r\n this.onChange(null);\r\n this.ngModelChange.emit(null);\r\n // Reset flags\r\n this.isManualInput = false;\r\n this.preventPrimeNGUpdates = false;\r\n }\r\n }\r\n \r\n return;\r\n }\r\n \r\n // Ensure that it is a number and stop the keypress if not\r\n if ((event.shiftKey || (event.keyCode < 48 || event.keyCode > 57)) && (event.keyCode < 96 || event.keyCode > 105)) {\r\n event.preventDefault();\r\n }\r\n \r\n // Limit to appropriate number of digits based on mode\r\n const input = event.target as HTMLInputElement;\r\n const currentValue = input.value.replace(/\\D/g, ''); // Remove non-digits\r\n const maxLength = this.selectionMode === 'range' ? 16 : 8;\r\n \r\n if (currentValue.length >= maxLength && ![8, 9, 27, 13, 46, 37, 38, 39, 40].includes(event.keyCode)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n onValueChange(newValue: Date | Date[] | null): void {\r\n // Block ALL PrimeNG updates during manual input\r\n if (this.isManualInput || this.preventPrimeNGUpdates) {\r\n return;\r\n }\r\n\r\n // Block changes when datepicker is open but no actual selection was made\r\n if (this.isDatepickerOpen) {\r\n return;\r\n }\r\n\r\n // Check if this is actually a new value or just PrimeNG noise\r\n const currentValueString = JSON.stringify(this.lastKnownValue);\r\n const newValueString = JSON.stringify(newValue);\r\n \r\n if (currentValueString === newValueString) {\r\n return;\r\n }\r\n \r\n let newValueFormatted: any = null;\r\n if (this.selectionMode === 'range') {\r\n if (Array.isArray(newValue) && newValue.length > 0) {\r\n newValueFormatted = newValue.map(date => \r\n date ? this.formatDateToString(date) : ''\r\n ).filter(date => date !== '');\r\n }\r\n } else {\r\n if (newValue instanceof Date) {\r\n newValueFormatted = this.formatDateToString(newValue);\r\n }\r\n }\r\n \r\n if (JSON.stringify(newValueFormatted) === JSON.stringify(this.lastEmittedValue)) {\r\n return;\r\n }\r\n \r\n this.value = newValue;\r\n this.lastKnownValue = newValue;\r\n \r\n let outputValue: any = null;\r\n\r\n if (this.selectionMode === 'range') {\r\n if (Array.isArray(newValue) && newValue.length > 0) {\r\n const formattedDates = newValue.map(date => \r\n date ? this.formatDateToString(date) : ''\r\n );\r\n \r\n if (formattedDates.some(date => date !== '')) {\r\n outputValue = formattedDates;\r\n }\r\n }\r\n } else {\r\n if (newValue instanceof Date) {\r\n outputValue = this.formatDateToString(newValue);\r\n }\r\n }\r\n \r\n this.lastEmittedValue = outputValue;\r\n this.onChange(outputValue);\r\n this.ngModelChange.emit(outputValue);\r\n if (this.selectionMode === 'range') {\r\n if (Array.isArray(newValue) && newValue.length === 2 && newValue[0] && newValue[1]) {\r\n this.applyFilter(newValue);\r\n }\r\n } else if (newValue){\r\n this.applyFilter(newValue);\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n // Block external writes during restoration\r\n if (this.isRestoring) {\r\n return;\r\n }\r\n \r\n // Block external writes during manual input to prevent resets\r\n if (this.isManualInput || this.preventPrimeNGUpdates) {\r\n return;\r\n }\r\n \r\n if (value === null || value === undefined || value === '') {\r\n this.value = null;\r\n return;\r\n }\r\n\r\n if (this.selectionMode === 'range') {\r\n if (Array.isArray(value)) {\r\n const dates = value.map(dateStr => \r\n typeof dateStr === 'string' ? this.parseStringToDate(dateStr) : dateStr\r\n ).filter(date => date !== null);\r\n this.value = dates.length > 0 ? dates : null;\r\n }\r\n } else {\r\n if (typeof value === 'string') {\r\n this.value = this.parseStringToDate(value);\r\n } else if (value instanceof Date) {\r\n this.value = value;\r\n }\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n // Custom template methods\r\n isStartDate(date: any): boolean {\r\n if (!this.value || !Array.isArray(this.value) || !this.value[0]) return false;\r\n return this.isSameDay(date, this.value[0]);\r\n }\r\n\r\n isEndDate(date: any): boolean {\r\n if (!this.value || !Array.isArray(this.value) || !this.value[1]) return false;\r\n return this.isSameDay(date, this.value[1]);\r\n }\r\n\r\n isInRange(date: any): boolean {\r\n if (!this.value || !Array.isArray(this.value) || !this.value[0] || !this.value[1]) return false;\r\n\r\n const currentDate = new Date(date.year, date.month, date.day);\r\n const startDate = this.value[0];\r\n const endDate = this.value[1];\r\n\r\n return currentDate > startDate && currentDate < endDate;\r\n }\r\n\r\n isSelected(date: any): boolean {\r\n return this.isStartDate(date) || this.isEndDate(date);\r\n }\r\n\r\n private isSameDay(date1: any, date2: Date): boolean {\r\n return date1.year === date2.getFullYear() &&\r\n date1.month === date2.getMonth() &&\r\n date1.day === date2.getDate();\r\n }\r\n\r\n getDateClasses(date: any): string {\r\n const classes: string[] = [];\r\n\r\n if (this.selectionMode === 'range') {\r\n if (this.isStartDate(date)) {\r\n classes.push('range-start');\r\n }\r\n if (this.isEndDate(date)) {\r\n classes.push('range-end');\r\n }\r\n if (this.isInRange(date)) {\r\n classes.push('range-middle');\r\n }\r\n } else if (this.selectionMode === 'single') {\r\n if (this.isSingleSelectedDate(date)) {\r\n classes.push('single-selected');\r\n }\r\n }\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n private isSingleSelectedDate(date: any): boolean {\r\n if (!this.value || Array.isArray(this.value)) return false;\r\n\r\n const selectedDate = this.value as Date;\r\n return this.isSameDay(date, selectedDate);\r\n }\r\n\r\n get datepickerClass(): string {\r\n return `custom-datepicker-${this.selectionMode}`;\r\n }\r\n\r\n onTodayButtonClick(): void {\r\n const today = new Date();\r\n let outputValue: any = null;\r\n \r\n if (this.selectionMode === 'range') {\r\n // For range mode, set both start and end to today to create a single-day range\r\n this.value = [today, today];\r\n outputValue = [this.formatDateToString(today), this.formatDateToString(today)];\r\n this.applyFilter([today, today]);\r\n } else {\r\n this.value = today;\r\n outputValue = this.formatDateToString(today);\r\n this.applyFilter(today);\r\n }\r\n \r\n // Update last known and emitted values\r\n this.lastKnownValue = this.value;\r\n this.lastEmittedValue = outputValue;\r\n \r\n // Reset datepicker state flags\r\n this.isDatepickerOpen = false;\r\n this.hasStoredPreviousValue = false;\r\n this.previousValidValue = null;\r\n \r\n // Emit the value to trigger filtering\r\n this.onChange(outputValue);\r\n this.ngModelChange.emit(outputValue);\r\n \r\n // Close the datepicker and remove focus\r\n this.closeDatepicker();\r\n }\r\n\r\n onClearButtonClick(): void {\r\n this.value = null;\r\n this.lastKnownValue = null;\r\n this.lastEmittedValue = null;\r\n \r\n // Reset datepicker state flags\r\n this.isDatepickerOpen = false;\r\n this.hasStoredPreviousValue = false;\r\n this.previousValidValue = null;\r\n \r\n // Emit null to trigger filtering\r\n this.onChange(null);\r\n this.ngModelChange.emit(null);\r\n this.applyFilter(null);\r\n \r\n // Close the datepicker and remove focus\r\n this.closeDatepicker();\r\n }\r\n\r\n private closeDatepicker(): void {\r\n setTimeout(() => {\r\n if (this.datepicker) {\r\n this.datepicker.hideOverlay();\r\n \r\n // Remove focus from input\r\n if (this.datepicker.inputfieldViewChild) {\r\n this.datepicker.inputfieldViewChild.nativeElement.blur();\r\n }\r\n }\r\n }, 50);\r\n }\r\n\r\n private parseDate(dateStr: string): Date | null {\r\n if (dateStr.length !== 8) return null;\r\n \r\n const year = parseInt(dateStr.substring(0, 4));\r\n const month = parseInt(dateStr.substring(4, 6)) - 1; // Month is 0-indexed\r\n const day = parseInt(dateStr.substring(6, 8));\r\n \r\n // Validate the date\r\n const date = new Date(year, month, day);\r\n const isValidDate = date.getFullYear() === year && \r\n date.getMonth() === month && \r\n date.getDate() === day &&\r\n year >= 1900 && year <= 2100 && // Reasonable year range\r\n month >= 0 && month <= 11 && // Valid month\r\n day >= 1 && day <= 31; // Valid day\r\n \r\n return isValidDate ? date : null;\r\n }\r\n\r\n // Convert Date object to string output in the specified format\r\n private formatDateToString(date: Date): string {\r\n if (!date || !(date instanceof Date) || isNaN(date.getTime())) return '';\r\n \r\n const year = date.getFullYear(); // This ensures 4-digit year\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n \r\n // Always return YYYY-MM-DD format regardless of dateFormat setting for consistency\r\n return `${year}-${month}-${day}`;\r\n }\r\n\r\n // Convert dateFormat to moment.js format\r\n private getMomentFormat(): string {\r\n let momentFormat = this.dateFormat;\r\n \r\n // Handle yyyy first (4-digit year) before yy (2-digit year)\r\n momentFormat = momentFormat.replace(/yyyy/g, 'YYYY'); // 4-digit year\r\n momentFormat = momentFormat.replace(/(?<!Y)yy(?!Y)/g, 'YY'); // 2-digit year (not preceded or followed by Y)\r\n momentFormat = momentFormat.replace(/dd/g, 'DD'); // day\r\n momentFormat = momentFormat.replace(/mm/g, 'MM'); // month\r\n \r\n return momentFormat;\r\n }\r\n\r\n private reconnectToPrimeNG(): void {\r\n setTimeout(() => {\r\n this.isManualInput = false;\r\n this.preventPrimeNGUpdates = false;\r\n \r\n // Only restore datepicker value if we have a valid value\r\n if (this.datepicker && this.value) {\r\n this.datepicker.value = this.value;\r\n }\r\n }, 100);\r\n }\r\n\r\n // Handle actual date selections from the datepicker\r\n onDateSelect(event: any): void {\r\n // Allow this selection to go through\r\n setTimeout(() => {\r\n this.isDatepickerOpen = false; // Mark as closed after selection\r\n \r\n // Process the selection\r\n if (this.datepicker && this.datepicker.value) {\r\n this.onValueChange(this.datepicker.value);\r\n }\r\n }, 10);\r\n }\r\n\r\n onDatepickerShow(): void {\r\n this.isDatepickerOpen = true;\r\n this.lastKnownValue = this.value;\r\n }\r\n\r\n onDatepickerHide(): void {\r\n this.isDatepickerOpen = false;\r\n }\r\n\r\n}\r\n","<div class=\"lspx-datepicker floating-datepicker\">\r\n <p-datepicker\r\n #datepicker\r\n [(ngModel)]=\"value\"\r\n (ngModelChange)=\"onValueChange($event)\"\r\n (onSelect)=\"onDateSelect($event)\"\r\n (onShow)=\"onDatepickerShow()\"\r\n (onHide)=\"onDatepickerHide()\"\r\n [selectionMode]=\"selectionMode\"\r\n [placeholder]=\"placeholder\"\r\n [showIcon]=\"showIcon\"\r\n [iconDisplay]=\"iconDisplay\"\r\n [dateFormat]=\"dateFormat\"\r\n [inline]=\"inline\"\r\n [showButtonBar]=\"showButtonBar\"\r\n [disabled]=\"disabled\"\r\n [appendTo]=\"appendTo\"\r\n [inputId]=\"uniqueId\"\r\n [readonlyInput]=\"false\"\r\n [styleClass]=\"'custom-datepicker ' + datepickerClass\"\r\n [dataType]=\"'date'\"\r\n [keepInvalid]=\"false\"\r\n [showOnFocus]=\"showOnFocus\"\r\n (onTodayClick)=\"onTodayButtonClick()\"\r\n (onClearClick)=\"onClearButtonClick()\"\r\n (onInput)=\"onInputChange($event)\"\r\n (onBlur)=\"onInputBlur($event)\"\r\n >\r\n <ng-template pTemplate=\"date\" let-date>\r\n <div class=\"custom-date-wrapper\" [ngClass]=\"getDateClasses(date)\">\r\n <span class=\"date-content\">{{ date.day }}</span>\r\n </div>\r\n </ng-template>\r\n </p-datepicker>\r\n</div> \r\n","import { DatePipe } from '@angular/common';\r\nimport { Injectable } from '@angular/core';\r\nimport { ValueFormatterParams } from 'ag-grid-community';\r\nimport moment from 'moment';\r\n\r\n@Injectable()\r\nexport class ColumnValueFormatter {\r\n constructor(private datePipe: DatePipe) {}\r\n\r\n private toLocal(dateString: string | Date, format?: string): string {\r\n if (!dateString) return '';\r\n let hasTime = false;\r\n if (typeof dateString === 'string') {\r\n const match = /T(\\d{2}):(\\d{2}):(\\d{2})/.exec(dateString);\r\n hasTime = !!(match && (match[1] !== '00' || match[2] !== '00' || match[3] !== '00'));\r\n } else if (dateString instanceof Date) {\r\n hasTime = true;\r\n }\r\n let date;\r\n if (hasTime) {\r\n date = moment.utc(dateString).toDate();\r\n return format ? moment(date).format(format) : date.toLocaleString(undefined, {\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n });\r\n } else {\r\n // Parse as local date, not UTC\r\n date = moment(dateString, 'YYYY-MM-DD').toDate();\r\n return format ? moment(date).format(format) : date.toLocaleDateString();\r\n }\r\n }\r\n\r\n public colValueFormatter(params: ValueFormatterParams, colType: string) {\r\n if (isNaN(+params.value)) {\r\n var dateWrapper = new Date(params.value);\r\n let isValidDate = !isNaN(dateWrapper.getDate());\r\n if (isValidDate && colType == 'date') {\r\n return this.toLocal(params.value);\r\n } else {\r\n return params.value;\r\n }\r\n }\r\n return params.value;\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n SimpleChanges\r\n} from '@angular/core';\r\nimport {\r\n ColDef,\r\n ColumnState,\r\n GetContextMenuItemsParams,\r\n GetRowIdFunc,\r\n GetRowIdParams,\r\n GridApi,\r\n GridReadyEvent,\r\n MenuItemDef,\r\n PaginationChangedEvent,\r\n PaginationNumberFormatterParams,\r\n RowModelType,\r\n ValueFormatterParams,\r\n} from 'ag-grid-community';\r\nimport { GridLibraryService } from './grid-library.service';\r\nimport { OdataServerSideProvider } from './helpers';\r\nimport { ButtonRendererComponent } from './renderer/button-renderer/button-renderer.component';\r\nimport { CustomTooltip } from './renderer/tooltip-renderer/custom-tooltip-renderer';\r\nimport { DropdownRenderer } from './renderer/dropdown-renderer/drop-down-renderer';\r\nimport { ColumnValueFormatter } from './formatters/column-value-formatter';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\nimport { TokenSharingService } from './token-sharing.service';\r\nimport { CellRendererComponent } from './renderer/cell-renderer/cell-renderer.component';\r\nimport { FillCellRendererComponent } from './renderer/fill-cell-renderer/fill-cell-renderer.component';\r\nimport { DatepickerComponent } from './renderer/date-filter/date-filter.component';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'lib-basesite-shared-grid-lib',\r\n template: `\r\n <ag-grid-angular\r\n #agGrid\r\n style=\"width: 100%;height:98.2vh\"\r\n class=\"ag-theme-balham shared-grid-lib\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [rowData]=\"rowData\"\r\n [rowSelection]=\"rowSelection\"\r\n [animateRows]=\"true\"\r\n (gridReady)=\"onGridReady($event)\"\r\n [pagination]=\"true\"\r\n [paginationAutoPageSize]=\"paginationAutoPageSize\"\r\n [suppressPaginationPanel]=\"true\"\r\n [tooltipShowDelay]=\"tooltipShowDelay\"\r\n [tooltipHideDelay]=\"tooltipHideDelay\"\r\n [rowModelType]=\"rowModelType\"\r\n [cacheBlockSize]=\"cacheBlockSize\"\r\n [maxConcurrentDatasourceRequests]=\"1\"\r\n [blockLoadDebounceMillis]=\"100\"\r\n (columnVisible)=\"saveGridState($event)\"\r\n (columnPinned)=\"saveGridState($event)\"\r\n (columnResized)=\"saveGridState($event)\"\r\n (columnMoved)=\"saveGridState($event)\"\r\n (sortChanged)=\"onSortChangedEvent($event)\"\r\n [rowMultiSelectWithClick]=\"rowMultiSelectWithClick\"\r\n [getContextMenuItems]=\"getContextMenuItems\"\r\n (selectionChanged)=\"onSelectionChanged($event)\"\r\n (filterChanged)=\"onFilterChanged($event)\"\r\n (firstDataRendered)=\"onFirstDataRendered($event)\"\r\n (onGridSizeChanged)=\"onGridSizeChanged($event)\"\r\n [rowHeight]=\"rowHeight\"\r\n (paginationChanged)=\"onPaginationChanged($event)\"\r\n [noRowsOverlayComponent]=\"noRowsOverlayComponent\"\r\n >\r\n </ag-grid-angular>\r\n <!-- Custom pagination -->\r\n <div class=\"custom-pagination\">\r\n <div class=\"pagination-nav\">\r\n <button class=\"nav-btn\" (click)=\"onPreviousPage()\" [disabled]=\"isFirstPage\">\r\n <span class=\"nav-btn-prev\"></span>\r\n </button>\r\n \r\n @for (page of pageNumbers; track page) {\r\n @if (page !== '...') {\r\n <span\r\n class=\"page-number\"\r\n [ngClass]=\"{'page-number--increased': typeof page === 'number' && +page > 99}\"\r\n [class.active]=\"page === currentPage\"\r\n (click)=\"goToPage(page)\"\r\n >\r\n {{ page }}\r\n </span>\r\n }\r\n @if (page === '...') {\r\n <span class=\"ellipsis\">...</span>\r\n }\r\n }\r\n \r\n <button class=\"nav-btn\" (click)=\"onNextPage()\" [disabled]=\"isLastPage\">\r\n <span class=\"nav-btn-next\"></span>\r\n </button>\r\n </div>\r\n \r\n <div class=\"pagination-info\">\r\n <span>{{ startRow }}-{{ endRow }} of {{ totalRows }} items</span>\r\n </div>\r\n </div>\r\n <ag-grid-angular\r\n #agGridHidden\r\n style=\"height:100vh; width:100%;display:none\"\r\n class=\"ag-theme-balham\"\r\n [rowData]=\"rowDataHidden\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [animateRows]=\"false\"\r\n [rowSelection]=\"'multiple'\"\r\n (gridReady)=\"onGridReadyExcel($event)\"\r\n [suppressScrollOnNewData]=\"true\"\r\n [cacheQuickFilter]=\"false\"\r\n >\r\n </ag-grid-angular>\r\n `,\r\n styles: [],\r\n standalone: false\r\n})\r\nexport class GridLibraryComponent implements OnInit, OnChanges, OnDestroy {\r\n //input params\r\n @Input() overrideColumnDefs: any;\r\n @Input() columnDefs: any;\r\n @Input() rowData: any;\r\n @Input() paginationAutoPageSize = false;\r\n @Input() rowSelection: any = 'multiple';\r\n @Input() gridId: any;\r\n @Input() loggedInUser: any;\r\n @Input() siteId: any;\r\n @Input() enableServerSidePaging: boolean = false;\r\n @Input() serverDataUrl!: string;\r\n @Input() environment!: string;\r\n @Input() cacheBlockSize: number = 0;\r\n @Input() rowMultiSelectWithClick: boolean = false;\r\n @Input() floatingFilter: boolean = false;\r\n @Input() token!: string;\r\n @Input() userRoles: any[] = [];\r\n @Input() rowHeight: number = 44;\r\n @Input() noRowsOverlayComponent!: any;\r\n //event emitters\r\n @Output() btnClickHandler = new EventEmitter<any>();\r\n @Output() firstDataRendered = new EventEmitter<any>();\r\n @Output() filterChanged = new EventEmitter<any>();\r\n @Output() selectionChanged = new EventEmitter<any>();\r\n @Output() totalRowCount = new EventEmitter<number>();\r\n @Output() gridReady = new EventEmitter<GridReadyEvent>()\r\n //paramters\r\n initialColumnDef: any = [];\r\n rowDataHidden: any = [];\r\n gridColumnState: any;\r\n exportColumnsList: any = [];\r\n gridColumns: any[] = [];\r\n public tooltipShowDelay = 500;\r\n public tooltipHideDelay = 4000;\r\n public rowModelType: RowModelType = 'clientSide';\r\n private excelAPI!: GridApi;\r\n private gridAPI!: GridApi;\r\n private odataProvider?: OdataServerSideProvider;\r\n // Per-field cache of distinct values for fill-cell set filters. Populated\r\n // by the OData groupby fallback in _getFillFilterValues and cleared when\r\n // the underlying grid data is refreshed.\r\n private _fillFilterValuesCache: Map<string, any[]> = new Map();\r\n private readonly _Design_Manager = 'Design Manager';\r\n private readonly _Integration_Lead = 'Integration Lead';\r\n private readonly _Tool_Owner = 'Tool Owner';\r\n private readonly _Area_Coordinator = 'Area Coordinator';\r\n private readonly _TiPm = 'TI PM'\r\n // Columns that are completely removed for specific sites. A restricted column\r\n // is stripped from the coldefs entirely, so no saved view can reveal it, it\r\n // never appears in the column menu, and it is excluded from exports — the user\r\n // cannot activate it in any way. Keyed by siteId (compared as a string).\r\n private readonly _restrictedColumnsBySite: Record<string, string[]> = {\r\n '4': ['funding'],\r\n };\r\n //unsubscribe subject\r\n private unsubscribe$ = new Subject<void>();\r\n\r\n //custom pagination properties\r\n private pageNumber: number = 0;\r\n currentPage: number = 1;\r\n totalPages: number = 0;\r\n pageNumbers: (number | string)[] = [];\r\n isFirstPage: boolean = true;\r\n isLastPage: boolean = false;\r\n pageSize: number = 12;\r\n startRow: number = 0;\r\n endRow: number = 0;\r\n totalRows: number = 0;\r\n dataLoaded: boolean = false;;\r\n //custom pagination properties ends...\r\n\r\n constructor(\r\n private gridService: GridLibraryService,\r\n private formatterService: ColumnValueFormatter,\r\n private _tokenSharingService: TokenSharingService,\r\n private router: Router\r\n ) {\r\n this.gridStateLoaded$.subscribe(val => {\r\n if (val) {\r\n this.configureDataState();\r\n }\r\n })\r\n }\r\n\r\n onSortChangedEvent(e: any) {\r\n this.gridColumnState = this.gridAPI.getState();\r\n this.saveGridState(e);\r\n }\r\n\r\n saveGridState(e: any) {\r\n if (!this.overrideColumnDefs) {\r\n this.onSaveGridColumnState(e);\r\n }\r\n }\r\n\r\n public defaultColDef: ColDef = {\r\n sortable: true,\r\n filter: true,\r\n tooltipComponent: CustomTooltip,\r\n };\r\n isInit: boolean = false;\r\n ngOnInit() {\r\n this.isInit = true;\r\n this._tokenSharingService.updateToken(this.token);\r\n\r\n if (this.enableServerSidePaging == true) {\r\n this.rowModelType = 'serverSide';\r\n this.rowData = '';\r\n } else {\r\n this.rowModelType = 'clientSide';\r\n }\r\n\r\n this.cacheBlockSize = this.cacheBlockSize = 0 ? 100 : this.cacheBlockSize;\r\n this.gridService.setBaseUrl(this.environment);\r\n\r\n this.setupWindowFocusListener();\r\n }\r\n\r\n // Handling page refresh scenarios\r\n private setupWindowFocusListener() {\r\n const handleWindowFocus = () => {\r\n setTimeout(() => {\r\n if (this.gridAPI && this.floatingFilter) {\r\n this.applyFilterHighlightingWithRetry();\r\n }\r\n }, 500);\r\n };\r\n\r\n window.addEventListener('focus', handleWindowFocus);\r\n \r\n this.unsubscribe$.subscribe(() => {\r\n window.removeEventListener('focus', handleWindowFocus);\r\n });\r\n }\r\n\r\n get isOverride() {\r\n return (!!this.overrideColumnDefs);\r\n }\r\n\r\n configureDataState() {\r\n if (this.isOverride) {\r\n this.overrideGridState(this.overrideColumnDefs);\r\n } else {\r\n this.gridAPI.resetColumnState();\r\n this.getGridState();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n\r\n this.gridStateLoaded = false;\r\n if (changes['userRoles']?.currentValue) {\r\n if (this.initialColumnDef?.length > 0 && this.userRoles?.length > 0) {\r\n this.columnDefs = this._mapColumnDef(this.initialColumnDef, this.userRoles);\r\n }\r\n }\r\n if (!this.isInit) {\r\n this._tokenSharingService.updateToken(this.token);\r\n }\r\n\r\n if (!this.colDefInit && (this.overrideColumnDefs == null || typeof this.overrideColumnDefs == \"string\")) {\r\n this.getColDef();\r\n\r\n } else if (this.overrideColumnDefs == null || typeof this.overrideColumnDefs == \"string\") {\r\n this.configureDataState();\r\n }\r\n }\r\n\r\n public paginationNumberFormatter: (\r\n params: PaginationNumberFormatterParams\r\n ) => string = (params: PaginationNumberFormatterParams) => {\r\n return '[' + params.value.toLocaleString() + ']';\r\n };\r\n colDefInit: boolean = false;\r\n getColDef() {\r\n if (this.gridId && this.loggedInUser) {\r\n this.gridService\r\n .getColDef(this.gridId)\r\n .pipe(takeUntil(this.unsubscribe$))\r\n .subscribe((response: any) => {\r\n if (response.status == 1) {\r\n this.initialColumnDef = response.result;\r\n let coldef: ColDef[] = this._mapColumnDef(response.result, this.userRoles).filter((column: any) => column);\r\n this.exportColumnsList = response.result;\r\n\r\n this.colDefInit = true;\r\n\r\n this.columnDefs = coldef;\r\n this.gridColumns = coldef;\r\n this.getGridState();\r\n\r\n } else {\r\n console.log('ColDef Read Error=>', response.message);\r\n }\r\n });\r\n } else {\r\n console.log('Please pass valid GridId and loggedIn user Id');\r\n }\r\n }\r\n\r\n private _getColumnVisiblityStatus(column: any, userRoles: any) {\r\n let isDacHidden;\r\n if (column.isButton === false) {\r\n isDacHidden = this.canViewDacStatus(userRoles, column.field);\r\n } else {\r\n isDacHidden = this.canCreateDac(userRoles, column.field);\r\n }\r\n\r\n const columnState: any = this.gridAPI?.getColumnDefs()?.find((col: any) => col.field == column.field);\r\n if (columnState && columnState.hide) {\r\n return columnState.hide || isDacHidden;\r\n }\r\n else {\r\n if (column.field === \"createDac\") {\r\n return !isDacHidden;\r\n }\r\n return !column.visible || isDacHidden;\r\n }\r\n }\r\n private _isColumnRestricted(field: string): boolean {\r\n const restricted = this._restrictedColumnsBySite[String(this.siteId)];\r\n return !!restricted && restricted.includes(field);\r\n }\r\n\r\n private _mapColumnDef(columns: any, userRoles: any) {\r\n return columns\r\n ?.filter((res: any) => !this._isColumnRestricted(res.field))\r\n .map((res: any) => {\r\n if (res.isButton === false) {\r\n if (res.columnType === 'checkbox') {\r\n return {\r\n field: res.field,\r\n headerName: res.title,\r\n sortable: false,\r\n tooltipField: res.field,\r\n resizable: true,\r\n headerCheckboxSelection: false,\r\n filterable: false,\r\n checkboxSelection: true,\r\n showDisabledCheckboxes: true,\r\n suppressFilter: true,\r\n suppressSorting: true,\r\n suppressMenu: true,\r\n width: 55,\r\n };\r\n } else if (res.columnType === 'dropdown') {\r\n return {\r\n field: res.field,\r\n headerName: res.title,\r\n resizable: true,\r\n sortable: false,\r\n suppressFilter: true,\r\n suppressSorting: true,\r\n suppressMenu: true,\r\n tooltipField: res.field,\r\n cellRenderer: DropdownRenderer,\r\n cellRendererParams: {\r\n onClick: this.onBtnClick.bind(this),\r\n tooltip: res.tooltip,\r\n dropDownData: res.dropDownData,\r\n },\r\n onCellClicked: (e: any) => {\r\n e.node.setSelected(false);\r\n },\r\n width: 40,\r\n pinned: res.pinPosition,\r\n lockPinned: true,\r\n };\r\n } else if (res.columnType === 'date') {\r\n return {\r\n width:120,\r\n pinned: res.pinPosition,\r\n field: res.field,\r\n headerName: res.title,\r\n resizable: true,\r\n hide: this._getColumnVisiblityStatus(res, userRoles),\r\n sortable: true,\r\n tooltipField: res.field,\r\n floatingFilter: this.floatingFilter,\r\n floatingFilterComponent: DatepickerComponent,\r\n floatingFilterComponentParams: { \r\n suppressFilterButton: true,\r\n gridComponent: this,\r\n iconDisplay: res.iconDisplay\r\n },\r\n valueFormatter: (params: ValueFormatterParams) =>\r\n this.formatterService.colValueFormatter(\r\n params,\r\n res.columnType\r\n ),\r\n filterable: res.filterable,\r\n filter: 'agDateColumnFilter', \r\n filterParams: {\r\n comparator: (\r\n filterLocalDateAtMidnight: any,\r\n cellValue: any\r\n ) => {\r\n const dateAsString = cellValue;\r\n\r\n if (dateAsString == null) {\r\n return 0;\r\n }\r\n const cellDate = new Date(dateAsString);\r\n if (cellDate < filterLocalDateAtMidnight) {\r\n return -1;\r\n } else if (cellDate > filterLocalDateAtMidnight) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n },\r\n },\r\n };\r\n\r\n } else if (res.columnType === 'fill') {\r\n const hasConfiguredValues =\r\n (Array.isArray(res.filterValues) && res.filterValues.length > 0) ||\r\n (typeof res.fieldValue === 'string' && res.fieldValue.trim() !== '') ||\r\n (Array.isArray(res.fieldValue) && res.fieldValue.length > 0);\r\n const valueLabelMap = hasConfiguredValues ? this._buildFillValueLabelMap(res) : null;\r\n return {\r\n width: 120,\r\n pinned: res.pinPosition,\r\n field: res.field,\r\n headerName: res.title,\r\n resizable: true,\r\n hide: this._getColumnVisiblityStatus(res, userRoles),\r\n sortable: true,\r\n tooltipField: res.field,\r\n floatingFilter: this.floatingFilter,\r\n valueFormatter: (params: ValueFormatterParams) =>\r\n this.formatterService.colValueFormatter(\r\n params,\r\n res.columnType\r\n ),\r\n cellRenderer: FillCellRendererComponent,\r\n cellRendererParams: {\r\n field: res.field,\r\n },\r\n filterable: res.filterable,\r\n filter: hasConfiguredValues ? 'agSetColumnFilter' : 'agTextColumnFilter',\r\n filterParams: hasConfiguredValues\r\n ? {\r\n values: (params: any) => this._getFillFilterValues(res, params),\r\n refreshValuesOnOpen: true,\r\n defaultToNothingSelected: true,\r\n buttons: ['reset'],\r\n valueFormatter: (p: any) => {\r\n if (p?.value == null || p.value === '') return p?.value;\r\n return valueLabelMap?.get(String(p.value)) ?? p.value;\r\n },\r\n textFormatter: (v: any) =>\r\n v == null ? '' : String(v).trim().toLowerCase(),\r\n }\r\n : {\r\n comparator: (filterLocalDateAtMidnight: any, cellValue: any) => {\r\n if (cellValue == null) return 0;\r\n return 0;\r\n },\r\n buttons: ['reset'],\r\n },\r\n };\r\n } else {\r\n const colDef = {\r\n width: 120,\r\n pinned: res.pinPosition,\r\n field: res.field,\r\n headerName: res.title,\r\n resizable: true,\r\n hide: this._getColumnVisiblityStatus(res, userRoles),\r\n sortable: true,\r\n tooltipField: res.field,\r\n floatingFilter: this.floatingFilter,\r\n valueFormatter: (params: ValueFormatterParams) =>\r\n this.formatterService.colValueFormatter(\r\n params,\r\n res.columnType\r\n ),\r\n cellRenderer: CellRendererComponent,\r\n cellRendererParams: {\r\n field: res.field,\r\n },\r\n filterable: res.filterable,\r\n filter:\r\n res.columnType == 'date'\r\n ? 'agDateColumnFilter'\r\n : res.columnType == 'number'\r\n ? 'agNumberColumnFilter'\r\n : 'agTextColumnFilter',\r\n filterParams: {\r\n comparator: (\r\n filterLocalDateAtMidnight: any,\r\n cellValue: any\r\n ) => {\r\n const dateAsString = cellValue;\r\n\r\n if (dateAsString == null) {\r\n return 0;\r\n }\r\n if (res.columnType == 'date') {\r\n const cellDate = new Date(dateAsString);\r\n if (cellDate < filterLocalDateAtMidnight) {\r\n return -1;\r\n } else if (cellDate > filterLocalDateAtMidnight) {\r\n return 1;\r\n }\r\n }\r\n return 0;\r\n },\r\n buttons: ['reset'],\r\n },\r\n };\r\n\r\n if (res.field === 'entityCodeLife') {\r\n (colDef as any).cellRenderer = (params: any) => {\r\n const toolId = params.data?.toolId;\r\n const url = toolId ? `/home/tool/details/${toolId}/tracker` : '#';\r\n\r\n // Creating an a tag so we get the browser right-click context menu\r\n const a = document.createElement('a');\r\n a.textContent = params.value;\r\n a.href = url;\r\n a.target = '_self';\r\n a.style.cursor = 'pointer';\r\n\r\n a.addEventListener('click', (event: MouseEvent) => {\r\n if (toolId) {\r\n // Only intercept if not ctrl/cmd/right click\r\n if (!(event.ctrlKey || event.metaKey || event.button === 2)) {\r\n event.preventDefault();\r\n this.router.navigate([url]);\r\n }\r\n }\r\n });\r\n return a;\r\n };\r\n }\r\n return colDef;\r\n }\r\n } else {\r\n return {\r\n field: res.field,\r\n headerName: res.title,\r\n resizable: true,\r\n sortable: false,\r\n hide: this._getColumnVisiblityStatus(res, userRoles),\r\n suppressFilter: true,\r\n suppressSorting: true,\r\n suppressMenu: true,\r\n tooltipField: res.field,\r\n cellRenderer: ButtonRendererComponent,\r\n cellRendererParams: {\r\n onClick: this.onBtnClick.bind(this),\r\n label: res.label,\r\n icon: res.icon,\r\n buttonName: res.buttonName,\r\n tooltip: res.tooltip,\r\n },\r\n valueGetter: (params: any) => {\r\n return res.tooltip || res.title;\r\n },\r\n minWidth: 20,\r\n cellClass: 'action-button',\r\n pinned: res.pinPosition,\r\n lockPinned: true,\r\n width: res.label ? 100 : 40,\r\n };\r\n }\r\n });\r\n }\r\n\r\n private _getFillFilterValues(res: any, params: any): void {\r\n const configured = res?.filterValues;\r\n if (Array.isArray(configured) && configured.length > 0) {\r\n const values = configured\r\n .map((v: any) => (v && typeof v === 'object' ? (v.value ?? v.name ?? v.label) : v))\r\n .filter((v: any) => v !== null && v !== undefined && v !== '');\r\n params.success(values);\r\n return;\r\n }\r\n\r\n // Backend may provide allowed values as a comma-separated string in `fieldValue`\r\n const fieldValue = res?.fieldValue;\r\n if (typeof fieldValue === 'string' && fieldValue.trim() !== '') {\r\n const values = fieldValue\r\n .split(',')\r\n .map((v: string) => v.trim())\r\n .filter((v: string) => v !== '');\r\n if (values.length > 0) {\r\n params.success(values);\r\n return;\r\n }\r\n }\r\n if (Array.isArray(fieldValue) && fieldValue.length > 0) {\r\n const values = fieldValue\r\n .map((v: any) => (v && typeof v === 'object' ? (v.value ?? v.name ?? v.label) : v))\r\n .filter((v: any) => v !== null && v !== undefined && v !== '');\r\n if (values.length > 0) {\r\n params.success(values);\r\n return;\r\n }\r\n }\r\n\r\n const field = res?.field;\r\n if (this.enableServerSidePaging && this.odataProvider) {\r\n // Cache OData distinct-values per field so repeated filter-opens for\r\n // fill-cell columns don't re-hit the backend. Cache is invalidated on\r\n // grid data refresh (see _invalidateFillFilterCache).\r\n const cached = this._fillFilterValuesCache.get(field);\r\n if (cached) {\r\n params.success(cached);\r\n return;\r\n }\r\n try {\r\n this.odataProvider.getFilterValuesParams(\r\n field,\r\n (data: any[]) => {\r\n const cleaned = (data || []).filter(\r\n v => v !== null && v !== undefined && v !== ''\r\n );\r\n // Only cache non-empty successful responses so a transient\r\n // failure doesn't permanently stick an empty list.\r\n if (cleaned.length > 0) {\r\n this._fillFilterValuesCache.set(field, cleaned);\r\n }\r\n // Never leave the set-filter spinning: always invoke success,\r\n // even with an empty list.\r\n params.success(cleaned);\r\n },\r\n undefined as any\r\n );\r\n } catch (err) {\r\n console.error('[grid-library] getFilterValuesParams threw for field', field, err);\r\n params.success([]);\r\n }\r\n return;\r\n }\r\n\r\n const source: any[] = Array.isArray(this.rowData) ? this.rowData : [];\r\n const unique = Array.from(\r\n new Set(\r\n source\r\n .map(row => row?.[field])\r\n .filter(v => v !== null && v !== undefined && v !== '')\r\n )\r\n );\r\n params.success(unique);\r\n }\r\n\r\n private _buildFillValueLabelMap(res: any): Map<string, string> {\r\n const map = new Map<string, string>();\r\n const source = res?.filterValues ?? res?.fieldValue;\r\n\r\n const addObject = (obj: any) => {\r\n const value = obj?.value ?? obj?.key ?? obj?.id ?? obj?.name ?? obj?.label;\r\n const label = obj?.label ?? obj?.name ?? value;\r\n if (value !== null && value !== undefined && value !== '') {\r\n map.set(String(value), String(label));\r\n }\r\n };\r\n\r\n if (Array.isArray(source)) {\r\n source.forEach((entry: any) => {\r\n if (entry && typeof entry === 'object') addObject(entry);\r\n else if (entry !== null && entry !== undefined && entry !== '') {\r\n map.set(String(entry), String(entry));\r\n }\r\n });\r\n } else if (typeof source === 'string' && source.trim() !== '') {\r\n source.split(',').map(s => s.trim()).filter(Boolean).forEach(v => map.set(v, v));\r\n }\r\n\r\n return map;\r\n }\r\n\r\n canCreateDac(roles: any[], field: string): boolean {\r\n if (roles?.length > 0 && field === 'createDac') {\r\n const isAEGroup = this.userRoles.some((role) => role?.toLowerCase().includes('ae'));\r\n const isDesignManager = this.userRoles.includes(this._Design_Manager);\r\n return isAEGroup || isDesignManager ? true : false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n canViewDacStatus(roles: any[], field: string): boolean {\r\n if (roles?.length > 0 && field === 'dacStatus') {\r\n const isAEGroup = this.userRoles.some((role) => role?.toLowerCase().includes('ae'));\r\n const isIntegrationTeamGroup = this.userRoles.some((role) => role?.toLowerCase().includes('integration team'));\r\n const isIntegrationLead = this.userRoles.includes(this._Integration_Lead);\r\n const isToolOwner = this.userRoles.includes(this._Tool_Owner);\r\n const isAreaCoordinator = this.userRoles.includes(this._Area_Coordinator);\r\n const isDesignManager = this.userRoles.includes(this._Design_Manager);\r\n const isTiPm = this.userRoles.includes(this._TiPm);\r\n return !(isAEGroup || isIntegrationTeamGroup || isIntegrationLead || isToolOwner || isAreaCoordinator || isDesignManager || isTiPm);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n setExternalFilters(options: any) {\r\n // Extract any caller-supplied $filter predicate from the configured\r\n // serverDataUrl so we can merge it correctly with whatever the provider\r\n // built. Without this, requests like `$apply=groupby((dacStatus))` get a\r\n // sibling `$filter=siteId eq 5` appended, which OData rejects because\r\n // after `groupby` the only remaining property is the grouped one.\r\n let serverUrl = this.serverDataUrl;\r\n let externalFilter = '';\r\n const filterIdx = serverUrl.indexOf('$filter=');\r\n if (filterIdx >= 0) {\r\n // Find the end of the $filter value (next & or end of string).\r\n const after = serverUrl.indexOf('&', filterIdx);\r\n externalFilter = serverUrl.substring(\r\n filterIdx + '$filter='.length,\r\n after === -1 ? serverUrl.length : after\r\n );\r\n // Strip the $filter clause (and its leading ? or &) from the base URL.\r\n const before = serverUrl.charAt(filterIdx - 1); // '?' or '&'\r\n const removeStart = filterIdx - 1;\r\n const removeEnd = after === -1 ? serverUrl.length : after;\r\n serverUrl =\r\n serverUrl.substring(0, removeStart) +\r\n (before === '?' && after !== -1 ? '?' : '') +\r\n serverUrl.substring(removeEnd + (before === '?' && after !== -1 ? 1 : 0));\r\n }\r\n\r\n // `options` always starts with '?' from the provider.\r\n // If we still need to attach to a URL that already has '?', flip it to '&'.\r\n if (serverUrl.indexOf('?') >= 0 && options.startsWith('?')) {\r\n options = '&' + options.substring(1);\r\n }\r\n\r\n if (!externalFilter) {\r\n return `${serverUrl}${options}`;\r\n }\r\n\r\n // Decode for matching; we'll re-emit the predicate as-is since OData\r\n // accepts both encoded and decoded forms within a query string.\r\n const decodedFilter = (() => {\r\n try { return decodeURIComponent(externalFilter); } catch { return externalFilter; }\r\n })();\r\n\r\n // Case 1: provider used $apply (e.g. groupby for set-filter values, or\r\n // any aggregation). The external predicate must run BEFORE the aggregation\r\n // as a filter() transformation, otherwise its columns no longer exist.\r\n const applyMatch = options.match(/([?&])\\$apply=([^&]+)/);\r\n if (applyMatch) {\r\n const sep = applyMatch[1];\r\n const applyValue = applyMatch[2];\r\n const decodedApply = (() => {\r\n try { return decodeURIComponent(applyValue); } catch { return applyValue; }\r\n })();\r\n const merged = `filter(${decodedFilter})/${decodedApply}`;\r\n options = options.replace(\r\n `${sep}$apply=${applyValue}`,\r\n `${sep}$apply=${encodeURIComponent(merged)}`\r\n );\r\n return `${serverUrl}${options}`;\r\n }\r\n\r\n // Case 2: provider already has its own $filter. AND them together.\r\n const filterMatch = options.match(/([?&])\\$filter=([^&]+)/);\r\n if (filterMatch) {\r\n const sep = filterMatch[1];\r\n const existing = filterMatch[2];\r\n const decodedExisting = (() => {\r\n try { return decodeURIComponent(existing); } catch { return existing; }\r\n })();\r\n const merged = `(${decodedExisting}) and (${decodedFilter})`;\r\n options = options.replace(\r\n `${sep}$filter=${existing}`,\r\n `${sep}$filter=${encodeURIComponent(merged)}`\r\n );\r\n return `${serverUrl}${options}`;\r\n }\r\n\r\n // Case 3: no provider filter and no $apply — just add the external $filter.\r\n const joiner = options.length === 0\r\n ? (serverUrl.indexOf('?') >= 0 ? '&' : '?')\r\n : '&';\r\n return `${serverUrl}${options}${joiner}$filter=${encodeURIComponent(decodedFilter)}`;\r\n }\r\n\r\n onGridReady(params: GridReadyEvent) {\r\n this.gridAPI = params.api;\r\n\r\n if (this.enableServerSidePaging == true) {\r\n // Show loading overlay immediately when server-side paging is enabled\r\n this.gridAPI.showLoadingOverlay();\r\n\r\n //call api\r\n let reqHeaders = {\r\n 'Content-type': 'application/json',\r\n Accept: 'application/json',\r\n Authorization: 'Bearer ' + this.token,\r\n };\r\n\r\n // Add timeout to prevent infinite loading\r\n const API_TIMEOUT = 800000;//80 seconds\r\n let hasRetried = false;\r\n\r\n this.odataProvider = new OdataServerSideProvider({\r\n isCaseSensitiveStringFilter: false,\r\n callApi: (options) => {\r\n const url = this.setExternalFilters(options);\r\n console.log('Server-side API call:', url);\r\n localStorage.setItem('ServerSideUrl', url);\r\n const timeoutPromise = new Promise((_, reject) => {\r\n setTimeout(() => reject(new Error('API request timeout')), API_TIMEOUT);\r\n });\r\n\r\n const fetchPromise = fetch(url, {\r\n headers: reqHeaders,\r\n })\r\n .then((response) => {\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n return response.json();\r\n });\r\n\r\n return Promise.race([fetchPromise, timeoutPromise])\r\n .catch((error) => {\r\n console.error('Server-side API error:', error);\r\n this.gridAPI.hideOverlay();\r\n this.gridAPI.setGridOption('noRowsOverlayComponentParams', { apiIssue: true });\r\n this.gridAPI.showNoRowsOverlay();\r\n\r\n // Try fetching data again after 2 seconds, but only 1 time\r\n if (!hasRetried) {\r\n hasRetried = true;\r\n setTimeout(() => {\r\n this._fillFilterValuesCache.clear();\r\n params.api.refreshServerSide({ purge: true });\r\n }, 2000);\r\n }\r\n\r\n throw error;\r\n });\r\n },\r\n afterLoadData: (options, rowData, totalCount) => {\r\n this.totalRowCount.emit(totalCount);\r\n setTimeout(() => {\r\n if (!rowData || rowData.length <= 0) {\r\n this.gridAPI.setGridOption('noRowsOverlayComponentParams', {});\r\n this.gridAPI.showNoRowsOverlay();\r\n\r\n // Try fetching data again after 2 seconds, but only 1 time\r\n if (!hasRetried) {\r\n hasRetried = true;\r\n setTimeout(() => {\r\n this._fillFilterValuesCache.clear();\r\n this.gridAPI.refreshServerSide({ purge: true });\r\n }, 2000);\r\n }\r\n } else {\r\n hasRetried = false;\r\n this.gridAPI.hideOverlay();\r\n }\r\n }, 100);\r\n },\r\n setError: (error, params) => {\r\n let overlayParams = this.gridAPI.getGridOption('noRowsOverlayComponentParams');\r\n if (!overlayParams || !overlayParams?.apiIssue) {\r\n this.gridAPI.setGridOption('noRowsOverlayComponentParams', { networkIssue: true });\r\n } else {\r\n this.gridAPI.setGridOption('noRowsOverlayComponentParams', overlayParams);\r\n }\r\n this.gridAPI.hideOverlay();\r\n this.gridAPI.showNoRowsOverlay();\r\n }\r\n });\r\n params.api.setServerSideDatasource(this.odataProvider);\r\n\r\n this.gridReady.emit(params);\r\n }\r\n\r\n // Apply initial filter highlighting with retry mechanism\r\n this.applyFilterHighlightingWithRetry();\r\n\r\n // Event listeners for highlighting\r\n if (this.floatingFilter) {\r\n this.setupFilterInputListeners();\r\n }\r\n\r\n // Setup date input listeners for calendar icon styling\r\n this.setupDateInputListeners();\r\n }\r\n\r\n setGridState() {\r\n if (this.gridColumns && this.gridColumns.length > 0) {\r\n var arrIndex = this.gridColumns.findIndex((x: any) => x.field == \"createDac\");\r\n\r\n if (this.gridId == 1 && !this.canCreateDac(this.userRoles, \"createDac\")) {\r\n if (arrIndex > -1)\r\n this.gridColumns.splice(arrIndex, 1);\r\n\r\n var dacStatusIndex = this.gridColumns.findIndex((x: any) => x.field == \"dacStatus\");\r\n if (dacStatusIndex > -1)\r\n this.gridColumns.splice(dacStatusIndex, 1);\r\n this.columnDefs = this.gridColumns;\r\n }\r\n if (this.gridId == 1 && this.canCreateDac(this.userRoles, \"createDac\")) {\r\n this.gridColumns[arrIndex].hide = false;\r\n }\r\n this.columnDefs = this.gridColumns;\r\n }\r\n if (this.gridColumnState) {\r\n this.gridAPI?.applyColumnState({ state: this.gridColumnState.columnSizing?.columnSizingModel, applyOrder: true });\r\n if (this.gridColumnState.sort) {\r\n this.gridAPI?.applyColumnState({ state: this.gridColumnState.sort.sortModel })\r\n }\r\n if (this.gridColumnState.filter) {\r\n var filterModel: any = this.gridColumnState.filter.filterModel;\r\n this.gridAPI?.setFilterModel(filterModel);\r\n // Apply highlighting after setting filter model\r\n setTimeout(() => this.updateFilteredColumnHighlighting(), 100);\r\n }\r\n if (this.gridColumnState.columnVisibility) {\r\n var hiddenColumns: any = this.gridColumnState.columnVisibility.hiddenColIds;\r\n this.gridAPI?.setColumnsVisible(hiddenColumns, false);\r\n }\r\n this.applyPinnedColumnState(this.gridColumnState);\r\n }\r\n }\r\n\r\n applyPinnedColumnState(gridState: any) {\r\n const pinnedMap: Record<string, 'left' | 'right'> = {};\r\n\r\n for (const colId of gridState.columnPinning?.leftColIds || []) {\r\n pinnedMap[colId] = 'left';\r\n }\r\n for (const colId of gridState.columnPinning?.rightColIds || []) {\r\n pinnedMap[colId] = 'right';\r\n }\r\n\r\n // Create a map of column widths\r\n const widthMap = new Map(\r\n (gridState.columnSizing?.columnSizingModel || []).map((c: any) => [c.colId, c.width])\r\n );\r\n\r\n // Merge all into a final state array\r\n const columnState: ColumnState[] = (gridState.columnOrder?.orderedColIds || []).map((colId: string) => ({\r\n colId: colId,\r\n pinned: pinnedMap[colId] || null,\r\n width: widthMap.get(colId),\r\n hide: gridState.columnVisibility?.hiddenColIds?.includes(colId) || false,\r\n }));\r\n\r\n // Apply the full column state\r\n this.gridAPI.applyColumnState({\r\n state: columnState,\r\n applyOrder: true\r\n });\r\n }\r\n\r\n overrideGridState(overrideStateData: any) {\r\n this.gridAPI.showLoadingOverlay();\r\n this.gridAPI.resetColumnState();\r\n this.gridAPI.setFilterModel(null);\r\n this._fillFilterValuesCache.clear();\r\n this.gridColumnState = JSON.parse(overrideStateData);\r\n this.setGridState();\r\n setTimeout(() => { this.gridAPI.hideOverlay(); }, 500);\r\n\r\n }\r\n defaultGridState: any;\r\n gridStateLoaded: boolean = false;\r\n gridStateLoaded$ = new Subject<boolean>();\r\n getGridState() {\r\n\r\n this.gridStateLoaded = false;\r\n if (this.gridId && this.loggedInUser) {\r\n this.gridService\r\n .getGridState(this.gridId, this.loggedInUser, this.siteId)\r\n .pipe(takeUntil(this.unsubscribe$))\r\n .subscribe((response: any) => {\r\n if (\r\n response.status == 1 &&\r\n response.result &&\r\n response.result.gridConfig\r\n ) {\r\n\r\n this.defaultGridState = JSON.parse(response.result.gridConfig);\r\n\r\n this.gridAPI.showLoadingOverlay();\r\n this.gridColumnState = JSON.parse(response.result.gridConfig);\r\n this.setGridState(); \r\n\r\n } else {\r\n console.log('no grid state found.');\r\n }\r\n setTimeout(() => { this.gridStateLoaded = true; this.gridAPI.hideOverlay(); }, 1000);\r\n\r\n if (this.overrideColumnDefs != null && this.overrideColumnDefs != undefined) {\r\n this.gridStateLoaded$.next(true);\r\n }\r\n\r\n });\r\n }\r\n }\r\n\r\n onBtnClick(e: any) {\r\n if(e.event.ctrlKey || e.event.metaKey){\r\n e.event.preventDefault(); // Ignore ctrl/cmd click\r\n }\r\n this.btnClickHandler.emit(e.rowData);\r\n }\r\n\r\n private __debounceGridSaveHit: any = null;\r\n onSaveGridColumnState(event: any) {\r\n\r\n if (this.isOverride || !this.gridStateLoaded) { return; }\r\n if (this.__debounceGridSaveHit) {\r\n clearTimeout(this.__debounceGridSaveHit);\r\n }\r\n\r\n this.__debounceGridSaveHit = setTimeout(() => {\r\n let columnState = this.gridAPI?.getState();\r\n let columnData = {\r\n gridConfig: JSON.stringify(columnState),\r\n uiGridId: this.gridId,\r\n userId: this.loggedInUser,\r\n siteId: this.siteId\r\n };\r\n if (event.type === 'columnPinned' || (event.type === 'filterChanged' || event.type === 'sortChanged') || event.type === 'columnResized' || event.type === 'columnMoved' || event.type === 'columnVisible') {\r\n this.gridColumnState = columnState;\r\n this.gridService.saveColumnConfig(columnData)\r\n .pipe(takeUntil(this.unsubscribe$))\r\n .subscribe((res: any) => {\r\n if (res.status == 0) {\r\n console.log('Error while saving column configuration:', res.message);\r\n }\r\n });\r\n }\r\n this.__debounceGridSaveHit = null;\r\n }, 1000);\r\n }\r\n\r\n\r\n getRowById: GetRowIdFunc = (params: GetRowIdParams) => {\r\n var data = params.data;\r\n return data.id ?? 0;\r\n };\r\n\r\n // Custom right click Context Menu to support custom excel exports\r\n public getContextMenuItems = (\r\n params: GetContextMenuItemsParams\r\n ): (string | MenuItemDef)[] => {\r\n return [];\r\n let res: (string | MenuItemDef)[] = [\r\n 'cut',\r\n 'copy',\r\n 'copyWithHeaders',\r\n 'copyWithGroupHeaders',\r\n 'paste',\r\n {\r\n name: 'Export',\r\n subMenu: [\r\n {\r\n name: 'CSV Export',\r\n action: () => {\r\n this.exportFile('csv');\r\n },\r\n },\r\n {\r\n name: 'Excel Export',\r\n action: () => {\r\n this.exportFile('xlsx');\r\n },\r\n },\r\n ],\r\n },\r\n ];\r\n return res;\r\n };\r\n\r\n //custom export method\r\n public exportFile(type: string = 'xlsx') {\r\n this.getDataForExcelExport(type);\r\n }\r\n //Generate only those columns for export which are visible and are not of other types that are not required for export\r\n generateColumnsForExcel(): string[] {\r\n let columnsToBeDisplayedForExcel: any = [];\r\n this.exportColumnsList.forEach((column: any) => {\r\n if (\r\n column.visible == true &&\r\n !this._isColumnRestricted(column.field) &&\r\n column.columnType != 'checkbox' &&\r\n column.columnType != 'dropdown' &&\r\n column.columnType != ''\r\n ) {\r\n columnsToBeDisplayedForExcel.push(column.field);\r\n }\r\n });\r\n return columnsToBeDisplayedForExcel;\r\n }\r\n\r\n //Get data from server without paging so that whole data can be exported to excel\r\n // and also check for server side and client side rendering of data for export.\r\n getDataForExcelExport(type: string) {\r\n this.gridAPI.showLoadingOverlay();\r\n if (this.enableServerSidePaging) {\r\n // Ensure date filters are replaced in the export URL\r\n let exportUrl = this.serverDataUrl;\r\n // If there is a $filter param, decode, replace, and re-encode it to prevent double filtering\r\n if (exportUrl.includes('$filter=')) {\r\n const filterMatch = exportUrl.match(/\\$filter=([^&]*)/);\r\n if (filterMatch) {\r\n let filterValue = decodeURIComponent(filterMatch[1]);\r\n filterValue = this.replaceDateFilters(filterValue);\r\n exportUrl = exportUrl.replace(/\\$filter=[^&]*/, `$filter=${encodeURIComponent(filterValue)}`);\r\n }\r\n }\r\n this.gridService\r\n .getDataForExport(exportUrl)\r\n .pipe(takeUntil(this.unsubscribe$))\r\n .subscribe((response: any) => {\r\n this.gridAPI.hideOverlay();\r\n if (response && response.value.length > 0) {\r\n this.excelAPI.setRowData(response.value);\r\n this.excelAPI.sizeColumnsToFit();\r\n if (type == 'csv') {\r\n this.excelAPI.exportDataAsCsv({\r\n columnKeys: this.generateColumnsForExcel(),\r\n });\r\n } else {\r\n this.excelAPI.exportDataAsExcel({\r\n columnKeys: this.generateColumnsForExcel(),\r\n });\r\n }\r\n } else {\r\n console.log('Error while fetching data for excel/csv export');\r\n }\r\n });\r\n } else {\r\n this.gridAPI.hideOverlay();\r\n if (type == 'csv') {\r\n this.gridAPI.exportDataAsCsv({\r\n columnKeys: this.generateColumnsForExcel(),\r\n });\r\n } else {\r\n this.gridAPI.exportDataAsExcel({\r\n columnKeys: this.generateColumnsForExcel(),\r\n });\r\n }\r\n }\r\n }\r\n\r\n onSelectionChanged(e: any) {\r\n this.selectionChanged.emit(e);\r\n }\r\n\r\n onFilterChanged(e: any) {\r\n this.saveGridState(e);\r\n this.filterChanged.emit(e);\r\n this.updateFilteredColumnHighlighting();\r\n console.log('Filter changed:', e);\r\n }\r\n\r\n public clearFilterInputHighlighting() {\r\n if (!this.floatingFilter || !this.gridAPI) return;\r\n\r\n const allSelectors = [\r\n '.ag-floating-filter-body input',\r\n '.ag-floating-filter-body .ag-input-field-input',\r\n '.ag-floating-filter-body .ag-text-field-input',\r\n '.ag-floating-filter-body .ag-number-field-input',\r\n '.ag-floating-filter-body .ag-date-field-input',\r\n '.ag-floating-filter-body .ag-select-field-input',\r\n '.ag-floating-filter input',\r\n '.ag-floating-filter .ag-input-field-input',\r\n '.ag-floating-filter .ag-text-field-input',\r\n '.ag-floating-filter .ag-number-field-input',\r\n '.ag-floating-filter .ag-date-field-input',\r\n '.ag-floating-filter .ag-select-field-input'\r\n ];\r\n\r\n allSelectors.forEach(selector => {\r\n const inputs = document.querySelectorAll(selector);\r\n inputs.forEach((input: Element) => {\r\n const inputElement = input as HTMLInputElement;\r\n \r\n if (inputElement.value !== undefined) {\r\n inputElement.value = '';\r\n }\r\n \r\n // Remove highlighting\r\n inputElement.classList.remove('ag-filter-input-active');\r\n \r\n const inputEvent = new Event('input', { bubbles: true });\r\n const changeEvent = new Event('change', { bubbles: true });\r\n inputElement.dispatchEvent(inputEvent);\r\n inputElement.dispatchEvent(changeEvent);\r\n });\r\n });\r\n\r\n const filterContainers = document.querySelectorAll('.ag-floating-filter-body, .ag-floating-filter');\r\n filterContainers.forEach(container => {\r\n container.classList.remove('ag-filter-input-active');\r\n });\r\n\r\n setTimeout(() => {\r\n if (this.gridAPI) {\r\n this.gridAPI.redrawRows();\r\n }\r\n }, 50);\r\n }\r\n\r\n public handleExternalFilterReset() {\r\n if (!this.gridAPI) return;\r\n\r\n // Clear all filter inputs and highlighting\r\n this.clearFilterInputHighlighting();\r\n \r\n // Force ag-grid to refresh all filter components with retry mechanism\r\n setTimeout(() => {\r\n if (this.gridAPI) {\r\n this.gridAPI.refreshHeader();\r\n // Use robust highlighting approach\r\n this.applyFilterHighlightingWithRetry();\r\n this.gridAPI.redrawRows();\r\n }\r\n }, 100);\r\n }\r\n\r\n // Public method to force refresh of filter highlighting (can be called externally when needed)\r\n public refreshFilterHighlighting() {\r\n this.applyFilterHighlightingWithRetry();\r\n }\r\n\r\n onFirstDataRendered(e: any) {\r\n const storedPageNumber = localStorage.getItem('pageNumber');\r\n this.pageNumber = storedPageNumber ? parseInt(storedPageNumber) : 0;\r\n if (this.pageNumber >= 1) {\r\n this.gridAPI.paginationGoToPage(this.pageNumber);\r\n }\r\n this.dataLoaded = true;\r\n\r\n setTimeout(() => this.updatePaginationInfo(), 0);\r\n setTimeout(() => this.applyFilterHighlightingWithRetry(), 100);\r\n\r\n this.setPageSizeMinusOne(e.api);\r\n\r\n this.firstDataRendered.emit(e);\r\n }\r\n\r\n onGridReadyExcel(params: any) {\r\n this.excelAPI = params.api;\r\n }\r\n //Custom Pagination starts here ================############################================================\r\n\r\n onPaginationChanged = (params: PaginationChangedEvent) => {\r\n if (this.gridAPI && this.dataLoaded) {\r\n this.gridAPI!.deselectAll();\r\n const currentPage = this.gridAPI.paginationGetCurrentPage();\r\n localStorage.setItem('pageNumber', currentPage.toString());\r\n\r\n setTimeout(() => this.updatePaginationInfo(), 0);\r\n }\r\n };\r\n\r\n private updatePaginationInfo() {\r\n if (!this.gridAPI) return;\r\n\r\n // Get all pagination info at once to minimize grid API calls\r\n const currentPage = this.gridAPI.paginationGetCurrentPage() + 1;\r\n const totalPages = this.gridAPI.paginationGetTotalPages();\r\n const totalRows = this.gridAPI.paginationGetRowCount();\r\n const pageSize = this.gridAPI.paginationGetPageSize();\r\n\r\n // Update component state\r\n this.currentPage = currentPage;\r\n this.totalPages = totalPages;\r\n this.totalRows = totalRows;\r\n this.pageSize = pageSize;\r\n\r\n // Calculate derived values\r\n this.startRow = (this.currentPage - 1) * this.pageSize + 1;\r\n this.endRow = Math.min(this.currentPage * this.pageSize, this.totalRows);\r\n this.isFirstPage = this.currentPage === 1;\r\n this.isLastPage = this.currentPage === this.totalPages;\r\n\r\n // Update page numbers array\r\n this.updatePageNumbers();\r\n }\r\n\r\n private updatePageNumbers() {\r\n this.pageNumbers = [];\r\n\r\n if (this.totalPages <= 7) {\r\n // Show all pages if 7 or fewer\r\n for (let i = 1; i <= this.totalPages; i++) {\r\n this.pageNumbers.push(i);\r\n }\r\n } else {\r\n // Always show first page\r\n this.pageNumbers.push(1);\r\n\r\n // Show ellipsis if not near the beginning\r\n if (this.currentPage > 3) {\r\n this.pageNumbers.push('...');\r\n }\r\n\r\n // Calculate range of pages to show around current page\r\n let startPage = Math.max(2, this.currentPage - 1);\r\n let endPage = Math.min(this.totalPages - 1, this.currentPage + 1);\r\n\r\n // Adjust range to show at least 3 pages when possible\r\n if (startPage === 2) endPage = Math.min(4, this.totalPages - 1);\r\n if (endPage === this.totalPages - 1) startPage = Math.max(2, this.totalPages - 3);\r\n\r\n // Add the range of pages\r\n for (let i = startPage; i <= endPage; i++) {\r\n this.pageNumbers.push(i);\r\n }\r\n\r\n // Show ellipsis if not near the end\r\n if (this.currentPage < this.totalPages - 2) {\r\n this.pageNumbers.push('...');\r\n }\r\n\r\n // Always show last page\r\n this.pageNumbers.push(this.totalPages);\r\n }\r\n }\r\n\r\n goToPage(page: number | string) {\r\n if (typeof page === 'number' && this.gridAPI) {\r\n this.gridAPI.paginationGoToPage(page - 1);\r\n }\r\n }\r\n\r\n onPreviousPage() {\r\n if (!this.isFirstPage && this.gridAPI) {\r\n this.gridAPI.paginationGoToPreviousPage();\r\n }\r\n }\r\n\r\n onNextPage() {\r\n if (!this.isLastPage && this.gridAPI) {\r\n this.gridAPI.paginationGoToNextPage();\r\n }\r\n }\r\n //custom pagination ends...\r\n\r\n private updateFilteredColumnHighlighting() {\r\n if (!this.gridAPI) return;\r\n\r\n try {\r\n const filterModel = this.gridAPI.getFilterModel();\r\n const allColumns = this.gridAPI.getColumns();\r\n\r\n if (allColumns) {\r\n allColumns.forEach((column: any) => {\r\n const columnId = column.getColId();\r\n const isFiltered = filterModel && filterModel[columnId];\r\n\r\n // Update header highlighting\r\n const headerElement = document.querySelector(`[col-id=\"${columnId}\"]`);\r\n if (headerElement) {\r\n if (isFiltered) {\r\n headerElement.classList.add('ag-header-cell-filtered');\r\n } else {\r\n headerElement.classList.remove('ag-header-cell-filtered');\r\n }\r\n }\r\n\r\n // Update filter input highlighting\r\n this.highlightFilterInputs(columnId, isFiltered);\r\n });\r\n }\r\n\r\n // Clear all highlighting when no filter model\r\n if (!filterModel || Object.keys(filterModel).length === 0) {\r\n this.clearFilterInputHighlighting();\r\n }\r\n\r\n this.ensureAllValuedInputsAreHighlighted();\r\n } catch (error) {\r\n console.warn('Error updating filter highlighting:', error);\r\n }\r\n }\r\n\r\n private ensureAllValuedInputsAreHighlighted() {\r\n if (!this.floatingFilter) return;\r\n\r\n const allFilterInputs = document.querySelectorAll(`\r\n .ag-floating-filter-body input,\r\n .ag-floating-filter-body .ag-input-field-input,\r\n .ag-floating-filter-body .ag-text-field-input,\r\n .ag-floating-filter-body .ag-number-field-input,\r\n .ag-floating-filter-body .ag-date-field-input,\r\n .ag-floating-filter-body .ag-select-field-input,\r\n .ag-floating-filter input,\r\n .ag-floating-filter .ag-input-field-input,\r\n .ag-floating-filter .ag-text-field-input,\r\n .ag-floating-filter .ag-number-field-input,\r\n .ag-floating-filter .ag-date-field-input,\r\n .ag-floating-filter .ag-select-field-input\r\n `);\r\n\r\n allFilterInputs.forEach((input: Element) => {\r\n const inputElement = input as HTMLInputElement;\r\n \r\n if (inputElement.value && inputElement.value.trim() !== '') {\r\n inputElement.classList.add('ag-filter-input-active');\r\n } else {\r\n inputElement.classList.remove('ag-filter-input-active');\r\n }\r\n });\r\n }\r\n\r\n // Highlight filter inputs when they have values\r\n private highlightFilterInputs(columnId: string, isFiltered: boolean) {\r\n if (!this.floatingFilter) return;\r\n\r\n const selectors = [\r\n `[col-id=\"${columnId}\"] .ag-floating-filter-body input`,\r\n `[col-id=\"${columnId}\"] .ag-floating-filter-body .ag-input-field-input`,\r\n `[col-id=\"${columnId}\"] .ag-floating-filter-body .ag-text-field-input`,\r\n `[col-id=\"${columnId}\"] .ag-floating-filter-body .ag-number-field-input`,\r\n `[col-id=\"${columnId}\"] .ag-floating-filter-body .ag-date-field-input`,\r\n `[col-id=\"${columnId}\"] .ag-floating-filter-body .ag-select-field-input`\r\n ];\r\n\r\n selectors.forEach(selector => {\r\n const inputs = document.querySelectorAll(selector);\r\n inputs.forEach((input: Element) => {\r\n const inputElement = input as HTMLInputElement;\r\n\r\n if (isFiltered) {\r\n inputElement.classList.add('ag-filter-input-active');\r\n } else {\r\n inputElement.classList.remove('ag-filter-input-active');\r\n }\r\n });\r\n });\r\n\r\n // Check for filter values in the filter model\r\n if (isFiltered) {\r\n const filterModel = this.gridAPI.getFilterModel();\r\n const columnFilter = filterModel[columnId];\r\n\r\n if (columnFilter) {\r\n const hasValue = this.filterHasValue(columnFilter);\r\n\r\n if (hasValue) {\r\n const valueInputs = document.querySelectorAll(`[col-id=\"${columnId}\"] .ag-floating-filter-body input[value], [col-id=\"${columnId}\"] .ag-floating-filter-body .ag-input-field-input[value]`);\r\n valueInputs.forEach((input: Element) => {\r\n const inputElement = input as HTMLInputElement;\r\n if (inputElement.value && inputElement.value.trim() !== '') {\r\n inputElement.classList.add('ag-filter-input-active');\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n private filterHasValue(filter: any): boolean {\r\n if (!filter) return false;\r\n\r\n if (filter.filter) {\r\n return filter.filter !== '' && filter.filter !== null && filter.filter !== undefined;\r\n }\r\n\r\n if (filter.condition1 && filter.condition1.filter) {\r\n return filter.condition1.filter !== '' && filter.condition1.filter !== null && filter.condition1.filter !== undefined;\r\n }\r\n\r\n if (filter.condition2 && filter.condition2.filter) {\r\n return filter.condition2.filter !== '' && filter.condition2.filter !== null && filter.condition2.filter !== undefined;\r\n }\r\n\r\n if (filter.dateFrom || filter.dateTo) {\r\n return (filter.dateFrom && filter.dateFrom !== '') || (filter.dateTo && filter.dateTo !== '');\r\n }\r\n\r\n if (filter.filterTo || filter.filterFrom) {\r\n return (filter.filterFrom !== null && filter.filterFrom !== undefined && filter.filterFrom !== '') ||\r\n (filter.filterTo !== null && filter.filterTo !== undefined && filter.filterTo !== '');\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private setupFilterInputListeners() {\r\n if (this.filterHighlightingObserver) {\r\n this.filterHighlightingObserver.disconnect();\r\n }\r\n\r\n const observer = new MutationObserver((mutations) => {\r\n let shouldUpdateHighlighting = false;\r\n \r\n mutations.forEach((mutation) => {\r\n mutation.addedNodes.forEach((node) => {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const element = node as Element;\r\n \r\n if (element.classList.contains('ag-floating-filter-body') || \r\n element.classList.contains('ag-floating-filter') ||\r\n element.querySelector('.ag-floating-filter-body, .ag-floating-filter')) {\r\n shouldUpdateHighlighting = true;\r\n }\r\n \r\n this.addInputListenersToElement(element);\r\n\r\n // Check child elements\r\n const inputs = element.querySelectorAll('input, .ag-input-field-input, .ag-text-field-input, .ag-number-field-input, .ag-date-field-input, .ag-select-field-input');\r\n inputs.forEach(input => this.addInputListener(input as HTMLInputElement));\r\n }\r\n });\r\n });\r\n\r\n // Update highlighting if filter elements were added\r\n if (shouldUpdateHighlighting) {\r\n setTimeout(() => this.updateFilteredColumnHighlighting(), 50);\r\n }\r\n });\r\n\r\n this.filterHighlightingObserver = observer;\r\n\r\n // Observe the entire document body to catch all changes\r\n const gridContainer = document.querySelector('.ag-root-wrapper') || document.body;\r\n if (gridContainer) {\r\n observer.observe(gridContainer, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: ['class', 'style']\r\n });\r\n }\r\n\r\n this.applyListenersToExistingInputs();\r\n }\r\n\r\n private applyListenersToExistingInputs() {\r\n const selectors = [\r\n '.ag-floating-filter-body input',\r\n '.ag-floating-filter-body .ag-input-field-input',\r\n '.ag-floating-filter-body .ag-text-field-input',\r\n '.ag-floating-filter-body .ag-number-field-input',\r\n '.ag-floating-filter-body .ag-date-field-input',\r\n '.ag-floating-filter-body .ag-select-field-input',\r\n '.ag-floating-filter input',\r\n '.ag-floating-filter .ag-input-field-input',\r\n '.ag-floating-filter .ag-text-field-input',\r\n '.ag-floating-filter .ag-number-field-input',\r\n '.ag-floating-filter .ag-date-field-input',\r\n '.ag-floating-filter .ag-select-field-input'\r\n ];\r\n\r\n let attempts = 0;\r\n const maxAttempts = 5;\r\n const attemptInterval = 200;\r\n\r\n const attemptToApplyListeners = () => {\r\n const existingInputs = document.querySelectorAll(selectors.join(', '));\r\n \r\n if (existingInputs.length > 0) {\r\n existingInputs.forEach(input => this.addInputListener(input as HTMLInputElement));\r\n // update highlighting for existing inputs\r\n setTimeout(() => this.updateFilteredColumnHighlighting(), 50);\r\n return;\r\n }\r\n\r\n if (attempts < maxAttempts) {\r\n attempts++;\r\n setTimeout(attemptToApplyListeners, attemptInterval * attempts);\r\n }\r\n };\r\n\r\n attemptToApplyListeners();\r\n }\r\n\r\n private addInputListenersToElement(element: Element) {\r\n const inputs = element.querySelectorAll('input, .ag-input-field-input, .ag-text-field-input, .ag-number-field-input, .ag-date-field-input, .ag-select-field-input');\r\n inputs.forEach(input => this.addInputListener(input as HTMLInputElement));\r\n }\r\n\r\n private addInputListener(input: HTMLInputElement) {\r\n if (!input) return;\r\n\r\n const highlightInput = () => {\r\n if (input.value && input.value.trim() !== '') {\r\n input.classList.add('ag-filter-input-active');\r\n } else {\r\n input.classList.remove('ag-filter-input-active');\r\n }\r\n };\r\n\r\n input.addEventListener('input', highlightInput);\r\n input.addEventListener('change', highlightInput);\r\n input.addEventListener('keyup', highlightInput);\r\n input.addEventListener('paste', highlightInput);\r\n\r\n // First check\r\n highlightInput();\r\n }\r\n\r\n private filterHighlightingObserver: MutationObserver | null = null;\r\n private filterHighlightingRetryCount = 0;\r\n private readonly MAX_RETRY_ATTEMPTS = 10;\r\n private readonly RETRY_DELAY = 200;\r\n\r\n private applyFilterHighlightingWithRetry() {\r\n this.filterHighlightingRetryCount = 0;\r\n this.attemptFilterHighlighting();\r\n }\r\n\r\n private attemptFilterHighlighting() {\r\n if (!this.gridAPI) {\r\n this.scheduleRetry();\r\n return;\r\n }\r\n\r\n // Check if grid is ready/has columns\r\n const columns = this.gridAPI.getColumns();\r\n if (!columns || columns.length === 0) {\r\n this.scheduleRetry();\r\n return;\r\n }\r\n\r\n // Check if filter elements exist\r\n const filterElements = document.querySelectorAll('.ag-floating-filter-body, .ag-floating-filter');\r\n if (filterElements.length === 0) {\r\n this.scheduleRetry();\r\n return;\r\n }\r\n\r\n this.updateFilteredColumnHighlighting();\r\n \r\n this.setupFilterInputListeners();\r\n \r\n this.filterHighlightingRetryCount = 0;\r\n }\r\n\r\n private scheduleRetry() {\r\n if (this.filterHighlightingRetryCount < this.MAX_RETRY_ATTEMPTS) {\r\n this.filterHighlightingRetryCount++;\r\n setTimeout(() => {\r\n this.attemptFilterHighlighting();\r\n }, this.RETRY_DELAY * this.filterHighlightingRetryCount);\r\n } else {\r\n console.warn('Filter highlighting retry limit reached. Some filter inputs may not be highlighted.');\r\n }\r\n }\r\n\r\n onGridSizeChanged(params:any) {\r\n this.setPageSizeMinusOne(params.api);\r\n }\r\n\r\n setPageSizeMinusOne(api: any) {\r\n // 1. Get row height (public API)\r\n const rowHeight = api.getSizesForCurrentTheme().rowHeight;\r\n\r\n // 2. Query the body viewport DOM (safe, it's always rendered)\r\n const viewportEl = document.querySelector('.ag-body-viewport');\r\n\r\n if (viewportEl && rowHeight > 0) {\r\n const rowsThatFit = Math.floor(viewportEl.clientHeight / rowHeight);\r\n api.paginationSetPageSize(Math.max(rowsThatFit - 1, 1)); // avoid 0\r\n }\r\n }\r\n\r\n //destroy all associated subscriptions on component destroy\r\n ngOnDestroy() {\r\n if (this.filterHighlightingObserver) {\r\n this.filterHighlightingObserver.disconnect();\r\n this.filterHighlightingObserver = null;\r\n }\r\n\r\n this.unsubscribe$.next();\r\n this.unsubscribe$.complete();\r\n }\r\n\r\n private setupDateInputListeners() {\r\n const setupListeners = () => {\r\n const dateInputs = document.querySelectorAll('.shared-grid-lib input[type=\"date\"], .shared-grid-lib .ag-date-field-input');\r\n dateInputs.forEach((input) => {\r\n const dateInput = input as HTMLInputElement;\r\n \r\n // Check initial value\r\n if (dateInput.value) {\r\n dateInput.classList.add('has-value');\r\n } else {\r\n dateInput.classList.remove('has-value');\r\n }\r\n \r\n // Listen for value changes\r\n dateInput.addEventListener('input', (e) => {\r\n const target = e.target as HTMLInputElement;\r\n if (target.value) {\r\n target.classList.add('has-value');\r\n } else {\r\n target.classList.remove('has-value');\r\n }\r\n });\r\n\r\n // Listen for change events (for programmatic changes)\r\n dateInput.addEventListener('change', (e) => {\r\n const target = e.target as HTMLInputElement;\r\n if (target.value) {\r\n target.classList.add('has-value');\r\n } else {\r\n target.classList.remove('has-value');\r\n }\r\n });\r\n });\r\n };\r\n\r\n setupListeners();\r\n\r\n // Setup observer for dynamically added date inputs\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.type === 'childList') {\r\n mutation.addedNodes.forEach((node) => {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const element = node as Element;\r\n const dateInputs = element.querySelectorAll('input[type=\"date\"], .ag-date-field-input');\r\n if (dateInputs.length > 0) {\r\n setupListeners();\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n // Start observing the grid container\r\n const gridContainer = document.querySelector('.shared-grid-lib');\r\n if (gridContainer) {\r\n observer.observe(gridContainer, {\r\n childList: true,\r\n subtree: true\r\n });\r\n }\r\n\r\n this.unsubscribe$.subscribe(() => {\r\n observer.disconnect();\r\n });\r\n }\r\n @HostListener('window:resize')\r\n onResize() {\r\n if (this.gridAPI) {\r\n this.setPageSizeMinusOne(this.gridAPI);\r\n }\r\n }\r\n\r\n private replaceDateFilters(filterValue: string): string {\r\n function toUtcIso(dateStr: string, hour: number, min: number, sec: number) {\r\n const local = new Date(`${dateStr}T${String(hour).padStart(2, '0')}:${String(min).padStart(2, '0')}:${String(sec).padStart(2, '0')}`);\r\n return local.toISOString().replace('.000Z', 'Z');\r\n }\r\n\r\n return filterValue.replace(\r\n /\\b(dateRaised|dacCreatedDate)\\s+(ge|gt|le|lt|eq)\\s+([0-9]{4}-[0-9]{2}-[0-9]{2})/gi,\r\n (match, field, op, dateStr) => {\r\n let before = match;\r\n let after = match;\r\n if (op.toLowerCase() === 'ge' || op.toLowerCase() === 'gt') {\r\n const utcStart = toUtcIso(dateStr, 0, 0, 0);\r\n after = `${field} ${op} ${utcStart}`;\r\n } else if (op.toLowerCase() === 'le' || op.toLowerCase() === 'lt') {\r\n const utcEnd = toUtcIso(dateStr, 23, 59, 59);\r\n after = `${field} ${op} ${utcEnd}`;\r\n } else if (op.toLowerCase() === 'eq') {\r\n const utcStart = toUtcIso(dateStr, 0, 0, 0);\r\n const utcEnd = toUtcIso(dateStr, 23, 59, 59);\r\n after = `(${field} ge ${utcStart} and ${field} le ${utcEnd})`;\r\n }\r\n //console.log(`[replaceDateFilters] Before: ${before} | After: ${after}`); commented out until official version release\r\n return after;\r\n }\r\n );\r\n }\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { IHeaderParams, SortDirection } from 'ag-grid-community';\r\n\r\n@Component({\r\n selector: 'app-date-header',\r\n template: `\r\n<span>\r\n {{ params.displayName }}\r\n <i class=\"fa-solid fa-calendar-days\" style=\"margin-left: 4px;\"></i>\r\n <span #menuButton (click)=\"toggleSort()\">{{ params.displayName }}</span>\r\n<span (click)=\"params.showColumnMenu(menuButton)\">☰</span>\r\n</span>\r\n `,\r\n standalone: false\r\n})\r\nexport class DateHeaderComponent {\r\n params!: IHeaderParams;\r\n sortOrderAsc: SortDirection = 'asc';\r\n sortOrderDesc: SortDirection = 'asc';\r\n agInit(params: IHeaderParams): void {\r\n this.params = params;\r\n }\r\n toggleSort(): void {\r\n const currentSort = this.params.column.getSort();\r\n const newSort = currentSort === this.sortOrderAsc ? this.sortOrderDesc : currentSort === this.sortOrderDesc ? null : this.sortOrderAsc;\r\n this.params.setSort(newSort);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { IHeaderParams } from 'ag-grid-community';\r\n\r\n@Component({\r\n selector: 'app-date-header',\r\n template: `\r\n<span>\r\n {{ params.displayName }}\r\n</span>\r\n `, standalone: false\r\n})\r\nexport class HeaderComponent {\r\n params!: IHeaderParams;\r\n agInit(params: IHeaderParams): void {\r\n this.params = params;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { AgGridModule } from 'ag-grid-angular';\r\n//import {LicenseManager} from \"ag-grid-enterprise\";\r\nimport 'ag-grid-enterprise';\r\n//LicenseManager.setLicenseKey(\"Using_this_AG_Grid_Enterprise_key_( AG-040308 )_in_excess_of_the_licence_granted_is_not_permitted___Please_report_misuse_to_( legal@ag-grid.com )___For_help_with_changing_this_key_please_contact_( info@ag-grid.com )___( Basesite )_is_granted_a_( Multiple Applications )_Developer_License_for_( 2 )_Front-End_JavaScript_developers___All_Front-End_JavaScript_developers_need_to_be_licensed_in_addition_to_the_ones_working_with_AG_Grid_Enterprise___This_key_has_been_granted_a_Deployment_License_Add-on_for_( 2 )_Production_Environments___This_key_works_with_AG_Grid_Enterprise_versions_released_before_( 18 May 2024 )____[v2]_MTcxNTk4NjgwMDAwMA==60418a73ee93fedd598e5d8aa02b2926\")\r\nimport { provideHttpClient, withInterceptorsFromDi } from \"@angular/common/http\";\r\nimport { ButtonRendererComponent } from './renderer/button-renderer/button-renderer.component';\r\nimport { CommonModule, DatePipe } from '@angular/common';\r\nimport { CustomTooltip } from './renderer/tooltip-renderer/custom-tooltip-renderer';\r\nimport { GridLibraryComponent } from './grid-library.component';\r\nimport { DropdownRenderer } from './renderer/dropdown-renderer/drop-down-renderer';\r\nimport { GridLibraryService } from './grid-library.service';\r\nimport { ColumnValueFormatter } from './formatters/column-value-formatter';\r\nimport { DateHeaderComponent } from './renderer/date-header/date-header.component';\r\nimport { HeaderComponent } from './renderer/header/header.component';\r\nimport { CellRendererComponent } from './renderer/cell-renderer/cell-renderer.component';\r\nimport { FillCellRendererComponent } from './renderer/fill-cell-renderer/fill-cell-renderer.component';\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { DatepickerComponent } from './renderer/date-filter/date-filter.component';\r\n\r\n@NgModule({ declarations: [\r\n GridLibraryComponent,\r\n ButtonRendererComponent,\r\n CustomTooltip,\r\n DropdownRenderer,\r\n DateHeaderComponent,\r\n HeaderComponent,\r\n CellRendererComponent,\r\n FillCellRendererComponent\r\n ],\r\n exports: [\r\n GridLibraryComponent,\r\n DatePickerModule\r\n ],\r\n imports: [AgGridModule,\r\n DatePickerModule,\r\n CommonModule,\r\n DatepickerComponent\r\n ],\r\n providers: [DatePipe, GridLibraryService, ColumnValueFormatter, provideHttpClient(withInterceptorsFromDi())]\r\n})\r\nexport class GridLibraryModule { }\r\n","/*\r\n * Public API Surface of basesite-shared-grid-lib\r\n */\r\n\r\nexport * from './lib/grid-library.service';\r\nexport * from './lib/grid-library.component';\r\nexport * from './lib/grid-library.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.TokenSharingService","i1","i1.GridLibraryService","i2.ColumnValueFormatter","i3.TokenSharingService","i4","i6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"basesite-shared-grid-lib.mjs","sources":["../../../projects/basesite-shared-grid-lib/src/lib/token-sharing.service.ts","../../../projects/basesite-shared-grid-lib/src/lib/grid-library.service.ts","../../../projects/basesite-shared-grid-lib/src/lib/helpers/utils.ts","../../../projects/basesite-shared-grid-lib/src/lib/helpers/oDataProvider.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/button-renderer/button-renderer.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/tooltip-renderer/custom-tooltip-renderer.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/dropdown-renderer/drop-down-renderer.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/cell-renderer/cell-renderer.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/fill-cell-renderer/fill-cell-renderer.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/date-filter/date-filter.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/date-filter/date-filter.component.html","../../../projects/basesite-shared-grid-lib/src/lib/formatters/column-value-formatter.ts","../../../projects/basesite-shared-grid-lib/src/lib/grid-library.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/date-header/date-header.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/renderer/header/header.component.ts","../../../projects/basesite-shared-grid-lib/src/lib/grid-library.module.ts","../../../projects/basesite-shared-grid-lib/src/public-api.ts","../../../projects/basesite-shared-grid-lib/src/basesite-shared-grid-lib.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TokenSharingService {\r\n\r\n constructor() { }\r\n\r\n private tokenSubject = new BehaviorSubject<string>(\"\");\r\n token$ = this.tokenSubject.asObservable();\r\n updateToken(newToken:string){\r\n this.tokenSubject.next(newToken);\r\n }\r\n\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { TokenSharingService } from './token-sharing.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GridLibraryService {\r\n private baseUrl: any = 'https://localhost:7237/api';\r\n accessToken!: string;\r\n constructor(private httpClient: HttpClient,private _tokenSharingService:TokenSharingService) {\r\n this._tokenSharingService.token$.subscribe(res =>{\r\n if(res && res != \"\"){\r\n this.accessToken = res;\r\n }\r\n });\r\n this.setBaseUrl();\r\n } \r\n\r\n setBaseUrl(environment: any=\"\") {\r\n //All envs except localhost can use dynamic URL (localhost can't because it should point to test or another port)\r\n if (window.location.origin.includes('localhost')) {\r\n this.baseUrl = 'https://fcemstest.intel.com/designhub/api';\r\n }\r\n else {\r\n this.baseUrl = window.location.origin + '/designhub/api';\r\n }\r\n }\r\n\r\n getColDef(gridId: any): Observable<any> { \r\n return this.httpClient.get<any>(\r\n `${this.baseUrl}/GridConfiguration/${gridId}`, { headers: this.getRequestHeader()}\r\n );\r\n }\r\n\r\n saveColumnConfig(columnConfig:any){\r\n return this.httpClient.post<any>(\r\n `${this.baseUrl}/GridConfiguration/saveUIUserGridConfiguration`, columnConfig, { headers: this.getRequestHeader()}\r\n );\r\n }\r\n\r\n getGridState(gridId: number, loggedInUserId: number, siteId: number) {\r\n return this.httpClient.get<any>(\r\n `${this.baseUrl}/GridConfiguration?gridId=${gridId}&userId=${loggedInUserId}&siteId=${siteId}`, { headers: this.getRequestHeader() }\r\n );\r\n }\r\n\r\n getRequestHeader() {\r\n let reqHeader: any;\r\n\r\n if (this.accessToken) {\r\n reqHeader = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + this.accessToken\r\n });\r\n }\r\n else {\r\n reqHeader = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n });\r\n }\r\n \r\n return reqHeader;\r\n }\r\n\r\n getDataForExport(serverUrl: any): Observable<any> {\r\n return this.httpClient.get<any>(\r\n `${serverUrl}`, { headers: this.getRequestHeader() }\r\n );\r\n }\r\n}\r\n","export function escapeRegExp(string:any) {\r\n return string.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\r\n }\r\n \r\n export function replaceAll(str: string, search: string, replacement: string): string {\r\n return str.replace(new RegExp(escapeRegExp(search), \"g\"), replacement);\r\n }","import {\r\n IGetRowsParams,\r\n ColDef,\r\n ColGroupDef,\r\n ColumnVO,\r\n IServerSideGetRowsRequest,\r\n IServerSideGetRowsParams,\r\n} from 'ag-grid-community';\r\n\r\nimport {\r\n OdataQueryExtendFull,\r\n OdataQueryExtendOptions,\r\n OdataQueryOptions,\r\n PivotResultDat,\r\n} from './types';\r\n\r\nimport { replaceAll } from './utils';\r\nexport declare class OdataProviderOptions {\r\n /**\r\n * Function for call odata api\r\n */\r\n callApi: (query: string) => Promise<any>;\r\n /**\r\n * Name of field contain count of record results in grouping odata query\r\n * @default childCount\r\n */\r\n groupCountFieldName?: string;\r\n /**\r\n * Use in odata build query\r\n * @default false\r\n */\r\n isCaseSensitiveStringFilter?: boolean;\r\n /**\r\n * Callback for extend odata query options for implement user logic\r\n */\r\n beforeRequest?: (\r\n options: OdataQueryOptions,\r\n provider: OdataProvider,\r\n request: IGetRowsParams | IServerSideGetRowsRequest\r\n ) => void;\r\n /**\r\n * Callback for pivot or group for aplly column ag-grid settings\r\n * @example\r\n * <pre><code>\r\n * beforeSetSecondaryColumns = secondaryColumns => {\r\n for (let i = 0; i < secondaryColumns.length; i++) {\r\n const col = secondaryColumns[i]\r\n if (col.children) {\r\n beforeSetSecondaryColumns(col.children)\r\n } else {\r\n //Aplly new setting for group dyncamic created column\r\n // col.cellClassRules = \r\n // col.valueFormatter = \r\n }\r\n }\r\n }\r\n * </pre></code>\r\n */\r\n beforeSetSecondaryColumns?: (\r\n secondaryColDefs: (ColDef | ColGroupDef)[]\r\n ) => void;\r\n /**\r\n * Callback invoked after load data\r\n * @param options odata provider options\r\n * @param rowData data for ag-grid\r\n * @param totalCount total count records\r\n * \r\n * @example\r\n * <pre><code>\r\n afterLoadData = (options, rowData, totalCount) => {\r\n if (options.skip === 0 && rowData.length > 0) {\r\n gridApi.columnController.autoSizeAllColumns()\r\n }\r\n }\r\n * </code></pre>\r\n */\r\n afterLoadData?: (\r\n options: OdataQueryExtendOptions,\r\n rowData: any[],\r\n totalCount: number\r\n ) => void;\r\n /**\r\n * Callback for catch error\r\n */\r\n setError?: (\r\n error: any,\r\n params: IGetRowsParams | IServerSideGetRowsParams\r\n ) => void;\r\n /**\r\n * List of columns by id/field are case sensitive for build odata query\r\n */\r\n caseSensitiveColumns?: string[];\r\n /**\r\n * Use for specified column custom filter implementation\r\n * <pre><code>\r\n customFilters: {\r\n \"customer\": (colName,col,isCaseSensitiveStringFilter,provider) =>{\r\n return provider.odataOperator.in(\r\n colName,\r\n col.values\r\n )\r\n }\r\n }\r\n */\r\n customFilters?: {\r\n [index: string]: (\r\n colName: string,\r\n col: any,\r\n isCaseSensitiveStringFilter: boolean,\r\n provider: OdataProvider\r\n ) => string;\r\n };\r\n}\r\n\r\ndeclare interface CancelablePromise {\r\n promise: Promise<any>;\r\n cancel: () => void;\r\n}\r\nexport class OdataProvider implements OdataProviderOptions {\r\n /**\r\n * Function for call odata api\r\n */\r\n callApi!: (query: string) => Promise<any>;\r\n /**\r\n * Name of field contain count of record results in grouping odata query\r\n * @default childCount\r\n */\r\n groupCountFieldName: string = 'childCount';\r\n /**\r\n * Use in odata build query\r\n * @default false\r\n */\r\n isCaseSensitiveStringFilter: boolean = false;\r\n /**\r\n * Callback for extend odata query options for implement user logic\r\n */\r\n beforeRequest:\r\n | ((\r\n options: OdataQueryOptions,\r\n provider: OdataProvider,\r\n request: IGetRowsParams | IServerSideGetRowsRequest\r\n ) => void)\r\n | undefined;\r\n /**\r\n * Callback for pivot or group for aplly column ag-grid settings\r\n * @example\r\n * <pre><code>\r\n * beforeSetSecondaryColumns = secondaryColumns => {\r\n for (let i = 0; i < secondaryColumns.length; i++) {\r\n const col = secondaryColumns[i]\r\n if (col.children) {\r\n beforeSetSecondaryColumns(col.children)\r\n } else {\r\n //Aplly new setting for group dyncamic created column\r\n // col.cellClassRules = \r\n // col.valueFormatter = \r\n }\r\n }\r\n }\r\n * </pre></code>\r\n */\r\n beforeSetSecondaryColumns:\r\n | ((secondaryColDefs: (ColDef | ColGroupDef)[]) => void)\r\n | undefined;\r\n /**\r\n * Callback invoked after load data\r\n * @param options odata provider options\r\n * @param rowData data for ag-grid\r\n * @param totalCount total count records\r\n * \r\n * @example\r\n * <pre><code>\r\n afterLoadData = (options, rowData, totalCount) => {\r\n if (options.skip === 0 && rowData.length > 0) {\r\n gridApi.columnController.autoSizeAllColumns()\r\n }\r\n }\r\n * </code></pre>\r\n */\r\n afterLoadData:\r\n | ((\r\n options: OdataQueryExtendOptions,\r\n rowData: any[],\r\n totalCount: number\r\n ) => void)\r\n | undefined;\r\n /**\r\n * Callback for catch error\r\n */\r\n setError:\r\n | ((error: any, params: IGetRowsParams | IServerSideGetRowsParams) => void)\r\n | undefined;\r\n /**\r\n * List of columns by id/field are case sensitive for build odata query\r\n */\r\n caseSensitiveColumns?: string[];\r\n /**\r\n * Use for specified column custom filter implementation\r\n * <pre><code>\r\n customFilters: {\r\n \"customer\": (colName,col,isCaseSensitiveStringFilter,provider) =>{\r\n return provider.odataOperator.in(\r\n colName,\r\n col.values\r\n )\r\n }\r\n }\r\n */\r\n customFilters?: {\r\n [index: string]: (\r\n colName: string,\r\n col: any,\r\n isCaseSensitiveStringFilter: boolean,\r\n provider: OdataProvider\r\n ) => string;\r\n };\r\n cancelPromice: CancelablePromise;\r\n constructor(options: OdataProviderOptions) {\r\n Object.assign(this, options);\r\n if (this.callApi == null) {\r\n throw new Error('callApi must be specified');\r\n }\r\n if (typeof this.callApi !== 'function') {\r\n throw new Error('callApi must be a function');\r\n }\r\n if (\r\n this.beforeRequest != null &&\r\n typeof this.beforeRequest !== 'function'\r\n ) {\r\n throw new Error('beforeRequest must be a function');\r\n }\r\n if (\r\n this.afterLoadData != null &&\r\n typeof this.afterLoadData !== 'function'\r\n ) {\r\n throw new Error('afterLoadData must be a function');\r\n }\r\n if (this.setError != null && typeof this.setError !== 'function') {\r\n throw new Error('setError must be a function');\r\n }\r\n this.cancelPromice = this.createCancelablePromise();\r\n }\r\n\r\n /**Creator a cancelable Promise */\r\n createCancelablePromise = (): CancelablePromise => {\r\n let cancel: any;\r\n const pr = new Promise((_, reject) => {\r\n cancel = reject;\r\n }).catch(() => {});\r\n return {\r\n promise: pr,\r\n cancel,\r\n };\r\n };\r\n /**Odata query operations */\r\n odataOperator: any = {\r\n // Logical\r\n equals: (col: string, value1: string): string => `${col} eq ${value1}`,\r\n blank: (col: string, value1: string): string => `(${col} eq ${value1} or ${col} eq null)`,\r\n notBlank: (col: string, value1: string): string => `(${col} ne ${value1} and ${col} ne null)`,\r\n blankDate: (col: string, value1: string): string => `${col} eq null`,\r\n notBlankDate: (col: string, value1: string): string => `${col} ne null`,\r\n notEqual: (col: string, value1: string): string => `${col} ne ${value1}`,\r\n lessThan: (col: string, value1: string): string => `${col} lt ${value1}`,\r\n lessThanOrEqual: (col: string, value1: string): string =>\r\n `${col} le ${value1}`,\r\n greaterThan: (col: string, value1: string): string => `${col} gt ${value1}`,\r\n greaterThanOrEqual: (col: string, value1: string): string =>\r\n `${col} ge ${value1}`,\r\n inRange: (col: string, value1: string, value2: any): string =>\r\n `(${col} ge ${value1} and ${col} le ${value2})`,\r\n // String\r\n equalsStr: (\r\n col: string,\r\n value1: string,\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `${this.ifTolowerCol(\r\n col,\r\n isCaseSensitiveStringFilter\r\n )} eq ${this.ifTolower(value1, isCaseSensitiveStringFilter)}`,\r\n notEqualStr: (\r\n col: string,\r\n value1: string,\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `${this.ifTolowerCol(\r\n col,\r\n isCaseSensitiveStringFilter\r\n )} ne ${this.ifTolower(value1, isCaseSensitiveStringFilter)}`,\r\n contains: (\r\n col: string,\r\n value1: string,\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `contains(${this.ifTolowerCol(\r\n col,\r\n isCaseSensitiveStringFilter\r\n )},${this.ifTolower(value1, isCaseSensitiveStringFilter)})`,\r\n notContains: (\r\n col: string,\r\n value1: string,\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `contains(${this.ifTolowerCol(\r\n col,\r\n isCaseSensitiveStringFilter\r\n )},${this.ifTolower(value1, isCaseSensitiveStringFilter)}) eq false`,\r\n startsWith: (\r\n col: string,\r\n value1: string,\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `startswith(${this.ifTolowerCol(\r\n col,\r\n isCaseSensitiveStringFilter\r\n )},${this.ifTolower(value1, isCaseSensitiveStringFilter)}) eq true`,\r\n endsWith: (\r\n col: string,\r\n value1: string,\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `endswith(${this.ifTolowerCol(\r\n col,\r\n isCaseSensitiveStringFilter\r\n )},${this.ifTolower(value1, isCaseSensitiveStringFilter)}) eq true`,\r\n inStr: (\r\n col: string,\r\n values: string[],\r\n isCaseSensitiveStringFilter: boolean\r\n ): string =>\r\n `${this.ifTolowerCol(col, isCaseSensitiveStringFilter)} in (${values\r\n .map(\r\n (x) =>\r\n `'${this.ifTolower(this.encode(x), isCaseSensitiveStringFilter)}'`\r\n )\r\n .join()})`,\r\n in: (col: string, values: string[]) =>\r\n `${col} in (${values.map((x) => `${this.encode(x)}`).join()})`,\r\n notIn: (col: string, values: string[]) =>\r\n `not (${col} in (${values.map((x) => `${x}`).join()}))`,\r\n // Date\r\n trunc: (col: string): string => `date(${col})`,\r\n };\r\n\r\n /**\r\n * Apply tolower for column in odata syntax\r\n * @param col column name\r\n * @param isCaseSensitiveStringFilter need apply tolower\r\n */\r\n ifTolowerCol = (col: string, isCaseSensitiveStringFilter: boolean): string =>\r\n isCaseSensitiveStringFilter ? col : `tolower(${col})`;\r\n\r\n /**\r\n *\r\n * @param value string value\r\n * @param isCaseSensitiveStringFilter need apply tolower\r\n */\r\n ifTolower = (value: string, isCaseSensitiveStringFilter: boolean): string =>\r\n isCaseSensitiveStringFilter ? value : value ? value.toLowerCase() : value;\r\n /**\r\n * Odata aggregation operations\r\n */\r\n odataAggregation: any = {\r\n // Logical\r\n sum: (col: string, asField?: any): string =>\r\n `${col} with sum as ${col || asField}`,\r\n min: (col: string, asField?: any): string =>\r\n `${col} with min as ${col || asField}`,\r\n max: (col: string, asField?: any): string =>\r\n `${col} with max as ${col || asField}`,\r\n avg: (col: string, asField?: any): string =>\r\n `${col} with average as ${col || asField}`,\r\n count: (col: string, asField?: any): string =>\r\n `$count as ${col || asField}`,\r\n };\r\n /**\r\n * Odata query builder\r\n * @param options parameter for odata query\r\n */\r\n toQuery = (options: OdataQueryExtendFull): string => {\r\n let path: string[] = [];\r\n if (options) {\r\n path.push('$count=true');\r\n }\r\n if (options.skip) {\r\n path.push(`$skip=${options.skip}`);\r\n }\r\n if (options.top) {\r\n path.push(`$top=${options.top}`);\r\n }\r\n if (options.sort && options.sort.length > 0) {\r\n path.push('$orderby=' + options.sort.join(','));\r\n }\r\n if (options.filter && options.filter.length > 0) {\r\n path.push('$filter=' + options.filter.join(' and '));\r\n }\r\n if (options.apply && options.apply.length > 0) {\r\n path.push('$apply=' + options.apply.join('/'));\r\n }\r\n if (options.expand && options.expand.length > 0) {\r\n path.push('$expand=' + options.expand.join(','));\r\n }\r\n if (options.select && options.select.length > 0) {\r\n path.push('$select=' + options.select.join(','));\r\n }\r\n let query: string = '';\r\n if (path.length > 0) {\r\n var defaultFilters = path.filter((x: any) => {\r\n if (\r\n x.indexOf('$count') >= 0 ||\r\n x.indexOf('$top') >= 0 ||\r\n x.indexOf('$orderby') >= 0 ||\r\n x.indexOf('$apply') >= 0 ||\r\n x.indexOf('$expand') >= 0 ||\r\n x.indexOf('$select') >= 0\r\n ) {\r\n return x;\r\n }\r\n });\r\n if (defaultFilters && defaultFilters.length > 0) {\r\n query = '?' + defaultFilters.join('&');\r\n }\r\n var customFilters = path.filter(function (obj) {\r\n return defaultFilters.indexOf(obj) == -1;\r\n });\r\n if (customFilters && customFilters.length > 0) {\r\n if (customFilters.length == 1) query = query + '&' + customFilters;\r\n else query = query + '&' + customFilters.join('and');\r\n }\r\n }\r\n query = query.replace('and$filter=', '&$filter=');\r\n return query;\r\n };\r\n /**\r\n * Add quotes for string value\r\n * @param value string value\r\n */\r\n encode = (value: string): string =>\r\n this.isStrVal(value) ? replaceAll(value, \"'\", \"''\") : value;\r\n /**\r\n * Conctat to date a time for create datetime format for odata query\r\n * @param value date string\r\n */\r\n toDateTime = (value: string): string | null => {\r\n const dt = new Date(value);\r\n if (isNaN(dt.getTime())) return null;\r\n const dt1 = new Date(\r\n Date.UTC(dt.getFullYear(), dt.getMonth(), dt.getDate())\r\n );\r\n return dt1.toISOString().split('T')[0]; //dt1.toISOString();\r\n };\r\n /**\r\n *\r\n * @param colName columnName\r\n * @returns is CaseSensitive for column\r\n */\r\n private getIsNeedCaseSensitive = (colName: string) => {\r\n if (\r\n !this.isCaseSensitiveStringFilter &&\r\n this.caseSensitiveColumns &&\r\n this.caseSensitiveColumns.length > 0\r\n ) {\r\n return this.caseSensitiveColumns.indexOf(colName) >= 0;\r\n }\r\n return this.isCaseSensitiveStringFilter;\r\n };\r\n /**\r\n * Convert ag-grid column filter to odata query\r\n * @param colName columnName\r\n * @param col ag-grid column\r\n */\r\n private getFilterOdata = (colName: string, col: any): string => {\r\n const me = this;\r\n const isCaseSensitiveStringFilter = me.getIsNeedCaseSensitive(colName);\r\n const customFilter = me.customFilters && me.customFilters[colName];\r\n colName = replaceAll(colName, '.', '/');\r\n colName = me.getWrapColumnName(colName);\r\n if (customFilter) {\r\n return customFilter(colName, col, isCaseSensitiveStringFilter, me);\r\n } else {\r\n switch (col.filterType) {\r\n case 'number':\r\n return me.odataOperator[col.type](colName, col.filter, col.filterTo);\r\n case 'text': {\r\n let operatorName = col.type;\r\n const filter = me.encode(col.filter) || '';\r\n // let filterTo = me.encode(col.filterTo);\r\n if (\r\n (operatorName === 'equals' || operatorName === 'notEqual') &&\r\n !isCaseSensitiveStringFilter\r\n ) {\r\n operatorName += 'Str';\r\n }\r\n return me.odataOperator[operatorName](\r\n colName,\r\n `'${filter}'`,\r\n isCaseSensitiveStringFilter\r\n );\r\n }\r\n case 'date':\r\n if(col.type == \"blank\"){\r\n return me.odataOperator[\"blankDate\"](colName, col.filter, col.filterTo);\r\n }\r\n else if(col.type == \"notBlank\"){\r\n return me.odataOperator[\"notBlankDate\"](colName, col.filter, col.filterTo);\r\n }\r\n else if (\r\n col.dateFrom != null &&\r\n me.toDateTime(col.dateFrom) != null &&\r\n (col.dateTo == null ||\r\n (col.dateTo != null && me.toDateTime(col.dateTo) != null))\r\n ) {\r\n return me.odataOperator[col.type](\r\n colName,\r\n `${me.toDateTime(col.dateFrom)}`,\r\n `${me.toDateTime(col.dateTo)}`\r\n );\r\n }\r\n break;\r\n case 'set': {\r\n if (!col.values || col.values.length === 0) {\r\n return '';\r\n }\r\n // Fill-cell / set-filter columns are always equality-matched against\r\n // a fixed list of backend-provided values, so the casing on both\r\n // sides is already known to match. Skip the tolower() wrap that the\r\n // generic string operators apply — wrapping the column in tolower()\r\n // forces a full scan because LOWER(col) cannot use any index, and\r\n // SQL Server's default collation is already case-insensitive.\r\n // Resulting predicate: `col eq 'Value'` (single) or\r\n // `(col eq 'V1' or col eq 'V2')` (multi).\r\n const equalsClauses = col.values.map((v: string) =>\r\n me.odataOperator.equals(colName, `'${me.encode(v)}'`)\r\n );\r\n return equalsClauses.length === 1\r\n ? equalsClauses[0]\r\n : `(${equalsClauses.join(' or ')})`;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n return '';\r\n };\r\n\r\n /**\r\n * Extract value from record by path to field\r\n * @param field path to column value\r\n * @param obj record\r\n */\r\n private getValue(field: string, obj: any): any {\r\n const paths = field.split('.');\r\n if (paths.length === 1) {\r\n return obj[field];\r\n } else {\r\n return paths.reduce((object, path) => {\r\n return (object || {})[path]; // Oliver Steele's pattern\r\n }, obj);\r\n }\r\n }\r\n\r\n /**\r\n * Caclulate pivot data for ag-grid from odata\r\n * @param pivotCols pivot columns\r\n * @param rowGroupCols row group columns\r\n * @param valueCols value columns\r\n * @param data odata result\r\n * @param countField count field name\r\n */\r\n private getPivot = (\r\n pivotCols: ColumnVO[],\r\n rowGroupCols: ColumnVO[],\r\n valueCols: ColumnVO[],\r\n data: any[],\r\n countField: string\r\n ): PivotResultDat => {\r\n // assume 1 pivot col and 1 value col for this example\r\n const me = this;\r\n const pivotData: any[] = [];\r\n const aggColsList: any[] = [];\r\n\r\n const colKeyExistsMap: any = {};\r\n\r\n const secondaryColDefs: any[] = [];\r\n const secondaryColDefsMap: any = {};\r\n\r\n data.forEach(function (item) {\r\n var pivotValues: string[] = [];\r\n pivotCols.forEach(function (pivotCol) {\r\n var pivotField = pivotCol.id;\r\n var pivotValue = me.getValue(pivotField, item);\r\n if (\r\n pivotValue !== null &&\r\n pivotValue !== undefined &&\r\n pivotValue.toString\r\n ) {\r\n pivotValues.push(pivotValue.toString());\r\n } else {\r\n pivotValues.push('-');\r\n }\r\n });\r\n\r\n // var pivotValue = item[pivotField].toString();\r\n var pivotItem: any = {};\r\n\r\n valueCols.forEach(function (valueCol) {\r\n var valField = valueCol.id;\r\n var colKey = createColKey(pivotValues, valField);\r\n\r\n var value = me.getValue(valField, item);\r\n pivotItem[colKey] = value;\r\n\r\n if (!colKeyExistsMap[colKey]) {\r\n addNewAggCol(colKey, valueCol);\r\n addNewSecondaryColDef(colKey, pivotValues, valueCol);\r\n colKeyExistsMap[colKey] = true;\r\n }\r\n });\r\n if (countField) {\r\n pivotItem[countField] = me.getValue(countField, item);\r\n }\r\n\r\n rowGroupCols.forEach(function (rowGroupCol) {\r\n var rowGroupField = rowGroupCol.id.split('.')[0];\r\n pivotItem[rowGroupField] = item[rowGroupField];\r\n });\r\n\r\n pivotData.push(pivotItem);\r\n });\r\n\r\n function addNewAggCol(colKey: string, valueCol: ColumnVO): void {\r\n var newCol = {\r\n id: colKey,\r\n field: colKey,\r\n aggFunc: valueCol.aggFunc,\r\n };\r\n aggColsList.push(newCol);\r\n }\r\n\r\n function addNewSecondaryColDef(\r\n colKey: any,\r\n pivotValues: any,\r\n valueCol: any\r\n ) {\r\n var parentGroup: any = null;\r\n\r\n var keyParts: any = [];\r\n\r\n pivotValues.forEach(function (pivotValue: any) {\r\n keyParts.push(pivotValue);\r\n var colKey = createColKey(keyParts);\r\n var groupColDef: any = secondaryColDefsMap[colKey];\r\n if (!groupColDef) {\r\n groupColDef = {\r\n groupId: colKey,\r\n headerName: pivotValue,\r\n children: [],\r\n };\r\n secondaryColDefsMap[colKey] = groupColDef;\r\n if (parentGroup) {\r\n parentGroup.children.push(groupColDef);\r\n } else {\r\n secondaryColDefs.push(groupColDef);\r\n }\r\n }\r\n parentGroup = groupColDef;\r\n });\r\n\r\n parentGroup.children.push({\r\n colId: colKey,\r\n headerName: valueCol.aggFunc + '(' + valueCol.displayName + ')',\r\n field: colKey,\r\n suppressMenu: true,\r\n sortable: false,\r\n });\r\n }\r\n\r\n function createColKey(pivotValues: string[], valueField?: string): string {\r\n var result = pivotValues.join('|');\r\n if (valueField !== undefined) {\r\n result += '|' + valueField;\r\n }\r\n result = replaceAll(result, '.', '*');\r\n return result;\r\n }\r\n\r\n return {\r\n data: pivotData,\r\n aggCols: aggColsList,\r\n secondaryColDefs: secondaryColDefs,\r\n };\r\n };\r\n\r\n /**\r\n *\r\n * @param rowData array odata result\r\n * @param rowGroupCols row group columns\r\n * @param groupKeys what groups the user is viewing\r\n * @param countField count field name\r\n */\r\n private buildGroupsFromData = (\r\n rowData: any[],\r\n rowGroupCols: ColumnVO[],\r\n groupKeys: string[],\r\n countField: string\r\n ): any[] => {\r\n const me = this;\r\n let rowGroupCol = rowGroupCols[groupKeys.length];\r\n let field = rowGroupCol.id;\r\n let mappedRowData = me.groupBy(rowData, field);\r\n let groups: any = [];\r\n\r\n me.iterateObject(mappedRowData, function (key, rowData) {\r\n var groupItem = me.aggregateList(rowData, countField);\r\n groupItem[field] = key;\r\n groups.push(groupItem);\r\n });\r\n return groups;\r\n };\r\n\r\n /**\r\n * Internal function for execute callback function for each property of object\r\n * @param object object contained odata grouped result\r\n * @param callback function do somthing\r\n */\r\n private iterateObject = (\r\n object: any,\r\n callback: (key: string, rowData: any[]) => void\r\n ): void => {\r\n if (!object) {\r\n return;\r\n }\r\n const keys = Object.keys(object);\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n const value = object[key];\r\n callback(key, value);\r\n }\r\n };\r\n\r\n /**\r\n * Prepeare grouped data\r\n * @param rowData array odata result\r\n * @param field grouping field\r\n */\r\n private groupBy = (rowData: any[], field: string): any => {\r\n var result: any = {};\r\n const me = this;\r\n rowData.forEach(function (item) {\r\n var key = me.getValue(field, item);\r\n var listForThisKey = result[key];\r\n if (!listForThisKey) {\r\n listForThisKey = [];\r\n result[key] = listForThisKey;\r\n }\r\n listForThisKey.push(item);\r\n });\r\n return result;\r\n };\r\n\r\n /**\r\n * Calculate total count records in group\r\n * @param rowData array odata result data\r\n * @param countField field contained count of all records\r\n */\r\n private aggregateList = (rowData: any[], countField: string): any => {\r\n var result: any = {};\r\n rowData.forEach((row) => {\r\n if (countField && row[countField] != null) {\r\n const totalCount = (result[countField] || 0) + (row[countField] || 0);\r\n delete row[countField];\r\n result[countField] = totalCount;\r\n }\r\n result = Object.assign(result, row);\r\n });\r\n return result;\r\n };\r\n\r\n /**\r\n * Calculate distinct values for input field from Odata api\r\n * @param field The field of the row to get the cells data from \r\n * @param callback The function for return distinct values for input field\r\n * @param beforeRequest The function for customize request\r\n * @example \r\n * <pre><code>\r\n * const setFilterValuesFuncParams = params => {\r\n * const me = this\r\n * const col = params.colDef.field\r\n * const storeName = me.getStoreName(col)\r\n * const callback = data => {\r\n * if (data) {\r\n * me.setState({ [storeName]: data })\r\n * params.success(data)\r\n * }\r\n * }\r\n * odataProviderInstance.getFilterValuesParams(params.colDef.field, callback)\r\n * }\r\n * \r\n * ///....\r\n * <AgGridColumn\r\n field=\"product\"\r\n headerName={'PRODUCT'}\r\n filter=\"agSetColumnFilter\"\r\n // rowGroup\r\n // enablePivot\r\n enableRowGroup\r\n filterParams={{\r\n values: setFilterValuesFuncParams,\r\n newRowsAction: 'keep'\r\n }}\r\n // filterParams={{caseSensitive: true}}\r\n />\r\n * </code></pre>\r\n */\r\n getFilterValuesParams = (\r\n field: string,\r\n callback: (data: any[]) => void,\r\n beforeRequest: (options: OdataQueryExtendFull) => void | undefined\r\n ): void => {\r\n const me = this;\r\n const options: OdataQueryExtendFull = {\r\n apply: [`groupby((${me.getWrapColumnName(field)}))`],\r\n };\r\n if (beforeRequest) {\r\n beforeRequest(options);\r\n }\r\n // OData wraps nested fields with '/' (e.g. parent/child); the response\r\n // mirrors that shape, so we walk the path instead of using the raw key.\r\n // We also fall back to a case-insensitive lookup because some OData\r\n // services return PascalCase property names regardless of the request\r\n // casing (e.g. asked for `dacStatus`, response is `DacStatus`).\r\n const readField = (row: any): any => {\r\n if (row == null) return undefined;\r\n if (Object.prototype.hasOwnProperty.call(row, field)) return row[field];\r\n const segments = String(field).split('.');\r\n let current: any = row;\r\n for (const seg of segments) {\r\n if (current == null) return undefined;\r\n if (Object.prototype.hasOwnProperty.call(current, seg)) {\r\n current = current[seg];\r\n continue;\r\n }\r\n // Case-insensitive key match as a last resort.\r\n const lower = seg.toLowerCase();\r\n const match = Object.keys(current).find(k => k.toLowerCase() === lower);\r\n if (!match) return undefined;\r\n current = current[match];\r\n }\r\n return current;\r\n };\r\n me.callApi(me.toQuery(options))\r\n .then((x) => {\r\n const values = x ? me.getOdataResult(x) || [] : [];\r\n const mapped = values.map((y: any) => readField(y));\r\n console.log(\r\n '[OdataProvider] getFilterValuesParams response for',\r\n field,\r\n '— rows:', values.length,\r\n '— sample keys:', values[0] ? Object.keys(values[0]) : '(none)',\r\n '— mapped sample:', mapped.slice(0, 5)\r\n );\r\n // Helpful diagnostic when the response shape doesn't match the field.\r\n if (values.length > 0 && mapped.every((v: any) => v === undefined)) {\r\n console.warn(\r\n '[OdataProvider] getFilterValuesParams: response had',\r\n values.length,\r\n 'rows but none contained field',\r\n field,\r\n '— sample row keys:',\r\n Object.keys(values[0] || {})\r\n );\r\n }\r\n callback(mapped);\r\n })\r\n .catch((err) => {\r\n console.error('[OdataProvider] getFilterValuesParams failed for field', field, err);\r\n // Always invoke the callback so AG Grid's set filter doesn't hang.\r\n callback([]);\r\n });\r\n };\r\n /**\r\n * Detect is string value\r\n * @param value\r\n */\r\n isStrVal = (value: any): boolean => typeof value === 'string';\r\n /**\r\n * Extartc values from odata response\r\n * @param response\r\n */\r\n private getOdataResult = (response: any): any =>\r\n Array.isArray(response) ? response : response.value;\r\n /**\r\n * Endocing column name to odata notation\r\n * @param colName column name\r\n */\r\n private getWrapColumnName = (colName: string | undefined): string =>\r\n colName ? replaceAll(colName, '.', '/') : '';\r\n /**\r\n * grid calls this to get rows for IServerSideDatasource\r\n * @param params ag-grid details for the request\r\n */\r\n /**\r\n * grid calls this to get rows implement\r\n * @param params ag-grid details for the request\r\n */\r\n public getRows(params: IGetRowsParams | IServerSideGetRowsParams): void {\r\n const me = this;\r\n const childCount = me.groupCountFieldName;\r\n const isServerMode = 'request' in params;\r\n const request = isServerMode\r\n ? (params as IServerSideGetRowsParams).request\r\n : (params as IGetRowsParams);\r\n const requestSrv = request as IServerSideGetRowsRequest;\r\n\r\n const pivotActive = !isServerMode\r\n ? false\r\n : requestSrv.pivotMode &&\r\n requestSrv.pivotCols.length > 0 &&\r\n requestSrv.valueCols.length > 0;\r\n\r\n if (!pivotActive) {\r\n let fn = (params as any).columnApi.setPivotResultColumns;\r\n if (fn != null) {\r\n // if ((params as any).columnApi.isPivotMode()) {\r\n (params as any).columnApi.setPivotResultColumns([]);\r\n // }\r\n } else {\r\n (params as any).columnApi.setSecondaryColumns([]);\r\n }\r\n }\r\n const options = me.getOdataOptions(params);\r\n const query = me.toQuery(options);\r\n if (\r\n options.skip === 0 &&\r\n (!isServerMode ||\r\n (isServerMode &&\r\n (params as IServerSideGetRowsParams).parentNode.level === -1))\r\n ) {\r\n me.cancelPromice.cancel();\r\n me.cancelPromice = me.createCancelablePromise();\r\n }\r\n Promise.race([me.cancelPromice.promise, me.callApi(query)]).then(\r\n async (x) => {\r\n if (!x) {\r\n // params.failCallback();\r\n return;\r\n } else {\r\n const values = me.getOdataResult(x);\r\n if (!pivotActive) {\r\n if (!options.apply) {\r\n me.setResult(\r\n params,\r\n isServerMode,\r\n values,\r\n x['@odata.count'] || x[0]?.totalCount\r\n );\r\n if (this.afterLoadData) {\r\n this.afterLoadData(\r\n options,\r\n values,\r\n x['@odata.count'] || x[0]?.totalCount\r\n );\r\n }\r\n } else {\r\n let count = values.length;\r\n if (count === options.top && options.skip === 0) {\r\n // If received grouped count of value large than requested then request total count of values\r\n me.callApi(query + '/aggregate($count as count)').then((y) => {\r\n count = me.getOdataResult(y)[0].count;\r\n me.setResult(params, isServerMode, values, count);\r\n });\r\n } else {\r\n if (options.skip != null && options.skip > 0) {\r\n count = null;\r\n }\r\n me.setResult(params, isServerMode, values, count);\r\n if (this.afterLoadData) {\r\n this.afterLoadData(options, values, count);\r\n }\r\n }\r\n }\r\n } else {\r\n let rowData = me.getOdataResult(x);\r\n // Check count\r\n if (\r\n rowData.length === options.top &&\r\n options.skip === 0 &&\r\n requestSrv.groupKeys.length === 0\r\n ) {\r\n let eof = false;\r\n while (!eof) {\r\n options.skip += options.top || 0;\r\n const subQuery = me.toQuery(options);\r\n const newRowData = await me.callApi(subQuery);\r\n if (!newRowData) {\r\n //params.failCallback();\r\n return;\r\n }\r\n eof = newRowData.length !== options.top;\r\n rowData = rowData.concat(newRowData);\r\n }\r\n }\r\n const pivotResult = me.getPivot(\r\n requestSrv.pivotCols,\r\n requestSrv.rowGroupCols,\r\n requestSrv.valueCols,\r\n rowData,\r\n childCount\r\n );\r\n rowData = pivotResult.data;\r\n const secondaryColDefs = pivotResult.secondaryColDefs;\r\n rowData = me.buildGroupsFromData(\r\n rowData,\r\n requestSrv.rowGroupCols,\r\n requestSrv.groupKeys,\r\n childCount\r\n );\r\n const totalCount =\r\n requestSrv.groupKeys.length === 0\r\n ? rowData.length\r\n : rowData.length === options.top\r\n ? null\r\n : rowData.length;\r\n // if (totalCount > (options.top || 0)) {\r\n // const serverSideBlock = (params as any).parentNode.rowModel\r\n // .rowNodeBlockLoader.blocks[0];\r\n // serverSideBlock.rowNodeCacheParams.blockSize = totalCount;\r\n // serverSideBlock.endRow = serverSideBlock.startRow + totalCount;\r\n // serverSideBlock.createRowNodes();\r\n // }\r\n me.setResult(params, isServerMode, rowData, totalCount);\r\n if (this.afterLoadData) {\r\n this.afterLoadData(options, rowData, totalCount);\r\n }\r\n if (requestSrv.groupKeys.length === 0) {\r\n if (this.beforeSetSecondaryColumns) {\r\n this.beforeSetSecondaryColumns(secondaryColDefs);\r\n }\r\n let fn = (params as any).columnApi.setPivotResultColumns;\r\n if (fn) {\r\n (params as any).columnApi.setPivotResultColumns(\r\n secondaryColDefs\r\n );\r\n } else {\r\n (params as any).columnApi.setSecondaryColumns(secondaryColDefs);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n (err) => {\r\n me.setResult(params, isServerMode, [], 0);\r\n if (this.setError) {\r\n this.setError(err, params);\r\n }\r\n }\r\n );\r\n }\r\n /**\r\n * Set result\r\n * @param params ag-grid details for the request\r\n * @param isServerMode detect type of params\r\n * @param rowsThisBlock data of the request\r\n * @param rowCount count of total result\r\n */\r\n private setResult = (\r\n params: IGetRowsParams | IServerSideGetRowsParams,\r\n isServerMode: boolean,\r\n rowsThisBlock: any[],\r\n rowCount?: number\r\n ): void => {\r\n if (isServerMode) {\r\n (params as IServerSideGetRowsParams).success({\r\n rowData: rowsThisBlock,\r\n rowCount: rowCount,\r\n });\r\n } else {\r\n (params as IGetRowsParams).successCallback(rowsThisBlock, rowCount);\r\n }\r\n };\r\n /**\r\n * Generate odata options for build query from ag-grid request\r\n * @param params ag-grid details for the request\r\n */\r\n getOdataOptions = (\r\n params: IGetRowsParams | IServerSideGetRowsParams\r\n ): OdataQueryExtendFull => {\r\n const me = this;\r\n const options: OdataQueryExtendFull = {};\r\n const isServerMode = 'request' in params;\r\n const request = isServerMode\r\n ? (params as IServerSideGetRowsParams).request\r\n : (params as IGetRowsParams);\r\n const childCount = me.groupCountFieldName;\r\n if (this.beforeRequest) {\r\n this.beforeRequest(options, this, request);\r\n }\r\n if (request.sortModel.length > 0) {\r\n const sort = options.sort || [];\r\n for (let i = 0; i < request.sortModel.length; i++) {\r\n const col = request.sortModel[i];\r\n let colName = me.getWrapColumnName(col.colId);\r\n if (col.sort !== 'asc') {\r\n colName += ' desc';\r\n }\r\n sort.push(colName);\r\n }\r\n options.sort = sort;\r\n }\r\n\r\n const filter = options.filter || [];\r\n for (const colName in request.filterModel) {\r\n if (request.filterModel.hasOwnProperty(colName)) {\r\n const col = request.filterModel[colName];\r\n let colFilter = '';\r\n if (!col.operator) {\r\n colFilter = me.getFilterOdata(colName, col);\r\n if (colFilter) {\r\n filter.push(colFilter);\r\n }\r\n } else {\r\n const condition1 = me.getFilterOdata(colName, col.condition1);\r\n const condition2 = me.getFilterOdata(colName, col.condition2);\r\n if (condition1 && condition2) {\r\n colFilter = `(${condition1} ${col.operator.toLowerCase()} ${condition2})`;\r\n filter.push(colFilter);\r\n }\r\n }\r\n }\r\n }\r\n\r\n let pivotActive = false;\r\n\r\n const apply = options.apply || [];\r\n if (isServerMode) {\r\n const requestSrv = request as IServerSideGetRowsRequest;\r\n pivotActive =\r\n requestSrv.pivotMode &&\r\n requestSrv.pivotCols.length > 0 &&\r\n requestSrv.valueCols.length > 0;\r\n if (requestSrv.rowGroupCols.length > 0) {\r\n const filterGroupBy: string[] = [];\r\n if (requestSrv.groupKeys.length < requestSrv.rowGroupCols.length) {\r\n // If request only groups\r\n for (let idx = 0; idx < requestSrv.groupKeys.length; idx++) {\r\n const colValue = requestSrv.groupKeys[idx];\r\n const condition = `${me.getWrapColumnName(\r\n requestSrv.rowGroupCols[idx].field\r\n )} eq ${\r\n (me.isStrVal(colValue) ? \"'\" : '') +\r\n me.encode(colValue) +\r\n (me.isStrVal(colValue) ? \"'\" : '')\r\n }`;\r\n filterGroupBy.push(condition);\r\n }\r\n if (filterGroupBy.length > 0 || filter.length > 0) {\r\n // Filters must by first\r\n apply.push(`filter(${filterGroupBy.concat(filter).join(' and ')})`);\r\n }\r\n\r\n const aggregate: string[] = [];\r\n if (childCount) {\r\n aggregate.push(me.odataAggregation.count(childCount));\r\n }\r\n if (requestSrv.valueCols.length > 0) {\r\n for (let idx = 0; idx < requestSrv.valueCols.length; idx++) {\r\n const colValue = requestSrv.valueCols[idx];\r\n colValue.aggFunc &&\r\n aggregate.push(\r\n me.odataAggregation[colValue.aggFunc](\r\n me.getWrapColumnName(colValue.field)\r\n )\r\n );\r\n }\r\n }\r\n let groups = [\r\n me.getWrapColumnName(\r\n requestSrv.rowGroupCols[requestSrv.groupKeys.length].field\r\n ),\r\n ];\r\n const sort = options.sort || [];\r\n const sortColOnly = sort.map((x) => x.split(' ')[0]);\r\n if (pivotActive) {\r\n groups = groups.concat(\r\n requestSrv.pivotCols.map((x) => me.getWrapColumnName(x.field))\r\n );\r\n groups.forEach((x) => {\r\n if (sortColOnly.indexOf(x) < 0) {\r\n sort.push(x);\r\n }\r\n });\r\n }\r\n options.sort = sort;\r\n apply.push(\r\n `groupby((${groups.join(',')})${\r\n aggregate.length > 0 ? `,aggregate(${aggregate.join(',')})` : ''\r\n })`\r\n );\r\n\r\n options.apply = apply;\r\n if (options.sort && options.sort.length > 0) {\r\n options.sort = options.sort.filter(\r\n (x) => groups.indexOf(x.split(' ')[0]) >= 0\r\n );\r\n }\r\n // delete options.sort;\r\n } else {\r\n // If request rowData by group filter\r\n for (let idx = 0; idx < requestSrv.groupKeys.length; idx++) {\r\n const colValue = requestSrv.groupKeys[idx];\r\n const condition = `${me.getWrapColumnName(\r\n requestSrv.rowGroupCols[idx].field\r\n )} eq ${\r\n (me.isStrVal(colValue) ? \"'\" : '') +\r\n me.encode(colValue) +\r\n (me.isStrVal(colValue) ? \"'\" : '')\r\n }`;\r\n filter.push(condition);\r\n }\r\n }\r\n }\r\n }\r\n if (filter.length > 0) {\r\n options.filter = filter;\r\n }\r\n if (apply.length > 0) {\r\n options.apply = apply;\r\n delete options.filter;\r\n delete options.expand;\r\n delete options.select;\r\n // options.sort = null;\r\n }\r\n options.skip = request.startRow;\r\n options.top = (request.endRow || 0) - (request.startRow || 0);\r\n\r\n if (!options.apply && options.skip === 0) {\r\n options.count = true;\r\n }\r\n return options;\r\n };\r\n /**\r\n * Generate odata query from ag-grid request\r\n * @param params ag-grid details for the request\r\n */\r\n getOdataQuery = (params: IGetRowsParams | IServerSideGetRowsParams): string =>\r\n this.toQuery(this.getOdataOptions(params));\r\n}\r\n\r\nexport class OdataProviderClient extends OdataProvider {\r\n public override getRows(params: IServerSideGetRowsParams) {\r\n super.getRows(params);\r\n }\r\n}\r\nexport class OdataServerSideProvider extends OdataProvider {\r\n public override getRows(params: IServerSideGetRowsParams): void {\r\n super.getRows(params);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\r\n\r\n@Component({\r\n selector: 'lib-button-renderer',\r\n template: `\r\n <button class=\"btn-actions\" type=\"button\" (click)=\"onClick($event)\" (mousedown)=\"onMouseDown($event)\" [attr.data-title]=\"params.tooltip\">\r\n @if (icon && !label) {\r\n <span> <i class=\"{{ icon }}\"></i> </span>\r\n }\r\n @if (!icon && label) {\r\n <span>{{ label }}</span>\r\n }\r\n @if (icon && label) {\r\n <span><i class=\"{{ icon }}\"></i> {{ label }}</span>\r\n }\r\n </button>\r\n `,\r\n standalone: false\r\n})\r\nexport class ButtonRendererComponent implements ICellRendererAngularComp {\r\n params: any;\r\n label: any;\r\n icon: any;\r\n\r\n agInit(params: any): void {\r\n this.params = params;\r\n this.label = this.params.label || null;\r\n this.icon = this.params.icon;\r\n }\r\n\r\n refresh(params?: any): boolean {\r\n return false;\r\n }\r\n\r\n onClick($event: any) {\r\n $event.stopPropagation();\r\n if (this.params.onClick instanceof Function) {\r\n // put anything into params u want pass into parents component\r\n const params = {\r\n event: $event,\r\n rowData: Object.assign({}, this.params.node.data, {\r\n buttonName: this.params.buttonName,\r\n buttonText: this.params.label,\r\n buttonIcon: this.params.icon,\r\n }),\r\n };\r\n this.params.onClick(params);\r\n }\r\n }\r\n onMouseDown($event: any) {\r\n $event.stopPropagation();\r\n }\r\n}\r\n","import { DatePipe } from '@angular/common';\r\nimport { Component } from '@angular/core';\r\nimport { ITooltipAngularComp } from 'ag-grid-angular';\r\nimport { ITooltipParams } from 'ag-grid-community';\r\n\r\n@Component({\r\n selector: 'tooltip-component',\r\n template: ` <div class=\"custom-tooltip\">\r\n <p>\r\n <span>{{ params.value }}</span>\r\n </p>\r\n </div>`,\r\n standalone: false\r\n})\r\nexport class CustomTooltip implements ITooltipAngularComp {\r\n constructor(private datePipe: DatePipe) {}\r\n public params!: { color: string } & ITooltipParams;\r\n agInit(params: { color: string } & ITooltipParams): void {\r\n this.params = params;\r\n params.value = params.valueFormatted;\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\r\n\r\n@Component({\r\n selector: 'lib-dropdown-renderer',\r\n template: `\r\n <div class=\"dropdown\">\r\n <button type=\"button\" class=\"btn btn-white\" data-toggle=\"dropdown\">\r\n <i class=\"fa fa-ellipsis-v\"></i>\r\n </button>\r\n <div class=\"dropdown-menu\">\r\n <!-- gridId == 15 -->\r\n @if (isGrid15) {\r\n @for (data of dropDownData; track data; let i = $index) {\r\n @if (i !== 4) {\r\n <a\r\n class=\"dropdown-item\"\r\n [href]=\"getUrl(i)\"\r\n (click)=\"onClick($event, i)\"\r\n [innerHTML]=\"data\"\r\n target=\"_self\"></a>\r\n }\r\n @if (i == 4) {\r\n <span\r\n class=\"dropdown-item\"\r\n (click)=\"onClick($event, i)\"\r\n [innerHTML]=\"data\"></span>\r\n }\r\n }\r\n } @else {\r\n @for (data of dropDownData; track data) {\r\n <span\r\n class=\"dropdown-item\"\r\n (click)=\"onClick($event)\"\r\n [innerHTML]=\"data\"></span>\r\n }\r\n }\r\n <!-- gridId != 15 -->\r\n </div>\r\n </div>\r\n `,\r\n standalone: false\r\n})\r\nexport class DropdownRenderer implements ICellRendererAngularComp {\r\n params: any;\r\n dropDownData: any;\r\n isGrid15: boolean = false; //Only changing renderer for home grid\r\n\r\n agInit(params: any): void {\r\n this.params = params;\r\n this.dropDownData = this.params.dropDownData ? this.params.dropDownData.split(',') : [];\r\n this.isGrid15 = this.params.dropDownData.toLowerCase().includes('create/view dac');\r\n }\r\n\r\n refresh(params?: any): boolean {\r\n return false;\r\n }\r\n\r\n onClick($event: any, index?: number) {\r\n if (this.isGrid15) {\r\n const toolId = this.params.node.data.toolId;\r\n const urls = [\r\n `/home/tool/details/${toolId}/tracker`,\r\n `/home/details/${toolId}`,\r\n `/home/lss/details/${toolId}`,\r\n `/home/tool/details/${toolId}/dac`\r\n ];\r\n\r\n if (\r\n ($event.ctrlKey || $event.metaKey) &&\r\n typeof index === 'number' &&\r\n urls[index] &&\r\n index != 4\r\n ) {\r\n $event.preventDefault();\r\n window.open(urls[index], '_blank');\r\n $event.stopPropagation();\r\n return;\r\n }\r\n }\r\n if (this.params.onClick instanceof Function) {\r\n const params = {\r\n event: $event,\r\n rowData: Object.assign({}, this.params.node.data, {\r\n buttonName: $event.target.innerText,\r\n }),\r\n };\r\n this.params.onClick(params);\r\n }\r\n }\r\n\r\n getUrl(index: number): string {\r\n const toolId = this.params?.node?.data?.toolId;\r\n const urls = [\r\n `/home/tool/details/${toolId}/tracker`,\r\n `/home/details/${toolId}`,\r\n `/home/lss/details/${toolId}`,\r\n `/home/tool/details/${toolId}/dac`\r\n ];\r\n return urls[index] || '#';\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\r\n\r\n@Component({\r\n selector: 'app-cell-data',\r\n template: `\r\n<span>\r\n {{ params.value }}\r\n</span>\r\n `,\r\n standalone: false\r\n})\r\nexport class CellRendererComponent implements ICellRendererAngularComp {\r\n params: any;\r\n agInit(params: any): void {\r\n this.params = params;\r\n }\r\n refresh(params?: any): boolean {\r\n return false;\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\r\n\r\n@Component({\r\n selector: 'app-fill-cell-data',\r\n template: `\r\n@if (params.value && params.field === 'dacStatus') {\r\n <span #dacIndicator class=\"status-fill-cell text-white\" [ngStyle]=\"{'background': rowData.dacIndicator? rowData.dacIndicator : '#fff', 'width':'178px'}\" >\r\n {{ params.value }}\r\n </span>\r\n}\r\n@if (params.value && params.field === 'completionStatus') {\r\n <span #pocIndicator class=\"status-fill-cell text-white\" [ngStyle]=\"{'background': rowData.pocIndicator? rowData.pocIndicator:'#fff', 'width':'95px'}\" >\r\n {{ params.value }}\r\n </span>\r\n}\r\n@if (params.value && params.field === 'funding') {\r\n <span #fundingIndicator class=\"status-fill-cell text-white\" [ngStyle]=\"{'background': rowData.fundingIndicator? rowData.fundingIndicator:'#fff', 'width':'108px'}\">\r\n {{ params.value }}\r\n </span>\r\n}\r\n@if (params.value && params.field === 'layout') {\r\n <span #layoutIndicator class=\"status-fill-cell text-white\" [ngStyle]=\"{'background': rowData.layoutIndicator? rowData.layoutIndicator:'#fff', 'width':'104px'}\">\r\n {{ params.value }}\r\n </span>\r\n}\r\n@if (params.value && params.field === 'facilityName') {\r\n <span #facilityIndicator class=\"info-fill-cell text-white\" [ngStyle]=\"{'background': 'var(--primary)'}\" >\r\n {{ params.value }}\r\n </span>\r\n}\r\n@if (params.value && params.field === 'aefirm') {\r\n <span #aeIndicator class=\"info-fill-cell text-black\" [ngStyle]=\"{'background': 'var(--gray-6)'}\" >\r\n {{ params.value }}\r\n </span>\r\n}\r\n@if (!params.value) {\r\n <span>{{params.value}}</span>\r\n}\r\n`,\r\n standalone: false\r\n})\r\nexport class FillCellRendererComponent implements ICellRendererAngularComp {\r\n params: any;\r\n rowData: any;\r\n agInit(params: any): void {\r\n this.params = params;\r\n this.rowData = params.data;\r\n }\r\n refresh(params?: any): boolean {\r\n return false;\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, forwardRef, OnInit, ViewChild, AfterViewInit } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DatePicker, DatePickerModule } from 'primeng/datepicker';\r\nimport { IFloatingFilter, IFloatingFilterParams } from 'ag-grid-community';\r\n\r\n@Component({\r\n selector: 'app-datepicker',\r\n standalone: true,\r\n imports: [CommonModule, DatePickerModule, FormsModule],\r\n templateUrl: './date-filter.component.html',\r\n styleUrls: ['./date-filter.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DatepickerComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class DatepickerComponent implements ControlValueAccessor, OnInit, AfterViewInit, OnInit, IFloatingFilter {\r\n @Input() disabled: boolean = false;\r\n @Input() selectionMode: 'single' | 'range' = 'range';\r\n @Input() showIcon: boolean = true;\r\n @Input() iconDisplay: 'input' | 'button' = 'input';\r\n @Input() appendTo: string = 'body';\r\n @Input() inline: boolean = false;\r\n @Input() showButtonBar: boolean = true;\r\n @Input() inputId: string = '';\r\n @Input() showOnFocus: boolean = false;\r\n @Input() gridComponent: any;\r\n\r\n @Output() ngModelChange = new EventEmitter<any>();\r\n\r\n params: IFloatingFilterParams | undefined;\r\n currentValue: any = null;\r\n dateFormat: string = 'yy-mm-dd'; // Important!!! Do not change the format due to primeNG issues with yyyy format\r\n placeholder: string = 'yyyy-mm-dd';\r\n isInvalid: boolean = false;\r\n value: Date | Date[] | null = null;\r\n uniqueId: string | undefined;\r\n @ViewChild('datepicker') datepicker: DatePicker | undefined;\r\n\r\n private onChange = (value: any) => { };\r\n private onTouched = () => { };\r\n\r\n private isManualInput = false;\r\n private preventPrimeNGUpdates = false;\r\n private currentInputValue: string = '';\r\n private lastEmittedValue: any = null;\r\n private previousValidValue: any = null;\r\n private hasStoredPreviousValue = false;\r\n private isDatepickerOpen = false;\r\n private lastKnownValue: any = null;\r\n private isRestoring = false;\r\n\r\n constructor() { \r\n const sampleDate = new Date(2000, 0, 2); // Jan 2, 2000\r\n let localeDate = sampleDate.toLocaleDateString();\r\n // Replace numbers with format tokens\r\n localeDate = localeDate\r\n .replace('2000', 'yyyy')\r\n .replace('00', 'yy')\r\n .replace('2', 'dd')\r\n .replace('1', 'MM');\r\n // Remove any remaining numbers\r\n this.dateFormat = localeDate.replace(/\\d+/g, '');\r\n this.placeholder = this.dateFormat.toLowerCase();\r\n this.dateFormat = this.placeholder.replace(/yyyy/g, 'yy');\r\n }\r\n\r\n // Date Floating Filter functions\r\n agInit(params: IFloatingFilterParams): void {\r\n this.params = params;\r\n if ((params as any).iconDisplay) {\r\n this.iconDisplay = (params as any).iconDisplay;\r\n }\r\n }\r\n\r\n onParentModelChanged(parentModel: any): void {\r\n // Update the floating filter when the main filter changes\r\n if (parentModel && (parentModel.dateFrom || parentModel.dateTo)) {\r\n const fromDateStr = parentModel.dateFrom ? this.extractDatePart(parentModel.dateFrom) : '';\r\n const toDateStr = parentModel.dateTo ? this.extractDatePart(parentModel.dateTo) : '';\r\n\r\n // Convert strings to Date objects for proper display in lspx-datepicker\r\n const fromDate = fromDateStr ? this.parseStringToDate(fromDateStr) : null;\r\n const toDate = toDateStr ? this.parseStringToDate(toDateStr) : null;\r\n\r\n // Set the current value as array of Date objects for range picker\r\n if (fromDate && toDate) {\r\n this.currentValue = [fromDate, toDate];\r\n } else if (fromDate) {\r\n this.currentValue = [fromDate, null];\r\n } else {\r\n this.currentValue = null;\r\n }\r\n } else {\r\n this.currentValue = null;\r\n }\r\n }\r\n\r\n private parseStringToDate(dateStr: string): Date | null {\r\n if (!dateStr || dateStr.trim() === '') return null;\r\n\r\n // Remove spaces and non-digit/non-hyphen characters\r\n const cleaned = dateStr.replace(/[^\\d-]/g, '');\r\n\r\n // Handle YYYYMMDD format\r\n if (/^\\d{8}$/.test(cleaned)) {\r\n const year = parseInt(cleaned.substring(0, 4), 10);\r\n const month = parseInt(cleaned.substring(4, 6), 10) - 1;\r\n const day = parseInt(cleaned.substring(6, 8), 10);\r\n const date = new Date(year, month, day);\r\n return !isNaN(date.getTime()) ? date : null;\r\n }\r\n\r\n // Handle YYYY-MM-DD format\r\n const parts = cleaned.split('-');\r\n if (parts.length === 3) {\r\n const year = parseInt(parts[0], 10);\r\n const month = parseInt(parts[1], 10) - 1;\r\n const day = parseInt(parts[2], 10);\r\n const date = new Date(year, month, day);\r\n return !isNaN(date.getTime()) ? date : null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n onDateChange(newValue: any): void {\r\n this.currentValue = newValue;\r\n\r\n // Only apply filter if we have a complete range or clearing the filter\r\n if (!newValue) {\r\n this.applyFilter(null);\r\n } else if (Array.isArray(newValue) && newValue.length === 2 && newValue[0] && newValue[1]) {\r\n this.applyFilter(newValue);\r\n }\r\n }\r\n\r\n private applyFilter(value: any): void {\r\n const filterModel = this.params?.api.getFilterModel();\r\n const colId = this.params?.column?.getColId();\r\n let isAlreadyCleared = false;\r\n\r\n if (colId) {\r\n isAlreadyCleared = !filterModel || !filterModel[colId];\r\n } else {\r\n isAlreadyCleared = false;\r\n }\r\n\r\n if (!value && isAlreadyCleared) {\r\n return;\r\n }\r\n\r\n this.params?.parentFilterInstance((instance) => {\r\n if (value && Array.isArray(value) && value.length === 2 && value[0] && value[1]) {\r\n // Convert yy-mm-dd format to yyyy-mm-dd for AG Grid filter\r\n const fromDate = this.convertToFullYear(value[0]);\r\n const toDate = this.convertToFullYear(value[1]);\r\n\r\n instance.setModel({\r\n filterType: 'date',\r\n type: 'inRange',\r\n dateFrom: fromDate,\r\n dateTo: toDate\r\n });\r\n } else {\r\n instance.setModel(null);\r\n }\r\n this.params?.api.onFilterChanged();\r\n });\r\n }\r\n\r\n private convertToFullYear(dateStr: string | Date): string {\r\n if (!dateStr) return '';\r\n\r\n // If it's a Date object, format it as YYYY-MM-DD\r\n if (dateStr instanceof Date) {\r\n const year = dateStr.getFullYear();\r\n const month = String(dateStr.getMonth() + 1).padStart(2, '0');\r\n const day = String(dateStr.getDate()).padStart(2, '0');\r\n return `${year}-${month}-${day}`;\r\n }\r\n\r\n // Otherwise, treat as string\r\n const parts = dateStr.split('-');\r\n if (parts.length === 3) {\r\n let year = parseInt(parts[0], 10);\r\n\r\n // Convert 2-digit year to 4-digit year\r\n if (year < 100) {\r\n year += year < 50 ? 2000 : 1900;\r\n }\r\n\r\n return `${year}-${parts[1]}-${parts[2]}`;\r\n }\r\n\r\n return dateStr;\r\n }\r\n\r\n private extractDatePart(dateStr: string): string {\r\n if (!dateStr) return '';\r\n // Remove time part if present (e.g., \"2025-05-11 00:00:00\" -> \"2025-05-11\")\r\n return dateStr.split(' ')[0];\r\n }\r\n // End Date Floating Filter functions\r\n\r\n // Date Picker functions\r\n ngOnInit() {\r\n this.uniqueId = this.inputId || `datepicker_${Math.random().toString(36).substr(2, 9)}`;\r\n \r\n if (this.selectionMode === 'range') {\r\n this.placeholder = this.placeholder || 'Enter start date (YYYYMMDD)';\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n // Get reference to the input element for direct manipulation\r\n if (this.datepicker && this.datepicker.inputfieldViewChild) {\r\n const inputElement = this.datepicker.inputfieldViewChild.nativeElement;\r\n \r\n // Override PrimeNG's input event handling completely\r\n inputElement.addEventListener('input', (event: any) => {\r\n event.stopImmediatePropagation(); // Stop PrimeNG from processing\r\n this.onInputChange(event);\r\n }, true);\r\n\r\n // Add focus event to capture the initial value when user starts editing\r\n inputElement.addEventListener('focus', (event: any) => {\r\n this.onInputFocus(event);\r\n });\r\n }\r\n }\r\n\r\n onInputFocus(event: any): void {\r\n // Store the current valid value when user starts editing\r\n if (!this.hasStoredPreviousValue && this.value !== null && this.value !== undefined) {\r\n this.previousValidValue = this.value;\r\n this.hasStoredPreviousValue = true;\r\n }\r\n }\r\n\r\n onInputChange(event: any): void {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value.replace(/\\D/g, '');\r\n \r\n // Store previous valid value when user starts editing (only if we don't have one stored)\r\n if (!this.hasStoredPreviousValue && this.value) {\r\n this.previousValidValue = this.value;\r\n this.hasStoredPreviousValue = true;\r\n }\r\n \r\n this.isManualInput = true;\r\n this.preventPrimeNGUpdates = true;\r\n \r\n if (this.datepicker) {\r\n this.datepicker.value = null;\r\n }\r\n \r\n // Format the value based on length\r\n let formattedValue = '';\r\n if (this.selectionMode === 'range') {\r\n // Format for range: YYYY-MM-DD YYYY-MM-DD\r\n if (value.length <= 4) {\r\n formattedValue = value;\r\n } else if (value.length <= 6) {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4);\r\n } else if (value.length <= 8) {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4, 6) + '-' + value.substring(6);\r\n } else if (value.length <= 12) {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4, 6) + '-' + value.substring(6, 8) + ' ' + value.substring(8);\r\n } else if (value.length <= 14) {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4, 6) + '-' + value.substring(6, 8) + ' ' + value.substring(8, 12) + '-' + value.substring(12);\r\n } else {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4, 6) + '-' + value.substring(6, 8) + ' ' + value.substring(8, 12) + '-' + value.substring(12, 14) + '-' + value.substring(14);\r\n }\r\n } else {\r\n // Format for single date: YYYY-MM-DD\r\n if (value.length <= 4) {\r\n formattedValue = value;\r\n } else if (value.length <= 6) {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4);\r\n } else {\r\n formattedValue = value.substring(0, 4) + '-' + value.substring(4, 6) + '-' + value.substring(6);\r\n }\r\n }\r\n \r\n // Store the current cursor position\r\n const cursorPosition = input.selectionStart || 0;\r\n const oldLength = input.value.length;\r\n \r\n // Update the input value directly\r\n input.value = formattedValue;\r\n \r\n // Adjust cursor position after formatting\r\n const newLength = formattedValue.length;\r\n const lengthDiff = newLength - oldLength;\r\n const newCursorPosition = Math.max(0, cursorPosition + lengthDiff);\r\n \r\n // Restore cursor position\r\n setTimeout(() => {\r\n input.setSelectionRange(newCursorPosition, newCursorPosition);\r\n }, 0);\r\n \r\n // Store the raw value for later use\r\n this.currentInputValue = value;\r\n \r\n // Process complete dates and store them as valid values\r\n if (this.selectionMode === 'range') {\r\n if (value.length === 8) {\r\n // Single complete date in range mode\r\n const date = this.parseDate(value);\r\n if (date) {\r\n this.value = [date];\r\n // Store this as a valid value for potential restoration\r\n if (!this.hasStoredPreviousValue) {\r\n this.previousValidValue = [date];\r\n this.hasStoredPreviousValue = true;\r\n }\r\n \r\n const formattedDate = this.formatDateToString(date);\r\n this.onChange([formattedDate]);\r\n this.ngModelChange.emit([formattedDate]);\r\n this.applyFilter([date]);\r\n setTimeout(() => this.reconnectToPrimeNG(), 100);\r\n }\r\n } else if (value.length === 16) {\r\n // Complete date range\r\n const startDate = this.parseDate(value.substring(0, 8));\r\n const endDate = this.parseDate(value.substring(8, 16));\r\n \r\n if (startDate && endDate) {\r\n this.value = [startDate, endDate];\r\n // Update the stored valid value to the complete range\r\n this.previousValidValue = [startDate, endDate];\r\n \r\n const formattedDates = [\r\n this.formatDateToString(startDate),\r\n this.formatDateToString(endDate)\r\n ];\r\n this.onChange(formattedDates);\r\n this.ngModelChange.emit(formattedDates);\r\n this.applyFilter([startDate, endDate]);\r\n setTimeout(() => this.reconnectToPrimeNG(), 100);\r\n }\r\n }\r\n } else {\r\n // Single date mode\r\n if (value.length === 8) {\r\n const date = this.parseDate(value);\r\n if (date) {\r\n this.value = date;\r\n // Store this as a valid value for potential restoration\r\n if (!this.hasStoredPreviousValue) {\r\n this.previousValidValue = date;\r\n this.hasStoredPreviousValue = true;\r\n }\r\n \r\n const formattedDate = this.formatDateToString(date);\r\n this.onChange(formattedDate);\r\n this.ngModelChange.emit(formattedDate);\r\n this.applyFilter(date);\r\n setTimeout(() => this.reconnectToPrimeNG(), 100);\r\n }\r\n }\r\n }\r\n \r\n // Handle empty input\r\n if (value.length === 0) {\r\n this.value = null;\r\n this.onChange(null);\r\n this.ngModelChange.emit(null);\r\n this.applyFilter(null);\r\n this.reconnectToPrimeNG();\r\n }\r\n }\r\n\r\n onInputBlur(event: any): void {\r\n // Only block blur if datepicker is open AND user is not manually typing\r\n if (this.isDatepickerOpen && !this.isManualInput) {\r\n return;\r\n }\r\n \r\n const input = event.target as HTMLInputElement;\r\n const value = input.value.replace(/\\D/g, '');\r\n \r\n const maxLength = this.selectionMode === 'range' ? 16 : 8;\r\n const isIncomplete = value.length > 0 && value.length < maxLength;\r\n \r\n if (isIncomplete) {\r\n if (this.previousValidValue) {\r\n \r\n // Set restoration flag to block external interference\r\n this.isRestoring = true;\r\n \r\n // Reset flags to allow restoration\r\n this.isManualInput = false;\r\n this.preventPrimeNGUpdates = false;\r\n \r\n // Restore the previous valid value to both component and input\r\n this.value = this.previousValidValue;\r\n \r\n // Format the previous value for display in input\r\n let displayValue = '';\r\n if (this.selectionMode === 'range' && Array.isArray(this.previousValidValue)) {\r\n if (this.previousValidValue.length === 1) {\r\n displayValue = this.previousValidValue[0].toLocaleDateString();\r\n } else if (this.previousValidValue.length === 2) {\r\n const start = this.previousValidValue[0].toLocaleDateString();\r\n const end = this.previousValidValue[1].toLocaleDateString();\r\n displayValue = `${start} - ${end}`;\r\n }\r\n } else if (this.previousValidValue instanceof Date) {\r\n displayValue = this.previousValidValue.toLocaleDateString();\r\n }\r\n \r\n // Aggressive restoration - keep setting the value until it sticks\r\n const restoreInputValue = () => {\r\n input.value = displayValue;\r\n };\r\n \r\n // Initial restoration\r\n restoreInputValue();\r\n \r\n // Keep restoring every 10ms for the first 200ms to fight any interference\r\n const restorationInterval = setInterval(() => {\r\n if (input.value === '' || input.value !== displayValue.substring(0, 4) + '-' + displayValue.substring(4, 6) + '-' + displayValue.substring(6, 8) + ' ' + displayValue.substring(8, 12) + '-' + displayValue.substring(12, 14) + '-' + displayValue.substring(14, 16)) {\r\n restoreInputValue();\r\n }\r\n }, 10);\r\n \r\n // Stop aggressive restoration after 200ms\r\n setTimeout(() => {\r\n clearInterval(restorationInterval);\r\n }, 200);\r\n \r\n setTimeout(() => {\r\n // Clear restoration flag after sufficient time\r\n this.isRestoring = false;\r\n }, 500);\r\n \r\n // Delay reconnection to avoid interfering with restored input\r\n setTimeout(() => {\r\n this.reconnectToPrimeNG();\r\n }, 250); // Increased delay to allow aggressive restoration to finish\r\n \r\n } else {\r\n input.value = '';\r\n \r\n // Clear everything since there's no valid previous state\r\n this.value = null;\r\n this.onChange(null);\r\n this.ngModelChange.emit(null);\r\n this.reconnectToPrimeNG();\r\n }\r\n } else if (value.length === 0) {\r\n this.value = null;\r\n this.previousValidValue = null;\r\n this.hasStoredPreviousValue = false;\r\n \r\n // Emit null to clear the filter\r\n this.onChange(null);\r\n this.ngModelChange.emit(null);\r\n \r\n this.reconnectToPrimeNG();\r\n } else {\r\n // Complete date - just reconnect normally\r\n this.reconnectToPrimeNG();\r\n }\r\n\r\n this.isManualInput = false;\r\n this.preventPrimeNGUpdates = false;\r\n }\r\n\r\n onKeyDown(event: KeyboardEvent): void {\r\n // Allow: backspace, delete, tab, escape, enter, and navigation keys\r\n if ([8, 9, 27, 13, 46, 37, 38, 39, 40].indexOf(event.keyCode) !== -1 ||\r\n // Allow: Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+X\r\n (event.keyCode === 65 && event.ctrlKey === true) ||\r\n (event.keyCode === 67 && event.ctrlKey === true) ||\r\n (event.keyCode === 86 && event.ctrlKey === true) ||\r\n (event.keyCode === 88 && event.ctrlKey === true)) {\r\n \r\n // Handle Enter key to process incomplete dates\r\n if (event.keyCode === 13) {\r\n const input = event.target as HTMLInputElement;\r\n const value = input.value.replace(/\\D/g, '');\r\n if (value.length > 0 && value.length < 8) {\r\n // Clear incomplete date on Enter\r\n input.value = '';\r\n this.value = null;\r\n this.onChange(null);\r\n this.ngModelChange.emit(null);\r\n // Reset flags\r\n this.isManualInput = false;\r\n this.preventPrimeNGUpdates = false;\r\n }\r\n }\r\n \r\n return;\r\n }\r\n \r\n // Ensure that it is a number and stop the keypress if not\r\n if ((event.shiftKey || (event.keyCode < 48 || event.keyCode > 57)) && (event.keyCode < 96 || event.keyCode > 105)) {\r\n event.preventDefault();\r\n }\r\n \r\n // Limit to appropriate number of digits based on mode\r\n const input = event.target as HTMLInputElement;\r\n const currentValue = input.value.replace(/\\D/g, ''); // Remove non-digits\r\n const maxLength = this.selectionMode === 'range' ? 16 : 8;\r\n \r\n if (currentValue.length >= maxLength && ![8, 9, 27, 13, 46, 37, 38, 39, 40].includes(event.keyCode)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n onValueChange(newValue: Date | Date[] | null): void {\r\n // Block ALL PrimeNG updates during manual input\r\n if (this.isManualInput || this.preventPrimeNGUpdates) {\r\n return;\r\n }\r\n\r\n // Block changes when datepicker is open but no actual selection was made\r\n if (this.isDatepickerOpen) {\r\n return;\r\n }\r\n\r\n // Check if this is actually a new value or just PrimeNG noise\r\n const currentValueString = JSON.stringify(this.lastKnownValue);\r\n const newValueString = JSON.stringify(newValue);\r\n \r\n if (currentValueString === newValueString) {\r\n return;\r\n }\r\n \r\n let newValueFormatted: any = null;\r\n if (this.selectionMode === 'range') {\r\n if (Array.isArray(newValue) && newValue.length > 0) {\r\n newValueFormatted = newValue.map(date => \r\n date ? this.formatDateToString(date) : ''\r\n ).filter(date => date !== '');\r\n }\r\n } else {\r\n if (newValue instanceof Date) {\r\n newValueFormatted = this.formatDateToString(newValue);\r\n }\r\n }\r\n \r\n if (JSON.stringify(newValueFormatted) === JSON.stringify(this.lastEmittedValue)) {\r\n return;\r\n }\r\n \r\n this.value = newValue;\r\n this.lastKnownValue = newValue;\r\n \r\n let outputValue: any = null;\r\n\r\n if (this.selectionMode === 'range') {\r\n if (Array.isArray(newValue) && newValue.length > 0) {\r\n const formattedDates = newValue.map(date => \r\n date ? this.formatDateToString(date) : ''\r\n );\r\n \r\n if (formattedDates.some(date => date !== '')) {\r\n outputValue = formattedDates;\r\n }\r\n }\r\n } else {\r\n if (newValue instanceof Date) {\r\n outputValue = this.formatDateToString(newValue);\r\n }\r\n }\r\n \r\n this.lastEmittedValue = outputValue;\r\n this.onChange(outputValue);\r\n this.ngModelChange.emit(outputValue);\r\n if (this.selectionMode === 'range') {\r\n if (Array.isArray(newValue) && newValue.length === 2 && newValue[0] && newValue[1]) {\r\n this.applyFilter(newValue);\r\n }\r\n } else if (newValue){\r\n this.applyFilter(newValue);\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n // Block external writes during restoration\r\n if (this.isRestoring) {\r\n return;\r\n }\r\n \r\n // Block external writes during manual input to prevent resets\r\n if (this.isManualInput || this.preventPrimeNGUpdates) {\r\n return;\r\n }\r\n \r\n if (value === null || value === undefined || value === '') {\r\n this.value = null;\r\n return;\r\n }\r\n\r\n if (this.selectionMode === 'range') {\r\n if (Array.isArray(value)) {\r\n const dates = value.map(dateStr => \r\n typeof dateStr === 'string' ? this.parseStringToDate(dateStr) : dateStr\r\n ).filter(date => date !== null);\r\n this.value = dates.length > 0 ? dates : null;\r\n }\r\n } else {\r\n if (typeof value === 'string') {\r\n this.value = this.parseStringToDate(value);\r\n } else if (value instanceof Date) {\r\n this.value = value;\r\n }\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n // Custom template methods\r\n isStartDate(date: any): boolean {\r\n if (!this.value || !Array.isArray(this.value) || !this.value[0]) return false;\r\n return this.isSameDay(date, this.value[0]);\r\n }\r\n\r\n isEndDate(date: any): boolean {\r\n if (!this.value || !Array.isArray(this.value) || !this.value[1]) return false;\r\n return this.isSameDay(date, this.value[1]);\r\n }\r\n\r\n isInRange(date: any): boolean {\r\n if (!this.value || !Array.isArray(this.value) || !this.value[0] || !this.value[1]) return false;\r\n\r\n const currentDate = new Date(date.year, date.month, date.day);\r\n const startDate = this.value[0];\r\n const endDate = this.value[1];\r\n\r\n return currentDate > startDate && currentDate < endDate;\r\n }\r\n\r\n isSelected(date: any): boolean {\r\n return this.isStartDate(date) || this.isEndDate(date);\r\n }\r\n\r\n private isSameDay(date1: any, date2: Date): boolean {\r\n return date1.year === date2.getFullYear() &&\r\n date1.month === date2.getMonth() &&\r\n date1.day === date2.getDate();\r\n }\r\n\r\n getDateClasses(date: any): string {\r\n const classes: string[] = [];\r\n\r\n if (this.selectionMode === 'range') {\r\n if (this.isStartDate(date)) {\r\n classes.push('range-start');\r\n }\r\n if (this.isEndDate(date)) {\r\n classes.push('range-end');\r\n }\r\n if (this.isInRange(date)) {\r\n classes.push('range-middle');\r\n }\r\n } else if (this.selectionMode === 'single') {\r\n if (this.isSingleSelectedDate(date)) {\r\n classes.push('single-selected');\r\n }\r\n }\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n private isSingleSelectedDate(date: any): boolean {\r\n if (!this.value || Array.isArray(this.value)) return false;\r\n\r\n const selectedDate = this.value as Date;\r\n return this.isSameDay(date, selectedDate);\r\n }\r\n\r\n get datepickerClass(): string {\r\n return `custom-datepicker-${this.selectionMode}`;\r\n }\r\n\r\n onTodayButtonClick(): void {\r\n const today = new Date();\r\n let outputValue: any = null;\r\n \r\n if (this.selectionMode === 'range') {\r\n // For range mode, set both start and end to today to create a single-day range\r\n this.value = [today, today];\r\n outputValue = [this.formatDateToString(today), this.formatDateToString(today)];\r\n this.applyFilter([today, today]);\r\n } else {\r\n this.value = today;\r\n outputValue = this.formatDateToString(today);\r\n this.applyFilter(today);\r\n }\r\n \r\n // Update last known and emitted values\r\n this.lastKnownValue = this.value;\r\n this.lastEmittedValue = outputValue;\r\n \r\n // Reset datepicker state flags\r\n this.isDatepickerOpen = false;\r\n this.hasStoredPreviousValue = false;\r\n this.previousValidValue = null;\r\n \r\n // Emit the value to trigger filtering\r\n this.onChange(outputValue);\r\n this.ngModelChange.emit(outputValue);\r\n \r\n // Close the datepicker and remove focus\r\n this.closeDatepicker();\r\n }\r\n\r\n onClearButtonClick(): void {\r\n this.value = null;\r\n this.lastKnownValue = null;\r\n this.lastEmittedValue = null;\r\n \r\n // Reset datepicker state flags\r\n this.isDatepickerOpen = false;\r\n this.hasStoredPreviousValue = false;\r\n this.previousValidValue = null;\r\n \r\n // Emit null to trigger filtering\r\n this.onChange(null);\r\n this.ngModelChange.emit(null);\r\n this.applyFilter(null);\r\n \r\n // Close the datepicker and remove focus\r\n this.closeDatepicker();\r\n }\r\n\r\n private closeDatepicker(): void {\r\n setTimeout(() => {\r\n if (this.datepicker) {\r\n this.datepicker.hideOverlay();\r\n \r\n // Remove focus from input\r\n if (this.datepicker.inputfieldViewChild) {\r\n this.datepicker.inputfieldViewChild.nativeElement.blur();\r\n }\r\n }\r\n }, 50);\r\n }\r\n\r\n private parseDate(dateStr: string): Date | null {\r\n if (dateStr.length !== 8) return null;\r\n \r\n const year = parseInt(dateStr.substring(0, 4));\r\n const month = parseInt(dateStr.substring(4, 6)) - 1; // Month is 0-indexed\r\n const day = parseInt(dateStr.substring(6, 8));\r\n \r\n // Validate the date\r\n const date = new Date(year, month, day);\r\n const isValidDate = date.getFullYear() === year && \r\n date.getMonth() === month && \r\n date.getDate() === day &&\r\n year >= 1900 && year <= 2100 && // Reasonable year range\r\n month >= 0 && month <= 11 && // Valid month\r\n day >= 1 && day <= 31; // Valid day\r\n \r\n return isValidDate ? date : null;\r\n }\r\n\r\n // Convert Date object to string output in the specified format\r\n private formatDateToString(date: Date): string {\r\n if (!date || !(date instanceof Date) || isNaN(date.getTime())) return '';\r\n \r\n const year = date.getFullYear(); // This ensures 4-digit year\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n \r\n // Always return YYYY-MM-DD format regardless of dateFormat setting for consistency\r\n return `${year}-${month}-${day}`;\r\n }\r\n\r\n // Convert dateFormat to moment.js format\r\n private getMomentFormat(): string {\r\n let momentFormat = this.dateFormat;\r\n \r\n // Handle yyyy first (4-digit year) before yy (2-digit year)\r\n momentFormat = momentFormat.replace(/yyyy/g, 'YYYY'); // 4-digit year\r\n momentFormat = momentFormat.replace(/(?<!Y)yy(?!Y)/g, 'YY'); // 2-digit year (not preceded or followed by Y)\r\n momentFormat = momentFormat.replace(/dd/g, 'DD'); // day\r\n momentFormat = momentFormat.replace(/mm/g, 'MM'); // month\r\n \r\n return momentFormat;\r\n }\r\n\r\n private reconnectToPrimeNG(): void {\r\n setTimeout(() => {\r\n this.isManualInput = false;\r\n this.preventPrimeNGUpdates = false;\r\n \r\n // Only restore datepicker value if we have a valid value\r\n if (this.datepicker && this.value) {\r\n this.datepicker.value = this.value;\r\n }\r\n }, 100);\r\n }\r\n\r\n // Handle actual date selections from the datepicker\r\n onDateSelect(event: any): void {\r\n // Allow this selection to go through\r\n setTimeout(() => {\r\n this.isDatepickerOpen = false; // Mark as closed after selection\r\n \r\n // Process the selection\r\n if (this.datepicker && this.datepicker.value) {\r\n this.onValueChange(this.datepicker.value);\r\n }\r\n }, 10);\r\n }\r\n\r\n onDatepickerShow(): void {\r\n this.isDatepickerOpen = true;\r\n this.lastKnownValue = this.value;\r\n }\r\n\r\n onDatepickerHide(): void {\r\n this.isDatepickerOpen = false;\r\n }\r\n\r\n}\r\n","<div class=\"lspx-datepicker floating-datepicker\">\r\n <p-datepicker\r\n #datepicker\r\n [(ngModel)]=\"value\"\r\n (ngModelChange)=\"onValueChange($event)\"\r\n (onSelect)=\"onDateSelect($event)\"\r\n (onShow)=\"onDatepickerShow()\"\r\n (onHide)=\"onDatepickerHide()\"\r\n [selectionMode]=\"selectionMode\"\r\n [placeholder]=\"placeholder\"\r\n [showIcon]=\"showIcon\"\r\n [iconDisplay]=\"iconDisplay\"\r\n [dateFormat]=\"dateFormat\"\r\n [inline]=\"inline\"\r\n [showButtonBar]=\"showButtonBar\"\r\n [disabled]=\"disabled\"\r\n [appendTo]=\"appendTo\"\r\n [inputId]=\"uniqueId\"\r\n [readonlyInput]=\"false\"\r\n [styleClass]=\"'custom-datepicker ' + datepickerClass\"\r\n [dataType]=\"'date'\"\r\n [keepInvalid]=\"false\"\r\n [showOnFocus]=\"showOnFocus\"\r\n (onTodayClick)=\"onTodayButtonClick()\"\r\n (onClearClick)=\"onClearButtonClick()\"\r\n (onInput)=\"onInputChange($event)\"\r\n (onBlur)=\"onInputBlur($event)\"\r\n >\r\n <ng-template pTemplate=\"date\" let-date>\r\n <div class=\"custom-date-wrapper\" [ngClass]=\"getDateClasses(date)\">\r\n <span class=\"date-content\">{{ date.day }}</span>\r\n </div>\r\n </ng-template>\r\n </p-datepicker>\r\n</div> \r\n","import { DatePipe } from '@angular/common';\r\nimport { Injectable } from '@angular/core';\r\nimport { ValueFormatterParams } from 'ag-grid-community';\r\nimport moment from 'moment';\r\n\r\n@Injectable()\r\nexport class ColumnValueFormatter {\r\n constructor(private datePipe: DatePipe) {}\r\n\r\n private toLocal(dateString: string | Date, format?: string): string {\r\n if (!dateString) return '';\r\n let hasTime = false;\r\n if (typeof dateString === 'string') {\r\n const match = /T(\\d{2}):(\\d{2}):(\\d{2})/.exec(dateString);\r\n hasTime = !!(match && (match[1] !== '00' || match[2] !== '00' || match[3] !== '00'));\r\n } else if (dateString instanceof Date) {\r\n hasTime = true;\r\n }\r\n let date;\r\n if (hasTime) {\r\n date = moment.utc(dateString).toDate();\r\n return format ? moment(date).format(format) : date.toLocaleString(undefined, {\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n });\r\n } else {\r\n // Parse as local date, not UTC\r\n date = moment(dateString, 'YYYY-MM-DD').toDate();\r\n return format ? moment(date).format(format) : date.toLocaleDateString();\r\n }\r\n }\r\n\r\n public colValueFormatter(params: ValueFormatterParams, colType: string) {\r\n if (isNaN(+params.value)) {\r\n var dateWrapper = new Date(params.value);\r\n let isValidDate = !isNaN(dateWrapper.getDate());\r\n if (isValidDate && colType == 'date') {\r\n return this.toLocal(params.value);\r\n } else {\r\n return params.value;\r\n }\r\n }\r\n return params.value;\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n SimpleChanges\r\n} from '@angular/core';\r\nimport {\r\n ColDef,\r\n ColumnState,\r\n GetContextMenuItemsParams,\r\n GetRowIdFunc,\r\n GetRowIdParams,\r\n GridApi,\r\n GridReadyEvent,\r\n MenuItemDef,\r\n PaginationChangedEvent,\r\n PaginationNumberFormatterParams,\r\n RowModelType,\r\n ValueFormatterParams,\r\n} from 'ag-grid-community';\r\nimport { GridLibraryService } from './grid-library.service';\r\nimport { OdataServerSideProvider } from './helpers';\r\nimport { ButtonRendererComponent } from './renderer/button-renderer/button-renderer.component';\r\nimport { CustomTooltip } from './renderer/tooltip-renderer/custom-tooltip-renderer';\r\nimport { DropdownRenderer } from './renderer/dropdown-renderer/drop-down-renderer';\r\nimport { ColumnValueFormatter } from './formatters/column-value-formatter';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\nimport { TokenSharingService } from './token-sharing.service';\r\nimport { CellRendererComponent } from './renderer/cell-renderer/cell-renderer.component';\r\nimport { FillCellRendererComponent } from './renderer/fill-cell-renderer/fill-cell-renderer.component';\r\nimport { DatepickerComponent } from './renderer/date-filter/date-filter.component';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'lib-basesite-shared-grid-lib',\r\n template: `\r\n <ag-grid-angular\r\n #agGrid\r\n style=\"width: 100%;height:98.2vh\"\r\n class=\"ag-theme-balham shared-grid-lib\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [rowData]=\"rowData\"\r\n [rowSelection]=\"rowSelection\"\r\n [animateRows]=\"true\"\r\n (gridReady)=\"onGridReady($event)\"\r\n [pagination]=\"true\"\r\n [paginationAutoPageSize]=\"paginationAutoPageSize\"\r\n [suppressPaginationPanel]=\"true\"\r\n [tooltipShowDelay]=\"tooltipShowDelay\"\r\n [tooltipHideDelay]=\"tooltipHideDelay\"\r\n [rowModelType]=\"rowModelType\"\r\n [cacheBlockSize]=\"cacheBlockSize\"\r\n [maxConcurrentDatasourceRequests]=\"1\"\r\n [blockLoadDebounceMillis]=\"100\"\r\n (columnVisible)=\"saveGridState($event)\"\r\n (columnPinned)=\"saveGridState($event)\"\r\n (columnResized)=\"saveGridState($event)\"\r\n (columnMoved)=\"saveGridState($event)\"\r\n (sortChanged)=\"onSortChangedEvent($event)\"\r\n [rowMultiSelectWithClick]=\"rowMultiSelectWithClick\"\r\n [getContextMenuItems]=\"getContextMenuItems\"\r\n (selectionChanged)=\"onSelectionChanged($event)\"\r\n (filterChanged)=\"onFilterChanged($event)\"\r\n (firstDataRendered)=\"onFirstDataRendered($event)\"\r\n (onGridSizeChanged)=\"onGridSizeChanged($event)\"\r\n [rowHeight]=\"rowHeight\"\r\n (paginationChanged)=\"onPaginationChanged($event)\"\r\n [noRowsOverlayComponent]=\"noRowsOverlayComponent\"\r\n >\r\n </ag-grid-angular>\r\n <!-- Custom pagination -->\r\n <div class=\"custom-pagination\">\r\n <div class=\"pagination-nav\">\r\n <button class=\"nav-btn\" (click)=\"onPreviousPage()\" [disabled]=\"isFirstPage\">\r\n <span class=\"nav-btn-prev\"></span>\r\n </button>\r\n \r\n @for (page of pageNumbers; track page) {\r\n @if (page !== '...') {\r\n <span\r\n class=\"page-number\"\r\n [ngClass]=\"{'page-number--increased': typeof page === 'number' && +page > 99}\"\r\n [class.active]=\"page === currentPage\"\r\n (click)=\"goToPage(page)\"\r\n >\r\n {{ page }}\r\n </span>\r\n }\r\n @if (page === '...') {\r\n <span class=\"ellipsis\">...</span>\r\n }\r\n }\r\n \r\n <button class=\"nav-btn\" (click)=\"onNextPage()\" [disabled]=\"isLastPage\">\r\n <span class=\"nav-btn-next\"></span>\r\n </button>\r\n </div>\r\n \r\n <div class=\"pagination-info\">\r\n <span>{{ startRow }}-{{ endRow }} of {{ totalRows }} items</span>\r\n </div>\r\n </div>\r\n <ag-grid-angular\r\n #agGridHidden\r\n style=\"height:100vh; width:100%;display:none\"\r\n class=\"ag-theme-balham\"\r\n [rowData]=\"rowDataHidden\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [animateRows]=\"false\"\r\n [rowSelection]=\"'multiple'\"\r\n (gridReady)=\"onGridReadyExcel($event)\"\r\n [suppressScrollOnNewData]=\"true\"\r\n [cacheQuickFilter]=\"false\"\r\n >\r\n </ag-grid-angular>\r\n `,\r\n styles: [],\r\n standalone: false\r\n})\r\nexport class GridLibraryComponent implements OnInit, OnChanges, OnDestroy {\r\n //input params\r\n @Input() overrideColumnDefs: any;\r\n @Input() columnDefs: any;\r\n @Input() rowData: any;\r\n @Input() paginationAutoPageSize = false;\r\n @Input() rowSelection: any = 'multiple';\r\n @Input() gridId: any;\r\n @Input() loggedInUser: any;\r\n @Input() siteId: any;\r\n @Input() enableServerSidePaging: boolean = false;\r\n @Input() serverDataUrl!: string;\r\n @Input() environment!: string;\r\n @Input() cacheBlockSize: number = 0;\r\n @Input() rowMultiSelectWithClick: boolean = false;\r\n @Input() floatingFilter: boolean = false;\r\n @Input() token!: string;\r\n @Input() userRoles: any[] = [];\r\n @Input() rowHeight: number = 44;\r\n @Input() noRowsOverlayComponent!: any;\r\n //event emitters\r\n @Output() btnClickHandler = new EventEmitter<any>();\r\n @Output() firstDataRendered = new EventEmitter<any>();\r\n @Output() filterChanged = new EventEmitter<any>();\r\n @Output() selectionChanged = new EventEmitter<any>();\r\n @Output() totalRowCount = new EventEmitter<number>();\r\n @Output() gridReady = new EventEmitter<GridReadyEvent>()\r\n //paramters\r\n initialColumnDef: any = [];\r\n rowDataHidden: any = [];\r\n gridColumnState: any;\r\n exportColumnsList: any = [];\r\n gridColumns: any[] = [];\r\n public tooltipShowDelay = 500;\r\n public tooltipHideDelay = 4000;\r\n public rowModelType: RowModelType = 'clientSide';\r\n private excelAPI!: GridApi;\r\n private gridAPI!: GridApi;\r\n private odataProvider?: OdataServerSideProvider;\r\n // Per-field cache of distinct values for fill-cell set filters. Populated\r\n // by the OData groupby fallback in _getFillFilterValues and cleared when\r\n // the underlying grid data is refreshed.\r\n private _fillFilterValuesCache: Map<string, any[]> = new Map();\r\n private readonly _Design_Manager = 'Design Manager';\r\n private readonly _Integration_Lead = 'Integration Lead';\r\n private readonly _Tool_Owner = 'Tool Owner';\r\n private readonly _Area_Coordinator = 'Area Coordinator';\r\n private readonly _TiPm = 'TI PM'\r\n // Columns that are completely removed for specific sites. A restricted column\r\n // is stripped from the coldefs entirely, so no saved view can reveal it, it\r\n // never appears in the column menu, and it is excluded from exports — the user\r\n // cannot activate it in any way. Keyed by siteId (compared as a string).\r\n private readonly _restrictedColumnsBySite: Record<string, string[]> = {\r\n '4': ['funding'],\r\n };\r\n //unsubscribe subject\r\n private unsubscribe$ = new Subject<void>();\r\n\r\n //custom pagination properties\r\n private pageNumber: number = 0;\r\n currentPage: number = 1;\r\n totalPages: number = 0;\r\n pageNumbers: (number | string)[] = [];\r\n isFirstPage: boolean = true;\r\n isLastPage: boolean = false;\r\n pageSize: number = 12;\r\n startRow: number = 0;\r\n endRow: number = 0;\r\n totalRows: number = 0;\r\n dataLoaded: boolean = false;;\r\n //custom pagination properties ends...\r\n\r\n constructor(\r\n private gridService: GridLibraryService,\r\n private formatterService: ColumnValueFormatter,\r\n private _tokenSharingService: TokenSharingService,\r\n private router: Router\r\n ) {\r\n this.gridStateLoaded$.subscribe(val => {\r\n if (val) {\r\n this.configureDataState();\r\n }\r\n })\r\n }\r\n\r\n onSortChangedEvent(e: any) {\r\n this.gridColumnState = this.gridAPI.getState();\r\n this.saveGridState(e);\r\n }\r\n\r\n saveGridState(e: any) {\r\n if (!this.overrideColumnDefs) {\r\n this.onSaveGridColumnState(e);\r\n }\r\n }\r\n\r\n public defaultColDef: ColDef = {\r\n sortable: true,\r\n filter: true,\r\n tooltipComponent: CustomTooltip,\r\n };\r\n isInit: boolean = false;\r\n ngOnInit() {\r\n this.isInit = true;\r\n this._tokenSharingService.updateToken(this.token);\r\n\r\n if (this.enableServerSidePaging == true) {\r\n this.rowModelType = 'serverSide';\r\n this.rowData = '';\r\n } else {\r\n this.rowModelType = 'clientSide';\r\n }\r\n\r\n this.cacheBlockSize = this.cacheBlockSize = 0 ? 100 : this.cacheBlockSize;\r\n this.gridService.setBaseUrl(this.environment);\r\n\r\n this.setupWindowFocusListener();\r\n }\r\n\r\n // Handling page refresh scenarios\r\n private setupWindowFocusListener() {\r\n const handleWindowFocus = () => {\r\n setTimeout(() => {\r\n if (this.gridAPI && this.floatingFilter) {\r\n this.applyFilterHighlightingWithRetry();\r\n }\r\n }, 500);\r\n };\r\n\r\n window.addEventListener('focus', handleWindowFocus);\r\n \r\n this.unsubscribe$.subscribe(() => {\r\n window.removeEventListener('focus', handleWindowFocus);\r\n });\r\n }\r\n\r\n get isOverride() {\r\n return (!!this.overrideColumnDefs);\r\n }\r\n\r\n configureDataState() {\r\n if (this.isOverride) {\r\n this.overrideGridState(this.overrideColumnDefs);\r\n } else {\r\n this.gridAPI.resetColumnState();\r\n this.getGridState();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n\r\n this.gridStateLoaded = false;\r\n if (changes['userRoles']?.currentValue) {\r\n if (this.initialColumnDef?.length > 0 && this.userRoles?.length > 0) {\r\n this.columnDefs = this._mapColumnDef(this.initialColumnDef, this.userRoles);\r\n }\r\n }\r\n if (!this.isInit) {\r\n this._tokenSharingService.updateToken(this.token);\r\n }\r\n\r\n if (!this.colDefInit && (this.overrideColumnDefs == null || typeof this.overrideColumnDefs == \"string\")) {\r\n this.getColDef();\r\n\r\n } else if (this.overrideColumnDefs == null || typeof this.overrideColumnDefs == \"string\") {\r\n this.configureDataState();\r\n }\r\n }\r\n\r\n public paginationNumberFormatter: (\r\n params: PaginationNumberFormatterParams\r\n ) => string = (params: PaginationNumberFormatterParams) => {\r\n return '[' + params.value.toLocaleString() + ']';\r\n };\r\n colDefInit: boolean = false;\r\n getColDef() {\r\n if (this.gridId && this.loggedInUser) {\r\n this.gridService\r\n .getColDef(this.gridId)\r\n .pipe(takeUntil(this.unsubscribe$))\r\n .subscribe((response: any) => {\r\n if (response.status == 1) {\r\n this.initialColumnDef = response.result;\r\n let coldef: ColDef[] = this._mapColumnDef(response.result, this.userRoles).filter((column: any) => column);\r\n this.exportColumnsList = response.result;\r\n\r\n this.colDefInit = true;\r\n\r\n this.columnDefs = coldef;\r\n this.gridColumns = coldef;\r\n this.getGridState();\r\n\r\n } else {\r\n console.log('ColDef Read Error=>', response.message);\r\n }\r\n });\r\n } else {\r\n console.log('Please pass valid GridId and loggedIn user Id');\r\n }\r\n }\r\n\r\n private _getColumnVisiblityStatus(column: any, userRoles: any) {\r\n let isDacHidden;\r\n if (column.isButton === false) {\r\n isDacHidden = this.canViewDacStatus(userRoles, column.field);\r\n } else {\r\n isDacHidden = this.canCreateDac(userRoles, column.field);\r\n }\r\n\r\n const columnState: any = this.gridAPI?.getColumnDefs()?.find((col: any) => col.field == column.field);\r\n if (columnState && columnState.hide) {\r\n return columnState.hide || isDacHidden;\r\n }\r\n else {\r\n if (column.field === \"createDac\") {\r\n return !isDacHidden;\r\n }\r\n return !column.visible || isDacHidden;\r\n }\r\n }\r\n private _isColumnRestricted(field: string): boolean {\r\n const restricted = this._restrictedColumnsBySite[String(this.siteId)];\r\n return !!restricted && restricted.includes(field);\r\n }\r\n\r\n private _mapColumnDef(columns: any, userRoles: any) {\r\n return columns\r\n ?.filter((res: any) => !this._isColumnRestricted(res.field))\r\n .map((res: any) => {\r\n if (res.isButton === false) {\r\n if (res.columnType === 'checkbox') {\r\n return {\r\n field: res.field,\r\n headerName: res.title,\r\n sortable: false,\r\n tooltipField: res.field,\r\n resizable: true,\r\n headerCheckboxSelection: false,\r\n filterable: false,\r\n checkboxSelection: true,\r\n showDisabledCheckboxes: true,\r\n suppressFilter: true,\r\n suppressSorting: true,\r\n suppressMenu: true,\r\n width: 55,\r\n };\r\n } else if (res.columnType === 'dropdown') {\r\n return {\r\n field: res.field,\r\n headerName: res.title,\r\n resizable: true,\r\n sortable: false,\r\n suppressFilter: true,\r\n suppressSorting: true,\r\n suppressMenu: true,\r\n tooltipField: res.field,\r\n cellRenderer: DropdownRenderer,\r\n cellRendererParams: {\r\n onClick: this.onBtnClick.bind(this),\r\n tooltip: res.tooltip,\r\n dropDownData: res.dropDownData,\r\n },\r\n onCellClicked: (e: any) => {\r\n e.node.setSelected(false);\r\n },\r\n width: 40,\r\n pinned: res.pinPosition,\r\n lockPinned: true,\r\n };\r\n } else if (res.columnType === 'date') {\r\n return {\r\n width:120,\r\n pinned: res.pinPosition,\r\n field: res.field,\r\n headerName: res.title,\r\n resizable: true,\r\n hide: this._getColumnVisiblityStatus(res, userRoles),\r\n sortable: true,\r\n tooltipField: res.field,\r\n floatingFilter: this.floatingFilter,\r\n floatingFilterComponent: DatepickerComponent,\r\n floatingFilterComponentParams: { \r\n suppressFilterButton: true,\r\n gridComponent: this,\r\n iconDisplay: res.iconDisplay\r\n },\r\n valueFormatter: (params: ValueFormatterParams) =>\r\n this.formatterService.colValueFormatter(\r\n params,\r\n res.columnType\r\n ),\r\n filterable: res.filterable,\r\n filter: 'agDateColumnFilter', \r\n filterParams: {\r\n comparator: (\r\n filterLocalDateAtMidnight: any,\r\n cellValue: any\r\n ) => {\r\n const dateAsString = cellValue;\r\n\r\n if (dateAsString == null) {\r\n return 0;\r\n }\r\n const cellDate = new Date(dateAsString);\r\n if (cellDate < filterLocalDateAtMidnight) {\r\n return -1;\r\n } else if (cellDate > filterLocalDateAtMidnight) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n },\r\n },\r\n };\r\n\r\n } else if (res.columnType === 'fill') {\r\n const hasConfiguredValues =\r\n (Array.isArray(res.filterValues) && res.filterValues.length > 0) ||\r\n (typeof res.fieldValue === 'string' && res.fieldValue.trim() !== '') ||\r\n (Array.isArray(res.fieldValue) && res.fieldValue.length > 0);\r\n const valueLabelMap = hasConfiguredValues ? this._buildFillValueLabelMap(res) : null;\r\n return {\r\n width: 120,\r\n pinned: res.pinPosition,\r\n field: res.field,\r\n headerName: res.title,\r\n resizable: true,\r\n hide: this._getColumnVisiblityStatus(res, userRoles),\r\n sortable: true,\r\n tooltipField: res.field,\r\n floatingFilter: this.floatingFilter,\r\n valueFormatter: (params: ValueFormatterParams) =>\r\n this.formatterService.colValueFormatter(\r\n params,\r\n res.columnType\r\n ),\r\n cellRenderer: FillCellRendererComponent,\r\n cellRendererParams: {\r\n field: res.field,\r\n },\r\n filterable: res.filterable,\r\n filter: hasConfiguredValues ? 'agSetColumnFilter' : 'agTextColumnFilter',\r\n filterParams: hasConfiguredValues\r\n ? {\r\n values: (params: any) => this._getFillFilterValues(res, params),\r\n refreshValuesOnOpen: true,\r\n defaultToNothingSelected: true,\r\n buttons: ['reset'],\r\n valueFormatter: (p: any) => {\r\n if (p?.value == null || p.value === '') return p?.value;\r\n return valueLabelMap?.get(String(p.value)) ?? p.value;\r\n },\r\n textFormatter: (v: any) =>\r\n v == null ? '' : String(v).trim().toLowerCase(),\r\n }\r\n : {\r\n comparator: (filterLocalDateAtMidnight: any, cellValue: any) => {\r\n if (cellValue == null) return 0;\r\n return 0;\r\n },\r\n buttons: ['reset'],\r\n },\r\n };\r\n } else {\r\n const colDef = {\r\n width: 120,\r\n pinned: res.pinPosition,\r\n field: res.field,\r\n headerName: res.title,\r\n resizable: true,\r\n hide: this._getColumnVisiblityStatus(res, userRoles),\r\n sortable: true,\r\n tooltipField: res.field,\r\n floatingFilter: this.floatingFilter,\r\n valueFormatter: (params: ValueFormatterParams) =>\r\n this.formatterService.colValueFormatter(\r\n params,\r\n res.columnType\r\n ),\r\n cellRenderer: CellRendererComponent,\r\n cellRendererParams: {\r\n field: res.field,\r\n },\r\n filterable: res.filterable,\r\n filter:\r\n res.columnType == 'date'\r\n ? 'agDateColumnFilter'\r\n : res.columnType == 'number'\r\n ? 'agNumberColumnFilter'\r\n : 'agTextColumnFilter',\r\n filterParams: {\r\n comparator: (\r\n filterLocalDateAtMidnight: any,\r\n cellValue: any\r\n ) => {\r\n const dateAsString = cellValue;\r\n\r\n if (dateAsString == null) {\r\n return 0;\r\n }\r\n if (res.columnType == 'date') {\r\n const cellDate = new Date(dateAsString);\r\n if (cellDate < filterLocalDateAtMidnight) {\r\n return -1;\r\n } else if (cellDate > filterLocalDateAtMidnight) {\r\n return 1;\r\n }\r\n }\r\n return 0;\r\n },\r\n buttons: ['reset'],\r\n },\r\n };\r\n\r\n if (res.field === 'entityCodeLife') {\r\n (colDef as any).cellRenderer = (params: any) => {\r\n const toolId = params.data?.toolId;\r\n const url = toolId ? `/home/tool/details/${toolId}/tracker` : '#';\r\n\r\n // Creating an a tag so we get the browser right-click context menu\r\n const a = document.createElement('a');\r\n a.textContent = params.value;\r\n a.href = url;\r\n a.target = '_self';\r\n a.style.cursor = 'pointer';\r\n\r\n a.addEventListener('click', (event: MouseEvent) => {\r\n if (toolId) {\r\n // Only intercept if not ctrl/cmd/right click\r\n if (!(event.ctrlKey || event.metaKey || event.button === 2)) {\r\n event.preventDefault();\r\n this.router.navigate([url]);\r\n }\r\n }\r\n });\r\n return a;\r\n };\r\n }\r\n return colDef;\r\n }\r\n } else {\r\n return {\r\n field: res.field,\r\n headerName: res.title,\r\n resizable: true,\r\n sortable: false,\r\n hide: this._getColumnVisiblityStatus(res, userRoles),\r\n suppressFilter: true,\r\n suppressSorting: true,\r\n suppressMenu: true,\r\n tooltipField: res.field,\r\n cellRenderer: ButtonRendererComponent,\r\n cellRendererParams: {\r\n onClick: this.onBtnClick.bind(this),\r\n label: res.label,\r\n icon: res.icon,\r\n buttonName: res.buttonName,\r\n tooltip: res.tooltip,\r\n },\r\n valueGetter: (params: any) => {\r\n return res.tooltip || res.title;\r\n },\r\n minWidth: 20,\r\n cellClass: 'action-button',\r\n pinned: res.pinPosition,\r\n lockPinned: true,\r\n width: res.label ? 100 : 40,\r\n };\r\n }\r\n });\r\n }\r\n\r\n private _getFillFilterValues(res: any, params: any): void {\r\n const configured = res?.filterValues;\r\n if (Array.isArray(configured) && configured.length > 0) {\r\n const values = configured\r\n .map((v: any) => (v && typeof v === 'object' ? (v.value ?? v.name ?? v.label) : v))\r\n .filter((v: any) => v !== null && v !== undefined && v !== '');\r\n params.success(values);\r\n return;\r\n }\r\n\r\n // Backend may provide allowed values as a comma-separated string in `fieldValue`\r\n const fieldValue = res?.fieldValue;\r\n if (typeof fieldValue === 'string' && fieldValue.trim() !== '') {\r\n const values = fieldValue\r\n .split(',')\r\n .map((v: string) => v.trim())\r\n .filter((v: string) => v !== '');\r\n if (values.length > 0) {\r\n params.success(values);\r\n return;\r\n }\r\n }\r\n if (Array.isArray(fieldValue) && fieldValue.length > 0) {\r\n const values = fieldValue\r\n .map((v: any) => (v && typeof v === 'object' ? (v.value ?? v.name ?? v.label) : v))\r\n .filter((v: any) => v !== null && v !== undefined && v !== '');\r\n if (values.length > 0) {\r\n params.success(values);\r\n return;\r\n }\r\n }\r\n\r\n const field = res?.field;\r\n if (this.enableServerSidePaging && this.odataProvider) {\r\n // Cache OData distinct-values per field so repeated filter-opens for\r\n // fill-cell columns don't re-hit the backend. Cache is invalidated on\r\n // grid data refresh (see _invalidateFillFilterCache).\r\n const cached = this._fillFilterValuesCache.get(field);\r\n if (cached) {\r\n params.success(cached);\r\n return;\r\n }\r\n try {\r\n this.odataProvider.getFilterValuesParams(\r\n field,\r\n (data: any[]) => {\r\n const cleaned = (data || []).filter(\r\n v => v !== null && v !== undefined && v !== ''\r\n );\r\n // Only cache non-empty successful responses so a transient\r\n // failure doesn't permanently stick an empty list.\r\n if (cleaned.length > 0) {\r\n this._fillFilterValuesCache.set(field, cleaned);\r\n }\r\n // Never leave the set-filter spinning: always invoke success,\r\n // even with an empty list.\r\n params.success(cleaned);\r\n },\r\n undefined as any\r\n );\r\n } catch (err) {\r\n console.error('[grid-library] getFilterValuesParams threw for field', field, err);\r\n params.success([]);\r\n }\r\n return;\r\n }\r\n\r\n const source: any[] = Array.isArray(this.rowData) ? this.rowData : [];\r\n const unique = Array.from(\r\n new Set(\r\n source\r\n .map(row => row?.[field])\r\n .filter(v => v !== null && v !== undefined && v !== '')\r\n )\r\n );\r\n params.success(unique);\r\n }\r\n\r\n private _buildFillValueLabelMap(res: any): Map<string, string> {\r\n const map = new Map<string, string>();\r\n const source = res?.filterValues ?? res?.fieldValue;\r\n\r\n const addObject = (obj: any) => {\r\n const value = obj?.value ?? obj?.key ?? obj?.id ?? obj?.name ?? obj?.label;\r\n const label = obj?.label ?? obj?.name ?? value;\r\n if (value !== null && value !== undefined && value !== '') {\r\n map.set(String(value), String(label));\r\n }\r\n };\r\n\r\n if (Array.isArray(source)) {\r\n source.forEach((entry: any) => {\r\n if (entry && typeof entry === 'object') addObject(entry);\r\n else if (entry !== null && entry !== undefined && entry !== '') {\r\n map.set(String(entry), String(entry));\r\n }\r\n });\r\n } else if (typeof source === 'string' && source.trim() !== '') {\r\n source.split(',').map(s => s.trim()).filter(Boolean).forEach(v => map.set(v, v));\r\n }\r\n\r\n return map;\r\n }\r\n\r\n canCreateDac(roles: any[], field: string): boolean {\r\n if (roles?.length > 0 && field === 'createDac') {\r\n const isAEGroup = this.userRoles.some((role) => role?.toLowerCase().includes('ae'));\r\n const isDesignManager = this.userRoles.includes(this._Design_Manager);\r\n return isAEGroup || isDesignManager ? true : false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n canViewDacStatus(roles: any[], field: string): boolean {\r\n if (roles?.length > 0 && field === 'dacStatus') {\r\n const isAEGroup = this.userRoles.some((role) => role?.toLowerCase().includes('ae'));\r\n const isIntegrationTeamGroup = this.userRoles.some((role) => role?.toLowerCase().includes('integration team'));\r\n const isIntegrationLead = this.userRoles.includes(this._Integration_Lead);\r\n const isToolOwner = this.userRoles.includes(this._Tool_Owner);\r\n const isAreaCoordinator = this.userRoles.includes(this._Area_Coordinator);\r\n const isDesignManager = this.userRoles.includes(this._Design_Manager);\r\n const isTiPm = this.userRoles.includes(this._TiPm);\r\n return !(isAEGroup || isIntegrationTeamGroup || isIntegrationLead || isToolOwner || isAreaCoordinator || isDesignManager || isTiPm);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n setExternalFilters(options: any) {\r\n // Extract any caller-supplied $filter predicate from the configured\r\n // serverDataUrl so we can merge it correctly with whatever the provider\r\n // built. Without this, requests like `$apply=groupby((dacStatus))` get a\r\n // sibling `$filter=siteId eq 5` appended, which OData rejects because\r\n // after `groupby` the only remaining property is the grouped one.\r\n let serverUrl = this.serverDataUrl;\r\n let externalFilter = '';\r\n const filterIdx = serverUrl.indexOf('$filter=');\r\n if (filterIdx >= 0) {\r\n // Find the end of the $filter value (next & or end of string).\r\n const after = serverUrl.indexOf('&', filterIdx);\r\n externalFilter = serverUrl.substring(\r\n filterIdx + '$filter='.length,\r\n after === -1 ? serverUrl.length : after\r\n );\r\n // Strip the $filter clause (and its leading ? or &) from the base URL.\r\n const before = serverUrl.charAt(filterIdx - 1); // '?' or '&'\r\n const removeStart = filterIdx - 1;\r\n const removeEnd = after === -1 ? serverUrl.length : after;\r\n serverUrl =\r\n serverUrl.substring(0, removeStart) +\r\n (before === '?' && after !== -1 ? '?' : '') +\r\n serverUrl.substring(removeEnd + (before === '?' && after !== -1 ? 1 : 0));\r\n }\r\n\r\n // `options` always starts with '?' from the provider.\r\n // If we still need to attach to a URL that already has '?', flip it to '&'.\r\n if (serverUrl.indexOf('?') >= 0 && options.startsWith('?')) {\r\n options = '&' + options.substring(1);\r\n }\r\n\r\n if (!externalFilter) {\r\n return `${serverUrl}${options}`;\r\n }\r\n\r\n // Decode for matching; we'll re-emit the predicate as-is since OData\r\n // accepts both encoded and decoded forms within a query string.\r\n const decodedFilter = (() => {\r\n try { return decodeURIComponent(externalFilter); } catch { return externalFilter; }\r\n })();\r\n\r\n // Case 1: provider used $apply (e.g. groupby for set-filter values, or\r\n // any aggregation). The external predicate must run BEFORE the aggregation\r\n // as a filter() transformation, otherwise its columns no longer exist.\r\n const applyMatch = options.match(/([?&])\\$apply=([^&]+)/);\r\n if (applyMatch) {\r\n const sep = applyMatch[1];\r\n const applyValue = applyMatch[2];\r\n const decodedApply = (() => {\r\n try { return decodeURIComponent(applyValue); } catch { return applyValue; }\r\n })();\r\n const merged = `filter(${decodedFilter})/${decodedApply}`;\r\n options = options.replace(\r\n `${sep}$apply=${applyValue}`,\r\n `${sep}$apply=${encodeURIComponent(merged)}`\r\n );\r\n return `${serverUrl}${options}`;\r\n }\r\n\r\n // Case 2: provider already has its own $filter. AND them together.\r\n const filterMatch = options.match(/([?&])\\$filter=([^&]+)/);\r\n if (filterMatch) {\r\n const sep = filterMatch[1];\r\n const existing = filterMatch[2];\r\n const decodedExisting = (() => {\r\n try { return decodeURIComponent(existing); } catch { return existing; }\r\n })();\r\n const merged = `(${decodedExisting}) and (${decodedFilter})`;\r\n options = options.replace(\r\n `${sep}$filter=${existing}`,\r\n `${sep}$filter=${encodeURIComponent(merged)}`\r\n );\r\n return `${serverUrl}${options}`;\r\n }\r\n\r\n // Case 3: no provider filter and no $apply — just add the external $filter.\r\n const joiner = options.length === 0\r\n ? (serverUrl.indexOf('?') >= 0 ? '&' : '?')\r\n : '&';\r\n return `${serverUrl}${options}${joiner}$filter=${encodeURIComponent(decodedFilter)}`;\r\n }\r\n\r\n onGridReady(params: GridReadyEvent) {\r\n this.gridAPI = params.api;\r\n\r\n if (this.enableServerSidePaging == true) {\r\n // Show loading overlay immediately when server-side paging is enabled\r\n this.gridAPI.showLoadingOverlay();\r\n\r\n //call api\r\n let reqHeaders = {\r\n 'Content-type': 'application/json',\r\n Accept: 'application/json',\r\n Authorization: 'Bearer ' + this.token,\r\n };\r\n\r\n // Add timeout to prevent infinite loading\r\n const API_TIMEOUT = 800000;//80 seconds\r\n let hasRetried = false;\r\n\r\n this.odataProvider = new OdataServerSideProvider({\r\n isCaseSensitiveStringFilter: false,\r\n callApi: (options) => {\r\n const url = this.setExternalFilters(options);\r\n console.log('Server-side API call:', url);\r\n localStorage.setItem('ServerSideUrl', url);\r\n const timeoutPromise = new Promise((_, reject) => {\r\n setTimeout(() => reject(new Error('API request timeout')), API_TIMEOUT);\r\n });\r\n\r\n const fetchPromise = fetch(url, {\r\n headers: reqHeaders,\r\n })\r\n .then((response) => {\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n return response.json();\r\n });\r\n\r\n return Promise.race([fetchPromise, timeoutPromise])\r\n .catch((error) => {\r\n console.error('Server-side API error:', error);\r\n this.gridAPI.hideOverlay();\r\n this.gridAPI.setGridOption('noRowsOverlayComponentParams', { apiIssue: true });\r\n this.gridAPI.showNoRowsOverlay();\r\n\r\n // Try fetching data again after 2 seconds, but only 1 time\r\n if (!hasRetried) {\r\n hasRetried = true;\r\n setTimeout(() => {\r\n this._fillFilterValuesCache.clear();\r\n params.api.refreshServerSide({ purge: true });\r\n }, 2000);\r\n }\r\n\r\n throw error;\r\n });\r\n },\r\n afterLoadData: (options, rowData, totalCount) => {\r\n this.totalRowCount.emit(totalCount);\r\n setTimeout(() => {\r\n if (!rowData || rowData.length <= 0) {\r\n this.gridAPI.setGridOption('noRowsOverlayComponentParams', {});\r\n this.gridAPI.showNoRowsOverlay();\r\n\r\n // Try fetching data again after 2 seconds, but only 1 time\r\n if (!hasRetried) {\r\n hasRetried = true;\r\n setTimeout(() => {\r\n this._fillFilterValuesCache.clear();\r\n this.gridAPI.refreshServerSide({ purge: true });\r\n }, 2000);\r\n }\r\n } else {\r\n hasRetried = false;\r\n this.gridAPI.hideOverlay();\r\n }\r\n }, 100);\r\n },\r\n setError: (error, params) => {\r\n let overlayParams = this.gridAPI.getGridOption('noRowsOverlayComponentParams');\r\n if (!overlayParams || !overlayParams?.apiIssue) {\r\n this.gridAPI.setGridOption('noRowsOverlayComponentParams', { networkIssue: true });\r\n } else {\r\n this.gridAPI.setGridOption('noRowsOverlayComponentParams', overlayParams);\r\n }\r\n this.gridAPI.hideOverlay();\r\n this.gridAPI.showNoRowsOverlay();\r\n }\r\n });\r\n params.api.setServerSideDatasource(this.odataProvider);\r\n\r\n this.gridReady.emit(params);\r\n }\r\n\r\n // Apply initial filter highlighting with retry mechanism\r\n this.applyFilterHighlightingWithRetry();\r\n\r\n // Event listeners for highlighting\r\n if (this.floatingFilter) {\r\n this.setupFilterInputListeners();\r\n }\r\n\r\n // Setup date input listeners for calendar icon styling\r\n this.setupDateInputListeners();\r\n }\r\n\r\n setGridState() {\r\n if (this.gridColumns && this.gridColumns.length > 0) {\r\n var arrIndex = this.gridColumns.findIndex((x: any) => x.field == \"createDac\");\r\n\r\n if (this.gridId == 1 && !this.canCreateDac(this.userRoles, \"createDac\")) {\r\n if (arrIndex > -1)\r\n this.gridColumns.splice(arrIndex, 1);\r\n\r\n var dacStatusIndex = this.gridColumns.findIndex((x: any) => x.field == \"dacStatus\");\r\n if (dacStatusIndex > -1)\r\n this.gridColumns.splice(dacStatusIndex, 1);\r\n this.columnDefs = this.gridColumns;\r\n }\r\n if (this.gridId == 1 && this.canCreateDac(this.userRoles, \"createDac\")) {\r\n this.gridColumns[arrIndex].hide = false;\r\n }\r\n this.columnDefs = this.gridColumns;\r\n }\r\n if (this.gridColumnState) {\r\n this.gridAPI?.applyColumnState({ state: this.gridColumnState.columnSizing?.columnSizingModel, applyOrder: true });\r\n if (this.gridColumnState.sort) {\r\n this.gridAPI?.applyColumnState({ state: this.gridColumnState.sort.sortModel })\r\n }\r\n if (this.gridColumnState.filter) {\r\n var filterModel: any = this.gridColumnState.filter.filterModel;\r\n this.gridAPI?.setFilterModel(filterModel);\r\n // Apply highlighting after setting filter model\r\n setTimeout(() => this.updateFilteredColumnHighlighting(), 100);\r\n }\r\n if (this.gridColumnState.columnVisibility) {\r\n var hiddenColumns: any = this.gridColumnState.columnVisibility.hiddenColIds;\r\n this.gridAPI?.setColumnsVisible(hiddenColumns, false);\r\n }\r\n this.applyPinnedColumnState(this.gridColumnState);\r\n }\r\n }\r\n\r\n applyPinnedColumnState(gridState: any) {\r\n const pinnedMap: Record<string, 'left' | 'right'> = {};\r\n\r\n for (const colId of gridState.columnPinning?.leftColIds || []) {\r\n pinnedMap[colId] = 'left';\r\n }\r\n for (const colId of gridState.columnPinning?.rightColIds || []) {\r\n pinnedMap[colId] = 'right';\r\n }\r\n\r\n // Create a map of column widths\r\n const widthMap = new Map(\r\n (gridState.columnSizing?.columnSizingModel || []).map((c: any) => [c.colId, c.width])\r\n );\r\n\r\n // Merge all into a final state array\r\n const columnState: ColumnState[] = (gridState.columnOrder?.orderedColIds || []).map((colId: string) => ({\r\n colId: colId,\r\n pinned: pinnedMap[colId] || null,\r\n width: widthMap.get(colId),\r\n hide: gridState.columnVisibility?.hiddenColIds?.includes(colId) || false,\r\n }));\r\n\r\n // Apply the full column state\r\n this.gridAPI.applyColumnState({\r\n state: columnState,\r\n applyOrder: true\r\n });\r\n }\r\n\r\n overrideGridState(overrideStateData: any) {\r\n this.gridAPI.showLoadingOverlay();\r\n this.gridAPI.resetColumnState();\r\n this.gridAPI.setFilterModel(null);\r\n this._fillFilterValuesCache.clear();\r\n this.gridColumnState = JSON.parse(overrideStateData);\r\n this.setGridState();\r\n setTimeout(() => { this.gridAPI.hideOverlay(); }, 500);\r\n\r\n }\r\n defaultGridState: any;\r\n gridStateLoaded: boolean = false;\r\n gridStateLoaded$ = new Subject<boolean>();\r\n getGridState() {\r\n\r\n this.gridStateLoaded = false;\r\n if (this.gridId && this.loggedInUser) {\r\n this.gridService\r\n .getGridState(this.gridId, this.loggedInUser, this.siteId)\r\n .pipe(takeUntil(this.unsubscribe$))\r\n .subscribe((response: any) => {\r\n if (\r\n response.status == 1 &&\r\n response.result &&\r\n response.result.gridConfig\r\n ) {\r\n\r\n this.defaultGridState = JSON.parse(response.result.gridConfig);\r\n\r\n this.gridAPI.showLoadingOverlay();\r\n this.gridColumnState = JSON.parse(response.result.gridConfig);\r\n this.setGridState(); \r\n\r\n } else {\r\n console.log('no grid state found.');\r\n }\r\n setTimeout(() => { this.gridStateLoaded = true; this.gridAPI.hideOverlay(); }, 1000);\r\n\r\n if (this.overrideColumnDefs != null && this.overrideColumnDefs != undefined) {\r\n this.gridStateLoaded$.next(true);\r\n }\r\n\r\n });\r\n }\r\n }\r\n\r\n onBtnClick(e: any) {\r\n if(e.event.ctrlKey || e.event.metaKey){\r\n e.event.preventDefault(); // Ignore ctrl/cmd click\r\n }\r\n this.btnClickHandler.emit(e.rowData);\r\n }\r\n\r\n private __debounceGridSaveHit: any = null;\r\n onSaveGridColumnState(event: any) {\r\n\r\n if (this.isOverride || !this.gridStateLoaded) { return; }\r\n if (this.__debounceGridSaveHit) {\r\n clearTimeout(this.__debounceGridSaveHit);\r\n }\r\n\r\n this.__debounceGridSaveHit = setTimeout(() => {\r\n let columnState = this.gridAPI?.getState();\r\n let columnData = {\r\n gridConfig: JSON.stringify(columnState),\r\n uiGridId: this.gridId,\r\n userId: this.loggedInUser,\r\n siteId: this.siteId\r\n };\r\n if (event.type === 'columnPinned' || (event.type === 'filterChanged' || event.type === 'sortChanged') || event.type === 'columnResized' || event.type === 'columnMoved' || event.type === 'columnVisible') {\r\n this.gridColumnState = columnState;\r\n this.gridService.saveColumnConfig(columnData)\r\n .pipe(takeUntil(this.unsubscribe$))\r\n .subscribe((res: any) => {\r\n if (res.status == 0) {\r\n console.log('Error while saving column configuration:', res.message);\r\n }\r\n });\r\n }\r\n this.__debounceGridSaveHit = null;\r\n }, 1000);\r\n }\r\n\r\n\r\n getRowById: GetRowIdFunc = (params: GetRowIdParams) => {\r\n var data = params.data;\r\n return data.id ?? 0;\r\n };\r\n\r\n // Custom right click Context Menu to support custom excel exports\r\n public getContextMenuItems = (\r\n params: GetContextMenuItemsParams\r\n ): (string | MenuItemDef)[] => {\r\n return [];\r\n let res: (string | MenuItemDef)[] = [\r\n 'cut',\r\n 'copy',\r\n 'copyWithHeaders',\r\n 'copyWithGroupHeaders',\r\n 'paste',\r\n {\r\n name: 'Export',\r\n subMenu: [\r\n {\r\n name: 'CSV Export',\r\n action: () => {\r\n this.exportFile('csv');\r\n },\r\n },\r\n {\r\n name: 'Excel Export',\r\n action: () => {\r\n this.exportFile('xlsx');\r\n },\r\n },\r\n ],\r\n },\r\n ];\r\n return res;\r\n };\r\n\r\n //custom export method\r\n public exportFile(type: string = 'xlsx') {\r\n this.getDataForExcelExport(type);\r\n }\r\n //Generate only those columns for export which are visible and are not of other types that are not required for export\r\n generateColumnsForExcel(): string[] {\r\n let columnsToBeDisplayedForExcel: any = [];\r\n this.exportColumnsList.forEach((column: any) => {\r\n if (\r\n column.visible == true &&\r\n !this._isColumnRestricted(column.field) &&\r\n column.columnType != 'checkbox' &&\r\n column.columnType != 'dropdown' &&\r\n column.columnType != ''\r\n ) {\r\n columnsToBeDisplayedForExcel.push(column.field);\r\n }\r\n });\r\n return columnsToBeDisplayedForExcel;\r\n }\r\n\r\n //Get data from server without paging so that whole data can be exported to excel\r\n // and also check for server side and client side rendering of data for export.\r\n getDataForExcelExport(type: string) {\r\n this.gridAPI.showLoadingOverlay();\r\n if (this.enableServerSidePaging) {\r\n // Ensure date filters are replaced in the export URL\r\n let exportUrl = this.serverDataUrl;\r\n // If there is a $filter param, decode, replace, and re-encode it to prevent double filtering\r\n if (exportUrl.includes('$filter=')) {\r\n const filterMatch = exportUrl.match(/\\$filter=([^&]*)/);\r\n if (filterMatch) {\r\n let filterValue = decodeURIComponent(filterMatch[1]);\r\n filterValue = this.replaceDateFilters(filterValue);\r\n exportUrl = exportUrl.replace(/\\$filter=[^&]*/, `$filter=${encodeURIComponent(filterValue)}`);\r\n }\r\n }\r\n this.gridService\r\n .getDataForExport(exportUrl)\r\n .pipe(takeUntil(this.unsubscribe$))\r\n .subscribe((response: any) => {\r\n this.gridAPI.hideOverlay();\r\n if (response && response.value.length > 0) {\r\n this.excelAPI.setRowData(response.value);\r\n this.excelAPI.sizeColumnsToFit();\r\n if (type == 'csv') {\r\n this.excelAPI.exportDataAsCsv({\r\n columnKeys: this.generateColumnsForExcel(),\r\n });\r\n } else {\r\n this.excelAPI.exportDataAsExcel({\r\n columnKeys: this.generateColumnsForExcel(),\r\n });\r\n }\r\n } else {\r\n console.log('Error while fetching data for excel/csv export');\r\n }\r\n });\r\n } else {\r\n this.gridAPI.hideOverlay();\r\n if (type == 'csv') {\r\n this.gridAPI.exportDataAsCsv({\r\n columnKeys: this.generateColumnsForExcel(),\r\n });\r\n } else {\r\n this.gridAPI.exportDataAsExcel({\r\n columnKeys: this.generateColumnsForExcel(),\r\n });\r\n }\r\n }\r\n }\r\n\r\n onSelectionChanged(e: any) {\r\n this.selectionChanged.emit(e);\r\n }\r\n\r\n onFilterChanged(e: any) {\r\n this.saveGridState(e);\r\n this.filterChanged.emit(e);\r\n this.updateFilteredColumnHighlighting();\r\n console.log('Filter changed:', e);\r\n }\r\n\r\n public clearFilterInputHighlighting() {\r\n if (!this.floatingFilter || !this.gridAPI) return;\r\n\r\n const allSelectors = [\r\n '.ag-floating-filter-body input',\r\n '.ag-floating-filter-body .ag-input-field-input',\r\n '.ag-floating-filter-body .ag-text-field-input',\r\n '.ag-floating-filter-body .ag-number-field-input',\r\n '.ag-floating-filter-body .ag-date-field-input',\r\n '.ag-floating-filter-body .ag-select-field-input',\r\n '.ag-floating-filter input',\r\n '.ag-floating-filter .ag-input-field-input',\r\n '.ag-floating-filter .ag-text-field-input',\r\n '.ag-floating-filter .ag-number-field-input',\r\n '.ag-floating-filter .ag-date-field-input',\r\n '.ag-floating-filter .ag-select-field-input'\r\n ];\r\n\r\n allSelectors.forEach(selector => {\r\n const inputs = document.querySelectorAll(selector);\r\n inputs.forEach((input: Element) => {\r\n const inputElement = input as HTMLInputElement;\r\n \r\n if (inputElement.value !== undefined) {\r\n inputElement.value = '';\r\n }\r\n \r\n // Remove highlighting\r\n inputElement.classList.remove('ag-filter-input-active');\r\n \r\n const inputEvent = new Event('input', { bubbles: true });\r\n const changeEvent = new Event('change', { bubbles: true });\r\n inputElement.dispatchEvent(inputEvent);\r\n inputElement.dispatchEvent(changeEvent);\r\n });\r\n });\r\n\r\n const filterContainers = document.querySelectorAll('.ag-floating-filter-body, .ag-floating-filter');\r\n filterContainers.forEach(container => {\r\n container.classList.remove('ag-filter-input-active');\r\n });\r\n\r\n setTimeout(() => {\r\n if (this.gridAPI) {\r\n this.gridAPI.redrawRows();\r\n }\r\n }, 50);\r\n }\r\n\r\n public handleExternalFilterReset() {\r\n if (!this.gridAPI) return;\r\n\r\n // Clear all filter inputs and highlighting\r\n this.clearFilterInputHighlighting();\r\n \r\n // Force ag-grid to refresh all filter components with retry mechanism\r\n setTimeout(() => {\r\n if (this.gridAPI) {\r\n this.gridAPI.refreshHeader();\r\n // Use robust highlighting approach\r\n this.applyFilterHighlightingWithRetry();\r\n this.gridAPI.redrawRows();\r\n }\r\n }, 100);\r\n }\r\n\r\n // Public method to force refresh of filter highlighting (can be called externally when needed)\r\n public refreshFilterHighlighting() {\r\n this.applyFilterHighlightingWithRetry();\r\n }\r\n\r\n onFirstDataRendered(e: any) {\r\n const storedPageNumber = localStorage.getItem('pageNumber');\r\n this.pageNumber = storedPageNumber ? parseInt(storedPageNumber) : 0;\r\n if (this.pageNumber >= 1) {\r\n this.gridAPI.paginationGoToPage(this.pageNumber);\r\n }\r\n this.dataLoaded = true;\r\n\r\n setTimeout(() => this.updatePaginationInfo(), 0);\r\n setTimeout(() => this.applyFilterHighlightingWithRetry(), 100);\r\n\r\n this.setPageSizeMinusOne(e.api);\r\n\r\n this.firstDataRendered.emit(e);\r\n }\r\n\r\n onGridReadyExcel(params: any) {\r\n this.excelAPI = params.api;\r\n }\r\n //Custom Pagination starts here ================############################================================\r\n\r\n onPaginationChanged = (params: PaginationChangedEvent) => {\r\n if (this.gridAPI && this.dataLoaded) {\r\n this.gridAPI!.deselectAll();\r\n const currentPage = this.gridAPI.paginationGetCurrentPage();\r\n localStorage.setItem('pageNumber', currentPage.toString());\r\n\r\n setTimeout(() => this.updatePaginationInfo(), 0);\r\n }\r\n };\r\n\r\n private updatePaginationInfo() {\r\n if (!this.gridAPI) return;\r\n\r\n // Get all pagination info at once to minimize grid API calls\r\n const currentPage = this.gridAPI.paginationGetCurrentPage() + 1;\r\n const totalPages = this.gridAPI.paginationGetTotalPages();\r\n const totalRows = this.gridAPI.paginationGetRowCount();\r\n const pageSize = this.gridAPI.paginationGetPageSize();\r\n\r\n // Update component state\r\n this.currentPage = currentPage;\r\n this.totalPages = totalPages;\r\n this.totalRows = totalRows;\r\n this.pageSize = pageSize;\r\n\r\n // Calculate derived values\r\n this.startRow = (this.currentPage - 1) * this.pageSize + 1;\r\n this.endRow = Math.min(this.currentPage * this.pageSize, this.totalRows);\r\n this.isFirstPage = this.currentPage === 1;\r\n this.isLastPage = this.currentPage === this.totalPages;\r\n\r\n // Update page numbers array\r\n this.updatePageNumbers();\r\n }\r\n\r\n private updatePageNumbers() {\r\n this.pageNumbers = [];\r\n\r\n if (this.totalPages <= 7) {\r\n // Show all pages if 7 or fewer\r\n for (let i = 1; i <= this.totalPages; i++) {\r\n this.pageNumbers.push(i);\r\n }\r\n } else {\r\n // Always show first page\r\n this.pageNumbers.push(1);\r\n\r\n // Show ellipsis if not near the beginning\r\n if (this.currentPage > 3) {\r\n this.pageNumbers.push('...');\r\n }\r\n\r\n // Calculate range of pages to show around current page\r\n let startPage = Math.max(2, this.currentPage - 1);\r\n let endPage = Math.min(this.totalPages - 1, this.currentPage + 1);\r\n\r\n // Adjust range to show at least 3 pages when possible\r\n if (startPage === 2) endPage = Math.min(4, this.totalPages - 1);\r\n if (endPage === this.totalPages - 1) startPage = Math.max(2, this.totalPages - 3);\r\n\r\n // Add the range of pages\r\n for (let i = startPage; i <= endPage; i++) {\r\n this.pageNumbers.push(i);\r\n }\r\n\r\n // Show ellipsis if not near the end\r\n if (this.currentPage < this.totalPages - 2) {\r\n this.pageNumbers.push('...');\r\n }\r\n\r\n // Always show last page\r\n this.pageNumbers.push(this.totalPages);\r\n }\r\n }\r\n\r\n goToPage(page: number | string) {\r\n if (typeof page === 'number' && this.gridAPI) {\r\n this.gridAPI.paginationGoToPage(page - 1);\r\n }\r\n }\r\n\r\n onPreviousPage() {\r\n if (!this.isFirstPage && this.gridAPI) {\r\n this.gridAPI.paginationGoToPreviousPage();\r\n }\r\n }\r\n\r\n onNextPage() {\r\n if (!this.isLastPage && this.gridAPI) {\r\n this.gridAPI.paginationGoToNextPage();\r\n }\r\n }\r\n //custom pagination ends...\r\n\r\n private updateFilteredColumnHighlighting() {\r\n if (!this.gridAPI) return;\r\n\r\n try {\r\n const filterModel = this.gridAPI.getFilterModel();\r\n const allColumns = this.gridAPI.getColumns();\r\n\r\n if (allColumns) {\r\n allColumns.forEach((column: any) => {\r\n const columnId = column.getColId();\r\n const isFiltered = filterModel && filterModel[columnId];\r\n\r\n // Update header highlighting\r\n const headerElement = document.querySelector(`[col-id=\"${columnId}\"]`);\r\n if (headerElement) {\r\n if (isFiltered) {\r\n headerElement.classList.add('ag-header-cell-filtered');\r\n } else {\r\n headerElement.classList.remove('ag-header-cell-filtered');\r\n }\r\n }\r\n\r\n // Update filter input highlighting\r\n this.highlightFilterInputs(columnId, isFiltered);\r\n });\r\n }\r\n\r\n // Clear all highlighting when no filter model\r\n if (!filterModel || Object.keys(filterModel).length === 0) {\r\n this.clearFilterInputHighlighting();\r\n }\r\n\r\n this.ensureAllValuedInputsAreHighlighted();\r\n } catch (error) {\r\n console.warn('Error updating filter highlighting:', error);\r\n }\r\n }\r\n\r\n private ensureAllValuedInputsAreHighlighted() {\r\n if (!this.floatingFilter) return;\r\n\r\n const allFilterInputs = document.querySelectorAll(`\r\n .ag-floating-filter-body input,\r\n .ag-floating-filter-body .ag-input-field-input,\r\n .ag-floating-filter-body .ag-text-field-input,\r\n .ag-floating-filter-body .ag-number-field-input,\r\n .ag-floating-filter-body .ag-date-field-input,\r\n .ag-floating-filter-body .ag-select-field-input,\r\n .ag-floating-filter input,\r\n .ag-floating-filter .ag-input-field-input,\r\n .ag-floating-filter .ag-text-field-input,\r\n .ag-floating-filter .ag-number-field-input,\r\n .ag-floating-filter .ag-date-field-input,\r\n .ag-floating-filter .ag-select-field-input\r\n `);\r\n\r\n allFilterInputs.forEach((input: Element) => {\r\n const inputElement = input as HTMLInputElement;\r\n \r\n if (inputElement.value && inputElement.value.trim() !== '') {\r\n inputElement.classList.add('ag-filter-input-active');\r\n } else {\r\n inputElement.classList.remove('ag-filter-input-active');\r\n }\r\n });\r\n }\r\n\r\n // Highlight filter inputs when they have values\r\n private highlightFilterInputs(columnId: string, isFiltered: boolean) {\r\n if (!this.floatingFilter) return;\r\n\r\n const selectors = [\r\n `[col-id=\"${columnId}\"] .ag-floating-filter-body input`,\r\n `[col-id=\"${columnId}\"] .ag-floating-filter-body .ag-input-field-input`,\r\n `[col-id=\"${columnId}\"] .ag-floating-filter-body .ag-text-field-input`,\r\n `[col-id=\"${columnId}\"] .ag-floating-filter-body .ag-number-field-input`,\r\n `[col-id=\"${columnId}\"] .ag-floating-filter-body .ag-date-field-input`,\r\n `[col-id=\"${columnId}\"] .ag-floating-filter-body .ag-select-field-input`\r\n ];\r\n\r\n selectors.forEach(selector => {\r\n const inputs = document.querySelectorAll(selector);\r\n inputs.forEach((input: Element) => {\r\n const inputElement = input as HTMLInputElement;\r\n\r\n if (isFiltered) {\r\n inputElement.classList.add('ag-filter-input-active');\r\n } else {\r\n inputElement.classList.remove('ag-filter-input-active');\r\n }\r\n });\r\n });\r\n\r\n // Check for filter values in the filter model\r\n if (isFiltered) {\r\n const filterModel = this.gridAPI.getFilterModel();\r\n const columnFilter = filterModel[columnId];\r\n\r\n if (columnFilter) {\r\n const hasValue = this.filterHasValue(columnFilter);\r\n\r\n if (hasValue) {\r\n const valueInputs = document.querySelectorAll(`[col-id=\"${columnId}\"] .ag-floating-filter-body input[value], [col-id=\"${columnId}\"] .ag-floating-filter-body .ag-input-field-input[value]`);\r\n valueInputs.forEach((input: Element) => {\r\n const inputElement = input as HTMLInputElement;\r\n if (inputElement.value && inputElement.value.trim() !== '') {\r\n inputElement.classList.add('ag-filter-input-active');\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n private filterHasValue(filter: any): boolean {\r\n if (!filter) return false;\r\n\r\n if (filter.filter) {\r\n return filter.filter !== '' && filter.filter !== null && filter.filter !== undefined;\r\n }\r\n\r\n if (filter.condition1 && filter.condition1.filter) {\r\n return filter.condition1.filter !== '' && filter.condition1.filter !== null && filter.condition1.filter !== undefined;\r\n }\r\n\r\n if (filter.condition2 && filter.condition2.filter) {\r\n return filter.condition2.filter !== '' && filter.condition2.filter !== null && filter.condition2.filter !== undefined;\r\n }\r\n\r\n if (filter.dateFrom || filter.dateTo) {\r\n return (filter.dateFrom && filter.dateFrom !== '') || (filter.dateTo && filter.dateTo !== '');\r\n }\r\n\r\n if (filter.filterTo || filter.filterFrom) {\r\n return (filter.filterFrom !== null && filter.filterFrom !== undefined && filter.filterFrom !== '') ||\r\n (filter.filterTo !== null && filter.filterTo !== undefined && filter.filterTo !== '');\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private setupFilterInputListeners() {\r\n if (this.filterHighlightingObserver) {\r\n this.filterHighlightingObserver.disconnect();\r\n }\r\n\r\n const observer = new MutationObserver((mutations) => {\r\n let shouldUpdateHighlighting = false;\r\n \r\n mutations.forEach((mutation) => {\r\n mutation.addedNodes.forEach((node) => {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const element = node as Element;\r\n \r\n if (element.classList.contains('ag-floating-filter-body') || \r\n element.classList.contains('ag-floating-filter') ||\r\n element.querySelector('.ag-floating-filter-body, .ag-floating-filter')) {\r\n shouldUpdateHighlighting = true;\r\n }\r\n \r\n this.addInputListenersToElement(element);\r\n\r\n // Check child elements\r\n const inputs = element.querySelectorAll('input, .ag-input-field-input, .ag-text-field-input, .ag-number-field-input, .ag-date-field-input, .ag-select-field-input');\r\n inputs.forEach(input => this.addInputListener(input as HTMLInputElement));\r\n }\r\n });\r\n });\r\n\r\n // Update highlighting if filter elements were added\r\n if (shouldUpdateHighlighting) {\r\n setTimeout(() => this.updateFilteredColumnHighlighting(), 50);\r\n }\r\n });\r\n\r\n this.filterHighlightingObserver = observer;\r\n\r\n // Observe the entire document body to catch all changes\r\n const gridContainer = document.querySelector('.ag-root-wrapper') || document.body;\r\n if (gridContainer) {\r\n observer.observe(gridContainer, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: ['class', 'style']\r\n });\r\n }\r\n\r\n this.applyListenersToExistingInputs();\r\n }\r\n\r\n private applyListenersToExistingInputs() {\r\n const selectors = [\r\n '.ag-floating-filter-body input',\r\n '.ag-floating-filter-body .ag-input-field-input',\r\n '.ag-floating-filter-body .ag-text-field-input',\r\n '.ag-floating-filter-body .ag-number-field-input',\r\n '.ag-floating-filter-body .ag-date-field-input',\r\n '.ag-floating-filter-body .ag-select-field-input',\r\n '.ag-floating-filter input',\r\n '.ag-floating-filter .ag-input-field-input',\r\n '.ag-floating-filter .ag-text-field-input',\r\n '.ag-floating-filter .ag-number-field-input',\r\n '.ag-floating-filter .ag-date-field-input',\r\n '.ag-floating-filter .ag-select-field-input'\r\n ];\r\n\r\n let attempts = 0;\r\n const maxAttempts = 5;\r\n const attemptInterval = 200;\r\n\r\n const attemptToApplyListeners = () => {\r\n const existingInputs = document.querySelectorAll(selectors.join(', '));\r\n \r\n if (existingInputs.length > 0) {\r\n existingInputs.forEach(input => this.addInputListener(input as HTMLInputElement));\r\n // update highlighting for existing inputs\r\n setTimeout(() => this.updateFilteredColumnHighlighting(), 50);\r\n return;\r\n }\r\n\r\n if (attempts < maxAttempts) {\r\n attempts++;\r\n setTimeout(attemptToApplyListeners, attemptInterval * attempts);\r\n }\r\n };\r\n\r\n attemptToApplyListeners();\r\n }\r\n\r\n private addInputListenersToElement(element: Element) {\r\n const inputs = element.querySelectorAll('input, .ag-input-field-input, .ag-text-field-input, .ag-number-field-input, .ag-date-field-input, .ag-select-field-input');\r\n inputs.forEach(input => this.addInputListener(input as HTMLInputElement));\r\n }\r\n\r\n private addInputListener(input: HTMLInputElement) {\r\n if (!input) return;\r\n\r\n const highlightInput = () => {\r\n if (input.value && input.value.trim() !== '') {\r\n input.classList.add('ag-filter-input-active');\r\n } else {\r\n input.classList.remove('ag-filter-input-active');\r\n }\r\n };\r\n\r\n input.addEventListener('input', highlightInput);\r\n input.addEventListener('change', highlightInput);\r\n input.addEventListener('keyup', highlightInput);\r\n input.addEventListener('paste', highlightInput);\r\n\r\n // First check\r\n highlightInput();\r\n }\r\n\r\n private filterHighlightingObserver: MutationObserver | null = null;\r\n private filterHighlightingRetryCount = 0;\r\n private readonly MAX_RETRY_ATTEMPTS = 10;\r\n private readonly RETRY_DELAY = 200;\r\n\r\n private applyFilterHighlightingWithRetry() {\r\n this.filterHighlightingRetryCount = 0;\r\n this.attemptFilterHighlighting();\r\n }\r\n\r\n private attemptFilterHighlighting() {\r\n if (!this.gridAPI) {\r\n this.scheduleRetry();\r\n return;\r\n }\r\n\r\n // Check if grid is ready/has columns\r\n const columns = this.gridAPI.getColumns();\r\n if (!columns || columns.length === 0) {\r\n this.scheduleRetry();\r\n return;\r\n }\r\n\r\n // Check if filter elements exist\r\n const filterElements = document.querySelectorAll('.ag-floating-filter-body, .ag-floating-filter');\r\n if (filterElements.length === 0) {\r\n this.scheduleRetry();\r\n return;\r\n }\r\n\r\n this.updateFilteredColumnHighlighting();\r\n \r\n this.setupFilterInputListeners();\r\n \r\n this.filterHighlightingRetryCount = 0;\r\n }\r\n\r\n private scheduleRetry() {\r\n if (this.filterHighlightingRetryCount < this.MAX_RETRY_ATTEMPTS) {\r\n this.filterHighlightingRetryCount++;\r\n setTimeout(() => {\r\n this.attemptFilterHighlighting();\r\n }, this.RETRY_DELAY * this.filterHighlightingRetryCount);\r\n } else {\r\n console.warn('Filter highlighting retry limit reached. Some filter inputs may not be highlighted.');\r\n }\r\n }\r\n\r\n onGridSizeChanged(params:any) {\r\n this.setPageSizeMinusOne(params.api);\r\n }\r\n\r\n setPageSizeMinusOne(api: any) {\r\n // 1. Get row height (public API)\r\n const rowHeight = api.getSizesForCurrentTheme().rowHeight;\r\n\r\n // 2. Query the body viewport DOM (safe, it's always rendered)\r\n const viewportEl = document.querySelector('.ag-body-viewport');\r\n\r\n if (viewportEl && rowHeight > 0) {\r\n const rowsThatFit = Math.floor(viewportEl.clientHeight / rowHeight);\r\n api.paginationSetPageSize(Math.max(rowsThatFit - 1, 1)); // avoid 0\r\n }\r\n }\r\n\r\n //destroy all associated subscriptions on component destroy\r\n ngOnDestroy() {\r\n if (this.filterHighlightingObserver) {\r\n this.filterHighlightingObserver.disconnect();\r\n this.filterHighlightingObserver = null;\r\n }\r\n\r\n this.unsubscribe$.next();\r\n this.unsubscribe$.complete();\r\n }\r\n\r\n private setupDateInputListeners() {\r\n const setupListeners = () => {\r\n const dateInputs = document.querySelectorAll('.shared-grid-lib input[type=\"date\"], .shared-grid-lib .ag-date-field-input');\r\n dateInputs.forEach((input) => {\r\n const dateInput = input as HTMLInputElement;\r\n \r\n // Check initial value\r\n if (dateInput.value) {\r\n dateInput.classList.add('has-value');\r\n } else {\r\n dateInput.classList.remove('has-value');\r\n }\r\n \r\n // Listen for value changes\r\n dateInput.addEventListener('input', (e) => {\r\n const target = e.target as HTMLInputElement;\r\n if (target.value) {\r\n target.classList.add('has-value');\r\n } else {\r\n target.classList.remove('has-value');\r\n }\r\n });\r\n\r\n // Listen for change events (for programmatic changes)\r\n dateInput.addEventListener('change', (e) => {\r\n const target = e.target as HTMLInputElement;\r\n if (target.value) {\r\n target.classList.add('has-value');\r\n } else {\r\n target.classList.remove('has-value');\r\n }\r\n });\r\n });\r\n };\r\n\r\n setupListeners();\r\n\r\n // Setup observer for dynamically added date inputs\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.type === 'childList') {\r\n mutation.addedNodes.forEach((node) => {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const element = node as Element;\r\n const dateInputs = element.querySelectorAll('input[type=\"date\"], .ag-date-field-input');\r\n if (dateInputs.length > 0) {\r\n setupListeners();\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n // Start observing the grid container\r\n const gridContainer = document.querySelector('.shared-grid-lib');\r\n if (gridContainer) {\r\n observer.observe(gridContainer, {\r\n childList: true,\r\n subtree: true\r\n });\r\n }\r\n\r\n this.unsubscribe$.subscribe(() => {\r\n observer.disconnect();\r\n });\r\n }\r\n @HostListener('window:resize')\r\n onResize() {\r\n if (this.gridAPI) {\r\n this.setPageSizeMinusOne(this.gridAPI);\r\n }\r\n }\r\n\r\n private replaceDateFilters(filterValue: string): string {\r\n function toUtcIso(dateStr: string, hour: number, min: number, sec: number) {\r\n const local = new Date(`${dateStr}T${String(hour).padStart(2, '0')}:${String(min).padStart(2, '0')}:${String(sec).padStart(2, '0')}`);\r\n return local.toISOString().replace('.000Z', 'Z');\r\n }\r\n\r\n return filterValue.replace(\r\n /\\b(dateRaised|dacCreatedDate)\\s+(ge|gt|le|lt|eq)\\s+([0-9]{4}-[0-9]{2}-[0-9]{2})/gi,\r\n (match, field, op, dateStr) => {\r\n let before = match;\r\n let after = match;\r\n if (op.toLowerCase() === 'ge' || op.toLowerCase() === 'gt') {\r\n const utcStart = toUtcIso(dateStr, 0, 0, 0);\r\n after = `${field} ${op} ${utcStart}`;\r\n } else if (op.toLowerCase() === 'le' || op.toLowerCase() === 'lt') {\r\n const utcEnd = toUtcIso(dateStr, 23, 59, 59);\r\n after = `${field} ${op} ${utcEnd}`;\r\n } else if (op.toLowerCase() === 'eq') {\r\n const utcStart = toUtcIso(dateStr, 0, 0, 0);\r\n const utcEnd = toUtcIso(dateStr, 23, 59, 59);\r\n after = `(${field} ge ${utcStart} and ${field} le ${utcEnd})`;\r\n }\r\n //console.log(`[replaceDateFilters] Before: ${before} | After: ${after}`); commented out until official version release\r\n return after;\r\n }\r\n );\r\n }\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { IHeaderParams, SortDirection } from 'ag-grid-community';\r\n\r\n@Component({\r\n selector: 'app-date-header',\r\n template: `\r\n<span>\r\n {{ params.displayName }}\r\n <i class=\"fa-solid fa-calendar-days\" style=\"margin-left: 4px;\"></i>\r\n <span #menuButton (click)=\"toggleSort()\">{{ params.displayName }}</span>\r\n<span (click)=\"params.showColumnMenu(menuButton)\">☰</span>\r\n</span>\r\n `,\r\n standalone: false\r\n})\r\nexport class DateHeaderComponent {\r\n params!: IHeaderParams;\r\n sortOrderAsc: SortDirection = 'asc';\r\n sortOrderDesc: SortDirection = 'asc';\r\n agInit(params: IHeaderParams): void {\r\n this.params = params;\r\n }\r\n toggleSort(): void {\r\n const currentSort = this.params.column.getSort();\r\n const newSort = currentSort === this.sortOrderAsc ? this.sortOrderDesc : currentSort === this.sortOrderDesc ? null : this.sortOrderAsc;\r\n this.params.setSort(newSort);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { IHeaderParams } from 'ag-grid-community';\r\n\r\n@Component({\r\n selector: 'app-date-header',\r\n template: `\r\n<span>\r\n {{ params.displayName }}\r\n</span>\r\n `, standalone: false\r\n})\r\nexport class HeaderComponent {\r\n params!: IHeaderParams;\r\n agInit(params: IHeaderParams): void {\r\n this.params = params;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { AgGridModule } from 'ag-grid-angular';\r\n//import {LicenseManager} from \"ag-grid-enterprise\";\r\nimport 'ag-grid-enterprise';\r\n//LicenseManager.setLicenseKey(\"Using_this_AG_Grid_Enterprise_key_( AG-040308 )_in_excess_of_the_licence_granted_is_not_permitted___Please_report_misuse_to_( legal@ag-grid.com )___For_help_with_changing_this_key_please_contact_( info@ag-grid.com )___( Basesite )_is_granted_a_( Multiple Applications )_Developer_License_for_( 2 )_Front-End_JavaScript_developers___All_Front-End_JavaScript_developers_need_to_be_licensed_in_addition_to_the_ones_working_with_AG_Grid_Enterprise___This_key_has_been_granted_a_Deployment_License_Add-on_for_( 2 )_Production_Environments___This_key_works_with_AG_Grid_Enterprise_versions_released_before_( 18 May 2024 )____[v2]_MTcxNTk4NjgwMDAwMA==60418a73ee93fedd598e5d8aa02b2926\")\r\nimport { provideHttpClient, withInterceptorsFromDi } from \"@angular/common/http\";\r\nimport { ButtonRendererComponent } from './renderer/button-renderer/button-renderer.component';\r\nimport { CommonModule, DatePipe } from '@angular/common';\r\nimport { CustomTooltip } from './renderer/tooltip-renderer/custom-tooltip-renderer';\r\nimport { GridLibraryComponent } from './grid-library.component';\r\nimport { DropdownRenderer } from './renderer/dropdown-renderer/drop-down-renderer';\r\nimport { GridLibraryService } from './grid-library.service';\r\nimport { ColumnValueFormatter } from './formatters/column-value-formatter';\r\nimport { DateHeaderComponent } from './renderer/date-header/date-header.component';\r\nimport { HeaderComponent } from './renderer/header/header.component';\r\nimport { CellRendererComponent } from './renderer/cell-renderer/cell-renderer.component';\r\nimport { FillCellRendererComponent } from './renderer/fill-cell-renderer/fill-cell-renderer.component';\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { DatepickerComponent } from './renderer/date-filter/date-filter.component';\r\n\r\n@NgModule({ declarations: [\r\n GridLibraryComponent,\r\n ButtonRendererComponent,\r\n CustomTooltip,\r\n DropdownRenderer,\r\n DateHeaderComponent,\r\n HeaderComponent,\r\n CellRendererComponent,\r\n FillCellRendererComponent\r\n ],\r\n exports: [\r\n GridLibraryComponent,\r\n DatePickerModule\r\n ],\r\n imports: [AgGridModule,\r\n DatePickerModule,\r\n CommonModule,\r\n DatepickerComponent\r\n ],\r\n providers: [DatePipe, GridLibraryService, ColumnValueFormatter, provideHttpClient(withInterceptorsFromDi())]\r\n})\r\nexport class GridLibraryModule { }\r\n","/*\r\n * Public API Surface of basesite-shared-grid-lib\r\n */\r\n\r\nexport * from './lib/grid-library.service';\r\nexport * from './lib/grid-library.component';\r\nexport * from './lib/grid-library.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.TokenSharingService","i1","i1.GridLibraryService","i2.ColumnValueFormatter","i3.TokenSharingService","i4","i6"],"mappings":"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"}
|