@posiwise/admin-module 0.0.180 → 0.0.181

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/fesm2022/posiwise-admin-module.mjs +463 -441
  2. package/fesm2022/posiwise-admin-module.mjs.map +1 -1
  3. package/lib/components/resources/resources-admin-details/resources-admin-details.component.d.ts +1 -1
  4. package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +1 -1
  5. package/package.json +4 -6
  6. package/esm2022/index.mjs +0 -87
  7. package/esm2022/lib/admin-guard.service.mjs +0 -44
  8. package/esm2022/lib/admin-module.routing.mjs +0 -919
  9. package/esm2022/lib/admin.module.mjs +0 -485
  10. package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +0 -93
  11. package/esm2022/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +0 -98
  12. package/esm2022/lib/components/TOS/terms-of-service-tabs/terms-of-service-tabs.component.mjs +0 -26
  13. package/esm2022/lib/components/config/global-config-details/global-config-details.component.mjs +0 -75
  14. package/esm2022/lib/components/config/global-config-list/global-config-list.component.mjs +0 -92
  15. package/esm2022/lib/components/config/global-config-tabs/global-config-tabs.component.mjs +0 -24
  16. package/esm2022/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +0 -101
  17. package/esm2022/lib/components/contact-us/contact-us-tabs/contact-us-tabs.component.mjs +0 -25
  18. package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +0 -88
  19. package/esm2022/lib/components/credentials/credentials-details/credentials-details.component.mjs +0 -79
  20. package/esm2022/lib/components/credentials/credentials-tab/credentials-tab.component.mjs +0 -31
  21. package/esm2022/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +0 -92
  22. package/esm2022/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.mjs +0 -102
  23. package/esm2022/lib/components/domain-config/domain-config-details/base-domain-config.component.mjs +0 -88
  24. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +0 -731
  25. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.mjs +0 -123
  26. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-details.component.mjs +0 -57
  27. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +0 -91
  28. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +0 -144
  29. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +0 -30
  30. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +0 -31
  31. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +0 -30
  32. package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +0 -98
  33. package/esm2022/lib/components/domain-config/domain-config-tabs/domain-config-tabs.component.mjs +0 -25
  34. package/esm2022/lib/components/faqs/add-faq/add-faq.component.mjs +0 -218
  35. package/esm2022/lib/components/faqs/edit-faq/edit-faq.component.mjs +0 -204
  36. package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +0 -277
  37. package/esm2022/lib/components/faqs/faqs-tabs/faqs-tabs.component.mjs +0 -25
  38. package/esm2022/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.mjs +0 -84
  39. package/esm2022/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +0 -98
  40. package/esm2022/lib/components/generic/generic-insight/generic-insight.component.mjs +0 -12
  41. package/esm2022/lib/components/generic/generic-misc/generic-misc.component.mjs +0 -127
  42. package/esm2022/lib/components/generic/generic-tabs/generic-tabs.component.mjs +0 -31
  43. package/esm2022/lib/components/incidents/add-edit-incident/add-edit-incident.component.mjs +0 -152
  44. package/esm2022/lib/components/incidents/incidents-list/incidents-list.component.mjs +0 -118
  45. package/esm2022/lib/components/incidents/incidents-tabs/incidents-tabs.component.mjs +0 -25
  46. package/esm2022/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +0 -111
  47. package/esm2022/lib/components/login-notifications/login-notification-tabs/login-notification-tabs.component.mjs +0 -25
  48. package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +0 -97
  49. package/esm2022/lib/components/mailer/mailer-details/mailer-details.component.mjs +0 -115
  50. package/esm2022/lib/components/mailer/mailer-list/mailer-list.component.mjs +0 -113
  51. package/esm2022/lib/components/mailer/mailer-tabs/mailer-tabs.component.mjs +0 -24
  52. package/esm2022/lib/components/newsletters/newsletter-details/newsletter-details.component.mjs +0 -87
  53. package/esm2022/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +0 -284
  54. package/esm2022/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +0 -76
  55. package/esm2022/lib/components/newsletters/newsletters-insight/newsletters-insight.component.mjs +0 -53
  56. package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items-view-details/newsletters-items-view-details.component.mjs +0 -59
  57. package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +0 -179
  58. package/esm2022/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +0 -103
  59. package/esm2022/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.mjs +0 -38
  60. package/esm2022/lib/components/permissions/permissions-details/permissions-details.component.mjs +0 -109
  61. package/esm2022/lib/components/permissions/permissions-list/permissions-list.component.mjs +0 -87
  62. package/esm2022/lib/components/permissions/permissions-tabs/permissions-tabs.component.mjs +0 -31
  63. package/esm2022/lib/components/permissions/role-details/role-details.component.mjs +0 -140
  64. package/esm2022/lib/components/permissions/roles-list/roles-list.component.mjs +0 -93
  65. package/esm2022/lib/components/products/product-details/product-details.component.mjs +0 -370
  66. package/esm2022/lib/components/products/products-insight/products-insight.component.mjs +0 -52
  67. package/esm2022/lib/components/products/products-list/products-list.component.mjs +0 -144
  68. package/esm2022/lib/components/products/products-tabs/products-tabs.component.mjs +0 -28
  69. package/esm2022/lib/components/products/users-list-for-product/users-list-for-product.component.mjs +0 -55
  70. package/esm2022/lib/components/resources/resources-admin-details/resources-admin-details.component.mjs +0 -380
  71. package/esm2022/lib/components/resources/resources-admin-tabs/resources-admin-tabs.component.mjs +0 -33
  72. package/esm2022/lib/components/resources/resources-admin-tabs/resources-index/resources-index.component.mjs +0 -154
  73. package/esm2022/lib/components/resources/resources-admin-tabs/resources-insight/resources-insight.component.mjs +0 -54
  74. package/esm2022/lib/components/resources/resources-lists-insight/resources-lists-insight.component.mjs +0 -61
  75. package/esm2022/lib/components/subscriptions/subscription-agents/subscription-agents.component.mjs +0 -120
  76. package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +0 -135
  77. package/esm2022/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +0 -210
  78. package/esm2022/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +0 -225
  79. package/esm2022/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +0 -66
  80. package/esm2022/lib/components/subscriptions/subscription-users/add-members/add-members.component.mjs +0 -173
  81. package/esm2022/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +0 -215
  82. package/esm2022/lib/components/subscriptions/subscriptions-insight/base-subscription-insight.component.mjs +0 -47
  83. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-price/subscription-insight-average-price.component.mjs +0 -34
  84. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-user/subscription-insight-average-user.component.mjs +0 -34
  85. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-churn/subscription-insight-churn.component.mjs +0 -55
  86. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +0 -103
  87. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-product-session/subscription-insight-product-session.component.mjs +0 -34
  88. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.mjs +0 -55
  89. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-tabs/subscription-insight-tabs.component.mjs +0 -23
  90. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-user-session/subscription-insight-user-session.component.mjs +0 -34
  91. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.mjs +0 -55
  92. package/esm2022/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.mjs +0 -232
  93. package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +0 -311
  94. package/esm2022/lib/components/subscriptions/subscriptions-tabs/subscriptions-tabs.component.mjs +0 -35
  95. package/esm2022/lib/components/tags/tags-category/tags-category.component.mjs +0 -153
  96. package/esm2022/lib/components/tags/tags-details/tags-details.component.mjs +0 -153
  97. package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +0 -145
  98. package/esm2022/lib/components/tags/tags-tabs/tags-tabs.component.mjs +0 -32
  99. package/esm2022/lib/components/tips/tip-detail/tip-detail.component.mjs +0 -88
  100. package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +0 -49
  101. package/esm2022/lib/components/tips/tips-tabs/tips-tabs.component.mjs +0 -25
  102. package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +0 -216
  103. package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +0 -200
  104. package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +0 -198
  105. package/esm2022/lib/components/tracking/events/events.component.mjs +0 -198
  106. package/esm2022/lib/components/tracking/tracking-tabs/tracking-tabs.component.mjs +0 -49
  107. package/esm2022/lib/components/tracking/versions/versions.component.mjs +0 -208
  108. package/esm2022/lib/components/users/user-details/user-details.component.mjs +0 -167
  109. package/esm2022/lib/components/users/users-insight/users-insight.component.mjs +0 -53
  110. package/esm2022/lib/components/users/users-list/users-list.component.mjs +0 -338
  111. package/esm2022/lib/components/users/users-tabs/users-tabs.component.mjs +0 -32
  112. package/esm2022/lib/shared/interface/admin-module-shared.interface.mjs +0 -2
  113. package/esm2022/lib/shared/interface/api-response.interface.mjs +0 -2
  114. package/esm2022/lib/shared/interface/contact-us.interface.mjs +0 -2
  115. package/esm2022/lib/shared/interface/credential.interface.mjs +0 -2
  116. package/esm2022/lib/shared/interface/domain-config.interface.mjs +0 -2
  117. package/esm2022/lib/shared/interface/feedback-question.interface.mjs +0 -2
  118. package/esm2022/lib/shared/interface/global-config.interface.mjs +0 -2
  119. package/esm2022/lib/shared/interface/login-notification.interface.mjs +0 -2
  120. package/esm2022/lib/shared/interface/newsletter.interface.mjs +0 -2
  121. package/esm2022/lib/shared/interface/permission.interface.mjs +0 -2
  122. package/esm2022/lib/shared/interface/privacy-tos.interface.mjs +0 -2
  123. package/esm2022/lib/shared/interface/tip.interface.mjs +0 -2
  124. package/esm2022/lib/shared/interface/tracking.interface.mjs +0 -2
  125. package/esm2022/lib/shared/routers/routers.mjs +0 -40
  126. package/esm2022/posiwise-admin-module.mjs +0 -5
