taxtank-core 0.8.4 → 0.9.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 (167) hide show
  1. package/bundles/taxtank-core.umd.js +180 -134
  2. package/bundles/taxtank-core.umd.js.map +1 -1
  3. package/esm2015/lib/collections/tax-summary/report-item.collection.js +141 -0
  4. package/esm2015/lib/db/Models/transaction-base.js +2 -1
  5. package/esm2015/lib/models/tax-summary/report-item-details.js +9 -0
  6. package/esm2015/lib/models/tax-summary/report-item.js +15 -0
  7. package/esm2015/lib/models/tax-summary/tax-summary-section.js +5 -5
  8. package/esm2015/lib/models/toast/toast-type.enum.js +8 -0
  9. package/esm2015/lib/models/toast/toast.js +9 -0
  10. package/esm2015/lib/services/http/address/address.service.js +39 -0
  11. package/esm2015/lib/services/http/bank/bank-account/bank-account.service.js +118 -0
  12. package/esm2015/lib/services/http/bank/bank-connection/bank-connection.service.js +52 -0
  13. package/esm2015/lib/services/http/bank/bank-transaction/bank-transaction.service.js +89 -0
  14. package/esm2015/lib/services/http/bank/bank.service.js +24 -0
  15. package/esm2015/lib/services/http/bank/basiq/basiq.service.js +94 -0
  16. package/esm2015/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.js +38 -0
  17. package/esm2015/lib/services/http/chart-accounts/chart-accounts.service.js +89 -0
  18. package/esm2015/lib/services/http/chat/chat.service.js +77 -0
  19. package/esm2015/lib/services/http/chat/message/message.service.js +65 -0
  20. package/esm2015/lib/services/http/chat/message-document/message-document.service.js +118 -0
  21. package/esm2015/lib/services/{depreciation/capital-project.service.js → http/depreciation/depreciation-capital-project/depreciation-capital-project.service.js} +7 -7
  22. package/esm2015/lib/services/http/depreciation/depreciation.service.js +146 -0
  23. package/esm2015/lib/services/http/document/document-folder/document-folder.service.js +84 -0
  24. package/esm2015/lib/services/{client → http/firm/client-invite}/client-invite.service.js +7 -7
  25. package/esm2015/lib/services/http/firm/client-movement/client-movement.service.js +98 -0
  26. package/esm2015/lib/services/http/firm/employee/employee.service.js +39 -0
  27. package/esm2015/lib/services/http/firm/employee-invite/employee-invite.service.js +53 -0
  28. package/esm2015/lib/services/http/firm/firm.service.js +79 -0
  29. package/esm2015/lib/services/http/firm/portfolio-report/client-portfolio-report.service.js +37 -0
  30. package/esm2015/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.js +90 -0
  31. package/esm2015/lib/services/http/income-source/income-source.service.js +109 -0
  32. package/esm2015/lib/services/http/income-source/salary-forecast/salary-forecast.service.js +90 -0
  33. package/esm2015/lib/services/http/income-source/sole-forecast/sole-forecast.service.js +87 -0
  34. package/esm2015/lib/services/http/loan/borrowing-expense/borrowing-expense.service.js +73 -0
  35. package/esm2015/lib/services/http/loan/loan.service.js +145 -0
  36. package/esm2015/lib/services/http/property/property-category/property-category.service.js +23 -0
  37. package/esm2015/lib/services/http/property/property-category-movement/property-category-movement.service.js +47 -0
  38. package/esm2015/lib/services/http/property/property-document/property-document.service.js +70 -0
  39. package/esm2015/lib/services/http/property/property-sale/property-sale.service.js +20 -0
  40. package/esm2015/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.js +21 -0
  41. package/esm2015/lib/services/http/property/property-share/property-share.service.js +115 -0
  42. package/esm2015/lib/services/http/property/property.service.js +126 -0
  43. package/esm2015/lib/services/http/rest/rest.service.js +190 -0
  44. package/esm2015/lib/services/http/service-notification/service-notification.service.js +65 -0
  45. package/esm2015/lib/services/http/subscription/subscription.service.js +157 -0
  46. package/esm2015/lib/services/http/tax-review/tax-review-history/tax-review-history.service.js +41 -0
  47. package/esm2015/lib/services/http/tax-review/tax-review.service.js +103 -0
  48. package/esm2015/lib/services/http/tax-summary/tax-summary.service.js +71 -0
  49. package/esm2015/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.js +85 -0
  50. package/esm2015/lib/services/http/transaction/transaction.service.js +319 -0
  51. package/esm2015/lib/services/http/user/occupation/occupation.service.js +45 -0
  52. package/esm2015/lib/services/http/user/user-event-setting/user-event-setting.service.js +59 -0
  53. package/esm2015/lib/services/http/user/user-event-type/user-event-type.service.js +29 -0
  54. package/esm2015/lib/services/http/user/user.service.js +124 -0
  55. package/esm2015/lib/services/http/vehicle/vehicle.service.js +237 -0
  56. package/esm2015/lib/services/property/equity-position-chart/equity-position-chart.service.js +45 -0
  57. package/esm2015/lib/services/toast/toast.service.js +26 -0
  58. package/esm2015/public-api.js +54 -51
  59. package/fesm2015/taxtank-core.js +98 -56
  60. package/fesm2015/taxtank-core.js.map +1 -1
  61. package/lib/collections/{tax-return-category-item.collection.d.ts → tax-summary/report-item.collection.d.ts} +5 -5
  62. package/lib/models/tax-summary/{tax-return-category-item-details.d.ts → report-item-details.d.ts} +2 -2
  63. package/lib/models/tax-summary/{tax-return-category-item.d.ts → report-item.d.ts} +4 -4
  64. package/lib/models/tax-summary/tax-summary-section.d.ts +2 -2
  65. package/lib/models/toast/toast-type.enum.d.ts +6 -0
  66. package/lib/models/toast/toast.d.ts +10 -0
  67. package/lib/services/{address → http/address}/address.service.d.ts +1 -1
  68. package/lib/services/{bank → http/bank/bank-account}/bank-account.service.d.ts +5 -5
  69. package/lib/services/{bank → http/bank/bank-connection}/bank-connection.service.d.ts +5 -5
  70. package/lib/services/{bank → http/bank/bank-transaction}/bank-transaction.service.d.ts +5 -5
  71. package/lib/services/{bank → http/bank}/bank.service.d.ts +4 -4
  72. package/lib/services/{bank → http/bank/basiq}/basiq.service.d.ts +7 -7
  73. package/lib/services/{chart-accounts → http/chart-accounts/chart-accounts-depreciations}/chart-accounts-depreciations.service.d.ts +4 -4
  74. package/lib/services/{chart-accounts → http/chart-accounts}/chart-accounts.service.d.ts +3 -3
  75. package/lib/services/{chat → http/chat}/chat.service.d.ts +7 -7
  76. package/lib/services/{chat → http/chat/message}/message.service.d.ts +7 -7
  77. package/lib/services/{chat → http/chat/message-document}/message-document.service.d.ts +3 -3
  78. package/lib/services/{depreciation/capital-project.service.d.ts → http/depreciation/depreciation-capital-project/depreciation-capital-project.service.d.ts} +4 -4
  79. package/lib/services/{depreciation → http/depreciation}/depreciation.service.d.ts +5 -5
  80. package/lib/services/{document → http/document/document-folder}/document-folder.service.d.ts +6 -6
  81. package/lib/services/{client → http/firm/client-invite}/client-invite.service.d.ts +4 -4
  82. package/lib/services/{client → http/firm/client-movement}/client-movement.service.d.ts +7 -7
  83. package/lib/services/{employee → http/firm/employee}/employee.service.d.ts +4 -4
  84. package/lib/services/{employee → http/firm/employee-invite}/employee-invite.service.d.ts +4 -4
  85. package/lib/services/{firm → http/firm}/firm.service.d.ts +2 -2
  86. package/lib/services/{client → http/firm/portfolio-report}/client-portfolio-report.service.d.ts +1 -1
  87. package/lib/services/{income-source → http/income-source/income-source-forecast}/income-source-forecast.service.d.ts +5 -5
  88. package/lib/services/{income-source → http/income-source}/income-source.service.d.ts +8 -8
  89. package/lib/services/{income-source → http/income-source/salary-forecast}/salary-forecast.service.d.ts +6 -6
  90. package/lib/services/{income-source → http/income-source/sole-forecast}/sole-forecast.service.d.ts +5 -5
  91. package/lib/services/{borrowing-expense → http/loan/borrowing-expense}/borrowing-expense.service.d.ts +2 -2
  92. package/lib/services/{loan → http/loan}/loan.service.d.ts +6 -6
  93. package/lib/services/{property → http/property}/property-category/property-category.service.d.ts +4 -4
  94. package/lib/services/{property → http/property/property-category-movement}/property-category-movement.service.d.ts +4 -4
  95. package/lib/services/{property → http/property}/property-document/property-document.service.d.ts +5 -5
  96. package/lib/services/http/property/property-sale/property-sale.service.d.ts +10 -0
  97. package/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.d.ts +11 -0
  98. package/lib/services/{property → http/property}/property-share/property-share.service.d.ts +5 -5
  99. package/lib/services/{property → http/property}/property.service.d.ts +5 -5
  100. package/lib/services/{base-rest.service.d.ts → http/rest/rest.service.d.ts} +4 -4
  101. package/lib/services/http/service-notification/service-notification.service.d.ts +31 -0
  102. package/lib/services/{subscription → http/subscription}/subscription.service.d.ts +6 -6
  103. package/lib/services/{tax-review → http/tax-review/tax-review-history}/tax-review-history.service.d.ts +5 -5
  104. package/lib/services/{tax-review → http/tax-review}/tax-review.service.d.ts +6 -6
  105. package/lib/services/{tax-summary → http/tax-summary}/tax-summary.service.d.ts +2 -2
  106. package/lib/services/{transaction → http/transaction/transaction-allocation}/transaction-allocation.service.d.ts +6 -6
  107. package/lib/services/{transaction → http/transaction}/transaction.service.d.ts +7 -7
  108. package/lib/services/{user → http/user/occupation}/occupation.service.d.ts +1 -1
  109. package/lib/services/{user-event → http/user/user-event-setting}/user-event-setting.service.d.ts +5 -5
  110. package/lib/services/{user-event → http/user/user-event-type}/user-event-type.service.d.ts +5 -5
  111. package/lib/services/{user → http/user}/user.service.d.ts +3 -3
  112. package/lib/services/{work/work-tank.service.d.ts → http/vehicle/vehicle.service.d.ts} +9 -8
  113. package/lib/services/property/{equity-position-chart.service.d.ts → equity-position-chart/equity-position-chart.service.d.ts} +1 -1
  114. package/lib/services/toast/toast.service.d.ts +13 -0
  115. package/package.json +1 -1
  116. package/public-api.d.ts +53 -50
  117. package/esm2015/lib/collections/tax-return-category-item.collection.js +0 -141
  118. package/esm2015/lib/models/tax-summary/tax-return-category-item-details.js +0 -9
  119. package/esm2015/lib/models/tax-summary/tax-return-category-item.js +0 -15
  120. package/esm2015/lib/services/address/address.service.js +0 -39
  121. package/esm2015/lib/services/bank/bank-account.service.js +0 -118
  122. package/esm2015/lib/services/bank/bank-connection.service.js +0 -52
  123. package/esm2015/lib/services/bank/bank-transaction.service.js +0 -89
  124. package/esm2015/lib/services/bank/bank.service.js +0 -24
  125. package/esm2015/lib/services/bank/basiq.service.js +0 -94
  126. package/esm2015/lib/services/base-rest.service.js +0 -190
  127. package/esm2015/lib/services/borrowing-expense/borrowing-expense.service.js +0 -73
  128. package/esm2015/lib/services/chart-accounts/chart-accounts-depreciations.service.js +0 -38
  129. package/esm2015/lib/services/chart-accounts/chart-accounts.service.js +0 -89
  130. package/esm2015/lib/services/chat/chat.service.js +0 -77
  131. package/esm2015/lib/services/chat/message-document.service.js +0 -118
  132. package/esm2015/lib/services/chat/message.service.js +0 -65
  133. package/esm2015/lib/services/client/client-movement.service.js +0 -98
  134. package/esm2015/lib/services/client/client-portfolio-report.service.js +0 -37
  135. package/esm2015/lib/services/depreciation/depreciation.service.js +0 -146
  136. package/esm2015/lib/services/document/document-folder.service.js +0 -84
  137. package/esm2015/lib/services/employee/employee-invite.service.js +0 -53
  138. package/esm2015/lib/services/employee/employee.service.js +0 -39
  139. package/esm2015/lib/services/firm/firm.service.js +0 -79
  140. package/esm2015/lib/services/income-source/income-source-forecast.service.js +0 -90
  141. package/esm2015/lib/services/income-source/income-source.service.js +0 -109
  142. package/esm2015/lib/services/income-source/salary-forecast.service.js +0 -90
  143. package/esm2015/lib/services/income-source/sole-forecast.service.js +0 -87
  144. package/esm2015/lib/services/loan/loan.service.js +0 -145
  145. package/esm2015/lib/services/notification/notification.service.js +0 -65
  146. package/esm2015/lib/services/property/equity-position-chart.service.js +0 -45
  147. package/esm2015/lib/services/property/property-category/property-category.service.js +0 -23
  148. package/esm2015/lib/services/property/property-category-movement.service.js +0 -47
  149. package/esm2015/lib/services/property/property-document/property-document.service.js +0 -70
  150. package/esm2015/lib/services/property/property-sale/property-sale.service.js +0 -20
  151. package/esm2015/lib/services/property/property-sale/tax-exemption/tax-exemption.service.js +0 -21
  152. package/esm2015/lib/services/property/property-share/property-share.service.js +0 -115
  153. package/esm2015/lib/services/property/property.service.js +0 -126
  154. package/esm2015/lib/services/subscription/subscription.service.js +0 -157
  155. package/esm2015/lib/services/tax-review/tax-review-history.service.js +0 -41
  156. package/esm2015/lib/services/tax-review/tax-review.service.js +0 -103
  157. package/esm2015/lib/services/tax-summary/tax-summary.service.js +0 -71
  158. package/esm2015/lib/services/transaction/transaction-allocation.service.js +0 -85
  159. package/esm2015/lib/services/transaction/transaction.service.js +0 -319
  160. package/esm2015/lib/services/user/occupation.service.js +0 -45
  161. package/esm2015/lib/services/user/user.service.js +0 -124
  162. package/esm2015/lib/services/user-event/user-event-setting.service.js +0 -59
  163. package/esm2015/lib/services/user-event/user-event-type.service.js +0 -29
  164. package/esm2015/lib/services/work/work-tank.service.js +0 -236
  165. package/lib/services/notification/notification.service.d.ts +0 -31
  166. package/lib/services/property/property-sale/property-sale.service.d.ts +0 -10
  167. package/lib/services/property/property-sale/tax-exemption/tax-exemption.service.d.ts +0 -11
