@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.
Files changed (283) hide show
  1. package/README.md +7 -0
  2. package/assets/scss/_bootstrap_modules.scss +40 -0
  3. package/assets/scss/_custom-bootstrap.scss +13 -0
  4. package/assets/scss/_dashboard.scss +31 -0
  5. package/assets/scss/_dynamic-styles.scss +534 -0
  6. package/assets/scss/_plugins.scss +3 -0
  7. package/assets/scss/_public-pages.scss +7 -0
  8. package/assets/scss/_shared.scss +3 -0
  9. package/assets/scss/_variables.scss +5 -0
  10. package/assets/scss/common/landing-page-a/landing-page-style-1.scss +670 -0
  11. package/assets/scss/common/landing-page-b/banner.scss +141 -0
  12. package/assets/scss/common/landing-page-b/contact-us.scss +167 -0
  13. package/assets/scss/common/landing-page-b/explainer.scss +75 -0
  14. package/assets/scss/common/landing-page-b/explainer2.scss +35 -0
  15. package/assets/scss/common/landing-page-b/header.scss +56 -0
  16. package/assets/scss/common/landing-page-b/landing-page-style-2.scss +20 -0
  17. package/assets/scss/custom-bootstrap/_badge.scss +468 -0
  18. package/assets/scss/custom-bootstrap/_bootstrap_variables.scss +30 -0
  19. package/assets/scss/custom-bootstrap/_buttons.scss +84 -0
  20. package/assets/scss/custom-bootstrap/_card.scss +319 -0
  21. package/assets/scss/custom-bootstrap/_carousel.scss +6 -0
  22. package/assets/scss/custom-bootstrap/_form_select.scss +7 -0
  23. package/assets/scss/custom-bootstrap/_forms.scss +337 -0
  24. package/assets/scss/custom-bootstrap/_links.scss +7 -0
  25. package/assets/scss/custom-bootstrap/_modal.scss +16 -0
  26. package/assets/scss/custom-bootstrap/_navbar.scss +42 -0
  27. package/assets/scss/custom-bootstrap/_popover.scss +10 -0
  28. package/assets/scss/custom-bootstrap/_progress.scss +12 -0
  29. package/assets/scss/custom-bootstrap/_reboot.scss +93 -0
  30. package/assets/scss/custom-bootstrap/_type.scss +202 -0
  31. package/assets/scss/dashboard/_admin.scss +15 -0
  32. package/assets/scss/dashboard/_animations.scss +20 -0
  33. package/assets/scss/dashboard/_bootstrap-social.scss +641 -0
  34. package/assets/scss/dashboard/_chat.scss +250 -0
  35. package/assets/scss/dashboard/_coming-soon.scss +34 -0
  36. package/assets/scss/dashboard/_components.scss +229 -0
  37. package/assets/scss/dashboard/_email.scss +184 -0
  38. package/assets/scss/dashboard/_fixed-navbar.scss +18 -0
  39. package/assets/scss/dashboard/_gallery.scss +1201 -0
  40. package/assets/scss/dashboard/_helper.scss +736 -0
  41. package/assets/scss/dashboard/_horizontal-timeline.scss +314 -0
  42. package/assets/scss/dashboard/_icons.scss +107 -0
  43. package/assets/scss/dashboard/_layout.scss +23 -0
  44. package/assets/scss/dashboard/_misc.scss +220 -0
  45. package/assets/scss/dashboard/_notifications.scss +27 -0
  46. package/assets/scss/dashboard/_palette.scss +308 -0
  47. package/assets/scss/dashboard/_profile.scss +36 -0
  48. package/assets/scss/dashboard/_responsive.scss +209 -0
  49. package/assets/scss/dashboard/_search.scss +33 -0
  50. package/assets/scss/dashboard/_select.scss +16 -0
  51. package/assets/scss/dashboard/_sidebar-content.scss +632 -0
  52. package/assets/scss/dashboard/_tables.scss +17 -0
  53. package/assets/scss/dashboard/_tabs.scss +151 -0
  54. package/assets/scss/dashboard/_ui-switch.scss +6 -0
  55. package/assets/scss/dashboard/_upload.scss +249 -0
  56. package/assets/scss/dashboard/_utilities.scss +105 -0
  57. package/assets/scss/dashboard/_vertical-timeline.scss +1261 -0
  58. package/assets/scss/dashboard/mixins/_buttons.scss +78 -0
  59. package/assets/scss/dashboard/mixins/_colors.scss +29 -0
  60. package/assets/scss/dashboard/mixins/_custom.scss +34 -0
  61. package/assets/scss/dashboard/mixins/_shadows.scss +62 -0
  62. package/assets/scss/dashboard/mixins/_type.scss +16 -0
  63. package/assets/scss/dashboard/mixins/_typography.scss +29 -0
  64. package/assets/scss/dashboard/mixins/_utilities.scss +129 -0
  65. package/assets/scss/dashboard/mixins/_vendor-prefixes.scss +71 -0
  66. package/assets/scss/plugins/_plugin-nouislider.scss +199 -0
  67. package/assets/scss/plugins/_toastr.scss +71 -0
  68. package/assets/scss/plugins/perfect-scrollbar/_main.scss +3 -0
  69. package/assets/scss/plugins/perfect-scrollbar/_mixins.scss +135 -0
  70. package/assets/scss/plugins/perfect-scrollbar/_ps-custom.scss +134 -0
  71. package/assets/scss/plugins/perfect-scrollbar/_themes.scss +23 -0
  72. package/assets/scss/plugins/perfect-scrollbar/_variables.scss +19 -0
  73. package/assets/scss/public-pages/_buttons.scss +136 -0
  74. package/assets/scss/public-pages/_input-fields.scss +29 -0
  75. package/assets/scss/public-pages/_layout.scss +108 -0
  76. package/assets/scss/public-pages/mixins/_buttons.scss +28 -0
  77. package/assets/scss/shared/_modal.scss +28 -0
  78. package/assets/scss/shared/_prime-ng-tables.scss +107 -0
  79. package/assets/scss/shared/_prime-ng.scss +5100 -0
  80. package/assets/scss/variables/_app-colors-variables.scss +760 -0
  81. package/assets/scss/variables/_branding-variables.scss +93 -0
  82. package/assets/scss/variables/_dashboard-variables.scss +96 -0
  83. package/assets/scss/variables/_generic-variables.scss +33 -0
  84. package/assets/scss/variables/_landing-page-new-variables.scss +11 -0
  85. package/assets/scss/variables/_primeng-variables.scss +190 -0
  86. package/esm2020/admin-module.mjs +5 -0
  87. package/esm2020/index.mjs +85 -0
  88. package/esm2020/lib/admin-guard.service.mjs +44 -0
  89. package/esm2020/lib/admin-module.routing.mjs +706 -0
  90. package/esm2020/lib/admin.module.mjs +328 -0
  91. package/esm2020/lib/admin.service.mjs +411 -0
  92. package/esm2020/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +86 -0
  93. package/esm2020/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +72 -0
  94. package/esm2020/lib/components/TOS/terms-of-service-tabs/terms-of-service-tabs.component.mjs +26 -0
  95. package/esm2020/lib/components/config/global-config-details/global-config-details.component.mjs +61 -0
  96. package/esm2020/lib/components/config/global-config-list/global-config-list.component.mjs +86 -0
  97. package/esm2020/lib/components/config/global-config-tabs/global-config-tabs.component.mjs +24 -0
  98. package/esm2020/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +96 -0
  99. package/esm2020/lib/components/contact-us/contact-us-tabs/contact-us-tabs.component.mjs +24 -0
  100. package/esm2020/lib/components/credentials/credentials/credentials.component.mjs +81 -0
  101. package/esm2020/lib/components/credentials/credentials-details/credentials-details.component.mjs +70 -0
  102. package/esm2020/lib/components/credentials/credentials-tab/credentials-tab.component.mjs +31 -0
  103. package/esm2020/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +87 -0
  104. package/esm2020/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.mjs +82 -0
  105. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +214 -0
  106. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.mjs +86 -0
  107. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-details.component.mjs +56 -0
  108. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +83 -0
  109. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +124 -0
  110. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +83 -0
  111. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +84 -0
  112. package/esm2020/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +83 -0
  113. package/esm2020/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +85 -0
  114. package/esm2020/lib/components/domain-config/domain-config-tabs/domain-config-tabs.component.mjs +24 -0
  115. package/esm2020/lib/components/faqs/faqs-list/faqs-list.component.mjs +289 -0
  116. package/esm2020/lib/components/faqs/faqs-tabs/faqs-tabs.component.mjs +24 -0
  117. package/esm2020/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.mjs +80 -0
  118. package/esm2020/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +95 -0
  119. package/esm2020/lib/components/generic/generic-insight/generic-insight.component.mjs +11 -0
  120. package/esm2020/lib/components/generic/generic-misc/generic-misc.component.mjs +73 -0
  121. package/esm2020/lib/components/generic/generic-tabs/generic-tabs.component.mjs +31 -0
  122. package/esm2020/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +97 -0
  123. package/esm2020/lib/components/login-notifications/login-notification-tabs/login-notification-tabs.component.mjs +24 -0
  124. package/esm2020/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +88 -0
  125. package/esm2020/lib/components/newsletters/newsletter-details/newsletter-details.component.mjs +77 -0
  126. package/esm2020/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +236 -0
  127. package/esm2020/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +73 -0
  128. package/esm2020/lib/components/newsletters/newsletters-insight/newsletters-insight.component.mjs +30 -0
  129. package/esm2020/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +167 -0
  130. package/esm2020/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +97 -0
  131. package/esm2020/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.mjs +38 -0
  132. package/esm2020/lib/components/permissions/permissions-details/permissions-details.component.mjs +83 -0
  133. package/esm2020/lib/components/permissions/permissions-list/permissions-list.component.mjs +76 -0
  134. package/esm2020/lib/components/permissions/permissions-tabs/permissions-tabs.component.mjs +31 -0
  135. package/esm2020/lib/components/permissions/role-details/role-details.component.mjs +117 -0
  136. package/esm2020/lib/components/permissions/roles-list/roles-list.component.mjs +83 -0
  137. package/esm2020/lib/components/products/product-details/product-details.component.mjs +305 -0
  138. package/esm2020/lib/components/products/products-insight/products-insight.component.mjs +46 -0
  139. package/esm2020/lib/components/products/products-list/products-list.component.mjs +142 -0
  140. package/esm2020/lib/components/products/products-tabs/products-tabs.component.mjs +28 -0
  141. package/esm2020/lib/components/products/users-list-for-product/users-list-for-product.component.mjs +55 -0
  142. package/esm2020/lib/components/subscriptions/subscription-agents/subscription-agents.component.mjs +122 -0
  143. package/esm2020/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +125 -0
  144. package/esm2020/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +174 -0
  145. package/esm2020/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +210 -0
  146. package/esm2020/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +60 -0
  147. package/esm2020/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +98 -0
  148. package/esm2020/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +100 -0
  149. package/esm2020/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.mjs +48 -0
  150. package/esm2020/lib/components/subscriptions/subscriptions-insight/subscription-insight-tabs/subscription-insight-tabs.component.mjs +18 -0
  151. package/esm2020/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.mjs +48 -0
  152. package/esm2020/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +301 -0
  153. package/esm2020/lib/components/subscriptions/subscriptions-tabs/subscriptions-tabs.component.mjs +35 -0
  154. package/esm2020/lib/components/tags/tags-category/tags-category.component.mjs +125 -0
  155. package/esm2020/lib/components/tags/tags-list/tags-list.component.mjs +139 -0
  156. package/esm2020/lib/components/tags/tags-tabs/tags-tabs.component.mjs +32 -0
  157. package/esm2020/lib/components/tips/tip-detail/tip-detail.component.mjs +75 -0
  158. package/esm2020/lib/components/tips/tips-list/tips-list.component.mjs +46 -0
  159. package/esm2020/lib/components/tips/tips-tabs/tips-tabs.component.mjs +25 -0
  160. package/esm2020/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +101 -0
  161. package/esm2020/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +93 -0
  162. package/esm2020/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +89 -0
  163. package/esm2020/lib/components/tracking/events/events.component.mjs +89 -0
  164. package/esm2020/lib/components/tracking/tracking-tabs/tracking-tabs.component.mjs +49 -0
  165. package/esm2020/lib/components/tracking/versions/versions.component.mjs +100 -0
  166. package/esm2020/lib/components/users/user-details/user-details.component.mjs +148 -0
  167. package/esm2020/lib/components/users/users-insight/users-insight.component.mjs +38 -0
  168. package/esm2020/lib/components/users/users-list/users-list.component.mjs +312 -0
  169. package/esm2020/lib/components/users/users-tabs/users-tabs.component.mjs +32 -0
  170. package/esm2020/lib/shared/interface/contact-us.interface.mjs +2 -0
  171. package/esm2020/lib/shared/interface/credential.interface.mjs +2 -0
  172. package/esm2020/lib/shared/interface/domain-config.interface.mjs +2 -0
  173. package/esm2020/lib/shared/interface/feedback-question.interface.mjs +2 -0
  174. package/esm2020/lib/shared/interface/global-config.interface.mjs +2 -0
  175. package/esm2020/lib/shared/interface/login-notification.interface.mjs +2 -0
  176. package/esm2020/lib/shared/interface/newsletter.interface.mjs +2 -0
  177. package/esm2020/lib/shared/interface/permission.interface.mjs +2 -0
  178. package/esm2020/lib/shared/interface/privacy-tos.interface.mjs +2 -0
  179. package/esm2020/lib/shared/interface/tip.interface.mjs +2 -0
  180. package/esm2020/lib/shared/interface/tracking.interface.mjs +2 -0
  181. package/esm2020/lib/shared/models/admin.model.mjs +337 -0
  182. package/esm2020/lib/shared/routers/routers.mjs +27 -0
  183. package/fesm2015/admin-module.mjs +7762 -0
  184. package/fesm2015/admin-module.mjs.map +1 -0
  185. package/fesm2020/admin-module.mjs +7767 -0
  186. package/fesm2020/admin-module.mjs.map +1 -0
  187. package/index.d.ts +82 -0
  188. package/lib/admin-guard.service.d.ts +14 -0
  189. package/lib/admin-module.routing.d.ts +7 -0
  190. package/lib/admin.module.d.ts +98 -0
  191. package/lib/admin.service.d.ts +145 -0
  192. package/lib/components/TOS/terms-of-service/terms-of-service.component.d.ts +51 -0
  193. package/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.d.ts +24 -0
  194. package/lib/components/TOS/terms-of-service-tabs/terms-of-service-tabs.component.d.ts +9 -0
  195. package/lib/components/config/global-config-details/global-config-details.component.d.ts +25 -0
  196. package/lib/components/config/global-config-list/global-config-list.component.d.ts +51 -0
  197. package/lib/components/config/global-config-tabs/global-config-tabs.component.d.ts +7 -0
  198. package/lib/components/contact-us/contact-us-list/contact-us-list.component.d.ts +28 -0
  199. package/lib/components/contact-us/contact-us-tabs/contact-us-tabs.component.d.ts +7 -0
  200. package/lib/components/credentials/credentials/credentials.component.d.ts +49 -0
  201. package/lib/components/credentials/credentials-details/credentials-details.component.d.ts +25 -0
  202. package/lib/components/credentials/credentials-tab/credentials-tab.component.d.ts +8 -0
  203. package/lib/components/credentials/subscription-credentials/subscription-credentials.component.d.ts +52 -0
  204. package/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.d.ts +28 -0
  205. package/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.d.ts +67 -0
  206. package/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.d.ts +49 -0
  207. package/lib/components/domain-config/domain-config-details/domain-config-details.component.d.ts +44 -0
  208. package/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.d.ts +49 -0
  209. package/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.d.ts +54 -0
  210. package/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.d.ts +49 -0
  211. package/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.d.ts +49 -0
  212. package/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.d.ts +49 -0
  213. package/lib/components/domain-config/domain-config-list/domain-config-list.component.d.ts +50 -0
  214. package/lib/components/domain-config/domain-config-tabs/domain-config-tabs.component.d.ts +7 -0
  215. package/lib/components/faqs/faqs-list/faqs-list.component.d.ts +63 -0
  216. package/lib/components/faqs/faqs-tabs/faqs-tabs.component.d.ts +7 -0
  217. package/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.d.ts +51 -0
  218. package/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.d.ts +56 -0
  219. package/lib/components/generic/generic-insight/generic-insight.component.d.ts +5 -0
  220. package/lib/components/generic/generic-misc/generic-misc.component.d.ts +16 -0
  221. package/lib/components/generic/generic-tabs/generic-tabs.component.d.ts +7 -0
  222. package/lib/components/login-notifications/login-notification-details/login-notification-details.component.d.ts +53 -0
  223. package/lib/components/login-notifications/login-notification-tabs/login-notification-tabs.component.d.ts +7 -0
  224. package/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.d.ts +50 -0
  225. package/lib/components/newsletters/newsletter-details/newsletter-details.component.d.ts +49 -0
  226. package/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.d.ts +77 -0
  227. package/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.d.ts +26 -0
  228. package/lib/components/newsletters/newsletters-insight/newsletters-insight.component.d.ts +15 -0
  229. package/lib/components/newsletters/newsletters-items/newsletters-items.component.d.ts +69 -0
  230. package/lib/components/newsletters/newsletters-list/newsletters-list.component.d.ts +52 -0
  231. package/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.d.ts +9 -0
  232. package/lib/components/permissions/permissions-details/permissions-details.component.d.ts +51 -0
  233. package/lib/components/permissions/permissions-list/permissions-list.component.d.ts +48 -0
  234. package/lib/components/permissions/permissions-tabs/permissions-tabs.component.d.ts +8 -0
  235. package/lib/components/permissions/role-details/role-details.component.d.ts +32 -0
  236. package/lib/components/permissions/roles-list/roles-list.component.d.ts +50 -0
  237. package/lib/components/products/product-details/product-details.component.d.ts +64 -0
  238. package/lib/components/products/products-insight/products-insight.component.d.ts +21 -0
  239. package/lib/components/products/products-list/products-list.component.d.ts +65 -0
  240. package/lib/components/products/products-tabs/products-tabs.component.d.ts +8 -0
  241. package/lib/components/products/users-list-for-product/users-list-for-product.component.d.ts +22 -0
  242. package/lib/components/subscriptions/subscription-agents/subscription-agents.component.d.ts +29 -0
  243. package/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.d.ts +31 -0
  244. package/lib/components/subscriptions/subscription-details/subscription-details.component.d.ts +43 -0
  245. package/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.d.ts +69 -0
  246. package/lib/components/subscriptions/subscription-products/subscription-products.component.d.ts +50 -0
  247. package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +57 -0
  248. package/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.d.ts +40 -0
  249. package/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.d.ts +22 -0
  250. package/lib/components/subscriptions/subscriptions-insight/subscription-insight-tabs/subscription-insight-tabs.component.d.ts +6 -0
  251. package/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.d.ts +22 -0
  252. package/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.d.ts +93 -0
  253. package/lib/components/subscriptions/subscriptions-tabs/subscriptions-tabs.component.d.ts +8 -0
  254. package/lib/components/tags/tags-category/tags-category.component.d.ts +32 -0
  255. package/lib/components/tags/tags-list/tags-list.component.d.ts +33 -0
  256. package/lib/components/tags/tags-tabs/tags-tabs.component.d.ts +9 -0
  257. package/lib/components/tips/tip-detail/tip-detail.component.d.ts +21 -0
  258. package/lib/components/tips/tips-list/tips-list.component.d.ts +41 -0
  259. package/lib/components/tips/tips-tabs/tips-tabs.component.d.ts +9 -0
  260. package/lib/components/tracking/ahoy-events/ahoy-events.component.d.ts +35 -0
  261. package/lib/components/tracking/ahoy-messages/ahoy-messages.component.d.ts +28 -0
  262. package/lib/components/tracking/ahoy-visits/ahoy-visits.component.d.ts +28 -0
  263. package/lib/components/tracking/events/events.component.d.ts +28 -0
  264. package/lib/components/tracking/tracking-tabs/tracking-tabs.component.d.ts +8 -0
  265. package/lib/components/tracking/versions/versions.component.d.ts +34 -0
  266. package/lib/components/users/user-details/user-details.component.d.ts +33 -0
  267. package/lib/components/users/users-insight/users-insight.component.d.ts +17 -0
  268. package/lib/components/users/users-list/users-list.component.d.ts +94 -0
  269. package/lib/components/users/users-tabs/users-tabs.component.d.ts +11 -0
  270. package/lib/shared/interface/contact-us.interface.d.ts +16 -0
  271. package/lib/shared/interface/credential.interface.d.ts +37 -0
  272. package/lib/shared/interface/domain-config.interface.d.ts +120 -0
  273. package/lib/shared/interface/feedback-question.interface.d.ts +10 -0
  274. package/lib/shared/interface/global-config.interface.d.ts +11 -0
  275. package/lib/shared/interface/login-notification.interface.d.ts +15 -0
  276. package/lib/shared/interface/newsletter.interface.d.ts +44 -0
  277. package/lib/shared/interface/permission.interface.d.ts +10 -0
  278. package/lib/shared/interface/privacy-tos.interface.d.ts +12 -0
  279. package/lib/shared/interface/tip.interface.d.ts +15 -0
  280. package/lib/shared/interface/tracking.interface.d.ts +105 -0
  281. package/lib/shared/models/admin.model.d.ts +29 -0
  282. package/lib/shared/routers/routers.d.ts +25 -0
  283. package/package.json +49 -0
