taxtank-core 0.8.6 → 0.8.7

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 (150) hide show
  1. package/bundles/taxtank-core.umd.js +94 -92
  2. package/bundles/taxtank-core.umd.js.map +1 -1
  3. package/esm2015/lib/db/Models/transaction-base.js +2 -1
  4. package/esm2015/lib/services/http/address/address.service.js +39 -0
  5. package/esm2015/lib/services/http/bank/bank-account/bank-account.service.js +118 -0
  6. package/esm2015/lib/services/http/bank/bank-connection/bank-connection.service.js +52 -0
  7. package/esm2015/lib/services/http/bank/bank-transaction/bank-transaction.service.js +89 -0
  8. package/esm2015/lib/services/http/bank/bank.service.js +24 -0
  9. package/esm2015/lib/services/http/bank/basiq/basiq.service.js +94 -0
  10. package/esm2015/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.js +38 -0
  11. package/esm2015/lib/services/http/chart-accounts/chart-accounts.service.js +89 -0
  12. package/esm2015/lib/services/http/chat/chat.service.js +77 -0
  13. package/esm2015/lib/services/http/chat/message/message.service.js +65 -0
  14. package/esm2015/lib/services/http/chat/message-document/message-document.service.js +118 -0
  15. package/esm2015/lib/services/{depreciation/capital-project.service.js → http/depreciation/depreciation-capital-project/depreciation-capital-project.service.js} +7 -7
  16. package/esm2015/lib/services/http/depreciation/depreciation.service.js +146 -0
  17. package/esm2015/lib/services/http/document/document-folder/document-folder.service.js +84 -0
  18. package/esm2015/lib/services/{client → http/firm/client-invite}/client-invite.service.js +7 -7
  19. package/esm2015/lib/services/http/firm/client-movement/client-movement.service.js +98 -0
  20. package/esm2015/lib/services/http/firm/employee/employee.service.js +39 -0
  21. package/esm2015/lib/services/http/firm/employee-invite/employee-invite.service.js +53 -0
  22. package/esm2015/lib/services/http/firm/firm.service.js +79 -0
  23. package/esm2015/lib/services/http/firm/portfolio-report/client-portfolio-report.service.js +37 -0
  24. package/esm2015/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.js +90 -0
  25. package/esm2015/lib/services/http/income-source/income-source.service.js +109 -0
  26. package/esm2015/lib/services/http/income-source/salary-forecast/salary-forecast.service.js +90 -0
  27. package/esm2015/lib/services/http/income-source/sole-forecast/sole-forecast.service.js +87 -0
  28. package/esm2015/lib/services/http/loan/borrowing-expense/borrowing-expense.service.js +73 -0
  29. package/esm2015/lib/services/http/loan/loan.service.js +145 -0
  30. package/esm2015/lib/services/http/property/property-category/property-category.service.js +23 -0
  31. package/esm2015/lib/services/http/property/property-category-movement/property-category-movement.service.js +47 -0
  32. package/esm2015/lib/services/http/property/property-document/property-document.service.js +70 -0
  33. package/esm2015/lib/services/http/property/property-sale/property-sale.service.js +20 -0
  34. package/esm2015/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.js +21 -0
  35. package/esm2015/lib/services/http/property/property-share/property-share.service.js +115 -0
  36. package/esm2015/lib/services/http/property/property.service.js +126 -0
  37. package/esm2015/lib/services/http/rest/rest.service.js +190 -0
  38. package/esm2015/lib/services/http/service-notification/service-notification.service.js +65 -0
  39. package/esm2015/lib/services/http/subscription/subscription.service.js +157 -0
  40. package/esm2015/lib/services/http/tax-review/tax-review-history/tax-review-history.service.js +41 -0
  41. package/esm2015/lib/services/http/tax-review/tax-review.service.js +103 -0
  42. package/esm2015/lib/services/http/tax-summary/tax-summary.service.js +71 -0
  43. package/esm2015/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.js +85 -0
  44. package/esm2015/lib/services/http/transaction/transaction.service.js +319 -0
  45. package/esm2015/lib/services/http/user/occupation/occupation.service.js +45 -0
  46. package/esm2015/lib/services/http/user/user-event-setting/user-event-setting.service.js +59 -0
  47. package/esm2015/lib/services/http/user/user-event-type/user-event-type.service.js +29 -0
  48. package/esm2015/lib/services/http/user/user.service.js +124 -0
  49. package/esm2015/lib/services/http/vehicle/vehicle.service.js +237 -0
  50. package/esm2015/lib/services/property/equity-position-chart/equity-position-chart.service.js +45 -0
  51. package/esm2015/public-api.js +48 -48
  52. package/fesm2015/taxtank-core.js +51 -49
  53. package/fesm2015/taxtank-core.js.map +1 -1
  54. package/lib/services/{address → http/address}/address.service.d.ts +1 -1
  55. package/lib/services/{bank → http/bank/bank-account}/bank-account.service.d.ts +5 -5
  56. package/lib/services/{bank → http/bank/bank-connection}/bank-connection.service.d.ts +5 -5
  57. package/lib/services/{bank → http/bank/bank-transaction}/bank-transaction.service.d.ts +5 -5
  58. package/lib/services/{bank → http/bank}/bank.service.d.ts +4 -4
  59. package/lib/services/{bank → http/bank/basiq}/basiq.service.d.ts +7 -7
  60. package/lib/services/{chart-accounts → http/chart-accounts/chart-accounts-depreciations}/chart-accounts-depreciations.service.d.ts +4 -4
  61. package/lib/services/{chart-accounts → http/chart-accounts}/chart-accounts.service.d.ts +3 -3
  62. package/lib/services/{chat → http/chat}/chat.service.d.ts +7 -7
  63. package/lib/services/{chat → http/chat/message}/message.service.d.ts +7 -7
  64. package/lib/services/{chat → http/chat/message-document}/message-document.service.d.ts +3 -3
  65. package/lib/services/{depreciation/capital-project.service.d.ts → http/depreciation/depreciation-capital-project/depreciation-capital-project.service.d.ts} +4 -4
  66. package/lib/services/{depreciation → http/depreciation}/depreciation.service.d.ts +5 -5
  67. package/lib/services/{document → http/document/document-folder}/document-folder.service.d.ts +6 -6
  68. package/lib/services/{client → http/firm/client-invite}/client-invite.service.d.ts +4 -4
  69. package/lib/services/{client → http/firm/client-movement}/client-movement.service.d.ts +7 -7
  70. package/lib/services/{employee → http/firm/employee}/employee.service.d.ts +4 -4
  71. package/lib/services/{employee → http/firm/employee-invite}/employee-invite.service.d.ts +4 -4
  72. package/lib/services/{firm → http/firm}/firm.service.d.ts +2 -2
  73. package/lib/services/{client → http/firm/portfolio-report}/client-portfolio-report.service.d.ts +1 -1
  74. package/lib/services/{income-source → http/income-source/income-source-forecast}/income-source-forecast.service.d.ts +5 -5
  75. package/lib/services/{income-source → http/income-source}/income-source.service.d.ts +8 -8
  76. package/lib/services/{income-source → http/income-source/salary-forecast}/salary-forecast.service.d.ts +6 -6
  77. package/lib/services/{income-source → http/income-source/sole-forecast}/sole-forecast.service.d.ts +5 -5
  78. package/lib/services/{borrowing-expense → http/loan/borrowing-expense}/borrowing-expense.service.d.ts +2 -2
  79. package/lib/services/{loan → http/loan}/loan.service.d.ts +6 -6
  80. package/lib/services/{property → http/property}/property-category/property-category.service.d.ts +4 -4
  81. package/lib/services/{property → http/property/property-category-movement}/property-category-movement.service.d.ts +4 -4
  82. package/lib/services/{property → http/property}/property-document/property-document.service.d.ts +5 -5
  83. package/lib/services/http/property/property-sale/property-sale.service.d.ts +10 -0
  84. package/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.d.ts +11 -0
  85. package/lib/services/{property → http/property}/property-share/property-share.service.d.ts +5 -5
  86. package/lib/services/{property → http/property}/property.service.d.ts +5 -5
  87. package/lib/services/{base-rest.service.d.ts → http/rest/rest.service.d.ts} +4 -4
  88. package/lib/services/http/service-notification/service-notification.service.d.ts +31 -0
  89. package/lib/services/{subscription → http/subscription}/subscription.service.d.ts +6 -6
  90. package/lib/services/{tax-review → http/tax-review/tax-review-history}/tax-review-history.service.d.ts +5 -5
  91. package/lib/services/{tax-review → http/tax-review}/tax-review.service.d.ts +6 -6
  92. package/lib/services/{tax-summary → http/tax-summary}/tax-summary.service.d.ts +2 -2
  93. package/lib/services/{transaction → http/transaction/transaction-allocation}/transaction-allocation.service.d.ts +6 -6
  94. package/lib/services/{transaction → http/transaction}/transaction.service.d.ts +7 -7
  95. package/lib/services/{user → http/user/occupation}/occupation.service.d.ts +1 -1
  96. package/lib/services/{user-event → http/user/user-event-setting}/user-event-setting.service.d.ts +5 -5
  97. package/lib/services/{user-event → http/user/user-event-type}/user-event-type.service.d.ts +5 -5
  98. package/lib/services/{user → http/user}/user.service.d.ts +3 -3
  99. package/lib/services/{work/work-tank.service.d.ts → http/vehicle/vehicle.service.d.ts} +9 -8
  100. package/lib/services/property/{equity-position-chart.service.d.ts → equity-position-chart/equity-position-chart.service.d.ts} +1 -1
  101. package/package.json +1 -1
  102. package/public-api.d.ts +47 -47
  103. package/esm2015/lib/services/address/address.service.js +0 -39
  104. package/esm2015/lib/services/bank/bank-account.service.js +0 -118
  105. package/esm2015/lib/services/bank/bank-connection.service.js +0 -52
  106. package/esm2015/lib/services/bank/bank-transaction.service.js +0 -89
  107. package/esm2015/lib/services/bank/bank.service.js +0 -24
  108. package/esm2015/lib/services/bank/basiq.service.js +0 -94
  109. package/esm2015/lib/services/base-rest.service.js +0 -190
  110. package/esm2015/lib/services/borrowing-expense/borrowing-expense.service.js +0 -73
  111. package/esm2015/lib/services/chart-accounts/chart-accounts-depreciations.service.js +0 -38
  112. package/esm2015/lib/services/chart-accounts/chart-accounts.service.js +0 -89
  113. package/esm2015/lib/services/chat/chat.service.js +0 -77
  114. package/esm2015/lib/services/chat/message-document.service.js +0 -118
  115. package/esm2015/lib/services/chat/message.service.js +0 -65
  116. package/esm2015/lib/services/client/client-movement.service.js +0 -98
  117. package/esm2015/lib/services/client/client-portfolio-report.service.js +0 -37
  118. package/esm2015/lib/services/depreciation/depreciation.service.js +0 -146
  119. package/esm2015/lib/services/document/document-folder.service.js +0 -84
  120. package/esm2015/lib/services/employee/employee-invite.service.js +0 -53
  121. package/esm2015/lib/services/employee/employee.service.js +0 -39
  122. package/esm2015/lib/services/firm/firm.service.js +0 -79
  123. package/esm2015/lib/services/income-source/income-source-forecast.service.js +0 -90
  124. package/esm2015/lib/services/income-source/income-source.service.js +0 -109
  125. package/esm2015/lib/services/income-source/salary-forecast.service.js +0 -90
  126. package/esm2015/lib/services/income-source/sole-forecast.service.js +0 -87
  127. package/esm2015/lib/services/loan/loan.service.js +0 -145
  128. package/esm2015/lib/services/notification/notification.service.js +0 -65
  129. package/esm2015/lib/services/property/equity-position-chart.service.js +0 -45
  130. package/esm2015/lib/services/property/property-category/property-category.service.js +0 -23
  131. package/esm2015/lib/services/property/property-category-movement.service.js +0 -47
  132. package/esm2015/lib/services/property/property-document/property-document.service.js +0 -70
  133. package/esm2015/lib/services/property/property-sale/property-sale.service.js +0 -20
  134. package/esm2015/lib/services/property/property-sale/tax-exemption/tax-exemption.service.js +0 -21
  135. package/esm2015/lib/services/property/property-share/property-share.service.js +0 -115
  136. package/esm2015/lib/services/property/property.service.js +0 -126
  137. package/esm2015/lib/services/subscription/subscription.service.js +0 -157
  138. package/esm2015/lib/services/tax-review/tax-review-history.service.js +0 -41
  139. package/esm2015/lib/services/tax-review/tax-review.service.js +0 -103
  140. package/esm2015/lib/services/tax-summary/tax-summary.service.js +0 -71
  141. package/esm2015/lib/services/transaction/transaction-allocation.service.js +0 -85
  142. package/esm2015/lib/services/transaction/transaction.service.js +0 -319
  143. package/esm2015/lib/services/user/occupation.service.js +0 -45
  144. package/esm2015/lib/services/user/user.service.js +0 -124
  145. package/esm2015/lib/services/user-event/user-event-setting.service.js +0 -59
  146. package/esm2015/lib/services/user-event/user-event-type.service.js +0 -29
  147. package/esm2015/lib/services/work/work-tank.service.js +0 -236
  148. package/lib/services/notification/notification.service.d.ts +0 -31
  149. package/lib/services/property/property-sale/property-sale.service.d.ts +0 -10
  150. package/lib/services/property/property-sale/tax-exemption/tax-exemption.service.d.ts +0 -11