@@ -0,0 +1,24 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Bank } from '../../../models/bank/bank';
3
+ import { RestService } from '../rest/rest.service';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Service that handling banks logic
7
+ */
8
+ export class BankService extends RestService {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.modelClass = Bank;
12
+ this.url = 'banks';
13
+ this.isHydra = true;
14
+ }
15
+ }
16
+ BankService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
17
+ BankService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankService, providedIn: 'root' });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankService, decorators: [{
19
+ type: Injectable,
20
+ args: [{
21
+ providedIn: 'root'
22
+ }]
23
+ }] });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvYmFuay9iYW5rLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUVuRDs7R0FFRztBQUlILE1BQU0sT0FBTyxXQUFZLFNBQVEsV0FBMkI7SUFINUQ7O1FBSUUsZUFBVSxHQUFnQixJQUFJLENBQUM7UUFDL0IsUUFBRyxHQUFXLE9BQU8sQ0FBQztRQUN0QixZQUFPLEdBQVksSUFBSSxDQUFDO0tBQ3pCOzt5R0FKWSxXQUFXOzZHQUFYLFdBQVcsY0FGVixNQUFNOzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFuayBhcyBCYW5rQmFzZSB9IGZyb20gJy4uLy4uLy4uL2RiL01vZGVscy9iYW5rJztcbmltcG9ydCB7IEJhbmsgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFuay9iYW5rJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzdC9yZXN0LnNlcnZpY2UnO1xuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBoYW5kbGluZyBiYW5rcyBsb2dpY1xuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCYW5rU2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPEJhbmtCYXNlLCBCYW5rPiB7XG4gIG1vZGVsQ2xhc3M6IHR5cGVvZiBCYW5rID0gQmFuaztcbiAgdXJsOiBzdHJpbmcgPSAnYmFua3MnO1xuICBpc0h5ZHJhOiBib29sZWFuID0gdHJ1ZTtcbn1cbiJdfQ==
@@ -0,0 +1,94 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { ReplaySubject } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import { UserEventTypeClientTypeEnum } from '../../../../db/Enums/user-event-type-client-type.enum';
5
+ import { RestService } from '../../rest/rest.service';
6
+ import { BankAccount } from '../../../../models/bank/bank-account';
7
+ import { BasiqToken } from '../../../../models/bank/basiq-token';
8
+ import { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/common/http";
11
+ import * as i2 from "../../../event/event-dispatcher.service";
12
+ /**
13
+ * basiq is a middleman between bank and user
14
+ * service is responsible for fetching bank related information
15
+ */
16
+ export class BasiqService extends RestService {
17
+ constructor(http, eventDispatcherService, environment) {
18
+ super(http, eventDispatcherService, environment);
19
+ this.http = http;
20
+ this.eventDispatcherService = eventDispatcherService;
21
+ this.environment = environment;
22
+ this.tokenSubject = new ReplaySubject();
23
+ this.url = 'basiq/accounts';
24
+ this.modelClass = BankAccount;
25
+ this.listenEvents();
26
+ }
27
+ /**
28
+ * Listen events from Event Dispatcher service
29
+ */
30
+ listenEvents() {
31
+ this.listenToBankConnectionAdded();
32
+ this.listenNotifications();
33
+ }
34
+ /**
35
+ * access token to use basiq connect ui iframe
36
+ */
37
+ getToken() {
38
+ if (!this.token || this.token.isExpired()) {
39
+ this.http.get(`${this.environment.apiV2}/basiq/tokens`)
40
+ .pipe(map((response) => {
41
+ const now = new Date().getTime();
42
+ return new BasiqToken(response['access_token'], new Date(now + response['expires_in'] * 1000));
43
+ }))
44
+ .subscribe((token) => {
45
+ this.tokenSubject.next(token);
46
+ });
47
+ }
48
+ return this.tokenSubject.asObservable();
49
+ }
50
+ getConnections() {
51
+ return this.get().pipe(map((bankAccounts) => {
52
+ // get all connections
53
+ const connections = bankAccounts.map((bankAccount) => {
54
+ return bankAccount.bankConnection;
55
+ });
56
+ // return without duplicates
57
+ return [...new Map(connections.map((connection) => [connection.id, connection])).values()];
58
+ }));
59
+ }
60
+ /**
61
+ * Listen to EventDispatcherService event related to added Bank connection
62
+ */
63
+ listenToBankConnectionAdded() {
64
+ this.eventDispatcherService.on(AppEventTypeEnum.BANK_CONNECTION_ADDED).subscribe(() => {
65
+ this.fetch().subscribe((bankAccounts) => {
66
+ this.cache = bankAccounts;
67
+ this.updateCache();
68
+ });
69
+ });
70
+ }
71
+ /**
72
+ * listen to notifications to update basiq accounts list
73
+ */
74
+ listenNotifications() {
75
+ this.eventDispatcherService.on(AppEventTypeEnum.NOTIFICATION_ADDED).subscribe((notification) => {
76
+ if (!notification.isRead && notification.eventType === UserEventTypeClientTypeEnum.BASIQ_NEW_ACCOUNTS) {
77
+ this.resetCache();
78
+ this.get().subscribe();
79
+ }
80
+ });
81
+ }
82
+ }
83
+ BasiqService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BasiqService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
84
+ BasiqService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BasiqService, providedIn: 'root' });
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BasiqService, decorators: [{
86
+ type: Injectable,
87
+ args: [{
88
+ providedIn: 'root'
89
+ }]
90
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
91
+ type: Inject,
92
+ args: ['environment']
93
+ }] }]; } });
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaXEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL2JhbmsvYmFzaXEvYmFzaXEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7OztBQUloRjs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sWUFBYSxTQUFRLFdBQXlDO0lBTXpFLFlBQ1ksSUFBZ0IsRUFDaEIsc0JBQThDLEVBQ3ZCLFdBQWdCO1FBRWpELEtBQUssQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFKdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBUG5ELGlCQUFZLEdBQThCLElBQUksYUFBYSxFQUFjLENBQUM7UUFDMUUsUUFBRyxHQUFXLGdCQUFnQixDQUFDO1FBQy9CLGVBQVUsR0FBRyxXQUFXLENBQUM7UUFRdkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFF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QkFDbkI7OzBCQVVJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhbmtBY2NvdW50IGFzIEJhbmtBY2NvdW50QmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL2RiL01vZGVscy9iYW5rLWFjY291bnQnO1xuaW1wb3J0IHsgVXNlckV2ZW50VHlwZUNsaWVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGIvRW51bXMvdXNlci1ldmVudC10eXBlLWNsaWVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBCYW5rQWNjb3VudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYW5rL2JhbmstYWNjb3VudCc7XG5pbXBvcnQgeyBCYXNpcVRva2VuIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2JhbmsvYmFzaXEtdG9rZW4nO1xuaW1wb3J0IHsgRXZlbnREaXNwYXRjaGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2V2ZW50L2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgQmFua0Nvbm5lY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFuay9iYW5rLWNvbm5lY3Rpb24nO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24nO1xuXG4vKipcbiAqIGJhc2lxIGlzIGEgbWlkZGxlbWFuIGJldHdlZW4gYmFuayBhbmQgdXNlclxuICogc2VydmljZSBpcyByZXNwb25zaWJsZSBmb3IgZmV0Y2hpbmcgYmFuayByZWxhdGVkIGluZm9ybWF0aW9uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJhc2lxU2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPEJhbmtBY2NvdW50QmFzZSwgQmFua0FjY291bnQ+IHtcbiAgdG9rZW46IEJhc2lxVG9rZW47XG4gIHRva2VuU3ViamVjdDogUmVwbGF5U3ViamVjdDxCYXNpcVRva2VuPiA9IG5ldyBSZXBsYXlTdWJqZWN0PEJhc2lxVG9rZW4+KCk7XG4gIHVybDogc3RyaW5nID0gJ2Jhc2lxL2FjY291bnRzJztcbiAgbW9kZWxDbGFzcyA9IEJhbmtBY2NvdW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCBldmVudERpc3BhdGNoZXJTZXJ2aWNlOiBFdmVudERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJvdGVjdGVkIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gICAgc3VwZXIoaHR0cCwgZXZlbnREaXNwYXRjaGVyU2VydmljZSwgZW52aXJvbm1lbnQpO1xuICAgIHRoaXMubGlzdGVuRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGV2ZW50cyBmcm9tIEV2ZW50IERpc3BhdGNoZXIgc2VydmljZVxuICAgKi9cbiAgbGlzdGVuRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdGVuVG9CYW5rQ29ubmVjdGlvbkFkZGVkKCk7XG4gICAgdGhpcy5saXN0ZW5Ob3RpZmljYXRpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogYWNjZXNzIHRva2VuIHRvIHVzZSBiYXNpcSBjb25uZWN0IHVpIGlmcmFtZVxuICAgKi9cbiAgZ2V0VG9rZW4oKTogT2JzZXJ2YWJsZTxCYXNpcVRva2VuPiB7XG4gICAgaWYgKCF0aGlzLnRva2VuIHx8IHRoaXMudG9rZW4uaXNFeHBpcmVkKCkpIHtcbiAgICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vYmFzaXEvdG9rZW5zYClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChyZXNwb25zZTogb2JqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3c6IG51bWJlciA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IEJhc2lxVG9rZW4ocmVzcG9uc2VbJ2FjY2Vzc190b2tlbiddLCBuZXcgRGF0ZShub3cgKyByZXNwb25zZVsnZXhwaXJlc19pbiddICogMTAwMCkpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodG9rZW46IEJhc2lxVG9rZW4pID0+IHtcbiAgICAgICAgICB0aGlzLnRva2VuU3ViamVjdC5uZXh0KHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudG9rZW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvbnMoKTogT2JzZXJ2YWJsZTxCYW5rQ29ubmVjdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCkucGlwZShcbiAgICAgIG1hcCgoYmFua0FjY291bnRzOiBCYW5rQWNjb3VudFtdKSA9PiB7XG4gICAgICAgIC8vIGdldCBhbGwgY29ubmVjdGlvbnNcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbnM6IEJhbmtDb25uZWN0aW9uW10gPSBiYW5rQWNjb3VudHMubWFwKChiYW5rQWNjb3VudDogQmFua0FjY291bnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYmFua0FjY291bnQuYmFua0Nvbm5lY3Rpb247XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJldHVybiB3aXRob3V0IGR1cGxpY2F0ZXNcbiAgICAgICAgcmV0dXJuIFsuLi5uZXcgTWFwKGNvbm5lY3Rpb25zLm1hcCgoY29ubmVjdGlvbjogQmFua0Nvbm5lY3Rpb24pID0+IFtjb25uZWN0aW9uLmlkLCBjb25uZWN0aW9uXSkpLnZhbHVlcygpXTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRXZlbnREaXNwYXRjaGVyU2VydmljZSBldmVudCByZWxhdGVkIHRvIGFkZGVkIEJhbmsgY29ubmVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5Ub0JhbmtDb25uZWN0aW9uQWRkZWQoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uQkFOS19DT05ORUNUSU9OX0FEREVEKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5mZXRjaCgpLnN1YnNjcmliZSgoYmFua0FjY291bnRzOiBCYW5rQWNjb3VudFtdKSA9PiB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBiYW5rQWNjb3VudHM7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGxpc3RlbiB0byBub3RpZmljYXRpb25zIHRvIHVwZGF0ZSBiYXNpcSBhY2NvdW50cyBsaXN0XG4gICAqL1xuICBwcml2YXRlIGxpc3Rlbk5vdGlmaWNhdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uTk9USUZJQ0FUSU9OX0FEREVEKS5zdWJzY3JpYmUoKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIW5vdGlmaWNhdGlvbi5pc1JlYWQgJiYgbm90aWZpY2F0aW9uLmV2ZW50VHlwZSA9PT0gVXNlckV2ZW50VHlwZUNsaWVudFR5cGVFbnVtLkJBU0lRX05FV19BQ0NPVU5UUykge1xuICAgICAgICB0aGlzLnJlc2V0Q2FjaGUoKTtcbiAgICAgICAgdGhpcy5nZXQoKS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,38 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { RestService } from '../../rest/rest.service';
3
+ import { map } from 'rxjs/operators';
4
+ import { ChartAccountsDepreciation } from '../../../../models/chart-accounts/chart-accounts-depreciation';
5
+ import { FinancialYear } from '../../../../models/financial-year/financial-year';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Service to work with depreciation chart accounts
9
+ */
10
+ export class ChartAccountsDepreciationService extends RestService {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.url = 'chart-accounts-depreciations';
14
+ this.modelClass = ChartAccountsDepreciation;
15
+ this.isHydra = true;
16
+ }
17
+ /**
18
+ * Get depreciation chart accounts for current financial year
19
+ */
20
+ getCurrent() {
21
+ return this.get()
22
+ .pipe(map((chartAccountsDepreciations) => {
23
+ return chartAccountsDepreciations
24
+ .find((chartAccountsDepreciation) => {
25
+ return chartAccountsDepreciation.effectiveYear === new FinancialYear().year;
26
+ });
27
+ }));
28
+ }
29
+ }
30
+ ChartAccountsDepreciationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ChartAccountsDepreciationService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
31
+ ChartAccountsDepreciationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ChartAccountsDepreciationService, providedIn: 'root' });
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ChartAccountsDepreciationService, decorators: [{
33
+ type: Injectable,
34
+ args: [{
35
+ providedIn: 'root'
36
+ }]
37
+ }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtYWNjb3VudHMtZGVwcmVjaWF0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvY2hhcnQtYWNjb3VudHMvY2hhcnQtYWNjb3VudHMtZGVwcmVjaWF0aW9ucy9jaGFydC1hY2NvdW50cy1kZXByZWNpYXRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7QUFFakY7O0dBRUc7QUFJSCxNQUFNLE9BQU8sZ0NBQWlDLFNBQVEsV0FBcUU7SUFIM0g7O1FBSUUsUUFBRyxHQUFXLDhCQUE4QixDQUFDO1FBQzdDLGVBQVUsR0FBcUMseUJBQXlCLENBQUM7UUFDekUsWUFBTyxHQUFZLElBQUksQ0FBQztLQWdCekI7SUFkQzs7T0FFRztJQUNILFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUU7YUFDZCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsMEJBQXVELEVBQUUsRUFBRTtZQUM5RCxPQUFPLDBCQUEwQjtpQkFDOUIsSUFBSSxDQUFDLENBQUMseUJBQW9ELEVBQVcsRUFBRTtnQkFDdEUsT0FBTyx5QkFBeUIsQ0FBQyxhQUFhLEtBQUssSUFBSSxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDOUUsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzs7OEhBbEJVLGdDQUFnQztrSUFBaEMsZ0NBQWdDLGNBRi9CLE1BQU07NEZBRVAsZ0NBQWdDO2tCQUg1QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcmVzdC9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhcnRBY2NvdW50c0RlcHJlY2lhdGlvbiBhcyBDaGFydEFjY291bnRzRGVwcmVjaWF0aW9uQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL2RiL01vZGVscy9jaGFydC1hY2NvdW50cy1kZXByZWNpYXRpb24nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2hhcnRBY2NvdW50c0RlcHJlY2lhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9jaGFydC1hY2NvdW50cy9jaGFydC1hY2NvdW50cy1kZXByZWNpYXRpb24nO1xuaW1wb3J0IHsgRmluYW5jaWFsWWVhciB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maW5hbmNpYWwteWVhci9maW5hbmNpYWwteWVhcic7XG5cbi8qKlxuICogU2VydmljZSB0byB3b3JrIHdpdGggZGVwcmVjaWF0aW9uIGNoYXJ0IGFjY291bnRzXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0QWNjb3VudHNEZXByZWNpYXRpb25TZXJ2aWNlIGV4dGVuZHMgUmVzdFNlcnZpY2U8Q2hhcnRBY2NvdW50c0RlcHJlY2lhdGlvbkJhc2UsIENoYXJ0QWNjb3VudHNEZXByZWNpYXRpb24+IHtcbiAgdXJsOiBzdHJpbmcgPSAnY2hhcnQtYWNjb3VudHMtZGVwcmVjaWF0aW9ucyc7XG4gIG1vZGVsQ2xhc3M6IHR5cGVvZiBDaGFydEFjY291bnRzRGVwcmVjaWF0aW9uID0gQ2hhcnRBY2NvdW50c0RlcHJlY2lhdGlvbjtcbiAgaXNIeWRyYTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEdldCBkZXByZWNpYXRpb24gY2hhcnQgYWNjb3VudHMgZm9yIGN1cnJlbnQgZmluYW5jaWFsIHllYXJcbiAgICovXG4gIGdldEN1cnJlbnQoKTogT2JzZXJ2YWJsZTxDaGFydEFjY291bnRzRGVwcmVjaWF0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGNoYXJ0QWNjb3VudHNEZXByZWNpYXRpb25zOiBDaGFydEFjY291bnRzRGVwcmVjaWF0aW9uW10pID0+IHtcbiAgICAgICAgICByZXR1cm4gY2hhcnRBY2NvdW50c0RlcHJlY2lhdGlvbnNcbiAgICAgICAgICAgIC5maW5kKChjaGFydEFjY291bnRzRGVwcmVjaWF0aW9uOiBDaGFydEFjY291bnRzRGVwcmVjaWF0aW9uKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjaGFydEFjY291bnRzRGVwcmVjaWF0aW9uLmVmZmVjdGl2ZVllYXIgPT09IG5ldyBGaW5hbmNpYWxZZWFyKCkueWVhcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,89 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { ReplaySubject } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import { plainToClass } from 'class-transformer';
5
+ import { ChartAccounts } from '../../../models/chart-accounts/chart-accounts';
6
+ import { ChartAccountsHeading } from '../../../models/chart-accounts/chart-accounts-heading';
7
+ import { CHART_ACCOUNTS_CATEGORIES } from '../../../models/chart-accounts/chart-accounts-categories.const';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common/http";
10
+ /**
11
+ * Chart accounts service
12
+ */
13
+ export class ChartAccountsService {
14
+ constructor(http, environment) {
15
+ this.http = http;
16
+ this.environment = environment;
17
+ this.chartAccountsSubject = new ReplaySubject(1);
18
+ }
19
+ /**
20
+ * get all parent and child chart accounts and group it
21
+ */
22
+ getChartAccounts() {
23
+ if (!this._chartAccounts) {
24
+ this._chartAccounts = [];
25
+ this.http.get(`${this.environment.apiV2}/chart-accounts`)
26
+ .pipe(map((response) => {
27
+ return response.map((item) => plainToClass(ChartAccounts, item));
28
+ }))
29
+ .subscribe((chartAccounts) => {
30
+ this._chartAccounts = chartAccounts;
31
+ this.chartAccountsSubject.next(this._chartAccounts);
32
+ });
33
+ }
34
+ return this.chartAccountsSubject.asObservable();
35
+ }
36
+ /**
37
+ * Get list of chart accounts heading
38
+ * @param categories
39
+ */
40
+ getChartAccountsHeadings(categories = CHART_ACCOUNTS_CATEGORIES.all) {
41
+ return this.getChartAccounts()
42
+ .pipe(map((chartAccounts) => {
43
+ const filteredChartAccounts = chartAccounts.filter((ca) => categories.includes(ca.category));
44
+ const headings = [];
45
+ filteredChartAccounts.forEach((ca) => {
46
+ let heading = headings.find((h) => { var _a; return h.id === ((_a = ca.heading) === null || _a === void 0 ? void 0 : _a.id); });
47
+ if (!heading) {
48
+ heading = plainToClass(ChartAccountsHeading, ca.heading);
49
+ heading.chartAccounts = [];
50
+ headings.push(heading);
51
+ }
52
+ heading.chartAccounts.push(ca);
53
+ });
54
+ return headings;
55
+ }));
56
+ }
57
+ /**
58
+ * Get heading of chart accounts by it Id
59
+ * @param id
60
+ */
61
+ getHeadingByChartAccountsId(id) {
62
+ return this.getChartAccountsById(id)
63
+ .pipe(map((chartAccounts) => {
64
+ return chartAccounts.heading;
65
+ }));
66
+ }
67
+ /**
68
+ * Get chart accounts by Id
69
+ * @param id
70
+ */
71
+ getChartAccountsById(id) {
72
+ return this.getChartAccounts()
73
+ .pipe(map((chartAccountsList) => {
74
+ return chartAccountsList.find((chartAccounts) => chartAccounts.id === id);
75
+ }));
76
+ }
77
+ }
78
+ ChartAccountsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ChartAccountsService, deps: [{ token: i1.HttpClient }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
79
+ ChartAccountsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ChartAccountsService, providedIn: 'root' });
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ChartAccountsService, decorators: [{
81
+ type: Injectable,
82
+ args: [{
83
+ providedIn: 'root'
84
+ }]
85
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
86
+ type: Inject,
87
+ args: ['environment']
88
+ }] }]; } });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtYWNjb3VudHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL2NoYXJ0LWFjY291bnRzL2NoYXJ0LWFjY291bnRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUM3RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQzs7O0FBRTNHOztHQUVHO0FBSUgsTUFBTSxPQUFPLG9CQUFvQjtJQUkvQixZQUNVLElBQWdCLEVBQ08sV0FBZ0I7UUFEdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNPLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBSmpELHlCQUFvQixHQUFtQyxJQUFJLGFBQWEsQ0FBa0IsQ0FBQyxDQUFDLENBQUM7SUFNN0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssaUJBQWlCLENBQUM7aUJBQ3RELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxRQUE0QixFQUFFLEVBQUU7Z0JBQ25DLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQXNCLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNyRixDQUFDLENBQUMsQ0FDSDtpQkFDQSxTQUFTLENBQUMsQ0FBQyxhQUE4QixFQUFFLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QixDQUFDLGFBQTBDLHlCQUF5QixDQUFDLEdBQUc7UUFDOUYsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7YUFDM0IsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGFBQThCLEVBQUUsRUFBRTtZQUNyQyxNQUFNLHFCQUFxQixHQUFvQixhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBaUIsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM3SCxNQUFNLFFBQVEsR0FBMkIsRUFBRSxDQUFDO1lBRTVDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQWlCLEVBQUUsRUFBRTtnQkFDbEQsSUFBSSxPQUFPLEdBQXlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUF1QixFQUFFLEVBQUUsV0FBQyxPQUFBLENBQUMsQ0FBQyxFQUFFLE1BQUssTUFBQSxFQUFFLENBQUMsT0FBTywwQ0FBRSxFQUFFLENBQUEsQ0FBQSxFQUFBLENBQUMsQ0FBQztnQkFFeEcsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDWixPQUFPLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDekQsT0FBTyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7b0JBQzNCLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3hCO2dCQUVELE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSCwyQkFBMkIsQ0FBQyxFQUFVO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQzthQUNqQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsYUFBNEIsRUFBRSxFQUFFO1lBQ25DLE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7T0FHRztJQUNILG9CQUFvQixDQUFDLEVBQVU7UUFDN0IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7YUFDM0IsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGlCQUFrQyxFQUFFLEVBQUU7WUFDekMsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUE0QixFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDOztrSEFsRlUsb0JBQW9CLDRDQU1yQixhQUFhO3NIQU5aLG9CQUFvQixjQUZuQixNQUFNOzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQU9JLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENoYXJ0QWNjb3VudHNDYXRlZ29yeUVudW0gfSBmcm9tICcuLi8uLi8uLi9kYi9FbnVtcy9jaGFydC1hY2NvdW50cy1jYXRlZ29yeS5lbnVtJztcbmltcG9ydCB7IENoYXJ0QWNjb3VudHMgYXMgQ2hhcnRBY2NvdW50QmFzZSB9IGZyb20gJy4uLy4uLy4uL2RiL01vZGVscy9jaGFydC1hY2NvdW50cyc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBDaGFydEFjY291bnRzIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NoYXJ0LWFjY291bnRzL2NoYXJ0LWFjY291bnRzJztcbmltcG9ydCB7IENoYXJ0QWNjb3VudHNIZWFkaW5nIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NoYXJ0LWFjY291bnRzL2NoYXJ0LWFjY291bnRzLWhlYWRpbmcnO1xuaW1wb3J0IHsgQ0hBUlRfQUNDT1VOVFNfQ0FURUdPUklFUyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jaGFydC1hY2NvdW50cy9jaGFydC1hY2NvdW50cy1jYXRlZ29yaWVzLmNvbnN0JztcblxuLyoqXG4gKiBDaGFydCBhY2NvdW50cyBzZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0QWNjb3VudHNTZXJ2aWNlIHtcbiAgX2NoYXJ0QWNjb3VudHM6IENoYXJ0QWNjb3VudHNbXTtcbiAgY2hhcnRBY2NvdW50c1N1YmplY3Q6IFJlcGxheVN1YmplY3Q8Q2hhcnRBY2NvdW50c1tdPiA9IG5ldyBSZXBsYXlTdWJqZWN0PENoYXJ0QWNjb3VudHNbXT4oMSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudDogYW55XG4gICkge1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBhbGwgcGFyZW50IGFuZCBjaGlsZCBjaGFydCBhY2NvdW50cyBhbmQgZ3JvdXAgaXRcbiAgICovXG4gIGdldENoYXJ0QWNjb3VudHMoKTogT2JzZXJ2YWJsZTxDaGFydEFjY291bnRzW10+IHtcbiAgICBpZiAoIXRoaXMuX2NoYXJ0QWNjb3VudHMpIHtcbiAgICAgIHRoaXMuX2NoYXJ0QWNjb3VudHMgPSBbXTtcbiAgICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vY2hhcnQtYWNjb3VudHNgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBDaGFydEFjY291bnRCYXNlW10pID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5tYXAoKGl0ZW06IENoYXJ0QWNjb3VudEJhc2UpID0+IHBsYWluVG9DbGFzcyhDaGFydEFjY291bnRzLCBpdGVtKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChjaGFydEFjY291bnRzOiBDaGFydEFjY291bnRzW10pID0+IHtcbiAgICAgICAgICB0aGlzLl9jaGFydEFjY291bnRzID0gY2hhcnRBY2NvdW50cztcbiAgICAgICAgICB0aGlzLmNoYXJ0QWNjb3VudHNTdWJqZWN0Lm5leHQodGhpcy5fY2hhcnRBY2NvdW50cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNoYXJ0QWNjb3VudHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsaXN0IG9mIGNoYXJ0IGFjY291bnRzIGhlYWRpbmdcbiAgICogQHBhcmFtIGNhdGVnb3JpZXNcbiAgICovXG4gIGdldENoYXJ0QWNjb3VudHNIZWFkaW5ncyhjYXRlZ29yaWVzOiBDaGFydEFjY291bnRzQ2F0ZWdvcnlFbnVtW10gPSBDSEFSVF9BQ0NPVU5UU19DQVRFR09SSUVTLmFsbCk6IE9ic2VydmFibGU8Q2hhcnRBY2NvdW50c0hlYWRpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldENoYXJ0QWNjb3VudHMoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoY2hhcnRBY2NvdW50czogQ2hhcnRBY2NvdW50c1tdKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRDaGFydEFjY291bnRzOiBDaGFydEFjY291bnRzW10gPSBjaGFydEFjY291bnRzLmZpbHRlcigoY2E6IENoYXJ0QWNjb3VudHMpID0+IGNhdGVnb3JpZXMuaW5jbHVkZXMoY2EuY2F0ZWdvcnkpKTtcbiAgICAgICAgICBjb25zdCBoZWFkaW5nczogQ2hhcnRBY2NvdW50c0hlYWRpbmdbXSA9IFtdO1xuXG4gICAgICAgICAgZmlsdGVyZWRDaGFydEFjY291bnRzLmZvckVhY2goKGNhOiBDaGFydEFjY291bnRzKSA9PiB7XG4gICAgICAgICAgICBsZXQgaGVhZGluZzogQ2hhcnRBY2NvdW50c0hlYWRpbmcgPSBoZWFkaW5ncy5maW5kKChoOiBDaGFydEFjY291bnRzSGVhZGluZykgPT4gaC5pZCA9PT0gY2EuaGVhZGluZz8uaWQpO1xuXG4gICAgICAgICAgICBpZiAoIWhlYWRpbmcpIHtcbiAgICAgICAgICAgICAgaGVhZGluZyA9IHBsYWluVG9DbGFzcyhDaGFydEFjY291bnRzSGVhZGluZywgY2EuaGVhZGluZyk7XG4gICAgICAgICAgICAgIGhlYWRpbmcuY2hhcnRBY2NvdW50cyA9IFtdO1xuICAgICAgICAgICAgICBoZWFkaW5ncy5wdXNoKGhlYWRpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBoZWFkaW5nLmNoYXJ0QWNjb3VudHMucHVzaChjYSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGhlYWRpbmdzO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaGVhZGluZyBvZiBjaGFydCBhY2NvdW50cyBieSBpdCBJZFxuICAgKiBAcGFyYW0gaWRcbiAgICovXG4gIGdldEhlYWRpbmdCeUNoYXJ0QWNjb3VudHNJZChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxDaGFydEFjY291bnRzSGVhZGluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldENoYXJ0QWNjb3VudHNCeUlkKGlkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoY2hhcnRBY2NvdW50czogQ2hhcnRBY2NvdW50cykgPT4ge1xuICAgICAgICAgIHJldHVybiBjaGFydEFjY291bnRzLmhlYWRpbmc7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjaGFydCBhY2NvdW50cyBieSBJZFxuICAgKiBAcGFyYW0gaWRcbiAgICovXG4gIGdldENoYXJ0QWNjb3VudHNCeUlkKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPENoYXJ0QWNjb3VudHM+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGFydEFjY291bnRzKClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGNoYXJ0QWNjb3VudHNMaXN0OiBDaGFydEFjY291bnRzW10pID0+IHtcbiAgICAgICAgICByZXR1cm4gY2hhcnRBY2NvdW50c0xpc3QuZmluZCgoY2hhcnRBY2NvdW50czogQ2hhcnRBY2NvdW50cykgPT4gY2hhcnRBY2NvdW50cy5pZCA9PT0gaWQpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,77 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { RestService } from '../rest/rest.service';
3
+ import cloneDeep from 'lodash/cloneDeep';
4
+ import { replace } from '../../../functions/array';
5
+ import { plainToClass } from 'class-transformer';
6
+ import { Chat } from '../../../models/chat/chat';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common/http";
9
+ import * as i2 from "../../event/event-dispatcher.service";
10
+ import * as i3 from "../../event/sse.service";
11
+ /**
12
+ * Service for work with chats
13
+ */
14
+ export class ChatService extends RestService {
15
+ constructor(http, eventDispatcherService, environment, sseService) {
16
+ super(http, eventDispatcherService, environment);
17
+ this.http = http;
18
+ this.eventDispatcherService = eventDispatcherService;
19
+ this.environment = environment;
20
+ this.sseService = sseService;
21
+ this.modelClass = Chat;
22
+ this.url = 'chats';
23
+ this.isHydra = true;
24
+ this.listenEvents();
25
+ }
26
+ /**
27
+ * SSE and Event Dispatcher Services listeners
28
+ */
29
+ listenEvents() {
30
+ this.listenChats();
31
+ }
32
+ /**
33
+ * Listen chats events
34
+ */
35
+ listenChats() {
36
+ this.sseService.on(`chats`).subscribe((chatBase) => {
37
+ let cache = cloneDeep(this.cache);
38
+ // chat instance from event
39
+ const eventChat = plainToClass(Chat, chatBase);
40
+ // chat instance from cache
41
+ const cachedChat = cache.find((chat) => chat.id === eventChat.id);
42
+ switch (true) {
43
+ // add new chat
44
+ case (!cachedChat):
45
+ cache.push(eventChat);
46
+ break;
47
+ // remove deactivated chat
48
+ case !eventChat.isActive():
49
+ cache = cache.filter((chat) => chat.id !== eventChat.id);
50
+ break;
51
+ // update chat with new firm (reassign)
52
+ case eventChat.employee.id !== cachedChat.employee.id:
53
+ replace(cache, eventChat);
54
+ break;
55
+ // @TODO typing works bad with mat-tabs on user-area. Need to refactor typing functionality
56
+ // update cache with typing user
57
+ // default:
58
+ // cachedChat.typingUsers.push(new User(eventChat.typingUser));
59
+ // replace(cache, _.clone(cachedChat));
60
+ }
61
+ this.cache = cache;
62
+ this.updateCache();
63
+ });
64
+ }
65
+ }
66
+ ChatService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ChatService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }, { token: i3.SseService }], target: i0.ɵɵFactoryTarget.Injectable });
67
+ ChatService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ChatService, providedIn: 'root' });
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ChatService, decorators: [{
69
+ type: Injectable,
70
+ args: [{
71
+ providedIn: 'root'
72
+ }]
73
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
74
+ type: Inject,
75
+ args: ['environment']
76
+ }] }, { type: i3.SseService }]; } });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvY2hhdC9jaGF0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7OztBQUdqRDs7R0FFRztBQUlILE1BQU0sT0FBTyxXQUFZLFNBQVEsV0FBMkI7SUFLMUQsWUFDWSxJQUFnQixFQUNoQixzQkFBOEMsRUFDdkIsV0FBZ0IsRUFDekMsVUFBc0I7UUFFOUIsS0FBSyxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUx2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUFDekMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVJoQyxlQUFVLEdBQWdCLElBQUksQ0FBQztRQUMvQixRQUFHLEdBQVcsT0FBTyxDQUFDO1FBQ3RCLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFTdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWtCLEVBQVEsRUFBRTtZQUNqRSxJQUFJLEtBQUssR0FBVyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLDJCQUEyQjtZQUMzQixNQUFNLFNBQVMsR0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3JELDJCQUEyQjtZQUMzQixNQUFNLFVBQVUsR0FBUyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBVSxFQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV2RixRQUFRLElBQUksRUFBRTtnQkFDWixlQUFlO2dCQUNmLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQztvQkFDaEIsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDdEIsTUFBTTtnQkFFUiwwQkFBMEI7Z0JBQzFCLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFO29CQUN4QixLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVUsRUFBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3hFLE1BQU07Z0JBRVIsdUNBQXVDO2dCQUN2QyxLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDbkQsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDMUIsTUFBTTtnQkFFUiwyRkFBMkY7Z0JBQzNGLGdDQUFnQztnQkFDaEMsV0FBVztnQkFDVCwrREFBK0Q7Z0JBQy9ELHVDQUF1QzthQUMxQztZQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O3lHQTNEVSxXQUFXLGtGQVFaLGFBQWE7NkdBUlosV0FBVyxjQUZWLE1BQU07NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVNJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhdCBhcyBDaGF0QmFzZSB9IGZyb20gJy4uLy4uLy4uL2RiL01vZGVscy9jaGF0JztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBTc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXZlbnQvc3NlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvZXZlbnQtbGlzdGVuZXIuaW50ZXJmYWNlJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQgeyByZXBsYWNlIH0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zL2FycmF5JztcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IENoYXQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY2hhdC9jaGF0JztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9ldmVudC9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIHdvcmsgd2l0aCBjaGF0c1xuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDaGF0U2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPENoYXRCYXNlLCBDaGF0PiBpbXBsZW1lbnRzIElFdmVudExpc3RlbmVyIHtcbiAgbW9kZWxDbGFzczogdHlwZW9mIENoYXQgPSBDaGF0O1xuICB1cmw6IHN0cmluZyA9ICdjaGF0cyc7XG4gIGlzSHlkcmE6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCBldmVudERpc3BhdGNoZXJTZXJ2aWNlOiBFdmVudERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJvdGVjdGVkIGVudmlyb25tZW50OiBhbnksXG4gICAgcHJpdmF0ZSBzc2VTZXJ2aWNlOiBTc2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGh0dHAsIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsIGVudmlyb25tZW50KTtcbiAgICB0aGlzLmxpc3RlbkV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNTRSBhbmQgRXZlbnQgRGlzcGF0Y2hlciBTZXJ2aWNlcyBsaXN0ZW5lcnNcbiAgICovXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbkNoYXRzKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGNoYXRzIGV2ZW50c1xuICAgKi9cbiAgbGlzdGVuQ2hhdHMoKTogdm9pZCB7XG4gICAgdGhpcy5zc2VTZXJ2aWNlLm9uKGBjaGF0c2ApLnN1YnNjcmliZSgoY2hhdEJhc2U6IENoYXRCYXNlKTogdm9pZCA9PiB7XG4gICAgICBsZXQgY2FjaGU6IENoYXRbXSA9IGNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgIC8vIGNoYXQgaW5zdGFuY2UgZnJvbSBldmVudFxuICAgICAgY29uc3QgZXZlbnRDaGF0OiBDaGF0ID0gcGxhaW5Ub0NsYXNzKENoYXQsIGNoYXRCYXNlKTtcbiAgICAgIC8vIGNoYXQgaW5zdGFuY2UgZnJvbSBjYWNoZVxuICAgICAgY29uc3QgY2FjaGVkQ2hhdDogQ2hhdCA9IGNhY2hlLmZpbmQoKGNoYXQ6IENoYXQpOiBib29sZWFuID0+IGNoYXQuaWQgPT09IGV2ZW50Q2hhdC5pZCk7XG5cbiAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAvLyBhZGQgbmV3IGNoYXRcbiAgICAgICAgY2FzZSAoIWNhY2hlZENoYXQpOlxuICAgICAgICAgIGNhY2hlLnB1c2goZXZlbnRDaGF0KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyByZW1vdmUgZGVhY3RpdmF0ZWQgY2hhdFxuICAgICAgICBjYXNlICFldmVudENoYXQuaXNBY3RpdmUoKTpcbiAgICAgICAgICBjYWNoZSA9IGNhY2hlLmZpbHRlcigoY2hhdDogQ2hhdCk6IGJvb2xlYW4gPT4gY2hhdC5pZCAhPT0gZXZlbnRDaGF0LmlkKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyB1cGRhdGUgY2hhdCB3aXRoIG5ldyBmaXJtIChyZWFzc2lnbilcbiAgICAgICAgY2FzZSBldmVudENoYXQuZW1wbG95ZWUuaWQgIT09IGNhY2hlZENoYXQuZW1wbG95ZWUuaWQ6XG4gICAgICAgICAgcmVwbGFjZShjYWNoZSwgZXZlbnRDaGF0KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBAVE9ETyB0eXBpbmcgd29ya3MgYmFkIHdpdGggbWF0LXRhYnMgb24gdXNlci1hcmVhLiBOZWVkIHRvIHJlZmFjdG9yIHR5cGluZyBmdW5jdGlvbmFsaXR5XG4gICAgICAgIC8vIHVwZGF0ZSBjYWNoZSB3aXRoIHR5cGluZyB1c2VyXG4gICAgICAgIC8vIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gY2FjaGVkQ2hhdC50eXBpbmdVc2Vycy5wdXNoKG5ldyBVc2VyKGV2ZW50Q2hhdC50eXBpbmdVc2VyKSk7XG4gICAgICAgICAgLy8gcmVwbGFjZShjYWNoZSwgXy5jbG9uZShjYWNoZWRDaGF0KSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FjaGUgPSBjYWNoZTtcbiAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,65 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import _ from 'lodash';
3
+ import { replace } from '../../../../functions/array';
4
+ import { plainToClass } from 'class-transformer';
5
+ import { Message } from '../../../../models/chat/message';
6
+ import { RestService } from '../../rest/rest.service';
7
+ import { AppEvent } from '../../../../models/event/app-event';
8
+ import { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/common/http";
11
+ import * as i2 from "../../../event/event-dispatcher.service";
12
+ import * as i3 from "../../../event/sse.service";
13
+ /**
14
+ * Service for work with messages
15
+ */
16
+ export class MessageService extends RestService {
17
+ constructor(http, eventDispatcherService, environment, sseService) {
18
+ super(http, eventDispatcherService, environment);
19
+ this.http = http;
20
+ this.eventDispatcherService = eventDispatcherService;
21
+ this.environment = environment;
22
+ this.sseService = sseService;
23
+ this.modelClass = Message;
24
+ this.url = 'messages';
25
+ this.isHydra = true;
26
+ this.listenEvents();
27
+ }
28
+ /**
29
+ * SSE and Event Dispatcher Services listeners
30
+ */
31
+ listenEvents() {
32
+ this.listenMessages();
33
+ }
34
+ /**
35
+ * subscribe to new chat messages
36
+ */
37
+ listenMessages() {
38
+ this.sseService.on(`messages`).subscribe((messageBase) => {
39
+ const message = plainToClass(Message, messageBase);
40
+ const cache = _.clone(this.cache);
41
+ // update existing message if read and add new message if not read
42
+ if (message.isRead()) {
43
+ replace(cache, message);
44
+ }
45
+ else {
46
+ cache.push(message);
47
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.MESSAGE_CREATED, message));
48
+ }
49
+ this.cache = cache;
50
+ this.cacheSubject.next(this.cache);
51
+ });
52
+ }
53
+ }
54
+ MessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: MessageService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }, { token: i3.SseService }], target: i0.ɵɵFactoryTarget.Injectable });
55
+ MessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: MessageService, providedIn: 'root' });
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: MessageService, decorators: [{
57
+ type: Injectable,
58
+ args: [{
59
+ providedIn: 'root'
60
+ }]
61
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
62
+ type: Inject,
63
+ args: ['environment']
64
+ }] }, { type: i3.SseService }]; } });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvY2hhdC9tZXNzYWdlL21lc3NhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUluRCxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7QUFFaEY7O0dBRUc7QUFJSCxNQUFNLE9BQU8sY0FBZSxTQUFRLFdBQWlDO0lBS25FLFlBQ1ksSUFBZ0IsRUFDaEIsc0JBQThDLEVBQ3ZCLFdBQWdCLEVBQ3pDLFVBQXNCO1FBRTlCLEtBQUssQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFMdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBQ3pDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFSaEMsZUFBVSxHQUFtQixPQUFPLENBQUM7UUFDckMsUUFBRyxHQUFXLFVBQVUsQ0FBQztRQUN6QixZQUFPLEdBQVksSUFBSSxDQUFDO1FBU3RCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBd0IsRUFBUSxFQUFFO1lBQzFFLE1BQU0sT0FBTyxHQUFZLFlBQVksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDNUQsTUFBTSxLQUFLLEdBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0Msa0VBQWtFO1lBQ2xFLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNwQixPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3pCO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDL0Y7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs0R0F2Q1UsY0FBYyxrRkFRZixhQUFhO2dIQVJaLGNBQWMsY0FGYixNQUFNOzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2UgYXMgTWVzc2FnZUJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kYi9Nb2RlbHMvbWVzc2FnZSc7XG5pbXBvcnQgeyBJRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvZXZlbnQtbGlzdGVuZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcmVwbGFjZSB9IGZyb20gJy4uLy4uLy4uLy4uL2Z1bmN0aW9ucy9hcnJheSc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2NoYXQvbWVzc2FnZSc7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3Jlc3QvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9ldmVudC9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3NlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2V2ZW50L3NzZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudCc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIHdvcmsgd2l0aCBtZXNzYWdlc1xuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlU2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPE1lc3NhZ2VCYXNlLCBNZXNzYWdlPiBpbXBsZW1lbnRzIElFdmVudExpc3RlbmVyIHtcbiAgbW9kZWxDbGFzczogdHlwZW9mIE1lc3NhZ2UgPSBNZXNzYWdlO1xuICB1cmw6IHN0cmluZyA9ICdtZXNzYWdlcyc7XG4gIGlzSHlkcmE6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCBldmVudERpc3BhdGNoZXJTZXJ2aWNlOiBFdmVudERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJvdGVjdGVkIGVudmlyb25tZW50OiBhbnksXG4gICAgcHJpdmF0ZSBzc2VTZXJ2aWNlOiBTc2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGh0dHAsIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsIGVudmlyb25tZW50KTtcbiAgICB0aGlzLmxpc3RlbkV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNTRSBhbmQgRXZlbnQgRGlzcGF0Y2hlciBTZXJ2aWNlcyBsaXN0ZW5lcnNcbiAgICovXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3Rlbk1lc3NhZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogc3Vic2NyaWJlIHRvIG5ldyBjaGF0IG1lc3NhZ2VzXG4gICAqL1xuICBwcml2YXRlIGxpc3Rlbk1lc3NhZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuc3NlU2VydmljZS5vbihgbWVzc2FnZXNgKS5zdWJzY3JpYmUoKG1lc3NhZ2VCYXNlOiBNZXNzYWdlQmFzZSk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZSA9IHBsYWluVG9DbGFzcyhNZXNzYWdlLCBtZXNzYWdlQmFzZSk7XG4gICAgICBjb25zdCBjYWNoZTogTWVzc2FnZVtdID0gXy5jbG9uZSh0aGlzLmNhY2hlKTtcbiAgICAgIC8vIHVwZGF0ZSBleGlzdGluZyBtZXNzYWdlIGlmIHJlYWQgYW5kIGFkZCBuZXcgbWVzc2FnZSBpZiBub3QgcmVhZFxuICAgICAgaWYgKG1lc3NhZ2UuaXNSZWFkKCkpIHtcbiAgICAgICAgcmVwbGFjZShjYWNoZSwgbWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZS5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uTUVTU0FHRV9DUkVBVEVELCBtZXNzYWdlKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG4gICAgICB0aGlzLmNhY2hlU3ViamVjdC5uZXh0KHRoaXMuY2FjaGUpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,118 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { combineLatest, ReplaySubject } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import _ from 'lodash';
5
+ import { plainToClass } from 'class-transformer';
6
+ import { MessageDocument } from '../../../../models/chat/message-document';
7
+ import { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';
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
+ // @TODO improve base rest service and extend it
12
+ /**
13
+ * Service for work with Message Documents
14
+ */
15
+ export class MessageDocumentService {
16
+ constructor(http, eventDispatcherService, environment) {
17
+ this.http = http;
18
+ this.eventDispatcherService = eventDispatcherService;
19
+ this.environment = environment;
20
+ this.url = 'message-documents';
21
+ this.cacheSubject = new ReplaySubject();
22
+ this.listenEvents();
23
+ }
24
+ /**
25
+ * SSE and Event Dispatcher Services listeners
26
+ */
27
+ listenEvents() {
28
+ this.listenMessages();
29
+ }
30
+ /**
31
+ * listen new messages event to update documents cache
32
+ */
33
+ listenMessages() {
34
+ this.eventDispatcherService.on(AppEventTypeEnum.MESSAGE_CREATED).subscribe((message) => {
35
+ if (message.documents.length) {
36
+ const cache = _.clone(this.cache);
37
+ const documentsIds = this.cache.map((d) => d.id);
38
+ message.documents.forEach((d) => {
39
+ d.chat = message.chat;
40
+ if (!documentsIds.includes(d.id)) {
41
+ cache.push(...message.documents);
42
+ }
43
+ });
44
+ this.cache = cache;
45
+ this.cacheSubject.next(this.cache);
46
+ }
47
+ });
48
+ }
49
+ /**
50
+ * get list of message documents
51
+ */
52
+ get() {
53
+ if (!this.cache) {
54
+ this.http.get(`${this.environment.apiV2}/${this.url}`)
55
+ .pipe(map((response) => {
56
+ return response['hydra:member'].map((docBase) => plainToClass(MessageDocument, docBase));
57
+ }))
58
+ .subscribe((documents) => {
59
+ this.cache = documents;
60
+ this.cacheSubject.next(this.cache);
61
+ });
62
+ }
63
+ return this.cacheSubject.asObservable();
64
+ }
65
+ /**
66
+ * Upload file to chat
67
+ * @param chatId
68
+ * @param file
69
+ */
70
+ add(chatId, file) {
71
+ const formData = new FormData();
72
+ formData.append('file', file);
73
+ formData.append('chat', chatId.toString());
74
+ return this.http.post(`${this.environment.apiV2}/${this.url}`, formData)
75
+ .pipe(map((documentBase) => {
76
+ const document = plainToClass(MessageDocument, documentBase);
77
+ const cache = _.clone(this.cache);
78
+ cache.push(document);
79
+ this.cache = cache;
80
+ this.cacheSubject.next(this.cache);
81
+ return document;
82
+ }));
83
+ }
84
+ /**
85
+ * Upload multiple files to chat
86
+ * @param chatId
87
+ * @param files
88
+ */
89
+ addBatch(chatId, files) {
90
+ return combineLatest(files.map((file) => this.add(chatId, file))).pipe(map((docsBase) => {
91
+ return docsBase.map((docBase) => plainToClass(MessageDocument, docBase));
92
+ }));
93
+ }
94
+ /**
95
+ * Delete uploaded chat document
96
+ * @param chatId
97
+ * @param documentId
98
+ */
99
+ delete(chatId, documentId) {
100
+ return this.http.delete(`${this.environment.apiV2}/${this.url}/${documentId}`)
101
+ .pipe(map(() => {
102
+ this.cache = this.cache.filter((document) => document.id !== documentId);
103
+ this.cacheSubject.next(this.cache);
104
+ }));
105
+ }
106
+ }
107
+ MessageDocumentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: MessageDocumentService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
108
+ MessageDocumentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: MessageDocumentService, providedIn: 'root' });
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: MessageDocumentService, decorators: [{
110
+ type: Injectable,
111
+ args: [{
112
+ providedIn: 'root'
113
+ }]
114
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
115
+ type: Inject,
116
+ args: ['environment']
117
+ }] }]; } });
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1kb2N1bWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvY2hhdC9tZXNzYWdlLWRvY3VtZW50L21lc3NhZ2UtZG9jdW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsYUFBYSxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7QUFHaEYsZ0RBQWdEO0FBQ2hEOztHQUVHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUNZLElBQWdCLEVBQ2hCLHNCQUE4QyxFQUN2QixXQUFnQjtRQUZ2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUFQbkQsUUFBRyxHQUFXLG1CQUFtQixDQUFDO1FBRWxDLGlCQUFZLEdBQThELElBQUksYUFBYSxFQUE4QyxDQUFDO1FBT3hJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJ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c0IsY0FGckIsTUFBTTs0RkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2VEb2N1bWVudCBhcyBNZXNzYWdlRG9jdW1lbnRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGIvTW9kZWxzL21lc3NhZ2UtZG9jdW1lbnQnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElFdmVudExpc3RlbmVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9ldmVudC1saXN0ZW5lci5pbnRlcmZhY2UnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IE1lc3NhZ2VEb2N1bWVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9jaGF0L21lc3NhZ2UtZG9jdW1lbnQnO1xuaW1wb3J0IHsgRXZlbnREaXNwYXRjaGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2V2ZW50L2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9jaGF0L21lc3NhZ2UnO1xuXG4vLyBAVE9ETyBpbXByb3ZlIGJhc2UgcmVzdCBzZXJ2aWNlIGFuZCBleHRlbmQgaXRcbi8qKlxuICogU2VydmljZSBmb3Igd29yayB3aXRoIE1lc3NhZ2UgRG9jdW1lbnRzXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VEb2N1bWVudFNlcnZpY2UgaW1wbGVtZW50cyBJRXZlbnRMaXN0ZW5lciB7XG4gIHVybDogc3RyaW5nID0gJ21lc3NhZ2UtZG9jdW1lbnRzJztcbiAgY2FjaGU6IFJlYWRvbmx5PEFycmF5PFJlYWRvbmx5PE1lc3NhZ2VEb2N1bWVudD4+PjtcbiAgY2FjaGVTdWJqZWN0OiBSZXBsYXlTdWJqZWN0PFJlYWRvbmx5PEFycmF5PFJlYWRvbmx5PE1lc3NhZ2VEb2N1bWVudD4+Pj4gPSBuZXcgUmVwbGF5U3ViamVjdDxSZWFkb25seTxBcnJheTxSZWFkb25seTxNZXNzYWdlRG9jdW1lbnQ+Pj4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcbiAgICB0aGlzLmxpc3RlbkV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNTRSBhbmQgRXZlbnQgRGlzcGF0Y2hlciBTZXJ2aWNlcyBsaXN0ZW5lcnNcbiAgICovXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3Rlbk1lc3NhZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogbGlzdGVuIG5ldyBtZXNzYWdlcyBldmVudCB0byB1cGRhdGUgZG9jdW1lbnRzIGNhY2hlXG4gICAqL1xuICBsaXN0ZW5NZXNzYWdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5NRVNTQUdFX0NSRUFURUQpLnN1YnNjcmliZSgobWVzc2FnZTogTWVzc2FnZSk6IHZvaWQgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2UuZG9jdW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjYWNoZTogTWVzc2FnZURvY3VtZW50W10gPSBfLmNsb25lKHRoaXMuY2FjaGUpO1xuICAgICAgICBjb25zdCBkb2N1bWVudHNJZHM6IG51bWJlcltdID0gdGhpcy5jYWNoZS5tYXAoKGQ6IE1lc3NhZ2VEb2N1bWVudCk6IG51bWJlciA9PiBkLmlkKTtcbiAgICAgICAgbWVzc2FnZS5kb2N1bWVudHMuZm9yRWFjaCgoZDogTWVzc2FnZURvY3VtZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgZC5jaGF0ID0gbWVzc2FnZS5jaGF0O1xuICAgICAgICAgIGlmICghZG9jdW1lbnRzSWRzLmluY2x1ZGVzKGQuaWQpKSB7XG4gICAgICAgICAgICBjYWNoZS5wdXNoKC4uLm1lc3NhZ2UuZG9jdW1lbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG4gICAgICAgIHRoaXMuY2FjaGVTdWJqZWN0Lm5leHQodGhpcy5jYWNoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGxpc3Qgb2YgbWVzc2FnZSBkb2N1bWVudHNcbiAgICovXG4gIGdldCgpOiBPYnNlcnZhYmxlPFJlYWRvbmx5PE1lc3NhZ2VEb2N1bWVudFtdPj4ge1xuICAgIGlmICghdGhpcy5jYWNoZSkge1xuICAgICAgdGhpcy5odHRwLmdldChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfWApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgocmVzcG9uc2U6IG9iamVjdCk6IE1lc3NhZ2VEb2N1bWVudFtdID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZVsnaHlkcmE6bWVtYmVyJ10ubWFwKChkb2NCYXNlOiBNZXNzYWdlRG9jdW1lbnRCYXNlKTogTWVzc2FnZURvY3VtZW50ID0+IHBsYWluVG9DbGFzcyhNZXNzYWdlRG9jdW1lbnQsIGRvY0Jhc2UpKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGRvY3VtZW50czogTWVzc2FnZURvY3VtZW50W10pOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmNhY2hlID0gZG9jdW1lbnRzO1xuICAgICAgICAgIHRoaXMuY2FjaGVTdWJqZWN0Lm5leHQodGhpcy5jYWNoZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhY2hlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgZmlsZSB0byBjaGF0XG4gICAqIEBwYXJhbSBjaGF0SWRcbiAgICogQHBhcmFtIGZpbGVcbiAgICovXG4gIGFkZChjaGF0SWQ6IG51bWJlciwgZmlsZTogRmlsZSk6IE9ic2VydmFibGU8TWVzc2FnZURvY3VtZW50PiB7XG4gICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdjaGF0JywgY2hhdElkLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9YCwgZm9ybURhdGEpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChkb2N1bWVudEJhc2U6IE1lc3NhZ2VEb2N1bWVudEJhc2UpOiBNZXNzYWdlRG9jdW1lbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGRvY3VtZW50OiBNZXNzYWdlRG9jdW1lbnQgPSBwbGFpblRvQ2xhc3MoTWVzc2FnZURvY3VtZW50LCBkb2N1bWVudEJhc2UpO1xuICAgICAgICAgIGNvbnN0IGNhY2hlOiBNZXNzYWdlRG9jdW1lbnRbXSA9IF8uY2xvbmUodGhpcy5jYWNoZSk7XG4gICAgICAgICAgY2FjaGUucHVzaChkb2N1bWVudCk7XG4gICAgICAgICAgdGhpcy5jYWNoZSA9IGNhY2hlO1xuICAgICAgICAgIHRoaXMuY2FjaGVTdWJqZWN0Lm5leHQodGhpcy5jYWNoZSk7XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgbXVsdGlwbGUgZmlsZXMgdG8gY2hhdFxuICAgKiBAcGFyYW0gY2hhdElkXG4gICAqIEBwYXJhbSBmaWxlc1xuICAgKi9cbiAgYWRkQmF0Y2goY2hhdElkOiBudW1iZXIsIGZpbGVzOiBGaWxlW10pOiBPYnNlcnZhYmxlPE1lc3NhZ2VEb2N1bWVudFtdPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoXG4gICAgICBmaWxlcy5tYXAoKGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPE1lc3NhZ2VEb2N1bWVudD4gPT4gdGhpcy5hZGQoY2hhdElkLCBmaWxlKSlcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKGRvY3NCYXNlOiBNZXNzYWdlRG9jdW1lbnRCYXNlW10pOiBNZXNzYWdlRG9jdW1lbnRbXSA9PiB7XG4gICAgICAgIHJldHVybiBkb2NzQmFzZS5tYXAoKGRvY0Jhc2U6IE1lc3NhZ2VEb2N1bWVudEJhc2UpOiBNZXNzYWdlRG9jdW1lbnQgPT4gcGxhaW5Ub0NsYXNzKE1lc3NhZ2VEb2N1bWVudCwgZG9jQmFzZSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB1cGxvYWRlZCBjaGF0IGRvY3VtZW50XG4gICAqIEBwYXJhbSBjaGF0SWRcbiAgICogQHBhcmFtIGRvY3VtZW50SWRcbiAgICovXG4gIGRlbGV0ZShjaGF0SWQ6IG51bWJlciwgZG9jdW1lbnRJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH0vJHtkb2N1bWVudElkfWApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmNhY2hlID0gdGhpcy5jYWNoZS5maWx0ZXIoKGRvY3VtZW50OiBNZXNzYWdlRG9jdW1lbnQpOiBib29sZWFuID0+IGRvY3VtZW50LmlkICE9PSBkb2N1bWVudElkKTtcbiAgICAgICAgICB0aGlzLmNhY2hlU3ViamVjdC5uZXh0KHRoaXMuY2FjaGUpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxufVxuIl19