@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,507 @@
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
+ "userChanges"
73
+ ];
74
+ const calendarArr = ["period", "AirDate", "flightStartDate", "flightEndDate","date", "startDate", "endDate"];
75
+ const timeArr = ["StartTimeForFilter", "EndTimeForFilter",
76
+ "start_time_for_filter", "end_time_for_filter", "startEndTimeMulti", "startEndTime"];
77
+ this.sliderSet = new Set(sliderArr);
78
+ this.calendarSet = new Set(calendarArr);
79
+ this.timeSet = new Set(timeArr);
80
+ }
81
+
82
+ returnMaxAndMinValue(data: any[], key: string, isMin: boolean) {
83
+ data = data.filter((obj) => !["", "-", null].includes(obj[key]));
84
+ const values = data.map((x) => x[key]);
85
+ let valueToReturn = isMin ? min(values) : max(values);
86
+ return valueToReturn;
87
+ }
88
+
89
+ returnMinAndMaxDate(data: any[], key: string) {
90
+ data = data.filter((obj) => !["", "-", null].includes(obj[key]));
91
+ let DateArr = data.map((obj) => moment(obj[key]));
92
+ let minDate = moment.min(DateArr);
93
+ let maxDate = moment.max(DateArr);
94
+ return [minDate, maxDate];
95
+ }
96
+
97
+ isTooltipActive(header: string[], sortMap: Map<string, SortType>): boolean {
98
+ let set: Set<string> = new Set(this.appliedFiltersArray);
99
+ if(header.length == 1){
100
+ return ( (sortMap.size > 0 && sortMap.get(header[0]) != "DEFAULT") || set.has(header[0]));
101
+ }
102
+ 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]));
103
+
104
+ }
105
+
106
+ clearColumnFilter() {
107
+ if(this.tooltipSelectedMap.has(this.selectedRadio)){
108
+ this.tooltipSelectedMap.delete(this.selectedRadio);
109
+ let appliedFilterSet: Set<string> = new Set(this.appliedFiltersArray);
110
+ appliedFilterSet.delete(this.selectedRadio);
111
+ this.appliedFiltersArray = [...appliedFilterSet];
112
+ }
113
+
114
+ if(this.annaSortService.columnSortState.has(this.selectedRadio)){
115
+ this.annaSortService.columnSortState.set(this.selectedRadio,"DEFAULT");
116
+ }
117
+
118
+ }
119
+
120
+ setOptionValues(minValue: number, maxValue: number) {
121
+ return {
122
+ floor: minValue,
123
+ ceil: maxValue,
124
+ disabled: true,
125
+ translate: this.normalTranslateFunction
126
+ };
127
+ }
128
+
129
+ percentTranslateFunction = (data: number): string => {
130
+ const val = data.toFixed(1) + "%";
131
+ return val;
132
+ };
133
+
134
+ currencyTranslateFunction = (data: number): string => {
135
+ if (data >= 1000) {
136
+ const val = (data / 1000).toFixed(1) + "k";
137
+ return "$" + val;
138
+ } else if (data != Math.floor(data)) {
139
+ return data.toFixed(1).toString();
140
+ }
141
+ return "$" + data;
142
+ };
143
+
144
+ normalTranslateFunction = (data: number): string => {
145
+ if (data >= 1000) {
146
+ const val = (data / 1000).toFixed(1) + "k";
147
+ return val;
148
+ } else if (data != Math.floor(data)) {
149
+ return data.toFixed(1).toString();
150
+ }
151
+ return data.toString();
152
+ };
153
+
154
+ findUniqueDatesWithData(data: any[]) {
155
+ let uniqueDates = uniq(data.map((u) => u["date"]));
156
+ let uniqueDatesInNgbDateFormat: NgbDateType[] = [];
157
+ uniqueDates.forEach((date: any) => {
158
+ uniqueDatesInNgbDateFormat.push(
159
+ this.dateTimeFormatService.convertToNgbDateStandardFormat(moment(date, "MM/DD/YY").format("MM/DD/YYYY"))
160
+ );
161
+ });
162
+ return uniqueDatesInNgbDateFormat;
163
+ }
164
+
165
+ reOrderAppliedFiltersArray(isHierarchialUserFiltered: boolean, date?: any) {
166
+ let isFiltered = true;
167
+ isFiltered = this.checkIfDataIsFiltered(isFiltered, isHierarchialUserFiltered, date);
168
+ this.removeOrChangeLatestFilterIndex(isFiltered);
169
+ }
170
+
171
+ checkIfDataIsFiltered(isFiltered: boolean, isHierarchialUserFiltered: boolean, date?: any) {
172
+ if (this.selectedRadio == "user" && !this.tooltipMap.has("user")) {
173
+ isFiltered = cloneDeep(isHierarchialUserFiltered);
174
+ } else if (this.selectedRadio == "StartTimeForFilter" || this.selectedRadio == "EndTimeForFilter"
175
+ || this.selectedRadio == "start_time_for_filter" || this.selectedRadio == "end_time_for_filter" || this.selectedRadio == "startEndTimeMulti") {
176
+ isFiltered = !isEqual(
177
+ this.initialValueMap.get(this.selectedRadio),
178
+ this.tooltipSelectedMap.get(this.selectedRadio)
179
+ ) || !this.includeZeroTime || !this.includeMultiTime;
180
+ }
181
+ else if (this.selectedRadio == "startEndTime" || this.selectedRadio == "TimeBand") {
182
+ isFiltered = !isEqual(this.initialValueMap.get(this.selectedRadio), this.tooltipSelectedMap.get(this.selectedRadio)) || !this.includeZeroTime || !this.includeMultiTime;
183
+ }
184
+ else if (this.sliderSet.has(this.selectedRadio)) {
185
+ isFiltered = !isEqual(this.initialValueMap.get(this.selectedRadio), this.tooltipSelectedMap.get(this.selectedRadio)) && !isEqual(this.tooltipSelectedMap.get(this.selectedRadio), this.sliderData);
186
+ if (this.selectedRadio == "postedAdu" && this.subRadioButton == "notRequired") {
187
+ isFiltered = true;
188
+ }
189
+ if (!isFiltered && this.tooltipSelectedMap.has(this.selectedRadio)) {
190
+ this.tooltipSelectedMap.delete(this.selectedRadio);
191
+ }
192
+ } else if (
193
+ this.selectedRadio == "startDate" ||
194
+ this.selectedRadio == "endDate" ||
195
+ this.selectedRadio == "period" ||
196
+ this.selectedRadio == "AirDate" ||
197
+ this.selectedRadio === "flightStartDate" ||
198
+ this.selectedRadio === "flightEndDate" ||
199
+ this.selectedRadio == "date"
200
+ ) {
201
+ isFiltered =
202
+ !isEqual(this.initialValueMap.get(this.selectedRadio), this.tooltipSelectedMap.get(this.selectedRadio)) &&
203
+ !isEqual(this.tooltipSelectedMap.get(this.selectedRadio), this.flightDateRange);
204
+ if (!isFiltered && this.tooltipSelectedMap.has(this.selectedRadio)) {
205
+ this.tooltipSelectedMap.delete(this.selectedRadio);
206
+ }
207
+ } else {
208
+ let totalOptionsCount = this.tooltipMap.get(this.selectedRadio).filter((x: any) => !x.isHidden).length;
209
+ let selectedOptionsCount = this.tooltipMap.get(this.selectedRadio).filter((x: any) => !x.isHidden && x.isSelected).length;
210
+ isFiltered = selectedOptionsCount > 0 && selectedOptionsCount != totalOptionsCount ? true : false;
211
+ }
212
+ return isFiltered;
213
+ }
214
+
215
+ removeOrChangeLatestFilterIndex(isFiltered: boolean) {
216
+ let set = new Set(this.appliedFiltersArray);
217
+
218
+ if (isFiltered && !set.has(this.selectedRadio)) {
219
+ set.add(this.selectedRadio);
220
+ } else if (isFiltered && set.has(this.selectedRadio)) {
221
+ set.delete(this.selectedRadio);
222
+ set.add(this.selectedRadio);
223
+ } else {
224
+ set.delete(this.selectedRadio);
225
+ }
226
+ this.appliedFiltersArray = [...set];
227
+ }
228
+
229
+ filterData(originalData: any[], keyToSkip: string) {
230
+ let filteredData = [...originalData];
231
+
232
+ this.tooltipSelectedMap.forEach((value, key) => {
233
+ if (key != keyToSkip) {
234
+ if (this.sliderSet.has(key)) {
235
+ filteredData = filteredData.filter((obj) => obj[key] >= value.min && obj[key] <= value.max);
236
+ }
237
+ else if (key === "startDate" || key === "endDate" || key === "AirDate" || key === "flightStartDate" || key === "flightEndDate" || key == "date") {
238
+ filteredData = filteredData.filter((obj) => this.isObjectInTheRange(obj, value, key));
239
+ } else if (key === "period" ) {
240
+ filteredData = filteredData.filter((obj) => this.getDataInTheDateRange(obj, value, key));
241
+ }
242
+ else if (key === "StartTimeForFilter" || key === "EndTimeForFilter"
243
+ || key === "start_time_for_filter" || key === "end_time_for_filter") {
244
+ filteredData = filteredData.filter((obj) => this.returnDataForFromAndToTimeRange(obj, value, key));
245
+ }
246
+ else if (key === "startEndTimeMulti" || key == "startEndTime" || key === "TimeBand") {
247
+ filteredData = filteredData.filter((obj) => this.returnDataForStartAndEndTimeRange(obj, value, key));
248
+ }
249
+ else if (value.length > 0) {
250
+ filteredData = filteredData.filter((u) => value.includes(u[key]));
251
+ }
252
+ }
253
+ });
254
+ return filteredData;
255
+ }
256
+
257
+ returnOrdersInTheRange(order: any, range: any, key: any) {
258
+ let isDateBetweenTheSelectedRange = moment(order[key]).isBetween(range.minSelectedDate, range.maxSelectedDate);
259
+ let isDateSameAsTheMinSelectedDate = moment(order[key]).isSame(range.minSelectedDate);
260
+ let isDateSameAsTheMaxSelectedDate = moment(order[key]).isSame(range.maxSelectedDate);
261
+ return isDateBetweenTheSelectedRange || isDateSameAsTheMinSelectedDate || isDateSameAsTheMaxSelectedDate;
262
+ }
263
+
264
+ returnDataForTimeRange(obj: any, selectedData: any) {
265
+ let format = "HH:mm:ss";
266
+ let selectedStartDate = moment(selectedData.startTime, format);
267
+ let selectedEndDate = moment(selectedData.endTime, format);
268
+ let startTime = moment(obj.startTime, format);
269
+ let endTime = moment(obj.endTime, format);
270
+
271
+ let isStartTimeSameAsSelectedStartTime = startTime.isSame(selectedStartDate);
272
+ let isStartTimeBetweenSelectedStartAndEndTime = startTime.isBetween(selectedStartDate, selectedEndDate);
273
+ let isEndTimeSameAsSelectedEndTime = endTime.isSame(selectedEndDate);
274
+ let isEndTimeBetweenSelectedStartAndEndTime = endTime.isBetween(selectedStartDate, selectedEndDate);
275
+
276
+ return (
277
+ (isStartTimeBetweenSelectedStartAndEndTime && isEndTimeBetweenSelectedStartAndEndTime) ||
278
+ (isStartTimeSameAsSelectedStartTime && isEndTimeSameAsSelectedEndTime) ||
279
+ (isStartTimeSameAsSelectedStartTime && isEndTimeBetweenSelectedStartAndEndTime) ||
280
+ (isStartTimeBetweenSelectedStartAndEndTime && isEndTimeSameAsSelectedEndTime)
281
+ );
282
+ }
283
+
284
+ returnDataForFromAndToTimeRange(obj: any, selectedData: any, key: any) {
285
+ let format = "HH:mm:ss";
286
+ let selectedFromTime = moment(selectedData.fromTime, format);
287
+ let selectedToTime = moment(selectedData.toTime, format);
288
+ let objTime = obj[key];
289
+
290
+ if (["", "-", null].includes(objTime)) {
291
+ return false;
292
+ }
293
+ if (selectedData.includeMulti && obj[key] == "<multi>") {
294
+ return true;
295
+ }
296
+ if (!selectedData.includeMulti && obj[key] == "<multi>") {
297
+ return false;
298
+ }
299
+ if (selectedData.includeZero && obj[key] == "0") {
300
+ return true;
301
+ }
302
+ if (!selectedData.includeZero && obj[key] == "0") {
303
+ return false;
304
+ }
305
+ if (!selectedData.includeTimeRange) {
306
+ return false;
307
+ }
308
+
309
+
310
+ let momentTime = moment(objTime,format);
311
+
312
+ let isObjTimeSameAsSelectedFromTime = momentTime.isSame(selectedFromTime);
313
+ let isObjTimeSameAsSelectedToTime = momentTime.isSame(selectedToTime);
314
+ let isObjTimeBetweenSelectedFromTimeAndToTime = momentTime.isBetween(selectedFromTime, selectedToTime);
315
+
316
+ return (
317
+ isObjTimeSameAsSelectedFromTime ||
318
+ isObjTimeSameAsSelectedToTime ||
319
+ isObjTimeBetweenSelectedFromTimeAndToTime
320
+ );
321
+ }
322
+
323
+ returnDataForStartAndEndTimeRange(obj: any, selectedData:any, key: string) {
324
+ let format = "HH:mm:ss";
325
+ let selectedFromTime = moment(selectedData.fromTime, format);
326
+ let selectedToTime = moment(selectedData.toTime, format);
327
+
328
+ if(selectedData.includeMulti && obj[key][0] == "<multi>") {
329
+ return true;
330
+ }
331
+
332
+ if(!selectedData.includeMulti && obj[key][0] == "<multi>") {
333
+ return false;
334
+ }
335
+
336
+ if(selectedData.includeZero && obj[key][0] == "0") {
337
+ return true;
338
+ }
339
+
340
+ if(!selectedData.includeZero && obj[key][0] == "0") {
341
+ return false;
342
+ }
343
+
344
+ if(!selectedData.includeTimeRange) {
345
+ return false;
346
+ }
347
+
348
+ let startTime = moment(obj[key][1], format);
349
+ let endTime = moment(obj[key][2], format);
350
+
351
+ let isStartTimeSameAsSelectedStartTime = startTime.isSame(selectedFromTime);
352
+ let isStartTimeBetweenSelectedStartAndEndTime = startTime.isBetween(selectedFromTime, selectedToTime);
353
+ let isEndTimeSameAsSelectedEndTime = endTime.isSame(selectedToTime);
354
+ let isEndTimeBetweenSelectedStartAndEndTime = endTime.isBetween(selectedFromTime, selectedToTime);
355
+
356
+ return (
357
+ (isStartTimeBetweenSelectedStartAndEndTime && isEndTimeBetweenSelectedStartAndEndTime) ||
358
+ (isStartTimeSameAsSelectedStartTime && isEndTimeSameAsSelectedEndTime) ||
359
+ (isStartTimeSameAsSelectedStartTime && isEndTimeBetweenSelectedStartAndEndTime) ||
360
+ (isStartTimeBetweenSelectedStartAndEndTime && isEndTimeSameAsSelectedEndTime)
361
+ );
362
+
363
+ }
364
+
365
+ getDataInTheDateRange(obj: any, value: any, key: any) {
366
+ let parsingFormat: string;
367
+ if (key === "period") {
368
+ parsingFormat = "YYYY-MM-DD";
369
+
370
+ let momentStartDate = moment(obj.startDate);
371
+ let momentEndDate = moment(obj.endDate);
372
+
373
+ let startDateIsBetweenSelDate = momentStartDate.isBetween(
374
+ value.fromDate,
375
+ value.toDate
376
+ );
377
+ let endDateIsBetweenSelDate = momentEndDate.isBetween(
378
+ value.fromDate,
379
+ value.toDate
380
+ );
381
+
382
+
383
+ let startDateIsSameAsSelStartDate = value.fromDate.isSame(momentStartDate);
384
+ let endDateIsSameAsSelEndDate = value.toDate.isSame(momentEndDate);
385
+
386
+ return (
387
+ (startDateIsBetweenSelDate || startDateIsSameAsSelStartDate) &&
388
+ (endDateIsBetweenSelDate || endDateIsSameAsSelEndDate)
389
+ );
390
+ } else if (key === "AirDate" || key === "flightStartDate" || key === "flightEndDate") {
391
+ parsingFormat = "MM/DD/YYYY";
392
+ let dateIsBetweenSelDate = moment(obj[key], parsingFormat).isBetween(value.minSelectedDate, value.maxSelectedDate);
393
+
394
+ let dateIsSameAsSelStartDate = moment(obj[key], parsingFormat).isSame(value.minSelectedDate);
395
+ let dateIsSameAsSelEndDate = moment(obj[key], parsingFormat).isSame(value.maxSelectedDate);
396
+
397
+ return dateIsBetweenSelDate || dateIsSameAsSelStartDate || dateIsSameAsSelEndDate;
398
+ }
399
+ }
400
+
401
+
402
+ public initializeTimeFilterData(clonedData: any[], key = "startEndTime") {
403
+ let startTimeArr = map(clonedData, "startTime");
404
+ let endTimeArr = map(clonedData, "endTime");
405
+
406
+ startTimeArr.sort((a: any, b: any) => {
407
+ return this.dateTimeFormatService.sortByTimeAscending(a, b);
408
+ });
409
+
410
+ endTimeArr.sort((a: any, b: any) => {
411
+ return this.dateTimeFormatService.sortByTimeDescending(a, b);
412
+ });
413
+
414
+ let initialStartEndTime = {
415
+ startTime: startTimeArr[0],
416
+ endTime: endTimeArr[0],
417
+ };
418
+ this.initialValueMap.set(key, initialStartEndTime);
419
+ }
420
+
421
+ returnColumnFilterStatus(data: any[], headerName: string | number) {
422
+
423
+ if(headerName == "startEndTime"){
424
+ let time = data.map(u => u[headerName][0]);
425
+ let uniqTime = uniq(time);
426
+ return uniqTime.length == 0;
427
+ }
428
+
429
+ return uniq(data.map((u) => u[headerName])).length > 1 ? false : true;
430
+ }
431
+
432
+ getFilterOptionsData(data: any[], clonedData: any[]){
433
+ let appliedFilterSet = new Set(this.appliedFiltersArray);
434
+ if(appliedFilterSet.has(this.selectedRadio)){
435
+ return this.filterData(clonedData, this.selectedRadio);
436
+ }
437
+ else{
438
+ return data;
439
+ }
440
+ }
441
+
442
+ reOrderAppliedFiltersState(clonedData: any[], value: any){
443
+ let isFiltered = true;
444
+ isFiltered = this.checkIfFilterIsApplied(clonedData,value);
445
+ this.removeOrChangeLatestFilterIndex(isFiltered);
446
+ return isFiltered;
447
+ }
448
+
449
+ checkIfFilterIsApplied(clonedData: any[],value: any){
450
+ let initialValueOfColumn = sortBy(clonedData.map(item => item[this.selectedRadio]));
451
+ let currentValueOfColumn = sortBy(this.applyFilter(clonedData,value).map(item => item[this.selectedRadio]));
452
+ return !isEqual(initialValueOfColumn, currentValueOfColumn);
453
+ }
454
+
455
+ applyFilter(data: any[],value: any){
456
+ let filteredData = data;
457
+ let key = this.selectedRadio;
458
+ if (this.sliderSet.has(key)) {
459
+ filteredData = filteredData.filter((obj) => obj[key] >= value.min && obj[key] <= value.max);
460
+ }
461
+ else if (key === "startDate" || key === "endDate" || key === "AirDate" || key === "flightStartDate" || key === "flightEndDate" || key == "date") {
462
+ filteredData = filteredData.filter((obj) => this.isObjectInTheRange(obj, value, key));
463
+ } else if (key === "period" ) {
464
+ filteredData = filteredData.filter((obj) => this.getDataInTheDateRange(obj, value, key));
465
+ }
466
+ else if (key === "StartTimeForFilter" || key === "EndTimeForFilter"
467
+ || key === "start_time_for_filter" || key === "end_time_for_filter") {
468
+ filteredData = filteredData.filter((obj) => this.returnDataForFromAndToTimeRange(obj, value, key));
469
+ }
470
+ else if (key === "startEndTimeMulti" || key == "startEndTime" || key === "TimeBand") {
471
+ filteredData = filteredData.filter((obj) => this.returnDataForStartAndEndTimeRange(obj, value, key));
472
+ }
473
+ else if (value.length > 0) {
474
+ filteredData = filteredData.filter((u) => value.includes(u[key]));
475
+ }
476
+ return filteredData;
477
+ }
478
+
479
+ isObjectInTheRange(obj: any, value: {fromDate: moment.Moment, toDate: moment.Moment},key:string){
480
+ let objVal = obj[key];
481
+ let momentDate = moment(objVal);
482
+ let isDateSameAsStartOfTheRange = value.fromDate.isSame(objVal);
483
+ let isDateSameAsEndOfTheRange = value.toDate.isSame(objVal);
484
+ let isDateBetweenTheStartAndEndOfRange = momentDate.isBetween(value.fromDate,value.toDate);
485
+ return isDateSameAsStartOfTheRange || isDateSameAsEndOfTheRange || isDateBetweenTheStartAndEndOfRange;
486
+ }
487
+
488
+ updateStateOfTheCurrentFilterTab(sortMap: Map<string, SortType>){
489
+ let activeKey = this.selectedRadio;
490
+ let keyArr: string[] = [];
491
+ Object.keys(this.isFilterSortActive).forEach(key => {
492
+ if(key.includes(activeKey)){
493
+ keyArr = key.split(",");
494
+ this.isFilterSortActive[key] = this.isTooltipActive(keyArr, sortMap);
495
+ }
496
+ });
497
+
498
+ }
499
+
500
+ updateStateOfAllTheKeys(sortMap: Map<string, SortType>){
501
+ Object.keys(this.isFilterSortActive).forEach(key => {
502
+ let keyArr = key.split(",");
503
+ this.isFilterSortActive[key] = this.isTooltipActive(keyArr,sortMap);
504
+ })
505
+ }
506
+
507
+ }
@@ -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
+ }