{"version":3,"file":"29.b2edf6387c2843e7.js","mappings":"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","names":["i0","ctx_r0","noDataType","cellInfo_r2","fieldName","CustomMatTableComponent_ng_container_4_th_1_div_1_Template","CustomMatTableComponent_ng_container_4_th_1_div_2_Template","fieldId","setHeaderStyle","isSortable","dataType","formatData","element_r4","bookmark","_r5","$implicit","iconClickHandler","iconClass","chartProperties","chartToFieldId","ddlItem_r7","dropdownInfo","key","valueKey","$event","_r6","dropdownChanged","CustomMatTableComponent_ng_container_4_td_2_div_5_option_2_Template","getDdlStyle","itemList","_r3","cellClickHandler","CustomMatTableComponent_ng_container_4_td_2_div_1_Template","CustomMatTableComponent_ng_container_4_td_2_div_2_Template","CustomMatTableComponent_ng_container_4_td_2_div_3_Template","CustomMatTableComponent_ng_container_4_td_2_div_4_Template","CustomMatTableComponent_ng_container_4_td_2_div_5_Template","setCellStyle","getAggregation","setFooterStyle","CustomMatTableComponent_ng_container_4_th_1_Template","CustomMatTableComponent_ng_container_4_td_2_Template","CustomMatTableComponent_ng_container_4_td_3_Template","hasTableData","CustomMatTableComponent_ng_container_7_tr_1_Template","displayedColumns","_r8","handlePageEvent","paginationDisabled","showFirstLastButtons","pageSizeOptions","paginationLength","pageSize","CustomMatTableComponent","constructor","_router","_activatedRoute","_reportingService","_reusableFunctions","this","contentChanged","EventEmitter","sortChanged","pageChanged","cellClickedEvent","dropdownSelectEvent","iconClickEvent","showPaginator","isTheFirstLoading","dataSource","MatTableDataSource","isSearching","ngOnInit","footerSummaryList","isDataReady","searchTimeout","oldSearchTerm","action","NoDataActionType","pageStart","searchTerm","componentTitle","inputSource","NoDataSourceType","largeDataCard","wrapInACard","ngOnChanges","changes","customTableInfoChange","customTableInfo","cardData","currentValue","columnInfoList","length","setInitialStatusInfo","headersInfo","updateData","dataHandleInUiSide","setAggregationUiSide","setInitialSorting","hasRowsInDisplay","emitContentChange","summaryChange","footerObject","setAggregationServerSide","footerSummary","sort","a","b","fieldOrder","forEach","header","index","cellClickEventType","toLowerCase","isHyperlink","hidden","hideIf","push","firstSortableHeader","find","defaultSorting","id","start","disableClear","sortingDataAccessor","data","property","column","toString","hasData","title","tableId","dataSet","bandColorList","setSearchTerm","setPaginator","paginator","paginationOptions","totalRecords","currentSearchTerm","setTimeout","filter","search","sortChange","event","colInf","h","active","emit","selectedItem","cellItem","field","columnInfo","cellData","cellValue","pageEvent","setContainerStyle","style","height","tableHeight","value","originalValue","formatNumber","decimalPlaces","formatDate","capitalizeFirstLetter","aggValue","undefined","aggregationType","footer","f","setSummaryPrefix","prefix","toCamelCase","calculateAggregation","notNullData","d","sum","calculateSumByProperty","tot","notNullDataForAvg","totNoNull","aggInf","agg","word","temp","String","charAt","toUpperCase","slice","dataItem","fieldInfo","getCommonCellStyles","leftPadding","rightPadding","dataAlignment","padding","styles","headerAlignment","color","width","headerBackgroundColor","setHeaderTextAlignment","headerCell","document","getElementById","getElementsByClassName","item","setAttribute","textDefaultColor","textColorThresholdFileldId","thresoldValue","textPositiveColor","textNegativeColor","backgroundColorThresholdFileldId","backgroundDefaultColor","thresoldValueBackground","backgroundPositiveColor","backgroundNegativeColor","setBackgroundColorByBand","backgroundColorSetFieldId","bandId","colorInfo","band","colorbandId","cursor","matContentChanged","connect","currentRowsInDisplay","iconClassStart","iconClassChange","widthPercent","ngOnDestroy","disconnect","i1","i2","i3","selectors","viewQuery","rf","ctx","MatPaginator","MatSort","CustomMatTableComponent_div_1_Template","CustomMatTableComponent_div_2_Template","CustomMatTableComponent_ng_container_4_Template","CustomMatTableComponent_tr_5_Template","CustomMatTableComponent_tr_6_Template","CustomMatTableComponent_ng_container_7_Template","CustomMatTableComponent_mat_paginator_8_Template","showSummary","SearchDialogComponent","resetSearch","clearSearchTerm","searchTimeoutStorage","placeHolder","clickAwayClose","popupTop","searchIconFontSize","searchIconActionColors","searchBoxHeight","timeoutDuration","searchOutput","isPopupBoxOpen","isSearchEmpty","ngAfterViewInit","searchIcon","suffix","fontSize","popupBox","visibility","top","dialogSearchTerm","_dialogSearchTerm","clearTimeout","emitSearchOutput","setClearIcon","onKeydownHandler","closePopupDialog","openPopupDialog","openSearchDialog","setPopupboxPosition","getPopupDialogStatus","cancelButtonClick","sufx","clearButtonClick","clearIcon","pageWidth","documentElement","clientWidth","popoupParantContainer","right","getBoundingClientRect","left","hostBindings","_c0"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/modules/shared/components/custom-mat-table/custom-mat-table.component.html","./src/app/modules/shared/components/custom-mat-table/custom-mat-table.component.ts","./src/app/modules/shared/components/search-dialog/search-dialog.component.ts","./src/app/modules/shared/components/search-dialog/search-dialog.component.html"],"sourcesContent":["\n
\n \n
\n
\n \n
\n \n \n \n
\n {{ cellInfo.fieldName }}\n
\n
\n \n
\n \n \n \n {{ formatData(element, cellInfo) }}\n \n
\n \n
\n \n \n \n \n\n
\n \n \n {{ ddlItem[cellInfo.dropdownInfo?.valueKey] }}\n \n \n
\n \n \n {{ getAggregation(cellInfo) }}\n \n
\n\n \n \n \n \n \n \n\n\n\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChange,\n ViewChild,\n} from '@angular/core';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatSort, Sort } from '@angular/material/sort';\nimport {\n NoDataActionType,\n NoDataSourceType,\n NoDataTypes,\n} from 'app/modules/shared/interfaces/no-data';\nimport {\n IAggregation,\n IColorBandObject,\n ITableColumns,\n} from 'app/modules/reports/interfaces/reporting-data';\nimport { formatDate } from '@angular/common';\nimport { ReusableFunctions } from 'app/modules/shared/classes/reusable-functions';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ReportingService } from 'app/modules/reports/services/reporting.service';\n\n@Component({\n selector: 'custom-mat-table',\n templateUrl: './custom-mat-table.component.html',\n styleUrls: ['./custom-mat-table.component.scss'],\n})\nexport class CustomMatTableComponent implements OnInit, OnChanges, OnDestroy {\n constructor(\n private _router: Router,\n private _activatedRoute: ActivatedRoute,\n private _reportingService: ReportingService,\n private _reusableFunctions: ReusableFunctions\n ) {}\n\n @Input() customTableInfo: ICustomTableInfoExtend;\n @Input() footerObject?: IFooterObject;\n @Output() contentChanged: EventEmitter = new EventEmitter();\n @Output() sortChanged: EventEmitter> = new EventEmitter>();\n @Output() pageChanged: EventEmitter = new EventEmitter();\n @Output() cellClickedEvent: EventEmitter =\n new EventEmitter();\n @Output() dropdownSelectEvent: EventEmitter =\n new EventEmitter();\n @Output() iconClickEvent: EventEmitter =\n new EventEmitter();\n\n @ViewChild(MatPaginator) paginator: MatPaginator;\n @ViewChild(MatSort) sort: MatSort;\n\n tableId: string;\n noDataType: NoDataTypes;\n displayedColumns: string[];\n headersInfo: ITableColumns[];\n bandColorList: IColorBandObject[];\n footerSummaryList: IFooterSummary[];\n hasTableData: boolean;\n isDataReady: boolean;\n pageEvent: PageEvent;\n pageSizeOptions = [10, 20, 50, 100, 150];\n pageSize = 10;\n paginationLength: number;\n showFirstLastButtons = true;\n paginationDisabled = false;\n showPaginator: boolean = false;\n isTheFirstLoading: boolean = false;\n dataSource = new MatTableDataSource([]);\n oldSearchTerm: string;\n customTableInfoChange: SimpleChange;\n searchTimeout: number;\n isSearching = false;\n\n ngOnInit() {\n this.displayedColumns = [];\n this.footerSummaryList = [];\n this.hasTableData = false;\n this.isDataReady = false;\n this.isTheFirstLoading = true;\n this.isSearching = false;\n this.searchTimeout = 1000;\n this.oldSearchTerm = '';\n this.noDataType = {\n action: NoDataActionType.pageStart,\n searchTerm: '',\n componentTitle: '',\n inputSource: NoDataSourceType.largeDataCard,\n wrapInACard: false,\n };\n }\n\n ngOnChanges(changes: { [property: string]: SimpleChange }) {\n // TODO: add logic to capture only the changed items and limit unnecessary reloads.\n this.isTheFirstLoading = true;\n this.customTableInfoChange = changes['customTableInfo'];\n if (this.customTableInfoChange) {\n let cardData: ICustomTableInfoExtend = this.customTableInfoChange.currentValue;\n this.showPaginator = cardData?.showPaginator ?? true;\n if (cardData.columnInfoList && cardData.columnInfoList?.length > 0) {\n this.setInitialStatusInfo(cardData.columnInfoList);\n this.headersInfo = cardData.columnInfoList;\n this.updateData(cardData);\n\n if (cardData.dataHandleInUiSide) {\n this.setAggregationUiSide(cardData);\n }\n\n this.setInitialSorting(cardData.columnInfoList);\n if (this.hasRowsInDisplay()) {\n this.emitContentChange();\n this.isTheFirstLoading = false;\n }\n }\n }\n\n let summaryChange: SimpleChange = changes['footerObject'];\n if (summaryChange) {\n let footerObject: IFooterObject = summaryChange.currentValue;\n this.setAggregationServerSide(footerObject?.footerSummary);\n }\n }\n\n setInitialStatusInfo(headersInfo: ITableColumns[]) {\n // TODO: add logic to run this only once\n this.displayedColumns = [];\n headersInfo.sort((a, b) => a.fieldOrder - b.fieldOrder);\n headersInfo.forEach((header, index) => {\n header.cellClickEventType =\n header.fieldId.toLowerCase() === 'bookmark' && header.dataType === 'icon'\n ? 'bookmark'\n : header.cellClickEventType;\n\n if (\n (header.cellClickEventType === undefined || header.cellClickEventType === null) &&\n header.isHyperlink === true\n ) {\n header.cellClickEventType = 'hyperlink';\n }\n\n if (!(header.hidden || header.hideIf === 'ui')) {\n this.displayedColumns.push(header.fieldId);\n }\n header.fieldOrder = index;\n });\n }\n\n setInitialSorting(headersInfo: ITableColumns[]) {\n if (this.hasRowsInDisplay()) {\n let firstSortableHeader = headersInfo.find(\n (header) => header.isSortable && header.defaultSorting\n );\n\n if (firstSortableHeader) {\n if (this.customTableInfo.dataHandleInUiSide) {\n // TODO: find a solution to do sorting on multiple columns\n this.sort.sort({ id: '', start: '', disableClear: true });\n this.sort.sort({\n id: firstSortableHeader.fieldId,\n start: firstSortableHeader.defaultSorting as any,\n disableClear: true,\n });\n }\n }\n }\n\n if (this.customTableInfo.dataHandleInUiSide) {\n this.dataSource.sortingDataAccessor = (data: any, property: string) => {\n if (data && data[property]) {\n let column = headersInfo.find((header) => header.fieldId === property);\n\n if (column) {\n switch (column.dataType) {\n case 'string':\n return data[property]\n ? data[property].toString().toLowerCase()\n : '';\n default:\n return data[property];\n }\n }\n return data[property];\n }\n return '';\n };\n }\n }\n\n updateData(cardData: ICustomTableInfoExtend) {\n this.dataSource.data = [];\n this.hasTableData = cardData?.hasData ?? false;\n this.isDataReady = cardData?.isDataReady ?? false;\n if (this.noDataType) {\n this.noDataType.action = cardData?.action ?? NoDataActionType.pageStart;\n this.noDataType.searchTerm = cardData.searchTerm;\n this.noDataType.componentTitle = cardData.title;\n }\n\n if (cardData) {\n this.tableId = this.customTableInfo.tableId;\n this.dataSource.data = cardData.dataSet?.length > 0 ? cardData.dataSet : [];\n this.bandColorList = cardData.bandColorList;\n this.setSearchTerm();\n this.setPaginator();\n } else {\n this.hasTableData = false;\n this.isDataReady = true;\n this.dataSource.data = [];\n }\n }\n\n setPaginator() {\n let paginator: MatPaginator = null;\n if (this.customTableInfo.dataHandleInUiSide) {\n paginator = this.paginator;\n }\n\n if (this.customTableInfo.paginationOptions) {\n this.paginationLength = this.customTableInfo.paginationOptions.totalRecords ?? 0;\n this.pageSizeOptions =\n this.customTableInfo.paginationOptions.pageSizeOptions ?? this.pageSizeOptions;\n this.pageSize = this.customTableInfo.paginationOptions.pageSize ?? this.pageSize;\n }\n\n this.dataSource.paginator = paginator;\n }\n\n setSearchTerm() {\n let currentSearchTerm = this.customTableInfo?.searchTerm ?? '';\n if (this.customTableInfo.dataHandleInUiSide) {\n this.isSearching = true;\n if (currentSearchTerm !== this.oldSearchTerm) {\n setTimeout(() => {\n this.dataSource.filter = currentSearchTerm;\n this.isSearching = false;\n this.oldSearchTerm = currentSearchTerm;\n this.noDataType.action = NoDataActionType.search;\n }, this.searchTimeout);\n } else {\n this.oldSearchTerm = currentSearchTerm;\n this.isSearching = false;\n }\n }\n }\n\n sortChange(event: Sort) {\n let colInf = this.headersInfo.find((h) => h.fieldId === event.active);\n if (colInf && colInf.isSortable) {\n if (this.customTableInfo.dataHandleInUiSide) {\n this.dataSource.sort = this.sort;\n }\n this.sortChanged.emit([event]);\n }\n }\n\n dropdownChanged(selectedItem, cellItem: object, field: ITableColumns) {\n this.dropdownSelectEvent.emit({\n columnInfo: field,\n cellData: cellItem,\n cellValue: selectedItem,\n });\n }\n\n handlePageEvent(event: PageEvent) {\n this.pageEvent = event;\n this.pageChanged.emit(this.pageEvent);\n }\n\n setContainerStyle() {\n // TODO: add logic only to call once per page load\n let style = {};\n let height = 0;\n if (this.customTableInfo?.tableHeight) {\n height = this.customTableInfo?.tableHeight;\n } else {\n height = 500;\n }\n style['height'] = height + 'px';\n return style;\n }\n\n formatData(cellItem: object, field: ITableColumns) {\n let value = '';\n let originalValue = cellItem[field.fieldId]?.toString();\n if (originalValue && originalValue !== '') {\n switch (field.dataType) {\n case 'currency':\n value = this._reusableFunctions.formatNumber(\n originalValue,\n field.decimalPlaces ?? 0,\n 'currency',\n true\n );\n break;\n case 'money':\n value = this._reusableFunctions.formatNumber(\n originalValue,\n field.decimalPlaces ?? 0,\n 'currency',\n true\n );\n break;\n case 'date':\n value = formatDate(originalValue, 'MM/dd/yyyy', 'en-US', 'UTC');\n break;\n case 'dateTime':\n value = formatDate(originalValue, 'MM/dd/yyyy, hh:mm a', 'en-US', 'UTC');\n break;\n case 'percent':\n value = this._reusableFunctions.formatNumber(\n originalValue,\n field.decimalPlaces ?? 0,\n 'percentage',\n true\n );\n break;\n case 'number':\n value = this._reusableFunctions.formatNumber(\n originalValue,\n field.decimalPlaces ?? 0,\n 'number',\n true\n );\n break;\n case 'boolean':\n value = this.capitalizeFirstLetter(originalValue);\n break;\n default:\n value = originalValue;\n }\n }\n\n return value;\n }\n\n setAggregationServerSide(footerSummary: IAggregation[]) {\n this.footerSummaryList = [];\n let columnInfoList = this.customTableInfo?.columnInfoList;\n if (columnInfoList?.length > 0 && footerSummary?.length > 0) {\n let aggValue = '';\n\n columnInfoList.forEach((field, index) => {\n if (field.fieldOrder === 0) {\n aggValue = 'Summary';\n } else if (field.aggregationType !== undefined) {\n let footer = footerSummary.find((f) => f.fieldId === field.fieldId);\n aggValue = '';\n if (footer?.value) {\n let aggregationType =\n field.aggregationType &&\n (field.aggregationType === 'countNoNull' ||\n field.aggregationType === 'count')\n ? 'number'\n : field.dataType;\n\n let value = this._reusableFunctions.formatNumber(\n footer.value,\n field.decimalPlaces ?? 0,\n aggregationType,\n true\n );\n let prefix = this.setSummaryPrefix(field.aggregationType);\n\n aggValue = `${prefix}: ${value}`;\n }\n } else {\n aggValue = '';\n }\n this.footerSummaryList.push({\n fieldId: field.fieldId,\n aggValue: aggValue,\n });\n });\n }\n }\n\n setSummaryPrefix(aggregationType: string) {\n let prefix = '';\n switch (aggregationType) {\n case 'sum':\n prefix = 'Total';\n break;\n case 'count':\n prefix = 'Count';\n break;\n case 'countNoNull':\n prefix = 'Count';\n break;\n case 'average':\n prefix = 'Average';\n break;\n case 'averageNoNull':\n prefix = 'Average';\n break;\n case 'min':\n prefix = 'Min';\n break;\n case 'max':\n prefix = 'Max';\n break;\n default:\n prefix =\n aggregationType?.length > 0\n ? this._reusableFunctions.toCamelCase(aggregationType)\n : '';\n break;\n }\n return prefix;\n }\n\n setAggregationUiSide(cardData: ICustomTableInfoExtend) {\n // TODO: Add logic to call only once after data loaded.\n this.footerSummaryList = [];\n let columnInfoList = cardData?.columnInfoList;\n if (this.customTableInfo.dataHandleInUiSide) {\n if (columnInfoList?.length > 0) {\n let aggValue = '';\n\n columnInfoList.forEach((field, index) => {\n if (field.fieldOrder === 0) {\n aggValue = 'Summary';\n } else if (field.aggregationType !== undefined) {\n aggValue = this.calculateAggregation(field);\n } else {\n aggValue = '';\n }\n this.footerSummaryList.push({\n fieldId: field.fieldId,\n aggValue: aggValue,\n });\n });\n }\n }\n }\n\n calculateAggregation(field: ITableColumns) {\n let aggValue = '';\n //TODO: Add logic to do custom-aggregation.\n\n if (this.customTableInfo.dataHandleInUiSide) {\n let data = this.customTableInfo.dataSet;\n if (data?.length > 0) {\n try {\n let value = '';\n switch (field.aggregationType) {\n case 'count':\n value = this._reusableFunctions.formatNumber(\n data.length,\n field.decimalPlaces ?? 0,\n 'number',\n true\n );\n break;\n case 'countNoNull':\n let notNullData = data.filter((d) => d[field.fieldId] !== null);\n value = this._reusableFunctions.formatNumber(\n notNullData.length,\n field.decimalPlaces ?? 0,\n 'number',\n true\n );\n break;\n case 'sum':\n let sum = this._reusableFunctions.calculateSumByProperty(\n data,\n field.fieldId\n );\n value = this._reusableFunctions.formatNumber(\n sum,\n field.decimalPlaces ?? 0,\n field.dataType,\n true\n );\n break;\n case 'average':\n // Note: This does just the basic calc: sum/total-record-count.\n // Use custom-aggregation for complex situations.\n let tot = this._reusableFunctions.calculateSumByProperty(\n data,\n field.fieldId\n );\n value = this._reusableFunctions.formatNumber(\n tot / data?.length,\n field.decimalPlaces ?? 0,\n field.dataType,\n true\n );\n break;\n case 'averageNoNull':\n // Note: This does just the basic calc: sum/total-not-null-record-count.\n // Use custom-aggregation for complex situations.\n let notNullDataForAvg = data.filter((d) => d[field.fieldId] !== null);\n if (notNullDataForAvg?.length > 0) {\n let totNoNull = this._reusableFunctions.calculateSumByProperty(\n notNullDataForAvg,\n field.fieldId\n );\n\n value = this._reusableFunctions.formatNumber(\n totNoNull / notNullDataForAvg?.length,\n field.decimalPlaces ?? 0,\n field.dataType,\n true\n );\n } else {\n value = '';\n }\n break;\n default:\n value = '';\n break;\n }\n\n let prefix = this.setSummaryPrefix(field.aggregationType);\n aggValue = `${prefix}: ${value}`;\n } catch (err) {}\n }\n } else {\n }\n\n return aggValue;\n }\n\n getAggregation(field: ITableColumns) {\n let aggValue = '';\n if (this.footerSummaryList?.length > 0) {\n let aggInf = this.footerSummaryList.find((agg) => agg.fieldId === field.fieldId);\n if (aggInf) {\n aggValue = aggInf.aggValue;\n }\n }\n return aggValue;\n }\n\n capitalizeFirstLetter(word: string): string {\n let temp: string = String(word);\n return temp.charAt(0).toUpperCase() + temp.slice(1);\n }\n\n setCellStyle(dataItem: object, fieldInfo: ITableColumns) {\n let style = this.getCommonCellStyles(dataItem, fieldInfo);\n\n let leftPadding = '5px';\n let rightPadding = '5px';\n\n if (fieldInfo.fieldId === this.displayedColumns[0]) {\n leftPadding = '12px';\n }\n\n if (fieldInfo.dataAlignment === 'right') {\n rightPadding = '10px';\n }\n\n style['padding'] = '0 ' + rightPadding + ' 5px ' + leftPadding;\n return style;\n }\n\n setHeaderStyle(fieldInfo: ITableColumns) {\n /* TODO: Seems like this methods is running every time the mouse move over the table.\n Update the logic to run only it is required. */\n let leftPadding = '5px';\n let rightPadding = '5px';\n\n if (fieldInfo.fieldId === this.displayedColumns[0]) {\n leftPadding = '14px';\n }\n\n if (fieldInfo['text-align'] === 'right') {\n rightPadding = '10px';\n }\n\n let styles = {\n 'text-align': fieldInfo.headerAlignment,\n padding: '5px ' + rightPadding + ' 5px ' + leftPadding,\n 'line-height': '40px',\n color: '#333333',\n 'font-size': '13px',\n 'text-transform': 'uppercase',\n width: fieldInfo.width ? fieldInfo.width + 'px' : '',\n 'background-color': fieldInfo?.headerBackgroundColor ?? '',\n };\n this.setHeaderTextAlignment(fieldInfo);\n return styles;\n }\n\n setFooterStyle(fieldInfo: ITableColumns) {\n let leftPadding = '5px';\n let rightPadding = '5px';\n\n if (fieldInfo.fieldId === this.displayedColumns[0]) {\n leftPadding = '14px';\n }\n\n if (fieldInfo['text-align'] === 'right') {\n rightPadding = '10px';\n }\n\n let styles = {\n 'text-align': fieldInfo.headerAlignment,\n padding: '5px ' + rightPadding + ' 5px ' + leftPadding,\n 'line-height': '40px',\n 'font-size': '13px',\n };\n\n return styles;\n }\n\n setHeaderTextAlignment(fieldInfo: ITableColumns) {\n let headerCell = document.getElementById('custom-mat-header-th-' + fieldInfo.fieldId);\n if (headerCell) {\n let headerContainer = headerCell.getElementsByClassName('mat-sort-header-container');\n headerContainer\n .item(0)\n ?.setAttribute('style', 'justify-content:' + fieldInfo.headerAlignment);\n }\n }\n\n getCommonCellStyles(dataItem: object, fieldInfo: ITableColumns) {\n let styles = {\n color: '',\n 'background-color': '',\n 'text-align': fieldInfo?.dataAlignment ?? '',\n 'min-width': fieldInfo.width + 'px',\n };\n\n if (dataItem) {\n let value = dataItem[fieldInfo.fieldId];\n if (fieldInfo.textDefaultColor && typeof fieldInfo.textDefaultColor === 'string') {\n styles['color'] = fieldInfo.textDefaultColor;\n }\n\n if (fieldInfo.textColorThresholdFileldId) {\n let thresoldValue = dataItem[fieldInfo.textColorThresholdFileldId];\n if (typeof thresoldValue === 'number' && typeof value === 'number') {\n if (thresoldValue > value) {\n styles['color'] = fieldInfo.textPositiveColor;\n } else if (thresoldValue < value) {\n styles['color'] = fieldInfo.textNegativeColor;\n } else {\n styles['color'] = fieldInfo.textDefaultColor;\n }\n }\n }\n\n if (\n fieldInfo.backgroundColorThresholdFileldId &&\n value !== null &&\n value !== undefined\n ) {\n styles['line-height'] = '46px';\n styles['min-height'] = '46px';\n\n if (\n fieldInfo.backgroundDefaultColor &&\n typeof fieldInfo.backgroundDefaultColor === 'string'\n ) {\n styles['background-color'] = fieldInfo.backgroundDefaultColor;\n }\n\n if (fieldInfo.backgroundColorThresholdFileldId) {\n let thresoldValueBackground =\n dataItem[fieldInfo.backgroundColorThresholdFileldId];\n if (typeof thresoldValueBackground === 'number' && typeof value === 'number') {\n if (thresoldValueBackground > value) {\n styles['background-color'] = fieldInfo.backgroundPositiveColor;\n } else if (thresoldValueBackground < value) {\n styles['background-color'] = fieldInfo.backgroundNegativeColor;\n } else {\n styles['background-color'] = fieldInfo.backgroundDefaultColor;\n }\n }\n }\n }\n if (fieldInfo.setBackgroundColorByBand && value !== null && value !== undefined) {\n styles['line-height'] = '46px';\n styles['min-height'] = '46px';\n\n if (fieldInfo.backgroundColorSetFieldId) {\n let bandId = dataItem[fieldInfo.backgroundColorSetFieldId];\n let colorInfo = this.bandColorList.find((band) => band.colorbandId === bandId);\n styles['background-color'] = colorInfo ? colorInfo.color : '';\n }\n }\n\n if (fieldInfo.cellClickEventType === 'hyperlink' || fieldInfo.isHyperlink) {\n styles['color'] = '#0078D7';\n styles['cursor'] = 'pointer';\n }\n }\n return styles;\n }\n\n matContentChanged() {\n if (!this.isTheFirstLoading) {\n this.emitContentChange();\n }\n }\n\n emitContentChange() {\n if (this.hasRowsInDisplay()) {\n this.contentChanged.emit(this.dataSource?.connect()?.value);\n } else {\n this.hasTableData = false;\n }\n }\n\n hasRowsInDisplay() {\n let currentRowsInDisplay = this.dataSource?.connect()?.value;\n return currentRowsInDisplay && currentRowsInDisplay.length > 0;\n }\n\n cellClickHandler(dataItem: object, fieldInfo: ITableColumns) {\n if (fieldInfo.cellClickEventType) {\n this.cellClickedEvent.emit({ columnInfo: fieldInfo, cellData: dataItem });\n }\n }\n\n iconClickHandler(dataItem: any, fieldInfo: ITableColumns) {\n if (fieldInfo.fieldId === 'bookmark') {\n fieldInfo.iconClass =\n fieldInfo.iconClass === fieldInfo.iconClassStart\n ? fieldInfo.iconClassChange\n : fieldInfo.iconClassStart;\n //this.clickBookmark(event.dataItem);\n } else if (fieldInfo.fieldId === 'edit') {\n //this.editClickedHandler();\n //this.openRecord(dataItem, fieldInfo);\n }\n\n this.iconClickEvent.emit({ columnInfo: fieldInfo, cellData: dataItem });\n }\n\n getDdlStyle(dataItem: any, fieldInfo: ITableColumns) {\n let styles = { width: '90%', 'min-width': '50px' };\n\n if (fieldInfo?.dropdownInfo?.widthPercent && fieldInfo?.dropdownInfo?.widthPercent < 90) {\n styles['width'] = fieldInfo?.dropdownInfo?.widthPercent + '%';\n }\n\n return styles;\n }\n\n ngOnDestroy() {\n this.dataSource.disconnect();\n }\n}\n\nexport interface ICustomTableInfoExtend {\n tableId: string;\n columnInfoList: ITableColumns[];\n tableHeight: number;\n hasData: boolean;\n isDataReady: boolean;\n dataSet: any;\n action: NoDataActionType;\n searchTerm: string;\n title: string;\n bandColorList: IColorBandObject[];\n dataHandleInUiSide: boolean;\n showSummary: boolean;\n showPaginator?: boolean;\n paginationOptions?: IPaginationOptions;\n}\n\nexport interface IFooterObject {\n footerSummary: IAggregation[];\n}\n\nexport interface ICellClickEventInfo {\n columnInfo: ITableColumns;\n cellData: object;\n cellValue?: any;\n}\n\nexport interface IPaginationOptions {\n totalRecords: number;\n pageSize: number;\n pageSizeOptions: Array;\n}\n\nexport interface IFooterSummary {\n fieldId: string;\n aggValue: string;\n}\n","import {\n Component,\n OnInit,\n Output,\n EventEmitter,\n HostListener,\n Input,\n AfterViewInit,\n} from '@angular/core';\n\n@Component({\n selector: 'search-dialog',\n templateUrl: './search-dialog.component.html',\n styleUrls: ['./search-dialog.component.scss'],\n})\nexport class SearchDialogComponent implements OnInit, AfterViewInit {\n private _dialogSearchTerm: string;\n clearIcon: any;\n popupBox;\n isPopupBoxOpen: boolean;\n searchIcon;\n isSearchEmpty: boolean;\n searchTimeoutStorage = null;\n @Input() placeHolder? = 'Search text';\n @Input() clickAwayClose? = true;\n @Input('locationTop') popupTop? = -110;\n @Input() searchIconFontSize? = 16;\n @Input() searchIconActionColors? = ['#223540', '#223540'];\n @Input() searchBoxHeight?: number = 56;\n @Input('searchId') suffix;\n @Input() timeoutDuration = 1000;\n @Output() searchOutput: EventEmitter = new EventEmitter();\n @Input() set resetSearch(value: boolean) {\n if (value) {\n this.clearSearchTerm();\n }\n }\n\n constructor() {}\n\n ngOnInit() {\n this.isPopupBoxOpen = false;\n this.isSearchEmpty = true;\n }\n\n ngAfterViewInit() {\n this.searchIcon = document.getElementById('search-dialog-icon-' + this.suffix);\n if (this.searchIcon) {\n this.searchIcon.style.fontSize = this.searchIconFontSize.toString() + 'px';\n this.searchIcon.style.color = this.searchIconActionColors[0];\n }\n\n this.popupBox = document.getElementById('simple-popuup-' + this.suffix);\n if (this.popupBox) {\n this.popupBox.style.visibility = 'hidden';\n this.popupBox.style.top = this.popupTop.toString() + 'px';\n }\n }\n\n get dialogSearchTerm(): string {\n return this._dialogSearchTerm;\n }\n\n set dialogSearchTerm(value: string) {\n this._dialogSearchTerm = value;\n clearTimeout(this.searchTimeoutStorage);\n this.searchTimeoutStorage = setTimeout(() => {\n this.emitSearchOutput();\n this.setClearIcon();\n }, this.timeoutDuration);\n }\n\n @HostListener('document:keydown.escape', ['$event']) onKeydownHandler(event: KeyboardEvent) {\n if (event.key === 'Escape' && this.isPopupBoxOpen) {\n this.clearSearchTerm();\n this.closePopupDialog();\n this.setClearIcon();\n }\n }\n\n closePopupDialog() {\n this.searchIcon.style.color = this.searchIconActionColors[0];\n this.popupBox.style.visibility = 'hidden';\n this.isPopupBoxOpen = false;\n }\n\n openPopupDialog() {\n this.searchIcon.style.color = this.searchIconActionColors[1];\n this.popupBox.style.visibility = 'visible';\n this.isPopupBoxOpen = true;\n }\n\n openSearchDialog() {\n this.setPopupboxPosition();\n this.setClearIcon();\n\n if (this.clickAwayClose) {\n if (this.getPopupDialogStatus() === 'hidden') {\n this.openPopupDialog();\n } else if (this.getPopupDialogStatus() === 'visible') {\n this.closePopupDialog();\n }\n } else {\n this.openPopupDialog();\n }\n }\n\n getPopupDialogStatus() {\n return this.popupBox.style.visibility;\n }\n\n clearSearchTerm() {\n if (this._dialogSearchTerm !== '' || !this._dialogSearchTerm) {\n this._dialogSearchTerm = '';\n this.isSearchEmpty = true;\n }\n }\n\n cancelButtonClick(sufx: string) {\n if (sufx === this.suffix) {\n this.clearSearchTerm();\n this.emitSearchOutput();\n this.setClearIcon();\n if (this.popupBox) {\n this.closePopupDialog();\n }\n }\n }\n\n clearButtonClick(sufx: string) {\n if (!this.isSearchEmpty && sufx === this.suffix) {\n this.clearSearchTerm();\n this.setClearIcon();\n this.emitSearchOutput();\n }\n }\n\n emitSearchOutput() {\n this.searchOutput.emit(this._dialogSearchTerm);\n }\n\n setClearIcon() {\n this.clearIcon = document.getElementById('clear-icon-' + this.suffix);\n\n if (this.clearIcon) {\n if (this._dialogSearchTerm == '' || !this._dialogSearchTerm) {\n this.clearIcon.style.visibility = 'hidden';\n } else {\n this.clearIcon.style.visibility = 'visible';\n }\n }\n\n if (this._dialogSearchTerm == '' || !this._dialogSearchTerm) {\n this.isSearchEmpty = true;\n } else {\n this.isSearchEmpty = false;\n }\n }\n\n setPopupboxPosition() {\n let pageWidth = document.documentElement.clientWidth;\n let popoupParantContainer = document.getElementById(\n 'search-dialog-main-container-' + this.suffix\n );\n\n if (this.popupBox) {\n if (popoupParantContainer.getBoundingClientRect().left + 320 > pageWidth) {\n this.popupBox.style.right = '2px';\n } else {\n this.popupBox.style.right = null;\n }\n }\n }\n}\n","
\n
\n \n \n \n
\n
\n"],"x_google_ignoreList":[]}