@@ -1,53 +0,0 @@
1
- import { Component, Injector } from '@angular/core';
2
- import { AdminService } from '@posiwise/admin-module-utils';
3
- import { AppBaseComponent } from '@posiwise/app-base-component';
4
- import { PermissionService } from '@posiwise/common-services';
5
- import { HelperService } from '@posiwise/helper-service';
6
- import { handleDateRangeSelection } from '@posiwise/utils';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@posiwise/admin-module-utils";
9
- import * as i2 from "angular-plotly.js";
10
- import * as i3 from "@angular/common";
11
- import * as i4 from "@posiwise/shared-components";
12
- import * as i5 from "primeng/progressspinner";
13
- export class NewsletterInsightComponent extends AppBaseComponent {
14
- constructor(adminService, injector) {
15
- super(injector);
16
- this.adminService = adminService;
17
- }
18
- ngOnInit() {
19
- this.subscriptionId = PermissionService.selectedSubscription?.id;
20
- this.dateRanges = HelperService.initializeDateRanges();
21
- this.selectedDateRange = '';
22
- this.getChartData();
23
- }
24
- getChartData() {
25
- this.isLoading = true;
26
- this.adminService
27
- .getNewsletterInsight(this.subscriptionId, this.selectedDateRange?.startDate
28
- ? this.selectedDateRange.startDate.format('YYYY-MM-DD')
29
- : '', this.selectedDateRange?.endDate
30
- ? this.selectedDateRange.endDate.format('YYYY-MM-DD')
31
- : '')
32
- .subscribe(response => {
33
- this.graph = response;
34
- })
35
- .add(() => {
36
- this.isLoading = false;
37
- });
38
- }
39
- onDateRangeSelect(event) {
40
- this.selectedDateRange = handleDateRangeSelection(event, this.selectedDateRange);
41
- this.getChartData();
42
- }
43
- ngOnDestroy() {
44
- super.ngOnDestroy();
45
- }
46
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NewsletterInsightComponent, deps: [{ token: i1.AdminService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
47
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: NewsletterInsightComponent, selector: "pw-newsletter-insight", usesInheritance: true, ngImport: i0, template: "<div class=\"title\">\n <h2 class=\"card-title p-0\">Newsletters Insight</h2>\n</div>\n<!-- select date -->\n<app-date-picker\n [selectedDateRange]=\"selectedDateRange\"\n [dateRanges]=\"dateRanges\"\n (dateRangeChange)=\"onDateRangeSelect($event)\">\n</app-date-picker>\n<!-- end -->\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"my-3\">\n <ng-template [ngIf]=\"graph\">\n <plotly-plot [data]=\"graph?.data\"\n [config]=\"graph?.config\"\n [layout]=\"graph?.layout\" [useResizeHandler]=\"graph? true : false\"></plotly-plot>\n </ng-template>\n</div>\n\n\n\n", styles: [".title{height:30px}\n"], dependencies: [{ kind: "component", type: i2.PlotlyComponent, selector: "plotly-plot", inputs: ["data", "layout", "config", "frames", "style", "theme", "divId", "revision", "className", "debug", "useResizeHandler", "updateOnLayoutChange", "updateOnDataChange", "updateOnlyWithRevision"], outputs: ["initialized", "update", "purge", "error", "afterExport", "afterPlot", "animated", "animatingFrame", "animationInterrupted", "autoSize", "beforeExport", "beforeHover", "buttonClicked", "click", "plotlyClick", "clickAnnotation", "deselect", "doubleClick", "framework", "hover", "legendClick", "legendDoubleClick", "react", "relayout", "relayouting", "restyle", "redraw", "selected", "selecting", "sliderChange", "sliderEnd", "sliderStart", "sunburstclick", "transitioning", "transitionInterrupted", "unhover", "treemapclick", "webglcontextlost"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DateRangePickerComponent, selector: "app-date-picker", inputs: ["selectedDateRange", "dateRanges"], outputs: ["dateRangeChange"] }, { kind: "component", type: i5.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }] }); }
48
- }
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NewsletterInsightComponent, decorators: [{
50
- type: Component,
51
- args: [{ selector: 'pw-newsletter-insight', template: "<div class=\"title\">\n <h2 class=\"card-title p-0\">Newsletters Insight</h2>\n</div>\n<!-- select date -->\n<app-date-picker\n [selectedDateRange]=\"selectedDateRange\"\n [dateRanges]=\"dateRanges\"\n (dateRangeChange)=\"onDateRangeSelect($event)\">\n</app-date-picker>\n<!-- end -->\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"my-3\">\n <ng-template [ngIf]=\"graph\">\n <plotly-plot [data]=\"graph?.data\"\n [config]=\"graph?.config\"\n [layout]=\"graph?.layout\" [useResizeHandler]=\"graph? true : false\"></plotly-plot>\n </ng-template>\n</div>\n\n\n\n", styles: [".title{height:30px}\n"] }]
52
- }], ctorParameters: () => [{ type: i1.AdminService }, { type: i0.Injector }] });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3c2xldHRlcnMtaW5zaWdodC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvbmV3c2xldHRlcnMvbmV3c2xldHRlcnMtaW5zaWdodC9uZXdzbGV0dGVycy1pbnNpZ2h0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9uZXdzbGV0dGVycy9uZXdzbGV0dGVycy1pbnNpZ2h0L25ld3NsZXR0ZXJzLWluc2lnaHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7QUFPM0QsTUFBTSxPQUFPLDBCQUEyQixTQUFRLGdCQUFnQjtJQVc1RCxZQUNxQixZQUEwQixFQUMzQyxRQUFrQjtRQUVsQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFIQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUkvQyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLFlBQVk7UUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVk7YUFDWixvQkFBb0IsQ0FDakIsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVM7WUFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUN2RCxDQUFDLENBQUMsRUFBRSxFQUNSLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPO1lBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFDckQsQ0FBQyxDQUFDLEVBQUUsQ0FDWDthQUNBLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUMxQixDQUFDLENBQUM7YUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBMkQ7UUFDekUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVRLFdBQVc7UUFDaEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBcERRLDBCQUEwQjttR0FBMUIsMEJBQTBCLG9GQ2R2Qyx3cUJBd0JBOzs0RkRWYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0ksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgUGxvdGx5IH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5pbXBvcnQgeyBoYW5kbGVEYXRlUmFuZ2VTZWxlY3Rpb24gfSBmcm9tICdAcG9zaXdpc2UvdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LW5ld3NsZXR0ZXItaW5zaWdodCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ld3NsZXR0ZXJzLWluc2lnaHQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25ld3NsZXR0ZXJzLWluc2lnaHQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOZXdzbGV0dGVySW5zaWdodENvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgZ3JhcGg6IFBsb3RseS5GaWd1cmU7XG5cbiAgICBzZWxlY3RlZERhdGVSYW5nZTtcblxuICAgIGRhdGVSYW5nZXM7XG5cbiAgICBzdWJzY3JpcHRpb25JZDtcblxuICAgIGlzTG9hZGluZzogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFkbWluU2VydmljZTogQWRtaW5TZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICB0aGlzLmRhdGVSYW5nZXMgPSBIZWxwZXJTZXJ2aWNlLmluaXRpYWxpemVEYXRlUmFuZ2VzKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UgPSAnJztcbiAgICAgICAgdGhpcy5nZXRDaGFydERhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENoYXJ0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLmdldE5ld3NsZXR0ZXJJbnNpZ2h0KFxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZT8uc3RhcnREYXRlXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJylcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlPy5lbmREYXRlXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG4gICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGggPSByZXNwb25zZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25EYXRlUmFuZ2VTZWxlY3QoZXZlbnQ6IHsgc3RhcnREYXRlOiBtb21lbnQuTW9tZW50OyBlbmREYXRlOiBtb21lbnQuTW9tZW50IH0pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSA9IGhhbmRsZURhdGVSYW5nZVNlbGVjdGlvbihldmVudCwgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSk7XG4gICAgICAgIHRoaXMuZ2V0Q2hhcnREYXRhKCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gIDxoMiBjbGFzcz1cImNhcmQtdGl0bGUgcC0wXCI+TmV3c2xldHRlcnMgSW5zaWdodDwvaDI+XG48L2Rpdj5cbjwhLS0gc2VsZWN0IGRhdGUgLS0+XG48YXBwLWRhdGUtcGlja2VyXG4gIFtzZWxlY3RlZERhdGVSYW5nZV09XCJzZWxlY3RlZERhdGVSYW5nZVwiXG4gIFtkYXRlUmFuZ2VzXT1cImRhdGVSYW5nZXNcIlxuICAoZGF0ZVJhbmdlQ2hhbmdlKT1cIm9uRGF0ZVJhbmdlU2VsZWN0KCRldmVudClcIj5cbjwvYXBwLWRhdGUtcGlja2VyPlxuPCEtLSBlbmQgLS0+XG48ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm15LTNcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImdyYXBoXCI+XG4gICAgPHBsb3RseS1wbG90IFtkYXRhXT1cImdyYXBoPy5kYXRhXCJcbiAgICAgIFtjb25maWddPVwiZ3JhcGg/LmNvbmZpZ1wiXG4gICAgICBbbGF5b3V0XT1cImdyYXBoPy5sYXlvdXRcIiBbdXNlUmVzaXplSGFuZGxlcl09XCJncmFwaD8gdHJ1ZSA6IGZhbHNlXCI+PC9wbG90bHktcGxvdD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG5cblxuIl19
@@ -1,59 +0,0 @@
1
- import { Component, Injector } from '@angular/core';
2
- import { DomSanitizer } from '@angular/platform-browser';
3
- import { AdminService } from '@posiwise/admin-module-utils';
4
- import { AppBaseComponent } from '@posiwise/app-base-component';
5
- import { PermissionService } from '@posiwise/common-services';
6
- import { HelperService } from '@posiwise/helper-service';
7
- import { ROUTERS } from '../../../../shared/routers/routers';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/platform-browser";
10
- import * as i2 from "@posiwise/admin-module-utils";
11
- import * as i3 from "@angular/common";
12
- import * as i4 from "primeng/progressspinner";
13
- export class NewsLetterItemViewComponent extends AppBaseComponent {
14
- constructor(injector, sanitizer, adminService) {
15
- super(injector);
16
- this.sanitizer = sanitizer;
17
- this.adminService = adminService;
18
- this.routers = ROUTERS;
19
- this.isLoaded = false;
20
- }
21
- ngOnInit() {
22
- this.route.params.subscribe(data => {
23
- this.id = Number(data['id']);
24
- this.subscriptionId = PermissionService.selectedSubscription?.id;
25
- if (this.id) {
26
- this.getNewsLetterDetails();
27
- }
28
- });
29
- }
30
- /**subscriptionId */
31
- getNewsLetterDetails() {
32
- this.isLoaded = false;
33
- this.adminService
34
- .getNewsletterItemById(Number(this.id), this.subscriptionId)
35
- .subscribe(response => {
36
- let blogBody;
37
- if (response?.body) {
38
- blogBody = HelperService.sanitizeQuillBody(response.body, this.sanitizer);
39
- }
40
- this.communicationDetails = { ...response, body: blogBody };
41
- })
42
- .add(() => {
43
- this.isLoaded = true;
44
- });
45
- }
46
- onBackNavigation() {
47
- this.router.navigate([`${this.routers.newsletterItemView}`]);
48
- }
49
- ngOnDestroy() {
50
- super.ngOnDestroy();
51
- }
52
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NewsLetterItemViewComponent, deps: [{ token: i0.Injector }, { token: i1.DomSanitizer }, { token: i2.AdminService }], target: i0.ɵɵFactoryTarget.Component }); }
53
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: NewsLetterItemViewComponent, selector: "newsletters-items-view-detail", usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 d-flex\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"onBackNavigation()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h2 class=\"mt-2 mb-0\">Newsletter</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 *ngIf=\"isLoaded\">\n <div class=\"content-quill-wrapper container-fluid pw-tab overflow-hidden mt-3\" *ngIf=\"communicationDetails\">\n <div class=\"pb-0\">\n <div class=\"card-body p-4\">\n <div class=\"row mb-3\">\n <div class=\"col-12 d-flex flex-wrap justify-content-between align-items-center mb-md-2\">\n <div class=\"d-flex flex-wrap mb-3 mb-md-0\">\n <span [ngClass]=\"communicationDetails?.is_pushed ? 'badge bg-success' : 'badge bg-danger'\" class=\"me-2 mb-2 mb-md-0\">\n {{ communicationDetails?.is_pushed ? 'Pushed' : 'Not Pushed' }}\n </span>\n <span [ngClass]=\"communicationDetails?.is_sent? 'badge bg-success' : 'badge bg-danger'\" class=\"me-2 mb-2 mb-md-0\">\n {{ communicationDetails?.is_sent ? 'Sent' : 'Not Sent' }}\n </span>\n </div>\n <div class=\"d-flex flex-wrap mb-3 mb-md-0\">\n <span class=\"badge bg-blue-grey mb-2 me-2 mb-md-0\">{{ 'Send At (' + (communicationDetails?.send_at | date: 'dd-MMM-YYYY') + ')' }}</span>\n <span class=\"badge bg-grey mb-2 mb-md-0\">{{ 'Send Until (' + (communicationDetails?.send_until | date: 'dd-MMM-YYYY') + ')' }}</span>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 mb-3 ms-2\">\n <span><i class=\"fas fa-map-marker-alt\"></i> <span class=\"ms-2\">{{ communicationDetails?.location || 'Not set' }}</span></span>\n </div>\n <div class=\"col-12 mb-3 ms-2\">\n <h1>{{ communicationDetails?.title }}</h1>\n </div>\n <div class=\"col-12 ms-2\">\n <div class=\"ql-container ql-snow body-quill\">\n <div class=\"ql-editor\"\n [innerHTML]=\"communicationDetails?.body\">\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n</div>\n", styles: [".badge-success,.badge-danger{padding:.5rem 1rem;border:1px solid black;font-size:1rem;display:inline-block;text-align:center}.badge-success{background-color:green;color:#fff}.badge-danger{background-color:red;color:#fff}.date-span{padding:.5rem 1rem;font-size:1rem;border:1px solid black;display:inline-block;text-align:center}.light-gray{background-color:#d3d3d3;color:#fff}.gray{background-color:gray;color:#fff}.card-body{padding:1.5rem}h4,h5{font-weight:700;margin-bottom:.5rem}p{margin-bottom:1rem}.d-flex{display:flex;align-items:center}.me-3{margin-right:1rem}.container-fluid{padding:0}.mb-3{margin-bottom:1rem}.mb-2{margin-bottom:.5rem}.justify-content-between{justify-content:space-between}.align-items-center{align-items:center}.button-width{width:100px}.ql-container{resize:none!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] }); }
54
- }
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NewsLetterItemViewComponent, decorators: [{
56
- type: Component,
57
- args: [{ selector: 'newsletters-items-view-detail', template: "<div class=\"row\">\n <div class=\"col-12 d-flex\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"onBackNavigation()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h2 class=\"mt-2 mb-0\">Newsletter</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 *ngIf=\"isLoaded\">\n <div class=\"content-quill-wrapper container-fluid pw-tab overflow-hidden mt-3\" *ngIf=\"communicationDetails\">\n <div class=\"pb-0\">\n <div class=\"card-body p-4\">\n <div class=\"row mb-3\">\n <div class=\"col-12 d-flex flex-wrap justify-content-between align-items-center mb-md-2\">\n <div class=\"d-flex flex-wrap mb-3 mb-md-0\">\n <span [ngClass]=\"communicationDetails?.is_pushed ? 'badge bg-success' : 'badge bg-danger'\" class=\"me-2 mb-2 mb-md-0\">\n {{ communicationDetails?.is_pushed ? 'Pushed' : 'Not Pushed' }}\n </span>\n <span [ngClass]=\"communicationDetails?.is_sent? 'badge bg-success' : 'badge bg-danger'\" class=\"me-2 mb-2 mb-md-0\">\n {{ communicationDetails?.is_sent ? 'Sent' : 'Not Sent' }}\n </span>\n </div>\n <div class=\"d-flex flex-wrap mb-3 mb-md-0\">\n <span class=\"badge bg-blue-grey mb-2 me-2 mb-md-0\">{{ 'Send At (' + (communicationDetails?.send_at | date: 'dd-MMM-YYYY') + ')' }}</span>\n <span class=\"badge bg-grey mb-2 mb-md-0\">{{ 'Send Until (' + (communicationDetails?.send_until | date: 'dd-MMM-YYYY') + ')' }}</span>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 mb-3 ms-2\">\n <span><i class=\"fas fa-map-marker-alt\"></i> <span class=\"ms-2\">{{ communicationDetails?.location || 'Not set' }}</span></span>\n </div>\n <div class=\"col-12 mb-3 ms-2\">\n <h1>{{ communicationDetails?.title }}</h1>\n </div>\n <div class=\"col-12 ms-2\">\n <div class=\"ql-container ql-snow body-quill\">\n <div class=\"ql-editor\"\n [innerHTML]=\"communicationDetails?.body\">\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n</div>\n", styles: [".badge-success,.badge-danger{padding:.5rem 1rem;border:1px solid black;font-size:1rem;display:inline-block;text-align:center}.badge-success{background-color:green;color:#fff}.badge-danger{background-color:red;color:#fff}.date-span{padding:.5rem 1rem;font-size:1rem;border:1px solid black;display:inline-block;text-align:center}.light-gray{background-color:#d3d3d3;color:#fff}.gray{background-color:gray;color:#fff}.card-body{padding:1.5rem}h4,h5{font-weight:700;margin-bottom:.5rem}p{margin-bottom:1rem}.d-flex{display:flex;align-items:center}.me-3{margin-right:1rem}.container-fluid{padding:0}.mb-3{margin-bottom:1rem}.mb-2{margin-bottom:.5rem}.justify-content-between{justify-content:space-between}.align-items-center{align-items:center}.button-width{width:100px}.ql-container{resize:none!important}\n"] }]
58
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.DomSanitizer }, { type: i2.AdminService }] });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3c2xldHRlcnMtaXRlbXMtdmlldy1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9uZXdzbGV0dGVycy9uZXdzbGV0dGVycy1pdGVtcy9uZXdzbGV0dGVycy1pdGVtcy12aWV3LWRldGFpbHMvbmV3c2xldHRlcnMtaXRlbXMtdmlldy1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9uZXdzbGV0dGVycy9uZXdzbGV0dGVycy1pdGVtcy9uZXdzbGV0dGVycy1pdGVtcy12aWV3LWRldGFpbHMvbmV3c2xldHRlcnMtaXRlbXMtdmlldy1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7OztBQU83RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsZ0JBQWdCO0lBYzdELFlBQ0ksUUFBa0IsRUFDRCxTQUF1QixFQUN2QixZQUEwQjtRQUUzQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFIQyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBZC9DLFlBQU8sR0FBRyxPQUFPLENBQUM7UUFFbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztJQWVqQixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztZQUNqRSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNoQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0Qsb0JBQW9CO0lBQ2Isb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZO2FBQ1oscUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO2FBQzNELFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsQixJQUFJLFFBQVEsQ0FBQztZQUNiLElBQUksUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUNqQixRQUFRLEdBQUcsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlFLENBQUM7WUFDRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDaEUsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDUSxXQUFXO1FBQ2hCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOytHQXJEUSwyQkFBMkI7bUdBQTNCLDJCQUEyQiw0RkNmeEMscTNFQW9EQTs7NEZEckNhLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDSSwrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmltcG9ydCB7IEFkbWluU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9hZG1pbi1tb2R1bGUtdXRpbHMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuXG5pbXBvcnQgeyBST1VURVJTIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3JvdXRlcnMvcm91dGVycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmV3c2xldHRlcnMtaXRlbXMtdmlldy1kZXRhaWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZXdzbGV0dGVycy1pdGVtcy12aWV3LWRldGFpbHMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25ld3NsZXR0ZXJzLWl0ZW1zLXZpZXctZGV0YWlscy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5ld3NMZXR0ZXJJdGVtVmlld0NvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgaWQ6IG51bWJlcjtcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIGNvbW11bmljYXRpb25EZXRhaWxzO1xuICAgIGRhdGE7XG5cbiAgICBzdWJzY3JpcHRpb25JZDogbnVtYmVyO1xuXG4gICAgaXNMb2FkaW5nOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhZG1pblNlcnZpY2U6IEFkbWluU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBOdW1iZXIoZGF0YVsnaWQnXSk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldE5ld3NMZXR0ZXJEZXRhaWxzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipzdWJzY3JpcHRpb25JZCAqL1xuICAgIHB1YmxpYyBnZXROZXdzTGV0dGVyRGV0YWlscygpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLmdldE5ld3NsZXR0ZXJJdGVtQnlJZChOdW1iZXIodGhpcy5pZCksIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgYmxvZ0JvZHk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5ib2R5KSB7XG4gICAgICAgICAgICAgICAgICAgIGJsb2dCb2R5ID0gSGVscGVyU2VydmljZS5zYW5pdGl6ZVF1aWxsQm9keShyZXNwb25zZS5ib2R5LCB0aGlzLnNhbml0aXplcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY29tbXVuaWNhdGlvbkRldGFpbHMgPSB7IC4uLnJlc3BvbnNlLCBib2R5OiBibG9nQm9keSB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25CYWNrTmF2aWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMucm91dGVycy5uZXdzbGV0dGVySXRlbVZpZXd9YF0pO1xuICAgIH1cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicm93XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4XCI+XG4gICAgPGEgYXJpYS1sYWJlbD1cIk5hdmlnYXRlIHRvIFRhcmdldFwiXG4gICAgICAoY2xpY2spPVwib25CYWNrTmF2aWdhdGlvbigpXCJcbiAgICAgIGNsYXNzPVwicHJldmlvdXNcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWFsdC1jaXJjbGUtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgICA8aDIgY2xhc3M9XCJtdC0yIG1iLTBcIj5OZXdzbGV0dGVyPC9oMj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCJcbiAgICAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzTG9hZGVkXCI+XG4gIDxkaXYgY2xhc3M9XCJjb250ZW50LXF1aWxsLXdyYXBwZXIgY29udGFpbmVyLWZsdWlkIHB3LXRhYiBvdmVyZmxvdy1oaWRkZW4gbXQtM1wiICpuZ0lmPVwiY29tbXVuaWNhdGlvbkRldGFpbHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicGItMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi1tZC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBtYi0zIG1iLW1kLTBcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiY29tbXVuaWNhdGlvbkRldGFpbHM/LmlzX3B1c2hlZCA/ICdiYWRnZSBiZy1zdWNjZXNzJyA6ICdiYWRnZSBiZy1kYW5nZXInXCIgY2xhc3M9XCJtZS0yIG1iLTIgbWItbWQtMFwiPlxuICAgICAgICAgICAgICAgIHt7IGNvbW11bmljYXRpb25EZXRhaWxzPy5pc19wdXNoZWQgPyAnUHVzaGVkJyA6ICdOb3QgUHVzaGVkJyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImNvbW11bmljYXRpb25EZXRhaWxzPy5pc19zZW50PyAnYmFkZ2UgYmctc3VjY2VzcycgOiAnYmFkZ2UgYmctZGFuZ2VyJ1wiIGNsYXNzPVwibWUtMiBtYi0yIG1iLW1kLTBcIj5cbiAgICAgICAgICAgICAgICB7eyBjb21tdW5pY2F0aW9uRGV0YWlscz8uaXNfc2VudCA/ICdTZW50JyA6ICdOb3QgU2VudCcgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBtYi0zIG1iLW1kLTBcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1ibHVlLWdyZXkgbWItMiBtZS0yIG1iLW1kLTBcIj57eyAnU2VuZCBBdCAoJyArIChjb21tdW5pY2F0aW9uRGV0YWlscz8uc2VuZF9hdCB8IGRhdGU6ICdkZC1NTU0tWVlZWScpICsgJyknIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLWdyZXkgbWItMiBtYi1tZC0wXCI+e3sgJ1NlbmQgVW50aWwgKCcgKyAoY29tbXVuaWNhdGlvbkRldGFpbHM/LnNlbmRfdW50aWwgfCBkYXRlOiAnZGQtTU1NLVlZWVknKSArICcpJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItMyBtcy0yXCI+XG4gICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz1cImZhcyBmYS1tYXAtbWFya2VyLWFsdFwiPjwvaT4gPHNwYW4gY2xhc3M9XCJtcy0yXCI+e3sgY29tbXVuaWNhdGlvbkRldGFpbHM/LmxvY2F0aW9uIHx8ICdOb3Qgc2V0JyB9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0zIG1zLTJcIj5cbiAgICAgICAgICAgIDxoMT57eyBjb21tdW5pY2F0aW9uRGV0YWlscz8udGl0bGUgfX08L2gxPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXMtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInFsLWNvbnRhaW5lciBxbC1zbm93IGJvZHktcXVpbGxcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInFsLWVkaXRvclwiXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiY29tbXVuaWNhdGlvbkRldGFpbHM/LmJvZHlcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvZGl2PlxuIl19
@@ -1,179 +0,0 @@
1
- import { ChangeDetectorRef, Component, Injector } from '@angular/core';
2
- import { AdminService } from '@posiwise/admin-module-utils';
3
- import { AppBaseComponent } from '@posiwise/app-base-component';
4
- import { AuthService, PermissionService } from '@posiwise/common-services';
5
- import { PAGE_SIZE } from '@posiwise/common-utilities';
6
- import { HelperService } from '@posiwise/helper-service';
7
- import swal from 'sweetalert2';
8
- import { ROUTERS } from '../../../shared/routers/routers';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@posiwise/admin-module-utils";
11
- import * as i2 from "@posiwise/common-services";
12
- import * as i3 from "primeng/table";
13
- import * as i4 from "primeng/api";
14
- import * as i5 from "primeng/multiselect";
15
- import * as i6 from "primeng/inputtext";
16
- import * as i7 from "@ng-bootstrap/ng-bootstrap";
17
- import * as i8 from "@angular/common";
18
- import * as i9 from "@angular/forms";
19
- import * as i10 from "@angular/router";
20
- import * as i11 from "primeng/progressspinner";
21
- import * as i12 from "@posiwise/shared-components";
22
- import * as i13 from "@posiwise/directives";
23
- import * as i14 from "@jsverse/transloco";
24
- import * as i15 from "@posiwise/pipes";
25
- export class NewslettersItemsComponent extends AppBaseComponent {
26
- constructor(adminService, authService, injector, cdr) {
27
- super(injector);
28
- this.adminService = adminService;
29
- this.authService = authService;
30
- this.cdr = cdr;
31
- this.searchTextItems = '';
32
- this.newslettersItems = [];
33
- this.allNewslettersItems = [];
34
- this.newsletters = [];
35
- this.selectedNewsletterIds = [];
36
- this.isLoading = true;
37
- this.isItemsEmpty = true;
38
- this.isLoaded = false;
39
- this.totalRecordsUnFiltered = 0;
40
- this.page = 1;
41
- this.routers = ROUTERS;
42
- }
43
- ngOnInit() {
44
- this.subscriptionId = PermissionService.selectedSubscription?.id;
45
- this.authService.getToken$().subscribe(res => {
46
- this.userLoggedIn = !!res;
47
- this.getNewsletterForSelect({
48
- page: this.page,
49
- page_size: PAGE_SIZE
50
- });
51
- });
52
- this.getUserInfo();
53
- this.newsletterId = Number(this.route.snapshot.queryParamMap.get('newsletter_id'));
54
- this.newsletterIdForItem = Number(this.route.snapshot.queryParamMap.get('newsletter_id'));
55
- }
56
- ngAfterViewChecked() {
57
- this.cdr.detectChanges();
58
- }
59
- onLazyLoadNewsletterItems(event) {
60
- const pageDetails = HelperService.onTableLazyLoad(event);
61
- this.page = pageDetails.page;
62
- this.getNewsletterItems({
63
- page: this.page,
64
- page_size: PAGE_SIZE,
65
- order_by: pageDetails.sortField,
66
- order_direction: pageDetails.sortOrder,
67
- search: this.searchTextItems
68
- });
69
- }
70
- getNewsletterItems(paging) {
71
- this.isLoaded = false;
72
- this.adminService.getNewslettersItems(paging, this.subscriptionId).subscribe(response => {
73
- this.newslettersItems = response.newsletter_items;
74
- this.allNewslettersItems = this.newslettersItems.slice(0);
75
- this.newslettersItemsTotal = response.object_count;
76
- this.totalRecordsUnFiltered = response.unfiltered_count;
77
- this.isLoading = false;
78
- this.isLoaded = true;
79
- if (this.newslettersItems.length > 0) {
80
- this.isItemsEmpty = false;
81
- }
82
- if (this.newsletterId) {
83
- this.newslettersItems = this.allNewslettersItems.filter(x => x.newsletter_id === this.newsletterId);
84
- this.newslettersItemsTotal = this.newslettersItems.length;
85
- }
86
- });
87
- }
88
- onNewsletterChange(event) {
89
- this.newsletterIdForItem =
90
- !event.value?.length || event.value?.length > 1 ? '' : event.value[0];
91
- this.newslettersItems =
92
- event.value.length > 0
93
- ? this.allNewslettersItems.filter(x => event.value.includes(x.newsletter_id))
94
- : this.allNewslettersItems;
95
- this.selectedNewsletter = { label: '' };
96
- this.newslettersItemsTotal = this.newslettersItems?.length;
97
- }
98
- onDelete(item) {
99
- swal.fire({
100
- title: 'Delete',
101
- text: `Are you sure you want to delete ${item.title}?`,
102
- showCancelButton: true,
103
- reverseButtons: true,
104
- icon: 'warning'
105
- }).then(rep => {
106
- if (rep.value) {
107
- this.adminService.deleteNewsletterItem(item.id).subscribe(() => {
108
- this.getNewsletterItems({
109
- page: this.page,
110
- page_size: PAGE_SIZE,
111
- search: this.searchTextItems
112
- });
113
- this.toast.success(this.translation.translate('Admin.Newsletter.DeletedMessage'));
114
- });
115
- }
116
- });
117
- }
118
- getNewsletterForSelect(paging) {
119
- const subscriptionId = this.userLoggedIn ? this.subscriptionId : null;
120
- this.adminService.getNewsletters(paging, subscriptionId).subscribe(response => {
121
- this.newsletters = response.newsletters.map(item => {
122
- return {
123
- label: item.name,
124
- value: item.id
125
- };
126
- });
127
- if (this.newsletterId) {
128
- const data = this.newsletters.find(x => x.value === this.newsletterId);
129
- this.selectedNewsletter = data;
130
- this.selectedNewsletterIds = [this.newsletterId];
131
- }
132
- });
133
- }
134
- getUserInfo() {
135
- this.userStore().subscribe(user => {
136
- this.user = user;
137
- });
138
- }
139
- sendTestEmail(item) {
140
- swal.fire({
141
- title: 'Send Email',
142
- text: `A test email will be sent to "${this.user.email}". Do you want to continue?`,
143
- showCancelButton: true,
144
- reverseButtons: true,
145
- icon: 'warning'
146
- }).then(sendOk => {
147
- if (sendOk.value === true) {
148
- this.adminService.sendTestMail(item.id, this.subscriptionId).subscribe(response => {
149
- if (response) {
150
- this.toast.success(this.translation.translate('Newsletter test email sent correctly'));
151
- }
152
- });
153
- }
154
- });
155
- }
156
- navigateToCreateNewsletterItem() {
157
- if (this.newsletterIdForItem) {
158
- this.router.navigate([`${this.routers.newsletterItemDetails}add`], {
159
- queryParams: { newsletter_id: this.newsletterIdForItem }
160
- });
161
- }
162
- else {
163
- this.router.navigate([`${this.routers.newsletterItemDetails}add`]);
164
- }
165
- }
166
- getSendUntilColor(val) {
167
- return { 'text-success fw-bold': val && new Date(val) > new Date() };
168
- }
169
- ngOnDestroy() {
170
- super.ngOnDestroy();
171
- }
172
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NewslettersItemsComponent, deps: [{ token: i1.AdminService }, { token: i2.AuthService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
173
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: NewslettersItemsComponent, selector: "pw-newsletters-items", 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\">Newsletters Items</h2>\n <button *rbacAllow=\"'SubscriptionAdmin || Pages.Role.MarketingManager'\"\n class=\"btn btn-sm btn-outline-primary float-end m-0\"\n (click)=\"navigateToCreateNewsletterItem()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add Newsletter Item\n </button>\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 table-responsive\"\n [class.hideTable]=\"totalRecordsUnFiltered === 0\">\n <div class=\"row\">\n <div class=\"col-4\">\n <p-multiSelect [options]=\"newsletters\"\n [(ngModel)]=\"selectedNewsletterIds\"\n (onChange)=\"onNewsletterChange($event)\"\n placeholder='Filter by newsletters'\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-8 d-flex justify-content-end\">\n <div>\n <input type=\"text\"\n [(ngModel)]=\"searchTextItems\"\n pInputText\n size=\"50\"\n placeholder=\"Search...\"\n data-cy=\"user-search\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"wd-90 w-100\" />\n </div>\n </div>\n\n </div>\n <p-table #dt\n [value]=\"newslettersItems\"\n [paginator]=\"newslettersItemsTotal !== 0\"\n [globalFilterFields]=\"['title']\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"newslettersItemsTotal\"\n [lazy]=\"true\"\n (onLazyLoad)=\"onLazyLoadNewsletterItems($event)\"\n [loading]=\"isLoading\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"title\">\n {{ 'Label.Title' | transloco }}\n <p-sortIcon field=\"title\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"body\">\n {{ 'Admin.NewsletterItem.Body' | transloco }}\n <p-sortIcon field=\"body\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"send_until\">\n {{ 'Admin.NewsletterItem.SendUntil' | transloco }}\n <p-sortIcon field=\"send_until\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"is_pushed\">\n {{ 'Admin.NewsletterItem.Pushed' | transloco }}\n <p-sortIcon field=\"is_pushed\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"is_sent\">\n {{ 'Admin.NewsletterItem.Sent' | transloco }}\n <p-sortIcon field=\"is_sent\"></p-sortIcon>\n </th>\n <th class=\"actions-list-four\"\n scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr>\n <td data-head=\"Title\">\n <a target=\"_blank\" [routerLink]=\"[routers.newsletterItemView + 'info', item.id]\">{{\n item.title\n }}\n </a>\n <i class=\"fas fa-info-circle info-icon\" *ngIf=\"item?.location\"\n [ngbTooltip]=\"item?.location\"></i>\n </td>\n <td data-head=\"Body\"\n class=\"custom-td\">\n {{ item.body | removeHtml: 'quill' | textTruncate: 200 }}\n </td>\n <td data-head=\"Send Until\">\n <span [ngClass]=\"getSendUntilColor(item?.send_until)\">{{\n item.send_until | dateFormat\n }}</span>\n </td>\n <td data-head=\"Is Pushed\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_pushed }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_pushed }}</span>\n </td>\n <td data-head=\"Is Sent\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_sent }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_sent }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Send test email\"\n class=\"me-2 me-sm-2\">\n <i\n class=\"fa fa-comment-alt cta1-icon\"\n (click)=\"sendTestEmail(item)\"\n (keydown.enter)=\"sendTestEmail(item)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-2\"\n [routerLink]=\"[routers.newsletterItemDetails + item.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-2\"\n (keydown.enter)=\"onDelete(item)\"\n (click)=\"onDelete(item)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"View Newsletter\"\n class=\"me-2 me-sm-2\">\n <a [routerLink]=\"[routers.newsletterItemView + 'info', item.id]\" target=\"_blank\" aria-label=\"Newsletter Item View\">\n <i class=\"fa fa-eye eye-icon\" aria-hidden=\"true\"></i>\n </a>\n </li>\n <li ngbTooltip=\"Newsletter recipients\"\n class=\"me-2 me-sm-2\"\n [routerLink]=\"[routers.newslettersUserList + item.id]\">\n <i class=\"fa fa-tasks cta1-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"newslettersItemsTotal === 0 && totalRecordsUnFiltered !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"newslettersItemsTotal !== 0\">{{ 'Label.Total' | transloco }}: {{ newslettersItemsTotal }}</span>\n</div>\n<div *ngIf=\"totalRecordsUnFiltered === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.NewsletterItem.NewsletterItemsNoDataMessage' | transloco\">\n </pw-no-data>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.custom-td{max-width:400px;word-break:break-all}.eye-icon{color:var(--first);font-size:18px;padding-left:3px;padding-right:3px}.list-action{width:max-content}.info-icon{vertical-align:middle;margin-left:5px}\n"], dependencies: [{ kind: "component", type: i3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i3.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i5.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: i6.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i7.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i11.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i12.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i13.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color", "colorByName", "dataName"] }, { kind: "directive", type: i13.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "pipe", type: i14.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i15.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i15.RemoveHtmlPipe, name: "removeHtml" }, { kind: "pipe", type: i15.TextTruncatePipe, name: "textTruncate" }] }); }
174
- }
175
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NewslettersItemsComponent, decorators: [{
176
- type: Component,
177
- args: [{ selector: 'pw-newsletters-items', 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\">Newsletters Items</h2>\n <button *rbacAllow=\"'SubscriptionAdmin || Pages.Role.MarketingManager'\"\n class=\"btn btn-sm btn-outline-primary float-end m-0\"\n (click)=\"navigateToCreateNewsletterItem()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add Newsletter Item\n </button>\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 table-responsive\"\n [class.hideTable]=\"totalRecordsUnFiltered === 0\">\n <div class=\"row\">\n <div class=\"col-4\">\n <p-multiSelect [options]=\"newsletters\"\n [(ngModel)]=\"selectedNewsletterIds\"\n (onChange)=\"onNewsletterChange($event)\"\n placeholder='Filter by newsletters'\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-8 d-flex justify-content-end\">\n <div>\n <input type=\"text\"\n [(ngModel)]=\"searchTextItems\"\n pInputText\n size=\"50\"\n placeholder=\"Search...\"\n data-cy=\"user-search\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"wd-90 w-100\" />\n </div>\n </div>\n\n </div>\n <p-table #dt\n [value]=\"newslettersItems\"\n [paginator]=\"newslettersItemsTotal !== 0\"\n [globalFilterFields]=\"['title']\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"newslettersItemsTotal\"\n [lazy]=\"true\"\n (onLazyLoad)=\"onLazyLoadNewsletterItems($event)\"\n [loading]=\"isLoading\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"title\">\n {{ 'Label.Title' | transloco }}\n <p-sortIcon field=\"title\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"body\">\n {{ 'Admin.NewsletterItem.Body' | transloco }}\n <p-sortIcon field=\"body\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"send_until\">\n {{ 'Admin.NewsletterItem.SendUntil' | transloco }}\n <p-sortIcon field=\"send_until\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"is_pushed\">\n {{ 'Admin.NewsletterItem.Pushed' | transloco }}\n <p-sortIcon field=\"is_pushed\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"is_sent\">\n {{ 'Admin.NewsletterItem.Sent' | transloco }}\n <p-sortIcon field=\"is_sent\"></p-sortIcon>\n </th>\n <th class=\"actions-list-four\"\n scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr>\n <td data-head=\"Title\">\n <a target=\"_blank\" [routerLink]=\"[routers.newsletterItemView + 'info', item.id]\">{{\n item.title\n }}\n </a>\n <i class=\"fas fa-info-circle info-icon\" *ngIf=\"item?.location\"\n [ngbTooltip]=\"item?.location\"></i>\n </td>\n <td data-head=\"Body\"\n class=\"custom-td\">\n {{ item.body | removeHtml: 'quill' | textTruncate: 200 }}\n </td>\n <td data-head=\"Send Until\">\n <span [ngClass]=\"getSendUntilColor(item?.send_until)\">{{\n item.send_until | dateFormat\n }}</span>\n </td>\n <td data-head=\"Is Pushed\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_pushed }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_pushed }}</span>\n </td>\n <td data-head=\"Is Sent\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_sent }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_sent }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Send test email\"\n class=\"me-2 me-sm-2\">\n <i\n class=\"fa fa-comment-alt cta1-icon\"\n (click)=\"sendTestEmail(item)\"\n (keydown.enter)=\"sendTestEmail(item)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-2\"\n [routerLink]=\"[routers.newsletterItemDetails + item.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-2\"\n (keydown.enter)=\"onDelete(item)\"\n (click)=\"onDelete(item)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"View Newsletter\"\n class=\"me-2 me-sm-2\">\n <a [routerLink]=\"[routers.newsletterItemView + 'info', item.id]\" target=\"_blank\" aria-label=\"Newsletter Item View\">\n <i class=\"fa fa-eye eye-icon\" aria-hidden=\"true\"></i>\n </a>\n </li>\n <li ngbTooltip=\"Newsletter recipients\"\n class=\"me-2 me-sm-2\"\n [routerLink]=\"[routers.newslettersUserList + item.id]\">\n <i class=\"fa fa-tasks cta1-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"newslettersItemsTotal === 0 && totalRecordsUnFiltered !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"newslettersItemsTotal !== 0\">{{ 'Label.Total' | transloco }}: {{ newslettersItemsTotal }}</span>\n</div>\n<div *ngIf=\"totalRecordsUnFiltered === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.NewsletterItem.NewsletterItemsNoDataMessage' | transloco\">\n </pw-no-data>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.custom-td{max-width:400px;word-break:break-all}.eye-icon{color:var(--first);font-size:18px;padding-left:3px;padding-right:3px}.list-action{width:max-content}.info-icon{vertical-align:middle;margin-left:5px}\n"] }]
178
- }], ctorParameters: () => [{ type: i1.AdminService }, { type: i2.AuthService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }] });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3c2xldHRlcnMtaXRlbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL25ld3NsZXR0ZXJzL25ld3NsZXR0ZXJzLWl0ZW1zL25ld3NsZXR0ZXJzLWl0ZW1zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9uZXdzbGV0dGVycy9uZXdzbGV0dGVycy1pdGVtcy9uZXdzbGV0dGVycy1pdGVtcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBR1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd6RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFHL0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQU8xRCxNQUFNLE9BQU8seUJBQ1QsU0FBUSxnQkFBZ0I7SUFnQ3hCLFlBQ3FCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3pDLFFBQWtCLEVBQ0QsR0FBc0I7UUFFdkMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBTEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxX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LE9BQU8sQ0FDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUNyRSxDQUFDO29CQUNOLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsOEJBQThCO1FBQzFCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEtBQUssQ0FBQyxFQUFFO2dCQUMvRCxXQUFXLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2FBQzNELENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFHO1FBQ2pCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3pFLENBQUM7SUFFUSxXQUFXO1FBQ2hCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOytHQTFMUSx5QkFBeUI7bUdBQXpCLHlCQUF5QixtRkMxQnRDLGkzTUE4SkE7OzRGRHBJYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0ksc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3RvcixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBZG1pblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvYWRtaW4tbW9kdWxlLXV0aWxzJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgUEFHRV9TSVpFLCBQYWdpbmcsIFVzZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcblxuaW1wb3J0IHsgTGF6eUxvYWRFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcblxuaW1wb3J0IHsgTmV3c0xldHRlckl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL25ld3NsZXR0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1uZXdzbGV0dGVycy1pdGVtcycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ld3NsZXR0ZXJzLWl0ZW1zLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9uZXdzbGV0dGVycy1pdGVtcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5ld3NsZXR0ZXJzSXRlbXNDb21wb25lbnRcbiAgICBleHRlbmRzIEFwcEJhc2VDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkXG57XG4gICAgc2VhcmNoVGV4dEl0ZW1zID0gJyc7XG5cbiAgICBuZXdzbGV0dGVyc0l0ZW1zOiBOZXdzTGV0dGVySXRlbVtdID0gW107XG4gICAgYWxsTmV3c2xldHRlcnNJdGVtczogTmV3c0xldHRlckl0ZW1bXSA9IFtdO1xuICAgIG5ld3NsZXR0ZXJzID0gW107XG4gICAgc2VsZWN0ZWROZXdzbGV0dGVySWRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICBpc0l0ZW1zRW1wdHkgPSB0cnVlO1xuXG4gICAgdXNlcjogVXNlcjtcblxuICAgIG5ld3NsZXR0ZXJJZDogbnVtYmVyO1xuICAgIG5ld3NsZXR0ZXJzSXRlbXNUb3RhbDogbnVtYmVyO1xuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgbmV3c2xldHRlcklkRm9ySXRlbTogbnVtYmVyO1xuXG4gICAgc2VsZWN0ZWROZXdzbGV0dGVyOiB7IGxhYmVsOiBzdHJpbmcgfTtcblxuICAgIGlzTG9hZGVkID0gZmFsc2U7XG5cbiAgICB0b3RhbFJlY29yZHNVbkZpbHRlcmVkID0gMDtcblxuICAgIHByaXZhdGUgcGFnZSA9IDE7XG5cbiAgICByb3V0ZXJzID0gUk9VVEVSUztcblxuICAgIHVzZXJMb2dnZWRJbjogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFkbWluU2VydmljZTogQWRtaW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFRva2VuJCgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy51c2VyTG9nZ2VkSW4gPSAhIXJlcztcbiAgICAgICAgICAgIHRoaXMuZ2V0TmV3c2xldHRlckZvclNlbGVjdCh7XG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ2V0VXNlckluZm8oKTtcbiAgICAgICAgdGhpcy5uZXdzbGV0dGVySWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnbmV3c2xldHRlcl9pZCcpKTtcbiAgICAgICAgdGhpcy5uZXdzbGV0dGVySWRGb3JJdGVtID0gTnVtYmVyKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ25ld3NsZXR0ZXJfaWQnKSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgb25MYXp5TG9hZE5ld3NsZXR0ZXJJdGVtcyhldmVudDogTGF6eUxvYWRFdmVudCkge1xuICAgICAgICBjb25zdCBwYWdlRGV0YWlscyA9IEhlbHBlclNlcnZpY2Uub25UYWJsZUxhenlMb2FkKGV2ZW50KTtcbiAgICAgICAgdGhpcy5wYWdlID0gcGFnZURldGFpbHMucGFnZTtcbiAgICAgICAgdGhpcy5nZXROZXdzbGV0dGVySXRlbXMoe1xuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkUsXG4gICAgICAgICAgICBvcmRlcl9ieTogcGFnZURldGFpbHMuc29ydEZpZWxkLFxuICAgICAgICAgICAgb3JkZXJfZGlyZWN0aW9uOiBwYWdlRGV0YWlscy5zb3J0T3JkZXIsXG4gICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dEl0ZW1zXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TmV3c2xldHRlckl0ZW1zKHBhZ2luZzogUGFnaW5nKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UuZ2V0TmV3c2xldHRlcnNJdGVtcyhwYWdpbmcsIHRoaXMuc3Vic2NyaXB0aW9uSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5ld3NsZXR0ZXJzSXRlbXMgPSByZXNwb25zZS5uZXdzbGV0dGVyX2l0ZW1zO1xuICAgICAgICAgICAgdGhpcy5hbGxOZXdzbGV0dGVyc0l0ZW1zID0gdGhpcy5uZXdzbGV0dGVyc0l0ZW1zLnNsaWNlKDApO1xuICAgICAgICAgICAgdGhpcy5uZXdzbGV0dGVyc0l0ZW1zVG90YWwgPSByZXNwb25zZS5vYmplY3RfY291bnQ7XG4gICAgICAgICAgICB0aGlzLnRvdGFsUmVjb3Jkc1VuRmlsdGVyZWQgPSByZXNwb25zZS51bmZpbHRlcmVkX2NvdW50O1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMubmV3c2xldHRlcnNJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0l0ZW1zRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm5ld3NsZXR0ZXJJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmV3c2xldHRlcnNJdGVtcyA9IHRoaXMuYWxsTmV3c2xldHRlcnNJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIHggPT4geC5uZXdzbGV0dGVyX2lkID09PSB0aGlzLm5ld3NsZXR0ZXJJZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXdzbGV0dGVyc0l0ZW1zVG90YWwgPSB0aGlzLm5ld3NsZXR0ZXJzSXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbk5ld3NsZXR0ZXJDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5uZXdzbGV0dGVySWRGb3JJdGVtID1cbiAgICAgICAgICAgICFldmVudC52YWx1ZT8ubGVuZ3RoIHx8IGV2ZW50LnZhbHVlPy5sZW5ndGggPiAxID8gJycgOiBldmVudC52YWx1ZVswXTtcbiAgICAgICAgdGhpcy5uZXdzbGV0dGVyc0l0ZW1zID1cbiAgICAgICAgICAgIGV2ZW50LnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IHRoaXMuYWxsTmV3c2xldHRlcnNJdGVtcy5maWx0ZXIoeCA9PiBldmVudC52YWx1ZS5pbmNsdWRlcyh4Lm5ld3NsZXR0ZXJfaWQpKVxuICAgICAgICAgICAgICAgIDogdGhpcy5hbGxOZXdzbGV0dGVyc0l0ZW1zO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTmV3c2xldHRlciA9IHsgbGFiZWw6ICcnIH07XG4gICAgICAgIHRoaXMubmV3c2xldHRlcnNJdGVtc1RvdGFsID0gdGhpcy5uZXdzbGV0dGVyc0l0ZW1zPy5sZW5ndGg7XG4gICAgfVxuXG4gICAgb25EZWxldGUoaXRlbTogTmV3c0xldHRlckl0ZW0pIHtcbiAgICAgICAgc3dhbC5maXJlKHtcbiAgICAgICAgICAgIHRpdGxlOiAnRGVsZXRlJyxcbiAgICAgICAgICAgIHRleHQ6IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICR7aXRlbS50aXRsZX0/YCxcbiAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZSxcbiAgICAgICAgICAgIGljb246ICd3YXJuaW5nJ1xuICAgICAgICB9KS50aGVuKHJlcCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UuZGVsZXRlTmV3c2xldHRlckl0ZW0oaXRlbS5pZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROZXdzbGV0dGVySXRlbXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dEl0ZW1zXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uTmV3c2xldHRlci5EZWxldGVkTWVzc2FnZScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TmV3c2xldHRlckZvclNlbGVjdChwYWdpbmc6IFBhZ2luZykge1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25JZCA9IHRoaXMudXNlckxvZ2dlZEluID8gdGhpcy5zdWJzY3JpcHRpb25JZCA6IG51bGw7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmdldE5ld3NsZXR0ZXJzKHBhZ2luZywgc3Vic2NyaXB0aW9uSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5ld3NsZXR0ZXJzID0gcmVzcG9uc2UubmV3c2xldHRlcnMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLmlkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMubmV3c2xldHRlcklkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMubmV3c2xldHRlcnMuZmluZCh4ID0+IHgudmFsdWUgPT09IHRoaXMubmV3c2xldHRlcklkKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTmV3c2xldHRlciA9IGRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5ld3NsZXR0ZXJJZHMgPSBbdGhpcy5uZXdzbGV0dGVySWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVzZXJJbmZvKCkge1xuICAgICAgICB0aGlzLnVzZXJTdG9yZSgpLnN1YnNjcmliZSh1c2VyID0+IHtcbiAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNlbmRUZXN0RW1haWwoaXRlbTogTmV3c0xldHRlckl0ZW0pIHtcbiAgICAgICAgc3dhbC5maXJlKHtcbiAgICAgICAgICAgIHRpdGxlOiAnU2VuZCBFbWFpbCcsXG4gICAgICAgICAgICB0ZXh0OiBgQSB0ZXN0IGVtYWlsIHdpbGwgYmUgc2VudCB0byBcIiR7dGhpcy51c2VyLmVtYWlsfVwiLiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT9gLFxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxuICAgICAgICAgICAgaWNvbjogJ3dhcm5pbmcnXG4gICAgICAgIH0pLnRoZW4oc2VuZE9rID0+IHtcbiAgICAgICAgICAgIGlmIChzZW5kT2sudmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkbWluU2VydmljZS5zZW5kVGVzdE1haWwoaXRlbS5pZCwgdGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ05ld3NsZXR0ZXIgdGVzdCBlbWFpbCBzZW50IGNvcnJlY3RseScpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5hdmlnYXRlVG9DcmVhdGVOZXdzbGV0dGVySXRlbSgpIHtcbiAgICAgICAgaWYgKHRoaXMubmV3c2xldHRlcklkRm9ySXRlbSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMucm91dGVycy5uZXdzbGV0dGVySXRlbURldGFpbHN9YWRkYF0sIHtcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogeyBuZXdzbGV0dGVyX2lkOiB0aGlzLm5ld3NsZXR0ZXJJZEZvckl0ZW0gfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5yb3V0ZXJzLm5ld3NsZXR0ZXJJdGVtRGV0YWlsc31hZGRgXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTZW5kVW50aWxDb2xvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIHsgJ3RleHQtc3VjY2VzcyBmdy1ib2xkJzogdmFsICYmIG5ldyBEYXRlKHZhbCkgPiBuZXcgRGF0ZSgpIH07XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJvd1wiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICA8aDIgY2xhc3M9XCJjYXJkLXRpdGxlIHAtMCBmbG9hdC1zdGFydFwiPk5ld3NsZXR0ZXJzIEl0ZW1zPC9oMj5cbiAgICA8YnV0dG9uICpyYmFjQWxsb3c9XCInU3Vic2NyaXB0aW9uQWRtaW4gfHwgUGFnZXMuUm9sZS5NYXJrZXRpbmdNYW5hZ2VyJ1wiXG4gICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBmbG9hdC1lbmQgbS0wXCJcbiAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvQ3JlYXRlTmV3c2xldHRlckl0ZW0oKVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gQWRkIE5ld3NsZXR0ZXIgSXRlbVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJwcmltZW5nLWRhdGF0YWJsZS1jb250YWluZXIgdGFibGUtcmVzcG9uc2l2ZVwiXG4gIFtjbGFzcy5oaWRlVGFibGVdPVwidG90YWxSZWNvcmRzVW5GaWx0ZXJlZCA9PT0gMFwiPlxuICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XG4gICAgICA8cC1tdWx0aVNlbGVjdCBbb3B0aW9uc109XCJuZXdzbGV0dGVyc1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWROZXdzbGV0dGVySWRzXCJcbiAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTmV3c2xldHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9J0ZpbHRlciBieSBuZXdzbGV0dGVycydcbiAgICAgICAgYXBwZW5kVG89XCJib2R5XCI+XG4gICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC04IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dEl0ZW1zXCJcbiAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgc2l6ZT1cIjUwXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgZGF0YS1jeT1cInVzZXItc2VhcmNoXCJcbiAgICAgICAgICAoaW5wdXQpPVwiZHQuZmlsdGVyR2xvYmFsKCRldmVudC50YXJnZXQudmFsdWUsICdjb250YWlucycpXCJcbiAgICAgICAgICBjbGFzcz1cIndkLTkwIHctMTAwXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuICA8cC10YWJsZSAjZHRcbiAgICBbdmFsdWVdPVwibmV3c2xldHRlcnNJdGVtc1wiXG4gICAgW3BhZ2luYXRvcl09XCJuZXdzbGV0dGVyc0l0ZW1zVG90YWwgIT09IDBcIlxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiWyd0aXRsZSddXCJcbiAgICBbcm93c109XCJQQUdFX1NJWkVcIlxuICAgIFt0b3RhbFJlY29yZHNdPVwibmV3c2xldHRlcnNJdGVtc1RvdGFsXCJcbiAgICBbbGF6eV09XCJ0cnVlXCJcbiAgICAob25MYXp5TG9hZCk9XCJvbkxhenlMb2FkTmV3c2xldHRlckl0ZW1zKCRldmVudClcIlxuICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ1wiXG4gICAgW2N1c3RvbVNvcnRdPVwidHJ1ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwidGl0bGVcIj5cbiAgICAgICAgICB7eyAnTGFiZWwuVGl0bGUnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJ0aXRsZVwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwiYm9keVwiPlxuICAgICAgICAgIHt7ICdBZG1pbi5OZXdzbGV0dGVySXRlbS5Cb2R5JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwiYm9keVwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwic2VuZF91bnRpbFwiPlxuICAgICAgICAgIHt7ICdBZG1pbi5OZXdzbGV0dGVySXRlbS5TZW5kVW50aWwnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJzZW5kX3VudGlsXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJpc19wdXNoZWRcIj5cbiAgICAgICAgICB7eyAnQWRtaW4uTmV3c2xldHRlckl0ZW0uUHVzaGVkJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwiaXNfcHVzaGVkXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJpc19zZW50XCI+XG4gICAgICAgICAge3sgJ0FkbWluLk5ld3NsZXR0ZXJJdGVtLlNlbnQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJpc19zZW50XCI+PC9wLXNvcnRJY29uPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJhY3Rpb25zLWxpc3QtZm91clwiXG4gICAgICAgICAgc2NvcGU9XCJ0cnVlXCI+e3sgJ0xhYmVsLkFjdGlvbnMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgICBsZXQtaXRlbT5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlRpdGxlXCI+XG4gICAgICAgICAgPGEgdGFyZ2V0PVwiX2JsYW5rXCIgW3JvdXRlckxpbmtdPVwiW3JvdXRlcnMubmV3c2xldHRlckl0ZW1WaWV3ICsgJ2luZm8nLCBpdGVtLmlkXVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZSBpbmZvLWljb25cIiAqbmdJZj1cIml0ZW0/LmxvY2F0aW9uXCJcbiAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJpdGVtPy5sb2NhdGlvblwiPjwvaT5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkJvZHlcIlxuICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLXRkXCI+XG4gICAgICAgICAge3sgaXRlbS5ib2R5IHwgcmVtb3ZlSHRtbDogJ3F1aWxsJyB8IHRleHRUcnVuY2F0ZTogMjAwIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJTZW5kIFVudGlsXCI+XG4gICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiZ2V0U2VuZFVudGlsQ29sb3IoaXRlbT8uc2VuZF91bnRpbClcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZW5kX3VudGlsIHwgZGF0ZUZvcm1hdFxuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIklzIFB1c2hlZFwiPlxuICAgICAgICAgIDxzcGFuIFthcHBEeW5hbWljQmFkZ2VdPVwieyBpdGVtc0FycmF5OiBbdHJ1ZSwgZmFsc2VdLCBpdGVtOiBpdGVtPy5pc19wdXNoZWQgfVwiXG4gICAgICAgICAgICBjb2xvcj1cInN1Y2Nlc3MtZGFuZ2VyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyBpdGVtPy5pc19wdXNoZWQgfX08L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJJcyBTZW50XCI+XG4gICAgICAgICAgPHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IFt0cnVlLCBmYWxzZV0sIGl0ZW06IGl0ZW0/LmlzX3NlbnQgfVwiXG4gICAgICAgICAgICBjb2xvcj1cInN1Y2Nlc3MtZGFuZ2VyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyBpdGVtPy5pc19zZW50IH19PC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQWN0aW9uXCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBsaXN0LWlubGluZSBsaXN0LWFjdGlvblwiPlxuICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJTZW5kIHRlc3QgZW1haWxcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tMlwiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLWNvbW1lbnQtYWx0IGN0YTEtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZW5kVGVzdEVtYWlsKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VuZFRlc3RFbWFpbChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIkVkaXRcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tMlwiXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIltyb3V0ZXJzLm5ld3NsZXR0ZXJJdGVtRGV0YWlscyArIGl0ZW0uaWRdXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdCBlZGl0LWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJEZWxldGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tMlwiXG4gICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uRGVsZXRlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKGl0ZW0pXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJWaWV3IE5ld3NsZXR0ZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTJcIj5cbiAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIltyb3V0ZXJzLm5ld3NsZXR0ZXJJdGVtVmlldyArICdpbmZvJywgaXRlbS5pZF1cIiB0YXJnZXQ9XCJfYmxhbmtcIiBhcmlhLWxhYmVsPVwiTmV3c2xldHRlciBJdGVtIFZpZXdcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leWUgZXllLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiTmV3c2xldHRlciByZWNpcGllbnRzXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTJcIlxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbcm91dGVycy5uZXdzbGV0dGVyc1VzZXJMaXN0ICsgaXRlbS5pZF1cIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10YXNrcyBjdGExLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC10YWJsZT5cbiAgPGRpdiAqbmdJZj1cIm5ld3NsZXR0ZXJzSXRlbXNUb3RhbCA9PT0gMCAmJiB0b3RhbFJlY29yZHNVbkZpbHRlcmVkICE9PSAwXCI+XG4gICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ1NlYXJjaC5Ob0RhdGFNZXNzYWdlJyB8IHRyYW5zbG9jb1wiIFtkZXNjcmlwdGlvbl09XCInU2VhcmNoLk5vRGF0YURlc2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiID5cbiAgICA8L3B3LW5vLWRhdGE+XG4gIDwvZGl2PlxuICA8c3BhbiBjbGFzcz1cInRvdGFsLXJlY29yZHMtY291bnRcIiAgKm5nSWY9XCJuZXdzbGV0dGVyc0l0ZW1zVG90YWwgIT09IDBcIj57eyAnTGFiZWwuVG90YWwnIHwgdHJhbnNsb2NvIH19OiB7eyBuZXdzbGV0dGVyc0l0ZW1zVG90YWwgfX08L3NwYW4+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJ0b3RhbFJlY29yZHNVbkZpbHRlcmVkID09PSAwICYmIGlzTG9hZGVkXCI+XG4gIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidBZG1pbi5OZXdzbGV0dGVySXRlbS5OZXdzbGV0dGVySXRlbXNOb0RhdGFNZXNzYWdlJyB8IHRyYW5zbG9jb1wiPlxuICA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbiJdfQ==