@annalib/anna-core 22.3.2 → 22.3.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 (107) hide show
  1. package/{esm2020 → esm2022}/annalib-anna-core.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +15 -15
  3. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.mjs +14 -14
  4. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component.mjs +11 -11
  5. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +36 -36
  6. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +15 -15
  7. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +22 -22
  8. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +14 -14
  9. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +23 -23
  10. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +15 -15
  11. package/esm2022/lib/anna-core-shared-lib/constants/shared.constant.mjs +44 -0
  12. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.mjs +284 -284
  13. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.mjs +43 -43
  14. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.mjs +38 -38
  15. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-generic-data-type.model.mjs +1 -1
  16. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +1 -1
  17. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +11 -11
  18. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-sort.model.mjs +6 -6
  19. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +29 -29
  20. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaConvertArrayToCommaSeperatedValue.pipe.mjs +38 -38
  21. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.mjs +26 -26
  22. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.mjs +22 -22
  23. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +53 -53
  24. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.mjs +25 -25
  25. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.mjs +16 -16
  26. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +208 -208
  27. package/esm2022/lib/anna-core-shared-lib/services/anna-filter.service.mjs +1170 -0
  28. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +151 -151
  29. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +132 -132
  30. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-number-format.service.mjs +53 -53
  31. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-persisting-filter.service.mjs +66 -66
  32. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-sort.service.mjs +176 -176
  33. package/esm2022/lib/anna-core.module.mjs +221 -0
  34. package/{esm2020 → esm2022}/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +151 -151
  35. package/esm2022/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +364 -0
  36. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.mjs +237 -237
  37. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.mjs +180 -180
  38. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.mjs +306 -306
  39. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.mjs +291 -291
  40. package/esm2022/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +806 -0
  41. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +64 -64
  42. package/esm2022/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +357 -0
  43. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +189 -189
  44. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +1 -1
  45. package/esm2022/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +178 -0
  46. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +1 -1
  47. package/{esm2020 → esm2022}/public-api.mjs +57 -57
  48. package/{fesm2020 → fesm2022}/annalib-anna-core.mjs +5752 -5721
  49. package/fesm2022/annalib-anna-core.mjs.map +1 -0
  50. package/index.d.ts +5 -5
  51. package/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.d.ts +8 -8
  52. package/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.d.ts +8 -8
  53. package/lib/anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component.d.ts +5 -5
  54. package/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.d.ts +17 -17
  55. package/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.d.ts +8 -8
  56. package/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.d.ts +11 -11
  57. package/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.d.ts +8 -8
  58. package/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.d.ts +12 -12
  59. package/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.d.ts +8 -8
  60. package/lib/anna-core-shared-lib/constants/shared.constant.d.ts +42 -42
  61. package/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.d.ts +34 -34
  62. package/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.d.ts +16 -16
  63. package/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.d.ts +10 -10
  64. package/lib/anna-core-shared-lib/models/anna-generic-data-type.model.d.ts +16 -16
  65. package/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.d.ts +97 -97
  66. package/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.d.ts +119 -118
  67. package/lib/anna-core-shared-lib/models/anna-sort.model.d.ts +11 -11
  68. package/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +25 -25
  69. package/lib/anna-core-shared-lib/pipes/annaConvertArrayToCommaSeperatedValue.pipe.d.ts +9 -9
  70. package/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.d.ts +9 -9
  71. package/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.d.ts +8 -8
  72. package/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.d.ts +9 -9
  73. package/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.d.ts +9 -9
  74. package/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.d.ts +7 -7
  75. package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +28 -28
  76. package/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +154 -154
  77. package/lib/anna-core-shared-lib/services/anna-generic-table.service.d.ts +27 -27
  78. package/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +21 -21
  79. package/lib/anna-core-shared-lib/services/anna-number-format.service.d.ts +8 -8
  80. package/lib/anna-core-shared-lib/services/anna-persisting-filter.service.d.ts +9 -9
  81. package/lib/anna-core-shared-lib/services/anna-sort.service.d.ts +18 -18
  82. package/lib/anna-core.module.d.ts +45 -45
  83. package/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.d.ts +45 -45
  84. package/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +70 -70
  85. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.d.ts +60 -60
  86. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.d.ts +53 -53
  87. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.d.ts +65 -65
  88. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.d.ts +83 -83
  89. package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +175 -174
  90. package/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.d.ts +17 -17
  91. package/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +141 -141
  92. 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 +89 -89
  93. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.d.ts +1 -1
  94. package/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +45 -45
  95. package/lib/anna-generic-table-lib/directives/anna-virtual-table/index.d.ts +1 -1
  96. package/package.json +5 -11
  97. package/public-api.d.ts +42 -42
  98. package/esm2020/lib/anna-core-shared-lib/constants/shared.constant.mjs +0 -44
  99. package/esm2020/lib/anna-core-shared-lib/services/anna-filter.service.mjs +0 -1157
  100. package/esm2020/lib/anna-core.module.mjs +0 -221
  101. package/esm2020/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +0 -364
  102. package/esm2020/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +0 -788
  103. package/esm2020/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +0 -357
  104. package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +0 -178
  105. package/fesm2015/annalib-anna-core.mjs +0 -5857
  106. package/fesm2015/annalib-anna-core.mjs.map +0 -1
  107. package/fesm2020/annalib-anna-core.mjs.map +0 -1
