@idea-ionic/uncommon 8.5.13 → 8.6.0-beta.1
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/fesm2022/idea-ionic-uncommon.mjs +85 -85
- package/fesm2022/idea-ionic-uncommon.mjs.map +1 -1
- package/index.d.ts +1405 -3
- package/package.json +12 -13
- package/esm2022/idea-ionic-uncommon.mjs +0 -5
- package/esm2022/public-api.mjs +0 -26
- package/esm2022/src/AWSAPI.service.mjs +0 -431
- package/esm2022/src/AWSAPISocket.service.mjs +0 -188
- package/esm2022/src/address/address.component.mjs +0 -409
- package/esm2022/src/announcement/announcement.component.mjs +0 -72
- package/esm2022/src/cachedResources.service.mjs +0 -55
- package/esm2022/src/colors/colorPicker.component.mjs +0 -191
- package/esm2022/src/contacts/contacts.component.mjs +0 -188
- package/esm2022/src/dateTime/calendarPicker.component.mjs +0 -213
- package/esm2022/src/dateTime/dateTime.component.mjs +0 -217
- package/esm2022/src/duration/duration.component.mjs +0 -195
- package/esm2022/src/echo/echo.page.mjs +0 -233
- package/esm2022/src/echo/echo.routes.mjs +0 -6
- package/esm2022/src/errorReporting.service.mjs +0 -69
- package/esm2022/src/mde/mde.component.mjs +0 -143
- package/esm2022/src/mde/mdeToolbar.component.mjs +0 -25
- package/esm2022/src/offline/cacheableResource.component.mjs +0 -56
- package/esm2022/src/offline/offline.service.mjs +0 -63
- package/esm2022/src/offline/offlineData.service.mjs +0 -480
- package/esm2022/src/offline/offlineIndicator.component.mjs +0 -105
- package/esm2022/src/offline/offlineManager.component.mjs +0 -101
- package/esm2022/src/pushNotifications.service.mjs +0 -57
- package/esm2022/src/sentiment/sentiment.component.mjs +0 -112
- package/esm2022/src/timeInterval/fromTimeToTime.component.mjs +0 -171
- package/esm2022/src/timeInterval/timeInterval.component.mjs +0 -206
- package/esm2022/src/tinCan.service.mjs +0 -49
- package/public-api.d.ts +0 -25
- package/src/AWSAPI.service.d.ts +0 -178
- package/src/AWSAPISocket.service.d.ts +0 -129
- package/src/address/address.component.d.ts +0 -64
- package/src/announcement/announcement.component.d.ts +0 -23
- package/src/cachedResources.service.d.ts +0 -34
- package/src/colors/colorPicker.component.d.ts +0 -78
- package/src/contacts/contacts.component.d.ts +0 -31
- package/src/dateTime/calendarPicker.component.d.ts +0 -45
- package/src/dateTime/dateTime.component.d.ts +0 -81
- package/src/duration/duration.component.d.ts +0 -68
- package/src/echo/echo.page.d.ts +0 -34
- package/src/echo/echo.routes.d.ts +0 -2
- package/src/errorReporting.service.d.ts +0 -26
- package/src/mde/mde.component.d.ts +0 -39
- package/src/mde/mdeToolbar.component.d.ts +0 -5
- package/src/offline/cacheableResource.component.d.ts +0 -11
- package/src/offline/offline.service.d.ts +0 -39
- package/src/offline/offlineData.service.d.ts +0 -281
- package/src/offline/offlineIndicator.component.d.ts +0 -25
- package/src/offline/offlineManager.component.d.ts +0 -17
- package/src/pushNotifications.service.d.ts +0 -26
- package/src/sentiment/sentiment.component.d.ts +0 -35
- package/src/timeInterval/fromTimeToTime.component.d.ts +0 -61
- package/src/timeInterval/timeInterval.component.d.ts +0 -84
- package/src/tinCan.service.d.ts +0 -31
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, Input, inject } from '@angular/core';
|
|
3
|
-
import { ModalController, AlertController, Platform, IonFab, IonFabButton, IonIcon } from '@ionic/angular/standalone';
|
|
4
|
-
import { IDEATranslationsService } from '@idea-ionic/common';
|
|
5
|
-
import { IDEAOfflineManagerComponent } from './offlineManager.component';
|
|
6
|
-
import { IDEAOfflineDataService } from './offlineData.service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class IDEAOfflineIndicatorComponent {
|
|
9
|
-
constructor() {
|
|
10
|
-
this._alert = inject(AlertController);
|
|
11
|
-
this._modal = inject(ModalController);
|
|
12
|
-
this._translate = inject(IDEATranslationsService);
|
|
13
|
-
this._platform = inject(Platform);
|
|
14
|
-
this._offline = inject(IDEAOfflineDataService);
|
|
15
|
-
/**
|
|
16
|
-
* Vertical position.
|
|
17
|
-
*/
|
|
18
|
-
this.vertical = 'bottom';
|
|
19
|
-
/**
|
|
20
|
-
* Horizontal position.
|
|
21
|
-
*/
|
|
22
|
-
this.horizontal = 'start';
|
|
23
|
-
/**
|
|
24
|
-
* Whether it is positionated on an edge.
|
|
25
|
-
*/
|
|
26
|
-
this.edge = false;
|
|
27
|
-
}
|
|
28
|
-
async showStatus() {
|
|
29
|
-
if (this._offline.isOffline()) {
|
|
30
|
-
const isOnline = await this._offline.check();
|
|
31
|
-
if (!isOnline) {
|
|
32
|
-
const alert = await this._alert.create({
|
|
33
|
-
header: this._translate._('IDEA_UNCOMMON.OFFLINE.YOU_ARE_OFFLINE'),
|
|
34
|
-
message: this._translate._('IDEA_UNCOMMON.OFFLINE.FEATURES_REDUCED_CONTENTS_NOT_UP_TO_DATE'),
|
|
35
|
-
buttons: [this._translate._('COMMON.GOT_IT')]
|
|
36
|
-
});
|
|
37
|
-
alert.present();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
else if (this._offline.isAllowed()) {
|
|
41
|
-
const modal = await this._modal.create({ component: IDEAOfflineManagerComponent });
|
|
42
|
-
modal.present();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEAOfflineIndicatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: IDEAOfflineIndicatorComponent, isStandalone: true, selector: "idea-offline-indicator", inputs: { vertical: "vertical", horizontal: "horizontal", edge: "edge" }, ngImport: i0, template: `
|
|
47
|
-
@if (
|
|
48
|
-
_platform.is('mobile') && (_offline.isOffline() || _offline.synchronizing || _offline.requiresManualConfirmation)
|
|
49
|
-
) {
|
|
50
|
-
<ion-fab [vertical]="vertical" [horizontal]="horizontal" [edge]="edge">
|
|
51
|
-
<ion-fab-button color="dark" size="small" (click)="showStatus()">
|
|
52
|
-
<!-- OFFLINE -->
|
|
53
|
-
@if (_offline.isOffline()) {
|
|
54
|
-
<ion-icon name="airplane" />
|
|
55
|
-
}
|
|
56
|
-
<!-- SYNCHRONISING -->
|
|
57
|
-
@if (_offline.isOnline() && _offline.synchronizing) {
|
|
58
|
-
<ion-icon name="sync" />
|
|
59
|
-
}
|
|
60
|
-
<!-- NEED MANAL SYNCHRONISATION -->
|
|
61
|
-
@if (_offline.isOnline() && _offline.requiresManualConfirmation) {
|
|
62
|
-
<ion-icon name="pause" />
|
|
63
|
-
}
|
|
64
|
-
</ion-fab-button>
|
|
65
|
-
</ion-fab>
|
|
66
|
-
}
|
|
67
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonFab, selector: "ion-fab", inputs: ["activated", "edge", "horizontal", "vertical"] }, { kind: "component", type: IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
68
|
-
}
|
|
69
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEAOfflineIndicatorComponent, decorators: [{
|
|
70
|
-
type: Component,
|
|
71
|
-
args: [{
|
|
72
|
-
selector: 'idea-offline-indicator',
|
|
73
|
-
standalone: true,
|
|
74
|
-
imports: [CommonModule, IonFab, IonFabButton, IonIcon],
|
|
75
|
-
template: `
|
|
76
|
-
@if (
|
|
77
|
-
_platform.is('mobile') && (_offline.isOffline() || _offline.synchronizing || _offline.requiresManualConfirmation)
|
|
78
|
-
) {
|
|
79
|
-
<ion-fab [vertical]="vertical" [horizontal]="horizontal" [edge]="edge">
|
|
80
|
-
<ion-fab-button color="dark" size="small" (click)="showStatus()">
|
|
81
|
-
<!-- OFFLINE -->
|
|
82
|
-
@if (_offline.isOffline()) {
|
|
83
|
-
<ion-icon name="airplane" />
|
|
84
|
-
}
|
|
85
|
-
<!-- SYNCHRONISING -->
|
|
86
|
-
@if (_offline.isOnline() && _offline.synchronizing) {
|
|
87
|
-
<ion-icon name="sync" />
|
|
88
|
-
}
|
|
89
|
-
<!-- NEED MANAL SYNCHRONISATION -->
|
|
90
|
-
@if (_offline.isOnline() && _offline.requiresManualConfirmation) {
|
|
91
|
-
<ion-icon name="pause" />
|
|
92
|
-
}
|
|
93
|
-
</ion-fab-button>
|
|
94
|
-
</ion-fab>
|
|
95
|
-
}
|
|
96
|
-
`
|
|
97
|
-
}]
|
|
98
|
-
}], propDecorators: { vertical: [{
|
|
99
|
-
type: Input
|
|
100
|
-
}], horizontal: [{
|
|
101
|
-
type: Input
|
|
102
|
-
}], edge: [{
|
|
103
|
-
type: Input
|
|
104
|
-
}] } });
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZmbGluZUluZGljYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tb2R1bGVzL3VuY29tbW9uL3NyYy9vZmZsaW5lL29mZmxpbmVJbmRpY2F0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFN0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBNkIvRCxNQUFNLE9BQU8sNkJBQTZCO0lBM0IxQztRQTRCVSxXQUFNLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pDLFdBQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsZUFBVSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3JELGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsYUFBUSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRTFDOztXQUVHO1FBQ00sYUFBUSxHQUFHLFFBQVEsQ0FBQztRQUM3Qjs7V0FFRztRQUNNLGVBQVUsR0FBRyxPQUFPLENBQUM7UUFDOUI7O1dBRUc7UUFDTSxTQUFJLEdBQUcsS0FBSyxDQUFDO0tBa0J2QjtJQWhCQyxLQUFLLENBQUMsVUFBVTtRQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztvQkFDckMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLHVDQUF1QyxDQUFDO29CQUNsRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsZ0VBQWdFLENBQUM7b0JBQzVGLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2lCQUM5QyxDQUFDLENBQUM7Z0JBQ0gsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDckMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSxDQUFDLENBQUM7WUFDbkYsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDOzhHQW5DVSw2QkFBNkI7a0dBQTdCLDZCQUE2Qiw0SkF2QjlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQlQsMkRBdEJTLFlBQVksK0JBQUUsTUFBTSw2R0FBRSxZQUFZLDhPQUFFLE9BQU87OzJGQXdCMUMsNkJBQTZCO2tCQTNCekMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDO29CQUN0RCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCVDtpQkFDRjs4QkFXVSxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBBbGVydENvbnRyb2xsZXIsIFBsYXRmb3JtLCBJb25GYWIsIElvbkZhYkJ1dHRvbiwgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICdAaWRlYS1pb25pYy9jb21tb24nO1xuXG5pbXBvcnQgeyBJREVBT2ZmbGluZU1hbmFnZXJDb21wb25lbnQgfSBmcm9tICcuL29mZmxpbmVNYW5hZ2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJREVBT2ZmbGluZURhdGFTZXJ2aWNlIH0gZnJvbSAnLi9vZmZsaW5lRGF0YS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWRlYS1vZmZsaW5lLWluZGljYXRvcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbkZhYiwgSW9uRmFiQnV0dG9uLCBJb25JY29uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKFxuICAgICAgX3BsYXRmb3JtLmlzKCdtb2JpbGUnKSAmJiAoX29mZmxpbmUuaXNPZmZsaW5lKCkgfHwgX29mZmxpbmUuc3luY2hyb25pemluZyB8fCBfb2ZmbGluZS5yZXF1aXJlc01hbnVhbENvbmZpcm1hdGlvbilcbiAgICApIHtcbiAgICAgIDxpb24tZmFiIFt2ZXJ0aWNhbF09XCJ2ZXJ0aWNhbFwiIFtob3Jpem9udGFsXT1cImhvcml6b250YWxcIiBbZWRnZV09XCJlZGdlXCI+XG4gICAgICAgIDxpb24tZmFiLWJ1dHRvbiBjb2xvcj1cImRhcmtcIiBzaXplPVwic21hbGxcIiAoY2xpY2spPVwic2hvd1N0YXR1cygpXCI+XG4gICAgICAgICAgPCEtLSBPRkZMSU5FIC0tPlxuICAgICAgICAgIEBpZiAoX29mZmxpbmUuaXNPZmZsaW5lKCkpIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiYWlycGxhbmVcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8IS0tIFNZTkNIUk9OSVNJTkcgLS0+XG4gICAgICAgICAgQGlmIChfb2ZmbGluZS5pc09ubGluZSgpICYmIF9vZmZsaW5lLnN5bmNocm9uaXppbmcpIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwic3luY1wiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIDwhLS0gTkVFRCBNQU5BTCBTWU5DSFJPTklTQVRJT04gLS0+XG4gICAgICAgICAgQGlmIChfb2ZmbGluZS5pc09ubGluZSgpICYmIF9vZmZsaW5lLnJlcXVpcmVzTWFudWFsQ29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInBhdXNlXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvaW9uLWZhYi1idXR0b24+XG4gICAgICA8L2lvbi1mYWI+XG4gICAgfVxuICBgXG59KVxuZXhwb3J0IGNsYXNzIElERUFPZmZsaW5lSW5kaWNhdG9yQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfYWxlcnQgPSBpbmplY3QoQWxlcnRDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfbW9kYWwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfdHJhbnNsYXRlID0gaW5qZWN0KElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlKTtcbiAgX3BsYXRmb3JtID0gaW5qZWN0KFBsYXRmb3JtKTtcbiAgX29mZmxpbmUgPSBpbmplY3QoSURFQU9mZmxpbmVEYXRhU2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFZlcnRpY2FsIHBvc2l0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgdmVydGljYWwgPSAnYm90dG9tJztcbiAgLyoqXG4gICAqIEhvcml6b250YWwgcG9zaXRpb24uXG4gICAqL1xuICBASW5wdXQoKSBob3Jpem9udGFsID0gJ3N0YXJ0JztcbiAgLyoqXG4gICAqIFdoZXRoZXIgaXQgaXMgcG9zaXRpb25hdGVkIG9uIGFuIGVkZ2UuXG4gICAqL1xuICBASW5wdXQoKSBlZGdlID0gZmFsc2U7XG5cbiAgYXN5bmMgc2hvd1N0YXR1cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb2ZmbGluZS5pc09mZmxpbmUoKSkge1xuICAgICAgY29uc3QgaXNPbmxpbmUgPSBhd2FpdCB0aGlzLl9vZmZsaW5lLmNoZWNrKCk7XG4gICAgICBpZiAoIWlzT25saW5lKSB7XG4gICAgICAgIGNvbnN0IGFsZXJ0ID0gYXdhaXQgdGhpcy5fYWxlcnQuY3JlYXRlKHtcbiAgICAgICAgICBoZWFkZXI6IHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX1VOQ09NTU9OLk9GRkxJTkUuWU9VX0FSRV9PRkZMSU5FJyksXG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfVU5DT01NT04uT0ZGTElORS5GRUFUVVJFU19SRURVQ0VEX0NPTlRFTlRTX05PVF9VUF9UT19EQVRFJyksXG4gICAgICAgICAgYnV0dG9uczogW3RoaXMuX3RyYW5zbGF0ZS5fKCdDT01NT04uR09UX0lUJyldXG4gICAgICAgIH0pO1xuICAgICAgICBhbGVydC5wcmVzZW50KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9vZmZsaW5lLmlzQWxsb3dlZCgpKSB7XG4gICAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMuX21vZGFsLmNyZWF0ZSh7IGNvbXBvbmVudDogSURFQU9mZmxpbmVNYW5hZ2VyQ29tcG9uZW50IH0pO1xuICAgICAgbW9kYWwucHJlc2VudCgpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, inject } from '@angular/core';
|
|
3
|
-
import { ModalController, AlertController, IonHeader, IonToolbar, IonButton, IonIcon, IonButtons, IonTitle, IonContent, IonList, IonListHeader, IonLabel, IonText, IonItem, IonSpinner } from '@ionic/angular/standalone';
|
|
4
|
-
import { Browser } from '@capacitor/browser';
|
|
5
|
-
import { IDEAActionSheetController, IDEALocalizedDatePipe, IDEATranslatePipe, IDEATranslationsService } from '@idea-ionic/common';
|
|
6
|
-
import { IDEAOfflineDataService } from './offlineData.service';
|
|
7
|
-
import { IDEACacheableResourceComponent } from './cacheableResource.component';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
export class IDEAOfflineManagerComponent {
|
|
10
|
-
constructor() {
|
|
11
|
-
this._modal = inject(ModalController);
|
|
12
|
-
this._alert = inject(AlertController);
|
|
13
|
-
this._actions = inject(IDEAActionSheetController);
|
|
14
|
-
this._translate = inject(IDEATranslationsService);
|
|
15
|
-
this._offline = inject(IDEAOfflineDataService);
|
|
16
|
-
}
|
|
17
|
-
async sync() {
|
|
18
|
-
const alert = await this._alert.create({
|
|
19
|
-
header: this._translate._('IDEA_UNCOMMON.OFFLINE.SYNC_NOW'),
|
|
20
|
-
message: this._translate._('IDEA_UNCOMMON.OFFLINE.DONT_EXIT_APP_DISCLAIMER'),
|
|
21
|
-
buttons: [
|
|
22
|
-
{ text: this._translate._('COMMON.CANCEL') },
|
|
23
|
-
{ text: this._translate._('COMMON.GOT_IT'), handler: () => this._offline.synchronize(true) }
|
|
24
|
-
]
|
|
25
|
-
});
|
|
26
|
-
alert.present();
|
|
27
|
-
}
|
|
28
|
-
async deleteRequest(request) {
|
|
29
|
-
const alert = await this._alert.create({
|
|
30
|
-
header: this._translate._('COMMON.ARE_YOU_SURE'),
|
|
31
|
-
message: this._translate._('IDEA_UNCOMMON.OFFLINE.DELETION_IS_IRREVERSIBLE'),
|
|
32
|
-
buttons: [
|
|
33
|
-
{ text: this._translate._('COMMON.CANCEL') },
|
|
34
|
-
{
|
|
35
|
-
text: this._translate._('COMMON.CONFIRM'),
|
|
36
|
-
handler: () => this._offline.deleteRequest(request)
|
|
37
|
-
}
|
|
38
|
-
]
|
|
39
|
-
});
|
|
40
|
-
alert.present();
|
|
41
|
-
}
|
|
42
|
-
downloadRequestLog(request) {
|
|
43
|
-
const dataURL = window.URL.createObjectURL(new Blob([JSON.stringify(request)], { type: 'text/json' }));
|
|
44
|
-
Browser.open({ url: dataURL });
|
|
45
|
-
}
|
|
46
|
-
async actions() {
|
|
47
|
-
const buttons = [
|
|
48
|
-
{
|
|
49
|
-
text: this._translate._('IDEA_UNCOMMON.OFFLINE.FORCE_FULL_SYNC'),
|
|
50
|
-
icon: 'sync',
|
|
51
|
-
handler: () => this.forceFullSync()
|
|
52
|
-
},
|
|
53
|
-
{ text: this._translate._('COMMON.CANCEL'), role: 'cancel', icon: 'arrow-undo' }
|
|
54
|
-
];
|
|
55
|
-
const actions = await this._actions.create({
|
|
56
|
-
header: this._translate._('IDEA_UNCOMMON.OFFLINE.ADVANCED_ACTIONS'),
|
|
57
|
-
buttons
|
|
58
|
-
});
|
|
59
|
-
actions.present();
|
|
60
|
-
}
|
|
61
|
-
async forceFullSync() {
|
|
62
|
-
const alert = await this._alert.create({
|
|
63
|
-
header: this._translate._('IDEA_UNCOMMON.OFFLINE.FORCE_FULL_SYNC'),
|
|
64
|
-
subHeader: this._translate._('COMMON.ARE_YOU_SURE'),
|
|
65
|
-
message: this._translate._('IDEA_UNCOMMON.OFFLINE.FULL_SYNC_DISCLAIMER'),
|
|
66
|
-
buttons: [
|
|
67
|
-
{ text: this._translate._('COMMON.CANCEL'), role: 'cancel' },
|
|
68
|
-
{ text: this._translate._('COMMON.CONFIRM'), handler: () => this._offline.forceFullSync() }
|
|
69
|
-
]
|
|
70
|
-
});
|
|
71
|
-
alert.present();
|
|
72
|
-
}
|
|
73
|
-
close() {
|
|
74
|
-
this._modal.dismiss();
|
|
75
|
-
}
|
|
76
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEAOfflineManagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
77
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: IDEAOfflineManagerComponent, isStandalone: true, selector: "idea-offline-manager", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>\n {{ 'IDEA_UNCOMMON.OFFLINE.OFFLINE_MANAGER' | translate }}\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'IDEA_UNCOMMON.OFFLINE.ADVANCED_ACTIONS' | translate\" (click)=\"actions()\">\n <ion-icon slot=\"icon-only\" name=\"ellipsis-vertical\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-list class=\"aList\">\n @if (!_offline.synchronizing && _offline.requiresManualConfirmation) {\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.HUGE_SYNC_NEED_MANUAL_CONFIRMATION' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n }\n @if (!_offline.synchronizing) {\n <ion-list-header>\n <ion-label class=\"ion-text-wrap\">\n <h3 class=\"lastSyncAt\">\n {{ 'IDEA_UNCOMMON.OFFLINE.LAST_SYNC' | translate }}:\n <ion-text>\n {{\n _offline.lastSyncAt\n ? (_offline.lastSyncAt | dateLocale: 'medium')\n : ('IDEA_UNCOMMON.OFFLINE.NEVER' | translate)\n }}\n </ion-text>\n </h3>\n @if (_offline.errorInLastSync) {\n <p>\n <ion-text color=\"danger\">\n <b>{{ 'IDEA_UNCOMMON.OFFLINE.ERROR_DURING_LAST_SYNC' | translate }}</b>\n </ion-text>\n </p>\n }\n </ion-label>\n <ion-button\n size=\"small\"\n fill=\"solid\"\n [color]=\"_offline.errorInLastSync ? 'danger' : 'dark'\"\n [disabled]=\"_offline.isOffline()\"\n (click)=\"sync()\"\n >\n <ion-icon slot=\"start\" name=\"sync\" /> {{ 'IDEA_UNCOMMON.OFFLINE.SYNC_NOW' | translate }}\n </ion-button>\n </ion-list-header>\n }\n </ion-list>\n @if (_offline.synchronizing) {\n <ion-list class=\"aList\">\n <ion-item>\n <ion-label class=\"ion-text-center\">\n <ion-spinner name=\"crescent\" color=\"primary\" />\n </ion-label>\n </ion-item>\n </ion-list>\n }\n @if (_offline.useQueueAPIRequests) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.UPLOAD' | translate }}</h2>\n <p>{{ 'IDEA_UNCOMMON.OFFLINE.UPLOAD_QUEUE_REQUESTS_EXPLANATION' | translate }}</p>\n </ion-label>\n </ion-list-header>\n @if (!_offline.queueAPIRequests.length) {\n <ion-item>\n <i>{{ 'IDEA_UNCOMMON.OFFLINE.NO_ELEMENTS_TO_UPLOAD' | translate }}</i>\n <ion-icon slot=\"end\" size=\"small\" name=\"checkmark\" color=\"success\" />\n </ion-item>\n }\n @for (r of _offline.queueAPIRequests; track r; let odd = $odd) {\n <ion-item [class.oddItem]=\"odd\">\n <ion-label class=\"ion-text-wrap\">\n {{ r.description }}\n @if (r.error) {\n <p>\n <ion-text color=\"danger\">\n <b>{{ 'IDEA_UNCOMMON.OFFLINE.ERROR_CODE' | translate }}: {{ r.error }}</b>\n </ion-text>\n <br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_I' | translate }}<br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_II' | translate }}<br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_III' | translate }}\n </p>\n }\n </ion-label>\n @if (r.error) {\n <ion-button\n fill=\"clear\"\n slot=\"end\"\n color=\"danger\"\n [title]=\"'IDEA_UNCOMMON.OFFLINE.CANCEL_REQUEST' | translate\"\n (click)=\"deleteRequest(r)\"\n >\n <ion-icon slot=\"icon-only\" name=\"trash\" />\n </ion-button>\n }\n @if (r.error) {\n <ion-button\n fill=\"clear\"\n slot=\"end\"\n color=\"medium\"\n [title]=\"'IDEA_UNCOMMON.OFFLINE.DOWNLOAD_LOG' | translate\"\n (click)=\"downloadRequestLog(r)\"\n >\n <ion-icon slot=\"icon-only\" name=\"download\" />\n </ion-button>\n }\n @if (_offline.synchronizing) {\n <ion-spinner slot=\"end\" name=\"dots\" />\n }\n </ion-item>\n }\n </ion-list>\n }\n @if (_offline.getResources().length) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.DOWNLOAD' | translate }}</h2>\n <p>{{ 'IDEA_UNCOMMON.OFFLINE.DOWNLOAD_RESOURCES_EXPLANATION' | translate }}</p>\n </ion-label>\n </ion-list-header>\n @for (r of _offline.getResources(); track r) {\n <idea-cacheable-resource [resource]=\"_offline.getCacheableResource(r)\" />\n }\n </ion-list>\n }\n</ion-content>\n", styles: [".aList{max-width:500px;margin:0 auto}.aList ion-list-header{padding-right:10px}.aList ion-list-header h3.lastSyncAt{margin-top:6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }, { kind: "pipe", type: IDEALocalizedDatePipe, name: "dateLocale" }, { kind: "component", type: IDEACacheableResourceComponent, selector: "idea-cacheable-resource", inputs: ["resource"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonListHeader, selector: "ion-list-header", inputs: ["color", "lines", "mode"] }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }] }); }
|
|
78
|
-
}
|
|
79
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEAOfflineManagerComponent, decorators: [{
|
|
80
|
-
type: Component,
|
|
81
|
-
args: [{ selector: 'idea-offline-manager', standalone: true, imports: [
|
|
82
|
-
CommonModule,
|
|
83
|
-
IDEATranslatePipe,
|
|
84
|
-
IDEALocalizedDatePipe,
|
|
85
|
-
IDEACacheableResourceComponent,
|
|
86
|
-
IonSpinner,
|
|
87
|
-
IonItem,
|
|
88
|
-
IonText,
|
|
89
|
-
IonLabel,
|
|
90
|
-
IonListHeader,
|
|
91
|
-
IonList,
|
|
92
|
-
IonContent,
|
|
93
|
-
IonTitle,
|
|
94
|
-
IonButtons,
|
|
95
|
-
IonIcon,
|
|
96
|
-
IonButton,
|
|
97
|
-
IonToolbar,
|
|
98
|
-
IonHeader
|
|
99
|
-
], template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>\n {{ 'IDEA_UNCOMMON.OFFLINE.OFFLINE_MANAGER' | translate }}\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'IDEA_UNCOMMON.OFFLINE.ADVANCED_ACTIONS' | translate\" (click)=\"actions()\">\n <ion-icon slot=\"icon-only\" name=\"ellipsis-vertical\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-list class=\"aList\">\n @if (!_offline.synchronizing && _offline.requiresManualConfirmation) {\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.HUGE_SYNC_NEED_MANUAL_CONFIRMATION' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n }\n @if (!_offline.synchronizing) {\n <ion-list-header>\n <ion-label class=\"ion-text-wrap\">\n <h3 class=\"lastSyncAt\">\n {{ 'IDEA_UNCOMMON.OFFLINE.LAST_SYNC' | translate }}:\n <ion-text>\n {{\n _offline.lastSyncAt\n ? (_offline.lastSyncAt | dateLocale: 'medium')\n : ('IDEA_UNCOMMON.OFFLINE.NEVER' | translate)\n }}\n </ion-text>\n </h3>\n @if (_offline.errorInLastSync) {\n <p>\n <ion-text color=\"danger\">\n <b>{{ 'IDEA_UNCOMMON.OFFLINE.ERROR_DURING_LAST_SYNC' | translate }}</b>\n </ion-text>\n </p>\n }\n </ion-label>\n <ion-button\n size=\"small\"\n fill=\"solid\"\n [color]=\"_offline.errorInLastSync ? 'danger' : 'dark'\"\n [disabled]=\"_offline.isOffline()\"\n (click)=\"sync()\"\n >\n <ion-icon slot=\"start\" name=\"sync\" /> {{ 'IDEA_UNCOMMON.OFFLINE.SYNC_NOW' | translate }}\n </ion-button>\n </ion-list-header>\n }\n </ion-list>\n @if (_offline.synchronizing) {\n <ion-list class=\"aList\">\n <ion-item>\n <ion-label class=\"ion-text-center\">\n <ion-spinner name=\"crescent\" color=\"primary\" />\n </ion-label>\n </ion-item>\n </ion-list>\n }\n @if (_offline.useQueueAPIRequests) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.UPLOAD' | translate }}</h2>\n <p>{{ 'IDEA_UNCOMMON.OFFLINE.UPLOAD_QUEUE_REQUESTS_EXPLANATION' | translate }}</p>\n </ion-label>\n </ion-list-header>\n @if (!_offline.queueAPIRequests.length) {\n <ion-item>\n <i>{{ 'IDEA_UNCOMMON.OFFLINE.NO_ELEMENTS_TO_UPLOAD' | translate }}</i>\n <ion-icon slot=\"end\" size=\"small\" name=\"checkmark\" color=\"success\" />\n </ion-item>\n }\n @for (r of _offline.queueAPIRequests; track r; let odd = $odd) {\n <ion-item [class.oddItem]=\"odd\">\n <ion-label class=\"ion-text-wrap\">\n {{ r.description }}\n @if (r.error) {\n <p>\n <ion-text color=\"danger\">\n <b>{{ 'IDEA_UNCOMMON.OFFLINE.ERROR_CODE' | translate }}: {{ r.error }}</b>\n </ion-text>\n <br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_I' | translate }}<br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_II' | translate }}<br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_III' | translate }}\n </p>\n }\n </ion-label>\n @if (r.error) {\n <ion-button\n fill=\"clear\"\n slot=\"end\"\n color=\"danger\"\n [title]=\"'IDEA_UNCOMMON.OFFLINE.CANCEL_REQUEST' | translate\"\n (click)=\"deleteRequest(r)\"\n >\n <ion-icon slot=\"icon-only\" name=\"trash\" />\n </ion-button>\n }\n @if (r.error) {\n <ion-button\n fill=\"clear\"\n slot=\"end\"\n color=\"medium\"\n [title]=\"'IDEA_UNCOMMON.OFFLINE.DOWNLOAD_LOG' | translate\"\n (click)=\"downloadRequestLog(r)\"\n >\n <ion-icon slot=\"icon-only\" name=\"download\" />\n </ion-button>\n }\n @if (_offline.synchronizing) {\n <ion-spinner slot=\"end\" name=\"dots\" />\n }\n </ion-item>\n }\n </ion-list>\n }\n @if (_offline.getResources().length) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.DOWNLOAD' | translate }}</h2>\n <p>{{ 'IDEA_UNCOMMON.OFFLINE.DOWNLOAD_RESOURCES_EXPLANATION' | translate }}</p>\n </ion-label>\n </ion-list-header>\n @for (r of _offline.getResources(); track r) {\n <idea-cacheable-resource [resource]=\"_offline.getCacheableResource(r)\" />\n }\n </ion-list>\n }\n</ion-content>\n", styles: [".aList{max-width:500px;margin:0 auto}.aList ion-list-header{padding-right:10px}.aList ion-list-header h3.lastSyncAt{margin-top:6px}\n"] }]
|
|
100
|
-
}] });
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZmbGluZU1hbmFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy91bmNvbW1vbi9zcmMvb2ZmbGluZS9vZmZsaW5lTWFuYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9tb2R1bGVzL3VuY29tbW9uL3NyYy9vZmZsaW5lL29mZmxpbmVNYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFNBQVMsRUFDVCxPQUFPLEVBQ1AsVUFBVSxFQUNWLFFBQVEsRUFDUixVQUFVLEVBQ1YsT0FBTyxFQUNQLGFBQWEsRUFDYixRQUFRLEVBQ1IsT0FBTyxFQUNQLE9BQU8sRUFDUCxVQUFVLEVBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN4QixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxzQkFBc0IsRUFBYyxNQUFNLHVCQUF1QixDQUFDO0FBQzNFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQTJCL0UsTUFBTSxPQUFPLDJCQUEyQjtJQXpCeEM7UUEwQlUsV0FBTSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqQyxXQUFNLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pDLGFBQVEsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3QyxlQUFVLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDckQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0tBaUUzQztJQS9EQyxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDckMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDO1lBQzNELE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxnREFBZ0QsQ0FBQztZQUM1RSxPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQzVDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFrQixFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7YUFDNUc7U0FDRixDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBbUI7UUFDckMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNyQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7WUFDaEQsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGdEQUFnRCxDQUFDO1lBQzVFLE9BQU8sRUFBRTtnQkFDUCxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRTtnQkFDNUM7b0JBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO29CQUN6QyxPQUFPLEVBQUUsR0FBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztpQkFDbkU7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsT0FBbUI7UUFDcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLE9BQU8sR0FBRztZQUNkO2dCQUNFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQztnQkFDaEUsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLEdBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO2FBQ25EO1lBQ0QsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFO1NBQ2pGLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyx3Q0FBd0MsQ0FBQztZQUNuRSxPQUFPO1NBQ1IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYTtRQUNqQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3JDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQztZQUNsRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7WUFDbkQsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLDRDQUE0QyxDQUFDO1lBQ3hFLE9BQU8sRUFBRTtnQkFDUCxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUM1RCxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxFQUFFO2FBQ2xHO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDOzhHQXJFVSwyQkFBMkI7a0dBQTNCLDJCQUEyQixnRkN2RHhDLHdpS0E2SUEsOExEM0dJLFlBQVksMEJBQ1osaUJBQWlCLDZDQUNqQixxQkFBcUIsbURBQ3JCLDhCQUE4QiwwRkFDOUIsVUFBVSx5R0FDVixPQUFPLDBOQUNQLE9BQU8sZ0ZBQ1AsUUFBUSw2RkFDUixhQUFhLGdHQUNiLE9BQU8seUZBQ1AsVUFBVSx3S0FDVixRQUFRLGlGQUNSLFVBQVUsOEVBQ1YsT0FBTywySkFDUCxTQUFTLG9QQUNULFVBQVUsbUZBQ1YsU0FBUzs7MkZBS0EsMkJBQTJCO2tCQXpCdkMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixxQkFBcUI7d0JBQ3JCLDhCQUE4Qjt3QkFDOUIsVUFBVTt3QkFDVixPQUFPO3dCQUNQLE9BQU87d0JBQ1AsUUFBUTt3QkFDUixhQUFhO3dCQUNiLE9BQU87d0JBQ1AsVUFBVTt3QkFDVixRQUFRO3dCQUNSLFVBQVU7d0JBQ1YsT0FBTzt3QkFDUCxTQUFTO3dCQUNULFVBQVU7d0JBQ1YsU0FBUztxQkFDViIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTW9kYWxDb250cm9sbGVyLFxuICBBbGVydENvbnRyb2xsZXIsXG4gIElvbkhlYWRlcixcbiAgSW9uVG9vbGJhcixcbiAgSW9uQnV0dG9uLFxuICBJb25JY29uLFxuICBJb25CdXR0b25zLFxuICBJb25UaXRsZSxcbiAgSW9uQ29udGVudCxcbiAgSW9uTGlzdCxcbiAgSW9uTGlzdEhlYWRlcixcbiAgSW9uTGFiZWwsXG4gIElvblRleHQsXG4gIElvbkl0ZW0sXG4gIElvblNwaW5uZXJcbn0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBCcm93c2VyIH0gZnJvbSAnQGNhcGFjaXRvci9icm93c2VyJztcbmltcG9ydCB7XG4gIElERUFBY3Rpb25TaGVldENvbnRyb2xsZXIsXG4gIElERUFMb2NhbGl6ZWREYXRlUGlwZSxcbiAgSURFQVRyYW5zbGF0ZVBpcGUsXG4gIElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlXG59IGZyb20gJ0BpZGVhLWlvbmljL2NvbW1vbic7XG5cbmltcG9ydCB7IElERUFPZmZsaW5lRGF0YVNlcnZpY2UsIEFQSVJlcXVlc3QgfSBmcm9tICcuL29mZmxpbmVEYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgSURFQUNhY2hlYWJsZVJlc291cmNlQ29tcG9uZW50IH0gZnJvbSAnLi9jYWNoZWFibGVSZXNvdXJjZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZGVhLW9mZmxpbmUtbWFuYWdlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSURFQVRyYW5zbGF0ZVBpcGUsXG4gICAgSURFQUxvY2FsaXplZERhdGVQaXBlLFxuICAgIElERUFDYWNoZWFibGVSZXNvdXJjZUNvbXBvbmVudCxcbiAgICBJb25TcGlubmVyLFxuICAgIElvbkl0ZW0sXG4gICAgSW9uVGV4dCxcbiAgICBJb25MYWJlbCxcbiAgICBJb25MaXN0SGVhZGVyLFxuICAgIElvbkxpc3QsXG4gICAgSW9uQ29udGVudCxcbiAgICBJb25UaXRsZSxcbiAgICBJb25CdXR0b25zLFxuICAgIElvbkljb24sXG4gICAgSW9uQnV0dG9uLFxuICAgIElvblRvb2xiYXIsXG4gICAgSW9uSGVhZGVyXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnb2ZmbGluZU1hbmFnZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnb2ZmbGluZU1hbmFnZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJREVBT2ZmbGluZU1hbmFnZXJDb21wb25lbnQge1xuICBwcml2YXRlIF9tb2RhbCA9IGluamVjdChNb2RhbENvbnRyb2xsZXIpO1xuICBwcml2YXRlIF9hbGVydCA9IGluamVjdChBbGVydENvbnRyb2xsZXIpO1xuICBwcml2YXRlIF9hY3Rpb25zID0gaW5qZWN0KElERUFBY3Rpb25TaGVldENvbnRyb2xsZXIpO1xuICBwcml2YXRlIF90cmFuc2xhdGUgPSBpbmplY3QoSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UpO1xuICBfb2ZmbGluZSA9IGluamVjdChJREVBT2ZmbGluZURhdGFTZXJ2aWNlKTtcblxuICBhc3luYyBzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFsZXJ0ID0gYXdhaXQgdGhpcy5fYWxlcnQuY3JlYXRlKHtcbiAgICAgIGhlYWRlcjogdGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfVU5DT01NT04uT0ZGTElORS5TWU5DX05PVycpLFxuICAgICAgbWVzc2FnZTogdGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfVU5DT01NT04uT0ZGTElORS5ET05UX0VYSVRfQVBQX0RJU0NMQUlNRVInKSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyB0ZXh0OiB0aGlzLl90cmFuc2xhdGUuXygnQ09NTU9OLkNBTkNFTCcpIH0sXG4gICAgICAgIHsgdGV4dDogdGhpcy5fdHJhbnNsYXRlLl8oJ0NPTU1PTi5HT1RfSVQnKSwgaGFuZGxlcjogKCk6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5fb2ZmbGluZS5zeW5jaHJvbml6ZSh0cnVlKSB9XG4gICAgICBdXG4gICAgfSk7XG4gICAgYWxlcnQucHJlc2VudCgpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlUmVxdWVzdChyZXF1ZXN0OiBBUElSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLl9hbGVydC5jcmVhdGUoe1xuICAgICAgaGVhZGVyOiB0aGlzLl90cmFuc2xhdGUuXygnQ09NTU9OLkFSRV9ZT1VfU1VSRScpLFxuICAgICAgbWVzc2FnZTogdGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfVU5DT01NT04uT0ZGTElORS5ERUxFVElPTl9JU19JUlJFVkVSU0lCTEUnKSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyB0ZXh0OiB0aGlzLl90cmFuc2xhdGUuXygnQ09NTU9OLkNBTkNFTCcpIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLl90cmFuc2xhdGUuXygnQ09NTU9OLkNPTkZJUk0nKSxcbiAgICAgICAgICBoYW5kbGVyOiAoKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLl9vZmZsaW5lLmRlbGV0ZVJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuICAgIGFsZXJ0LnByZXNlbnQoKTtcbiAgfVxuICBkb3dubG9hZFJlcXVlc3RMb2cocmVxdWVzdDogQVBJUmVxdWVzdCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFVUkwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkocmVxdWVzdCldLCB7IHR5cGU6ICd0ZXh0L2pzb24nIH0pKTtcbiAgICBCcm93c2VyLm9wZW4oeyB1cmw6IGRhdGFVUkwgfSk7XG4gIH1cblxuICBhc3luYyBhY3Rpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJ1dHRvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIHRleHQ6IHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX1VOQ09NTU9OLk9GRkxJTkUuRk9SQ0VfRlVMTF9TWU5DJyksXG4gICAgICAgIGljb246ICdzeW5jJyxcbiAgICAgICAgaGFuZGxlcjogKCk6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5mb3JjZUZ1bGxTeW5jKClcbiAgICAgIH0sXG4gICAgICB7IHRleHQ6IHRoaXMuX3RyYW5zbGF0ZS5fKCdDT01NT04uQ0FOQ0VMJyksIHJvbGU6ICdjYW5jZWwnLCBpY29uOiAnYXJyb3ctdW5kbycgfVxuICAgIF07XG4gICAgY29uc3QgYWN0aW9ucyA9IGF3YWl0IHRoaXMuX2FjdGlvbnMuY3JlYXRlKHtcbiAgICAgIGhlYWRlcjogdGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfVU5DT01NT04uT0ZGTElORS5BRFZBTkNFRF9BQ1RJT05TJyksXG4gICAgICBidXR0b25zXG4gICAgfSk7XG4gICAgYWN0aW9ucy5wcmVzZW50KCk7XG4gIH1cblxuICBhc3luYyBmb3JjZUZ1bGxTeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFsZXJ0ID0gYXdhaXQgdGhpcy5fYWxlcnQuY3JlYXRlKHtcbiAgICAgIGhlYWRlcjogdGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfVU5DT01NT04uT0ZGTElORS5GT1JDRV9GVUxMX1NZTkMnKSxcbiAgICAgIHN1YkhlYWRlcjogdGhpcy5fdHJhbnNsYXRlLl8oJ0NPTU1PTi5BUkVfWU9VX1NVUkUnKSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX1VOQ09NTU9OLk9GRkxJTkUuRlVMTF9TWU5DX0RJU0NMQUlNRVInKSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyB0ZXh0OiB0aGlzLl90cmFuc2xhdGUuXygnQ09NTU9OLkNBTkNFTCcpLCByb2xlOiAnY2FuY2VsJyB9LFxuICAgICAgICB7IHRleHQ6IHRoaXMuX3RyYW5zbGF0ZS5fKCdDT01NT04uQ09ORklSTScpLCBoYW5kbGVyOiAoKTogdm9pZCA9PiB0aGlzLl9vZmZsaW5lLmZvcmNlRnVsbFN5bmMoKSB9XG4gICAgICBdXG4gICAgfSk7XG4gICAgYWxlcnQucHJlc2VudCgpO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9kYWwuZGlzbWlzcygpO1xuICB9XG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgPGlvbi10b29sYmFyIGNvbG9yPVwiaWRlYVRvb2xiYXJcIj5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlXCIgc2xvdD1cImljb24tb25seVwiIC8+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgICA8aW9uLXRpdGxlPlxuICAgICAge3sgJ0lERUFfVU5DT01NT04uT0ZGTElORS5PRkZMSU5FX01BTkFHRVInIHwgdHJhbnNsYXRlIH19XG4gICAgPC9pb24tdGl0bGU+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgIDxpb24tYnV0dG9uIFt0aXRsZV09XCInSURFQV9VTkNPTU1PTi5PRkZMSU5FLkFEVkFOQ0VEX0FDVElPTlMnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImFjdGlvbnMoKVwiPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJlbGxpcHNpcy12ZXJ0aWNhbFwiIC8+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cbjxpb24tY29udGVudD5cbiAgPGlvbi1saXN0IGNsYXNzPVwiYUxpc3RcIj5cbiAgICBAaWYgKCFfb2ZmbGluZS5zeW5jaHJvbml6aW5nICYmIF9vZmZsaW5lLnJlcXVpcmVzTWFudWFsQ29uZmlybWF0aW9uKSB7XG4gICAgICA8aW9uLWxpc3QtaGVhZGVyPlxuICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgIDxoMj57eyAnSURFQV9VTkNPTU1PTi5PRkZMSU5FLkhVR0VfU1lOQ19ORUVEX01BTlVBTF9DT05GSVJNQVRJT04nIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICA8L2lvbi1saXN0LWhlYWRlcj5cbiAgICB9XG4gICAgQGlmICghX29mZmxpbmUuc3luY2hyb25pemluZykge1xuICAgICAgPGlvbi1saXN0LWhlYWRlcj5cbiAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJsYXN0U3luY0F0XCI+XG4gICAgICAgICAgICB7eyAnSURFQV9VTkNPTU1PTi5PRkZMSU5FLkxBU1RfU1lOQycgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICA8aW9uLXRleHQ+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgX29mZmxpbmUubGFzdFN5bmNBdFxuICAgICAgICAgICAgICAgICAgPyAoX29mZmxpbmUubGFzdFN5bmNBdCB8IGRhdGVMb2NhbGU6ICdtZWRpdW0nKVxuICAgICAgICAgICAgICAgICAgOiAoJ0lERUFfVU5DT01NT04uT0ZGTElORS5ORVZFUicgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgQGlmIChfb2ZmbGluZS5lcnJvckluTGFzdFN5bmMpIHtcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYW5nZXJcIj5cbiAgICAgICAgICAgICAgICA8Yj57eyAnSURFQV9VTkNPTU1PTi5PRkZMSU5FLkVSUk9SX0RVUklOR19MQVNUX1NZTkMnIHwgdHJhbnNsYXRlIH19PC9iPlxuICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBmaWxsPVwic29saWRcIlxuICAgICAgICAgIFtjb2xvcl09XCJfb2ZmbGluZS5lcnJvckluTGFzdFN5bmMgPyAnZGFuZ2VyJyA6ICdkYXJrJ1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIl9vZmZsaW5lLmlzT2ZmbGluZSgpXCJcbiAgICAgICAgICAoY2xpY2spPVwic3luYygpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwic3luY1wiIC8+IHt7ICdJREVBX1VOQ09NTU9OLk9GRkxJTkUuU1lOQ19OT1cnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWxpc3QtaGVhZGVyPlxuICAgIH1cbiAgPC9pb24tbGlzdD5cbiAgQGlmIChfb2ZmbGluZS5zeW5jaHJvbml6aW5nKSB7XG4gICAgPGlvbi1saXN0IGNsYXNzPVwiYUxpc3RcIj5cbiAgICAgIDxpb24taXRlbT5cbiAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIiBjb2xvcj1cInByaW1hcnlcIiAvPlxuICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgPC9pb24tbGlzdD5cbiAgfVxuICBAaWYgKF9vZmZsaW5lLnVzZVF1ZXVlQVBJUmVxdWVzdHMpIHtcbiAgICA8aW9uLWxpc3QgY2xhc3M9XCJhTGlzdFwiPlxuICAgICAgPGlvbi1saXN0LWhlYWRlcj5cbiAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICA8aDI+e3sgJ0lERUFfVU5DT01NT04uT0ZGTElORS5VUExPQUQnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgICAgICA8cD57eyAnSURFQV9VTkNPTU1PTi5PRkZMSU5FLlVQTE9BRF9RVUVVRV9SRVFVRVNUU19FWFBMQU5BVElPTicgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgPC9pb24tbGlzdC1oZWFkZXI+XG4gICAgICBAaWYgKCFfb2ZmbGluZS5xdWV1ZUFQSVJlcXVlc3RzLmxlbmd0aCkge1xuICAgICAgICA8aW9uLWl0ZW0+XG4gICAgICAgICAgPGk+e3sgJ0lERUFfVU5DT01NT04uT0ZGTElORS5OT19FTEVNRU5UU19UT19VUExPQUQnIHwgdHJhbnNsYXRlIH19PC9pPlxuICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiZW5kXCIgc2l6ZT1cInNtYWxsXCIgbmFtZT1cImNoZWNrbWFya1wiIGNvbG9yPVwic3VjY2Vzc1wiIC8+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICB9XG4gICAgICBAZm9yIChyIG9mIF9vZmZsaW5lLnF1ZXVlQVBJUmVxdWVzdHM7IHRyYWNrIHI7IGxldCBvZGQgPSAkb2RkKSB7XG4gICAgICAgIDxpb24taXRlbSBbY2xhc3Mub2RkSXRlbV09XCJvZGRcIj5cbiAgICAgICAgICA8aW9uLWxhYmVsIGNsYXNzPVwiaW9uLXRleHQtd3JhcFwiPlxuICAgICAgICAgICAge3sgci5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgICAgQGlmIChyLmVycm9yKSB7XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhbmdlclwiPlxuICAgICAgICAgICAgICAgICAgPGI+e3sgJ0lERUFfVU5DT01NT04uT0ZGTElORS5FUlJPUl9DT0RFJyB8IHRyYW5zbGF0ZSB9fToge3sgci5lcnJvciB9fTwvYj5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgIHt7ICdJREVBX1VOQ09NTU9OLk9GRkxJTkUuUkVRVUVTVF9GQUlMRURfRVhQTEFOQVRJT05fSScgfCB0cmFuc2xhdGUgfX08YnIgLz5cbiAgICAgICAgICAgICAgICB7eyAnSURFQV9VTkNPTU1PTi5PRkZMSU5FLlJFUVVFU1RfRkFJTEVEX0VYUExBTkFUSU9OX0lJJyB8IHRyYW5zbGF0ZSB9fTxiciAvPlxuICAgICAgICAgICAgICAgIHt7ICdJREVBX1VOQ09NTU9OLk9GRkxJTkUuUkVRVUVTVF9GQUlMRURfRVhQTEFOQVRJT05fSUlJJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgQGlmIChyLmVycm9yKSB7XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBzbG90PVwiZW5kXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfVU5DT01NT04uT0ZGTElORS5DQU5DRUxfUkVRVUVTVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUmVxdWVzdChyKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cInRyYXNoXCIgLz5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChyLmVycm9yKSB7XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBzbG90PVwiZW5kXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfVU5DT01NT04uT0ZGTElORS5ET1dOTE9BRF9MT0cnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkUmVxdWVzdExvZyhyKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImRvd25sb2FkXCIgLz5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChfb2ZmbGluZS5zeW5jaHJvbml6aW5nKSB7XG4gICAgICAgICAgICA8aW9uLXNwaW5uZXIgc2xvdD1cImVuZFwiIG5hbWU9XCJkb3RzXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICB9XG4gICAgPC9pb24tbGlzdD5cbiAgfVxuICBAaWYgKF9vZmZsaW5lLmdldFJlc291cmNlcygpLmxlbmd0aCkge1xuICAgIDxpb24tbGlzdCBjbGFzcz1cImFMaXN0XCI+XG4gICAgICA8aW9uLWxpc3QtaGVhZGVyPlxuICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgIDxoMj57eyAnSURFQV9VTkNPTU1PTi5PRkZMSU5FLkRPV05MT0FEJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgICAgICAgPHA+e3sgJ0lERUFfVU5DT01NT04uT0ZGTElORS5ET1dOTE9BRF9SRVNPVVJDRVNfRVhQTEFOQVRJT04nIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgIDwvaW9uLWxpc3QtaGVhZGVyPlxuICAgICAgQGZvciAociBvZiBfb2ZmbGluZS5nZXRSZXNvdXJjZXMoKTsgdHJhY2sgcikge1xuICAgICAgICA8aWRlYS1jYWNoZWFibGUtcmVzb3VyY2UgW3Jlc291cmNlXT1cIl9vZmZsaW5lLmdldENhY2hlYWJsZVJlc291cmNlKHIpXCIgLz5cbiAgICAgIH1cbiAgICA8L2lvbi1saXN0PlxuICB9XG48L2lvbi1jb250ZW50PlxuIl19
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { Injectable, inject } from '@angular/core';
|
|
2
|
-
import { Platform } from '@ionic/angular/standalone';
|
|
3
|
-
import { PushNotifications } from '@capacitor/push-notifications';
|
|
4
|
-
import { Observable } from 'rxjs';
|
|
5
|
-
import { PushNotificationsDevice, PushNotificationsPlatforms } from 'idea-toolbox';
|
|
6
|
-
import { IDEAErrorReportingService } from './errorReporting.service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
/**
|
|
9
|
-
* To subscribe push notifications events.
|
|
10
|
-
*/
|
|
11
|
-
export class IDEAPushNotificationsService {
|
|
12
|
-
constructor() {
|
|
13
|
-
this._platform = inject(Platform);
|
|
14
|
-
this._errorReporting = inject(IDEAErrorReportingService);
|
|
15
|
-
if (!this.isAvailable())
|
|
16
|
-
return;
|
|
17
|
-
this.registrations = new Observable(observer => {
|
|
18
|
-
PushNotifications.addListener('registration', token => observer.next(new PushNotificationsDevice({ token: token.value, platform: PushNotificationsPlatforms.FCM })));
|
|
19
|
-
});
|
|
20
|
-
this.errors = new Observable(observer => {
|
|
21
|
-
// rif. https://forum.ionicframework.com/t/226376
|
|
22
|
-
PushNotifications.addListener('registrationError', (err) => {
|
|
23
|
-
this._errorReporting.sendReport(err);
|
|
24
|
-
observer.next(err);
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
this.notifications = new Observable(observer => {
|
|
28
|
-
PushNotifications.addListener('pushNotificationReceived', n => observer.next(n));
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Return true if the device is supported.
|
|
33
|
-
*/
|
|
34
|
-
isAvailable() {
|
|
35
|
-
return this._platform.is('capacitor') && !!PushNotifications;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* To fire the registration of a new device: it will rewquest the permission to use Push Notification.
|
|
39
|
-
* On iOS will prompt the request, on Android it's automatic.
|
|
40
|
-
*/
|
|
41
|
-
async registerDevice() {
|
|
42
|
-
if (!this.isAvailable())
|
|
43
|
-
return;
|
|
44
|
-
let permStatus = await PushNotifications.checkPermissions();
|
|
45
|
-
if (permStatus.receive === 'prompt')
|
|
46
|
-
permStatus = await PushNotifications.requestPermissions();
|
|
47
|
-
if (permStatus.receive === 'granted')
|
|
48
|
-
PushNotifications.register();
|
|
49
|
-
}
|
|
50
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEAPushNotificationsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
51
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEAPushNotificationsService, providedIn: 'root' }); }
|
|
52
|
-
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEAPushNotificationsService, decorators: [{
|
|
54
|
-
type: Injectable,
|
|
55
|
-
args: [{ providedIn: 'root' }]
|
|
56
|
-
}], ctorParameters: () => [] });
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVzaE5vdGlmaWNhdGlvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL21vZHVsZXMvdW5jb21tb24vc3JjL3B1c2hOb3RpZmljYXRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBMEIsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVuRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFFckU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sNEJBQTRCO0lBUXZDO1FBUFEsY0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixvQkFBZSxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBTzFELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTztRQUVoQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzdDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FDcEQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLHVCQUF1QixDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FDN0csQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN0QyxpREFBaUQ7WUFDaEQsaUJBQXlCLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FBVSxFQUFRLEVBQUU7Z0JBQy9FLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzdDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGNBQWM7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFBRSxPQUFPO1FBRWhDLElBQUksVUFBVSxHQUFHLE1BQU0saUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUU1RCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUFFLFVBQVUsR0FBRyxNQUFNLGlCQUFpQixDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFL0YsSUFBSSxVQUFVLENBQUMsT0FBTyxLQUFLLFNBQVM7WUFBRSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyRSxDQUFDOzhHQS9DVSw0QkFBNEI7a0hBQTVCLDRCQUE0QixjQURmLE1BQU07OzJGQUNuQiw0QkFBNEI7a0JBRHhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgUHVzaE5vdGlmaWNhdGlvbnMsIFB1c2hOb3RpZmljYXRpb25TY2hlbWEgfSBmcm9tICdAY2FwYWNpdG9yL3B1c2gtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQdXNoTm90aWZpY2F0aW9uc0RldmljZSwgUHVzaE5vdGlmaWNhdGlvbnNQbGF0Zm9ybXMgfSBmcm9tICdpZGVhLXRvb2xib3gnO1xuXG5pbXBvcnQgeyBJREVBRXJyb3JSZXBvcnRpbmdTZXJ2aWNlIH0gZnJvbSAnLi9lcnJvclJlcG9ydGluZy5zZXJ2aWNlJztcblxuLyoqXG4gKiBUbyBzdWJzY3JpYmUgcHVzaCBub3RpZmljYXRpb25zIGV2ZW50cy5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBJREVBUHVzaE5vdGlmaWNhdGlvbnNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfcGxhdGZvcm0gPSBpbmplY3QoUGxhdGZvcm0pO1xuICBwcml2YXRlIF9lcnJvclJlcG9ydGluZyA9IGluamVjdChJREVBRXJyb3JSZXBvcnRpbmdTZXJ2aWNlKTtcblxuICByZWdpc3RyYXRpb25zOiBPYnNlcnZhYmxlPFB1c2hOb3RpZmljYXRpb25zRGV2aWNlPjtcbiAgbm90aWZpY2F0aW9uczogT2JzZXJ2YWJsZTxQdXNoTm90aWZpY2F0aW9uU2NoZW1hPjtcbiAgZXJyb3JzOiBPYnNlcnZhYmxlPEVycm9yPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaXNBdmFpbGFibGUoKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5yZWdpc3RyYXRpb25zID0gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgUHVzaE5vdGlmaWNhdGlvbnMuYWRkTGlzdGVuZXIoJ3JlZ2lzdHJhdGlvbicsIHRva2VuID0+XG4gICAgICAgIG9ic2VydmVyLm5leHQobmV3IFB1c2hOb3RpZmljYXRpb25zRGV2aWNlKHsgdG9rZW46IHRva2VuLnZhbHVlLCBwbGF0Zm9ybTogUHVzaE5vdGlmaWNhdGlvbnNQbGF0Zm9ybXMuRkNNIH0pKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLmVycm9ycyA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIC8vIHJpZi4gaHR0cHM6Ly9mb3J1bS5pb25pY2ZyYW1ld29yay5jb20vdC8yMjYzNzZcbiAgICAgIChQdXNoTm90aWZpY2F0aW9ucyBhcyBhbnkpLmFkZExpc3RlbmVyKCdyZWdpc3RyYXRpb25FcnJvcicsIChlcnI6IEVycm9yKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuX2Vycm9yUmVwb3J0aW5nLnNlbmRSZXBvcnQoZXJyKTtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5ub3RpZmljYXRpb25zID0gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgUHVzaE5vdGlmaWNhdGlvbnMuYWRkTGlzdGVuZXIoJ3B1c2hOb3RpZmljYXRpb25SZWNlaXZlZCcsIG4gPT4gb2JzZXJ2ZXIubmV4dChuKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIGRldmljZSBpcyBzdXBwb3J0ZWQuXG4gICAqL1xuICBpc0F2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXMoJ2NhcGFjaXRvcicpICYmICEhUHVzaE5vdGlmaWNhdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogVG8gZmlyZSB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgbmV3IGRldmljZTogaXQgd2lsbCByZXdxdWVzdCB0aGUgcGVybWlzc2lvbiB0byB1c2UgUHVzaCBOb3RpZmljYXRpb24uXG4gICAqIE9uIGlPUyB3aWxsIHByb21wdCB0aGUgcmVxdWVzdCwgb24gQW5kcm9pZCBpdCdzIGF1dG9tYXRpYy5cbiAgICovXG4gIGFzeW5jIHJlZ2lzdGVyRGV2aWNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc0F2YWlsYWJsZSgpKSByZXR1cm47XG5cbiAgICBsZXQgcGVybVN0YXR1cyA9IGF3YWl0IFB1c2hOb3RpZmljYXRpb25zLmNoZWNrUGVybWlzc2lvbnMoKTtcblxuICAgIGlmIChwZXJtU3RhdHVzLnJlY2VpdmUgPT09ICdwcm9tcHQnKSBwZXJtU3RhdHVzID0gYXdhaXQgUHVzaE5vdGlmaWNhdGlvbnMucmVxdWVzdFBlcm1pc3Npb25zKCk7XG5cbiAgICBpZiAocGVybVN0YXR1cy5yZWNlaXZlID09PSAnZ3JhbnRlZCcpIFB1c2hOb3RpZmljYXRpb25zLnJlZ2lzdGVyKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, EventEmitter, Input, Output, inject } from '@angular/core';
|
|
3
|
-
import { Sentiment } from 'idea-toolbox';
|
|
4
|
-
import { IonItem, IonSpinner, IonBadge } from '@ionic/angular/standalone';
|
|
5
|
-
import { IDEAEnvironment, IDEATranslatePipe, IDEATranslationsService } from '@idea-ionic/common';
|
|
6
|
-
import { IDEAAWSAPIService } from '../AWSAPI.service';
|
|
7
|
-
import { IDEAOfflineService } from '../offline/offline.service';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
export class IDEASentimentComponent {
|
|
10
|
-
constructor() {
|
|
11
|
-
this._env = inject(IDEAEnvironment);
|
|
12
|
-
this._API = inject(IDEAAWSAPIService);
|
|
13
|
-
this._translate = inject(IDEATranslationsService);
|
|
14
|
-
this._offline = inject(IDEAOfflineService);
|
|
15
|
-
/**
|
|
16
|
-
* Triggers when the sentiment change.
|
|
17
|
-
*/
|
|
18
|
-
this.change = new EventEmitter();
|
|
19
|
-
}
|
|
20
|
-
ngOnChanges(changes) {
|
|
21
|
-
if (changes.text.previousValue !== changes.text.currentValue)
|
|
22
|
-
this.detectSentiment(changes.text.currentValue);
|
|
23
|
-
}
|
|
24
|
-
async detectSentiment(text) {
|
|
25
|
-
if (!text || this._offline.isOffline())
|
|
26
|
-
this.sentiment = null;
|
|
27
|
-
else {
|
|
28
|
-
try {
|
|
29
|
-
const { sentiment } = await this._API.postResource('sentiment', {
|
|
30
|
-
idea: true,
|
|
31
|
-
body: { project: this._env.idea.project, language: this._translate.getCurrentLang(), text: this.text }
|
|
32
|
-
});
|
|
33
|
-
this.sentiment = sentiment;
|
|
34
|
-
this.change.emit(this.sentiment);
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
this.sentiment = null;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
getColorBySentiment(sentiment) {
|
|
42
|
-
sentiment = sentiment || this.sentiment;
|
|
43
|
-
switch (sentiment) {
|
|
44
|
-
case Sentiment.POSITIVE:
|
|
45
|
-
return 'success';
|
|
46
|
-
case Sentiment.NEGATIVE:
|
|
47
|
-
return 'danger';
|
|
48
|
-
case Sentiment.MIXED:
|
|
49
|
-
return 'warning';
|
|
50
|
-
case Sentiment.NEUTRAL:
|
|
51
|
-
return 'medium';
|
|
52
|
-
default:
|
|
53
|
-
return 'light';
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEASentimentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
57
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: IDEASentimentComponent, isStandalone: true, selector: "idea-sentiment", inputs: { text: "text", lines: "lines", color: "color" }, outputs: { change: "change" }, usesOnChanges: true, ngImport: i0, template: `
|
|
58
|
-
@if (text && _offline.isOnline()) {
|
|
59
|
-
<ion-item [lines]="lines" [color]="color">
|
|
60
|
-
@if (!sentiment) {
|
|
61
|
-
<ion-spinner slot="end" size="small" />
|
|
62
|
-
}
|
|
63
|
-
@if (sentiment) {
|
|
64
|
-
<ion-badge
|
|
65
|
-
slot="end"
|
|
66
|
-
size="small"
|
|
67
|
-
[color]="getColorBySentiment()"
|
|
68
|
-
[title]="'IDEA_UNCOMMON.SENTIMENT.RESULT_HINT' | translate: { sentiment: sentiment }"
|
|
69
|
-
>
|
|
70
|
-
{{ 'IDEA_UNCOMMON.SENTIMENT.RESULT.' + sentiment | translate }}
|
|
71
|
-
</ion-badge>
|
|
72
|
-
}
|
|
73
|
-
</ion-item>
|
|
74
|
-
}
|
|
75
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }, { kind: "component", type: IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }] }); }
|
|
76
|
-
}
|
|
77
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEASentimentComponent, decorators: [{
|
|
78
|
-
type: Component,
|
|
79
|
-
args: [{
|
|
80
|
-
selector: 'idea-sentiment',
|
|
81
|
-
standalone: true,
|
|
82
|
-
imports: [CommonModule, IDEATranslatePipe, IonBadge, IonSpinner, IonItem],
|
|
83
|
-
template: `
|
|
84
|
-
@if (text && _offline.isOnline()) {
|
|
85
|
-
<ion-item [lines]="lines" [color]="color">
|
|
86
|
-
@if (!sentiment) {
|
|
87
|
-
<ion-spinner slot="end" size="small" />
|
|
88
|
-
}
|
|
89
|
-
@if (sentiment) {
|
|
90
|
-
<ion-badge
|
|
91
|
-
slot="end"
|
|
92
|
-
size="small"
|
|
93
|
-
[color]="getColorBySentiment()"
|
|
94
|
-
[title]="'IDEA_UNCOMMON.SENTIMENT.RESULT_HINT' | translate: { sentiment: sentiment }"
|
|
95
|
-
>
|
|
96
|
-
{{ 'IDEA_UNCOMMON.SENTIMENT.RESULT.' + sentiment | translate }}
|
|
97
|
-
</ion-badge>
|
|
98
|
-
}
|
|
99
|
-
</ion-item>
|
|
100
|
-
}
|
|
101
|
-
`
|
|
102
|
-
}]
|
|
103
|
-
}], propDecorators: { text: [{
|
|
104
|
-
type: Input
|
|
105
|
-
}], lines: [{
|
|
106
|
-
type: Input
|
|
107
|
-
}], color: [{
|
|
108
|
-
type: Input
|
|
109
|
-
}], change: [{
|
|
110
|
-
type: Output
|
|
111
|
-
}] } });
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudGltZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvdW5jb21tb24vc3JjL3NlbnRpbWVudC9zZW50aW1lbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFakcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBMEJoRSxNQUFNLE9BQU8sc0JBQXNCO0lBeEJuQztRQXlCWSxTQUFJLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pDLFNBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqQyxlQUFVLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDckQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBa0J0Qzs7V0FFRztRQUNPLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0tBb0NsRDtJQWxDQyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUNPLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBWTtRQUN4QyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7YUFDekQsQ0FBQztZQUNKLElBQUksQ0FBQztnQkFDSCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUU7b0JBQzlELElBQUksRUFBRSxJQUFJO29CQUNWLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7aUJBQ3ZHLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQThCO1FBQ2hELFNBQVMsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4QyxRQUFRLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLEtBQUssU0FBUyxDQUFDLFFBQVE7Z0JBQ3JCLE9BQU8sU0FBUyxDQUFDO1lBQ25CLEtBQUssU0FBUyxDQUFDLFFBQVE7Z0JBQ3JCLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLEtBQUssU0FBUyxDQUFDLEtBQUs7Z0JBQ2xCLE9BQU8sU0FBUyxDQUFDO1lBQ25CLEtBQUssU0FBUyxDQUFDLE9BQU87Z0JBQ3BCLE9BQU8sUUFBUSxDQUFDO1lBQ2xCO2dCQUNFLE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDOzhHQTVEVSxzQkFBc0I7a0dBQXRCLHNCQUFzQix3TEFwQnZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQsMkRBbkJTLFlBQVksMEJBQUUsaUJBQWlCLGtEQUFFLFFBQVEsaUZBQUUsVUFBVSx5R0FBRSxPQUFPOzsyRkFxQjdELHNCQUFzQjtrQkF4QmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQztvQkFDekUsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQ7aUJBQ0Y7OEJBY1UsSUFBSTtzQkFBWixLQUFLO2dCQUlHLEtBQUs7c0JBQWIsS0FBSztnQkFJRyxLQUFLO3NCQUFiLEtBQUs7Z0JBSUksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VudGltZW50IH0gZnJvbSAnaWRlYS10b29sYm94JztcbmltcG9ydCB7IElvbkl0ZW0sIElvblNwaW5uZXIsIElvbkJhZGdlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBJREVBRW52aXJvbm1lbnQsIElERUFUcmFuc2xhdGVQaXBlLCBJREVBVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJ0BpZGVhLWlvbmljL2NvbW1vbic7XG5cbmltcG9ydCB7IElERUFBV1NBUElTZXJ2aWNlIH0gZnJvbSAnLi4vQVdTQVBJLnNlcnZpY2UnO1xuaW1wb3J0IHsgSURFQU9mZmxpbmVTZXJ2aWNlIH0gZnJvbSAnLi4vb2ZmbGluZS9vZmZsaW5lLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZGVhLXNlbnRpbWVudCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElERUFUcmFuc2xhdGVQaXBlLCBJb25CYWRnZSwgSW9uU3Bpbm5lciwgSW9uSXRlbV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmICh0ZXh0ICYmIF9vZmZsaW5lLmlzT25saW5lKCkpIHtcbiAgICAgIDxpb24taXRlbSBbbGluZXNdPVwibGluZXNcIiBbY29sb3JdPVwiY29sb3JcIj5cbiAgICAgICAgQGlmICghc2VudGltZW50KSB7XG4gICAgICAgICAgPGlvbi1zcGlubmVyIHNsb3Q9XCJlbmRcIiBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoc2VudGltZW50KSB7XG4gICAgICAgICAgPGlvbi1iYWRnZVxuICAgICAgICAgICAgc2xvdD1cImVuZFwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImdldENvbG9yQnlTZW50aW1lbnQoKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfVU5DT01NT04uU0VOVElNRU5ULlJFU1VMVF9ISU5UJyB8IHRyYW5zbGF0ZTogeyBzZW50aW1lbnQ6IHNlbnRpbWVudCB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnSURFQV9VTkNPTU1PTi5TRU5USU1FTlQuUkVTVUxULicgKyBzZW50aW1lbnQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2lvbi1iYWRnZT5cbiAgICAgICAgfVxuICAgICAgPC9pb24taXRlbT5cbiAgICB9XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgSURFQVNlbnRpbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIHByb3RlY3RlZCBfZW52ID0gaW5qZWN0KElERUFFbnZpcm9ubWVudCk7XG4gIHByaXZhdGUgX0FQSSA9IGluamVjdChJREVBQVdTQVBJU2VydmljZSk7XG4gIHByaXZhdGUgX3RyYW5zbGF0ZSA9IGluamVjdChJREVBVHJhbnNsYXRpb25zU2VydmljZSk7XG4gIF9vZmZsaW5lID0gaW5qZWN0KElERUFPZmZsaW5lU2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFRoZSBzZW50aW1lbnQgZGV0ZWN0ZWQgZnJvbSB0aGUgaW5wdXQgdGV4dC5cbiAgICovXG4gIHNlbnRpbWVudDogU2VudGltZW50O1xuICAvKipcbiAgICogVGhlIGlucHV0IHRleHQuXG4gICAqL1xuICBASW5wdXQoKSB0ZXh0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMaW5lcyBwcmVmZXJlbmNlcyBmb3IgdGhlIGl0ZW0uXG4gICAqL1xuICBASW5wdXQoKSBsaW5lczogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNvbG9yIGZvciB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KCkgY29sb3I6IHN0cmluZztcbiAgLyoqXG4gICAqIFRyaWdnZXJzIHdoZW4gdGhlIHNlbnRpbWVudCBjaGFuZ2UuXG4gICAqL1xuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTZW50aW1lbnQ+KCk7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnRleHQucHJldmlvdXNWYWx1ZSAhPT0gY2hhbmdlcy50ZXh0LmN1cnJlbnRWYWx1ZSkgdGhpcy5kZXRlY3RTZW50aW1lbnQoY2hhbmdlcy50ZXh0LmN1cnJlbnRWYWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBkZXRlY3RTZW50aW1lbnQodGV4dDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0ZXh0IHx8IHRoaXMuX29mZmxpbmUuaXNPZmZsaW5lKCkpIHRoaXMuc2VudGltZW50ID0gbnVsbDtcbiAgICBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgc2VudGltZW50IH0gPSBhd2FpdCB0aGlzLl9BUEkucG9zdFJlc291cmNlKCdzZW50aW1lbnQnLCB7XG4gICAgICAgICAgaWRlYTogdHJ1ZSxcbiAgICAgICAgICBib2R5OiB7IHByb2plY3Q6IHRoaXMuX2Vudi5pZGVhLnByb2plY3QsIGxhbmd1YWdlOiB0aGlzLl90cmFuc2xhdGUuZ2V0Q3VycmVudExhbmcoKSwgdGV4dDogdGhpcy50ZXh0IH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VudGltZW50ID0gc2VudGltZW50O1xuICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuc2VudGltZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuc2VudGltZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDb2xvckJ5U2VudGltZW50KHNlbnRpbWVudD86IFNlbnRpbWVudCB8IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc2VudGltZW50ID0gc2VudGltZW50IHx8IHRoaXMuc2VudGltZW50O1xuICAgIHN3aXRjaCAoc2VudGltZW50KSB7XG4gICAgICBjYXNlIFNlbnRpbWVudC5QT1NJVElWRTpcbiAgICAgICAgcmV0dXJuICdzdWNjZXNzJztcbiAgICAgIGNhc2UgU2VudGltZW50Lk5FR0FUSVZFOlxuICAgICAgICByZXR1cm4gJ2Rhbmdlcic7XG4gICAgICBjYXNlIFNlbnRpbWVudC5NSVhFRDpcbiAgICAgICAgcmV0dXJuICd3YXJuaW5nJztcbiAgICAgIGNhc2UgU2VudGltZW50Lk5FVVRSQUw6XG4gICAgICAgIHJldHVybiAnbWVkaXVtJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnbGlnaHQnO1xuICAgIH1cbiAgfVxufVxuIl19
|