@posiwise/admin-module 0.0.180 → 0.0.182
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/posiwise-admin-module.mjs +463 -441
- package/fesm2022/posiwise-admin-module.mjs.map +1 -1
- package/lib/components/resources/resources-admin-details/resources-admin-details.component.d.ts +1 -1
- package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +1 -1
- package/package.json +4 -6
- package/esm2022/index.mjs +0 -87
- package/esm2022/lib/admin-guard.service.mjs +0 -44
- package/esm2022/lib/admin-module.routing.mjs +0 -919
- package/esm2022/lib/admin.module.mjs +0 -485
- package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +0 -93
- package/esm2022/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +0 -98
- package/esm2022/lib/components/TOS/terms-of-service-tabs/terms-of-service-tabs.component.mjs +0 -26
- package/esm2022/lib/components/config/global-config-details/global-config-details.component.mjs +0 -75
- package/esm2022/lib/components/config/global-config-list/global-config-list.component.mjs +0 -92
- package/esm2022/lib/components/config/global-config-tabs/global-config-tabs.component.mjs +0 -24
- package/esm2022/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +0 -101
- package/esm2022/lib/components/contact-us/contact-us-tabs/contact-us-tabs.component.mjs +0 -25
- package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +0 -88
- package/esm2022/lib/components/credentials/credentials-details/credentials-details.component.mjs +0 -79
- package/esm2022/lib/components/credentials/credentials-tab/credentials-tab.component.mjs +0 -31
- package/esm2022/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +0 -92
- package/esm2022/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.mjs +0 -102
- package/esm2022/lib/components/domain-config/domain-config-details/base-domain-config.component.mjs +0 -88
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +0 -731
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.mjs +0 -123
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-details.component.mjs +0 -57
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +0 -91
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +0 -144
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +0 -30
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +0 -31
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +0 -30
- package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +0 -98
- package/esm2022/lib/components/domain-config/domain-config-tabs/domain-config-tabs.component.mjs +0 -25
- package/esm2022/lib/components/faqs/add-faq/add-faq.component.mjs +0 -218
- package/esm2022/lib/components/faqs/edit-faq/edit-faq.component.mjs +0 -204
- package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +0 -277
- package/esm2022/lib/components/faqs/faqs-tabs/faqs-tabs.component.mjs +0 -25
- package/esm2022/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.mjs +0 -84
- package/esm2022/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +0 -98
- package/esm2022/lib/components/generic/generic-insight/generic-insight.component.mjs +0 -12
- package/esm2022/lib/components/generic/generic-misc/generic-misc.component.mjs +0 -127
- package/esm2022/lib/components/generic/generic-tabs/generic-tabs.component.mjs +0 -31
- package/esm2022/lib/components/incidents/add-edit-incident/add-edit-incident.component.mjs +0 -152
- package/esm2022/lib/components/incidents/incidents-list/incidents-list.component.mjs +0 -118
- package/esm2022/lib/components/incidents/incidents-tabs/incidents-tabs.component.mjs +0 -25
- package/esm2022/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +0 -111
- package/esm2022/lib/components/login-notifications/login-notification-tabs/login-notification-tabs.component.mjs +0 -25
- package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +0 -97
- package/esm2022/lib/components/mailer/mailer-details/mailer-details.component.mjs +0 -115
- package/esm2022/lib/components/mailer/mailer-list/mailer-list.component.mjs +0 -113
- package/esm2022/lib/components/mailer/mailer-tabs/mailer-tabs.component.mjs +0 -24
- package/esm2022/lib/components/newsletters/newsletter-details/newsletter-details.component.mjs +0 -87
- package/esm2022/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +0 -284
- package/esm2022/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +0 -76
- package/esm2022/lib/components/newsletters/newsletters-insight/newsletters-insight.component.mjs +0 -53
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items-view-details/newsletters-items-view-details.component.mjs +0 -59
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +0 -179
- package/esm2022/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +0 -103
- package/esm2022/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.mjs +0 -38
- package/esm2022/lib/components/permissions/permissions-details/permissions-details.component.mjs +0 -109
- package/esm2022/lib/components/permissions/permissions-list/permissions-list.component.mjs +0 -87
- package/esm2022/lib/components/permissions/permissions-tabs/permissions-tabs.component.mjs +0 -31
- package/esm2022/lib/components/permissions/role-details/role-details.component.mjs +0 -140
- package/esm2022/lib/components/permissions/roles-list/roles-list.component.mjs +0 -93
- package/esm2022/lib/components/products/product-details/product-details.component.mjs +0 -370
- package/esm2022/lib/components/products/products-insight/products-insight.component.mjs +0 -52
- package/esm2022/lib/components/products/products-list/products-list.component.mjs +0 -144
- package/esm2022/lib/components/products/products-tabs/products-tabs.component.mjs +0 -28
- package/esm2022/lib/components/products/users-list-for-product/users-list-for-product.component.mjs +0 -55
- package/esm2022/lib/components/resources/resources-admin-details/resources-admin-details.component.mjs +0 -380
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-admin-tabs.component.mjs +0 -33
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-index/resources-index.component.mjs +0 -154
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-insight/resources-insight.component.mjs +0 -54
- package/esm2022/lib/components/resources/resources-lists-insight/resources-lists-insight.component.mjs +0 -61
- package/esm2022/lib/components/subscriptions/subscription-agents/subscription-agents.component.mjs +0 -120
- package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +0 -135
- package/esm2022/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +0 -210
- package/esm2022/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +0 -225
- package/esm2022/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +0 -66
- package/esm2022/lib/components/subscriptions/subscription-users/add-members/add-members.component.mjs +0 -173
- package/esm2022/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +0 -215
- package/esm2022/lib/components/subscriptions/subscriptions-insight/base-subscription-insight.component.mjs +0 -47
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-price/subscription-insight-average-price.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-user/subscription-insight-average-user.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-churn/subscription-insight-churn.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +0 -103
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-product-session/subscription-insight-product-session.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-tabs/subscription-insight-tabs.component.mjs +0 -23
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-user-session/subscription-insight-user-session.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.mjs +0 -232
- package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +0 -311
- package/esm2022/lib/components/subscriptions/subscriptions-tabs/subscriptions-tabs.component.mjs +0 -35
- package/esm2022/lib/components/tags/tags-category/tags-category.component.mjs +0 -153
- package/esm2022/lib/components/tags/tags-details/tags-details.component.mjs +0 -153
- package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +0 -145
- package/esm2022/lib/components/tags/tags-tabs/tags-tabs.component.mjs +0 -32
- package/esm2022/lib/components/tips/tip-detail/tip-detail.component.mjs +0 -88
- package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +0 -49
- package/esm2022/lib/components/tips/tips-tabs/tips-tabs.component.mjs +0 -25
- package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +0 -216
- package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +0 -200
- package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +0 -198
- package/esm2022/lib/components/tracking/events/events.component.mjs +0 -198
- package/esm2022/lib/components/tracking/tracking-tabs/tracking-tabs.component.mjs +0 -49
- package/esm2022/lib/components/tracking/versions/versions.component.mjs +0 -208
- package/esm2022/lib/components/users/user-details/user-details.component.mjs +0 -167
- package/esm2022/lib/components/users/users-insight/users-insight.component.mjs +0 -53
- package/esm2022/lib/components/users/users-list/users-list.component.mjs +0 -338
- package/esm2022/lib/components/users/users-tabs/users-tabs.component.mjs +0 -32
- package/esm2022/lib/shared/interface/admin-module-shared.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/api-response.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/contact-us.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/credential.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/domain-config.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/feedback-question.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/global-config.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/login-notification.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/newsletter.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/permission.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/privacy-tos.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/tip.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/tracking.interface.mjs +0 -2
- package/esm2022/lib/shared/routers/routers.mjs +0 -40
- package/esm2022/posiwise-admin-module.mjs +0 -5
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { Component, Injector } from '@angular/core';
|
|
2
|
-
import { AdminService } from '@posiwise/admin-module-utils';
|
|
3
|
-
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
4
|
-
import { PermissionService } from '@posiwise/common-services';
|
|
5
|
-
import { HelperService } from '@posiwise/helper-service';
|
|
6
|
-
import { handleDateRangeSelection } from '@posiwise/utils';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@posiwise/admin-module-utils";
|
|
9
|
-
import * as i2 from "angular-plotly.js";
|
|
10
|
-
import * as i3 from "@angular/common";
|
|
11
|
-
import * as i4 from "@posiwise/shared-components";
|
|
12
|
-
import * as i5 from "primeng/progressspinner";
|
|
13
|
-
export class UserInsightComponent extends AppBaseComponent {
|
|
14
|
-
constructor(adminService, injector) {
|
|
15
|
-
super(injector);
|
|
16
|
-
this.adminService = adminService;
|
|
17
|
-
}
|
|
18
|
-
ngOnInit() {
|
|
19
|
-
this.subscriptionId = PermissionService.selectedSubscription.id;
|
|
20
|
-
this.dateRanges = HelperService.initializeDateRanges();
|
|
21
|
-
this.selectedDateRange = '';
|
|
22
|
-
this.getChartData();
|
|
23
|
-
}
|
|
24
|
-
getChartData() {
|
|
25
|
-
this.isLoading = true;
|
|
26
|
-
this.adminService
|
|
27
|
-
.getUsersInsight(this.subscriptionId, this.selectedDateRange?.startDate
|
|
28
|
-
? this.selectedDateRange.startDate.format('YYYY-MM-DD')
|
|
29
|
-
: '', this.selectedDateRange?.endDate
|
|
30
|
-
? this.selectedDateRange.endDate.format('YYYY-MM-DD')
|
|
31
|
-
: '')
|
|
32
|
-
.subscribe(response => {
|
|
33
|
-
this.graph = response;
|
|
34
|
-
})
|
|
35
|
-
.add(() => {
|
|
36
|
-
this.isLoading = false;
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
onDateRangeSelect(event) {
|
|
40
|
-
this.selectedDateRange = handleDateRangeSelection(event, this.selectedDateRange);
|
|
41
|
-
this.getChartData();
|
|
42
|
-
}
|
|
43
|
-
ngOnDestroy() {
|
|
44
|
-
super.ngOnDestroy();
|
|
45
|
-
}
|
|
46
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserInsightComponent, deps: [{ token: i1.AdminService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
47
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: UserInsightComponent, selector: "pw-admin-user-insight", usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-sm-12\">\n <h2 class=\"card-title\">User Statistics</h2>\n <app-date-picker\n [selectedDateRange]=\"selectedDateRange\"\n [dateRanges]=\"dateRanges\"\n (dateRangeChange)=\"onDateRangeSelect($event)\">\n</app-date-picker>\n<div class=\"w-100 text-center mt-3\" *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<ng-template [ngIf]=\"graph\">\n <plotly-plot [data]=\"graph?.data\"\n [config]=\"graph?.config\"\n [layout]=\"graph?.layout\" [useResizeHandler]=\"graph? true : false\"></plotly-plot>\n</ng-template>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.PlotlyComponent, selector: "plotly-plot", inputs: ["data", "layout", "config", "frames", "style", "theme", "divId", "revision", "className", "debug", "useResizeHandler", "updateOnLayoutChange", "updateOnDataChange", "updateOnlyWithRevision"], outputs: ["initialized", "update", "purge", "error", "afterExport", "afterPlot", "animated", "animatingFrame", "animationInterrupted", "autoSize", "beforeExport", "beforeHover", "buttonClicked", "click", "plotlyClick", "clickAnnotation", "deselect", "doubleClick", "framework", "hover", "legendClick", "legendDoubleClick", "react", "relayout", "relayouting", "restyle", "redraw", "selected", "selecting", "sliderChange", "sliderEnd", "sliderStart", "sunburstclick", "transitioning", "transitionInterrupted", "unhover", "treemapclick", "webglcontextlost"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DateRangePickerComponent, selector: "app-date-picker", inputs: ["selectedDateRange", "dateRanges"], outputs: ["dateRangeChange"] }, { kind: "component", type: i5.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }] }); }
|
|
48
|
-
}
|
|
49
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserInsightComponent, decorators: [{
|
|
50
|
-
type: Component,
|
|
51
|
-
args: [{ selector: 'pw-admin-user-insight', template: "<div class=\"row\">\n <div class=\"col-sm-12\">\n <h2 class=\"card-title\">User Statistics</h2>\n <app-date-picker\n [selectedDateRange]=\"selectedDateRange\"\n [dateRanges]=\"dateRanges\"\n (dateRangeChange)=\"onDateRangeSelect($event)\">\n</app-date-picker>\n<div class=\"w-100 text-center mt-3\" *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<ng-template [ngIf]=\"graph\">\n <plotly-plot [data]=\"graph?.data\"\n [config]=\"graph?.config\"\n [layout]=\"graph?.layout\" [useResizeHandler]=\"graph? true : false\"></plotly-plot>\n</ng-template>\n </div>\n</div>\n" }]
|
|
52
|
-
}], ctorParameters: () => [{ type: i1.AdminService }, { type: i0.Injector }] });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMtaW5zaWdodC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvdXNlcnMvdXNlcnMtaW5zaWdodC91c2Vycy1pbnNpZ2h0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy91c2Vycy91c2Vycy1pbnNpZ2h0L3VzZXJzLWluc2lnaHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7QUFNM0QsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGdCQUFnQjtJQVd0RCxZQUNxQixZQUEwQixFQUMzQyxRQUFrQjtRQUVsQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFIQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUkvQyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLFlBQVk7UUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVk7YUFDWixlQUFlLENBQ1osSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVM7WUFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUN2RCxDQUFDLENBQUMsRUFBRSxFQUNSLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPO1lBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFDckQsQ0FBQyxDQUFDLEVBQUUsQ0FDWDthQUNBLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUMxQixDQUFDLENBQUM7YUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBMkQ7UUFDekUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVRLFdBQVc7UUFDaEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBcERRLG9CQUFvQjttR0FBcEIsb0JBQW9CLG9GQ2JqQyxzbkJBa0JBOzs0RkRMYSxvQkFBb0I7a0JBSmhDLFNBQVM7K0JBQ0ksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgUGxvdGx5IH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5pbXBvcnQgeyBoYW5kbGVEYXRlUmFuZ2VTZWxlY3Rpb24gfSBmcm9tICdAcG9zaXdpc2UvdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LWFkbWluLXVzZXItaW5zaWdodCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXJzLWluc2lnaHQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJJbnNpZ2h0Q29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBncmFwaDogUGxvdGx5LkZpZ3VyZTtcblxuICAgIGlzTG9hZGluZzogYm9vbGVhbjtcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICBzZWxlY3RlZERhdGVSYW5nZTtcblxuICAgIGRhdGVSYW5nZXM7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhZG1pblNlcnZpY2U6IEFkbWluU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IFBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkU3Vic2NyaXB0aW9uLmlkO1xuICAgICAgICB0aGlzLmRhdGVSYW5nZXMgPSBIZWxwZXJTZXJ2aWNlLmluaXRpYWxpemVEYXRlUmFuZ2VzKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UgPSAnJztcbiAgICAgICAgdGhpcy5nZXRDaGFydERhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENoYXJ0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLmdldFVzZXJzSW5zaWdodChcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2U/LnN0YXJ0RGF0ZVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZT8uZW5kRGF0ZVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoID0gcmVzcG9uc2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRGF0ZVJhbmdlU2VsZWN0KGV2ZW50OiB7IHN0YXJ0RGF0ZTogbW9tZW50Lk1vbWVudDsgZW5kRGF0ZTogbW9tZW50Lk1vbWVudCB9KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UgPSBoYW5kbGVEYXRlUmFuZ2VTZWxlY3Rpb24oZXZlbnQsIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UpO1xuICAgICAgICB0aGlzLmdldENoYXJ0RGF0YSgpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMlwiPlxuICAgIDxoMiBjbGFzcz1cImNhcmQtdGl0bGVcIj5Vc2VyIFN0YXRpc3RpY3M8L2gyPlxuICAgIDxhcHAtZGF0ZS1waWNrZXJcbiAgW3NlbGVjdGVkRGF0ZVJhbmdlXT1cInNlbGVjdGVkRGF0ZVJhbmdlXCJcbiAgW2RhdGVSYW5nZXNdPVwiZGF0ZVJhbmdlc1wiXG4gIChkYXRlUmFuZ2VDaGFuZ2UpPVwib25EYXRlUmFuZ2VTZWxlY3QoJGV2ZW50KVwiPlxuPC9hcHAtZGF0ZS1waWNrZXI+XG48ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImdyYXBoXCI+XG4gIDxwbG90bHktcGxvdCBbZGF0YV09XCJncmFwaD8uZGF0YVwiXG4gICAgW2NvbmZpZ109XCJncmFwaD8uY29uZmlnXCJcbiAgICBbbGF5b3V0XT1cImdyYXBoPy5sYXlvdXRcIiBbdXNlUmVzaXplSGFuZGxlcl09XCJncmFwaD8gdHJ1ZSA6IGZhbHNlXCI+PC9wbG90bHktcGxvdD5cbjwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, Component, Injector, ViewChild } from '@angular/core';
|
|
2
|
-
import { NavigationEnd } from '@angular/router';
|
|
3
|
-
import { AdminService } from '@posiwise/admin-module-utils';
|
|
4
|
-
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
5
|
-
import { AuthService, CustomToastService, PermissionService, ProductService, WindowService } from '@posiwise/common-services';
|
|
6
|
-
import { PAGE_SIZE } from '@posiwise/common-utilities';
|
|
7
|
-
import { HelperService } from '@posiwise/helper-service';
|
|
8
|
-
import { PasswordValidationComponent } from '@posiwise/shared-components';
|
|
9
|
-
import { Subject, takeUntil } from 'rxjs';
|
|
10
|
-
import { ROUTERS } from '../../../shared/routers/routers';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@posiwise/admin-module-utils";
|
|
13
|
-
import * as i2 from "@posiwise/common-services";
|
|
14
|
-
import * as i3 from "primeng/table";
|
|
15
|
-
import * as i4 from "primeng/api";
|
|
16
|
-
import * as i5 from "primeng/tooltip";
|
|
17
|
-
import * as i6 from "primeng/multiselect";
|
|
18
|
-
import * as i7 from "primeng/inputtext";
|
|
19
|
-
import * as i8 from "@ng-bootstrap/ng-bootstrap";
|
|
20
|
-
import * as i9 from "@angular/common";
|
|
21
|
-
import * as i10 from "@angular/forms";
|
|
22
|
-
import * as i11 from "@posiwise/shared-components";
|
|
23
|
-
import * as i12 from "@angular/router";
|
|
24
|
-
import * as i13 from "primeng/progressspinner";
|
|
25
|
-
import * as i14 from "@posiwise/directives";
|
|
26
|
-
import * as i15 from "@jsverse/transloco";
|
|
27
|
-
import * as i16 from "@posiwise/pipes";
|
|
28
|
-
export class UserListComponent extends AppBaseComponent {
|
|
29
|
-
constructor(adminService, toaster, productService, injector, authService, cdr, windowService) {
|
|
30
|
-
super(injector);
|
|
31
|
-
this.adminService = adminService;
|
|
32
|
-
this.toaster = toaster;
|
|
33
|
-
this.productService = productService;
|
|
34
|
-
this.authService = authService;
|
|
35
|
-
this.cdr = cdr;
|
|
36
|
-
this.windowService = windowService;
|
|
37
|
-
this.page = 1;
|
|
38
|
-
this.filterByProducts = [];
|
|
39
|
-
this.filterByRoles = [];
|
|
40
|
-
this.users = [];
|
|
41
|
-
this.allUsers = [];
|
|
42
|
-
this.loading = true;
|
|
43
|
-
this.isLoaded = false;
|
|
44
|
-
this.searchOptions = [
|
|
45
|
-
{
|
|
46
|
-
label: 'Role',
|
|
47
|
-
value: 'role'
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
label: 'Product',
|
|
51
|
-
value: 'product'
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
label: 'Feature Key',
|
|
55
|
-
value: 'feature_key'
|
|
56
|
-
}
|
|
57
|
-
];
|
|
58
|
-
this.searchText = '';
|
|
59
|
-
this.searchDataSource = [];
|
|
60
|
-
this.featureKeysList = [];
|
|
61
|
-
this.filterByFeatureKeys = [];
|
|
62
|
-
this.criteria = [];
|
|
63
|
-
this.routers = ROUTERS;
|
|
64
|
-
this.masterProductId = this.appConfig.master_subscription.product_id;
|
|
65
|
-
this.totalRecordsUnFiltered = 0;
|
|
66
|
-
this.getTableState();
|
|
67
|
-
}
|
|
68
|
-
ngOnInit() {
|
|
69
|
-
this.subscriptionId = PermissionService.selectedSubscription?.id;
|
|
70
|
-
this.chatPermission = `${PermissionService.selectedProduct?.permission}.${PermissionService.selectedProduct?.feature_key}`;
|
|
71
|
-
this.getRoles();
|
|
72
|
-
this.getProducts();
|
|
73
|
-
this.userStore().subscribe(response => {
|
|
74
|
-
this.currentUser = response;
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
getTableState() {
|
|
78
|
-
this.localStorage.getItem$('user-list-state').subscribe(result => {
|
|
79
|
-
if (result) {
|
|
80
|
-
const res = JSON.parse(result);
|
|
81
|
-
this.initializeSearchText(res);
|
|
82
|
-
this.initializeSelectedOption(res);
|
|
83
|
-
this.initializeSearchDataSource(res);
|
|
84
|
-
this.initializeCriteria(res);
|
|
85
|
-
this.initializeFilters(res);
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
initializeSearchText(res) {
|
|
90
|
-
this.searchText = res?.searchText ?? '';
|
|
91
|
-
}
|
|
92
|
-
initializeSelectedOption(res) {
|
|
93
|
-
if (res?.selectedOption?.value) {
|
|
94
|
-
this.selectedOption = res?.selectedOption;
|
|
95
|
-
this.filterSource = [this.selectedOption?.value];
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
initializeSearchDataSource(res) {
|
|
99
|
-
if (res?.searchDataSource?.length) {
|
|
100
|
-
this.searchDataSource = res?.searchDataSource ?? [];
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
initializeCriteria(res) {
|
|
104
|
-
if (res?.selectedOption?.value === 'feature_key') {
|
|
105
|
-
this.criteria = res?.filterByFeatureKeys ?? [];
|
|
106
|
-
}
|
|
107
|
-
if (res?.selectedOption?.value === 'product') {
|
|
108
|
-
this.criteria = res?.filterByProducts ?? [];
|
|
109
|
-
}
|
|
110
|
-
if (res?.selectedOption?.value === 'role') {
|
|
111
|
-
this.criteria = res?.filterByRoles ?? [];
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
initializeFilters(res) {
|
|
115
|
-
this.filterByFeatureKeys = res?.filterByFeatureKeys ?? [];
|
|
116
|
-
this.filterByProducts = res?.filterByProducts ?? [];
|
|
117
|
-
this.filterByRoles = res?.filterByRoles ?? [];
|
|
118
|
-
}
|
|
119
|
-
ngAfterViewChecked() {
|
|
120
|
-
this.cdr.detectChanges();
|
|
121
|
-
}
|
|
122
|
-
onLazyLoad(event) {
|
|
123
|
-
const pageDetails = HelperService.onTableLazyLoad(event);
|
|
124
|
-
this.page = pageDetails.page;
|
|
125
|
-
this.getUsers({
|
|
126
|
-
page: this.page,
|
|
127
|
-
page_size: PAGE_SIZE,
|
|
128
|
-
order_by: pageDetails.sortField,
|
|
129
|
-
order_direction: pageDetails.sortOrder,
|
|
130
|
-
search: this.searchText
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
getRoles() {
|
|
134
|
-
this.adminService.getRoles({}, this.subscriptionId).subscribe(response => {
|
|
135
|
-
this.allRoles = response.roles.map(item => {
|
|
136
|
-
return {
|
|
137
|
-
label: item.name,
|
|
138
|
-
value: item.id
|
|
139
|
-
};
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
getProducts() {
|
|
144
|
-
this.productService
|
|
145
|
-
.getProducts({
|
|
146
|
-
master_product_id: this.masterProductId,
|
|
147
|
-
subscription_id: this.subscriptionId
|
|
148
|
-
})
|
|
149
|
-
.subscribe(resp => {
|
|
150
|
-
if (resp.products) {
|
|
151
|
-
this.productList = resp.products.map(element => {
|
|
152
|
-
return {
|
|
153
|
-
value: element.id,
|
|
154
|
-
label: element.name ?? ''
|
|
155
|
-
};
|
|
156
|
-
});
|
|
157
|
-
this.featureKeysList = resp.products.map(element => {
|
|
158
|
-
return {
|
|
159
|
-
value: element.feature_key,
|
|
160
|
-
label: element.feature_key ?? ''
|
|
161
|
-
};
|
|
162
|
-
});
|
|
163
|
-
this.productList.unshift({
|
|
164
|
-
label: 'None',
|
|
165
|
-
value: null
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
getUsers(paging) {
|
|
171
|
-
this.isLoaded = false;
|
|
172
|
-
const params = {
|
|
173
|
-
product_ids: this.filterByProducts.join() || '',
|
|
174
|
-
role_ids: this.filterByRoles.join() || '',
|
|
175
|
-
feature_keys: this.filterByFeatureKeys.join() || '',
|
|
176
|
-
subscription_id: this.subscriptionId
|
|
177
|
-
};
|
|
178
|
-
this.adminService.getUsers(paging, params).subscribe(response => {
|
|
179
|
-
this.users = response.users;
|
|
180
|
-
this.allUsers = [...this.users];
|
|
181
|
-
this.totalRecords = response.object_count;
|
|
182
|
-
this.totalRecordsUnFiltered = response?.unfiltered_count;
|
|
183
|
-
this.loading = false;
|
|
184
|
-
this.isLoaded = true;
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
onSearchOptionChange($event) {
|
|
188
|
-
this.criteria = [];
|
|
189
|
-
this.selectedOption = this.searchOptions.find(x => x.value === $event.value[0]);
|
|
190
|
-
if (this.selectedOption && this.selectedOption.value === 'role') {
|
|
191
|
-
this.searchDataSource = this.allRoles;
|
|
192
|
-
}
|
|
193
|
-
else if (this.selectedOption && this.selectedOption.value === 'product') {
|
|
194
|
-
this.searchDataSource = this.productList;
|
|
195
|
-
}
|
|
196
|
-
else if (this.selectedOption && this.selectedOption.value === 'feature_key') {
|
|
197
|
-
this.searchDataSource = this.featureKeysList;
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
this.searchDataSource = [];
|
|
201
|
-
this.clearFilters();
|
|
202
|
-
this.getUsers({
|
|
203
|
-
page: this.page,
|
|
204
|
-
page_size: PAGE_SIZE
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
clearFilters() {
|
|
209
|
-
this.filterByProducts = [];
|
|
210
|
-
this.filterByFeatureKeys = [];
|
|
211
|
-
this.filterByRoles = [];
|
|
212
|
-
}
|
|
213
|
-
onSearchCriteria(evt) {
|
|
214
|
-
this.clearFilters();
|
|
215
|
-
if (this.selectedOption.value === 'role') {
|
|
216
|
-
this.onRoleChange(evt);
|
|
217
|
-
}
|
|
218
|
-
else if (this.selectedOption.value === 'product') {
|
|
219
|
-
this.onProductChange(evt);
|
|
220
|
-
}
|
|
221
|
-
else if (this.selectedOption.value === 'feature_key') {
|
|
222
|
-
this.onFeatureKeyChange(evt);
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
this.searchDataSource = [];
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
onRoleChange(event) {
|
|
229
|
-
this.clearFilters();
|
|
230
|
-
this.filterByRoles = event.value;
|
|
231
|
-
this.getUsers({
|
|
232
|
-
page: this.page,
|
|
233
|
-
page_size: PAGE_SIZE
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
onProductChange(event) {
|
|
237
|
-
this.clearFilters();
|
|
238
|
-
this.filterByProducts = event.value;
|
|
239
|
-
this.getUsers({
|
|
240
|
-
page: this.page,
|
|
241
|
-
page_size: PAGE_SIZE
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
onFeatureKeyChange(event) {
|
|
245
|
-
this.clearFilters();
|
|
246
|
-
this.filterByFeatureKeys = event.value;
|
|
247
|
-
this.getUsers({
|
|
248
|
-
page: this.page,
|
|
249
|
-
page_size: PAGE_SIZE
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
onDelete(user) {
|
|
253
|
-
this.userToDelete = user;
|
|
254
|
-
this.passwordValidationModalForUserDelete.open();
|
|
255
|
-
}
|
|
256
|
-
deleteUser(_event) {
|
|
257
|
-
this.adminService
|
|
258
|
-
.deleteUser(this.userToDelete.id, this.subscriptionId)
|
|
259
|
-
.subscribe(() => {
|
|
260
|
-
this.users = this.users.filter(x => x.id !== this.userToDelete.id);
|
|
261
|
-
this.toaster.success(this.translation.translate('Admin.Users.DeletedMessage'));
|
|
262
|
-
this.getUsers({
|
|
263
|
-
page: this.page,
|
|
264
|
-
page_size: PAGE_SIZE,
|
|
265
|
-
search: this.searchText
|
|
266
|
-
});
|
|
267
|
-
})
|
|
268
|
-
.add(() => {
|
|
269
|
-
this.userToDelete = null;
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
onImpersonate(user) {
|
|
273
|
-
this.userToImpersonate = user;
|
|
274
|
-
this.passwordValidationModalForImpersonate.open();
|
|
275
|
-
}
|
|
276
|
-
onUserImpersonation(_event) {
|
|
277
|
-
this.authService.platform$.subscribe(res => {
|
|
278
|
-
const platform = res;
|
|
279
|
-
this.authService
|
|
280
|
-
.impersonateUser({
|
|
281
|
-
email: this.userToImpersonate.email,
|
|
282
|
-
subscription_id: PermissionService.selectedSubscription.id,
|
|
283
|
-
phonegap: platform !== 'browser'
|
|
284
|
-
})
|
|
285
|
-
.subscribe(_ => {
|
|
286
|
-
this.toast.success(`You're now being logged in as another user...`);
|
|
287
|
-
// wait for 2 sec before redirecting user to home page
|
|
288
|
-
setTimeout(() => {
|
|
289
|
-
this.windowService.replaceUrl('/home');
|
|
290
|
-
}, 2000);
|
|
291
|
-
});
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
ngOnDestroy() {
|
|
295
|
-
const val = {
|
|
296
|
-
searchText: this.searchText,
|
|
297
|
-
filterByFeatureKeys: this.filterByFeatureKeys,
|
|
298
|
-
filterByRoles: this.filterByRoles,
|
|
299
|
-
filterByProducts: this.filterByProducts,
|
|
300
|
-
selectedOption: this.selectedOption,
|
|
301
|
-
searchDataSource: this.searchDataSource
|
|
302
|
-
};
|
|
303
|
-
localStorage.setItem('user-list-state', JSON.stringify(val));
|
|
304
|
-
const notifier = new Subject();
|
|
305
|
-
this.router.events.pipe(takeUntil(notifier)).subscribe(event => {
|
|
306
|
-
if (event instanceof NavigationEnd) {
|
|
307
|
-
if (!event.urlAfterRedirects.includes('/user')) {
|
|
308
|
-
this.localStorage.removeItem$('user-list-state');
|
|
309
|
-
notifier.next('');
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
});
|
|
313
|
-
super.ngOnDestroy();
|
|
314
|
-
}
|
|
315
|
-
disable2fa(id) {
|
|
316
|
-
this.remove2faUserId = id;
|
|
317
|
-
this.passwordValidationModalForRemove2fa.open();
|
|
318
|
-
}
|
|
319
|
-
remove2fa(_event) {
|
|
320
|
-
this.adminService.remove2fa(this.remove2faUserId, this.subscriptionId).subscribe();
|
|
321
|
-
}
|
|
322
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserListComponent, deps: [{ token: i1.AdminService }, { token: i2.CustomToastService }, { token: i2.ProductService }, { token: i0.Injector }, { token: i2.AuthService }, { token: i0.ChangeDetectorRef }, { token: i2.WindowService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
323
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: UserListComponent, selector: "pw-admin-user-list", viewQueries: [{ propertyName: "passwordValidationModalForUserDelete", first: true, predicate: ["passwordValidationModalForUserDelete"], descendants: true }, { propertyName: "passwordValidationModalForImpersonate", first: true, predicate: ["passwordValidationModalForImpersonate"], descendants: true }, { propertyName: "passwordValidationModalForRemove2fa", first: true, predicate: ["passwordValidationModalForRemove2fa"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 d-flex justify-content-between align-items-center\">\n <h2 class=\"card-title p-0 float-start\">Users</h2>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n id=\"btn-create\"\n *rbacAllow=\"'SuperAdmin'\"\n [routerLink]=\"[routers.usersDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add User\n </a>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container mt-0\" [class.hideTable]=\"totalRecordsUnFiltered === 0\">\n <div class=\"user-management-table table-responsive\">\n <p-table #dt\n [value]=\"users\"\n [paginator]=\"totalRecords !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter\">\n <div class=\"col-sm-4\">\n <p-multiSelect [options]=\"searchOptions\"\n (onChange)=\"onSearchOptionChange($event)\"\n placeholder=\"Filter users by role, product, or feature\"\n [selectionLimit]=\"1\"\n [(ngModel)]=\"filterSource\"\n [showToggleAll]=\"true\"\n [showHeader]=\"true\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-4\"\n *ngIf=\"selectedOption\">\n <p-multiSelect [options]=\"searchDataSource\"\n (onChange)=\"onSearchCriteria($event)\"\n [showToggleAll]=\"true\"\n [(ngModel)]=\"criteria\"\n [showHeader]=\"true\"\n placeholder=\"Select {{ selectedOption.value }}s\"\n maxSelectedLabels=\"2\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search User...\"\n data-cy=\"user-search\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"wd-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"id\">\n {{ 'Admin.Users.Id' | transloco }}\n <p-sortIcon field=\"id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Label.FirstName' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"last_name\">\n {{ 'Label.LastName' | transloco }}\n <p-sortIcon field=\"last_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"email\">\n {{ 'Label.Email' | transloco }}\n <p-sortIcon field=\"email\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"slug\">\n {{ 'Admin.Users.Slug' | transloco }}\n <p-sortIcon field=\"slug\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"encrypted_password\">\n {{ 'Admin.Users.EmailConfirm' | transloco }}\n <p-sortIcon field=\"encrypted_password\"></p-sortIcon>\n </th>\n\n <th scope=\"true\"\n pSortableColumn=\"sessions_last_month\">\n {{ 'Admin.Subscriptions.SessionsTotalLastMonth' | transloco }}\n <p-sortIcon field=\"sessions_last_month\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"last_sign_in_at\">\n {{ 'Admin.Users.LastLogin' | transloco }}\n <p-sortIcon field=\"last_sign_in_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"signed_up_at\">\n {{ 'Admin.Users.RegisteredOn' | transloco }}\n <p-sortIcon field=\"signed_up_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n class=\"actions-list-four\">\n {{ 'Label.Actions' | transloco }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-user>\n <tr>\n <td data-head=\"id\"> {{ user.id }}</td>\n <td data-head=\"First Name\"><a [routerLink]=\"['/members', user.slug]\">{{ user.first_name }}</a></td>\n <td data-head=\"Last Name\">{{ user.last_name }}\n <span *ngIf=\"user?.alpha\"\n [pTooltip]=\"'Admin.Users.Tooltip.AlphaIcon'|transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa-regular fa-square-a alpha-beta text-warning\"></i>\n </span>\n <span class=\"ms-2\"\n *ngIf=\"user?.beta\"\n [pTooltip]=\"'Admin.Users.Tooltip.BetaIcon'|transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa-regular fa-square-b alpha-beta text-primary\" ></i>\n </span>\n <span *ngIf=\"user?.cognito_sso_activated\"\n class=\"ms-2\"\n [pTooltip]=\"'Admin.Users.Tooltip.Cognito' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa fa-cloud success\" ></i>\n </span>\n </td>\n <td data-head=\"Email\">{{ user.email }}</td>\n <td data-head=\"Slug\">{{ user.slug }}</td>\n <td data-head=\"Email Confirm\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: user?.has_password\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ user?.has_password ? 'Yes' : 'No' }}</span>\n <span class=\"ms-2\" *ngIf=\"user?.blocked\" [pTooltip]=\"'This user has been blocked'\" tooltipPosition=\"top\">\n <i class=\"fa-solid fa-hexagon-exclamation text-danger hexa-warning\"></i>\n </span>\n </td>\n <td data-head=\"S/m #\">\n <span [ngClass]=\"{\n 'text-danger fw-bold': user?.sessions_last_month < 3\n }\">{{ user?.sessions_last_month }}</span>\n </td>\n <td data-head=\"Last Login\">\n <span *ngIf=\"user?.current_sign_in_at;else lastSignin\">\n {{ user.current_sign_in_at | dateFormat }}\n </span>\n <ng-template #lastSignin>\n {{ user.last_sign_in_at | dateFormat }}\n </ng-template>\n </td>\n <td data-head=\"Registered On\">{{ user.signed_up_at | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Impersonate this user\"\n *rbacAllow=\"'Pages.Alpha'\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fas fa-people-arrows fa-lg\"\n (click)=\"onImpersonate(user)\"\n (keydown.enter)=\"onImpersonate(user)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <ng-template [ngIf]=\"user?.enable_two_factor_authenticator\">\n <li ngbTooltip=\"Disable 2FA\"\n (click)=\"disable2fa(user?.id)\"\n (keydown.enter)=\"disable2fa(user?.id)\"\n *rbacAllow=\"'Pages.Alpha'\"\n class=\"me-2 me-sm-3\">\n <i class=\"fa fa-lock fa-lg success\" aria-hidden=\"true\"></i>\n </li>\n </ng-template>\n <ng-template [ngIf]=\"currentUser && user.id !== currentUser.id\">\n <li ngbTooltip=\"Message\"\n *rbacAllow=\"chatPermission\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"['/message']\"\n [fragment]=\"user.slug\">\n <i class=\"fa fa-comments cta1-icon\" aria-hidden=\"true\"></i>\n </li>\n </ng-template>\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'Pages.Admin.Users.Edit'\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[routers.usersDetails + user.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n *rbacAllow=\"'Pages.Admin.Users.Delete'\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (keydown.enter)=\"onDelete(user)\"\n (keydown.space)=\"onDelete(user)\"\n (click)=\"onDelete(user)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalRecords === 0 && totalRecordsUnFiltered !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\">\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n </div>\n</div>\n<div *ngIf=\"!loading && totalRecordsUnFiltered === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Users.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n<!-- password validation modal for delete user -->\n<pw-password-validation #passwordValidationModalForUserDelete\n (successEvent)=\"deleteUser($event)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}</p>\n <p>{{ 'User.Account.Message.ConfirmPassword' | transloco }}</p>\n </div>\n </div>\n</pw-password-validation>\n<!-- password validation modal for impersonate -->\n<pw-password-validation #passwordValidationModalForImpersonate\n (successEvent)=\"onUserImpersonation($event)\">\n</pw-password-validation>\n<!-- password validation modal for remove2fa -->\n<pw-password-validation #passwordValidationModalForRemove2fa\n (successEvent)=\"remove2fa($event)\">\n</pw-password-validation>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.search-input input{width:100%}.w-150{width:150px}@media (min-width: 767px){.table-responsive td,.table-responsive th{font-size:11px!important}}.hexa-warning{font-size:18px;vertical-align:middle}.alpha-beta{font-size:14px}\n"], dependencies: [{ kind: "component", type: i3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i3.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i6.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i8.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i11.PasswordValidationComponent, selector: "pw-password-validation", inputs: ["confirmMessage"], outputs: ["successEvent"] }, { kind: "directive", type: i12.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i13.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i11.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i14.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color", "colorByName", "dataName"] }, { kind: "directive", type: i14.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "pipe", type: i15.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i16.DateFormatPipe, name: "dateFormat" }] }); }
|
|
324
|
-
}
|
|
325
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserListComponent, decorators: [{
|
|
326
|
-
type: Component,
|
|
327
|
-
args: [{ selector: 'pw-admin-user-list', template: "<div class=\"row\">\n <div class=\"col-12 d-flex justify-content-between align-items-center\">\n <h2 class=\"card-title p-0 float-start\">Users</h2>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n id=\"btn-create\"\n *rbacAllow=\"'SuperAdmin'\"\n [routerLink]=\"[routers.usersDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add User\n </a>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container mt-0\" [class.hideTable]=\"totalRecordsUnFiltered === 0\">\n <div class=\"user-management-table table-responsive\">\n <p-table #dt\n [value]=\"users\"\n [paginator]=\"totalRecords !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter\">\n <div class=\"col-sm-4\">\n <p-multiSelect [options]=\"searchOptions\"\n (onChange)=\"onSearchOptionChange($event)\"\n placeholder=\"Filter users by role, product, or feature\"\n [selectionLimit]=\"1\"\n [(ngModel)]=\"filterSource\"\n [showToggleAll]=\"true\"\n [showHeader]=\"true\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-4\"\n *ngIf=\"selectedOption\">\n <p-multiSelect [options]=\"searchDataSource\"\n (onChange)=\"onSearchCriteria($event)\"\n [showToggleAll]=\"true\"\n [(ngModel)]=\"criteria\"\n [showHeader]=\"true\"\n placeholder=\"Select {{ selectedOption.value }}s\"\n maxSelectedLabels=\"2\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search User...\"\n data-cy=\"user-search\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"wd-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"id\">\n {{ 'Admin.Users.Id' | transloco }}\n <p-sortIcon field=\"id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Label.FirstName' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"last_name\">\n {{ 'Label.LastName' | transloco }}\n <p-sortIcon field=\"last_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"email\">\n {{ 'Label.Email' | transloco }}\n <p-sortIcon field=\"email\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"slug\">\n {{ 'Admin.Users.Slug' | transloco }}\n <p-sortIcon field=\"slug\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"encrypted_password\">\n {{ 'Admin.Users.EmailConfirm' | transloco }}\n <p-sortIcon field=\"encrypted_password\"></p-sortIcon>\n </th>\n\n <th scope=\"true\"\n pSortableColumn=\"sessions_last_month\">\n {{ 'Admin.Subscriptions.SessionsTotalLastMonth' | transloco }}\n <p-sortIcon field=\"sessions_last_month\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"last_sign_in_at\">\n {{ 'Admin.Users.LastLogin' | transloco }}\n <p-sortIcon field=\"last_sign_in_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"signed_up_at\">\n {{ 'Admin.Users.RegisteredOn' | transloco }}\n <p-sortIcon field=\"signed_up_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n class=\"actions-list-four\">\n {{ 'Label.Actions' | transloco }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-user>\n <tr>\n <td data-head=\"id\"> {{ user.id }}</td>\n <td data-head=\"First Name\"><a [routerLink]=\"['/members', user.slug]\">{{ user.first_name }}</a></td>\n <td data-head=\"Last Name\">{{ user.last_name }}\n <span *ngIf=\"user?.alpha\"\n [pTooltip]=\"'Admin.Users.Tooltip.AlphaIcon'|transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa-regular fa-square-a alpha-beta text-warning\"></i>\n </span>\n <span class=\"ms-2\"\n *ngIf=\"user?.beta\"\n [pTooltip]=\"'Admin.Users.Tooltip.BetaIcon'|transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa-regular fa-square-b alpha-beta text-primary\" ></i>\n </span>\n <span *ngIf=\"user?.cognito_sso_activated\"\n class=\"ms-2\"\n [pTooltip]=\"'Admin.Users.Tooltip.Cognito' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa fa-cloud success\" ></i>\n </span>\n </td>\n <td data-head=\"Email\">{{ user.email }}</td>\n <td data-head=\"Slug\">{{ user.slug }}</td>\n <td data-head=\"Email Confirm\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: user?.has_password\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ user?.has_password ? 'Yes' : 'No' }}</span>\n <span class=\"ms-2\" *ngIf=\"user?.blocked\" [pTooltip]=\"'This user has been blocked'\" tooltipPosition=\"top\">\n <i class=\"fa-solid fa-hexagon-exclamation text-danger hexa-warning\"></i>\n </span>\n </td>\n <td data-head=\"S/m #\">\n <span [ngClass]=\"{\n 'text-danger fw-bold': user?.sessions_last_month < 3\n }\">{{ user?.sessions_last_month }}</span>\n </td>\n <td data-head=\"Last Login\">\n <span *ngIf=\"user?.current_sign_in_at;else lastSignin\">\n {{ user.current_sign_in_at | dateFormat }}\n </span>\n <ng-template #lastSignin>\n {{ user.last_sign_in_at | dateFormat }}\n </ng-template>\n </td>\n <td data-head=\"Registered On\">{{ user.signed_up_at | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Impersonate this user\"\n *rbacAllow=\"'Pages.Alpha'\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fas fa-people-arrows fa-lg\"\n (click)=\"onImpersonate(user)\"\n (keydown.enter)=\"onImpersonate(user)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <ng-template [ngIf]=\"user?.enable_two_factor_authenticator\">\n <li ngbTooltip=\"Disable 2FA\"\n (click)=\"disable2fa(user?.id)\"\n (keydown.enter)=\"disable2fa(user?.id)\"\n *rbacAllow=\"'Pages.Alpha'\"\n class=\"me-2 me-sm-3\">\n <i class=\"fa fa-lock fa-lg success\" aria-hidden=\"true\"></i>\n </li>\n </ng-template>\n <ng-template [ngIf]=\"currentUser && user.id !== currentUser.id\">\n <li ngbTooltip=\"Message\"\n *rbacAllow=\"chatPermission\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"['/message']\"\n [fragment]=\"user.slug\">\n <i class=\"fa fa-comments cta1-icon\" aria-hidden=\"true\"></i>\n </li>\n </ng-template>\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'Pages.Admin.Users.Edit'\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[routers.usersDetails + user.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n *rbacAllow=\"'Pages.Admin.Users.Delete'\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (keydown.enter)=\"onDelete(user)\"\n (keydown.space)=\"onDelete(user)\"\n (click)=\"onDelete(user)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalRecords === 0 && totalRecordsUnFiltered !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\">\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n </div>\n</div>\n<div *ngIf=\"!loading && totalRecordsUnFiltered === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Users.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n<!-- password validation modal for delete user -->\n<pw-password-validation #passwordValidationModalForUserDelete\n (successEvent)=\"deleteUser($event)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}</p>\n <p>{{ 'User.Account.Message.ConfirmPassword' | transloco }}</p>\n </div>\n </div>\n</pw-password-validation>\n<!-- password validation modal for impersonate -->\n<pw-password-validation #passwordValidationModalForImpersonate\n (successEvent)=\"onUserImpersonation($event)\">\n</pw-password-validation>\n<!-- password validation modal for remove2fa -->\n<pw-password-validation #passwordValidationModalForRemove2fa\n (successEvent)=\"remove2fa($event)\">\n</pw-password-validation>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.search-input input{width:100%}.w-150{width:150px}@media (min-width: 767px){.table-responsive td,.table-responsive th{font-size:11px!important}}.hexa-warning{font-size:18px;vertical-align:middle}.alpha-beta{font-size:14px}\n"] }]
|
|
328
|
-
}], ctorParameters: () => [{ type: i1.AdminService }, { type: i2.CustomToastService }, { type: i2.ProductService }, { type: i0.Injector }, { type: i2.AuthService }, { type: i0.ChangeDetectorRef }, { type: i2.WindowService }], propDecorators: { passwordValidationModalForUserDelete: [{
|
|
329
|
-
type: ViewChild,
|
|
330
|
-
args: ['passwordValidationModalForUserDelete', { static: false }]
|
|
331
|
-
}], passwordValidationModalForImpersonate: [{
|
|
332
|
-
type: ViewChild,
|
|
333
|
-
args: ['passwordValidationModalForImpersonate', { static: false }]
|
|
334
|
-
}], passwordValidationModalForRemove2fa: [{
|
|
335
|
-
type: ViewChild,
|
|
336
|
-
args: ['passwordValidationModalForRemove2fa', { static: false }]
|
|
337
|
-
}] } });
|
|
338
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvdXNlcnMvdXNlcnMtbGlzdC91c2Vycy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy91c2Vycy91c2Vycy1saXN0L3VzZXJzLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUdSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFDSCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsYUFBYSxFQUNoQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRzFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTzFELE1BQU0sT0FBTyxpQkFDVCxTQUFRLGdCQUFnQjtJQTZEeEIsWUFDcUIsWUFBMEIsRUFD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U0FBUyxDQUFDLE1BQU07UUFDWixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2RixDQUFDOytHQTFVUSxpQkFBaUI7bUdBQWpCLGlCQUFpQiw2Z0JDbEM5QiwwdFZBMlBBOzs0RkR6TmEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNJLG9CQUFvQjs0UEFTOUIsb0NBQW9DO3NCQURuQyxTQUFTO3VCQUFDLHNDQUFzQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHcEUscUNBQXFDO3NCQURwQyxTQUFTO3VCQUFDLHVDQUF1QyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHckUsbUNBQW1DO3NCQURsQyxTQUFTO3VCQUFDLHFDQUFxQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0b3IsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEF1dGhTZXJ2aWNlLFxuICAgIEN1c3RvbVRvYXN0U2VydmljZSxcbiAgICBQZXJtaXNzaW9uU2VydmljZSxcbiAgICBQcm9kdWN0U2VydmljZSxcbiAgICBXaW5kb3dTZXJ2aWNlXG59IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgUEFHRV9TSVpFLCBQYWdpbmcsIFVzZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcbmltcG9ydCB7IFBhc3N3b3JkVmFsaWRhdGlvbkNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9zaGFyZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7IExhenlMb2FkRXZlbnQsIFNlbGVjdEl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUk9VVEVSUyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9yb3V0ZXJzL3JvdXRlcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LWFkbWluLXVzZXItbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXJzLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VzZXJzLWxpc3QuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBVc2VyTGlzdENvbXBvbmVudFxuICAgIGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWRcbntcbiAgICBAVmlld0NoaWxkKCdwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclVzZXJEZWxldGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclVzZXJEZWxldGU6IFBhc3N3b3JkVmFsaWRhdGlvbkNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvckltcGVyc29uYXRlJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JJbXBlcnNvbmF0ZTogUGFzc3dvcmRWYWxpZGF0aW9uQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ3Bhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yUmVtb3ZlMmZhJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JSZW1vdmUyZmE6IFBhc3N3b3JkVmFsaWRhdGlvbkNvbXBvbmVudDtcblxuICAgIHByaXZhdGUgcGFnZSA9IDE7XG4gICAgcHJpdmF0ZSBmaWx0ZXJCeVByb2R1Y3RzID0gW107XG4gICAgcHJpdmF0ZSBmaWx0ZXJCeVJvbGVzID0gW107XG4gICAgcHJpdmF0ZSB1c2VyVG9EZWxldGU6IFVzZXI7XG5cbiAgICB0b3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHVzZXJzOiBVc2VyW10gPSBbXTtcbiAgICBhbGxSb2xlczogU2VsZWN0SXRlbVtdO1xuICAgIGFsbFVzZXJzOiBVc2VyW10gPSBbXTtcbiAgICBwcm9kdWN0TGlzdDogU2VsZWN0SXRlbVtdO1xuXG4gICAgbG9hZGluZyA9IHRydWU7XG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIHNlYXJjaE9wdGlvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnUm9sZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3JvbGUnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnUHJvZHVjdCcsXG4gICAgICAgICAgICB2YWx1ZTogJ3Byb2R1Y3QnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnRmVhdHVyZSBLZXknLFxuICAgICAgICAgICAgdmFsdWU6ICdmZWF0dXJlX2tleSdcbiAgICAgICAgfVxuICAgIF07XG4gICAgc2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgc2VhcmNoRGF0YVNvdXJjZSA9IFtdO1xuICAgIGZlYXR1cmVLZXlzTGlzdCA9IFtdO1xuICAgIGZpbHRlckJ5RmVhdHVyZUtleXMgPSBbXTtcbiAgICBmaWx0ZXJTb3VyY2U6IHN0cmluZ1tdO1xuICAgIGNyaXRlcmlhID0gW107XG5cbiAgICBzZWxlY3RlZE9wdGlvbjogU2VsZWN0SXRlbTtcbiAgICBjdXJyZW50VXNlcjogVXNlcjtcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuICAgIG1hc3RlclByb2R1Y3RJZCA9IHRoaXMuYXBwQ29uZmlnLm1hc3Rlcl9zdWJzY3JpcHRpb24ucHJvZHVjdF9pZDtcblxuICAgIHRvdGFsUmVjb3Jkc1VuRmlsdGVyZWQgPSAwO1xuXG4gICAgY2hhdFBlcm1pc3Npb246IHN0cmluZztcbiAgICB1c2VyVG9JbXBlcnNvbmF0ZTogVXNlcjtcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgcmVtb3ZlMmZhVXNlcklkOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhZG1pblNlcnZpY2U6IEFkbWluU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0b2FzdGVyOiBDdXN0b21Ub2FzdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3RTZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgd2luZG93U2VydmljZTogV2luZG93U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IFBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkU3Vic2NyaXB0aW9uPy5pZDtcbiAgICAgICAgdGhpcy5jaGF0UGVybWlzc2lvbiA9IGAke1Blcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkUHJvZHVjdD8ucGVybWlzc2lvbn0uJHtQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFByb2R1Y3Q/LmZlYXR1cmVfa2V5fWA7XG4gICAgICAgIHRoaXMuZ2V0Um9sZXMoKTtcbiAgICAgICAgdGhpcy5nZXRQcm9kdWN0cygpO1xuICAgICAgICB0aGlzLnVzZXJTdG9yZSgpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFRhYmxlU3RhdGUoKSB7XG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0kKCd1c2VyLWxpc3Qtc3RhdGUnKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplU2VhcmNoVGV4dChyZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVNlbGVjdGVkT3B0aW9uKHJlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplU2VhcmNoRGF0YVNvdXJjZShyZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNyaXRlcmlhKHJlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplRmlsdGVycyhyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVTZWFyY2hUZXh0KHJlcykge1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSByZXM/LnNlYXJjaFRleHQgPz8gJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplU2VsZWN0ZWRPcHRpb24ocmVzKSB7XG4gICAgICAgIGlmIChyZXM/LnNlbGVjdGVkT3B0aW9uPy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHJlcz8uc2VsZWN0ZWRPcHRpb247XG4gICAgICAgICAgICB0aGlzLmZpbHRlclNvdXJjZSA9IFt0aGlzLnNlbGVjdGVkT3B0aW9uPy52YWx1ZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVTZWFyY2hEYXRhU291cmNlKHJlcykge1xuICAgICAgICBpZiAocmVzPy5zZWFyY2hEYXRhU291cmNlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YVNvdXJjZSA9IHJlcz8uc2VhcmNoRGF0YVNvdXJjZSA/PyBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUNyaXRlcmlhKHJlcykge1xuICAgICAgICBpZiAocmVzPy5zZWxlY3RlZE9wdGlvbj8udmFsdWUgPT09ICdmZWF0dXJlX2tleScpIHtcbiAgICAgICAgICAgIHRoaXMuY3JpdGVyaWEgPSByZXM/LmZpbHRlckJ5RmVhdHVyZUtleXMgPz8gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcz8uc2VsZWN0ZWRPcHRpb24/LnZhbHVlID09PSAncHJvZHVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMuY3JpdGVyaWEgPSByZXM/LmZpbHRlckJ5UHJvZHVjdHMgPz8gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcz8uc2VsZWN0ZWRPcHRpb24/LnZhbHVlID09PSAncm9sZScpIHtcbiAgICAgICAgICAgIHRoaXMuY3JpdGVyaWEgPSByZXM/LmZpbHRlckJ5Um9sZXMgPz8gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVGaWx0ZXJzKHJlcykge1xuICAgICAgICB0aGlzLmZpbHRlckJ5RmVhdHVyZUtleXMgPSByZXM/LmZpbHRlckJ5RmVhdHVyZUtleXMgPz8gW107XG4gICAgICAgIHRoaXMuZmlsdGVyQnlQcm9kdWN0cyA9IHJlcz8uZmlsdGVyQnlQcm9kdWN0cyA/PyBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJCeVJvbGVzID0gcmVzPy5maWx0ZXJCeVJvbGVzID8/IFtdO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICBvbkxhenlMb2FkKGV2ZW50OiBMYXp5TG9hZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhZ2VEZXRhaWxzID0gSGVscGVyU2VydmljZS5vblRhYmxlTGF6eUxvYWQoZXZlbnQpO1xuICAgICAgICB0aGlzLnBhZ2UgPSBwYWdlRGV0YWlscy5wYWdlO1xuICAgICAgICB0aGlzLmdldFVzZXJzKHtcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFLFxuICAgICAgICAgICAgb3JkZXJfYnk6IHBhZ2VEZXRhaWxzLnNvcnRGaWVsZCxcbiAgICAgICAgICAgIG9yZGVyX2RpcmVjdGlvbjogcGFnZURldGFpbHMuc29ydE9yZGVyLFxuICAgICAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFRleHRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0Um9sZXMoKSB7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmdldFJvbGVzKHt9LCB0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxSb2xlcyA9IHJlc3BvbnNlLnJvbGVzLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS5pZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0UHJvZHVjdHMoKSB7XG4gICAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRQcm9kdWN0cyh7XG4gICAgICAgICAgICAgICAgbWFzdGVyX3Byb2R1Y3RfaWQ6IHRoaXMubWFzdGVyUHJvZHVjdElkLFxuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3AucHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0TGlzdCA9IHJlc3AucHJvZHVjdHMubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWxlbWVudC5uYW1lID8/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5c0xpc3QgPSByZXNwLnByb2R1Y3RzLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQuZmVhdHVyZV9rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsZW1lbnQuZmVhdHVyZV9rZXkgPz8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdExpc3QudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ05vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0VXNlcnMocGFnaW5nOiBQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICBwcm9kdWN0X2lkczogdGhpcy5maWx0ZXJCeVByb2R1Y3RzLmpvaW4oKSB8fCAnJyxcbiAgICAgICAgICAgIHJvbGVfaWRzOiB0aGlzLmZpbHRlckJ5Um9sZXMuam9pbigpIHx8ICcnLFxuICAgICAgICAgICAgZmVhdHVyZV9rZXlzOiB0aGlzLmZpbHRlckJ5RmVhdHVyZUtleXMuam9pbigpIHx8ICcnLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLnN1YnNjcmlwdGlvbklkXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmdldFVzZXJzKHBhZ2luZywgcGFyYW1zKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy51c2VycyA9IHJlc3BvbnNlLnVzZXJzO1xuICAgICAgICAgICAgdGhpcy5hbGxVc2VycyA9IFsuLi50aGlzLnVzZXJzXTtcbiAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzcG9uc2Uub2JqZWN0X2NvdW50O1xuICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHNVbkZpbHRlcmVkID0gcmVzcG9uc2U/LnVuZmlsdGVyZWRfY291bnQ7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25TZWFyY2hPcHRpb25DaGFuZ2UoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY3JpdGVyaWEgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMuc2VhcmNoT3B0aW9ucy5maW5kKHggPT4geC52YWx1ZSA9PT0gJGV2ZW50LnZhbHVlWzBdKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gJ3JvbGUnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGFTb3VyY2UgPSB0aGlzLmFsbFJvbGVzO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gJ3Byb2R1Y3QnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGFTb3VyY2UgPSB0aGlzLnByb2R1Y3RMaXN0O1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gJ2ZlYXR1cmVfa2V5Jykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hEYXRhU291cmNlID0gdGhpcy5mZWF0dXJlS2V5c0xpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJGaWx0ZXJzKCk7XG4gICAgICAgICAgICB0aGlzLmdldFVzZXJzKHtcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsZWFyRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJCeVByb2R1Y3RzID0gW107XG4gICAgICAgIHRoaXMuZmlsdGVyQnlGZWF0dXJlS2V5cyA9IFtdO1xuICAgICAgICB0aGlzLmZpbHRlckJ5Um9sZXMgPSBbXTtcbiAgICB9XG4gICAgb25TZWFyY2hDcml0ZXJpYShldnQpIHtcbiAgICAgICAgdGhpcy5jbGVhckZpbHRlcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24udmFsdWUgPT09ICdyb2xlJykge1xuICAgICAgICAgICAgdGhpcy5vblJvbGVDaGFuZ2UoZXZ0KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uLnZhbHVlID09PSAncHJvZHVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMub25Qcm9kdWN0Q2hhbmdlKGV2dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gJ2ZlYXR1cmVfa2V5Jykge1xuICAgICAgICAgICAgdGhpcy5vbkZlYXR1cmVLZXlDaGFuZ2UoZXZ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uUm9sZUNoYW5nZShldmVudCkge1xuICAgICAgICB0aGlzLmNsZWFyRmlsdGVycygpO1xuICAgICAgICB0aGlzLmZpbHRlckJ5Um9sZXMgPSBldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5nZXRVc2Vycyh7XG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25Qcm9kdWN0Q2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY2xlYXJGaWx0ZXJzKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyQnlQcm9kdWN0cyA9IGV2ZW50LnZhbHVlO1xuICAgICAgICB0aGlzLmdldFVzZXJzKHtcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIG9uRmVhdHVyZUtleUNoYW5nZShldmVudCkge1xuICAgICAgICB0aGlzLmNsZWFyRmlsdGVycygpO1xuICAgICAgICB0aGlzLmZpbHRlckJ5RmVhdHVyZUtleXMgPSBldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5nZXRVc2Vycyh7XG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25EZWxldGUodXNlcjogVXNlcikge1xuICAgICAgICB0aGlzLnVzZXJUb0RlbGV0ZSA9IHVzZXI7XG4gICAgICAgIHRoaXMucGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JVc2VyRGVsZXRlLm9wZW4oKTtcbiAgICB9XG4gICAgZGVsZXRlVXNlcihfZXZlbnQpIHtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC5kZWxldGVVc2VyKHRoaXMudXNlclRvRGVsZXRlLmlkLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VycyA9IHRoaXMudXNlcnMuZmlsdGVyKHggPT4geC5pZCAhPT0gdGhpcy51c2VyVG9EZWxldGUuaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5Vc2Vycy5EZWxldGVkTWVzc2FnZScpKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VXNlcnMoe1xuICAgICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlclRvRGVsZXRlID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICBvbkltcGVyc29uYXRlKHVzZXI6IFVzZXIpIHtcbiAgICAgICAgdGhpcy51c2VyVG9JbXBlcnNvbmF0ZSA9IHVzZXI7XG4gICAgICAgIHRoaXMucGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JJbXBlcnNvbmF0ZS5vcGVuKCk7XG4gICAgfVxuICAgIG9uVXNlckltcGVyc29uYXRpb24oX2V2ZW50KSB7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UucGxhdGZvcm0kLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGxhdGZvcm0gPSByZXM7XG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmltcGVyc29uYXRlVXNlcih7XG4gICAgICAgICAgICAgICAgICAgIGVtYWlsOiB0aGlzLnVzZXJUb0ltcGVyc29uYXRlLmVtYWlsLFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IFBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkU3Vic2NyaXB0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICBwaG9uZWdhcDogcGxhdGZvcm0gIT09ICdicm93c2VyJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKGBZb3UncmUgbm93IGJlaW5nIGxvZ2dlZCBpbiBhcyBhbm90aGVyIHVzZXIuLi5gKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgMiBzZWMgYmVmb3JlIHJlZGlyZWN0aW5nIHVzZXIgdG8gaG9tZSBwYWdlXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aW5kb3dTZXJ2aWNlLnJlcGxhY2VVcmwoJy9ob21lJyk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHtcbiAgICAgICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIGZpbHRlckJ5RmVhdHVyZUtleXM6IHRoaXMuZmlsdGVyQnlGZWF0dXJlS2V5cyxcbiAgICAgICAgICAgIGZpbHRlckJ5Um9sZXM6IHRoaXMuZmlsdGVyQnlSb2xlcyxcbiAgICAgICAgICAgIGZpbHRlckJ5UHJvZHVjdHM6IHRoaXMuZmlsdGVyQnlQcm9kdWN0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uOiB0aGlzLnNlbGVjdGVkT3B0aW9uLFxuICAgICAgICAgICAgc2VhcmNoRGF0YVNvdXJjZTogdGhpcy5zZWFyY2hEYXRhU291cmNlXG4gICAgICAgIH07XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd1c2VyLWxpc3Qtc3RhdGUnLCBKU09OLnN0cmluZ2lmeSh2YWwpKTtcbiAgICAgICAgY29uc3Qgbm90aWZpZXIgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZSh0YWtlVW50aWwobm90aWZpZXIpKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgICAgIGlmICghZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMuaW5jbHVkZXMoJy91c2VyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSQoJ3VzZXItbGlzdC1zdGF0ZScpO1xuICAgICAgICAgICAgICAgICAgICBub3RpZmllci5uZXh0KCcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbiAgICBkaXNhYmxlMmZhKGlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUyZmFVc2VySWQgPSBpZDtcbiAgICAgICAgdGhpcy5wYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclJlbW92ZTJmYS5vcGVuKCk7XG4gICAgfVxuICAgIHJlbW92ZTJmYShfZXZlbnQpIHtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UucmVtb3ZlMmZhKHRoaXMucmVtb3ZlMmZhVXNlcklkLCB0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicm93XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxoMiBjbGFzcz1cImNhcmQtdGl0bGUgcC0wIGZsb2F0LXN0YXJ0XCI+VXNlcnM8L2gyPlxuICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IGZsb2F0LWVuZFwiXG4gICAgICBpZD1cImJ0bi1jcmVhdGVcIlxuICAgICAgKnJiYWNBbGxvdz1cIidTdXBlckFkbWluJ1wiXG4gICAgICBbcm91dGVyTGlua109XCJbcm91dGVycy51c2Vyc0RldGFpbHMgKyAnYWRkJ11cIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IEFkZCBVc2VyXG4gICAgPC9hPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpc0xvYWRlZFwiPlxuICAgIDxwLXByb2dyZXNzU3Bpbm5lcj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInByaW1lbmctZGF0YXRhYmxlLWNvbnRhaW5lciBtdC0wXCIgW2NsYXNzLmhpZGVUYWJsZV09XCJ0b3RhbFJlY29yZHNVbkZpbHRlcmVkID09PSAwXCI+XG4gIDxkaXYgY2xhc3M9XCJ1c2VyLW1hbmFnZW1lbnQtdGFibGUgdGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgIDxwLXRhYmxlICNkdFxuICAgICAgW3ZhbHVlXT1cInVzZXJzXCJcbiAgICAgIFtwYWdpbmF0b3JdPVwidG90YWxSZWNvcmRzICE9PSAwXCJcbiAgICAgIFtsYXp5XT1cInRydWVcIlxuICAgICAgW3Jvd3NdPVwiUEFHRV9TSVpFXCJcbiAgICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgW2ZpbHRlckRlbGF5XT1cIjEwMDBcIlxuICAgICAgKG9uTGF6eUxvYWQpPVwib25MYXp5TG9hZCgkZXZlbnQpXCJcbiAgICAgIFtjdXN0b21Tb3J0XT1cInRydWVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtZmlsdGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbb3B0aW9uc109XCJzZWFyY2hPcHRpb25zXCJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uU2VhcmNoT3B0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciB1c2VycyBieSByb2xlLCBwcm9kdWN0LCBvciBmZWF0dXJlXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGlvbkxpbWl0XT1cIjFcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlclNvdXJjZVwiXG4gICAgICAgICAgICAgIFtzaG93VG9nZ2xlQWxsXT1cInRydWVcIlxuICAgICAgICAgICAgICBbc2hvd0hlYWRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCI+XG4gICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRPcHRpb25cIj5cbiAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cInNlYXJjaERhdGFTb3VyY2VcIlxuICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25TZWFyY2hDcml0ZXJpYSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW3Nob3dUb2dnbGVBbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3JpdGVyaWFcIlxuICAgICAgICAgICAgICBbc2hvd0hlYWRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3Qge3sgc2VsZWN0ZWRPcHRpb24udmFsdWUgfX1zXCJcbiAgICAgICAgICAgICAgbWF4U2VsZWN0ZWRMYWJlbHM9XCIyXCJcbiAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCI+XG4gICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCBtdC0yIG1lLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgIHNpemU9XCI1MFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFVzZXIuLi5cIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwidXNlci1zZWFyY2hcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwiZHQuZmlsdGVyR2xvYmFsKCRldmVudC50YXJnZXQudmFsdWUsICdjb250YWlucycpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3ZC05MFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwiaWRcIj5cbiAgICAgICAgICAgIHt7ICdBZG1pbi5Vc2Vycy5JZCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwiaWRcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImZpcnN0X25hbWVcIj5cbiAgICAgICAgICAgIHt7ICdMYWJlbC5GaXJzdE5hbWUnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImZpcnN0X25hbWVcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImxhc3RfbmFtZVwiPlxuICAgICAgICAgICAge3sgJ0xhYmVsLkxhc3ROYW1lJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJsYXN0X25hbWVcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImVtYWlsXCI+XG4gICAgICAgICAgICB7eyAnTGFiZWwuRW1haWwnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImVtYWlsXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJzbHVnXCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVXNlcnMuU2x1ZycgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwic2x1Z1wiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwiZW5jcnlwdGVkX3Bhc3N3b3JkXCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVXNlcnMuRW1haWxDb25maXJtJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJlbmNyeXB0ZWRfcGFzc3dvcmRcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cblxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwic2Vzc2lvbnNfbGFzdF9tb250aFwiPlxuICAgICAgICAgICAge3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuU2Vzc2lvbnNUb3RhbExhc3RNb250aCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwic2Vzc2lvbnNfbGFzdF9tb250aFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwibGFzdF9zaWduX2luX2F0XCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVXNlcnMuTGFzdExvZ2luJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJsYXN0X3NpZ25faW5fYXRcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cInNpZ25lZF91cF9hdFwiPlxuICAgICAgICAgICAge3sgJ0FkbWluLlVzZXJzLlJlZ2lzdGVyZWRPbicgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwic2lnbmVkX3VwX2F0XCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtbGlzdC1mb3VyXCI+XG4gICAgICAgICAgICB7eyAnTGFiZWwuQWN0aW9ucycgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgICAgbGV0LXVzZXI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiaWRcIj4ge3sgdXNlci5pZCB9fTwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkZpcnN0IE5hbWVcIj48YSBbcm91dGVyTGlua109XCJbJy9tZW1iZXJzJywgdXNlci5zbHVnXVwiPnt7IHVzZXIuZmlyc3RfbmFtZSB9fTwvYT48L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJMYXN0IE5hbWVcIj57eyB1c2VyLmxhc3RfbmFtZSB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ1c2VyPy5hbHBoYVwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uVXNlcnMuVG9vbHRpcC5BbHBoYUljb24nfHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXJlZ3VsYXIgZmEtc3F1YXJlLWEgYWxwaGEtYmV0YSB0ZXh0LXdhcm5pbmdcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInVzZXI/LmJldGFcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLlVzZXJzLlRvb2x0aXAuQmV0YUljb24nfHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXJlZ3VsYXIgZmEtc3F1YXJlLWIgYWxwaGEtYmV0YSB0ZXh0LXByaW1hcnlcIiA+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ1c2VyPy5jb2duaXRvX3Nzb19hY3RpdmF0ZWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJtcy0yXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uVXNlcnMuVG9vbHRpcC5Db2duaXRvJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2xvdWQgc3VjY2Vzc1wiID48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkVtYWlsXCI+e3sgdXNlci5lbWFpbCB9fTwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlNsdWdcIj57eyB1c2VyLnNsdWcgfX08L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJFbWFpbCBDb25maXJtXCI+XG4gICAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNBcnJheTogW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogdXNlcj8uaGFzX3Bhc3N3b3JkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIGNvbG9yPVwic3VjY2Vzcy1kYW5nZXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlXCI+e3sgdXNlcj8uaGFzX3Bhc3N3b3JkID8gJ1llcycgOiAnTm8nIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTJcIiAqbmdJZj1cInVzZXI/LmJsb2NrZWRcIiBbcFRvb2x0aXBdPVwiJ1RoaXMgdXNlciBoYXMgYmVlbiBibG9ja2VkJ1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtaGV4YWdvbi1leGNsYW1hdGlvbiB0ZXh0LWRhbmdlciBoZXhhLXdhcm5pbmdcIj48L2k+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJTL20gI1wiPlxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtZGFuZ2VyIGZ3LWJvbGQnOiB1c2VyPy5zZXNzaW9uc19sYXN0X21vbnRoIDwgM1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+e3sgdXNlcj8uc2Vzc2lvbnNfbGFzdF9tb250aCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJMYXN0IExvZ2luXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInVzZXI/LmN1cnJlbnRfc2lnbl9pbl9hdDtlbHNlIGxhc3RTaWduaW5cIj5cbiAgICAgICAgICAgICAge3sgdXNlci5jdXJyZW50X3NpZ25faW5fYXQgIHwgZGF0ZUZvcm1hdCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsYXN0U2lnbmluPlxuICAgICAgICAgICAgICB7eyB1c2VyLmxhc3Rfc2lnbl9pbl9hdCB8IGRhdGVGb3JtYXQgfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUmVnaXN0ZXJlZCBPblwiPnt7IHVzZXIuc2lnbmVkX3VwX2F0IHwgZGF0ZUZvcm1hdCB9fTwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkFjdGlvblwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBsaXN0LWlubGluZSBsaXN0LWFjdGlvblwiPlxuICAgICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIkltcGVyc29uYXRlIHRoaXMgdXNlclwiXG4gICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidQYWdlcy5BbHBoYSdcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMiBtZS1zbS0zXCI+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1wZW9wbGUtYXJyb3dzIGZhLWxnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JbXBlcnNvbmF0ZSh1c2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25JbXBlcnNvbmF0ZSh1c2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJ1c2VyPy5lbmFibGVfdHdvX2ZhY3Rvcl9hdXRoZW50aWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJEaXNhYmxlIDJGQVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzYWJsZTJmYSh1c2VyPy5pZClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZGlzYWJsZTJmYSh1c2VyPy5pZClcIlxuICAgICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidQYWdlcy5BbHBoYSdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTNcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbG9jayBmYS1sZyBzdWNjZXNzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjdXJyZW50VXNlciAmJiB1c2VyLmlkICE9PSBjdXJyZW50VXNlci5pZFwiPlxuICAgICAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAqcmJhY0FsbG93PVwiY2hhdFBlcm1pc3Npb25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTNcIlxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvbWVzc2FnZSddXCJcbiAgICAgICAgICAgICAgICAgIFtmcmFnbWVudF09XCJ1c2VyLnNsdWdcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY29tbWVudHMgY3RhMS1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRWRpdFwiXG4gICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidQYWdlcy5BZG1pbi5Vc2Vycy5FZGl0J1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTNcIlxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIltyb3V0ZXJzLnVzZXJzRGV0YWlscyArIHVzZXIuaWRdXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0IGVkaXQtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJEZWxldGVcIlxuICAgICAgICAgICAgICAgICpyYmFjQWxsb3c9XCInUGFnZXMuQWRtaW4uVXNlcnMuRGVsZXRlJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTNcIj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS10cmFzaCBkZWxldGUtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkRlbGV0ZSh1c2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvbkRlbGV0ZSh1c2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUodXNlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLXRhYmxlPlxuICAgIDxkaXYgKm5nSWY9XCJ0b3RhbFJlY29yZHMgPT09IDAgJiYgdG90YWxSZWNvcmRzVW5GaWx0ZXJlZCAhPT0gMFwiPlxuICAgICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ1NlYXJjaC5Ob0RhdGFNZXNzYWdlJyB8IHRyYW5zbG9jb1wiIFtkZXNjcmlwdGlvbl09XCInU2VhcmNoLk5vRGF0YURlc2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgPC9wdy1uby1kYXRhPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIGNsYXNzPVwidG90YWwtcmVjb3Jkcy1jb3VudFwiICpuZ0lmPVwidG90YWxSZWNvcmRzICE9PSAwXCI+e3sgJ0xhYmVsLlRvdGFsJyB8IHRyYW5zbG9jbyB9fToge3sgdG90YWxSZWNvcmRzIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmIHRvdGFsUmVjb3Jkc1VuRmlsdGVyZWQgPT09IDBcIj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0FkbWluLlVzZXJzLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+IDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuPCEtLSBwYXNzd29yZCB2YWxpZGF0aW9uIG1vZGFsIGZvciBkZWxldGUgdXNlciAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclVzZXJEZWxldGVcbiAgKHN1Y2Nlc3NFdmVudCk9XCJkZWxldGVVc2VyKCRldmVudClcIj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgIDxwPnt7ICdVc2VyLkFjY291bnQuTWVzc2FnZS5BY3Rpb25DYW5Ob3RVbmRvbmUnIHwgdHJhbnNsb2NvIH19PC9wPlxuICAgICAgPHA+e3sgJ1VzZXIuQWNjb3VudC5NZXNzYWdlLkNvbmZpcm1QYXNzd29yZCcgfCB0cmFuc2xvY28gfX08L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9wdy1wYXNzd29yZC12YWxpZGF0aW9uPlxuPCEtLSBwYXNzd29yZCB2YWxpZGF0aW9uIG1vZGFsIGZvciBpbXBlcnNvbmF0ZSAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvckltcGVyc29uYXRlXG4gIChzdWNjZXNzRXZlbnQpPVwib25Vc2VySW1wZXJzb25hdGlvbigkZXZlbnQpXCI+XG48L3B3LXBhc3N3b3JkLXZhbGlkYXRpb24+XG48IS0tIHBhc3N3b3JkIHZhbGlkYXRpb24gbW9kYWwgZm9yIHJlbW92ZTJmYSAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclJlbW92ZTJmYVxuICAoc3VjY2Vzc0V2ZW50KT1cInJlbW92ZTJmYSgkZXZlbnQpXCI+XG48L3B3LXBhc3N3b3JkLXZhbGlkYXRpb24+XG4iXX0=
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { PermissionService } from '@posiwise/common-services';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@posiwise/common-services";
|
|
5
|
-
import * as i2 from "@posiwise/shared-components";
|
|
6
|
-
export class UserTabComponent {
|
|
7
|
-
constructor(permission) {
|
|
8
|
-
this.permission = permission;
|
|
9
|
-
this.items = [
|
|
10
|
-
{
|
|
11
|
-
id: 'users',
|
|
12
|
-
label: 'Users',
|
|
13
|
-
icon: 'fa fa-fw fa-user-cog',
|
|
14
|
-
routerLink: ['/admin/users/list'],
|
|
15
|
-
visible: this.permission.evaluatePermissions('Pages.Admin.Users.Edit || Pages.Admin.Users.Create')
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
id: 'insight',
|
|
19
|
-
label: 'Insight',
|
|
20
|
-
icon: 'fa fa-fw fa-signature',
|
|
21
|
-
routerLink: ['/admin/users/insight']
|
|
22
|
-
}
|
|
23
|
-
];
|
|
24
|
-
}
|
|
25
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserTabComponent, deps: [{ token: i1.PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: UserTabComponent, selector: "pw-users-management", ngImport: i0, template: `<pw-tabs [items]="items"></pw-tabs>`, isInline: true, styles: [".search-input input{width:100%}\n"], dependencies: [{ kind: "component", type: i2.PwTabsComponent, selector: "pw-tabs", inputs: ["items", "withSubscription"] }] }); }
|
|
27
|
-
}
|
|
28
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserTabComponent, decorators: [{
|
|
29
|
-
type: Component,
|
|
30
|
-
args: [{ selector: 'pw-users-management', template: `<pw-tabs [items]="items"></pw-tabs>`, styles: [".search-input input{width:100%}\n"] }]
|
|
31
|
-
}], ctorParameters: () => [{ type: i1.PermissionService }] });
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMtdGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvdXNlcnMvdXNlcnMtdGFicy91c2Vycy10YWJzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBUzlELE1BQU0sT0FBTyxnQkFBZ0I7SUFDekIsWUFBNkIsVUFBNkI7UUFBN0IsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFFMUQsVUFBSyxHQUFlO1lBQ2hCO2dCQUNJLEVBQUUsRUFBRSxPQUFPO2dCQUNYLEtBQUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSxzQkFBc0I7Z0JBQzVCLFVBQVUsRUFBRSxDQUFDLG1CQUFtQixDQUFDO2dCQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FDeEMsb0RBQW9ELENBQ3ZEO2FBQ0o7WUFDRDtnQkFDSSxFQUFFLEVBQUUsU0FBUztnQkFDYixLQUFLLEVBQUUsU0FBUztnQkFDaEIsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsVUFBVSxFQUFFLENBQUMsc0JBQXNCLENBQUM7YUFDdkM7U0FDSixDQUFDO0lBbEIyRCxDQUFDOytHQURyRCxnQkFBZ0I7bUdBQWhCLGdCQUFnQiwyREFIZixxQ0FBcUM7OzRGQUd0QyxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0kscUJBQXFCLFlBQ3JCLHFDQUFxQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy11c2Vycy1tYW5hZ2VtZW50JyxcbiAgICB0ZW1wbGF0ZTogYDxwdy10YWJzIFtpdGVtc109XCJpdGVtc1wiPjwvcHctdGFicz5gLFxuICAgIHN0eWxlVXJsczogWycuL3VzZXJzLXRhYnMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBVc2VyVGFiQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHBlcm1pc3Npb246IFBlcm1pc3Npb25TZXJ2aWNlKSB7fVxuXG4gICAgaXRlbXM6IE1lbnVJdGVtW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAndXNlcnMnLFxuICAgICAgICAgICAgbGFiZWw6ICdVc2VycycsXG4gICAgICAgICAgICBpY29uOiAnZmEgZmEtZncgZmEtdXNlci1jb2cnLFxuICAgICAgICAgICAgcm91dGVyTGluazogWycvYWRtaW4vdXNlcnMvbGlzdCddLFxuICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5wZXJtaXNzaW9uLmV2YWx1YXRlUGVybWlzc2lvbnMoXG4gICAgICAgICAgICAgICAgJ1BhZ2VzLkFkbWluLlVzZXJzLkVkaXQgfHwgUGFnZXMuQWRtaW4uVXNlcnMuQ3JlYXRlJ1xuICAgICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ2luc2lnaHQnLFxuICAgICAgICAgICAgbGFiZWw6ICdJbnNpZ2h0JyxcbiAgICAgICAgICAgIGljb246ICdmYSBmYS1mdyBmYS1zaWduYXR1cmUnLFxuICAgICAgICAgICAgcm91dGVyTGluazogWycvYWRtaW4vdXNlcnMvaW5zaWdodCddXG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgdmlldzogc3RyaW5nW107XG59XG4iXX0=
|