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