@annalib/anna-core 2.4.0 → 2.4.3

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.
Files changed (33) hide show
  1. package/esm2020/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +4 -4
  2. package/esm2020/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +4 -4
  3. package/esm2020/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +4 -4
  4. package/esm2020/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +4 -4
  5. package/esm2020/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +4 -4
  6. package/esm2020/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +5 -1
  7. package/esm2020/lib/anna-generic-table-lib/anna-generic-table-lib.module.mjs +5 -1
  8. package/esm2020/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +79 -40
  9. package/esm2020/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +4 -4
  10. package/esm2020/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +4 -4
  11. package/esm2020/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +4 -4
  12. package/esm2020/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +4 -4
  13. package/esm2020/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +4 -4
  14. package/esm2020/src/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +5 -1
  15. package/esm2020/src/lib/anna-generic-table-lib/anna-generic-table-lib.module.mjs +5 -1
  16. package/esm2020/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +79 -40
  17. package/fesm2015/annalib-anna-core-src-lib-anna-core-shared-lib.mjs +14 -10
  18. package/fesm2015/annalib-anna-core-src-lib-anna-core-shared-lib.mjs.map +1 -1
  19. package/fesm2015/annalib-anna-core-src-lib-anna-generic-table-lib.mjs +84 -40
  20. package/fesm2015/annalib-anna-core-src-lib-anna-generic-table-lib.mjs.map +1 -1
  21. package/fesm2015/annalib-anna-core.mjs +99 -51
  22. package/fesm2015/annalib-anna-core.mjs.map +1 -1
  23. package/fesm2020/annalib-anna-core-src-lib-anna-core-shared-lib.mjs +14 -10
  24. package/fesm2020/annalib-anna-core-src-lib-anna-core-shared-lib.mjs.map +1 -1
  25. package/fesm2020/annalib-anna-core-src-lib-anna-generic-table-lib.mjs +84 -40
  26. package/fesm2020/annalib-anna-core-src-lib-anna-generic-table-lib.mjs.map +1 -1
  27. package/fesm2020/annalib-anna-core.mjs +99 -51
  28. package/fesm2020/annalib-anna-core.mjs.map +1 -1
  29. package/lib/anna-generic-table-lib/anna-generic-table-lib.module.d.ts +3 -2
  30. package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +11 -3
  31. package/package.json +2 -2
  32. package/src/lib/anna-generic-table-lib/anna-generic-table-lib.module.d.ts +3 -2
  33. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +11 -3