@@ -0,0 +1,146 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { map } from 'rxjs/operators';
3
+ import { replace } from '../../../functions/array';
4
+ import { plainToClass } from 'class-transformer';
5
+ import { RestService } from '../rest/rest.service';
6
+ import { Depreciation } from '../../../models/depreciation/depreciation';
7
+ import { AppEvent } from '../../../models/event/app-event';
8
+ import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
9
+ import { FinancialYear } from '../../../models/financial-year/financial-year';
10
+ import { DepreciationReceipt } from '../../../models/depreciation/depreciation-receipt';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/common/http";
13
+ import * as i2 from "../../event/event-dispatcher.service";
14
+ export class DepreciationService extends RestService {
15
+ constructor(http, eventDispatcherService, environment) {
16
+ super(http, eventDispatcherService, environment);
17
+ this.http = http;
18
+ this.eventDispatcherService = eventDispatcherService;
19
+ this.environment = environment;
20
+ this.modelClass = Depreciation;
21
+ this.url = 'depreciations';
22
+ this.listenEvents();
23
+ }
24
+ /**
25
+ * Add a single depreciation
26
+ * @TODO add auto-generation for events
27
+ */
28
+ add(depreciation) {
29
+ return this.addBatch([depreciation])
30
+ .pipe(map((newDepreciations) => {
31
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.DEPRECIATIONS_CREATED, newDepreciations[0]));
32
+ return newDepreciations[0];
33
+ }));
34
+ }
35
+ /**
36
+ * Add multiple depreciations
37
+ * @TODO add auto-generation for events
38
+ */
39
+ addBatch(depreciations) {
40
+ return super.addBatch(depreciations).pipe(map((newDepreciations) => {
41
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.DEPRECIATIONS_CREATED, newDepreciations));
42
+ return newDepreciations;
43
+ }));
44
+ }
45
+ /**
46
+ * Listen to Depreciations events
47
+ */
48
+ listenEvents() {
49
+ this.listenToUpdatedLoan();
50
+ this.listenToVehicleClaim();
51
+ this.listenToUpdatedBankAccount();
52
+ }
53
+ /**
54
+ * Get depreciations related to Vehicle category
55
+ */
56
+ getVehicleDepreciations() {
57
+ return this.get().pipe(map((depreciations) => {
58
+ return depreciations.filter((depreciation) => depreciation.isVehicleDepreciation());
59
+ }));
60
+ }
61
+ getCloseBalance(depreciation) {
62
+ return this.http.post(`${this.environment.apiV2}/${this.url}/closing-balance?financialYear=${new FinancialYear().year}`, depreciation)
63
+ .pipe(map((response) => {
64
+ return response || 0;
65
+ }));
66
+ }
67
+ /**
68
+ * @TODO wrong place, move to collection model
69
+ */
70
+ calculateSummaryAmount(depreciationList) {
71
+ return depreciationList.reduce((sum, depreciation) => {
72
+ // depreciation may not have forecast item for current financial year
73
+ if (!depreciation.currentYearForecast) {
74
+ return sum;
75
+ }
76
+ return sum + depreciation.currentYearForecast.claimAmount;
77
+ }, 0);
78
+ }
79
+ calculateBorrowingExpenses(depreciationList) {
80
+ return this.getByIds(depreciationList)
81
+ .pipe(map((depreciations) => {
82
+ return this.calculateSummaryAmount(depreciations.filter((depreciation) => depreciation.isBorrowingExpense()));
83
+ }));
84
+ }
85
+ calculateDepreciations(depreciationList) {
86
+ return this.getByIds(depreciationList)
87
+ .pipe(map((depreciations) => {
88
+ return this.calculateSummaryAmount(depreciations.filter((depreciation) => !depreciation.isBorrowingExpense()));
89
+ }));
90
+ }
91
+ /**
92
+ * Upload depreciation receipt
93
+ * @param depreciation for which will be uploaded receipt
94
+ */
95
+ uploadReceipt(depreciation) {
96
+ const formData = new FormData();
97
+ formData.append('file', depreciation.file);
98
+ depreciation.receipt = null;
99
+ this.http.post(`${this.environment.apiV2}/${this.url}/${depreciation.id}/receipts`, formData)
100
+ .subscribe((receiptResponse) => {
101
+ // we don't need to keep file after save
102
+ depreciation.file = null;
103
+ depreciation.receipt = plainToClass(DepreciationReceipt, receiptResponse);
104
+ replace(this.cache, depreciation);
105
+ this.cacheSubject.next(this.cache.slice());
106
+ });
107
+ }
108
+ /**
109
+ * Listen to EventDispatcherService event related to updated bank loan
110
+ */
111
+ listenToUpdatedLoan() {
112
+ this.eventDispatcherService.on([AppEventTypeEnum.LOAN_UPDATED, AppEventTypeEnum.PROPERTY_SHARE_UPDATED]).subscribe(() => {
113
+ this.fetch().subscribe();
114
+ });
115
+ }
116
+ /**
117
+ * Listen to EventDispatcherService event related to updated bank account
118
+ */
119
+ listenToUpdatedBankAccount() {
120
+ this.eventDispatcherService.on([AppEventTypeEnum.BANK_ACCOUNT_UPDATED]).subscribe((bankAccount) => {
121
+ if (bankAccount.isPropertyTank()) {
122
+ this.fetch().subscribe();
123
+ }
124
+ });
125
+ }
126
+ /**
127
+ * Listen to EventDispatcherService event related to updated vehicle claim
128
+ */
129
+ listenToVehicleClaim() {
130
+ this.eventDispatcherService.on([AppEventTypeEnum.VEHICLE_CLAIM_CREATED, AppEventTypeEnum.VEHICLE_CLAIM_UPDATED]).subscribe(() => {
131
+ this.fetch().subscribe();
132
+ });
133
+ }
134
+ }
135
+ DepreciationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DepreciationService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
136
+ DepreciationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DepreciationService, providedIn: 'root' });
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DepreciationService, decorators: [{
138
+ type: Injectable,
139
+ args: [{
140
+ providedIn: 'root'
141
+ }]
142
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
143
+ type: Inject,
144
+ args: ['environment']
145
+ }] }]; } });
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwcmVjaWF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9kZXByZWNpYXRpb24vZGVwcmVjaWF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUV6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7O0FBTXhGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxXQUEyQztJQUlsRixZQUNZLElBQWdCLEVBQ2hCLHNCQUE4QyxFQUN2QixXQUFnQjtRQUVqRCxLQUFLLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBSnZDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN2QixnQkFBVyxHQUFYLFdBQVcsQ0FBSztRQU5uRCxlQUFVLEdBQXdCLFlBQVksQ0FBQztRQUMvQyxRQUFHLEdBQVcsZUFB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OztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdEgsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBd0IsRUFBRSxFQUFFO1lBQzdHLElBQUksV0FBVyxDQUFDLGNBQWMsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDMUI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDOUgsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7aUhBbkpVLG1CQUFtQixrRkFPcEIsYUFBYTtxSEFQWixtQkFBbUIsY0FGbEIsTUFBTTs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFRSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlcHJlY2lhdGlvbiBhcyBEZXByZWNpYXRpb25CYXNlIH0gZnJvbSAnLi4vLi4vLi4vZGIvTW9kZWxzL2RlcHJlY2lhdGlvbic7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyByZXBsYWNlIH0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zL2FycmF5JztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uL3Jlc3QvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IERlcHJlY2lhdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9kZXByZWNpYXRpb24vZGVwcmVjaWF0aW9uJztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9ldmVudC9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcbmltcG9ydCB7IEFwcEV2ZW50VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBGaW5hbmNpYWxZZWFyIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbmFuY2lhbC15ZWFyL2ZpbmFuY2lhbC15ZWFyJztcbmltcG9ydCB7IERlcHJlY2lhdGlvblJlY2VpcHQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZGVwcmVjaWF0aW9uL2RlcHJlY2lhdGlvbi1yZWNlaXB0JztcbmltcG9ydCB7IEJhbmtBY2NvdW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2JhbmsvYmFuay1hY2NvdW50JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGVwcmVjaWF0aW9uU2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPERlcHJlY2lhdGlvbkJhc2UsIERlcHJlY2lhdGlvbj4ge1xuICBtb2RlbENsYXNzOiB0eXBlb2YgRGVwcmVjaWF0aW9uID0gRGVwcmVjaWF0aW9uO1xuICB1cmw6IHN0cmluZyA9ICdkZXByZWNpYXRpb25zJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcm90ZWN0ZWQgZXZlbnREaXNwYXRjaGVyU2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogYW55XG4gICkge1xuICAgIHN1cGVyKGh0dHAsIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsIGVudmlyb25tZW50KTtcbiAgICB0aGlzLmxpc3RlbkV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpbmdsZSBkZXByZWNpYXRpb25cbiAgICogQFRPRE8gYWRkIGF1dG8tZ2VuZXJhdGlvbiBmb3IgZXZlbnRzXG4gICAqL1xuICBhZGQoZGVwcmVjaWF0aW9uOiBEZXByZWNpYXRpb24pOiBPYnNlcnZhYmxlPERlcHJlY2lhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmFkZEJhdGNoKFtkZXByZWNpYXRpb25dKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobmV3RGVwcmVjaWF0aW9uczogRGVwcmVjaWF0aW9uW10pOiBEZXByZWNpYXRpb24gPT4ge1xuICAgICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5ERVBSRUNJQVRJT05TX0NSRUFURUQsIG5ld0RlcHJlY2lhdGlvbnNbMF0pKTtcbiAgICAgICAgICByZXR1cm4gbmV3RGVwcmVjaWF0aW9uc1swXTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG11bHRpcGxlIGRlcHJlY2lhdGlvbnNcbiAgICogQFRPRE8gYWRkIGF1dG8tZ2VuZXJhdGlvbiBmb3IgZXZlbnRzXG4gICAqL1xuICBhZGRCYXRjaChkZXByZWNpYXRpb25zOiBEZXByZWNpYXRpb25bXSk6IE9ic2VydmFibGU8RGVwcmVjaWF0aW9uW10+IHtcbiAgICByZXR1cm4gc3VwZXIuYWRkQmF0Y2goZGVwcmVjaWF0aW9ucykucGlwZShcbiAgICAgIG1hcCgobmV3RGVwcmVjaWF0aW9uczogRGVwcmVjaWF0aW9uW10pOiBEZXByZWNpYXRpb25bXSA9PiB7XG4gICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5ERVBSRUNJQVRJT05TX0NSRUFURUQsIG5ld0RlcHJlY2lhdGlvbnMpKTtcbiAgICAgICAgcmV0dXJuIG5ld0RlcHJlY2lhdGlvbnM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIERlcHJlY2lhdGlvbnMgZXZlbnRzXG4gICAqL1xuICBsaXN0ZW5FdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5Ub1VwZGF0ZWRMb2FuKCk7XG4gICAgdGhpcy5saXN0ZW5Ub1ZlaGljbGVDbGFpbSgpO1xuICAgIHRoaXMubGlzdGVuVG9VcGRhdGVkQmFua0FjY291bnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVwcmVjaWF0aW9ucyByZWxhdGVkIHRvIFZlaGljbGUgY2F0ZWdvcnlcbiAgICovXG4gIGdldFZlaGljbGVEZXByZWNpYXRpb25zKCk6IE9ic2VydmFibGU8RGVwcmVjaWF0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQoKS5waXBlKFxuICAgICAgbWFwKChkZXByZWNpYXRpb25zOiBEZXByZWNpYXRpb25bXSkgPT4ge1xuICAgICAgICByZXR1cm4gZGVwcmVjaWF0aW9ucy5maWx0ZXIoKGRlcHJlY2lhdGlvbjogRGVwcmVjaWF0aW9uKSA9PiBkZXByZWNpYXRpb24uaXNWZWhpY2xlRGVwcmVjaWF0aW9uKCkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0Q2xvc2VCYWxhbmNlKGRlcHJlY2lhdGlvbjogRGVwcmVjaWF0aW9uKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH0vY2xvc2luZy1iYWxhbmNlP2ZpbmFuY2lhbFllYXI9JHtuZXcgRmluYW5jaWFsWWVhcigpLnllYXJ9YCwgZGVwcmVjaWF0aW9uKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZSB8fCAwO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAVE9ETyB3cm9uZyBwbGFjZSwgbW92ZSB0byBjb2xsZWN0aW9uIG1vZGVsXG4gICAqL1xuICBjYWxjdWxhdGVTdW1tYXJ5QW1vdW50KGRlcHJlY2lhdGlvbkxpc3Q6IERlcHJlY2lhdGlvbltdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZGVwcmVjaWF0aW9uTGlzdC5yZWR1Y2UoKHN1bTogbnVtYmVyLCBkZXByZWNpYXRpb246IERlcHJlY2lhdGlvbikgPT4ge1xuICAgICAgLy8gZGVwcmVjaWF0aW9uIG1heSBub3QgaGF2ZSBmb3JlY2FzdCBpdGVtIGZvciBjdXJyZW50IGZpbmFuY2lhbCB5ZWFyXG4gICAgICBpZiAoIWRlcHJlY2lhdGlvbi5jdXJyZW50WWVhckZvcmVjYXN0KSB7XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdW0gKyBkZXByZWNpYXRpb24uY3VycmVudFllYXJGb3JlY2FzdC5jbGFpbUFtb3VudDtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZUJvcnJvd2luZ0V4cGVuc2VzKGRlcHJlY2lhdGlvbkxpc3Q6IERlcHJlY2lhdGlvbltdKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCeUlkcyhkZXByZWNpYXRpb25MaXN0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZGVwcmVjaWF0aW9uczogRGVwcmVjaWF0aW9uW10pID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVTdW1tYXJ5QW1vdW50KGRlcHJlY2lhdGlvbnMuZmlsdGVyKChkZXByZWNpYXRpb246IERlcHJlY2lhdGlvbikgPT4gZGVwcmVjaWF0aW9uLmlzQm9ycm93aW5nRXhwZW5zZSgpKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgY2FsY3VsYXRlRGVwcmVjaWF0aW9ucyhkZXByZWNpYXRpb25MaXN0OiBEZXByZWNpYXRpb25bXSk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QnlJZHMoZGVwcmVjaWF0aW9uTGlzdClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGRlcHJlY2lhdGlvbnM6IERlcHJlY2lhdGlvbltdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlU3VtbWFyeUFtb3VudChkZXByZWNpYXRpb25zLmZpbHRlcigoZGVwcmVjaWF0aW9uOiBEZXByZWNpYXRpb24pID0+ICFkZXByZWNpYXRpb24uaXNCb3Jyb3dpbmdFeHBlbnNlKCkpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBsb2FkIGRlcHJlY2lhdGlvbiByZWNlaXB0XG4gICAqIEBwYXJhbSBkZXByZWNpYXRpb24gZm9yIHdoaWNoIHdpbGwgYmUgdXBsb2FkZWQgcmVjZWlwdFxuICAgKi9cbiAgdXBsb2FkUmVjZWlwdChkZXByZWNpYXRpb246IERlcHJlY2lhdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGRlcHJlY2lhdGlvbi5maWxlKTtcbiAgICBkZXByZWNpYXRpb24ucmVjZWlwdCA9IG51bGw7XG5cbiAgICB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfS8ke2RlcHJlY2lhdGlvbi5pZH0vcmVjZWlwdHNgLCBmb3JtRGF0YSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlY2VpcHRSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8ga2VlcCBmaWxlIGFmdGVyIHNhdmVcbiAgICAgICAgZGVwcmVjaWF0aW9uLmZpbGUgPSBudWxsO1xuICAgICAgICBkZXByZWNpYXRpb24ucmVjZWlwdCA9IHBsYWluVG9DbGFzcyhEZXByZWNpYXRpb25SZWNlaXB0LCByZWNlaXB0UmVzcG9uc2UpO1xuICAgICAgICByZXBsYWNlKHRoaXMuY2FjaGUsIGRlcHJlY2lhdGlvbik7XG4gICAgICAgIHRoaXMuY2FjaGVTdWJqZWN0Lm5leHQodGhpcy5jYWNoZS5zbGljZSgpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIGV2ZW50IHJlbGF0ZWQgdG8gdXBkYXRlZCBiYW5rIGxvYW5cbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVG9VcGRhdGVkTG9hbigpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oW0FwcEV2ZW50VHlwZUVudW0uTE9BTl9VUERBVEVELCBBcHBFdmVudFR5cGVFbnVtLlBST1BFUlRZX1NIQVJFX1VQREFURURdKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5mZXRjaCgpLnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIGV2ZW50IHJlbGF0ZWQgdG8gdXBkYXRlZCBiYW5rIGFjY291bnRcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVG9VcGRhdGVkQmFua0FjY291bnQoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKFtBcHBFdmVudFR5cGVFbnVtLkJBTktfQUNDT1VOVF9VUERBVEVEXSkuc3Vic2NyaWJlKChiYW5rQWNjb3VudDogQmFua0FjY291bnQpID0+IHtcbiAgICAgIGlmIChiYW5rQWNjb3VudC5pc1Byb3BlcnR5VGFuaygpKSB7XG4gICAgICAgIHRoaXMuZmV0Y2goKS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRXZlbnREaXNwYXRjaGVyU2VydmljZSBldmVudCByZWxhdGVkIHRvIHVwZGF0ZWQgdmVoaWNsZSBjbGFpbVxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5Ub1ZlaGljbGVDbGFpbSgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oW0FwcEV2ZW50VHlwZUVudW0uVkVISUNMRV9DTEFJTV9DUkVBVEVELCBBcHBFdmVudFR5cGVFbnVtLlZFSElDTEVfQ0xBSU1fVVBEQVRFRF0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmZldGNoKCkuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,84 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { Document } from '../../../../models/document/document';
3
+ import { replace } from '../../../../functions/array';
4
+ import { map } from 'rxjs/operators';
5
+ import { plainToClass } from 'class-transformer';
6
+ import { RestService } from '../../rest/rest.service';
7
+ import { DocumentFolder } from '../../../../models/document/document-folder';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common/http";
10
+ import * as i2 from "../../../event/event-dispatcher.service";
11
+ /**
12
+ * Service to handle document-folders and depending documents logic
13
+ */
14
+ export class DocumentFolderService extends RestService {
15
+ constructor(http, eventDispatcherService, environment) {
16
+ super(http, eventDispatcherService, environment);
17
+ this.http = http;
18
+ this.eventDispatcherService = eventDispatcherService;
19
+ this.environment = environment;
20
+ this.url = 'folders';
21
+ this.modelClass = DocumentFolder;
22
+ }
23
+ /**
24
+ * Add new document to the folder
25
+ * @param file to be uploaded to the folder
26
+ * @param folder for document
27
+ */
28
+ addDocument(file, folder) {
29
+ // create formData object with provided file
30
+ const formDataDocument = new FormData();
31
+ formDataDocument.append('file', file);
32
+ return this.http.post(`${this.environment.apiV2}/folders/${folder.id}/documents`, formDataDocument).pipe(map((response) => {
33
+ const updatedFolder = Object.assign(plainToClass(DocumentFolder, {}), folder);
34
+ updatedFolder.documents.push(plainToClass(Document, response));
35
+ replace(this.cache, plainToClass(DocumentFolder, updatedFolder));
36
+ this.cacheSubject.next(this.cache);
37
+ }));
38
+ }
39
+ /**
40
+ * Edit folder document by moving it from one folder to another
41
+ * @param editedDocument
42
+ * @param selectedFolder to move the document to
43
+ * @param oldFolderId: id of old folder from which need to remove the document
44
+ */
45
+ updateDocument(editedDocument, selectedFolder, oldFolderId) {
46
+ return this.http.put(`${this.environment.apiV2}/folders/${selectedFolder.id}/documents/${editedDocument.id}`, editedDocument).pipe(map((response) => {
47
+ const oldFolder = this.cache.find((folder) => folder.id === oldFolderId);
48
+ // Remove document from old folder
49
+ oldFolder.documents = oldFolder.documents.filter((deletedDocument) => deletedDocument.id !== response.id);
50
+ // update old folder and replace it in cache
51
+ response.folder = plainToClass(DocumentFolder, { id: selectedFolder.id, name: selectedFolder.name });
52
+ replace(this.cache, plainToClass(DocumentFolder, oldFolder));
53
+ // update new document folder and replace it in cache
54
+ selectedFolder.documents.push(plainToClass(Document, response));
55
+ replace(this.cache, plainToClass(DocumentFolder, selectedFolder));
56
+ this.cacheSubject.next(this.cache);
57
+ }));
58
+ }
59
+ /**
60
+ * Delete document from folder
61
+ * @param document to remove
62
+ * @param folder from which document should be removed
63
+ */
64
+ deleteDocument(document, folder) {
65
+ return this.http.delete(`${this.environment.apiV2}/folders/${folder.id}/documents/${document.id}`).pipe(map(() => {
66
+ folder.documents = folder.documents
67
+ .filter((deletedDocument) => deletedDocument.id !== document.id);
68
+ replace(this.cache, plainToClass(DocumentFolder, folder));
69
+ this.cacheSubject.next(this.cache);
70
+ }));
71
+ }
72
+ }
73
+ DocumentFolderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DocumentFolderService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
74
+ DocumentFolderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DocumentFolderService, providedIn: 'root' });
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DocumentFolderService, decorators: [{
76
+ type: Injectable,
77
+ args: [{
78
+ providedIn: 'root'
79
+ }]
80
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
81
+ type: Inject,
82
+ args: ['environment']
83
+ }] }]; } });
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZm9sZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9kb2N1bWVudC9kb2N1bWVudC1mb2xkZXIvZG9jdW1lbnQtZm9sZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7QUFHN0U7O0dBRUc7QUFJSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsV0FBK0M7SUFJeEYsWUFDWSxJQUFnQixFQUNoQixzQkFBOEMsRUFDdkIsV0FBZ0I7UUFFakQsS0FBSyxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUp2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUFObkQsUUFBRyxHQUFXLFNBQVMsQ0FBQztRQUN4QixlQUFVLEdBQTBCLGNBQWMsQ0FBQztJQVFuRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxJQUFVLEVBQUUsTUFBc0I7UUFDNUMsNENBQTRDO1FBQzVDLE1BQU0sZ0JBQWdCLEdBQWEsSUFB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LEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUUxRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7O21IQTFFVSxxQkFBcUIsa0ZBT3RCLGFBQWE7dUhBUFoscUJBQXFCLGNBRnBCLE1BQU07NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb2N1bWVudEZvbGRlciBhcyBEb2N1bWVudEZvbGRlckJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kYi9Nb2RlbHMvZG9jdW1lbnQtZm9sZGVyJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBEb2N1bWVudCBhcyBEb2N1bWVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kYi9Nb2RlbHMvZG9jdW1lbnQnO1xuaW1wb3J0IHsgRG9jdW1lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZG9jdW1lbnQvZG9jdW1lbnQnO1xuaW1wb3J0IHsgcmVwbGFjZSB9IGZyb20gJy4uLy4uLy4uLy4uL2Z1bmN0aW9ucy9hcnJheSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3Jlc3QvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IERvY3VtZW50Rm9sZGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2RvY3VtZW50L2RvY3VtZW50LWZvbGRlcic7XG5pbXBvcnQgeyBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIGhhbmRsZSBkb2N1bWVudC1mb2xkZXJzIGFuZCBkZXBlbmRpbmcgZG9jdW1lbnRzIGxvZ2ljXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50Rm9sZGVyU2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPERvY3VtZW50Rm9sZGVyQmFzZSwgRG9jdW1lbnRGb2xkZXI+IHtcbiAgdXJsOiBzdHJpbmcgPSAnZm9sZGVycyc7XG4gIG1vZGVsQ2xhc3M6IHR5cGVvZiBEb2N1bWVudEZvbGRlciA9IERvY3VtZW50Rm9sZGVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCBldmVudERpc3BhdGNoZXJTZXJ2aWNlOiBFdmVudERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJvdGVjdGVkIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gICAgc3VwZXIoaHR0cCwgZXZlbnREaXNwYXRjaGVyU2VydmljZSwgZW52aXJvbm1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBuZXcgZG9jdW1lbnQgdG8gdGhlIGZvbGRlclxuICAgKiBAcGFyYW0gZmlsZSB0byBiZSB1cGxvYWRlZCB0byB0aGUgZm9sZGVyXG4gICAqIEBwYXJhbSBmb2xkZXIgZm9yIGRvY3VtZW50XG4gICAqL1xuICBhZGREb2N1bWVudChmaWxlOiBGaWxlLCBmb2xkZXI6IERvY3VtZW50Rm9sZGVyKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgLy8gY3JlYXRlIGZvcm1EYXRhIG9iamVjdCB3aXRoIHByb3ZpZGVkIGZpbGVcbiAgICBjb25zdCBmb3JtRGF0YURvY3VtZW50OiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhRG9jdW1lbnQuYXBwZW5kKCdmaWxlJywgZmlsZSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vZm9sZGVycy8ke2ZvbGRlci5pZH0vZG9jdW1lbnRzYCwgZm9ybURhdGFEb2N1bWVudCkucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2U6IERvY3VtZW50QmFzZSkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkRm9sZGVyOiBEb2N1bWVudEZvbGRlciA9IE9iamVjdC5hc3NpZ24ocGxhaW5Ub0NsYXNzKERvY3VtZW50Rm9sZGVyLCB7fSksIGZvbGRlcik7XG4gICAgICAgIHVwZGF0ZWRGb2xkZXIuZG9jdW1lbnRzLnB1c2gocGxhaW5Ub0NsYXNzKERvY3VtZW50LCByZXNwb25zZSkpO1xuXG4gICAgICAgIHJlcGxhY2UodGhpcy5jYWNoZSwgcGxhaW5Ub0NsYXNzKERvY3VtZW50Rm9sZGVyLCB1cGRhdGVkRm9sZGVyKSk7XG4gICAgICAgIHRoaXMuY2FjaGVTdWJqZWN0Lm5leHQodGhpcy5jYWNoZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRWRpdCBmb2xkZXIgZG9jdW1lbnQgYnkgbW92aW5nIGl0IGZyb20gb25lIGZvbGRlciB0byBhbm90aGVyXG4gICAqIEBwYXJhbSBlZGl0ZWREb2N1bWVudFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRGb2xkZXIgdG8gbW92ZSB0aGUgZG9jdW1lbnQgdG9cbiAgICogQHBhcmFtIG9sZEZvbGRlcklkOiBpZCBvZiBvbGQgZm9sZGVyIGZyb20gd2hpY2ggbmVlZCB0byByZW1vdmUgdGhlIGRvY3VtZW50XG4gICAqL1xuICB1cGRhdGVEb2N1bWVudChlZGl0ZWREb2N1bWVudDogRG9jdW1lbnQsIHNlbGVjdGVkRm9sZGVyOiBEb2N1bWVudEZvbGRlciwgb2xkRm9sZGVySWQ6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L2ZvbGRlcnMvJHtzZWxlY3RlZEZvbGRlci5pZH0vZG9jdW1lbnRzLyR7ZWRpdGVkRG9jdW1lbnQuaWR9YCwgZWRpdGVkRG9jdW1lbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlOiBEb2N1bWVudEJhc2UpID0+IHtcbiAgICAgICAgY29uc3Qgb2xkRm9sZGVyOiBEb2N1bWVudEZvbGRlciA9IHRoaXMuY2FjaGUuZmluZCgoZm9sZGVyOiBEb2N1bWVudEZvbGRlcikgPT4gZm9sZGVyLmlkID09PSBvbGRGb2xkZXJJZCk7XG4gICAgICAgIC8vIFJlbW92ZSBkb2N1bWVudCBmcm9tIG9sZCBmb2xkZXJcbiAgICAgICAgb2xkRm9sZGVyLmRvY3VtZW50cyA9IG9sZEZvbGRlci5kb2N1bWVudHMuZmlsdGVyKChkZWxldGVkRG9jdW1lbnQ6IERvY3VtZW50KSA9PiBkZWxldGVkRG9jdW1lbnQuaWQgIT09IHJlc3BvbnNlLmlkKTtcblxuICAgICAgICAvLyB1cGRhdGUgb2xkIGZvbGRlciBhbmQgcmVwbGFjZSBpdCBpbiBjYWNoZVxuICAgICAgICByZXNwb25zZS5mb2xkZXIgPSBwbGFpblRvQ2xhc3MoRG9jdW1lbnRGb2xkZXIsIHtpZDogc2VsZWN0ZWRGb2xkZXIuaWQsIG5hbWU6IHNlbGVjdGVkRm9sZGVyLm5hbWV9KTtcbiAgICAgICAgcmVwbGFjZSh0aGlzLmNhY2hlLCBwbGFpblRvQ2xhc3MoRG9jdW1lbnRGb2xkZXIsIG9sZEZvbGRlcikpO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBuZXcgZG9jdW1lbnQgZm9sZGVyIGFuZCByZXBsYWNlIGl0IGluIGNhY2hlXG4gICAgICAgIHNlbGVjdGVkRm9sZGVyLmRvY3VtZW50cy5wdXNoKHBsYWluVG9DbGFzcyhEb2N1bWVudCwgcmVzcG9uc2UpKTtcbiAgICAgICAgcmVwbGFjZSh0aGlzLmNhY2hlLCBwbGFpblRvQ2xhc3MoRG9jdW1lbnRGb2xkZXIsIHNlbGVjdGVkRm9sZGVyKSk7XG5cbiAgICAgICAgdGhpcy5jYWNoZVN1YmplY3QubmV4dCh0aGlzLmNhY2hlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgZG9jdW1lbnQgZnJvbSBmb2xkZXJcbiAgICogQHBhcmFtIGRvY3VtZW50IHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gZm9sZGVyIGZyb20gd2hpY2ggZG9jdW1lbnQgc2hvdWxkIGJlIHJlbW92ZWRcbiAgICovXG4gIGRlbGV0ZURvY3VtZW50KGRvY3VtZW50OiBEb2N1bWVudCwgZm9sZGVyOiBEb2N1bWVudEZvbGRlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L2ZvbGRlcnMvJHtmb2xkZXIuaWR9L2RvY3VtZW50cy8ke2RvY3VtZW50LmlkfWApLnBpcGUoXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICBmb2xkZXIuZG9jdW1lbnRzID0gZm9sZGVyLmRvY3VtZW50c1xuICAgICAgICAgIC5maWx0ZXIoKGRlbGV0ZWREb2N1bWVudDogRG9jdW1lbnQpID0+IGRlbGV0ZWREb2N1bWVudC5pZCAhPT0gZG9jdW1lbnQuaWQpO1xuICAgICAgICByZXBsYWNlKHRoaXMuY2FjaGUsIHBsYWluVG9DbGFzcyhEb2N1bWVudEZvbGRlciwgZm9sZGVyKSk7XG5cbiAgICAgICAgdGhpcy5jYWNoZVN1YmplY3QubmV4dCh0aGlzLmNhY2hlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,14 +1,14 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { map } from 'rxjs/operators';
3
- import { replace } from '../../functions/array';
3
+ import { replace } from '../../../../functions/array';
4
4
  import _ from 'lodash';
