@smarterplan/ngx-smarterplan-core 0.3.11

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 (134) hide show
  1. package/README.md +24 -0
  2. package/esm2020/lib/components/csv-export/csv-export.component.mjs +59 -0
  3. package/esm2020/lib/components/loader/loader.component.mjs +14 -0
  4. package/esm2020/lib/components/menu-bar/avatar/avatar.component.mjs +75 -0
  5. package/esm2020/lib/components/menu-bar/menu-bar.component.mjs +115 -0
  6. package/esm2020/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +254 -0
  7. package/esm2020/lib/components/menu-bar/range-date-picker/range-date-picker.component.mjs +81 -0
  8. package/esm2020/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +39 -0
  9. package/esm2020/lib/components/search-bar/search-bar.component.mjs +63 -0
  10. package/esm2020/lib/components/support-modal/support-modal.component.mjs +59 -0
  11. package/esm2020/lib/config.mjs +4 -0
  12. package/esm2020/lib/helpers.service.mjs +468 -0
  13. package/esm2020/lib/mattertagData.mjs +177 -0
  14. package/esm2020/lib/ngx-smarterplan-core.module.mjs +117 -0
  15. package/esm2020/lib/ngx-smarterplan-core.service.mjs +14 -0
  16. package/esm2020/lib/pipes/duration-to-string.pipe.mjs +66 -0
  17. package/esm2020/lib/pipes/hashtag-from-id.pipe.mjs +26 -0
  18. package/esm2020/lib/pipes/safe-url.pipe.mjs +20 -0
  19. package/esm2020/lib/pipes/time-date-to-local-string.pipe.mjs +104 -0
  20. package/esm2020/lib/pipes/username-from-id.pipe.mjs +29 -0
  21. package/esm2020/lib/services/base-tab.service.mjs +24 -0
  22. package/esm2020/lib/services/baseVisibility.service.mjs +17 -0
  23. package/esm2020/lib/services/booking.service.mjs +161 -0
  24. package/esm2020/lib/services/content.service.mjs +135 -0
  25. package/esm2020/lib/services/filter.service.mjs +560 -0
  26. package/esm2020/lib/services/intervention.service.mjs +236 -0
  27. package/esm2020/lib/services/locale.service.mjs +45 -0
  28. package/esm2020/lib/services/matterport-import.service.mjs +339 -0
  29. package/esm2020/lib/services/matterport.service.mjs +876 -0
  30. package/esm2020/lib/services/models/affectation.service.mjs +60 -0
  31. package/esm2020/lib/services/models/base-object.service.mjs +70 -0
  32. package/esm2020/lib/services/models/capture.service.mjs +34 -0
  33. package/esm2020/lib/services/models/comment.service.mjs +98 -0
  34. package/esm2020/lib/services/models/domain.service.mjs +77 -0
  35. package/esm2020/lib/services/models/equipment.service.mjs +629 -0
  36. package/esm2020/lib/services/models/event.service.mjs +128 -0
  37. package/esm2020/lib/services/models/feature.service.mjs +339 -0
  38. package/esm2020/lib/services/models/hashtag.service.mjs +38 -0
  39. package/esm2020/lib/services/models/layer.service.mjs +33 -0
  40. package/esm2020/lib/services/models/measurement.service.mjs +158 -0
  41. package/esm2020/lib/services/models/mission.service.mjs +185 -0
  42. package/esm2020/lib/services/models/navigation.service.mjs +76 -0
  43. package/esm2020/lib/services/models/node.service.mjs +31 -0
  44. package/esm2020/lib/services/models/operation.service.mjs +59 -0
  45. package/esm2020/lib/services/models/organisation.service.mjs +73 -0
  46. package/esm2020/lib/services/models/plan.service.mjs +573 -0
  47. package/esm2020/lib/services/models/poi.service.mjs +48 -0
  48. package/esm2020/lib/services/models/profile.service.mjs +54 -0
  49. package/esm2020/lib/services/models/property.service.mjs +34 -0
  50. package/esm2020/lib/services/models/space.service.mjs +184 -0
  51. package/esm2020/lib/services/models/template.service.mjs +41 -0
  52. package/esm2020/lib/services/models/ticket.service.mjs +454 -0
  53. package/esm2020/lib/services/models/visit.service.mjs +130 -0
  54. package/esm2020/lib/services/models/zone.service.mjs +184 -0
  55. package/esm2020/lib/services/navigator.service.mjs +165 -0
  56. package/esm2020/lib/services/s3.service.mjs +124 -0
  57. package/esm2020/lib/services/search.service.mjs +124 -0
  58. package/esm2020/lib/services/support.service.mjs +42 -0
  59. package/esm2020/lib/services/tag.service.mjs +101 -0
  60. package/esm2020/lib/services/user.service.mjs +444 -0
  61. package/esm2020/lib/services/viewer.service.mjs +395 -0
  62. package/esm2020/lib/services/zone-drawer.service.mjs +76 -0
  63. package/esm2020/lib/types.service.mjs +266 -0
  64. package/esm2020/public-api.mjs +63 -0
  65. package/esm2020/smarterplan-ngx-smarterplan-core.mjs +5 -0
  66. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +10057 -0
  67. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -0
  68. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +9371 -0
  69. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -0
  70. package/lib/components/csv-export/csv-export.component.d.ts +18 -0
  71. package/lib/components/loader/loader.component.d.ts +8 -0
  72. package/lib/components/menu-bar/avatar/avatar.component.d.ts +18 -0
  73. package/lib/components/menu-bar/menu-bar.component.d.ts +35 -0
  74. package/lib/components/menu-bar/navigation-bar/navigation-bar.component.d.ts +66 -0
  75. package/lib/components/menu-bar/range-date-picker/range-date-picker.component.d.ts +24 -0
  76. package/lib/components/modal-switch-visit/modal-switch-visit.component.d.ts +22 -0
  77. package/lib/components/search-bar/search-bar.component.d.ts +16 -0
  78. package/lib/components/support-modal/support-modal.component.d.ts +24 -0
  79. package/lib/config.d.ts +17 -0
  80. package/lib/helpers.service.d.ts +79 -0
  81. package/lib/mattertagData.d.ts +65 -0
  82. package/lib/ngx-smarterplan-core.module.d.ts +28 -0
  83. package/lib/ngx-smarterplan-core.service.d.ts +6 -0
  84. package/lib/pipes/duration-to-string.pipe.d.ts +12 -0
  85. package/lib/pipes/hashtag-from-id.pipe.d.ts +10 -0
  86. package/lib/pipes/safe-url.pipe.d.ts +10 -0
  87. package/lib/pipes/time-date-to-local-string.pipe.d.ts +16 -0
  88. package/lib/pipes/username-from-id.pipe.d.ts +11 -0
  89. package/lib/services/base-tab.service.d.ts +10 -0
  90. package/lib/services/baseVisibility.service.d.ts +8 -0
  91. package/lib/services/booking.service.d.ts +21 -0
  92. package/lib/services/content.service.d.ts +28 -0
  93. package/lib/services/filter.service.d.ts +58 -0
  94. package/lib/services/intervention.service.d.ts +25 -0
  95. package/lib/services/locale.service.d.ts +23 -0
  96. package/lib/services/matterport-import.service.d.ts +46 -0
  97. package/lib/services/matterport.service.d.ts +141 -0
  98. package/lib/services/models/affectation.service.d.ts +14 -0
  99. package/lib/services/models/base-object.service.d.ts +20 -0
  100. package/lib/services/models/capture.service.d.ts +13 -0
  101. package/lib/services/models/comment.service.d.ts +26 -0
  102. package/lib/services/models/domain.service.d.ts +19 -0
  103. package/lib/services/models/equipment.service.d.ts +88 -0
  104. package/lib/services/models/event.service.d.ts +43 -0
  105. package/lib/services/models/feature.service.d.ts +71 -0
  106. package/lib/services/models/hashtag.service.d.ts +13 -0
  107. package/lib/services/models/layer.service.d.ts +11 -0
  108. package/lib/services/models/measurement.service.d.ts +43 -0
  109. package/lib/services/models/mission.service.d.ts +32 -0
  110. package/lib/services/models/navigation.service.d.ts +22 -0
  111. package/lib/services/models/node.service.d.ts +12 -0
  112. package/lib/services/models/operation.service.d.ts +15 -0
  113. package/lib/services/models/organisation.service.d.ts +19 -0
  114. package/lib/services/models/plan.service.d.ts +117 -0
  115. package/lib/services/models/poi.service.d.ts +15 -0
  116. package/lib/services/models/profile.service.d.ts +15 -0
  117. package/lib/services/models/property.service.d.ts +13 -0
  118. package/lib/services/models/space.service.d.ts +38 -0
  119. package/lib/services/models/template.service.d.ts +15 -0
  120. package/lib/services/models/ticket.service.d.ts +86 -0
  121. package/lib/services/models/visit.service.d.ts +24 -0
  122. package/lib/services/models/zone.service.d.ts +25 -0
  123. package/lib/services/navigator.service.d.ts +55 -0
  124. package/lib/services/s3.service.d.ts +13 -0
  125. package/lib/services/search.service.d.ts +20 -0
  126. package/lib/services/support.service.d.ts +17 -0
  127. package/lib/services/tag.service.d.ts +45 -0
  128. package/lib/services/user.service.d.ts +104 -0
  129. package/lib/services/viewer.service.d.ts +113 -0
  130. package/lib/services/zone-drawer.service.d.ts +7 -0
  131. package/lib/types.service.d.ts +723 -0
  132. package/package.json +41 -0
  133. package/public-api.d.ts +56 -0
  134. package/smarterplan-ngx-smarterplan-core.d.ts +5 -0