@@ -1 +1 @@
1
- {"version":3,"file":"annalib-anna-core-src-lib-anna-generic-table-lib.mjs","sources":["../../../projects/anna-core/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.html","../../../projects/anna-core/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.html","../../../projects/anna-core/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.html","../../../projects/anna-core/src/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/anna-generic-table-lib.module.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/public-api.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/annalib-anna-core-src-lib-anna-generic-table-lib.ts"],"sourcesContent":["// Angular import statements\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\n\r\n\r\n// Third party import statements\r\n\r\n// User defined import statements\r\nimport { AnnaSortService, SortOption, SortType } from '@annalib/anna-core/src/lib/anna-core-shared-lib';\r\n\r\n//sub-entries of anna lib import statement\r\n\r\n//Add onChange push change detection\r\n@Component({\r\n selector: 'anna-core-sort-lib',\r\n templateUrl: './anna-sort.component.html',\r\n styleUrls: ['./anna-sort.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AnnaSortComponent implements OnChanges{\r\n \r\n @Input() sortObjectKey: string;\r\n @Output() sortOptionClicked = new EventEmitter<SortType>();\r\n\r\n sortOptions: SortOption[] = [\r\n {\r\n sortType: 'ASC',\r\n isOptionActive: false,\r\n text: 'A to Z',\r\n },\r\n {\r\n sortType: 'DESC',\r\n isOptionActive: false,\r\n text: 'Z to A',\r\n },\r\n {\r\n sortType: 'DEFAULT',\r\n isOptionActive: false,\r\n text: 'DEFAULT',\r\n },\r\n ];\r\n\r\n constructor(private annaSortService: AnnaSortService) {}\r\n \r\n ngOnChanges(changes: SimpleChanges): void {\r\n console.log(\"sort component ngOnChanges\");\r\n console.log(this.sortObjectKey);\r\n if(changes[\"sortObjectKey\"] && changes[\"sortObjectKey\"].currentValue){\r\n console.log(\"inside sort active func\");\r\n let sortType = this.annaSortService.columnSortState.get(\r\n this.sortObjectKey\r\n );\r\n this.setSortType(sortType);\r\n }\r\n\r\n }\r\n\r\n sortOptionChanged(index: number, sortType: SortType) {\r\n this.sortOptions.forEach((item) => (item.isOptionActive = false));\r\n this.sortOptions[index].isOptionActive = true;\r\n this.sortOptionClicked.emit(sortType);\r\n }\r\n\r\n ngOnInit(): void {\r\n console.log(\"sort component ngOnInit\");\r\n console.log(this.annaSortService.columnSortState);\r\n this.annaSortService.updateSortTypeSubject.subscribe((item: string) => {\r\n this.setSortType(item);\r\n });\r\n }\r\n\r\n setSortType(option: string){\r\n this.sortOptions.forEach(item => item.isOptionActive = false);\r\n let index = this.sortOptions.findIndex(item => item.sortType == option);\r\n this.sortOptions[index].isOptionActive = true;\r\n }\r\n}\r\n","<p class=\"sort-container\">\r\n <button\r\n class=\"sort-btn\"\r\n *ngFor=\"let option of sortOptions; let i = index\"\r\n (click)=\"sortOptionChanged(i, option.sortType)\"\r\n [ngClass]=\"{ active: option.isOptionActive }\"\r\n >\r\n {{option.text}}\r\n </button>\r\n</p>","\r\n// Angular import statements\r\nimport { Component, OnInit, Input, ViewChildren, QueryList, Output, EventEmitter, SimpleChanges, OnChanges, ChangeDetectorRef, AfterViewInit, ElementRef, AfterViewChecked } from '@angular/core';\r\n\r\n// Third party import statements\r\nimport moment from \"moment\";\r\nimport { NgbDate } from '@ng-bootstrap/ng-bootstrap';\r\nimport { Options } from '@angular-slider/ngx-slider';\r\nimport { cloneDeep, isEqual, map, uniq, sortBy } from \"lodash-es\";\r\n\r\n// User defined import statements\r\nimport { AnnaSortComponent } from '../anna-sort/anna-sort.component';\r\n\r\n//sub-entries of anna lib import statement\r\nimport { SellerGroupHierarchy,IWeekCalendar,TooltipModel,AnnaSortService,AnnaDateTimeFormatService, NgbDateType, AnnaFilterService, IGtGeneralConfig, IGtTableHeader, ITotalRowInfo, AnnaGenericTableService, SortType, IHeaderInfo, radioButtonModel, GtColumnIconEmittedData } from \"@annalib/anna-core/src/lib/anna-core-shared-lib\";\r\nimport { fromEvent } from 'rxjs';\r\n\r\n\r\n@Component({\r\n selector: 'anna-core-non-editable-generic-table-lib',\r\n templateUrl: './anna-non-editable-generic-table.component.html',\r\n styleUrls: ['./anna-non-editable-generic-table.component.scss'],\r\n})\r\nexport class AnnaNonEditableGenericTableComponent implements OnInit, OnChanges, AfterViewChecked {\r\n\r\n @Input() showSkeletonLoading: boolean;\r\n @Input() tableHeaders: IGtTableHeader[];\r\n @Input() tableData: any[];\r\n @Input() clonedTableData: any[];\r\n @Input() numberOfSkeletonRows: number[];\r\n @Input() numberOfSkeletonColumns: number[][];\r\n @Input() gtGeneralConfig: IGtGeneralConfig;\r\n @Input() totalRowInfo?: ITotalRowInfo[];\r\n @Input() gtDimension: { rowHeight: number, tableHeight: string, headerHeight: number };\r\n @Input() tableClass: string;\r\n @Input() maximumRowsWhichCanBeRenderedWithoutScroll: number = 5;\r\n @Input() includeBorderInTableHeight: boolean = true; \r\n\r\n @Output() toggleCheckbox = new EventEmitter();\r\n @Output() toggleRowCheckbox = new EventEmitter();\r\n @Output() toggleHeaderCheckbox = new EventEmitter();\r\n @Output() undoIconClicked = new EventEmitter();\r\n @Output() filterAppliedToTable = new EventEmitter();\r\n @Output() sortingAppliedToTable = new EventEmitter();\r\n @Output() rowClicked = new EventEmitter();\r\n @Output() radioButtonSelected = new EventEmitter();\r\n @Output() columnFilterOpened = new EventEmitter();\r\n @Output() columnFilterClosed = new EventEmitter();\r\n @Output() gtIconClicked = new EventEmitter();\r\n @Output() gtSVGIconClicked = new EventEmitter();\r\n @Output() gtTextActionClicked = new EventEmitter();\r\n @Output() gtViewDetailClicked = new EventEmitter();\r\n\r\n\r\n tableDataWrapper: any[];\r\n rowChecked: boolean;\r\n isAllRowsChecked: boolean;\r\n noDataWidth: string = \"55%\";\r\n markedForCreditStatus: string;\r\n markedForMGStatus: string;\r\n\r\n //Sort and Filter\r\n toolTipdata: any;\r\n tempTooltipData: any;\r\n tooltipRadioTextMap: Map<any, any>;\r\n filterTabObjects: any[];\r\n tooltip: any;\r\n clonedTooltipData: any;\r\n clonedTooltipSelectedMapData: any;\r\n searchBar: string;\r\n disableClearAllBtn: boolean = true;\r\n disableColumnClearAllBtn: boolean = true;\r\n allSelected = 0;\r\n showAll: boolean;\r\n disableCheckboxApply: boolean;\r\n disableSliderApplyButton: boolean;\r\n disableTimeApplyButton: boolean;\r\n\r\n // Slider Filter\r\n sliderMinValue: number;\r\n sliderMaxValue: number;\r\n options: Options = {\r\n floor: 0,\r\n ceil: 0,\r\n step: 0.1\r\n };\r\n sliderValue: { min: number, max: number };\r\n sliderFilterTextBoxStep: string;\r\n sliderEnteredMinValue: number;\r\n sliderEnteredMaxValue: number;\r\n\r\n // Calendar Filter\r\n calendarMinEnabledDate: NgbDateType;\r\n calendarMaxEnabledDate: NgbDateType;\r\n selectedMinDate: NgbDateType;\r\n selectedMaxDate: NgbDateType;\r\n\r\n //Week Filter\r\n multiWeekPickerConfig: IWeekCalendar;\r\n\r\n //Time Filter\r\n selectedFromTime: any[];\r\n selectedToTime: any[];\r\n clonedSelectedFromTime: any;\r\n clonedSelectedToTime: any;\r\n disableTimeFilterApplyBtn: boolean;\r\n tableColumns: string[] = [];\r\n totalRowColumns: string[] = null;\r\n showMultiTimeCheckbox: boolean;\r\n showZeroTimeCheckbox: boolean;\r\n showEnterTimeCheckbox: boolean;\r\n multiTimeCheckboxChecked: boolean;\r\n zeroTimeCheckboxChecked: boolean;\r\n enterTimeCheckboxChecked: boolean;\r\n bindValueFuncCalled: boolean;\r\n\r\n hierarchyTooltip: { open: () => void; close: () => void; };\r\n sellerGroupHierarchy: SellerGroupHierarchy[];\r\n showFilterTooltipTabs: boolean; //Change the Name\r\n\r\n @ViewChildren(AnnaSortComponent) sortComponent: QueryList<AnnaSortComponent>;\r\n isScrolledLeft: boolean = false;\r\n rowBorderWidth: number = 2;\r\n \r\n showSortComponent: boolean = false;\r\n showFilterComponent: boolean = false;\r\n tempSortOrder: SortType = null;\r\n \r\n tooltipOptions: TooltipModel[];\r\n clonedTooltipOptions: TooltipModel[];\r\n disableSelectAll: boolean;\r\n disableClearAll: boolean;\r\n searchItem: string;\r\n\r\n disableCalendarApplyBtn: boolean;\r\n calendarSelection: any = {fromDate: null , toDate: null};\r\n\r\n showSliderMinValueError: boolean;\r\n showSliderMaxValueError: boolean;\r\n isMinTextBoxEmpty: boolean;\r\n isMaxTextBoxEmpty: boolean;\r\n selectedLabel: string;\r\n\r\n startTimeHourErr: boolean;\r\n startTimeMinErr: boolean;\r\n endTimeHourErr: boolean;\r\n endTimeMinErr: boolean;\r\n\r\n sameTooltipClicked: boolean;\r\n showNoDataToDisplay: boolean = false;\r\n marginTop: string = \"\";\r\n @ViewChildren('tableHeader') viewChildTableHeaders: QueryList<ElementRef>;\r\n\r\n selectedCheckboxOptionsCount: number;\r\n isFilterChanged: boolean;\r\n isSortChanged: boolean;\r\n isDifferenceLessThan25Percent: boolean;\r\n incorrectSliderInput: boolean;\r\n\r\n\r\n constructor(\r\n private cdRef: ChangeDetectorRef,\r\n private annaSortService: AnnaSortService,\r\n public annaDateTimeFormatService: AnnaDateTimeFormatService,\r\n public annaFilterService: AnnaFilterService,\r\n private annaGenericTableService: AnnaGenericTableService\r\n ) {\r\n this.setTooltipRadioNames();\r\n }\r\n \r\n ngAfterViewChecked(): void {\r\n if(this.gtGeneralConfig.component && this.gtGeneralConfig.component.includes(\"ORDER_LISTING\") || this.gtGeneralConfig.component == \"DRRLISTING\"){\r\n this.setMarginLeftForFilterIcon();\r\n } \r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (this.showSkeletonLoading) {\r\n this.tableData = this.numberOfSkeletonColumns;\r\n this.annaFilterService.initialValueMap = new Map();\r\n }\r\n else {\r\n this.disableEnableEachColumnTooltipIcon();\r\n this.tableColumns = this.tableHeaders.filter(x => x.visible).map(x => x.headerInfo[0].objectKey);\r\n if(this.tableData && this.tableData.length == 0){\r\n this.tableData = Array(2).fill(0);\r\n this.marginTop = (- this.gtDimension.rowHeight - (this.gtDimension.rowHeight/2)) + 'px';\r\n this.showNoDataToDisplay = true;\r\n }\r\n else{\r\n this.showNoDataToDisplay = false;\r\n }\r\n\r\n this.showSkeletonLoading = false;\r\n }\r\n\r\n //setting table column here as well because while showing skeleton loader, we should show table headers.\r\n if (changes['tableHeaders'] && !isEqual(changes['tableHeaders'].currentValue, changes['tableHeaders'].previousValue)) {\r\n this.tableColumns = this.tableHeaders.filter(x => x.visible).map(x => x.headerInfo[0].objectKey);\r\n this.annaSortService.columnSortState = new Map();\r\n this.setColumnSortStateMap();\r\n this.setActiveStateObject();\r\n }\r\n\r\n if (changes['totalRowInfo'] && changes['totalRowInfo'].currentValue) {\r\n this.totalRowColumns = this.totalRowInfo.map(x => x.colName);\r\n }\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n\r\n trackByFn(index: number) {\r\n return index;\r\n }\r\n\r\n setTooltipRadioNames() {\r\n this.tooltipRadioTextMap = new Map();\r\n this.tooltipRadioTextMap.set(\"StartTimeForFilter\", \"Start Time\");\r\n this.tooltipRadioTextMap.set(\"EndTimeForFilter\", \"End Time\");\r\n this.tooltipRadioTextMap.set(\"start_time_for_filter\", \"Start Time\");\r\n this.tooltipRadioTextMap.set(\"end_time_for_filter\", \"End Time\");\r\n this.tooltipRadioTextMap.set(\"primaryAEName\", \"Primary AE\");\r\n this.tooltipRadioTextMap.set(\"region\", \"Region\");\r\n this.tooltipRadioTextMap.set(\"agencyName\", \"Agency\");\r\n this.tooltipRadioTextMap.set(\"location\", \"Location\");\r\n this.tooltipRadioTextMap.set(\"advertiserName\", \"Advertiser\");\r\n this.tooltipRadioTextMap.set(\"productCode\", \"Product Code\");\r\n this.tooltipRadioTextMap.set(\"flightStartDate\", \"Start Date\");\r\n this.tooltipRadioTextMap.set(\"flightEndDate\", \"End Date\");\r\n this.tooltipRadioTextMap.set(\"orderIdAndRevNumber\", \"STN Order#-Rev#\");\r\n this.tooltipRadioTextMap.set(\"alternateOrderId\", \"Buyer Order#\");\r\n this.tooltipRadioTextMap.set(\"grp\", \"GRP\");\r\n this.tooltipRadioTextMap.set(\"cpp\", \"CPP\");\r\n this.tooltipRadioTextMap.set(\"imps\", \"IMPS\");\r\n this.tooltipRadioTextMap.set(\"cpm\", \"CPM\");\r\n this.tooltipRadioTextMap.set(\"offeredMGs\", \"Offered MG\");\r\n this.tooltipRadioTextMap.set(\"outstandingPE\", \"O/S PE\");\r\n this.tooltipRadioTextMap.set(\"offeredADUs\", \"Offered ADUs\");\r\n this.tooltipRadioTextMap.set(\"udDeficitValue\", \"Pending Audience Delta\");\r\n this.tooltipRadioTextMap.set(\"startEndTimeMulti\", \"Time\");\r\n this.tooltipRadioTextMap.set(\"bookedValue\", \"Booked\");\r\n this.tooltipRadioTextMap.set(\"bookedSpots\", \"Spots\");\r\n this.tooltipRadioTextMap.set(\"userChanges\", \"Other changes\");\r\n this.tooltipRadioTextMap.set(\"inventoryCode\", \"Inventory Code\");\r\n this.tooltipRadioTextMap.set(\"program\", \"Program\");\r\n this.tooltipRadioTextMap.set(\"agency\", \"Agency\");\r\n this.tooltipRadioTextMap.set(\"advertiser\", \"Advertiser\");\r\n this.tooltipRadioTextMap.set(\"startDate\", \"Start Date\");\r\n this.tooltipRadioTextMap.set(\"endDate\", \"End Date\");\r\n this.tooltipRadioTextMap.set(\"rcvPreempt\", \"Madegood PE\");\r\n this.tooltipRadioTextMap.set(\"osPreempt\", \"O/S PE\");\r\n this.tooltipRadioTextMap.set(\"rcvUnderDly\", \"Recovered UD\");\r\n this.tooltipRadioTextMap.set(\"osUnderDly\", \"O/s Under Dly\");\r\n this.tooltipRadioTextMap.set(\"primaryAe\", \"Primary AE\");\r\n this.tooltipRadioTextMap.set(\"region\", \"Region\");\r\n this.tooltipRadioTextMap.set(\"revCode1\", \"Rev code 1\");\r\n this.tooltipRadioTextMap.set(\"orderNoRevNo\", \"STN Order#-Rev#\");\r\n this.tooltipRadioTextMap.set(\"revCode2\", \"Rev code 2\");\r\n this.tooltipRadioTextMap.set(\"revCode3\", \"Rev code 3\");\r\n this.tooltipRadioTextMap.set(\"booked\", \"Booked\");\r\n this.tooltipRadioTextMap.set(\"spots\", \"Spots\");\r\n this.tooltipRadioTextMap.set(\"postedAudPercent\", \"Posted %\");\r\n this.tooltipRadioTextMap.set(\"revision\", \"Revision\");\r\n this.tooltipRadioTextMap.set(\"productCode\", \"Product Code\");\r\n this.tooltipRadioTextMap.set(\"buyerOrderId\", \"ALT Order#\");\r\n this.tooltipRadioTextMap.set(\"demo\",\"Demo\");\r\n this.tooltipRadioTextMap.set(\"postedAdu\",\"Posted ADUs\");\r\n this.tooltipRadioTextMap.set(\"scheduledAdu\",\"Scheduled ADUs\");\r\n this.tooltipRadioTextMap.set(\"audienceDeficit\",\"Audience Deficit\");\r\n this.tooltipRadioTextMap.set(\"postedAudPercent\",\"Posted Audience %\");\r\n this.tooltipRadioTextMap.set(\"potentialUnitsValue\",\"POT Units\");\r\n this.tooltipRadioTextMap.set(\"bookedUnitsValue\",\"Booked Units\");\r\n this.tooltipRadioTextMap.set(\"bookedAmountWithZeroRatingValue\",\"Total $ Booked\");\r\n this.tooltipRadioTextMap.set(\"bookedAmountPercentageWithZeroRatingValue\",\"% Against All Demos\");\r\n this.tooltipRadioTextMap.set(\"bookedAmountWithoutZeroRatingValue\",\"$Booked With Imps(’000)\");\r\n this.tooltipRadioTextMap.set(\"bookedAmountPercentageWithoutZeroRatingValue\", \"% Against All Demos\");\r\n \r\n this.tooltipRadioTextMap.set(\"totalBookedAmountValue\",\"Total $Booked\");\r\n this.tooltipRadioTextMap.set(\"averageUnitRateValue\",\"AUR\");\r\n this.tooltipRadioTextMap.set(\"totalBookedAmountWithRatingValue\", \"$Booked With Rating\");\r\n this.tooltipRadioTextMap.set(\"averageUnitRateWithRatingValue\", \"AUR With Rating\");\r\n \r\n this.tooltipRadioTextMap.set(\"totalBookedAmountWithImpressionValue\", \"$Booked With IMPS\");\r\n this.tooltipRadioTextMap.set(\"averageUnitRateWithImpressionValue\", \"AUR With IMPS\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedUnitsWithRatingValue\", \"Booked Units With Rating\");\r\n this.tooltipRadioTextMap.set(\"postedUnitsWithRatingValue\", \"Posted Units With Rating\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedUnitsWithImpressionValue\", \"Booked Units With IMPS\");\r\n this.tooltipRadioTextMap.set(\"postedUnitsWithImpressionValue\", \"Posted Units With IMPS\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedRatings\", \"Booked Rating\");\r\n this.tooltipRadioTextMap.set(\"postedRatings\", \"Posted Rating\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedImpressions\", \"Booked IMPS\");\r\n this.tooltipRadioTextMap.set(\"postedImpressions\", \"Posted IMPS\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedAverageRating\", \"Booked AVG Rating\");\r\n this.tooltipRadioTextMap.set(\"postedAverageRating\", \"Posted AVG Rating\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedAverageImpression\", \"Booked AVG IMPS\");\r\n this.tooltipRadioTextMap.set(\"postedAverageImpression\", \"Posted AVG IMPS\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedCppValue\", \"Booked CPP\");\r\n this.tooltipRadioTextMap.set(\"bookedEffectiveCppValue\", \"Effective CPP\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedCpmValue\", \"Booked CPM\");\r\n this.tooltipRadioTextMap.set(\"bookedEffectiveCpmValue\", \"Effective CPM\");\r\n \r\n }\r\n\r\n generateTableDataWrapper() {\r\n this.showSkeletonLoading = true;\r\n this.tableDataWrapper = [];\r\n let rowObject: any;\r\n let columnName: string;\r\n let columnObject: { [x: string]: any; };\r\n let columnObjectKey;\r\n let keysUsedForTableDisplay: string[];\r\n let keysUsedForColumn: string[];\r\n let additionalInfoObject: { [x: string]: any; };\r\n let additionalKeys;\r\n this.tableData.forEach((obj: { [x: string]: any; }) => {\r\n rowObject = {};\r\n keysUsedForTableDisplay = [];\r\n for (var colNum in this.tableHeaders) {\r\n columnObject = {};\r\n if (!this.tableHeaders[colNum].visible) {\r\n continue;\r\n }\r\n columnName = \"\";\r\n keysUsedForColumn = [];\r\n this.tableHeaders[colNum].headerInfo.forEach((header) => {\r\n if (header.typeOfBodyData === \"STRING\") {\r\n columnObjectKey = header.objectKey;\r\n columnObject[columnObjectKey] = obj[columnObjectKey];\r\n keysUsedForTableDisplay.push(columnObjectKey);\r\n keysUsedForColumn.push(columnObjectKey);\r\n }\r\n else if (header.typeOfBodyData === \"ICON\") {\r\n columnObjectKey = header.typeOfBodyData;\r\n columnObject[columnObjectKey] = obj[header.objectKey];\r\n keysUsedForColumn.push(header.objectKey);\r\n }\r\n else if (header.typeOfBodyData === \"CHECKBOX\") {\r\n columnObjectKey = header.typeOfBodyData;\r\n columnObject[columnObjectKey] = obj[header.objectKey];\r\n keysUsedForColumn.push(header.objectKey);\r\n }\r\n })\r\n for (var i = 0; i < keysUsedForColumn.length; i++) {\r\n columnName += keysUsedForColumn[i];\r\n if (i !== keysUsedForColumn.length - 1) {\r\n columnName += ',';\r\n }\r\n }\r\n rowObject[columnName] = columnObject;\r\n }\r\n additionalInfoObject = {};\r\n additionalKeys = Object.keys(obj).filter(key => !keysUsedForTableDisplay.includes(key));\r\n additionalKeys.forEach(key => {\r\n additionalInfoObject[key] = obj[key];\r\n })\r\n rowObject.AdditionalInfo = additionalInfoObject;\r\n this.tableDataWrapper.push(rowObject);\r\n })\r\n this.tableData = this.tableDataWrapper;\r\n this.showSkeletonLoading = false;\r\n }\r\n\r\n\r\n selectOrUnselectCheckbox(rowData: any, columnKeys: any, isCheckboxSelected: any) {\r\n this.toggleCheckbox.emit({ rowData, columnKeys, isCheckboxSelected });\r\n }\r\n\r\n selectUnselectAllRows() {\r\n this.toggleHeaderCheckbox.emit();\r\n }\r\n\r\n selectUnselectRow(rowData: any) {\r\n this.toggleRowCheckbox.emit(rowData);\r\n }\r\n\r\n undoCreditedSpot(data: any) {\r\n this.undoIconClicked.emit({ data, mgOrCredit: \"Credit\" });\r\n }\r\n\r\n undoMgSpot(data: any) {\r\n this.undoIconClicked.emit({ data, mgOrCredit: \"MakeGood\" });\r\n }\r\n\r\n //Sort and Filter Logic begins!\r\n closeTooltip() {\r\n if (this.tooltip && this.tooltip.isOpen()) {\r\n this.tooltip.close();\r\n }\r\n this.tooltip = null;\r\n this.disableCheckboxApply = false;\r\n if (!this.bindValueFuncCalled) {\r\n this.columnFilterClosed.emit();\r\n }\r\n }\r\n\r\n isTooltipActive(header: any[]) {\r\n return this.annaFilterService.isTooltipActive(header,this.annaSortService.columnSortState);\r\n }\r\n\r\n bindTheValueToToolTip(tooltip: any, header: IHeaderInfo) {\r\n\r\n this.bindValueFuncCalled = true;\r\n let containerToScroll;\r\n if (this.gtGeneralConfig.component === \"SPOTDETAILS\" || this.gtGeneralConfig.component === \"DRRLISTING\") {\r\n containerToScroll = document.getElementsByClassName(\"scrollable-container\")[0];\r\n var mediaQuery = window.matchMedia(\"(max-width: 1366px)\");\r\n if (mediaQuery.matches) {\r\n containerToScroll.scroll(0, this.gtGeneralConfig.verticalScrollOffsetForFilterTooltip);\r\n }\r\n }\r\n \r\n // if same tooltip opened close it\r\n if (tooltip == this.tooltip) {\r\n this.bindValueFuncCalled = false;\r\n this.closeTooltip();\r\n }\r\n else {\r\n let enabledHeaders: any[] = [];\r\n this.checkIfUniqueValuePresentForTheHeader(header,enabledHeaders);\r\n this.openTooltip(tooltip, enabledHeaders,header);\r\n\r\n if (window.innerWidth < 1500 && window.innerHeight < 768 && !this.annaFilterService.sliderSet.has(header.filterSortObjectKeys[0])) {\r\n this.columnFilterOpened.emit();\r\n }\r\n\r\n this.showFilterTooltipTabs = header.filterSortObjectKeys.length > 1;\r\n let activeTab = this.filterTabObjects[0];\r\n this.populateTooltipDataBasedOnSelectedRadio(activeTab);\r\n this.bindValueFuncCalled = false;\r\n }\r\n }\r\n\r\n checkIfUniqueValuePresentForTheHeader(header: IHeaderInfo, enabledHeaders: any[]){\r\n header.filterSortObjectKeys.forEach((item: string | number) => {\r\n if(item == \"period\"){\r\n let uniqStartDate = uniq(this.tableData.map((u: { [x: string]: any; }) => u[\"startDate\"]));\r\n let uniqEndDate = uniq(this.tableData.map((u:{ [x: string]: any; }) => u[\"endDate\"]));\r\n if(uniqStartDate.length > 1 || uniqEndDate.length > 1 || this.isTooltipActive([item])){\r\n enabledHeaders.push(item);\r\n }\r\n }\r\n else if(uniq(this.tableData.map((u:{ [x: string]: any; }) => u[item])).length > 1 || this.isTooltipActive([item])){\r\n enabledHeaders.push(item);\r\n }\r\n });\r\n }\r\n\r\n openTooltip(tooltip: any,header: any, columnHeader: IHeaderInfo) {\r\n this.closeTooltip();\r\n this.tooltip = tooltip;\r\n this.tooltip.open();\r\n //convert key into the header\r\n this.filterTabObjects = header.map((key: string,index: number) => {\r\n let value = this.tooltipRadioTextMap.has(key)\r\n ? this.tooltipRadioTextMap.get(key)\r\n : key; //change to display name\r\n return new radioButtonModel(key, value, columnHeader.isSortRequired[index], columnHeader.isFilterRequired[index]);\r\n });\r\n }\r\n\r\n clearColumnFilter() {\r\n this.annaFilterService.clearColumnFilter();\r\n this.closeTooltip();\r\n this.tableData = cloneDeep(this.annaFilterService.filterData(this.clonedTableData, \"\"));\r\n this.annaSortService.noSortingAppliedData = this.tableData;\r\n this.checkIfSortingIsApplied();\r\n this.filterAppliedToTable.emit(this.tableData);\r\n this.disableEnableEachColumnTooltipIcon();\r\n this.annaFilterService.updateStateOfTheCurrentFilterTab(this.annaSortService.columnSortState);\r\n }\r\n\r\n populateTooltipDataBasedOnSelectedRadio(activeTab: radioButtonModel) {\r\n\r\n let header = activeTab.key;\r\n this.selectedLabel = activeTab.label;\r\n this.showSortComponent = false;\r\n this.showFilterComponent = false;\r\n this.searchItem = null;\r\n \r\n this.showSortComponent = activeTab.isSortRequired;\r\n this.showFilterComponent = activeTab.isFilterRequired;\r\n this.tempSortOrder = null;\r\n this.isFilterChanged = false;\r\n this.isSortChanged = false;\r\n \r\n this.annaFilterService.selectedRadio = header;\r\n this.disableActiveFilterClearButton();\r\n \r\n this.createFilterTooltipData(header);\r\n \r\n }\r\n\r\n createFilterTooltipData(header: string){\r\n if(this.showFilterComponent){\r\n this.disableSliderApplyButton = this.disableCheckboxApply = true;\r\n this.disableCalendarApplyBtn = this.disableTimeFilterApplyBtn = true;\r\n \r\n if (this.annaFilterService.calendarSet.has(header)) {\r\n this.getCalendarData();\r\n } else if (this.annaFilterService.sliderSet.has(header)) {\r\n this.getSliderData(header);\r\n } else if (this.annaFilterService.timeSet.has(header)) {\r\n this.getTimeFilterData(header);\r\n } else {\r\n this.getCheckboxData(header);\r\n }\r\n }\r\n else if(this.showSortComponent){\r\n this.disableSliderApplyButton = this.disableCheckboxApply = true;\r\n this.disableCalendarApplyBtn = this.disableTimeFilterApplyBtn = true;\r\n }\r\n }\r\n\r\n disableActiveFilterClearButton(){\r\n let selectedFilterSet = new Set(this.annaFilterService.appliedFiltersArray);\r\n let isSortPresent = (this.annaSortService.columnSortState.size > 0 && this.annaSortService.columnSortState.get(this.annaFilterService.selectedRadio) != \"DEFAULT\");\r\n this.disableColumnClearAllBtn = selectedFilterSet.has(this.annaFilterService.selectedRadio) || isSortPresent ? false : true;\r\n }\r\n\r\n getSliderData(header: string) {\r\n \r\n this.createOptionsForSlider(header);\r\n this.setSelectedRangeForSlider(header);\r\n }\r\n\r\n createOptionsForSlider(header: string){\r\n\r\n let translateFunc;\r\n this.incorrectSliderInput = false;\r\n this.sliderEnteredMaxValue = this.sliderEnteredMinValue = null;\r\n this.showSliderMinValueError = this.showSliderMaxValueError = this.isMinTextBoxEmpty = this.isMaxTextBoxEmpty = false;\r\n\r\n if (this.annaFilterService.sliderCurrencySet.has(header)) {\r\n translateFunc = \"currency\";\r\n }\r\n else if(header == \"postedAudPercent\"){\r\n translateFunc = \"percent\";\r\n }\r\n else {\r\n translateFunc = \"normal\";\r\n }\r\n\r\n let optionsData = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData);\r\n let minValue = this.annaFilterService.returnMaxAndMinValue(optionsData, header, true);\r\n let maxValue = this.annaFilterService.returnMaxAndMinValue(optionsData, header, false);\r\n\r\n let obj = this.annaFilterService.setOptionValues(minValue,maxValue);\r\n\r\n if (translateFunc === \"normal\") {\r\n obj.translate = this.annaFilterService.normalTranslateFunction;\r\n } else if (translateFunc === \"percent\") {\r\n obj.translate = this.annaFilterService.percentTranslateFunction;\r\n } else if (translateFunc === \"currency\") {\r\n obj.translate = this.annaFilterService.currencyTranslateFunction;\r\n }\r\n\r\n this.options = obj;\r\n this.options.step = 1;\r\n this.sliderFilterTextBoxStep = \"1\";\r\n if (header !== \"WeekNumber\") {\r\n this.options.step = 0.1;\r\n this.sliderFilterTextBoxStep = \"0.1\";\r\n }\r\n }\r\n\r\n setSelectedRangeForSlider(header: string){\r\n if(this.annaFilterService.tooltipSelectedMap.has(header)){\r\n let selectedObj = this.annaFilterService.tooltipSelectedMap.get(header);\r\n this.sliderMinValue = selectedObj.min < this.options.floor ? this.options.floor : selectedObj.min;\r\n this.sliderMaxValue = selectedObj.max < this.options.ceil ? selectedObj.max : this.options.ceil;\r\n this.sliderEnteredMinValue = this.sliderMinValue;\r\n this.sliderEnteredMaxValue = this.sliderMaxValue; \r\n }\r\n else{\r\n this.sliderMinValue = this.options.floor;\r\n this.sliderMaxValue = this.options.ceil;\r\n }\r\n this.sliderEnteredMinValue = this.sliderMinValue;\r\n this.sliderEnteredMaxValue = this.sliderMaxValue;\r\n }\r\n\r\n\r\n getCheckboxData(header: string) {\r\n\r\n let tooltipOptions = this.createListForCheckboxFilter(header); \r\n let selectedItems = sortBy(tooltipOptions.filter(item => item.isSelected),\"label\");\r\n let unselectedItems = sortBy(tooltipOptions.filter(item => !item.isSelected),\"label\");\r\n \r\n this.clonedTooltipOptions = [...selectedItems, ...unselectedItems];\r\n\r\n this.tooltipOptions = cloneDeep(this.clonedTooltipOptions);\r\n \r\n this.disableSelectAll = unselectedItems.length == 0;\r\n this.disableClearAll = selectedItems.length == 0;\r\n this.selectedCheckboxOptionsCount = selectedItems.length;\r\n }\r\n\r\n createListForCheckboxFilter(header: string){\r\n let optionData = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData);\r\n let uniqOptionData = uniq(optionData.map(item => item[header]));\r\n let tooltipOptions = uniqOptionData.map((item,index) => new TooltipModel(item,index+1));\r\n\r\n this.selectUnselectListCheckbox(tooltipOptions,header);\r\n let index = tooltipOptions.findIndex(item => item.value == null);\r\n \r\n if(index != -1){\r\n tooltipOptions[index].label = \"(Blank)\";\r\n }\r\n\r\n return tooltipOptions;\r\n }\r\n\r\n selectUnselectListCheckbox(tooltipOptions: TooltipModel[],header: string){\r\n \r\n if(this.annaFilterService.tooltipSelectedMap.has(header)){\r\n let selectedValueSet = new Set(this.annaFilterService.tooltipSelectedMap.get(header));\r\n tooltipOptions.forEach(item => item.isSelected = selectedValueSet.has(item.value) ? true : false);\r\n }\r\n else{\r\n tooltipOptions.forEach(item => item.isSelected = true);\r\n }\r\n\r\n }\r\n\r\n getCalendarData() {\r\n const parsingFormat = \"MM/DD/YYYY\";\r\n let minMaxDate = this.createRangeForTheDateFilter();\r\n this.selectRangeForTheDateFilter(minMaxDate, parsingFormat);\r\n }\r\n\r\n createRangeForTheDateFilter(){\r\n \r\n let optionData = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData);\r\n \r\n let minMaxDate;\r\n //When you want to use startDate and endDate combined as single column then use Period.\r\n if(this.annaFilterService.selectedRadio == \"period\"){\r\n minMaxDate = this.createStartEndDateRange(optionData);\r\n }\r\n else{\r\n minMaxDate = this.annaFilterService.returnMinAndMaxDate(optionData, this.annaFilterService.selectedRadio); \r\n }\r\n \r\n return minMaxDate;\r\n\r\n }\r\n\r\n createStartEndDateRange(optionData: any[]){\r\n let minStartDate = this.annaFilterService.returnMinAndMaxDate(optionData, \"startDate\");\r\n let maxEndDate = this.annaFilterService.returnMinAndMaxDate(optionData,\"endDate\");\r\n return [minStartDate[0],maxEndDate[1]];\r\n }\r\n\r\n selectRangeForTheDateFilter(minMaxDate: any[], parsingFormat: string){\r\n this.calendarMinEnabledDate = this.annaDateTimeFormatService.convertToNgbDate(minMaxDate[0],parsingFormat);\r\n this.calendarMaxEnabledDate = this.annaDateTimeFormatService.convertToNgbDate(minMaxDate[1],parsingFormat);\r\n \r\n \r\n if(this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)){\r\n let selectedDateObj = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);\r\n \r\n if(selectedDateObj.fromDate.isAfter(minMaxDate[0])){\r\n this.selectedMinDate = this.annaDateTimeFormatService.convertToNgbDate(selectedDateObj.fromDate,parsingFormat);\r\n }\r\n else{\r\n this.selectedMinDate = this.annaDateTimeFormatService.convertToNgbDate(minMaxDate[0],parsingFormat);\r\n } \r\n\r\n if(selectedDateObj.toDate.isAfter(minMaxDate[1])){\r\n this.selectedMaxDate = this.annaDateTimeFormatService.convertToNgbDate(minMaxDate[1],parsingFormat);\r\n }\r\n else{\r\n this.selectedMaxDate = this.annaDateTimeFormatService.convertToNgbDate(selectedDateObj.toDate,parsingFormat);\r\n }\r\n\r\n }\r\n else{\r\n this.selectedMinDate = cloneDeep(this.calendarMinEnabledDate);\r\n this.selectedMaxDate = cloneDeep(this.calendarMaxEnabledDate);\r\n }\r\n\r\n this.calendarSelection.fromDate = cloneDeep(this.selectedMinDate);\r\n this.calendarSelection.toDate = cloneDeep(this.selectedMaxDate);\r\n\r\n \r\n }\r\n\r\n getTimeFilterData(header: string): void {\r\n \r\n this.startTimeHourErr = this.startTimeMinErr = this.endTimeHourErr = this.endTimeMinErr = false; \r\n\r\n if (this.annaFilterService.tooltipSelectedMap.has(header)) {\r\n this.selectedFromTime = this.annaFilterService.tooltipSelectedMap.get(header).fromTime;\r\n this.selectedToTime = this.annaFilterService.tooltipSelectedMap.get(header).toTime;\r\n } else {\r\n this.setInitialValueMapForTimeFilter(header);\r\n this.selectedFromTime = this.annaFilterService.initialValueMap.get(header).fromTime;\r\n this.selectedToTime = this.annaFilterService.initialValueMap.get(header).toTime;\r\n }\r\n\r\n if(this.selectedFromTime != undefined || this.selectedToTime != undefined) {\r\n this.selectedFromTime = this.annaDateTimeFormatService.formatToTwelveHrs(this.selectedFromTime, true);\r\n this.selectedToTime = this.annaDateTimeFormatService.formatToTwelveHrs(this.selectedToTime, true);\r\n\r\n this.clonedSelectedFromTime = cloneDeep(this.selectedFromTime);\r\n this.clonedSelectedToTime = cloneDeep(this.selectedToTime);\r\n }\r\n else {\r\n this.selectedFromTime = [\"-\", \"-\", \"-\"];\r\n this.selectedToTime = [\"-\", \"-\", \"-\"];\r\n }\r\n\r\n if(this.gtGeneralConfig.component === \"SPOTDETAILS\" || this.gtGeneralConfig.component === \"EXCLUDEINVENTORYPOPUP\") {\r\n this.setTimeFilterDataForComponentsOtherThanRatingsPage(header);\r\n }\r\n else if(this.gtGeneralConfig.component === \"RATING\"){\r\n this.setTimeFilterDataForRatingPageComponent(header);\r\n }\r\n }\r\n\r\n //Need to change this method\r\n setTimeFilterDataForComponentsOtherThanRatingsPage(header: string){\r\n this.showMultiTimeCheckbox = false;\r\n this.showZeroTimeCheckbox = false;\r\n this.showEnterTimeCheckbox = false;\r\n this.multiTimeCheckboxChecked = false;\r\n this.zeroTimeCheckboxChecked = false;\r\n this.enterTimeCheckboxChecked = false;\r\n\r\n\r\n let optionsData = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData);\r\n let selectedObj;\r\n\r\n if(this.annaFilterService.tooltipSelectedMap.has(header)){\r\n selectedObj = this.annaFilterService.tooltipSelectedMap.get(header);\r\n }\r\n else{\r\n selectedObj = this.annaFilterService.initialValueMap.get(header);\r\n }\r\n\r\n if(optionsData.findIndex(obj => obj[header] == \"0\") != -1) {\r\n this.showZeroTimeCheckbox = true;\r\n this.zeroTimeCheckboxChecked = selectedObj.includeZeroTime;\r\n }\r\n \r\n \r\n if(optionsData.findIndex(obj => obj[header] == \"<multi>\") != -1) {\r\n this.showMultiTimeCheckbox = true;\r\n this.multiTimeCheckboxChecked = selectedObj.includeMulti;\r\n }\r\n \r\n\r\n if(this.showZeroTimeCheckbox || this.showMultiTimeCheckbox) {\r\n this.showEnterTimeCheckbox = true;\r\n }\r\n \r\n if(optionsData.findIndex(obj => obj[header] != \"<multi>\" && obj[header] != \"0\") != -1) {\r\n this.enterTimeCheckboxChecked = selectedObj.includeTimeRange;\r\n }\r\n }\r\n\r\n setTimeFilterDataForRatingPageComponent(header: string){\r\n this.showMultiTimeCheckbox = false;\r\n this.showZeroTimeCheckbox = false;\r\n this.showEnterTimeCheckbox = false;\r\n this.multiTimeCheckboxChecked = false;\r\n this.zeroTimeCheckboxChecked = false;\r\n this.enterTimeCheckboxChecked = false;\r\n\r\n let optionsData = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData);\r\n let selectedObj;\r\n\r\n if(this.annaFilterService.tooltipSelectedMap.has(header)){\r\n selectedObj = this.annaFilterService.tooltipSelectedMap.get(header);\r\n }\r\n else{\r\n selectedObj = this.annaFilterService.initialValueMap.get(header);\r\n }\r\n\r\n if(optionsData.findIndex(obj => obj[header][0] == \"0\") != -1) {\r\n this.showZeroTimeCheckbox = true;\r\n this.zeroTimeCheckboxChecked = selectedObj.includeZeroTime;\r\n }\r\n \r\n \r\n if(optionsData.findIndex(obj => obj[header][0] == \"<multi>\") != -1) {\r\n this.showMultiTimeCheckbox = true;\r\n this.multiTimeCheckboxChecked = selectedObj.includeMulti;\r\n }\r\n \r\n\r\n if(this.showZeroTimeCheckbox || this.showMultiTimeCheckbox) {\r\n this.showEnterTimeCheckbox = true;\r\n }\r\n \r\n if(optionsData.findIndex(obj => obj[header][0] != \"<multi>\" && obj[header][0] != \"0\") != -1) {\r\n this.enterTimeCheckboxChecked = selectedObj.includeTimeRange;\r\n }\r\n }\r\n\r\n selectOrUnselectMultiTimeCheckbox() {\r\n this.multiTimeCheckboxChecked = !this.multiTimeCheckboxChecked;\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n selectOrUnselectZeroTimeCheckbox() {\r\n this.zeroTimeCheckboxChecked = !this.zeroTimeCheckboxChecked;\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n selectOrUnselectEnterTimeCheckbox() {\r\n this.enterTimeCheckboxChecked = !this.enterTimeCheckboxChecked;\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n \r\n selectUnselectCheckbox(data: TooltipModel) {\r\n data.isSelected = !data.isSelected;\r\n let index = this.clonedTooltipOptions.findIndex(item => item.id == data.id);\r\n this.clonedTooltipOptions[index].isSelected = data.isSelected;\r\n \r\n let selectedItems = this.tooltipOptions.filter(item => item.isSelected);\r\n let unselectedItems = this.tooltipOptions.filter(item => !item.isSelected);\r\n\r\n this.disableClearAll = selectedItems.length == 0;\r\n this.disableSelectAll = unselectedItems.length == 0;\r\n this.selectedCheckboxOptionsCount = selectedItems.length;\r\n this.disableCheckboxFilterApplyButton();\r\n }\r\n\r\n minValueChanged(val: string) {\r\n if (val || val == '0') {\r\n this.sliderEnteredMinValue = parseInt(val);\r\n this.isMinTextBoxEmpty = false;\r\n if (this.isMaxTextBoxEmpty) {\r\n if (this.sliderEnteredMinValue > this.options.ceil) {\r\n this.showSliderMinValueError = true;\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n } else {\r\n this.showSliderMinValueError = false;\r\n this.showSliderMaxValueError = false;\r\n this.disableSliderApplyButton = false;\r\n this.incorrectSliderInput = false;\r\n }\r\n } else if (this.sliderEnteredMinValue > this.sliderEnteredMaxValue) {\r\n if(this.isValueInRange(this.sliderEnteredMaxValue)){\r\n this.showSliderMinValueError = true;\r\n this.showSliderMaxValueError = false;\r\n }\r\n else{\r\n this.showSliderMaxValueError = true;\r\n if(this.isValueInRange(this.sliderEnteredMinValue)){\r\n this.showSliderMinValueError = false;\r\n }\r\n else{\r\n this.showSliderMinValueError = true;\r\n }\r\n \r\n }\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n \r\n } else if (this.sliderEnteredMinValue < this.options.floor) {\r\n this.showSliderMinValueError = true;\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n } else {\r\n this.showSliderMinValueError = false;\r\n this.disableSliderApplyButton = false;\r\n this.incorrectSliderInput = false;\r\n }\r\n\r\n console.log(this.sliderEnteredMinValue);\r\n } else {\r\n console.log('inside else condition');\r\n this.sliderEnteredMinValue = this.options.floor;\r\n this.isMinTextBoxEmpty = true;\r\n this.showSliderMinValueError = false;\r\n\r\n }\r\n this.showErrorForMinAndMaxValue();\r\n }\r\n\r\n maxValueChanged(val: string) {\r\n if (val || val == \"0\") {\r\n this.sliderEnteredMaxValue = parseInt(val);\r\n this.isMaxTextBoxEmpty = false;\r\n if (this.isMinTextBoxEmpty) {\r\n if (this.sliderEnteredMaxValue < this.options.floor) {\r\n this.showSliderMaxValueError = true;\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n } else {\r\n this.showSliderMaxValueError = false;\r\n this.showSliderMinValueError = false;\r\n this.disableSliderApplyButton = false;\r\n this.incorrectSliderInput = false;\r\n }\r\n } else if (this.sliderEnteredMaxValue < this.sliderEnteredMinValue) {\r\n if(this.isValueInRange(this.sliderEnteredMinValue)){\r\n this.showSliderMaxValueError = true;\r\n this.showSliderMinValueError = false;\r\n }\r\n else{\r\n this.showSliderMinValueError = true;\r\n if(this.isValueInRange(this.sliderEnteredMaxValue)){\r\n this.showSliderMaxValueError = false;\r\n }\r\n else{\r\n this.showSliderMaxValueError = true;\r\n }\r\n }\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n // this.showMaxError = true;\r\n } else if (this.sliderEnteredMaxValue > this.options.ceil) {\r\n this.showSliderMaxValueError = true;\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n } else {\r\n this.showSliderMaxValueError = false;\r\n this.disableSliderApplyButton = false;\r\n this.incorrectSliderInput = false;\r\n }\r\n } else {\r\n this.sliderEnteredMaxValue = this.options.ceil;\r\n this.isMaxTextBoxEmpty = true;\r\n this.showSliderMaxValueError = false;\r\n console.log(this.sliderEnteredMaxValue);\r\n }\r\n this.showErrorForMinAndMaxValue();\r\n }\r\n\r\n showErrorForMinAndMaxValue(){\r\n if(this.isMinTextBoxEmpty && this.isMaxTextBoxEmpty){\r\n this.showSliderMinValueError = true;\r\n this.showSliderMaxValueError = true;\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n }\r\n this.disableSliderApplyBtn();\r\n }\r\n\r\n isValueInRange(val: number){\r\n return this.options.floor <= val && val <= this.options.ceil;\r\n }\r\n\r\n disableSliderApplyBtn(){\r\n if(this.showFilterComponent && this.showSortComponent){\r\n this.disableSliderApplyButton = this.incorrectSliderInput || (!this.checkIfSortingChanged() && !this.checkIfSliderTooltipIsFiltered() );\r\n }\r\n else if(this.showFilterComponent){\r\n this.disableSliderApplyButton = this.incorrectSliderInput || !this.checkIfSliderTooltipIsFiltered();\r\n }\r\n else if(this.showSortComponent){\r\n this.disableSliderApplyButton = !this.checkIfSortingChanged();\r\n }\r\n }\r\n\r\n sliderValueChange() {\r\n this.sliderValue = { min: this.sliderMinValue, max: this.sliderMaxValue };\r\n }\r\n\r\n cancelSliderFilter() {\r\n this.sliderValue = null;\r\n this.closeTooltip();\r\n }\r\n\r\n applyFilters() {\r\n this.applyListFilters();\r\n this.applySortingOnFilteredData();\r\n this.emitData();\r\n this.disableEnableEachColumnTooltipIcon();\r\n this.annaFilterService.updateStateOfTheCurrentFilterTab(this.annaSortService.columnSortState);\r\n this.closeTooltip();\r\n }\r\n\r\n applyListFilters(){\r\n if(this.showFilterComponent && this.isFilterChanged){\r\n let currentSelectedValue = [];\r\n \r\n if(this.tooltipOptions){\r\n\r\n currentSelectedValue = sortBy(this.tooltipOptions.filter(item => item.isSelected).map(item => item.value));\r\n\r\n if(!this.searchItem && currentSelectedValue.length == this.tooltipOptions.length && this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n currentSelectedValue = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n \r\n }\r\n\r\n let blankIndex = currentSelectedValue.findIndex((item: string) => item == null);\r\n if(blankIndex != -1){\r\n currentSelectedValue = sortBy(currentSelectedValue);\r\n }\r\n\r\n this.annaFilterService.reOrderAppliedFiltersState(this.clonedTableData,currentSelectedValue);\r\n this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio, currentSelectedValue);\r\n this.tableData = this.annaFilterService.filterData(this.clonedTableData, \"\");\r\n this.annaSortService.noSortingAppliedData = cloneDeep(this.tableData);\r\n }\r\n }\r\n\r\n applySortingOnFilteredData(){\r\n if(this.showSortComponent){\r\n if(this.isSortChanged){\r\n this.updateSortMap();\r\n }\r\n else if(this.isFilterChanged){\r\n this.checkIfSortingIsApplied();\r\n }\r\n }\r\n else if(this.isFilterChanged){\r\n this.checkIfSortingIsApplied();\r\n }\r\n }\r\n\r\n emitData(){\r\n if(this.isFilterChanged && this.isSortChanged){\r\n this.filterAppliedToTable.emit(this.tableData);\r\n }\r\n else if(this.isFilterChanged){\r\n this.filterAppliedToTable.emit(this.tableData);\r\n }\r\n else if(this.isSortChanged){\r\n this.sortingAppliedToTable.emit(this.tableData);\r\n }\r\n }\r\n\r\n applySorting(key: string){\r\n if(this.tempSortOrder == \"ASC\"){\r\n this.tableData = cloneDeep(this.annaSortService.sortDataForComponentOtherThanLurAndCsrPage(true,this.tableData,key));\r\n }\r\n else if(this.tempSortOrder == \"DESC\"){\r\n this.tableData = cloneDeep(this.annaSortService.sortDataForComponentOtherThanLurAndCsrPage(false,this.tableData,key));\r\n }\r\n else if(this.tempSortOrder == \"DEFAULT\"){\r\n this.tableData = cloneDeep(this.annaSortService.noSortingAppliedData);\r\n }\r\n }\r\n\r\n revert() {\r\n this.tempTooltipData = cloneDeep(this.toolTipdata);\r\n this.annaFilterService.tooltipMap.set(this.annaFilterService.selectedRadio, this.tempTooltipData);\r\n this.toolTipdata = null;\r\n }\r\n\r\n closeCheckboxFilter() {\r\n if (this.toolTipdata) {\r\n this.revert();\r\n }\r\n this.closeTooltip();\r\n }\r\n\r\n applySliderFilter() {\r\n\r\n this.applySliderFilterOnData();\r\n this.applySortingOnFilteredData();\r\n this.emitData();\r\n this.annaFilterService.updateStateOfTheCurrentFilterTab(this.annaSortService.columnSortState);\r\n this.closeTooltip();\r\n }\r\n\r\n applySliderFilterOnData(){\r\n if(this.showFilterComponent && this.isFilterChanged){\r\n let currentSliderData: {min:any, max: any} = {min: null , max: null};\r\n\r\n // if(this.isMinTextBoxEmpty){\r\n // currentSliderData.min = this.options.floor;\r\n // currentSliderData.max = this.sliderMaxValue;\r\n // }\r\n // else if(this.isMaxTextBoxEmpty){\r\n // currentSliderData.max = this.options.ceil;\r\n // currentSliderData.min = this.sliderMinValue;\r\n // }\r\n // else{\r\n currentSliderData.max = this.sliderEnteredMaxValue;\r\n currentSliderData.min = this.sliderEnteredMinValue;\r\n // }\r\n\r\n if(currentSliderData.min == this.options.floor && currentSliderData.max == this.options.ceil && this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio) ){\r\n currentSliderData = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n \r\n this.annaFilterService.reOrderAppliedFiltersState(this.clonedTableData,currentSliderData);\r\n this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio,currentSliderData);\r\n this.tableData = this.annaFilterService.filterData(this.clonedTableData, \"\");\r\n this.annaSortService.noSortingAppliedData = cloneDeep(this.tableData);\r\n this.disableEnableEachColumnTooltipIcon();\r\n }\r\n }\r\n\r\n cancelInDateFilter() {\r\n this.closeTooltip();\r\n }\r\n\r\n updateSortMap(){\r\n for (let [key, value] of this.annaSortService.columnSortState.entries()) {\r\n this.annaSortService.columnSortState.set(key, \"DEFAULT\");\r\n }\r\n this.annaSortService.columnSortState.set(this.annaFilterService.selectedRadio, this.tempSortOrder);\r\n this.applySorting(this.annaFilterService.selectedRadio);\r\n }\r\n\r\n applyDateFilter() {\r\n\r\n this.applyDateFilterOnData();\r\n this.applySortingOnFilteredData();\r\n this.emitData();\r\n this.annaFilterService.updateStateOfTheCurrentFilterTab(this.annaSortService.columnSortState);\r\n this.closeTooltip();\r\n \r\n }\r\n\r\n applyDateFilterOnData(){\r\n if(this.showFilterComponent && this.isFilterChanged){\r\n let currentSelectedDate = this.calendarSelection;\r\n \r\n let fromDate = {year: currentSelectedDate.fromDate.year,month: currentSelectedDate.fromDate.month,day: currentSelectedDate.fromDate.day};\r\n let toDate = {year: currentSelectedDate.toDate.year,month: currentSelectedDate.toDate.month,day: currentSelectedDate.toDate.day};\r\n \r\n if(isEqual(this.calendarMinEnabledDate,fromDate) && isEqual(this.calendarMaxEnabledDate,toDate) && this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n currentSelectedDate = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n else{\r\n currentSelectedDate.fromDate = moment(this.annaDateTimeFormatService.convertNgbDateToMoment(currentSelectedDate.fromDate));\r\n currentSelectedDate.toDate = moment(this.annaDateTimeFormatService.convertNgbDateToMoment(currentSelectedDate.toDate));\r\n }\r\n \r\n \r\n this.annaFilterService.reOrderAppliedFiltersState(this.clonedTableData,currentSelectedDate);\r\n this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio,currentSelectedDate);\r\n this.tableData = this.annaFilterService.filterData(this.clonedTableData, \"\");\r\n this.annaSortService.noSortingAppliedData = cloneDeep(this.tableData);\r\n this.disableEnableEachColumnTooltipIcon();\r\n\r\n }\r\n }\r\n\r\n applyWeekFilter(event: any) {\r\n\r\n }\r\n\r\n incrementHour(arr: any[]) {\r\n if (arr[0] == \"\") {\r\n arr[0] = 1;\r\n } else if (parseInt(arr[0]) < 12) {\r\n arr[0] = parseInt(arr[0]) + 1;\r\n } else {\r\n arr[0] = 1;\r\n }\r\n }\r\n\r\n decrementHour(arr: any[]) {\r\n if (arr[0] == \"\") {\r\n arr[0] = 12;\r\n } else if (parseInt(arr[0]) > 1) {\r\n arr[0] = parseInt(arr[0]) - 1;\r\n } else {\r\n arr[0] = 12;\r\n }\r\n }\r\n\r\n incrementMinute(arr: any[]) {\r\n arr[1] = parseInt(arr[1]) + 15;\r\n if (parseInt(arr[1]) == 60) {\r\n arr[1] = \"00\";\r\n } else if (parseInt(arr[1]) == 0) {\r\n arr[1] = \"00\";\r\n }\r\n else if(parseInt(arr[1]) > 60){\r\n let res = parseInt(arr[1]) - 60;\r\n arr[1] = res < 10 ? `0${res}` : res.toString(); \r\n }\r\n }\r\n\r\n decrementMinute(arr: any) {\r\n arr[1] = parseInt(arr[1]) - 15;\r\n if (parseInt(arr[1]) < 0) {\r\n let res = 60 + parseInt(arr[1]);\r\n arr[1] = res;\r\n } else if (parseInt(arr[1]) == 0) {\r\n arr[1] = \"00\";\r\n }\r\n else if(arr[1] < 10){\r\n arr[1]= `0${arr[1]}`;\r\n }\r\n }\r\n\r\n changeStartTimeHour(increment: boolean) {\r\n if (increment) {\r\n this.incrementHour(this.selectedFromTime);\r\n } else {\r\n this.decrementHour(this.selectedFromTime);\r\n }\r\n this.startTimeHourChange(this.selectedFromTime[0].toString());\r\n }\r\n\r\n changeEndTimeHour(increment: boolean) {\r\n if (increment) {\r\n this.incrementHour(this.selectedToTime);\r\n } else {\r\n this.decrementHour(this.selectedToTime);\r\n }\r\n this.endTimeHourChange(this.selectedToTime[0].toString());\r\n }\r\n\r\n changeEndTimeMinute(increment: boolean) {\r\n if (increment) {\r\n this.incrementMinute(this.selectedToTime);\r\n } else {\r\n this.decrementMinute(this.selectedToTime);\r\n }\r\n this.endTimeMinChange(this.selectedToTime[1].toString());\r\n }\r\n\r\n changeStartTimeMinute(increment: boolean) {\r\n if (increment) {\r\n this.incrementMinute(this.selectedFromTime);\r\n } else {\r\n this.decrementMinute(this.selectedFromTime);\r\n }\r\n this.startTimeMinChange(this.selectedFromTime[1].toString());\r\n }\r\n\r\n applyTimeFilters() {\r\n\r\n this.applyTimeFilterOnData();\r\n this.applySortingOnFilteredData();\r\n this.emitData();\r\n this.annaFilterService.updateStateOfTheCurrentFilterTab(this.annaSortService.columnSortState);\r\n this.closeTooltip();\r\n\r\n }\r\n\r\n applyTimeFilterOnData(){\r\n if(this.showFilterComponent && this.isFilterChanged){\r\n let currentSelectedTimeFilter: {fromTime: string, toTime:string, includeMulti: boolean, includeZero: boolean, includeTimeRange: boolean} = {\r\n fromTime: null,\r\n toTime: null,\r\n includeMulti: false,\r\n includeZero: false,\r\n includeTimeRange: false,\r\n };\r\n \r\n let fromTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(\r\n this.selectedFromTime[0] + \":\" + this.selectedFromTime[1] + \" \" + this.selectedFromTime[2],\r\n true\r\n );\r\n let fromTime24HrFormat = fromTime24HrFormatArr[0] + \":\" + fromTime24HrFormatArr[1] + \":00\";\r\n \r\n let toTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(\r\n this.selectedToTime[0] + \":\" + this.selectedToTime[1] + \" \" + this.selectedToTime[2],\r\n true\r\n );\r\n let toTime24HrFormat = toTime24HrFormatArr[0] + \":\" + toTime24HrFormatArr[1] + \":00\";\r\n \r\n currentSelectedTimeFilter = { fromTime: fromTime24HrFormat, toTime: toTime24HrFormat, includeMulti: this.multiTimeCheckboxChecked, \r\n includeZero: this.zeroTimeCheckboxChecked, includeTimeRange: this.enterTimeCheckboxChecked};\r\n \r\n let isFiltered = this.annaFilterService.reOrderAppliedFiltersState(this.clonedTableData,currentSelectedTimeFilter);\r\n this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio,currentSelectedTimeFilter);\r\n this.tableData = this.annaFilterService.filterData(this.clonedTableData, \"\");\r\n \r\n if(!isFiltered){\r\n this.annaFilterService.tooltipSelectedMap.delete(this.annaFilterService.selectedRadio);\r\n }\r\n this.annaSortService.noSortingAppliedData = cloneDeep(this.tableData);\r\n this.disableEnableEachColumnTooltipIcon(); \r\n \r\n }\r\n }\r\n\r\n closeTimeFilter() {\r\n this.selectedFromTime = cloneDeep(this.clonedSelectedFromTime);\r\n this.selectedToTime = cloneDeep(this.clonedSelectedToTime);\r\n this.closeTooltip();\r\n }\r\n\r\n disableTimeFilterApplyButton() {\r\n\r\n if(this.showFilterComponent && this.showSortComponent){\r\n this.disableTimeFilterApplyBtn = !this.validateTimeFilterInput() || (!this.checkIfSortingChanged() && !this.checkIfTimeTooltipIsFiltered() );\r\n }\r\n else if(this.showFilterComponent){\r\n this.disableTimeFilterApplyBtn = !this.validateTimeFilterInput() || !this.checkIfTimeTooltipIsFiltered();\r\n }\r\n else if(this.showSortComponent){\r\n this.disableTimeFilterApplyBtn = !this.checkIfSortingChanged();\r\n }\r\n\r\n }\r\n\r\n validateTimeFilterInput(){\r\n if(this.startTimeHourErr || this.startTimeMinErr || this.endTimeHourErr || this.endTimeMinErr){\r\n return false;\r\n }\r\n\r\n if (!this.multiTimeCheckboxChecked && !this.zeroTimeCheckboxChecked && !this.enterTimeCheckboxChecked) {\r\n return false;\r\n }\r\n\r\n let timeFormat = \"HH:mm:ss\";\r\n\r\n let startTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(\r\n this.selectedFromTime[0] + \":\" + this.selectedFromTime[1] + \" \" + this.selectedFromTime[2],\r\n true\r\n );\r\n let startTime24HrFormat = startTime24HrFormatArr[0] + \":\" + startTime24HrFormatArr[1] + \":00\";\r\n let endTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(\r\n this.selectedToTime[0] + \":\" + this.selectedToTime[1] + \" \" + this.selectedToTime[2],\r\n true\r\n );\r\n let endTime24HrFormat = endTime24HrFormatArr[0] + \":\" + endTime24HrFormatArr[1] + \":00\";\r\n\r\n return !(moment(startTime24HrFormat, timeFormat).isAfter(moment(endTime24HrFormat, timeFormat))); \r\n }\r\n\r\n sortedData(event: any) {\r\n if (event.type == \"none\") {\r\n this.tableData = this.annaFilterService.filterData(this.clonedTableData, \"\");\r\n } else {\r\n this.tableData = event.data;\r\n }\r\n this.sortingAppliedToTable.emit(this.tableData);\r\n }\r\n\r\n checkIfSortingIsApplied() {\r\n for(let [key,value] of this.annaSortService.columnSortState.entries()){\r\n if(value == \"ASC\"){\r\n this.tableData = cloneDeep(this.annaSortService.sortDataForComponentOtherThanLurAndCsrPage(true,this.tableData,key));\r\n }\r\n else if(value == \"DESC\"){\r\n this.tableData = cloneDeep(this.annaSortService.sortDataForComponentOtherThanLurAndCsrPage(false,this.tableData,key));\r\n }\r\n }\r\n }\r\n\r\n\r\n disableEnableEachColumnTooltipIcon() {\r\n this.tableHeaders.forEach(header => {\r\n \r\n header.headerInfo.forEach(item => {\r\n if (item.showTooltipIcon) {\r\n \r\n let values = [];\r\n item.disableTooltipIcon = true;\r\n\r\n item.filterSortObjectKeys.forEach(key => {\r\n \r\n if(key == \"period\"){\r\n let uniqStartDate = uniq(this.tableData.map((u: { [x: string]: any; }) => u[\"startDate\"]));\r\n let uniqEndDate = uniq(this.tableData.map((u: { [x: string]: any; }) => u[\"endDate\"]));\r\n\r\n item.disableTooltipIcon = (uniqStartDate.length > 1 || uniqEndDate.length > 1) ? false : true; \r\n }\r\n else{\r\n values = this.tableData.map((u: { [x: string]: any; }) => u[key]);\r\n if(uniq(values).filter(n => n!=null).length > 1){\r\n item.disableTooltipIcon = false;\r\n }\r\n }\r\n \r\n })\r\n }\r\n \r\n });\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n \r\n this.annaGenericTableService.virtualScrollSubject.subscribe((val) =>{\r\n this.isScrolledLeft = document.getElementsByClassName(\"table-container\")[0].scrollLeft > 0;\r\n this.cdRef.detectChanges();\r\n });\r\n\r\n let container = document.getElementsByClassName(\"table-container\")[0];\r\n fromEvent(container, 'scroll')\r\n .subscribe((event: Event) => \r\n {\r\n this.isScrolledLeft = (event.target as Element).scrollLeft > 0;\r\n });\r\n \r\n }\r\n\r\n setMarginLeftForFilterIcon(){\r\n let elementArr = this.viewChildTableHeaders.toArray();\r\n elementArr.forEach((item) => {\r\n let childDivElements = item.nativeElement.children;\r\n \r\n if (childDivElements.length == 2) {\r\n let firstParagraphWidth = childDivElements[0].children[0];\r\n let secondParagraphWidth = childDivElements[1].children[0];\r\n \r\n if(firstParagraphWidth.offsetWidth > secondParagraphWidth.offsetWidth){\r\n let diff = firstParagraphWidth.offsetWidth - secondParagraphWidth.offsetWidth;\r\n if(childDivElements[0].children.length == 2){\r\n childDivElements[0].children[1].style.marginLeft = 4 + 'px';\r\n }\r\n \r\n if(childDivElements[1].children.length == 2){\r\n\r\n childDivElements[1].children[1].style.marginLeft = diff + 4 + 'px';\r\n }\r\n }\r\n else{\r\n let diff = secondParagraphWidth.offsetWidth - firstParagraphWidth.offsetWidth;\r\n if(childDivElements[0].children.length == 2){\r\n childDivElements[0].children[1].style.marginLeft = diff + 4 + 'px';\r\n }\r\n \r\n if(childDivElements[1].children.length == 2){\r\n\r\n childDivElements[1].children[1].style.marginLeft = 4 + 'px';\r\n }\r\n }\r\n \r\n }\r\n });\r\n }\r\n\r\n dataRowClicked(rowData: any) {\r\n this.rowClicked.emit(rowData);\r\n }\r\n\r\n radioButtonClicked(data: any, action: string, isDisabled: boolean) {\r\n if (!isDisabled) {\r\n this.radioButtonSelected.emit({ data, action });\r\n }\r\n }\r\n\r\n bindTheValueToSellerGroupTooltip(sellerGroupHierarchy: SellerGroupHierarchy[], tooltip: any): void {\r\n if (this.hierarchyTooltip && this.hierarchyTooltip.open) {\r\n this.hierarchyTooltip.close();\r\n }\r\n this.sellerGroupHierarchy = sellerGroupHierarchy;\r\n this.hierarchyTooltip = tooltip;\r\n this.hierarchyTooltip.open();\r\n }\r\n\r\n iconClicked(rowData: any,iconClass: string){\r\n this.gtIconClicked.emit({data: rowData,iconClass: iconClass});\r\n }\r\n\r\n svgIconClicked(data: GtColumnIconEmittedData){\r\n this.gtSVGIconClicked.emit(data);\r\n }\r\n\r\n textActionClicked(rowData: any,id: number){\r\n this.gtTextActionClicked.emit({data:rowData,id});\r\n }\r\n\r\n viewDetailsClicked(rowData: any){\r\n this.gtViewDetailClicked.emit({data:rowData});\r\n }\r\n\r\n setColumnSortStateMap(){\r\n this.tableHeaders.forEach(column => {\r\n column.headerInfo.forEach( (header) => {\r\n if(header.showTooltipIcon && header.isSortRequired){\r\n header.isSortRequired.forEach( (item,index) => {\r\n if(item){\r\n this.annaSortService.columnSortState.set(header.filterSortObjectKeys[index], \"DEFAULT\"); \r\n }\r\n })\r\n }\r\n })\r\n });\r\n }\r\n\r\n storeSortTypeInTempVariable(event: SortType){\r\n this.tempSortOrder = event;\r\n this.disableApplyButtonOfSelectedFilter();\r\n }\r\n\r\n unCheckAllCheckbox(){\r\n this.tooltipOptions.forEach(item => {\r\n item.isSelected = false;\r\n let index = this.clonedTooltipOptions.findIndex(opt => opt.id == item.id);\r\n this.clonedTooltipOptions[index].isSelected = false;\r\n \r\n });\r\n this.selectedCheckboxOptionsCount = 0;\r\n this.disableSelectAll = false;\r\n this.disableClearAll = true;\r\n this.disableCheckboxApply = true;\r\n }\r\n\r\n selectAllCheckbox(){\r\n this.tooltipOptions.forEach(item => {\r\n item.isSelected = true;\r\n let index = this.clonedTooltipOptions.findIndex(opt => opt.id == item.id);\r\n this.clonedTooltipOptions[index].isSelected = true;\r\n });\r\n this.selectedCheckboxOptionsCount = this.tooltipOptions.length;\r\n this.disableSelectAll = true;\r\n this.disableClearAll = false;\r\n this.disableCheckboxFilterApplyButton();\r\n }\r\n\r\n searchForTheItem(str: string){\r\n if(str){\r\n this.tooltipOptions = cloneDeep(this.clonedTooltipOptions.filter(item => item.value.toString().includes(str)));\r\n \r\n this.tooltipOptions.forEach(element => {\r\n element.label = this.boldString(element.label,str);\r\n });\r\n \r\n if(this.tooltipOptions.length > 0){\r\n let unselectedItems = this.tooltipOptions.filter((item) => !item.isSelected);\r\n let selectedItems = this.tooltipOptions.filter((item) => item.isSelected); \r\n this.disableSelectAll = unselectedItems.length == 0;\r\n this.disableClearAll = selectedItems.length == 0;\r\n this.selectedCheckboxOptionsCount = selectedItems.length;\r\n this.disableCheckboxApply = (selectedItems.length == 0 || !this.checkIfCheckboxTooltipIsFiltered());\r\n \r\n }\r\n else{\r\n this.selectedCheckboxOptionsCount = 0;\r\n this.disableCheckboxApply = true;\r\n this.disableClearAll = true;\r\n this.disableSelectAll = true;\r\n }\r\n }\r\n else{\r\n this.tooltipOptions = cloneDeep(this.clonedTooltipOptions);\r\n let unselectedItems = this.tooltipOptions.filter(item => !item.isSelected);\r\n let selectedItems = this.tooltipOptions.filter(item => item.isSelected);\r\n this.selectedCheckboxOptionsCount = selectedItems.length;\r\n this.disableSelectAll = unselectedItems.length == 0;\r\n this.disableClearAll = selectedItems.length == 0;\r\n this.disableCheckboxFilterApplyButton();\r\n }\r\n }\r\n\r\n boldString(str: string, find: string){\r\n var re = new RegExp(find, 'g');\r\n return str.replace(re, '<b>'+find+'</b>');\r\n }\r\n\r\n removeBoldElementFromString(originalString: string){\r\n let firstRegExp = new RegExp('<b>','g');\r\n let secondRegExp = new RegExp('</b>','g');\r\n\r\n let ret = originalString.replace(firstRegExp,'');\r\n return ret.replace(secondRegExp,'');\r\n }\r\n\r\n clearSearchedItem(){\r\n this.searchItem = \"\";\r\n this.searchForTheItem(\"\");\r\n }\r\n\r\n calendarDateChanged(event: any){\r\n this.calendarSelection = event;\r\n this.disableCalendarApplyButton();\r\n }\r\n\r\n disableCalendarApplyButton() {\r\n\r\n if(this.showFilterComponent && this.showSortComponent){\r\n this.disableCalendarApplyBtn = !(this.calendarSelection.fromDate && this.calendarSelection.toDate) || (!this.checkIfSortingChanged() && !this.checkIfDateTooltipIsFiltered() );\r\n }\r\n else if(this.showFilterComponent){\r\n this.disableCalendarApplyBtn = !(this.calendarSelection.fromDate && this.calendarSelection.toDate) || !this.checkIfDateTooltipIsFiltered();\r\n }\r\n else if(this.showSortComponent){\r\n this.disableCalendarApplyBtn = !this.checkIfSortingChanged();\r\n }\r\n\r\n }\r\n\r\n setInitialValueMapForTimeFilter(key: string) {\r\n let data = this.clonedTableData.filter(\r\n (obj) => ![\"\", \"-\", null, \"0\", \"<multi>\"].includes(obj[key]));\r\n\r\n let timeArr = map(data, key);\r\n timeArr.sort((a, b) => {\r\n return this.annaDateTimeFormatService.sortByTimeAscending(a, b);\r\n });\r\n \r\n let obj = {\r\n fromTime: timeArr[0],\r\n toTime: timeArr[timeArr.length - 1],\r\n includeMulti: false,\r\n includeZero: false,\r\n includeTimeRange: false\r\n };\r\n \r\n if (\r\n this.gtGeneralConfig.component === \"SPOTDETAILS\" ||\r\n this.gtGeneralConfig.component === \"EXCLUDEINVENTORYPOPUP\"\r\n ) {\r\n let includeMulti =\r\n this.clonedTableData.findIndex((obj) => obj[key] == \"<multi>\") !=\r\n -1;\r\n let includeZero =\r\n this.clonedTableData.findIndex((obj) => obj[key] == \"0\") != -1;\r\n let includeTimeRange =\r\n this.clonedTableData.findIndex(\r\n (obj) => obj[key] != \"0\" && obj[key] != \"<multi>\"\r\n ) != -1;\r\n \r\n let obj = {\r\n fromTime: timeArr[0],\r\n toTime: timeArr[timeArr.length - 1],\r\n includeMulti: includeMulti,\r\n includeZero: includeZero,\r\n includeTimeRange: includeTimeRange,\r\n };\r\n this.annaFilterService.initialValueMap.set(key, obj);\r\n } \r\n else if (this.gtGeneralConfig.component === \"RATING\") {\r\n this.setInitialValueMapForRatingPageTimeFilter(key);\r\n } else {\r\n this.annaFilterService.initialValueMap.set(key, obj);\r\n }\r\n}\r\n\r\nsetInitialValueMapForRatingPageTimeFilter(key: string){\r\n let includeMulti =\r\n this.clonedTableData.findIndex((obj) => obj[key][0] == \"<multi>\") !=\r\n -1;\r\n let includeZero =\r\n this.clonedTableData.findIndex((obj) => obj[key][0] == \"0\") != -1;\r\n let includeTimeRange =\r\n this.clonedTableData.findIndex(\r\n (obj) => obj[key][0] != \"0\" && obj[key][0] != \"<multi>\"\r\n ) != -1;\r\n\r\n let startTimeArr = map(this.clonedTableData, \"startTime\");\r\n let endTimeArr = map(this.clonedTableData, \"endTime\");\r\n\r\n startTimeArr.sort((a, b) => {\r\n return this.annaDateTimeFormatService.sortByTimeAscending(a, b);\r\n });\r\n\r\n endTimeArr.sort((a, b) => {\r\n return this.annaDateTimeFormatService.sortByTimeDescending(a, b);\r\n });\r\n\r\n let obj = {\r\n fromTime: startTimeArr[0],\r\n toTime: endTimeArr[0],\r\n includeMulti: includeMulti,\r\n includeZero: includeZero,\r\n includeTimeRange: includeTimeRange,\r\n };\r\n this.annaFilterService.initialValueMap.set(key, obj); \r\n }\r\n\r\n startTimeHourChange(val: string){\r\n if(val.length == 0 || 1 > parseInt(val) || parseInt(val) > 12){\r\n this.startTimeHourErr = true;\r\n }\r\n else{\r\n this.startTimeHourErr = false;\r\n }\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n startTimeMinChange(val: string){\r\n if(val.length != 2 || 0 > parseInt(val) || parseInt(val) > 59){\r\n this.startTimeMinErr = true;\r\n }\r\n else{\r\n this.startTimeMinErr = false;\r\n }\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n endTimeHourChange(val: string){\r\n if(val.length == 0 || 1 > parseInt(val) || parseInt(val) > 12){\r\n this.endTimeHourErr = true;\r\n }\r\n else{\r\n this.endTimeHourErr = false;\r\n }\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n endTimeMinChange(val: string){\r\n if(val.length != 2 || 0 > parseInt(val) || parseInt(val) > 59){\r\n this.endTimeMinErr = true;\r\n }\r\n else{\r\n this.endTimeMinErr = false;\r\n }\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n checkIfCheckboxTooltipIsFiltered(){\r\n let currentSelectedValue = [];\r\n let previousSelectedValue = [];\r\n\r\n if(this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)){\r\n previousSelectedValue = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);\r\n \r\n if(!this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n let initialValue = sortBy(uniq(this.clonedTableData.map(item => item[this.annaFilterService.selectedRadio])));\r\n this.annaFilterService.initialValueMap.set(this.annaFilterService.selectedRadio,initialValue);\r\n }\r\n\r\n }\r\n else if(this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n previousSelectedValue = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n else{\r\n previousSelectedValue = sortBy(uniq(this.clonedTableData.map(item => item[this.annaFilterService.selectedRadio])));\r\n this.annaFilterService.initialValueMap.set(this.annaFilterService.selectedRadio,previousSelectedValue);\r\n }\r\n\r\n if(this.tooltipOptions){\r\n\r\n currentSelectedValue = sortBy(this.tooltipOptions.filter(item => item.isSelected).map(item => item.value));\r\n\r\n if(!this.searchItem && currentSelectedValue.length == this.tooltipOptions.length && this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n currentSelectedValue = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n \r\n }\r\n\r\n let blankIndex = currentSelectedValue.findIndex((item: string) => item == null);\r\n if(blankIndex != -1){\r\n currentSelectedValue = sortBy(currentSelectedValue);\r\n }\r\n\r\n this.isFilterChanged = !isEqual(currentSelectedValue,previousSelectedValue);\r\n return this.isFilterChanged;\r\n }\r\n\r\n checkIfTimeTooltipIsFiltered(){\r\n let currentSelectedTimeFilter: {fromTime: string, toTime:string, includeMulti: boolean, includeZero: boolean, includeTimeRange: boolean} = {\r\n fromTime: null,\r\n toTime: null,\r\n includeMulti: false,\r\n includeZero: false,\r\n includeTimeRange: false,\r\n };\r\n \r\n let previousSelectedTimeFilter;\r\n \r\n if(this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)){\r\n previousSelectedTimeFilter = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n else if(this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n previousSelectedTimeFilter = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n \r\n let fromTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(\r\n this.selectedFromTime[0] + \":\" + this.selectedFromTime[1] + \" \" + this.selectedFromTime[2],\r\n true\r\n );\r\n let fromTime24HrFormat = fromTime24HrFormatArr[0] + \":\" + fromTime24HrFormatArr[1] + \":00\";\r\n\r\n let toTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(\r\n this.selectedToTime[0] + \":\" + this.selectedToTime[1] + \" \" + this.selectedToTime[2],\r\n true\r\n );\r\n let toTime24HrFormat = toTime24HrFormatArr[0] + \":\" + toTime24HrFormatArr[1] + \":00\";\r\n \r\n currentSelectedTimeFilter = { fromTime: fromTime24HrFormat, toTime: toTime24HrFormat, includeMulti: this.multiTimeCheckboxChecked, \r\n includeZero: this.zeroTimeCheckboxChecked, includeTimeRange: this.enterTimeCheckboxChecked};\r\n \r\n this.isFilterChanged = !isEqual(previousSelectedTimeFilter, currentSelectedTimeFilter);\r\n return this.isFilterChanged; \r\n }\r\n\r\n checkIfDateTooltipIsFiltered(){\r\n let currentSelectedDate = cloneDeep(this.calendarSelection);\r\n let previousSelectedDate: {fromDate: any, toDate: any} = {fromDate: null, toDate: null};\r\n\r\n if(this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)){\r\n previousSelectedDate = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);\r\n \r\n if(!this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n this.setInitialValueMapForDateFilter();\r\n }\r\n\r\n }\r\n else if(this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n previousSelectedDate = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n else{\r\n this.setInitialValueMapForDateFilter();\r\n previousSelectedDate = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n\r\n if(currentSelectedDate.fromDate && currentSelectedDate.toDate){\r\n let fromDate = {year: currentSelectedDate.fromDate.year,month: currentSelectedDate.fromDate.month,day: currentSelectedDate.fromDate.day};\r\n let toDate = {year: currentSelectedDate.toDate.year,month: currentSelectedDate.toDate.month,day: currentSelectedDate.toDate.day};\r\n \r\n if(isEqual(this.calendarMinEnabledDate,fromDate) && isEqual(this.calendarMaxEnabledDate,toDate) && this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n currentSelectedDate = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n else{\r\n currentSelectedDate.fromDate = moment(this.annaDateTimeFormatService.convertNgbDateToMoment(currentSelectedDate.fromDate));\r\n currentSelectedDate.toDate = moment(this.annaDateTimeFormatService.convertNgbDateToMoment(currentSelectedDate.toDate));\r\n }\r\n this.isFilterChanged = !isEqual(previousSelectedDate,currentSelectedDate);\r\n }\r\n\r\n return this.isFilterChanged;\r\n }\r\n\r\n setInitialValueMapForDateFilter(){\r\n let minMaxDate;\r\n\r\n if(this.annaFilterService.selectedRadio == \"period\"){\r\n let minStartDate = this.annaFilterService.returnMinAndMaxDate(this.clonedTableData, \"startDate\");\r\n let maxEndDate = this.annaFilterService.returnMinAndMaxDate(this.clonedTableData,\"endDate\");\r\n minMaxDate = [minStartDate[0],maxEndDate[1]];\r\n }\r\n else{\r\n minMaxDate = this.annaFilterService.returnMinAndMaxDate(this.clonedTableData,this.annaFilterService.selectedRadio);\r\n }\r\n let selectedDate = {fromDate: minMaxDate[0], toDate: minMaxDate[1]};\r\n this.annaFilterService.initialValueMap.set(this.annaFilterService.selectedRadio, selectedDate);\r\n }\r\n\r\n checkIfSliderTooltipIsFiltered(){\r\n let currentSliderData: {min:any, max: any} = {min: null , max: null};\r\n let previousSliderData: {min:any, max: any} = {min: \"\", max: \"\"};\r\n\r\n // if(this.isMinTextBoxEmpty){\r\n // currentSliderData.min = this.options.floor;\r\n // currentSliderData.max = this.sliderMaxValue;\r\n // }\r\n // else if(this.isMaxTextBoxEmpty){\r\n // currentSliderData.max = this.options.ceil;\r\n // currentSliderData.min = this.sliderMinValue;\r\n // }\r\n // else{\r\n currentSliderData.max = this.sliderEnteredMaxValue;\r\n currentSliderData.min = this.sliderEnteredMinValue;\r\n // }\r\n\r\n if(this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)){\r\n previousSliderData = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);\r\n if(!this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n this.setInitialValueMapForSliderFilter();\r\n }\r\n }\r\n else if(this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n previousSliderData = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n else{\r\n this.setInitialValueMapForSliderFilter();\r\n previousSliderData = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n\r\n if(currentSliderData.min == this.options.floor && currentSliderData.max == this.options.ceil && this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio) ){\r\n currentSliderData = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n\r\n this.isFilterChanged = !isEqual(previousSliderData,currentSliderData);\r\n return this.isFilterChanged;\r\n }\r\n\r\n setInitialValueMapForSliderFilter(){\r\n let minValue = this.annaFilterService.returnMaxAndMinValue(this.clonedTableData, this.annaFilterService.selectedRadio, true);\r\n let maxValue = this.annaFilterService.returnMaxAndMinValue(this.clonedTableData, this.annaFilterService.selectedRadio, false);\r\n let sliderData = { min: minValue, max: maxValue };\r\n this.annaFilterService.initialValueMap.set(this.annaFilterService.selectedRadio, sliderData);\r\n \r\n }\r\n\r\n checkIfSortingChanged(){\r\n this.isSortChanged = this.tempSortOrder != null && this.tempSortOrder != this.annaSortService.columnSortState.get(this.annaFilterService.selectedRadio);;\r\n console.log(this.isSortChanged);\r\n return this.isSortChanged;\r\n }\r\n\r\n disableApplyButtonOfSelectedFilter(){\r\n let header = this.annaFilterService.selectedRadio;\r\n\r\n if (this.annaFilterService.calendarSet.has(header)) {\r\n this.disableCalendarApplyButton();\r\n } else if (this.annaFilterService.sliderSet.has(header)) {\r\n this.disableSliderApplyBtn();\r\n } else if (this.annaFilterService.timeSet.has(header)) {\r\n this.disableTimeFilterApplyButton();\r\n } else {\r\n this.disableCheckboxFilterApplyButton();\r\n }\r\n }\r\n\r\n disableCheckboxFilterApplyButton(){\r\n let selectedItems = this.showFilterComponent ? this.tooltipOptions.filter(item => item.isSelected) : [];\r\n \r\n if(this.showFilterComponent && this.showSortComponent){\r\n this.disableCheckboxApply = selectedItems.length == 0 || (!this.checkIfSortingChanged() && !this.checkIfCheckboxTooltipIsFiltered() );\r\n }\r\n else if(this.showFilterComponent){\r\n this.disableCheckboxApply = selectedItems.length == 0 || !this.checkIfCheckboxTooltipIsFiltered();\r\n }\r\n else if(this.showSortComponent){\r\n this.disableCheckboxApply = !this.checkIfSortingChanged();\r\n }\r\n }\r\n\r\n trackByTooltipModelId(index: number , item: TooltipModel){\r\n return item.id;\r\n }\r\n\r\n setActiveStateObject(){\r\n this.annaFilterService.isFilterSortActive = {};\r\n this.tableHeaders.forEach(item => {\r\n item.headerInfo.forEach(header => {\r\n if(header.showTooltipIcon){\r\n let key = header.filterSortObjectKeys.join(',');\r\n header.joinedFilterSortObjectKeys = key;\r\n this.annaFilterService.isFilterSortActive[key] = false;\r\n }\r\n })\r\n });\r\n }\r\n\r\n setIsDifference(value: boolean){\r\n this.isDifferenceLessThan25Percent = value;\r\n }\r\n}\r\n","<div class=\"table-container\" [ngClass]=\"{ 'scroll-left-shadow-effect': isScrolledLeft }\">\r\n <div\r\n [class]=\"gtGeneralConfig.tableContainerName\"\r\n class=\"horizontal-scroll-for-table-container\"\r\n [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n ((gtDimension.rowHeight + (includeBorderInTableHeight ? rowBorderWidth : 0)) * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight + ( includeBorderInTableHeight ? (2 * rowBorderWidth) : 0))) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\"\r\n >\r\n <table class=\"gt\" [ngClass]=\"tableClass\" mat-table [dataSource]=\"tableData\">\r\n <tr\r\n class=\"header-row\"\r\n mat-header-row\r\n *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"\r\n ></tr>\r\n <tr\r\n class=\"total-row\"\r\n mat-header-row\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\r\n [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length ) ||\r\n (showNoDataToDisplay) || \r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"\r\n ></tr>\r\n <tr\r\n [class]=\"rowData.gtClass\"\r\n [ngClass]=\"{'no-border-tr': showNoDataToDisplay}\"\r\n mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\"\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n [style.background-color]=\"rowData.backgroundColor\"\r\n [style.border]=\"rowData.border\" (click)=\"dataRowClicked(rowData)\"\r\n ></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container [matColumnDef]=\"column.colName\" *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\">\r\n <td mat-header-cell *matHeaderCellDef [attr.colspan]=\"column.colspan\" class=\"{{column.class}}\">\r\n <strong>{{ column.data }}</strong>\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br>\r\n <span>{{column.lowerData}}</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage\">\r\n <i class=\"mi mdi-info-outline info-label\" container=\"body\"\r\n [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\" placement=\"bottom\"></i>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container [matColumnDef]=\"columnDef.headerInfo[0].objectKey\" *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\">\r\n <th #tableHeader nowrap mat-header-cell *matHeaderCellDef [style.width]=\"columnDef.width\">\r\n <div class=\"row mx-0\" *ngFor=\"let header of columnDef.headerInfo; let j = index;\"> \r\n <p\r\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\r\n >\r\n {{ header.name }}\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"impsInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"ratingInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"rateInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span\r\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div *ngIf=\"gtGeneralConfig.showAllColumnFilter\" class=\"sort-filter-container\">\r\n <ng-container *ngIf=\"header.showTooltipIcon\">\r\n <!-- Active tooltip Functionality -->\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys], \r\n disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])\r\n }\"\r\n [ngbTooltip]=\"filterTooltip\"\r\n placement=\"bottom left-top auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-checkbox-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])\r\n }\"\r\n [ngbTooltip]=\"sliderToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-slider-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t1=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t1, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])\r\n }\"\r\n [ngbTooltip]=\"datePickerTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-datepicker-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t2=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t2, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])\r\n }\"\r\n [ngbTooltip]=\"weekPickerToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])\r\n }\"\r\n [ngbTooltip]=\"timeFilterToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-time-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t4=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t4, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!header.showTooltipIcon\">\r\n <span id=\"no-filter-space\"></span><br />\r\n </ng-container>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'DRR'\">\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <ng-container *ngIf=\"showSkeletonLoading\">\r\n <td mat-cell>\r\n <ngx-skeleton-loader count=\"1\" [theme]=\"{ height: '10px', display: 'block' }\">\r\n </ngx-skeleton-loader>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container\r\n *ngFor=\"let subline of columnDef.headerInfo; let sublineIndex = index; trackBy: trackByFn\"\r\n >\r\n <td\r\n mat-cell\r\n *ngIf=\"!ROW_DATA['hide' + subline.objectKey + 'Td']\"\r\n [attr.rowspan]=\"ROW_DATA[subline.objectKey + 'Rowspan']\"\r\n >\r\n <ng-container [ngSwitch]=\"subline.typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i [class]=\"ROW_DATA.iconClass\"></i>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[subline.objectKey]\"\r\n [ngClass]=\"{ 'disable-checkbox': ROW_DATA[subline.isDisabledKey] }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectRow(ROW_DATA)\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[subline.objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': ROW_DATA[subline.isDisabledKey] }\"\r\n (click)=\"selectUnselectRow(ROW_DATA)\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group\r\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\r\n >\r\n <ng-container\r\n *ngFor=\"let radioButton of ROW_DATA['RadioButtonConfig']; let last = last\"\r\n >\r\n <mat-radio-button\r\n value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\"\r\n (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \"\r\n >{{ radioButton.label }}</mat-radio-button\r\n ><br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ ROW_DATA[subline.objectKey] }}\r\n\r\n <ng-container\r\n *ngIf=\"\r\n subline.objectKey == 'Status' && (ROW_DATA['Remarks'] !== null)\r\n \"\r\n >\r\n <i\r\n class=\"mi mdi-info-outline remarks-tooltip\"\r\n [ngbTooltip]=\"columnInfoTooltip\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"remarks-info-tooltip\"\r\n #t=\"ngbTooltip\"\r\n ></i>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"gtGeneralConfig.component != 'DRR'\">\r\n <td mat-cell *matCellDef=\"let ROW_DATA\" [style.background]=\"ROW_DATA.backgroundColor\">\r\n <ngx-skeleton-loader *ngIf=\"showSkeletonLoading\" count=\"1\" [theme]=\"{ height: '10px', display: 'block' }\">\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container *ngIf=\"tableData.length > 0 && !showNoDataToDisplay\">\r\n <div showEllipsisTextOnHover *ngFor=\"let subline of columnDef.headerInfo; let subLineIndex = index; trackBy: trackByFn\">\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i [class]=\"ROW_DATA.iconClass\" (click)=\"iconClicked(ROW_DATA,ROW_DATA.iconClass)\"></i>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <anna-core-anna-icon-column [componentName]=\"gtGeneralConfig.component\" [objectKey]=\"subline.objectKey\" [dataObject]=\"ROW_DATA\" (onColumnIconClicked)=\"svgIconClicked($event)\"></anna-core-anna-icon-column>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <button *ngFor=\"let text of ROW_DATA.textActions\" (click)=\"textActionClicked(ROW_DATA,text.id)\" [disabled]=\"text.isDisabled\" class=\"{{text.class}}\">{{text.name}}</button>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\r\n <span>{{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}</span>\r\n <i\r\n *ngIf=\"subline.objectKey == 'inventoryCode' && ROW_DATA['isSellerGroup'] && gtGeneralConfig.component == 'RATING' \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\"\r\n #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip\"\r\n (mouseenter)=\"bindTheValueToSellerGroupTooltip(ROW_DATA.sellerGroupHierarchy, info)\">\r\n </i>\r\n\r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageRating' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showRatingAverageIcon'] \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip\"\r\n [ngbTooltip]=\"postedRatingDifference\"\r\n >\r\n </i>\r\n \r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageImpression' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showImpressionAverageIcon'] \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip\"\r\n [ngbTooltip]=\"postedImpDifference\"\r\n >\r\n </i>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\r\n <p *ngIf=\"ROW_DATA.descriptionMessage || ROW_DATA.descriptionEmailReferenceNum\">\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container *ngIf=\"ROW_DATA.descriptionEmailReferenceNum\">\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a\r\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'PDF' || ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\">\r\n <a *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\" (click)=\"viewDetailsClicked(ROW_DATA)\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">View details</button>\r\n </a> \r\n </ng-container>\r\n \r\n <a href=\"{{ ROW_DATA.descriptionEmailUrl }}\" target=\"_blank\" *ngIf=\"ROW_DATA.descriptionEmailUrl\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-container\r\n *ngIf=\"\r\n gtGeneralConfig.page === 'SpotDetails' &&\r\n columnDef.headerInfo[subLineIndex].objectKey === 'Status'\r\n \"\r\n >\r\n <img\r\n src=\"assets/images/Undo-Credit-Icon.svg\"\r\n style=\"cursor: pointer\"\r\n class=\"img-circle\"\r\n alt=\"User Image\"\r\n height=\"15px\"\r\n width=\"15px\"\r\n *ngIf=\"ROW_DATA.AllowUserToUndoMarkForCredit\"\r\n (click)=\"undoCreditedSpot(ROW_DATA)\"\r\n />\r\n <img\r\n src=\"assets/images/Undo-MG-Icon.svg\"\r\n style=\"cursor: pointer\"\r\n class=\"img-circle\"\r\n alt=\"User Image\"\r\n height=\"15px\"\r\n width=\"15px\"\r\n *ngIf=\"ROW_DATA.AllowUserToUndoMarkForMakeGood\"\r\n (click)=\"undoMgSpot(ROW_DATA)\"\r\n />\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"showNoDataToDisplay\">\r\n <div>\r\n {{null}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <anna-core-no-data-lib [width]=\"noDataWidth\" [marginTop]=\"marginTop\" *ngIf=\"!showSkeletonLoading && showNoDataToDisplay\"> </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n \r\n <div class=\"radio-container\" *ngIf=\"showFilterTooltipTabs\">\r\n <div *ngFor=\"let data of filterTabObjects\">\r\n <p class=\"filter-tab\" (click)=\"populateTooltipDataBasedOnSelectedRadio(data)\" [ngClass]=\"{'active': annaFilterService.selectedRadio == data.key}\" *ngIf=\"filterTabObjects.length > 0\">{{ data.label }}</p>\r\n </div>\r\n </div>\r\n \r\n <div class=\"checkbox-sort\" *ngIf=\"showSortComponent\">\r\n <anna-core-sort-lib [ngClass]=\"{'no-bottom-border': !showFilterComponent}\"\r\n (sortOptionClicked)=\"storeSortTypeInTempVariable($event)\" [sortObjectKey]=\"annaFilterService.selectedRadio\"></anna-core-sort-lib>\r\n </div>\r\n \r\n <ng-container *ngIf=\"showFilterComponent\">\r\n <p class=\"d-flex justify-content-between\">\r\n <button class=\"filter-text-btn\" [disabled]=\"disableClearAll\" (click)=\"unCheckAllCheckbox()\">Clear All</button>\r\n <button class=\"filter-text-btn\" [disabled]=\"disableSelectAll\" (click)=\"selectAllCheckbox()\">Select All</button>\r\n </p>\r\n <p class=\"search-box\">\r\n <i class=\"mi mdi-search search-icon search-icon-position\"></i>\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search\"\r\n class=\"search-input\"\r\n style=\"margin-left: 2px; border: none; padding: 0px\"\r\n [(ngModel)]=\"searchItem\"\r\n (ngModelChange)=\"searchForTheItem($event)\"\r\n />\r\n <i class=\"mdi mdi-close search-bar-close\" [ngClass]=\"{'disable-close-icon': (!searchItem || searchItem.length == 0) }\"\r\n (click)=\"clearSearchedItem()\"></i>\r\n\r\n </p>\r\n <div class=\"dropdown-data-container\">\r\n <!-- Track By func -->\r\n <ng-container *ngFor=\"let option of tooltipOptions;trackBy: trackByTooltipModelId\">\r\n <p class=\"input\" (click)=\"selectUnselectCheckbox(option)\">\r\n <span *ngIf=\"option.isSelected\" role=\"button\" class=\"mi mdi-check-box check-box\"></span>\r\n <span *ngIf=\"!option.isSelected\" role=\"button\" class=\"mi mdi-check-box-outline-blank check-box unchecked\"></span>\r\n <span class=\"data\" title=\"{{ option.value }}\" [innerHTML]=\"option.label\"></span>\r\n </p>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"closeCheckboxFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableCheckboxApply }\"\r\n (click)=\"applyFilters()\"\r\n [disabled]=\"disableCheckboxApply\"\r\n >\r\n Apply\r\n <span *ngIf=\"showFilterComponent\">({{ selectedCheckboxOptionsCount == tooltipOptions.length && tooltipOptions.length != 0 && !searchItem? 'All': selectedCheckboxOptionsCount }})</span>\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n \r\n <div class=\"radio-container\" *ngIf=\"showFilterTooltipTabs\">\r\n <div *ngFor=\"let data of filterTabObjects\">\r\n <p class=\"filter-tab\" (click)=\"populateTooltipDataBasedOnSelectedRadio(data)\" [ngClass]=\"{'active': annaFilterService.selectedRadio == data.key}\" *ngIf=\"filterTabObjects.length > 0\">{{ data.label }}</p> \r\n </div>\r\n </div>\r\n <!-- <button class=\"column-clear-all align-center\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">\r\n Clear filter\r\n </button> -->\r\n \r\n <anna-core-sort-lib *ngIf=\"showSortComponent\" [ngClass]=\"{'no-bottom-border': !showFilterComponent}\"\r\n (sortOptionClicked)=\"storeSortTypeInTempVariable($event)\" [sortObjectKey]=\"annaFilterService.selectedRadio\"></anna-core-sort-lib>\r\n \r\n <ng-container *ngIf=\"showFilterComponent\">\r\n <button class=\"column-clear-all\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">Clear filter</button>\r\n <section class=\"min-maxContainer\">\r\n <input\r\n type=\"number\"\r\n class=\"slider-text\"\r\n step=\"{{ sliderFilterTextBoxStep }}\"\r\n [(ngModel)]=\"sliderMinValue\"\r\n (ngModelChange)=\"minValueChanged($event)\"\r\n [ngClass]=\"{'red-border': showSliderMinValueError}\"\r\n placeholder=\"Min\"\r\n />\r\n <span>To</span>\r\n <input\r\n type=\"number\"\r\n class=\"slider-text\"\r\n step=\"{{ sliderFilterTextBoxStep }}\"\r\n [(ngModel)]=\"sliderMaxValue\"\r\n (ngModelChange)=\"maxValueChanged($event)\"\r\n [ngClass]=\"{'red-border': showSliderMaxValueError}\"\r\n placeholder=\"Max\"\r\n />\r\n </section>\r\n <div class=\"sidebar-slider\">\r\n <ngx-slider\r\n class=\"filter-slider\"\r\n [value]=\"sliderMinValue\"\r\n [highValue]=\"sliderMaxValue\"\r\n [options]=\"options\"\r\n ></ngx-slider>\r\n </div>\r\n </ng-container>\r\n \r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"cancelSliderFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableSliderApplyButton }\"\r\n (click)=\"applySliderFilter()\"\r\n [disabled]=\"disableSliderApplyButton\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <div class=\"radio-container\" *ngIf=\"showFilterTooltipTabs\">\r\n <div *ngFor=\"let data of filterTabObjects\">\r\n <p class=\"filter-tab\" (click)=\"populateTooltipDataBasedOnSelectedRadio(data)\" [ngClass]=\"{'active': annaFilterService.selectedRadio == data.key}\" *ngIf=\"filterTabObjects.length > 0\">{{ data.label }}</p>\r\n </div>\r\n </div>\r\n\r\n <anna-core-sort-lib *ngIf=\"showSortComponent\" [ngClass]=\"{'no-bottom-border': !showFilterComponent}\"\r\n (sortOptionClicked)=\"storeSortTypeInTempVariable($event)\" [sortObjectKey]=\"annaFilterService.selectedRadio\"></anna-core-sort-lib>\r\n \r\n <ng-container *ngIf=\"showFilterComponent\">\r\n <div class=\"datepicker-container\">\r\n <button class=\"column-clear-all\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">\r\n Clear filter\r\n </button>\r\n <anna-core-calendar-filter-lib\r\n [minDate]=\"calendarMinEnabledDate\"\r\n [maxDate]=\"calendarMaxEnabledDate\"\r\n [selectedFromDate]=\"selectedMinDate\"\r\n [selectedToDate]=\"selectedMaxDate\"\r\n (selectedDate) = \"calendarDateChanged($event)\"\r\n [label]=\"selectedLabel\"\r\n >\r\n </anna-core-calendar-filter-lib>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"cancelInDateFilter()\">Cancel</button>\r\n <button class=\"button\" (click)=\"applyDateFilter()\" [ngClass]=\"{ disabled: disableCalendarApplyBtn }\"\r\n [disabled]=\"disableCalendarApplyBtn\">Apply</button>\r\n </div>\r\n \r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n \r\n <div class=\"radio-container\" *ngIf=\"showFilterTooltipTabs\">\r\n <div *ngFor=\"let data of filterTabObjects\">\r\n <p class=\"filter-tab\" (click)=\"populateTooltipDataBasedOnSelectedRadio(data)\" [ngClass]=\"{'active': annaFilterService.selectedRadio == data.key}\" *ngIf=\"filterTabObjects.length > 0\">{{ data.label }}</p>\r\n </div>\r\n </div>\r\n\r\n <anna-core-sort-lib *ngIf=\"showSortComponent\" [ngClass]=\"{'no-bottom-border': !showFilterComponent}\"\r\n (sortOptionClicked)=\"storeSortTypeInTempVariable($event)\" [sortObjectKey]=\"annaFilterService.selectedRadio\"></anna-core-sort-lib>\r\n \r\n <ng-container *ngIf=\"showFilterComponent\">\r\n <button class=\"column-clear-all\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">Clear filter</button>\r\n <div\r\n class=\"time-filter-checkboxes\"\r\n *ngIf=\"gtGeneralConfig.component == 'SPOTDETAILS' || gtGeneralConfig.component == 'EXCLUDEINVENTORYPOPUP' || gtGeneralConfig.component == 'RATING'\"\r\n >\r\n <!-- Multi time option checkbox -->\r\n <div class=\"d-flex align-items-center\" style=\"padding: 0.5rem 0 0.5rem 0.5rem\" *ngIf=\"showMultiTimeCheckbox\">\r\n <span\r\n *ngIf=\"multiTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectOrUnselectMultiTimeCheckbox()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!multiTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n (click)=\"selectOrUnselectMultiTimeCheckbox()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n <p style=\"margin-left: 2px\">Include Multi</p>\r\n </div>\r\n <!-- Zero time option checkbox -->\r\n <div class=\"d-flex align-items-center\" style=\"padding: 0.5rem 0 0.5rem 0.5rem\" *ngIf=\"showZeroTimeCheckbox\">\r\n <span\r\n *ngIf=\"zeroTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectOrUnselectZeroTimeCheckbox()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!zeroTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n (click)=\"selectOrUnselectZeroTimeCheckbox()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n <p style=\"margin-left: 2px\">Include Zero</p>\r\n </div>\r\n <!-- Enter time range option checkbox -->\r\n <div class=\"d-flex align-items-center\" style=\"padding: 0.5rem 0 0.5rem 0.5rem\" *ngIf=\"showEnterTimeCheckbox\">\r\n <span\r\n *ngIf=\"enterTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectOrUnselectEnterTimeCheckbox()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!enterTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n (click)=\"selectOrUnselectEnterTimeCheckbox()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n <p style=\"margin-left: 2px\">Enter time range</p>\r\n </div>\r\n </div>\r\n <div class=\"time-label-container\">\r\n <label>From</label>\r\n </div>\r\n <div class=\"time-container\">\r\n <input class=\"form-control numberInput\" [ngClass]=\"{'error-border': startTimeHourErr}\" [(ngModel)]=\"selectedFromTime[0]\" type=\"text\" (ngModelChange)=\"startTimeHourChange($event)\" />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeStartTimeHour(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeStartTimeHour(false)\"></i>\r\n </div>\r\n <span class=\"dot\">:</span>\r\n <input class=\"form-control numberInput\" [ngClass]=\"{'error-border': startTimeMinErr}\" [(ngModel)]=\"selectedFromTime[1]\" type=\"text\" (ngModelChange)=\"startTimeMinChange($event)\"/>\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeStartTimeMinute(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeStartTimeMinute(false)\"></i>\r\n </div>\r\n <div>\r\n <mat-button-toggle-group [(ngModel)]=\"selectedFromTime[2]\" (ngModelChange)=\"disableTimeFilterApplyButton()\">\r\n <mat-button-toggle value=\"AM\">\r\n <span>AM</span>\r\n </mat-button-toggle>\r\n <mat-button-toggle value=\"PM\">\r\n <span>PM</span>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n\r\n <div class=\"time-label-container\">\r\n <label>To</label>\r\n </div>\r\n <div class=\"time-container\">\r\n <input class=\"form-control numberInput\" [(ngModel)]=\"selectedToTime[0]\" [ngClass]=\"{'error-border': endTimeHourErr}\" (ngModelChange)=\"endTimeHourChange($event)\" type=\"text\" />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeEndTimeHour(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeEndTimeHour(false)\"></i>\r\n </div>\r\n <span class=\"dot\">:</span>\r\n <input class=\"form-control numberInput\" [ngClass]=\"{'error-border': endTimeMinErr}\" [(ngModel)]=\"selectedToTime[1]\" (ngModelChange)=\"endTimeMinChange($event)\" type=\"text\" />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeEndTimeMinute(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeEndTimeMinute(false)\"></i>\r\n </div>\r\n <div>\r\n <mat-button-toggle-group [(ngModel)]=\"selectedToTime[2]\" (ngModelChange)=\"disableTimeFilterApplyButton()\">\r\n <mat-button-toggle value=\"AM\">\r\n <span>AM</span>\r\n </mat-button-toggle>\r\n <mat-button-toggle value=\"PM\">\r\n <span>PM</span>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"closeTimeFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableTimeFilterApplyBtn }\"\r\n (click)=\"applyTimeFilters()\"\r\n [disabled]=\"disableTimeFilterApplyBtn\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p style=\"padding: 0.5rem; color: black;white-space: nowrap;\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class =\"first-row\" >Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\" >Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #spotsColumnEquivalizationMessageTooltip>\r\n <p class=\"spot-column-tooltip-message\" >This consists of equivalized spots and un-equivalized Paid Programs & un-equivalized Non-spots.</p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class =\"first-row\" >Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\" >Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span>{{ data.inventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span>{{ data.program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\r\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class =\"first-row\" >The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average rating is {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average impression is {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n import { Directionality } from \"@angular/cdk/bidi\";\r\n import { ListRange } from \"@angular/cdk/collections\";\r\n import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n Inject,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation\r\n } from \"@angular/core\";\r\n import {\r\n animationFrameScheduler,\r\n asapScheduler,\r\n Observable,\r\n Subject,\r\n Observer,\r\n Subscription\r\n } from \"rxjs\";\r\n import { auditTime, startWith, takeUntil } from \"rxjs/operators\";\r\n import {\r\n CdkVirtualScrollViewport,\r\n CdkScrollable,\r\n CdkVirtualScrollRepeater,\r\n VIRTUAL_SCROLL_STRATEGY,\r\n VirtualScrollStrategy,\r\n ScrollDispatcher,\r\n ViewportRuler,\r\n ExtendedScrollToOptions\r\n } from \"@angular/cdk/scrolling\";\r\nimport { AnnaGenericTableService } from \"@annalib/anna-core/src/lib/anna-core-shared-lib\";\r\n \r\n /** Checks if the given ranges are equal. */\r\n function rangesEqual(r1: ListRange, r2: ListRange): boolean {\r\n return r1.start == r2.start && r1.end == r2.end;\r\n }\r\n \r\n /**\r\n * Scheduler to be used for scroll events. Needs to fall back to\r\n * something that doesn't rely on requestAnimationFrame on environments\r\n * that don't support it (e.g. server-side rendering).\r\n */\r\n const SCROLL_SCHEDULER =\r\n typeof requestAnimationFrame !== \"undefined\"\r\n ? animationFrameScheduler\r\n : asapScheduler;\r\n \r\n /**\r\n * A viewport that virtualizes its scrolling with the help of `CdkVirtualForOf`.\r\n * Uses `top: #px` instead of `transform: translateY(#px)` like the cdk virtual scroll viewport does\r\n * which avoids flickering of elements in the transformed container with `position: sticky`.\r\n */\r\n @Component({\r\n selector: \"anna-table-virtual-scroll-viewport\",\r\n templateUrl: \"anna-table-virtual-scroll-viewport.component.html\",\r\n styleUrls: [\"anna-table-virtual-scroll-viewport.component.scss\"],\r\n host: {\r\n class: \"anna-table-virtual-scroll-viewport\",\r\n \"[class.anna-table-virtual-scroll-orientation-horizontal]\":\r\n 'orientation === \"horizontal\"',\r\n \"[class.anna-table-virtual-scroll-orientation-vertical]\":\r\n 'orientation !== \"horizontal\"'\r\n },\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: CdkScrollable,\r\n useExisting: AnnaTableVirtualScrollViewportComponent\r\n },\r\n {\r\n provide: CdkVirtualScrollViewport,\r\n useExisting: AnnaTableVirtualScrollViewportComponent\r\n }\r\n ]\r\n })\r\n export class AnnaTableVirtualScrollViewportComponent extends CdkScrollable\r\n implements OnInit, OnDestroy {\r\n /** Emits when the viewport is detached from a CdkVirtualForOf. */\r\n private _detachedSubject = new Subject<void>();\r\n \r\n /** Emits when the rendered range changes. */\r\n private _renderedRangeSubject = new Subject<ListRange>();\r\n \r\n /** The direction the viewport scrolls. */\r\n @Input()\r\n get orientation() {\r\n return this._orientation;\r\n }\r\n set orientation(orientation: \"horizontal\" | \"vertical\") {\r\n if (this._orientation !== orientation) {\r\n this._orientation = orientation;\r\n this._calculateSpacerSize();\r\n }\r\n }\r\n private _orientation: \"horizontal\" | \"vertical\" = \"vertical\";\r\n \r\n // Note: we don't use the typical EventEmitter here because we need to subscribe to the scroll\r\n // strategy lazily (i.e. only if the user is actually listening to the events). We do this because\r\n // depending on how the strategy calculates the scrolled index, it may come at a cost to\r\n // performance.\r\n /** Emits when the index of the first element visible in the viewport changes. */\r\n @Output() scrolledIndexChange: Observable<number> = new Observable(\r\n (observer: Observer<number>) =>\r\n this._scrollStrategy.scrolledIndexChange.subscribe(index =>\r\n Promise.resolve().then(() =>\r\n this.ngZone.run(() => observer.next(index))\r\n )\r\n )\r\n );\r\n \r\n /** The element that wraps the rendered content. */\r\n @ViewChild(\"contentWrapper\", { static: true }) _contentWrapper: ElementRef<\r\n HTMLElement\r\n >;\r\n \r\n /** A stream that emits whenever the rendered range changes. */\r\n renderedRangeStream: Observable<ListRange> = this._renderedRangeSubject;\r\n \r\n /**\r\n * The total size of all content (in pixels), including content that is not currently rendered.\r\n */\r\n private _totalContentSize = 0;\r\n \r\n /** A string representing the `style.width` property value to be used for the spacer element. */\r\n _totalContentWidth = \"\";\r\n \r\n /** A string representing the `style.height` property value to be used for the spacer element. */\r\n _totalContentHeight = \"\";\r\n \r\n /**\r\n * The CSS transform applied to the rendered subset of items so that they appear within the bounds\r\n * of the visible viewport.\r\n */\r\n private _renderedContentTransform: string;\r\n \r\n /** The currently rendered range of indices. */\r\n private _renderedRange: ListRange = { start: 0, end: 0 };\r\n \r\n /** The length of the data bound to this viewport (in number of items). */\r\n private _dataLength = 0;\r\n \r\n /** The size of the viewport (in pixels). */\r\n private _viewportSize = 0;\r\n \r\n /** the currently attached CdkVirtualScrollRepeater. */\r\n private _forOf: CdkVirtualScrollRepeater<any> | null;\r\n \r\n /** The last rendered content offset that was set. */\r\n private _renderedContentOffset = 0;\r\n \r\n /**\r\n * Whether the last rendered content offset was to the end of the content (and therefore needs to\r\n * be rewritten as an offset to the start of the content).\r\n */\r\n private _renderedContentOffsetNeedsRewrite = false;\r\n \r\n /** Whether there is a pending change detection cycle. */\r\n private _isChangeDetectionPending = false;\r\n \r\n /** A list of functions to run after the next change detection cycle. */\r\n private _runAfterChangeDetection: Function[] = [];\r\n \r\n /** Subscription to changes in the viewport size. */\r\n private _viewportChanges = Subscription.EMPTY;\r\n \r\n constructor(\r\n public override elementRef: ElementRef<HTMLElement>,\r\n private _changeDetectorRef: ChangeDetectorRef,\r\n ngZone: NgZone,\r\n @Optional()\r\n @Inject(VIRTUAL_SCROLL_STRATEGY)\r\n private _scrollStrategy: VirtualScrollStrategy,\r\n @Optional() dir: Directionality,\r\n scrollDispatcher: ScrollDispatcher,\r\n viewportRuler: ViewportRuler,\r\n private annaGtService: AnnaGenericTableService\r\n ) {\r\n super(elementRef, scrollDispatcher, ngZone, dir);\r\n \r\n if (!_scrollStrategy) {\r\n throw Error(\r\n 'Error: cdk-virtual-scroll-viewport requires the \"itemSize\" property to be set.'\r\n );\r\n }\r\n \r\n this._viewportChanges = viewportRuler.change().subscribe(() => {\r\n this.checkViewportSize();\r\n });\r\n }\r\n \r\n override ngOnInit() {\r\n super.ngOnInit();\r\n \r\n // It's still too early to measure the viewport at this point. Deferring with a promise allows\r\n // the Viewport to be rendered with the correct size before we measure. We run this outside the\r\n // zone to avoid causing more change detection cycles. We handle the change detection loop\r\n // ourselves instead.\r\n this.ngZone.runOutsideAngular(() =>\r\n Promise.resolve().then(() => {\r\n this._measureViewportSize();\r\n this._scrollStrategy.attach(this as any);\r\n \r\n this.elementScrolled()\r\n .pipe(\r\n // Start off with a fake scroll event so we properly detect our initial position.\r\n startWith(null),\r\n // Collect multiple events into one until the next animation frame. This way if\r\n // there are multiple scroll events in the same frame we only need to recheck\r\n // our layout once.\r\n auditTime(0, SCROLL_SCHEDULER)\r\n )\r\n .subscribe(() => { this._scrollStrategy.onContentScrolled(); this.annaGtService.virtualScrollSubject.next(true);});\r\n \r\n this._markChangeDetectionNeeded();\r\n })\r\n );\r\n }\r\n \r\n override ngOnDestroy() {\r\n this.detach();\r\n this._scrollStrategy.detach();\r\n \r\n // Complete all subjects\r\n this._renderedRangeSubject.complete();\r\n this._detachedSubject.complete();\r\n this._viewportChanges.unsubscribe();\r\n \r\n super.ngOnDestroy();\r\n }\r\n \r\n /** Attaches a `CdkVirtualScrollRepeater` to this viewport. */\r\n attach(forOf: CdkVirtualScrollRepeater<any>) {\r\n if (this._forOf) {\r\n throw Error(\"CdkVirtualScrollViewport is already attached.\");\r\n }\r\n \r\n // Subscribe to the data stream of the CdkVirtualForOf to keep track of when the data length\r\n // changes. Run outside the zone to avoid triggering change detection, since we're managing the\r\n // change detection loop ourselves.\r\n this.ngZone.runOutsideAngular(() => {\r\n this._forOf = forOf;\r\n this._forOf.dataStream\r\n .pipe(takeUntil(this._detachedSubject))\r\n .subscribe(data => {\r\n const newLength = data.length;\r\n if (newLength !== this._dataLength) {\r\n this._dataLength = newLength;\r\n this._scrollStrategy.onDataLengthChanged();\r\n }\r\n this._doChangeDetection();\r\n });\r\n });\r\n }\r\n \r\n /** Detaches the current `CdkVirtualForOf`. */\r\n detach() {\r\n this._forOf = null;\r\n this._detachedSubject.next();\r\n }\r\n \r\n /** Gets the length of the data bound to this viewport (in number of items). */\r\n getDataLength(): number {\r\n return this._dataLength;\r\n }\r\n \r\n /** Gets the size of the viewport (in pixels). */\r\n getViewportSize(): number {\r\n return this._viewportSize;\r\n }\r\n \r\n // TODO(mmalerba): This is technically out of sync with what's really rendered until a render\r\n // cycle happens. I'm being careful to only call it after the render cycle is complete and before\r\n // setting it to something else, but its error prone and should probably be split into\r\n // `pendingRange` and `renderedRange`, the latter reflecting whats actually in the DOM.\r\n \r\n /** Get the current rendered range of items. */\r\n getRenderedRange(): ListRange {\r\n return this._renderedRange;\r\n }\r\n \r\n /**\r\n * Sets the total size of all content (in pixels), including content that is not currently\r\n * rendered.\r\n */\r\n setTotalContentSize(size: number) {\r\n if (this._totalContentSize !== size) {\r\n this._totalContentSize = size;\r\n this._calculateSpacerSize();\r\n this._markChangeDetectionNeeded();\r\n }\r\n }\r\n \r\n /** Sets the currently rendered range of indices. */\r\n setRenderedRange(range: ListRange) {\r\n if (!rangesEqual(this._renderedRange, range)) {\r\n this._renderedRangeSubject.next((this._renderedRange = range));\r\n this._markChangeDetectionNeeded(() =>\r\n this._scrollStrategy.onContentRendered()\r\n );\r\n }\r\n }\r\n \r\n /**\r\n * Gets the offset from the start of the viewport to the start of the rendered data (in pixels).\r\n */\r\n getOffsetToRenderedContentStart(): number | null {\r\n return this._renderedContentOffsetNeedsRewrite\r\n ? null\r\n : this._renderedContentOffset;\r\n }\r\n \r\n /**\r\n * Sets the offset from the start of the viewport to either the start or end of the rendered data\r\n * (in pixels).\r\n */\r\n setRenderedContentOffset(offset: number) {\r\n let top = `${Number(offset)}px`;\r\n this._renderedContentOffset = offset;\r\n if (this._renderedContentTransform != top) {\r\n // We know this value is safe because we parse `offset` with `Number()` before passing it\r\n // into the string.\r\n this._renderedContentTransform = top;\r\n this._markChangeDetectionNeeded(() => {\r\n if (this._renderedContentOffsetNeedsRewrite) {\r\n this._renderedContentOffset -= this.measureRenderedContentSize();\r\n this._renderedContentOffsetNeedsRewrite = false;\r\n this.setRenderedContentOffset(this._renderedContentOffset);\r\n } else {\r\n this._scrollStrategy.onRenderedOffsetChanged();\r\n }\r\n });\r\n }\r\n }\r\n \r\n /**\r\n * Scrolls to the given offset from the start of the viewport. Please note that this is not always\r\n * the same as setting `scrollTop` or `scrollLeft`. In a horizontal viewport with right-to-left\r\n * direction, this would be the equivalent of setting a fictional `scrollRight` property.\r\n * @param offset The offset to scroll to.\r\n * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.\r\n */\r\n scrollToOffset(offset: number, behavior: ScrollBehavior = \"auto\") {\r\n const options: ExtendedScrollToOptions = { behavior, top: offset };\r\n this.scrollTo(options);\r\n }\r\n \r\n /**\r\n * Scrolls to the offset for the given index.\r\n * @param index The index of the element to scroll to.\r\n * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.\r\n */\r\n scrollToIndex(index: number, behavior: ScrollBehavior = \"auto\") {\r\n this._scrollStrategy.scrollToIndex(index, behavior);\r\n }\r\n \r\n /**\r\n * Gets the current scroll offset from the start of the viewport (in pixels).\r\n * @param from The edge to measure the offset from. Defaults to 'top' in vertical mode and 'start'\r\n * in horizontal mode.\r\n */\r\n // CHANGES@ANNALIB added override to functions\r\n override measureScrollOffset(\r\n from?: \"top\" | \"left\" | \"right\" | \"bottom\" | \"start\" | \"end\"\r\n ): number {\r\n return from\r\n ? super.measureScrollOffset(from)\r\n : super.measureScrollOffset(\"top\");\r\n }\r\n \r\n /** Measure the combined size of all of the rendered items. */\r\n measureRenderedContentSize(): number {\r\n const contentEl = this._contentWrapper.nativeElement;\r\n return contentEl.offsetHeight;\r\n }\r\n \r\n /**\r\n * Measure the total combined size of the given range. Throws if the range includes items that are\r\n * not rendered.\r\n */\r\n measureRangeSize(range: ListRange): number {\r\n if (!this._forOf) {\r\n return 0;\r\n }\r\n return this._forOf.measureRangeSize(range, this.orientation);\r\n }\r\n \r\n /** Update the viewport dimensions and re-render. */\r\n checkViewportSize() {\r\n // TODO: Cleanup later when add logic for handling content resize\r\n this._measureViewportSize();\r\n this._scrollStrategy.onDataLengthChanged();\r\n }\r\n \r\n /** Measure the viewport size. */\r\n private _measureViewportSize() {\r\n const viewportEl = this.elementRef.nativeElement;\r\n this._viewportSize = viewportEl.clientHeight;\r\n }\r\n \r\n /** Queue up change detection to run. */\r\n private _markChangeDetectionNeeded(runAfter?: Function) {\r\n if (runAfter) {\r\n this._runAfterChangeDetection.push(runAfter);\r\n }\r\n \r\n // Use a Promise to batch together calls to `_doChangeDetection`. This way if we set a bunch of\r\n // properties sequentially we only have to run `_doChangeDetection` once at the end.\r\n if (!this._isChangeDetectionPending) {\r\n this._isChangeDetectionPending = true;\r\n this.ngZone.runOutsideAngular(() =>\r\n Promise.resolve().then(() => {\r\n this._doChangeDetection();\r\n })\r\n );\r\n }\r\n }\r\n \r\n /** Run change detection. */\r\n private _doChangeDetection() {\r\n this._isChangeDetectionPending = false;\r\n \r\n // Apply the content transform. The transform can't be set via an Angular binding because\r\n // bypassSecurityTrustStyle is banned in Google. However the value is safe, it's composed of\r\n // string literals, a variable that can only be 'X' or 'Y', and user input that is run through\r\n // the `Number` function first to coerce it to a numeric value.\r\n this._contentWrapper.nativeElement.style.top = this._renderedContentTransform;\r\n // Apply changes to Angular bindings. Note: We must call `markForCheck` to run change detection\r\n // from the root, since the repeated items are content projected in. Calling `detectChanges`\r\n // instead does not properly check the projected content.\r\n this.ngZone.run(() => this._changeDetectorRef.markForCheck());\r\n \r\n const runAfterChangeDetection = this._runAfterChangeDetection;\r\n this._runAfterChangeDetection = [];\r\n for (const fn of runAfterChangeDetection) {\r\n fn();\r\n }\r\n }\r\n \r\n /** Calculates the `style.width` and `style.height` for the spacer element. */\r\n private _calculateSpacerSize() {\r\n this._totalContentHeight = `${this._totalContentSize}px`;\r\n this._totalContentWidth = \"\";\r\n }\r\n }\r\n ","<!--\r\n Wrap the rendered content in an element that will be used to offset it based on the scroll\r\n position.\r\n-->\r\n<div #contentWrapper class=\"anna-table-virtual-scroll-content-wrapper\">\r\n\t<ng-content></ng-content>\r\n</div>\r\n<!--\r\n Spacer used to force the scrolling container to the correct size for the *total* number of items\r\n so that the scrollbar captures the size of the entire data set.\r\n-->\r\n<div class=\"app-table-virtual-scroll-spacer\" [style.width]=\"_totalContentWidth\" [style.height]=\"_totalContentHeight\">\r\n</div>","import { coerceNumberProperty, NumberInput } from \"@angular/cdk/coercion\";\r\nimport {\r\n CdkVirtualScrollViewport,\r\n VirtualScrollStrategy,\r\n VIRTUAL_SCROLL_STRATEGY\r\n} from \"@angular/cdk/scrolling\";\r\nimport { AfterContentInit, ContentChildren, Directive, forwardRef, Input, QueryList, SimpleChanges } from \"@angular/core\";\r\nimport { MatHeaderRowDef } from \"@angular/material/table\";\r\nimport { Subject } from \"rxjs\";\r\nimport { distinctUntilChanged } from \"rxjs/operators\";\r\nimport { AnnaFilterService } from \"@annalib/anna-core/src/lib/anna-core-shared-lib\";\r\n\r\n\r\n/**\r\n * A custom scroll strategy that accepts a static row height, static header height,\r\n * and a buffer size. The strategy \r\n */\r\nexport class AnnaFixedRowSizeTableVirtualScrollStrategy\r\n implements VirtualScrollStrategy {\r\n \r\n viewport: CdkVirtualScrollViewport | null;\r\n\r\n private buffer: number;\r\n\r\n private headerHeight: number;\r\n\r\n private rowHeight: number;\r\n\r\n constructor(rowHeight: number, buffer: number, headerHeight: number) {\r\n this.updateRowHeightAndBuffer(rowHeight, buffer, headerHeight);\r\n }\r\n\r\n private _scrolledIndexChange = new Subject<number>();\r\n\r\n scrolledIndexChange = this._scrolledIndexChange.pipe(distinctUntilChanged());\r\n\r\n /**\r\n * Attaches this scroll strategy to a viewport.\r\n * @param viewport The viewport to attach this strategy to.\r\n */\r\n attach(viewport: CdkVirtualScrollViewport): void {\r\n this.viewport = viewport;\r\n this.updateTotalContentSize();\r\n this.updateRenderedRange();\r\n }\r\n\r\n /**\r\n * Detaches this scroll strategy from the currently attached viewport.\r\n */\r\n detach(): void {\r\n this._scrolledIndexChange.complete();\r\n this.viewport = null;\r\n }\r\n\r\n onContentScrolled(): void {\r\n this.updateRenderedRange();\r\n }\r\n\r\n onDataLengthChanged(): void {\r\n this.updateTotalContentSize();\r\n this.updateRenderedRange();\r\n }\r\n\r\n onContentRendered(): void {\r\n // This method is useful for virtual scroll strategies that measure the rendered\r\n // content to determine its height. This scroll strategy assumes that rows have\r\n // a static height, so there's no need to implement this method.\r\n }\r\n\r\n onRenderedOffsetChanged(): void {\r\n // Similar to onContentRendered, this method is useful for virtual scroll strategies\r\n // that need to track the offset as it changes. This scroll strategy is always able\r\n // to calculate the correct offset from other values, so there's no need to implement\r\n // this method.\r\n }\r\n\r\n scrollToIndex(index: number, behavior: ScrollBehavior): void {\r\n this.viewport?.scrollToOffset(index * this.rowHeight, behavior);\r\n }\r\n\r\n /**\r\n * Update the item size and buffer size.\r\n * @param rowHeight The height of a row in the virtually scrolling table.\r\n * @param buffer The number of rows to buffer outside the viewport.\r\n * @param headerHeight The total height of the table header, including all header rows.\r\n */\r\n updateRowHeightAndBuffer(rowHeight: number, buffer: number, headerHeight: number) {\r\n this.rowHeight = rowHeight;\r\n this.buffer = buffer;\r\n this.headerHeight = headerHeight;\r\n this.updateTotalContentSize();\r\n this.updateRenderedRange();\r\n }\r\n\r\n protected updateRenderedRange() {\r\n if (!this.viewport) {\r\n return;\r\n }\r\n\r\n const viewportSize = this.viewport.getViewportSize();\r\n const dataLength = this.viewport.getDataLength();\r\n const scrollOffset = this.viewport.measureScrollOffset();\r\n\r\n // the index of the first item that would be at least partially visible in the viewport\r\n let firstVisibleIndex = Math.floor((scrollOffset + this.headerHeight) / this.rowHeight);\r\n \r\n // if the buffer size is 10 but the first visible item is at, say, index 7\r\n // then the buffered items must be 7, because we don't have 10 items available to buffer.\r\n const bufferedItems = Math.min(AnnaFilterService.bufferSize, firstVisibleIndex);\r\n\r\n const itemsInViewport = Math.ceil(viewportSize / this.rowHeight);\r\n const itemsToRender = itemsInViewport + this.buffer;\r\n\r\n // Clamp the new range between 0 and dataLength\r\n const newStart = Math.max(0, firstVisibleIndex - bufferedItems);\r\n const newEnd = Math.min(dataLength, firstVisibleIndex + itemsToRender);\r\n\r\n const newRange = {\r\n start: newStart,\r\n end: newEnd\r\n };\r\n\r\n const newOffset = this.rowHeight * (firstVisibleIndex - bufferedItems);\r\n this.viewport.setRenderedContentOffset(newOffset);\r\n this.viewport.setRenderedRange(newRange);\r\n this._scrolledIndexChange.next(Math.floor(firstVisibleIndex));\r\n }\r\n\r\n protected updateTotalContentSize() {\r\n this.viewport?.setTotalContentSize(this.viewport.getDataLength() * this.rowHeight);\r\n }\r\n}\r\n\r\n/**\r\n * Provider factory for `FixedSizeVirtualScrollStrategy` that simply extracts the already created\r\n * `FixedSizeVirtualScrollStrategy` from the given directive.\r\n * @param fixedSizeDir The instance of `CdkFixedSizeVirtualScroll` to extract the\r\n * `FixedSizeVirtualScrollStrategy` from.\r\n */\r\nexport function fixedSizeVirtualScrollStrategyFactory(\r\n fixedSizeDir: AnnaFixedRowSizeTableVirtualScrollStrategyDirective\r\n) {\r\n return fixedSizeDir.scrollStrategy;\r\n}\r\n\r\n@Directive({\r\n selector: \"cdk-virtual-scroll-viewport[rowHeight], anna-table-virtual-scroll-viewport[rowHeight]\",\r\n providers: [\r\n {\r\n provide: VIRTUAL_SCROLL_STRATEGY,\r\n useFactory: fixedSizeVirtualScrollStrategyFactory,\r\n deps: [forwardRef(() => AnnaFixedRowSizeTableVirtualScrollStrategyDirective)]\r\n }\r\n ]\r\n})\r\nexport class AnnaFixedRowSizeTableVirtualScrollStrategyDirective implements AfterContentInit {\r\n /** The height of rows in the table (in pixels). Defaults to 30. */\r\n @Input()\r\n set rowHeight(value: number) { this._rowHeight = coerceNumberProperty(value); }\r\n get rowHeight(): number { return this._rowHeight; }\r\n private _rowHeight = 30;\r\n\r\n /**\r\n * The height of header rows in the table (in pixels). Defaults to 30.\r\n */\r\n @Input()\r\n set headerRowHeight(value: number) { this._headerRowHeight = coerceNumberProperty(value); }\r\n get headerRowHeight(): number { return this._headerRowHeight; }\r\n private _headerRowHeight: number = 30;\r\n\r\n /**\r\n * The number of buffered rows rendered beyond the viewport.\r\n * If the number of buffered rows dips below this number, more rows will be rendered. Defaults to 20.\r\n */\r\n @Input()\r\n set buffer(value: number) { \r\n this._buffer = coerceNumberProperty(value);}\r\n get buffer(): number { return this._buffer; }\r\n private _buffer = 20;\r\n\r\n @Input()\r\n set headerRows(value: number | null | undefined) { this._headerRows = coerceNumberProperty(value, undefined); }\r\n get headerRows(): number | null | undefined { return this._headerRows; }\r\n private _headerRows: number | null | undefined = null;\r\n\r\n /**\r\n * Using ContentChildren here fails to pick up row defs that are added programmatically,\r\n * but we don't really have a way of handling that without accessing private methods of \r\n * the CdkTable. Adding header row defs programmatically is uncommon, so ContentChildren\r\n * is usually sufficient. The explicit `headerRows` input above allows the number of rows\r\n * to be set by the developer to override the QueryList-driven behavior.\r\n */\r\n @ContentChildren(MatHeaderRowDef) headerRowsQuery: QueryList<MatHeaderRowDef>;\r\n\r\n private headerRowCount: number = 1;\r\n\r\n /** The scroll strategy used by this directive. */\r\n scrollStrategy = new AnnaFixedRowSizeTableVirtualScrollStrategy(\r\n this.rowHeight,\r\n this.buffer,\r\n this.headerRowHeight * this.headerRowCount\r\n );\r\n\r\n ngOnChanges(change: SimpleChanges) {\r\n if (this.headerRows != undefined || this.headerRowsQuery) {\r\n this.handleChange();\r\n }\r\n if(change['buffer']?.previousValue != change['buffer']?.currentValue){\r\n AnnaFilterService.bufferSize = this.buffer;\r\n this.scrollStrategy = new AnnaFixedRowSizeTableVirtualScrollStrategy(\r\n this.rowHeight,\r\n this.buffer,\r\n this.headerRowHeight * this.headerRowCount\r\n ); \r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.headerRowsQuery.changes.subscribe(() => {\r\n this.handleChange();\r\n });\r\n }\r\n\r\n private handleChange(): void {\r\n this.scrollStrategy.updateRowHeightAndBuffer(\r\n this.rowHeight,\r\n this.buffer,\r\n // Use the explicit headerRows input value if set.\r\n // Otherwise, fall back to the QueryList length.\r\n this.headerRowHeight * (this._headerRows ?? this.headerRowsQuery.length)\r\n );\r\n }\r\n\r\n static ngAcceptInputType_rowHeight: NumberInput;\r\n static ngAcceptInputType_buffer: NumberInput;\r\n static ngAcceptInputType_headerRowHeight: NumberInput;\r\n}\r\n","import { ArrayDataSource, CollectionViewer, isDataSource, ListRange } from \"@angular/cdk/collections\";\r\nimport { CdkVirtualScrollRepeater, CdkVirtualScrollViewport } from \"@angular/cdk/scrolling\";\r\nimport { CdkHeaderRowDef, CdkTable, DataSource, STICKY_POSITIONING_LISTENER, _CoalescedStyleScheduler, _COALESCED_STYLE_SCHEDULER } from \"@angular/cdk/table\";\r\nimport { ContentChildren, Directive, ElementRef, Inject, Input, NgIterable, NgZone, QueryList } from \"@angular/core\";\r\nimport { isObservable, Observable, of, Subject } from \"rxjs\";\r\nimport { map, pairwise, shareReplay, startWith, switchMap, takeUntil } from \"rxjs/operators\";\r\nimport { AnnaTableVirtualScrollViewportComponent } from '../../components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component';\r\n\r\n/**\r\n * Directive that wraps a given data source in a \"virtual\" data source that emits\r\n * the slice of the original data source that matches the range that should be rendered\r\n * in the containing virtual scroll viewport.\r\n */\r\n@Directive({\r\n selector: '[mat-table][appVirtualDataSource], mat-table[appVirtualDataSource]',\r\n providers: [{ provide: STICKY_POSITIONING_LISTENER, useExisting: AnnaVirtualTableDirective }]\r\n})\r\nexport class AnnaVirtualTableDirective<T> implements CdkVirtualScrollRepeater<T>, CollectionViewer {\r\n @Input('appVirtualDataSource')\r\n set dataSource(value: DataSource<T> | Observable<T[]> | NgIterable<T> | null | undefined) {\r\n this._dataSource = value;\r\n if (isDataSource(value)) {\r\n this.dataSourceChanges.next(value);\r\n } else {\r\n this.dataSourceChanges.next(new ArrayDataSource<T>(isObservable(value) ? value : Array.from(value || [])));\r\n }\r\n }\r\n get dataSource(): DataSource<T> | Observable<T[]> | NgIterable<T> | null | undefined {\r\n return this._dataSource;\r\n }\r\n private _dataSource: DataSource<T> | Observable<T[]> | NgIterable<T> | null | undefined;\r\n\r\n @ContentChildren(CdkHeaderRowDef) headerRowDefs: QueryList<CdkHeaderRowDef>;\r\n\r\n private virtualizedDataStream = new Subject<T[] | ReadonlyArray<T>>();\r\n\r\n private dataSourceChanges = new Subject<DataSource<T>>();\r\n\r\n /** The raw, unvirtualized data stream. Emits whenever the data in the current DataSource changes. */\r\n dataStream: Observable<T[] | ReadonlyArray<T>> = this.dataSourceChanges\r\n .pipe(\r\n // Start off with null data source.\r\n startWith(null),\r\n // Bundle up the previous and current data sources so we can work with both.\r\n pairwise(),\r\n // Use `changeDataSource` to disconnect from the previous data source and connect to the\r\n // new one, passing back a stream of data changes which we run through `switchMap` to give\r\n // us a data stream that emits the latest data from whatever the current data source is.\r\n switchMap(([prev, cur]) => this.changeDataSource(prev, cur)),\r\n // Replay the last emitted data when someone subscribes.\r\n shareReplay(1));\r\n\r\n viewChange = new Subject<ListRange>();\r\n\r\n private data: T[] | readonly T[];\r\n\r\n private destroyed$ = new Subject<void>();\r\n\r\n private renderedItems: T[] | ReadonlyArray<T>;\r\n\r\n private renderedRange: ListRange = { start: 0, end: 0 };\r\n\r\n private isNativeHtmlTable: boolean = false;\r\n\r\n constructor(\r\n elementRef: ElementRef<HTMLElement>,\r\n private viewport: CdkVirtualScrollViewport,\r\n private table: CdkTable<T>,\r\n ngZone: NgZone,\r\n @Inject(_COALESCED_STYLE_SCHEDULER) private _coalescedStyleScheduler: _CoalescedStyleScheduler,\r\n ) {\r\n table.dataSource = this.virtualizedDataStream;\r\n this.isNativeHtmlTable = elementRef.nativeElement.tagName === 'TABLE';\r\n this.dataStream.subscribe(data => {\r\n this.data = data;\r\n this.onRenderedDataChange();\r\n });\r\n viewport.renderedRangeStream.pipe(takeUntil(this.destroyed$)).subscribe((range: ListRange) => {\r\n this.renderedRange = range;\r\n ngZone.run(() => this.viewChange.next(range));\r\n this.onRenderedDataChange();\r\n });\r\n viewport.attach(this);\r\n }\r\n\r\n ngOnInit(): void {\r\n // This is just a proof of concept, but the AnnaTableVirtualScrollViewportComponent uses `position: absolute` and `top: #px` instead of `transform: translateY(#px)` to position the viewport.\r\n // This removes the need to account for the translation in the `top` of the sticky header rows.\r\n if (this.viewport instanceof AnnaTableVirtualScrollViewportComponent) {\r\n return;\r\n }\r\n\r\n this.viewport.scrolledIndexChange\r\n .pipe(\r\n map(() => this.viewport.getOffsetToRenderedContentStart()),\r\n takeUntil(this.destroyed$)\r\n )\r\n .subscribe((offset) => {\r\n // We need to set the `style.top` property of the sticky header rows\r\n // to the negative value of the virtual scroll viewport's offset, so\r\n // make the offset negative.\r\n offset = -offset;\r\n\r\n const stickyStates: boolean[] = this.headerRowDefs.map(rowDef => rowDef.sticky);\r\n\r\n // This logic is exactly the same as what's in the StickyStyler (literally copy + paste).\r\n // The only difference is that the `stickyOffset` variable starts at the virtual scroll\r\n // viewport container's offset instead of starting at zero.\r\n const rows = this.table._getRenderedRows(this.table._headerRowOutlet);\r\n const stickyOffsets: number[] = [];\r\n const stickyCellHeights: (number|undefined)[] = [];\r\n const elementsToStick: HTMLElement[][] = [];\r\n for (let rowIndex = 0, stickyOffset = offset; rowIndex < rows.length; rowIndex++) {\r\n stickyOffsets[rowIndex] = stickyOffset;\r\n\r\n if (!stickyStates[rowIndex]) {\r\n continue;\r\n }\r\n\r\n const row = rows[rowIndex];\r\n elementsToStick[rowIndex] = this.isNativeHtmlTable ? Array.from(row.children) as HTMLElement[] : [row];\r\n\r\n const height = row.getBoundingClientRect().height;\r\n stickyOffset += height;\r\n stickyCellHeights[rowIndex] = height;\r\n }\r\n\r\n // Using the CoalescedStyleScheduler here is optional. It'll work without it,\r\n // and CoalescedStyleScheduler is not public (yet?), so feel free to remove it.\r\n this._coalescedStyleScheduler.schedule(() => {\r\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\r\n if (!stickyStates[rowIndex]) {\r\n continue;\r\n }\r\n\r\n for (const element of elementsToStick[rowIndex]) {\r\n element.style.top = `${stickyOffsets[rowIndex]}px`;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed$.next();\r\n this.dataSourceChanges.complete();\r\n this.virtualizedDataStream.complete();\r\n }\r\n\r\n /** React to scroll state changes in the viewport. */\r\n private onRenderedDataChange() {\r\n if (!this.renderedRange) {\r\n return;\r\n }\r\n this.renderedItems = this.data.slice(this.renderedRange.start, this.renderedRange.end + 1);\r\n // delegate rendering to the table by emitting from the virtualizedDataStream\r\n this.virtualizedDataStream.next(this.renderedItems);\r\n }\r\n\r\n /** Swap out one data source for another. */\r\n private changeDataSource(oldDataSource: DataSource<T> | null, newDs: DataSource<T> | null):\r\n Observable<T[] | ReadonlyArray<T>> {\r\n\r\n oldDataSource?.disconnect(this);\r\n return newDs ? newDs.connect(this) : of();\r\n }\r\n\r\n /**\r\n * This method is only used by the experimental AutoSizeVirtualScrollStrategy.\r\n * We're not using that strategy, but I've implemented it just to show how it oculd be done.\r\n * I'm not actually sure if this works.\r\n */\r\n measureRangeSize(range: ListRange, orientation: 'horizontal' | 'vertical'): number {\r\n if (orientation === 'horizontal' || range.end < range.start) {\r\n // virtual scrolling columns are not supported by this directive\r\n return 0;\r\n }\r\n\r\n const renderedBodyRows = this.table._getRenderedRows(this.table._rowOutlet);\r\n\r\n const firstRow: HTMLElement | undefined = renderedBodyRows[range.start];\r\n const lastRow: HTMLElement | undefined = renderedBodyRows[range.end];\r\n\r\n if (!firstRow || !lastRow) {\r\n return 0;\r\n }\r\n\r\n // We need to include all header and footer rows in the sum, since they're always rendered\r\n const renderedHeaderRows = this.table._getRenderedRows(this.table._headerRowOutlet);\r\n const renderedFooterRows = this.table._getRenderedRows(this.table._footerRowOutlet);\r\n\r\n // TODO (performance): Can we just measure the offset of the first and last items and do some math to avoid having to measure each row individually?\r\n const headerHeight = renderedHeaderRows.reduce((sum: number, row: HTMLElement) => {\r\n return sum += row.getBoundingClientRect().height;\r\n }, 0);\r\n const footerHeight = renderedFooterRows.reduce((sum: number, row: HTMLElement) => {\r\n return sum += row.getBoundingClientRect().height;\r\n }, 0);\r\n\r\n const bodyHeight = lastRow.getBoundingClientRect().bottom - firstRow.getBoundingClientRect().top;\r\n\r\n return headerHeight + footerHeight + bodyHeight;\r\n }\r\n}\r\n","// Angular import statements\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatRadioModule } from \"@angular/material/radio\";\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatTableModule } from '@angular/material/table';\r\n\r\n// Third party import statements\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { NgxSliderModule } from '@angular-slider/ngx-slider';\r\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\r\n\r\n\r\n// User defined import statements\r\nimport { AnnaNonEditableGenericTableComponent } from './components/anna-non-editable-generic-table/anna-non-editable-generic-table.component';\r\nimport { AnnaSortComponent } from './components/anna-sort/anna-sort.component';\r\nimport { AnnaTableVirtualScrollViewportComponent } from './components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component';\r\nimport { AnnaFixedRowSizeTableVirtualScrollStrategyDirective } from './directives/anna-fixed-row-size-table-virtual-scroll-strategy';\r\nimport { AnnaVirtualTableDirective } from './directives/anna-virtual-table';\r\n\r\n//sub-entries of anna lib import statement\r\nimport { AnnaDropdownLibModule } from '@annalib/anna-core/src/lib/anna-dropdown-lib';\r\nimport { AnnaCoreSharedLibModule } from '@annalib/anna-core/src/lib/anna-core-shared-lib';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n AnnaNonEditableGenericTableComponent,\r\n AnnaSortComponent,\r\n AnnaTableVirtualScrollViewportComponent,\r\n AnnaFixedRowSizeTableVirtualScrollStrategyDirective,\r\n AnnaVirtualTableDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n NgbModule,\r\n AnnaDropdownLibModule,\r\n MatButtonToggleModule,\r\n FormsModule,\r\n NgxSliderModule,\r\n NgxSkeletonLoaderModule,\r\n MatTableModule,\r\n MatRadioModule,\r\n AnnaCoreSharedLibModule\r\n ],\r\n exports: [\r\n AnnaNonEditableGenericTableComponent,\r\n AnnaSortComponent,\r\n AnnaTableVirtualScrollViewportComponent,\r\n AnnaFixedRowSizeTableVirtualScrollStrategyDirective,\r\n AnnaVirtualTableDirective\r\n ]\r\n\r\n})\r\nexport class AnnaGenericTableLibModule { }\r\n","//Modules\r\nexport * from \"./anna-generic-table-lib.module\";\r\n\r\n//Components\r\nexport * from \"./components/anna-non-editable-generic-table/anna-non-editable-generic-table.component\";\r\nexport * from \"./components/anna-sort/anna-sort.component\";\r\nexport * from \"./components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component\";\r\n\r\n//Directives\r\nexport * from \"./directives/anna-fixed-row-size-table-virtual-scroll-strategy\";\r\nexport * from \"./directives/anna-virtual-table\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i5.AnnaSortComponent","i1","i3","map"],"mappings":"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"}
1
+ {"version":3,"file":"annalib-anna-core-src-lib-anna-generic-table-lib.mjs","sources":["../../../projects/anna-core/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.html","../../../projects/anna-core/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.html","../../../projects/anna-core/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.html","../../../projects/anna-core/src/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/anna-generic-table-lib.module.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/public-api.ts","../../../projects/anna-core/src/lib/anna-generic-table-lib/annalib-anna-core-src-lib-anna-generic-table-lib.ts"],"sourcesContent":["// Angular import statements\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\n\r\n\r\n// Third party import statements\r\n\r\n// User defined import statements\r\nimport { AnnaSortService, SortOption, SortType } from '@annalib/anna-core/src/lib/anna-core-shared-lib';\r\n\r\n//sub-entries of anna lib import statement\r\n\r\n//Add onChange push change detection\r\n@Component({\r\n selector: 'anna-core-sort-lib',\r\n templateUrl: './anna-sort.component.html',\r\n styleUrls: ['./anna-sort.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AnnaSortComponent implements OnChanges{\r\n \r\n @Input() sortObjectKey: string;\r\n @Output() sortOptionClicked = new EventEmitter<SortType>();\r\n\r\n sortOptions: SortOption[] = [\r\n {\r\n sortType: 'ASC',\r\n isOptionActive: false,\r\n text: 'A to Z',\r\n },\r\n {\r\n sortType: 'DESC',\r\n isOptionActive: false,\r\n text: 'Z to A',\r\n },\r\n {\r\n sortType: 'DEFAULT',\r\n isOptionActive: false,\r\n text: 'DEFAULT',\r\n },\r\n ];\r\n\r\n constructor(private annaSortService: AnnaSortService) {}\r\n \r\n ngOnChanges(changes: SimpleChanges): void {\r\n console.log(\"sort component ngOnChanges\");\r\n console.log(this.sortObjectKey);\r\n if(changes[\"sortObjectKey\"] && changes[\"sortObjectKey\"].currentValue){\r\n console.log(\"inside sort active func\");\r\n let sortType = this.annaSortService.columnSortState.get(\r\n this.sortObjectKey\r\n );\r\n this.setSortType(sortType);\r\n }\r\n\r\n }\r\n\r\n sortOptionChanged(index: number, sortType: SortType) {\r\n this.sortOptions.forEach((item) => (item.isOptionActive = false));\r\n this.sortOptions[index].isOptionActive = true;\r\n this.sortOptionClicked.emit(sortType);\r\n }\r\n\r\n ngOnInit(): void {\r\n console.log(\"sort component ngOnInit\");\r\n console.log(this.annaSortService.columnSortState);\r\n this.annaSortService.updateSortTypeSubject.subscribe((item: string) => {\r\n this.setSortType(item);\r\n });\r\n }\r\n\r\n setSortType(option: string){\r\n this.sortOptions.forEach(item => item.isOptionActive = false);\r\n let index = this.sortOptions.findIndex(item => item.sortType == option);\r\n this.sortOptions[index].isOptionActive = true;\r\n }\r\n}\r\n","<p class=\"sort-container\">\r\n <button\r\n class=\"sort-btn\"\r\n *ngFor=\"let option of sortOptions; let i = index\"\r\n (click)=\"sortOptionChanged(i, option.sortType)\"\r\n [ngClass]=\"{ active: option.isOptionActive }\"\r\n >\r\n {{option.text}}\r\n </button>\r\n</p>","\r\n// Angular import statements\r\nimport { Component, OnInit, Input, ViewChildren, QueryList, Output, EventEmitter, SimpleChanges, OnChanges, ChangeDetectorRef, ElementRef, AfterViewChecked, ChangeDetectionStrategy } from '@angular/core';\r\n\r\n// Third party import statements\r\nimport moment from \"moment\";\r\nimport { NgbDate } from '@ng-bootstrap/ng-bootstrap';\r\nimport { Options } from '@angular-slider/ngx-slider';\r\nimport { cloneDeep, isEqual, map, uniq, sortBy } from \"lodash-es\";\r\n\r\n\r\n//sub-entries of anna lib import statement\r\nimport { SellerGroupHierarchy,IWeekCalendar,TooltipModel,AnnaSortService,AnnaDateTimeFormatService, NgbDateType, AnnaFilterService, IGtGeneralConfig, IGtTableHeader, ITotalRowInfo, AnnaGenericTableService, SortType, IHeaderInfo, radioButtonModel, GtColumnIconEmittedData } from \"@annalib/anna-core/src/lib/anna-core-shared-lib\";\r\n\r\n\r\n@Component({\r\n selector: 'anna-core-non-editable-generic-table-lib',\r\n templateUrl: './anna-non-editable-generic-table.component.html',\r\n styleUrls: ['./anna-non-editable-generic-table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AnnaNonEditableGenericTableComponent implements OnInit, OnChanges, AfterViewChecked {\r\n\r\n @Input() showSkeletonLoading: boolean;\r\n @Input() tableHeaders: IGtTableHeader[];\r\n @Input() tableData: any[];\r\n @Input() clonedTableData: any[];\r\n @Input() numberOfSkeletonRows: number[];\r\n @Input() numberOfSkeletonColumns: number[][];\r\n @Input() gtGeneralConfig: IGtGeneralConfig;\r\n @Input() totalRowInfo?: ITotalRowInfo[];\r\n @Input() gtDimension: { rowHeight: number, tableHeight: string, headerHeight: number };\r\n @Input() tableClass: string;\r\n @Input() maximumRowsWhichCanBeRenderedWithoutScroll: number = 5;\r\n @Input() includeBorderInTableHeight: boolean = true; \r\n\r\n @Output() toggleCheckbox = new EventEmitter();\r\n @Output() toggleRowCheckbox = new EventEmitter();\r\n @Output() toggleHeaderCheckbox = new EventEmitter();\r\n @Output() undoIconClicked = new EventEmitter();\r\n @Output() filterAppliedToTable = new EventEmitter();\r\n @Output() sortingAppliedToTable = new EventEmitter();\r\n @Output() rowClicked = new EventEmitter();\r\n @Output() radioButtonSelected = new EventEmitter();\r\n @Output() columnFilterOpened = new EventEmitter();\r\n @Output() columnFilterClosed = new EventEmitter();\r\n @Output() gtIconClicked = new EventEmitter();\r\n @Output() gtSVGIconClicked = new EventEmitter();\r\n @Output() gtTextActionClicked = new EventEmitter();\r\n @Output() gtViewDetailClicked = new EventEmitter();\r\n\r\n\r\n tableDataWrapper: any[];\r\n rowChecked: boolean;\r\n isAllRowsChecked: boolean;\r\n noDataWidth: string = \"55%\";\r\n markedForCreditStatus: string;\r\n markedForMGStatus: string;\r\n\r\n //Sort and Filter\r\n toolTipdata: any;\r\n tempTooltipData: any;\r\n tooltipRadioTextMap: Map<any, any>;\r\n filterTabObjects: any[];\r\n tooltip: any;\r\n clonedTooltipData: any;\r\n clonedTooltipSelectedMapData: any;\r\n searchBar: string;\r\n disableClearAllBtn: boolean = true;\r\n disableColumnClearAllBtn: boolean = true;\r\n allSelected = 0;\r\n showAll: boolean;\r\n disableCheckboxApply: boolean;\r\n disableSliderApplyButton: boolean;\r\n disableTimeApplyButton: boolean;\r\n\r\n // Slider Filter\r\n sliderMinValue: number;\r\n sliderMaxValue: number;\r\n options: Options = {\r\n floor: 0,\r\n ceil: 0,\r\n step: 0.1\r\n };\r\n sliderValue: { min: number, max: number };\r\n sliderFilterTextBoxStep: string;\r\n sliderEnteredMinValue: number;\r\n sliderEnteredMaxValue: number;\r\n\r\n // Calendar Filter\r\n calendarMinEnabledDate: NgbDateType;\r\n calendarMaxEnabledDate: NgbDateType;\r\n selectedMinDate: NgbDateType;\r\n selectedMaxDate: NgbDateType;\r\n\r\n //Week Filter\r\n multiWeekPickerConfig: IWeekCalendar;\r\n\r\n //Time Filter\r\n selectedFromTime: any[];\r\n selectedToTime: any[];\r\n clonedSelectedFromTime: any;\r\n clonedSelectedToTime: any;\r\n disableTimeFilterApplyBtn: boolean;\r\n tableColumns: string[] = [];\r\n totalRowColumns: string[] = null;\r\n showMultiTimeCheckbox: boolean;\r\n showZeroTimeCheckbox: boolean;\r\n showEnterTimeCheckbox: boolean;\r\n multiTimeCheckboxChecked: boolean;\r\n zeroTimeCheckboxChecked: boolean;\r\n enterTimeCheckboxChecked: boolean;\r\n bindValueFuncCalled: boolean;\r\n\r\n hierarchyTooltip: { open: () => void; close: () => void; };\r\n sellerGroupHierarchy: SellerGroupHierarchy[];\r\n showFilterTooltipTabs: boolean; //Change the Name\r\n\r\n isScrolledLeft: boolean = false;\r\n rowBorderWidth: number = 2;\r\n \r\n showSortComponent: boolean = false;\r\n showFilterComponent: boolean = false;\r\n tempSortOrder: SortType = null;\r\n \r\n tooltipOptions: TooltipModel[];\r\n clonedTooltipOptions: TooltipModel[];\r\n disableSelectAll: boolean;\r\n disableClearAll: boolean;\r\n searchItem: string;\r\n\r\n disableCalendarApplyBtn: boolean;\r\n calendarSelection: any = {fromDate: null , toDate: null};\r\n\r\n showSliderMinValueError: boolean;\r\n showSliderMaxValueError: boolean;\r\n isMinTextBoxEmpty: boolean;\r\n isMaxTextBoxEmpty: boolean;\r\n selectedLabel: string;\r\n\r\n startTimeHourErr: boolean;\r\n startTimeMinErr: boolean;\r\n endTimeHourErr: boolean;\r\n endTimeMinErr: boolean;\r\n\r\n sameTooltipClicked: boolean;\r\n showNoDataToDisplay: boolean = false;\r\n marginTop: string = \"\";\r\n @ViewChildren('tableHeader') viewChildTableHeaders: QueryList<ElementRef>;\r\n\r\n selectedCheckboxOptionsCount: number;\r\n isFilterChanged: boolean;\r\n isSortChanged: boolean;\r\n isDifferenceLessThan25Percent: boolean;\r\n incorrectSliderInput: boolean;\r\n\r\n start: number = 0;\r\n limit: number = 30;\r\n end: number = this.limit + this.start;\r\n renderedData: any[]; \r\n\r\n heightOfCheckboxTooltipFilter: number;\r\n \r\n constructor(\r\n private cdRef: ChangeDetectorRef,\r\n private annaSortService: AnnaSortService,\r\n public annaDateTimeFormatService: AnnaDateTimeFormatService,\r\n public annaFilterService: AnnaFilterService,\r\n private annaGenericTableService: AnnaGenericTableService\r\n ) {\r\n this.setTooltipRadioNames();\r\n }\r\n \r\n ngAfterViewChecked(): void {\r\n if(this.gtGeneralConfig.component && this.gtGeneralConfig.component.includes(\"ORDER_LISTING\") || this.gtGeneralConfig.component == \"DRRLISTING\"){\r\n this.setMarginLeftForFilterIcon();\r\n } \r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (this.showSkeletonLoading) {\r\n this.tableData = this.numberOfSkeletonColumns;\r\n this.renderedData = this.numberOfSkeletonColumns;\r\n this.annaFilterService.initialValueMap = new Map();\r\n }\r\n else {\r\n this.setInitialRowsForTable();\r\n this.disableEnableEachColumnTooltipIcon();\r\n this.tableColumns = this.tableHeaders.filter(x => x.visible).map(x => x.headerInfo[0].objectKey);\r\n if(this.tableData && this.tableData.length == 0){\r\n this.tableData = Array(2).fill(0);\r\n this.renderedData = cloneDeep(this.tableData);\r\n this.marginTop = (- this.gtDimension.rowHeight - (this.gtDimension.rowHeight/2)) + 'px';\r\n this.showNoDataToDisplay = true;\r\n }\r\n else{\r\n this.showNoDataToDisplay = false;\r\n }\r\n\r\n this.showSkeletonLoading = false;\r\n }\r\n\r\n //setting table column here as well because while showing skeleton loader, we should show table headers.\r\n if (changes['tableHeaders'] && !isEqual(changes['tableHeaders'].currentValue, changes['tableHeaders'].previousValue)) {\r\n this.tableColumns = this.tableHeaders.filter(x => x.visible).map(x => x.headerInfo[0].objectKey);\r\n this.annaSortService.columnSortState = new Map();\r\n this.setColumnSortStateMap();\r\n this.setActiveStateObject();\r\n }\r\n\r\n if (changes['totalRowInfo'] && changes['totalRowInfo'].currentValue) {\r\n this.totalRowColumns = this.totalRowInfo.map(x => x.colName);\r\n }\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n\r\n trackByFn(index: number) {\r\n return index;\r\n }\r\n\r\n setTooltipRadioNames() {\r\n this.tooltipRadioTextMap = new Map();\r\n this.tooltipRadioTextMap.set(\"StartTimeForFilter\", \"Start Time\");\r\n this.tooltipRadioTextMap.set(\"EndTimeForFilter\", \"End Time\");\r\n this.tooltipRadioTextMap.set(\"start_time_for_filter\", \"Start Time\");\r\n this.tooltipRadioTextMap.set(\"end_time_for_filter\", \"End Time\");\r\n this.tooltipRadioTextMap.set(\"primaryAEName\", \"Primary AE\");\r\n this.tooltipRadioTextMap.set(\"region\", \"Region\");\r\n this.tooltipRadioTextMap.set(\"agencyName\", \"Agency\");\r\n this.tooltipRadioTextMap.set(\"location\", \"Location\");\r\n this.tooltipRadioTextMap.set(\"advertiserName\", \"Advertiser\");\r\n this.tooltipRadioTextMap.set(\"productCode\", \"Product Category\");\r\n this.tooltipRadioTextMap.set(\"flightStartDate\", \"Start Date\");\r\n this.tooltipRadioTextMap.set(\"flightEndDate\", \"End Date\");\r\n this.tooltipRadioTextMap.set(\"orderIdAndRevNumber\", \"STN Order#-Rev#\");\r\n this.tooltipRadioTextMap.set(\"alternateOrderId\", \"Buyer Order#\");\r\n this.tooltipRadioTextMap.set(\"grp\", \"GRP\");\r\n this.tooltipRadioTextMap.set(\"cpp\", \"CPP\");\r\n this.tooltipRadioTextMap.set(\"imps\", \"IMPS\");\r\n this.tooltipRadioTextMap.set(\"cpm\", \"CPM\");\r\n this.tooltipRadioTextMap.set(\"offeredMGs\", \"Offered MG\");\r\n this.tooltipRadioTextMap.set(\"outstandingPE\", \"O/S PE\");\r\n this.tooltipRadioTextMap.set(\"offeredADUs\", \"Offered ADUs\");\r\n this.tooltipRadioTextMap.set(\"udDeficitValue\", \"Pending Audience Delta\");\r\n this.tooltipRadioTextMap.set(\"startEndTimeMulti\", \"Time\");\r\n this.tooltipRadioTextMap.set(\"bookedValue\", \"Booked\");\r\n this.tooltipRadioTextMap.set(\"bookedSpots\", \"Spots\");\r\n this.tooltipRadioTextMap.set(\"userChanges\", \"Other changes\");\r\n this.tooltipRadioTextMap.set(\"inventoryCode\", \"Inventory Code\");\r\n this.tooltipRadioTextMap.set(\"program\", \"Program\");\r\n this.tooltipRadioTextMap.set(\"agency\", \"Agency\");\r\n this.tooltipRadioTextMap.set(\"advertiser\", \"Advertiser\");\r\n this.tooltipRadioTextMap.set(\"startDate\", \"Start Date\");\r\n this.tooltipRadioTextMap.set(\"endDate\", \"End Date\");\r\n this.tooltipRadioTextMap.set(\"rcvPreempt\", \"$ Madegood PEs\");\r\n this.tooltipRadioTextMap.set(\"osPreempt\", \"$ O/S PEs\");\r\n this.tooltipRadioTextMap.set(\"rcvUnderDly\", \"Recovered UD\");\r\n this.tooltipRadioTextMap.set(\"osUnderDly\", \"O/s Under Dly\");\r\n this.tooltipRadioTextMap.set(\"primaryAe\", \"Primary AE\");\r\n this.tooltipRadioTextMap.set(\"region\", \"Region\");\r\n this.tooltipRadioTextMap.set(\"revCode1\", \"Rev code 1\");\r\n this.tooltipRadioTextMap.set(\"orderNoRevNo\", \"STN Order#-Rev#\");\r\n this.tooltipRadioTextMap.set(\"revCode2\", \"Rev code 2\");\r\n this.tooltipRadioTextMap.set(\"revCode3\", \"Rev code 3\");\r\n this.tooltipRadioTextMap.set(\"booked\", \"Booked\");\r\n this.tooltipRadioTextMap.set(\"spots\", \"Spots\");\r\n this.tooltipRadioTextMap.set(\"postedAudPercent\", \"Posted %\");\r\n this.tooltipRadioTextMap.set(\"revision\", \"Revision\");\r\n this.tooltipRadioTextMap.set(\"buyerOrderId\", \"ALT/REP Order#\");\r\n this.tooltipRadioTextMap.set(\"demo\",\"Demo\");\r\n this.tooltipRadioTextMap.set(\"postedAdu\",\"$ Posted ADUs\");\r\n this.tooltipRadioTextMap.set(\"scheduledAdu\",\"$ Scheduled ADUs\");\r\n this.tooltipRadioTextMap.set(\"audienceDeficit\",\"$ O/S Audience\");\r\n this.tooltipRadioTextMap.set(\"postedAudPercent\",\"Posted Audience %\");\r\n this.tooltipRadioTextMap.set(\"potentialUnitsValue\",\"POT Units\");\r\n this.tooltipRadioTextMap.set(\"bookedUnitsValue\",\"Booked Units\");\r\n this.tooltipRadioTextMap.set(\"bookedAmountWithZeroRatingValue\",\"Total $ Booked\");\r\n this.tooltipRadioTextMap.set(\"bookedAmountPercentageWithZeroRatingValue\",\"% Against All Demos\");\r\n this.tooltipRadioTextMap.set(\"bookedAmountWithoutZeroRatingValue\",\"$Booked With Imps(’000)\");\r\n this.tooltipRadioTextMap.set(\"bookedAmountPercentageWithoutZeroRatingValue\", \"% Against All Demos\");\r\n \r\n this.tooltipRadioTextMap.set(\"totalBookedAmountValue\",\"Total $Booked\");\r\n this.tooltipRadioTextMap.set(\"averageUnitRateValue\",\"AUR\");\r\n this.tooltipRadioTextMap.set(\"totalBookedAmountWithRatingValue\", \"$Booked With Rating\");\r\n this.tooltipRadioTextMap.set(\"averageUnitRateWithRatingValue\", \"AUR With Rating\");\r\n \r\n this.tooltipRadioTextMap.set(\"totalBookedAmountWithImpressionValue\", \"$Booked With IMPS\");\r\n this.tooltipRadioTextMap.set(\"averageUnitRateWithImpressionValue\", \"AUR With IMPS\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedUnitsWithRatingValue\", \"Booked Units With Rating\");\r\n this.tooltipRadioTextMap.set(\"postedUnitsWithRatingValue\", \"Posted Units With Rating\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedUnitsWithImpressionValue\", \"Booked Units With IMPS\");\r\n this.tooltipRadioTextMap.set(\"postedUnitsWithImpressionValue\", \"Posted Units With IMPS\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedRatings\", \"Booked Rating\");\r\n this.tooltipRadioTextMap.set(\"postedRatings\", \"Posted Rating\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedImpressions\", \"Booked IMPS\");\r\n this.tooltipRadioTextMap.set(\"postedImpressions\", \"Posted IMPS\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedAverageRating\", \"Booked AVG Rating\");\r\n this.tooltipRadioTextMap.set(\"postedAverageRating\", \"Posted AVG Rating\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedAverageImpression\", \"Booked AVG IMPS\");\r\n this.tooltipRadioTextMap.set(\"postedAverageImpression\", \"Posted AVG IMPS\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedCppValue\", \"Booked CPP\");\r\n this.tooltipRadioTextMap.set(\"bookedEffectiveCppValue\", \"Effective CPP\");\r\n \r\n this.tooltipRadioTextMap.set(\"bookedCpmValue\", \"Booked CPM\");\r\n this.tooltipRadioTextMap.set(\"bookedEffectiveCpmValue\", \"Effective CPM\");\r\n \r\n this.tooltipRadioTextMap.set(\"orderSource\",\"Order Source\");\r\n this.tooltipRadioTextMap.set(\"orderCategory\",\"Category\");\r\n this.tooltipRadioTextMap.set(\"cashOrTrade\",\"C/T\");\r\n \r\n }\r\n\r\n generateTableDataWrapper() {\r\n this.showSkeletonLoading = true;\r\n this.tableDataWrapper = [];\r\n let rowObject: any;\r\n let columnName: string;\r\n let columnObject: { [x: string]: any; };\r\n let columnObjectKey;\r\n let keysUsedForTableDisplay: string[];\r\n let keysUsedForColumn: string[];\r\n let additionalInfoObject: { [x: string]: any; };\r\n let additionalKeys;\r\n this.tableData.forEach((obj: { [x: string]: any; }) => {\r\n rowObject = {};\r\n keysUsedForTableDisplay = [];\r\n for (var colNum in this.tableHeaders) {\r\n columnObject = {};\r\n if (!this.tableHeaders[colNum].visible) {\r\n continue;\r\n }\r\n columnName = \"\";\r\n keysUsedForColumn = [];\r\n this.tableHeaders[colNum].headerInfo.forEach((header) => {\r\n if (header.typeOfBodyData === \"STRING\") {\r\n columnObjectKey = header.objectKey;\r\n columnObject[columnObjectKey] = obj[columnObjectKey];\r\n keysUsedForTableDisplay.push(columnObjectKey);\r\n keysUsedForColumn.push(columnObjectKey);\r\n }\r\n else if (header.typeOfBodyData === \"ICON\") {\r\n columnObjectKey = header.typeOfBodyData;\r\n columnObject[columnObjectKey] = obj[header.objectKey];\r\n keysUsedForColumn.push(header.objectKey);\r\n }\r\n else if (header.typeOfBodyData === \"CHECKBOX\") {\r\n columnObjectKey = header.typeOfBodyData;\r\n columnObject[columnObjectKey] = obj[header.objectKey];\r\n keysUsedForColumn.push(header.objectKey);\r\n }\r\n })\r\n for (var i = 0; i < keysUsedForColumn.length; i++) {\r\n columnName += keysUsedForColumn[i];\r\n if (i !== keysUsedForColumn.length - 1) {\r\n columnName += ',';\r\n }\r\n }\r\n rowObject[columnName] = columnObject;\r\n }\r\n additionalInfoObject = {};\r\n additionalKeys = Object.keys(obj).filter(key => !keysUsedForTableDisplay.includes(key));\r\n additionalKeys.forEach(key => {\r\n additionalInfoObject[key] = obj[key];\r\n })\r\n rowObject.AdditionalInfo = additionalInfoObject;\r\n this.tableDataWrapper.push(rowObject);\r\n })\r\n this.tableData = this.tableDataWrapper;\r\n this.showSkeletonLoading = false;\r\n }\r\n\r\n\r\n selectOrUnselectCheckbox(rowData: any, columnKeys: any, isCheckboxSelected: any) {\r\n this.toggleCheckbox.emit({ rowData, columnKeys, isCheckboxSelected });\r\n }\r\n\r\n selectUnselectAllRows() {\r\n this.toggleHeaderCheckbox.emit();\r\n }\r\n\r\n selectUnselectRow(rowData: any) {\r\n this.toggleRowCheckbox.emit(rowData);\r\n }\r\n\r\n undoCreditedSpot(data: any) {\r\n this.undoIconClicked.emit({ data, mgOrCredit: \"Credit\" });\r\n }\r\n\r\n undoMgSpot(data: any) {\r\n this.undoIconClicked.emit({ data, mgOrCredit: \"MakeGood\" });\r\n }\r\n\r\n //Sort and Filter Logic begins!\r\n closeTooltip() {\r\n if (this.tooltip && this.tooltip.isOpen()) {\r\n this.tooltip.close();\r\n }\r\n this.tooltip = null;\r\n this.disableCheckboxApply = false;\r\n if (!this.bindValueFuncCalled) {\r\n this.columnFilterClosed.emit();\r\n }\r\n }\r\n\r\n isTooltipActive(header: any[]) {\r\n return this.annaFilterService.isTooltipActive(header,this.annaSortService.columnSortState);\r\n }\r\n\r\n bindTheValueToToolTip(tooltip: any, header: IHeaderInfo) {\r\n\r\n this.bindValueFuncCalled = true;\r\n let containerToScroll;\r\n if (this.gtGeneralConfig.component === \"SPOTDETAILS\" || this.gtGeneralConfig.component === \"DRRLISTING\") {\r\n containerToScroll = document.getElementsByClassName(\"scrollable-container\")[0];\r\n var mediaQuery = window.matchMedia(\"(max-width: 1366px)\");\r\n if (mediaQuery.matches) {\r\n containerToScroll.scroll(0, this.gtGeneralConfig.verticalScrollOffsetForFilterTooltip);\r\n }\r\n }\r\n \r\n // if same tooltip opened close it\r\n if (tooltip == this.tooltip) {\r\n this.bindValueFuncCalled = false;\r\n this.closeTooltip();\r\n }\r\n else {\r\n let enabledHeaders: any[] = [];\r\n this.checkIfUniqueValuePresentForTheHeader(header,enabledHeaders);\r\n this.openTooltip(tooltip, enabledHeaders,header);\r\n\r\n if (window.innerWidth < 1500 && window.innerHeight < 768 && !this.annaFilterService.sliderSet.has(header.filterSortObjectKeys[0])) {\r\n this.columnFilterOpened.emit();\r\n }\r\n\r\n this.showFilterTooltipTabs = header.filterSortObjectKeys.length > 1;\r\n let activeTab = this.filterTabObjects[0];\r\n this.populateTooltipDataBasedOnSelectedRadio(activeTab);\r\n this.bindValueFuncCalled = false;\r\n }\r\n }\r\n\r\n checkIfUniqueValuePresentForTheHeader(header: IHeaderInfo, enabledHeaders: any[]){\r\n header.filterSortObjectKeys.forEach((item: string | number) => {\r\n if(item == \"period\"){\r\n let uniqStartDate = uniq(this.tableData.map((u: { [x: string]: any; }) => u[\"startDate\"]));\r\n let uniqEndDate = uniq(this.tableData.map((u:{ [x: string]: any; }) => u[\"endDate\"]));\r\n if(uniqStartDate.length > 1 || uniqEndDate.length > 1 || this.isTooltipActive([item])){\r\n enabledHeaders.push(item);\r\n }\r\n }\r\n else if(uniq(this.tableData.map((u:{ [x: string]: any; }) => u[item])).length > 1 || this.isTooltipActive([item])){\r\n enabledHeaders.push(item);\r\n }\r\n });\r\n }\r\n\r\n openTooltip(tooltip: any,header: any, columnHeader: IHeaderInfo) {\r\n this.closeTooltip();\r\n this.tooltip = tooltip;\r\n this.tooltip.open();\r\n //convert key into the header\r\n this.filterTabObjects = header.map((key: string,index: number) => {\r\n let value = this.tooltipRadioTextMap.has(key)\r\n ? this.tooltipRadioTextMap.get(key)\r\n : key; //change to display name\r\n return new radioButtonModel(key, value, columnHeader.isSortRequired[index], columnHeader.isFilterRequired[index]);\r\n });\r\n }\r\n\r\n clearColumnFilter() {\r\n this.annaFilterService.clearColumnFilter();\r\n this.closeTooltip();\r\n this.tableData = cloneDeep(this.annaFilterService.filterData(this.clonedTableData, \"\"));\r\n this.annaSortService.noSortingAppliedData = this.tableData;\r\n this.checkIfSortingIsApplied();\r\n this.filterAppliedToTable.emit(this.tableData);\r\n this.disableEnableEachColumnTooltipIcon();\r\n this.annaFilterService.updateStateOfTheCurrentFilterTab(this.annaSortService.columnSortState);\r\n }\r\n\r\n populateTooltipDataBasedOnSelectedRadio(activeTab: radioButtonModel) {\r\n\r\n let header = activeTab.key;\r\n this.selectedLabel = activeTab.label;\r\n this.showSortComponent = false;\r\n this.showFilterComponent = false;\r\n this.searchItem = null;\r\n \r\n this.showSortComponent = activeTab.isSortRequired;\r\n this.showFilterComponent = activeTab.isFilterRequired;\r\n this.tempSortOrder = null;\r\n this.isFilterChanged = false;\r\n this.isSortChanged = false;\r\n \r\n this.annaFilterService.selectedRadio = header;\r\n this.disableActiveFilterClearButton();\r\n \r\n this.createFilterTooltipData(header);\r\n \r\n }\r\n\r\n createFilterTooltipData(header: string){\r\n if(this.showFilterComponent){\r\n this.disableSliderApplyButton = this.disableCheckboxApply = true;\r\n this.disableCalendarApplyBtn = this.disableTimeFilterApplyBtn = true;\r\n \r\n if (this.annaFilterService.calendarSet.has(header)) {\r\n this.getCalendarData();\r\n } else if (this.annaFilterService.sliderSet.has(header)) {\r\n this.getSliderData(header);\r\n } else if (this.annaFilterService.timeSet.has(header)) {\r\n this.getTimeFilterData(header);\r\n } else {\r\n this.getCheckboxData(header);\r\n }\r\n }\r\n else if(this.showSortComponent){\r\n this.disableSliderApplyButton = this.disableCheckboxApply = true;\r\n this.disableCalendarApplyBtn = this.disableTimeFilterApplyBtn = true;\r\n }\r\n }\r\n\r\n disableActiveFilterClearButton(){\r\n let selectedFilterSet = new Set(this.annaFilterService.appliedFiltersArray);\r\n let isSortPresent = (this.annaSortService.columnSortState.size > 0 && this.annaSortService.columnSortState.get(this.annaFilterService.selectedRadio) != \"DEFAULT\");\r\n this.disableColumnClearAllBtn = selectedFilterSet.has(this.annaFilterService.selectedRadio) || isSortPresent ? false : true;\r\n }\r\n\r\n getSliderData(header: string) {\r\n \r\n this.createOptionsForSlider(header);\r\n this.setSelectedRangeForSlider(header);\r\n }\r\n\r\n createOptionsForSlider(header: string){\r\n\r\n let translateFunc;\r\n this.incorrectSliderInput = false;\r\n this.sliderEnteredMaxValue = this.sliderEnteredMinValue = null;\r\n this.showSliderMinValueError = this.showSliderMaxValueError = this.isMinTextBoxEmpty = this.isMaxTextBoxEmpty = false;\r\n\r\n if (this.annaFilterService.sliderCurrencySet.has(header)) {\r\n translateFunc = \"currency\";\r\n }\r\n else if(header == \"postedAudPercent\"){\r\n translateFunc = \"percent\";\r\n }\r\n else {\r\n translateFunc = \"normal\";\r\n }\r\n\r\n let optionsData = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData);\r\n let minValue = this.annaFilterService.returnMaxAndMinValue(optionsData, header, true);\r\n let maxValue = this.annaFilterService.returnMaxAndMinValue(optionsData, header, false);\r\n\r\n let obj = this.annaFilterService.setOptionValues(minValue,maxValue);\r\n\r\n if (translateFunc === \"normal\") {\r\n obj.translate = this.annaFilterService.normalTranslateFunction;\r\n } else if (translateFunc === \"percent\") {\r\n obj.translate = this.annaFilterService.percentTranslateFunction;\r\n } else if (translateFunc === \"currency\") {\r\n obj.translate = this.annaFilterService.currencyTranslateFunction;\r\n }\r\n\r\n this.options = obj;\r\n this.options.step = 1;\r\n this.sliderFilterTextBoxStep = \"1\";\r\n if (header !== \"WeekNumber\") {\r\n this.options.step = 0.1;\r\n this.sliderFilterTextBoxStep = \"0.1\";\r\n }\r\n }\r\n\r\n setSelectedRangeForSlider(header: string){\r\n if(this.annaFilterService.tooltipSelectedMap.has(header)){\r\n let selectedObj = this.annaFilterService.tooltipSelectedMap.get(header);\r\n this.sliderMinValue = selectedObj.min < this.options.floor ? this.options.floor : selectedObj.min;\r\n this.sliderMaxValue = selectedObj.max < this.options.ceil ? selectedObj.max : this.options.ceil;\r\n this.sliderEnteredMinValue = this.sliderMinValue;\r\n this.sliderEnteredMaxValue = this.sliderMaxValue; \r\n }\r\n else{\r\n this.sliderMinValue = this.options.floor;\r\n this.sliderMaxValue = this.options.ceil;\r\n }\r\n this.sliderEnteredMinValue = this.sliderMinValue;\r\n this.sliderEnteredMaxValue = this.sliderMaxValue;\r\n }\r\n\r\n\r\n getCheckboxData(header: string) {\r\n\r\n let tooltipOptions = this.createListForCheckboxFilter(header); \r\n let selectedItems = sortBy(tooltipOptions.filter(item => item.isSelected),\"label\");\r\n let unselectedItems = sortBy(tooltipOptions.filter(item => !item.isSelected),\"label\");\r\n \r\n this.clonedTooltipOptions = [...selectedItems, ...unselectedItems];\r\n\r\n this.tooltipOptions = cloneDeep(this.clonedTooltipOptions);\r\n \r\n let margin = 5;\r\n let dataLength = this.tooltipOptions.length;\r\n this.heightOfCheckboxTooltipFilter = dataLength > 6 ? 200 : ((26.03 * dataLength) + (margin * dataLength) + margin);\r\n \r\n this.disableSelectAll = unselectedItems.length == 0;\r\n this.disableClearAll = selectedItems.length == 0;\r\n this.selectedCheckboxOptionsCount = selectedItems.length;\r\n }\r\n\r\n createListForCheckboxFilter(header: string){\r\n let optionData = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData);\r\n let uniqOptionData = uniq(optionData.map(item => item[header]));\r\n let tooltipOptions = uniqOptionData.map((item,index) => new TooltipModel(item,index+1));\r\n\r\n this.selectUnselectListCheckbox(tooltipOptions,header);\r\n let index = tooltipOptions.findIndex(item => item.value == null);\r\n \r\n if(index != -1){\r\n tooltipOptions[index].label = \"(Blank)\";\r\n }\r\n\r\n return tooltipOptions;\r\n }\r\n\r\n selectUnselectListCheckbox(tooltipOptions: TooltipModel[],header: string){\r\n \r\n if(this.annaFilterService.tooltipSelectedMap.has(header)){\r\n let selectedValueSet = new Set(this.annaFilterService.tooltipSelectedMap.get(header));\r\n tooltipOptions.forEach(item => item.isSelected = selectedValueSet.has(item.value) ? true : false);\r\n }\r\n else{\r\n tooltipOptions.forEach(item => item.isSelected = true);\r\n }\r\n\r\n }\r\n\r\n getCalendarData() {\r\n const parsingFormat = \"MM/DD/YYYY\";\r\n let minMaxDate = this.createRangeForTheDateFilter();\r\n this.selectRangeForTheDateFilter(minMaxDate, parsingFormat);\r\n }\r\n\r\n createRangeForTheDateFilter(){\r\n \r\n let optionData = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData);\r\n \r\n let minMaxDate;\r\n //When you want to use startDate and endDate combined as single column then use Period.\r\n if(this.annaFilterService.selectedRadio == \"period\"){\r\n minMaxDate = this.createStartEndDateRange(optionData);\r\n }\r\n else{\r\n minMaxDate = this.annaFilterService.returnMinAndMaxDate(optionData, this.annaFilterService.selectedRadio); \r\n }\r\n \r\n return minMaxDate;\r\n\r\n }\r\n\r\n createStartEndDateRange(optionData: any[]){\r\n let minStartDate = this.annaFilterService.returnMinAndMaxDate(optionData, \"startDate\");\r\n let maxEndDate = this.annaFilterService.returnMinAndMaxDate(optionData,\"endDate\");\r\n return [minStartDate[0],maxEndDate[1]];\r\n }\r\n\r\n selectRangeForTheDateFilter(minMaxDate: any[], parsingFormat: string){\r\n this.calendarMinEnabledDate = this.annaDateTimeFormatService.convertToNgbDate(minMaxDate[0],parsingFormat);\r\n this.calendarMaxEnabledDate = this.annaDateTimeFormatService.convertToNgbDate(minMaxDate[1],parsingFormat);\r\n \r\n \r\n if(this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)){\r\n let selectedDateObj = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);\r\n \r\n if(selectedDateObj.fromDate.isAfter(minMaxDate[0])){\r\n this.selectedMinDate = this.annaDateTimeFormatService.convertToNgbDate(selectedDateObj.fromDate,parsingFormat);\r\n }\r\n else{\r\n this.selectedMinDate = this.annaDateTimeFormatService.convertToNgbDate(minMaxDate[0],parsingFormat);\r\n } \r\n\r\n if(selectedDateObj.toDate.isAfter(minMaxDate[1])){\r\n this.selectedMaxDate = this.annaDateTimeFormatService.convertToNgbDate(minMaxDate[1],parsingFormat);\r\n }\r\n else{\r\n this.selectedMaxDate = this.annaDateTimeFormatService.convertToNgbDate(selectedDateObj.toDate,parsingFormat);\r\n }\r\n\r\n }\r\n else{\r\n this.selectedMinDate = cloneDeep(this.calendarMinEnabledDate);\r\n this.selectedMaxDate = cloneDeep(this.calendarMaxEnabledDate);\r\n }\r\n\r\n this.calendarSelection.fromDate = cloneDeep(this.selectedMinDate);\r\n this.calendarSelection.toDate = cloneDeep(this.selectedMaxDate);\r\n\r\n \r\n }\r\n\r\n getTimeFilterData(header: string): void {\r\n \r\n this.startTimeHourErr = this.startTimeMinErr = this.endTimeHourErr = this.endTimeMinErr = false; \r\n\r\n if (this.annaFilterService.tooltipSelectedMap.has(header)) {\r\n this.selectedFromTime = this.annaFilterService.tooltipSelectedMap.get(header).fromTime;\r\n this.selectedToTime = this.annaFilterService.tooltipSelectedMap.get(header).toTime;\r\n } else {\r\n this.setInitialValueMapForTimeFilter(header);\r\n this.selectedFromTime = this.annaFilterService.initialValueMap.get(header).fromTime;\r\n this.selectedToTime = this.annaFilterService.initialValueMap.get(header).toTime;\r\n }\r\n\r\n if(this.selectedFromTime != undefined || this.selectedToTime != undefined) {\r\n this.selectedFromTime = this.annaDateTimeFormatService.formatToTwelveHrs(this.selectedFromTime, true);\r\n this.selectedToTime = this.annaDateTimeFormatService.formatToTwelveHrs(this.selectedToTime, true);\r\n\r\n this.clonedSelectedFromTime = cloneDeep(this.selectedFromTime);\r\n this.clonedSelectedToTime = cloneDeep(this.selectedToTime);\r\n }\r\n else {\r\n this.selectedFromTime = [\"-\", \"-\", \"-\"];\r\n this.selectedToTime = [\"-\", \"-\", \"-\"];\r\n }\r\n\r\n if(this.gtGeneralConfig.component === \"SPOTDETAILS\" || this.gtGeneralConfig.component === \"EXCLUDEINVENTORYPOPUP\") {\r\n this.setTimeFilterDataForComponentsOtherThanRatingsPage(header);\r\n }\r\n else if(this.gtGeneralConfig.component === \"RATING\"){\r\n this.setTimeFilterDataForRatingPageComponent(header);\r\n }\r\n }\r\n\r\n //Need to change this method\r\n setTimeFilterDataForComponentsOtherThanRatingsPage(header: string){\r\n this.showMultiTimeCheckbox = false;\r\n this.showZeroTimeCheckbox = false;\r\n this.showEnterTimeCheckbox = false;\r\n this.multiTimeCheckboxChecked = false;\r\n this.zeroTimeCheckboxChecked = false;\r\n this.enterTimeCheckboxChecked = false;\r\n\r\n\r\n let optionsData = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData);\r\n let selectedObj;\r\n\r\n if(this.annaFilterService.tooltipSelectedMap.has(header)){\r\n selectedObj = this.annaFilterService.tooltipSelectedMap.get(header);\r\n }\r\n else{\r\n selectedObj = this.annaFilterService.initialValueMap.get(header);\r\n }\r\n\r\n if(optionsData.findIndex(obj => obj[header] == \"0\") != -1) {\r\n this.showZeroTimeCheckbox = true;\r\n this.zeroTimeCheckboxChecked = selectedObj.includeZeroTime;\r\n }\r\n \r\n \r\n if(optionsData.findIndex(obj => obj[header] == \"<multi>\") != -1) {\r\n this.showMultiTimeCheckbox = true;\r\n this.multiTimeCheckboxChecked = selectedObj.includeMulti;\r\n }\r\n \r\n\r\n if(this.showZeroTimeCheckbox || this.showMultiTimeCheckbox) {\r\n this.showEnterTimeCheckbox = true;\r\n }\r\n \r\n if(optionsData.findIndex(obj => obj[header] != \"<multi>\" && obj[header] != \"0\") != -1) {\r\n this.enterTimeCheckboxChecked = selectedObj.includeTimeRange;\r\n }\r\n }\r\n\r\n setTimeFilterDataForRatingPageComponent(header: string){\r\n this.showMultiTimeCheckbox = false;\r\n this.showZeroTimeCheckbox = false;\r\n this.showEnterTimeCheckbox = false;\r\n this.multiTimeCheckboxChecked = false;\r\n this.zeroTimeCheckboxChecked = false;\r\n this.enterTimeCheckboxChecked = false;\r\n\r\n let optionsData = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData);\r\n let selectedObj;\r\n\r\n if(this.annaFilterService.tooltipSelectedMap.has(header)){\r\n selectedObj = this.annaFilterService.tooltipSelectedMap.get(header);\r\n }\r\n else{\r\n selectedObj = this.annaFilterService.initialValueMap.get(header);\r\n }\r\n\r\n if(optionsData.findIndex(obj => obj[header][0] == \"0\") != -1) {\r\n this.showZeroTimeCheckbox = true;\r\n this.zeroTimeCheckboxChecked = selectedObj.includeZeroTime;\r\n }\r\n \r\n \r\n if(optionsData.findIndex(obj => obj[header][0] == \"<multi>\") != -1) {\r\n this.showMultiTimeCheckbox = true;\r\n this.multiTimeCheckboxChecked = selectedObj.includeMulti;\r\n }\r\n \r\n\r\n if(this.showZeroTimeCheckbox || this.showMultiTimeCheckbox) {\r\n this.showEnterTimeCheckbox = true;\r\n }\r\n \r\n if(optionsData.findIndex(obj => obj[header][0] != \"<multi>\" && obj[header][0] != \"0\") != -1) {\r\n this.enterTimeCheckboxChecked = selectedObj.includeTimeRange;\r\n }\r\n }\r\n\r\n selectOrUnselectMultiTimeCheckbox() {\r\n this.multiTimeCheckboxChecked = !this.multiTimeCheckboxChecked;\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n selectOrUnselectZeroTimeCheckbox() {\r\n this.zeroTimeCheckboxChecked = !this.zeroTimeCheckboxChecked;\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n selectOrUnselectEnterTimeCheckbox() {\r\n this.enterTimeCheckboxChecked = !this.enterTimeCheckboxChecked;\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n \r\n selectUnselectCheckbox(data: TooltipModel) {\r\n data.isSelected = !data.isSelected;\r\n let index = this.clonedTooltipOptions.findIndex(item => item.id == data.id);\r\n this.clonedTooltipOptions[index].isSelected = data.isSelected;\r\n \r\n let selectedItems = this.tooltipOptions.filter(item => item.isSelected);\r\n let unselectedItems = this.tooltipOptions.filter(item => !item.isSelected);\r\n\r\n this.disableClearAll = selectedItems.length == 0;\r\n this.disableSelectAll = unselectedItems.length == 0;\r\n this.selectedCheckboxOptionsCount = selectedItems.length;\r\n this.disableCheckboxFilterApplyButton();\r\n }\r\n\r\n minValueChanged(val: string) {\r\n if (val || val == '0') {\r\n this.sliderEnteredMinValue = parseInt(val);\r\n this.isMinTextBoxEmpty = false;\r\n if (this.isMaxTextBoxEmpty) {\r\n if (this.sliderEnteredMinValue > this.options.ceil) {\r\n this.showSliderMinValueError = true;\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n } else {\r\n this.showSliderMinValueError = false;\r\n this.showSliderMaxValueError = false;\r\n this.disableSliderApplyButton = false;\r\n this.incorrectSliderInput = false;\r\n }\r\n } else if (this.sliderEnteredMinValue > this.sliderEnteredMaxValue) {\r\n if(this.isValueInRange(this.sliderEnteredMaxValue)){\r\n this.showSliderMinValueError = true;\r\n this.showSliderMaxValueError = false;\r\n }\r\n else{\r\n this.showSliderMaxValueError = true;\r\n if(this.isValueInRange(this.sliderEnteredMinValue)){\r\n this.showSliderMinValueError = false;\r\n }\r\n else{\r\n this.showSliderMinValueError = true;\r\n }\r\n \r\n }\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n \r\n } else if (this.sliderEnteredMinValue < this.options.floor) {\r\n this.showSliderMinValueError = true;\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n } else {\r\n this.showSliderMinValueError = false;\r\n this.disableSliderApplyButton = false;\r\n this.incorrectSliderInput = false;\r\n }\r\n\r\n console.log(this.sliderEnteredMinValue);\r\n } else {\r\n console.log('inside else condition');\r\n this.sliderEnteredMinValue = this.options.floor;\r\n this.isMinTextBoxEmpty = true;\r\n this.showSliderMinValueError = false;\r\n\r\n }\r\n this.showErrorForMinAndMaxValue();\r\n }\r\n\r\n maxValueChanged(val: string) {\r\n if (val || val == \"0\") {\r\n this.sliderEnteredMaxValue = parseInt(val);\r\n this.isMaxTextBoxEmpty = false;\r\n if (this.isMinTextBoxEmpty) {\r\n if (this.sliderEnteredMaxValue < this.options.floor) {\r\n this.showSliderMaxValueError = true;\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n } else {\r\n this.showSliderMaxValueError = false;\r\n this.showSliderMinValueError = false;\r\n this.disableSliderApplyButton = false;\r\n this.incorrectSliderInput = false;\r\n }\r\n } else if (this.sliderEnteredMaxValue < this.sliderEnteredMinValue) {\r\n if(this.isValueInRange(this.sliderEnteredMinValue)){\r\n this.showSliderMaxValueError = true;\r\n this.showSliderMinValueError = false;\r\n }\r\n else{\r\n this.showSliderMinValueError = true;\r\n if(this.isValueInRange(this.sliderEnteredMaxValue)){\r\n this.showSliderMaxValueError = false;\r\n }\r\n else{\r\n this.showSliderMaxValueError = true;\r\n }\r\n }\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n // this.showMaxError = true;\r\n } else if (this.sliderEnteredMaxValue > this.options.ceil) {\r\n this.showSliderMaxValueError = true;\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n } else {\r\n this.showSliderMaxValueError = false;\r\n this.disableSliderApplyButton = false;\r\n this.incorrectSliderInput = false;\r\n }\r\n } else {\r\n this.sliderEnteredMaxValue = this.options.ceil;\r\n this.isMaxTextBoxEmpty = true;\r\n this.showSliderMaxValueError = false;\r\n console.log(this.sliderEnteredMaxValue);\r\n }\r\n this.showErrorForMinAndMaxValue();\r\n }\r\n\r\n showErrorForMinAndMaxValue(){\r\n if(this.isMinTextBoxEmpty && this.isMaxTextBoxEmpty){\r\n this.showSliderMinValueError = true;\r\n this.showSliderMaxValueError = true;\r\n this.disableSliderApplyButton = true;\r\n this.incorrectSliderInput = true;\r\n }\r\n this.disableSliderApplyBtn();\r\n }\r\n\r\n isValueInRange(val: number){\r\n return this.options.floor <= val && val <= this.options.ceil;\r\n }\r\n\r\n disableSliderApplyBtn(){\r\n if(this.showFilterComponent && this.showSortComponent){\r\n let isFilterChanged = this.checkIfSliderTooltipIsFiltered();\r\n let isSortChanged = this.checkIfSortingChanged();\r\n \r\n this.disableSliderApplyButton = this.incorrectSliderInput || (!isSortChanged && !isFilterChanged );\r\n }\r\n else if(this.showFilterComponent){\r\n this.disableSliderApplyButton = this.incorrectSliderInput || !this.checkIfSliderTooltipIsFiltered();\r\n }\r\n else if(this.showSortComponent){\r\n this.disableSliderApplyButton = !this.checkIfSortingChanged();\r\n }\r\n }\r\n\r\n sliderValueChange() {\r\n this.sliderValue = { min: this.sliderMinValue, max: this.sliderMaxValue };\r\n }\r\n\r\n cancelSliderFilter() {\r\n this.sliderValue = null;\r\n this.closeTooltip();\r\n }\r\n\r\n applyFilters() {\r\n this.applyListFilters();\r\n this.applySortingOnFilteredData();\r\n this.emitData();\r\n this.setInitialRowsForTable();\r\n this.disableEnableEachColumnTooltipIcon();\r\n this.annaFilterService.updateStateOfTheCurrentFilterTab(this.annaSortService.columnSortState);\r\n this.closeTooltip();\r\n }\r\n\r\n applyListFilters(){\r\n if(this.showFilterComponent && this.isFilterChanged){\r\n let currentSelectedValue = [];\r\n \r\n if(this.tooltipOptions){\r\n\r\n currentSelectedValue = sortBy(this.tooltipOptions.filter(item => item.isSelected).map(item => item.value));\r\n\r\n if(!this.searchItem && currentSelectedValue.length == this.tooltipOptions.length && this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n currentSelectedValue = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n \r\n }\r\n\r\n let blankIndex = currentSelectedValue.findIndex((item: string) => item == null);\r\n if(blankIndex != -1){\r\n currentSelectedValue = sortBy(currentSelectedValue);\r\n }\r\n\r\n this.annaFilterService.reOrderAppliedFiltersState(this.clonedTableData,currentSelectedValue);\r\n this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio, currentSelectedValue);\r\n this.tableData = this.annaFilterService.filterData(this.clonedTableData, \"\");\r\n this.annaSortService.noSortingAppliedData = cloneDeep(this.tableData);\r\n }\r\n }\r\n\r\n applySortingOnFilteredData(){\r\n if(this.showSortComponent){\r\n if(this.isSortChanged){\r\n this.updateSortMap();\r\n }\r\n else if(this.isFilterChanged){\r\n this.checkIfSortingIsApplied();\r\n }\r\n }\r\n else if(this.isFilterChanged){\r\n this.checkIfSortingIsApplied();\r\n }\r\n }\r\n\r\n emitData(){\r\n if(this.isFilterChanged && this.isSortChanged){\r\n this.filterAppliedToTable.emit(this.tableData);\r\n }\r\n else if(this.isFilterChanged){\r\n this.filterAppliedToTable.emit(this.tableData);\r\n }\r\n else if(this.isSortChanged){\r\n this.sortingAppliedToTable.emit(this.tableData);\r\n }\r\n }\r\n\r\n applySorting(key: string){\r\n if(this.tempSortOrder == \"ASC\"){\r\n this.tableData = cloneDeep(this.annaSortService.sortDataForComponentOtherThanLurAndCsrPage(true,this.tableData,key));\r\n }\r\n else if(this.tempSortOrder == \"DESC\"){\r\n this.tableData = cloneDeep(this.annaSortService.sortDataForComponentOtherThanLurAndCsrPage(false,this.tableData,key));\r\n }\r\n else if(this.tempSortOrder == \"DEFAULT\"){\r\n this.tableData = cloneDeep(this.annaSortService.noSortingAppliedData);\r\n }\r\n }\r\n\r\n revert() {\r\n this.tempTooltipData = cloneDeep(this.toolTipdata);\r\n this.annaFilterService.tooltipMap.set(this.annaFilterService.selectedRadio, this.tempTooltipData);\r\n this.toolTipdata = null;\r\n }\r\n\r\n closeCheckboxFilter() {\r\n if (this.toolTipdata) {\r\n this.revert();\r\n }\r\n this.closeTooltip();\r\n }\r\n\r\n applySliderFilter() {\r\n\r\n this.applySliderFilterOnData();\r\n this.applySortingOnFilteredData();\r\n this.emitData();\r\n this.setInitialRowsForTable();\r\n this.annaFilterService.updateStateOfTheCurrentFilterTab(this.annaSortService.columnSortState);\r\n this.closeTooltip();\r\n }\r\n\r\n applySliderFilterOnData(){\r\n if(this.showFilterComponent && this.isFilterChanged){\r\n let currentSliderData: {min:any, max: any} = {min: null , max: null};\r\n\r\n // if(this.isMinTextBoxEmpty){\r\n // currentSliderData.min = this.options.floor;\r\n // currentSliderData.max = this.sliderMaxValue;\r\n // }\r\n // else if(this.isMaxTextBoxEmpty){\r\n // currentSliderData.max = this.options.ceil;\r\n // currentSliderData.min = this.sliderMinValue;\r\n // }\r\n // else{\r\n currentSliderData.max = this.sliderEnteredMaxValue;\r\n currentSliderData.min = this.sliderEnteredMinValue;\r\n // }\r\n\r\n if(currentSliderData.min == this.options.floor && currentSliderData.max == this.options.ceil && this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio) ){\r\n currentSliderData = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n \r\n this.annaFilterService.reOrderAppliedFiltersState(this.clonedTableData,currentSliderData);\r\n this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio,currentSliderData);\r\n this.tableData = this.annaFilterService.filterData(this.clonedTableData, \"\");\r\n this.annaSortService.noSortingAppliedData = cloneDeep(this.tableData);\r\n this.disableEnableEachColumnTooltipIcon();\r\n }\r\n }\r\n\r\n cancelInDateFilter() {\r\n this.closeTooltip();\r\n }\r\n\r\n updateSortMap(){\r\n for (let [key, value] of this.annaSortService.columnSortState.entries()) {\r\n this.annaSortService.columnSortState.set(key, \"DEFAULT\");\r\n }\r\n this.annaSortService.columnSortState.set(this.annaFilterService.selectedRadio, this.tempSortOrder);\r\n this.applySorting(this.annaFilterService.selectedRadio);\r\n }\r\n\r\n applyDateFilter() {\r\n\r\n this.applyDateFilterOnData();\r\n this.applySortingOnFilteredData();\r\n this.emitData();\r\n this.setInitialRowsForTable();\r\n this.annaFilterService.updateStateOfTheCurrentFilterTab(this.annaSortService.columnSortState);\r\n this.closeTooltip();\r\n \r\n }\r\n\r\n applyDateFilterOnData(){\r\n if(this.showFilterComponent && this.isFilterChanged){\r\n let currentSelectedDate = this.calendarSelection;\r\n \r\n let fromDate = {year: currentSelectedDate.fromDate.year,month: currentSelectedDate.fromDate.month,day: currentSelectedDate.fromDate.day};\r\n let toDate = {year: currentSelectedDate.toDate.year,month: currentSelectedDate.toDate.month,day: currentSelectedDate.toDate.day};\r\n \r\n if(isEqual(this.calendarMinEnabledDate,fromDate) && isEqual(this.calendarMaxEnabledDate,toDate) && this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n currentSelectedDate = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n else{\r\n currentSelectedDate.fromDate = moment(this.annaDateTimeFormatService.convertNgbDateToMoment(currentSelectedDate.fromDate));\r\n currentSelectedDate.toDate = moment(this.annaDateTimeFormatService.convertNgbDateToMoment(currentSelectedDate.toDate));\r\n }\r\n \r\n \r\n this.annaFilterService.reOrderAppliedFiltersState(this.clonedTableData,currentSelectedDate);\r\n this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio,currentSelectedDate);\r\n this.tableData = this.annaFilterService.filterData(this.clonedTableData, \"\");\r\n this.annaSortService.noSortingAppliedData = cloneDeep(this.tableData);\r\n this.disableEnableEachColumnTooltipIcon();\r\n\r\n }\r\n }\r\n\r\n applyWeekFilter(event: any) {\r\n\r\n }\r\n\r\n incrementHour(arr: any[]) {\r\n if (arr[0] == \"\") {\r\n arr[0] = 1;\r\n } else if (parseInt(arr[0]) < 12) {\r\n arr[0] = parseInt(arr[0]) + 1;\r\n } else {\r\n arr[0] = 1;\r\n }\r\n }\r\n\r\n decrementHour(arr: any[]) {\r\n if (arr[0] == \"\") {\r\n arr[0] = 12;\r\n } else if (parseInt(arr[0]) > 1) {\r\n arr[0] = parseInt(arr[0]) - 1;\r\n } else {\r\n arr[0] = 12;\r\n }\r\n }\r\n\r\n incrementMinute(arr: any[]) {\r\n arr[1] = parseInt(arr[1]) + 15;\r\n if (parseInt(arr[1]) == 60) {\r\n arr[1] = \"00\";\r\n } else if (parseInt(arr[1]) == 0) {\r\n arr[1] = \"00\";\r\n }\r\n else if(parseInt(arr[1]) > 60){\r\n let res = parseInt(arr[1]) - 60;\r\n arr[1] = res < 10 ? `0${res}` : res.toString(); \r\n }\r\n }\r\n\r\n decrementMinute(arr: any) {\r\n arr[1] = parseInt(arr[1]) - 15;\r\n if (parseInt(arr[1]) < 0) {\r\n let res = 60 + parseInt(arr[1]);\r\n arr[1] = res;\r\n } else if (parseInt(arr[1]) == 0) {\r\n arr[1] = \"00\";\r\n }\r\n else if(arr[1] < 10){\r\n arr[1]= `0${arr[1]}`;\r\n }\r\n }\r\n\r\n changeStartTimeHour(increment: boolean) {\r\n if (increment) {\r\n this.incrementHour(this.selectedFromTime);\r\n } else {\r\n this.decrementHour(this.selectedFromTime);\r\n }\r\n this.startTimeHourChange(this.selectedFromTime[0].toString());\r\n }\r\n\r\n changeEndTimeHour(increment: boolean) {\r\n if (increment) {\r\n this.incrementHour(this.selectedToTime);\r\n } else {\r\n this.decrementHour(this.selectedToTime);\r\n }\r\n this.endTimeHourChange(this.selectedToTime[0].toString());\r\n }\r\n\r\n changeEndTimeMinute(increment: boolean) {\r\n if (increment) {\r\n this.incrementMinute(this.selectedToTime);\r\n } else {\r\n this.decrementMinute(this.selectedToTime);\r\n }\r\n this.endTimeMinChange(this.selectedToTime[1].toString());\r\n }\r\n\r\n changeStartTimeMinute(increment: boolean) {\r\n if (increment) {\r\n this.incrementMinute(this.selectedFromTime);\r\n } else {\r\n this.decrementMinute(this.selectedFromTime);\r\n }\r\n this.startTimeMinChange(this.selectedFromTime[1].toString());\r\n }\r\n\r\n applyTimeFilters() {\r\n\r\n this.applyTimeFilterOnData();\r\n this.applySortingOnFilteredData();\r\n this.emitData();\r\n this.setInitialRowsForTable();\r\n this.annaFilterService.updateStateOfTheCurrentFilterTab(this.annaSortService.columnSortState);\r\n this.closeTooltip();\r\n\r\n }\r\n\r\n applyTimeFilterOnData(){\r\n if(this.showFilterComponent && this.isFilterChanged){\r\n let currentSelectedTimeFilter: {fromTime: string, toTime:string, includeMulti: boolean, includeZero: boolean, includeTimeRange: boolean} = {\r\n fromTime: null,\r\n toTime: null,\r\n includeMulti: false,\r\n includeZero: false,\r\n includeTimeRange: false,\r\n };\r\n \r\n let fromTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(\r\n this.selectedFromTime[0] + \":\" + this.selectedFromTime[1] + \" \" + this.selectedFromTime[2],\r\n true\r\n );\r\n let fromTime24HrFormat = fromTime24HrFormatArr[0] + \":\" + fromTime24HrFormatArr[1] + \":00\";\r\n \r\n let toTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(\r\n this.selectedToTime[0] + \":\" + this.selectedToTime[1] + \" \" + this.selectedToTime[2],\r\n true\r\n );\r\n let toTime24HrFormat = toTime24HrFormatArr[0] + \":\" + toTime24HrFormatArr[1] + \":00\";\r\n \r\n currentSelectedTimeFilter = { fromTime: fromTime24HrFormat, toTime: toTime24HrFormat, includeMulti: this.multiTimeCheckboxChecked, \r\n includeZero: this.zeroTimeCheckboxChecked, includeTimeRange: this.enterTimeCheckboxChecked};\r\n \r\n let isFiltered = this.annaFilterService.reOrderAppliedFiltersState(this.clonedTableData,currentSelectedTimeFilter);\r\n this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio,currentSelectedTimeFilter);\r\n this.tableData = this.annaFilterService.filterData(this.clonedTableData, \"\");\r\n \r\n if(!isFiltered){\r\n this.annaFilterService.tooltipSelectedMap.delete(this.annaFilterService.selectedRadio);\r\n }\r\n this.annaSortService.noSortingAppliedData = cloneDeep(this.tableData);\r\n this.disableEnableEachColumnTooltipIcon(); \r\n \r\n }\r\n }\r\n\r\n closeTimeFilter() {\r\n this.selectedFromTime = cloneDeep(this.clonedSelectedFromTime);\r\n this.selectedToTime = cloneDeep(this.clonedSelectedToTime);\r\n this.closeTooltip();\r\n }\r\n\r\n disableTimeFilterApplyButton() {\r\n\r\n if(this.showFilterComponent && this.showSortComponent){\r\n let isFilterChanged = this.checkIfTimeTooltipIsFiltered();\r\n let isSortChanged = this.checkIfSortingChanged();\r\n this.disableTimeFilterApplyBtn = !this.validateTimeFilterInput() || (!isSortChanged && !isFilterChanged );\r\n }\r\n else if(this.showFilterComponent){\r\n this.disableTimeFilterApplyBtn = !this.validateTimeFilterInput() || !this.checkIfTimeTooltipIsFiltered();\r\n }\r\n else if(this.showSortComponent){\r\n this.disableTimeFilterApplyBtn = !this.checkIfSortingChanged();\r\n }\r\n\r\n }\r\n\r\n validateTimeFilterInput(){\r\n if(this.startTimeHourErr || this.startTimeMinErr || this.endTimeHourErr || this.endTimeMinErr){\r\n return false;\r\n }\r\n\r\n if (!this.multiTimeCheckboxChecked && !this.zeroTimeCheckboxChecked && !this.enterTimeCheckboxChecked) {\r\n return false;\r\n }\r\n\r\n let timeFormat = \"HH:mm:ss\";\r\n\r\n let startTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(\r\n this.selectedFromTime[0] + \":\" + this.selectedFromTime[1] + \" \" + this.selectedFromTime[2],\r\n true\r\n );\r\n let startTime24HrFormat = startTime24HrFormatArr[0] + \":\" + startTime24HrFormatArr[1] + \":00\";\r\n let endTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(\r\n this.selectedToTime[0] + \":\" + this.selectedToTime[1] + \" \" + this.selectedToTime[2],\r\n true\r\n );\r\n let endTime24HrFormat = endTime24HrFormatArr[0] + \":\" + endTime24HrFormatArr[1] + \":00\";\r\n\r\n return !(moment(startTime24HrFormat, timeFormat).isAfter(moment(endTime24HrFormat, timeFormat))); \r\n }\r\n\r\n sortedData(event: any) {\r\n if (event.type == \"none\") {\r\n this.tableData = this.annaFilterService.filterData(this.clonedTableData, \"\");\r\n } else {\r\n this.tableData = event.data;\r\n }\r\n this.sortingAppliedToTable.emit(this.tableData);\r\n }\r\n\r\n checkIfSortingIsApplied() {\r\n for(let [key,value] of this.annaSortService.columnSortState.entries()){\r\n if(value == \"ASC\"){\r\n this.tableData = cloneDeep(this.annaSortService.sortDataForComponentOtherThanLurAndCsrPage(true,this.tableData,key));\r\n }\r\n else if(value == \"DESC\"){\r\n this.tableData = cloneDeep(this.annaSortService.sortDataForComponentOtherThanLurAndCsrPage(false,this.tableData,key));\r\n }\r\n }\r\n }\r\n\r\n\r\n disableEnableEachColumnTooltipIcon() {\r\n this.tableHeaders.forEach(header => {\r\n \r\n header.headerInfo.forEach(item => {\r\n if (item.showTooltipIcon) {\r\n \r\n let values = [];\r\n item.disableTooltipIcon = true;\r\n\r\n item.filterSortObjectKeys.forEach(key => {\r\n \r\n if(key == \"period\"){\r\n let uniqStartDate = uniq(this.tableData.map((u: { [x: string]: any; }) => u[\"startDate\"]));\r\n let uniqEndDate = uniq(this.tableData.map((u: { [x: string]: any; }) => u[\"endDate\"]));\r\n\r\n item.disableTooltipIcon = (uniqStartDate.length > 1 || uniqEndDate.length > 1) ? false : true; \r\n }\r\n else{\r\n values = this.tableData.map((u: { [x: string]: any; }) => u[key]);\r\n if(uniq(values).filter(n => n!=null).length > 1){\r\n item.disableTooltipIcon = false;\r\n }\r\n }\r\n \r\n })\r\n }\r\n \r\n });\r\n });\r\n }\r\n\r\n setMarginLeftForFilterIcon(){\r\n let elementArr = this.viewChildTableHeaders.toArray();\r\n elementArr.forEach((item) => {\r\n let childDivElements = item.nativeElement.children;\r\n \r\n if (childDivElements.length == 2) {\r\n let firstParagraphWidth = childDivElements[0].children[0];\r\n let secondParagraphWidth = childDivElements[1].children[0];\r\n \r\n if(firstParagraphWidth.offsetWidth > secondParagraphWidth.offsetWidth){\r\n let diff = firstParagraphWidth.offsetWidth - secondParagraphWidth.offsetWidth;\r\n if(childDivElements[0].children.length == 2){\r\n childDivElements[0].children[1].style.marginLeft = 4 + 'px';\r\n }\r\n \r\n if(childDivElements[1].children.length == 2){\r\n\r\n childDivElements[1].children[1].style.marginLeft = diff + 4 + 'px';\r\n }\r\n }\r\n else{\r\n let diff = secondParagraphWidth.offsetWidth - firstParagraphWidth.offsetWidth;\r\n if(childDivElements[0].children.length == 2){\r\n childDivElements[0].children[1].style.marginLeft = diff + 4 + 'px';\r\n }\r\n \r\n if(childDivElements[1].children.length == 2){\r\n\r\n childDivElements[1].children[1].style.marginLeft = 4 + 'px';\r\n }\r\n }\r\n \r\n }\r\n });\r\n }\r\n\r\n dataRowClicked(rowData: any) {\r\n this.rowClicked.emit(rowData);\r\n }\r\n\r\n radioButtonClicked(data: any, action: string, isDisabled: boolean) {\r\n if (!isDisabled) {\r\n this.radioButtonSelected.emit({ data, action });\r\n }\r\n }\r\n\r\n bindTheValueToSellerGroupTooltip(sellerGroupHierarchy: SellerGroupHierarchy[], tooltip: any): void {\r\n if (this.hierarchyTooltip && this.hierarchyTooltip.open) {\r\n this.hierarchyTooltip.close();\r\n }\r\n this.sellerGroupHierarchy = sellerGroupHierarchy;\r\n this.hierarchyTooltip = tooltip;\r\n this.hierarchyTooltip.open();\r\n }\r\n\r\n iconClicked(rowData: any,iconClass: string){\r\n this.gtIconClicked.emit({data: rowData,iconClass: iconClass});\r\n }\r\n\r\n svgIconClicked(data: GtColumnIconEmittedData){\r\n this.gtSVGIconClicked.emit(data);\r\n }\r\n\r\n textActionClicked(rowData: any,id: number){\r\n this.gtTextActionClicked.emit({data:rowData,id});\r\n }\r\n\r\n viewDetailsClicked(rowData: any){\r\n this.gtViewDetailClicked.emit({data:rowData});\r\n }\r\n\r\n setColumnSortStateMap(){\r\n this.tableHeaders.forEach(column => {\r\n column.headerInfo.forEach( (header) => {\r\n if(header.showTooltipIcon && header.isSortRequired){\r\n header.isSortRequired.forEach( (item,index) => {\r\n if(item){\r\n this.annaSortService.columnSortState.set(header.filterSortObjectKeys[index], \"DEFAULT\"); \r\n }\r\n })\r\n }\r\n })\r\n });\r\n }\r\n\r\n storeSortTypeInTempVariable(event: SortType){\r\n this.tempSortOrder = event;\r\n this.disableApplyButtonOfSelectedFilter();\r\n }\r\n\r\n unCheckAllCheckbox(){\r\n this.tooltipOptions.forEach(item => {\r\n item.isSelected = false;\r\n let index = this.clonedTooltipOptions.findIndex(opt => opt.id == item.id);\r\n this.clonedTooltipOptions[index].isSelected = false;\r\n \r\n });\r\n this.selectedCheckboxOptionsCount = 0;\r\n this.disableSelectAll = false;\r\n this.disableClearAll = true;\r\n this.disableCheckboxApply = true;\r\n }\r\n\r\n selectAllCheckbox(){\r\n this.tooltipOptions.forEach(item => {\r\n item.isSelected = true;\r\n let index = this.clonedTooltipOptions.findIndex(opt => opt.id == item.id);\r\n this.clonedTooltipOptions[index].isSelected = true;\r\n });\r\n this.selectedCheckboxOptionsCount = this.tooltipOptions.length;\r\n this.disableSelectAll = true;\r\n this.disableClearAll = false;\r\n this.disableCheckboxFilterApplyButton();\r\n }\r\n\r\n searchForTheItem(str: string){\r\n if(str){\r\n this.tooltipOptions = cloneDeep(this.clonedTooltipOptions.filter(item => item.label.toString().includes(str)));\r\n \r\n this.tooltipOptions.forEach(element => {\r\n element.label = this.boldString(element.label,str);\r\n });\r\n \r\n if(this.tooltipOptions.length > 0){\r\n let unselectedItems = this.tooltipOptions.filter((item) => !item.isSelected);\r\n let selectedItems = this.tooltipOptions.filter((item) => item.isSelected); \r\n this.disableSelectAll = unselectedItems.length == 0;\r\n this.disableClearAll = selectedItems.length == 0;\r\n this.selectedCheckboxOptionsCount = selectedItems.length;\r\n this.disableCheckboxApply = (selectedItems.length == 0 || !this.checkIfCheckboxTooltipIsFiltered());\r\n \r\n }\r\n else{\r\n this.selectedCheckboxOptionsCount = 0;\r\n this.disableCheckboxApply = true;\r\n this.disableClearAll = true;\r\n this.disableSelectAll = true;\r\n }\r\n }\r\n else{\r\n this.tooltipOptions = cloneDeep(this.clonedTooltipOptions);\r\n let unselectedItems = this.tooltipOptions.filter(item => !item.isSelected);\r\n let selectedItems = this.tooltipOptions.filter(item => item.isSelected);\r\n this.selectedCheckboxOptionsCount = selectedItems.length;\r\n this.disableSelectAll = unselectedItems.length == 0;\r\n this.disableClearAll = selectedItems.length == 0;\r\n this.disableCheckboxFilterApplyButton();\r\n }\r\n }\r\n\r\n boldString(str: string, find: string){\r\n var re = new RegExp(find, 'g');\r\n return str.replace(re, '<b>'+find+'</b>');\r\n }\r\n\r\n removeBoldElementFromString(originalString: string){\r\n let firstRegExp = new RegExp('<b>','g');\r\n let secondRegExp = new RegExp('</b>','g');\r\n\r\n let ret = originalString.replace(firstRegExp,'');\r\n return ret.replace(secondRegExp,'');\r\n }\r\n\r\n clearSearchedItem(){\r\n this.searchItem = \"\";\r\n this.searchForTheItem(\"\");\r\n }\r\n\r\n calendarDateChanged(event: any){\r\n this.calendarSelection = event;\r\n this.disableCalendarApplyButton();\r\n }\r\n\r\n disableCalendarApplyButton() {\r\n\r\n if(this.showFilterComponent && this.showSortComponent){\r\n let isFilterChanged = this.checkIfDateTooltipIsFiltered();\r\n let isSortChanged = this.checkIfSortingChanged();\r\n \r\n this.disableCalendarApplyBtn = !(this.calendarSelection.fromDate && this.calendarSelection.toDate) || (!isSortChanged && !isFilterChanged );\r\n }\r\n else if(this.showFilterComponent){\r\n this.disableCalendarApplyBtn = !(this.calendarSelection.fromDate && this.calendarSelection.toDate) || !this.checkIfDateTooltipIsFiltered();\r\n }\r\n else if(this.showSortComponent){\r\n this.disableCalendarApplyBtn = !this.checkIfSortingChanged();\r\n }\r\n\r\n }\r\n\r\n setInitialValueMapForTimeFilter(key: string) {\r\n let data = this.clonedTableData.filter(\r\n (obj) => ![\"\", \"-\", null, \"0\", \"<multi>\"].includes(obj[key]));\r\n\r\n let timeArr = map(data, key);\r\n timeArr.sort((a, b) => {\r\n return this.annaDateTimeFormatService.sortByTimeAscending(a, b);\r\n });\r\n \r\n let obj = {\r\n fromTime: timeArr[0],\r\n toTime: timeArr[timeArr.length - 1],\r\n includeMulti: false,\r\n includeZero: false,\r\n includeTimeRange: false\r\n };\r\n \r\n if (\r\n this.gtGeneralConfig.component === \"SPOTDETAILS\" ||\r\n this.gtGeneralConfig.component === \"EXCLUDEINVENTORYPOPUP\"\r\n ) {\r\n let includeMulti =\r\n this.clonedTableData.findIndex((obj) => obj[key] == \"<multi>\") !=\r\n -1;\r\n let includeZero =\r\n this.clonedTableData.findIndex((obj) => obj[key] == \"0\") != -1;\r\n let includeTimeRange =\r\n this.clonedTableData.findIndex(\r\n (obj) => obj[key] != \"0\" && obj[key] != \"<multi>\"\r\n ) != -1;\r\n \r\n let obj = {\r\n fromTime: timeArr[0],\r\n toTime: timeArr[timeArr.length - 1],\r\n includeMulti: includeMulti,\r\n includeZero: includeZero,\r\n includeTimeRange: includeTimeRange,\r\n };\r\n this.annaFilterService.initialValueMap.set(key, obj);\r\n } \r\n else if (this.gtGeneralConfig.component === \"RATING\") {\r\n this.setInitialValueMapForRatingPageTimeFilter(key);\r\n } else {\r\n this.annaFilterService.initialValueMap.set(key, obj);\r\n }\r\n}\r\n\r\nsetInitialValueMapForRatingPageTimeFilter(key: string){\r\n let includeMulti =\r\n this.clonedTableData.findIndex((obj) => obj[key][0] == \"<multi>\") !=\r\n -1;\r\n let includeZero =\r\n this.clonedTableData.findIndex((obj) => obj[key][0] == \"0\") != -1;\r\n let includeTimeRange =\r\n this.clonedTableData.findIndex(\r\n (obj) => obj[key][0] != \"0\" && obj[key][0] != \"<multi>\"\r\n ) != -1;\r\n\r\n let startTimeArr = map(this.clonedTableData, \"startTime\");\r\n let endTimeArr = map(this.clonedTableData, \"endTime\");\r\n\r\n startTimeArr.sort((a, b) => {\r\n return this.annaDateTimeFormatService.sortByTimeAscending(a, b);\r\n });\r\n\r\n endTimeArr.sort((a, b) => {\r\n return this.annaDateTimeFormatService.sortByTimeDescending(a, b);\r\n });\r\n\r\n let obj = {\r\n fromTime: startTimeArr[0],\r\n toTime: endTimeArr[0],\r\n includeMulti: includeMulti,\r\n includeZero: includeZero,\r\n includeTimeRange: includeTimeRange,\r\n };\r\n this.annaFilterService.initialValueMap.set(key, obj); \r\n }\r\n\r\n startTimeHourChange(val: string){\r\n if(val.length == 0 || 1 > parseInt(val) || parseInt(val) > 12){\r\n this.startTimeHourErr = true;\r\n }\r\n else{\r\n this.startTimeHourErr = false;\r\n }\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n startTimeMinChange(val: string){\r\n if(val.length != 2 || 0 > parseInt(val) || parseInt(val) > 59){\r\n this.startTimeMinErr = true;\r\n }\r\n else{\r\n this.startTimeMinErr = false;\r\n }\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n endTimeHourChange(val: string){\r\n if(val.length == 0 || 1 > parseInt(val) || parseInt(val) > 12){\r\n this.endTimeHourErr = true;\r\n }\r\n else{\r\n this.endTimeHourErr = false;\r\n }\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n endTimeMinChange(val: string){\r\n if(val.length != 2 || 0 > parseInt(val) || parseInt(val) > 59){\r\n this.endTimeMinErr = true;\r\n }\r\n else{\r\n this.endTimeMinErr = false;\r\n }\r\n this.disableTimeFilterApplyButton();\r\n }\r\n\r\n checkIfCheckboxTooltipIsFiltered(){\r\n let currentSelectedValue = [];\r\n let previousSelectedValue = [];\r\n\r\n if(this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)){\r\n previousSelectedValue = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);\r\n \r\n if(!this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n let initialValue = sortBy(uniq(this.clonedTableData.map(item => item[this.annaFilterService.selectedRadio])));\r\n this.annaFilterService.initialValueMap.set(this.annaFilterService.selectedRadio,initialValue);\r\n }\r\n\r\n }\r\n else if(this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n previousSelectedValue = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n else{\r\n previousSelectedValue = sortBy(uniq(this.clonedTableData.map(item => item[this.annaFilterService.selectedRadio])));\r\n this.annaFilterService.initialValueMap.set(this.annaFilterService.selectedRadio,previousSelectedValue);\r\n }\r\n\r\n if(this.tooltipOptions){\r\n\r\n currentSelectedValue = sortBy(this.tooltipOptions.filter(item => item.isSelected).map(item => item.value));\r\n\r\n if(!this.searchItem && currentSelectedValue.length == this.tooltipOptions.length && this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n currentSelectedValue = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n \r\n }\r\n\r\n let blankIndex = currentSelectedValue.findIndex((item: string) => item == null);\r\n if(blankIndex != -1){\r\n currentSelectedValue = sortBy(currentSelectedValue);\r\n }\r\n\r\n this.isFilterChanged = !isEqual(currentSelectedValue,previousSelectedValue);\r\n return this.isFilterChanged;\r\n }\r\n\r\n checkIfTimeTooltipIsFiltered(){\r\n let currentSelectedTimeFilter: {fromTime: string, toTime:string, includeMulti: boolean, includeZero: boolean, includeTimeRange: boolean} = {\r\n fromTime: null,\r\n toTime: null,\r\n includeMulti: false,\r\n includeZero: false,\r\n includeTimeRange: false,\r\n };\r\n \r\n let previousSelectedTimeFilter;\r\n \r\n if(this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)){\r\n previousSelectedTimeFilter = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n else if(this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n previousSelectedTimeFilter = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n \r\n let fromTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(\r\n this.selectedFromTime[0] + \":\" + this.selectedFromTime[1] + \" \" + this.selectedFromTime[2],\r\n true\r\n );\r\n let fromTime24HrFormat = fromTime24HrFormatArr[0] + \":\" + fromTime24HrFormatArr[1] + \":00\";\r\n\r\n let toTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(\r\n this.selectedToTime[0] + \":\" + this.selectedToTime[1] + \" \" + this.selectedToTime[2],\r\n true\r\n );\r\n let toTime24HrFormat = toTime24HrFormatArr[0] + \":\" + toTime24HrFormatArr[1] + \":00\";\r\n \r\n currentSelectedTimeFilter = { fromTime: fromTime24HrFormat, toTime: toTime24HrFormat, includeMulti: this.multiTimeCheckboxChecked, \r\n includeZero: this.zeroTimeCheckboxChecked, includeTimeRange: this.enterTimeCheckboxChecked};\r\n \r\n this.isFilterChanged = !isEqual(previousSelectedTimeFilter, currentSelectedTimeFilter);\r\n return this.isFilterChanged; \r\n }\r\n\r\n checkIfDateTooltipIsFiltered(){\r\n let currentSelectedDate = cloneDeep(this.calendarSelection);\r\n let previousSelectedDate: {fromDate: any, toDate: any} = {fromDate: null, toDate: null};\r\n\r\n if(this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)){\r\n previousSelectedDate = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);\r\n \r\n if(!this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n this.setInitialValueMapForDateFilter();\r\n }\r\n\r\n }\r\n else if(this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n previousSelectedDate = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n else{\r\n this.setInitialValueMapForDateFilter();\r\n previousSelectedDate = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n\r\n if(currentSelectedDate.fromDate && currentSelectedDate.toDate){\r\n let fromDate = {year: currentSelectedDate.fromDate.year,month: currentSelectedDate.fromDate.month,day: currentSelectedDate.fromDate.day};\r\n let toDate = {year: currentSelectedDate.toDate.year,month: currentSelectedDate.toDate.month,day: currentSelectedDate.toDate.day};\r\n \r\n if(isEqual(this.calendarMinEnabledDate,fromDate) && isEqual(this.calendarMaxEnabledDate,toDate) && this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n currentSelectedDate = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n else{\r\n currentSelectedDate.fromDate = moment(this.annaDateTimeFormatService.convertNgbDateToMoment(currentSelectedDate.fromDate));\r\n currentSelectedDate.toDate = moment(this.annaDateTimeFormatService.convertNgbDateToMoment(currentSelectedDate.toDate));\r\n }\r\n this.isFilterChanged = !isEqual(previousSelectedDate,currentSelectedDate);\r\n }\r\n\r\n return this.isFilterChanged;\r\n }\r\n\r\n setInitialValueMapForDateFilter(){\r\n let minMaxDate;\r\n\r\n if(this.annaFilterService.selectedRadio == \"period\"){\r\n let minStartDate = this.annaFilterService.returnMinAndMaxDate(this.clonedTableData, \"startDate\");\r\n let maxEndDate = this.annaFilterService.returnMinAndMaxDate(this.clonedTableData,\"endDate\");\r\n minMaxDate = [minStartDate[0],maxEndDate[1]];\r\n }\r\n else{\r\n minMaxDate = this.annaFilterService.returnMinAndMaxDate(this.clonedTableData,this.annaFilterService.selectedRadio);\r\n }\r\n let selectedDate = {fromDate: minMaxDate[0], toDate: minMaxDate[1]};\r\n this.annaFilterService.initialValueMap.set(this.annaFilterService.selectedRadio, selectedDate);\r\n }\r\n\r\n checkIfSliderTooltipIsFiltered(){\r\n let currentSliderData: {min:any, max: any} = {min: null , max: null};\r\n let previousSliderData: {min:any, max: any} = {min: \"\", max: \"\"};\r\n\r\n // if(this.isMinTextBoxEmpty){\r\n // currentSliderData.min = this.options.floor;\r\n // currentSliderData.max = this.sliderMaxValue;\r\n // }\r\n // else if(this.isMaxTextBoxEmpty){\r\n // currentSliderData.max = this.options.ceil;\r\n // currentSliderData.min = this.sliderMinValue;\r\n // }\r\n // else{\r\n currentSliderData.max = this.sliderEnteredMaxValue;\r\n currentSliderData.min = this.sliderEnteredMinValue;\r\n // }\r\n\r\n if(this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)){\r\n previousSliderData = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);\r\n if(!this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n this.setInitialValueMapForSliderFilter();\r\n }\r\n }\r\n else if(this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio)){\r\n previousSliderData = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n else{\r\n this.setInitialValueMapForSliderFilter();\r\n previousSliderData = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n\r\n if(currentSliderData.min == this.options.floor && currentSliderData.max == this.options.ceil && this.annaFilterService.initialValueMap.has(this.annaFilterService.selectedRadio) ){\r\n currentSliderData = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);\r\n }\r\n\r\n this.isFilterChanged = !isEqual(previousSliderData,currentSliderData);\r\n return this.isFilterChanged;\r\n }\r\n\r\n setInitialValueMapForSliderFilter(){\r\n let minValue = this.annaFilterService.returnMaxAndMinValue(this.clonedTableData, this.annaFilterService.selectedRadio, true);\r\n let maxValue = this.annaFilterService.returnMaxAndMinValue(this.clonedTableData, this.annaFilterService.selectedRadio, false);\r\n let sliderData = { min: minValue, max: maxValue };\r\n this.annaFilterService.initialValueMap.set(this.annaFilterService.selectedRadio, sliderData);\r\n \r\n }\r\n\r\n checkIfSortingChanged(){\r\n this.isSortChanged = this.tempSortOrder != null && this.tempSortOrder != this.annaSortService.columnSortState.get(this.annaFilterService.selectedRadio);;\r\n console.log(this.isSortChanged);\r\n return this.isSortChanged;\r\n }\r\n\r\n disableApplyButtonOfSelectedFilter(){\r\n let header = this.annaFilterService.selectedRadio;\r\n\r\n if (this.annaFilterService.calendarSet.has(header)) {\r\n this.disableCalendarApplyButton();\r\n } else if (this.annaFilterService.sliderSet.has(header)) {\r\n this.disableSliderApplyBtn();\r\n } else if (this.annaFilterService.timeSet.has(header)) {\r\n this.disableTimeFilterApplyButton();\r\n } else {\r\n this.disableCheckboxFilterApplyButton();\r\n }\r\n }\r\n\r\n disableCheckboxFilterApplyButton(){\r\n let selectedItems = this.showFilterComponent ? this.tooltipOptions.filter(item => item.isSelected) : [];\r\n \r\n if(this.showFilterComponent && this.showSortComponent){\r\n let isFilterChanged = this.checkIfCheckboxTooltipIsFiltered();\r\n let isSortChanged = this.checkIfSortingChanged();\r\n this.disableCheckboxApply = selectedItems.length == 0 || (!isSortChanged && !isFilterChanged );\r\n }\r\n else if(this.showFilterComponent){\r\n this.disableCheckboxApply = selectedItems.length == 0 || !this.checkIfCheckboxTooltipIsFiltered();\r\n }\r\n else if(this.showSortComponent){\r\n this.disableCheckboxApply = !this.checkIfSortingChanged();\r\n }\r\n }\r\n\r\n trackByTooltipModelId(index: number , item: TooltipModel){\r\n return item.id;\r\n }\r\n\r\n setActiveStateObject(){\r\n this.annaFilterService.isFilterSortActive = {};\r\n this.tableHeaders.forEach(item => {\r\n item.headerInfo.forEach(header => {\r\n if(header.showTooltipIcon){\r\n let key = header.filterSortObjectKeys.join(',');\r\n header.joinedFilterSortObjectKeys = key;\r\n this.annaFilterService.isFilterSortActive[key] = false;\r\n }\r\n })\r\n });\r\n }\r\n\r\n setIsDifference(value: boolean){\r\n this.isDifferenceLessThan25Percent = value;\r\n }\r\n\r\n resetIndex(){\r\n this.start = 0;\r\n this.end = this.limit + this.start;\r\n }\r\n\r\n onTableContainerScroll(e: any) {\r\n const tableViewHeight = e.target.offsetHeight; // viewport\r\n const tableScrollHeight = e.target.scrollHeight; // length of all table\r\n const scrollLocation = e.target.scrollTop; // how far user scrolled\r\n \r\n // If the user has scrolled within 150px of the bottom, add more data\r\n const buffer = 150;\r\n const limit = tableScrollHeight - tableViewHeight - buffer;\r\n if (scrollLocation > limit) {\r\n let data = this.getTableData(this.start, this.end);\r\n this.renderedData = this.renderedData.concat(data);\r\n this.updateIndex();\r\n }\r\n }\r\n\r\n getTableData(start: number, end: number) {\r\n return this.tableData.filter((value, index) => index >= start && index < end);\r\n }\r\n\r\n updateIndex() {\r\n this.start = this.end;\r\n this.end = this.limit + this.start;\r\n }\r\n\r\n setInitialRowsForTable(){\r\n this.resetIndex();\r\n this.renderedData = this.getTableData(this.start,this.end);\r\n this.updateIndex();\r\n }\r\n\r\n tableContainerScrolled(event: any){\r\n this.isScrolledLeft = event.target.scrollLeft > 0;\r\n }\r\n}\r\n","<div class=\"table-container\" (scroll)=\"tableContainerScrolled($event)\" [ngClass]=\"{ 'scroll-left-shadow-effect': isScrolledLeft }\" (scroll)=\"onTableContainerScroll($event)\">\r\n <div\r\n [class]=\"gtGeneralConfig.tableContainerName\"\r\n class=\"horizontal-scroll-for-table-container\"\r\n [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n ((gtDimension.rowHeight + (includeBorderInTableHeight ? rowBorderWidth : 0)) * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight + ( includeBorderInTableHeight ? (2 * rowBorderWidth) : 0))) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\"\r\n >\r\n <table class=\"gt\" [ngClass]=\"tableClass\" mat-table [dataSource]=\"renderedData\">\r\n <tr\r\n class=\"header-row\"\r\n mat-header-row\r\n *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"\r\n ></tr>\r\n <tr\r\n class=\"total-row\"\r\n mat-header-row\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\r\n [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length ) ||\r\n (showNoDataToDisplay) || \r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"\r\n ></tr>\r\n <tr\r\n [class]=\"rowData.gtClass\"\r\n [ngClass]=\"{'no-border-tr': showNoDataToDisplay}\"\r\n mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\"\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n [style.background-color]=\"rowData.backgroundColor\"\r\n [style.border]=\"rowData.border\" (click)=\"dataRowClicked(rowData)\"\r\n ></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container [matColumnDef]=\"column.colName\" *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\">\r\n <td mat-header-cell *matHeaderCellDef [attr.colspan]=\"column.colspan\" class=\"{{column.class}}\">\r\n <strong>{{ column.data }}</strong>\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br>\r\n <span>{{column.lowerData}}</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage\">\r\n <i class=\"mi mdi-info-outline info-label\" container=\"body\"\r\n [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\" placement=\"bottom\"></i>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container [matColumnDef]=\"columnDef.headerInfo[0].objectKey\" *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\">\r\n <th #tableHeader nowrap mat-header-cell *matHeaderCellDef [style.width]=\"columnDef.width\">\r\n <div class=\"row mx-0\" *ngFor=\"let header of columnDef.headerInfo; let j = index;\"> \r\n <p\r\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\r\n >\r\n {{ header.name }}\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"impsInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"ratingInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"rateInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span\r\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div *ngIf=\"gtGeneralConfig.showAllColumnFilter\" class=\"sort-filter-container\">\r\n <ng-container *ngIf=\"header.showTooltipIcon\">\r\n <!-- Active tooltip Functionality -->\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys], \r\n disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])\r\n }\"\r\n [ngbTooltip]=\"filterTooltip\"\r\n placement=\"bottom left-top auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-checkbox-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])\r\n }\"\r\n [ngbTooltip]=\"sliderToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-slider-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t1=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t1, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])\r\n }\"\r\n [ngbTooltip]=\"datePickerTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-datepicker-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t2=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t2, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])\r\n }\"\r\n [ngbTooltip]=\"weekPickerToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])\r\n }\"\r\n [ngbTooltip]=\"timeFilterToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-time-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t4=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t4, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!header.showTooltipIcon\">\r\n <span id=\"no-filter-space\"></span><br />\r\n </ng-container>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'DRR'\">\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <ng-container *ngIf=\"showSkeletonLoading\">\r\n <td mat-cell>\r\n <ngx-skeleton-loader count=\"1\" [theme]=\"{ height: '10px', display: 'block' }\">\r\n </ngx-skeleton-loader>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container\r\n *ngFor=\"let subline of columnDef.headerInfo; let sublineIndex = index; trackBy: trackByFn\"\r\n >\r\n <td\r\n mat-cell\r\n *ngIf=\"!ROW_DATA['hide' + subline.objectKey + 'Td']\"\r\n [attr.rowspan]=\"ROW_DATA[subline.objectKey + 'Rowspan']\"\r\n >\r\n <ng-container [ngSwitch]=\"subline.typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i [class]=\"ROW_DATA.iconClass\"></i>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[subline.objectKey]\"\r\n [ngClass]=\"{ 'disable-checkbox': ROW_DATA[subline.isDisabledKey] }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectRow(ROW_DATA)\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[subline.objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': ROW_DATA[subline.isDisabledKey] }\"\r\n (click)=\"selectUnselectRow(ROW_DATA)\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group\r\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\r\n >\r\n <ng-container\r\n *ngFor=\"let radioButton of ROW_DATA['RadioButtonConfig']; let last = last\"\r\n >\r\n <mat-radio-button\r\n value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\"\r\n (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \"\r\n >{{ radioButton.label }}</mat-radio-button\r\n ><br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ ROW_DATA[subline.objectKey] }}\r\n\r\n <ng-container\r\n *ngIf=\"\r\n subline.objectKey == 'Status' && (ROW_DATA['Remarks'] !== null)\r\n \"\r\n >\r\n <i\r\n class=\"mi mdi-info-outline remarks-tooltip\"\r\n [ngbTooltip]=\"columnInfoTooltip\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"remarks-info-tooltip\"\r\n #t=\"ngbTooltip\"\r\n ></i>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"gtGeneralConfig.component != 'DRR'\">\r\n <td mat-cell *matCellDef=\"let ROW_DATA\" [style.background]=\"ROW_DATA.backgroundColor\">\r\n <ngx-skeleton-loader *ngIf=\"showSkeletonLoading\" count=\"1\" [theme]=\"{ height: '10px', display: 'block' }\">\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container *ngIf=\"tableData.length > 0 && !showNoDataToDisplay\">\r\n <div showEllipsisTextOnHover *ngFor=\"let subline of columnDef.headerInfo; let subLineIndex = index; trackBy: trackByFn\">\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i [class]=\"ROW_DATA.iconClass\" (click)=\"iconClicked(ROW_DATA,ROW_DATA.iconClass)\"></i>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <anna-core-anna-icon-column [componentName]=\"gtGeneralConfig.component\" [objectKey]=\"subline.objectKey\" [dataObject]=\"ROW_DATA\" (onColumnIconClicked)=\"svgIconClicked($event)\"></anna-core-anna-icon-column>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <button *ngFor=\"let text of ROW_DATA.textActions\" (click)=\"textActionClicked(ROW_DATA,text.id)\" [disabled]=\"text.isDisabled\" class=\"{{text.class}}\">{{text.name}}</button>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\r\n <span>{{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}</span>\r\n <i\r\n *ngIf=\"subline.objectKey == 'inventoryCode' && ROW_DATA['isSellerGroup'] && gtGeneralConfig.component == 'RATING' \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\"\r\n #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip\"\r\n (mouseenter)=\"bindTheValueToSellerGroupTooltip(ROW_DATA.sellerGroupHierarchy, info)\">\r\n </i>\r\n\r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageRating' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showRatingAverageIcon'] \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip\"\r\n [ngbTooltip]=\"postedRatingDifference\"\r\n >\r\n </i>\r\n \r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageImpression' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showImpressionAverageIcon'] \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip\"\r\n [ngbTooltip]=\"postedImpDifference\"\r\n >\r\n </i>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\r\n <p *ngIf=\"ROW_DATA.descriptionMessage || ROW_DATA.descriptionEmailReferenceNum\">\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container *ngIf=\"ROW_DATA.descriptionEmailReferenceNum\">\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a\r\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'PDF' || ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\">\r\n <a *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\" (click)=\"viewDetailsClicked(ROW_DATA)\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">View details</button>\r\n </a> \r\n </ng-container>\r\n \r\n <a href=\"{{ ROW_DATA.descriptionEmailUrl }}\" target=\"_blank\" *ngIf=\"ROW_DATA.descriptionEmailUrl\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-container\r\n *ngIf=\"\r\n gtGeneralConfig.page === 'SpotDetails' &&\r\n columnDef.headerInfo[subLineIndex].objectKey === 'Status'\r\n \"\r\n >\r\n <img\r\n src=\"assets/images/Undo-Credit-Icon.svg\"\r\n style=\"cursor: pointer\"\r\n class=\"img-circle\"\r\n alt=\"User Image\"\r\n height=\"15px\"\r\n width=\"15px\"\r\n *ngIf=\"ROW_DATA.AllowUserToUndoMarkForCredit\"\r\n (click)=\"undoCreditedSpot(ROW_DATA)\"\r\n />\r\n <img\r\n src=\"assets/images/Undo-MG-Icon.svg\"\r\n style=\"cursor: pointer\"\r\n class=\"img-circle\"\r\n alt=\"User Image\"\r\n height=\"15px\"\r\n width=\"15px\"\r\n *ngIf=\"ROW_DATA.AllowUserToUndoMarkForMakeGood\"\r\n (click)=\"undoMgSpot(ROW_DATA)\"\r\n />\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"showNoDataToDisplay\">\r\n <div>\r\n {{null}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <anna-core-no-data-lib [width]=\"noDataWidth\" [marginTop]=\"marginTop\" *ngIf=\"!showSkeletonLoading && showNoDataToDisplay\"> </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n \r\n <div class=\"radio-container\" *ngIf=\"showFilterTooltipTabs\">\r\n <div [ngClass]=\"{'full-width': filterTabObjects.length == 1}\" *ngFor=\"let data of filterTabObjects\">\r\n <p class=\"filter-tab\" [title]=\"data.label\" (click)=\"populateTooltipDataBasedOnSelectedRadio(data)\" [ngClass]=\"{'active': annaFilterService.selectedRadio == data.key}\" *ngIf=\"filterTabObjects.length > 0\">{{ data.label }}</p>\r\n </div>\r\n </div>\r\n \r\n <div class=\"checkbox-sort\" *ngIf=\"showSortComponent\">\r\n <anna-core-sort-lib [ngClass]=\"{'no-bottom-border': !showFilterComponent}\"\r\n (sortOptionClicked)=\"storeSortTypeInTempVariable($event)\" [sortObjectKey]=\"annaFilterService.selectedRadio\"></anna-core-sort-lib>\r\n </div>\r\n \r\n <ng-container *ngIf=\"showFilterComponent\">\r\n <p class=\"d-flex justify-content-between\">\r\n <button class=\"filter-text-btn\" [disabled]=\"disableClearAll\" (click)=\"unCheckAllCheckbox()\">Clear All</button>\r\n <button class=\"filter-text-btn\" [disabled]=\"disableSelectAll\" (click)=\"selectAllCheckbox()\">Select All</button>\r\n </p>\r\n <p class=\"search-box\">\r\n <i class=\"mi mdi-search search-icon search-icon-position\"></i>\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search\"\r\n class=\"search-input\"\r\n style=\"margin-left: 2px; border: none; padding: 0px\"\r\n [(ngModel)]=\"searchItem\"\r\n (ngModelChange)=\"searchForTheItem($event)\"\r\n />\r\n <i class=\"mdi mdi-close search-bar-close\" [ngClass]=\"{'disable-close-icon': (!searchItem || searchItem.length == 0) }\"\r\n (click)=\"clearSearchedItem()\"></i>\r\n\r\n </p>\r\n <div style=\"position:relative\">\r\n <!-- Track By func -->\r\n <cdk-virtual-scroll-viewport itemSize=\"18\" [style.height.px]=\"heightOfCheckboxTooltipFilter\" class=\"dropdown-data-container\">\r\n <p *cdkVirtualFor=\"let option of tooltipOptions\" class=\"input example-item\" (click)=\"selectUnselectCheckbox(option)\">\r\n <span *ngIf=\"option.isSelected\" role=\"button\" class=\"mi mdi-check-box check-box\"></span>\r\n <span *ngIf=\"!option.isSelected\" role=\"button\" class=\"mi mdi-check-box-outline-blank check-box unchecked\"></span>\r\n <span class=\"data\" title=\"{{ option.value }}\" [innerHTML]=\"option.label\"></span>\r\n </p>\r\n </cdk-virtual-scroll-viewport>\r\n <div style=\"position: absolute; top:0; left:0; width:100%; height:100%; pointer-events:none\"></div>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"closeCheckboxFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableCheckboxApply }\"\r\n (click)=\"applyFilters()\"\r\n [disabled]=\"disableCheckboxApply\"\r\n >\r\n Apply\r\n <span *ngIf=\"showFilterComponent\">({{ selectedCheckboxOptionsCount == tooltipOptions.length && tooltipOptions.length != 0 && !searchItem? 'All': selectedCheckboxOptionsCount }})</span>\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n \r\n <div class=\"radio-container\" *ngIf=\"showFilterTooltipTabs\">\r\n <div *ngFor=\"let data of filterTabObjects\">\r\n <p class=\"filter-tab\" [title]=\"data.label\" (click)=\"populateTooltipDataBasedOnSelectedRadio(data)\" [ngClass]=\"{'active': annaFilterService.selectedRadio == data.key}\" *ngIf=\"filterTabObjects.length > 0\">{{ data.label }}</p> \r\n </div>\r\n </div>\r\n <!-- <button class=\"column-clear-all align-center\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">\r\n Clear filter\r\n </button> -->\r\n \r\n <anna-core-sort-lib *ngIf=\"showSortComponent\" [ngClass]=\"{'no-bottom-border': !showFilterComponent}\"\r\n (sortOptionClicked)=\"storeSortTypeInTempVariable($event)\" [sortObjectKey]=\"annaFilterService.selectedRadio\"></anna-core-sort-lib>\r\n \r\n <ng-container *ngIf=\"showFilterComponent\">\r\n <button class=\"column-clear-all\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">Clear filter</button>\r\n <section class=\"min-maxContainer\">\r\n <input\r\n type=\"number\"\r\n class=\"slider-text\"\r\n step=\"{{ sliderFilterTextBoxStep }}\"\r\n [(ngModel)]=\"sliderMinValue\"\r\n (ngModelChange)=\"minValueChanged($event)\"\r\n [ngClass]=\"{'red-border': showSliderMinValueError}\"\r\n placeholder=\"Min\"\r\n />\r\n <span>To</span>\r\n <input\r\n type=\"number\"\r\n class=\"slider-text\"\r\n step=\"{{ sliderFilterTextBoxStep }}\"\r\n [(ngModel)]=\"sliderMaxValue\"\r\n (ngModelChange)=\"maxValueChanged($event)\"\r\n [ngClass]=\"{'red-border': showSliderMaxValueError}\"\r\n placeholder=\"Max\"\r\n />\r\n </section>\r\n <div class=\"sidebar-slider\">\r\n <ngx-slider\r\n class=\"filter-slider\"\r\n [value]=\"sliderMinValue\"\r\n [highValue]=\"sliderMaxValue\"\r\n [options]=\"options\"\r\n ></ngx-slider>\r\n </div>\r\n </ng-container>\r\n \r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"cancelSliderFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableSliderApplyButton }\"\r\n (click)=\"applySliderFilter()\"\r\n [disabled]=\"disableSliderApplyButton\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <div class=\"radio-container\" *ngIf=\"showFilterTooltipTabs\">\r\n <div *ngFor=\"let data of filterTabObjects\">\r\n <p class=\"filter-tab\" [title]=\"data.label\" (click)=\"populateTooltipDataBasedOnSelectedRadio(data)\" [ngClass]=\"{'active': annaFilterService.selectedRadio == data.key}\" *ngIf=\"filterTabObjects.length > 0\">{{ data.label }}</p>\r\n </div>\r\n </div>\r\n\r\n <anna-core-sort-lib *ngIf=\"showSortComponent\" [ngClass]=\"{'no-bottom-border': !showFilterComponent}\"\r\n (sortOptionClicked)=\"storeSortTypeInTempVariable($event)\" [sortObjectKey]=\"annaFilterService.selectedRadio\"></anna-core-sort-lib>\r\n \r\n <ng-container *ngIf=\"showFilterComponent\">\r\n <div class=\"datepicker-container\">\r\n <button class=\"column-clear-all\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">\r\n Clear filter\r\n </button>\r\n <anna-core-calendar-filter-lib\r\n [minDate]=\"calendarMinEnabledDate\"\r\n [maxDate]=\"calendarMaxEnabledDate\"\r\n [selectedFromDate]=\"selectedMinDate\"\r\n [selectedToDate]=\"selectedMaxDate\"\r\n (selectedDate) = \"calendarDateChanged($event)\"\r\n [label]=\"selectedLabel\"\r\n >\r\n </anna-core-calendar-filter-lib>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"cancelInDateFilter()\">Cancel</button>\r\n <button class=\"button\" (click)=\"applyDateFilter()\" [ngClass]=\"{ disabled: disableCalendarApplyBtn }\"\r\n [disabled]=\"disableCalendarApplyBtn\">Apply</button>\r\n </div>\r\n \r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n \r\n <div class=\"radio-container\" *ngIf=\"showFilterTooltipTabs\">\r\n <div *ngFor=\"let data of filterTabObjects\">\r\n <p class=\"filter-tab\" [title]=\"data.label\" (click)=\"populateTooltipDataBasedOnSelectedRadio(data)\" [ngClass]=\"{'active': annaFilterService.selectedRadio == data.key}\" *ngIf=\"filterTabObjects.length > 0\">{{ data.label }}</p>\r\n </div>\r\n </div>\r\n\r\n <anna-core-sort-lib *ngIf=\"showSortComponent\" [ngClass]=\"{'no-bottom-border': !showFilterComponent}\"\r\n (sortOptionClicked)=\"storeSortTypeInTempVariable($event)\" [sortObjectKey]=\"annaFilterService.selectedRadio\"></anna-core-sort-lib>\r\n \r\n <ng-container *ngIf=\"showFilterComponent\">\r\n <button class=\"column-clear-all\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">Clear filter</button>\r\n <div\r\n class=\"time-filter-checkboxes\"\r\n *ngIf=\"gtGeneralConfig.component == 'SPOTDETAILS' || gtGeneralConfig.component == 'EXCLUDEINVENTORYPOPUP' || gtGeneralConfig.component == 'RATING'\"\r\n >\r\n <!-- Multi time option checkbox -->\r\n <div class=\"d-flex align-items-center\" style=\"padding: 0.5rem 0 0.5rem 0.5rem\" *ngIf=\"showMultiTimeCheckbox\">\r\n <span\r\n *ngIf=\"multiTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectOrUnselectMultiTimeCheckbox()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!multiTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n (click)=\"selectOrUnselectMultiTimeCheckbox()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n <p style=\"margin-left: 2px\">Include Multi</p>\r\n </div>\r\n <!-- Zero time option checkbox -->\r\n <div class=\"d-flex align-items-center\" style=\"padding: 0.5rem 0 0.5rem 0.5rem\" *ngIf=\"showZeroTimeCheckbox\">\r\n <span\r\n *ngIf=\"zeroTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectOrUnselectZeroTimeCheckbox()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!zeroTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n (click)=\"selectOrUnselectZeroTimeCheckbox()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n <p style=\"margin-left: 2px\">Include Zero</p>\r\n </div>\r\n <!-- Enter time range option checkbox -->\r\n <div class=\"d-flex align-items-center\" style=\"padding: 0.5rem 0 0.5rem 0.5rem\" *ngIf=\"showEnterTimeCheckbox\">\r\n <span\r\n *ngIf=\"enterTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectOrUnselectEnterTimeCheckbox()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!enterTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n (click)=\"selectOrUnselectEnterTimeCheckbox()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n <p style=\"margin-left: 2px\">Enter time range</p>\r\n </div>\r\n </div>\r\n <div class=\"time-label-container\">\r\n <label>From</label>\r\n </div>\r\n <div class=\"time-container\">\r\n <input class=\"form-control numberInput\" [ngClass]=\"{'error-border': startTimeHourErr}\" [(ngModel)]=\"selectedFromTime[0]\" type=\"text\" (ngModelChange)=\"startTimeHourChange($event)\" />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeStartTimeHour(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeStartTimeHour(false)\"></i>\r\n </div>\r\n <span class=\"dot\">:</span>\r\n <input class=\"form-control numberInput\" [ngClass]=\"{'error-border': startTimeMinErr}\" [(ngModel)]=\"selectedFromTime[1]\" type=\"text\" (ngModelChange)=\"startTimeMinChange($event)\"/>\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeStartTimeMinute(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeStartTimeMinute(false)\"></i>\r\n </div>\r\n <div>\r\n <mat-button-toggle-group [(ngModel)]=\"selectedFromTime[2]\" (ngModelChange)=\"disableTimeFilterApplyButton()\">\r\n <mat-button-toggle value=\"AM\">\r\n <span>AM</span>\r\n </mat-button-toggle>\r\n <mat-button-toggle value=\"PM\">\r\n <span>PM</span>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n\r\n <div class=\"time-label-container\">\r\n <label>To</label>\r\n </div>\r\n <div class=\"time-container\">\r\n <input class=\"form-control numberInput\" [(ngModel)]=\"selectedToTime[0]\" [ngClass]=\"{'error-border': endTimeHourErr}\" (ngModelChange)=\"endTimeHourChange($event)\" type=\"text\" />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeEndTimeHour(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeEndTimeHour(false)\"></i>\r\n </div>\r\n <span class=\"dot\">:</span>\r\n <input class=\"form-control numberInput\" [ngClass]=\"{'error-border': endTimeMinErr}\" [(ngModel)]=\"selectedToTime[1]\" (ngModelChange)=\"endTimeMinChange($event)\" type=\"text\" />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeEndTimeMinute(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeEndTimeMinute(false)\"></i>\r\n </div>\r\n <div>\r\n <mat-button-toggle-group [(ngModel)]=\"selectedToTime[2]\" (ngModelChange)=\"disableTimeFilterApplyButton()\">\r\n <mat-button-toggle value=\"AM\">\r\n <span>AM</span>\r\n </mat-button-toggle>\r\n <mat-button-toggle value=\"PM\">\r\n <span>PM</span>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"closeTimeFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableTimeFilterApplyBtn }\"\r\n (click)=\"applyTimeFilters()\"\r\n [disabled]=\"disableTimeFilterApplyBtn\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p style=\"padding: 0.5rem; color: black;white-space: nowrap;\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class =\"first-row\" >Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\" >Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class =\"first-row\" >Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\" >Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span>{{ data.inventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span>{{ data.program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\r\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class =\"first-row\" >The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average rating is {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average impression is {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n import { Directionality } from \"@angular/cdk/bidi\";\r\n import { ListRange } from \"@angular/cdk/collections\";\r\n import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n Inject,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation\r\n } from \"@angular/core\";\r\n import {\r\n animationFrameScheduler,\r\n asapScheduler,\r\n Observable,\r\n Subject,\r\n Observer,\r\n Subscription\r\n } from \"rxjs\";\r\n import { auditTime, startWith, takeUntil } from \"rxjs/operators\";\r\n import {\r\n CdkVirtualScrollViewport,\r\n CdkScrollable,\r\n CdkVirtualScrollRepeater,\r\n VIRTUAL_SCROLL_STRATEGY,\r\n VirtualScrollStrategy,\r\n ScrollDispatcher,\r\n ViewportRuler,\r\n ExtendedScrollToOptions\r\n } from \"@angular/cdk/scrolling\";\r\nimport { AnnaGenericTableService } from \"@annalib/anna-core/src/lib/anna-core-shared-lib\";\r\n \r\n /** Checks if the given ranges are equal. */\r\n function rangesEqual(r1: ListRange, r2: ListRange): boolean {\r\n return r1.start == r2.start && r1.end == r2.end;\r\n }\r\n \r\n /**\r\n * Scheduler to be used for scroll events. Needs to fall back to\r\n * something that doesn't rely on requestAnimationFrame on environments\r\n * that don't support it (e.g. server-side rendering).\r\n */\r\n const SCROLL_SCHEDULER =\r\n typeof requestAnimationFrame !== \"undefined\"\r\n ? animationFrameScheduler\r\n : asapScheduler;\r\n \r\n /**\r\n * A viewport that virtualizes its scrolling with the help of `CdkVirtualForOf`.\r\n * Uses `top: #px` instead of `transform: translateY(#px)` like the cdk virtual scroll viewport does\r\n * which avoids flickering of elements in the transformed container with `position: sticky`.\r\n */\r\n @Component({\r\n selector: \"anna-table-virtual-scroll-viewport\",\r\n templateUrl: \"anna-table-virtual-scroll-viewport.component.html\",\r\n styleUrls: [\"anna-table-virtual-scroll-viewport.component.scss\"],\r\n host: {\r\n class: \"anna-table-virtual-scroll-viewport\",\r\n \"[class.anna-table-virtual-scroll-orientation-horizontal]\":\r\n 'orientation === \"horizontal\"',\r\n \"[class.anna-table-virtual-scroll-orientation-vertical]\":\r\n 'orientation !== \"horizontal\"'\r\n },\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: CdkScrollable,\r\n useExisting: AnnaTableVirtualScrollViewportComponent\r\n },\r\n {\r\n provide: CdkVirtualScrollViewport,\r\n useExisting: AnnaTableVirtualScrollViewportComponent\r\n }\r\n ]\r\n })\r\n export class AnnaTableVirtualScrollViewportComponent extends CdkScrollable\r\n implements OnInit, OnDestroy {\r\n /** Emits when the viewport is detached from a CdkVirtualForOf. */\r\n private _detachedSubject = new Subject<void>();\r\n \r\n /** Emits when the rendered range changes. */\r\n private _renderedRangeSubject = new Subject<ListRange>();\r\n \r\n /** The direction the viewport scrolls. */\r\n @Input()\r\n get orientation() {\r\n return this._orientation;\r\n }\r\n set orientation(orientation: \"horizontal\" | \"vertical\") {\r\n if (this._orientation !== orientation) {\r\n this._orientation = orientation;\r\n this._calculateSpacerSize();\r\n }\r\n }\r\n private _orientation: \"horizontal\" | \"vertical\" = \"vertical\";\r\n \r\n // Note: we don't use the typical EventEmitter here because we need to subscribe to the scroll\r\n // strategy lazily (i.e. only if the user is actually listening to the events). We do this because\r\n // depending on how the strategy calculates the scrolled index, it may come at a cost to\r\n // performance.\r\n /** Emits when the index of the first element visible in the viewport changes. */\r\n @Output() scrolledIndexChange: Observable<number> = new Observable(\r\n (observer: Observer<number>) =>\r\n this._scrollStrategy.scrolledIndexChange.subscribe(index =>\r\n Promise.resolve().then(() =>\r\n this.ngZone.run(() => observer.next(index))\r\n )\r\n )\r\n );\r\n \r\n /** The element that wraps the rendered content. */\r\n @ViewChild(\"contentWrapper\", { static: true }) _contentWrapper: ElementRef<\r\n HTMLElement\r\n >;\r\n \r\n /** A stream that emits whenever the rendered range changes. */\r\n renderedRangeStream: Observable<ListRange> = this._renderedRangeSubject;\r\n \r\n /**\r\n * The total size of all content (in pixels), including content that is not currently rendered.\r\n */\r\n private _totalContentSize = 0;\r\n \r\n /** A string representing the `style.width` property value to be used for the spacer element. */\r\n _totalContentWidth = \"\";\r\n \r\n /** A string representing the `style.height` property value to be used for the spacer element. */\r\n _totalContentHeight = \"\";\r\n \r\n /**\r\n * The CSS transform applied to the rendered subset of items so that they appear within the bounds\r\n * of the visible viewport.\r\n */\r\n private _renderedContentTransform: string;\r\n \r\n /** The currently rendered range of indices. */\r\n private _renderedRange: ListRange = { start: 0, end: 0 };\r\n \r\n /** The length of the data bound to this viewport (in number of items). */\r\n private _dataLength = 0;\r\n \r\n /** The size of the viewport (in pixels). */\r\n private _viewportSize = 0;\r\n \r\n /** the currently attached CdkVirtualScrollRepeater. */\r\n private _forOf: CdkVirtualScrollRepeater<any> | null;\r\n \r\n /** The last rendered content offset that was set. */\r\n private _renderedContentOffset = 0;\r\n \r\n /**\r\n * Whether the last rendered content offset was to the end of the content (and therefore needs to\r\n * be rewritten as an offset to the start of the content).\r\n */\r\n private _renderedContentOffsetNeedsRewrite = false;\r\n \r\n /** Whether there is a pending change detection cycle. */\r\n private _isChangeDetectionPending = false;\r\n \r\n /** A list of functions to run after the next change detection cycle. */\r\n private _runAfterChangeDetection: Function[] = [];\r\n \r\n /** Subscription to changes in the viewport size. */\r\n private _viewportChanges = Subscription.EMPTY;\r\n \r\n constructor(\r\n public override elementRef: ElementRef<HTMLElement>,\r\n private _changeDetectorRef: ChangeDetectorRef,\r\n ngZone: NgZone,\r\n @Optional()\r\n @Inject(VIRTUAL_SCROLL_STRATEGY)\r\n private _scrollStrategy: VirtualScrollStrategy,\r\n @Optional() dir: Directionality,\r\n scrollDispatcher: ScrollDispatcher,\r\n viewportRuler: ViewportRuler,\r\n private annaGtService: AnnaGenericTableService\r\n ) {\r\n super(elementRef, scrollDispatcher, ngZone, dir);\r\n \r\n if (!_scrollStrategy) {\r\n throw Error(\r\n 'Error: cdk-virtual-scroll-viewport requires the \"itemSize\" property to be set.'\r\n );\r\n }\r\n \r\n this._viewportChanges = viewportRuler.change().subscribe(() => {\r\n this.checkViewportSize();\r\n });\r\n }\r\n \r\n override ngOnInit() {\r\n super.ngOnInit();\r\n \r\n // It's still too early to measure the viewport at this point. Deferring with a promise allows\r\n // the Viewport to be rendered with the correct size before we measure. We run this outside the\r\n // zone to avoid causing more change detection cycles. We handle the change detection loop\r\n // ourselves instead.\r\n this.ngZone.runOutsideAngular(() =>\r\n Promise.resolve().then(() => {\r\n this._measureViewportSize();\r\n this._scrollStrategy.attach(this as any);\r\n \r\n this.elementScrolled()\r\n .pipe(\r\n // Start off with a fake scroll event so we properly detect our initial position.\r\n startWith(null),\r\n // Collect multiple events into one until the next animation frame. This way if\r\n // there are multiple scroll events in the same frame we only need to recheck\r\n // our layout once.\r\n auditTime(0, SCROLL_SCHEDULER)\r\n )\r\n .subscribe(() => { this._scrollStrategy.onContentScrolled(); this.annaGtService.virtualScrollSubject.next(true);});\r\n \r\n this._markChangeDetectionNeeded();\r\n })\r\n );\r\n }\r\n \r\n override ngOnDestroy() {\r\n this.detach();\r\n this._scrollStrategy.detach();\r\n \r\n // Complete all subjects\r\n this._renderedRangeSubject.complete();\r\n this._detachedSubject.complete();\r\n this._viewportChanges.unsubscribe();\r\n \r\n super.ngOnDestroy();\r\n }\r\n \r\n /** Attaches a `CdkVirtualScrollRepeater` to this viewport. */\r\n attach(forOf: CdkVirtualScrollRepeater<any>) {\r\n if (this._forOf) {\r\n throw Error(\"CdkVirtualScrollViewport is already attached.\");\r\n }\r\n \r\n // Subscribe to the data stream of the CdkVirtualForOf to keep track of when the data length\r\n // changes. Run outside the zone to avoid triggering change detection, since we're managing the\r\n // change detection loop ourselves.\r\n this.ngZone.runOutsideAngular(() => {\r\n this._forOf = forOf;\r\n this._forOf.dataStream\r\n .pipe(takeUntil(this._detachedSubject))\r\n .subscribe(data => {\r\n const newLength = data.length;\r\n if (newLength !== this._dataLength) {\r\n this._dataLength = newLength;\r\n this._scrollStrategy.onDataLengthChanged();\r\n }\r\n this._doChangeDetection();\r\n });\r\n });\r\n }\r\n \r\n /** Detaches the current `CdkVirtualForOf`. */\r\n detach() {\r\n this._forOf = null;\r\n this._detachedSubject.next();\r\n }\r\n \r\n /** Gets the length of the data bound to this viewport (in number of items). */\r\n getDataLength(): number {\r\n return this._dataLength;\r\n }\r\n \r\n /** Gets the size of the viewport (in pixels). */\r\n getViewportSize(): number {\r\n return this._viewportSize;\r\n }\r\n \r\n // TODO(mmalerba): This is technically out of sync with what's really rendered until a render\r\n // cycle happens. I'm being careful to only call it after the render cycle is complete and before\r\n // setting it to something else, but its error prone and should probably be split into\r\n // `pendingRange` and `renderedRange`, the latter reflecting whats actually in the DOM.\r\n \r\n /** Get the current rendered range of items. */\r\n getRenderedRange(): ListRange {\r\n return this._renderedRange;\r\n }\r\n \r\n /**\r\n * Sets the total size of all content (in pixels), including content that is not currently\r\n * rendered.\r\n */\r\n setTotalContentSize(size: number) {\r\n if (this._totalContentSize !== size) {\r\n this._totalContentSize = size;\r\n this._calculateSpacerSize();\r\n this._markChangeDetectionNeeded();\r\n }\r\n }\r\n \r\n /** Sets the currently rendered range of indices. */\r\n setRenderedRange(range: ListRange) {\r\n if (!rangesEqual(this._renderedRange, range)) {\r\n this._renderedRangeSubject.next((this._renderedRange = range));\r\n this._markChangeDetectionNeeded(() =>\r\n this._scrollStrategy.onContentRendered()\r\n );\r\n }\r\n }\r\n \r\n /**\r\n * Gets the offset from the start of the viewport to the start of the rendered data (in pixels).\r\n */\r\n getOffsetToRenderedContentStart(): number | null {\r\n return this._renderedContentOffsetNeedsRewrite\r\n ? null\r\n : this._renderedContentOffset;\r\n }\r\n \r\n /**\r\n * Sets the offset from the start of the viewport to either the start or end of the rendered data\r\n * (in pixels).\r\n */\r\n setRenderedContentOffset(offset: number) {\r\n let top = `${Number(offset)}px`;\r\n this._renderedContentOffset = offset;\r\n if (this._renderedContentTransform != top) {\r\n // We know this value is safe because we parse `offset` with `Number()` before passing it\r\n // into the string.\r\n this._renderedContentTransform = top;\r\n this._markChangeDetectionNeeded(() => {\r\n if (this._renderedContentOffsetNeedsRewrite) {\r\n this._renderedContentOffset -= this.measureRenderedContentSize();\r\n this._renderedContentOffsetNeedsRewrite = false;\r\n this.setRenderedContentOffset(this._renderedContentOffset);\r\n } else {\r\n this._scrollStrategy.onRenderedOffsetChanged();\r\n }\r\n });\r\n }\r\n }\r\n \r\n /**\r\n * Scrolls to the given offset from the start of the viewport. Please note that this is not always\r\n * the same as setting `scrollTop` or `scrollLeft`. In a horizontal viewport with right-to-left\r\n * direction, this would be the equivalent of setting a fictional `scrollRight` property.\r\n * @param offset The offset to scroll to.\r\n * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.\r\n */\r\n scrollToOffset(offset: number, behavior: ScrollBehavior = \"auto\") {\r\n const options: ExtendedScrollToOptions = { behavior, top: offset };\r\n this.scrollTo(options);\r\n }\r\n \r\n /**\r\n * Scrolls to the offset for the given index.\r\n * @param index The index of the element to scroll to.\r\n * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.\r\n */\r\n scrollToIndex(index: number, behavior: ScrollBehavior = \"auto\") {\r\n this._scrollStrategy.scrollToIndex(index, behavior);\r\n }\r\n \r\n /**\r\n * Gets the current scroll offset from the start of the viewport (in pixels).\r\n * @param from The edge to measure the offset from. Defaults to 'top' in vertical mode and 'start'\r\n * in horizontal mode.\r\n */\r\n // CHANGES@ANNALIB added override to functions\r\n override measureScrollOffset(\r\n from?: \"top\" | \"left\" | \"right\" | \"bottom\" | \"start\" | \"end\"\r\n ): number {\r\n return from\r\n ? super.measureScrollOffset(from)\r\n : super.measureScrollOffset(\"top\");\r\n }\r\n \r\n /** Measure the combined size of all of the rendered items. */\r\n measureRenderedContentSize(): number {\r\n const contentEl = this._contentWrapper.nativeElement;\r\n return contentEl.offsetHeight;\r\n }\r\n \r\n /**\r\n * Measure the total combined size of the given range. Throws if the range includes items that are\r\n * not rendered.\r\n */\r\n measureRangeSize(range: ListRange): number {\r\n if (!this._forOf) {\r\n return 0;\r\n }\r\n return this._forOf.measureRangeSize(range, this.orientation);\r\n }\r\n \r\n /** Update the viewport dimensions and re-render. */\r\n checkViewportSize() {\r\n // TODO: Cleanup later when add logic for handling content resize\r\n this._measureViewportSize();\r\n this._scrollStrategy.onDataLengthChanged();\r\n }\r\n \r\n /** Measure the viewport size. */\r\n private _measureViewportSize() {\r\n const viewportEl = this.elementRef.nativeElement;\r\n this._viewportSize = viewportEl.clientHeight;\r\n }\r\n \r\n /** Queue up change detection to run. */\r\n private _markChangeDetectionNeeded(runAfter?: Function) {\r\n if (runAfter) {\r\n this._runAfterChangeDetection.push(runAfter);\r\n }\r\n \r\n // Use a Promise to batch together calls to `_doChangeDetection`. This way if we set a bunch of\r\n // properties sequentially we only have to run `_doChangeDetection` once at the end.\r\n if (!this._isChangeDetectionPending) {\r\n this._isChangeDetectionPending = true;\r\n this.ngZone.runOutsideAngular(() =>\r\n Promise.resolve().then(() => {\r\n this._doChangeDetection();\r\n })\r\n );\r\n }\r\n }\r\n \r\n /** Run change detection. */\r\n private _doChangeDetection() {\r\n this._isChangeDetectionPending = false;\r\n \r\n // Apply the content transform. The transform can't be set via an Angular binding because\r\n // bypassSecurityTrustStyle is banned in Google. However the value is safe, it's composed of\r\n // string literals, a variable that can only be 'X' or 'Y', and user input that is run through\r\n // the `Number` function first to coerce it to a numeric value.\r\n this._contentWrapper.nativeElement.style.top = this._renderedContentTransform;\r\n // Apply changes to Angular bindings. Note: We must call `markForCheck` to run change detection\r\n // from the root, since the repeated items are content projected in. Calling `detectChanges`\r\n // instead does not properly check the projected content.\r\n this.ngZone.run(() => this._changeDetectorRef.markForCheck());\r\n \r\n const runAfterChangeDetection = this._runAfterChangeDetection;\r\n this._runAfterChangeDetection = [];\r\n for (const fn of runAfterChangeDetection) {\r\n fn();\r\n }\r\n }\r\n \r\n /** Calculates the `style.width` and `style.height` for the spacer element. */\r\n private _calculateSpacerSize() {\r\n this._totalContentHeight = `${this._totalContentSize}px`;\r\n this._totalContentWidth = \"\";\r\n }\r\n }\r\n ","<!--\r\n Wrap the rendered content in an element that will be used to offset it based on the scroll\r\n position.\r\n-->\r\n<div #contentWrapper class=\"anna-table-virtual-scroll-content-wrapper\">\r\n\t<ng-content></ng-content>\r\n</div>\r\n<!--\r\n Spacer used to force the scrolling container to the correct size for the *total* number of items\r\n so that the scrollbar captures the size of the entire data set.\r\n-->\r\n<div class=\"app-table-virtual-scroll-spacer\" [style.width]=\"_totalContentWidth\" [style.height]=\"_totalContentHeight\">\r\n</div>","import { coerceNumberProperty, NumberInput } from \"@angular/cdk/coercion\";\r\nimport {\r\n CdkVirtualScrollViewport,\r\n VirtualScrollStrategy,\r\n VIRTUAL_SCROLL_STRATEGY\r\n} from \"@angular/cdk/scrolling\";\r\nimport { AfterContentInit, ContentChildren, Directive, forwardRef, Input, QueryList, SimpleChanges } from \"@angular/core\";\r\nimport { MatHeaderRowDef } from \"@angular/material/table\";\r\nimport { Subject } from \"rxjs\";\r\nimport { distinctUntilChanged } from \"rxjs/operators\";\r\nimport { AnnaFilterService } from \"@annalib/anna-core/src/lib/anna-core-shared-lib\";\r\n\r\n\r\n/**\r\n * A custom scroll strategy that accepts a static row height, static header height,\r\n * and a buffer size. The strategy \r\n */\r\nexport class AnnaFixedRowSizeTableVirtualScrollStrategy\r\n implements VirtualScrollStrategy {\r\n \r\n viewport: CdkVirtualScrollViewport | null;\r\n\r\n private buffer: number;\r\n\r\n private headerHeight: number;\r\n\r\n private rowHeight: number;\r\n\r\n constructor(rowHeight: number, buffer: number, headerHeight: number) {\r\n this.updateRowHeightAndBuffer(rowHeight, buffer, headerHeight);\r\n }\r\n\r\n private _scrolledIndexChange = new Subject<number>();\r\n\r\n scrolledIndexChange = this._scrolledIndexChange.pipe(distinctUntilChanged());\r\n\r\n /**\r\n * Attaches this scroll strategy to a viewport.\r\n * @param viewport The viewport to attach this strategy to.\r\n */\r\n attach(viewport: CdkVirtualScrollViewport): void {\r\n this.viewport = viewport;\r\n this.updateTotalContentSize();\r\n this.updateRenderedRange();\r\n }\r\n\r\n /**\r\n * Detaches this scroll strategy from the currently attached viewport.\r\n */\r\n detach(): void {\r\n this._scrolledIndexChange.complete();\r\n this.viewport = null;\r\n }\r\n\r\n onContentScrolled(): void {\r\n this.updateRenderedRange();\r\n }\r\n\r\n onDataLengthChanged(): void {\r\n this.updateTotalContentSize();\r\n this.updateRenderedRange();\r\n }\r\n\r\n onContentRendered(): void {\r\n // This method is useful for virtual scroll strategies that measure the rendered\r\n // content to determine its height. This scroll strategy assumes that rows have\r\n // a static height, so there's no need to implement this method.\r\n }\r\n\r\n onRenderedOffsetChanged(): void {\r\n // Similar to onContentRendered, this method is useful for virtual scroll strategies\r\n // that need to track the offset as it changes. This scroll strategy is always able\r\n // to calculate the correct offset from other values, so there's no need to implement\r\n // this method.\r\n }\r\n\r\n scrollToIndex(index: number, behavior: ScrollBehavior): void {\r\n this.viewport?.scrollToOffset(index * this.rowHeight, behavior);\r\n }\r\n\r\n /**\r\n * Update the item size and buffer size.\r\n * @param rowHeight The height of a row in the virtually scrolling table.\r\n * @param buffer The number of rows to buffer outside the viewport.\r\n * @param headerHeight The total height of the table header, including all header rows.\r\n */\r\n updateRowHeightAndBuffer(rowHeight: number, buffer: number, headerHeight: number) {\r\n this.rowHeight = rowHeight;\r\n this.buffer = buffer;\r\n this.headerHeight = headerHeight;\r\n this.updateTotalContentSize();\r\n this.updateRenderedRange();\r\n }\r\n\r\n protected updateRenderedRange() {\r\n if (!this.viewport) {\r\n return;\r\n }\r\n\r\n const viewportSize = this.viewport.getViewportSize();\r\n const dataLength = this.viewport.getDataLength();\r\n const scrollOffset = this.viewport.measureScrollOffset();\r\n\r\n // the index of the first item that would be at least partially visible in the viewport\r\n let firstVisibleIndex = Math.floor((scrollOffset + this.headerHeight) / this.rowHeight);\r\n \r\n // if the buffer size is 10 but the first visible item is at, say, index 7\r\n // then the buffered items must be 7, because we don't have 10 items available to buffer.\r\n const bufferedItems = Math.min(AnnaFilterService.bufferSize, firstVisibleIndex);\r\n\r\n const itemsInViewport = Math.ceil(viewportSize / this.rowHeight);\r\n const itemsToRender = itemsInViewport + this.buffer;\r\n\r\n // Clamp the new range between 0 and dataLength\r\n const newStart = Math.max(0, firstVisibleIndex - bufferedItems);\r\n const newEnd = Math.min(dataLength, firstVisibleIndex + itemsToRender);\r\n\r\n const newRange = {\r\n start: newStart,\r\n end: newEnd\r\n };\r\n\r\n const newOffset = this.rowHeight * (firstVisibleIndex - bufferedItems);\r\n this.viewport.setRenderedContentOffset(newOffset);\r\n this.viewport.setRenderedRange(newRange);\r\n this._scrolledIndexChange.next(Math.floor(firstVisibleIndex));\r\n }\r\n\r\n protected updateTotalContentSize() {\r\n this.viewport?.setTotalContentSize(this.viewport.getDataLength() * this.rowHeight);\r\n }\r\n}\r\n\r\n/**\r\n * Provider factory for `FixedSizeVirtualScrollStrategy` that simply extracts the already created\r\n * `FixedSizeVirtualScrollStrategy` from the given directive.\r\n * @param fixedSizeDir The instance of `CdkFixedSizeVirtualScroll` to extract the\r\n * `FixedSizeVirtualScrollStrategy` from.\r\n */\r\nexport function fixedSizeVirtualScrollStrategyFactory(\r\n fixedSizeDir: AnnaFixedRowSizeTableVirtualScrollStrategyDirective\r\n) {\r\n return fixedSizeDir.scrollStrategy;\r\n}\r\n\r\n@Directive({\r\n selector: \"cdk-virtual-scroll-viewport[rowHeight], anna-table-virtual-scroll-viewport[rowHeight]\",\r\n providers: [\r\n {\r\n provide: VIRTUAL_SCROLL_STRATEGY,\r\n useFactory: fixedSizeVirtualScrollStrategyFactory,\r\n deps: [forwardRef(() => AnnaFixedRowSizeTableVirtualScrollStrategyDirective)]\r\n }\r\n ]\r\n})\r\nexport class AnnaFixedRowSizeTableVirtualScrollStrategyDirective implements AfterContentInit {\r\n /** The height of rows in the table (in pixels). Defaults to 30. */\r\n @Input()\r\n set rowHeight(value: number) { this._rowHeight = coerceNumberProperty(value); }\r\n get rowHeight(): number { return this._rowHeight; }\r\n private _rowHeight = 30;\r\n\r\n /**\r\n * The height of header rows in the table (in pixels). Defaults to 30.\r\n */\r\n @Input()\r\n set headerRowHeight(value: number) { this._headerRowHeight = coerceNumberProperty(value); }\r\n get headerRowHeight(): number { return this._headerRowHeight; }\r\n private _headerRowHeight: number = 30;\r\n\r\n /**\r\n * The number of buffered rows rendered beyond the viewport.\r\n * If the number of buffered rows dips below this number, more rows will be rendered. Defaults to 20.\r\n */\r\n @Input()\r\n set buffer(value: number) { \r\n this._buffer = coerceNumberProperty(value);}\r\n get buffer(): number { return this._buffer; }\r\n private _buffer = 20;\r\n\r\n @Input()\r\n set headerRows(value: number | null | undefined) { this._headerRows = coerceNumberProperty(value, undefined); }\r\n get headerRows(): number | null | undefined { return this._headerRows; }\r\n private _headerRows: number | null | undefined = null;\r\n\r\n /**\r\n * Using ContentChildren here fails to pick up row defs that are added programmatically,\r\n * but we don't really have a way of handling that without accessing private methods of \r\n * the CdkTable. Adding header row defs programmatically is uncommon, so ContentChildren\r\n * is usually sufficient. The explicit `headerRows` input above allows the number of rows\r\n * to be set by the developer to override the QueryList-driven behavior.\r\n */\r\n @ContentChildren(MatHeaderRowDef) headerRowsQuery: QueryList<MatHeaderRowDef>;\r\n\r\n private headerRowCount: number = 1;\r\n\r\n /** The scroll strategy used by this directive. */\r\n scrollStrategy = new AnnaFixedRowSizeTableVirtualScrollStrategy(\r\n this.rowHeight,\r\n this.buffer,\r\n this.headerRowHeight * this.headerRowCount\r\n );\r\n\r\n ngOnChanges(change: SimpleChanges) {\r\n if (this.headerRows != undefined || this.headerRowsQuery) {\r\n this.handleChange();\r\n }\r\n if(change['buffer']?.previousValue != change['buffer']?.currentValue){\r\n AnnaFilterService.bufferSize = this.buffer;\r\n this.scrollStrategy = new AnnaFixedRowSizeTableVirtualScrollStrategy(\r\n this.rowHeight,\r\n this.buffer,\r\n this.headerRowHeight * this.headerRowCount\r\n ); \r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.headerRowsQuery.changes.subscribe(() => {\r\n this.handleChange();\r\n });\r\n }\r\n\r\n private handleChange(): void {\r\n this.scrollStrategy.updateRowHeightAndBuffer(\r\n this.rowHeight,\r\n this.buffer,\r\n // Use the explicit headerRows input value if set.\r\n // Otherwise, fall back to the QueryList length.\r\n this.headerRowHeight * (this._headerRows ?? this.headerRowsQuery.length)\r\n );\r\n }\r\n\r\n static ngAcceptInputType_rowHeight: NumberInput;\r\n static ngAcceptInputType_buffer: NumberInput;\r\n static ngAcceptInputType_headerRowHeight: NumberInput;\r\n}\r\n","import { ArrayDataSource, CollectionViewer, isDataSource, ListRange } from \"@angular/cdk/collections\";\r\nimport { CdkVirtualScrollRepeater, CdkVirtualScrollViewport } from \"@angular/cdk/scrolling\";\r\nimport { CdkHeaderRowDef, CdkTable, DataSource, STICKY_POSITIONING_LISTENER, _CoalescedStyleScheduler, _COALESCED_STYLE_SCHEDULER } from \"@angular/cdk/table\";\r\nimport { ContentChildren, Directive, ElementRef, Inject, Input, NgIterable, NgZone, QueryList } from \"@angular/core\";\r\nimport { isObservable, Observable, of, Subject } from \"rxjs\";\r\nimport { map, pairwise, shareReplay, startWith, switchMap, takeUntil } from \"rxjs/operators\";\r\nimport { AnnaTableVirtualScrollViewportComponent } from '../../components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component';\r\n\r\n/**\r\n * Directive that wraps a given data source in a \"virtual\" data source that emits\r\n * the slice of the original data source that matches the range that should be rendered\r\n * in the containing virtual scroll viewport.\r\n */\r\n@Directive({\r\n selector: '[mat-table][appVirtualDataSource], mat-table[appVirtualDataSource]',\r\n providers: [{ provide: STICKY_POSITIONING_LISTENER, useExisting: AnnaVirtualTableDirective }]\r\n})\r\nexport class AnnaVirtualTableDirective<T> implements CdkVirtualScrollRepeater<T>, CollectionViewer {\r\n @Input('appVirtualDataSource')\r\n set dataSource(value: DataSource<T> | Observable<T[]> | NgIterable<T> | null | undefined) {\r\n this._dataSource = value;\r\n if (isDataSource(value)) {\r\n this.dataSourceChanges.next(value);\r\n } else {\r\n this.dataSourceChanges.next(new ArrayDataSource<T>(isObservable(value) ? value : Array.from(value || [])));\r\n }\r\n }\r\n get dataSource(): DataSource<T> | Observable<T[]> | NgIterable<T> | null | undefined {\r\n return this._dataSource;\r\n }\r\n private _dataSource: DataSource<T> | Observable<T[]> | NgIterable<T> | null | undefined;\r\n\r\n @ContentChildren(CdkHeaderRowDef) headerRowDefs: QueryList<CdkHeaderRowDef>;\r\n\r\n private virtualizedDataStream = new Subject<T[] | ReadonlyArray<T>>();\r\n\r\n private dataSourceChanges = new Subject<DataSource<T>>();\r\n\r\n /** The raw, unvirtualized data stream. Emits whenever the data in the current DataSource changes. */\r\n dataStream: Observable<T[] | ReadonlyArray<T>> = this.dataSourceChanges\r\n .pipe(\r\n // Start off with null data source.\r\n startWith(null),\r\n // Bundle up the previous and current data sources so we can work with both.\r\n pairwise(),\r\n // Use `changeDataSource` to disconnect from the previous data source and connect to the\r\n // new one, passing back a stream of data changes which we run through `switchMap` to give\r\n // us a data stream that emits the latest data from whatever the current data source is.\r\n switchMap(([prev, cur]) => this.changeDataSource(prev, cur)),\r\n // Replay the last emitted data when someone subscribes.\r\n shareReplay(1));\r\n\r\n viewChange = new Subject<ListRange>();\r\n\r\n private data: T[] | readonly T[];\r\n\r\n private destroyed$ = new Subject<void>();\r\n\r\n private renderedItems: T[] | ReadonlyArray<T>;\r\n\r\n private renderedRange: ListRange = { start: 0, end: 0 };\r\n\r\n private isNativeHtmlTable: boolean = false;\r\n\r\n constructor(\r\n elementRef: ElementRef<HTMLElement>,\r\n private viewport: CdkVirtualScrollViewport,\r\n private table: CdkTable<T>,\r\n ngZone: NgZone,\r\n @Inject(_COALESCED_STYLE_SCHEDULER) private _coalescedStyleScheduler: _CoalescedStyleScheduler,\r\n ) {\r\n table.dataSource = this.virtualizedDataStream;\r\n this.isNativeHtmlTable = elementRef.nativeElement.tagName === 'TABLE';\r\n this.dataStream.subscribe(data => {\r\n this.data = data;\r\n this.onRenderedDataChange();\r\n });\r\n viewport.renderedRangeStream.pipe(takeUntil(this.destroyed$)).subscribe((range: ListRange) => {\r\n this.renderedRange = range;\r\n ngZone.run(() => this.viewChange.next(range));\r\n this.onRenderedDataChange();\r\n });\r\n viewport.attach(this);\r\n }\r\n\r\n ngOnInit(): void {\r\n // This is just a proof of concept, but the AnnaTableVirtualScrollViewportComponent uses `position: absolute` and `top: #px` instead of `transform: translateY(#px)` to position the viewport.\r\n // This removes the need to account for the translation in the `top` of the sticky header rows.\r\n if (this.viewport instanceof AnnaTableVirtualScrollViewportComponent) {\r\n return;\r\n }\r\n\r\n this.viewport.scrolledIndexChange\r\n .pipe(\r\n map(() => this.viewport.getOffsetToRenderedContentStart()),\r\n takeUntil(this.destroyed$)\r\n )\r\n .subscribe((offset) => {\r\n // We need to set the `style.top` property of the sticky header rows\r\n // to the negative value of the virtual scroll viewport's offset, so\r\n // make the offset negative.\r\n offset = -offset;\r\n\r\n const stickyStates: boolean[] = this.headerRowDefs.map(rowDef => rowDef.sticky);\r\n\r\n // This logic is exactly the same as what's in the StickyStyler (literally copy + paste).\r\n // The only difference is that the `stickyOffset` variable starts at the virtual scroll\r\n // viewport container's offset instead of starting at zero.\r\n const rows = this.table._getRenderedRows(this.table._headerRowOutlet);\r\n const stickyOffsets: number[] = [];\r\n const stickyCellHeights: (number|undefined)[] = [];\r\n const elementsToStick: HTMLElement[][] = [];\r\n for (let rowIndex = 0, stickyOffset = offset; rowIndex < rows.length; rowIndex++) {\r\n stickyOffsets[rowIndex] = stickyOffset;\r\n\r\n if (!stickyStates[rowIndex]) {\r\n continue;\r\n }\r\n\r\n const row = rows[rowIndex];\r\n elementsToStick[rowIndex] = this.isNativeHtmlTable ? Array.from(row.children) as HTMLElement[] : [row];\r\n\r\n const height = row.getBoundingClientRect().height;\r\n stickyOffset += height;\r\n stickyCellHeights[rowIndex] = height;\r\n }\r\n\r\n // Using the CoalescedStyleScheduler here is optional. It'll work without it,\r\n // and CoalescedStyleScheduler is not public (yet?), so feel free to remove it.\r\n this._coalescedStyleScheduler.schedule(() => {\r\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\r\n if (!stickyStates[rowIndex]) {\r\n continue;\r\n }\r\n\r\n for (const element of elementsToStick[rowIndex]) {\r\n element.style.top = `${stickyOffsets[rowIndex]}px`;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed$.next();\r\n this.dataSourceChanges.complete();\r\n this.virtualizedDataStream.complete();\r\n }\r\n\r\n /** React to scroll state changes in the viewport. */\r\n private onRenderedDataChange() {\r\n if (!this.renderedRange) {\r\n return;\r\n }\r\n this.renderedItems = this.data.slice(this.renderedRange.start, this.renderedRange.end + 1);\r\n // delegate rendering to the table by emitting from the virtualizedDataStream\r\n this.virtualizedDataStream.next(this.renderedItems);\r\n }\r\n\r\n /** Swap out one data source for another. */\r\n private changeDataSource(oldDataSource: DataSource<T> | null, newDs: DataSource<T> | null):\r\n Observable<T[] | ReadonlyArray<T>> {\r\n\r\n oldDataSource?.disconnect(this);\r\n return newDs ? newDs.connect(this) : of();\r\n }\r\n\r\n /**\r\n * This method is only used by the experimental AutoSizeVirtualScrollStrategy.\r\n * We're not using that strategy, but I've implemented it just to show how it oculd be done.\r\n * I'm not actually sure if this works.\r\n */\r\n measureRangeSize(range: ListRange, orientation: 'horizontal' | 'vertical'): number {\r\n if (orientation === 'horizontal' || range.end < range.start) {\r\n // virtual scrolling columns are not supported by this directive\r\n return 0;\r\n }\r\n\r\n const renderedBodyRows = this.table._getRenderedRows(this.table._rowOutlet);\r\n\r\n const firstRow: HTMLElement | undefined = renderedBodyRows[range.start];\r\n const lastRow: HTMLElement | undefined = renderedBodyRows[range.end];\r\n\r\n if (!firstRow || !lastRow) {\r\n return 0;\r\n }\r\n\r\n // We need to include all header and footer rows in the sum, since they're always rendered\r\n const renderedHeaderRows = this.table._getRenderedRows(this.table._headerRowOutlet);\r\n const renderedFooterRows = this.table._getRenderedRows(this.table._footerRowOutlet);\r\n\r\n // TODO (performance): Can we just measure the offset of the first and last items and do some math to avoid having to measure each row individually?\r\n const headerHeight = renderedHeaderRows.reduce((sum: number, row: HTMLElement) => {\r\n return sum += row.getBoundingClientRect().height;\r\n }, 0);\r\n const footerHeight = renderedFooterRows.reduce((sum: number, row: HTMLElement) => {\r\n return sum += row.getBoundingClientRect().height;\r\n }, 0);\r\n\r\n const bodyHeight = lastRow.getBoundingClientRect().bottom - firstRow.getBoundingClientRect().top;\r\n\r\n return headerHeight + footerHeight + bodyHeight;\r\n }\r\n}\r\n","// Angular import statements\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatRadioModule } from \"@angular/material/radio\";\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatTableModule } from '@angular/material/table';\r\n\r\n// Third party import statements\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { NgxSliderModule } from '@angular-slider/ngx-slider';\r\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\r\n\r\n\r\n// User defined import statements\r\nimport { AnnaNonEditableGenericTableComponent } from './components/anna-non-editable-generic-table/anna-non-editable-generic-table.component';\r\nimport { AnnaSortComponent } from './components/anna-sort/anna-sort.component';\r\nimport { AnnaTableVirtualScrollViewportComponent } from './components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component';\r\nimport { AnnaFixedRowSizeTableVirtualScrollStrategyDirective } from './directives/anna-fixed-row-size-table-virtual-scroll-strategy';\r\nimport { AnnaVirtualTableDirective } from './directives/anna-virtual-table';\r\n\r\n//sub-entries of anna lib import statement\r\nimport { AnnaDropdownLibModule } from '@annalib/anna-core/src/lib/anna-dropdown-lib';\r\nimport { AnnaCoreSharedLibModule } from '@annalib/anna-core/src/lib/anna-core-shared-lib';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n AnnaNonEditableGenericTableComponent,\r\n AnnaSortComponent,\r\n AnnaTableVirtualScrollViewportComponent,\r\n AnnaFixedRowSizeTableVirtualScrollStrategyDirective,\r\n AnnaVirtualTableDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n NgbModule,\r\n AnnaDropdownLibModule,\r\n MatButtonToggleModule,\r\n FormsModule,\r\n NgxSliderModule,\r\n NgxSkeletonLoaderModule,\r\n MatTableModule,\r\n MatRadioModule,\r\n ScrollingModule,\r\n AnnaCoreSharedLibModule\r\n ],\r\n exports: [\r\n AnnaNonEditableGenericTableComponent,\r\n AnnaSortComponent,\r\n AnnaTableVirtualScrollViewportComponent,\r\n AnnaFixedRowSizeTableVirtualScrollStrategyDirective,\r\n AnnaVirtualTableDirective\r\n ]\r\n\r\n})\r\nexport class AnnaGenericTableLibModule { }\r\n","//Modules\r\nexport * from \"./anna-generic-table-lib.module\";\r\n\r\n//Components\r\nexport * from \"./components/anna-non-editable-generic-table/anna-non-editable-generic-table.component\";\r\nexport * from \"./components/anna-sort/anna-sort.component\";\r\nexport * from \"./components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component\";\r\n\r\n//Directives\r\nexport * from \"./directives/anna-fixed-row-size-table-virtual-scroll-strategy\";\r\nexport * from \"./directives/anna-virtual-table\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i5.AnnaSortComponent","i6","i1","i3","map"],"mappings":"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"}