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.
- package/bundles/taxtank-core.umd.js +180 -134
- package/bundles/taxtank-core.umd.js.map +1 -1
- package/esm2015/lib/collections/tax-summary/report-item.collection.js +141 -0
- package/esm2015/lib/db/Models/transaction-base.js +2 -1
- package/esm2015/lib/models/tax-summary/report-item-details.js +9 -0
- package/esm2015/lib/models/tax-summary/report-item.js +15 -0
- package/esm2015/lib/models/tax-summary/tax-summary-section.js +5 -5
- package/esm2015/lib/models/toast/toast-type.enum.js +8 -0
- package/esm2015/lib/models/toast/toast.js +9 -0
- package/esm2015/lib/services/http/address/address.service.js +39 -0
- package/esm2015/lib/services/http/bank/bank-account/bank-account.service.js +118 -0
- package/esm2015/lib/services/http/bank/bank-connection/bank-connection.service.js +52 -0
- package/esm2015/lib/services/http/bank/bank-transaction/bank-transaction.service.js +89 -0
- package/esm2015/lib/services/http/bank/bank.service.js +24 -0
- package/esm2015/lib/services/http/bank/basiq/basiq.service.js +94 -0
- package/esm2015/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.js +38 -0
- package/esm2015/lib/services/http/chart-accounts/chart-accounts.service.js +89 -0
- package/esm2015/lib/services/http/chat/chat.service.js +77 -0
- package/esm2015/lib/services/http/chat/message/message.service.js +65 -0
- package/esm2015/lib/services/http/chat/message-document/message-document.service.js +118 -0
- package/esm2015/lib/services/{depreciation/capital-project.service.js → http/depreciation/depreciation-capital-project/depreciation-capital-project.service.js} +7 -7
- package/esm2015/lib/services/http/depreciation/depreciation.service.js +146 -0
- package/esm2015/lib/services/http/document/document-folder/document-folder.service.js +84 -0
- package/esm2015/lib/services/{client → http/firm/client-invite}/client-invite.service.js +7 -7
- package/esm2015/lib/services/http/firm/client-movement/client-movement.service.js +98 -0
- package/esm2015/lib/services/http/firm/employee/employee.service.js +39 -0
- package/esm2015/lib/services/http/firm/employee-invite/employee-invite.service.js +53 -0
- package/esm2015/lib/services/http/firm/firm.service.js +79 -0
- package/esm2015/lib/services/http/firm/portfolio-report/client-portfolio-report.service.js +37 -0
- package/esm2015/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.js +90 -0
- package/esm2015/lib/services/http/income-source/income-source.service.js +109 -0
- package/esm2015/lib/services/http/income-source/salary-forecast/salary-forecast.service.js +90 -0
- package/esm2015/lib/services/http/income-source/sole-forecast/sole-forecast.service.js +87 -0
- package/esm2015/lib/services/http/loan/borrowing-expense/borrowing-expense.service.js +73 -0
- package/esm2015/lib/services/http/loan/loan.service.js +145 -0
- package/esm2015/lib/services/http/property/property-category/property-category.service.js +23 -0
- package/esm2015/lib/services/http/property/property-category-movement/property-category-movement.service.js +47 -0
- package/esm2015/lib/services/http/property/property-document/property-document.service.js +70 -0
- package/esm2015/lib/services/http/property/property-sale/property-sale.service.js +20 -0
- package/esm2015/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.js +21 -0
- package/esm2015/lib/services/http/property/property-share/property-share.service.js +115 -0
- package/esm2015/lib/services/http/property/property.service.js +126 -0
- package/esm2015/lib/services/http/rest/rest.service.js +190 -0
- package/esm2015/lib/services/http/service-notification/service-notification.service.js +65 -0
- package/esm2015/lib/services/http/subscription/subscription.service.js +157 -0
- package/esm2015/lib/services/http/tax-review/tax-review-history/tax-review-history.service.js +41 -0
- package/esm2015/lib/services/http/tax-review/tax-review.service.js +103 -0
- package/esm2015/lib/services/http/tax-summary/tax-summary.service.js +71 -0
- package/esm2015/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.js +85 -0
- package/esm2015/lib/services/http/transaction/transaction.service.js +319 -0
- package/esm2015/lib/services/http/user/occupation/occupation.service.js +45 -0
- package/esm2015/lib/services/http/user/user-event-setting/user-event-setting.service.js +59 -0
- package/esm2015/lib/services/http/user/user-event-type/user-event-type.service.js +29 -0
- package/esm2015/lib/services/http/user/user.service.js +124 -0
- package/esm2015/lib/services/http/vehicle/vehicle.service.js +237 -0
- package/esm2015/lib/services/property/equity-position-chart/equity-position-chart.service.js +45 -0
- package/esm2015/lib/services/toast/toast.service.js +26 -0
- package/esm2015/public-api.js +54 -51
- package/fesm2015/taxtank-core.js +98 -56
- package/fesm2015/taxtank-core.js.map +1 -1
- package/lib/collections/{tax-return-category-item.collection.d.ts → tax-summary/report-item.collection.d.ts} +5 -5
- package/lib/models/tax-summary/{tax-return-category-item-details.d.ts → report-item-details.d.ts} +2 -2
- package/lib/models/tax-summary/{tax-return-category-item.d.ts → report-item.d.ts} +4 -4
- package/lib/models/tax-summary/tax-summary-section.d.ts +2 -2
- package/lib/models/toast/toast-type.enum.d.ts +6 -0
- package/lib/models/toast/toast.d.ts +10 -0
- package/lib/services/{address → http/address}/address.service.d.ts +1 -1
- package/lib/services/{bank → http/bank/bank-account}/bank-account.service.d.ts +5 -5
- package/lib/services/{bank → http/bank/bank-connection}/bank-connection.service.d.ts +5 -5
- package/lib/services/{bank → http/bank/bank-transaction}/bank-transaction.service.d.ts +5 -5
- package/lib/services/{bank → http/bank}/bank.service.d.ts +4 -4
- package/lib/services/{bank → http/bank/basiq}/basiq.service.d.ts +7 -7
- package/lib/services/{chart-accounts → http/chart-accounts/chart-accounts-depreciations}/chart-accounts-depreciations.service.d.ts +4 -4
- package/lib/services/{chart-accounts → http/chart-accounts}/chart-accounts.service.d.ts +3 -3
- package/lib/services/{chat → http/chat}/chat.service.d.ts +7 -7
- package/lib/services/{chat → http/chat/message}/message.service.d.ts +7 -7
- package/lib/services/{chat → http/chat/message-document}/message-document.service.d.ts +3 -3
- package/lib/services/{depreciation/capital-project.service.d.ts → http/depreciation/depreciation-capital-project/depreciation-capital-project.service.d.ts} +4 -4
- package/lib/services/{depreciation → http/depreciation}/depreciation.service.d.ts +5 -5
- package/lib/services/{document → http/document/document-folder}/document-folder.service.d.ts +6 -6
- package/lib/services/{client → http/firm/client-invite}/client-invite.service.d.ts +4 -4
- package/lib/services/{client → http/firm/client-movement}/client-movement.service.d.ts +7 -7
- package/lib/services/{employee → http/firm/employee}/employee.service.d.ts +4 -4
- package/lib/services/{employee → http/firm/employee-invite}/employee-invite.service.d.ts +4 -4
- package/lib/services/{firm → http/firm}/firm.service.d.ts +2 -2
- package/lib/services/{client → http/firm/portfolio-report}/client-portfolio-report.service.d.ts +1 -1
- package/lib/services/{income-source → http/income-source/income-source-forecast}/income-source-forecast.service.d.ts +5 -5
- package/lib/services/{income-source → http/income-source}/income-source.service.d.ts +8 -8
- package/lib/services/{income-source → http/income-source/salary-forecast}/salary-forecast.service.d.ts +6 -6
- package/lib/services/{income-source → http/income-source/sole-forecast}/sole-forecast.service.d.ts +5 -5
- package/lib/services/{borrowing-expense → http/loan/borrowing-expense}/borrowing-expense.service.d.ts +2 -2
- package/lib/services/{loan → http/loan}/loan.service.d.ts +6 -6
- package/lib/services/{property → http/property}/property-category/property-category.service.d.ts +4 -4
- package/lib/services/{property → http/property/property-category-movement}/property-category-movement.service.d.ts +4 -4
- package/lib/services/{property → http/property}/property-document/property-document.service.d.ts +5 -5
- package/lib/services/http/property/property-sale/property-sale.service.d.ts +10 -0
- package/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.d.ts +11 -0
- package/lib/services/{property → http/property}/property-share/property-share.service.d.ts +5 -5
- package/lib/services/{property → http/property}/property.service.d.ts +5 -5
- package/lib/services/{base-rest.service.d.ts → http/rest/rest.service.d.ts} +4 -4
- package/lib/services/http/service-notification/service-notification.service.d.ts +31 -0
- package/lib/services/{subscription → http/subscription}/subscription.service.d.ts +6 -6
- package/lib/services/{tax-review → http/tax-review/tax-review-history}/tax-review-history.service.d.ts +5 -5
- package/lib/services/{tax-review → http/tax-review}/tax-review.service.d.ts +6 -6
- package/lib/services/{tax-summary → http/tax-summary}/tax-summary.service.d.ts +2 -2
- package/lib/services/{transaction → http/transaction/transaction-allocation}/transaction-allocation.service.d.ts +6 -6
- package/lib/services/{transaction → http/transaction}/transaction.service.d.ts +7 -7
- package/lib/services/{user → http/user/occupation}/occupation.service.d.ts +1 -1
- package/lib/services/{user-event → http/user/user-event-setting}/user-event-setting.service.d.ts +5 -5
- package/lib/services/{user-event → http/user/user-event-type}/user-event-type.service.d.ts +5 -5
- package/lib/services/{user → http/user}/user.service.d.ts +3 -3
- package/lib/services/{work/work-tank.service.d.ts → http/vehicle/vehicle.service.d.ts} +9 -8
- package/lib/services/property/{equity-position-chart.service.d.ts → equity-position-chart/equity-position-chart.service.d.ts} +1 -1
- package/lib/services/toast/toast.service.d.ts +13 -0
- package/package.json +1 -1
- package/public-api.d.ts +53 -50
- package/esm2015/lib/collections/tax-return-category-item.collection.js +0 -141
- package/esm2015/lib/models/tax-summary/tax-return-category-item-details.js +0 -9
- package/esm2015/lib/models/tax-summary/tax-return-category-item.js +0 -15
- package/esm2015/lib/services/address/address.service.js +0 -39
- package/esm2015/lib/services/bank/bank-account.service.js +0 -118
- package/esm2015/lib/services/bank/bank-connection.service.js +0 -52
- package/esm2015/lib/services/bank/bank-transaction.service.js +0 -89
- package/esm2015/lib/services/bank/bank.service.js +0 -24
- package/esm2015/lib/services/bank/basiq.service.js +0 -94
- package/esm2015/lib/services/base-rest.service.js +0 -190
- package/esm2015/lib/services/borrowing-expense/borrowing-expense.service.js +0 -73
- package/esm2015/lib/services/chart-accounts/chart-accounts-depreciations.service.js +0 -38
- package/esm2015/lib/services/chart-accounts/chart-accounts.service.js +0 -89
- package/esm2015/lib/services/chat/chat.service.js +0 -77
- package/esm2015/lib/services/chat/message-document.service.js +0 -118
- package/esm2015/lib/services/chat/message.service.js +0 -65
- package/esm2015/lib/services/client/client-movement.service.js +0 -98
- package/esm2015/lib/services/client/client-portfolio-report.service.js +0 -37
- package/esm2015/lib/services/depreciation/depreciation.service.js +0 -146
- package/esm2015/lib/services/document/document-folder.service.js +0 -84
- package/esm2015/lib/services/employee/employee-invite.service.js +0 -53
- package/esm2015/lib/services/employee/employee.service.js +0 -39
- package/esm2015/lib/services/firm/firm.service.js +0 -79
- package/esm2015/lib/services/income-source/income-source-forecast.service.js +0 -90
- package/esm2015/lib/services/income-source/income-source.service.js +0 -109
- package/esm2015/lib/services/income-source/salary-forecast.service.js +0 -90
- package/esm2015/lib/services/income-source/sole-forecast.service.js +0 -87
- package/esm2015/lib/services/loan/loan.service.js +0 -145
- package/esm2015/lib/services/notification/notification.service.js +0 -65
- package/esm2015/lib/services/property/equity-position-chart.service.js +0 -45
- package/esm2015/lib/services/property/property-category/property-category.service.js +0 -23
- package/esm2015/lib/services/property/property-category-movement.service.js +0 -47
- package/esm2015/lib/services/property/property-document/property-document.service.js +0 -70
- package/esm2015/lib/services/property/property-sale/property-sale.service.js +0 -20
- package/esm2015/lib/services/property/property-sale/tax-exemption/tax-exemption.service.js +0 -21
- package/esm2015/lib/services/property/property-share/property-share.service.js +0 -115
- package/esm2015/lib/services/property/property.service.js +0 -126
- package/esm2015/lib/services/subscription/subscription.service.js +0 -157
- package/esm2015/lib/services/tax-review/tax-review-history.service.js +0 -41
- package/esm2015/lib/services/tax-review/tax-review.service.js +0 -103
- package/esm2015/lib/services/tax-summary/tax-summary.service.js +0 -71
- package/esm2015/lib/services/transaction/transaction-allocation.service.js +0 -85
- package/esm2015/lib/services/transaction/transaction.service.js +0 -319
- package/esm2015/lib/services/user/occupation.service.js +0 -45
- package/esm2015/lib/services/user/user.service.js +0 -124
- package/esm2015/lib/services/user-event/user-event-setting.service.js +0 -59
- package/esm2015/lib/services/user-event/user-event-type.service.js +0 -29
- package/esm2015/lib/services/work/work-tank.service.js +0 -236
- package/lib/services/notification/notification.service.d.ts +0 -31
- package/lib/services/property/property-sale/property-sale.service.d.ts +0 -10
- package/lib/services/property/property-sale/tax-exemption/tax-exemption.service.d.ts +0 -11
|
@@ -0,0 +1,115 @@
|
|
|
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 { PropertyShare } from '../../../../models/property/property-share';
|
|
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
|
+
// @TODO check and improve logic during refactoring
|
|
13
|
+
export class PropertyShareService 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
|
+
// api url parameter for properties shares
|
|
20
|
+
this.url = 'properties/shares';
|
|
21
|
+
this.modelClass = PropertyShare;
|
|
22
|
+
this.listenEvents();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Listen to Event Dispatcher events
|
|
26
|
+
*/
|
|
27
|
+
listenEvents() {
|
|
28
|
+
this.listenUserUpdated();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Updated loan
|
|
32
|
+
*/
|
|
33
|
+
update(propertyShare) {
|
|
34
|
+
return this.http.put(`${this.environment.apiV2}/${this.url}/${propertyShare.id}`, propertyShare)
|
|
35
|
+
.pipe(map((updatedPropertyShareBase) => {
|
|
36
|
+
const updatedPropertyShare = plainToClass(PropertyShare, updatedPropertyShareBase);
|
|
37
|
+
// if loan type is NOT vehicle - fire EventDispatcher event
|
|
38
|
+
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_SHARE_UPDATED, null));
|
|
39
|
+
replace(this.cache, updatedPropertyShare);
|
|
40
|
+
this.updateCache();
|
|
41
|
+
return updatedPropertyShare;
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Re-invite property share
|
|
46
|
+
* @param share user to share property
|
|
47
|
+
*/
|
|
48
|
+
reinvite(share) {
|
|
49
|
+
return this.http.post(`${this.environment.apiV2}/${this.url}/${share.id}/reinvite`, {});
|
|
50
|
+
}
|
|
51
|
+
getIncoming() {
|
|
52
|
+
return this.get()
|
|
53
|
+
.pipe(map((propertyShares) => {
|
|
54
|
+
const propertySharesIncoming = [];
|
|
55
|
+
propertyShares.forEach((propertyShare) => {
|
|
56
|
+
var _a;
|
|
57
|
+
if (((_a = propertyShare.user) === null || _a === void 0 ? void 0 : _a.isLoggedIn()) && propertyShare.isPending() && propertyShare.property.user.id !== +localStorage.getItem('userId')) {
|
|
58
|
+
propertySharesIncoming.push(propertyShare);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
return propertySharesIncoming;
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get outcoming property shares list
|
|
66
|
+
*/
|
|
67
|
+
getOutcoming() {
|
|
68
|
+
return this.get().pipe(map((propertyShares) => {
|
|
69
|
+
return this.filterOutcoming(propertyShares);
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Filter outcoming property shares
|
|
74
|
+
*/
|
|
75
|
+
filterOutcoming(propertyShares) {
|
|
76
|
+
const propertySharesOutcoming = [];
|
|
77
|
+
propertyShares.forEach((propertyShare) => {
|
|
78
|
+
var _a;
|
|
79
|
+
if (!((_a = propertyShare.user) === null || _a === void 0 ? void 0 : _a.isLoggedIn())) {
|
|
80
|
+
propertySharesOutcoming.push(propertyShare);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
return propertySharesOutcoming;
|
|
84
|
+
}
|
|
85
|
+
getByPropertyId(propertyId) {
|
|
86
|
+
return this.get()
|
|
87
|
+
.pipe(map((propertyShares) => {
|
|
88
|
+
return propertyShares.filter((propertyShare) => propertyShare.property.id === propertyId);
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Listen to User updated event
|
|
93
|
+
*/
|
|
94
|
+
listenUserUpdated() {
|
|
95
|
+
this.eventDispatcherService.on(AppEventTypeEnum.USER_UPDATED)
|
|
96
|
+
.subscribe(() => {
|
|
97
|
+
this.fetch().subscribe((propertyShares) => {
|
|
98
|
+
this.cache = propertyShares;
|
|
99
|
+
this.updateCache();
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
PropertyShareService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyShareService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
105
|
+
PropertyShareService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyShareService, providedIn: 'root' });
|
|
106
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyShareService, decorators: [{
|
|
107
|
+
type: Injectable,
|
|
108
|
+
args: [{
|
|
109
|
+
providedIn: 'root'
|
|
110
|
+
}]
|
|
111
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
|
|
112
|
+
type: Inject,
|
|
113
|
+
args: ['environment']
|
|
114
|
+
}] }]; } });
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktc2hhcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3Byb3BlcnR5L3Byb3BlcnR5LXNoYXJlL3Byb3BlcnR5LXNoYXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7QUFFaEYsbURBQW1EO0FBSW5ELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxXQUE2QztJQUtyRixZQUNZLElBQWdCLEVBQ2hCLHNCQUE4QyxFQUN2QixXQUFnQjtRQUVqRCxLQUFLLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBSnZDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN2QixnQkFBVyxHQUFYLFdBQVcsQ0FBSztRQVBuRCwwQ0FBMEM7UUFDMUMsUUFBRyxHQUFXLG1CQUFtQixDQUFDO1FBQ2xDLGVBQVUsR0FBRyxhQUFhLENBQUM7UUFRekIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RC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Q3hDLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQTRCLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQzNHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7YUFDMUQsU0FBUyxDQUFDLEdBQVMsRUFBRTtZQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsY0FBK0IsRUFBRSxFQUFFO2dCQUN6RCxJQUFJLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztrSEEzR1Usb0JBQW9CLGtGQVFyQixhQUFhO3NIQVJaLG9CQUFvQixjQUZuQixNQUFNOzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVNJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJvcGVydHlTaGFyZSBhcyBQcm9wZXJ0eVNoYXJlQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL2RiL01vZGVscy9wcm9wZXJ0eS9wcm9wZXJ0eS1zaGFyZSc7XG5pbXBvcnQgeyByZXBsYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZnVuY3Rpb25zL2FycmF5JztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IFByb3BlcnR5U2hhcmUgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcHJvcGVydHkvcHJvcGVydHktc2hhcmUnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBBcHBFdmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ldmVudC9hcHAtZXZlbnQnO1xuaW1wb3J0IHsgQXBwRXZlbnRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ldmVudC9hcHAtZXZlbnQtdHlwZS5lbnVtJztcblxuLy8gQFRPRE8gY2hlY2sgYW5kIGltcHJvdmUgbG9naWMgZHVyaW5nIHJlZmFjdG9yaW5nXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eVNoYXJlU2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPFByb3BlcnR5U2hhcmVCYXNlLCBQcm9wZXJ0eVNoYXJlPiB7XG4gIC8vIGFwaSB1cmwgcGFyYW1ldGVyIGZvciBwcm9wZXJ0aWVzIHNoYXJlc1xuICB1cmw6IHN0cmluZyA9ICdwcm9wZXJ0aWVzL3NoYXJlcyc7XG4gIG1vZGVsQ2xhc3MgPSBQcm9wZXJ0eVNoYXJlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCBldmVudERpc3BhdGNoZXJTZXJ2aWNlOiBFdmVudERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJvdGVjdGVkIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gICAgc3VwZXIoaHR0cCwgZXZlbnREaXNwYXRjaGVyU2VydmljZSwgZW52aXJvbm1lbnQpO1xuICAgIHRoaXMubGlzdGVuRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIEV2ZW50IERpc3BhdGNoZXIgZXZlbnRzXG4gICAqL1xuICBsaXN0ZW5FdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5Vc2VyVXBkYXRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZWQgbG9hblxuICAgKi9cbiAgdXBkYXRlKHByb3BlcnR5U2hhcmU6IFByb3BlcnR5U2hhcmUpOiBPYnNlcnZhYmxlPFByb3BlcnR5U2hhcmU+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfS8ke3Byb3BlcnR5U2hhcmUuaWR9YCwgcHJvcGVydHlTaGFyZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHVwZGF0ZWRQcm9wZXJ0eVNoYXJlQmFzZTogUHJvcGVydHlTaGFyZUJhc2UpID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkUHJvcGVydHlTaGFyZTogUHJvcGVydHlTaGFyZSA9IHBsYWluVG9DbGFzcyhQcm9wZXJ0eVNoYXJlLCB1cGRhdGVkUHJvcGVydHlTaGFyZUJhc2UpO1xuICAgICAgICAgIC8vIGlmIGxvYW4gdHlwZSBpcyBOT1QgdmVoaWNsZSAtIGZpcmUgRXZlbnREaXNwYXRjaGVyIGV2ZW50XG4gICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLlBST1BFUlRZX1NIQVJFX1VQREFURUQsIG51bGwpKTtcblxuICAgICAgICAgIHJlcGxhY2UodGhpcy5jYWNoZSwgdXBkYXRlZFByb3BlcnR5U2hhcmUpO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZFByb3BlcnR5U2hhcmU7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLWludml0ZSBwcm9wZXJ0eSBzaGFyZVxuICAgKiBAcGFyYW0gc2hhcmUgdXNlciB0byBzaGFyZSBwcm9wZXJ0eVxuICAgKi9cbiAgcmVpbnZpdGUoc2hhcmU6IFByb3BlcnR5U2hhcmUpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfS8ke3NoYXJlLmlkfS9yZWludml0ZWAsIHt9KTtcbiAgfVxuXG4gIGdldEluY29taW5nKCk6IE9ic2VydmFibGU8UHJvcGVydHlTaGFyZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KClcbiAgICAgIC5waXBlKG1hcCgocHJvcGVydHlTaGFyZXM6IFByb3BlcnR5U2hhcmVbXSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eVNoYXJlc0luY29taW5nOiBQcm9wZXJ0eVNoYXJlW10gPSBbXTtcblxuICAgICAgICBwcm9wZXJ0eVNoYXJlcy5mb3JFYWNoKChwcm9wZXJ0eVNoYXJlOiBQcm9wZXJ0eVNoYXJlKSA9PiB7XG4gICAgICAgICAgaWYgKHByb3BlcnR5U2hhcmUudXNlcj8uaXNMb2dnZWRJbigpICYmIHByb3BlcnR5U2hhcmUuaXNQZW5kaW5nKCkgJiYgcHJvcGVydHlTaGFyZS5wcm9wZXJ0eS51c2VyLmlkICE9PSArbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eVNoYXJlc0luY29taW5nLnB1c2gocHJvcGVydHlTaGFyZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcHJvcGVydHlTaGFyZXNJbmNvbWluZztcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3V0Y29taW5nIHByb3BlcnR5IHNoYXJlcyBsaXN0XG4gICAqL1xuICBnZXRPdXRjb21pbmcoKTogT2JzZXJ2YWJsZTxQcm9wZXJ0eVNoYXJlW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQoKS5waXBlKFxuICAgICAgbWFwKChwcm9wZXJ0eVNoYXJlczogUHJvcGVydHlTaGFyZVtdKTogUHJvcGVydHlTaGFyZVtdID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyT3V0Y29taW5nKHByb3BlcnR5U2hhcmVzKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgb3V0Y29taW5nIHByb3BlcnR5IHNoYXJlc1xuICAgKi9cbiAgZmlsdGVyT3V0Y29taW5nKHByb3BlcnR5U2hhcmVzOiBQcm9wZXJ0eVNoYXJlW10pOiBQcm9wZXJ0eVNoYXJlW10ge1xuICAgIGNvbnN0IHByb3BlcnR5U2hhcmVzT3V0Y29taW5nOiBQcm9wZXJ0eVNoYXJlW10gPSBbXTtcblxuICAgIHByb3BlcnR5U2hhcmVzLmZvckVhY2goKHByb3BlcnR5U2hhcmU6IFByb3BlcnR5U2hhcmUpID0+IHtcbiAgICAgIGlmICghcHJvcGVydHlTaGFyZS51c2VyPy5pc0xvZ2dlZEluKCkpIHtcbiAgICAgICAgcHJvcGVydHlTaGFyZXNPdXRjb21pbmcucHVzaChwcm9wZXJ0eVNoYXJlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eVNoYXJlc091dGNvbWluZztcbiAgfVxuXG4gIGdldEJ5UHJvcGVydHlJZChwcm9wZXJ0eUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFByb3BlcnR5U2hhcmVbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldCgpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChwcm9wZXJ0eVNoYXJlczogUHJvcGVydHlTaGFyZVtdKSA9PiB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eVNoYXJlcy5maWx0ZXIoKHByb3BlcnR5U2hhcmU6IFByb3BlcnR5U2hhcmUpID0+IHByb3BlcnR5U2hhcmUucHJvcGVydHkuaWQgPT09IHByb3BlcnR5SWQpO1xuICAgICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBVc2VyIHVwZGF0ZWQgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVXNlclVwZGF0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uVVNFUl9VUERBVEVEKVxuICAgICAgLnN1YnNjcmliZSgoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuZmV0Y2goKS5zdWJzY3JpYmUoKHByb3BlcnR5U2hhcmVzOiBQcm9wZXJ0eVNoYXJlW10pID0+IHtcbiAgICAgICAgICB0aGlzLmNhY2hlID0gcHJvcGVydHlTaGFyZXM7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,126 @@
|
|
|
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 { Property } from '../../../models/property/property';
|
|
7
|
+
import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
|
|
8
|
+
import { AppEvent } from '../../../models/event/app-event';
|
|
9
|
+
import { PropertySubscription } from '../../../models/property/property-subscription';
|
|
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
|
+
/**
|
|
14
|
+
* Service for work with Property
|
|
15
|
+
*/
|
|
16
|
+
export class PropertyService 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.modelClass = Property;
|
|
23
|
+
this.url = 'properties';
|
|
24
|
+
this.listenEvents();
|
|
25
|
+
}
|
|
26
|
+
listenEvents() {
|
|
27
|
+
this.listenShareInviteAccepted();
|
|
28
|
+
this.listenServiceSubscriptionUpdated();
|
|
29
|
+
// @TODO Alex: consider to refactor property movements logic similar to client-movements
|
|
30
|
+
this.listenMovementsChanged();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Update cache when share invitation accepted
|
|
34
|
+
*/
|
|
35
|
+
listenShareInviteAccepted() {
|
|
36
|
+
this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_SHARE_UPDATED).subscribe(() => this.resetCache());
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Update cache when user's service subscription is updated
|
|
40
|
+
*/
|
|
41
|
+
listenServiceSubscriptionUpdated() {
|
|
42
|
+
this.eventDispatcherService.on(AppEventTypeEnum.SERVICE_SUBSCRIPTION_UPDATED).subscribe(() => this.resetCache());
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Update cache when property category changed
|
|
46
|
+
*/
|
|
47
|
+
listenMovementsChanged() {
|
|
48
|
+
// @TODO change dispatcher logic to work with multiple events
|
|
49
|
+
this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_MOVEMENT_CREATED).subscribe(() => this.resetCache());
|
|
50
|
+
this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_MOVEMENT_UPDATED).subscribe(() => this.resetCache());
|
|
51
|
+
this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_MOVEMENT_DELETED).subscribe(() => this.resetCache());
|
|
52
|
+
}
|
|
53
|
+
update(property) {
|
|
54
|
+
return super.update(property).pipe(map((updatedProperty) => {
|
|
55
|
+
if (property.documentFile) {
|
|
56
|
+
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_UPDATED_WITH_DOCUMENT, property));
|
|
57
|
+
}
|
|
58
|
+
return updatedProperty;
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
getByCategoryId(id) {
|
|
62
|
+
return this.get().pipe(map((properties) => {
|
|
63
|
+
return properties.filter((property) => property.category.id === id);
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Activate deactivated property
|
|
68
|
+
*/
|
|
69
|
+
activate(property) {
|
|
70
|
+
return this.http.post(`${this.environment.apiV2}/property-subscriptions`, { user: property.user, property })
|
|
71
|
+
.pipe(map((propertySubscriptionBase) => {
|
|
72
|
+
const newPropertySubscription = plainToClass(PropertySubscription, propertySubscriptionBase);
|
|
73
|
+
const activatedProperty = plainToClass(Property, Object.assign({}, property, { subscriptions: [newPropertySubscription] }));
|
|
74
|
+
replace(this.cache, activatedProperty);
|
|
75
|
+
this.updateCache();
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Deactivate activated property
|
|
80
|
+
*/
|
|
81
|
+
deactivate(property) {
|
|
82
|
+
return this.http.delete(`${this.environment.apiV2}/property-subscriptions/${property.getCurrentSubscription().id}`)
|
|
83
|
+
.pipe(map(() => {
|
|
84
|
+
const deactivatedProperty = plainToClass(Property, Object.assign({}, property, { subscriptions: [] }));
|
|
85
|
+
replace(this.cache, deactivatedProperty);
|
|
86
|
+
this.updateCache();
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Update property photo
|
|
91
|
+
* @param property Property instance for photo update
|
|
92
|
+
* @param photoFormData FormData with property photo image
|
|
93
|
+
*/
|
|
94
|
+
updatePhoto(property, photoFormData) {
|
|
95
|
+
return this.http.post(`${this.environment.apiV2}/properties/${property.id}/photo?_method=PUT`, photoFormData)
|
|
96
|
+
.pipe(map((photoLink) => {
|
|
97
|
+
property.photo = photoLink;
|
|
98
|
+
// update properties cache
|
|
99
|
+
replace(this.cache, property);
|
|
100
|
+
this.updateCache();
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
getByShareId(id) {
|
|
104
|
+
return this.get().pipe(map((properties) => {
|
|
105
|
+
return properties.filter((property) => property.user.id === id);
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get list of active user's properties
|
|
110
|
+
*/
|
|
111
|
+
getActive() {
|
|
112
|
+
return this.get().pipe(map((properties) => properties.filter((property) => property.isActive)));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
PropertyService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
116
|
+
PropertyService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyService, providedIn: 'root' });
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyService, decorators: [{
|
|
118
|
+
type: Injectable,
|
|
119
|
+
args: [{
|
|
120
|
+
providedIn: 'root'
|
|
121
|
+
}]
|
|
122
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
|
|
123
|
+
type: Inject,
|
|
124
|
+
args: ['environment']
|
|
125
|
+
}] }]; } });
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3Byb3BlcnR5L3Byb3BlcnR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7Ozs7QUFFdEY7O0dBRUc7QUFJSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxXQUFtQztJQUl0RSxZQUNZLElBQWdCLEVBQ2hCLHNCQUE4QyxFQUN2QixXQUFnQjtRQUVqRCxLQUFLLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBSnZDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN2QixnQkFBVyxHQUFYLFdBQVcsQ0FBSztRQU5uRCxlQUFVLEdBQW9CLFFBQVEsQ0FBQztRQUN2QyxRQUFHLEdBQVcsWUFBWSxDQUFDO1FBUXpCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixD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Q0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRCxZQUFZLENBQUMsRUFBVTtRQUNyQixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQ3BCLEdBQUcsQ0FBQyxDQUFDLFVBQXNCLEVBQWMsRUFBRTtZQUN6QyxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFrQixFQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNyRixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FDcEIsR0FBRyxDQUFDLENBQUMsVUFBc0IsRUFBYyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQWtCLEVBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUNuSCxDQUFDO0lBQ0osQ0FBQzs7NkdBN0hVLGVBQWUsa0ZBT2hCLGFBQWE7aUhBUFosZUFBZSxjQUZkLE1BQU07NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVFJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJvcGVydHkgYXMgUHJvcGVydHlCYXNlIH0gZnJvbSAnLi4vLi4vLi4vZGIvTW9kZWxzL3Byb3BlcnR5L3Byb3BlcnR5JztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHJlcGxhY2UgfSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvYXJyYXknO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IFByb3BlcnR5U3Vic2NyaXB0aW9uIGFzIFByb3BlcnR5U3Vic2NyaXB0aW9uQmFzZSB9IGZyb20gJy4uLy4uLy4uL2RiL01vZGVscy9wcm9wZXJ0eS9wcm9wZXJ0eS1zdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9wcm9wZXJ0eS9wcm9wZXJ0eSc7XG5pbXBvcnQgeyBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXZlbnQvZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcEV2ZW50VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBcHBFdmVudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9ldmVudC9hcHAtZXZlbnQnO1xuaW1wb3J0IHsgUHJvcGVydHlTdWJzY3JpcHRpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcHJvcGVydHkvcHJvcGVydHktc3Vic2NyaXB0aW9uJztcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciB3b3JrIHdpdGggUHJvcGVydHlcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUHJvcGVydHlTZXJ2aWNlIGV4dGVuZHMgUmVzdFNlcnZpY2U8UHJvcGVydHlCYXNlLCBQcm9wZXJ0eT4ge1xuICBtb2RlbENsYXNzOiB0eXBlb2YgUHJvcGVydHkgPSBQcm9wZXJ0eTtcbiAgdXJsOiBzdHJpbmcgPSAncHJvcGVydGllcyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcbiAgICBzdXBlcihodHRwLCBldmVudERpc3BhdGNoZXJTZXJ2aWNlLCBlbnZpcm9ubWVudCk7XG4gICAgdGhpcy5saXN0ZW5FdmVudHMoKTtcbiAgfVxuXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlblNoYXJlSW52aXRlQWNjZXB0ZWQoKTtcbiAgICB0aGlzLmxpc3RlblNlcnZpY2VTdWJzY3JpcHRpb25VcGRhdGVkKCk7XG4gICAgLy8gQFRPRE8gQWxleDogY29uc2lkZXIgdG8gcmVmYWN0b3IgcHJvcGVydHkgbW92ZW1lbnRzIGxvZ2ljIHNpbWlsYXIgdG8gY2xpZW50LW1vdmVtZW50c1xuICAgIHRoaXMubGlzdGVuTW92ZW1lbnRzQ2hhbmdlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjYWNoZSB3aGVuIHNoYXJlIGludml0YXRpb24gYWNjZXB0ZWRcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuU2hhcmVJbnZpdGVBY2NlcHRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9TSEFSRV9VUERBVEVEKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNldENhY2hlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjYWNoZSB3aGVuIHVzZXIncyBzZXJ2aWNlIHN1YnNjcmlwdGlvbiBpcyB1cGRhdGVkXG4gICAqL1xuICBwcml2YXRlIGxpc3RlblNlcnZpY2VTdWJzY3JpcHRpb25VcGRhdGVkKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLlNFUlZJQ0VfU1VCU0NSSVBUSU9OX1VQREFURUQpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2V0Q2FjaGUoKSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNhY2hlIHdoZW4gcHJvcGVydHkgY2F0ZWdvcnkgY2hhbmdlZFxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5Nb3ZlbWVudHNDaGFuZ2VkKCk6IHZvaWQge1xuICAgIC8vIEBUT0RPIGNoYW5nZSBkaXNwYXRjaGVyIGxvZ2ljIHRvIHdvcmsgd2l0aCBtdWx0aXBsZSBldmVudHNcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9NT1ZFTUVOVF9DUkVBVEVEKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNldENhY2hlKCkpO1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLlBST1BFUlRZX01PVkVNRU5UX1VQREFURUQpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2V0Q2FjaGUoKSk7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uUFJPUEVSVFlfTU9WRU1FTlRfREVMRVRFRCkuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVzZXRDYWNoZSgpKTtcbiAgfVxuXG4gIHVwZGF0ZShwcm9wZXJ0eTogUHJvcGVydHkpOiBPYnNlcnZhYmxlPFByb3BlcnR5PiB7XG4gICAgcmV0dXJuIHN1cGVyLnVwZGF0ZShwcm9wZXJ0eSkucGlwZShcbiAgICAgIG1hcCgodXBkYXRlZFByb3BlcnR5OiBQcm9wZXJ0eSk6IFByb3BlcnR5ID0+IHtcbiAgICAgICAgaWYgKHByb3BlcnR5LmRvY3VtZW50RmlsZSkge1xuICAgICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9VUERBVEVEX1dJVEhfRE9DVU1FTlQsIHByb3BlcnR5KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRQcm9wZXJ0eTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEJ5Q2F0ZWdvcnlJZChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxQcm9wZXJ0eVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCkucGlwZShcbiAgICAgIG1hcCgocHJvcGVydGllczogUHJvcGVydHlbXSk6IFByb3BlcnR5W10gPT4ge1xuICAgICAgICByZXR1cm4gcHJvcGVydGllcy5maWx0ZXIoKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gPT4gcHJvcGVydHkuY2F0ZWdvcnkuaWQgPT09IGlkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBkZWFjdGl2YXRlZCBwcm9wZXJ0eVxuICAgKi9cbiAgYWN0aXZhdGUocHJvcGVydHk6IFByb3BlcnR5KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3Byb3BlcnR5LXN1YnNjcmlwdGlvbnNgLCB7dXNlcjogcHJvcGVydHkudXNlciwgcHJvcGVydHl9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocHJvcGVydHlTdWJzY3JpcHRpb25CYXNlOiBQcm9wZXJ0eVN1YnNjcmlwdGlvbkJhc2UpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdQcm9wZXJ0eVN1YnNjcmlwdGlvbjogUHJvcGVydHlTdWJzY3JpcHRpb24gPSBwbGFpblRvQ2xhc3MoUHJvcGVydHlTdWJzY3JpcHRpb24sIHByb3BlcnR5U3Vic2NyaXB0aW9uQmFzZSk7XG4gICAgICAgICAgY29uc3QgYWN0aXZhdGVkUHJvcGVydHk6IFByb3BlcnR5ID0gcGxhaW5Ub0NsYXNzKFByb3BlcnR5LCBPYmplY3QuYXNzaWduKHt9LCBwcm9wZXJ0eSwge3N1YnNjcmlwdGlvbnM6IFtuZXdQcm9wZXJ0eVN1YnNjcmlwdGlvbl19KSk7XG5cbiAgICAgICAgICByZXBsYWNlKHRoaXMuY2FjaGUsIGFjdGl2YXRlZFByb3BlcnR5KTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGUgYWN0aXZhdGVkIHByb3BlcnR5XG4gICAqL1xuICBkZWFjdGl2YXRlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3Byb3BlcnR5LXN1YnNjcmlwdGlvbnMvJHtwcm9wZXJ0eS5nZXRDdXJyZW50U3Vic2NyaXB0aW9uKCkuaWR9YClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlYWN0aXZhdGVkUHJvcGVydHk6IFByb3BlcnR5ID0gcGxhaW5Ub0NsYXNzKFByb3BlcnR5LCBPYmplY3QuYXNzaWduKHt9LCBwcm9wZXJ0eSwge3N1YnNjcmlwdGlvbnM6IFtdfSkpO1xuICAgICAgICAgIHJlcGxhY2UodGhpcy5jYWNoZSwgZGVhY3RpdmF0ZWRQcm9wZXJ0eSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgcHJvcGVydHkgcGhvdG9cbiAgICogQHBhcmFtIHByb3BlcnR5IFByb3BlcnR5IGluc3RhbmNlIGZvciBwaG90byB1cGRhdGVcbiAgICogQHBhcmFtIHBob3RvRm9ybURhdGEgRm9ybURhdGEgd2l0aCBwcm9wZXJ0eSBwaG90byBpbWFnZVxuICAgKi9cbiAgdXBkYXRlUGhvdG8ocHJvcGVydHk6IFByb3BlcnR5LCBwaG90b0Zvcm1EYXRhOiBGb3JtRGF0YSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS9wcm9wZXJ0aWVzLyR7cHJvcGVydHkuaWR9L3Bob3RvP19tZXRob2Q9UFVUYCwgcGhvdG9Gb3JtRGF0YSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHBob3RvTGluazogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgICAgcHJvcGVydHkucGhvdG8gPSBwaG90b0xpbms7XG4gICAgICAgICAgLy8gdXBkYXRlIHByb3BlcnRpZXMgY2FjaGVcbiAgICAgICAgICByZXBsYWNlKHRoaXMuY2FjaGUsIHByb3BlcnR5KTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgZ2V0QnlTaGFyZUlkKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFByb3BlcnR5W10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQoKS5waXBlKFxuICAgICAgbWFwKChwcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdKTogUHJvcGVydHlbXSA9PiB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLmZpbHRlcigocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiA9PiBwcm9wZXJ0eS51c2VyLmlkID09PSBpZCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxpc3Qgb2YgYWN0aXZlIHVzZXIncyBwcm9wZXJ0aWVzXG4gICAqL1xuICBnZXRBY3RpdmUoKTogT2JzZXJ2YWJsZTxQcm9wZXJ0eVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCkucGlwZShcbiAgICAgIG1hcCgocHJvcGVydGllczogUHJvcGVydHlbXSk6IFByb3BlcnR5W10gPT4gcHJvcGVydGllcy5maWx0ZXIoKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gPT4gcHJvcGVydHkuaXNBY3RpdmUpKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { ReplaySubject } from 'rxjs';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
4
|
+
import { replace } from '../../../functions/array';
|
|
5
|
+
import { classToPlain, plainToClass } from 'class-transformer';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common/http";
|
|
8
|
+
import * as i2 from "../../event/event-dispatcher.service";
|
|
9
|
+
/**
|
|
10
|
+
* Abstract base service that implements common services functionality
|
|
11
|
+
* and describe abstract methods/properties that have to be implemented in child services
|
|
12
|
+
* Model - entity service is working with
|
|
13
|
+
* BaseModel - base entity model that extends by Model
|
|
14
|
+
*/
|
|
15
|
+
export class RestService {
|
|
16
|
+
constructor(http, eventDispatcherService, environment) {
|
|
17
|
+
this.http = http;
|
|
18
|
+
this.eventDispatcherService = eventDispatcherService;
|
|
19
|
+
this.environment = environment;
|
|
20
|
+
// subject for service cache
|
|
21
|
+
this.cacheSubject = new ReplaySubject(1);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* get cached list of all instances
|
|
25
|
+
*/
|
|
26
|
+
get() {
|
|
27
|
+
if (!this.cache) {
|
|
28
|
+
this.fetch().subscribe();
|
|
29
|
+
}
|
|
30
|
+
return this.cacheSubject.asObservable();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* get instance by id from cache
|
|
34
|
+
* @param id ID of required item
|
|
35
|
+
*/
|
|
36
|
+
getById(id) {
|
|
37
|
+
return this.get()
|
|
38
|
+
.pipe(map((items) => {
|
|
39
|
+
return items.find((item) => item['id'] === id);
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* get list of items filtered by id.
|
|
44
|
+
* @param models Array of objects contains required items ids
|
|
45
|
+
*/
|
|
46
|
+
getByIds(models) {
|
|
47
|
+
const idsArray = models.map((model) => model['id']);
|
|
48
|
+
return this.get()
|
|
49
|
+
.pipe(map((items) => {
|
|
50
|
+
return items.filter((item) => idsArray.includes(item['id']));
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* add new instance and update cache
|
|
55
|
+
* @TODO rename to post
|
|
56
|
+
*/
|
|
57
|
+
add(model, shouldUpdateCache = true) {
|
|
58
|
+
return this.http.post(`${this.environment.apiV2}/${this.url}`, classToPlain(model))
|
|
59
|
+
.pipe(map((newItem) => {
|
|
60
|
+
if (!shouldUpdateCache) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const newInstance = this.createModelInstance(this.modelClass, newItem);
|
|
64
|
+
if (this.cache) {
|
|
65
|
+
this.cache.push(newInstance);
|
|
66
|
+
this.updateCache();
|
|
67
|
+
}
|
|
68
|
+
return newInstance;
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Add several new items
|
|
73
|
+
* @param models Array of new items for saving
|
|
74
|
+
* @param queryParams query parameters for request
|
|
75
|
+
* @TODO rename to postBatch
|
|
76
|
+
*/
|
|
77
|
+
addBatch(models, queryParams = {}) {
|
|
78
|
+
return this.http.post(`${this.environment.apiV2}/${this.url}`, classToPlain(models), queryParams)
|
|
79
|
+
.pipe(map((newItems) => {
|
|
80
|
+
const newInstances = newItems.map((item) => this.createModelInstance(this.modelClass, item));
|
|
81
|
+
if (this.cache) {
|
|
82
|
+
this.cache.push(...newInstances);
|
|
83
|
+
this.updateCache();
|
|
84
|
+
}
|
|
85
|
+
return newInstances;
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Update item
|
|
90
|
+
* @param model Existing instance for updating
|
|
91
|
+
* @param queryParams query parameters for request
|
|
92
|
+
* @TODO rename to put
|
|
93
|
+
*/
|
|
94
|
+
update(model, queryParams = {}) {
|
|
95
|
+
return this.http.put(`${this.environment.apiV2}/${this.url}/${model['id']}`, classToPlain(model), queryParams)
|
|
96
|
+
.pipe(map((updatedItem) => {
|
|
97
|
+
const updatedInstance = this.createModelInstance(this.modelClass, updatedItem);
|
|
98
|
+
replace(this.cache, updatedInstance);
|
|
99
|
+
this.updateCache();
|
|
100
|
+
return updatedInstance;
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Update several items
|
|
105
|
+
* @param models Array of items for updating
|
|
106
|
+
* @param queryParams query parameters for request
|
|
107
|
+
* TODO rename to putBatch
|
|
108
|
+
*/
|
|
109
|
+
updateBatch(models, queryParams = {}) {
|
|
110
|
+
return this.http.put(`${this.environment.apiV2}/${this.url}`, classToPlain(models), queryParams)
|
|
111
|
+
.pipe(map((updatedItems) => {
|
|
112
|
+
const updatedInstances = updatedItems.map((item) => this.createModelInstance(this.modelClass, item));
|
|
113
|
+
updatedInstances.forEach((instance) => {
|
|
114
|
+
replace(this.cache, instance);
|
|
115
|
+
});
|
|
116
|
+
this.updateCache();
|
|
117
|
+
return updatedInstances;
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* delete instance of class
|
|
122
|
+
* @param model Class instance for deleting
|
|
123
|
+
*/
|
|
124
|
+
delete(model) {
|
|
125
|
+
return this.http.delete(`${this.environment.apiV2}/${this.url}/${model['id']}`)
|
|
126
|
+
.pipe(map(() => {
|
|
127
|
+
this.cache = this.cache.filter((item) => item['id'] !== model['id']);
|
|
128
|
+
this.updateCache();
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* delete multiple instances of class
|
|
133
|
+
* @param models Class instances array for deleting
|
|
134
|
+
*/
|
|
135
|
+
deleteBatch(models) {
|
|
136
|
+
return this.http.post(`${this.environment.apiV2}/${this.url}/delete`, models)
|
|
137
|
+
.pipe(map(() => {
|
|
138
|
+
const ids = models.map((model) => model['id']);
|
|
139
|
+
this.cache = this.cache.filter((item) => !ids.includes(item['id']));
|
|
140
|
+
this.updateCache();
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* clear service cache
|
|
145
|
+
*/
|
|
146
|
+
resetCache() {
|
|
147
|
+
this.fetch().subscribe();
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* get list of base class instances directly from backend
|
|
151
|
+
*/
|
|
152
|
+
fetch() {
|
|
153
|
+
return this.http.get(`${this.environment.apiV2}/${this.url}`)
|
|
154
|
+
.pipe(map((response) => {
|
|
155
|
+
const items = (this.isHydra ? response['hydra:member'] : response)
|
|
156
|
+
.map((item) => {
|
|
157
|
+
return this.createModelInstance(this.modelClass, item);
|
|
158
|
+
});
|
|
159
|
+
this.cache = items;
|
|
160
|
+
this.updateCache();
|
|
161
|
+
return items;
|
|
162
|
+
}));
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Update cache subject with current cache array value
|
|
166
|
+
*/
|
|
167
|
+
updateCache() {
|
|
168
|
+
this.cacheSubject.next(this.cache.slice());
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Create new instance of class
|
|
172
|
+
* @param model The class for which you want to create an instance
|
|
173
|
+
* @param baseModel base model instance that we will use as constructor options
|
|
174
|
+
*/
|
|
175
|
+
createModelInstance(model, baseModel) {
|
|
176
|
+
return plainToClass(model, baseModel, { excludePrefixes: ['@'] });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
RestService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RestService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
180
|
+
RestService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RestService, providedIn: 'root' });
|
|
181
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RestService, decorators: [{
|
|
182
|
+
type: Injectable,
|
|
183
|
+
args: [{
|
|
184
|
+
providedIn: 'root'
|
|
185
|
+
}]
|
|
186
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
|
|
187
|
+
type: Inject,
|
|
188
|
+
args: ['environment']
|
|
189
|
+
}] }]; } });
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvcmVzdC9yZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFFL0Q7Ozs7O0dBS0c7QUFJSCxNQUFNLE9BQWdCLFdBQVc7SUFhL0IsWUFDWSxJQUFnQixFQUNoQixzQkFBOEMsRUFDdkIsV0FBZ0I7UUFGdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBUm5ELDRCQUE0QjtRQUNsQixpQkFBWSxHQUEyQixJQUFJLGFBQWEsQ0FBVSxDQUFDLENBQUMsQ0FBQztJQVMvRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDMUI7UUFFRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxFQUFVO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRTthQUNkLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxLQUFj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bmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHJlcGxhY2UgfSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvYXJyYXknO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9ldmVudC9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgY2xhc3NUb1BsYWluLCBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBzZXJ2aWNlIHRoYXQgaW1wbGVtZW50cyBjb21tb24gc2VydmljZXMgZnVuY3Rpb25hbGl0eVxuICogYW5kIGRlc2NyaWJlIGFic3RyYWN0IG1ldGhvZHMvcHJvcGVydGllcyB0aGF0IGhhdmUgdG8gYmUgaW1wbGVtZW50ZWQgaW4gY2hpbGQgc2VydmljZXNcbiAqIE1vZGVsIC0gZW50aXR5IHNlcnZpY2UgaXMgd29ya2luZyB3aXRoXG4gKiBCYXNlTW9kZWwgLSBiYXNlIGVudGl0eSBtb2RlbCB0aGF0IGV4dGVuZHMgYnkgTW9kZWxcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVzdFNlcnZpY2U8QmFzZU1vZGVsLCBNb2RlbCBleHRlbmRzIEJhc2VNb2RlbD4ge1xuICAvLyB1cmwgcGFydCBmb3Igc2VydmljZSBlbnRpdHkgQVBJLiBIYXZlIHRvIGJlIGRlZmluZWQgaW4gZXh0ZW5kZWQgY2xhc3Nlc1xuICBhYnN0cmFjdCB1cmw6IHN0cmluZztcbiAgLy8gTW9kZWwgY2xhc3MgZm9yIGluc3RhbmNlcyBjcmVhdGluZ1xuICBhYnN0cmFjdCBtb2RlbENsYXNzO1xuICAvLyBAVE9ETyBNYWtlIGNhY2hlIFJlYWRvbmx5XG4gIC8vIGNhY2hlZCBhcnJheSBvZiBzZXJ2aWNlIGNsYXNzIGluc3RhbmNlc1xuICBwcm90ZWN0ZWQgY2FjaGU6IE1vZGVsW107XG4gIC8vIHN1YmplY3QgZm9yIHNlcnZpY2UgY2FjaGVcbiAgcHJvdGVjdGVkIGNhY2hlU3ViamVjdDogUmVwbGF5U3ViamVjdDxNb2RlbFtdPiA9IG5ldyBSZXBsYXlTdWJqZWN0PE1vZGVsW10+KDEpO1xuICAvLyBmbGFnIGZvciB3b3JrIHdpdGggQVBJIHBsYXRmb3JtXG4gIHByb3RlY3RlZCBpc0h5ZHJhOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCBldmVudERpc3BhdGNoZXJTZXJ2aWNlOiBFdmVudERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJvdGVjdGVkIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGNhY2hlZCBsaXN0IG9mIGFsbCBpbnN0YW5jZXNcbiAgICovXG4gIGdldCgpOiBPYnNlcnZhYmxlPE1vZGVsW10+IHtcbiAgICBpZiAoIXRoaXMuY2FjaGUpIHtcbiAgICAgIHRoaXMuZmV0Y2goKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGluc3RhbmNlIGJ5IGlkIGZyb20gY2FjaGVcbiAgICogQHBhcmFtIGlkIElEIG9mIHJlcXVpcmVkIGl0ZW1cbiAgICovXG4gIGdldEJ5SWQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8TW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoaXRlbXM6IE1vZGVsW10pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZCgoaXRlbTogTW9kZWwpID0+IGl0ZW1bJ2lkJ10gPT09IGlkKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGxpc3Qgb2YgaXRlbXMgZmlsdGVyZWQgYnkgaWQuXG4gICAqIEBwYXJhbSBtb2RlbHMgQXJyYXkgb2Ygb2JqZWN0cyBjb250YWlucyByZXF1aXJlZCBpdGVtcyBpZHNcbiAgICovXG4gIGdldEJ5SWRzKG1vZGVsczogTW9kZWxbXSk6IE9ic2VydmFibGU8TW9kZWxbXT4ge1xuICAgIGNvbnN0IGlkc0FycmF5OiBudW1iZXJbXSA9IG1vZGVscy5tYXAoKG1vZGVsOiBNb2RlbCkgPT4gbW9kZWxbJ2lkJ10pO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0KClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGl0ZW1zOiBNb2RlbFtdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbTogTW9kZWwpID0+IGlkc0FycmF5LmluY2x1ZGVzKGl0ZW1bJ2lkJ10pKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogYWRkIG5ldyBpbnN0YW5jZSBhbmQgdXBkYXRlIGNhY2hlXG4gICAqIEBUT0RPIHJlbmFtZSB0byBwb3N0XG4gICAqL1xuICBhZGQobW9kZWw6IE1vZGVsLCBzaG91bGRVcGRhdGVDYWNoZTogYm9vbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPE1vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9YCwgY2xhc3NUb1BsYWluKG1vZGVsKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKG5ld0l0ZW06IEJhc2VNb2RlbCkgPT4ge1xuICAgICAgICAgIGlmICghc2hvdWxkVXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbmV3SW5zdGFuY2U6IE1vZGVsID0gdGhpcy5jcmVhdGVNb2RlbEluc3RhbmNlKHRoaXMubW9kZWxDbGFzcywgbmV3SXRlbSk7XG4gICAgICAgICAgaWYgKHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGUucHVzaChuZXdJbnN0YW5jZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ld0luc3RhbmNlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgc2V2ZXJhbCBuZXcgaXRlbXNcbiAgICogQHBhcmFtIG1vZGVscyBBcnJheSBvZiBuZXcgaXRlbXMgZm9yIHNhdmluZ1xuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXMgcXVlcnkgcGFyYW1ldGVycyBmb3IgcmVxdWVzdFxuICAgKiBAVE9ETyByZW5hbWUgdG8gcG9zdEJhdGNoXG4gICAqL1xuICBhZGRCYXRjaChtb2RlbHM6IE1vZGVsW10sIHF1ZXJ5UGFyYW1zOiBvYmplY3QgPSB7fSk6IE9ic2VydmFibGU8TW9kZWxbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfWAsIGNsYXNzVG9QbGFpbihtb2RlbHMpLCBxdWVyeVBhcmFtcylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKG5ld0l0ZW1zOiBCYXNlTW9kZWxbXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0luc3RhbmNlczogTW9kZWxbXSA9IG5ld0l0ZW1zLm1hcCgoaXRlbTogQmFzZU1vZGVsKSA9PiB0aGlzLmNyZWF0ZU1vZGVsSW5zdGFuY2UodGhpcy5tb2RlbENsYXNzLCBpdGVtKSk7XG4gICAgICAgICAgaWYgKHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGUucHVzaCguLi5uZXdJbnN0YW5jZXMpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXdJbnN0YW5jZXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBpdGVtXG4gICAqIEBwYXJhbSBtb2RlbCBFeGlzdGluZyBpbnN0YW5jZSBmb3IgdXBkYXRpbmdcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHJlcXVlc3RcbiAgICogQFRPRE8gcmVuYW1lIHRvIHB1dFxuICAgKi9cbiAgdXBkYXRlKG1vZGVsOiBNb2RlbCwgcXVlcnlQYXJhbXM6IG9iamVjdCA9IHt9KTogT2JzZXJ2YWJsZTxNb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9LyR7bW9kZWxbJ2lkJ119YCwgY2xhc3NUb1BsYWluKG1vZGVsKSwgcXVlcnlQYXJhbXMpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh1cGRhdGVkSXRlbTogQmFzZU1vZGVsKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZEluc3RhbmNlOiBNb2RlbCA9IHRoaXMuY3JlYXRlTW9kZWxJbnN0YW5jZSh0aGlzLm1vZGVsQ2xhc3MsIHVwZGF0ZWRJdGVtKTtcbiAgICAgICAgICByZXBsYWNlKHRoaXMuY2FjaGUsIHVwZGF0ZWRJbnN0YW5jZSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWRJbnN0YW5jZTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHNldmVyYWwgaXRlbXNcbiAgICogQHBhcmFtIG1vZGVscyBBcnJheSBvZiBpdGVtcyBmb3IgdXBkYXRpbmdcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHJlcXVlc3RcbiAgICogVE9ETyByZW5hbWUgdG8gcHV0QmF0Y2hcbiAgICovXG4gIHVwZGF0ZUJhdGNoKG1vZGVsczogTW9kZWxbXSwgcXVlcnlQYXJhbXM6IG9iamVjdCA9IHt9KTogT2JzZXJ2YWJsZTxNb2RlbFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH1gLCBjbGFzc1RvUGxhaW4obW9kZWxzKSwgcXVlcnlQYXJhbXMpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh1cGRhdGVkSXRlbXM6IEJhc2VNb2RlbFtdKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZEluc3RhbmNlczogTW9kZWxbXSA9IHVwZGF0ZWRJdGVtcy5tYXAoKGl0ZW06IEJhc2VNb2RlbCkgPT4gdGhpcy5jcmVhdGVNb2RlbEluc3RhbmNlKHRoaXMubW9kZWxDbGFzcywgaXRlbSkpO1xuICAgICAgICAgIHVwZGF0ZWRJbnN0YW5jZXMuZm9yRWFjaCgoaW5zdGFuY2U6IE1vZGVsKSA9PiB7XG4gICAgICAgICAgICByZXBsYWNlKHRoaXMuY2FjaGUsIGluc3RhbmNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWRJbnN0YW5jZXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBpbnN0YW5jZSBvZiBjbGFzc1xuICAgKiBAcGFyYW0gbW9kZWwgQ2xhc3MgaW5zdGFuY2UgZm9yIGRlbGV0aW5nXG4gICAqL1xuICBkZWxldGUobW9kZWw6IE1vZGVsKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH0vJHttb2RlbFsnaWQnXX1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuZmlsdGVyKChpdGVtOiBNb2RlbCkgPT4gaXRlbVsnaWQnXSAhPT0gbW9kZWxbJ2lkJ10pO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIG11bHRpcGxlIGluc3RhbmNlcyBvZiBjbGFzc1xuICAgKiBAcGFyYW0gbW9kZWxzIENsYXNzIGluc3RhbmNlcyBhcnJheSBmb3IgZGVsZXRpbmdcbiAgICovXG4gIGRlbGV0ZUJhdGNoKG1vZGVsczogTW9kZWxbXSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfS9kZWxldGVgLCBtb2RlbHMpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZHM6IG51bWJlcltdID0gbW9kZWxzLm1hcCgobW9kZWw6IE1vZGVsKTogbnVtYmVyID0+IG1vZGVsWydpZCddKTtcbiAgICAgICAgICB0aGlzLmNhY2hlID0gdGhpcy5jYWNoZS5maWx0ZXIoKGl0ZW06IE1vZGVsKSA9PiAhaWRzLmluY2x1ZGVzKGl0ZW1bJ2lkJ10pKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIGNsZWFyIHNlcnZpY2UgY2FjaGVcbiAgICovXG4gIHJlc2V0Q2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5mZXRjaCgpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBsaXN0IG9mIGJhc2UgY2xhc3MgaW5zdGFuY2VzIGRpcmVjdGx5IGZyb20gYmFja2VuZFxuICAgKi9cbiAgcHJvdGVjdGVkIGZldGNoKCk6IE9ic2VydmFibGU8TW9kZWxbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9YClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBCYXNlTW9kZWxbXSk6IE1vZGVsW10gPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1zOiBNb2RlbFtdID0gKHRoaXMuaXNIeWRyYSA/IHJlc3BvbnNlWydoeWRyYTptZW1iZXInXSA6IHJlc3BvbnNlKVxuICAgICAgICAgICAgLm1hcCgoaXRlbTogQmFzZU1vZGVsKTogTW9kZWwgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVNb2RlbEluc3RhbmNlKHRoaXMubW9kZWxDbGFzcywgaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNhY2hlID0gaXRlbXM7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNhY2hlIHN1YmplY3Qgd2l0aCBjdXJyZW50IGNhY2hlIGFycmF5IHZhbHVlXG4gICAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZVN1YmplY3QubmV4dCh0aGlzLmNhY2hlLnNsaWNlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3NcbiAgICogQHBhcmFtIG1vZGVsIFRoZSBjbGFzcyBmb3Igd2hpY2ggeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlXG4gICAqIEBwYXJhbSBiYXNlTW9kZWwgYmFzZSBtb2RlbCBpbnN0YW5jZSB0aGF0IHdlIHdpbGwgdXNlIGFzIGNvbnN0cnVjdG9yIG9wdGlvbnNcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbEluc3RhbmNlKG1vZGVsOiBuZXcoYm06IEJhc2VNb2RlbCkgPT4gTW9kZWwsIGJhc2VNb2RlbDogQmFzZU1vZGVsKTogTW9kZWwge1xuICAgIHJldHVybiBwbGFpblRvQ2xhc3MobW9kZWwsIGJhc2VNb2RlbCwgeyBleGNsdWRlUHJlZml4ZXM6IFsnQCddIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { Notification } from '../../../models/notification/notification';
|
|
3
|
+
import { replace } from '../../../functions/array';
|
|
4
|
+
import { plainToClass } from 'class-transformer';
|
|
5
|
+
import { RestService } from '../rest/rest.service';
|
|
6
|
+
import { AppEvent } from '../../../models/event/app-event';
|
|
7
|
+
import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
|
|
8
|
+
import clone from 'lodash/clone';
|
|
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 to handle service notifications logic
|
|
15
|
+
*/
|
|
16
|
+
export class ServiceNotificationService 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 = Notification;
|
|
24
|
+
this.url = 'service-notifications';
|
|
25
|
+
this.isHydra = true;
|
|
26
|
+
this.listenEvents();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* SSE and Event Dispatcher Services listeners
|
|
30
|
+
*/
|
|
31
|
+
listenEvents() {
|
|
32
|
+
this.listenNotifications();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* subscribe to new chat messages
|
|
36
|
+
*/
|
|
37
|
+
listenNotifications() {
|
|
38
|
+
this.sseService.on(`serviceNotification`).subscribe((notificationBase) => {
|
|
39
|
+
const notification = plainToClass(Notification, notificationBase);
|
|
40
|
+
const cache = clone(this.cache);
|
|
41
|
+
// update existing notification if read and add new notification if not read
|
|
42
|
+
if (notification.isRead) {
|
|
43
|
+
replace(cache, notification);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
cache.unshift(notification);
|
|
47
|
+
}
|
|
48
|
+
this.cache = cache;
|
|
49
|
+
this.cacheSubject.next(this.cache);
|
|
50
|
+
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.NOTIFICATION_ADDED, notification));
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
ServiceNotificationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ServiceNotificationService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }, { token: i3.SseService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
55
|
+
ServiceNotificationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ServiceNotificationService, providedIn: 'root' });
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ServiceNotificationService, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1ub3RpZmljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3NlcnZpY2Utbm90aWZpY2F0aW9uL3NlcnZpY2Utbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBR3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEtBQUssTUFBTSxjQUFjLENBQUE7Ozs7O0FBQ2hDOztHQUVHO0FBSUgsTUFBTSxPQUFPLDBCQUEyQixTQUFRLFdBQTJDO0lBS3pGLFlBQ1ksSUFBZ0IsRUFDaEIsc0JBQThDLEVBQ3ZCLFdBQWdCLEVBQ3pDLFVBQXNCO1FBRTlCLEtBQUssQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFMdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBQ3pDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFSaEMsZUFBVSxHQUF3QixZQUFZLENBQUM7UUFDL0MsUUFBRyxHQUFXLHVCQUF1QixDQUFDO1FBQ3RDLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFTdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVk7UUFDVixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxnQkFBa0MsRUFBUSxFQUFFO1lBQy9GLE1BQU0sWUFBWSxHQUFpQixZQUFZLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDaEYsTUFBTSxLQUFLLEdBQW1CLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsNEVBQTRFO1lBQzVFLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDdkIsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQzthQUM5QjtpQkFBTTtnQkFDTCxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzdCO1lBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN4RyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O3dIQXZDVSwwQkFBMEIsa0ZBUTNCLGFBQWE7NEhBUlosMEJBQTBCLGNBRnpCLE1BQU07NEZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBU0ksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZXJ2aWNlTm90aWZpY2F0aW9uIGFzIE5vdGlmaWNhdGlvbkJhc2UgfSBmcm9tICcuLi8uLi8uLi9kYi9Nb2RlbHMvc2VydmljZS1ub3RpZmljYXRpb24nO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IElFdmVudExpc3RlbmVyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9ldmVudC1saXN0ZW5lci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgcmVwbGFjZSB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9hcnJheSc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uL3Jlc3QvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9ldmVudC9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3NlU2VydmljZSB9IGZyb20gJy4uLy4uL2V2ZW50L3NzZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudCc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IGNsb25lIGZyb20gJ2xvZGFzaC9jbG9uZSdcbi8qKlxuICogU2VydmljZSB0byBoYW5kbGUgc2VydmljZSBub3RpZmljYXRpb25zIGxvZ2ljXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlcnZpY2VOb3RpZmljYXRpb25TZXJ2aWNlIGV4dGVuZHMgUmVzdFNlcnZpY2U8Tm90aWZpY2F0aW9uQmFzZSwgTm90aWZpY2F0aW9uPiBpbXBsZW1lbnRzIElFdmVudExpc3RlbmVyIHtcbiAgbW9kZWxDbGFzczogdHlwZW9mIE5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvbjtcbiAgdXJsOiBzdHJpbmcgPSAnc2VydmljZS1ub3RpZmljYXRpb25zJztcbiAgaXNIeWRyYTogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IGFueSxcbiAgICBwcml2YXRlIHNzZVNlcnZpY2U6IFNzZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoaHR0cCwgZXZlbnREaXNwYXRjaGVyU2VydmljZSwgZW52aXJvbm1lbnQpO1xuICAgIHRoaXMubGlzdGVuRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogU1NFIGFuZCBFdmVudCBEaXNwYXRjaGVyIFNlcnZpY2VzIGxpc3RlbmVyc1xuICAgKi9cbiAgbGlzdGVuRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdGVuTm90aWZpY2F0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIHN1YnNjcmliZSB0byBuZXcgY2hhdCBtZXNzYWdlc1xuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5Ob3RpZmljYXRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuc3NlU2VydmljZS5vbihgc2VydmljZU5vdGlmaWNhdGlvbmApLnN1YnNjcmliZSgobm90aWZpY2F0aW9uQmFzZTogTm90aWZpY2F0aW9uQmFzZSk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24gPSBwbGFpblRvQ2xhc3MoTm90aWZpY2F0aW9uLCBub3RpZmljYXRpb25CYXNlKTtcbiAgICAgIGNvbnN0IGNhY2hlOiBOb3RpZmljYXRpb25bXSA9IGNsb25lKHRoaXMuY2FjaGUpO1xuICAgICAgLy8gdXBkYXRlIGV4aXN0aW5nIG5vdGlmaWNhdGlvbiBpZiByZWFkIGFuZCBhZGQgbmV3IG5vdGlmaWNhdGlvbiBpZiBub3QgcmVhZFxuICAgICAgaWYgKG5vdGlmaWNhdGlvbi5pc1JlYWQpIHtcbiAgICAgICAgcmVwbGFjZShjYWNoZSwgbm90aWZpY2F0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlLnVuc2hpZnQobm90aWZpY2F0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FjaGUgPSBjYWNoZTtcbiAgICAgIHRoaXMuY2FjaGVTdWJqZWN0Lm5leHQodGhpcy5jYWNoZSk7XG4gICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uTk9USUZJQ0FUSU9OX0FEREVELCBub3RpZmljYXRpb24pKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|