5
5
  import { plainToClass } from 'class-transformer';
6
- import { BaseRestService } from '../base-rest.service';
7
- import { ClientInvite } from '../../models/client/client-invite';
8
- import { AppEventTypeEnum } from '../../models/event/app-event-type.enum';
9
- import { AppEvent } from '../../models/event/app-event';
6
+ import { RestService } from '../../rest/rest.service';
7
+ import { ClientInvite } from '../../../../models/client/client-invite';
8
+ import { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';
9
+ import { AppEvent } from '../../../../models/event/app-event';
10
10
  import * as i0 from "@angular/core";
11
- export class ClientInviteService extends BaseRestService {
11
+ export class ClientInviteService extends RestService {
12
12
  constructor() {
13
13
  super(...arguments);
14
14
  this.url = 'clients/invites';
@@ -99,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
99
99
  providedIn: 'root'
100
100
  }]
101
101
  }] });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LWludml0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2NsaWVudC9jbGllbnQtaW52aXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBS3hELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxlQUErQztJQUh4Rjs7UUFJRSxRQUFHLEdBQVcsaUJBQWlCLENBQUM7UUFDaEMsZUFBVSxHQUF3QixZQUFZLENBQUM7S0E2RmhEO0lBM0ZDOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxJQUFVO1FBQ2YsTUFBTSxRQUFRLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUMxQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU5QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxFQUFFLFFBQVEsQ0FBQzthQUM1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QVcsQ0FBQyxLQUFLLGVBQWUsRUFBRSxNQUFNLENBQUM7YUFDcEUsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFVBQTRCLEVBQWdCLEVBQUU7WUFDakQsTUFBTSxTQUFTLEdBQWlCLFlBQVksQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDdkUsc0JBQXNCO1lBQ3RCLDRCQUE0QjtZQUM1QixNQUFNLFNBQVMsR0FBbUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUQsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7O2lIQTlGVSxtQkFBbUI7cUhBQW5CLG1CQUFtQixjQUZsQixNQUFNOzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDbGllbnRJbnZpdGUgYXMgQ2xpZW50SW52aXRlQmFzZSB9IGZyb20gJy4uLy4uL2RiL01vZGVscy9jbGllbnQtaW52aXRlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHJlcGxhY2UgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvYXJyYXknO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IEJhc2VSZXN0U2VydmljZSB9IGZyb20gJy4uL2Jhc2UtcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENsaWVudEludml0ZSB9IGZyb20gJy4uLy4uL21vZGVscy9jbGllbnQvY2xpZW50LWludml0ZSc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgQXBwRXZlbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2xpZW50SW52aXRlU2VydmljZSBleHRlbmRzIEJhc2VSZXN0U2VydmljZTxDbGllbnRJbnZpdGVCYXNlLCBDbGllbnRJbnZpdGU+IHtcbiAgdXJsOiBzdHJpbmcgPSAnY2xpZW50cy9pbnZpdGVzJztcbiAgbW9kZWxDbGFzczogdHlwZW9mIENsaWVudEludml0ZSA9IENsaWVudEludml0ZTtcblxuICAvKipcbiAgICogSW1wb3J0IGVtcGxveWVlcyBmb3IgZmlybSBmcm9tIENTViBmaWxlXG4gICAqIEBwYXJhbSBmaWxlXG4gICAqL1xuICBpbXBvcnQoZmlsZTogRmlsZSk6IE9ic2VydmFibGU8Q2xpZW50SW52aXRlW10+IHtcbiAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfS9pbXBvcnRgLCBmb3JtRGF0YSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGNsaWVudEludml0ZTogQ2xpZW50SW52aXRlW10pID0+IHtcbiAgICAgICAgICByZXR1cm4gY2xpZW50SW52aXRlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHQgY2xpZW50IGludml0YXRpb24gZnJvbSBmaXJtIHRvIHVzZXJcbiAgICogQHBhcmFtIGludml0ZVxuICAgKi9cbiAgYWNjZXB0KGludml0ZTogQ2xpZW50SW52aXRlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH0vJHtpbnZpdGUuaWR9L2FjY2VwdGAsIG51bGwpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uQ0xJRU5UX0lOVklURV9BQ0NFUFRFRCwgaW52aXRlKSk7XG4gICAgICAgICAgLy8gc2V0IGNhY2hlIHdpdGhvdXQgYWNjZXB0ZWQgaW52aXRlXG4gICAgICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuZmlsdGVyKChjbGllbnRJbnZpdGU6IENsaWVudEludml0ZSkgPT4gaW52aXRlLmlkICE9PSBjbGllbnRJbnZpdGUuaWQpO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVqZWN0IGNsaWVudCBpbnZpdGF0aW9uIGZyb20gZmlybSB0byB1c2VyXG4gICAqIEBwYXJhbSBpbnZpdGVcbiAgICovXG4gIHJlamVjdChpbnZpdGU6IENsaWVudEludml0ZSk6IE9ic2VydmFibGU8Q2xpZW50SW52aXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9LyR7aW52aXRlLmlkfS9yZWplY3RgLCBudWxsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVqZWN0ZWRJbnZpdGU6IENsaWVudEludml0ZUJhc2UpOiBDbGllbnRJbnZpdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJbnZpdGU6IENsaWVudEludml0ZSA9IHBsYWluVG9DbGFzcyhDbGllbnRJbnZpdGUsIHJlamVjdGVkSW52aXRlKTtcbiAgICAgICAgICAvLyBhdm9pZCBjYWNoZSBjaGFuZ2VzXG4gICAgICAgICAgLy8gQFRPRE8gbWFrZSBjYWNoZSByZWFkb25seVxuICAgICAgICAgIGNvbnN0IHRlbXBDYWNoZTogQ2xpZW50SW52aXRlW10gPSBfLmNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgICAgICByZXBsYWNlKHRlbXBDYWNoZSwgcGxhaW5Ub0NsYXNzKENsaWVudEludml0ZSwgdXBkYXRlZEludml0ZSkpO1xuICAgICAgICAgIHRoaXMuY2FjaGUgPSB0ZW1wQ2FjaGU7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkSW52aXRlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNlbmQgaW52aXRhdGlvbiBmcm9tIGZpcm0gdG8gY2xpZW50XG4gICAqIEBwYXJhbSBpbnZpdGVcbiAgICovXG4gIHJlc2VuZChpbnZpdGU6IENsaWVudEludml0ZSk6IE9ic2VydmFibGU8Q2xpZW50SW52aXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9LyR7aW52aXRlLmlkfS9yZXNlbmRgLCBudWxsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVqZWN0ZWRJbnZpdGU6IENsaWVudEludml0ZUJhc2UpOiBDbGllbnRJbnZpdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJbnZpdGU6IENsaWVudEludml0ZSA9IHBsYWluVG9DbGFzcyhDbGllbnRJbnZpdGUsIHJlamVjdGVkSW52aXRlKTtcbiAgICAgICAgICAvLyBhdm9pZCBjYWNoZSBjaGFuZ2VzXG4gICAgICAgICAgLy8gQFRPRE8gbWFrZSBjYWNoZSByZWFkb25seVxuICAgICAgICAgIGNvbnN0IHRlbXBDYWNoZTogQ2xpZW50SW52aXRlW10gPSBfLmNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgICAgICByZXBsYWNlKHRlbXBDYWNoZSwgcGxhaW5Ub0NsYXNzKENsaWVudEludml0ZSwgdXBkYXRlZEludml0ZSkpO1xuICAgICAgICAgIHRoaXMuY2FjaGUgPSB0ZW1wQ2FjaGU7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkSW52aXRlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGludml0YXRpb24gZnJvbSBjbGllbnQgdG8gZmlybVxuICAgKiBAcGFyYW0gaW52aXRlXG4gICAqL1xuICBpbnZpdGVGaXJtQnlVc2VyKGludml0ZTogQ2xpZW50SW52aXRlKTogT2JzZXJ2YWJsZTxDbGllbnRJbnZpdGU+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vZmlybXMvaW52aXRlYCwgaW52aXRlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoaW52aXRlQmFzZTogQ2xpZW50SW52aXRlQmFzZSk6IENsaWVudEludml0ZSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3SW52aXRlOiBDbGllbnRJbnZpdGUgPSBwbGFpblRvQ2xhc3MoQ2xpZW50SW52aXRlLCBpbnZpdGVCYXNlKTtcbiAgICAgICAgICAvLyBhdm9pZCBjYWNoZSBjaGFuZ2VzXG4gICAgICAgICAgLy8gQFRPRE8gbWFrZSBjYWNoZSByZWFkb25seVxuICAgICAgICAgIGNvbnN0IHRlbXBDYWNoZTogQ2xpZW50SW52aXRlW10gPSBfLmNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgICAgICB0ZW1wQ2FjaGUucHVzaChuZXdJbnZpdGUpO1xuICAgICAgICAgIHRoaXMuY2FjaGUgPSB0ZW1wQ2FjaGU7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIHJldHVybiBuZXdJbnZpdGU7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LWludml0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvZmlybS9jbGllbnQtaW52aXRlL2NsaWVudC1pbnZpdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEQsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFLOUQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQTJDO0lBSHBGOztRQUlFLFFBQUcsR0FBVyxpQkFBaUIsQ0FBQztRQUNoQyxlQUFVLEdBQXdCLFlBQVksQ0FBQztLQTZGaEQ7SUEzRkM7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLElBQVU7UUFDZixNQUFNLFFBQVEsR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTlCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxT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LENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssZUFBZSxFQUFFLE1BQU0sQ0FBQzthQUNwRSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsVUFBNEIsRUFBZ0IsRUFBRTtZQUNqRCxNQUFNLFNBQVMsR0FBaUIsWUFBWSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN2RSxzQkFBc0I7WUFDdEIsNEJBQTRCO1lBQzVCLE1BQU0sU0FBUyxHQUFtQixDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzs7aUhBOUZVLG1CQUFtQjtxSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENsaWVudEludml0ZSBhcyBDbGllbnRJbnZpdGVCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGIvTW9kZWxzL2NsaWVudC1pbnZpdGUnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgcmVwbGFjZSB9IGZyb20gJy4uLy4uLy4uLy4uL2Z1bmN0aW9ucy9hcnJheSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBDbGllbnRJbnZpdGUgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvY2xpZW50L2NsaWVudC1pbnZpdGUnO1xuaW1wb3J0IHsgQXBwRXZlbnRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ldmVudC9hcHAtZXZlbnQtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFwcEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENsaWVudEludml0ZVNlcnZpY2UgZXh0ZW5kcyBSZXN0U2VydmljZTxDbGllbnRJbnZpdGVCYXNlLCBDbGllbnRJbnZpdGU+IHtcbiAgdXJsOiBzdHJpbmcgPSAnY2xpZW50cy9pbnZpdGVzJztcbiAgbW9kZWxDbGFzczogdHlwZW9mIENsaWVudEludml0ZSA9IENsaWVudEludml0ZTtcblxuICAvKipcbiAgICogSW1wb3J0IGVtcGxveWVlcyBmb3IgZmlybSBmcm9tIENTViBmaWxlXG4gICAqIEBwYXJhbSBmaWxlXG4gICAqL1xuICBpbXBvcnQoZmlsZTogRmlsZSk6IE9ic2VydmFibGU8Q2xpZW50SW52aXRlW10+IHtcbiAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfS9pbXBvcnRgLCBmb3JtRGF0YSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGNsaWVudEludml0ZTogQ2xpZW50SW52aXRlW10pID0+IHtcbiAgICAgICAgICByZXR1cm4gY2xpZW50SW52aXRlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHQgY2xpZW50IGludml0YXRpb24gZnJvbSBmaXJtIHRvIHVzZXJcbiAgICogQHBhcmFtIGludml0ZVxuICAgKi9cbiAgYWNjZXB0KGludml0ZTogQ2xpZW50SW52aXRlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH0vJHtpbnZpdGUuaWR9L2FjY2VwdGAsIG51bGwpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uQ0xJRU5UX0lOVklURV9BQ0NFUFRFRCwgaW52aXRlKSk7XG4gICAgICAgICAgLy8gc2V0IGNhY2hlIHdpdGhvdXQgYWNjZXB0ZWQgaW52aXRlXG4gICAgICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuZmlsdGVyKChjbGllbnRJbnZpdGU6IENsaWVudEludml0ZSkgPT4gaW52aXRlLmlkICE9PSBjbGllbnRJbnZpdGUuaWQpO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVqZWN0IGNsaWVudCBpbnZpdGF0aW9uIGZyb20gZmlybSB0byB1c2VyXG4gICAqIEBwYXJhbSBpbnZpdGVcbiAgICovXG4gIHJlamVjdChpbnZpdGU6IENsaWVudEludml0ZSk6IE9ic2VydmFibGU8Q2xpZW50SW52aXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9LyR7aW52aXRlLmlkfS9yZWplY3RgLCBudWxsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVqZWN0ZWRJbnZpdGU6IENsaWVudEludml0ZUJhc2UpOiBDbGllbnRJbnZpdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJbnZpdGU6IENsaWVudEludml0ZSA9IHBsYWluVG9DbGFzcyhDbGllbnRJbnZpdGUsIHJlamVjdGVkSW52aXRlKTtcbiAgICAgICAgICAvLyBhdm9pZCBjYWNoZSBjaGFuZ2VzXG4gICAgICAgICAgLy8gQFRPRE8gbWFrZSBjYWNoZSByZWFkb25seVxuICAgICAgICAgIGNvbnN0IHRlbXBDYWNoZTogQ2xpZW50SW52aXRlW10gPSBfLmNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgICAgICByZXBsYWNlKHRlbXBDYWNoZSwgcGxhaW5Ub0NsYXNzKENsaWVudEludml0ZSwgdXBkYXRlZEludml0ZSkpO1xuICAgICAgICAgIHRoaXMuY2FjaGUgPSB0ZW1wQ2FjaGU7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkSW52aXRlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNlbmQgaW52aXRhdGlvbiBmcm9tIGZpcm0gdG8gY2xpZW50XG4gICAqIEBwYXJhbSBpbnZpdGVcbiAgICovXG4gIHJlc2VuZChpbnZpdGU6IENsaWVudEludml0ZSk6IE9ic2VydmFibGU8Q2xpZW50SW52aXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9LyR7aW52aXRlLmlkfS9yZXNlbmRgLCBudWxsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVqZWN0ZWRJbnZpdGU6IENsaWVudEludml0ZUJhc2UpOiBDbGllbnRJbnZpdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJbnZpdGU6IENsaWVudEludml0ZSA9IHBsYWluVG9DbGFzcyhDbGllbnRJbnZpdGUsIHJlamVjdGVkSW52aXRlKTtcbiAgICAgICAgICAvLyBhdm9pZCBjYWNoZSBjaGFuZ2VzXG4gICAgICAgICAgLy8gQFRPRE8gbWFrZSBjYWNoZSByZWFkb25seVxuICAgICAgICAgIGNvbnN0IHRlbXBDYWNoZTogQ2xpZW50SW52aXRlW10gPSBfLmNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgICAgICByZXBsYWNlKHRlbXBDYWNoZSwgcGxhaW5Ub0NsYXNzKENsaWVudEludml0ZSwgdXBkYXRlZEludml0ZSkpO1xuICAgICAgICAgIHRoaXMuY2FjaGUgPSB0ZW1wQ2FjaGU7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkSW52aXRlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGludml0YXRpb24gZnJvbSBjbGllbnQgdG8gZmlybVxuICAgKiBAcGFyYW0gaW52aXRlXG4gICAqL1xuICBpbnZpdGVGaXJtQnlVc2VyKGludml0ZTogQ2xpZW50SW52aXRlKTogT2JzZXJ2YWJsZTxDbGllbnRJbnZpdGU+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vZmlybXMvaW52aXRlYCwgaW52aXRlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoaW52aXRlQmFzZTogQ2xpZW50SW52aXRlQmFzZSk6IENsaWVudEludml0ZSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3SW52aXRlOiBDbGllbnRJbnZpdGUgPSBwbGFpblRvQ2xhc3MoQ2xpZW50SW52aXRlLCBpbnZpdGVCYXNlKTtcbiAgICAgICAgICAvLyBhdm9pZCBjYWNoZSBjaGFuZ2VzXG4gICAgICAgICAgLy8gQFRPRE8gbWFrZSBjYWNoZSByZWFkb25seVxuICAgICAgICAgIGNvbnN0IHRlbXBDYWNoZTogQ2xpZW50SW52aXRlW10gPSBfLmNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgICAgICB0ZW1wQ2FjaGUucHVzaChuZXdJbnZpdGUpO1xuICAgICAgICAgIHRoaXMuY2FjaGUgPSB0ZW1wQ2FjaGU7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIHJldHVybiBuZXdJbnZpdGU7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,98 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { forkJoin } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import { ClientMovementCollection } from '../../../../collections/client-movement.collection';
5
+ import { plainToClass } from 'class-transformer';
6
+ import { RestService } from '../../rest/rest.service';
7
+ import { ClientMovement } from '../../../../models/client/client-movement';
8
+ import { AppEvent } from '../../../../models/event/app-event';
9
+ import { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/common/http";
12
+ import * as i2 from "../../../event/event-dispatcher.service";
13
+ export class ClientMovementService extends RestService {
14
+ constructor(http, eventDispatcherService, environment) {
15
+ super(http, eventDispatcherService, environment);
16
+ this.http = http;
17
+ this.eventDispatcherService = eventDispatcherService;
18
+ this.environment = environment;
19
+ this.modelClass = ClientMovement;
20
+ this.url = 'client-movements';
21
+ this.isHydra = true;
22
+ this.listenEvents();
23
+ }
24
+ /**
25
+ * @TODO BaseRestService should return collection
26
+ */
27
+ getAll() {
28
+ return this.get().pipe(map((clientMovements) => {
29
+ return new ClientMovementCollection(clientMovements);
30
+ }));
31
+ }
32
+ getActive() {
33
+ return this.getAll().pipe(map((clientMovements) => {
34
+ return clientMovements.active;
35
+ }));
36
+ }
37
+ getActiveByFirmType(type) {
38
+ return this.getActive().pipe(map((clientMovements) => {
39
+ return clientMovements.getByFirmType(type);
40
+ }));
41
+ }
42
+ update(movement) {
43
+ // extend base 'add' method and pass into it movement without id
44
+ return super.add(plainToClass(ClientMovement, Object.assign({}, movement, { id: null }))).pipe(map((updatedMovement) => {
45
+ // remove provided movement from cache
46
+ this.cache = this.cache.filter((item) => item.id !== movement.id);
47
+ this.updateCache();
48
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.CLIENT_TRANSFER_TO_OTHER_EMPLOYEE, [updatedMovement.client]));
49
+ return updatedMovement;
50
+ }));
51
+ }
52
+ updateBatch(clientMovements) {
53
+ const batch = clientMovements.map((clientMovement) => this.update(clientMovement));
54
+ return forkJoin(batch);
55
+ }
56
+ /**
57
+ * Reject current firm
58
+ */
59
+ close(clientMovement) {
60
+ clientMovement.dateTo = new Date();
61
+ return this.http.put(`${this.environment.apiV2}/client-movements/${clientMovement.id}/close`, clientMovement)
62
+ .pipe(map(() => {
63
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.CLIENT_MOVEMENT_CLOSED, null));
64
+ this.cache = this.cache.filter((movement) => movement.id !== clientMovement.id);
65
+ this.updateCache();
66
+ }));
67
+ }
68
+ /**
69
+ * Listen Event Dispatcher service
70
+ */
71
+ listenEvents() {
72
+ this.listenClientInvites();
73
+ }
74
+ /**
75
+ * Listen to EventDispatcherService event related to clients invitations
76
+ */
77
+ listenClientInvites() {
78
+ this.eventDispatcherService.on(AppEventTypeEnum.CLIENT_INVITE_ACCEPTED)
79
+ .subscribe(() => {
80
+ this.fetch().subscribe((clientMovements) => {
81
+ this.cache = clientMovements;
82
+ this.updateCache();
83
+ });
84
+ });
85
+ }
86
+ }
87
+ ClientMovementService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ClientMovementService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
88
+ ClientMovementService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ClientMovementService, providedIn: 'root' });
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ClientMovementService, decorators: [{
90
+ type: Injectable,
91
+ args: [{
92
+ providedIn: 'root'
93
+ }]
94
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
95
+ type: Inject,
96
+ args: ['environment']
97
+ }] }]; } });
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LW1vdmVtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9maXJtL2NsaWVudC1tb3ZlbWVudC9jbGllbnQtbW92ZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUc5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7QUFNaEYsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFdBQStDO0lBS3hGLFlBQ1ksSUFBZ0IsRUFDaEIsc0JBQThDLEVBQ3ZCLFdBQWdCO1FBRWpELEtBQUssQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFKdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBUG5ELGVBQVUsR0FBMEIsY0FBYyxDQUFDO1FBQ25ELFFBQUcsR0FBVyxrQkFBa0IsQ0FBQztRQUNqQyxZQUFPLEdBQVksSUFBSSxDQUFDO1FBUXRCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUNwQixHQUFHLENBQUMsQ0FBQyxlQUFpQyxFQUFFLEVBQUU7WUFDeEMsT0FBTyxJQUFJLHdCQUF3QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FDdkIsR0FBRyxDQUFDLENBQUMsZUFBeUMsRUFBNEIsRUFBRTtZQUMxRSxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFrQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQzFCLEdBQUcsQ0FBQyxDQUFDLGVBQXlDLEVBQTRCLEVBQUU7WUFDMUUsT0FBTyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQXdCO1FBQzdCLGdFQUFnRTtRQUNoRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBQyxFQUFFLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxRixHQUFHLENBQUMsQ0FBQyxlQUErQixFQUFFLEVBQUU7WUFDdEMsc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFvQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFbkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFakksT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsZUFBaUM7UUFDM0MsTUFBTSxLQUFLLEdBQWlDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUE4QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDakksT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGNBQThCO1FBQ2xDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLHFCQUFxQixjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDO2FBQzFHLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBUyxFQUFFO1lBQ2IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUF3QixFQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVk7UUFDVixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQzthQUNwRSxTQUFTLENBQUMsR0FBUyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxlQUFpQyxFQUFFLEVBQUU7Z0JBQzNELElBQUksQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO2dCQUM3QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O21IQTlGVSxxQkFBcUIsa0ZBUXRCLGFBQWE7dUhBUloscUJBQXFCLGNBRnBCLE1BQU07NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBU0ksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDbGllbnRNb3ZlbWVudCBhcyBDbGllbnRNb3ZlbWVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kYi9Nb2RlbHMvY2xpZW50LW1vdmVtZW50JztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDbGllbnRNb3ZlbWVudENvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9jb2xsZWN0aW9ucy9jbGllbnQtbW92ZW1lbnQuY29sbGVjdGlvbic7XG5pbXBvcnQgeyBGaXJtVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9kYi9FbnVtcy9maXJtLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBDbGllbnRNb3ZlbWVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9jbGllbnQvY2xpZW50LW1vdmVtZW50JztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9ldmVudC9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwRXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcbmltcG9ydCB7IEFwcEV2ZW50VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50LXR5cGUuZW51bSc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2xpZW50TW92ZW1lbnRTZXJ2aWNlIGV4dGVuZHMgUmVzdFNlcnZpY2U8Q2xpZW50TW92ZW1lbnRCYXNlLCBDbGllbnRNb3ZlbWVudD4ge1xuICBtb2RlbENsYXNzOiB0eXBlb2YgQ2xpZW50TW92ZW1lbnQgPSBDbGllbnRNb3ZlbWVudDtcbiAgdXJsOiBzdHJpbmcgPSAnY2xpZW50LW1vdmVtZW50cyc7XG4gIGlzSHlkcmE6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCBldmVudERpc3BhdGNoZXJTZXJ2aWNlOiBFdmVudERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJvdGVjdGVkIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gICAgc3VwZXIoaHR0cCwgZXZlbnREaXNwYXRjaGVyU2VydmljZSwgZW52aXJvbm1lbnQpO1xuICAgIHRoaXMubGlzdGVuRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQFRPRE8gQmFzZVJlc3RTZXJ2aWNlIHNob3VsZCByZXR1cm4gY29sbGVjdGlvblxuICAgKi9cbiAgZ2V0QWxsKCk6IE9ic2VydmFibGU8Q2xpZW50TW92ZW1lbnRDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCkucGlwZShcbiAgICAgIG1hcCgoY2xpZW50TW92ZW1lbnRzOiBDbGllbnRNb3ZlbWVudFtdKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgQ2xpZW50TW92ZW1lbnRDb2xsZWN0aW9uKGNsaWVudE1vdmVtZW50cyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBY3RpdmUoKTogT2JzZXJ2YWJsZTxDbGllbnRNb3ZlbWVudENvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGwoKS5waXBlKFxuICAgICAgbWFwKChjbGllbnRNb3ZlbWVudHM6IENsaWVudE1vdmVtZW50Q29sbGVjdGlvbik6IENsaWVudE1vdmVtZW50Q29sbGVjdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiBjbGllbnRNb3ZlbWVudHMuYWN0aXZlO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QWN0aXZlQnlGaXJtVHlwZSh0eXBlOiBGaXJtVHlwZUVudW0pOiBPYnNlcnZhYmxlPENsaWVudE1vdmVtZW50Q29sbGVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZSgpLnBpcGUoXG4gICAgICBtYXAoKGNsaWVudE1vdmVtZW50czogQ2xpZW50TW92ZW1lbnRDb2xsZWN0aW9uKTogQ2xpZW50TW92ZW1lbnRDb2xsZWN0aW9uID0+IHtcbiAgICAgICAgcmV0dXJuIGNsaWVudE1vdmVtZW50cy5nZXRCeUZpcm1UeXBlKHR5cGUpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlKG1vdmVtZW50OiBDbGllbnRNb3ZlbWVudCk6IE9ic2VydmFibGU8Q2xpZW50TW92ZW1lbnQ+IHtcbiAgICAvLyBleHRlbmQgYmFzZSAnYWRkJyBtZXRob2QgYW5kIHBhc3MgaW50byBpdCBtb3ZlbWVudCB3aXRob3V0IGlkXG4gICAgcmV0dXJuIHN1cGVyLmFkZChwbGFpblRvQ2xhc3MoQ2xpZW50TW92ZW1lbnQsIE9iamVjdC5hc3NpZ24oe30sIG1vdmVtZW50LCB7aWQ6IG51bGx9KSkpLnBpcGUoXG4gICAgICBtYXAoKHVwZGF0ZWRNb3ZlbWVudDogQ2xpZW50TW92ZW1lbnQpID0+IHtcbiAgICAgICAgLy8gcmVtb3ZlIHByb3ZpZGVkIG1vdmVtZW50IGZyb20gY2FjaGVcbiAgICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuZmlsdGVyKChpdGVtOiBDbGllbnRNb3ZlbWVudCkgPT4gaXRlbS5pZCAhPT0gbW92ZW1lbnQuaWQpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG5cbiAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLkNMSUVOVF9UUkFOU0ZFUl9UT19PVEhFUl9FTVBMT1lFRSwgW3VwZGF0ZWRNb3ZlbWVudC5jbGllbnRdKSk7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRNb3ZlbWVudDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUJhdGNoKGNsaWVudE1vdmVtZW50czogQ2xpZW50TW92ZW1lbnRbXSk6IE9ic2VydmFibGU8Q2xpZW50TW92ZW1lbnRbXT4ge1xuICAgIGNvbnN0IGJhdGNoOiBPYnNlcnZhYmxlPENsaWVudE1vdmVtZW50PltdID0gY2xpZW50TW92ZW1lbnRzLm1hcCgoY2xpZW50TW92ZW1lbnQ6IENsaWVudE1vdmVtZW50KSA9PiB0aGlzLnVwZGF0ZShjbGllbnRNb3ZlbWVudCkpO1xuICAgIHJldHVybiBmb3JrSm9pbihiYXRjaCk7XG4gIH1cblxuICAvKipcbiAgICogUmVqZWN0IGN1cnJlbnQgZmlybVxuICAgKi9cbiAgY2xvc2UoY2xpZW50TW92ZW1lbnQ6IENsaWVudE1vdmVtZW50KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY2xpZW50TW92ZW1lbnQuZGF0ZVRvID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS9jbGllbnQtbW92ZW1lbnRzLyR7Y2xpZW50TW92ZW1lbnQuaWR9L2Nsb3NlYCwgY2xpZW50TW92ZW1lbnQpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uQ0xJRU5UX01PVkVNRU5UX0NMT1NFRCwgbnVsbCkpO1xuICAgICAgICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlLmZpbHRlcigobW92ZW1lbnQ6IENsaWVudE1vdmVtZW50KTogYm9vbGVhbiA9PiBtb3ZlbWVudC5pZCAhPT0gY2xpZW50TW92ZW1lbnQuaWQpO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIEV2ZW50IERpc3BhdGNoZXIgc2VydmljZVxuICAgKi9cbiAgbGlzdGVuRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdGVuQ2xpZW50SW52aXRlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIGV2ZW50IHJlbGF0ZWQgdG8gY2xpZW50cyBpbnZpdGF0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5DbGllbnRJbnZpdGVzKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLkNMSUVOVF9JTlZJVEVfQUNDRVBURUQpXG4gICAgICAuc3Vic2NyaWJlKCgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5mZXRjaCgpLnN1YnNjcmliZSgoY2xpZW50TW92ZW1lbnRzOiBDbGllbnRNb3ZlbWVudFtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYWNoZSA9IGNsaWVudE1vdmVtZW50cztcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,39 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { RestService } from '../../rest/rest.service';
3
+ import { map } from 'rxjs/operators';
4
+ import { replace } from '../../../../functions/array';
5
+ import _ from 'lodash';
6
+ import { plainToClass } from 'class-transformer';
7
+ import { User } from '../../../../models/user/user';
8
+ import * as i0 from "@angular/core";
9
+ export class EmployeeService extends RestService {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.url = 'employees';
13
+ this.modelClass = User;
14
+ }
15
+ /**
16
+ * Grant/Remove Manager role to employee
17
+ * @param employee
18
+ */
19
+ toggleManagerRole(employee) {
20
+ return this.http.put(`${this.environment.apiV2}/${this.url}/${employee.id}`, {})
21
+ .pipe(map((updatedEmployeeBase) => {
22
+ const tempCache = this.cache;
23
+ const updatedEmployee = plainToClass(User, updatedEmployeeBase);
24
+ replace(tempCache, updatedEmployee);
25
+ this.cache = _.cloneDeep(tempCache);
26
+ this.updateCache();
27
+ return updatedEmployee;
28
+ }));
29
+ }
30
+ }
31
+ EmployeeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EmployeeService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
32
+ EmployeeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EmployeeService, providedIn: 'root' });
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EmployeeService, decorators: [{
34
+ type: Injectable,
35
+ args: [{
36
+ providedIn: 'root'
37
+ }]
38
+ }] });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wbG95ZWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL2Zpcm0vZW1wbG95ZWUvZW1wbG95ZWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQUtwRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxXQUEyQjtJQUhoRTs7UUFJRSxRQUFHLEdBQVcsV0FBVyxDQUFDO1FBQzFCLGVBQVUsR0FBZ0IsSUFBSSxDQUFDO0tBbUJoQztJQWpCQzs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxRQUFjO1FBQzlCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDN0UsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLG1CQUE2QixFQUFRLEVBQUU7WUFDMUMsTUFBTSxTQUFTLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNyQyxNQUFNLGVBQWUsR0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDdEUsT0FBTyxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDOzs2R0FwQlUsZUFBZTtpSEFBZixlQUFlLGNBRmQsTUFBTTs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcmVzdC9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlciBhcyBVc2VyQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL2RiL01vZGVscy91c2VyJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHJlcGxhY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9mdW5jdGlvbnMvYXJyYXknO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvdXNlci91c2VyJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRW1wbG95ZWVTZXJ2aWNlIGV4dGVuZHMgUmVzdFNlcnZpY2U8VXNlckJhc2UsIFVzZXI+e1xuICB1cmw6IHN0cmluZyA9ICdlbXBsb3llZXMnO1xuICBtb2RlbENsYXNzOiB0eXBlb2YgVXNlciA9IFVzZXI7XG5cbiAgLyoqXG4gICAqIEdyYW50L1JlbW92ZSBNYW5hZ2VyIHJvbGUgdG8gZW1wbG95ZWVcbiAgICogQHBhcmFtIGVtcGxveWVlXG4gICAqL1xuICB0b2dnbGVNYW5hZ2VyUm9sZShlbXBsb3llZTogVXNlcik6IE9ic2VydmFibGU8VXNlcj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9LyR7ZW1wbG95ZWUuaWR9YCwge30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh1cGRhdGVkRW1wbG95ZWVCYXNlOiBVc2VyQmFzZSk6IFVzZXIgPT4ge1xuICAgICAgICAgIGNvbnN0IHRlbXBDYWNoZTogVXNlcltdID0gdGhpcy5jYWNoZTtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkRW1wbG95ZWU6IFVzZXIgPSBwbGFpblRvQ2xhc3MoVXNlciwgdXBkYXRlZEVtcGxveWVlQmFzZSk7XG4gICAgICAgICAgcmVwbGFjZSh0ZW1wQ2FjaGUsIHVwZGF0ZWRFbXBsb3llZSk7XG4gICAgICAgICAgdGhpcy5jYWNoZSA9IF8uY2xvbmVEZWVwKHRlbXBDYWNoZSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkRW1wbG95ZWU7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,53 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { map } from 'rxjs/operators';
3
+ import { replace } from '../../../../functions/array';
4
+ import _ from 'lodash';
5
+ import { plainToClass } from 'class-transformer';
6
+ import { EmployeeInvite } from '../../../../models/employee/employee-invite';
7
+ import { RestService } from '../../rest/rest.service';
8
+ import * as i0 from "@angular/core";
9
+ export class EmployeeInviteService extends RestService {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.url = 'employees/invites';
13
+ this.modelClass = EmployeeInvite;
14
+ }
15
+ /**
16
+ * Import employees for firm from CSV file
17
+ * @param file
18
+ */
19
+ import(file) {
20
+ const formData = new FormData();
21
+ formData.append('file', file);
22
+ return this.http.post(`${this.environment.apiV2}/${this.url}/import`, formData)
23
+ .pipe(map((employeeInvite) => {
24
+ return employeeInvite;
25
+ }));
26
+ }
27
+ /**
28
+ * Resend invitation from firm to client
29
+ * @param invite
30
+ */
31
+ resend(invite) {
32
+ return this.http.post(`${this.environment.apiV2}/${this.url}/${invite.id}/resend`, null)
33
+ .pipe(map((resentInviteBase) => {
34
+ const updatedInvite = plainToClass(EmployeeInvite, resentInviteBase);
35
+ // avoid cache changes
36
+ // @TODO make cache readonly
37
+ const tempCache = _.cloneDeep(this.cache);
38
+ replace(tempCache, plainToClass(EmployeeInvite, updatedInvite));
39
+ this.cache = tempCache;
40
+ this.updateCache();
41
+ return updatedInvite;
42
+ }));
43
+ }
44
+ }
45
+ EmployeeInviteService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EmployeeInviteService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
46
+ EmployeeInviteService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EmployeeInviteService, providedIn: 'root' });
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EmployeeInviteService, decorators: [{
48
+ type: Injectable,
49
+ args: [{
50
+ providedIn: 'root'
51
+ }]
52
+ }] });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wbG95ZWUtaW52aXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9maXJtL2VtcGxveWVlLWludml0ZS9lbXBsb3llZS1pbnZpdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEQsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUt0RCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsV0FBK0M7SUFIMUY7O1FBSUUsUUFBRyxHQUFXLG1CQUFtQixDQUFDO1FBQ2xDLGVBQVUsR0FBMEIsY0FBYyxDQUFDO0tBcUNwRDtJQW5DQzs7O09BR0c7SUFDSCxNQUFNLENBQUMsSUFBVTtRQUNmLE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUM7YUFDNUUsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGNBQWdDLEVBQUUsRUFBRTtZQUN2QyxPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxNQUFzQjtRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO2FBQ3JGLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxnQkFBb0MsRUFBa0IsRUFBRTtZQUMzRCxNQUFNLGFBQWEsR0FBbUIsWUFBWSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JGLHNCQUFzQjtZQUN0Qiw0QkFBNEI7WUFDNUIsTUFBTSxTQUFTLEdBQXFCLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELE9BQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzs7bUhBdENVLHFCQUFxQjt1SEFBckIscUJBQXFCLGNBRnBCLE1BQU07NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVtcGxveWVlSW52aXRlIGFzIEVtcGxveWVlSW52aXRlQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL2RiL01vZGVscy9lbXBsb3llZS1pbnZpdGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgcmVwbGFjZSB9IGZyb20gJy4uLy4uLy4uLy4uL2Z1bmN0aW9ucy9hcnJheSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgRW1wbG95ZWVJbnZpdGUgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZW1wbG95ZWUvZW1wbG95ZWUtaW52aXRlJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcmVzdC9yZXN0LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBFbXBsb3llZUludml0ZVNlcnZpY2UgZXh0ZW5kcyBSZXN0U2VydmljZTxFbXBsb3llZUludml0ZUJhc2UsIEVtcGxveWVlSW52aXRlPiB7XG4gIHVybDogc3RyaW5nID0gJ2VtcGxveWVlcy9pbnZpdGVzJztcbiAgbW9kZWxDbGFzczogdHlwZW9mIEVtcGxveWVlSW52aXRlID0gRW1wbG95ZWVJbnZpdGU7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBlbXBsb3llZXMgZm9yIGZpcm0gZnJvbSBDU1YgZmlsZVxuICAgKiBAcGFyYW0gZmlsZVxuICAgKi9cbiAgaW1wb3J0KGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPEVtcGxveWVlSW52aXRlW10+IHtcbiAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfS9pbXBvcnRgLCBmb3JtRGF0YSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGVtcGxveWVlSW52aXRlOiBFbXBsb3llZUludml0ZVtdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVtcGxveWVlSW52aXRlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNlbmQgaW52aXRhdGlvbiBmcm9tIGZpcm0gdG8gY2xpZW50XG4gICAqIEBwYXJhbSBpbnZpdGVcbiAgICovXG4gIHJlc2VuZChpbnZpdGU6IEVtcGxveWVlSW52aXRlKTogT2JzZXJ2YWJsZTxFbXBsb3llZUludml0ZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfS8ke2ludml0ZS5pZH0vcmVzZW5kYCwgbnVsbClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc2VudEludml0ZUJhc2U6IEVtcGxveWVlSW52aXRlQmFzZSk6IEVtcGxveWVlSW52aXRlID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkSW52aXRlOiBFbXBsb3llZUludml0ZSA9IHBsYWluVG9DbGFzcyhFbXBsb3llZUludml0ZSwgcmVzZW50SW52aXRlQmFzZSk7XG4gICAgICAgICAgLy8gYXZvaWQgY2FjaGUgY2hhbmdlc1xuICAgICAgICAgIC8vIEBUT0RPIG1ha2UgY2FjaGUgcmVhZG9ubHlcbiAgICAgICAgICBjb25zdCB0ZW1wQ2FjaGU6IEVtcGxveWVlSW52aXRlW10gPSBfLmNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgICAgICByZXBsYWNlKHRlbXBDYWNoZSwgcGxhaW5Ub0NsYXNzKEVtcGxveWVlSW52aXRlLCB1cGRhdGVkSW52aXRlKSk7XG4gICAgICAgICAgdGhpcy5jYWNoZSA9IHRlbXBDYWNoZTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWRJbnZpdGU7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=