@@ -1,176 +1,176 @@
1
- // Angular import statements
2
- import { Injectable } from '@angular/core';
3
- import { Subject } from 'rxjs';
4
- import { AnnaDateTimeFormatService } from './anna-date-time-format.service';
5
- import { cloneDeep } from 'lodash-es';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./anna-date-time-format.service";
8
- // Third party import statements
9
- // User defined import statements
10
- export class AnnaSortService {
11
- constructor(annaDateTimeFormatService) {
12
- this.annaDateTimeFormatService = annaDateTimeFormatService;
13
- this.updateSortTypeSubject = new Subject();
14
- this.dateSet = new Set([
15
- 'endDate',
16
- 'startDate',
17
- 'end_date',
18
- 'start_date',
19
- 'flightStartDate',
20
- 'flightEndDate',
21
- "date",
22
- "GeneratedOn"
23
- ]);
24
- }
25
- sortDataForComponentOtherThanLurAndCsrPage(isAsc, data, key) {
26
- let param1;
27
- let param2;
28
- if (this.dateSet.has(key)) {
29
- data.sort((a, b) => {
30
- return this.annaDateTimeFormatService.compareDate(a[key], b[key], isAsc);
31
- });
32
- }
33
- else if (key === 'AirDateAndTime' || key === 'Date') {
34
- data.sort((a, b) => {
35
- let first, second;
36
- if (a[key] == '-') {
37
- return 1;
38
- }
39
- if (b[key] == '-') {
40
- return -1;
41
- }
42
- else {
43
- first =
44
- this.annaDateTimeFormatService.formatDateAndHHMMATimeToStandardFormat(a[key]);
45
- second =
46
- this.annaDateTimeFormatService.formatDateAndHHMMATimeToStandardFormat(b[key]);
47
- let compareDate = this.annaDateTimeFormatService.compareDate(first, second, isAsc);
48
- return compareDate;
49
- }
50
- });
51
- }
52
- else if (key == 'startEndTime' || key == 'TimeBand') {
53
- data.sort((a, b) => {
54
- if (isAsc) {
55
- param1 = a[key][1];
56
- param2 = b[key][1];
57
- }
58
- else {
59
- param1 = a[key][2];
60
- param2 = b[key][2];
61
- }
62
- let val = isAsc
63
- ? this.annaDateTimeFormatService.sortByTimeAscending(param1, param2)
64
- : this.annaDateTimeFormatService.sortByTimeDescending(param1, param2);
65
- return val;
66
- });
67
- }
68
- else {
69
- let dataWithoutEmptyOrHyphenValues = data.filter(n => n[key] != "-");
70
- let rowsWithHyphenOrZeroValues = data.filter(n => n[key] == "-");
71
- dataWithoutEmptyOrHyphenValues.sort((a, b) => {
72
- param1 = a[key];
73
- param2 = b[key];
74
- if (param1 !== param2) {
75
- return this.annaDateTimeFormatService.compare(param1, param2, isAsc);
76
- }
77
- return 0;
78
- });
79
- data = isAsc ? [...rowsWithHyphenOrZeroValues, ...dataWithoutEmptyOrHyphenValues] :
80
- [...dataWithoutEmptyOrHyphenValues, ...rowsWithHyphenOrZeroValues];
81
- }
82
- return data;
83
- }
84
- sortEnterEditLurAndCsrPage(isAsc, data, key) {
85
- let param1;
86
- let param2;
87
- if (key.includes('_')) {
88
- let keys = key.split('_');
89
- let weekNumber = keys[0];
90
- let sortKey = keys[1];
91
- if (keys.length > 2) {
92
- sortKey =
93
- keys[2] == true
94
- ? 'BookedAurIncludingNoChargeSpots'
95
- : 'BookedAurExcludingNoChargeSpots';
96
- }
97
- data.sort((a, b) => {
98
- let aInventoryCodeWeekWiseKey = Object.keys(a.WeekWiseInventoryCodeData).filter((key) => key.split('_')[1] == weekNumber);
99
- let bInventoryCodeWeekWiseKey = Object.keys(b.WeekWiseInventoryCodeData).filter((key) => key.split('_')[1] == weekNumber);
100
- param1 = null;
101
- param2 = null;
102
- if (aInventoryCodeWeekWiseKey.length > 0) {
103
- param1 =
104
- a.WeekWiseInventoryCodeData[aInventoryCodeWeekWiseKey[0]][sortKey][1];
105
- }
106
- if (bInventoryCodeWeekWiseKey.length > 0) {
107
- param2 =
108
- b.WeekWiseInventoryCodeData[bInventoryCodeWeekWiseKey[0]][sortKey][1];
109
- }
110
- if (param1 !== param2) {
111
- return this.annaDateTimeFormatService.compare(param1, param2, isAsc);
112
- }
113
- return 0;
114
- });
115
- }
116
- else if (key == 'TimeBand') {
117
- data.sort((a, b) => {
118
- if (isAsc) {
119
- param1 = a[key][1];
120
- param2 = b[key][1];
121
- }
122
- else {
123
- param1 = a[key][2];
124
- param2 = b[key][2];
125
- }
126
- let val = isAsc
127
- ? this.annaDateTimeFormatService.sortByTimeAscending(param1, param2)
128
- : this.annaDateTimeFormatService.sortByTimeDescending(param1, param2);
129
- return val;
130
- });
131
- }
132
- else {
133
- data.sort((a, b) => {
134
- param1 = a[key];
135
- param2 = b[key];
136
- if (param1 !== param2) {
137
- return this.annaDateTimeFormatService.compare(param1, param2, isAsc);
138
- }
139
- return 0;
140
- });
141
- }
142
- return data;
143
- }
144
- checkIfSortingIsApplied(tableData, isLurAndCsrComponent) {
145
- for (let [key, value] of this.columnSortState.entries()) {
146
- if (value == "ASC") {
147
- tableData = cloneDeep(isLurAndCsrComponent ? this.sortEnterEditLurAndCsrPage(true, tableData, key) : this.sortDataForComponentOtherThanLurAndCsrPage(true, tableData, key));
148
- }
149
- else if (value == "DESC") {
150
- tableData = cloneDeep(isLurAndCsrComponent ? this.sortEnterEditLurAndCsrPage(false, tableData, key) : this.sortDataForComponentOtherThanLurAndCsrPage(false, tableData, key));
151
- }
152
- }
153
- return tableData;
154
- }
155
- applySorting(key, tempSortOrder, tableData, isLurAndCsrComponent) {
156
- if (tempSortOrder == "ASC") {
157
- tableData = cloneDeep(isLurAndCsrComponent ? this.sortEnterEditLurAndCsrPage(true, tableData, key) : this.sortDataForComponentOtherThanLurAndCsrPage(true, tableData, key));
158
- }
159
- else if (tempSortOrder == "DESC") {
160
- tableData = cloneDeep(isLurAndCsrComponent ? this.sortEnterEditLurAndCsrPage(false, tableData, key) : this.sortDataForComponentOtherThanLurAndCsrPage(false, tableData, key));
161
- }
162
- else if (tempSortOrder == "DEFAULT") {
163
- tableData = cloneDeep(this.noSortingAppliedData);
164
- }
165
- return tableData;
166
- }
167
- }
168
- AnnaSortServicefac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AnnaSortService, deps: [{ token: i1.AnnaDateTimeFormatService }], target: i0.ɵɵFactoryTarget.Injectable });
169
- AnnaSortService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AnnaSortService, providedIn: 'root' });
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AnnaSortService, decorators: [{
171
- type: Injectable,
172
- args: [{
173
- providedIn: 'root',
174
- }]
175
- }], ctorParameters: function () { return [{ type: i1.AnnaDateTimeFormatService }]; } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1zb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLXNvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7OztBQUV0QyxnQ0FBZ0M7QUFFaEMsaUNBQWlDO0FBS2pDLE1BQU0sT0FBTyxlQUFlO0lBZ0IxQixZQUFvQix5QkFBb0Q7UUFBcEQsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQWJ4RSwwQkFBcUIsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUV2RCxZQUFPLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDaEIsU0FBUztZQUNULFdBQVc7WUFDWCxVQUFVO1lBQ1YsWUFBWTtZQUNaLGlCQUFpQjtZQUNqQixlQUFlO1lBQ2YsTUFBTTtZQUNOLGFBQWE7U0FDZCxDQUFDLENBQUM7SUFHSCxDQUFDO0lBRUQsMENBQTBDLENBQ3hDLEtBQWMsRUFDZCxJQUFXLEVBQ1gsR0FBVztRQUVYLElBQUksTUFBdUIsQ0FBQztRQUM1QixJQUFJLE1BQXVCLENBQUM7UUFFNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqQixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQy9DLENBQUMs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QixDQUFDOzs2R0F0TVUsZUFBZTtpSEFBZixlQUFlLGNBRmQsTUFBTTs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNvcnRUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2FubmEtc29ydC5tb2RlbCc7XHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UgfSBmcm9tICcuL2FubmEtZGF0ZS10aW1lLWZvcm1hdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcclxuXHJcbi8vIFRoaXJkIHBhcnR5IGltcG9ydCBzdGF0ZW1lbnRzXHJcblxyXG4vLyBVc2VyIGRlZmluZWQgaW1wb3J0IHN0YXRlbWVudHNcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hU29ydFNlcnZpY2Uge1xyXG4gIGNvbHVtblNvcnRTdGF0ZTogTWFwPHN0cmluZywgU29ydFR5cGU+O1xyXG4gIG5vU29ydGluZ0FwcGxpZWREYXRhOiBhbnlbXTtcclxuICB1cGRhdGVTb3J0VHlwZVN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGRhdGVTZXQgPSBuZXcgU2V0KFtcclxuICAgICdlbmREYXRlJyxcclxuICAgICdzdGFydERhdGUnLFxyXG4gICAgJ2VuZF9kYXRlJyxcclxuICAgICdzdGFydF9kYXRlJyxcclxuICAgICdmbGlnaHRTdGFydERhdGUnLFxyXG4gICAgJ2ZsaWdodEVuZERhdGUnLFxyXG4gICAgXCJkYXRlXCIsXHJcbiAgICBcIkdlbmVyYXRlZE9uXCJcclxuICBdKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBzb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UoXHJcbiAgICBpc0FzYzogYm9vbGVhbixcclxuICAgIGRhdGE6IGFueVtdLFxyXG4gICAga2V5OiBzdHJpbmdcclxuICApIHtcclxuICAgIGxldCBwYXJhbTE6IHN0cmluZyB8IG51bWJlcjtcclxuICAgIGxldCBwYXJhbTI6IHN0cmluZyB8IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5kYXRlU2V0LmhhcyhrZXkpKSB7XHJcbiAgICAgIGRhdGEuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29tcGFyZURhdGUoXHJcbiAgICAgICAgICBhW2tleV0sXHJcbiAgICAgICAgICBiW2tleV0sXHJcbiAgICAgICAgICBpc0FzY1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdBaXJEYXRlQW5kVGltZScgfHwga2V5ID09PSAnRGF0ZScpIHtcclxuICAgICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpcnN0LCBzZWNvbmQ7XHJcbiAgICAgICAgaWYgKGFba2V5XSA9PSAnLScpIHtcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJba2V5XSA9PSAnLScpIHtcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZmlyc3QgPVxyXG4gICAgICAgICAgICB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuZm9ybWF0RGF0ZUFuZEhITU1BVGltZVRvU3RhbmRhcmRGb3JtYXQoXHJcbiAgICAgICAgICAgICAgYVtrZXldXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICBzZWNvbmQgPVxyXG4gICAgICAgICAgICB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuZm9ybWF0RGF0ZUFuZEhITU1BVGltZVRvU3RhbmRhcmRGb3JtYXQoXHJcbiAgICAgICAgICAgICAgYltrZXldXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICBsZXQgY29tcGFyZURhdGUgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29tcGFyZURhdGUoXHJcbiAgICAgICAgICAgIGZpcnN0LFxyXG4gICAgICAgICAgICBzZWNvbmQsXHJcbiAgICAgICAgICAgIGlzQXNjXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIGNvbXBhcmVEYXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKGtleSA9PSAnc3RhcnRFbmRUaW1lJyB8fCBrZXkgPT0gJ1RpbWVCYW5kJykge1xyXG4gICAgICBkYXRhLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICBpZiAoaXNBc2MpIHtcclxuICAgICAgICAgIHBhcmFtMSA9IGFba2V5XVsxXTtcclxuICAgICAgICAgIHBhcmFtMiA9IGJba2V5XVsxXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGFyYW0xID0gYVtrZXldWzJdO1xyXG4gICAgICAgICAgcGFyYW0yID0gYltrZXldWzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdmFsID0gaXNBc2NcclxuICAgICAgICAgID8gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVBc2NlbmRpbmcocGFyYW0xLCBwYXJhbTIpXHJcbiAgICAgICAgICA6IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lRGVzY2VuZGluZyhwYXJhbTEsIHBhcmFtMik7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZGF0YVdpdGhvdXRFbXB0eU9ySHlwaGVuVmFsdWVzID0gZGF0YS5maWx0ZXIobiA9PiBuW2tleV0gIT0gXCItXCIpO1xyXG4gICAgICBsZXQgcm93c1dpdGhIeXBoZW5Pclplcm9WYWx1ZXMgPSBkYXRhLmZpbHRlcihuID0+IG5ba2V5XSA9PSBcIi1cIik7XHJcblxyXG4gICAgICBkYXRhV2l0aG91dEVtcHR5T3JIeXBoZW5WYWx1ZXMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIHBhcmFtMSA9IGFba2V5XTtcclxuICAgICAgICBwYXJhbTIgPSBiW2tleV07XHJcblxyXG4gICAgICAgIGlmIChwYXJhbTEgIT09IHBhcmFtMikge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb21wYXJlKHBhcmFtMSwgcGFyYW0yLCBpc0FzYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBkYXRhID0gaXNBc2MgPyBbLi4ucm93c1dpdGhIeXBoZW5Pclplcm9WYWx1ZXMsIC4uLmRhdGFXaXRob3V0RW1wdHlPckh5cGhlblZhbHVlc10gOlxyXG4gICAgICAgIFsuLi5kYXRhV2l0aG91dEVtcHR5T3JIeXBoZW5WYWx1ZXMsIC4uLnJvd3NXaXRoSHlwaGVuT3JaZXJvVmFsdWVzXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHNvcnRFbnRlckVkaXRMdXJBbmRDc3JQYWdlKGlzQXNjOiBib29sZWFuLCBkYXRhOiBhbnlbXSwga2V5OiBhbnkpIHtcclxuICAgIGxldCBwYXJhbTE6IHN0cmluZyB8IG51bWJlcjtcclxuICAgIGxldCBwYXJhbTI6IHN0cmluZyB8IG51bWJlcjtcclxuXHJcbiAgICBpZiAoa2V5LmluY2x1ZGVzKCdfJykpIHtcclxuICAgICAgbGV0IGtleXMgPSBrZXkuc3BsaXQoJ18nKTtcclxuICAgICAgbGV0IHdlZWtOdW1iZXIgPSBrZXlzWzBdO1xyXG4gICAgICBsZXQgc29ydEtleSA9IGtleXNbMV07XHJcblxyXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgc29ydEtleSA9XHJcbiAgICAgICAgICBrZXlzWzJdID09IHRydWVcclxuICAgICAgICAgICAgPyAnQm9va2VkQXVySW5jbHVkaW5nTm9DaGFyZ2VTcG90cydcclxuICAgICAgICAgICAgOiAnQm9va2VkQXVyRXhjbHVkaW5nTm9DaGFyZ2VTcG90cyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRhdGEuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGxldCBhSW52ZW50b3J5Q29kZVdlZWtXaXNlS2V5ID0gT2JqZWN0LmtleXMoXHJcbiAgICAgICAgICBhLldlZWtXaXNlSW52ZW50b3J5Q29kZURhdGFcclxuICAgICAgICApLmZpbHRlcigoa2V5KSA9PiBrZXkuc3BsaXQoJ18nKVsxXSA9PSB3ZWVrTnVtYmVyKTtcclxuICAgICAgICBsZXQgYkludmVudG9yeUNvZGVXZWVrV2lzZUtleSA9IE9iamVjdC5rZXlzKFxyXG4gICAgICAgICAgYi5XZWVrV2lzZUludmVudG9yeUNvZGVEYXRhXHJcbiAgICAgICAgKS5maWx0ZXIoKGtleSkgPT4ga2V5LnNwbGl0KCdfJylbMV0gPT0gd2Vla051bWJlcik7XHJcblxyXG4gICAgICAgIHBhcmFtMSA9IG51bGw7XHJcbiAgICAgICAgcGFyYW0yID0gbnVsbDtcclxuICAgICAgICBpZiAoYUludmVudG9yeUNvZGVXZWVrV2lzZUtleS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBwYXJhbTEgPVxyXG4gICAgICAgICAgICBhLldlZWtXaXNlSW52ZW50b3J5Q29kZURhdGFbYUludmVudG9yeUNvZGVXZWVrV2lzZUtleVswXV1bXHJcbiAgICAgICAgICAgIHNvcnRLZXlcclxuICAgICAgICAgICAgXVsxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiSW52ZW50b3J5Q29kZVdlZWtXaXNlS2V5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHBhcmFtMiA9XHJcbiAgICAgICAgICAgIGIuV2Vla1dpc2VJbnZlbnRvcnlDb2RlRGF0YVtiSW52ZW50b3J5Q29kZVdlZWtXaXNlS2V5WzBdXVtcclxuICAgICAgICAgICAgc29ydEtleVxyXG4gICAgICAgICAgICBdWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBhcmFtMSAhPT0gcGFyYW0yKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbXBhcmUocGFyYW0xLCBwYXJhbTIsIGlzQXNjKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoa2V5ID09ICdUaW1lQmFuZCcpIHtcclxuICAgICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzQXNjKSB7XHJcbiAgICAgICAgICBwYXJhbTEgPSBhW2tleV1bMV07XHJcbiAgICAgICAgICBwYXJhbTIgPSBiW2tleV1bMV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBhcmFtMSA9IGFba2V5XVsyXTtcclxuICAgICAgICAgIHBhcmFtMiA9IGJba2V5XVsyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHZhbCA9IGlzQXNjXHJcbiAgICAgICAgICA/IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKHBhcmFtMSwgcGFyYW0yKVxyXG4gICAgICAgICAgOiB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZURlc2NlbmRpbmcocGFyYW0xLCBwYXJhbTIpO1xyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgcGFyYW0xID0gYVtrZXldO1xyXG4gICAgICAgIHBhcmFtMiA9IGJba2V5XTtcclxuXHJcbiAgICAgICAgaWYgKHBhcmFtMSAhPT0gcGFyYW0yKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbXBhcmUocGFyYW0xLCBwYXJhbTIsIGlzQXNjKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKHRhYmxlRGF0YTogYW55W10sIGlzTHVyQW5kQ3NyQ29tcG9uZW50OiBib29sZWFuKXtcclxuICAgIGZvcihsZXQgW2tleSx2YWx1ZV0gb2YgdGhpcy5jb2x1bW5Tb3J0U3RhdGUuZW50cmllcygpKXtcclxuICAgICAgaWYodmFsdWUgPT0gXCJBU0NcIil7XHJcbiAgICAgICAgICB0YWJsZURhdGEgPSBjbG9uZURlZXAoaXNMdXJBbmRDc3JDb21wb25lbnQgPyB0aGlzLnNvcnRFbnRlckVkaXRMdXJBbmRDc3JQYWdlKHRydWUsIHRhYmxlRGF0YSwga2V5KSA6IHRoaXMuc29ydERhdGFGb3JDb21wb25lbnRPdGhlclRoYW5MdXJBbmRDc3JQYWdlKHRydWUsIHRhYmxlRGF0YSxrZXkpICk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZih2YWx1ZSA9PSBcIkRFU0NcIil7XHJcbiAgICAgICAgICB0YWJsZURhdGEgPSBjbG9uZURlZXAoaXNMdXJBbmRDc3JDb21wb25lbnQgPyB0aGlzLnNvcnRFbnRlckVkaXRMdXJBbmRDc3JQYWdlKGZhbHNlLCB0YWJsZURhdGEsIGtleSkgOiB0aGlzLnNvcnREYXRhRm9yQ29tcG9uZW50T3RoZXJUaGFuTHVyQW5kQ3NyUGFnZShmYWxzZSwgdGFibGVEYXRhLGtleSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhYmxlRGF0YTtcclxuICB9XHJcblxyXG4gIGFwcGx5U29ydGluZyhrZXk6IHN0cmluZywgdGVtcFNvcnRPcmRlcjogU29ydFR5cGUsIHRhYmxlRGF0YTogYW55W10sIGlzTHVyQW5kQ3NyQ29tcG9uZW50OiBib29sZWFuKXtcclxuICAgIGlmKHRlbXBTb3J0T3JkZXIgPT0gXCJBU0NcIil7XHJcbiAgICAgIHRhYmxlRGF0YSA9IGNsb25lRGVlcChpc0x1ckFuZENzckNvbXBvbmVudCA/IHRoaXMuc29ydEVudGVyRWRpdEx1ckFuZENzclBhZ2UodHJ1ZSwgdGFibGVEYXRhLCBrZXkpIDogdGhpcy5zb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UodHJ1ZSwgdGFibGVEYXRhLGtleSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0ZW1wU29ydE9yZGVyID09IFwiREVTQ1wiKXtcclxuICAgICAgdGFibGVEYXRhID0gY2xvbmVEZWVwKGlzTHVyQW5kQ3NyQ29tcG9uZW50ID8gdGhpcy5zb3J0RW50ZXJFZGl0THVyQW5kQ3NyUGFnZShmYWxzZSwgdGFibGVEYXRhLCBrZXkpIDogdGhpcy5zb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UoZmFsc2UsIHRhYmxlRGF0YSxrZXkpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYodGVtcFNvcnRPcmRlciA9PSBcIkRFRkFVTFRcIil7XHJcbiAgICAgIHRhYmxlRGF0YSA9IGNsb25lRGVlcCh0aGlzLm5vU29ydGluZ0FwcGxpZWREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGFibGVEYXRhO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
1
+ // Angular import statements
2
+ import { Injectable } from '@angular/core';
3
+ import { Subject } from 'rxjs';
4
+ import { AnnaDateTimeFormatService } from './anna-date-time-format.service';
5
+ import { cloneDeep } from 'lodash-es';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "./anna-date-time-format.service";
8
+ // Third party import statements
9
+ // User defined import statements
10
+ export class AnnaSortService {
11
+ constructor(annaDateTimeFormatService) {
12
+ this.annaDateTimeFormatService = annaDateTimeFormatService;
13
+ this.updateSortTypeSubject = new Subject();
14
+ this.dateSet = new Set([
15
+ 'endDate',
16
+ 'startDate',
17
+ 'end_date',
18
+ 'start_date',
19
+ 'flightStartDate',
20
+ 'flightEndDate',
21
+ "date",
22
+ "GeneratedOn"
23
+ ]);
24
+ }
25
+ sortDataForComponentOtherThanLurAndCsrPage(isAsc, data, key) {
26
+ let param1;
27
+ let param2;
28
+ if (this.dateSet.has(key)) {
29
+ data.sort((a, b) => {
30
+ return this.annaDateTimeFormatService.compareDate(a[key], b[key], isAsc);
31
+ });
32
+ }
33
+ else if (key === 'AirDateAndTime' || key === 'Date') {
34
+ data.sort((a, b) => {
35
+ let first, second;
36
+ if (a[key] == '-') {
37
+ return 1;
38
+ }
39
+ if (b[key] == '-') {
40
+ return -1;
41
+ }
42
+ else {
43
+ first =
44
+ this.annaDateTimeFormatService.formatDateAndHHMMATimeToStandardFormat(a[key]);
45
+ second =
46
+ this.annaDateTimeFormatService.formatDateAndHHMMATimeToStandardFormat(b[key]);
47
+ let compareDate = this.annaDateTimeFormatService.compareDate(first, second, isAsc);
48
+ return compareDate;
49
+ }
50
+ });
51
+ }
52
+ else if (key == 'startEndTime' || key == 'TimeBand') {
53
+ data.sort((a, b) => {
54
+ if (isAsc) {
55
+ param1 = a[key][1];
56
+ param2 = b[key][1];
57
+ }
58
+ else {
59
+ param1 = a[key][2];
60
+ param2 = b[key][2];
61
+ }
62
+ let val = isAsc
63
+ ? this.annaDateTimeFormatService.sortByTimeAscending(param1, param2)
64
+ : this.annaDateTimeFormatService.sortByTimeDescending(param1, param2);
65
+ return val;
66
+ });
67
+ }
68
+ else {
69
+ let dataWithoutEmptyOrHyphenValues = data.filter(n => n[key] != "-");
70
+ let rowsWithHyphenOrZeroValues = data.filter(n => n[key] == "-");
71
+ dataWithoutEmptyOrHyphenValues.sort((a, b) => {
72
+ param1 = a[key];
73
+ param2 = b[key];
74
+ if (param1 !== param2) {
75
+ return this.annaDateTimeFormatService.compare(param1, param2, isAsc);
76
+ }
77
+ return 0;
78
+ });
79
+ data = isAsc ? [...rowsWithHyphenOrZeroValues, ...dataWithoutEmptyOrHyphenValues] :
80
+ [...dataWithoutEmptyOrHyphenValues, ...rowsWithHyphenOrZeroValues];
81
+ }
82
+ return data;
83
+ }
84
+ sortEnterEditLurAndCsrPage(isAsc, data, key) {
85
+ let param1;
86
+ let param2;
87
+ if (key.includes('_')) {
88
+ let keys = key.split('_');
89
+ let weekNumber = keys[0];
90
+ let sortKey = keys[1];
91
+ if (keys.length > 2) {
92
+ sortKey =
93
+ keys[2] == true
94
+ ? 'BookedAurIncludingNoChargeSpots'
95
+ : 'BookedAurExcludingNoChargeSpots';
96
+ }
97
+ data.sort((a, b) => {
98
+ let aInventoryCodeWeekWiseKey = Object.keys(a.WeekWiseInventoryCodeData).filter((key) => key.split('_')[1] == weekNumber);
99
+ let bInventoryCodeWeekWiseKey = Object.keys(b.WeekWiseInventoryCodeData).filter((key) => key.split('_')[1] == weekNumber);
100
+ param1 = null;
101
+ param2 = null;
102
+ if (aInventoryCodeWeekWiseKey.length > 0) {
103
+ param1 =
104
+ a.WeekWiseInventoryCodeData[aInventoryCodeWeekWiseKey[0]][sortKey][1];
105
+ }
106
+ if (bInventoryCodeWeekWiseKey.length > 0) {
107
+ param2 =
108
+ b.WeekWiseInventoryCodeData[bInventoryCodeWeekWiseKey[0]][sortKey][1];
109
+ }
110
+ if (param1 !== param2) {
111
+ return this.annaDateTimeFormatService.compare(param1, param2, isAsc);
112
+ }
113
+ return 0;
114
+ });
115
+ }
116
+ else if (key == 'TimeBand') {
117
+ data.sort((a, b) => {
118
+ if (isAsc) {
119
+ param1 = a[key][1];
120
+ param2 = b[key][1];
121
+ }
122
+ else {
123
+ param1 = a[key][2];
124
+ param2 = b[key][2];
125
+ }
126
+ let val = isAsc
127
+ ? this.annaDateTimeFormatService.sortByTimeAscending(param1, param2)
128
+ : this.annaDateTimeFormatService.sortByTimeDescending(param1, param2);
129
+ return val;
130
+ });
131
+ }
132
+ else {
133
+ data.sort((a, b) => {
134
+ param1 = a[key];
135
+ param2 = b[key];
136
+ if (param1 !== param2) {
137
+ return this.annaDateTimeFormatService.compare(param1, param2, isAsc);
138
+ }
139
+ return 0;
140
+ });
141
+ }
142
+ return data;
143
+ }
144
+ checkIfSortingIsApplied(tableData, isLurAndCsrComponent) {
145
+ for (let [key, value] of this.columnSortState.entries()) {
146
+ if (value == "ASC") {
147
+ tableData = cloneDeep(isLurAndCsrComponent ? this.sortEnterEditLurAndCsrPage(true, tableData, key) : this.sortDataForComponentOtherThanLurAndCsrPage(true, tableData, key));
148
+ }
149
+ else if (value == "DESC") {
150
+ tableData = cloneDeep(isLurAndCsrComponent ? this.sortEnterEditLurAndCsrPage(false, tableData, key) : this.sortDataForComponentOtherThanLurAndCsrPage(false, tableData, key));
151
+ }
152
+ }
153
+ return tableData;
154
+ }
155
+ applySorting(key, tempSortOrder, tableData, isLurAndCsrComponent) {
156
+ if (tempSortOrder == "ASC") {
157
+ tableData = cloneDeep(isLurAndCsrComponent ? this.sortEnterEditLurAndCsrPage(true, tableData, key) : this.sortDataForComponentOtherThanLurAndCsrPage(true, tableData, key));
158
+ }
159
+ else if (tempSortOrder == "DESC") {
160
+ tableData = cloneDeep(isLurAndCsrComponent ? this.sortEnterEditLurAndCsrPage(false, tableData, key) : this.sortDataForComponentOtherThanLurAndCsrPage(false, tableData, key));
161
+ }
162
+ else if (tempSortOrder == "DEFAULT") {
163
+ tableData = cloneDeep(this.noSortingAppliedData);
164
+ }
165
+ return tableData;
166
+ }
167
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaSortService, deps: [{ token: i1.AnnaDateTimeFormatService }], target: i0.ɵɵFactoryTarget.Injectable }); }
168
+ static { thisprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaSortService, providedIn: 'root' }); }
169
+ }
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaSortService, decorators: [{
171
+ type: Injectable,
172
+ args: [{
173
+ providedIn: 'root',
174
+ }]
175
+ }], ctorParameters: function () { return [{ type: i1.AnnaDateTimeFormatService }]; } });
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1zb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLXNvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7OztBQUV0QyxnQ0FBZ0M7QUFFaEMsaUNBQWlDO0FBS2pDLE1BQU0sT0FBTyxlQUFlO0lBZ0IxQixZQUFvQix5QkFBb0Q7UUFBcEQsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQWJ4RSwwQkFBcUIsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUV2RCxZQUFPLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDaEIsU0FBUztZQUNULFdBQVc7WUFDWCxVQUFVO1lBQ1YsWUFBWTtZQUNaLGlCQUFpQjtZQUNqQixlQUFlO1lBQ2YsTUFBTTtZQUNOLGFBQWE7U0FDZCxDQUFDLENBQUM7SUFHSCxDQUFDO0lBRUQsMENBQTBDLENBQ3hDLEtBQWMsRUFDZCxJQUFXLEVBQ1gsR0FBVztRQUVYLElBQUksTUFBdUIsQ0FBQztRQUM1QixJQUFJLE1BQXVCLENBQUM7UUFFNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqQixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQy9DLENBQUMs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QixDQUFDOytHQXRNVSxlQUFlO21IQUFmLGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNvcnRUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2FubmEtc29ydC5tb2RlbCc7XHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UgfSBmcm9tICcuL2FubmEtZGF0ZS10aW1lLWZvcm1hdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcclxuXHJcbi8vIFRoaXJkIHBhcnR5IGltcG9ydCBzdGF0ZW1lbnRzXHJcblxyXG4vLyBVc2VyIGRlZmluZWQgaW1wb3J0IHN0YXRlbWVudHNcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hU29ydFNlcnZpY2Uge1xyXG4gIGNvbHVtblNvcnRTdGF0ZTogTWFwPHN0cmluZywgU29ydFR5cGU+O1xyXG4gIG5vU29ydGluZ0FwcGxpZWREYXRhOiBhbnlbXTtcclxuICB1cGRhdGVTb3J0VHlwZVN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGRhdGVTZXQgPSBuZXcgU2V0KFtcclxuICAgICdlbmREYXRlJyxcclxuICAgICdzdGFydERhdGUnLFxyXG4gICAgJ2VuZF9kYXRlJyxcclxuICAgICdzdGFydF9kYXRlJyxcclxuICAgICdmbGlnaHRTdGFydERhdGUnLFxyXG4gICAgJ2ZsaWdodEVuZERhdGUnLFxyXG4gICAgXCJkYXRlXCIsXHJcbiAgICBcIkdlbmVyYXRlZE9uXCJcclxuICBdKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBzb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UoXHJcbiAgICBpc0FzYzogYm9vbGVhbixcclxuICAgIGRhdGE6IGFueVtdLFxyXG4gICAga2V5OiBzdHJpbmdcclxuICApIHtcclxuICAgIGxldCBwYXJhbTE6IHN0cmluZyB8IG51bWJlcjtcclxuICAgIGxldCBwYXJhbTI6IHN0cmluZyB8IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5kYXRlU2V0LmhhcyhrZXkpKSB7XHJcbiAgICAgIGRhdGEuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29tcGFyZURhdGUoXHJcbiAgICAgICAgICBhW2tleV0sXHJcbiAgICAgICAgICBiW2tleV0sXHJcbiAgICAgICAgICBpc0FzY1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdBaXJEYXRlQW5kVGltZScgfHwga2V5ID09PSAnRGF0ZScpIHtcclxuICAgICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgbGV0IGZpcnN0LCBzZWNvbmQ7XHJcbiAgICAgICAgaWYgKGFba2V5XSA9PSAnLScpIHtcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJba2V5XSA9PSAnLScpIHtcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZmlyc3QgPVxyXG4gICAgICAgICAgICB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuZm9ybWF0RGF0ZUFuZEhITU1BVGltZVRvU3RhbmRhcmRGb3JtYXQoXHJcbiAgICAgICAgICAgICAgYVtrZXldXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICBzZWNvbmQgPVxyXG4gICAgICAgICAgICB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuZm9ybWF0RGF0ZUFuZEhITU1BVGltZVRvU3RhbmRhcmRGb3JtYXQoXHJcbiAgICAgICAgICAgICAgYltrZXldXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICBsZXQgY29tcGFyZURhdGUgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29tcGFyZURhdGUoXHJcbiAgICAgICAgICAgIGZpcnN0LFxyXG4gICAgICAgICAgICBzZWNvbmQsXHJcbiAgICAgICAgICAgIGlzQXNjXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIGNvbXBhcmVEYXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKGtleSA9PSAnc3RhcnRFbmRUaW1lJyB8fCBrZXkgPT0gJ1RpbWVCYW5kJykge1xyXG4gICAgICBkYXRhLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICBpZiAoaXNBc2MpIHtcclxuICAgICAgICAgIHBhcmFtMSA9IGFba2V5XVsxXTtcclxuICAgICAgICAgIHBhcmFtMiA9IGJba2V5XVsxXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGFyYW0xID0gYVtrZXldWzJdO1xyXG4gICAgICAgICAgcGFyYW0yID0gYltrZXldWzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdmFsID0gaXNBc2NcclxuICAgICAgICAgID8gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVBc2NlbmRpbmcocGFyYW0xLCBwYXJhbTIpXHJcbiAgICAgICAgICA6IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lRGVzY2VuZGluZyhwYXJhbTEsIHBhcmFtMik7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZGF0YVdpdGhvdXRFbXB0eU9ySHlwaGVuVmFsdWVzID0gZGF0YS5maWx0ZXIobiA9PiBuW2tleV0gIT0gXCItXCIpO1xyXG4gICAgICBsZXQgcm93c1dpdGhIeXBoZW5Pclplcm9WYWx1ZXMgPSBkYXRhLmZpbHRlcihuID0+IG5ba2V5XSA9PSBcIi1cIik7XHJcblxyXG4gICAgICBkYXRhV2l0aG91dEVtcHR5T3JIeXBoZW5WYWx1ZXMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIHBhcmFtMSA9IGFba2V5XTtcclxuICAgICAgICBwYXJhbTIgPSBiW2tleV07XHJcblxyXG4gICAgICAgIGlmIChwYXJhbTEgIT09IHBhcmFtMikge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb21wYXJlKHBhcmFtMSwgcGFyYW0yLCBpc0FzYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBkYXRhID0gaXNBc2MgPyBbLi4ucm93c1dpdGhIeXBoZW5Pclplcm9WYWx1ZXMsIC4uLmRhdGFXaXRob3V0RW1wdHlPckh5cGhlblZhbHVlc10gOlxyXG4gICAgICAgIFsuLi5kYXRhV2l0aG91dEVtcHR5T3JIeXBoZW5WYWx1ZXMsIC4uLnJvd3NXaXRoSHlwaGVuT3JaZXJvVmFsdWVzXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHNvcnRFbnRlckVkaXRMdXJBbmRDc3JQYWdlKGlzQXNjOiBib29sZWFuLCBkYXRhOiBhbnlbXSwga2V5OiBhbnkpIHtcclxuICAgIGxldCBwYXJhbTE6IHN0cmluZyB8IG51bWJlcjtcclxuICAgIGxldCBwYXJhbTI6IHN0cmluZyB8IG51bWJlcjtcclxuXHJcbiAgICBpZiAoa2V5LmluY2x1ZGVzKCdfJykpIHtcclxuICAgICAgbGV0IGtleXMgPSBrZXkuc3BsaXQoJ18nKTtcclxuICAgICAgbGV0IHdlZWtOdW1iZXIgPSBrZXlzWzBdO1xyXG4gICAgICBsZXQgc29ydEtleSA9IGtleXNbMV07XHJcblxyXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgc29ydEtleSA9XHJcbiAgICAgICAgICBrZXlzWzJdID09IHRydWVcclxuICAgICAgICAgICAgPyAnQm9va2VkQXVySW5jbHVkaW5nTm9DaGFyZ2VTcG90cydcclxuICAgICAgICAgICAgOiAnQm9va2VkQXVyRXhjbHVkaW5nTm9DaGFyZ2VTcG90cyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRhdGEuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGxldCBhSW52ZW50b3J5Q29kZVdlZWtXaXNlS2V5ID0gT2JqZWN0LmtleXMoXHJcbiAgICAgICAgICBhLldlZWtXaXNlSW52ZW50b3J5Q29kZURhdGFcclxuICAgICAgICApLmZpbHRlcigoa2V5KSA9PiBrZXkuc3BsaXQoJ18nKVsxXSA9PSB3ZWVrTnVtYmVyKTtcclxuICAgICAgICBsZXQgYkludmVudG9yeUNvZGVXZWVrV2lzZUtleSA9IE9iamVjdC5rZXlzKFxyXG4gICAgICAgICAgYi5XZWVrV2lzZUludmVudG9yeUNvZGVEYXRhXHJcbiAgICAgICAgKS5maWx0ZXIoKGtleSkgPT4ga2V5LnNwbGl0KCdfJylbMV0gPT0gd2Vla051bWJlcik7XHJcblxyXG4gICAgICAgIHBhcmFtMSA9IG51bGw7XHJcbiAgICAgICAgcGFyYW0yID0gbnVsbDtcclxuICAgICAgICBpZiAoYUludmVudG9yeUNvZGVXZWVrV2lzZUtleS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBwYXJhbTEgPVxyXG4gICAgICAgICAgICBhLldlZWtXaXNlSW52ZW50b3J5Q29kZURhdGFbYUludmVudG9yeUNvZGVXZWVrV2lzZUtleVswXV1bXHJcbiAgICAgICAgICAgIHNvcnRLZXlcclxuICAgICAgICAgICAgXVsxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiSW52ZW50b3J5Q29kZVdlZWtXaXNlS2V5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHBhcmFtMiA9XHJcbiAgICAgICAgICAgIGIuV2Vla1dpc2VJbnZlbnRvcnlDb2RlRGF0YVtiSW52ZW50b3J5Q29kZVdlZWtXaXNlS2V5WzBdXVtcclxuICAgICAgICAgICAgc29ydEtleVxyXG4gICAgICAgICAgICBdWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBhcmFtMSAhPT0gcGFyYW0yKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbXBhcmUocGFyYW0xLCBwYXJhbTIsIGlzQXNjKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoa2V5ID09ICdUaW1lQmFuZCcpIHtcclxuICAgICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzQXNjKSB7XHJcbiAgICAgICAgICBwYXJhbTEgPSBhW2tleV1bMV07XHJcbiAgICAgICAgICBwYXJhbTIgPSBiW2tleV1bMV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBhcmFtMSA9IGFba2V5XVsyXTtcclxuICAgICAgICAgIHBhcmFtMiA9IGJba2V5XVsyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHZhbCA9IGlzQXNjXHJcbiAgICAgICAgICA/IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKHBhcmFtMSwgcGFyYW0yKVxyXG4gICAgICAgICAgOiB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZURlc2NlbmRpbmcocGFyYW0xLCBwYXJhbTIpO1xyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgcGFyYW0xID0gYVtrZXldO1xyXG4gICAgICAgIHBhcmFtMiA9IGJba2V5XTtcclxuXHJcbiAgICAgICAgaWYgKHBhcmFtMSAhPT0gcGFyYW0yKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbXBhcmUocGFyYW0xLCBwYXJhbTIsIGlzQXNjKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKHRhYmxlRGF0YTogYW55W10sIGlzTHVyQW5kQ3NyQ29tcG9uZW50OiBib29sZWFuKXtcclxuICAgIGZvcihsZXQgW2tleSx2YWx1ZV0gb2YgdGhpcy5jb2x1bW5Tb3J0U3RhdGUuZW50cmllcygpKXtcclxuICAgICAgaWYodmFsdWUgPT0gXCJBU0NcIil7XHJcbiAgICAgICAgICB0YWJsZURhdGEgPSBjbG9uZURlZXAoaXNMdXJBbmRDc3JDb21wb25lbnQgPyB0aGlzLnNvcnRFbnRlckVkaXRMdXJBbmRDc3JQYWdlKHRydWUsIHRhYmxlRGF0YSwga2V5KSA6IHRoaXMuc29ydERhdGFGb3JDb21wb25lbnRPdGhlclRoYW5MdXJBbmRDc3JQYWdlKHRydWUsIHRhYmxlRGF0YSxrZXkpICk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZih2YWx1ZSA9PSBcIkRFU0NcIil7XHJcbiAgICAgICAgICB0YWJsZURhdGEgPSBjbG9uZURlZXAoaXNMdXJBbmRDc3JDb21wb25lbnQgPyB0aGlzLnNvcnRFbnRlckVkaXRMdXJBbmRDc3JQYWdlKGZhbHNlLCB0YWJsZURhdGEsIGtleSkgOiB0aGlzLnNvcnREYXRhRm9yQ29tcG9uZW50T3RoZXJUaGFuTHVyQW5kQ3NyUGFnZShmYWxzZSwgdGFibGVEYXRhLGtleSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhYmxlRGF0YTtcclxuICB9XHJcblxyXG4gIGFwcGx5U29ydGluZyhrZXk6IHN0cmluZywgdGVtcFNvcnRPcmRlcjogU29ydFR5cGUsIHRhYmxlRGF0YTogYW55W10sIGlzTHVyQW5kQ3NyQ29tcG9uZW50OiBib29sZWFuKXtcclxuICAgIGlmKHRlbXBTb3J0T3JkZXIgPT0gXCJBU0NcIil7XHJcbiAgICAgIHRhYmxlRGF0YSA9IGNsb25lRGVlcChpc0x1ckFuZENzckNvbXBvbmVudCA/IHRoaXMuc29ydEVudGVyRWRpdEx1ckFuZENzclBhZ2UodHJ1ZSwgdGFibGVEYXRhLCBrZXkpIDogdGhpcy5zb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UodHJ1ZSwgdGFibGVEYXRhLGtleSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0ZW1wU29ydE9yZGVyID09IFwiREVTQ1wiKXtcclxuICAgICAgdGFibGVEYXRhID0gY2xvbmVEZWVwKGlzTHVyQW5kQ3NyQ29tcG9uZW50ID8gdGhpcy5zb3J0RW50ZXJFZGl0THVyQW5kQ3NyUGFnZShmYWxzZSwgdGFibGVEYXRhLCBrZXkpIDogdGhpcy5zb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UoZmFsc2UsIHRhYmxlRGF0YSxrZXkpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYodGVtcFNvcnRPcmRlciA9PSBcIkRFRkFVTFRcIil7XHJcbiAgICAgIHRhYmxlRGF0YSA9IGNsb25lRGVlcCh0aGlzLm5vU29ydGluZ0FwcGxpZWREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGFibGVEYXRhO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiJdfQ==