@c8y/ngx-components 1017.0.511 → 1017.0.512
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/core/bootstrap/cookie-banner/cookie-banner.service.d.ts +1 -1
- package/core/common/ApplicationOptions.d.ts +2 -0
- package/core/product-experience/gainsight.service.d.ts +86 -28
- package/core/product-experience/index.d.ts +1 -0
- package/core/product-experience/product-experience.module.d.ts +18 -5
- package/core/product-experience/user-engagements.service.d.ts +109 -0
- package/core/user/user-edit-modal.component.d.ts +33 -6
- package/core/user/user-edit.component.d.ts +8 -13
- package/esm2020/core/bootstrap/cookie-banner/cookie-banner.service.mjs +2 -2
- package/esm2020/core/common/ApplicationOptions.mjs +1 -1
- package/esm2020/core/product-experience/gainsight.service.mjs +157 -76
- package/esm2020/core/product-experience/index.mjs +2 -1
- package/esm2020/core/product-experience/product-experience.module.mjs +42 -24
- package/esm2020/core/product-experience/user-engagements.service.mjs +174 -0
- package/esm2020/core/user/user-edit-modal.component.mjs +68 -33
- package/esm2020/core/user/user-edit.component.mjs +36 -45
- package/fesm2015/c8y-ngx-components.mjs +456 -160
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +447 -154
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/locales/locales.pot +2 -2
- package/package.json +2 -2
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { DOCUMENT as Document } from '@angular/common';
|
|
3
|
+
import { BehaviorSubject, combineLatest, from, of } from 'rxjs';
|
|
4
|
+
import { UserPreferencesService } from '../common/user-preferences/user-preferences.service';
|
|
5
|
+
import { GainsightService } from './gainsight.service';
|
|
6
|
+
import { switchMap, take, tap } from 'rxjs/operators';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../common/user-preferences/user-preferences.service";
|
|
9
|
+
import * as i2 from "./gainsight.service";
|
|
10
|
+
export class UserEngagementsService {
|
|
11
|
+
constructor(document, userPreferencesService, gainsightService) {
|
|
12
|
+
this.document = document;
|
|
13
|
+
this.userPreferencesService = userPreferencesService;
|
|
14
|
+
this.gainsightService = gainsightService;
|
|
15
|
+
this.USER_PREFERENCES_GAINSIGHT_ENGAGEMENTS_KEY = 'gainsightBotEnabled';
|
|
16
|
+
this.userEngagementsEnabled$ = new BehaviorSubject(false);
|
|
17
|
+
this.HIDE_GAINSIGHT_BOT_STYLE_ID = 'hide-gs-bot';
|
|
18
|
+
this.ENGAGEMENTS = 'engagements';
|
|
19
|
+
this.handleUserEngagements();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Handles user engagement settings based on various conditions.
|
|
23
|
+
*
|
|
24
|
+
* - Waits for the Gainsight tracking to be loaded.
|
|
25
|
+
* - Retrieves the engagement settings.
|
|
26
|
+
* - Updates the engagement settings based on the combined observations.
|
|
27
|
+
* - Finally, toggles the Gainsight engagements based on the latest `userEngagementsEnabled$` value.
|
|
28
|
+
*/
|
|
29
|
+
handleUserEngagements() {
|
|
30
|
+
this.gainsightService.trackingLoaded$
|
|
31
|
+
.pipe(take(1), switchMap(() => this.getEngagementSettingsObservable()), tap((settings) => this.updateUserEngagementSettings(...settings)), switchMap(() => this.userEngagementsEnabled$.pipe(take(1))))
|
|
32
|
+
.subscribe(isEnabled => this.toggleGainsightEngagements(isEnabled));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Updates the user's preference for Gainsight Engagements.
|
|
36
|
+
* @param {boolean} isEnabled - The new value for the user's engagement preference.
|
|
37
|
+
*/
|
|
38
|
+
updateUserEngagementPreference(isEnabled) {
|
|
39
|
+
this.userEngagementsEnabled$.next(isEnabled);
|
|
40
|
+
this.userPreferencesService.set(this.gainsightService.USER_PREFERENCES_GAINSIGHT_ENGAGEMENTS_KEY, this.userEngagementsEnabled$.value);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Toggles the visibility of Gainsight Engagements based on the provided flag.
|
|
44
|
+
*
|
|
45
|
+
* @param isEnabled - A flag indicating whether Gainsight Engagements should be visible.
|
|
46
|
+
*/
|
|
47
|
+
toggleGainsightEngagements(isEnabled) {
|
|
48
|
+
isEnabled ? this.showGainsightEngagements() : this.hideGainsightEngagements();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Constructs an observable that emits an array of boolean values representing
|
|
52
|
+
* the current engagement settings. The observable combines the latest values from:
|
|
53
|
+
*
|
|
54
|
+
* 1. User's preferences for Gainsight engagements.
|
|
55
|
+
* 2. A flag indicating if PII data should be sent.
|
|
56
|
+
* 3. A flag indicating if the platform uses custom branding.
|
|
57
|
+
*
|
|
58
|
+
* @returns An observable emitting an array of boolean values.
|
|
59
|
+
*/
|
|
60
|
+
getEngagementSettingsObservable() {
|
|
61
|
+
return combineLatest([
|
|
62
|
+
this.userPreferencesService.observe(this.USER_PREFERENCES_GAINSIGHT_ENGAGEMENTS_KEY),
|
|
63
|
+
from(this.gainsightService.shouldSendPiiData()),
|
|
64
|
+
of(this.gainsightService.isCustomBranding())
|
|
65
|
+
]);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Updates user engagement settings based on provided preferences and settings.
|
|
69
|
+
*
|
|
70
|
+
* Based on the received values, the method decides to:
|
|
71
|
+
* 1. Disable user engagements if PII data should not be shared or certain branding/settings conditions are met.
|
|
72
|
+
* 2. Update the user engagement preference if the user engagement bot setting is undefined.
|
|
73
|
+
*
|
|
74
|
+
* @param userEngagementBotSetting - The user's setting for the engagement bot.
|
|
75
|
+
* @param shouldSendPiiData - Indicates whether PII data should be shared.
|
|
76
|
+
* @param hasCustomBranding - Indicates if custom branding is applied.
|
|
77
|
+
*/
|
|
78
|
+
updateUserEngagementSettings(userEngagementBotSetting, shouldSendPiiData, hasCustomBranding) {
|
|
79
|
+
if (this.shouldDisableUserEngagementsDueToPIIData(shouldSendPiiData)) {
|
|
80
|
+
this.userEngagementsEnabled$.next(false);
|
|
81
|
+
}
|
|
82
|
+
else if (this.isUserEngagementBotSettingUndefined(userEngagementBotSetting)) {
|
|
83
|
+
/**
|
|
84
|
+
* Case where the user is new (freshly created) and has not changed the user engagement settings in the user edit modal (untouched state).
|
|
85
|
+
* When custom branding is not set, we will set the user engagements in the user preferences to true by default.
|
|
86
|
+
*/
|
|
87
|
+
this.updateUserEngagementPreference(!hasCustomBranding);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.userEngagementsEnabled$.next(userEngagementBotSetting);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Determines whether user engagements should be disabled due to PII data settings.
|
|
95
|
+
*
|
|
96
|
+
* If the `shouldSendPiiData` parameter is false, this indicates that the user engagements
|
|
97
|
+
* should be disabled to prevent sharing personally identifiable information.
|
|
98
|
+
*
|
|
99
|
+
* @param {boolean} shouldSendPiiData - Indicates whether PII data is allowed to be sent.
|
|
100
|
+
* @returns {boolean} Returns true if user engagements should be disabled, otherwise false.
|
|
101
|
+
*/
|
|
102
|
+
shouldDisableUserEngagementsDueToPIIData(shouldSendPiiData) {
|
|
103
|
+
return !shouldSendPiiData;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Determines if the user engagement bot setting is undefined.
|
|
107
|
+
*
|
|
108
|
+
* @param {boolean | undefined} userEngagementBotSetting - The setting value to check.
|
|
109
|
+
* @returns {boolean} Returns `true` if the setting is undefined; otherwise, `false`.
|
|
110
|
+
*
|
|
111
|
+
* This scenario occurs when a user is new and hasn't modified the bot settings in the user details UI yet.
|
|
112
|
+
*/
|
|
113
|
+
isUserEngagementBotSettingUndefined(userEngagementBotSetting) {
|
|
114
|
+
return userEngagementBotSetting === undefined;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Enables the visibility of Gainsight engagements.
|
|
118
|
+
*
|
|
119
|
+
* This method removes the CSS styles that hide the Gainsight engagements
|
|
120
|
+
* and updates the relevant user attribute to mark the engagements as visible.
|
|
121
|
+
*/
|
|
122
|
+
showGainsightEngagements() {
|
|
123
|
+
this.removeHidingStyle(this.HIDE_GAINSIGHT_BOT_STYLE_ID);
|
|
124
|
+
this.gainsightService.updateUserAttribute(this.ENGAGEMENTS, true);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Hides the Gainsight engagements.
|
|
128
|
+
*
|
|
129
|
+
* This method applies CSS styles to hide the Gainsight engagements
|
|
130
|
+
* and updates the relevant user attribute to mark the engagements as hidden.
|
|
131
|
+
*/
|
|
132
|
+
hideGainsightEngagements() {
|
|
133
|
+
this.addHidingStyle(this.HIDE_GAINSIGHT_BOT_STYLE_ID, '#apt-widget { display:none }');
|
|
134
|
+
this.gainsightService.updateUserAttribute(this.ENGAGEMENTS, false);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Removes the specified CSS style from the document.
|
|
138
|
+
*
|
|
139
|
+
* @param {string} styleId - The ID of the CSS style element to remove.
|
|
140
|
+
*/
|
|
141
|
+
removeHidingStyle(styleId) {
|
|
142
|
+
const style = this.document.getElementById(styleId);
|
|
143
|
+
style?.remove();
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Adds a new CSS style to the document.
|
|
147
|
+
*
|
|
148
|
+
* If the style with the specified ID already exists, the method will do nothing.
|
|
149
|
+
* Otherwise, it creates a new `<style>` element with the given ID and content,
|
|
150
|
+
* then appends it to the document head.
|
|
151
|
+
*
|
|
152
|
+
* @param {string} styleId - The ID to assign to the new style element.
|
|
153
|
+
* @param {string} textContent - The CSS rules to be included in the style.
|
|
154
|
+
*/
|
|
155
|
+
addHidingStyle(styleId, textContent) {
|
|
156
|
+
if (this.document.getElementById(styleId)) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const style = this.document.createElement('style');
|
|
160
|
+
style.id = styleId;
|
|
161
|
+
style.textContent = textContent;
|
|
162
|
+
this.document.head.appendChild(style);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
UserEngagementsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEngagementsService, deps: [{ token: Document }, { token: i1.UserPreferencesService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
166
|
+
UserEngagementsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEngagementsService, providedIn: 'root' });
|
|
167
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEngagementsService, decorators: [{
|
|
168
|
+
type: Injectable,
|
|
169
|
+
args: [{ providedIn: 'root' }]
|
|
170
|
+
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
171
|
+
type: Inject,
|
|
172
|
+
args: [Document]
|
|
173
|
+
}] }, { type: i1.UserPreferencesService }, { type: i2.GainsightService }]; } });
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1lbmdhZ2VtZW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9wcm9kdWN0LWV4cGVyaWVuY2UvdXNlci1lbmdhZ2VtZW50cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLElBQUksUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUM3RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUd0RCxNQUFNLE9BQU8sc0JBQXNCO0lBT2pDLFlBQzRCLFFBQWtCLEVBQ3BDLHNCQUE4QyxFQUM5QyxnQkFBa0M7UUFGaEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNwQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFUbkMsK0NBQTBDLEdBQUcscUJBQXFCLENBQUM7UUFDbkUsNEJBQXVCLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9FLGdDQUEyQixHQUFHLGFBQWEsQ0FBQztRQUNwQyxnQkFBVyxHQUFHLGFBQWEsQ0FBQztRQU8zQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILHFCQUFxQjtRQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZTthQUNsQyxJ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LEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxpQkFBaUIsQ0FBQyxPQUFlO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BELEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ssY0FBYyxDQUFDLE9BQWUsRUFBRSxXQUFtQjtRQUN6RCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pDLE9BQU87U0FDUjtRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ25CLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDOzttSEFwTFUsc0JBQXNCLGtCQVF2QixRQUFRO3VIQVJQLHNCQUFzQixjQURULE1BQU07MkZBQ25CLHNCQUFzQjtrQkFEbEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7MERBU00sUUFBUTswQkFBM0MsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCBhcyBEb2N1bWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VzZXItcHJlZmVyZW5jZXMvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IEdhaW5zaWdodFNlcnZpY2UgfSBmcm9tICcuL2dhaW5zaWdodC5zZXJ2aWNlJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFVzZXJFbmdhZ2VtZW50c1NlcnZpY2Uge1xuICByZWFkb25seSBVU0VSX1BSRUZFUkVOQ0VTX0dBSU5TSUdIVF9FTkdBR0VNRU5UU19LRVkgPSAnZ2FpbnNpZ2h0Qm90RW5hYmxlZCc7XG4gIHJlYWRvbmx5IHVzZXJFbmdhZ2VtZW50c0VuYWJsZWQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICByZWFkb25seSBISURFX0dBSU5TSUdIVF9CT1RfU1RZTEVfSUQgPSAnaGlkZS1ncy1ib3QnO1xuICBwcml2YXRlIHJlYWRvbmx5IEVOR0FHRU1FTlRTID0gJ2VuZ2FnZW1lbnRzJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERvY3VtZW50KSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlc1NlcnZpY2U6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaGFuZGxlVXNlckVuZ2FnZW1lbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB1c2VyIGVuZ2FnZW1lbnQgc2V0dGluZ3MgYmFzZWQgb24gdmFyaW91cyBjb25kaXRpb25zLlxuICAgKlxuICAgKiAtIFdhaXRzIGZvciB0aGUgR2FpbnNpZ2h0IHRyYWNraW5nIHRvIGJlIGxvYWRlZC5cbiAgICogLSBSZXRyaWV2ZXMgdGhlIGVuZ2FnZW1lbnQgc2V0dGluZ3MuXG4gICAqIC0gVXBkYXRlcyB0aGUgZW5nYWdlbWVudCBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgY29tYmluZWQgb2JzZXJ2YXRpb25zLlxuICAgKiAtIEZpbmFsbHksIHRvZ2dsZXMgdGhlIEdhaW5zaWdodCBlbmdhZ2VtZW50cyBiYXNlZCBvbiB0aGUgbGF0ZXN0IGB1c2VyRW5nYWdlbWVudHNFbmFibGVkJGAgdmFsdWUuXG4gICAqL1xuICBoYW5kbGVVc2VyRW5nYWdlbWVudHMoKSB7XG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyYWNraW5nTG9hZGVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmdldEVuZ2FnZW1lbnRTZXR0aW5nc09ic2VydmFibGUoKSksXG4gICAgICAgIHRhcCgoc2V0dGluZ3M6IFtib29sZWFuLCBib29sZWFuLCBib29sZWFuXSkgPT5cbiAgICAgICAgICB0aGlzLnVwZGF0ZVVzZXJFbmdhZ2VtZW50U2V0dGluZ3MoLi4uc2V0dGluZ3MpXG4gICAgICAgICksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnVzZXJFbmdhZ2VtZW50c0VuYWJsZWQkLnBpcGUodGFrZSgxKSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGlzRW5hYmxlZCA9PiB0aGlzLnRvZ2dsZUdhaW5zaWdodEVuZ2FnZW1lbnRzKGlzRW5hYmxlZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIncyBwcmVmZXJlbmNlIGZvciBHYWluc2lnaHQgRW5nYWdlbWVudHMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbmFibGVkIC0gVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHVzZXIncyBlbmdhZ2VtZW50IHByZWZlcmVuY2UuXG4gICAqL1xuICB1cGRhdGVVc2VyRW5nYWdlbWVudFByZWZlcmVuY2UoaXNFbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy51c2VyRW5nYWdlbWVudHNFbmFibGVkJC5uZXh0KGlzRW5hYmxlZCk7XG4gICAgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlLnNldChcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS5VU0VSX1BSRUZFUkVOQ0VTX0dBSU5TSUdIVF9FTkdBR0VNRU5UU19LRVksXG4gICAgICB0aGlzLnVzZXJFbmdhZ2VtZW50c0VuYWJsZWQkLnZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIEdhaW5zaWdodCBFbmdhZ2VtZW50cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZmxhZy5cbiAgICpcbiAgICogQHBhcmFtIGlzRW5hYmxlZCAtIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgR2FpbnNpZ2h0IEVuZ2FnZW1lbnRzIHNob3VsZCBiZSB2aXNpYmxlLlxuICAgKi9cbiAgdG9nZ2xlR2FpbnNpZ2h0RW5nYWdlbWVudHMoaXNFbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaXNFbmFibGVkID8gdGhpcy5zaG93R2FpbnNpZ2h0RW5nYWdlbWVudHMoKSA6IHRoaXMuaGlkZUdhaW5zaWdodEVuZ2FnZW1lbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gYXJyYXkgb2YgYm9vbGVhbiB2YWx1ZXMgcmVwcmVzZW50aW5nXG4gICAqIHRoZSBjdXJyZW50IGVuZ2FnZW1lbnQgc2V0dGluZ3MuIFRoZSBvYnNlcnZhYmxlIGNvbWJpbmVzIHRoZSBsYXRlc3QgdmFsdWVzIGZyb206XG4gICAqXG4gICAqIDEuIFVzZXIncyBwcmVmZXJlbmNlcyBmb3IgR2FpbnNpZ2h0IGVuZ2FnZW1lbnRzLlxuICAgKiAyLiBBIGZsYWcgaW5kaWNhdGluZyBpZiBQSUkgZGF0YSBzaG91bGQgYmUgc2VudC5cbiAgICogMy4gQSBmbGFnIGluZGljYXRpbmcgaWYgdGhlIHBsYXRmb3JtIHVzZXMgY3VzdG9tIGJyYW5kaW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIGFuIGFycmF5IG9mIGJvb2xlYW4gdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbmdhZ2VtZW50U2V0dGluZ3NPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8Ym9vbGVhbltdPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlLm9ic2VydmU8Ym9vbGVhbj4odGhpcy5VU0VSX1BSRUZFUkVOQ0VTX0dBSU5TSUdIVF9FTkdBR0VNRU5UU19LRVkpLFxuICAgICAgZnJvbSh0aGlzLmdhaW5zaWdodFNlcnZpY2Uuc2hvdWxkU2VuZFBpaURhdGEoKSksXG4gICAgICBvZih0aGlzLmdhaW5zaWdodFNlcnZpY2UuaXNDdXN0b21CcmFuZGluZygpKVxuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdXNlciBlbmdhZ2VtZW50IHNldHRpbmdzIGJhc2VkIG9uIHByb3ZpZGVkIHByZWZlcmVuY2VzIGFuZCBzZXR0aW5ncy5cbiAgICpcbiAgICogQmFzZWQgb24gdGhlIHJlY2VpdmVkIHZhbHVlcywgdGhlIG1ldGhvZCBkZWNpZGVzIHRvOlxuICAgKiAxLiBEaXNhYmxlIHVzZXIgZW5nYWdlbWVudHMgaWYgUElJIGRhdGEgc2hvdWxkIG5vdCBiZSBzaGFyZWQgb3IgY2VydGFpbiBicmFuZGluZy9zZXR0aW5ncyBjb25kaXRpb25zIGFyZSBtZXQuXG4gICAqIDIuIFVwZGF0ZSB0aGUgdXNlciBlbmdhZ2VtZW50IHByZWZlcmVuY2UgaWYgdGhlIHVzZXIgZW5nYWdlbWVudCBib3Qgc2V0dGluZyBpcyB1bmRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyRW5nYWdlbWVudEJvdFNldHRpbmcgLSBUaGUgdXNlcidzIHNldHRpbmcgZm9yIHRoZSBlbmdhZ2VtZW50IGJvdC5cbiAgICogQHBhcmFtIHNob3VsZFNlbmRQaWlEYXRhIC0gSW5kaWNhdGVzIHdoZXRoZXIgUElJIGRhdGEgc2hvdWxkIGJlIHNoYXJlZC5cbiAgICogQHBhcmFtIGhhc0N1c3RvbUJyYW5kaW5nIC0gSW5kaWNhdGVzIGlmIGN1c3RvbSBicmFuZGluZyBpcyBhcHBsaWVkLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVVc2VyRW5nYWdlbWVudFNldHRpbmdzKFxuICAgIHVzZXJFbmdhZ2VtZW50Qm90U2V0dGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgICBzaG91bGRTZW5kUGlpRGF0YTogYm9vbGVhbixcbiAgICBoYXNDdXN0b21CcmFuZGluZzogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaG91bGREaXNhYmxlVXNlckVuZ2FnZW1lbnRzRHVlVG9QSUlEYXRhKHNob3VsZFNlbmRQaWlEYXRhKSkge1xuICAgICAgdGhpcy51c2VyRW5nYWdlbWVudHNFbmFibGVkJC5uZXh0KGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNVc2VyRW5nYWdlbWVudEJvdFNldHRpbmdVbmRlZmluZWQodXNlckVuZ2FnZW1lbnRCb3RTZXR0aW5nKSkge1xuICAgICAgLyoqXG4gICAgICAgKiBDYXNlIHdoZXJlIHRoZSB1c2VyIGlzIG5ldyAoZnJlc2hseSBjcmVhdGVkKSBhbmQgaGFzIG5vdCBjaGFuZ2VkIHRoZSB1c2VyIGVuZ2FnZW1lbnQgc2V0dGluZ3MgaW4gdGhlIHVzZXIgZWRpdCBtb2RhbCAodW50b3VjaGVkIHN0YXRlKS5cbiAgICAgICAqIFdoZW4gY3VzdG9tIGJyYW5kaW5nIGlzIG5vdCBzZXQsIHdlIHdpbGwgc2V0IHRoZSB1c2VyIGVuZ2FnZW1lbnRzIGluIHRoZSB1c2VyIHByZWZlcmVuY2VzIHRvIHRydWUgYnkgZGVmYXVsdC5cbiAgICAgICAqL1xuICAgICAgdGhpcy51cGRhdGVVc2VyRW5nYWdlbWVudFByZWZlcmVuY2UoIWhhc0N1c3RvbUJyYW5kaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VyRW5nYWdlbWVudHNFbmFibGVkJC5uZXh0KHVzZXJFbmdhZ2VtZW50Qm90U2V0dGluZyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB1c2VyIGVuZ2FnZW1lbnRzIHNob3VsZCBiZSBkaXNhYmxlZCBkdWUgdG8gUElJIGRhdGEgc2V0dGluZ3MuXG4gICAqXG4gICAqIElmIHRoZSBgc2hvdWxkU2VuZFBpaURhdGFgIHBhcmFtZXRlciBpcyBmYWxzZSwgdGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBlbmdhZ2VtZW50c1xuICAgKiBzaG91bGQgYmUgZGlzYWJsZWQgdG8gcHJldmVudCBzaGFyaW5nIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFNlbmRQaWlEYXRhIC0gSW5kaWNhdGVzIHdoZXRoZXIgUElJIGRhdGEgaXMgYWxsb3dlZCB0byBiZSBzZW50LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHVzZXIgZW5nYWdlbWVudHMgc2hvdWxkIGJlIGRpc2FibGVkLCBvdGhlcndpc2UgZmFsc2UuXG4gICAqL1xuICBwcml2YXRlIHNob3VsZERpc2FibGVVc2VyRW5nYWdlbWVudHNEdWVUb1BJSURhdGEoc2hvdWxkU2VuZFBpaURhdGE6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXNob3VsZFNlbmRQaWlEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHVzZXIgZW5nYWdlbWVudCBib3Qgc2V0dGluZyBpcyB1bmRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gdXNlckVuZ2FnZW1lbnRCb3RTZXR0aW5nIC0gVGhlIHNldHRpbmcgdmFsdWUgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2V0dGluZyBpcyB1bmRlZmluZWQ7IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICpcbiAgICogVGhpcyBzY2VuYXJpbyBvY2N1cnMgd2hlbiBhIHVzZXIgaXMgbmV3IGFuZCBoYXNuJ3QgbW9kaWZpZWQgdGhlIGJvdCBzZXR0aW5ncyBpbiB0aGUgdXNlciBkZXRhaWxzIFVJIHlldC5cbiAgICovXG4gIHByaXZhdGUgaXNVc2VyRW5nYWdlbWVudEJvdFNldHRpbmdVbmRlZmluZWQoXG4gICAgdXNlckVuZ2FnZW1lbnRCb3RTZXR0aW5nOiBib29sZWFuIHwgdW5kZWZpbmVkXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1c2VyRW5nYWdlbWVudEJvdFNldHRpbmcgPT09IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgdmlzaWJpbGl0eSBvZiBHYWluc2lnaHQgZW5nYWdlbWVudHMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgdGhlIENTUyBzdHlsZXMgdGhhdCBoaWRlIHRoZSBHYWluc2lnaHQgZW5nYWdlbWVudHNcbiAgICogYW5kIHVwZGF0ZXMgdGhlIHJlbGV2YW50IHVzZXIgYXR0cmlidXRlIHRvIG1hcmsgdGhlIGVuZ2FnZW1lbnRzIGFzIHZpc2libGUuXG4gICAqL1xuICBwcml2YXRlIHNob3dHYWluc2lnaHRFbmdhZ2VtZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZUhpZGluZ1N0eWxlKHRoaXMuSElERV9HQUlOU0lHSFRfQk9UX1NUWUxFX0lEKTtcbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudXBkYXRlVXNlckF0dHJpYnV0ZSh0aGlzLkVOR0FHRU1FTlRTLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgR2FpbnNpZ2h0IGVuZ2FnZW1lbnRzLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhcHBsaWVzIENTUyBzdHlsZXMgdG8gaGlkZSB0aGUgR2FpbnNpZ2h0IGVuZ2FnZW1lbnRzXG4gICAqIGFuZCB1cGRhdGVzIHRoZSByZWxldmFudCB1c2VyIGF0dHJpYnV0ZSB0byBtYXJrIHRoZSBlbmdhZ2VtZW50cyBhcyBoaWRkZW4uXG4gICAqL1xuICBwcml2YXRlIGhpZGVHYWluc2lnaHRFbmdhZ2VtZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmFkZEhpZGluZ1N0eWxlKHRoaXMuSElERV9HQUlOU0lHSFRfQk9UX1NUWUxFX0lELCAnI2FwdC13aWRnZXQgeyBkaXNwbGF5Om5vbmUgfScpO1xuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS51cGRhdGVVc2VyQXR0cmlidXRlKHRoaXMuRU5HQUdFTUVOVFMsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgQ1NTIHN0eWxlIGZyb20gdGhlIGRvY3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVJZCAtIFRoZSBJRCBvZiB0aGUgQ1NTIHN0eWxlIGVsZW1lbnQgdG8gcmVtb3ZlLlxuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVIaWRpbmdTdHlsZShzdHlsZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCk7XG4gICAgc3R5bGU/LnJlbW92ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgQ1NTIHN0eWxlIHRvIHRoZSBkb2N1bWVudC5cbiAgICpcbiAgICogSWYgdGhlIHN0eWxlIHdpdGggdGhlIHNwZWNpZmllZCBJRCBhbHJlYWR5IGV4aXN0cywgdGhlIG1ldGhvZCB3aWxsIGRvIG5vdGhpbmcuXG4gICAqIE90aGVyd2lzZSwgaXQgY3JlYXRlcyBhIG5ldyBgPHN0eWxlPmAgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBJRCBhbmQgY29udGVudCxcbiAgICogdGhlbiBhcHBlbmRzIGl0IHRvIHRoZSBkb2N1bWVudCBoZWFkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVJZCAtIFRoZSBJRCB0byBhc3NpZ24gdG8gdGhlIG5ldyBzdHlsZSBlbGVtZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dENvbnRlbnQgLSBUaGUgQ1NTIHJ1bGVzIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBzdHlsZS5cbiAgICovXG4gIHByaXZhdGUgYWRkSGlkaW5nU3R5bGUoc3R5bGVJZDogc3RyaW5nLCB0ZXh0Q29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGUuaWQgPSBzdHlsZUlkO1xuICAgIHN0eWxlLnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XG4gICAgdGhpcy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxufVxuIl19
|
|
@@ -13,6 +13,7 @@ import { TranslateService } from '../i18n/translate.service';
|
|
|
13
13
|
import { LoginService } from '../login/login.service';
|
|
14
14
|
import { ModalService } from '../modal/modal.service';
|
|
15
15
|
import { GainsightService } from '../product-experience/gainsight.service';
|
|
16
|
+
import { UserEngagementsService } from '../product-experience/user-engagements.service';
|
|
16
17
|
import * as i0 from "@angular/core";
|
|
17
18
|
import * as i1 from "ngx-bootstrap/modal";
|
|
18
19
|
import * as i2 from "@c8y/client";
|
|
@@ -25,12 +26,13 @@ import * as i8 from "../product-experience/gainsight.service";
|
|
|
25
26
|
import * as i9 from "../bootstrap/cookie-banner/cookie-banner.service";
|
|
26
27
|
import * as i10 from "../login/login.service";
|
|
27
28
|
import * as i11 from "../authentication/password.service";
|
|
28
|
-
import * as i12 from "../
|
|
29
|
-
import * as i13 from "
|
|
30
|
-
import * as i14 from "
|
|
31
|
-
import * as i15 from "
|
|
29
|
+
import * as i12 from "../product-experience/user-engagements.service";
|
|
30
|
+
import * as i13 from "../modal/modal.component";
|
|
31
|
+
import * as i14 from "./user-edit.component";
|
|
32
|
+
import * as i15 from "../i18n/c8y-translate.pipe";
|
|
33
|
+
import * as i16 from "@angular/common";
|
|
32
34
|
export class UserEditModalComponent {
|
|
33
|
-
constructor(modal, user, ui, auth, client, alert, translate, userPreferences, c8yModalService, gainsightService, cookieBannerService, loginService, passwordService) {
|
|
35
|
+
constructor(modal, user, ui, auth, client, alert, translate, userPreferences, c8yModalService, gainsightService, cookieBannerService, loginService, passwordService, userEngagementsService) {
|
|
34
36
|
this.modal = modal;
|
|
35
37
|
this.user = user;
|
|
36
38
|
this.ui = ui;
|
|
@@ -44,20 +46,34 @@ export class UserEditModalComponent {
|
|
|
44
46
|
this.cookieBannerService = cookieBannerService;
|
|
45
47
|
this.loginService = loginService;
|
|
46
48
|
this.passwordService = passwordService;
|
|
49
|
+
this.userEngagementsService = userEngagementsService;
|
|
47
50
|
this.loading = false;
|
|
48
|
-
this.
|
|
51
|
+
this.showProductExperienceOptions = false;
|
|
49
52
|
this.lang = this.ui.state.lang;
|
|
50
53
|
}
|
|
51
54
|
async ngOnInit() {
|
|
52
55
|
this.updateUserInAppState();
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
await this.setInitialProductExperienceOptions();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Initializes product experience options for the user.
|
|
60
|
+
*
|
|
61
|
+
* This function performs the following operations:
|
|
62
|
+
* - Determines if the user has the permission to edit product experience options.
|
|
63
|
+
* - If the user has the permission and functional cookies are enabled:
|
|
64
|
+
* - Checks whether personalized product experience tracking is active.
|
|
65
|
+
* - Checks whether in-product information and communication is active.
|
|
66
|
+
*/
|
|
67
|
+
async setInitialProductExperienceOptions() {
|
|
68
|
+
this.showProductExperienceOptions =
|
|
69
|
+
await this.gainsightService.canEditProductExperienceSettings();
|
|
70
|
+
if (this.showProductExperienceOptions && this.cookieBannerService.isFunctionalCookieEnabled()) {
|
|
71
|
+
// Enable personalized product experience tracking option
|
|
72
|
+
this.currentUsageTrackingState =
|
|
73
|
+
!(await this.gainsightService.isGainsightPreferenceDisabledInUserPreferences(this.gainsightService.USER_PREFERENCES_GAINSIGHT_KEY));
|
|
74
|
+
// Enable in-product information & communication option
|
|
75
|
+
this.currentUserEngagementPreferenceInitialState =
|
|
76
|
+
this.userEngagementsService.userEngagementsEnabled$.value;
|
|
61
77
|
}
|
|
62
78
|
}
|
|
63
79
|
async onDismiss() {
|
|
@@ -70,11 +86,11 @@ export class UserEditModalComponent {
|
|
|
70
86
|
this.changedLang = lang;
|
|
71
87
|
await this.translate.switchToLanguage(this.changedLang);
|
|
72
88
|
}
|
|
73
|
-
|
|
74
|
-
this.usageTrackingState =
|
|
89
|
+
onUsageTrackingChange(isEnabled) {
|
|
90
|
+
this.usageTrackingState = isEnabled;
|
|
75
91
|
}
|
|
76
|
-
|
|
77
|
-
this.
|
|
92
|
+
onUserEngagementPreferenceChange(isEnabled) {
|
|
93
|
+
this.userEngagementPreferenceNewState = isEnabled;
|
|
78
94
|
}
|
|
79
95
|
async updateAndClose(user) {
|
|
80
96
|
this.loading = true;
|
|
@@ -96,16 +112,7 @@ export class UserEditModalComponent {
|
|
|
96
112
|
if (this.changedLang && this.changedLang !== this.lang) {
|
|
97
113
|
reloadRequired = await this.persistLanguage(this.changedLang);
|
|
98
114
|
}
|
|
99
|
-
|
|
100
|
-
await this.userPreferences.set(this.gainsightService.USER_PREFERENCES_GAINSIGHT_ENGAGEMENTS_KEY, this.gainsightEngagementsState);
|
|
101
|
-
}
|
|
102
|
-
if (this.currentUsageTrackingState !== this.usageTrackingState) {
|
|
103
|
-
await this.userPreferences.set(this.gainsightService.USER_PREFERENCES_GAINSIGHT_KEY, this.usageTrackingState);
|
|
104
|
-
this.gainsightService.setFunctionalCookie(this.usageTrackingState);
|
|
105
|
-
this.usageTrackingState
|
|
106
|
-
? await this.gainsightService.loadTag(this.client.tenant)
|
|
107
|
-
: await this.gainsightTrackingAppReload();
|
|
108
|
-
}
|
|
115
|
+
await this.updateProductExperienceOptions();
|
|
109
116
|
if (user.customProperties.userOrigin !== 'OAUTH2') {
|
|
110
117
|
await this.user.updateCurrent(omit(user, 'password'));
|
|
111
118
|
await this.updateUserInAppState();
|
|
@@ -157,6 +164,34 @@ export class UserEditModalComponent {
|
|
|
157
164
|
// do nothing
|
|
158
165
|
}
|
|
159
166
|
}
|
|
167
|
+
async updateProductExperienceOptions() {
|
|
168
|
+
this.updateUserEngagementsPreference();
|
|
169
|
+
await this.updateTrackingOption();
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Updates the user engagement preference if it has changed from the initial state.
|
|
173
|
+
* Calls the user engagements service to update the preference.
|
|
174
|
+
*
|
|
175
|
+
* The update only occurs if the current preference differs from the new state.
|
|
176
|
+
*/
|
|
177
|
+
updateUserEngagementsPreference() {
|
|
178
|
+
if (this.currentUserEngagementPreferenceInitialState !== this.userEngagementPreferenceNewState) {
|
|
179
|
+
this.userEngagementsService.updateUserEngagementPreference(this.userEngagementPreferenceNewState);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Asynchronously updates the tracking option for user preferences.
|
|
184
|
+
* If the current usage tracking state differs from the new state,
|
|
185
|
+
* it updates the Gainsight preferences and sets a functional cookie
|
|
186
|
+
* before triggering a reload of the application.
|
|
187
|
+
*/
|
|
188
|
+
async updateTrackingOption() {
|
|
189
|
+
if (this.currentUsageTrackingState !== this.usageTrackingState) {
|
|
190
|
+
await this.userPreferences.set(this.gainsightService.USER_PREFERENCES_GAINSIGHT_KEY, this.usageTrackingState);
|
|
191
|
+
this.gainsightService.setFunctionalCookie(this.usageTrackingState);
|
|
192
|
+
await this.gainsightTrackingAppReload();
|
|
193
|
+
}
|
|
194
|
+
}
|
|
160
195
|
async updateUserInAppState() {
|
|
161
196
|
const currentUserResult = await this.user.current();
|
|
162
197
|
this.ui.currentUser.next(currentUserResult.data);
|
|
@@ -170,10 +205,10 @@ export class UserEditModalComponent {
|
|
|
170
205
|
this.auth.updateCredentials(newCredentials);
|
|
171
206
|
}
|
|
172
207
|
}
|
|
173
|
-
UserEditModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEditModalComponent, deps: [{ token: i1.BsModalRef }, { token: i2.UserService }, { token: i3.AppStateService }, { token: i2.BasicAuth }, { token: i2.FetchClient }, { token: i4.AlertService }, { token: i5.TranslateService }, { token: i6.UserPreferencesService }, { token: i7.ModalService }, { token: i8.GainsightService }, { token: i9.CookieBannerService }, { token: i10.LoginService }, { token: i11.PasswordService }], target: i0.ɵɵFactoryTarget.Component });
|
|
174
|
-
UserEditModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UserEditModalComponent, selector: "c8y-user-edit-modal", ngImport: i0, template: "<c8y-modal
|
|
208
|
+
UserEditModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEditModalComponent, deps: [{ token: i1.BsModalRef }, { token: i2.UserService }, { token: i3.AppStateService }, { token: i2.BasicAuth }, { token: i2.FetchClient }, { token: i4.AlertService }, { token: i5.TranslateService }, { token: i6.UserPreferencesService }, { token: i7.ModalService }, { token: i8.GainsightService }, { token: i9.CookieBannerService }, { token: i10.LoginService }, { token: i11.PasswordService }, { token: i12.UserEngagementsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
209
|
+
UserEditModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UserEditModalComponent, selector: "c8y-user-edit-modal", ngImport: i0, template: "<c8y-modal\n [title]=\"'Edit user' | translate\"\n [customFooter]=\"true\"\n (onDismiss)=\"onDismiss()\"\n>\n <c8y-user-edit\n [lang]=\"lang\"\n [user]=\"ui.currentUser | async\"\n [loading]=\"loading\"\n [isUsageTrackingEnabled]=\"currentUsageTrackingState\"\n [isUserEngagementPreferenceEnabled]=\"currentUserEngagementPreferenceInitialState\"\n [showProductExperienceOptions]=\"showProductExperienceOptions\"\n (onUsageTrackingChange)=\"onUsageTrackingChange($event)\"\n (onUserEngagementPreferenceChange)=\"onUserEngagementPreferenceChange($event)\"\n (onUser)=\"updateAndClose($event)\"\n (onCancel)=\"onDismiss()\"\n (onLanguage)=\"onLanguage($event)\"\n ></c8y-user-edit>\n</c8y-modal>\n", dependencies: [{ kind: "component", type: i13.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: i14.UserEditComponent, selector: "c8y-user-edit", inputs: ["lang", "loading", "user", "showProductExperienceOptions", "isUsageTrackingEnabled", "isUserEngagementPreferenceEnabled"], outputs: ["onUser", "onUsageTrackingChange", "onUserEngagementPreferenceChange", "onCancel", "onLanguage"] }, { kind: "pipe", type: i15.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i16.AsyncPipe, name: "async" }] });
|
|
175
210
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEditModalComponent, decorators: [{
|
|
176
211
|
type: Component,
|
|
177
|
-
args: [{ selector: 'c8y-user-edit-modal', template: "<c8y-modal
|
|
178
|
-
}], ctorParameters: function () { return [{ type: i1.BsModalRef }, { type: i2.UserService }, { type: i3.AppStateService }, { type: i2.BasicAuth }, { type: i2.FetchClient }, { type: i4.AlertService }, { type: i5.TranslateService }, { type: i6.UserPreferencesService }, { type: i7.ModalService }, { type: i8.GainsightService }, { type: i9.CookieBannerService }, { type: i10.LoginService }, { type: i11.PasswordService }]; } });
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1lZGl0LW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvdXNlci91c2VyLWVkaXQtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS91c2VyL3VzZXItZWRpdC1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUdYLHFCQUFxQixFQUNyQixXQUFXLEVBQ1osTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7Ozs7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QjtRQUNoQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFFBQWdCO1FBQ3hDLE1BQU0sY0FBYyxHQUFpQjtZQUNuQyxRQUFRO1lBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07U0FDM0IsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs7bUhBM0xVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLDJEQzNCbkMsc3FCQWdCQTsyRkRXYSxzQkFBc0I7a0JBSmxDLFNBQVM7K0JBQ0UscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJhc2ljQXV0aCxcbiAgRmV0Y2hDbGllbnQsXG4gIElDcmVkZW50aWFscyxcbiAgSVVzZXIsXG4gIFRlbmFudExvZ2luT3B0aW9uVHlwZSxcbiAgVXNlclNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgb21pdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IFBhc3N3b3JkU2VydmljZSB9IGZyb20gJy4uL2F1dGhlbnRpY2F0aW9uL3Bhc3N3b3JkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29va2llQmFubmVyU2VydmljZSB9IGZyb20gJy4uL2Jvb3RzdHJhcC9jb29raWUtYmFubmVyL2Nvb2tpZS1iYW5uZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdGF0dXMgfSBmcm9tICcuLi9jb21tb24vc3RhdHVzLm1vZGVsJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vaTE4bi90cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dpblNlcnZpY2UgfSBmcm9tICcuLi9sb2dpbi9sb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2FpbnNpZ2h0U2VydmljZSB9IGZyb20gJy4uL3Byb2R1Y3QtZXhwZXJpZW5jZS9nYWluc2lnaHQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS11c2VyLWVkaXQtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1lZGl0LW1vZGFsLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBVc2VyRWRpdE1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY3VycmVudFVzZXI6IElVc2VyO1xuICBsYW5nOiBzdHJpbmc7XG4gIGNoYW5nZWRMYW5nOiBzdHJpbmc7XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgc2hvd1Byb2R1Y3RVc2FnZVNldHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY3VycmVudFVzYWdlVHJhY2tpbmdTdGF0ZTogYm9vbGVhbjtcbiAgY3VycmVudEdhaW5zaWdodEVuZ2FnZW1lbnRzU3RhdGU6IGJvb2xlYW47XG4gIHVzYWdlVHJhY2tpbmdTdGF0ZTogYm9vbGVhbjtcbiAgZ2FpbnNpZ2h0RW5nYWdlbWVudHNTdGF0ZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbW9kYWw6IEJzTW9kYWxSZWYsXG4gICAgcHVibGljIHVzZXI6IFVzZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aDogQmFzaWNBdXRoLFxuICAgIHByaXZhdGUgY2xpZW50OiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZXM6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjOHlNb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb29raWVCYW5uZXJTZXJ2aWNlOiBDb29raWVCYW5uZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXNzd29yZFNlcnZpY2U6IFBhc3N3b3JkU2VydmljZVxuICApIHtcbiAgICB0aGlzLmxhbmcgPSB0aGlzLnVpLnN0YXRlLmxhbmc7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZVVzZXJJbkFwcFN0YXRlKCk7XG4gICAgdGhpcy5zaG93UHJvZHVjdFVzYWdlU2V0dGluZyA9IGF3YWl0IHRoaXMuZ2FpbnNpZ2h0U2VydmljZS5jYW5FZGl0UHJvZHVjdEV4cGVyaWVuY2VTZXR0aW5ncygpO1xuICAgIGlmICh0aGlzLnNob3dQcm9kdWN0VXNhZ2VTZXR0aW5nKSB7XG4gICAgICBpZiAodGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLmlzRnVuY3Rpb25hbENvb2tpZUVuYWJsZWQoKSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRVc2FnZVRyYWNraW5nU3RhdGUgPVxuICAgICAgICAgICEoYXdhaXQgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLmlzR2FpbnNpZ2h0UHJlZmVyZW5jZURpc2FibGVkSW5Vc2VyUHJlZmVyZW5jZXMoXG4gICAgICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UuVVNFUl9QUkVGRVJFTkNFU19HQUlOU0lHSFRfS0VZXG4gICAgICAgICAgKSk7XG4gICAgICAgIHRoaXMuY3VycmVudEdhaW5zaWdodEVuZ2FnZW1lbnRzU3RhdGUgPVxuICAgICAgICAgICEoYXdhaXQgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLmlzR2FpbnNpZ2h0UHJlZmVyZW5jZURpc2FibGVkSW5Vc2VyUHJlZmVyZW5jZXMoXG4gICAgICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UuVVNFUl9QUkVGRVJFTkNFU19HQUlOU0lHSFRfRU5HQUdFTUVOVFNfS0VZXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25EaXNtaXNzKCkge1xuICAgIGlmICh0aGlzLmNoYW5nZWRMYW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRlLnN3aXRjaFRvTGFuZ3VhZ2UodGhpcy5sYW5nKTtcbiAgICB9XG4gICAgdGhpcy5tb2RhbC5oaWRlKCk7XG4gIH1cblxuICBhc3luYyBvbkxhbmd1YWdlKGxhbmcpIHtcbiAgICB0aGlzLmNoYW5nZWRMYW5nID0gbGFuZztcbiAgICBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5zd2l0Y2hUb0xhbmd1YWdlKHRoaXMuY2hhbmdlZExhbmcpO1xuICB9XG5cbiAgb25Qcm9kdWN0RXhwZXJpZW5jZShvcHRpb246IGJvb2xlYW4pIHtcbiAgICB0aGlzLnVzYWdlVHJhY2tpbmdTdGF0ZSA9IG9wdGlvbjtcbiAgfVxuXG4gIG9uR2FpbnNpZ2h0RW5nYWdlbWVudHMob3B0aW9uOiBib29sZWFuKSB7XG4gICAgdGhpcy5nYWluc2lnaHRFbmdhZ2VtZW50c1N0YXRlID0gb3B0aW9uO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQW5kQ2xvc2UodXNlcikge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICBsZXQgcmVsb2FkUmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXNzd29yZENoYW5nZWQgPSBCb29sZWFuKHVzZXIucGFzc3dvcmQpO1xuICAgICAgY29uc3QgdXNlc0Jhc2ljID0gdGhpcy5sb2dpblNlcnZpY2UubG9naW5Nb2RlLnR5cGUgPT09IFRlbmFudExvZ2luT3B0aW9uVHlwZS5CQVNJQztcbiAgICAgIGNvbnN0IGlzRXh0ZXJuYWxVc2VyID0gdXNlci5jdXN0b21Qcm9wZXJ0aWVzLnVzZXJPcmlnaW4gPT09ICdPQVVUSDInO1xuXG4gICAgICBpZiAoIWlzRXh0ZXJuYWxVc2VyICYmIHBhc3N3b3JkQ2hhbmdlZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFzc3dvcmQgPSBhd2FpdCB0aGlzLnBhc3N3b3JkU2VydmljZS5jdXJyZW50UGFzc3dvcmQoKS50b1Byb21pc2UoKTtcbiAgICAgICAgaWYgKCFjdXJyZW50UGFzc3dvcmQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy51c2VyLmNoYW5nZUN1cnJlbnRVc2VyUGFzc3dvcmQodXNlci5wYXNzd29yZCwgY3VycmVudFBhc3N3b3JkKTtcbiAgICAgICAgaWYgKHVzZXNCYXNpYykge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ3JlZGVudGlhbHModXNlci5wYXNzd29yZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY2hhbmdlZExhbmcgJiYgdGhpcy5jaGFuZ2VkTGFuZyAhPT0gdGhpcy5sYW5nKSB7XG4gICAgICAgIHJlbG9hZFJlcXVpcmVkID0gYXdhaXQgdGhpcy5wZXJzaXN0TGFuZ3VhZ2UodGhpcy5jaGFuZ2VkTGFuZyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRHYWluc2lnaHRFbmdhZ2VtZW50c1N0YXRlICE9PSB0aGlzLmdhaW5zaWdodEVuZ2FnZW1lbnRzU3RhdGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51c2VyUHJlZmVyZW5jZXMuc2V0KFxuICAgICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS5VU0VSX1BSRUZFUkVOQ0VTX0dBSU5TSUdIVF9FTkdBR0VNRU5UU19LRVksXG4gICAgICAgICAgdGhpcy5nYWluc2lnaHRFbmdhZ2VtZW50c1N0YXRlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2FnZVRyYWNraW5nU3RhdGUgIT09IHRoaXMudXNhZ2VUcmFja2luZ1N0YXRlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXNlclByZWZlcmVuY2VzLnNldChcbiAgICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UuVVNFUl9QUkVGRVJFTkNFU19HQUlOU0lHSFRfS0VZLFxuICAgICAgICAgIHRoaXMudXNhZ2VUcmFja2luZ1N0YXRlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnNldEZ1bmN0aW9uYWxDb29raWUodGhpcy51c2FnZVRyYWNraW5nU3RhdGUpO1xuICAgICAgICB0aGlzLnVzYWdlVHJhY2tpbmdTdGF0ZVxuICAgICAgICAgID8gYXdhaXQgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLmxvYWRUYWcodGhpcy5jbGllbnQudGVuYW50KVxuICAgICAgICAgIDogYXdhaXQgdGhpcy5nYWluc2lnaHRUcmFja2luZ0FwcFJlbG9hZCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodXNlci5jdXN0b21Qcm9wZXJ0aWVzLnVzZXJPcmlnaW4gIT09ICdPQVVUSDInKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXNlci51cGRhdGVDdXJyZW50KG9taXQodXNlciwgJ3Bhc3N3b3JkJykpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVVzZXJJbkFwcFN0YXRlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdVc2VyIHNhdmVkLicpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSkge1xuICAgICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgaWYgKHJlbG9hZFJlcXVpcmVkKSB7XG4gICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHBlcnNpc3RMYW5ndWFnZShsYW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IHNob3VsZFJlbG9hZDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jOHlNb2RhbFNlcnZpY2UuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnUmVsb2FkIHJlY29tbWVuZGVkJyksXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ1RvIGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaW4gdGhlIGVudGlyZSBhcHBsaWNhdGlvbiwgd2UgcmVjb21tZW5kIHlvdSB0byByZWxvYWQgdGhlIHBhZ2UuIElmIHlvdSBoYXZlIGFueSB1bnNhdmVkIGNoYW5nZXMsIHlvdSBjYW4gcmVsb2FkIGxhdGVyLiBIb3cgd291bGQgeW91IGxpa2UgdG8gcHJvY2VlZD8nXG4gICAgICAgICksXG4gICAgICAgIFN0YXR1cy5XQVJOSU5HLFxuICAgICAgICB7XG4gICAgICAgICAgb2s6IGdldHRleHQoJ1JlbG9hZCBub3cnKSxcbiAgICAgICAgICBjYW5jZWw6IGdldHRleHQoJ1JlbG9hZCBsYXRlcicpXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS5zYXZlSW5Mb2NhbFN0b3JhZ2UobGFuZyk7XG4gICAgICBhd2FpdCB0aGlzLnVzZXJQcmVmZXJlbmNlcy5zZXQoJ2xhbmd1YWdlJywgbGFuZyk7XG4gICAgICB0aGlzLmxhbmcgPSBsYW5nO1xuICAgICAgc2hvdWxkUmVsb2FkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy50cmFuc2xhdGUuc2F2ZUluTG9jYWxTdG9yYWdlKGxhbmcpO1xuICAgICAgYXdhaXQgdGhpcy51c2VyUHJlZmVyZW5jZXMuc2V0KCdsYW5ndWFnZScsIGxhbmcpO1xuICAgICAgdGhpcy5sYW5nID0gbGFuZztcbiAgICAgIHNob3VsZFJlbG9hZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBzaG91bGRSZWxvYWQ7XG4gIH1cblxuICBhc3luYyBnYWluc2lnaHRUcmFja2luZ0FwcFJlbG9hZCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jOHlNb2RhbFNlcnZpY2UuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnUmVsb2FkIHJlcXVpcmVkJyksXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ1RvIGNoYW5nZSB0aGUgdHJhY2tpbmcgb3B0aW9uIGluIHRoZSBlbnRpcmUgYXBwbGljYXRpb24sIHlvdSBuZWVkIHRvIHJlbG9hZCB0aGUgcGFnZS4gSWYgeW91IGhhdmUgYW55IHVuc2F2ZWQgY2hhbmdlcywgeW91IGNhbiByZWxvYWQgbGF0ZXIuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPydcbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLldBUk5JTkcsXG4gICAgICAgIHtcbiAgICAgICAgICBvazogZ2V0dGV4dCgnUmVsb2FkIG5vdycpLFxuICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnUmVsb2FkIGxhdGVyJylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVVc2VySW5BcHBTdGF0ZSgpIHtcbiAgICBjb25zdCBjdXJyZW50VXNlclJlc3VsdCA9IGF3YWl0IHRoaXMudXNlci5jdXJyZW50KCk7XG4gICAgdGhpcy51aS5jdXJyZW50VXNlci5uZXh0KGN1cnJlbnRVc2VyUmVzdWx0LmRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDcmVkZW50aWFscyhwYXNzd29yZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IElDcmVkZW50aWFscyA9IHtcbiAgICAgIHBhc3N3b3JkLFxuICAgICAgdXNlcjogdGhpcy51aS5jdXJyZW50VXNlci52YWx1ZS5pZCxcbiAgICAgIHRlbmFudDogdGhpcy5jbGllbnQudGVuYW50XG4gICAgfTtcbiAgICB0aGlzLmF1dGgudXBkYXRlQ3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpO1xuICB9XG59XG4iLCI8Yzh5LW1vZGFsIFtjdXN0b21Gb290ZXJdPVwidHJ1ZVwiIFt0aXRsZV09XCInRWRpdCB1c2VyJyB8IHRyYW5zbGF0ZVwiIChvbkRpc21pc3MpPVwib25EaXNtaXNzKClcIj5cbiAgPGM4eS11c2VyLWVkaXRcbiAgICBbbGFuZ109XCJsYW5nXCJcbiAgICBbdXNlcl09XCJ1aS5jdXJyZW50VXNlciB8IGFzeW5jXCJcbiAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICBbaXNVc2FnZVRyYWNraW5nRW5hYmxlZF09XCJjdXJyZW50VXNhZ2VUcmFja2luZ1N0YXRlXCJcbiAgICBbaXNHYWluc2lnaHRFbmdhZ2VtZW50c0VuYWJsZWRdPVwiY3VycmVudEdhaW5zaWdodEVuZ2FnZW1lbnRzU3RhdGVcIlxuICAgIFtzaG93UHJvZHVjdFVzYWdlU2V0dGluZ109XCJzaG93UHJvZHVjdFVzYWdlU2V0dGluZ1wiXG4gICAgKG9uTGFuZ3VhZ2UpPVwib25MYW5ndWFnZSgkZXZlbnQpXCJcbiAgICAob25Qcm9kdWN0RXhwZXJpZW5jZSk9XCJvblByb2R1Y3RFeHBlcmllbmNlKCRldmVudClcIlxuICAgIChvbkdhaW5zaWdodEVuZ2FnZW1lbnRzKT1cIm9uR2FpbnNpZ2h0RW5nYWdlbWVudHMoJGV2ZW50KVwiXG4gICAgKG9uVXNlcik9XCJ1cGRhdGVBbmRDbG9zZSgkZXZlbnQpXCJcbiAgICAob25DYW5jZWwpPVwib25EaXNtaXNzKClcIlxuICA+XG4gIDwvYzh5LXVzZXItZWRpdD5cbjwvYzh5LW1vZGFsPlxuIl19
|
|
212
|
+
args: [{ selector: 'c8y-user-edit-modal', template: "<c8y-modal\n [title]=\"'Edit user' | translate\"\n [customFooter]=\"true\"\n (onDismiss)=\"onDismiss()\"\n>\n <c8y-user-edit\n [lang]=\"lang\"\n [user]=\"ui.currentUser | async\"\n [loading]=\"loading\"\n [isUsageTrackingEnabled]=\"currentUsageTrackingState\"\n [isUserEngagementPreferenceEnabled]=\"currentUserEngagementPreferenceInitialState\"\n [showProductExperienceOptions]=\"showProductExperienceOptions\"\n (onUsageTrackingChange)=\"onUsageTrackingChange($event)\"\n (onUserEngagementPreferenceChange)=\"onUserEngagementPreferenceChange($event)\"\n (onUser)=\"updateAndClose($event)\"\n (onCancel)=\"onDismiss()\"\n (onLanguage)=\"onLanguage($event)\"\n ></c8y-user-edit>\n</c8y-modal>\n" }]
|
|
213
|
+
}], ctorParameters: function () { return [{ type: i1.BsModalRef }, { type: i2.UserService }, { type: i3.AppStateService }, { type: i2.BasicAuth }, { type: i2.FetchClient }, { type: i4.AlertService }, { type: i5.TranslateService }, { type: i6.UserPreferencesService }, { type: i7.ModalService }, { type: i8.GainsightService }, { type: i9.CookieBannerService }, { type: i10.LoginService }, { type: i11.PasswordService }, { type: i12.UserEngagementsService }]; } });
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1lZGl0LW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvdXNlci91c2VyLWVkaXQtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS91c2VyL3VzZXItZWRpdC1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUdYLHFCQUFxQixFQUNyQixXQUFXLEVBQ1osTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8s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QUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsOEJBQThCLEVBQ3BELElBQUksQ0FBQyxrQkFBa0IsQ0FDeEIsQ0FBQztZQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNuRSxNQUFNLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0I7UUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUFnQjtRQUN4QyxNQUFNLGNBQWMsR0FBaUI7WUFDbkMsUUFBUTtZQUNSLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1NBQzNCLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7O21IQTlOVSxzQkFBc0I7dUdBQXRCLHNCQUFzQiwyREM1Qm5DLDh0QkFtQkE7MkZEU2Esc0JBQXNCO2tCQUpsQyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCYXNpY0F1dGgsXG4gIEZldGNoQ2xpZW50LFxuICBJQ3JlZGVudGlhbHMsXG4gIElVc2VyLFxuICBUZW5hbnRMb2dpbk9wdGlvblR5cGUsXG4gIFVzZXJTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IG9taXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBQYXNzd29yZFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoZW50aWNhdGlvbi9wYXNzd29yZC5zZXJ2aWNlJztcbmltcG9ydCB7IENvb2tpZUJhbm5lclNlcnZpY2UgfSBmcm9tICcuLi9ib290c3RyYXAvY29va2llLWJhbm5lci9jb29raWUtYmFubmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnLi4vY29tbW9uL3N0YXR1cy5tb2RlbCc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VzZXItcHJlZmVyZW5jZXMvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuL2dldHRleHQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL2kxOG4vdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi4vbG9naW4vbG9naW4uc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IEdhaW5zaWdodFNlcnZpY2UgfSBmcm9tICcuLi9wcm9kdWN0LWV4cGVyaWVuY2UvZ2FpbnNpZ2h0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckVuZ2FnZW1lbnRzU2VydmljZSB9IGZyb20gJy4uL3Byb2R1Y3QtZXhwZXJpZW5jZS91c2VyLWVuZ2FnZW1lbnRzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdXNlci1lZGl0LW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItZWRpdC1tb2RhbC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlckVkaXRNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGN1cnJlbnRVc2VyOiBJVXNlcjtcbiAgbGFuZzogc3RyaW5nO1xuICBjaGFuZ2VkTGFuZzogc3RyaW5nO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIHNob3dQcm9kdWN0RXhwZXJpZW5jZU9wdGlvbnMgPSBmYWxzZTtcbiAgY3VycmVudFVzYWdlVHJhY2tpbmdTdGF0ZTogYm9vbGVhbjtcbiAgY3VycmVudFVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZUluaXRpYWxTdGF0ZTogYm9vbGVhbjtcbiAgdXNhZ2VUcmFja2luZ1N0YXRlOiBib29sZWFuO1xuICB1c2VyRW5nYWdlbWVudFByZWZlcmVuY2VOZXdTdGF0ZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbW9kYWw6IEJzTW9kYWxSZWYsXG4gICAgcHVibGljIHVzZXI6IFVzZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aDogQmFzaWNBdXRoLFxuICAgIHByaXZhdGUgY2xpZW50OiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZXM6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjOHlNb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb29raWVCYW5uZXJTZXJ2aWNlOiBDb29raWVCYW5uZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXNzd29yZFNlcnZpY2U6IFBhc3N3b3JkU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJFbmdhZ2VtZW50c1NlcnZpY2U6IFVzZXJFbmdhZ2VtZW50c1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5sYW5nID0gdGhpcy51aS5zdGF0ZS5sYW5nO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVVc2VySW5BcHBTdGF0ZSgpO1xuICAgIGF3YWl0IHRoaXMuc2V0SW5pdGlhbFByb2R1Y3RFeHBlcmllbmNlT3B0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHByb2R1Y3QgZXhwZXJpZW5jZSBvcHRpb25zIGZvciB0aGUgdXNlci5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6XG4gICAqIC0gRGV0ZXJtaW5lcyBpZiB0aGUgdXNlciBoYXMgdGhlIHBlcm1pc3Npb24gdG8gZWRpdCBwcm9kdWN0IGV4cGVyaWVuY2Ugb3B0aW9ucy5cbiAgICogLSBJZiB0aGUgdXNlciBoYXMgdGhlIHBlcm1pc3Npb24gYW5kIGZ1bmN0aW9uYWwgY29va2llcyBhcmUgZW5hYmxlZDpcbiAgICogICAtIENoZWNrcyB3aGV0aGVyIHBlcnNvbmFsaXplZCBwcm9kdWN0IGV4cGVyaWVuY2UgdHJhY2tpbmcgaXMgYWN0aXZlLlxuICAgKiAgIC0gQ2hlY2tzIHdoZXRoZXIgaW4tcHJvZHVjdCBpbmZvcm1hdGlvbiBhbmQgY29tbXVuaWNhdGlvbiBpcyBhY3RpdmUuXG4gICAqL1xuICBhc3luYyBzZXRJbml0aWFsUHJvZHVjdEV4cGVyaWVuY2VPcHRpb25zKCkge1xuICAgIHRoaXMuc2hvd1Byb2R1Y3RFeHBlcmllbmNlT3B0aW9ucyA9XG4gICAgICBhd2FpdCB0aGlzLmdhaW5zaWdodFNlcnZpY2UuY2FuRWRpdFByb2R1Y3RFeHBlcmllbmNlU2V0dGluZ3MoKTtcblxuICAgIGlmICh0aGlzLnNob3dQcm9kdWN0RXhwZXJpZW5jZU9wdGlvbnMgJiYgdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLmlzRnVuY3Rpb25hbENvb2tpZUVuYWJsZWQoKSkge1xuICAgICAgLy8gRW5hYmxlIHBlcnNvbmFsaXplZCBwcm9kdWN0IGV4cGVyaWVuY2UgdHJhY2tpbmcgb3B0aW9uXG4gICAgICB0aGlzLmN1cnJlbnRVc2FnZVRyYWNraW5nU3RhdGUgPVxuICAgICAgICAhKGF3YWl0IHRoaXMuZ2FpbnNpZ2h0U2VydmljZS5pc0dhaW5zaWdodFByZWZlcmVuY2VEaXNhYmxlZEluVXNlclByZWZlcmVuY2VzKFxuICAgICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS5VU0VSX1BSRUZFUkVOQ0VTX0dBSU5TSUdIVF9LRVlcbiAgICAgICAgKSk7XG5cbiAgICAgIC8vIEVuYWJsZSBpbi1wcm9kdWN0IGluZm9ybWF0aW9uICYgY29tbXVuaWNhdGlvbiBvcHRpb25cbiAgICAgIHRoaXMuY3VycmVudFVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZUluaXRpYWxTdGF0ZSA9XG4gICAgICAgIHRoaXMudXNlckVuZ2FnZW1lbnRzU2VydmljZS51c2VyRW5nYWdlbWVudHNFbmFibGVkJC52YWx1ZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkRpc21pc3MoKSB7XG4gICAgaWYgKHRoaXMuY2hhbmdlZExhbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdGUuc3dpdGNoVG9MYW5ndWFnZSh0aGlzLmxhbmcpO1xuICAgIH1cbiAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgfVxuXG4gIGFzeW5jIG9uTGFuZ3VhZ2UobGFuZykge1xuICAgIHRoaXMuY2hhbmdlZExhbmcgPSBsYW5nO1xuICAgIGF3YWl0IHRoaXMudHJhbnNsYXRlLnN3aXRjaFRvTGFuZ3VhZ2UodGhpcy5jaGFuZ2VkTGFuZyk7XG4gIH1cblxuICBvblVzYWdlVHJhY2tpbmdDaGFuZ2UoaXNFbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy51c2FnZVRyYWNraW5nU3RhdGUgPSBpc0VuYWJsZWQ7XG4gIH1cblxuICBvblVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZUNoYW5nZShpc0VuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZU5ld1N0YXRlID0gaXNFbmFibGVkO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQW5kQ2xvc2UodXNlcikge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICBsZXQgcmVsb2FkUmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXNzd29yZENoYW5nZWQgPSBCb29sZWFuKHVzZXIucGFzc3dvcmQpO1xuICAgICAgY29uc3QgdXNlc0Jhc2ljID0gdGhpcy5sb2dpblNlcnZpY2UubG9naW5Nb2RlLnR5cGUgPT09IFRlbmFudExvZ2luT3B0aW9uVHlwZS5CQVNJQztcbiAgICAgIGNvbnN0IGlzRXh0ZXJuYWxVc2VyID0gdXNlci5jdXN0b21Qcm9wZXJ0aWVzLnVzZXJPcmlnaW4gPT09ICdPQVVUSDInO1xuXG4gICAgICBpZiAoIWlzRXh0ZXJuYWxVc2VyICYmIHBhc3N3b3JkQ2hhbmdlZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFzc3dvcmQgPSBhd2FpdCB0aGlzLnBhc3N3b3JkU2VydmljZS5jdXJyZW50UGFzc3dvcmQoKS50b1Byb21pc2UoKTtcbiAgICAgICAgaWYgKCFjdXJyZW50UGFzc3dvcmQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy51c2VyLmNoYW5nZUN1cnJlbnRVc2VyUGFzc3dvcmQodXNlci5wYXNzd29yZCwgY3VycmVudFBhc3N3b3JkKTtcbiAgICAgICAgaWYgKHVzZXNCYXNpYykge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ3JlZGVudGlhbHModXNlci5wYXNzd29yZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY2hhbmdlZExhbmcgJiYgdGhpcy5jaGFuZ2VkTGFuZyAhPT0gdGhpcy5sYW5nKSB7XG4gICAgICAgIHJlbG9hZFJlcXVpcmVkID0gYXdhaXQgdGhpcy5wZXJzaXN0TGFuZ3VhZ2UodGhpcy5jaGFuZ2VkTGFuZyk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVByb2R1Y3RFeHBlcmllbmNlT3B0aW9ucygpO1xuXG4gICAgICBpZiAodXNlci5jdXN0b21Qcm9wZXJ0aWVzLnVzZXJPcmlnaW4gIT09ICdPQVVUSDInKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXNlci51cGRhdGVDdXJyZW50KG9taXQodXNlciwgJ3Bhc3N3b3JkJykpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVVzZXJJbkFwcFN0YXRlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdVc2VyIHNhdmVkLicpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSkge1xuICAgICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgaWYgKHJlbG9hZFJlcXVpcmVkKSB7XG4gICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHBlcnNpc3RMYW5ndWFnZShsYW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IHNob3VsZFJlbG9hZDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jOHlNb2RhbFNlcnZpY2UuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnUmVsb2FkIHJlY29tbWVuZGVkJyksXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ1RvIGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaW4gdGhlIGVudGlyZSBhcHBsaWNhdGlvbiwgd2UgcmVjb21tZW5kIHlvdSB0byByZWxvYWQgdGhlIHBhZ2UuIElmIHlvdSBoYXZlIGFueSB1bnNhdmVkIGNoYW5nZXMsIHlvdSBjYW4gcmVsb2FkIGxhdGVyLiBIb3cgd291bGQgeW91IGxpa2UgdG8gcHJvY2VlZD8nXG4gICAgICAgICksXG4gICAgICAgIFN0YXR1cy5XQVJOSU5HLFxuICAgICAgICB7XG4gICAgICAgICAgb2s6IGdldHRleHQoJ1JlbG9hZCBub3cnKSxcbiAgICAgICAgICBjYW5jZWw6IGdldHRleHQoJ1JlbG9hZCBsYXRlcicpXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS5zYXZlSW5Mb2NhbFN0b3JhZ2UobGFuZyk7XG4gICAgICBhd2FpdCB0aGlzLnVzZXJQcmVmZXJlbmNlcy5zZXQoJ2xhbmd1YWdlJywgbGFuZyk7XG4gICAgICB0aGlzLmxhbmcgPSBsYW5nO1xuICAgICAgc2hvdWxkUmVsb2FkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy50cmFuc2xhdGUuc2F2ZUluTG9jYWxTdG9yYWdlKGxhbmcpO1xuICAgICAgYXdhaXQgdGhpcy51c2VyUHJlZmVyZW5jZXMuc2V0KCdsYW5ndWFnZScsIGxhbmcpO1xuICAgICAgdGhpcy5sYW5nID0gbGFuZztcbiAgICAgIHNob3VsZFJlbG9hZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBzaG91bGRSZWxvYWQ7XG4gIH1cblxuICBhc3luYyBnYWluc2lnaHRUcmFja2luZ0FwcFJlbG9hZCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jOHlNb2RhbFNlcnZpY2UuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnUmVsb2FkIHJlcXVpcmVkJyksXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ1RvIGNoYW5nZSB0aGUgdHJhY2tpbmcgb3B0aW9uIGluIHRoZSBlbnRpcmUgYXBwbGljYXRpb24sIHlvdSBuZWVkIHRvIHJlbG9hZCB0aGUgcGFnZS4gSWYgeW91IGhhdmUgYW55IHVuc2F2ZWQgY2hhbmdlcywgeW91IGNhbiByZWxvYWQgbGF0ZXIuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPydcbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLldBUk5JTkcsXG4gICAgICAgIHtcbiAgICAgICAgICBvazogZ2V0dGV4dCgnUmVsb2FkIG5vdycpLFxuICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnUmVsb2FkIGxhdGVyJylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVQcm9kdWN0RXhwZXJpZW5jZU9wdGlvbnMoKSB7XG4gICAgdGhpcy51cGRhdGVVc2VyRW5nYWdlbWVudHNQcmVmZXJlbmNlKCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVUcmFja2luZ09wdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZW5nYWdlbWVudCBwcmVmZXJlbmNlIGlmIGl0IGhhcyBjaGFuZ2VkIGZyb20gdGhlIGluaXRpYWwgc3RhdGUuXG4gICAqIENhbGxzIHRoZSB1c2VyIGVuZ2FnZW1lbnRzIHNlcnZpY2UgdG8gdXBkYXRlIHRoZSBwcmVmZXJlbmNlLlxuICAgKlxuICAgKiBUaGUgdXBkYXRlIG9ubHkgb2NjdXJzIGlmIHRoZSBjdXJyZW50IHByZWZlcmVuY2UgZGlmZmVycyBmcm9tIHRoZSBuZXcgc3RhdGUuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVVzZXJFbmdhZ2VtZW50c1ByZWZlcmVuY2UoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jdXJyZW50VXNlckVuZ2FnZW1lbnRQcmVmZXJlbmNlSW5pdGlhbFN0YXRlICE9PSB0aGlzLnVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZU5ld1N0YXRlXG4gICAgKSB7XG4gICAgICB0aGlzLnVzZXJFbmdhZ2VtZW50c1NlcnZpY2UudXBkYXRlVXNlckVuZ2FnZW1lbnRQcmVmZXJlbmNlKFxuICAgICAgICB0aGlzLnVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZU5ld1N0YXRlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBc3luY2hyb25vdXNseSB1cGRhdGVzIHRoZSB0cmFja2luZyBvcHRpb24gZm9yIHVzZXIgcHJlZmVyZW5jZXMuXG4gICAqIElmIHRoZSBjdXJyZW50IHVzYWdlIHRyYWNraW5nIHN0YXRlIGRpZmZlcnMgZnJvbSB0aGUgbmV3IHN0YXRlLFxuICAgKiBpdCB1cGRhdGVzIHRoZSBHYWluc2lnaHQgcHJlZmVyZW5jZXMgYW5kIHNldHMgYSBmdW5jdGlvbmFsIGNvb2tpZVxuICAgKiBiZWZvcmUgdHJpZ2dlcmluZyBhIHJlbG9hZCBvZiB0aGUgYXBwbGljYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVRyYWNraW5nT3B0aW9uKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRVc2FnZVRyYWNraW5nU3RhdGUgIT09IHRoaXMudXNhZ2VUcmFja2luZ1N0YXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLnVzZXJQcmVmZXJlbmNlcy5zZXQoXG4gICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS5VU0VSX1BSRUZFUkVOQ0VTX0dBSU5TSUdIVF9LRVksXG4gICAgICAgIHRoaXMudXNhZ2VUcmFja2luZ1N0YXRlXG4gICAgICApO1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnNldEZ1bmN0aW9uYWxDb29raWUodGhpcy51c2FnZVRyYWNraW5nU3RhdGUpO1xuICAgICAgYXdhaXQgdGhpcy5nYWluc2lnaHRUcmFja2luZ0FwcFJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlVXNlckluQXBwU3RhdGUoKSB7XG4gICAgY29uc3QgY3VycmVudFVzZXJSZXN1bHQgPSBhd2FpdCB0aGlzLnVzZXIuY3VycmVudCgpO1xuICAgIHRoaXMudWkuY3VycmVudFVzZXIubmV4dChjdXJyZW50VXNlclJlc3VsdC5kYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ3JlZGVudGlhbHMocGFzc3dvcmQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5ld0NyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMgPSB7XG4gICAgICBwYXNzd29yZCxcbiAgICAgIHVzZXI6IHRoaXMudWkuY3VycmVudFVzZXIudmFsdWUuaWQsXG4gICAgICB0ZW5hbnQ6IHRoaXMuY2xpZW50LnRlbmFudFxuICAgIH07XG4gICAgdGhpcy5hdXRoLnVwZGF0ZUNyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKTtcbiAgfVxufVxuIiwiPGM4eS1tb2RhbFxuICBbdGl0bGVdPVwiJ0VkaXQgdXNlcicgfCB0cmFuc2xhdGVcIlxuICBbY3VzdG9tRm9vdGVyXT1cInRydWVcIlxuICAob25EaXNtaXNzKT1cIm9uRGlzbWlzcygpXCJcbj5cbiAgPGM4eS11c2VyLWVkaXRcbiAgICBbbGFuZ109XCJsYW5nXCJcbiAgICBbdXNlcl09XCJ1aS5jdXJyZW50VXNlciB8IGFzeW5jXCJcbiAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICBbaXNVc2FnZVRyYWNraW5nRW5hYmxlZF09XCJjdXJyZW50VXNhZ2VUcmFja2luZ1N0YXRlXCJcbiAgICBbaXNVc2VyRW5nYWdlbWVudFByZWZlcmVuY2VFbmFibGVkXT1cImN1cnJlbnRVc2VyRW5nYWdlbWVudFByZWZlcmVuY2VJbml0aWFsU3RhdGVcIlxuICAgIFtzaG93UHJvZHVjdEV4cGVyaWVuY2VPcHRpb25zXT1cInNob3dQcm9kdWN0RXhwZXJpZW5jZU9wdGlvbnNcIlxuICAgIChvblVzYWdlVHJhY2tpbmdDaGFuZ2UpPVwib25Vc2FnZVRyYWNraW5nQ2hhbmdlKCRldmVudClcIlxuICAgIChvblVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZUNoYW5nZSk9XCJvblVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAob25Vc2VyKT1cInVwZGF0ZUFuZENsb3NlKCRldmVudClcIlxuICAgIChvbkNhbmNlbCk9XCJvbkRpc21pc3MoKVwiXG4gICAgKG9uTGFuZ3VhZ2UpPVwib25MYW5ndWFnZSgkZXZlbnQpXCJcbiAgPjwvYzh5LXVzZXItZWRpdD5cbjwvYzh5LW1vZGFsPlxuIl19
|