@posiwise/admin-module 0.0.115 → 0.0.117
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/esm2022/lib/admin-module.routing.mjs +3 -3
- package/esm2022/lib/admin.module.mjs +1 -1
- package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +3 -2
- package/esm2022/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +12 -6
- package/esm2022/lib/components/config/global-config-details/global-config-details.component.mjs +16 -6
- package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +3 -2
- package/esm2022/lib/components/credentials/credentials-details/credentials-details.component.mjs +15 -6
- package/esm2022/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +3 -2
- package/esm2022/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.mjs +15 -6
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +8 -4
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.mjs +8 -4
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +8 -4
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +8 -4
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +8 -4
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +8 -4
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +8 -4
- package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +3 -2
- package/esm2022/lib/components/faqs/add-faq/add-faq.component.mjs +2 -2
- package/esm2022/lib/components/faqs/edit-faq/edit-faq.component.mjs +13 -11
- package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +16 -5
- package/esm2022/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.mjs +9 -4
- package/esm2022/lib/components/generic/generic-misc/generic-misc.component.mjs +44 -8
- package/esm2022/lib/components/incidents/add-edit-incident/add-edit-incident.component.mjs +15 -9
- package/esm2022/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +13 -4
- package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +3 -2
- package/esm2022/lib/components/newsletters/newsletter-details/newsletter-details.component.mjs +14 -5
- package/esm2022/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +28 -10
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +6 -2
- package/esm2022/lib/components/permissions/permissions-details/permissions-details.component.mjs +29 -10
- package/esm2022/lib/components/permissions/permissions-list/permissions-list.component.mjs +6 -2
- package/esm2022/lib/components/permissions/role-details/role-details.component.mjs +33 -9
- package/esm2022/lib/components/permissions/roles-list/roles-list.component.mjs +3 -2
- package/esm2022/lib/components/products/product-details/product-details.component.mjs +12 -6
- package/esm2022/lib/components/subscriptions/subscription-agents/subscription-agents.component.mjs +3 -3
- package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +11 -6
- package/esm2022/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +25 -11
- package/esm2022/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +6 -5
- package/esm2022/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.mjs +2 -2
- package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +2 -2
- package/esm2022/lib/components/tags/tags-category/tags-category.component.mjs +29 -11
- package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +29 -11
- package/esm2022/lib/components/tips/tip-detail/tip-detail.component.mjs +24 -12
- package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +6 -5
- package/esm2022/lib/components/tips/tips-tabs/tips-tabs.component.mjs +2 -2
- package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +59 -7
- package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +58 -12
- package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +51 -5
- package/esm2022/lib/components/tracking/events/events.component.mjs +51 -5
- package/esm2022/lib/components/tracking/versions/versions.component.mjs +58 -12
- package/esm2022/lib/components/users/user-details/user-details.component.mjs +19 -7
- package/esm2022/lib/components/users/users-list/users-list.component.mjs +3 -2
- package/fesm2022/posiwise-admin-module.mjs +727 -217
- package/fesm2022/posiwise-admin-module.mjs.map +1 -1
- package/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.d.ts +1 -0
- package/lib/components/config/global-config-details/global-config-details.component.d.ts +2 -0
- package/lib/components/credentials/credentials-details/credentials-details.component.d.ts +2 -0
- package/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.d.ts +2 -0
- package/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.d.ts +1 -0
- package/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.d.ts +1 -0
- package/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.d.ts +1 -0
- package/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.d.ts +1 -0
- package/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.d.ts +1 -0
- package/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.d.ts +1 -0
- package/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.d.ts +1 -0
- package/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.d.ts +1 -0
- package/lib/components/generic/generic-misc/generic-misc.component.d.ts +5 -0
- package/lib/components/incidents/add-edit-incident/add-edit-incident.component.d.ts +1 -0
- package/lib/components/login-notifications/login-notification-details/login-notification-details.component.d.ts +1 -0
- package/lib/components/newsletters/newsletter-details/newsletter-details.component.d.ts +2 -0
- package/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.d.ts +2 -0
- package/lib/components/permissions/permissions-details/permissions-details.component.d.ts +2 -0
- package/lib/components/permissions/role-details/role-details.component.d.ts +2 -0
- package/lib/components/products/product-details/product-details.component.d.ts +1 -0
- package/lib/components/subscriptions/subscription-details/subscription-details.component.d.ts +1 -0
- package/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.d.ts +1 -1
- package/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.d.ts +1 -1
- package/lib/components/tags/tags-category/tags-category.component.d.ts +5 -2
- package/lib/components/tags/tags-list/tags-list.component.d.ts +5 -2
- package/lib/components/tips/tip-detail/tip-detail.component.d.ts +3 -0
- package/lib/components/tips/tips-list/tips-list.component.d.ts +1 -0
- package/lib/components/tracking/ahoy-events/ahoy-events.component.d.ts +9 -0
- package/lib/components/tracking/ahoy-messages/ahoy-messages.component.d.ts +7 -0
- package/lib/components/tracking/ahoy-visits/ahoy-visits.component.d.ts +7 -0
- package/lib/components/tracking/events/events.component.d.ts +7 -0
- package/lib/components/tracking/versions/versions.component.d.ts +7 -0
- package/lib/components/users/user-details/user-details.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Component, Injector } from '@angular/core';
|
|
2
2
|
import { ROUTERS } from '../../../shared/routers/routers';
|
|
3
3
|
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
4
|
-
import { TipsService } from '@posiwise/common-services';
|
|
4
|
+
import { PermissionService, TipsService } from '@posiwise/common-services';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@posiwise/common-services";
|
|
7
7
|
import * as i2 from "primeng/table";
|
|
@@ -27,10 +27,11 @@ export class TipsComponent extends AppBaseComponent {
|
|
|
27
27
|
this.routers = ROUTERS;
|
|
28
28
|
}
|
|
29
29
|
ngOnInit() {
|
|
30
|
+
this.subscription_id = PermissionService.selectedSubscription.id;
|
|
30
31
|
this.getTips();
|
|
31
32
|
}
|
|
32
33
|
getTips() {
|
|
33
|
-
this.tipService.getAll().subscribe((response) => {
|
|
34
|
+
this.tipService.getAll(this.subscription_id).subscribe((response) => {
|
|
34
35
|
this.data = response;
|
|
35
36
|
this.isLoaded = true;
|
|
36
37
|
});
|
|
@@ -39,10 +40,10 @@ export class TipsComponent extends AppBaseComponent {
|
|
|
39
40
|
super.ngOnDestroy();
|
|
40
41
|
}
|
|
41
42
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TipsComponent, deps: [{ token: i1.TipsService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TipsComponent, selector: "pw-tips-list", usesInheritance: true, ngImport: i0, template: "<div class=\"col-xs-12 text-end\">\n <h2 class=\"card-title float-start\">
|
|
43
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TipsComponent, selector: "pw-tips-list", usesInheritance: true, ngImport: i0, template: "<div class=\"col-xs-12 text-end\">\n <h2 class=\"card-title float-start\">Tours</h2>\n <a data-cy=\"create-tip\"\n *rbacAllow=\"'Pages.Admin.Product.Create'\"\n class=\"btn btn-sm btn-outline-primary\"\n [routerLink]=\"[routers.tipsDetails + '/add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create Tour\n </a>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n\n<div class=\"primeng-datatable-container table-responsive w-100\"\n *ngIf=\"isLoaded\">\n <p-table [value]=\"data.tips\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Tips.Instructions' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.IsActive' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Tips.Updated' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-tip>\n <tr>\n <td data-head=\"Name\">{{ tip.name }}</td>\n <td data-head=\"Instructions\"\n class=\"w-md-50\">{{ tip.instructions }}</td>\n <td data-head=\"Active\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: tip?.active }\"\n color=\"success-danger\"\n class=\"badge\">{{ tip?.active }}</span>\n </td>\n <td data-head=\"Updated On\">{{ tip.updated_at | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n *rbacAllow=\"'Pages.Admin.Users.Edit'\"\n [routerLink]=\"[routers.tipsDetails + tip.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n</div>\n<pw-no-data [withImage]=\"true\" [message]=\"'Admin.Tips.NoDataMessage' | transloco\"\n *ngIf=\"data.tips.length === 0 && isLoaded\">\n</pw-no-data>\n", dependencies: [{ kind: "component", type: i2.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: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i6.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i7.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i8.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color"] }, { kind: "directive", type: i8.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i9.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i10.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i11.DateFormatPipe, name: "dateFormat" }] }); }
|
|
43
44
|
}
|
|
44
45
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TipsComponent, decorators: [{
|
|
45
46
|
type: Component,
|
|
46
|
-
args: [{ selector: 'pw-tips-list', template: "<div class=\"col-xs-12 text-end\">\n <h2 class=\"card-title float-start\">
|
|
47
|
+
args: [{ selector: 'pw-tips-list', template: "<div class=\"col-xs-12 text-end\">\n <h2 class=\"card-title float-start\">Tours</h2>\n <a data-cy=\"create-tip\"\n *rbacAllow=\"'Pages.Admin.Product.Create'\"\n class=\"btn btn-sm btn-outline-primary\"\n [routerLink]=\"[routers.tipsDetails + '/add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create Tour\n </a>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n\n<div class=\"primeng-datatable-container table-responsive w-100\"\n *ngIf=\"isLoaded\">\n <p-table [value]=\"data.tips\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Tips.Instructions' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.IsActive' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Tips.Updated' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-tip>\n <tr>\n <td data-head=\"Name\">{{ tip.name }}</td>\n <td data-head=\"Instructions\"\n class=\"w-md-50\">{{ tip.instructions }}</td>\n <td data-head=\"Active\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: tip?.active }\"\n color=\"success-danger\"\n class=\"badge\">{{ tip?.active }}</span>\n </td>\n <td data-head=\"Updated On\">{{ tip.updated_at | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n *rbacAllow=\"'Pages.Admin.Users.Edit'\"\n [routerLink]=\"[routers.tipsDetails + tip.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n</div>\n<pw-no-data [withImage]=\"true\" [message]=\"'Admin.Tips.NoDataMessage' | transloco\"\n *ngIf=\"data.tips.length === 0 && isLoaded\">\n</pw-no-data>\n" }]
|
|
47
48
|
}], ctorParameters: () => [{ type: i1.TipsService }, { type: i0.Injector }] });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy90aXBzL3RpcHMtbGlzdC90aXBzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3RpcHMvdGlwcy1saXN0L3RpcHMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU0zRSxNQUFNLE9BQU8sYUFBYyxTQUFRLGdCQUFnQjtJQVkvQyxZQUNZLFVBQXVCLEVBQy9CLE1BQWdCO1FBRWhCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUhOLGVBQVUsR0FBVixVQUFVLENBQWE7UUFabkMsU0FBSSxHQUFnQjtZQUNoQixJQUFJLEVBQUUsRUFBRTtZQUNSLFlBQVksRUFBRSxDQUFDO1lBQ2YsZ0JBQWdCLEVBQUUsQ0FBQztTQUN0QixDQUFDO1FBRUYsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixZQUFPLEdBQUcsT0FBTyxDQUFDO0lBUWxCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7UUFDakUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTyxPQUFPO1FBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQXFCLEVBQUUsRUFBRTtZQUM3RSxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztZQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUSxXQUFXO1FBQ2hCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOytHQWpDUSxhQUFhO21HQUFiLGFBQWEsMkVDWDFCLHdvRUF1REE7OzRGRDVDYSxhQUFhO2tCQUp6QixTQUFTOytCQUNJLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBST1VURVJTIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3JvdXRlcnMvcm91dGVycyc7XG5pbXBvcnQgeyBUaXBSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2UvdGlwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSwgVGlwc1NlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy10aXBzLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90aXBzLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRpcHNDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIGRhdGE6IFRpcFJlc3BvbnNlID0ge1xuICAgICAgICB0aXBzOiBbXSxcbiAgICAgICAgb2JqZWN0X2NvdW50OiAwLFxuICAgICAgICB1bmZpbHRlcmVkX2NvdW50OiAwXG4gICAgfTtcblxuICAgIGlzTG9hZGVkID0gZmFsc2U7XG5cbiAgICByb3V0ZXJzID0gUk9VVEVSUztcbiAgICBzdWJzY3JpcHRpb25faWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHRpcFNlcnZpY2U6IFRpcHNTZXJ2aWNlLFxuICAgICAgICBpbmplY3Q6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uX2lkID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24uaWQ7XG4gICAgICAgIHRoaXMuZ2V0VGlwcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGlwcygpIHtcbiAgICAgICAgdGhpcy50aXBTZXJ2aWNlLmdldEFsbCh0aGlzLnN1YnNjcmlwdGlvbl9pZCkuc3Vic2NyaWJlKChyZXNwb25zZTogVGlwUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2wteHMtMTIgdGV4dC1lbmRcIj5cbiAgPGgyIGNsYXNzPVwiY2FyZC10aXRsZSBmbG9hdC1zdGFydFwiPlRvdXJzPC9oMj5cbiAgPGEgZGF0YS1jeT1cImNyZWF0ZS10aXBcIlxuICAgICpyYmFjQWxsb3c9XCInUGFnZXMuQWRtaW4uUHJvZHVjdC5DcmVhdGUnXCJcbiAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiXG4gICAgW3JvdXRlckxpbmtdPVwiW3JvdXRlcnMudGlwc0RldGFpbHMgKyAnL2FkZCddXCI+XG4gICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gQ3JlYXRlIFRvdXJcbiAgPC9hPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICpuZ0lmPVwiIWlzTG9hZGVkXCI+XG4gIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicHJpbWVuZy1kYXRhdGFibGUtY29udGFpbmVyIHRhYmxlLXJlc3BvbnNpdmUgdy0xMDBcIlxuICAqbmdJZj1cImlzTG9hZGVkXCI+XG4gIDxwLXRhYmxlIFt2YWx1ZV09XCJkYXRhLnRpcHNcIj5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnTGFiZWwuTmFtZScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlRpcHMuSW5zdHJ1Y3Rpb25zJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnTGFiZWwuSXNBY3RpdmUnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5UaXBzLlVwZGF0ZWQnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdMYWJlbC5BY3Rpb25zJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgbGV0LXRpcD5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIk5hbWVcIj57eyB0aXAubmFtZSB9fTwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJJbnN0cnVjdGlvbnNcIlxuICAgICAgICAgIGNsYXNzPVwidy1tZC01MFwiPnt7IHRpcC5pbnN0cnVjdGlvbnMgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQWN0aXZlXCI+XG4gICAgICAgICAgPHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IFt0cnVlLCBmYWxzZV0sIGl0ZW06IHRpcD8uYWN0aXZlIH1cIlxuICAgICAgICAgICAgY29sb3I9XCJzdWNjZXNzLWRhbmdlclwiXG4gICAgICAgICAgICBjbGFzcz1cImJhZGdlXCI+e3sgdGlwPy5hY3RpdmUgfX08L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJVcGRhdGVkIE9uXCI+e3sgdGlwLnVwZGF0ZWRfYXQgfCBkYXRlRm9ybWF0IH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkFjdGlvblwiPlxuICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbGlzdC1pbmxpbmVcIj5cbiAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRWRpdFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibWUtMiBtZS1zbS0zXCJcbiAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidQYWdlcy5BZG1pbi5Vc2Vycy5FZGl0J1wiXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIltyb3V0ZXJzLnRpcHNEZXRhaWxzICsgdGlwLmlkXVwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3AtdGFibGU+XG48L2Rpdj5cbjxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidBZG1pbi5UaXBzLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCJcbiAgKm5nSWY9XCJkYXRhLnRpcHMubGVuZ3RoID09PSAwICYmIGlzTG9hZGVkXCI+XG48L3B3LW5vLWRhdGE+XG4iXX0=
|
|
@@ -6,7 +6,7 @@ export class TipsTabsComponent {
|
|
|
6
6
|
this.items = [
|
|
7
7
|
{
|
|
8
8
|
id: 'tips',
|
|
9
|
-
label: '
|
|
9
|
+
label: 'Tours',
|
|
10
10
|
icon: 'far fa-fw fa-code',
|
|
11
11
|
routerLink: ['/admin/tips/list']
|
|
12
12
|
}
|
|
@@ -22,4 +22,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
22
22
|
template: `<pw-tabs [items]="items"></pw-tabs>`
|
|
23
23
|
}]
|
|
24
24
|
}] });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwcy10YWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy90aXBzL3RpcHMtdGFicy90aXBzLXRhYnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7OztBQU9sRCxNQUFNLE9BQU8saUJBQWlCO0lBRzFCLFFBQVE7UUFDSixJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1Q7Z0JBQ0ksRUFBRSxFQUFFLE1BQU07Z0JBQ1YsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsVUFBVSxFQUFFLENBQUMsa0JBQWtCLENBQUM7YUFDbkM7U0FDSixDQUFDO0lBQ04sQ0FBQzsrR0FaUSxpQkFBaUI7bUdBQWpCLGlCQUFpQiwrQ0FGaEIscUNBQXFDOzs0RkFFdEMsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxTQUFTO29CQUNuQixRQUFRLEVBQUUscUNBQXFDO2lCQUNsRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy10aXBzJyxcbiAgICB0ZW1wbGF0ZTogYDxwdy10YWJzIFtpdGVtc109XCJpdGVtc1wiPjwvcHctdGFicz5gXG59KVxuZXhwb3J0IGNsYXNzIFRpcHNUYWJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBpdGVtczogTWVudUl0ZW1bXTtcblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLml0ZW1zID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiAndGlwcycsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUb3VycycsXG4gICAgICAgICAgICAgICAgaWNvbjogJ2ZhciBmYS1mdyBmYS1jb2RlJyxcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rOiBbJy9hZG1pbi90aXBzL2xpc3QnXVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { ChangeDetectorRef, Component, Injector } from '@angular/core';
|
|
1
|
+
import { ChangeDetectorRef, Component, Injector, ViewChild } from '@angular/core';
|
|
2
2
|
import { PAGE_SIZE } from '@posiwise/common-utilities';
|
|
3
3
|
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
4
4
|
import { AhoyService, PermissionService } from '@posiwise/common-services';
|
|
5
5
|
import { HelperService } from '@posiwise/helper-service';
|
|
6
6
|
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
|
7
7
|
import { AdminDataService } from '@posiwise/admin-module-utils';
|
|
8
|
+
import { MultiSelect } from 'primeng/multiselect';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "@posiwise/common-services";
|
|
10
11
|
import * as i2 from "@ng-bootstrap/ng-bootstrap";
|
|
@@ -45,14 +46,41 @@ export class AhoyEventsComponent extends AppBaseComponent {
|
|
|
45
46
|
this.selectedOption = [];
|
|
46
47
|
this.criteria = [];
|
|
47
48
|
this.searchOptions = [];
|
|
49
|
+
this.userPage = 1;
|
|
50
|
+
this.stopLoading = false;
|
|
51
|
+
this.userLoading = true;
|
|
48
52
|
}
|
|
49
53
|
ngOnInit() {
|
|
50
54
|
this.subscriptionId = PermissionService.selectedSubscription?.id;
|
|
51
55
|
this.microServices = HelperService.getMicroServices(this.appConfig.links);
|
|
56
|
+
this.loadUser();
|
|
52
57
|
}
|
|
53
58
|
ngAfterViewChecked() {
|
|
54
59
|
this.cdr.detectChanges();
|
|
55
60
|
}
|
|
61
|
+
// Use onPanelShow to attach the scroll event listener
|
|
62
|
+
onPanelShow() {
|
|
63
|
+
setTimeout(() => {
|
|
64
|
+
const multiSelectPanel = document.querySelector('.p-multiselect-items-wrapper');
|
|
65
|
+
if (multiSelectPanel) {
|
|
66
|
+
console.log('MultiSelect panel found:', multiSelectPanel);
|
|
67
|
+
if (this.scrollListener) {
|
|
68
|
+
multiSelectPanel.removeEventListener('scroll', this.scrollListener);
|
|
69
|
+
}
|
|
70
|
+
this.scrollListener = this.onScroll.bind(this);
|
|
71
|
+
multiSelectPanel.addEventListener('scroll', this.scrollListener);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.warn('MultiSelect panel not found.');
|
|
75
|
+
}
|
|
76
|
+
}, 0);
|
|
77
|
+
}
|
|
78
|
+
onScroll(event) {
|
|
79
|
+
const element = event.target;
|
|
80
|
+
if (element.scrollHeight - element.scrollTop === element.clientHeight) {
|
|
81
|
+
this.loadUser();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
56
84
|
onLazyLoad(event) {
|
|
57
85
|
const pageDetails = HelperService.onTableLazyLoad(event);
|
|
58
86
|
this.page = pageDetails.page;
|
|
@@ -63,14 +91,28 @@ export class AhoyEventsComponent extends AppBaseComponent {
|
|
|
63
91
|
order_direction: pageDetails.sortOrder,
|
|
64
92
|
search: this.searchText
|
|
65
93
|
});
|
|
94
|
+
}
|
|
95
|
+
loadUser() {
|
|
96
|
+
if (this.stopLoading || this.userSearchText !== '') {
|
|
97
|
+
this.userLoading = false;
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
this.userLoading = true;
|
|
66
101
|
this.adminDataService
|
|
67
102
|
.getUsers({
|
|
68
|
-
page: this.
|
|
103
|
+
page: this.userPage,
|
|
69
104
|
page_size: PAGE_SIZE,
|
|
70
105
|
search: this.userSearchText
|
|
71
106
|
}, this.subscriptionId)
|
|
72
107
|
.then(result => {
|
|
73
|
-
this.
|
|
108
|
+
this.userLoading = false;
|
|
109
|
+
if (result.length === 0) {
|
|
110
|
+
this.stopLoading = true;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.searchOptions = [...this.searchOptions, ...result];
|
|
114
|
+
this.userPage++;
|
|
115
|
+
}
|
|
74
116
|
});
|
|
75
117
|
}
|
|
76
118
|
getAhoyEvents(paging) {
|
|
@@ -126,6 +168,8 @@ export class AhoyEventsComponent extends AppBaseComponent {
|
|
|
126
168
|
}
|
|
127
169
|
handleFilter($event) {
|
|
128
170
|
this.userSearchText = $event.filter;
|
|
171
|
+
this.stopLoading = false;
|
|
172
|
+
this.userPage = 2;
|
|
129
173
|
this.adminDataService
|
|
130
174
|
.getUsers({
|
|
131
175
|
page: this.page,
|
|
@@ -138,12 +182,20 @@ export class AhoyEventsComponent extends AppBaseComponent {
|
|
|
138
182
|
}
|
|
139
183
|
ngOnDestroy() {
|
|
140
184
|
super.ngOnDestroy();
|
|
185
|
+
// Remove the scroll event listener on component destruction
|
|
186
|
+
const multiSelectPanel = document.querySelector('.p-multiselect-items-wrapper');
|
|
187
|
+
if (multiSelectPanel && this.scrollListener) {
|
|
188
|
+
multiSelectPanel.removeEventListener('scroll', this.scrollListener);
|
|
189
|
+
}
|
|
141
190
|
}
|
|
142
191
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AhoyEventsComponent, deps: [{ token: i0.Injector }, { token: i1.AhoyService }, { token: i2.NgbModal }, { token: i0.ChangeDetectorRef }, { token: i3.AdminDataService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
143
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: AhoyEventsComponent, selector: "pw-ahoy-events", 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\">Ahoy Events</h2>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container mt-0\" [class.hideTable]=\"data.unfiltered_count === 0\">\n <div class=\"user-management-table table-responsive\">\n <p-table #dt\n [value]=\"data.events\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [sortField]=\"defaultSortField\"\n [sortOrder]=\"defaultSortOrder\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row\">\n <div *rbacAllow=\"'SuperAdmin'\"\n class=\"col-sm-2 mb-2 mb-md-0\">\n <select (change)=\"onServiceChange($event.target.value)\"\n class=\"form-control form-select\">\n <option *ngFor=\"let item of microServices\"\n [value]=\"item.name\">\n {{ item.name }}\n </option>\n </select>\n </div>\n <div class=\"col-sm-2\">\n <p-multiSelect [options]=\"searchOptions\"\n (onChange)=\"onSearchOptionChange($event)\"\n placeholder=\"Filter by users\"\n [(ngModel)]=\"filterSource\"\n [showToggleAll]=\"true\"\n [showHeader]=\"true\"\n appendTo=\"body\"\n (onFilter)=\"handleFilter($event)\"\n >\n </p-multiSelect>\n </div>\n <div class=\"col-sm-2\">\n <p-calendar [showTime]=\"true\"\n [appendTo]=\"'body'\"\n (onSelect)=\"onDateSelection()\"\n [placeholder]=\"'Start Date'\"\n [(ngModel)]=\"startDate\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\">\n </p-calendar>\n </div>\n <div class=\"col-sm-2\">\n <p-calendar [appendTo]=\"'body'\"\n [showTime]=\"true\"\n (onSelect)=\"onDateSelection()\"\n [placeholder]=\"'End Date'\"\n [(ngModel)]=\"endDate\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\">\n </p-calendar>\n </div>\n <div class=\"col d-flex align-items-center\">\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 Events...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90 form-control bg-white\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"name\">\n {{ 'Label.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\">\n {{ 'Admin.Tracking.Properties' | transloco }}\n </th>\n <th scope=\"true\"\n pSortableColumn=\"time\">\n {{ 'Admin.Tracking.Time' | transloco }}\n <p-sortIcon field=\"time\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"user_id\">\n {{ 'Admin.Tracking.User' | transloco }}\n <p-sortIcon field=\"user_id\"></p-sortIcon>\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-event>\n <tr [class.d-none]=\"loading\">\n <td data-head=\"Name\">{{ event.name }}</td>\n <td data-head=\"Properties\">\n <span *ngIf=\"(event?.properties | json) !== '{}'\" class=\"badge bg-info cursor-pointer\"\n (click)=\"revealProp(objModal,event?.properties)\">Reveal properties</span></td>\n <td data-head=\"Time\">{{ event.time }}</td>\n <td data-head=\"User\">\n <span *ngIf=\"event?.user_id\">\n <span *ngIf=\"event?.user\"><a [routerLink]=\"['/members', event?.user?.slug]\">{{ event?.user?.first_name }} {{ event?.user?.last_name }}</a></span>\n <span *ngIf=\"!event?.user\">{{ event?.user_id }}</span>\n </span>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\" data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\">\n </pw-no-data>\n </div>\n <span *ngIf=\"data.object_count !== 0\" class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n</div>\n<div *ngIf=\"!loading && data.unfiltered_count === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Ahoy.NoEventsDataMessage' | transloco\"> </pw-no-data>\n</div>\n<!-- Object Modal -->\n<ng-template #objModal\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{ 'Admin.Tracking.Properties' | transloco }}</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <div *ngIf=\"activeObject\">\n <ngx-json-viewer [json]=\"activeObject\"\n [expanded]=\"false\"></ngx-json-viewer>\n </div>\n </div>\n</ng-template>\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_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}@media (min-width: 767px){.table-responsive td,.table-responsive th{font-size:11px!important}}\n"], dependencies: [{ kind: "component", type: i4.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: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i4.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { 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: "component", type: i8.NgxJsonViewerComponent, selector: "ngx-json-viewer", inputs: ["json", "expanded", "depth", "_currentDepth"] }, { kind: "component", type: i9.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i11.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i11.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: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: i14.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i15.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "pipe", type: i10.JsonPipe, name: "json" }, { kind: "pipe", type: i16.TranslocoPipe, name: "transloco" }] }); }
|
|
192
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: AhoyEventsComponent, selector: "pw-ahoy-events", viewQueries: [{ propertyName: "multiSelector", first: true, predicate: ["multiSelector"], 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\">Ahoy Events</h2>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container mt-0\" [class.hideTable]=\"data.unfiltered_count === 0\">\n <div class=\"user-management-table table-responsive\">\n <p-table #dt\n [value]=\"data.events\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [sortField]=\"defaultSortField\"\n [sortOrder]=\"defaultSortOrder\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row\">\n <div *rbacAllow=\"'SuperAdmin'\"\n class=\"col-sm-2 mb-2 mb-md-0\">\n <select (change)=\"onServiceChange($event.target.value)\"\n class=\"form-control form-select\">\n <option *ngFor=\"let item of microServices\"\n [value]=\"item.name\">\n {{ item.name }}\n </option>\n </select>\n </div>\n <div class=\"col-sm-2\">\n <p-multiSelect #multiSelector [options]=\"searchOptions\"\n (onChange)=\"onSearchOptionChange($event)\"\n placeholder=\"Filter by users\"\n [(ngModel)]=\"filterSource\"\n [showToggleAll]=\"true\"\n [showHeader]=\"true\"\n appendTo=\"body\"\n [lazy]=\"true\"\n (scroll)=\"onScroll($event)\"\n (onPanelShow)=\"onPanelShow()\"\n [loading]=\"userLoading\"\n (onFilter)=\"handleFilter($event)\"\n >\n </p-multiSelect>\n </div>\n <div class=\"col-sm-2\">\n <p-calendar [showTime]=\"true\"\n [appendTo]=\"'body'\"\n (onSelect)=\"onDateSelection()\"\n [placeholder]=\"'Start Date'\"\n [(ngModel)]=\"startDate\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\">\n </p-calendar>\n </div>\n <div class=\"col-sm-2\">\n <p-calendar [appendTo]=\"'body'\"\n [showTime]=\"true\"\n (onSelect)=\"onDateSelection()\"\n [placeholder]=\"'End Date'\"\n [(ngModel)]=\"endDate\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\">\n </p-calendar>\n </div>\n <div class=\"col d-flex align-items-center\">\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 Events...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90 form-control bg-white\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"name\">\n {{ 'Label.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\">\n {{ 'Admin.Tracking.Properties' | transloco }}\n </th>\n <th scope=\"true\"\n pSortableColumn=\"time\">\n {{ 'Admin.Tracking.Time' | transloco }}\n <p-sortIcon field=\"time\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"user_id\">\n {{ 'Admin.Tracking.User' | transloco }}\n <p-sortIcon field=\"user_id\"></p-sortIcon>\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-event>\n <tr [class.d-none]=\"loading\">\n <td data-head=\"Name\">{{ event.name }}</td>\n <td data-head=\"Properties\">\n <span *ngIf=\"(event?.properties | json) !== '{}'\" class=\"badge bg-info cursor-pointer\"\n (click)=\"revealProp(objModal,event?.properties)\">Reveal properties</span></td>\n <td data-head=\"Time\">{{ event.time }}</td>\n <td data-head=\"User\">\n <span *ngIf=\"event?.user_id\">\n <span *ngIf=\"event?.user\"><a [routerLink]=\"['/members', event?.user?.slug]\">{{ event?.user?.first_name }} {{ event?.user?.last_name }}</a></span>\n <span *ngIf=\"!event?.user\">{{ event?.user_id }}</span>\n </span>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\" data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\">\n </pw-no-data>\n </div>\n <span *ngIf=\"data.object_count !== 0\" class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n</div>\n<div *ngIf=\"!loading && data.unfiltered_count === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Ahoy.NoEventsDataMessage' | transloco\"> </pw-no-data>\n</div>\n<!-- Object Modal -->\n<ng-template #objModal\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{ 'Admin.Tracking.Properties' | transloco }}</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <div *ngIf=\"activeObject\">\n <ngx-json-viewer [json]=\"activeObject\"\n [expanded]=\"false\"></ngx-json-viewer>\n </div>\n </div>\n</ng-template>\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_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}@media (min-width: 767px){.table-responsive td,.table-responsive th{font-size:11px!important}}\n"], dependencies: [{ kind: "component", type: i4.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: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i4.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { 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: "component", type: i8.NgxJsonViewerComponent, selector: "ngx-json-viewer", inputs: ["json", "expanded", "depth", "_currentDepth"] }, { kind: "component", type: i9.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i11.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i11.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: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: i14.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i15.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "pipe", type: i10.JsonPipe, name: "json" }, { kind: "pipe", type: i16.TranslocoPipe, name: "transloco" }] }); }
|
|
144
193
|
}
|
|
145
194
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AhoyEventsComponent, decorators: [{
|
|
146
195
|
type: Component,
|
|
147
|
-
args: [{ selector: 'pw-ahoy-events', 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\">Ahoy Events</h2>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container mt-0\" [class.hideTable]=\"data.unfiltered_count === 0\">\n <div class=\"user-management-table table-responsive\">\n <p-table #dt\n [value]=\"data.events\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [sortField]=\"defaultSortField\"\n [sortOrder]=\"defaultSortOrder\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row\">\n <div *rbacAllow=\"'SuperAdmin'\"\n class=\"col-sm-2 mb-2 mb-md-0\">\n <select (change)=\"onServiceChange($event.target.value)\"\n class=\"form-control form-select\">\n <option *ngFor=\"let item of microServices\"\n [value]=\"item.name\">\n {{ item.name }}\n </option>\n </select>\n </div>\n <div class=\"col-sm-2\">\n <p-multiSelect [options]=\"searchOptions\"\n (onChange)=\"onSearchOptionChange($event)\"\n placeholder=\"Filter by users\"\n [(ngModel)]=\"filterSource\"\n [showToggleAll]=\"true\"\n [showHeader]=\"true\"\n appendTo=\"body\"\n (onFilter)=\"handleFilter($event)\"\n >\n </p-multiSelect>\n </div>\n <div class=\"col-sm-2\">\n <p-calendar [showTime]=\"true\"\n [appendTo]=\"'body'\"\n (onSelect)=\"onDateSelection()\"\n [placeholder]=\"'Start Date'\"\n [(ngModel)]=\"startDate\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\">\n </p-calendar>\n </div>\n <div class=\"col-sm-2\">\n <p-calendar [appendTo]=\"'body'\"\n [showTime]=\"true\"\n (onSelect)=\"onDateSelection()\"\n [placeholder]=\"'End Date'\"\n [(ngModel)]=\"endDate\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\">\n </p-calendar>\n </div>\n <div class=\"col d-flex align-items-center\">\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 Events...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90 form-control bg-white\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"name\">\n {{ 'Label.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\">\n {{ 'Admin.Tracking.Properties' | transloco }}\n </th>\n <th scope=\"true\"\n pSortableColumn=\"time\">\n {{ 'Admin.Tracking.Time' | transloco }}\n <p-sortIcon field=\"time\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"user_id\">\n {{ 'Admin.Tracking.User' | transloco }}\n <p-sortIcon field=\"user_id\"></p-sortIcon>\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-event>\n <tr [class.d-none]=\"loading\">\n <td data-head=\"Name\">{{ event.name }}</td>\n <td data-head=\"Properties\">\n <span *ngIf=\"(event?.properties | json) !== '{}'\" class=\"badge bg-info cursor-pointer\"\n (click)=\"revealProp(objModal,event?.properties)\">Reveal properties</span></td>\n <td data-head=\"Time\">{{ event.time }}</td>\n <td data-head=\"User\">\n <span *ngIf=\"event?.user_id\">\n <span *ngIf=\"event?.user\"><a [routerLink]=\"['/members', event?.user?.slug]\">{{ event?.user?.first_name }} {{ event?.user?.last_name }}</a></span>\n <span *ngIf=\"!event?.user\">{{ event?.user_id }}</span>\n </span>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\" data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\">\n </pw-no-data>\n </div>\n <span *ngIf=\"data.object_count !== 0\" class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n</div>\n<div *ngIf=\"!loading && data.unfiltered_count === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Ahoy.NoEventsDataMessage' | transloco\"> </pw-no-data>\n</div>\n<!-- Object Modal -->\n<ng-template #objModal\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{ 'Admin.Tracking.Properties' | transloco }}</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <div *ngIf=\"activeObject\">\n <ngx-json-viewer [json]=\"activeObject\"\n [expanded]=\"false\"></ngx-json-viewer>\n </div>\n </div>\n</ng-template>\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_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}@media (min-width: 767px){.table-responsive td,.table-responsive th{font-size:11px!important}}\n"] }]
|
|
148
|
-
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.AhoyService }, { type: i2.NgbModal }, { type: i0.ChangeDetectorRef }, { type: i3.AdminDataService }]
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWhveS1ldmVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3RyYWNraW5nL2Fob3ktZXZlbnRzL2Fob3ktZXZlbnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy90cmFja2luZy9haG95LWV2ZW50cy9haG95LWV2ZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBSVgsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFNBQVMsRUFBUSxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTzlFLE1BQU0sT0FBTyxtQkFDVCxTQUFRLGdCQUFnQjtJQTJDeEIsWUFDSSxRQUFrQixFQUNWLFdBQXdCLEVBQ3hCLFlBQXNCLEVBQ3RCLEdBQXNCLEVBQ3RCLGdCQUFrQztRQUUxQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFMUixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixxQkFBZ0IsR0FB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QUFXLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBTTtRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFNBQVMsRUFBRSxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBTTtRQUNmLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCO2FBQ2hCLFFBQVEsQ0FDTDtZQUNJLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYztTQUM5QixFQUNELElBQUksQ0FBQyxjQUFjLENBQ3RCO2FBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0FwS1EsbUJBQW1CO21HQUFuQixtQkFBbUIsNkVDekJoQywrcExBa0pBOzs0RkR6SGEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNJLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0b3IsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXp5TG9hZEV2ZW50LCBTZWxlY3RJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQgeyBQQUdFX1NJWkUsIFVzZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBBaG95RXZlbnQsIEFob3lFdmVudFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS90cmFja2luZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFnaW5nIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgQWhveVNlcnZpY2UsIFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgQWRtaW5EYXRhU2VydmljZSwgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctYWhveS1ldmVudHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9haG95LWV2ZW50cy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYWhveS1ldmVudHMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBBaG95RXZlbnRzQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZFxue1xuICAgIGFob3lFdmVudHM6IEFob3lFdmVudDtcblxuICAgIGRhdGE6IEFob3lFdmVudFJlc3BvbnNlID0ge1xuICAgICAgICBldmVudHM6IFtdLFxuICAgICAgICBvYmplY3RfY291bnQ6IDAsXG4gICAgICAgIHVuZmlsdGVyZWRfY291bnQ6IDBcbiAgICB9O1xuXG4gICAgbG9hZGluZyA9IHRydWU7XG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcbiAgICBzZWFyY2hUZXh0ID0gJyc7XG5cbiAgICB1c2VyU2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgcHJpdmF0ZSBwYWdlID0gMTtcblxuICAgIGRlZmF1bHRTb3J0RmllbGQgPSAndGltZSc7XG5cbiAgICBkZWZhdWx0U29ydE9yZGVyID0gLTE7XG5cbiAgICBtaWNyb1NlcnZpY2VzID0gW107XG5cbiAgICBzZWxlY3RlZE1pY3JvU2VydmljZTogc3RyaW5nO1xuXG4gICAgYWN0aXZlT2JqZWN0OiBBaG95RXZlbnQ7XG5cbiAgICBzdGFydERhdGU6IHN0cmluZztcblxuICAgIGVuZERhdGU6IHN0cmluZztcblxuICAgIHNlbGVjdGVkT3B0aW9uOiBTZWxlY3RJdGVtW10gPSBbXTtcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICBmaWx0ZXJTb3VyY2U6IHN0cmluZ1tdO1xuXG4gICAgY3JpdGVyaWEgPSBbXTtcblxuICAgIHNlYXJjaE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgYWhveVNlcnZpY2U6IEFob3lTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBhZG1pbkRhdGFTZXJ2aWNlOiBBZG1pbkRhdGFTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IFBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkU3Vic2NyaXB0aW9uPy5pZDtcbiAgICAgICAgdGhpcy5taWNyb1NlcnZpY2VzID0gSGVscGVyU2VydmljZS5nZXRNaWNyb1NlcnZpY2VzKHRoaXMuYXBwQ29uZmlnLmxpbmtzKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkxhenlMb2FkKGV2ZW50OiBMYXp5TG9hZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhZ2VEZXRhaWxzID0gSGVscGVyU2VydmljZS5vblRhYmxlTGF6eUxvYWQoZXZlbnQpO1xuICAgICAgICB0aGlzLnBhZ2UgPSBwYWdlRGV0YWlscy5wYWdlO1xuICAgICAgICB0aGlzLmdldEFob3lFdmVudHMoe1xuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkUsXG4gICAgICAgICAgICBvcmRlcl9ieTogcGFnZURldGFpbHMuc29ydEZpZWxkLFxuICAgICAgICAgICAgb3JkZXJfZGlyZWN0aW9uOiBwYWdlRGV0YWlscy5zb3J0T3JkZXIsXG4gICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFkbWluRGF0YVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRVc2VycyhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaDogdGhpcy51c2VyU2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbnMgPSByZXN1bHQ7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFob3lFdmVudHMocGFnaW5nOiBQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgc2VydmljZSA9IHRoaXMubWljcm9TZXJ2aWNlcy5maW5kKHggPT4geC5uYW1lID09PSB0aGlzLnNlbGVjdGVkTWljcm9TZXJ2aWNlKTtcbiAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgICAgICAgICBzZXJ2aWNlID0gdGhpcy5taWNyb1NlcnZpY2VzLmZpbmQoeCA9PiB4LnZhbHVlID09PSB0aGlzLmFwcENvbmZpZy5saW5rcz8ubWFpbl9hcGkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICBpZiAodGhpcy5zdGFydERhdGUgJiYgdGhpcy5lbmREYXRlKSB7XG4gICAgICAgICAgICBvYmpbJ3N0YXJ0X2F0J10gPSBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIG9ialsnZW5kX2F0J10gPSBuZXcgRGF0ZSh0aGlzLmVuZERhdGUpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvYmpbJ3VzZXJfaWRzJ10gPSB0aGlzLnNlbGVjdGVkT3B0aW9uLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFob3lTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWhveUV2ZW50cyhvYmosIHNlcnZpY2UsIHBhZ2luZylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBBaG95RXZlbnRSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25EYXRlU2VsZWN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFydERhdGUgJiYgdGhpcy5lbmREYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmdldEFob3lFdmVudHMoe1xuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlcnZpY2VDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWljcm9TZXJ2aWNlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZ2V0QWhveUV2ZW50cyh7XG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXZlYWxQcm9wKG1vZGFsLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLmFjdGl2ZU9iamVjdCA9IHZhbHVlO1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKG1vZGFsLCB7IGNlbnRlcmVkOiB0cnVlLCB3aW5kb3dDbGFzczogJ21vZGFsLWhvbGRlcicgfSk7XG4gICAgfVxuXG4gICAgb25TZWFyY2hPcHRpb25DaGFuZ2UoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY3JpdGVyaWEgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9ICRldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5nZXRBaG95RXZlbnRzKHtcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUZpbHRlcigkZXZlbnQpIHtcbiAgICAgICAgdGhpcy51c2VyU2VhcmNoVGV4dCA9ICRldmVudC5maWx0ZXI7XG4gICAgICAgIHRoaXMuYWRtaW5EYXRhU2VydmljZVxuICAgICAgICAgICAgLmdldFVzZXJzKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoOiB0aGlzLnVzZXJTZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoT3B0aW9ucyA9IHJlc3VsdDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgPGgyIGNsYXNzPVwiY2FyZC10aXRsZSBwLTAgZmxvYXQtc3RhcnRcIj5BaG95IEV2ZW50czwvaDI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICpuZ0lmPVwiIWlzTG9hZGVkXCI+XG4gIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInByaW1lbmctZGF0YXRhYmxlLWNvbnRhaW5lciBtdC0wXCIgW2NsYXNzLmhpZGVUYWJsZV09XCJkYXRhLnVuZmlsdGVyZWRfY291bnQgPT09IDBcIj5cbiAgPGRpdiBjbGFzcz1cInVzZXItbWFuYWdlbWVudC10YWJsZSB0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgPHAtdGFibGUgI2R0XG4gICAgICBbdmFsdWVdPVwiZGF0YS5ldmVudHNcIlxuICAgICAgW3BhZ2luYXRvcl09XCJkYXRhLm9iamVjdF9jb3VudCAhPT0gMFwiXG4gICAgICBbbGF6eV09XCJ0cnVlXCJcbiAgICAgIFtyb3dzXT1cIlBBR0VfU0laRVwiXG4gICAgICBbdG90YWxSZWNvcmRzXT1cImRhdGEub2JqZWN0X2NvdW50XCJcbiAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgW3NvcnRGaWVsZF09XCJkZWZhdWx0U29ydEZpZWxkXCJcbiAgICAgIFtzb3J0T3JkZXJdPVwiZGVmYXVsdFNvcnRPcmRlclwiXG4gICAgICBbZmlsdGVyRGVsYXldPVwiMTAwMFwiXG4gICAgICAob25MYXp5TG9hZCk9XCJvbkxhenlMb2FkKCRldmVudClcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2ICpyYmFjQWxsb3c9XCInU3VwZXJBZG1pbidcIlxuICAgICAgICAgICAgY2xhc3M9XCJjb2wtc20tMiBtYi0yIG1iLW1kLTBcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJvblNlcnZpY2VDaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLXNlbGVjdFwiPlxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1pY3JvU2VydmljZXNcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLm5hbWVcIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cbiAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cInNlYXJjaE9wdGlvbnNcIlxuICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25TZWFyY2hPcHRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGJ5IHVzZXJzXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJTb3VyY2VcIlxuICAgICAgICAgICAgICBbc2hvd1RvZ2dsZUFsbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgICAgIChvbkZpbHRlcik9XCJoYW5kbGVGaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cbiAgICAgICAgICAgIDxwLWNhbGVuZGFyIFtzaG93VGltZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgIChvblNlbGVjdCk9XCJvbkRhdGVTZWxlY3Rpb24oKVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU3RhcnQgRGF0ZSdcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInN0YXJ0RGF0ZVwiXG4gICAgICAgICAgICAgIFtzaG93SWNvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdD1cImRkLU0teXlcIj5cbiAgICAgICAgICAgIDwvcC1jYWxlbmRhcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cbiAgICAgICAgICAgIDxwLWNhbGVuZGFyIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvblNlbGVjdCk9XCJvbkRhdGVTZWxlY3Rpb24oKVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRW5kIERhdGUnXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbmREYXRlXCJcbiAgICAgICAgICAgICAgW3Nob3dJY29uXT1cInRydWVcIlxuICAgICAgICAgICAgICBkYXRlRm9ybWF0PVwiZGQtTS15eVwiPlxuICAgICAgICAgICAgPC9wLWNhbGVuZGFyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggbXQtMiBtZS0yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICBzaXplPVwiNTBcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBFdmVudHMuLi5cIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwiZHQuZmlsdGVyR2xvYmFsKCRldmVudC50YXJnZXQudmFsdWUsICdjb250YWlucycpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtdy05MCBmb3JtLWNvbnRyb2wgYmctd2hpdGVcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cIm5hbWVcIj5cbiAgICAgICAgICAgIHt7ICdMYWJlbC5OYW1lJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJuYW1lXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPlxuICAgICAgICAgICAge3sgJ0FkbWluLlRyYWNraW5nLlByb3BlcnRpZXMnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cInRpbWVcIj5cbiAgICAgICAgICAgIHt7ICdBZG1pbi5UcmFja2luZy5UaW1lJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJ0aW1lXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJ1c2VyX2lkXCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVHJhY2tpbmcuVXNlcicgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwidXNlcl9pZFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgICAgbGV0LWV2ZW50PlxuICAgICAgICA8dHIgW2NsYXNzLmQtbm9uZV09XCJsb2FkaW5nXCI+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIk5hbWVcIj57eyBldmVudC5uYW1lIH19PC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUHJvcGVydGllc1wiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIoZXZlbnQ/LnByb3BlcnRpZXMgfCBqc29uKSAhPT0gJ3t9J1wiIGNsYXNzPVwiYmFkZ2UgYmctaW5mbyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZXZlYWxQcm9wKG9iak1vZGFsLGV2ZW50Py5wcm9wZXJ0aWVzKVwiPlJldmVhbCBwcm9wZXJ0aWVzPC9zcGFuPjwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlRpbWVcIj57eyBldmVudC50aW1lIH19PC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiVXNlclwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJldmVudD8udXNlcl9pZFwiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImV2ZW50Py51c2VyXCI+PGEgW3JvdXRlckxpbmtdPVwiWycvbWVtYmVycycsIGV2ZW50Py51c2VyPy5zbHVnXVwiPnt7IGV2ZW50Py51c2VyPy5maXJzdF9uYW1lIH19IHt7IGV2ZW50Py51c2VyPy5sYXN0X25hbWUgfX08L2E+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFldmVudD8udXNlclwiPnt7IGV2ZW50Py51c2VyX2lkIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC10YWJsZT5cbiAgICA8ZGl2ICpuZ0lmPVwiIGRhdGEub2JqZWN0X2NvdW50ID09PSAwICYmIGRhdGEudW5maWx0ZXJlZF9jb3VudCAhPT0gMFwiPlxuICAgICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ1NlYXJjaC5Ob0RhdGFNZXNzYWdlJyB8IHRyYW5zbG9jb1wiIFtkZXNjcmlwdGlvbl09XCInU2VhcmNoLk5vRGF0YURlc2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgPC9wdy1uby1kYXRhPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuICpuZ0lmPVwiZGF0YS5vYmplY3RfY291bnQgIT09IDBcIiBjbGFzcz1cInRvdGFsLXJlY29yZHMtY291bnRcIj57eyAnTGFiZWwuVG90YWwnIHwgdHJhbnNsb2NvIH19OiB7eyAgZGF0YS5vYmplY3RfY291bnQgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgJiYgZGF0YS51bmZpbHRlcmVkX2NvdW50ID09PSAwXCI+XG4gIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidBZG1pbi5BaG95Lk5vRXZlbnRzRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+IDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuPCEtLSBPYmplY3QgTW9kYWwgLS0+XG48bmctdGVtcGxhdGUgI29iak1vZGFsXG4gIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+e3sgJ0FkbWluLlRyYWNraW5nLlByb3BlcnRpZXMnIHwgdHJhbnNsb2NvIH19PC9oND5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4tY2xvc2UgZmxvYXQtZW5kXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XG5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgPGRpdiAqbmdJZj1cImFjdGl2ZU9iamVjdFwiPlxuICAgICAgPG5neC1qc29uLXZpZXdlciBbanNvbl09XCJhY3RpdmVPYmplY3RcIlxuICAgICAgICBbZXhwYW5kZWRdPVwiZmFsc2VcIj48L25neC1qc29uLXZpZXdlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
196
|
+
args: [{ selector: 'pw-ahoy-events', 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\">Ahoy Events</h2>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container mt-0\" [class.hideTable]=\"data.unfiltered_count === 0\">\n <div class=\"user-management-table table-responsive\">\n <p-table #dt\n [value]=\"data.events\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [sortField]=\"defaultSortField\"\n [sortOrder]=\"defaultSortOrder\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row\">\n <div *rbacAllow=\"'SuperAdmin'\"\n class=\"col-sm-2 mb-2 mb-md-0\">\n <select (change)=\"onServiceChange($event.target.value)\"\n class=\"form-control form-select\">\n <option *ngFor=\"let item of microServices\"\n [value]=\"item.name\">\n {{ item.name }}\n </option>\n </select>\n </div>\n <div class=\"col-sm-2\">\n <p-multiSelect #multiSelector [options]=\"searchOptions\"\n (onChange)=\"onSearchOptionChange($event)\"\n placeholder=\"Filter by users\"\n [(ngModel)]=\"filterSource\"\n [showToggleAll]=\"true\"\n [showHeader]=\"true\"\n appendTo=\"body\"\n [lazy]=\"true\"\n (scroll)=\"onScroll($event)\"\n (onPanelShow)=\"onPanelShow()\"\n [loading]=\"userLoading\"\n (onFilter)=\"handleFilter($event)\"\n >\n </p-multiSelect>\n </div>\n <div class=\"col-sm-2\">\n <p-calendar [showTime]=\"true\"\n [appendTo]=\"'body'\"\n (onSelect)=\"onDateSelection()\"\n [placeholder]=\"'Start Date'\"\n [(ngModel)]=\"startDate\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\">\n </p-calendar>\n </div>\n <div class=\"col-sm-2\">\n <p-calendar [appendTo]=\"'body'\"\n [showTime]=\"true\"\n (onSelect)=\"onDateSelection()\"\n [placeholder]=\"'End Date'\"\n [(ngModel)]=\"endDate\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\">\n </p-calendar>\n </div>\n <div class=\"col d-flex align-items-center\">\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 Events...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90 form-control bg-white\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"name\">\n {{ 'Label.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\">\n {{ 'Admin.Tracking.Properties' | transloco }}\n </th>\n <th scope=\"true\"\n pSortableColumn=\"time\">\n {{ 'Admin.Tracking.Time' | transloco }}\n <p-sortIcon field=\"time\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"user_id\">\n {{ 'Admin.Tracking.User' | transloco }}\n <p-sortIcon field=\"user_id\"></p-sortIcon>\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-event>\n <tr [class.d-none]=\"loading\">\n <td data-head=\"Name\">{{ event.name }}</td>\n <td data-head=\"Properties\">\n <span *ngIf=\"(event?.properties | json) !== '{}'\" class=\"badge bg-info cursor-pointer\"\n (click)=\"revealProp(objModal,event?.properties)\">Reveal properties</span></td>\n <td data-head=\"Time\">{{ event.time }}</td>\n <td data-head=\"User\">\n <span *ngIf=\"event?.user_id\">\n <span *ngIf=\"event?.user\"><a [routerLink]=\"['/members', event?.user?.slug]\">{{ event?.user?.first_name }} {{ event?.user?.last_name }}</a></span>\n <span *ngIf=\"!event?.user\">{{ event?.user_id }}</span>\n </span>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\" data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\">\n </pw-no-data>\n </div>\n <span *ngIf=\"data.object_count !== 0\" class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n</div>\n<div *ngIf=\"!loading && data.unfiltered_count === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Ahoy.NoEventsDataMessage' | transloco\"> </pw-no-data>\n</div>\n<!-- Object Modal -->\n<ng-template #objModal\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{ 'Admin.Tracking.Properties' | transloco }}</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <div *ngIf=\"activeObject\">\n <ngx-json-viewer [json]=\"activeObject\"\n [expanded]=\"false\"></ngx-json-viewer>\n </div>\n </div>\n</ng-template>\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_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}@media (min-width: 767px){.table-responsive td,.table-responsive th{font-size:11px!important}}\n"] }]
|
|
197
|
+
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.AhoyService }, { type: i2.NgbModal }, { type: i0.ChangeDetectorRef }, { type: i3.AdminDataService }], propDecorators: { multiSelector: [{
|
|
198
|
+
type: ViewChild,
|
|
199
|
+
args: ['multiSelector']
|
|
200
|
+
}] } });
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWhveS1ldmVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3RyYWNraW5nL2Fob3ktZXZlbnRzL2Fob3ktZXZlbnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy90cmFja2luZy9haG95LWV2ZW50cy9haG95LWV2ZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBR1IsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9sRCxNQUFNLE9BQU8sbUJBQ1QsU0FBUSxnQkFBZ0I7SUFrRHhCLFlBQ0ksUUFBa0IsRUFDVixXQUF3QixFQUN4QixZQUFzQixFQUN0QixHQUFzQixFQUN0QixnQkFBa0M7UUFFMUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBTFIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZ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RSxJQUFJLENBQUMsY0FBYztTQUM5QixFQUNELElBQUksQ0FBQyxjQUFjLENBQ3RCO2FBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFcEIsNERBQTREO1FBQzVELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDM0MsOEJBQThCLENBQ2xCLENBQUM7UUFFakIsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDMUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0wsQ0FBQzsrR0FoT1EsbUJBQW1CO21HQUFuQixtQkFBbUIsNkxDekJoQyxrMUxBc0pBOzs0RkQ3SGEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNJLGdCQUFnQjs2TEFRRSxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEluamVjdG9yLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGF6eUxvYWRFdmVudCwgU2VsZWN0SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFBBR0VfU0laRSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEFob3lFdmVudCwgQWhveUV2ZW50UmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL3RyYWNraW5nLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYWdpbmcgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBBaG95U2VydmljZSwgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBBZG1pbkRhdGFTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdCB9IGZyb20gJ3ByaW1lbmcvbXVsdGlzZWxlY3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LWFob3ktZXZlbnRzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWhveS1ldmVudHMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Fob3ktZXZlbnRzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQWhveUV2ZW50c0NvbXBvbmVudFxuICAgIGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWRcbntcbiAgICBAVmlld0NoaWxkKCdtdWx0aVNlbGVjdG9yJykgbXVsdGlTZWxlY3RvcjogTXVsdGlTZWxlY3Q7XG4gICAgYWhveUV2ZW50czogQWhveUV2ZW50O1xuXG4gICAgZGF0YTogQWhveUV2ZW50UmVzcG9uc2UgPSB7XG4gICAgICAgIGV2ZW50czogW10sXG4gICAgICAgIG9iamVjdF9jb3VudDogMCxcbiAgICAgICAgdW5maWx0ZXJlZF9jb3VudDogMFxuICAgIH07XG5cbiAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICBpc0xvYWRlZCA9IGZhbHNlO1xuICAgIHNlYXJjaFRleHQgPSAnJztcblxuICAgIHVzZXJTZWFyY2hUZXh0ID0gJyc7XG5cbiAgICBwcml2YXRlIHBhZ2UgPSAxO1xuXG4gICAgZGVmYXVsdFNvcnRGaWVsZCA9ICd0aW1lJztcblxuICAgIGRlZmF1bHRTb3J0T3JkZXIgPSAtMTtcblxuICAgIG1pY3JvU2VydmljZXMgPSBbXTtcblxuICAgIHNlbGVjdGVkTWljcm9TZXJ2aWNlOiBzdHJpbmc7XG5cbiAgICBhY3RpdmVPYmplY3Q6IEFob3lFdmVudDtcblxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nO1xuXG4gICAgZW5kRGF0ZTogc3RyaW5nO1xuXG4gICAgc2VsZWN0ZWRPcHRpb246IFNlbGVjdEl0ZW1bXSA9IFtdO1xuXG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGZpbHRlclNvdXJjZTogc3RyaW5nW107XG5cbiAgICBjcml0ZXJpYSA9IFtdO1xuXG4gICAgc2VhcmNoT3B0aW9ucyA9IFtdO1xuXG4gICAgcHJpdmF0ZSBzY3JvbGxMaXN0ZW5lcjtcbiAgICBwcml2YXRlIHVzZXJQYWdlID0gMTtcbiAgICBwcml2YXRlIHN0b3BMb2FkaW5nID0gZmFsc2U7XG5cbiAgICB1c2VyTG9hZGluZyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGFob3lTZXJ2aWNlOiBBaG95U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgYWRtaW5EYXRhU2VydmljZTogQWRtaW5EYXRhU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbj8uaWQ7XG4gICAgICAgIHRoaXMubWljcm9TZXJ2aWNlcyA9IEhlbHBlclNlcnZpY2UuZ2V0TWljcm9TZXJ2aWNlcyh0aGlzLmFwcENvbmZpZy5saW5rcyk7XG4gICAgICAgIHRoaXMubG9hZFVzZXIoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvLyBVc2Ugb25QYW5lbFNob3cgdG8gYXR0YWNoIHRoZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXJcbiAgICBvblBhbmVsU2hvdygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtdWx0aVNlbGVjdFBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAnLnAtbXVsdGlzZWxlY3QtaXRlbXMtd3JhcHBlcidcbiAgICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmIChtdWx0aVNlbGVjdFBhbmVsKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ011bHRpU2VsZWN0IHBhbmVsIGZvdW5kOicsIG11bHRpU2VsZWN0UGFuZWwpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsTGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlTZWxlY3RQYW5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbExpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lciA9IHRoaXMub25TY3JvbGwuYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICBtdWx0aVNlbGVjdFBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsTGlzdGVuZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ011bHRpU2VsZWN0IHBhbmVsIG5vdCBmb3VuZC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgb25TY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChlbGVtZW50LnNjcm9sbEhlaWdodCAtIGVsZW1lbnQuc2Nyb2xsVG9wID09PSBlbGVtZW50LmNsaWVudEhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkVXNlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25MYXp5TG9hZChldmVudDogTGF6eUxvYWRFdmVudCkge1xuICAgICAgICBjb25zdCBwYWdlRGV0YWlscyA9IEhlbHBlclNlcnZpY2Uub25UYWJsZUxhenlMb2FkKGV2ZW50KTtcbiAgICAgICAgdGhpcy5wYWdlID0gcGFnZURldGFpbHMucGFnZTtcbiAgICAgICAgdGhpcy5nZXRBaG95RXZlbnRzKHtcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFLFxuICAgICAgICAgICAgb3JkZXJfYnk6IHBhZ2VEZXRhaWxzLnNvcnRGaWVsZCxcbiAgICAgICAgICAgIG9yZGVyX2RpcmVjdGlvbjogcGFnZURldGFpbHMuc29ydE9yZGVyLFxuICAgICAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFRleHRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZFVzZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BMb2FkaW5nIHx8IHRoaXMudXNlclNlYXJjaFRleHQgIT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51c2VyTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuYWRtaW5EYXRhU2VydmljZVxuICAgICAgICAgICAgLmdldFVzZXJzKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogdGhpcy51c2VyUGFnZSxcbiAgICAgICAgICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaDogdGhpcy51c2VyU2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9wTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hPcHRpb25zID0gWy4uLnRoaXMuc2VhcmNoT3B0aW9ucywgLi4ucmVzdWx0XTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUGFnZSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWhveUV2ZW50cyhwYWdpbmc6IFBhZ2luZykge1xuICAgICAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIGxldCBzZXJ2aWNlID0gdGhpcy5taWNyb1NlcnZpY2VzLmZpbmQoeCA9PiB4Lm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRNaWNyb1NlcnZpY2UpO1xuICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICAgIHNlcnZpY2UgPSB0aGlzLm1pY3JvU2VydmljZXMuZmluZCh4ID0+IHgudmFsdWUgPT09IHRoaXMuYXBwQ29uZmlnLmxpbmtzPy5tYWluX2FwaSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0RGF0ZSAmJiB0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgICAgIG9ialsnc3RhcnRfYXQnXSA9IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgb2JqWydlbmRfYXQnXSA9IG5ldyBEYXRlKHRoaXMuZW5kRGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG9ialsndXNlcl9pZHMnXSA9IHRoaXMuc2VsZWN0ZWRPcHRpb24udG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWhveVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRBaG95RXZlbnRzKG9iaiwgc2VydmljZSwgcGFnaW5nKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEFob3lFdmVudFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRhdGVTZWxlY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0RGF0ZSAmJiB0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWhveUV2ZW50cyh7XG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VydmljZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaWNyb1NlcnZpY2UgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5nZXRBaG95RXZlbnRzKHtcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldmVhbFByb3AobW9kYWwsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlT2JqZWN0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHsgY2VudGVyZWQ6IHRydWUsIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJyB9KTtcbiAgICB9XG5cbiAgICBvblNlYXJjaE9wdGlvbkNoYW5nZSgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jcml0ZXJpYSA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gJGV2ZW50LnZhbHVlO1xuICAgICAgICB0aGlzLmdldEFob3lFdmVudHMoe1xuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlRmlsdGVyKCRldmVudCkge1xuICAgICAgICB0aGlzLnVzZXJTZWFyY2hUZXh0ID0gJGV2ZW50LmZpbHRlcjtcbiAgICAgICAgdGhpcy5zdG9wTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVzZXJQYWdlID0gMjtcbiAgICAgICAgdGhpcy5hZG1pbkRhdGFTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0VXNlcnMoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2g6IHRoaXMudXNlclNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hPcHRpb25zID0gcmVzdWx0O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXIgb24gY29tcG9uZW50IGRlc3RydWN0aW9uXG4gICAgICAgIGNvbnN0IG11bHRpU2VsZWN0UGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgJy5wLW11bHRpc2VsZWN0LWl0ZW1zLXdyYXBwZXInXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKG11bHRpU2VsZWN0UGFuZWwgJiYgdGhpcy5zY3JvbGxMaXN0ZW5lcikge1xuICAgICAgICAgICAgbXVsdGlTZWxlY3RQYW5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbExpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgPGgyIGNsYXNzPVwiY2FyZC10aXRsZSBwLTAgZmxvYXQtc3RhcnRcIj5BaG95IEV2ZW50czwvaDI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICpuZ0lmPVwiIWlzTG9hZGVkXCI+XG4gIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInByaW1lbmctZGF0YXRhYmxlLWNvbnRhaW5lciBtdC0wXCIgW2NsYXNzLmhpZGVUYWJsZV09XCJkYXRhLnVuZmlsdGVyZWRfY291bnQgPT09IDBcIj5cbiAgPGRpdiBjbGFzcz1cInVzZXItbWFuYWdlbWVudC10YWJsZSB0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgPHAtdGFibGUgI2R0XG4gICAgICBbdmFsdWVdPVwiZGF0YS5ldmVudHNcIlxuICAgICAgW3BhZ2luYXRvcl09XCJkYXRhLm9iamVjdF9jb3VudCAhPT0gMFwiXG4gICAgICBbbGF6eV09XCJ0cnVlXCJcbiAgICAgIFtyb3dzXT1cIlBBR0VfU0laRVwiXG4gICAgICBbdG90YWxSZWNvcmRzXT1cImRhdGEub2JqZWN0X2NvdW50XCJcbiAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgW3NvcnRGaWVsZF09XCJkZWZhdWx0U29ydEZpZWxkXCJcbiAgICAgIFtzb3J0T3JkZXJdPVwiZGVmYXVsdFNvcnRPcmRlclwiXG4gICAgICBbZmlsdGVyRGVsYXldPVwiMTAwMFwiXG4gICAgICAob25MYXp5TG9hZCk9XCJvbkxhenlMb2FkKCRldmVudClcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2ICpyYmFjQWxsb3c9XCInU3VwZXJBZG1pbidcIlxuICAgICAgICAgICAgY2xhc3M9XCJjb2wtc20tMiBtYi0yIG1iLW1kLTBcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJvblNlcnZpY2VDaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLXNlbGVjdFwiPlxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1pY3JvU2VydmljZXNcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLm5hbWVcIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cbiAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0ICNtdWx0aVNlbGVjdG9yIFtvcHRpb25zXT1cInNlYXJjaE9wdGlvbnNcIlxuICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25TZWFyY2hPcHRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGJ5IHVzZXJzXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJTb3VyY2VcIlxuICAgICAgICAgICAgICBbc2hvd1RvZ2dsZUFsbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgICAgIFtsYXp5XT1cInRydWVcIlxuICAgICAgICAgICAgICAoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgICAob25QYW5lbFNob3cpPVwib25QYW5lbFNob3coKVwiXG4gICAgICAgICAgICAgIFtsb2FkaW5nXT1cInVzZXJMb2FkaW5nXCJcbiAgICAgICAgICAgICAgKG9uRmlsdGVyKT1cImhhbmRsZUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMlwiPlxuICAgICAgICAgICAgPHAtY2FsZW5kYXIgW3Nob3dUaW1lXT1cInRydWVcIlxuICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgKG9uU2VsZWN0KT1cIm9uRGF0ZVNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTdGFydCBEYXRlJ1wiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3RhcnREYXRlXCJcbiAgICAgICAgICAgICAgW3Nob3dJY29uXT1cInRydWVcIlxuICAgICAgICAgICAgICBkYXRlRm9ybWF0PVwiZGQtTS15eVwiPlxuICAgICAgICAgICAgPC9wLWNhbGVuZGFyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMlwiPlxuICAgICAgICAgICAgPHAtY2FsZW5kYXIgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgIFtzaG93VGltZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG9uU2VsZWN0KT1cIm9uRGF0ZVNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidFbmQgRGF0ZSdcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVuZERhdGVcIlxuICAgICAgICAgICAgICBbc2hvd0ljb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQ9XCJkZC1NLXl5XCI+XG4gICAgICAgICAgICA8L3AtY2FsZW5kYXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCBtdC0yIG1lLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgIHNpemU9XCI1MFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIEV2ZW50cy4uLlwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJkdC5maWx0ZXJHbG9iYWwoJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2NvbnRhaW5zJylcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm13LTkwIGZvcm0tY29udHJvbCBiZy13aGl0ZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwibmFtZVwiPlxuICAgICAgICAgICAge3sgJ0xhYmVsLk5hbWUnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cIm5hbWVcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVHJhY2tpbmcuUHJvcGVydGllcycgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwidGltZVwiPlxuICAgICAgICAgICAge3sgJ0FkbWluLlRyYWNraW5nLlRpbWUnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cInRpbWVcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cInVzZXJfaWRcIj5cbiAgICAgICAgICAgIHt7ICdBZG1pbi5UcmFja2luZy5Vc2VyJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJ1c2VyX2lkXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgICBsZXQtZXZlbnQ+XG4gICAgICAgIDx0ciBbY2xhc3MuZC1ub25lXT1cImxvYWRpbmdcIj5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiTmFtZVwiPnt7IGV2ZW50Lm5hbWUgfX08L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJQcm9wZXJ0aWVzXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIihldmVudD8ucHJvcGVydGllcyB8IGpzb24pICE9PSAne30nXCIgY2xhc3M9XCJiYWRnZSBiZy1pbmZvIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJldmVhbFByb3Aob2JqTW9kYWwsZXZlbnQ/LnByb3BlcnRpZXMpXCI+UmV2ZWFsIHByb3BlcnRpZXM8L3NwYW4+PC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiVGltZVwiPnt7IGV2ZW50LnRpbWUgfX08L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJVc2VyXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImV2ZW50Py51c2VyX2lkXCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZXZlbnQ/LnVzZXJcIj48YSBbcm91dGVyTGlua109XCJbJy9tZW1iZXJzJywgZXZlbnQ/LnVzZXI/LnNsdWddXCI+e3sgZXZlbnQ/LnVzZXI/LmZpcnN0X25hbWUgfX0ge3sgZXZlbnQ/LnVzZXI/Lmxhc3RfbmFtZSB9fTwvYT48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWV2ZW50Py51c2VyXCI+e3sgZXZlbnQ/LnVzZXJfaWQgfX08L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLXRhYmxlPlxuICAgIDxkaXYgKm5nSWY9XCIgZGF0YS5vYmplY3RfY291bnQgPT09IDAgJiYgZGF0YS51bmZpbHRlcmVkX2NvdW50ICE9PSAwXCI+XG4gICAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInU2VhcmNoLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCIgW2Rlc2NyaXB0aW9uXT1cIidTZWFyY2guTm9EYXRhRGVzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCI+XG4gICAgICA8L3B3LW5vLWRhdGE+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gKm5nSWY9XCJkYXRhLm9iamVjdF9jb3VudCAhPT0gMFwiIGNsYXNzPVwidG90YWwtcmVjb3Jkcy1jb3VudFwiPnt7ICdMYWJlbC5Ub3RhbCcgfCB0cmFuc2xvY28gfX06IHt7ICBkYXRhLm9iamVjdF9jb3VudCB9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiBkYXRhLnVuZmlsdGVyZWRfY291bnQgPT09IDBcIj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0FkbWluLkFob3kuTm9FdmVudHNEYXRhTWVzc2FnZScgfCB0cmFuc2xvY29cIj4gPC9wdy1uby1kYXRhPlxuPC9kaXY+XG48IS0tIE9iamVjdCBNb2RhbCAtLT5cbjxuZy10ZW1wbGF0ZSAjb2JqTW9kYWxcbiAgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj57eyAnQWRtaW4uVHJhY2tpbmcuUHJvcGVydGllcycgfCB0cmFuc2xvY28gfX08L2g0PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImJ0bi1jbG9zZSBmbG9hdC1lbmRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cblxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlT2JqZWN0XCI+XG4gICAgICA8bmd4LWpzb24tdmlld2VyIFtqc29uXT1cImFjdGl2ZU9iamVjdFwiXG4gICAgICAgIFtleHBhbmRlZF09XCJmYWxzZVwiPjwvbmd4LWpzb24tdmlld2VyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|