@annalib/anna-core 3.2.0 → 3.3.0

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 (140) hide show
  1. package/.browserslistrc +16 -0
  2. package/karma.conf.js +44 -0
  3. package/ng-package.json +14 -0
  4. package/package.json +18 -38
  5. package/src/lib/anna-common-scss/_application-spacing.scss +6 -0
  6. package/src/lib/anna-common-scss/_mixins.scss +187 -0
  7. package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.html +22 -0
  8. package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.scss +0 -0
  9. package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.spec.ts +25 -0
  10. package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.ts +16 -0
  11. package/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.html +33 -0
  12. package/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.scss +0 -0
  13. package/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.spec.ts +25 -0
  14. package/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.ts +28 -0
  15. package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.html +20 -0
  16. package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.scss +0 -0
  17. package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.spec.ts +25 -0
  18. package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.ts +16 -0
  19. package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.html +3 -0
  20. package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.scss +17 -0
  21. package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.spec.ts +24 -0
  22. package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.ts +20 -0
  23. package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.html +23 -0
  24. package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.scss +0 -0
  25. package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.spec.ts +25 -0
  26. package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.ts +16 -0
  27. package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.html +15 -0
  28. package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.scss +0 -0
  29. package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.spec.ts +25 -0
  30. package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.ts +19 -0
  31. package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.html +14 -0
  32. package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.scss +0 -0
  33. package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.spec.ts +25 -0
  34. package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.ts +16 -0
  35. package/src/lib/anna-core-shared-lib/constants/shared.constant.ts +34 -0
  36. package/src/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.ts +19 -0
  37. package/src/lib/anna-core-shared-lib/models/anna-generic-data-type.model.ts +15 -0
  38. package/{lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.d.ts → src/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.ts} +21 -9
  39. package/{lib/anna-core-shared-lib/models/anna-non-editable-gt-models.d.ts → src/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.ts} +27 -17
  40. package/src/lib/anna-core-shared-lib/models/anna-sort.model.ts +7 -0
  41. package/src/lib/anna-core-shared-lib/models/anna-tooltip.model.ts +44 -0
  42. package/src/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.ts +26 -0
  43. package/src/lib/anna-core-shared-lib/services/anna-date-time-format.service.ts +202 -0
  44. package/src/lib/anna-core-shared-lib/services/anna-filter.service.ts +507 -0
  45. package/src/lib/anna-core-shared-lib/services/anna-generic-table.service.ts +44 -0
  46. package/src/lib/anna-core-shared-lib/services/anna-global-config.service.ts +170 -0
  47. package/src/lib/anna-core-shared-lib/services/anna-sort.service.ts +179 -0
  48. package/src/lib/anna-core.module.ts +99 -0
  49. package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.html +46 -0
  50. package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.scss +153 -0
  51. package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.spec.ts +24 -0
  52. package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.ts +106 -0
  53. package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.html +129 -0
  54. package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.scss +275 -0
  55. package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.spec.ts +24 -0
  56. package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.ts +412 -0
  57. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.html +920 -0
  58. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.scss +596 -0
  59. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.spec.ts +25 -0
  60. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.ts +2012 -0
  61. package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.html +10 -0
  62. package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.scss +1 -0
  63. package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.spec.ts +24 -0
  64. package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.ts +70 -0
  65. package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.html +13 -0
  66. package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.scss +88 -0
  67. package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.spec.ts +25 -0
  68. package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.ts +460 -0
  69. package/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 +237 -0
  70. package/{lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.d.ts → src/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.ts} +0 -0
  71. package/src/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.ts +204 -0
  72. package/{lib/anna-generic-table-lib/directives/anna-virtual-table/index.d.ts → src/lib/anna-generic-table-lib/directives/anna-virtual-table/index.ts} +0 -0
  73. package/{public-api.d.ts → src/public-api.ts} +28 -0
  74. package/src/test.ts +27 -0
  75. package/tsconfig.lib.json +19 -0
  76. package/tsconfig.lib.prod.json +10 -0
  77. package/tsconfig.spec.json +17 -0
  78. package/annalib-anna-core.d.ts +0 -5
  79. package/esm2020/annalib-anna-core.mjs +0 -5
  80. package/esm2020/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +0 -15
  81. package/esm2020/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +0 -35
  82. package/esm2020/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +0 -15
  83. package/esm2020/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +0 -22
  84. package/esm2020/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +0 -15
  85. package/esm2020/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +0 -21
  86. package/esm2020/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +0 -15
  87. package/esm2020/lib/anna-core-shared-lib/constants/shared.constant.mjs +0 -34
  88. package/esm2020/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.mjs +0 -27
  89. package/esm2020/lib/anna-core-shared-lib/models/anna-generic-data-type.model.mjs +0 -2
  90. package/esm2020/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +0 -2
  91. package/esm2020/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +0 -3
  92. package/esm2020/lib/anna-core-shared-lib/models/anna-sort.model.mjs +0 -2
  93. package/esm2020/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +0 -30
  94. package/esm2020/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +0 -31
  95. package/esm2020/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +0 -190
  96. package/esm2020/lib/anna-core-shared-lib/services/anna-filter.service.mjs +0 -419
  97. package/esm2020/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +0 -48
  98. package/esm2020/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +0 -133
  99. package/esm2020/lib/anna-core-shared-lib/services/anna-sort.service.mjs +0 -147
  100. package/esm2020/lib/anna-core.module.mjs +0 -156
  101. package/esm2020/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +0 -100
  102. package/esm2020/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +0 -362
  103. package/esm2020/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +0 -1687
  104. package/esm2020/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +0 -67
  105. package/esm2020/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +0 -357
  106. package/esm2020/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +0 -189
  107. package/esm2020/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +0 -2
  108. package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +0 -178
  109. package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +0 -2
  110. package/esm2020/public-api.mjs +0 -44
  111. package/fesm2015/annalib-anna-core.mjs +0 -4162
  112. package/fesm2015/annalib-anna-core.mjs.map +0 -1
  113. package/fesm2020/annalib-anna-core.mjs +0 -4159
  114. package/fesm2020/annalib-anna-core.mjs.map +0 -1
  115. package/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.d.ts +0 -8
  116. package/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.d.ts +0 -16
  117. package/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.d.ts +0 -8
  118. package/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.d.ts +0 -11
  119. package/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.d.ts +0 -8
  120. package/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.d.ts +0 -11
  121. package/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.d.ts +0 -8
  122. package/lib/anna-core-shared-lib/constants/shared.constant.d.ts +0 -32
  123. package/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.d.ts +0 -9
  124. package/lib/anna-core-shared-lib/models/anna-generic-data-type.model.d.ts +0 -12
  125. package/lib/anna-core-shared-lib/models/anna-sort.model.d.ts +0 -6
  126. package/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +0 -25
  127. package/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.d.ts +0 -9
  128. package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +0 -26
  129. package/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +0 -73
  130. package/lib/anna-core-shared-lib/services/anna-generic-table.service.d.ts +0 -14
  131. package/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +0 -21
  132. package/lib/anna-core-shared-lib/services/anna-sort.service.d.ts +0 -16
  133. package/lib/anna-core.module.d.ts +0 -32
  134. package/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.d.ts +0 -34
  135. package/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +0 -70
  136. package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +0 -268
  137. package/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.d.ts +0 -17
  138. package/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +0 -141
  139. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.d.ts +0 -89
  140. package/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +0 -45
