@annalib/anna-core 4.2.3 → 4.2.5

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 (147) 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-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.html +22 -0
  6. package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.scss +0 -0
  7. package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.spec.ts +25 -0
  8. package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.ts +16 -0
  9. package/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.html +33 -0
  10. package/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.scss +0 -0
  11. package/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.spec.ts +25 -0
  12. package/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.ts +28 -0
  13. package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.html +20 -0
  14. package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.scss +0 -0
  15. package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.spec.ts +25 -0
  16. package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.ts +16 -0
  17. package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.html +3 -0
  18. package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.scss +17 -0
  19. package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.spec.ts +24 -0
  20. package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.ts +20 -0
  21. package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.html +23 -0
  22. package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.scss +0 -0
  23. package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.spec.ts +25 -0
  24. package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.ts +16 -0
  25. package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.html +15 -0
  26. package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.scss +0 -0
  27. 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
  28. package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.ts +19 -0
  29. package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.html +14 -0
  30. package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.scss +0 -0
  31. package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.spec.ts +25 -0
  32. package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.ts +16 -0
  33. package/src/lib/anna-core-shared-lib/constants/shared.constant.ts +34 -0
  34. package/src/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.ts +19 -0
  35. package/src/lib/anna-core-shared-lib/models/anna-generic-data-type.model.ts +19 -0
  36. 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
  37. 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
  38. package/src/lib/anna-core-shared-lib/models/anna-sort.model.ts +7 -0
  39. package/src/lib/anna-core-shared-lib/models/anna-tooltip.model.ts +44 -0
  40. package/src/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.ts +20 -0
  41. package/src/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.ts +43 -0
  42. package/src/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.ts +19 -0
  43. package/src/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.ts +12 -0
  44. package/src/lib/anna-core-shared-lib/services/anna-date-time-format.service.ts +216 -0
  45. package/src/lib/anna-core-shared-lib/services/anna-filter.service.ts +514 -0
  46. package/src/lib/anna-core-shared-lib/services/anna-generic-table.service.ts +44 -0
  47. package/src/lib/anna-core-shared-lib/services/anna-global-config.service.ts +170 -0
  48. package/src/lib/anna-core-shared-lib/services/anna-sort.service.ts +179 -0
  49. package/src/lib/anna-core.module.ts +110 -0
  50. package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.html +46 -0
  51. package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.scss +153 -0
  52. package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.spec.ts +24 -0
  53. package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.ts +106 -0
  54. package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.html +129 -0
  55. package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.scss +275 -0
  56. package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.spec.ts +24 -0
  57. package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.ts +412 -0
  58. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.html +926 -0
  59. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.scss +628 -0
  60. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.spec.ts +25 -0
  61. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.ts +2064 -0
  62. package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.html +10 -0
  63. package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.scss +1 -0
  64. package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.spec.ts +24 -0
  65. package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.ts +70 -0
  66. package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.html +13 -0
  67. package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.scss +88 -0
  68. package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.spec.ts +25 -0
  69. package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.ts +460 -0
  70. 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
  71. 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
  72. package/src/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.ts +204 -0
  73. 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
  74. package/{public-api.d.ts → src/public-api.ts} +28 -0
  75. package/src/test.ts +27 -0
  76. package/tsconfig.lib.json +19 -0
  77. package/tsconfig.lib.prod.json +10 -0
  78. package/tsconfig.spec.json +17 -0
  79. package/annalib-anna-core.d.ts +0 -5
  80. package/esm2020/annalib-anna-core.mjs +0 -5
  81. package/esm2020/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +0 -15
  82. package/esm2020/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +0 -35
  83. package/esm2020/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +0 -15
  84. package/esm2020/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +0 -22
  85. package/esm2020/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +0 -15
  86. package/esm2020/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +0 -21
  87. package/esm2020/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +0 -15
  88. package/esm2020/lib/anna-core-shared-lib/constants/shared.constant.mjs +0 -34
  89. package/esm2020/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.mjs +0 -27
  90. package/esm2020/lib/anna-core-shared-lib/models/anna-generic-data-type.model.mjs +0 -2
  91. package/esm2020/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +0 -2
  92. package/esm2020/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +0 -3
  93. package/esm2020/lib/anna-core-shared-lib/models/anna-sort.model.mjs +0 -2
  94. package/esm2020/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +0 -30
  95. package/esm2020/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.mjs +0 -26
  96. package/esm2020/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +0 -46
  97. package/esm2020/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.mjs +0 -25
  98. package/esm2020/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.mjs +0 -16
  99. package/esm2020/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +0 -196
  100. package/esm2020/lib/anna-core-shared-lib/services/anna-filter.service.mjs +0 -426
  101. package/esm2020/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +0 -48
  102. package/esm2020/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +0 -133
  103. package/esm2020/lib/anna-core-shared-lib/services/anna-sort.service.mjs +0 -147
  104. package/esm2020/lib/anna-core.module.mjs +0 -175
  105. package/esm2020/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +0 -100
  106. package/esm2020/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +0 -362
  107. package/esm2020/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +0 -1724
  108. package/esm2020/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +0 -67
  109. package/esm2020/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +0 -357
  110. 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
  111. package/esm2020/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +0 -2
  112. package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +0 -178
  113. package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +0 -2
  114. package/esm2020/public-api.mjs +0 -47
  115. package/fesm2015/annalib-anna-core.mjs +0 -4302
  116. package/fesm2015/annalib-anna-core.mjs.map +0 -1
  117. package/fesm2020/annalib-anna-core.mjs +0 -4299
  118. package/fesm2020/annalib-anna-core.mjs.map +0 -1
  119. package/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.d.ts +0 -8
  120. package/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.d.ts +0 -16
  121. package/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.d.ts +0 -8
  122. package/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.d.ts +0 -11
  123. package/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.d.ts +0 -8
  124. package/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.d.ts +0 -11
  125. package/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.d.ts +0 -8
  126. package/lib/anna-core-shared-lib/constants/shared.constant.d.ts +0 -32
  127. package/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.d.ts +0 -9
  128. package/lib/anna-core-shared-lib/models/anna-generic-data-type.model.d.ts +0 -16
  129. package/lib/anna-core-shared-lib/models/anna-sort.model.d.ts +0 -6
  130. package/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +0 -25
  131. package/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.d.ts +0 -9
  132. package/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.d.ts +0 -9
  133. package/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.d.ts +0 -9
  134. package/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.d.ts +0 -7
  135. package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +0 -27
  136. package/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +0 -73
  137. package/lib/anna-core-shared-lib/services/anna-generic-table.service.d.ts +0 -14
  138. package/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +0 -21
  139. package/lib/anna-core-shared-lib/services/anna-sort.service.d.ts +0 -16
  140. package/lib/anna-core.module.d.ts +0 -35
  141. package/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.d.ts +0 -34
  142. package/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +0 -70
  143. package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +0 -271
  144. package/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.d.ts +0 -17
  145. package/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +0 -141
  146. 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
  147. package/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +0 -45