@@ -0,0 +1,122 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Component, Injector } from '@angular/core';
3
+ import { NgbDatepickerConfig } from '@ng-bootstrap/ng-bootstrap';
4
+ import { AdminService } from '../../../admin.service';
5
+ import { AppAdmin } from '../../../shared/models/admin.model';
6
+ import { AppBaseComponent } from '@posiwise/app-base-component';
7
+ import { GroupService } from '@posiwise/common-services';
8
+ import { HelperService } from '@posiwise/helper-service';
9
+ import { ValidateForm } from '@posiwise/utils';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "../../../admin.service";
12
+ import * as i2 from "@posiwise/common-services";
13
+ import * as i3 from "@ng-bootstrap/ng-bootstrap";
14
+ import * as i4 from "primeng/autocomplete";
15
+ import * as i5 from "@angular/router";
16
+ import * as i6 from "@posiwise/directives";
17
+ import * as i7 from "@angular/forms";
18
+ import * as i8 from "@ngneat/transloco";
19
+ export class AgentDetailsComponent extends AppBaseComponent {
20
+ constructor(adminService, groupService, config, injector) {
21
+ super(injector);
22
+ this.adminService = adminService;
23
+ this.groupService = groupService;
24
+ this.config = config;
25
+ this.submitted = false;
26
+ this.allAgents = [];
27
+ this.allUsers = [];
28
+ this.filteredUsers = [];
29
+ this.form = AppAdmin.getSubscriptionAgentsForm();
30
+ }
31
+ ngOnInit() {
32
+ this.route.params.subscribe((data) => {
33
+ this.subscriptionId = data['id'];
34
+ this.agentId = data['agent_id'];
35
+ });
36
+ const current = new Date();
37
+ this.config.minDate = {
38
+ year: current.getFullYear(),
39
+ month: current.getMonth() + 1,
40
+ day: current.getDate()
41
+ };
42
+ this.config.outsideDays = 'hidden';
43
+ this.getAgentsDetails();
44
+ this.getUsers();
45
+ }
46
+ getAgentsDetails() {
47
+ this.adminService.getAgentById(this.subscriptionId, this.agentId).subscribe(response => {
48
+ const res = response.subscription_agent;
49
+ const endDate = response.subscription_agent?.end_date;
50
+ const dobObject = {
51
+ year: Number(endDate.substring(0, 4)),
52
+ month: Number(endDate.substring(5, 7)),
53
+ day: Number(endDate.substring(8, 10))
54
+ };
55
+ response.subscription_agent.user.displayName = `${res?.user?.first_name} ${res?.user?.last_name || ''} ${res?.user?.email}`.trim();
56
+ this.agentDetails = response.subscription_agent;
57
+ this.form.patchValue(response.subscription_agent);
58
+ this.form.patchValue({ end_date: dobObject });
59
+ this.form.get('email').patchValue(res?.user);
60
+ });
61
+ }
62
+ updateDetails() {
63
+ this.submitted = true;
64
+ const formValue = this.form.value;
65
+ const data = {
66
+ percentage: formValue.percentage,
67
+ end_date: HelperService.dateFormat(formValue.end_date),
68
+ email: formValue.email.email
69
+ };
70
+ this.groupService
71
+ .updateAgent(this.subscriptionId, this.agentId, data)
72
+ .subscribe(() => {
73
+ this.toast.success(this.translation.translate('User.Subscriptions.UpdatedMessage'));
74
+ this.back();
75
+ })
76
+ .add(() => {
77
+ this.submitted = false;
78
+ });
79
+ }
80
+ getUsers() {
81
+ this.adminService
82
+ .getUsers({}, { subscription_id: this.subscriptionId })
83
+ .subscribe(response => {
84
+ this.allUsers = response.users;
85
+ this.allUsers.forEach(member => {
86
+ const firstName = member.first_name || '';
87
+ const lastName = member.last_name || '';
88
+ member.displayName = `${firstName} ${lastName} ${member.email}`.trim();
89
+ });
90
+ });
91
+ }
92
+ search(event) {
93
+ let values = [];
94
+ if (event.query) {
95
+ values = this.allUsers.filter(x => {
96
+ return x.displayName.toLowerCase().includes(event.query.toLowerCase());
97
+ });
98
+ }
99
+ else {
100
+ this.allUsers.forEach(element => {
101
+ values.push(element);
102
+ });
103
+ }
104
+ this.filteredUsers = values;
105
+ }
106
+ ngOnDestroy() {
107
+ super.ngOnDestroy();
108
+ }
109
+ }
110
+ AgentDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: AgentDetailsComponent, deps: [{ token: i1.AdminService }, { token: i2.GroupService }, { token: i3.NgbDatepickerConfig }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
111
+ AgentDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: AgentDetailsComponent, selector: "pw-agent-details", usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex align-items-center ms-3\">\n <div class=\"me-auto col-xs-6 d-flex\">\n <a href=\"javascript:void(0)\"\n routerLink=\"../../\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"mt-3\">Update Ambassador Details</h3>\n </div>\n</div>\n<div class=\"p-2 mt-3 ms-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <!-- Agent Details -->\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <div class=\"ui-fluid skills-modal\">\n <label>Ambassador</label>\n <p-autoComplete [suggestions]=\"filteredUsers\"\n formControlName=\"email\"\n dataKey=\"id\"\n field=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search ambassador\"\n [multiple]=\"false\"\n autocomplete=\"off\">\n </p-autoComplete>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label>Percentage</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"percentage\" />\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label>End Date</label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n formControlName=\"end_date\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n Cancel\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'Pages.Admin.Subscription.Edit'\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\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: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i3.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { 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" }] });
112
+ __decorate([
113
+ ValidateForm('form'),
114
+ __metadata("design:type", Function),
115
+ __metadata("design:paramtypes", []),
116
+ __metadata("design:returntype", void 0)
117
+ ], AgentDetailsComponent.prototype, "updateDetails", null);
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: AgentDetailsComponent, decorators: [{
119
+ type: Component,
120
+ args: [{ selector: 'pw-agent-details', template: "<div class=\"d-flex align-items-center ms-3\">\n <div class=\"me-auto col-xs-6 d-flex\">\n <a href=\"javascript:void(0)\"\n routerLink=\"../../\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"mt-3\">Update Ambassador Details</h3>\n </div>\n</div>\n<div class=\"p-2 mt-3 ms-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <!-- Agent Details -->\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <div class=\"ui-fluid skills-modal\">\n <label>Ambassador</label>\n <p-autoComplete [suggestions]=\"filteredUsers\"\n formControlName=\"email\"\n dataKey=\"id\"\n field=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search ambassador\"\n [multiple]=\"false\"\n autocomplete=\"off\">\n </p-autoComplete>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label>Percentage</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"percentage\" />\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label>End Date</label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n formControlName=\"end_date\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n Cancel\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'Pages.Admin.Subscription.Edit'\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n" }]
121
+ }], ctorParameters: function () { return [{ type: i1.AdminService }, { type: i2.GroupService }, { type: i3.NgbDatepickerConfig }, { type: i0.Injector }]; }, propDecorators: { updateDetails: [] } });
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLWFnZW50cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvc3Vic2NyaXB0aW9ucy9zdWJzY3JpcHRpb24tYWdlbnRzL3N1YnNjcmlwdGlvbi1hZ2VudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLWFnZW50cy9zdWJzY3JpcHRpb24tYWdlbnRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQU0vQyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZ0JBQWdCO0lBaUJ2RCxZQUNZLFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLE1BQTJCLEVBQ25DLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUxSLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGlCQUFZLEdBQVosWUFB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Q0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLO1FBQ1IsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNiLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDM0UsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFUSxXQUFXO1FBQ2hCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOztrSEFoSFEscUJBQXFCO3NHQUFyQixxQkFBcUIsK0VDaEJsQyxvMEVBd0VBO0FET0k7SUFBQyxZQUFZLENBQUMsTUFBTSxDQUFDOzs7OzBEQWtCcEI7MkZBakZRLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDSSxrQkFBa0I7dUxBbUU1QixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ2JEYXRlcGlja2VyQ29uZmlnIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG5pbXBvcnQgeyBBZG1pblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hZG1pbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcEFkbWluIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL21vZGVscy9hZG1pbi5tb2RlbCc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgR3JvdXBTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctYWdlbnQtZGV0YWlscycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N1YnNjcmlwdGlvbi1hZ2VudHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFnZW50RGV0YWlsc0NvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGFnZW50SWQ6IG51bWJlcjtcblxuICAgIGFsbEFnZW50czogYW55ID0gW107XG5cbiAgICBwcml2YXRlIGFnZW50RGV0YWlsczogYW55O1xuXG4gICAgYWxsVXNlcnMgPSBbXTtcblxuICAgIGZpbHRlcmVkVXNlcnMgPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFkbWluU2VydmljZTogQWRtaW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGdyb3VwU2VydmljZTogR3JvdXBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpZzogTmdiRGF0ZXBpY2tlckNvbmZpZyxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwQWRtaW4uZ2V0U3Vic2NyaXB0aW9uQWdlbnRzRm9ybSgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKGRhdGE6IFVzZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBkYXRhWydpZCddO1xuICAgICAgICAgICAgdGhpcy5hZ2VudElkID0gZGF0YVsnYWdlbnRfaWQnXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgY3VycmVudCA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMuY29uZmlnLm1pbkRhdGUgPSB7XG4gICAgICAgICAgICB5ZWFyOiBjdXJyZW50LmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBtb250aDogY3VycmVudC5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgIGRheTogY3VycmVudC5nZXREYXRlKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jb25maWcub3V0c2lkZURheXMgPSAnaGlkZGVuJztcbiAgICAgICAgdGhpcy5nZXRBZ2VudHNEZXRhaWxzKCk7XG4gICAgICAgIHRoaXMuZ2V0VXNlcnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFnZW50c0RldGFpbHMoKSB7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmdldEFnZW50QnlJZCh0aGlzLnN1YnNjcmlwdGlvbklkLCB0aGlzLmFnZW50SWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSByZXNwb25zZS5zdWJzY3JpcHRpb25fYWdlbnQ7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcmVzcG9uc2Uuc3Vic2NyaXB0aW9uX2FnZW50Py5lbmRfZGF0ZTtcbiAgICAgICAgICAgIGNvbnN0IGRvYk9iamVjdCA9IHtcbiAgICAgICAgICAgICAgICB5ZWFyOiBOdW1iZXIoZW5kRGF0ZS5zdWJzdHJpbmcoMCwgNCkpLFxuICAgICAgICAgICAgICAgIG1vbnRoOiBOdW1iZXIoZW5kRGF0ZS5zdWJzdHJpbmcoNSwgNykpLFxuICAgICAgICAgICAgICAgIGRheTogTnVtYmVyKGVuZERhdGUuc3Vic3RyaW5nKDgsIDEwKSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXNwb25zZS5zdWJzY3JpcHRpb25fYWdlbnQudXNlci5kaXNwbGF5TmFtZSA9IGAke3Jlcz8udXNlcj8uZmlyc3RfbmFtZX0gJHtcbiAgICAgICAgICAgICAgICByZXM/LnVzZXI/Lmxhc3RfbmFtZSB8fCAnJ1xuICAgICAgICAgICAgfSAke3Jlcz8udXNlcj8uZW1haWx9YC50cmltKCk7XG4gICAgICAgICAgICB0aGlzLmFnZW50RGV0YWlscyA9IHJlc3BvbnNlLnN1YnNjcmlwdGlvbl9hZ2VudDtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHJlc3BvbnNlLnN1YnNjcmlwdGlvbl9hZ2VudCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuZF9kYXRlOiBkb2JPYmplY3QgfSk7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdlbWFpbCcpLnBhdGNoVmFsdWUocmVzPy51c2VyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQFZhbGlkYXRlRm9ybSgnZm9ybScpXG4gICAgdXBkYXRlRGV0YWlscygpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBwZXJjZW50YWdlOiBmb3JtVmFsdWUucGVyY2VudGFnZSxcbiAgICAgICAgICAgIGVuZF9kYXRlOiBIZWxwZXJTZXJ2aWNlLmRhdGVGb3JtYXQoZm9ybVZhbHVlLmVuZF9kYXRlKSxcbiAgICAgICAgICAgIGVtYWlsOiBmb3JtVmFsdWUuZW1haWwuZW1haWxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVBZ2VudCh0aGlzLnN1YnNjcmlwdGlvbklkLCB0aGlzLmFnZW50SWQsIGRhdGEpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3ModGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ1VzZXIuU3Vic2NyaXB0aW9ucy5VcGRhdGVkTWVzc2FnZScpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2soKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVc2VycygpIHtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRVc2Vycyh7fSwgeyBzdWJzY3JpcHRpb25faWQ6IHRoaXMuc3Vic2NyaXB0aW9uSWQgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxsVXNlcnMgPSByZXNwb25zZS51c2VycztcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFVzZXJzLmZvckVhY2gobWVtYmVyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3ROYW1lID0gbWVtYmVyLmZpcnN0X25hbWUgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3ROYW1lID0gbWVtYmVyLmxhc3RfbmFtZSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgbWVtYmVyLmRpc3BsYXlOYW1lID0gYCR7Zmlyc3ROYW1lfSAke2xhc3ROYW1lfSAke21lbWJlci5lbWFpbH1gLnRyaW0oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNlYXJjaChldmVudCkge1xuICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgIGlmIChldmVudC5xdWVyeSkge1xuICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5hbGxVc2Vycy5maWx0ZXIoeCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHguZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC5xdWVyeS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGxVc2Vycy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJlZFVzZXJzID0gdmFsdWVzO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1zLTNcIj5cbiAgPGRpdiBjbGFzcz1cIm1lLWF1dG8gY29sLXhzLTYgZC1mbGV4XCI+XG4gICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICByb3V0ZXJMaW5rPVwiLi4vLi4vXCJcbiAgICAgIGNsYXNzPVwicHJldmlvdXNcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWFsdC1jaXJjbGUtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgPGgzIGNsYXNzPVwibXQtM1wiPlVwZGF0ZSBBbWJhc3NhZG9yIERldGFpbHM8L2gzPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInAtMiBtdC0zIG1zLTNcIj5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAobmdTdWJtaXQpPVwidXBkYXRlRGV0YWlscygpXCI+XG4gICAgPCEtLSBBZ2VudCBEZXRhaWxzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidWktZmx1aWQgc2tpbGxzLW1vZGFsXCI+XG4gICAgICAgICAgPGxhYmVsPkFtYmFzc2Fkb3I8L2xhYmVsPlxuICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRVc2Vyc1wiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICBkYXRhS2V5PVwiaWRcIlxuICAgICAgICAgICAgZmllbGQ9XCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGFtYmFzc2Fkb3JcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcIj5cbiAgICAgICAgPGxhYmVsPlBlcmNlbnRhZ2U8L2xhYmVsPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwZXJjZW50YWdlXCIgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcIj5cbiAgICAgICAgPGxhYmVsPkVuZCBEYXRlPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuZF9kYXRlXCJcbiAgICAgICAgICAgIG5nYkRhdGVwaWNrZXJcbiAgICAgICAgICAgICNkPVwibmdiRGF0ZXBpY2tlclwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkLnRvZ2dsZSgpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvdyB0ZXh0LWVuZCBtdC00XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGVmYXVsdCBtZS0yXCJcbiAgICAgICAgICAoY2xpY2spPVwiYmFjaygpXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAqcmJhY0FsbG93PVwiJ1BhZ2VzLkFkbWluLlN1YnNjcmlwdGlvbi5FZGl0J1wiPlxuICAgICAgICAgIHt7ICdCdXR0b24uVXBkYXRlJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,125 @@
1
+ import { Component, Injector } from '@angular/core';
2
+ import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap';
3
+ import { forkJoin } from 'rxjs';
4
+ import swal from 'sweetalert2';
5
+ import { AdminService } from '../../../admin.service';
6
+ import { AppAdmin } from '../../../shared/models/admin.model';
7
+ import { AppBaseComponent } from '@posiwise/app-base-component';
8
+ import { PermissionService } from '@posiwise/common-services';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../../../admin.service";
11
+ import * as i2 from "@ng-bootstrap/ng-bootstrap";
12
+ import * as i3 from "primeng/table";
13
+ import * as i4 from "primeng/api";
14
+ import * as i5 from "primeng/autocomplete";
15
+ import * as i6 from "@angular/common";
16
+ import * as i7 from "@angular/router";
17
+ import * as i8 from "@angular/forms";
18
+ import * as i9 from "@ngneat/transloco";
19
+ import * as i10 from "@posiwise/pipes";
20
+ export class SubscriptionAgentsListComponent extends AppBaseComponent {
21
+ constructor(adminService, parserFormatter, injector) {
22
+ super(injector);
23
+ this.adminService = adminService;
24
+ this.parserFormatter = parserFormatter;
25
+ this.allAgents = [];
26
+ this.isLoaded = false;
27
+ this.loading = true;
28
+ this.searchText = '';
29
+ this.newEmbass = false;
30
+ this.allUsers = [];
31
+ this.filteredUsers = [];
32
+ this.submitted = false;
33
+ this.formEmbassador = AppAdmin.getEmbassadorForm();
34
+ }
35
+ ngOnInit() {
36
+ this.subscriptionId = PermissionService.selectedSubscription.id;
37
+ this.route.params.subscribe(data => {
38
+ this.id = Number(data['id']);
39
+ this.getAgentsDetails(this.id);
40
+ });
41
+ this.getUsers();
42
+ }
43
+ getAgentsDetails(id) {
44
+ this.adminService
45
+ .getAgents(id)
46
+ .subscribe(response => {
47
+ this.allAgents = response.subscription_agents;
48
+ this.totalRecords = this.allAgents?.length;
49
+ })
50
+ .add(() => {
51
+ this.isLoaded = true;
52
+ this.loading = false;
53
+ });
54
+ }
55
+ getUsers() {
56
+ this.adminService
57
+ .getUsers({}, { subscription_id: this.subscriptionId })
58
+ .subscribe(response => {
59
+ this.allUsers = response.users;
60
+ this.allUsers.forEach(member => {
61
+ const firstName = member.first_name || '';
62
+ const lastName = member.last_name || '';
63
+ member.displayName = `${firstName} ${lastName} ${member.email}`.trim();
64
+ });
65
+ });
66
+ }
67
+ search(event) {
68
+ let values = [];
69
+ if (event.query) {
70
+ values = this.allUsers.filter((x) => {
71
+ return x.displayName.toLowerCase().includes(event.query.toLowerCase());
72
+ });
73
+ }
74
+ else {
75
+ this.allUsers.forEach(element => {
76
+ values.push(element);
77
+ });
78
+ }
79
+ this.filteredUsers = values;
80
+ }
81
+ onAddEmbassador() {
82
+ this.submitted = true;
83
+ if (this.formEmbassador.valid) {
84
+ const emails = this.formEmbassador.value.email.map(x => x.email);
85
+ const formValue = this.formEmbassador.value;
86
+ const data = {
87
+ percentage: formValue.percentage,
88
+ end_date: this.parserFormatter.format(formValue.enddate)
89
+ };
90
+ const observableList = [];
91
+ emails.forEach(email => {
92
+ observableList.push(this.adminService.postAgent(this.id, { ...data, email }));
93
+ });
94
+ forkJoin(observableList).subscribe(_ => {
95
+ this.toast.success(this.translation.translate('Admin.Subscriptions.SavedMessage'));
96
+ this.getAgentsDetails(this.id);
97
+ this.newEmbass = !this.newEmbass;
98
+ this.formEmbassador.reset();
99
+ });
100
+ }
101
+ }
102
+ onDelete(userId) {
103
+ swal.fire({
104
+ title: 'Delete',
105
+ text: `Are you sure you want to delete this agent`,
106
+ showCancelButton: true,
107
+ reverseButtons: true,
108
+ icon: 'warning'
109
+ }).then(rep => {
110
+ if (rep.value) {
111
+ this.adminService.destroyAgent(this.id, userId).subscribe(_ => {
112
+ this.toast.success(this.translation.translate('Admin.Subscriptions.DeletedMessage'));
113
+ this.getAgentsDetails(this.id);
114
+ });
115
+ }
116
+ });
117
+ }
118
+ }
119
+ SubscriptionAgentsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SubscriptionAgentsListComponent, deps: [{ token: i1.AdminService }, { token: i2.NgbDateParserFormatter }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
120
+ SubscriptionAgentsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: SubscriptionAgentsListComponent, selector: "pw-subscription-agents-list", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!newEmbass\">\n <div class=\"w-100 text-center mt-3\">\n <div class=\"d-flex align-items-center\">\n <div class=\"ms-auto col-xs-12\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"newEmbass = true\"\n id=\"btn-create\">\n <i class=\"fa fa-plus-circle me-2\" aria-hidden=\"true\"></i>Add Ambassadors\n </a>\n </div>\n </div>\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]=\"allAgents\"\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 Ambassadors...\"\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\">{{ 'Admin.Subscriptions.AgentName' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Email' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Percentage' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.EndDate' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-agent>\n <tr>\n <td data-head=\"Agent Name\">\n {{ agent.user.first_name !== null ? agent.user.first_name : 'N/A' }}\n </td>\n <td data-head=\"Email\">\n {{ agent.user.email !== null ? agent.user.email : 'N/A' }}\n </td>\n <td data-head=\"Percentage\">{{ agent.percentage }}</td>\n <td data-head=\"End Date\">{{ agent.end_date | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/admin/subscription/',\n agent.subscription_id,\n 'agent_details',\n agent.user_id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\"\n (click)=\"onDelete(agent?.user_id)\">\n <i class=\"fa fa-trash delete-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.NoAmbassadorsMessage' | transloco\">\n </pw-no-data>\n </div>\n</ng-container>\n<ng-container *ngIf=\"newEmbass\">\n <form [formGroup]=\"formEmbassador\"\n id=\"mainFrom\"\n (ngSubmit)=\"onAddEmbassador()\">\n <div class=\"row mb-2\">\n <div class=\"col-10 col-md-6 offset-md-3\">\n <div class=\"ui-fluid skills-modal\">\n <p-autoComplete [suggestions]=\"filteredUsers\"\n formControlName=\"email\"\n dataKey=\"id\"\n field=\"displayName\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n [dropdown]=\"true\"\n placeholder=\"Search embassador\"\n [multiple]=\"true\">\n </p-autoComplete>\n </div>\n\n <div class=\"row mt-3\">\n <div class=\"col\">\n <input type=\"number\"\n formControlName=\"percentage\"\n class=\"form-control\"\n placeholder=\"Enter percentage\" />\n </div>\n <div class=\"col\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"enddate\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2050 }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"text-center mt-2\">\n <button type=\"button\"\n (click)=\"newEmbass = false\"\n class=\"btn btn-sm btn-outline-default me-2\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-sm btn-primary me-2\">Add Ambassador</button>\n </div>\n </form>\n</ng-container>\n", styles: ["#mainFrom{padding-bottom:144px}\n"], dependencies: [{ kind: "component", type: i3.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: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.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: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.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: i2.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.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: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i9.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i10.DateFormatPipe, name: "dateFormat" }] });
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SubscriptionAgentsListComponent, decorators: [{
122
+ type: Component,
123
+ args: [{ selector: 'pw-subscription-agents-list', template: "<ng-container *ngIf=\"!newEmbass\">\n <div class=\"w-100 text-center mt-3\">\n <div class=\"d-flex align-items-center\">\n <div class=\"ms-auto col-xs-12\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"newEmbass = true\"\n id=\"btn-create\">\n <i class=\"fa fa-plus-circle me-2\" aria-hidden=\"true\"></i>Add Ambassadors\n </a>\n </div>\n </div>\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]=\"allAgents\"\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 Ambassadors...\"\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\">{{ 'Admin.Subscriptions.AgentName' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Email' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Percentage' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.EndDate' | transloco }}</th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-agent>\n <tr>\n <td data-head=\"Agent Name\">\n {{ agent.user.first_name !== null ? agent.user.first_name : 'N/A' }}\n </td>\n <td data-head=\"Email\">\n {{ agent.user.email !== null ? agent.user.email : 'N/A' }}\n </td>\n <td data-head=\"Percentage\">{{ agent.percentage }}</td>\n <td data-head=\"End Date\">{{ agent.end_date | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/admin/subscription/',\n agent.subscription_id,\n 'agent_details',\n agent.user_id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\"\n (click)=\"onDelete(agent?.user_id)\">\n <i class=\"fa fa-trash delete-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.NoAmbassadorsMessage' | transloco\">\n </pw-no-data>\n </div>\n</ng-container>\n<ng-container *ngIf=\"newEmbass\">\n <form [formGroup]=\"formEmbassador\"\n id=\"mainFrom\"\n (ngSubmit)=\"onAddEmbassador()\">\n <div class=\"row mb-2\">\n <div class=\"col-10 col-md-6 offset-md-3\">\n <div class=\"ui-fluid skills-modal\">\n <p-autoComplete [suggestions]=\"filteredUsers\"\n formControlName=\"email\"\n dataKey=\"id\"\n field=\"displayName\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n [dropdown]=\"true\"\n placeholder=\"Search embassador\"\n [multiple]=\"true\">\n </p-autoComplete>\n </div>\n\n <div class=\"row mt-3\">\n <div class=\"col\">\n <input type=\"number\"\n formControlName=\"percentage\"\n class=\"form-control\"\n placeholder=\"Enter percentage\" />\n </div>\n <div class=\"col\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"enddate\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2050 }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"text-center mt-2\">\n <button type=\"button\"\n (click)=\"newEmbass = false\"\n class=\"btn btn-sm btn-outline-default me-2\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-sm btn-primary me-2\">Add Ambassador</button>\n </div>\n </form>\n</ng-container>\n", styles: ["#mainFrom{padding-bottom:144px}\n"] }]
124
+ }], ctorParameters: function () { return [{ type: i1.AdminService }, { type: i2.NgbDateParserFormatter }, { type: i0.Injector }]; } });
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLWFnZW50cy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9zdWJzY3JpcHRpb25zL3N1YnNjcmlwdGlvbi1hZ2VudHMtbGlzdC9zdWJzY3JpcHRpb24tYWdlbnRzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLWFnZW50cy1saXN0L3N1YnNjcmlwdGlvbi1hZ2VudHMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQWMsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUUvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7QUFPOUQsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLGdCQUFnQjtJQXlCakUsWUFDWSxZQUEwQixFQUMxQixlQUF1QyxFQUMvQyxRQUFrQjtRQUVsQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKUixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixvQkFBZSxHQUFmLGVB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QUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNOLEtBQUssRUFBRSxRQUFRO1lBQ2YsSUFBSSxFQUFFLDRDQUE0QztZQUNsRCxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLElBQUksRUFBRSxTQUFTO1NBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDVixJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLG9DQUFvQyxDQUFDLENBQ25FLENBQUM7b0JBRUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLENBQUM7YUFDTjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7NEhBOUhRLCtCQUErQjtnSEFBL0IsK0JBQStCLDBGQ2hCNUMseWdMQWtKQTsyRkRsSWEsK0JBQStCO2tCQUwzQyxTQUFTOytCQUNJLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuXG5pbXBvcnQgeyBBZG1pblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hZG1pbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcEFkbWluIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL21vZGVscy9hZG1pbi5tb2RlbCc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXN1YnNjcmlwdGlvbi1hZ2VudHMtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N1YnNjcmlwdGlvbi1hZ2VudHMtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3Vic2NyaXB0aW9uLWFnZW50cy1saXN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3Vic2NyaXB0aW9uQWdlbnRzTGlzdENvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGlkOiBudW1iZXI7XG5cbiAgICBhbGxBZ2VudHMgPSBbXTtcblxuICAgIHRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIGxvYWRpbmcgPSB0cnVlO1xuXG4gICAgc2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgbmV3RW1iYXNzID0gZmFsc2U7XG5cbiAgICBmb3JtRW1iYXNzYWRvcjogVW50eXBlZEZvcm1Hcm91cDtcblxuICAgIGFsbFVzZXJzOiBhbnkgPSBbXTtcblxuICAgIGZpbHRlcmVkVXNlcnMgPSBbXTtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFkbWluU2VydmljZTogQWRtaW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHBhcnNlckZvcm1hdHRlcjogTmdiRGF0ZVBhcnNlckZvcm1hdHRlcixcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5mb3JtRW1iYXNzYWRvciA9IEFwcEFkbWluLmdldEVtYmFzc2Fkb3JGb3JtKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbi5pZDtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZCA9IE51bWJlcihkYXRhWydpZCddKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWdlbnRzRGV0YWlscyh0aGlzLmlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ2V0VXNlcnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFnZW50c0RldGFpbHMoaWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLmdldEFnZW50cyhpZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxsQWdlbnRzID0gcmVzcG9uc2Uuc3Vic2NyaXB0aW9uX2FnZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHRoaXMuYWxsQWdlbnRzPy5sZW5ndGg7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVzZXJzKCkge1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLmdldFVzZXJzKHt9LCB7IHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGxVc2VycyA9IHJlc3BvbnNlLnVzZXJzO1xuICAgICAgICAgICAgICAgIHRoaXMuYWxsVXNlcnMuZm9yRWFjaChtZW1iZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdE5hbWUgPSBtZW1iZXIuZmlyc3RfbmFtZSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdE5hbWUgPSBtZW1iZXIubGFzdF9uYW1lIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBtZW1iZXIuZGlzcGxheU5hbWUgPSBgJHtmaXJzdE5hbWV9ICR7bGFzdE5hbWV9ICR7bWVtYmVyLmVtYWlsfWAudHJpbSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2VhcmNoKGV2ZW50KSB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKGV2ZW50LnF1ZXJ5KSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLmFsbFVzZXJzLmZpbHRlcigoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHguZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC5xdWVyeS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGxVc2Vycy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJlZFVzZXJzID0gdmFsdWVzO1xuICAgIH1cblxuICAgIG9uQWRkRW1iYXNzYWRvcigpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5mb3JtRW1iYXNzYWRvci52YWxpZCkge1xuICAgICAgICAgICAgY29uc3QgZW1haWxzID0gdGhpcy5mb3JtRW1iYXNzYWRvci52YWx1ZS5lbWFpbC5tYXAoeCA9PiB4LmVtYWlsKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZm9ybUVtYmFzc2Fkb3IudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2U6IGZvcm1WYWx1ZS5wZXJjZW50YWdlLFxuICAgICAgICAgICAgICAgIGVuZF9kYXRlOiB0aGlzLnBhcnNlckZvcm1hdHRlci5mb3JtYXQoZm9ybVZhbHVlLmVuZGRhdGUpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlTGlzdDogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXTtcbiAgICAgICAgICAgIGVtYWlscy5mb3JFYWNoKGVtYWlsID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlTGlzdC5wdXNoKHRoaXMuYWRtaW5TZXJ2aWNlLnBvc3RBZ2VudCh0aGlzLmlkLCB7IC4uLmRhdGEsIGVtYWlsIH0pKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3JrSm9pbihvYnNlcnZhYmxlTGlzdCkuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uU3Vic2NyaXB0aW9ucy5TYXZlZE1lc3NhZ2UnKSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdldEFnZW50c0RldGFpbHModGhpcy5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXdFbWJhc3MgPSAhdGhpcy5uZXdFbWJhc3M7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRW1iYXNzYWRvci5yZXNldCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRlbGV0ZSh1c2VySWQ6IG51bWJlcikge1xuICAgICAgICBzd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6ICdEZWxldGUnLFxuICAgICAgICAgICAgdGV4dDogYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBhZ2VudGAsXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWUsXG4gICAgICAgICAgICBpY29uOiAnd2FybmluZydcbiAgICAgICAgfSkudGhlbihyZXAgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmRlc3Ryb3lBZ2VudCh0aGlzLmlkLCB1c2VySWQpLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0FkbWluLlN1YnNjcmlwdGlvbnMuRGVsZXRlZE1lc3NhZ2UnKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWdlbnRzRGV0YWlscyh0aGlzLmlkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFuZXdFbWJhc3NcIj5cbiAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1zLWF1dG8gY29sLXhzLTEyXCI+XG4gICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IGZsb2F0LWVuZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm5ld0VtYmFzcyA9IHRydWVcIlxuICAgICAgICAgIGlkPVwiYnRuLWNyZWF0ZVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGUgbWUtMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5BZGQgQW1iYXNzYWRvcnNcbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpc0xvYWRlZFwiPlxuICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicHJpbWVuZy1kYXRhdGFibGUtY29udGFpbmVyIHRhYmxlLXJlc3BvbnNpdmUgbXQtMFwiXG4gICAgW2NsYXNzLmhpZGVUYWJsZV09XCJ0b3RhbFJlY29yZHMgPT09IDBcIj5cbiAgICA8cC10YWJsZSAjZHRcbiAgICAgIFt2YWx1ZV09XCJhbGxBZ2VudHNcIlxuICAgICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcbiAgICAgIFtyb3dzXT1cIlBBR0VfU0laRVwiXG4gICAgICBbcmVzcG9uc2l2ZV09XCJ0cnVlXCJcbiAgICAgIFtsYXp5XT1cInRydWVcIlxuICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICBbZmlsdGVyRGVsYXldPVwiMTAwMFwiXG4gICAgICBbY3VzdG9tU29ydF09XCJ0cnVlXCI+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmRcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCBtdC0yIG1lLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICBzaXplPVwiNTBcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggQW1iYXNzYWRvcnMuLi5cIlxuICAgICAgICAgICAgKGlucHV0KT1cImR0LmZpbHRlckdsb2JhbCgkZXZlbnQudGFyZ2V0LnZhbHVlLCAnY29udGFpbnMnKVwiXG4gICAgICAgICAgICBjbGFzcz1cIm13LTkwXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLkFnZW50TmFtZScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnTGFiZWwuRW1haWwnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuUGVyY2VudGFnZScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5FbmREYXRlJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdMYWJlbC5BY3Rpb25zJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgICBsZXQtYWdlbnQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQWdlbnQgTmFtZVwiPlxuICAgICAgICAgICAge3sgYWdlbnQudXNlci5maXJzdF9uYW1lICE9PSBudWxsID8gYWdlbnQudXNlci5maXJzdF9uYW1lIDogJ04vQScgfX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJFbWFpbFwiPlxuICAgICAgICAgICAge3sgYWdlbnQudXNlci5lbWFpbCAhPT0gbnVsbCA/IGFnZW50LnVzZXIuZW1haWwgOiAnTi9BJyB9fVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlBlcmNlbnRhZ2VcIj57eyBhZ2VudC5wZXJjZW50YWdlIH19PC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiRW5kIERhdGVcIj57eyBhZ2VudC5lbmRfZGF0ZSB8IGRhdGVGb3JtYXQgfX08L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJBY3Rpb25cIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbGlzdC1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJFZGl0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tM1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9hZG1pbi9zdWJzY3JpcHRpb24vJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50LnN1YnNjcmlwdGlvbl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZ2VudF9kZXRhaWxzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50LnVzZXJfaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdCBlZGl0LWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRGVsZXRlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tM1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKGFnZW50Py51c2VyX2lkKVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC10YWJsZT5cbiAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXJlY29yZHMtY291bnRcIj57eyAnTGFiZWwuVG90YWwnIHwgdHJhbnNsb2NvIH19OiB7eyB0b3RhbFJlY29yZHMgfX08L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwidG90YWxSZWNvcmRzID09PSAwICYmIGlzTG9hZGVkXCI+XG4gICAgPHB3LW5vLWRhdGEgW21lc3NhZ2VdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuTm9BbWJhc3NhZG9yc01lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gICAgPC9wdy1uby1kYXRhPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5ld0VtYmFzc1wiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1FbWJhc3NhZG9yXCJcbiAgICBpZD1cIm1haW5Gcm9tXCJcbiAgICAobmdTdWJtaXQpPVwib25BZGRFbWJhc3NhZG9yKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTAgY29sLW1kLTYgb2Zmc2V0LW1kLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInVpLWZsdWlkIHNraWxscy1tb2RhbFwiPlxuICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRVc2Vyc1wiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICBkYXRhS2V5PVwiaWRcIlxuICAgICAgICAgICAgZmllbGQ9XCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICAgIFtkcm9wZG93bl09XCJ0cnVlXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGVtYmFzc2Fkb3JcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIj5cbiAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgcGVyY2VudGFnZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ5eXl5LW1tLWRkXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmRkYXRlXCJcbiAgICAgICAgICAgICAgICBuZ2JEYXRlcGlja2VyXG4gICAgICAgICAgICAgICAgI2Q9XCJuZ2JEYXRlcGlja2VyXCJcbiAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJ7IGRheTogMSwgbW9udGg6IDEsIHllYXI6IDE5NTAgfVwiXG4gICAgICAgICAgICAgICAgW21heERhdGVdPVwieyBkYXk6IDMxLCBtb250aDogMTIsIHllYXI6IDIwNTAgfVwiIC8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkLnRvZ2dsZSgpXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG10LTJcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJuZXdFbWJhc3MgPSBmYWxzZVwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1kZWZhdWx0IG1lLTJcIj5cbiAgICAgICAge3sgJ0J1dHRvbi5DYW5jZWwnIHwgdHJhbnNsb2NvIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBtZS0yXCI+QWRkIEFtYmFzc2Fkb3I8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy1jb250YWluZXI+XG4iXX0=