@@ -0,0 +1,920 @@
1
+ <div class="table-container {{gtGeneralConfig.tableOuterContainerName}}" [ngClass]="{ 'scroll-left-shadow-effect': isScrolledLeft }" (scroll)="onTableContainerScroll($event)">
2
+ <div
3
+ [class]="gtGeneralConfig.tableContainerName"
4
+ class="horizontal-scroll-for-table-container"
5
+ [ngStyle]="{
6
+ height:
7
+ tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll
8
+ ? 'calc(' +
9
+ ((gtDimension.rowHeight + (includeBorderInTableHeight ? rowBorderWidth : 0)) * tableData.length +
10
+ (!tableData.length || !gtGeneralConfig.totalRow
11
+ ? gtDimension.headerHeight
12
+ : gtDimension.headerHeight + gtDimension.rowHeight + ( includeBorderInTableHeight ? (2 * rowBorderWidth) : 0))) +
13
+ 'px)'
14
+ : gtDimension.tableHeight
15
+ }"
16
+ >
17
+ <table class="gt" [ngClass]="tableClass" mat-table [dataSource]="renderedData">
18
+ <tr
19
+ class="header-row"
20
+ mat-header-row
21
+ *matHeaderRowDef="tableColumns; sticky: true"
22
+ [style.height.px]="gtDimension.headerHeight"
23
+ ></tr>
24
+ <tr
25
+ class="total-row"
26
+ mat-header-row
27
+ [style.height.px]="gtDimension.rowHeight"
28
+ *matHeaderRowDef="totalRowColumns; sticky: true"
29
+ [class.hidden]="
30
+ showSkeletonLoading ||
31
+ (!showSkeletonLoading && !tableData.length ) ||
32
+ (showNoDataToDisplay) ||
33
+ (!showSkeletonLoading && !gtGeneralConfig.totalRow)
34
+ "
35
+ ></tr>
36
+ <tr
37
+ [class]="rowData.gtClass"
38
+ [ngClass]="{'no-border-tr': showNoDataToDisplay}"
39
+ mat-row
40
+ *matRowDef="let rowData; columns: tableColumns"
41
+ [style.height.px]="gtDimension.rowHeight"(click)="dataRowClicked(rowData)"
42
+ ></tr>
43
+
44
+ <!-- TOTAL ROW -->
45
+ <ng-container [matColumnDef]="column.colName" *ngFor="let column of totalRowInfo; trackBy: trackByFn">
46
+ <td mat-header-cell *matHeaderCellDef [attr.colspan]="column.colspan" class="{{column.class}}">
47
+ <strong>{{ column.data }}</strong>
48
+ <ng-container *ngIf="column.lowerData">
49
+ <br>
50
+ <span
51
+ *ngIf="column.colName == 'total-potential-booked-unit' && gtGeneralConfig.component == 'RATING';
52
+ else columnLowerData"
53
+ class="clickable-data"
54
+ (click)="spotDetailsDownloadClicked('TOTALROW')"
55
+ [ngClass]="{ 'disabled-clickable-data': downloadInProgress }"
56
+ >{{ column.lowerData }}
57
+ <span class="material-icons spot-details-download-icons">get_app</span>
58
+ <ng-container *ngIf="downloadInProgress
59
+ && selectedRowTypeForDownload == 'TOTALROW' ">
60
+ <ng-container [ngTemplateOutlet]="circularProgressBar"></ng-container>
61
+ </ng-container>
62
+ </span>
63
+ <ng-template #columnLowerData>
64
+ <span>{{ column.lowerData }}</span>
65
+ </ng-template>
66
+ </ng-container>
67
+ <ng-container *ngIf="column.tooltipMessage">
68
+ <i class="mi mdi-info-outline info-label" container="body"
69
+ [ngbTooltip]="column.tooltipMessage"
70
+ tooltipClass="gt-total-row-tooltip" placement="bottom"></i>
71
+ </ng-container>
72
+ </td>
73
+ </ng-container>
74
+
75
+ <!-- MAIN ROW -->
76
+ <ng-container [matColumnDef]="columnDef.headerInfo[0].objectKey" *ngFor="let columnDef of tableHeaders; trackBy: trackByFn">
77
+ <th #tableHeader nowrap mat-header-cell *matHeaderCellDef [style.width]="columnDef.width">
78
+ <div class="row mx-0" *ngFor="let header of columnDef.headerInfo; let j = index;">
79
+ <p
80
+ *ngIf="header.typeOfHeaderData === 'STRING'"
81
+ [ngClass]="{ 'upper-label': j === 0, 'lower-label': j === 1 }"
82
+ >
83
+ {{ header.name }}
84
+ <i *ngIf="header.tooltip && header.tooltip.name == 'impsInfoTooltip'" class="{{header['tooltip'].iconClass}}"
85
+ [ngStyle]="{'float': header['tooltip'].iconPosition}"
86
+ #t="ngbTooltip"
87
+ [ngbTooltip]="impsInfoTooltip"
88
+ placement="{{ header['tooltip'].tooltipPosition }}"
89
+ tooltipClass="{{ header['tooltip'].tooltipClass }}"
90
+ >
91
+ </i>
92
+ <i *ngIf="header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'" class="{{header['tooltip'].iconClass}}"
93
+ [ngStyle]="{'float': header['tooltip'].iconPosition}"
94
+ #t="ngbTooltip"
95
+ [ngbTooltip]="spotsColumnEquivalizationMessageTooltip"
96
+ placement="{{ header['tooltip'].tooltipPosition }}"
97
+ tooltipClass="{{ header['tooltip'].tooltipClass }}"
98
+ >
99
+ </i>
100
+ <i *ngIf="header.tooltip && header.tooltip.name == 'ratingInfoTooltip'" class="{{header['tooltip'].iconClass}}"
101
+ [ngStyle]="{'float': header['tooltip'].iconPosition}"
102
+ #t="ngbTooltip"
103
+ [ngbTooltip]="ratingInfoTooltip"
104
+ placement="{{ header['tooltip'].tooltipPosition }}"
105
+ tooltipClass="{{ header['tooltip'].tooltipClass }}"
106
+ >
107
+ </i>
108
+ <i *ngIf="header.tooltip && header.tooltip.name == 'rateInfoTooltip'" class="{{header['tooltip'].iconClass}}"
109
+ [ngStyle]="{'float': header['tooltip'].iconPosition}"
110
+ #t="ngbTooltip"
111
+ [ngbTooltip]="rateInfoTooltip"
112
+ placement="{{ header['tooltip'].tooltipPosition }}"
113
+ tooltipClass="{{ header['tooltip'].tooltipClass }}"
114
+ >
115
+ </i>
116
+ <i *ngIf="header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'" class="{{header['tooltip'].iconClass}}"
117
+ [ngStyle]="{'float': header['tooltip'].iconPosition}"
118
+ #t="ngbTooltip"
119
+ [ngbTooltip]="ongoingRevBookedColumnTooltip"
120
+ placement="{{ header['tooltip'].tooltipPosition }}"
121
+ tooltipClass="{{ header['tooltip'].tooltipClass }}"
122
+ >
123
+ </i>
124
+ <i *ngIf="header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'" class="{{header['tooltip'].iconClass}}"
125
+ [ngStyle]="{'float': header['tooltip'].iconPosition}"
126
+ #t="ngbTooltip"
127
+ [ngbTooltip]="completedRevBookedColumnTooltip"
128
+ placement="{{ header['tooltip'].tooltipPosition }}"
129
+ tooltipClass="{{ header['tooltip'].tooltipClass }}"
130
+ >
131
+ </i>
132
+ </p>
133
+
134
+ <ng-container *ngIf="header.typeOfHeaderData === 'CHECKBOX'">
135
+ <span
136
+ *ngIf="gtGeneralConfig.isHeaderChecked"
137
+ class="material-icons custom-column-checkbox-checked"
138
+ (click)="selectUnselectAllRows()"
139
+ >
140
+ check_box
141
+ </span>
142
+ <span
143
+ *ngIf="!gtGeneralConfig.isHeaderChecked"
144
+ class="material-icons custom-column-checkbox-unchecked"
145
+ [ngClass]="{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }"
146
+ (click)="selectUnselectAllRows()"
147
+ >
148
+ check_box_outline_blank
149
+ </span>
150
+ </ng-container>
151
+
152
+ <div *ngIf="gtGeneralConfig.showAllColumnFilter" class="sort-filter-container">
153
+ <ng-container *ngIf="header.showTooltipIcon">
154
+ <!-- Active tooltip Functionality -->
155
+ <ng-container *ngIf="header.filter === 'CHECKBOX'">
156
+ <span
157
+ class="mdi mdi-filter-variant"
158
+ [ngClass]="{
159
+ active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],
160
+ disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])
161
+ }"
162
+ [ngbTooltip]="filterTooltip"
163
+ placement="bottom left-top auto"
164
+ container="body"
165
+ tooltipClass="non-edit-checkbox-tooltip"
166
+ [autoClose]="'outside'"
167
+ triggers="manual"
168
+ #t="ngbTooltip"
169
+ (click)="bindTheValueToToolTip(t, header)"
170
+ (hidden)="closeTooltip()"
171
+ >
172
+ </span
173
+ ><br />
174
+ </ng-container>
175
+ <ng-container *ngIf="header.filter === 'SLIDER'">
176
+ <span
177
+ class="mdi mdi-filter-variant"
178
+ [ngClass]="{
179
+ active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],
180
+ disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])
181
+ }"
182
+ [ngbTooltip]="sliderToolTip"
183
+ placement="bottom left-top"
184
+ container="body"
185
+ tooltipClass="non-edit-slider-tooltip"
186
+ [autoClose]="'outside'"
187
+ triggers="manual"
188
+ #t1="ngbTooltip"
189
+ (click)="bindTheValueToToolTip(t1, header)"
190
+ (hidden)="closeTooltip()"
191
+ >
192
+ </span
193
+ ><br />
194
+ </ng-container>
195
+ <ng-container *ngIf="header.filter === 'DATE'">
196
+ <span
197
+ class="mdi mdi-filter-variant"
198
+ [ngClass]="{
199
+ active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],
200
+ disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])
201
+ }"
202
+ [ngbTooltip]="datePickerTooltip"
203
+ placement="bottom auto"
204
+ container="body"
205
+ tooltipClass="non-edit-datepicker-tooltip"
206
+ [autoClose]="'outside'"
207
+ triggers="manual"
208
+ #t2="ngbTooltip"
209
+ (click)="bindTheValueToToolTip(t2, header)"
210
+ (hidden)="closeTooltip()"
211
+ >
212
+ </span
213
+ ><br />
214
+ </ng-container>
215
+ <ng-container *ngIf="header.filter === 'WEEK'">
216
+ <span
217
+ class="mdi mdi-filter-variant"
218
+ [ngClass]="{
219
+ active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],
220
+ disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])
221
+ }"
222
+ [ngbTooltip]="weekPickerToolTip"
223
+ placement="bottom left-top"
224
+ container="body"
225
+ [autoClose]="'outside'"
226
+ triggers="manual"
227
+ #t3="ngbTooltip"
228
+ (click)="bindTheValueToToolTip(t3, header)"
229
+ (hidden)="closeTooltip()"
230
+ >
231
+ </span
232
+ ><br />
233
+ </ng-container>
234
+ <ng-container *ngIf="header.filter === 'TIME'">
235
+ <span
236
+ class="mdi mdi-filter-variant"
237
+ [ngClass]="{
238
+ active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],
239
+ disabled: header.disableTooltipIcon && !(annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys])
240
+ }"
241
+ [ngbTooltip]="timeFilterToolTip"
242
+ placement="bottom left-top"
243
+ container="body"
244
+ tooltipClass="non-edit-time-tooltip"
245
+ [autoClose]="'outside'"
246
+ triggers="manual"
247
+ #t4="ngbTooltip"
248
+ (click)="bindTheValueToToolTip(t4, header)"
249
+ (hidden)="closeTooltip()"
250
+ >
251
+ </span
252
+ ><br />
253
+ </ng-container>
254
+ </ng-container>
255
+ <ng-container *ngIf="!header.showTooltipIcon">
256
+ <span id="no-filter-space"></span><br />
257
+ </ng-container>
258
+ <i *ngIf="header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'" class="{{header['tooltip'].iconClass}}"
259
+ [ngStyle]="{'float': header['tooltip'].iconPosition}"
260
+ #t="ngbTooltip"
261
+ [ngbTooltip]="lurViolationInfoTooltip"
262
+ placement="{{ header['tooltip'].tooltipPosition }}"
263
+ tooltipClass="{{ header['tooltip'].tooltipClass }}"
264
+ >
265
+ </i>
266
+
267
+ </div>
268
+ </div>
269
+ </th>
270
+
271
+ <ng-container *ngIf="gtGeneralConfig.component == 'DRR'">
272
+ <ng-container *matCellDef="let ROW_DATA">
273
+ <ng-container *ngIf="showSkeletonLoading">
274
+ <td mat-cell>
275
+ <ngx-skeleton-loader count="1" [theme]="{ height: '10px', display: 'block' }">
276
+ </ngx-skeleton-loader>
277
+ </td>
278
+ </ng-container>
279
+
280
+ <ng-container *ngIf="!showSkeletonLoading">
281
+ <td
282
+ mat-cell
283
+ *ngIf="!ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td']"
284
+ [attr.rowspan]="ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']">
285
+ <ng-container
286
+ *ngFor="let subline of columnDef.headerInfo; let sublineIndex = index; trackBy: trackByFn"
287
+ >
288
+ <ng-container [ngSwitch]="subline.typeOfBodyData">
289
+ <ng-container *ngSwitchCase="'ICON'">
290
+ <i [class]="ROW_DATA.iconClass"></i>
291
+ </ng-container>
292
+
293
+ <ng-container *ngSwitchCase="'CHECKBOX'">
294
+ <span
295
+ *ngIf="ROW_DATA[subline.objectKey]"
296
+ [ngClass]="{ 'disable-checkbox': ROW_DATA[subline.isDisabledKey] }"
297
+ class="material-icons custom-column-checkbox-checked"
298
+ (click)="selectUnselectRow(ROW_DATA)"
299
+ >
300
+ check_box
301
+ </span>
302
+ <span
303
+ *ngIf="!ROW_DATA[subline.objectKey]"
304
+ class="material-icons custom-column-checkbox-unchecked"
305
+ [ngClass]="{ 'disable-checkbox': ROW_DATA[subline.isDisabledKey] }"
306
+ (click)="selectUnselectRow(ROW_DATA)"
307
+ >
308
+ check_box_outline_blank
309
+ </span>
310
+ </ng-container>
311
+
312
+ <ng-container *ngSwitchCase="'RADIO'">
313
+ <mat-radio-group
314
+ *ngIf="ROW_DATA['RadioButtonConfig']"
315
+ [ngModel]="ROW_DATA[subline.objectKey]"
316
+ [disabled]="ROW_DATA['RadioButtonConfig'][0].isDisabled"
317
+ >
318
+ <ng-container
319
+ *ngFor="let radioButton of ROW_DATA['RadioButtonConfig']; let last = last"
320
+ >
321
+ <mat-radio-button
322
+ value="{{ radioButton.value }}"
323
+ class="{{ radioButton.class }}"
324
+ (click)="
325
+ radioButtonClicked(
326
+ ROW_DATA,
327
+ radioButton.value,
328
+ ROW_DATA['RadioButtonConfig'][0].isDisabled
329
+ )
330
+ "
331
+ >{{ radioButton.label }}</mat-radio-button
332
+ ><br *ngIf="!last" />
333
+ </ng-container>
334
+ </mat-radio-group>
335
+ </ng-container>
336
+
337
+ <div *ngSwitchDefault>
338
+ {{ ROW_DATA[subline.objectKey] }}
339
+
340
+ <ng-container
341
+ *ngIf="
342
+ subline.objectKey == 'Status' && (ROW_DATA['Remarks'] !== null)
343
+ "
344
+ >
345
+ <i
346
+ class="mi mdi-info-outline remarks-tooltip"
347
+ [ngbTooltip]="columnInfoTooltip"
348
+ placement="bottom"
349
+ container="body"
350
+ tooltipClass="remarks-info-tooltip"
351
+ #t="ngbTooltip"
352
+ ></i>
353
+ </ng-container>
354
+ </div>
355
+ </ng-container>
356
+ </ng-container>
357
+ </td>
358
+ </ng-container>
359
+ </ng-container>
360
+ </ng-container>
361
+
362
+ <ng-container *ngIf="gtGeneralConfig.component != 'DRR'">
363
+ <td mat-cell *matCellDef="let ROW_DATA" [style.background]="ROW_DATA.backgroundColor"
364
+ [style.border]="ROW_DATA.border"
365
+ class="{{ROW_DATA.rowClass}}"
366
+ >
367
+ <ngx-skeleton-loader *ngIf="showSkeletonLoading" count="1" [theme]="{ height: '10px', display: 'block' }">
368
+ </ngx-skeleton-loader>
369
+
370
+ <ng-container *ngIf="!showSkeletonLoading">
371
+ <ng-container *ngIf="tableData.length > 0 && !showNoDataToDisplay">
372
+ <div showEllipsisTextOnHover *ngFor="let subline of columnDef.headerInfo; let subLineIndex = index; trackBy: trackByFn">
373
+ <ng-container [ngSwitch]="columnDef.headerInfo[subLineIndex].typeOfBodyData">
374
+ <ng-container *ngSwitchCase="'ICON'">
375
+ <i [class]="ROW_DATA.iconClass" (click)="iconClicked(ROW_DATA,ROW_DATA.iconClass)"></i>
376
+ </ng-container>
377
+
378
+ <ng-container *ngSwitchCase="'SVG_ICON'">
379
+ <anna-core-anna-icon-column [componentName]="gtGeneralConfig.component" [objectKey]="subline.objectKey" [dataObject]="ROW_DATA" (onColumnIconClicked)="svgIconClicked($event)"></anna-core-anna-icon-column>
380
+ </ng-container>
381
+
382
+ <ng-container *ngSwitchCase="'TEXT_ACTIONS'">
383
+ <button *ngFor="let text of ROW_DATA.textActions" (click)="textActionClicked(ROW_DATA,text.id)" [disabled]="text.isDisabled" class="{{text.class}}">{{text.name}}</button>
384
+ </ng-container>
385
+
386
+ <ng-container *ngSwitchCase="'CHECKBOX'">
387
+ <span
388
+ *ngIf="ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]"
389
+ [ngClass]="{
390
+ 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]
391
+ }"
392
+ class="material-icons custom-column-checkbox-checked"
393
+ (click)="
394
+ selectOrUnselectCheckbox(
395
+ ROW_DATA,
396
+ columnDef.headerInfo[subLineIndex].objectKey,
397
+ false
398
+ )
399
+ "
400
+ >
401
+ check_box
402
+ </span>
403
+ <span
404
+ *ngIf="!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]"
405
+ class="material-icons custom-column-checkbox-unchecked"
406
+ [ngClass]="{
407
+ 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]
408
+ }"
409
+ (click)="
410
+ selectOrUnselectCheckbox(
411
+ ROW_DATA,
412
+ columnDef.headerInfo[subLineIndex].objectKey,
413
+ true
414
+ )
415
+ "
416
+ >
417
+ check_box_outline_blank
418
+ </span>
419
+ </ng-container>
420
+
421
+ <ng-container *ngSwitchCase="'CLICKABLE_DATA'">
422
+ <span
423
+ *ngIf="subline.objectKey == 'displayBookedUnits' && gtGeneralConfig.component == 'RATING'"
424
+ class="clickable-data"
425
+ (click)="spotDetailsDownloadClicked('DATAROW', ROW_DATA)"
426
+ [ngClass]="{ 'disabled-clickable-data': downloadInProgress }"
427
+ >{{ ROW_DATA.displayBookedUnits}}
428
+ <span class="material-icons spot-details-download-icons">get_app</span>
429
+ <ng-container *ngIf="downloadInProgress
430
+ && ROW_DATA.inventoryCodeId == selectedInventoryIdForDownload
431
+ && ROW_DATA.demographic == selectedDemographicForDownload ">
432
+ <ng-container [ngTemplateOutlet]="circularProgressBar"></ng-container>
433
+ </ng-container>
434
+ </span>
435
+ </ng-container>
436
+
437
+ <ng-container *ngSwitchDefault>
438
+ <ng-container *ngIf="subline.objectKey != 'description'">
439
+ <span>{{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}</span>
440
+ <i
441
+ *ngIf="subline.objectKey == 'inventoryCode' && ROW_DATA['isSellerGroup'] && gtGeneralConfig.component == 'RATING' "
442
+ class="mi mdi-info-outline seller-tooltip"
443
+ [ngbTooltip]="sellerHierarchyTooltip"
444
+ placement="bottom auto"
445
+ container="body"
446
+ [autoClose]="true"
447
+ triggers="manual"
448
+ (hidden)="closeTooltip()"
449
+ #info="ngbTooltip"
450
+ tooltipClass="hierarchy-tooltip"
451
+ (mouseenter)="bindTheValueToSellerGroupTooltip(ROW_DATA.sellerGroupHierarchy, info)">
452
+ </i>
453
+
454
+ <i *ngIf="subline.objectKey == 'displayBookedAverageRating' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showRatingAverageIcon'] "
455
+ class="mi mdi-info-outline seller-tooltip"
456
+ placement="bottom auto"
457
+ container="body"
458
+ [autoClose]="true"
459
+ (mouseenter)="setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)"
460
+ tooltipClass="posted-avg-tooltip"
461
+ [ngbTooltip]="postedRatingDifference"
462
+ >
463
+ </i>
464
+
465
+ <i *ngIf="subline.objectKey == 'displayBookedAverageImpression' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showImpressionAverageIcon'] "
466
+ class="mi mdi-info-outline seller-tooltip"
467
+ placement="bottom auto"
468
+ container="body"
469
+ [autoClose]="true"
470
+ (mouseenter)="setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)"
471
+ tooltipClass="posted-avg-tooltip"
472
+ [ngbTooltip]="postedImpDifference"
473
+ >
474
+ </i>
475
+
476
+ </ng-container>
477
+ <ng-container *ngIf="subline.objectKey == 'description'">
478
+ <p *ngIf="ROW_DATA.descriptionMessage || ROW_DATA.descriptionEmailReferenceNum">
479
+ <ng-container *ngIf="ROW_DATA.descriptionMessage">
480
+ {{ ROW_DATA.descriptionMessage }}
481
+ <br />
482
+ </ng-container>
483
+ <ng-container *ngIf="ROW_DATA.descriptionEmailReferenceNum">
484
+ Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}
485
+ <br />
486
+ </ng-container>
487
+ </p>
488
+ <a
489
+ href="{{ ROW_DATA.descriptionDetailsUrl }}"
490
+ target="_blank"
491
+ *ngIf="ROW_DATA.descriptionDetailsUrlType === 'PDF' || ROW_DATA.descriptionDetailsUrlType === 'EXCEL'"
492
+ >
493
+ <button class="btn viewDetailsAndEmailBtn">Download</button>
494
+ </a>
495
+ <ng-container *ngIf="ROW_DATA.activityname.toLowerCase() == 'order onboarded'">
496
+ <a *ngIf="ROW_DATA.descriptionDetailsUrlType === 'LINK'" (click)="viewDetailsClicked(ROW_DATA)">
497
+ <button class="btn viewDetailsAndEmailBtn">View details</button>
498
+ </a>
499
+ </ng-container>
500
+
501
+ <a href="{{ ROW_DATA.descriptionEmailUrl }}" target="_blank" *ngIf="ROW_DATA.descriptionEmailUrl">
502
+ <button class="btn viewDetailsAndEmailBtn">View email</button>
503
+ </a>
504
+ </ng-container>
505
+ </ng-container>
506
+ </ng-container>
507
+
508
+ </div>
509
+ </ng-container>
510
+ <ng-container *ngIf="showNoDataToDisplay">
511
+ <div>
512
+ {{null}}
513
+ </div>
514
+ </ng-container>
515
+ </ng-container>
516
+ </td>
517
+ </ng-container>
518
+ </ng-container>
519
+ </table>
520
+ </div>
521
+ <anna-core-no-data-lib [width]="noDataWidth" [marginTop]="marginTop" *ngIf="!showSkeletonLoading && showNoDataToDisplay"> </anna-core-no-data-lib>
522
+ </div>
523
+
524
+ <!-- Checkbox template -->
525
+ <ng-template #filterTooltip>
526
+
527
+ <div class="radio-container" *ngIf="showFilterTooltipTabs">
528
+ <div [ngClass]="{'full-width': filterTabObjects.length == 1}" *ngFor="let data of filterTabObjects">
529
+ <p class="filter-tab" [title]="data.label" (click)="populateTooltipDataBasedOnSelectedRadio(data)" [ngClass]="{'active': annaFilterService.selectedRadio == data.key}" *ngIf="filterTabObjects.length > 0">{{ data.label }}</p>
530
+ </div>
531
+ </div>
532
+
533
+ <div class="checkbox-sort" *ngIf="showSortComponent">
534
+ <anna-core-sort-lib [ngClass]="{'no-bottom-border': !showFilterComponent}"
535
+ (sortOptionClicked)="storeSortTypeInTempVariable($event)" [sortObjectKey]="annaFilterService.selectedRadio"></anna-core-sort-lib>
536
+ </div>
537
+
538
+ <ng-container *ngIf="showFilterComponent">
539
+ <p class="d-flex justify-content-between">
540
+ <button class="filter-text-btn" [disabled]="disableClearAll" (click)="unCheckAllCheckbox()">Clear all</button>
541
+ <button class="filter-text-btn" [disabled]="disableSelectAll" (click)="selectAllCheckbox()">Select all</button>
542
+ </p>
543
+ <p class="search-box">
544
+ <i class="mi mdi-search search-icon search-icon-position"></i>
545
+ <input
546
+ type="text"
547
+ placeholder="Search"
548
+ class="search-input"
549
+ style="margin-left: 2px; border: none; padding: 0px"
550
+ [(ngModel)]="searchItem"
551
+ (ngModelChange)="searchForTheItem($event)"
552
+ />
553
+ <i class="mdi mdi-close search-bar-close" [ngClass]="{'disable-close-icon': (!searchItem || searchItem.length == 0) }"
554
+ (click)="clearSearchedItem()"></i>
555
+
556
+ </p>
557
+ <div style="position:relative">
558
+ <!-- Track By func -->
559
+ <cdk-virtual-scroll-viewport itemSize="18" [style.height.px]="heightOfCheckboxTooltipFilter" class="dropdown-data-container">
560
+ <p *cdkVirtualFor="let option of tooltipOptions" class="input example-item" (click)="selectUnselectCheckbox(option)">
561
+ <span *ngIf="option.isSelected" role="button" class="mi mdi-check-box check-box"></span>
562
+ <span *ngIf="!option.isSelected" role="button" class="mi mdi-check-box-outline-blank check-box unchecked"></span>
563
+ <span class="data" title="{{ option.value }}" [innerHTML]="option.label"></span>
564
+ </p>
565
+ </cdk-virtual-scroll-viewport>
566
+ <div style="position: absolute; top:0; left:0; width:100%; height:100%; pointer-events:none"></div>
567
+ </div>
568
+ </ng-container>
569
+
570
+ <div class="buttons-container">
571
+ <button class="button" (click)="closeCheckboxFilter()">Cancel</button>
572
+ <button
573
+ class="button"
574
+ [ngClass]="{ disabled: disableCheckboxApply }"
575
+ (click)="applyFilters()"
576
+ [disabled]="disableCheckboxApply"
577
+ >
578
+ Apply
579
+ <span *ngIf="showFilterComponent">({{ selectedCheckboxOptionsCount == tooltipOptions.length && tooltipOptions.length != 0 && !searchItem? 'All': selectedCheckboxOptionsCount }})</span>
580
+ </button>
581
+ </div>
582
+ </ng-template>
583
+
584
+ <!-- Slider template -->
585
+ <ng-template #sliderToolTip>
586
+
587
+ <div class="radio-container" *ngIf="showFilterTooltipTabs">
588
+ <div *ngFor="let data of filterTabObjects">
589
+ <p class="filter-tab" [title]="data.label" (click)="populateTooltipDataBasedOnSelectedRadio(data)" [ngClass]="{'active': annaFilterService.selectedRadio == data.key}" *ngIf="filterTabObjects.length > 0">{{ data.label }}</p>
590
+ </div>
591
+ </div>
592
+ <!-- <button class="column-clear-all align-center" [disabled]="disableColumnClearAllBtn" (click)="clearColumnFilter()">
593
+ Clear filter
594
+ </button> -->
595
+
596
+ <anna-core-sort-lib *ngIf="showSortComponent" [ngClass]="{'no-bottom-border': !showFilterComponent}"
597
+ (sortOptionClicked)="storeSortTypeInTempVariable($event)" [sortObjectKey]="annaFilterService.selectedRadio"></anna-core-sort-lib>
598
+
599
+ <ng-container *ngIf="showFilterComponent">
600
+ <button class="column-clear-all" [disabled]="disableColumnClearAllBtn" (click)="clearColumnFilter()">Clear filter</button>
601
+ <section class="min-maxContainer">
602
+ <input
603
+ type="number"
604
+ class="slider-text"
605
+ step="{{ sliderFilterTextBoxStep }}"
606
+ [(ngModel)]="sliderMinValue"
607
+ (ngModelChange)="minValueChanged($event)"
608
+ [ngClass]="{'red-border': showSliderMinValueError}"
609
+ placeholder="Min"
610
+ />
611
+ <span>To</span>
612
+ <input
613
+ type="number"
614
+ class="slider-text"
615
+ step="{{ sliderFilterTextBoxStep }}"
616
+ [(ngModel)]="sliderMaxValue"
617
+ (ngModelChange)="maxValueChanged($event)"
618
+ [ngClass]="{'red-border': showSliderMaxValueError}"
619
+ placeholder="Max"
620
+ />
621
+ </section>
622
+ <div class="sidebar-slider">
623
+ <ngx-slider
624
+ class="filter-slider"
625
+ [value]="sliderMinValue"
626
+ [highValue]="sliderMaxValue"
627
+ [options]="options"
628
+ ></ngx-slider>
629
+ </div>
630
+ </ng-container>
631
+
632
+ <div class="buttons-container">
633
+ <button class="button" (click)="cancelSliderFilter()">Cancel</button>
634
+ <button
635
+ class="button"
636
+ [ngClass]="{ disabled: disableSliderApplyButton }"
637
+ (click)="applySliderFilter()"
638
+ [disabled]="disableSliderApplyButton"
639
+ >
640
+ Apply
641
+ </button>
642
+ </div>
643
+ </ng-template>
644
+
645
+ <!-- Date Picker Template -->
646
+ <ng-template #datePickerTooltip>
647
+ <div class="radio-container" *ngIf="showFilterTooltipTabs">
648
+ <div *ngFor="let data of filterTabObjects">
649
+ <p class="filter-tab" [title]="data.label" (click)="populateTooltipDataBasedOnSelectedRadio(data)" [ngClass]="{'active': annaFilterService.selectedRadio == data.key}" *ngIf="filterTabObjects.length > 0">{{ data.label }}</p>
650
+ </div>
651
+ </div>
652
+
653
+ <anna-core-sort-lib *ngIf="showSortComponent" [ngClass]="{'no-bottom-border': !showFilterComponent}"
654
+ (sortOptionClicked)="storeSortTypeInTempVariable($event)" [sortObjectKey]="annaFilterService.selectedRadio"></anna-core-sort-lib>
655
+
656
+ <ng-container *ngIf="showFilterComponent">
657
+ <div class="datepicker-container">
658
+ <button class="column-clear-all" [disabled]="disableColumnClearAllBtn" (click)="clearColumnFilter()">
659
+ Clear filter
660
+ </button>
661
+ <anna-core-calendar-filter-lib
662
+ [minDate]="calendarMinEnabledDate"
663
+ [maxDate]="calendarMaxEnabledDate"
664
+ [selectedFromDate]="selectedMinDate"
665
+ [selectedToDate]="selectedMaxDate"
666
+ (selectedDate) = "calendarDateChanged($event)"
667
+ [label]="selectedLabel"
668
+ >
669
+ </anna-core-calendar-filter-lib>
670
+ </div>
671
+ </ng-container>
672
+
673
+ <div class="buttons-container">
674
+ <button class="button" (click)="cancelInDateFilter()">Cancel</button>
675
+ <button class="button" (click)="applyDateFilter()" [ngClass]="{ disabled: disableCalendarApplyBtn }"
676
+ [disabled]="disableCalendarApplyBtn">Apply</button>
677
+ </div>
678
+
679
+ </ng-template>
680
+
681
+ <!-- Week Picker Template -->
682
+ <ng-template #weekPickerToolTip>
683
+ <div class="weekpicker-container">
684
+ <anna-core-week-calendar-filter-lib
685
+ [week-calendar-config]="gtGeneralConfig.multiWeekPickerConfig"
686
+ (apply)="applyWeekFilter($event)"
687
+ [from-date]="calendarMinEnabledDate"
688
+ [to-date]="calendarMaxEnabledDate"
689
+ >
690
+ </anna-core-week-calendar-filter-lib>
691
+ </div>
692
+ </ng-template>
693
+
694
+ <!-- Time Filter Template -->
695
+ <ng-template #timeFilterToolTip>
696
+
697
+ <div class="radio-container" *ngIf="showFilterTooltipTabs">
698
+ <div *ngFor="let data of filterTabObjects">
699
+ <p class="filter-tab" [title]="data.label" (click)="populateTooltipDataBasedOnSelectedRadio(data)" [ngClass]="{'active': annaFilterService.selectedRadio == data.key}" *ngIf="filterTabObjects.length > 0">{{ data.label }}</p>
700
+ </div>
701
+ </div>
702
+
703
+ <anna-core-sort-lib *ngIf="showSortComponent" [ngClass]="{'no-bottom-border': !showFilterComponent}"
704
+ (sortOptionClicked)="storeSortTypeInTempVariable($event)" [sortObjectKey]="annaFilterService.selectedRadio"></anna-core-sort-lib>
705
+
706
+ <ng-container *ngIf="showFilterComponent">
707
+ <button class="column-clear-all" [disabled]="disableColumnClearAllBtn" (click)="clearColumnFilter()">Clear filter</button>
708
+ <div
709
+ class="time-filter-checkboxes"
710
+ *ngIf="gtGeneralConfig.component == 'SPOTDETAILS' || gtGeneralConfig.component == 'EXCLUDEINVENTORYPOPUP' || gtGeneralConfig.component == 'RATING'"
711
+ >
712
+ <!-- Multi time option checkbox -->
713
+ <div class="d-flex align-items-center" style="padding: 0.5rem 0 0.5rem 0.5rem" *ngIf="showMultiTimeCheckbox">
714
+ <span
715
+ *ngIf="multiTimeCheckboxChecked"
716
+ class="material-icons custom-column-checkbox-checked"
717
+ (click)="selectOrUnselectMultiTimeCheckbox()"
718
+ >
719
+ check_box
720
+ </span>
721
+ <span
722
+ *ngIf="!multiTimeCheckboxChecked"
723
+ class="material-icons custom-column-checkbox-unchecked"
724
+ (click)="selectOrUnselectMultiTimeCheckbox()"
725
+ >
726
+ check_box_outline_blank
727
+ </span>
728
+ <p style="margin-left: 2px">Include Multi</p>
729
+ </div>
730
+ <!-- Zero time option checkbox -->
731
+ <div class="d-flex align-items-center" style="padding: 0.5rem 0 0.5rem 0.5rem" *ngIf="showZeroTimeCheckbox">
732
+ <span
733
+ *ngIf="zeroTimeCheckboxChecked"
734
+ class="material-icons custom-column-checkbox-checked"
735
+ (click)="selectOrUnselectZeroTimeCheckbox()"
736
+ >
737
+ check_box
738
+ </span>
739
+ <span
740
+ *ngIf="!zeroTimeCheckboxChecked"
741
+ class="material-icons custom-column-checkbox-unchecked"
742
+ (click)="selectOrUnselectZeroTimeCheckbox()"
743
+ >
744
+ check_box_outline_blank
745
+ </span>
746
+ <p style="margin-left: 2px">Include Zero</p>
747
+ </div>
748
+ <!-- Enter time range option checkbox -->
749
+ <div class="d-flex align-items-center" style="padding: 0.5rem 0 0.5rem 0.5rem" *ngIf="showEnterTimeCheckbox">
750
+ <span
751
+ *ngIf="enterTimeCheckboxChecked"
752
+ class="material-icons custom-column-checkbox-checked"
753
+ (click)="selectOrUnselectEnterTimeCheckbox()"
754
+ >
755
+ check_box
756
+ </span>
757
+ <span
758
+ *ngIf="!enterTimeCheckboxChecked"
759
+ class="material-icons custom-column-checkbox-unchecked"
760
+ (click)="selectOrUnselectEnterTimeCheckbox()"
761
+ >
762
+ check_box_outline_blank
763
+ </span>
764
+ <p style="margin-left: 2px">Enter time range</p>
765
+ </div>
766
+ </div>
767
+ <div class="time-label-container">
768
+ <label>From</label>
769
+ </div>
770
+ <div class="time-container">
771
+ <input class="form-control numberInput" [ngClass]="{'error-border': startTimeHourErr}" [(ngModel)]="selectedFromTime[0]" type="text" (ngModelChange)="startTimeHourChange($event)" />
772
+ <div class="arrow-container">
773
+ <i class="mdi mdi-triangle upward" (click)="changeStartTimeHour(true)"></i>
774
+ <i class="mdi mdi-triangle downward" (click)="changeStartTimeHour(false)"></i>
775
+ </div>
776
+ <span class="dot">:</span>
777
+ <input class="form-control numberInput" [ngClass]="{'error-border': startTimeMinErr}" [(ngModel)]="selectedFromTime[1]" type="text" (ngModelChange)="startTimeMinChange($event)"/>
778
+ <div class="arrow-container">
779
+ <i class="mdi mdi-triangle upward" (click)="changeStartTimeMinute(true)"></i>
780
+ <i class="mdi mdi-triangle downward" (click)="changeStartTimeMinute(false)"></i>
781
+ </div>
782
+ <div>
783
+ <mat-button-toggle-group [(ngModel)]="selectedFromTime[2]" (ngModelChange)="disableTimeFilterApplyButton()">
784
+ <mat-button-toggle value="AM">
785
+ <span>AM</span>
786
+ </mat-button-toggle>
787
+ <mat-button-toggle value="PM">
788
+ <span>PM</span>
789
+ </mat-button-toggle>
790
+ </mat-button-toggle-group>
791
+ </div>
792
+ </div>
793
+
794
+ <div class="time-label-container">
795
+ <label>To</label>
796
+ </div>
797
+ <div class="time-container">
798
+ <input class="form-control numberInput" [(ngModel)]="selectedToTime[0]" [ngClass]="{'error-border': endTimeHourErr}" (ngModelChange)="endTimeHourChange($event)" type="text" />
799
+ <div class="arrow-container">
800
+ <i class="mdi mdi-triangle upward" (click)="changeEndTimeHour(true)"></i>
801
+ <i class="mdi mdi-triangle downward" (click)="changeEndTimeHour(false)"></i>
802
+ </div>
803
+ <span class="dot">:</span>
804
+ <input class="form-control numberInput" [ngClass]="{'error-border': endTimeMinErr}" [(ngModel)]="selectedToTime[1]" (ngModelChange)="endTimeMinChange($event)" type="text" />
805
+ <div class="arrow-container">
806
+ <i class="mdi mdi-triangle upward" (click)="changeEndTimeMinute(true)"></i>
807
+ <i class="mdi mdi-triangle downward" (click)="changeEndTimeMinute(false)"></i>
808
+ </div>
809
+ <div>
810
+ <mat-button-toggle-group [(ngModel)]="selectedToTime[2]" (ngModelChange)="disableTimeFilterApplyButton()">
811
+ <mat-button-toggle value="AM">
812
+ <span>AM</span>
813
+ </mat-button-toggle>
814
+ <mat-button-toggle value="PM">
815
+ <span>PM</span>
816
+ </mat-button-toggle>
817
+ </mat-button-toggle-group>
818
+ </div>
819
+ </div>
820
+ </ng-container>
821
+
822
+ <div class="buttons-container">
823
+ <button class="button" (click)="closeTimeFilter()">Cancel</button>
824
+ <button
825
+ class="button"
826
+ [ngClass]="{ disabled: disableTimeFilterApplyBtn }"
827
+ (click)="applyTimeFilters()"
828
+ [disabled]="disableTimeFilterApplyBtn"
829
+ >
830
+ Apply
831
+ </button>
832
+ </div>
833
+ </ng-template>
834
+
835
+ <ng-template #columnInfoTooltip>
836
+ <p style="padding: 0.5rem; color: black;white-space: nowrap;">This preemption is rejected and not marked for credit.</p>
837
+ </ng-template>
838
+
839
+ <ng-template #ratingInfoTooltip>
840
+ <p class="first-row">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>
841
+ <p class="second-row">Shows 'Projected Rating' for ADU Offered spot(s).</p>
842
+ </ng-template>
843
+
844
+ <ng-template #impsInfoTooltip>
845
+ <p class ="first-row" >Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>
846
+ <p class="second-row" >Shows 'Projected IMPS' for ADU Offered spot(s).</p>
847
+ </ng-template>
848
+
849
+ <ng-template #spotsColumnEquivalizationMessageTooltip>
850
+ <p class="spot-column-tooltip-message" >This consists of equivalized spots and un-equivalized Paid Programs & un-equivalized Non-spots.</p>
851
+ </ng-template>
852
+
853
+ <ng-template #rateInfoTooltip>
854
+ <p class ="first-row" >Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>
855
+ <p class="second-row" >Shows 'Projected $ Value' for ADU Offered spot(s).</p>
856
+ </ng-template>
857
+
858
+ <ng-template #sellerHierarchyTooltip>
859
+ <ng-container *ngIf="sellerGroupHierarchy.length > 0">
860
+ <table class="seller-hierarchy-table">
861
+ <thead>
862
+ <tr>
863
+ <th>#</th>
864
+ <th>Inventory Codes</th>
865
+ <th>Program/Description</th>
866
+ </tr>
867
+ </thead>
868
+ <tbody>
869
+ <tr *ngFor="let data of sellerGroupHierarchy; let tooltipIndex = index">
870
+ <td>{{ tooltipIndex + 1 }}</td>
871
+ <td>
872
+ <span>{{ data.inventoryCode }}</span>
873
+ </td>
874
+ <td>
875
+ <span>{{ data.program }}</span>
876
+ </td>
877
+ </tr>
878
+ </tbody>
879
+ </table>
880
+ </ng-container>
881
+ <ng-container *ngIf="sellerGroupHierarchy.length == 0">
882
+ <span style="color: #000">Seller group not available for this inventory code</span>
883
+ </ng-container>
884
+ </ng-template>
885
+
886
+ <ng-template #lurViolationInfoTooltip>
887
+ <p class ="first-row" >The values are for the entire week.</p>
888
+ </ng-template>
889
+
890
+ <ng-template #postedRatingDifference>
891
+ <p class="difference-text">The difference between posted and booked average rating is {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>
892
+ </ng-template>
893
+
894
+ <ng-template #postedImpDifference>
895
+ <p class="difference-text">The difference between posted and booked average impression is {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>
896
+ </ng-template>
897
+
898
+ <ng-template #ongoingRevBookedColumnTooltip>
899
+ <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>
900
+ </ng-template>
901
+
902
+ <ng-template #completedRevBookedColumnTooltip>
903
+ <p>The Booked $ value corresponds on the last permanent revision generated</p>
904
+ </ng-template>
905
+
906
+ <ng-template #circularProgressBar>
907
+ <circle-progress
908
+ [percent]="percentDone"
909
+ [radius]="5"
910
+ [showTitle]="false"
911
+ [showUnits]="false"
912
+ [showSubtitle]="false"
913
+ [outerStrokeWidth]="3"
914
+ [innerStrokeWidth]="3"
915
+ [space]="-3"
916
+ [outerStrokeColor]="'#268bff'"
917
+ [innerStrokeColor]="'#d5d5d5'"
918
+ [animationDuration]="10"
919
+ ></circle-progress>
920
+ </ng-template>