@@ -0,0 +1,514 @@
1
+ // Angular import statements
2
+ import { Options } from '@angular-slider/ngx-slider';
3
+ import { Injectable } from "@angular/core";
4
+
5
+ // Third party import statements
6
+ import { min, max, map, sortBy, uniq, cloneDeep, isEqual } from "lodash-es";
7
+ import moment from "moment";
8
+ import { SortType } from '../models/anna-sort.model';
9
+
10
+ // User defined import statements
11
+ import { AnnaDateTimeFormatService, NgbDateType } from './anna-date-time-format.service';
12
+ import { AnnaSortService } from './anna-sort.service';
13
+
14
+ @Injectable({
15
+ providedIn: 'root'
16
+ })
17
+ export class AnnaFilterService {
18
+
19
+ tooltipMap = new Map();
20
+ tooltipSelectedMap = new Map();
21
+ initialValueMap: Map<string, any>;
22
+ translateFunc: string;
23
+ selectedRadio: string;
24
+ subRadioButton: string;
25
+
26
+ calendarSet: Set<string>;
27
+ sliderSet: Set<string>;
28
+ timeSet: Set<string>;
29
+
30
+ includeMultiTime: boolean;
31
+ includeZeroTime: boolean;
32
+ includeTimeRange: boolean;
33
+
34
+ appliedFiltersArray: string[] = [];
35
+ flightDateRange: { minSelectedDate: any, maxSelectedDate: any };
36
+ sliderData: { min: any, max: any };
37
+ ngxSliderObj: Options;
38
+ sliderCurrencySet = new Set(["booked","cpp","cpm","rcvPreempt","osPreempt","postedAdu","scheduledAdu","audienceDeficit","Rate"]);
39
+
40
+ public static bufferSize = 20;
41
+ isFilterSortActive: any = null;
42
+
43
+ constructor(private dateTimeFormatService: AnnaDateTimeFormatService, private annaSortService: AnnaSortService) {
44
+ console.log("AnnaFilterService service created.")
45
+ const sliderArr = [
46
+ "rcvPreempt",
47
+ "osPreempt",
48
+ "rcvUnderDly",
49
+ "postedAudPercent",
50
+ "booked",
51
+ "spots",
52
+ "grp",
53
+ "cpp",
54
+ "imps",
55
+ "cpm",
56
+ "osUnderDly",
57
+ "totalWeeks",
58
+ "WeekNumber",
59
+ "Rate",
60
+ "OrderedRatingsOrImpressions",
61
+ "PostedRatingsOrImpressions", ,
62
+ "postedAudPercent",
63
+ "postedAdu",
64
+ "scheduledAdu",
65
+ "audienceDeficit",
66
+ "offeredMGs",
67
+ "outstandingPE",
68
+ "offeredADUs",
69
+ "udDeficitValue",
70
+ "bookedValue",
71
+ "bookedSpots",
72
+ "userADUs",
73
+ "buyerChanges",
74
+ "userChanges",
75
+ "userMG"
76
+ ];
77
+ const calendarArr = ["period", "AirDate", "flightStartDate", "flightEndDate","date", "startDate", "endDate"];
78
+ const timeArr = ["StartTimeForFilter", "EndTimeForFilter",
79
+ "start_time_for_filter", "end_time_for_filter", "startEndTimeMulti", "startEndTime"];
80
+ this.sliderSet = new Set(sliderArr);
81
+ this.calendarSet = new Set(calendarArr);
82
+ this.timeSet = new Set(timeArr);
83
+ }
84
+
85
+ returnMaxAndMinValue(data: any[], key: string, isMin: boolean) {
86
+ data = data.filter((obj) => !["", "-", null].includes(obj[key]));
87
+ const values = data.map((x) => x[key]);
88
+ let valueToReturn = isMin ? min(values) : max(values);
89
+ return valueToReturn;
90
+ }
91
+
92
+ returnMinAndMaxDate(data: any[], key: string) {
93
+ data = data.filter((obj) => !["", "-", null].includes(obj[key]));
94
+ let DateArr = data.map((obj) => moment(obj[key]));
95
+ let minDate = moment.min(DateArr);
96
+ let maxDate = moment.max(DateArr);
97
+ return [minDate, maxDate];
98
+ }
99
+
100
+ isTooltipActive(header: string[], sortMap: Map<string, SortType>): boolean {
101
+ let set: Set<string> = new Set(this.appliedFiltersArray);
102
+ if(header.length == 1){
103
+ return ( (sortMap.size > 0 && sortMap.get(header[0]) != "DEFAULT") || set.has(header[0]));
104
+ }
105
+ return ( (sortMap.size > 0 && sortMap.get(header[0]) != "DEFAULT") || (sortMap.size > 0 && sortMap.get(header[1]) != "DEFAULT") || set.has(header[0]) || set.has(header[1]));
106
+
107
+ }
108
+
109
+ clearColumnFilter() {
110
+ if(this.tooltipSelectedMap.has(this.selectedRadio)){
111
+ this.tooltipSelectedMap.delete(this.selectedRadio);
112
+ let appliedFilterSet: Set<string> = new Set(this.appliedFiltersArray);
113
+ appliedFilterSet.delete(this.selectedRadio);
114
+ this.appliedFiltersArray = [...appliedFilterSet];
115
+ }
116
+
117
+ if(this.annaSortService.columnSortState.has(this.selectedRadio)){
118
+ this.annaSortService.columnSortState.set(this.selectedRadio,"DEFAULT");
119
+ }
120
+
121
+ }
122
+
123
+ setOptionValues(minValue: number, maxValue: number) {
124
+ return {
125
+ floor: minValue,
126
+ ceil: maxValue,
127
+ disabled: true,
128
+ translate: this.normalTranslateFunction
129
+ };
130
+ }
131
+
132
+ percentTranslateFunction = (data: number): string => {
133
+ const val = data.toFixed(1) + "%";
134
+ return val;
135
+ };
136
+
137
+ currencyTranslateFunction = (data: number): string => {
138
+ if (Math.abs(data) >= 1000) {
139
+ let isNegVal = data < 0;
140
+ const val = "$" + (Math.abs(data) / 1000).toFixed(1); + "k";
141
+ return isNegVal ? "-" + val : val;
142
+
143
+ } else {
144
+ let isNegVal = data < 0;
145
+ let isWholeNum = parseInt(data.toString()) == data;
146
+ let val = isWholeNum ? Math.abs(data).toString() : Math.abs(data).toFixed(1);
147
+ return isNegVal ? "-$" + val : "$" + val;
148
+ }
149
+ };
150
+
151
+ normalTranslateFunction = (data: number): string => {
152
+ if (data >= 1000) {
153
+ const val = (data / 1000).toFixed(1) + "k";
154
+ return val;
155
+ } else if (data != Math.floor(data)) {
156
+ return data.toFixed(1).toString();
157
+ }
158
+ return data.toString();
159
+ };
160
+
161
+ findUniqueDatesWithData(data: any[]) {
162
+ let uniqueDates = uniq(data.map((u) => u["date"]));
163
+ let uniqueDatesInNgbDateFormat: NgbDateType[] = [];
164
+ uniqueDates.forEach((date: any) => {
165
+ uniqueDatesInNgbDateFormat.push(
166
+ this.dateTimeFormatService.convertToNgbDateStandardFormat(moment(date, "MM/DD/YY").format("MM/DD/YYYY"))
167
+ );
168
+ });
169
+ return uniqueDatesInNgbDateFormat;
170
+ }
171
+
172
+ reOrderAppliedFiltersArray(isHierarchialUserFiltered: boolean, date?: any) {
173
+ let isFiltered = true;
174
+ isFiltered = this.checkIfDataIsFiltered(isFiltered, isHierarchialUserFiltered, date);
175
+ this.removeOrChangeLatestFilterIndex(isFiltered);
176
+ }
177
+
178
+ checkIfDataIsFiltered(isFiltered: boolean, isHierarchialUserFiltered: boolean, date?: any) {
179
+ if (this.selectedRadio == "user" && !this.tooltipMap.has("user")) {
180
+ isFiltered = cloneDeep(isHierarchialUserFiltered);
181
+ } else if (this.selectedRadio == "StartTimeForFilter" || this.selectedRadio == "EndTimeForFilter"
182
+ || this.selectedRadio == "start_time_for_filter" || this.selectedRadio == "end_time_for_filter" || this.selectedRadio == "startEndTimeMulti") {
183
+ isFiltered = !isEqual(
184
+ this.initialValueMap.get(this.selectedRadio),
185
+ this.tooltipSelectedMap.get(this.selectedRadio)
186
+ ) || !this.includeZeroTime || !this.includeMultiTime;
187
+ }
188
+ else if (this.selectedRadio == "startEndTime" || this.selectedRadio == "TimeBand") {
189
+ isFiltered = !isEqual(this.initialValueMap.get(this.selectedRadio), this.tooltipSelectedMap.get(this.selectedRadio)) || !this.includeZeroTime || !this.includeMultiTime;
190
+ }
191
+ else if (this.sliderSet.has(this.selectedRadio)) {
192
+ isFiltered = !isEqual(this.initialValueMap.get(this.selectedRadio), this.tooltipSelectedMap.get(this.selectedRadio)) && !isEqual(this.tooltipSelectedMap.get(this.selectedRadio), this.sliderData);
193
+ if (this.selectedRadio == "postedAdu" && this.subRadioButton == "notRequired") {
194
+ isFiltered = true;
195
+ }
196
+ if (!isFiltered && this.tooltipSelectedMap.has(this.selectedRadio)) {
197
+ this.tooltipSelectedMap.delete(this.selectedRadio);
198
+ }
199
+ } else if (
200
+ this.selectedRadio == "startDate" ||
201
+ this.selectedRadio == "endDate" ||
202
+ this.selectedRadio == "period" ||
203
+ this.selectedRadio == "AirDate" ||
204
+ this.selectedRadio === "flightStartDate" ||
205
+ this.selectedRadio === "flightEndDate" ||
206
+ this.selectedRadio == "date"
207
+ ) {
208
+ isFiltered =
209
+ !isEqual(this.initialValueMap.get(this.selectedRadio), this.tooltipSelectedMap.get(this.selectedRadio)) &&
210
+ !isEqual(this.tooltipSelectedMap.get(this.selectedRadio), this.flightDateRange);
211
+ if (!isFiltered && this.tooltipSelectedMap.has(this.selectedRadio)) {
212
+ this.tooltipSelectedMap.delete(this.selectedRadio);
213
+ }
214
+ } else {
215
+ let totalOptionsCount = this.tooltipMap.get(this.selectedRadio).filter((x: any) => !x.isHidden).length;
216
+ let selectedOptionsCount = this.tooltipMap.get(this.selectedRadio).filter((x: any) => !x.isHidden && x.isSelected).length;
217
+ isFiltered = selectedOptionsCount > 0 && selectedOptionsCount != totalOptionsCount ? true : false;
218
+ }
219
+ return isFiltered;
220
+ }
221
+
222
+ removeOrChangeLatestFilterIndex(isFiltered: boolean) {
223
+ let set = new Set(this.appliedFiltersArray);
224
+
225
+ if (isFiltered && !set.has(this.selectedRadio)) {
226
+ set.add(this.selectedRadio);
227
+ } else if (isFiltered && set.has(this.selectedRadio)) {
228
+ set.delete(this.selectedRadio);
229
+ set.add(this.selectedRadio);
230
+ } else {
231
+ set.delete(this.selectedRadio);
232
+ }
233
+ this.appliedFiltersArray = [...set];
234
+ }
235
+
236
+ filterData(originalData: any[], keyToSkip: string) {
237
+ let filteredData = [...originalData];
238
+
239
+ this.tooltipSelectedMap.forEach((value, key) => {
240
+ if (key != keyToSkip) {
241
+ if (this.sliderSet.has(key)) {
242
+ filteredData = filteredData.filter((obj) => obj[key] >= value.min && obj[key] <= value.max);
243
+ }
244
+ else if (key === "startDate" || key === "endDate" || key === "AirDate" || key === "flightStartDate" || key === "flightEndDate" || key == "date") {
245
+ filteredData = filteredData.filter((obj) => this.isObjectInTheRange(obj, value, key));
246
+ } else if (key === "period" ) {
247
+ filteredData = filteredData.filter((obj) => this.getDataInTheDateRange(obj, value, key));
248
+ }
249
+ else if (key === "StartTimeForFilter" || key === "EndTimeForFilter"
250
+ || key === "start_time_for_filter" || key === "end_time_for_filter") {
251
+ filteredData = filteredData.filter((obj) => this.returnDataForFromAndToTimeRange(obj, value, key));
252
+ }
253
+ else if (key === "startEndTimeMulti" || key == "startEndTime" || key === "TimeBand") {
254
+ filteredData = filteredData.filter((obj) => this.returnDataForStartAndEndTimeRange(obj, value, key));
255
+ }
256
+ else if (value.length > 0) {
257
+ filteredData = filteredData.filter((u) => value.includes(u[key]));
258
+ }
259
+ }
260
+ });
261
+ return filteredData;
262
+ }
263
+
264
+ returnOrdersInTheRange(order: any, range: any, key: any) {
265
+ let isDateBetweenTheSelectedRange = moment(order[key]).isBetween(range.minSelectedDate, range.maxSelectedDate);
266
+ let isDateSameAsTheMinSelectedDate = moment(order[key]).isSame(range.minSelectedDate);
267
+ let isDateSameAsTheMaxSelectedDate = moment(order[key]).isSame(range.maxSelectedDate);
268
+ return isDateBetweenTheSelectedRange || isDateSameAsTheMinSelectedDate || isDateSameAsTheMaxSelectedDate;
269
+ }
270
+
271
+ returnDataForTimeRange(obj: any, selectedData: any) {
272
+ let format = "HH:mm:ss";
273
+ let selectedStartDate = moment(selectedData.startTime, format);
274
+ let selectedEndDate = moment(selectedData.endTime, format);
275
+ let startTime = moment(obj.startTime, format);
276
+ let endTime = moment(obj.endTime, format);
277
+
278
+ let isStartTimeSameAsSelectedStartTime = startTime.isSame(selectedStartDate);
279
+ let isStartTimeBetweenSelectedStartAndEndTime = startTime.isBetween(selectedStartDate, selectedEndDate);
280
+ let isEndTimeSameAsSelectedEndTime = endTime.isSame(selectedEndDate);
281
+ let isEndTimeBetweenSelectedStartAndEndTime = endTime.isBetween(selectedStartDate, selectedEndDate);
282
+
283
+ return (
284
+ (isStartTimeBetweenSelectedStartAndEndTime && isEndTimeBetweenSelectedStartAndEndTime) ||
285
+ (isStartTimeSameAsSelectedStartTime && isEndTimeSameAsSelectedEndTime) ||
286
+ (isStartTimeSameAsSelectedStartTime && isEndTimeBetweenSelectedStartAndEndTime) ||
287
+ (isStartTimeBetweenSelectedStartAndEndTime && isEndTimeSameAsSelectedEndTime)
288
+ );
289
+ }
290
+
291
+ returnDataForFromAndToTimeRange(obj: any, selectedData: any, key: any) {
292
+ let format = "HH:mm:ss";
293
+ let selectedFromTime = moment(selectedData.fromTime, format);
294
+ let selectedToTime = moment(selectedData.toTime, format);
295
+ let objTime = obj[key];
296
+
297
+ if (["", "-", null].includes(objTime)) {
298
+ return false;
299
+ }
300
+ if (selectedData.includeMulti && obj[key] == "<multi>") {
301
+ return true;
302
+ }
303
+ if (!selectedData.includeMulti && obj[key] == "<multi>") {
304
+ return false;
305
+ }
306
+ if (selectedData.includeZero && obj[key] == "0") {
307
+ return true;
308
+ }
309
+ if (!selectedData.includeZero && obj[key] == "0") {
310
+ return false;
311
+ }
312
+ if (!selectedData.includeTimeRange) {
313
+ return false;
314
+ }
315
+
316
+
317
+ let momentTime = moment(objTime,format);
318
+
319
+ let isObjTimeSameAsSelectedFromTime = momentTime.isSame(selectedFromTime);
320
+ let isObjTimeSameAsSelectedToTime = momentTime.isSame(selectedToTime);
321
+ let isObjTimeBetweenSelectedFromTimeAndToTime = momentTime.isBetween(selectedFromTime, selectedToTime);
322
+
323
+ return (
324
+ isObjTimeSameAsSelectedFromTime ||
325
+ isObjTimeSameAsSelectedToTime ||
326
+ isObjTimeBetweenSelectedFromTimeAndToTime
327
+ );
328
+ }
329
+
330
+ returnDataForStartAndEndTimeRange(obj: any, selectedData:any, key: string) {
331
+ let format = "HH:mm:ss";
332
+ let selectedFromTime = moment(selectedData.fromTime, format);
333
+ let selectedToTime = moment(selectedData.toTime, format);
334
+
335
+ if(selectedData.includeMulti && obj[key][0] == "<multi>") {
336
+ return true;
337
+ }
338
+
339
+ if(!selectedData.includeMulti && obj[key][0] == "<multi>") {
340
+ return false;
341
+ }
342
+
343
+ if(selectedData.includeZero && obj[key][0] == "0") {
344
+ return true;
345
+ }
346
+
347
+ if(!selectedData.includeZero && obj[key][0] == "0") {
348
+ return false;
349
+ }
350
+
351
+ if(!selectedData.includeTimeRange) {
352
+ return false;
353
+ }
354
+
355
+ let startTime = moment(obj[key][1], format);
356
+ let endTime = moment(obj[key][2], format);
357
+
358
+ let isStartTimeSameAsSelectedStartTime = startTime.isSame(selectedFromTime);
359
+ let isStartTimeBetweenSelectedStartAndEndTime = startTime.isBetween(selectedFromTime, selectedToTime);
360
+ let isEndTimeSameAsSelectedEndTime = endTime.isSame(selectedToTime);
361
+ let isEndTimeBetweenSelectedStartAndEndTime = endTime.isBetween(selectedFromTime, selectedToTime);
362
+
363
+ return (
364
+ (isStartTimeBetweenSelectedStartAndEndTime && isEndTimeBetweenSelectedStartAndEndTime) ||
365
+ (isStartTimeSameAsSelectedStartTime && isEndTimeSameAsSelectedEndTime) ||
366
+ (isStartTimeSameAsSelectedStartTime && isEndTimeBetweenSelectedStartAndEndTime) ||
367
+ (isStartTimeBetweenSelectedStartAndEndTime && isEndTimeSameAsSelectedEndTime)
368
+ );
369
+
370
+ }
371
+
372
+ getDataInTheDateRange(obj: any, value: any, key: any) {
373
+ let parsingFormat: string;
374
+ if (key === "period") {
375
+ parsingFormat = "YYYY-MM-DD";
376
+
377
+ let momentStartDate = moment(obj.startDate);
378
+ let momentEndDate = moment(obj.endDate);
379
+
380
+ let startDateIsBetweenSelDate = momentStartDate.isBetween(
381
+ value.fromDate,
382
+ value.toDate
383
+ );
384
+ let endDateIsBetweenSelDate = momentEndDate.isBetween(
385
+ value.fromDate,
386
+ value.toDate
387
+ );
388
+
389
+
390
+ let startDateIsSameAsSelStartDate = value.fromDate.isSame(momentStartDate);
391
+ let endDateIsSameAsSelEndDate = value.toDate.isSame(momentEndDate);
392
+
393
+ return (
394
+ (startDateIsBetweenSelDate || startDateIsSameAsSelStartDate) &&
395
+ (endDateIsBetweenSelDate || endDateIsSameAsSelEndDate)
396
+ );
397
+ } else if (key === "AirDate" || key === "flightStartDate" || key === "flightEndDate") {
398
+ parsingFormat = "MM/DD/YYYY";
399
+ let dateIsBetweenSelDate = moment(obj[key], parsingFormat).isBetween(value.minSelectedDate, value.maxSelectedDate);
400
+
401
+ let dateIsSameAsSelStartDate = moment(obj[key], parsingFormat).isSame(value.minSelectedDate);
402
+ let dateIsSameAsSelEndDate = moment(obj[key], parsingFormat).isSame(value.maxSelectedDate);
403
+
404
+ return dateIsBetweenSelDate || dateIsSameAsSelStartDate || dateIsSameAsSelEndDate;
405
+ }
406
+ }
407
+
408
+
409
+ public initializeTimeFilterData(clonedData: any[], key = "startEndTime") {
410
+ let startTimeArr = map(clonedData, "startTime");
411
+ let endTimeArr = map(clonedData, "endTime");
412
+
413
+ startTimeArr.sort((a: any, b: any) => {
414
+ return this.dateTimeFormatService.sortByTimeAscending(a, b);
415
+ });
416
+
417
+ endTimeArr.sort((a: any, b: any) => {
418
+ return this.dateTimeFormatService.sortByTimeDescending(a, b);
419
+ });
420
+
421
+ let initialStartEndTime = {
422
+ startTime: startTimeArr[0],
423
+ endTime: endTimeArr[0],
424
+ };
425
+ this.initialValueMap.set(key, initialStartEndTime);
426
+ }
427
+
428
+ returnColumnFilterStatus(data: any[], headerName: string | number) {
429
+
430
+ if(headerName == "startEndTime"){
431
+ let time = data.map(u => u[headerName][0]);
432
+ let uniqTime = uniq(time);
433
+ return uniqTime.length == 0;
434
+ }
435
+
436
+ return uniq(data.map((u) => u[headerName])).length > 1 ? false : true;
437
+ }
438
+
439
+ getFilterOptionsData(data: any[], clonedData: any[]){
440
+ let appliedFilterSet = new Set(this.appliedFiltersArray);
441
+ if(appliedFilterSet.has(this.selectedRadio)){
442
+ return this.filterData(clonedData, this.selectedRadio);
443
+ }
444
+ else{
445
+ return data;
446
+ }
447
+ }
448
+
449
+ reOrderAppliedFiltersState(clonedData: any[], value: any){
450
+ let isFiltered = true;
451
+ isFiltered = this.checkIfFilterIsApplied(clonedData,value);
452
+ this.removeOrChangeLatestFilterIndex(isFiltered);
453
+ return isFiltered;
454
+ }
455
+
456
+ checkIfFilterIsApplied(clonedData: any[],value: any){
457
+ let initialValueOfColumn = sortBy(clonedData.map(item => item[this.selectedRadio]));
458
+ let currentValueOfColumn = sortBy(this.applyFilter(clonedData,value).map(item => item[this.selectedRadio]));
459
+ return !isEqual(initialValueOfColumn, currentValueOfColumn);
460
+ }
461
+
462
+ applyFilter(data: any[],value: any){
463
+ let filteredData = data;
464
+ let key = this.selectedRadio;
465
+ if (this.sliderSet.has(key)) {
466
+ filteredData = filteredData.filter((obj) => obj[key] >= value.min && obj[key] <= value.max);
467
+ }
468
+ else if (key === "startDate" || key === "endDate" || key === "AirDate" || key === "flightStartDate" || key === "flightEndDate" || key == "date") {
469
+ filteredData = filteredData.filter((obj) => this.isObjectInTheRange(obj, value, key));
470
+ } else if (key === "period" ) {
471
+ filteredData = filteredData.filter((obj) => this.getDataInTheDateRange(obj, value, key));
472
+ }
473
+ else if (key === "StartTimeForFilter" || key === "EndTimeForFilter"
474
+ || key === "start_time_for_filter" || key === "end_time_for_filter") {
475
+ filteredData = filteredData.filter((obj) => this.returnDataForFromAndToTimeRange(obj, value, key));
476
+ }
477
+ else if (key === "startEndTimeMulti" || key == "startEndTime" || key === "TimeBand") {
478
+ filteredData = filteredData.filter((obj) => this.returnDataForStartAndEndTimeRange(obj, value, key));
479
+ }
480
+ else if (value.length > 0) {
481
+ filteredData = filteredData.filter((u) => value.includes(u[key]));
482
+ }
483
+ return filteredData;
484
+ }
485
+
486
+ isObjectInTheRange(obj: any, value: {fromDate: moment.Moment, toDate: moment.Moment},key:string){
487
+ let objVal = obj[key];
488
+ let momentDate = moment(objVal);
489
+ let isDateSameAsStartOfTheRange = value.fromDate.isSame(objVal);
490
+ let isDateSameAsEndOfTheRange = value.toDate.isSame(objVal);
491
+ let isDateBetweenTheStartAndEndOfRange = momentDate.isBetween(value.fromDate,value.toDate);
492
+ return isDateSameAsStartOfTheRange || isDateSameAsEndOfTheRange || isDateBetweenTheStartAndEndOfRange;
493
+ }
494
+
495
+ updateStateOfTheCurrentFilterTab(sortMap: Map<string, SortType>){
496
+ let activeKey = this.selectedRadio;
497
+ let keyArr: string[] = [];
498
+ Object.keys(this.isFilterSortActive).forEach(key => {
499
+ if(key.includes(activeKey)){
500
+ keyArr = key.split(",");
501
+ this.isFilterSortActive[key] = this.isTooltipActive(keyArr, sortMap);
502
+ }
503
+ });
504
+
505
+ }
506
+
507
+ updateStateOfAllTheKeys(sortMap: Map<string, SortType>){
508
+ Object.keys(this.isFilterSortActive).forEach(key => {
509
+ let keyArr = key.split(",");
510
+ this.isFilterSortActive[key] = this.isTooltipActive(keyArr,sortMap);
511
+ })
512
+ }
513
+
514
+ }
@@ -0,0 +1,44 @@
1
+ // Angular import statements
2
+ import { Injectable } from "@angular/core";
3
+
4
+ // Third party import statements
5
+ import { Subject } from "rxjs";
6
+
7
+ //sub-entries of anna lib import statement
8
+ import { AnnaFilterService } from "./anna-filter.service";
9
+ import { AnnaSortService } from "./anna-sort.service";
10
+
11
+ @Injectable({
12
+ providedIn: "root",
13
+ })
14
+ export class AnnaGenericTableService {
15
+
16
+ virtualScrollSubject = new Subject();
17
+ constructor(private annaFilterService: AnnaFilterService,private annaSortService: AnnaSortService){}
18
+
19
+ calculateNumberOfSkeletonColumnsForTable(tableHeaders: any[]): number[][] {
20
+ let numberOfSkeletonColumns: any[][] = [];
21
+ var headersInEachColumn = 0;
22
+ tableHeaders.forEach((column) => {
23
+ if (column.visible) {
24
+ headersInEachColumn = 0;
25
+ column.headerInfo.forEach(() => {
26
+ headersInEachColumn++;
27
+ })
28
+ numberOfSkeletonColumns.push(Array(headersInEachColumn).fill(0));
29
+ }
30
+ })
31
+ return numberOfSkeletonColumns;
32
+ }
33
+
34
+ initColumnFilterAndSorting() {
35
+ this.annaFilterService.tooltipSelectedMap = new Map();
36
+ this.annaFilterService.selectedRadio = null;
37
+ this.annaFilterService.appliedFiltersArray = [];
38
+ this.annaFilterService.initialValueMap = new Map();
39
+ this.annaSortService.columnSortState = new Map();
40
+ this.annaSortService.noSortingAppliedData = [];
41
+ }
42
+
43
+
44
+ }