@posiwise/admin-module 0.0.3
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/README.md +7 -0
- package/assets/scss/_bootstrap_modules.scss +40 -0
- package/assets/scss/_custom-bootstrap.scss +13 -0
- package/assets/scss/_dashboard.scss +31 -0
- package/assets/scss/_dynamic-styles.scss +534 -0
- package/assets/scss/_plugins.scss +3 -0
- package/assets/scss/_public-pages.scss +7 -0
- package/assets/scss/_shared.scss +3 -0
- package/assets/scss/_variables.scss +5 -0
- package/assets/scss/common/landing-page-a/landing-page-style-1.scss +670 -0
- package/assets/scss/common/landing-page-b/banner.scss +141 -0
- package/assets/scss/common/landing-page-b/contact-us.scss +167 -0
- package/assets/scss/common/landing-page-b/explainer.scss +75 -0
- package/assets/scss/common/landing-page-b/explainer2.scss +35 -0
- package/assets/scss/common/landing-page-b/header.scss +56 -0
- package/assets/scss/common/landing-page-b/landing-page-style-2.scss +20 -0
- package/assets/scss/custom-bootstrap/_badge.scss +468 -0
- package/assets/scss/custom-bootstrap/_bootstrap_variables.scss +30 -0
- package/assets/scss/custom-bootstrap/_buttons.scss +84 -0
- package/assets/scss/custom-bootstrap/_card.scss +319 -0
- package/assets/scss/custom-bootstrap/_carousel.scss +6 -0
- package/assets/scss/custom-bootstrap/_form_select.scss +7 -0
- package/assets/scss/custom-bootstrap/_forms.scss +337 -0
- package/assets/scss/custom-bootstrap/_links.scss +7 -0
- package/assets/scss/custom-bootstrap/_modal.scss +16 -0
- package/assets/scss/custom-bootstrap/_navbar.scss +42 -0
- package/assets/scss/custom-bootstrap/_popover.scss +10 -0
- package/assets/scss/custom-bootstrap/_progress.scss +12 -0
- package/assets/scss/custom-bootstrap/_reboot.scss +93 -0
- package/assets/scss/custom-bootstrap/_type.scss +202 -0
- package/assets/scss/dashboard/_admin.scss +15 -0
- package/assets/scss/dashboard/_animations.scss +20 -0
- package/assets/scss/dashboard/_bootstrap-social.scss +641 -0
- package/assets/scss/dashboard/_chat.scss +250 -0
- package/assets/scss/dashboard/_coming-soon.scss +34 -0
- package/assets/scss/dashboard/_components.scss +229 -0
- package/assets/scss/dashboard/_email.scss +184 -0
- package/assets/scss/dashboard/_fixed-navbar.scss +18 -0
- package/assets/scss/dashboard/_gallery.scss +1201 -0
- package/assets/scss/dashboard/_helper.scss +736 -0
- package/assets/scss/dashboard/_horizontal-timeline.scss +314 -0
- package/assets/scss/dashboard/_icons.scss +107 -0
- package/assets/scss/dashboard/_layout.scss +23 -0
- package/assets/scss/dashboard/_misc.scss +220 -0
- package/assets/scss/dashboard/_notifications.scss +27 -0
- package/assets/scss/dashboard/_palette.scss +308 -0
- package/assets/scss/dashboard/_profile.scss +36 -0
- package/assets/scss/dashboard/_responsive.scss +209 -0
- package/assets/scss/dashboard/_search.scss +33 -0
- package/assets/scss/dashboard/_select.scss +16 -0
- package/assets/scss/dashboard/_sidebar-content.scss +632 -0
- package/assets/scss/dashboard/_tables.scss +17 -0
- package/assets/scss/dashboard/_tabs.scss +151 -0
- package/assets/scss/dashboard/_ui-switch.scss +6 -0
- package/assets/scss/dashboard/_upload.scss +249 -0
- package/assets/scss/dashboard/_utilities.scss +105 -0
- package/assets/scss/dashboard/_vertical-timeline.scss +1261 -0
- package/assets/scss/dashboard/mixins/_buttons.scss +78 -0
- package/assets/scss/dashboard/mixins/_colors.scss +29 -0
- package/assets/scss/dashboard/mixins/_custom.scss +34 -0
- package/assets/scss/dashboard/mixins/_shadows.scss +62 -0
- package/assets/scss/dashboard/mixins/_type.scss +16 -0
- package/assets/scss/dashboard/mixins/_typography.scss +29 -0
- package/assets/scss/dashboard/mixins/_utilities.scss +129 -0
- package/assets/scss/dashboard/mixins/_vendor-prefixes.scss +71 -0
- package/assets/scss/plugins/_plugin-nouislider.scss +199 -0
- package/assets/scss/plugins/_toastr.scss +71 -0
- package/assets/scss/plugins/perfect-scrollbar/_main.scss +3 -0
- package/assets/scss/plugins/perfect-scrollbar/_mixins.scss +135 -0
- package/assets/scss/plugins/perfect-scrollbar/_ps-custom.scss +134 -0
- package/assets/scss/plugins/perfect-scrollbar/_themes.scss +23 -0
- package/assets/scss/plugins/perfect-scrollbar/_variables.scss +19 -0
- package/assets/scss/public-pages/_buttons.scss +136 -0
- package/assets/scss/public-pages/_input-fields.scss +29 -0
- package/assets/scss/public-pages/_layout.scss +108 -0
- package/assets/scss/public-pages/mixins/_buttons.scss +28 -0
- package/assets/scss/shared/_modal.scss +28 -0
- package/assets/scss/shared/_prime-ng-tables.scss +107 -0
- package/assets/scss/shared/_prime-ng.scss +5100 -0
- package/assets/scss/variables/_app-colors-variables.scss +760 -0
- package/assets/scss/variables/_branding-variables.scss +93 -0
- package/assets/scss/variables/_dashboard-variables.scss +96 -0
- package/assets/scss/variables/_generic-variables.scss +33 -0
- package/assets/scss/variables/_landing-page-new-variables.scss +11 -0
- package/assets/scss/variables/_primeng-variables.scss +190 -0
- package/esm2020/admin-module.mjs +5 -0
- package/esm2020/index.mjs +85 -0
- package/esm2020/lib/admin-guard.service.mjs +44 -0
- package/esm2020/lib/admin-module.routing.mjs +706 -0
- package/esm2020/lib/admin.module.mjs +328 -0
- package/esm2020/lib/admin.service.mjs +411 -0
- package/esm2020/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +86 -0
- package/esm2020/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +72 -0
- package/esm2020/lib/components/TOS/terms-of-service-tabs/terms-of-service-tabs.component.mjs +26 -0
- package/esm2020/lib/components/config/global-config-details/global-config-details.component.mjs +61 -0
- package/esm2020/lib/components/config/global-config-list/global-config-list.component.mjs +86 -0
- package/esm2020/lib/components/config/global-config-tabs/global-config-tabs.component.mjs +24 -0
- package/esm2020/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +96 -0
- package/esm2020/lib/components/contact-us/contact-us-tabs/contact-us-tabs.component.mjs +24 -0
- package/esm2020/lib/components/credentials/credentials/credentials.component.mjs +81 -0
- package/esm2020/lib/components/credentials/credentials-details/credentials-details.component.mjs +70 -0
- package/esm2020/lib/components/credentials/credentials-tab/credentials-tab.component.mjs +31 -0
- package/esm2020/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +87 -0
- package/esm2020/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.mjs +82 -0
- package/esm2020/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +214 -0
- package/esm2020/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.mjs +86 -0
- package/esm2020/lib/components/domain-config/domain-config-details/domain-config-details.component.mjs +56 -0
- package/esm2020/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +83 -0
- package/esm2020/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +124 -0
- package/esm2020/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +83 -0
- package/esm2020/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +84 -0
- package/esm2020/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +83 -0
- package/esm2020/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +85 -0
- package/esm2020/lib/components/domain-config/domain-config-tabs/domain-config-tabs.component.mjs +24 -0
- package/esm2020/lib/components/faqs/faqs-list/faqs-list.component.mjs +289 -0
- package/esm2020/lib/components/faqs/faqs-tabs/faqs-tabs.component.mjs +24 -0
- package/esm2020/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.mjs +80 -0
- package/esm2020/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +95 -0
- package/esm2020/lib/components/generic/generic-insight/generic-insight.component.mjs +11 -0
- package/esm2020/lib/components/generic/generic-misc/generic-misc.component.mjs +73 -0
- package/esm2020/lib/components/generic/generic-tabs/generic-tabs.component.mjs +31 -0
- package/esm2020/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +97 -0
- package/esm2020/lib/components/login-notifications/login-notification-tabs/login-notification-tabs.component.mjs +24 -0
- package/esm2020/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +88 -0
- package/esm2020/lib/components/newsletters/newsletter-details/newsletter-details.component.mjs +77 -0
- package/esm2020/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +236 -0
- package/esm2020/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +73 -0
- package/esm2020/lib/components/newsletters/newsletters-insight/newsletters-insight.component.mjs +30 -0
- package/esm2020/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +167 -0
- package/esm2020/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +97 -0
- package/esm2020/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.mjs +38 -0
- package/esm2020/lib/components/permissions/permissions-details/permissions-details.component.mjs +83 -0
- package/esm2020/lib/components/permissions/permissions-list/permissions-list.component.mjs +76 -0
- package/esm2020/lib/components/permissions/permissions-tabs/permissions-tabs.component.mjs +31 -0
- package/esm2020/lib/components/permissions/role-details/role-details.component.mjs +117 -0
- package/esm2020/lib/components/permissions/roles-list/roles-list.component.mjs +83 -0
- package/esm2020/lib/components/products/product-details/product-details.component.mjs +305 -0
- package/esm2020/lib/components/products/products-insight/products-insight.component.mjs +46 -0
- package/esm2020/lib/components/products/products-list/products-list.component.mjs +142 -0
- package/esm2020/lib/components/products/products-tabs/products-tabs.component.mjs +28 -0
- package/esm2020/lib/components/products/users-list-for-product/users-list-for-product.component.mjs +55 -0
- package/esm2020/lib/components/subscriptions/subscription-agents/subscription-agents.component.mjs +122 -0
- package/esm2020/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +125 -0
- package/esm2020/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +174 -0
- package/esm2020/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +210 -0
- package/esm2020/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +60 -0
- package/esm2020/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +98 -0
- package/esm2020/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +100 -0
- package/esm2020/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.mjs +48 -0
- package/esm2020/lib/components/subscriptions/subscriptions-insight/subscription-insight-tabs/subscription-insight-tabs.component.mjs +18 -0
- package/esm2020/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.mjs +48 -0
- package/esm2020/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +301 -0
- package/esm2020/lib/components/subscriptions/subscriptions-tabs/subscriptions-tabs.component.mjs +35 -0
- package/esm2020/lib/components/tags/tags-category/tags-category.component.mjs +125 -0
- package/esm2020/lib/components/tags/tags-list/tags-list.component.mjs +139 -0
- package/esm2020/lib/components/tags/tags-tabs/tags-tabs.component.mjs +32 -0
- package/esm2020/lib/components/tips/tip-detail/tip-detail.component.mjs +75 -0
- package/esm2020/lib/components/tips/tips-list/tips-list.component.mjs +46 -0
- package/esm2020/lib/components/tips/tips-tabs/tips-tabs.component.mjs +25 -0
- package/esm2020/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +101 -0
- package/esm2020/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +93 -0
- package/esm2020/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +89 -0
- package/esm2020/lib/components/tracking/events/events.component.mjs +89 -0
- package/esm2020/lib/components/tracking/tracking-tabs/tracking-tabs.component.mjs +49 -0
- package/esm2020/lib/components/tracking/versions/versions.component.mjs +100 -0
- package/esm2020/lib/components/users/user-details/user-details.component.mjs +148 -0
- package/esm2020/lib/components/users/users-insight/users-insight.component.mjs +38 -0
- package/esm2020/lib/components/users/users-list/users-list.component.mjs +312 -0
- package/esm2020/lib/components/users/users-tabs/users-tabs.component.mjs +32 -0
- package/esm2020/lib/shared/interface/contact-us.interface.mjs +2 -0
- package/esm2020/lib/shared/interface/credential.interface.mjs +2 -0
- package/esm2020/lib/shared/interface/domain-config.interface.mjs +2 -0
- package/esm2020/lib/shared/interface/feedback-question.interface.mjs +2 -0
- package/esm2020/lib/shared/interface/global-config.interface.mjs +2 -0
- package/esm2020/lib/shared/interface/login-notification.interface.mjs +2 -0
- package/esm2020/lib/shared/interface/newsletter.interface.mjs +2 -0
- package/esm2020/lib/shared/interface/permission.interface.mjs +2 -0
- package/esm2020/lib/shared/interface/privacy-tos.interface.mjs +2 -0
- package/esm2020/lib/shared/interface/tip.interface.mjs +2 -0
- package/esm2020/lib/shared/interface/tracking.interface.mjs +2 -0
- package/esm2020/lib/shared/models/admin.model.mjs +337 -0
- package/esm2020/lib/shared/routers/routers.mjs +27 -0
- package/fesm2015/admin-module.mjs +7762 -0
- package/fesm2015/admin-module.mjs.map +1 -0
- package/fesm2020/admin-module.mjs +7767 -0
- package/fesm2020/admin-module.mjs.map +1 -0
- package/index.d.ts +82 -0
- package/lib/admin-guard.service.d.ts +14 -0
- package/lib/admin-module.routing.d.ts +7 -0
- package/lib/admin.module.d.ts +98 -0
- package/lib/admin.service.d.ts +145 -0
- package/lib/components/TOS/terms-of-service/terms-of-service.component.d.ts +51 -0
- package/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.d.ts +24 -0
- package/lib/components/TOS/terms-of-service-tabs/terms-of-service-tabs.component.d.ts +9 -0
- package/lib/components/config/global-config-details/global-config-details.component.d.ts +25 -0
- package/lib/components/config/global-config-list/global-config-list.component.d.ts +51 -0
- package/lib/components/config/global-config-tabs/global-config-tabs.component.d.ts +7 -0
- package/lib/components/contact-us/contact-us-list/contact-us-list.component.d.ts +28 -0
- package/lib/components/contact-us/contact-us-tabs/contact-us-tabs.component.d.ts +7 -0
- package/lib/components/credentials/credentials/credentials.component.d.ts +49 -0
- package/lib/components/credentials/credentials-details/credentials-details.component.d.ts +25 -0
- package/lib/components/credentials/credentials-tab/credentials-tab.component.d.ts +8 -0
- package/lib/components/credentials/subscription-credentials/subscription-credentials.component.d.ts +52 -0
- package/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.d.ts +28 -0
- package/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.d.ts +67 -0
- package/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.d.ts +49 -0
- package/lib/components/domain-config/domain-config-details/domain-config-details.component.d.ts +44 -0
- package/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.d.ts +49 -0
- package/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.d.ts +54 -0
- package/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.d.ts +49 -0
- package/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.d.ts +49 -0
- package/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.d.ts +49 -0
- package/lib/components/domain-config/domain-config-list/domain-config-list.component.d.ts +50 -0
- package/lib/components/domain-config/domain-config-tabs/domain-config-tabs.component.d.ts +7 -0
- package/lib/components/faqs/faqs-list/faqs-list.component.d.ts +63 -0
- package/lib/components/faqs/faqs-tabs/faqs-tabs.component.d.ts +7 -0
- package/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.d.ts +51 -0
- package/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.d.ts +56 -0
- package/lib/components/generic/generic-insight/generic-insight.component.d.ts +5 -0
- package/lib/components/generic/generic-misc/generic-misc.component.d.ts +16 -0
- package/lib/components/generic/generic-tabs/generic-tabs.component.d.ts +7 -0
- package/lib/components/login-notifications/login-notification-details/login-notification-details.component.d.ts +53 -0
- package/lib/components/login-notifications/login-notification-tabs/login-notification-tabs.component.d.ts +7 -0
- package/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.d.ts +50 -0
- package/lib/components/newsletters/newsletter-details/newsletter-details.component.d.ts +49 -0
- package/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.d.ts +77 -0
- package/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.d.ts +26 -0
- package/lib/components/newsletters/newsletters-insight/newsletters-insight.component.d.ts +15 -0
- package/lib/components/newsletters/newsletters-items/newsletters-items.component.d.ts +69 -0
- package/lib/components/newsletters/newsletters-list/newsletters-list.component.d.ts +52 -0
- package/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.d.ts +9 -0
- package/lib/components/permissions/permissions-details/permissions-details.component.d.ts +51 -0
- package/lib/components/permissions/permissions-list/permissions-list.component.d.ts +48 -0
- package/lib/components/permissions/permissions-tabs/permissions-tabs.component.d.ts +8 -0
- package/lib/components/permissions/role-details/role-details.component.d.ts +32 -0
- package/lib/components/permissions/roles-list/roles-list.component.d.ts +50 -0
- package/lib/components/products/product-details/product-details.component.d.ts +64 -0
- package/lib/components/products/products-insight/products-insight.component.d.ts +21 -0
- package/lib/components/products/products-list/products-list.component.d.ts +65 -0
- package/lib/components/products/products-tabs/products-tabs.component.d.ts +8 -0
- package/lib/components/products/users-list-for-product/users-list-for-product.component.d.ts +22 -0
- package/lib/components/subscriptions/subscription-agents/subscription-agents.component.d.ts +29 -0
- package/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.d.ts +31 -0
- package/lib/components/subscriptions/subscription-details/subscription-details.component.d.ts +43 -0
- package/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.d.ts +69 -0
- package/lib/components/subscriptions/subscription-products/subscription-products.component.d.ts +50 -0
- package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +57 -0
- package/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.d.ts +40 -0
- package/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.d.ts +22 -0
- package/lib/components/subscriptions/subscriptions-insight/subscription-insight-tabs/subscription-insight-tabs.component.d.ts +6 -0
- package/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.d.ts +22 -0
- package/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.d.ts +93 -0
- package/lib/components/subscriptions/subscriptions-tabs/subscriptions-tabs.component.d.ts +8 -0
- package/lib/components/tags/tags-category/tags-category.component.d.ts +32 -0
- package/lib/components/tags/tags-list/tags-list.component.d.ts +33 -0
- package/lib/components/tags/tags-tabs/tags-tabs.component.d.ts +9 -0
- package/lib/components/tips/tip-detail/tip-detail.component.d.ts +21 -0
- package/lib/components/tips/tips-list/tips-list.component.d.ts +41 -0
- package/lib/components/tips/tips-tabs/tips-tabs.component.d.ts +9 -0
- package/lib/components/tracking/ahoy-events/ahoy-events.component.d.ts +35 -0
- package/lib/components/tracking/ahoy-messages/ahoy-messages.component.d.ts +28 -0
- package/lib/components/tracking/ahoy-visits/ahoy-visits.component.d.ts +28 -0
- package/lib/components/tracking/events/events.component.d.ts +28 -0
- package/lib/components/tracking/tracking-tabs/tracking-tabs.component.d.ts +8 -0
- package/lib/components/tracking/versions/versions.component.d.ts +34 -0
- package/lib/components/users/user-details/user-details.component.d.ts +33 -0
- package/lib/components/users/users-insight/users-insight.component.d.ts +17 -0
- package/lib/components/users/users-list/users-list.component.d.ts +94 -0
- package/lib/components/users/users-tabs/users-tabs.component.d.ts +11 -0
- package/lib/shared/interface/contact-us.interface.d.ts +16 -0
- package/lib/shared/interface/credential.interface.d.ts +37 -0
- package/lib/shared/interface/domain-config.interface.d.ts +120 -0
- package/lib/shared/interface/feedback-question.interface.d.ts +10 -0
- package/lib/shared/interface/global-config.interface.d.ts +11 -0
- package/lib/shared/interface/login-notification.interface.d.ts +15 -0
- package/lib/shared/interface/newsletter.interface.d.ts +44 -0
- package/lib/shared/interface/permission.interface.d.ts +10 -0
- package/lib/shared/interface/privacy-tos.interface.d.ts +12 -0
- package/lib/shared/interface/tip.interface.d.ts +15 -0
- package/lib/shared/interface/tracking.interface.d.ts +105 -0
- package/lib/shared/models/admin.model.d.ts +29 -0
- package/lib/shared/routers/routers.d.ts +25 -0
- package/package.json +49 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { DatePipe } from '@angular/common';
|
|
3
|
+
import { Component, Injector } from '@angular/core';
|
|
4
|
+
import groupBy from 'lodash/groupBy';
|
|
5
|
+
import { AdminService } from '../../../admin.service';
|
|
6
|
+
import { AppAdmin } from '../../../shared/models/admin.model';
|
|
7
|
+
import { ROUTERS } from '../../../shared/routers/routers';
|
|
8
|
+
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
9
|
+
import { NgbDateCustomParserFormatter } from '@posiwise/common-services';
|
|
10
|
+
import { HelperService } from '@posiwise/helper-service';
|
|
11
|
+
import { ProductService } from '@posiwise/common-services';
|
|
12
|
+
import { ValidateForm } from '@posiwise/utils';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "../../../admin.service";
|
|
15
|
+
import * as i2 from "@posiwise/common-services";
|
|
16
|
+
import * as i3 from "@angular/common";
|
|
17
|
+
import * as i4 from "primeng/autocomplete";
|
|
18
|
+
import * as i5 from "@posiwise/shared-components";
|
|
19
|
+
import * as i6 from "@ng-bootstrap/ng-bootstrap";
|
|
20
|
+
import * as i7 from "@angular/forms";
|
|
21
|
+
import * as i8 from "@ngneat/transloco";
|
|
22
|
+
export class SubscriptionProductDetailsComponent extends AppBaseComponent {
|
|
23
|
+
constructor(injector, adminService, productService, dateFormatService, datePipe) {
|
|
24
|
+
super(injector);
|
|
25
|
+
this.adminService = adminService;
|
|
26
|
+
this.productService = productService;
|
|
27
|
+
this.dateFormatService = dateFormatService;
|
|
28
|
+
this.datePipe = datePipe;
|
|
29
|
+
this.submitted = false;
|
|
30
|
+
this.routers = ROUTERS;
|
|
31
|
+
this.minDate = HelperService.minDateToday();
|
|
32
|
+
this.filteredProducts = [];
|
|
33
|
+
this.productsList = [];
|
|
34
|
+
this.disableExpiresAt = false;
|
|
35
|
+
this.isSuperAdmin = this.permissionService.isSuperAdmin();
|
|
36
|
+
this.form = AppAdmin.subscriptionProductForm();
|
|
37
|
+
}
|
|
38
|
+
ngOnInit() {
|
|
39
|
+
this.addValidation();
|
|
40
|
+
this.subscriptionId = Number(this.route.snapshot.queryParamMap.get('subscription_id'));
|
|
41
|
+
this.route.params.subscribe(params => {
|
|
42
|
+
this.id = Number(params['id']);
|
|
43
|
+
this.getProductList();
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
get f() {
|
|
47
|
+
return this.form.controls;
|
|
48
|
+
}
|
|
49
|
+
getProductList() {
|
|
50
|
+
this.productService
|
|
51
|
+
.getProductList({}, this.subscriptionId)
|
|
52
|
+
.subscribe(response => {
|
|
53
|
+
this.productsList = this.groupProducts(response.products);
|
|
54
|
+
})
|
|
55
|
+
.add(() => {
|
|
56
|
+
if (this.id) {
|
|
57
|
+
this.subscriptionProductDetails();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
subscriptionProductDetails() {
|
|
62
|
+
this.adminService
|
|
63
|
+
.getSubscriptionProduct(this.id, this.subscriptionId)
|
|
64
|
+
.subscribe(response => {
|
|
65
|
+
this.data = response;
|
|
66
|
+
this.isPurchasedUnitsDisable =
|
|
67
|
+
this.permissionService.isSuperAdmin() ||
|
|
68
|
+
(this.permissionService.isUserSubscriptionSuperAdmin() &&
|
|
69
|
+
!response.stripe_subscription_id);
|
|
70
|
+
if (this.isPurchasedUnitsDisable) {
|
|
71
|
+
this.form.get('purchased_units').enable();
|
|
72
|
+
this.form.get('new_product_id').enable();
|
|
73
|
+
this.form.get('expires_at').enable();
|
|
74
|
+
// this.form.get('signed_up_at').enable();
|
|
75
|
+
this.disableExpiresAt = false;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.form.get('purchased_units').disable();
|
|
79
|
+
this.form.get('new_product_id').disable();
|
|
80
|
+
this.form.get('expires_at').disable();
|
|
81
|
+
// this.form.get('signed_up_at').disable();
|
|
82
|
+
this.disableExpiresAt = true;
|
|
83
|
+
}
|
|
84
|
+
const externalPayment = this.permissionService.isSuperAdmin() || !response?.stripe_subscription_id;
|
|
85
|
+
if (externalPayment) {
|
|
86
|
+
this.form.get('external_payment').enable();
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.form.get('external_payment').disable();
|
|
90
|
+
}
|
|
91
|
+
response.expires_at = this.datePipe.transform(response.expires_at, 'yyyy-MM-dd');
|
|
92
|
+
if (response?.signed_up_at) {
|
|
93
|
+
response.signed_up_at = this.datePipe.transform(response?.signed_up_at, 'yyyy-MM-dd');
|
|
94
|
+
}
|
|
95
|
+
this.form.patchValue(response);
|
|
96
|
+
const expdate = this.dateFormatService.dateFormatForPicker(response?.expires_at);
|
|
97
|
+
let signedUpDate;
|
|
98
|
+
if (response?.signed_up_at) {
|
|
99
|
+
signedUpDate = this.dateFormatService.dateFormatForPicker(response?.signed_up_at);
|
|
100
|
+
this.form.get('signed_up_at').patchValue(signedUpDate);
|
|
101
|
+
}
|
|
102
|
+
this.form.get('expires_at').patchValue(expdate);
|
|
103
|
+
if (response?.product_id) {
|
|
104
|
+
this.form.patchValue({
|
|
105
|
+
new_product_id: this.productsList.find(x => x.value === this.data?.product_id)
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
sortObj(obj) {
|
|
111
|
+
return Object.keys(obj)
|
|
112
|
+
.sort()
|
|
113
|
+
.reduce((result, key) => {
|
|
114
|
+
result[key] = obj[key];
|
|
115
|
+
return result;
|
|
116
|
+
}, {});
|
|
117
|
+
}
|
|
118
|
+
searchProduct(event) {
|
|
119
|
+
this.productService
|
|
120
|
+
.getProductList({ search: event.query }, this.subscriptionId)
|
|
121
|
+
.subscribe(response => {
|
|
122
|
+
this.filteredProducts = this.groupProducts(response.products);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
groupProducts(products) {
|
|
126
|
+
if (products && products?.length) {
|
|
127
|
+
products = products.filter(x => x.dependency_products?.length < 1 && x.active);
|
|
128
|
+
products = groupBy(products, 'currency');
|
|
129
|
+
products = this.sortObj(products);
|
|
130
|
+
let groupedArray = [];
|
|
131
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
132
|
+
for (const p in products) {
|
|
133
|
+
const value = products[p].sort((a, b) => Number(b.price_per_unit) - Number(a.price_per_unit));
|
|
134
|
+
groupedArray.push(...value);
|
|
135
|
+
}
|
|
136
|
+
groupedArray = groupedArray.map(x => {
|
|
137
|
+
return {
|
|
138
|
+
value: x.id,
|
|
139
|
+
label: `${x.name} | ${x.region} | ${x.billing_frequency} | ${x.min_units} x ${(x.price_per_unit / 100).toFixed(2)} | ${x.currency}`
|
|
140
|
+
};
|
|
141
|
+
});
|
|
142
|
+
return groupedArray;
|
|
143
|
+
}
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
onSave() {
|
|
147
|
+
this.submitted = true;
|
|
148
|
+
const expdate = this.form.value.expires_at;
|
|
149
|
+
const signedUpAt = this.form.value.signed_up_at;
|
|
150
|
+
const data = {
|
|
151
|
+
subscription_id: this.subscriptionId,
|
|
152
|
+
product_id: this.data?.product_id,
|
|
153
|
+
expires_at: expdate ? HelperService.dateFormat(expdate) : null,
|
|
154
|
+
signed_up_at: signedUpAt ? HelperService.dateFormat(signedUpAt) : null,
|
|
155
|
+
external_payment: this.form.value.external_payment,
|
|
156
|
+
stripe_subscription_id: this.form.value.stripe_subscription_id,
|
|
157
|
+
min_units: this.form.value.min_units
|
|
158
|
+
};
|
|
159
|
+
if (this.form.value?.new_product_id) {
|
|
160
|
+
data['new_product_id'] = this.form.value?.new_product_id?.value || null;
|
|
161
|
+
}
|
|
162
|
+
if (this.form.value.purchased_units) {
|
|
163
|
+
data['purchased_units'] = this.form.value.purchased_units;
|
|
164
|
+
}
|
|
165
|
+
this.adminService
|
|
166
|
+
.updateSubscriptionProduct(data)
|
|
167
|
+
.subscribe({
|
|
168
|
+
next: () => {
|
|
169
|
+
this.toast.success(this.translation.translate('Admin.Subscriptions.UpdatedMessage'));
|
|
170
|
+
this.back();
|
|
171
|
+
}
|
|
172
|
+
})
|
|
173
|
+
.add(() => {
|
|
174
|
+
this.submitted = false;
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
addValidation() {
|
|
178
|
+
// stripe subscription should be disable if not superadmin
|
|
179
|
+
if (!this.isSuperAdmin) {
|
|
180
|
+
this.form.get('signed_up_at').disable();
|
|
181
|
+
this.form.get('stripe_subscription_id').disable();
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
this.form.get('signed_up_at').enable();
|
|
185
|
+
this.form.get('stripe_subscription_id').enable();
|
|
186
|
+
}
|
|
187
|
+
// external payment
|
|
188
|
+
// this.form.get('external_payment').valueChanges.subscribe(res => {
|
|
189
|
+
// if (!res) {
|
|
190
|
+
// this.form.controls['signed_up_at'].clearValidators();
|
|
191
|
+
// } else {
|
|
192
|
+
// this.form.controls['signed_up_at'].setValidators([Validators.required]);
|
|
193
|
+
// }
|
|
194
|
+
// this.form.controls['signed_up_at'].updateValueAndValidity();
|
|
195
|
+
// });
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
SubscriptionProductDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SubscriptionProductDetailsComponent, deps: [{ token: i0.Injector }, { token: i1.AdminService }, { token: i2.ProductService }, { token: i2.NgbDateCustomParserFormatter }, { token: i3.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
199
|
+
SubscriptionProductDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: SubscriptionProductDetailsComponent, selector: "pw-subscription-product-details", usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i>\n </a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Subscription Product</span>\n </h3>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"p-2 mt-3\">\n <p>\n You can update the Purchased Seats, Product, and Product Expiry date as long as the user hasn't subscribed using stripe.\n </p>\n <p class=\"mb-5\">\n If you set the subscription as External Payment you'll have to manually manage the Product Expiry Date.\n </p>\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.PurchasedSeats' | transloco\"\n [showTooltip]=\"true\"\n name=\"purchased_units\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.PurchasedSeats' | transloco\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"purchased_units\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.MinUnits' | transloco\"\n [showTooltip]=\"true\"\n name=\"min_units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.MinUnits' | transloco\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MinUnits' | transloco\">\n <input type=\"number\"\n min=\"0\"\n [max]=\"form.get('purchased_units').value\"\n class=\"form-control\"\n formControlName=\"min_units\" />\n </pw-input-container>\n </div>\n <!-- product expiry date -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ProductExpiryDate' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ProductExpiryDate' | transloco\"\n name=\"expires_at\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Expiry Date\"\n formControlName=\"expires_at\"\n [outsideDays]=\"'hidden'\"\n ngbDatepicker\n #c=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"disableExpiresAt\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <!-- signedup at-->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.SignedUpAt' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.SignedUpAt' | transloco\"\n name=\"signed_up_at\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.SignedUpAt' | transloco\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Signed Up At\"\n formControlName=\"signed_up_at\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"!isSuperAdmin\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n <!-- stripe subscription id -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.StripeSubscriptionId' | transloco\"\n name=\"stripe_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.StripeSubscriptionId' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"stripe_subscription_id\" />\n </pw-input-container>\n </div>\n <!-- external payment toggle -->\n <div class=\"col-12 col-sm-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ExternalPayment' | transloco\"\n name=\"external_payment\"\n [showTooltip]=\"true\"\n [tooltipPosition]=\"'left'\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ExternalPayment' | transloco\">\n <ui-switch formControlName=\"external_payment\"\n name=\"external_payment\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.Product' | transloco\"\n name=\"new_product_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Product' | transloco\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Product' | transloco\">\n <p-autoComplete [suggestions]=\"filteredProducts\"\n formControlName=\"new_product_id\"\n dataKey=\"value\"\n field=\"label\"\n [dropdown]=\"true\"\n [delay]=\"1000\"\n (completeMethod)=\"searchProduct($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search Product\"\n [inputStyle]=\"\n form.get('new_product_id').touched && form.get('new_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \"\n [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i4.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "itemSize", "suggestions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText"] }, { kind: "directive", type: i6.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.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: i7.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i7.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i8.TranslocoPipe, name: "transloco" }] });
|
|
200
|
+
__decorate([
|
|
201
|
+
ValidateForm('form'),
|
|
202
|
+
__metadata("design:type", Function),
|
|
203
|
+
__metadata("design:paramtypes", []),
|
|
204
|
+
__metadata("design:returntype", void 0)
|
|
205
|
+
], SubscriptionProductDetailsComponent.prototype, "onSave", null);
|
|
206
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SubscriptionProductDetailsComponent, decorators: [{
|
|
207
|
+
type: Component,
|
|
208
|
+
args: [{ selector: 'pw-subscription-product-details', template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i>\n </a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Subscription Product</span>\n </h3>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"p-2 mt-3\">\n <p>\n You can update the Purchased Seats, Product, and Product Expiry date as long as the user hasn't subscribed using stripe.\n </p>\n <p class=\"mb-5\">\n If you set the subscription as External Payment you'll have to manually manage the Product Expiry Date.\n </p>\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.PurchasedSeats' | transloco\"\n [showTooltip]=\"true\"\n name=\"purchased_units\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.PurchasedSeats' | transloco\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"purchased_units\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.MinUnits' | transloco\"\n [showTooltip]=\"true\"\n name=\"min_units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.MinUnits' | transloco\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MinUnits' | transloco\">\n <input type=\"number\"\n min=\"0\"\n [max]=\"form.get('purchased_units').value\"\n class=\"form-control\"\n formControlName=\"min_units\" />\n </pw-input-container>\n </div>\n <!-- product expiry date -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ProductExpiryDate' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ProductExpiryDate' | transloco\"\n name=\"expires_at\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Expiry Date\"\n formControlName=\"expires_at\"\n [outsideDays]=\"'hidden'\"\n ngbDatepicker\n #c=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"disableExpiresAt\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <!-- signedup at-->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.SignedUpAt' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.SignedUpAt' | transloco\"\n name=\"signed_up_at\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.SignedUpAt' | transloco\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Signed Up At\"\n formControlName=\"signed_up_at\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"!isSuperAdmin\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n <!-- stripe subscription id -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.StripeSubscriptionId' | transloco\"\n name=\"stripe_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.StripeSubscriptionId' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"stripe_subscription_id\" />\n </pw-input-container>\n </div>\n <!-- external payment toggle -->\n <div class=\"col-12 col-sm-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ExternalPayment' | transloco\"\n name=\"external_payment\"\n [showTooltip]=\"true\"\n [tooltipPosition]=\"'left'\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ExternalPayment' | transloco\">\n <ui-switch formControlName=\"external_payment\"\n name=\"external_payment\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.Product' | transloco\"\n name=\"new_product_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Product' | transloco\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Product' | transloco\">\n <p-autoComplete [suggestions]=\"filteredProducts\"\n formControlName=\"new_product_id\"\n dataKey=\"value\"\n field=\"label\"\n [dropdown]=\"true\"\n [delay]=\"1000\"\n (completeMethod)=\"searchProduct($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search Product\"\n [inputStyle]=\"\n form.get('new_product_id').touched && form.get('new_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \"\n [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
209
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.AdminService }, { type: i2.ProductService }, { type: i2.NgbDateCustomParserFormatter }, { type: i3.DatePipe }]; }, propDecorators: { onSave: [] } });
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXByb2R1Y3QtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvc3Vic2NyaXB0aW9ucy9zdWJzY3JpcHRpb24tcHJvZHVjdC1kZXRhaWxzL3N1YnNjcmlwdGlvbi1wcm9kdWN0LWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLXByb2R1Y3QtZGV0YWlscy9zdWJzY3JpcHRpb24tcHJvZHVjdC1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7QUFN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QWdFO1FBQ2hFLGVBQWU7UUFDZixtRkFBbUY7UUFDbkYsUUFBUTtRQUNSLG1FQUFtRTtRQUNuRSxNQUFNO0lBQ1YsQ0FBQzs7Z0lBM05RLG1DQUFtQztvSEFBbkMsbUNBQW1DLDhGQ2xCaEQsb21QQXNLQTtBRGtCSTtJQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7aUVBaUNwQjsyRkF2TVEsbUNBQW1DO2tCQUovQyxTQUFTOytCQUNJLGlDQUFpQzt5TkEwSzNDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgZ3JvdXBCeSBmcm9tICdsb2Rhc2gvZ3JvdXBCeSc7XG5cbmltcG9ydCB7IEFkbWluU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FkbWluLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwQWRtaW4gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL2FkbWluLm1vZGVsJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IE5nYkRhdGVDdXN0b21QYXJzZXJGb3JtYXR0ZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctc3Vic2NyaXB0aW9uLXByb2R1Y3QtZGV0YWlscycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N1YnNjcmlwdGlvbi1wcm9kdWN0LWRldGFpbHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblByb2R1Y3REZXRhaWxzQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgaWQ6IG51bWJlcjtcblxuICAgIGRhdGE6IGFueTtcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgaXNMb2FkaW5nOiBib29sZWFuO1xuXG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIG1pbkRhdGUgPSBIZWxwZXJTZXJ2aWNlLm1pbkRhdGVUb2RheSgpO1xuXG4gICAgcHJpdmF0ZSBpc1B1cmNoYXNlZFVuaXRzRGlzYWJsZTogYm9vbGVhbjtcblxuICAgIGZpbHRlcmVkUHJvZHVjdHMgPSBbXTtcblxuICAgIHByb2R1Y3RzTGlzdCA9IFtdO1xuXG4gICAgZGlzYWJsZUV4cGlyZXNBdCA9IGZhbHNlO1xuXG4gICAgaXNTdXBlckFkbWluID0gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5pc1N1cGVyQWRtaW4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRhdGVGb3JtYXRTZXJ2aWNlOiBOZ2JEYXRlQ3VzdG9tUGFyc2VyRm9ybWF0dGVyLFxuICAgICAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIHRoaXMuZm9ybSA9IEFwcEFkbWluLnN1YnNjcmlwdGlvblByb2R1Y3RGb3JtKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbigpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gTnVtYmVyKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ3N1YnNjcmlwdGlvbl9pZCcpKTtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmlkID0gTnVtYmVyKHBhcmFtc1snaWQnXSk7XG4gICAgICAgICAgICB0aGlzLmdldFByb2R1Y3RMaXN0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIGdldFByb2R1Y3RMaXN0KCkge1xuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0UHJvZHVjdExpc3Qoe30sIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RzTGlzdCA9IHRoaXMuZ3JvdXBQcm9kdWN0cyhyZXNwb25zZS5wcm9kdWN0cyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25Qcm9kdWN0RGV0YWlscygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uUHJvZHVjdERldGFpbHMoKSB7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0U3Vic2NyaXB0aW9uUHJvZHVjdCh0aGlzLmlkLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1B1cmNoYXNlZFVuaXRzRGlzYWJsZSA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNTdXBlckFkbWluKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNVc2VyU3Vic2NyaXB0aW9uU3VwZXJBZG1pbigpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhcmVzcG9uc2Uuc3RyaXBlX3N1YnNjcmlwdGlvbl9pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQdXJjaGFzZWRVbml0c0Rpc2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncHVyY2hhc2VkX3VuaXRzJykuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ25ld19wcm9kdWN0X2lkJykuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2V4cGlyZXNfYXQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5mb3JtLmdldCgnc2lnbmVkX3VwX2F0JykuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUV4cGlyZXNBdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3B1cmNoYXNlZF91bml0cycpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnbmV3X3Byb2R1Y3RfaWQnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2V4cGlyZXNfYXQnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZm9ybS5nZXQoJ3NpZ25lZF91cF9hdCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlRXhwaXJlc0F0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuYWxQYXltZW50ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5pc1N1cGVyQWRtaW4oKSB8fCAhcmVzcG9uc2U/LnN0cmlwZV9zdWJzY3JpcHRpb25faWQ7XG4gICAgICAgICAgICAgICAgaWYgKGV4dGVybmFsUGF5bWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdleHRlcm5hbF9wYXltZW50JykuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnZXh0ZXJuYWxfcGF5bWVudCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuZXhwaXJlc19hdCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJlc3BvbnNlLmV4cGlyZXNfYXQsICd5eXl5LU1NLWRkJyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5zaWduZWRfdXBfYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2lnbmVkX3VwX2F0ID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZT8uc2lnbmVkX3VwX2F0LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3l5eXktTU0tZGQnXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBkYXRlID0gdGhpcy5kYXRlRm9ybWF0U2VydmljZS5kYXRlRm9ybWF0Rm9yUGlja2VyKHJlc3BvbnNlPy5leHBpcmVzX2F0KTtcbiAgICAgICAgICAgICAgICBsZXQgc2lnbmVkVXBEYXRlO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uc2lnbmVkX3VwX2F0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25lZFVwRGF0ZSA9IHRoaXMuZGF0ZUZvcm1hdFNlcnZpY2UuZGF0ZUZvcm1hdEZvclBpY2tlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlPy5zaWduZWRfdXBfYXRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnc2lnbmVkX3VwX2F0JykucGF0Y2hWYWx1ZShzaWduZWRVcERhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdleHBpcmVzX2F0JykucGF0Y2hWYWx1ZShleHBkYXRlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LnByb2R1Y3RfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3Byb2R1Y3RfaWQ6IHRoaXMucHJvZHVjdHNMaXN0LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9PiB4LnZhbHVlID09PSB0aGlzLmRhdGE/LnByb2R1Y3RfaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0T2JqKG9iaikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgICAgLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IG9ialtrZXldO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBzZWFyY2hQcm9kdWN0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRQcm9kdWN0TGlzdCh7IHNlYXJjaDogZXZlbnQucXVlcnkgfSwgdGhpcy5zdWJzY3JpcHRpb25JZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRQcm9kdWN0cyA9IHRoaXMuZ3JvdXBQcm9kdWN0cyhyZXNwb25zZS5wcm9kdWN0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdyb3VwUHJvZHVjdHMocHJvZHVjdHMpIHtcbiAgICAgICAgaWYgKHByb2R1Y3RzICYmIHByb2R1Y3RzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHByb2R1Y3RzID0gcHJvZHVjdHMuZmlsdGVyKHggPT4geC5kZXBlbmRlbmN5X3Byb2R1Y3RzPy5sZW5ndGggPCAxICYmIHguYWN0aXZlKTtcbiAgICAgICAgICAgIHByb2R1Y3RzID0gZ3JvdXBCeShwcm9kdWN0cywgJ2N1cnJlbmN5Jyk7XG4gICAgICAgICAgICBwcm9kdWN0cyA9IHRoaXMuc29ydE9iaihwcm9kdWN0cyk7XG4gICAgICAgICAgICBsZXQgZ3JvdXBlZEFycmF5ID0gW107XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBpbiBwcm9kdWN0cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvZHVjdHNbcF0uc29ydChcbiAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IE51bWJlcihiLnByaWNlX3Blcl91bml0KSAtIE51bWJlcihhLnByaWNlX3Blcl91bml0KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZEFycmF5LnB1c2goLi4udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBlZEFycmF5ID0gZ3JvdXBlZEFycmF5Lm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeC5pZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGAke3gubmFtZX0gfCAke3gucmVnaW9ufSB8ICR7eC5iaWxsaW5nX2ZyZXF1ZW5jeX0gfCAke3gubWluX3VuaXRzfSB4ICR7KFxuICAgICAgICAgICAgICAgICAgICAgICAgeC5wcmljZV9wZXJfdW5pdCAvIDEwMFxuICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoMil9IHwgJHt4LmN1cnJlbmN5fWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBncm91cGVkQXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgQFZhbGlkYXRlRm9ybSgnZm9ybScpXG4gICAgb25TYXZlKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGV4cGRhdGUgPSB0aGlzLmZvcm0udmFsdWUuZXhwaXJlc19hdDtcbiAgICAgICAgY29uc3Qgc2lnbmVkVXBBdCA9IHRoaXMuZm9ybS52YWx1ZS5zaWduZWRfdXBfYXQ7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuc3Vic2NyaXB0aW9uSWQsXG4gICAgICAgICAgICBwcm9kdWN0X2lkOiB0aGlzLmRhdGE/LnByb2R1Y3RfaWQsXG4gICAgICAgICAgICBleHBpcmVzX2F0OiBleHBkYXRlID8gSGVscGVyU2VydmljZS5kYXRlRm9ybWF0KGV4cGRhdGUpIDogbnVsbCxcbiAgICAgICAgICAgIHNpZ25lZF91cF9hdDogc2lnbmVkVXBBdCA/IEhlbHBlclNlcnZpY2UuZGF0ZUZvcm1hdChzaWduZWRVcEF0KSA6IG51bGwsXG4gICAgICAgICAgICBleHRlcm5hbF9wYXltZW50OiB0aGlzLmZvcm0udmFsdWUuZXh0ZXJuYWxfcGF5bWVudCxcbiAgICAgICAgICAgIHN0cmlwZV9zdWJzY3JpcHRpb25faWQ6IHRoaXMuZm9ybS52YWx1ZS5zdHJpcGVfc3Vic2NyaXB0aW9uX2lkLFxuICAgICAgICAgICAgbWluX3VuaXRzOiB0aGlzLmZvcm0udmFsdWUubWluX3VuaXRzXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmZvcm0udmFsdWU/Lm5ld19wcm9kdWN0X2lkKSB7XG4gICAgICAgICAgICBkYXRhWyduZXdfcHJvZHVjdF9pZCddID0gdGhpcy5mb3JtLnZhbHVlPy5uZXdfcHJvZHVjdF9pZD8udmFsdWUgfHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb3JtLnZhbHVlLnB1cmNoYXNlZF91bml0cykge1xuICAgICAgICAgICAgZGF0YVsncHVyY2hhc2VkX3VuaXRzJ10gPSB0aGlzLmZvcm0udmFsdWUucHVyY2hhc2VkX3VuaXRzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAudXBkYXRlU3Vic2NyaXB0aW9uUHJvZHVjdChkYXRhKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uU3Vic2NyaXB0aW9ucy5VcGRhdGVkTWVzc2FnZScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRWYWxpZGF0aW9uKCkge1xuICAgICAgICAvLyBzdHJpcGUgc3Vic2NyaXB0aW9uIHNob3VsZCBiZSBkaXNhYmxlIGlmIG5vdCBzdXBlcmFkbWluXG4gICAgICAgIGlmICghdGhpcy5pc1N1cGVyQWRtaW4pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3NpZ25lZF91cF9hdCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3N0cmlwZV9zdWJzY3JpcHRpb25faWQnKS5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdzaWduZWRfdXBfYXQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3N0cmlwZV9zdWJzY3JpcHRpb25faWQnKS5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHRlcm5hbCBwYXltZW50XG4gICAgICAgIC8vIHRoaXMuZm9ybS5nZXQoJ2V4dGVybmFsX3BheW1lbnQnKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIC8vICAgICBpZiAoIXJlcykge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1snc2lnbmVkX3VwX2F0J10uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1snc2lnbmVkX3VwX2F0J10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzaWduZWRfdXBfYXQnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIC8vIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgcHctdGFiIG92ZXJmbG93LWhpZGRlblwiPlxuICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkXCI+XG4gICAgPGRpdiBjbGFzcz1cImRhc2hib2FyZC1ib2R5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWUtYXV0byBjb2wteHMtNlwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICAoY2xpY2spPVwiYmFjaygpXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpb3VzXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGgzIGNsYXNzPVwibS1zdWJoZWFkZXJfX3RpdGxlIG0tc3ViaGVhZGVyX190aXRsZS0tc2VwYXJhdG9yXCI+XG4gICAgICAgICAgPHNwYW4+U3Vic2NyaXB0aW9uIFByb2R1Y3Q8L3NwYW4+XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCJcbiAgICAgICAgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0yIG10LTNcIj5cbiAgICAgICAgPHA+XG4gICAgICAgICAgWW91IGNhbiB1cGRhdGUgdGhlIFB1cmNoYXNlZCBTZWF0cywgUHJvZHVjdCwgYW5kIFByb2R1Y3QgRXhwaXJ5IGRhdGUgYXMgbG9uZyBhcyB0aGUgdXNlciBoYXNuJ3Qgc3Vic2NyaWJlZCB1c2luZyBzdHJpcGUuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJtYi01XCI+XG4gICAgICAgICAgSWYgeW91IHNldCB0aGUgc3Vic2NyaXB0aW9uIGFzIEV4dGVybmFsIFBheW1lbnQgeW91J2xsIGhhdmUgdG8gbWFudWFsbHkgbWFuYWdlIHRoZSBQcm9kdWN0IEV4cGlyeSBEYXRlLlxuICAgICAgICA8L3A+XG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgICAgKG5nU3VibWl0KT1cIm9uU2F2ZSgpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zIGNvbC1sZy0yXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlB1cmNoYXNlZFNlYXRzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJwdXJjaGFzZWRfdW5pdHNcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLlB1cmNoYXNlZFNlYXRzJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHVyY2hhc2VkX3VuaXRzXCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtMyBjb2wtbGctMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5NaW5Vbml0cycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwibWluX3VuaXRzXCJcbiAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVmFsaWRhdGlvbi5NaW5Vbml0cycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLk1pblVuaXRzJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgW21heF09XCJmb3JtLmdldCgncHVyY2hhc2VkX3VuaXRzJykudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWluX3VuaXRzXCIgLz5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gcHJvZHVjdCBleHBpcnkgZGF0ZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Qcm9kdWN0RXhwaXJ5RGF0ZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5Qcm9kdWN0RXhwaXJ5RGF0ZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJleHBpcmVzX2F0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFeHBpcnkgRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImV4cGlyZXNfYXRcIlxuICAgICAgICAgICAgICAgICAgICBbb3V0c2lkZURheXNdPVwiJ2hpZGRlbidcIlxuICAgICAgICAgICAgICAgICAgICBuZ2JEYXRlcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICNjPVwibmdiRGF0ZXBpY2tlclwiIC8+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlRXhwaXJlc0F0XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYy50b2dnbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gc2lnbmVkdXAgYXQtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtMyBjb2wtbGctMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5TaWduZWRVcEF0JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLlNpZ25lZFVwQXQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwic2lnbmVkX3VwX2F0XCJcbiAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVmFsaWRhdGlvbi5TaWduZWRVcEF0JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2lnbmVkIFVwIEF0XCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2lnbmVkX3VwX2F0XCJcbiAgICAgICAgICAgICAgICAgICAgbmdiRGF0ZXBpY2tlclxuICAgICAgICAgICAgICAgICAgICAjZD1cIm5nYkRhdGVwaWNrZXJcIiAvPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzU3VwZXJBZG1pblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImQudG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBzdHJpcGUgc3Vic2NyaXB0aW9uIGlkIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlN0cmlwZVN1YnNjcmlwdGlvbklkJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgbmFtZT1cInN0cmlwZV9zdWJzY3JpcHRpb25faWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5TdHJpcGVTdWJzY3JpcHRpb25JZCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RyaXBlX3N1YnNjcmlwdGlvbl9pZFwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIGV4dGVybmFsIHBheW1lbnQgdG9nZ2xlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5FeHRlcm5hbFBheW1lbnQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZXh0ZXJuYWxfcGF5bWVudFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5FeHRlcm5hbFBheW1lbnQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBmb3JtQ29udHJvbE5hbWU9XCJleHRlcm5hbF9wYXltZW50XCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJleHRlcm5hbF9wYXltZW50XCI+XG4gICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wtc20tNFwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInTGFiZWwuUHJvZHVjdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJuZXdfcHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLlByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVmFsaWRhdGlvbi5Qcm9kdWN0JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRQcm9kdWN0c1wiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuZXdfcHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgICAgICBkYXRhS2V5PVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgZmllbGQ9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbZGVsYXldPVwiMTAwMFwiXG4gICAgICAgICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwic2VhcmNoUHJvZHVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9kdWN0XCJcbiAgICAgICAgICAgICAgICAgIFtpbnB1dFN0eWxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCduZXdfcHJvZHVjdF9pZCcpLnRvdWNoZWQgJiYgZm9ybS5nZXQoJ25ld19wcm9kdWN0X2lkJykuaW52YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHsgYm9yZGVyOiAnMXB4IHNvbGlkICNmZjU4NmInIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7IGJvcmRlcjogJzFweCBzb2xpZCBncmF5JyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHRleHQtZW5kIG10LTNcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJiYWNrKClcIj5cbiAgICAgICAgICAgICAge3sgJ0J1dHRvbi5DYW5jZWwnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgIHt7ICdCdXR0b24uU3VibWl0JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Component, Injector } from '@angular/core';
|
|
2
|
+
import { ROUTERS } from '../../../shared/routers/routers';
|
|
3
|
+
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
4
|
+
import { ProductService, SubscriptionService } from '@posiwise/common-services';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@posiwise/common-services";
|
|
7
|
+
import * as i2 from "primeng/table";
|
|
8
|
+
import * as i3 from "primeng/api";
|
|
9
|
+
import * as i4 from "primeng/tooltip";
|
|
10
|
+
import * as i5 from "@angular/common";
|
|
11
|
+
import * as i6 from "@angular/router";
|
|
12
|
+
import * as i7 from "@posiwise/directives";
|
|
13
|
+
import * as i8 from "@ng-bootstrap/ng-bootstrap";
|
|
14
|
+
import * as i9 from "@angular/forms";
|
|
15
|
+
import * as i10 from "@ngneat/transloco";
|
|
16
|
+
export class SubscriptionProductsComponent extends AppBaseComponent {
|
|
17
|
+
constructor(subscriptionService, injector, productService) {
|
|
18
|
+
super(injector);
|
|
19
|
+
this.subscriptionService = subscriptionService;
|
|
20
|
+
this.productService = productService;
|
|
21
|
+
this.subscriptionProducts = [];
|
|
22
|
+
this.isLoaded = false;
|
|
23
|
+
this.loading = true;
|
|
24
|
+
this.searchText = '';
|
|
25
|
+
this.routers = ROUTERS;
|
|
26
|
+
this.currency = [];
|
|
27
|
+
this.objectKeys = Object.keys;
|
|
28
|
+
}
|
|
29
|
+
ngOnInit() {
|
|
30
|
+
this.getSupportedCurrency();
|
|
31
|
+
this.route.params.subscribe(data => {
|
|
32
|
+
this.id = Number(data['id']);
|
|
33
|
+
this.getSubscriptionDetails();
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
getSupportedCurrency() {
|
|
37
|
+
this.productService.getSupportedCurrency().subscribe(res => {
|
|
38
|
+
this.currency = res?.regions;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
getSubscriptionDetails() {
|
|
42
|
+
this.subscriptionService
|
|
43
|
+
.getById(this.id)
|
|
44
|
+
.subscribe(response => {
|
|
45
|
+
this.subscriptionProducts = response?.products || [];
|
|
46
|
+
this.totalRecords = response?.products?.length;
|
|
47
|
+
})
|
|
48
|
+
.add(() => {
|
|
49
|
+
this.isLoaded = true;
|
|
50
|
+
this.loading = false;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
SubscriptionProductsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SubscriptionProductsComponent, deps: [{ token: i1.SubscriptionService }, { token: i0.Injector }, { token: i1.ProductService }], target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
+
SubscriptionProductsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: SubscriptionProductsComponent, selector: "pw-subscription-products", usesInheritance: true, ngImport: i0, template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalRecords === 0\">\n <p-table #dt\n [value]=\"subscriptionProducts\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [responsive]=\"true\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search subscription products...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PricePerUnit' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Currency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.BillingFrequency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MinUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MaxUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PurchasedUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.CalculatedPrice' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.IsDeleted' | transloco }}</th>\n <th class=\"actions-list-two\"\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=\"Name\">{{ item.name }}</td>\n <td data-head=\"Price Per Unit\">\n <span>{{ (item.price_per_unit / 100).toFixed(2) }}\n <i\n class=\"fa fa-info-circle\"\n *ngIf=\"item?.discount && objectKeys(item?.discount)?.length\"\n aria-hidden=\"true\"\n tooltipPosition=\"top\"\n [pTooltip]=\"item?.discount | json\"\n ></i>\n </span>\n </td>\n <td data-head=\"Currency\">\n <span [appDynamicBadge]=\"{ itemsArray: currency, item: item.currency }\"\n color=\"blue-grey\"\n class=\"badge\">{{ item.currency }}</span>\n </td>\n <td data-head=\"Billing Frequency\">\n {{ item.billing_frequency }}\n <span *ngIf=\"item?.pause_collection && objectKeys(item?.pause_collection)?.length\"\n class=\"ms-2\"\n [pTooltip]=\"item?.pause_collection | json\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n </td>\n <td data-head=\"Min Units\">{{ item.min_units }}</td>\n <td data-head=\"Max Units\">{{ item.max_units }}</td>\n <td data-head=\"Purchased Units\">{{ item.purchased_units }}</td>\n <td data-head=\"Calculated Price\">{{ (item.calculated_price / 100).toFixed(2) }}</td>\n <td data-head=\"Deleted\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_deleted }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_deleted ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\"\n [routerLink]=\"[\n routers.subscriptionProductDetails + item.subscription_product_id\n ]\"\n [queryParams]=\"{ subscription_id: 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 <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecords === 0 && isLoaded\">\n <pw-no-data [message]=\"'Admin.Subscriptions.NoSubscriptionProductsMessage' | transloco\">\n </pw-no-data>\n</div>\n", dependencies: [{ kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "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", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "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.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i7.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color"] }, { kind: "directive", type: i7.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i8.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { 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: "pipe", type: i5.JsonPipe, name: "json" }, { kind: "pipe", type: i10.TranslocoPipe, name: "transloco" }] });
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SubscriptionProductsComponent, decorators: [{
|
|
57
|
+
type: Component,
|
|
58
|
+
args: [{ selector: 'pw-subscription-products', template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalRecords === 0\">\n <p-table #dt\n [value]=\"subscriptionProducts\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [responsive]=\"true\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search subscription products...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PricePerUnit' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Currency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.BillingFrequency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MinUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MaxUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PurchasedUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.CalculatedPrice' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.IsDeleted' | transloco }}</th>\n <th class=\"actions-list-two\"\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=\"Name\">{{ item.name }}</td>\n <td data-head=\"Price Per Unit\">\n <span>{{ (item.price_per_unit / 100).toFixed(2) }}\n <i\n class=\"fa fa-info-circle\"\n *ngIf=\"item?.discount && objectKeys(item?.discount)?.length\"\n aria-hidden=\"true\"\n tooltipPosition=\"top\"\n [pTooltip]=\"item?.discount | json\"\n ></i>\n </span>\n </td>\n <td data-head=\"Currency\">\n <span [appDynamicBadge]=\"{ itemsArray: currency, item: item.currency }\"\n color=\"blue-grey\"\n class=\"badge\">{{ item.currency }}</span>\n </td>\n <td data-head=\"Billing Frequency\">\n {{ item.billing_frequency }}\n <span *ngIf=\"item?.pause_collection && objectKeys(item?.pause_collection)?.length\"\n class=\"ms-2\"\n [pTooltip]=\"item?.pause_collection | json\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n </td>\n <td data-head=\"Min Units\">{{ item.min_units }}</td>\n <td data-head=\"Max Units\">{{ item.max_units }}</td>\n <td data-head=\"Purchased Units\">{{ item.purchased_units }}</td>\n <td data-head=\"Calculated Price\">{{ (item.calculated_price / 100).toFixed(2) }}</td>\n <td data-head=\"Deleted\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_deleted }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_deleted ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\"\n [routerLink]=\"[\n routers.subscriptionProductDetails + item.subscription_product_id\n ]\"\n [queryParams]=\"{ subscription_id: 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 <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecords === 0 && isLoaded\">\n <pw-no-data [message]=\"'Admin.Subscriptions.NoSubscriptionProductsMessage' | transloco\">\n </pw-no-data>\n</div>\n" }]
|
|
59
|
+
}], ctorParameters: function () { return [{ type: i1.SubscriptionService }, { type: i0.Injector }, { type: i1.ProductService }]; } });
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9zdWJzY3JpcHRpb25zL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy9zdWJzY3JpcHRpb24tcHJvZHVjdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLXByb2R1Y3RzL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7QUFNaEYsTUFBTSxPQUFPLDZCQUE4QixTQUFRLGdCQUFnQjtJQW1CL0QsWUFDWSxtQkFBd0MsRUFDaEQsUUFBa0IsRUFDVixjQUE4QjtRQUV0QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKUix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBRXhDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQW5CMUMseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBSTFCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUVmLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUVsQixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFRekIsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sb0JBQW9CO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsT0FBTyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHNCQUFzQjtRQUMxQixJQUFJLENBQUMsbUJBQW1CO2FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2FBQ2hCLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUNuRCxDQUFDLENBQUM7YUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOzswSEFwRFEsNkJBQTZCOzhHQUE3Qiw2QkFBNkIsdUZDVjFDLDArSUF1R0E7MkZEN0ZhLDZCQUE2QjtrQkFKekMsU0FBUzsrQkFDSSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUk9VVEVSUyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9yb3V0ZXJzL3JvdXRlcnMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UsIFN1YnNjcmlwdGlvblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zdWJzY3JpcHRpb24tcHJvZHVjdHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zdWJzY3JpcHRpb24tcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblByb2R1Y3RzQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgaWQ6IG51bWJlcjtcblxuICAgIHN1YnNjcmlwdGlvblByb2R1Y3RzID0gW107XG5cbiAgICB0b3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIGlzTG9hZGVkID0gZmFsc2U7XG5cbiAgICBsb2FkaW5nID0gdHJ1ZTtcblxuICAgIHNlYXJjaFRleHQgPSAnJztcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgY3VycmVuY3kgPSBbXTtcblxuICAgIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHN1YnNjcmlwdGlvblNlcnZpY2U6IFN1YnNjcmlwdGlvblNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0U2VydmljZTogUHJvZHVjdFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldFN1cHBvcnRlZEN1cnJlbmN5KCk7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBOdW1iZXIoZGF0YVsnaWQnXSk7XG4gICAgICAgICAgICB0aGlzLmdldFN1YnNjcmlwdGlvbkRldGFpbHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdXBwb3J0ZWRDdXJyZW5jeSgpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5nZXRTdXBwb3J0ZWRDdXJyZW5jeSgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW5jeSA9IHJlcz8ucmVnaW9ucztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdWJzY3JpcHRpb25EZXRhaWxzKCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRCeUlkKHRoaXMuaWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblByb2R1Y3RzID0gcmVzcG9uc2U/LnByb2R1Y3RzIHx8IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzcG9uc2U/LnByb2R1Y3RzPy5sZW5ndGg7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiPlxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWlzTG9hZGVkXCI+XG4gICAgPHAtcHJvZ3Jlc3NTcGlubmVyPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwicHJpbWVuZy1kYXRhdGFibGUtY29udGFpbmVyIHRhYmxlLXJlc3BvbnNpdmUgbXQtMFwiXG4gIFtjbGFzcy5oaWRlVGFibGVdPVwidG90YWxSZWNvcmRzID09PSAwXCI+XG4gIDxwLXRhYmxlICNkdFxuICAgIFt2YWx1ZV09XCJzdWJzY3JpcHRpb25Qcm9kdWN0c1wiXG4gICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcbiAgICBbcm93c109XCJQQUdFX1NJWkVcIlxuICAgIFtyZXNwb25zaXZlXT1cInRydWVcIlxuICAgIFtsYXp5XT1cInRydWVcIlxuICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICBbZmlsdGVyRGVsYXldPVwiMTAwMFwiXG4gICAgW2N1c3RvbVNvcnRdPVwidHJ1ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmRcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggbXQtMiBtZS0yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgIHNpemU9XCI1MFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3Vic2NyaXB0aW9uIHByb2R1Y3RzLi4uXCJcbiAgICAgICAgICAoaW5wdXQpPVwiZHQuZmlsdGVyR2xvYmFsKCRldmVudC50YXJnZXQudmFsdWUsICdjb250YWlucycpXCJcbiAgICAgICAgICBjbGFzcz1cIm13LTkwXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgPHRyPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0xhYmVsLk5hbWUnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLlByaWNlUGVyVW5pdCcgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuQ3VycmVuY3knIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLkJpbGxpbmdGcmVxdWVuY3knIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLk1pblVuaXRzJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5NYXhVbml0cycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuUHVyY2hhc2VkVW5pdHMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLkNhbGN1bGF0ZWRQcmljZScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuSXNEZWxldGVkJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImFjdGlvbnMtbGlzdC10d29cIlxuICAgICAgICAgIHNjb3BlPVwidHJ1ZVwiPnt7ICdMYWJlbC5BY3Rpb25zJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgbGV0LWl0ZW0+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJOYW1lXCI+e3sgaXRlbS5uYW1lIH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlByaWNlIFBlciBVbml0XCI+XG4gICAgICAgICAgPHNwYW4+e3sgKGl0ZW0ucHJpY2VfcGVyX3VuaXQgLyAxMDApLnRvRml4ZWQoMikgfX1cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1pbmZvLWNpcmNsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5kaXNjb3VudCAmJiBvYmplY3RLZXlzKGl0ZW0/LmRpc2NvdW50KT8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIml0ZW0/LmRpc2NvdW50IHwganNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkN1cnJlbmN5XCI+XG4gICAgICAgICAgPHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IGN1cnJlbmN5LCBpdGVtOiBpdGVtLmN1cnJlbmN5IH1cIlxuICAgICAgICAgICAgY29sb3I9XCJibHVlLWdyZXlcIlxuICAgICAgICAgICAgY2xhc3M9XCJiYWRnZVwiPnt7IGl0ZW0uY3VycmVuY3kgfX08L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJCaWxsaW5nIEZyZXF1ZW5jeVwiPlxuICAgICAgICAgIHt7IGl0ZW0uYmlsbGluZ19mcmVxdWVuY3kgfX1cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0/LnBhdXNlX2NvbGxlY3Rpb24gJiYgb2JqZWN0S2V5cyhpdGVtPy5wYXVzZV9jb2xsZWN0aW9uKT8ubGVuZ3RoXCJcbiAgICAgICAgICAgIGNsYXNzPVwibXMtMlwiXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiaXRlbT8ucGF1c2VfY29sbGVjdGlvbiB8IGpzb25cIlxuICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSB0ZXh0LXdhcm5pbmdcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiTWluIFVuaXRzXCI+e3sgaXRlbS5taW5fdW5pdHMgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiTWF4IFVuaXRzXCI+e3sgaXRlbS5tYXhfdW5pdHMgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUHVyY2hhc2VkIFVuaXRzXCI+e3sgaXRlbS5wdXJjaGFzZWRfdW5pdHMgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQ2FsY3VsYXRlZCBQcmljZVwiPnt7IChpdGVtLmNhbGN1bGF0ZWRfcHJpY2UgLyAxMDApLnRvRml4ZWQoMikgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiRGVsZXRlZFwiPlxuICAgICAgICAgIDxzcGFuIFthcHBEeW5hbWljQmFkZ2VdPVwieyBpdGVtc0FycmF5OiBbdHJ1ZSwgZmFsc2VdLCBpdGVtOiBpdGVtPy5pc19kZWxldGVkIH1cIlxuICAgICAgICAgICAgY29sb3I9XCJzdWNjZXNzLWRhbmdlclwiXG4gICAgICAgICAgICBjbGFzcz1cImJhZGdlXCI+e3sgaXRlbT8uaXNfZGVsZXRlZCA/ICdZZXMnIDogJ05vJyB9fTwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkFjdGlvblwiPlxuICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbGlzdC1pbmxpbmVcIj5cbiAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRWRpdFwiXG4gICAgICAgICAgICAgICpyYmFjQWxsb3c9XCInU3Vic2NyaXB0aW9uU3VwZXJBZG1pbidcIlxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlcnMuc3Vic2NyaXB0aW9uUHJvZHVjdERldGFpbHMgKyBpdGVtLnN1YnNjcmlwdGlvbl9wcm9kdWN0X2lkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJ7IHN1YnNjcmlwdGlvbl9pZDogaWQgfVwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3AtdGFibGU+XG4gIDxzcGFuIGNsYXNzPVwidG90YWwtcmVjb3Jkcy1jb3VudFwiPnt7ICdMYWJlbC5Ub3RhbCcgfCB0cmFuc2xvY28gfX06IHt7IHRvdGFsUmVjb3JkcyB9fTwvc3Bhbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cInRvdGFsUmVjb3JkcyA9PT0gMCAmJiBpc0xvYWRlZFwiPlxuICA8cHctbm8tZGF0YSBbbWVzc2FnZV09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ob1N1YnNjcmlwdGlvblByb2R1Y3RzTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgPC9wdy1uby1kYXRhPlxuPC9kaXY+XG4iXX0=
|