@@ -0,0 +1,24 @@
1
+ import { Injectable } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class BaseLateralTabService {
4
+ constructor() {
5
+ this.activeTab = "tickets";
6
+ this.firstLoad = true;
7
+ }
8
+ storeTabHistory(tab) {
9
+ this.activeTab = tab;
10
+ }
11
+ getTabHistory() {
12
+ // throw new Error("Method 'getTabHistory' not implemented.");
13
+ return this.activeTab;
14
+ }
15
+ }
16
+ BaseLateralTabService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: BaseLateralTabService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17
+ BaseLateralTabService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: BaseLateralTabService, providedIn: "root" });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: BaseLateralTabService, decorators: [{
19
+ type: Injectable,
20
+ args: [{
21
+ providedIn: "root",
22
+ }]
23
+ }], ctorParameters: function () { return []; } });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10YWIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvYmFzZS10YWIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8scUJBQXFCO0lBSzlCO1FBSkEsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUV0QixjQUFTLEdBQUcsSUFBSSxDQUFDO0lBRUQsQ0FBQztJQUVqQixlQUFlLENBQUMsR0FBVztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYTtRQUNULDhEQUE4RDtRQUM5RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQzs7a0hBZFEscUJBQXFCO3NIQUFyQixxQkFBcUIsY0FGbEIsTUFBTTsyRkFFVCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VMYXRlcmFsVGFiU2VydmljZSB7XHJcbiAgICBhY3RpdmVUYWIgPSBcInRpY2tldHNcIjtcclxuXHJcbiAgICBmaXJzdExvYWQgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgc3RvcmVUYWJIaXN0b3J5KHRhYjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFiSGlzdG9yeSgpOiBzdHJpbmcge1xyXG4gICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCAnZ2V0VGFiSGlzdG9yeScgbm90IGltcGxlbWVudGVkLlwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVUYWI7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,17 @@
1
+ import { Injectable } from "@angular/core";
2
+ import { Subject } from "rxjs";
3
+ import * as i0 from "@angular/core";
4
+ export class BaseVisibilityService {
5
+ constructor() {
6
+ this.detailShowing = new Subject();
7
+ }
8
+ }
9
+ BaseVisibilityService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: BaseVisibilityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
+ BaseVisibilityService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: BaseVisibilityService, providedIn: "root" });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: BaseVisibilityService, decorators: [{
12
+ type: Injectable,
13
+ args: [{
14
+ providedIn: "root",
15
+ }]
16
+ }], ctorParameters: function () { return []; } });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVZpc2liaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvYmFzZVZpc2liaWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSy9CLE1BQU0sT0FBTyxxQkFBcUI7SUFHOUI7UUFGQSxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7SUFFdkIsQ0FBQzs7a0hBSFIscUJBQXFCO3NIQUFyQixxQkFBcUIsY0FGbEIsTUFBTTsyRkFFVCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXNlVmlzaWJpbGl0eVNlcnZpY2Uge1xyXG4gICAgZGV0YWlsU2hvd2luZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxufSJdfQ==
@@ -0,0 +1,161 @@
1
+ import { dateHasExpired } from "../helpers.service";
2
+ import { EventType, EventStatus, EmailStatus } from "../types.service";
3
+ export class BookingService {
4
+ constructor(eventService, userService, missionService) {
5
+ this.eventService = eventService;
6
+ this.userService = userService;
7
+ this.missionService = missionService;
8
+ }
9
+ getFutureOrCurrentEvents(events) {
10
+ const now = new Date();
11
+ return events
12
+ .filter((event) => event.realEndDate > now.getTime())
13
+ .sort((a, b) => a.realStartDate - b.realStartDate);
14
+ }
15
+ getEventsWithRealStartDateBeforeToday(events) {
16
+ const now = new Date();
17
+ now.setHours(0, 0, 0, 0);
18
+ return events
19
+ .filter((event) => event.realStartDate < now.getTime())
20
+ .sort((a, b) => b.realStartDate - a.realStartDate);
21
+ }
22
+ async autoUpdateBookingEvent(eventProm) {
23
+ const event = await eventProm;
24
+ const startExpired = dateHasExpired(event.realStartDate);
25
+ const endExpired = dateHasExpired(event.realEndDate);
26
+ if (event.type === EventType.BOOKING && endExpired) {
27
+ /** [BOOKING] VALIDATED => LATE */
28
+ if (event.status === EventStatus.VALIDATED) {
29
+ return this.eventService.updateEvent({
30
+ id: event.id,
31
+ status: EventStatus.LATE,
32
+ });
33
+ }
34
+ /** [BOOKING] CREATED => REFUSED */
35
+ if (event.status === EventStatus.CREATED) {
36
+ return this.eventService.updateEvent({
37
+ id: event.id,
38
+ status: EventStatus.REFUSED,
39
+ });
40
+ }
41
+ }
42
+ if (event.type === EventType.BOOKING_SUBCRIPTION) {
43
+ /** [SUB] CREATED => REFUSED */
44
+ if (event.status === EventStatus.CREATED && endExpired) {
45
+ return this.eventService.updateEvent({
46
+ id: event.id,
47
+ status: EventStatus.REFUSED,
48
+ });
49
+ }
50
+ /** [SUB] IN_PROGRESS | VALIDATED => COMPLETED */
51
+ if (endExpired &&
52
+ (event.status === EventStatus.IN_PROGRESS ||
53
+ event.status === EventStatus.VALIDATED)) {
54
+ return this.eventService.updateEvent({
55
+ id: event.id,
56
+ status: EventStatus.COMPLETED,
57
+ });
58
+ }
59
+ /** [SUB] CREATED => IN_PROGRESS */
60
+ if (startExpired && event.status === EventStatus.CREATED) {
61
+ return this.eventService.updateEvent({
62
+ id: event.id,
63
+ status: EventStatus.IN_PROGRESS,
64
+ });
65
+ }
66
+ }
67
+ return event;
68
+ }
69
+ mergeEventsToSubscriptsionUnique(event, uniqueList) {
70
+ if (!event || event.type !== EventType.BOOKING_SUBCRIPTION)
71
+ return uniqueList;
72
+ const newUniqueList = [...uniqueList]; // deep copy
73
+ const index = newUniqueList.findIndex((event_) => event_.group === event.group);
74
+ /** If an event of the same group already exist, we merge date, to get the min and max date and update status */
75
+ if (index >= 0) {
76
+ const groupEvent = newUniqueList[index];
77
+ if (groupEvent.realStartDate > event.realStartDate) {
78
+ groupEvent.realStartDate = event.realStartDate;
79
+ }
80
+ if (groupEvent.realEndDate < event.realEndDate) {
81
+ groupEvent.realEndDate = event.realEndDate;
82
+ groupEvent.status = event.status;
83
+ }
84
+ groupEvent.author = event.author;
85
+ }
86
+ else {
87
+ newUniqueList.push({ ...event });
88
+ }
89
+ return newUniqueList;
90
+ }
91
+ /** Merge a subscription event list to a unique event */
92
+ mergeEventsToSubscriptions(allBokings) {
93
+ let uniqueList = [];
94
+ for (const event of allBokings) {
95
+ uniqueList = this.mergeEventsToSubscriptsionUnique(event, uniqueList);
96
+ }
97
+ return uniqueList;
98
+ }
99
+ async updateStatusOfEventsInSubscriptionWithReason(subscriptionGroup, newStatus, reason = null) {
100
+ const eventsOfSubcription = await this.eventService.getEventsByGroup(subscriptionGroup);
101
+ const updatedEvents = [];
102
+ await Promise.all(eventsOfSubcription.map(async (event) => {
103
+ const updEvent = await this.eventService.updateEvent({
104
+ id: event.id,
105
+ status: newStatus,
106
+ refusalReason: reason,
107
+ notificationStatus: reason
108
+ ? EmailStatus.UPDATE_TO_DELIVER
109
+ : null,
110
+ });
111
+ updatedEvents.push(updEvent);
112
+ }));
113
+ return updatedEvents;
114
+ }
115
+ getActiveFutureBookings(allBooking) {
116
+ let bookings = this.getFutureOrCurrentEvents(allBooking);
117
+ bookings = bookings.filter((event_) => event_.status !== EventStatus.CANCELLED &&
118
+ event_.status !== EventStatus.REFUSED &&
119
+ event_.status !== EventStatus.ARCHIVED);
120
+ return bookings;
121
+ }
122
+ async archiveForOwnerEventsInSubscription(subscriptionGroup) {
123
+ const eventsOfSubcription = await this.eventService.getEventsByGroup(subscriptionGroup);
124
+ const updatedEvents = [];
125
+ await Promise.all(eventsOfSubcription.map(async (event) => {
126
+ const updEvent = await this.eventService.updateEvent({
127
+ id: event.id,
128
+ archivedByOwner: true,
129
+ });
130
+ updatedEvents.push(updEvent);
131
+ }));
132
+ return updatedEvents;
133
+ }
134
+ getConflictBookingForDates(start, end, bookingsToFilter) {
135
+ for (const booking of bookingsToFilter) {
136
+ if (booking.status !== EventStatus.REFUSED &&
137
+ booking.status !== EventStatus.CANCELLED &&
138
+ booking.status !== EventStatus.ARCHIVED) {
139
+ if (start >= booking.realStartDate &&
140
+ start + 1000 < booking.realEndDate) {
141
+ return booking;
142
+ }
143
+ if (end > booking.realStartDate + 1000 &&
144
+ end <= booking.realEndDate) {
145
+ return booking;
146
+ }
147
+ if (start <= booking.realStartDate &&
148
+ end >= booking.realEndDate) {
149
+ return booking;
150
+ }
151
+ }
152
+ }
153
+ return null;
154
+ }
155
+ async getAuthorOfEvent(event) {
156
+ const authorMission = await this.missionService.getMission(event.ownerID);
157
+ const author = await this.userService.userFromUserID(authorMission.userID);
158
+ return author;
159
+ }
160
+ }
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9ib29raW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBd0IsTUFBTSxrQkFBa0IsQ0FBQztBQUs3RixNQUFNLE9BQU8sY0FBYztJQUV2QixZQUFvQixZQUEwQixFQUFTLFdBQTRCLEVBQ3ZFLGNBQThCO1FBRHRCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQ3ZFLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUFJLENBQUM7SUFFL0Msd0JBQXdCLENBQUMsTUFBZTtRQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sTUFBTTthQUNSLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDcEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELHFDQUFxQyxDQUFDLE1BQWU7UUFDakQsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sTUFBTTthQUNSLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FB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Q0FBQyxPQUFPLENBQ2hCLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUNoRCxhQUFhLENBQUMsTUFBTSxDQUN2QixDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGF0ZUhhc0V4cGlyZWQgfSBmcm9tIFwiLi4vaGVscGVycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEV2ZW50VHlwZSwgRXZlbnRTdGF0dXMsIEVtYWlsU3RhdHVzLCBFdmVudCwgUHJvZmlsZUVudGl0eSB9IGZyb20gXCIuLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gXCIuL21vZGVscy9ldmVudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE1pc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL21pc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UgfSBmcm9tIFwiLi91c2VyLnNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBCb29raW5nU2VydmljZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtaXNzaW9uU2VydmljZTogTWlzc2lvblNlcnZpY2UsKSB7fVxyXG5cclxuICAgIGdldEZ1dHVyZU9yQ3VycmVudEV2ZW50cyhldmVudHM6IEV2ZW50W10pOiBFdmVudFtdIHtcclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBldmVudHNcclxuICAgICAgICAgICAgLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LnJlYWxFbmREYXRlID4gbm93LmdldFRpbWUoKSlcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucmVhbFN0YXJ0RGF0ZSAtIGIucmVhbFN0YXJ0RGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RXZlbnRzV2l0aFJlYWxTdGFydERhdGVCZWZvcmVUb2RheShldmVudHM6IEV2ZW50W10pOiBFdmVudFtdIHtcclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIG5vdy5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgICAgICByZXR1cm4gZXZlbnRzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5yZWFsU3RhcnREYXRlIDwgbm93LmdldFRpbWUoKSlcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIucmVhbFN0YXJ0RGF0ZSAtIGEucmVhbFN0YXJ0RGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYXV0b1VwZGF0ZUJvb2tpbmdFdmVudChcclxuICAgICAgICBldmVudFByb206IEV2ZW50IHwgUHJvbWlzZTxFdmVudD4sXHJcbiAgICApOiBQcm9taXNlPEV2ZW50PiB7XHJcbiAgICAgICAgY29uc3QgZXZlbnQgPSBhd2FpdCBldmVudFByb207XHJcbiAgICAgICAgY29uc3Qgc3RhcnRFeHBpcmVkID0gZGF0ZUhhc0V4cGlyZWQoZXZlbnQucmVhbFN0YXJ0RGF0ZSk7XHJcbiAgICAgICAgY29uc3QgZW5kRXhwaXJlZCA9IGRhdGVIYXNFeHBpcmVkKGV2ZW50LnJlYWxFbmREYXRlKTtcclxuXHJcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEV2ZW50VHlwZS5CT09LSU5HICYmIGVuZEV4cGlyZWQpIHtcclxuICAgICAgICAgICAgLyoqIFtCT09LSU5HXSBWQUxJREFURUQgPT4gTEFURSAqL1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuc3RhdHVzID09PSBFdmVudFN0YXR1cy5WQUxJREFURUQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZS51cGRhdGVFdmVudCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogRXZlbnRTdGF0dXMuTEFURSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qKiBbQk9PS0lOR10gQ1JFQVRFRCA9PiBSRUZVU0VEICovXHJcbiAgICAgICAgICAgIGlmIChldmVudC5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkNSRUFURUQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZS51cGRhdGVFdmVudCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogRXZlbnRTdGF0dXMuUkVGVVNFRCxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldmVudC50eXBlID09PSBFdmVudFR5cGUuQk9PS0lOR19TVUJDUklQVElPTikge1xyXG4gICAgICAgICAgICAvKiogW1NVQl0gQ1JFQVRFRCA9PiBSRUZVU0VEICovXHJcbiAgICAgICAgICAgIGlmIChldmVudC5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkNSRUFURUQgJiYgZW5kRXhwaXJlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnVwZGF0ZUV2ZW50KHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBFdmVudFN0YXR1cy5SRUZVU0VELFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyoqIFtTVUJdIElOX1BST0dSRVNTIHwgVkFMSURBVEVEID0+IENPTVBMRVRFRCAqL1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBlbmRFeHBpcmVkICYmXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQuc3RhdHVzID09PSBFdmVudFN0YXR1cy5JTl9QUk9HUkVTUyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuVkFMSURBVEVEKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZS51cGRhdGVFdmVudCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogRXZlbnRTdGF0dXMuQ09NUExFVEVELFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyoqIFtTVUJdIENSRUFURUQgPT4gSU5fUFJPR1JFU1MgKi9cclxuICAgICAgICAgICAgaWYgKHN0YXJ0RXhwaXJlZCAmJiBldmVudC5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkNSRUFURUQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZS51cGRhdGVFdmVudCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogRXZlbnRTdGF0dXMuSU5fUFJPR1JFU1MsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIG1lcmdlRXZlbnRzVG9TdWJzY3JpcHRzaW9uVW5pcXVlKFxyXG4gICAgICAgIGV2ZW50OiBFdmVudCxcclxuICAgICAgICB1bmlxdWVMaXN0OiBFdmVudFtdLFxyXG4gICAgKTogRXZlbnRbXSB7XHJcbiAgICAgICAgaWYgKCFldmVudCB8fCBldmVudC50eXBlICE9PSBFdmVudFR5cGUuQk9PS0lOR19TVUJDUklQVElPTilcclxuICAgICAgICAgICAgcmV0dXJuIHVuaXF1ZUxpc3Q7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld1VuaXF1ZUxpc3QgPSBbLi4udW5pcXVlTGlzdF07IC8vIGRlZXAgY29weVxyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gbmV3VW5pcXVlTGlzdC5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgIChldmVudF8pID0+IGV2ZW50Xy5ncm91cCA9PT0gZXZlbnQuZ3JvdXAsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLyoqIElmIGFuIGV2ZW50IG9mIHRoZSBzYW1lIGdyb3VwIGFscmVhZHkgZXhpc3QsIHdlIG1lcmdlIGRhdGUsIHRvIGdldCB0aGUgbWluIGFuZCBtYXggZGF0ZSBhbmQgdXBkYXRlIHN0YXR1cyAqL1xyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRXZlbnQgPSBuZXdVbmlxdWVMaXN0W2luZGV4XTtcclxuICAgICAgICAgICAgaWYgKGdyb3VwRXZlbnQucmVhbFN0YXJ0RGF0ZSA+IGV2ZW50LnJlYWxTdGFydERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwRXZlbnQucmVhbFN0YXJ0RGF0ZSA9IGV2ZW50LnJlYWxTdGFydERhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGdyb3VwRXZlbnQucmVhbEVuZERhdGUgPCBldmVudC5yZWFsRW5kRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBFdmVudC5yZWFsRW5kRGF0ZSA9IGV2ZW50LnJlYWxFbmREYXRlO1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBFdmVudC5zdGF0dXMgPSBldmVudC5zdGF0dXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ3JvdXBFdmVudC5hdXRob3IgPSBldmVudC5hdXRob3I7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmV3VW5pcXVlTGlzdC5wdXNoKHsgLi4uZXZlbnQgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3VW5pcXVlTGlzdDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogTWVyZ2UgYSBzdWJzY3JpcHRpb24gZXZlbnQgbGlzdCB0byBhIHVuaXF1ZSBldmVudCAqL1xyXG4gICAgbWVyZ2VFdmVudHNUb1N1YnNjcmlwdGlvbnMoYWxsQm9raW5nczogRXZlbnRbXSk6IEV2ZW50W10ge1xyXG4gICAgICAgIGxldCB1bmlxdWVMaXN0ID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBhbGxCb2tpbmdzKSB7XHJcbiAgICAgICAgICAgIHVuaXF1ZUxpc3QgPSB0aGlzLm1lcmdlRXZlbnRzVG9TdWJzY3JpcHRzaW9uVW5pcXVlKFxyXG4gICAgICAgICAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgICAgICAgICB1bmlxdWVMaXN0LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5pcXVlTGlzdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVTdGF0dXNPZkV2ZW50c0luU3Vic2NyaXB0aW9uV2l0aFJlYXNvbihcclxuICAgICAgICBzdWJzY3JpcHRpb25Hcm91cDogc3RyaW5nLFxyXG4gICAgICAgIG5ld1N0YXR1czogRXZlbnRTdGF0dXMsXHJcbiAgICAgICAgcmVhc29uOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxFdmVudFtdPiB7XHJcbiAgICAgICAgY29uc3QgZXZlbnRzT2ZTdWJjcmlwdGlvbiA9IGF3YWl0IHRoaXMuZXZlbnRTZXJ2aWNlLmdldEV2ZW50c0J5R3JvdXAoXHJcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbkdyb3VwLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFtdO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBldmVudHNPZlN1YmNyaXB0aW9uLm1hcChhc3luYyAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVwZEV2ZW50ID0gYXdhaXQgdGhpcy5ldmVudFNlcnZpY2UudXBkYXRlRXZlbnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBldmVudC5pZCxcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IG5ld1N0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICByZWZ1c2FsUmVhc29uOiByZWFzb24sXHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uU3RhdHVzOiByZWFzb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBFbWFpbFN0YXR1cy5VUERBVEVfVE9fREVMSVZFUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRFdmVudHMucHVzaCh1cGRFdmVudCk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRFdmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWN0aXZlRnV0dXJlQm9va2luZ3MoYWxsQm9va2luZzogRXZlbnRbXSk6IEV2ZW50W10ge1xyXG4gICAgICAgIGxldCBib29raW5ncyA9IHRoaXMuZ2V0RnV0dXJlT3JDdXJyZW50RXZlbnRzKGFsbEJvb2tpbmcpO1xyXG4gICAgICAgIGJvb2tpbmdzID0gYm9va2luZ3MuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLnN0YXR1cyAhPT0gRXZlbnRTdGF0dXMuQ0FOQ0VMTEVEICYmXHJcbiAgICAgICAgICAgICAgICBldmVudF8uc3RhdHVzICE9PSBFdmVudFN0YXR1cy5SRUZVU0VEICYmXHJcbiAgICAgICAgICAgICAgICBldmVudF8uc3RhdHVzICE9PSBFdmVudFN0YXR1cy5BUkNISVZFRCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBib29raW5ncztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhcmNoaXZlRm9yT3duZXJFdmVudHNJblN1YnNjcmlwdGlvbihcclxuICAgICAgICBzdWJzY3JpcHRpb25Hcm91cDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxFdmVudFtdPiB7XHJcbiAgICAgICAgY29uc3QgZXZlbnRzT2ZTdWJjcmlwdGlvbiA9IGF3YWl0IHRoaXMuZXZlbnRTZXJ2aWNlLmdldEV2ZW50c0J5R3JvdXAoXHJcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbkdyb3VwLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFtdO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBldmVudHNPZlN1YmNyaXB0aW9uLm1hcChhc3luYyAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVwZEV2ZW50ID0gYXdhaXQgdGhpcy5ldmVudFNlcnZpY2UudXBkYXRlRXZlbnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBldmVudC5pZCxcclxuICAgICAgICAgICAgICAgICAgICBhcmNoaXZlZEJ5T3duZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRFdmVudHMucHVzaCh1cGRFdmVudCk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRFdmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29uZmxpY3RCb29raW5nRm9yRGF0ZXMoXHJcbiAgICAgICAgc3RhcnQ6IG51bWJlcixcclxuICAgICAgICBlbmQ6IG51bWJlcixcclxuICAgICAgICBib29raW5nc1RvRmlsdGVyOiBFdmVudFtdLFxyXG4gICAgKTogRXZlbnQgfCBudWxsIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGJvb2tpbmcgb2YgYm9va2luZ3NUb0ZpbHRlcikge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBib29raW5nLnN0YXR1cyAhPT0gRXZlbnRTdGF0dXMuUkVGVVNFRCAmJlxyXG4gICAgICAgICAgICAgICAgYm9va2luZy5zdGF0dXMgIT09IEV2ZW50U3RhdHVzLkNBTkNFTExFRCAmJlxyXG4gICAgICAgICAgICAgICAgYm9va2luZy5zdGF0dXMgIT09IEV2ZW50U3RhdHVzLkFSQ0hJVkVEXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID49IGJvb2tpbmcucmVhbFN0YXJ0RGF0ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ICsgMTAwMCA8IGJvb2tpbmcucmVhbEVuZERhdGVcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib29raW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA+IGJvb2tpbmcucmVhbFN0YXJ0RGF0ZSArIDEwMDAgJiZcclxuICAgICAgICAgICAgICAgICAgICBlbmQgPD0gYm9va2luZy5yZWFsRW5kRGF0ZVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb2tpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPD0gYm9va2luZy5yZWFsU3RhcnREYXRlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kID49IGJvb2tpbmcucmVhbEVuZERhdGVcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib29raW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEF1dGhvck9mRXZlbnQoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxQcm9maWxlRW50aXR5PiB7XHJcbiAgICAgICAgY29uc3QgYXV0aG9yTWlzc2lvbiA9IGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbihcclxuICAgICAgICAgICAgZXZlbnQub3duZXJJRCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvciA9IGF3YWl0IHRoaXMudXNlclNlcnZpY2UudXNlckZyb21Vc2VySUQoXHJcbiAgICAgICAgICAgIGF1dGhvck1pc3Npb24udXNlcklELFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGF1dGhvcjtcclxuICAgIH1cclxufSJdfQ==
@@ -0,0 +1,135 @@
1
+ /* eslint-disable class-methods-use-this */
2
+ import { Injectable } from "@angular/core";
3
+ import { Subject } from "rxjs";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@ng-bootstrap/ng-bootstrap";
6
+ import * as i2 from "@angular/router";
7
+ import * as i3 from "./models/comment.service";
8
+ export class ContentService {
9
+ constructor(modalService, router, commentService) {
10
+ this.modalService = modalService;
11
+ this.router = router;
12
+ this.commentService = commentService;
13
+ this.closeModal = new Subject();
14
+ this.nextSlide = new Subject();
15
+ }
16
+ presentVideoModal(video, videoComponent, modalDialogClass) {
17
+ this.modalReference = this.modalService.open(videoComponent, {
18
+ modalDialogClass: modalDialogClass,
19
+ });
20
+ this.modalReference.componentInstance.video = video;
21
+ this.modalReference.dismissed.subscribe(() => {
22
+ this.emitCloseModal();
23
+ });
24
+ this.modalReference.closed.subscribe(() => {
25
+ this.emitCloseModal();
26
+ });
27
+ }
28
+ async presentAudioModal(audioCommentID, audioComponent, modalDialogClass) {
29
+ const audioComment = await this.commentService.getComment(audioCommentID);
30
+ const audioMediaContent = {
31
+ path: audioComment.annexe,
32
+ title: audioComment.title,
33
+ description: audioComment.description,
34
+ };
35
+ this.modalReference = this.modalService.open(audioComponent, {
36
+ modalDialogClass: modalDialogClass,
37
+ });
38
+ this.modalReference.componentInstance.audio = audioMediaContent;
39
+ this.modalReference.dismissed.subscribe(() => {
40
+ this.emitCloseModal();
41
+ });
42
+ this.modalReference.closed.subscribe(() => {
43
+ this.emitCloseModal();
44
+ });
45
+ }
46
+ presentImageCarouselModal(featureID, carouselComponent, modalDialogClass, fromTag = true, selectedImageIndex = '0') {
47
+ this.modalReference = this.modalService.open(carouselComponent, {
48
+ modalDialogClass: modalDialogClass,
49
+ });
50
+ this.modalReference.componentInstance.featureID = featureID;
51
+ this.modalReference.componentInstance.fromTag = fromTag;
52
+ this.modalReference.componentInstance.selectedImageIndex = selectedImageIndex;
53
+ this.modalReference.dismissed.subscribe(() => {
54
+ this.emitCloseModal();
55
+ });
56
+ this.modalReference.closed.subscribe(() => {
57
+ this.emitCloseModal();
58
+ });
59
+ this.modalReference.componentInstance.slideChanged.subscribe((slide) => {
60
+ this.nextSlide.next(slide.current);
61
+ });
62
+ }
63
+ presentPdfModal(url, pdfComponent, modalDialogClass) {
64
+ this.modalReference = this.modalService.open(pdfComponent, {
65
+ modalDialogClass: modalDialogClass,
66
+ });
67
+ this.modalReference.componentInstance.url = url;
68
+ this.modalReference.dismissed.subscribe(() => {
69
+ this.emitCloseModal();
70
+ });
71
+ this.modalReference.closed.subscribe(() => {
72
+ this.emitCloseModal();
73
+ });
74
+ }
75
+ presentMuseumImageCarouselModal(carouselComponent, modalDialogClass, fromTag = true, selectedImageIndex = "0", images = null, commentImageID = null) {
76
+ this.modalReference = this.modalService.open(carouselComponent, {
77
+ modalDialogClass,
78
+ });
79
+ this.modalReference.componentInstance.fromTag = fromTag;
80
+ this.modalReference.componentInstance.selectedImageIndex =
81
+ selectedImageIndex;
82
+ this.modalReference.componentInstance.images = images;
83
+ this.modalReference.componentInstance.commentID = commentImageID;
84
+ this.modalReference.dismissed.subscribe(() => {
85
+ this.emitCloseModal();
86
+ });
87
+ this.modalReference.closed.subscribe(() => {
88
+ this.emitCloseModal();
89
+ });
90
+ this.modalReference.componentInstance.slideChanged.subscribe((slide) => {
91
+ this.nextSlide.next(slide.current);
92
+ });
93
+ }
94
+ toogleAudioElement(url) {
95
+ if (!this.currentAudio || this.currentAudio.src !== url) {
96
+ this.currentAudio = new Audio(url);
97
+ }
98
+ if (this.currentAudio.duration > 0 && !this.currentAudio.paused) {
99
+ // it is playing, we stop it
100
+ this.currentAudio.pause();
101
+ }
102
+ else {
103
+ this.currentAudio.play();
104
+ }
105
+ }
106
+ showFullscreenCarouselForFeature(featureID, fromTag = false) {
107
+ const url = this.router.serializeUrl(this.router.createUrlTree([`/fullscreen/${featureID}`], {
108
+ queryParams: { fromTag },
109
+ }));
110
+ window.open(url, "_blank");
111
+ }
112
+ emitCloseModal() {
113
+ this.modalReference = null;
114
+ this.closeModal.next(true);
115
+ }
116
+ forceCloseCurrentModal() {
117
+ if (this.modalReference) {
118
+ this.modalReference.dismiss("forced");
119
+ }
120
+ }
121
+ moveToSlide(slide) {
122
+ if (this.modalReference) {
123
+ this.modalReference.componentInstance.navigateToSlide(slide);
124
+ }
125
+ }
126
+ }
127
+ ContentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ContentService, deps: [{ token: i1.NgbModal }, { token: i2.Router }, { token: i3.CommentService }], target: i0.ɵɵFactoryTarget.Injectable });
128
+ ContentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ContentService, providedIn: "root" });
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ContentService, decorators: [{
130
+ type: Injectable,
131
+ args: [{
132
+ providedIn: "root",
133
+ }]
134
+ }], ctorParameters: function () { return [{ type: i1.NgbModal }, { type: i2.Router }, { type: i3.CommentService }]; } });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9jb250ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFRL0IsTUFBTSxPQUFPLGNBQWM7SUFTdkIsWUFBbUIsWUFBc0IsRUFBVSxNQUFjLEVBQVUsY0FBOEI7UUFBdEYsaUJBQVksR0FBWixZQUFZLENBQVU7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBSnpHLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRXBDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO0lBRTBFLENBQUM7SUFFN0csaUJBQWlCLENBQUMsS0FBbUIsRUFBRSxjQUFtQixFQUFFLGdCQUF3QjtRQUNoRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN6RCxnQkFBZ0IsRUFBRSxnQkFBZ0I7U0FDckMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN0QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7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QUFFO1lBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hFO0lBQ0wsQ0FBQzs7MkdBakpRLGNBQWM7K0dBQWQsY0FBYyxjQUZYLE1BQU07MkZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE1lZGlhQ29udGVudCB9IGZyb20gXCIuLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENvbW1lbnRTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL2NvbW1lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBGZWF0dXJlU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9mZWF0dXJlLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udGVudFNlcnZpY2Uge1xyXG4gICAgbW9kYWxSZWZlcmVuY2U7XHJcblxyXG4gICAgY3VycmVudEF1ZGlvOiBIVE1MQXVkaW9FbGVtZW50O1xyXG5cclxuICAgIGNsb3NlTW9kYWwgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICAgIG5leHRTbGlkZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBjb21tZW50U2VydmljZTogQ29tbWVudFNlcnZpY2UpIHt9XHJcblxyXG4gICAgcHJlc2VudFZpZGVvTW9kYWwodmlkZW86IE1lZGlhQ29udGVudCwgdmlkZW9Db21wb25lbnQ6IGFueSwgbW9kYWxEaWFsb2dDbGFzczogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZmVyZW5jZSA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odmlkZW9Db21wb25lbnQsIHtcclxuICAgICAgICAgICAgbW9kYWxEaWFsb2dDbGFzczogbW9kYWxEaWFsb2dDbGFzcyxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLnZpZGVvID0gdmlkZW87XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZmVyZW5jZS5kaXNtaXNzZWQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0Q2xvc2VNb2RhbCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWZlcmVuY2UuY2xvc2VkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdENsb3NlTW9kYWwoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcmVzZW50QXVkaW9Nb2RhbChhdWRpb0NvbW1lbnRJRDogc3RyaW5nLCBhdWRpb0NvbXBvbmVudDogYW55LCBtb2RhbERpYWxvZ0NsYXNzOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBhdWRpb0NvbW1lbnQgPSBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLmdldENvbW1lbnQoYXVkaW9Db21tZW50SUQpO1xyXG4gICAgICAgIGNvbnN0IGF1ZGlvTWVkaWFDb250ZW50ID0ge1xyXG4gICAgICAgICAgICBwYXRoOiBhdWRpb0NvbW1lbnQuYW5uZXhlLFxyXG4gICAgICAgICAgICB0aXRsZTogYXVkaW9Db21tZW50LnRpdGxlLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXVkaW9Db21tZW50LmRlc2NyaXB0aW9uLFxyXG4gICAgICAgIH0gYXMgTWVkaWFDb250ZW50O1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWZlcmVuY2UgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGF1ZGlvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIG1vZGFsRGlhbG9nQ2xhc3M6IG1vZGFsRGlhbG9nQ2xhc3MsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5hdWRpbyA9IGF1ZGlvTWVkaWFDb250ZW50O1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWZlcmVuY2UuZGlzbWlzc2VkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdENsb3NlTW9kYWwoKTsgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWZlcmVuY2UuY2xvc2VkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdENsb3NlTW9kYWwoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVzZW50SW1hZ2VDYXJvdXNlbE1vZGFsKGZlYXR1cmVJRDogc3RyaW5nLCBjYXJvdXNlbENvbXBvbmVudDogYW55LCBtb2RhbERpYWxvZ0NsYXNzOiBzdHJpbmcsIFxyXG4gICAgICAgIGZyb21UYWcgPSB0cnVlLCBzZWxlY3RlZEltYWdlSW5kZXg9JzAnKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZmVyZW5jZSA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgIGNhcm91c2VsQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBtb2RhbERpYWxvZ0NsYXNzOiBtb2RhbERpYWxvZ0NsYXNzLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5mZWF0dXJlSUQgPSBmZWF0dXJlSUQ7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5mcm9tVGFnID0gZnJvbVRhZztcclxuICAgICAgICB0aGlzLm1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLnNlbGVjdGVkSW1hZ2VJbmRleCA9IHNlbGVjdGVkSW1hZ2VJbmRleDtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmZXJlbmNlLmRpc21pc3NlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRDbG9zZU1vZGFsKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZmVyZW5jZS5jbG9zZWQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0Q2xvc2VNb2RhbCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWZlcmVuY2UuY29tcG9uZW50SW5zdGFuY2Uuc2xpZGVDaGFuZ2VkLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKHNsaWRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRTbGlkZS5uZXh0KHNsaWRlLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlc2VudFBkZk1vZGFsKHVybDogc3RyaW5nLCBwZGZDb21wb25lbnQ6IGFueSwgbW9kYWxEaWFsb2dDbGFzczogc3RyaW5nLCkge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWZlcmVuY2UgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHBkZkNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBtb2RhbERpYWxvZ0NsYXNzOiBtb2RhbERpYWxvZ0NsYXNzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWZlcmVuY2UuY29tcG9uZW50SW5zdGFuY2UudXJsID0gdXJsO1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWZlcmVuY2UuZGlzbWlzc2VkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdENsb3NlTW9kYWwoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmZXJlbmNlLmNsb3NlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRDbG9zZU1vZGFsKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlc2VudE11c2V1bUltYWdlQ2Fyb3VzZWxNb2RhbChcclxuICAgICAgICBjYXJvdXNlbENvbXBvbmVudDogYW55LFxyXG4gICAgICAgIG1vZGFsRGlhbG9nQ2xhc3M6IHN0cmluZyxcclxuICAgICAgICBmcm9tVGFnID0gdHJ1ZSxcclxuICAgICAgICBzZWxlY3RlZEltYWdlSW5kZXggPSBcIjBcIixcclxuICAgICAgICBpbWFnZXM6IGFueVtdID0gbnVsbCxcclxuICAgICAgICBjb21tZW50SW1hZ2VJRDogc3RyaW5nID0gbnVsbCxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWZlcmVuY2UgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGNhcm91c2VsQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIG1vZGFsRGlhbG9nQ2xhc3MsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5mcm9tVGFnID0gZnJvbVRhZztcclxuICAgICAgICB0aGlzLm1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLnNlbGVjdGVkSW1hZ2VJbmRleCA9XHJcbiAgICAgICAgICAgIHNlbGVjdGVkSW1hZ2VJbmRleDtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLmltYWdlcyA9IGltYWdlcztcclxuICAgICAgICB0aGlzLm1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLmNvbW1lbnRJRCA9IGNvbW1lbnRJbWFnZUlEO1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWZlcmVuY2UuZGlzbWlzc2VkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdENsb3NlTW9kYWwoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmZXJlbmNlLmNsb3NlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRDbG9zZU1vZGFsKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5zbGlkZUNoYW5nZWQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAoc2xpZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dFNsaWRlLm5leHQoc2xpZGUuY3VycmVudCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0b29nbGVBdWRpb0VsZW1lbnQodXJsOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudEF1ZGlvIHx8IHRoaXMuY3VycmVudEF1ZGlvLnNyYyAhPT0gdXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEF1ZGlvID0gbmV3IEF1ZGlvKHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRBdWRpby5kdXJhdGlvbiA+IDAgJiYgIXRoaXMuY3VycmVudEF1ZGlvLnBhdXNlZCkge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyBwbGF5aW5nLCB3ZSBzdG9wIGl0XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEF1ZGlvLnBhdXNlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXVkaW8ucGxheSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93RnVsbHNjcmVlbkNhcm91c2VsRm9yRmVhdHVyZShmZWF0dXJlSUQ6IHN0cmluZywgZnJvbVRhZyA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKFxyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtgL2Z1bGxzY3JlZW4vJHtmZWF0dXJlSUR9YF0sIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IGZyb21UYWcgfSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVtaXRDbG9zZU1vZGFsKCkge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWZlcmVuY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2xvc2VNb2RhbC5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmNlQ2xvc2VDdXJyZW50TW9kYWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kYWxSZWZlcmVuY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RhbFJlZmVyZW5jZS5kaXNtaXNzKFwiZm9yY2VkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtb3ZlVG9TbGlkZShzbGlkZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kYWxSZWZlcmVuY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5uYXZpZ2F0ZVRvU2xpZGUoc2xpZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=