@sunbird-cb/toc 0.0.9 → 0.0.10-mauritius

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 (346) hide show
  1. package/esm2022/lib/_collection/_common/ai-tutor/ai-tutor.component.mjs +1169 -0
  2. package/esm2022/lib/_collection/_common/ai-tutor/socket.service.mjs +121 -0
  3. package/esm2022/lib/_collection/_common/attendance-card/attendance-card.component.mjs +55 -55
  4. package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +126 -126
  5. package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +32 -32
  6. package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +85 -85
  7. package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +100 -100
  8. package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +48 -48
  9. package/esm2022/lib/_collection/_common/card-competency/card-competency.component.mjs +58 -0
  10. package/esm2022/lib/_collection/_common/card-competency/card-competency.module.mjs +22 -0
  11. package/esm2022/lib/_collection/_common/card-content-v2/card-content-v2.model.mjs +23 -0
  12. package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +223 -120
  13. package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +96 -92
  14. package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +48 -48
  15. package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +25 -25
  16. package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +41 -41
  17. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +89 -89
  18. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +42 -42
  19. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +41 -41
  20. package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +78 -78
  21. package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +45 -45
  22. package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +2 -2
  23. package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +70 -70
  24. package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +28 -28
  25. package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +187 -187
  26. package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +86 -86
  27. package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +31 -31
  28. package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +961 -941
  29. package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +183 -183
  30. package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +327 -327
  31. package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +297 -297
  32. package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +304 -248
  33. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1227 -1148
  34. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +16 -16
  35. package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +43 -43
  36. package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +133 -133
  37. package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +66 -66
  38. package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +278 -278
  39. package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +21 -21
  40. package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +21 -21
  41. package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +835 -847
  42. package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +224 -219
  43. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +276 -209
  44. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +26 -26
  45. package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +19 -19
  46. package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +23 -23
  47. package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +113 -113
  48. package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +110 -110
  49. package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +26 -26
  50. package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +19 -19
  51. package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +67 -67
  52. package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +28 -28
  53. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +77 -77
  54. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +2 -2
  55. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +61 -61
  56. package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +20 -20
  57. package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +67 -67
  58. package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +139 -139
  59. package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +71 -71
  60. package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +34 -34
  61. package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +56 -56
  62. package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +25 -25
  63. package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +37 -37
  64. package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +32 -32
  65. package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +30 -30
  66. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +38 -38
  67. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +51 -51
  68. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +115 -115
  69. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +12 -12
  70. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +51 -51
  71. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +61 -61
  72. package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +87 -87
  73. package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +36 -36
  74. package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +62 -62
  75. package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +24 -24
  76. package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +192 -192
  77. package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +44 -44
  78. package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +99 -99
  79. package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +58 -58
  80. package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +67 -67
  81. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +115 -112
  82. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +2 -2
  83. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +69 -69
  84. package/esm2022/lib/_collection-api.mjs +57 -57
  85. package/esm2022/lib/_constants/widget-content.constants.mjs +19 -19
  86. package/esm2022/lib/_directives/tooltip.directive.mjs +68 -68
  87. package/esm2022/lib/_models/common.model.mjs +2 -2
  88. package/esm2022/lib/_models/error.model.mjs +2 -2
  89. package/esm2022/lib/_pipes/highlight.pipe.mjs +24 -24
  90. package/esm2022/lib/_services/rating.service.mjs +89 -89
  91. package/esm2022/lib/_services/samuhik-charcha.service.mjs +29 -29
  92. package/esm2022/lib/_services/viewer-route-util.mjs +103 -103
  93. package/esm2022/lib/_services/widget-content.model.mjs +254 -247
  94. package/esm2022/lib/_services/widget-content.service.mjs +594 -594
  95. package/esm2022/lib/_shared/translate-loader.factory.mjs +9 -9
  96. package/esm2022/lib/app-toc-lib.module.mjs +508 -499
  97. package/esm2022/lib/collection.config.mjs +161 -161
  98. package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +37 -37
  99. package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +1436 -1436
  100. package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +522 -475
  101. package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +119 -119
  102. package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +80 -80
  103. package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +249 -249
  104. package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +39 -39
  105. package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +58 -58
  106. package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +2230 -2229
  107. package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +3017 -2907
  108. package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +157 -157
  109. package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +48 -48
  110. package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +47 -47
  111. package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +766 -766
  112. package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +243 -243
  113. package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +116 -116
  114. package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +44 -44
  115. package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +1854 -1838
  116. package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +236 -236
  117. package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +213 -213
  118. package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +36 -36
  119. package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +258 -256
  120. package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +133 -133
  121. package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +36 -36
  122. package/esm2022/lib/models/app-toc-analytics.model.mjs +2 -2
  123. package/esm2022/lib/models/app-toc.model.mjs +38 -38
  124. package/esm2022/lib/models/auto-complete.model.mjs +2 -2
  125. package/esm2022/lib/models/card-content.model.mjs +13 -13
  126. package/esm2022/lib/models/content-strip-with-tabs.model.mjs +2 -2
  127. package/esm2022/lib/models/discussion-forum.model.mjs +14 -14
  128. package/esm2022/lib/models/goal.model.mjs +2 -2
  129. package/esm2022/lib/models/meta-tag.model.mjs +8 -8
  130. package/esm2022/lib/models/playlist.model.mjs +2 -2
  131. package/esm2022/lib/models/profile-revamp.model.mjs +2 -2
  132. package/esm2022/lib/models/rating.model.mjs +2 -2
  133. package/esm2022/lib/models/user-profile.model.mjs +21 -21
  134. package/esm2022/lib/registration-toc-lib.config.mjs +14 -0
  135. package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +24 -24
  136. package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +24 -24
  137. package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +60 -60
  138. package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +25 -25
  139. package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +106 -106
  140. package/esm2022/lib/resolvers/config-resolver.service.mjs +25 -25
  141. package/esm2022/lib/resolvers/profile-resolver.service.mjs +25 -25
  142. package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +25 -25
  143. package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +51 -51
  144. package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +16 -16
  145. package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +18 -18
  146. package/esm2022/lib/services/access-control.service.mjs +56 -56
  147. package/esm2022/lib/services/action.service.mjs +23 -23
  148. package/esm2022/lib/services/app-toc-v2.service.mjs +368 -313
  149. package/esm2022/lib/services/app-toc.service.mjs +1577 -1613
  150. package/esm2022/lib/services/certificate.service.mjs +114 -69
  151. package/esm2022/lib/services/discuss-utils.service.mjs +45 -58
  152. package/esm2022/lib/services/editor.service.mjs +34 -34
  153. package/esm2022/lib/services/load-check.service.mjs +21 -21
  154. package/esm2022/lib/services/loader.service.mjs +33 -33
  155. package/esm2022/lib/services/mobile-apps.service.mjs +67 -67
  156. package/esm2022/lib/services/netcore.service.mjs +126 -56
  157. package/esm2022/lib/services/nps-grid.service.mjs +43 -31
  158. package/esm2022/lib/services/otp.service.mjs +81 -43
  159. package/esm2022/lib/services/profile-v2.service.mjs +71 -43
  160. package/esm2022/lib/services/reset-ratings.service.mjs +19 -19
  161. package/esm2022/lib/services/resource-download-helper.service.mjs +64 -64
  162. package/esm2022/lib/services/root.service.mjs +106 -0
  163. package/esm2022/lib/services/timer.service.mjs +23 -23
  164. package/esm2022/lib/services/title-tag.service.mjs +71 -71
  165. package/esm2022/lib/services/user-profile.service.mjs +180 -55
  166. package/esm2022/lib/services/viewer-data.service.mjs +64 -64
  167. package/esm2022/lib/services/viewer-util.service.mjs +627 -590
  168. package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +291 -291
  169. package/esm2022/lib/share-toc/share-toc.module.mjs +119 -119
  170. package/esm2022/public-api.mjs +81 -71
  171. package/esm2022/sunbird-cb-toc.mjs +4 -4
  172. package/fesm2022/sunbird-cb-toc.mjs +27145 -24836
  173. package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
  174. package/index.d.ts +5 -5
  175. package/lib/_collection/_common/ai-tutor/ai-tutor.component.d.ts +139 -0
  176. package/lib/_collection/_common/ai-tutor/socket.service.d.ts +19 -0
  177. package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +16 -16
  178. package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +31 -31
  179. package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +15 -15
  180. package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +20 -20
  181. package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +22 -22
  182. package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +15 -15
  183. package/lib/_collection/_common/card-competency/card-competency.component.d.ts +14 -0
  184. package/lib/_collection/_common/card-competency/card-competency.module.d.ts +8 -0
  185. package/lib/_collection/_common/card-content-v2/card-content-v2.model.d.ts +44 -0
  186. package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +31 -22
  187. package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +23 -22
  188. package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +9 -9
  189. package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +11 -11
  190. package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +12 -12
  191. package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +18 -18
  192. package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +14 -14
  193. package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +11 -11
  194. package/lib/_collection/_common/connection-name/connection-name.component.d.ts +17 -17
  195. package/lib/_collection/_common/connection-name/connection-name.module.d.ts +14 -14
  196. package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +199 -199
  197. package/lib/_collection/_common/content-progress/content-progress.component.d.ts +16 -16
  198. package/lib/_collection/_common/content-progress/content-progress.module.d.ts +10 -10
  199. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +38 -38
  200. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +19 -19
  201. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +11 -11
  202. package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +187 -183
  203. package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +41 -41
  204. package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +54 -54
  205. package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +47 -47
  206. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +56 -49
  207. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +195 -171
  208. package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +8 -8
  209. package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +16 -16
  210. package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +40 -40
  211. package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +21 -21
  212. package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +45 -45
  213. package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +10 -10
  214. package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +10 -10
  215. package/lib/_collection/_common/content-toc/content-toc.component.d.ts +131 -128
  216. package/lib/_collection/_common/content-toc/content-toc.module.d.ts +52 -51
  217. package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +32 -29
  218. package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +9 -9
  219. package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +7 -7
  220. package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +7 -7
  221. package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +28 -28
  222. package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +24 -24
  223. package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +14 -14
  224. package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +9 -9
  225. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +12 -12
  226. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +10 -10
  227. package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +22 -22
  228. package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +8 -8
  229. package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +18 -18
  230. package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +8 -8
  231. package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +15 -15
  232. package/lib/_collection/_common/player-brief/player-brief.component.d.ts +35 -35
  233. package/lib/_collection/_common/player-brief/player-brief.module.d.ts +19 -19
  234. package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +14 -14
  235. package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +13 -13
  236. package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +11 -11
  237. package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +11 -11
  238. package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +15 -15
  239. package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +10 -10
  240. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +16 -16
  241. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +11 -11
  242. package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +34 -34
  243. package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +17 -17
  244. package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +15 -15
  245. package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +15 -15
  246. package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +21 -21
  247. package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +12 -12
  248. package/lib/_collection/_common/user-image/user-image.component.d.ts +21 -21
  249. package/lib/_collection/_common/user-image/user-image.module.d.ts +9 -9
  250. package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +47 -47
  251. package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +14 -14
  252. package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +22 -22
  253. package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +19 -19
  254. package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +15 -15
  255. package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +26 -25
  256. package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +21 -21
  257. package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +18 -18
  258. package/lib/_collection-api.d.ts +34 -34
  259. package/lib/_constants/widget-content.constants.d.ts +7 -7
  260. package/lib/_directives/tooltip.directive.d.ts +17 -17
  261. package/lib/_models/common.model.d.ts +3 -3
  262. package/lib/_models/error.model.d.ts +5 -5
  263. package/lib/_pipes/highlight.pipe.d.ts +10 -10
  264. package/lib/_services/rating.service.d.ts +18 -18
  265. package/lib/_services/samuhik-charcha.service.d.ts +13 -13
  266. package/lib/_services/viewer-route-util.d.ts +8 -8
  267. package/lib/_services/widget-content.model.d.ts +521 -515
  268. package/lib/_services/widget-content.service.d.ts +101 -101
  269. package/lib/_shared/translate-loader.factory.d.ts +7 -7
  270. package/lib/app-toc-lib.module.d.ts +89 -88
  271. package/lib/collection.config.d.ts +159 -159
  272. package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +17 -17
  273. package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +225 -225
  274. package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +83 -78
  275. package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +22 -22
  276. package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +31 -31
  277. package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +47 -47
  278. package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +14 -14
  279. package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +21 -21
  280. package/lib/components/app-toc-home/app-toc-home.component.d.ts +315 -314
  281. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +418 -408
  282. package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +47 -47
  283. package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +22 -22
  284. package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +14 -14
  285. package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +149 -149
  286. package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +42 -42
  287. package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +27 -27
  288. package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +15 -15
  289. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +197 -195
  290. package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +44 -44
  291. package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +54 -54
  292. package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +18 -18
  293. package/lib/components/public-survey-form/public-survey-form.component.d.ts +44 -43
  294. package/lib/components/survey-form-question/survey-form-question.component.d.ts +20 -20
  295. package/lib/components/survey-form-section/survey-form-section.component.d.ts +13 -13
  296. package/lib/models/app-toc-analytics.model.d.ts +152 -152
  297. package/lib/models/app-toc.model.d.ts +84 -84
  298. package/lib/models/auto-complete.model.d.ts +27 -27
  299. package/lib/models/card-content.model.d.ts +19 -19
  300. package/lib/models/content-strip-with-tabs.model.d.ts +44 -44
  301. package/lib/models/discussion-forum.model.d.ts +40 -40
  302. package/lib/models/goal.model.d.ts +22 -22
  303. package/lib/models/meta-tag.model.d.ts +6 -6
  304. package/lib/models/playlist.model.d.ts +23 -23
  305. package/lib/models/profile-revamp.model.d.ts +14 -14
  306. package/lib/models/rating.model.d.ts +17 -17
  307. package/lib/models/user-profile.model.d.ts +124 -37
  308. package/lib/registration-toc-lib.config.d.ts +4 -0
  309. package/lib/resolvers/app-toc-cios-resolver.service.d.ts +12 -12
  310. package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +12 -12
  311. package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +16 -16
  312. package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +12 -12
  313. package/lib/resolvers/app-toc-resolver.service.d.ts +16 -16
  314. package/lib/resolvers/config-resolver.service.d.ts +11 -11
  315. package/lib/resolvers/profile-resolver.service.d.ts +11 -11
  316. package/lib/resolvers/restricted-features-resolver.service.d.ts +11 -11
  317. package/lib/routes/app-toc-home/app-toc-home.component.d.ts +19 -19
  318. package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +8 -8
  319. package/lib/routes/app-toc-home/app-toc-home.service.d.ts +8 -8
  320. package/lib/services/access-control.service.d.ts +29 -29
  321. package/lib/services/action.service.d.ts +9 -9
  322. package/lib/services/app-toc-v2.service.d.ts +17 -16
  323. package/lib/services/app-toc.service.d.ts +190 -235
  324. package/lib/services/certificate.service.d.ts +41 -42
  325. package/lib/services/discuss-utils.service.d.ts +11 -33
  326. package/lib/services/editor.service.d.ts +17 -17
  327. package/lib/services/load-check.service.d.ts +8 -8
  328. package/lib/services/loader.service.d.ts +16 -16
  329. package/lib/services/mobile-apps.service.d.ts +38 -38
  330. package/lib/services/netcore.service.d.ts +21 -33
  331. package/lib/services/nps-grid.service.d.ts +16 -15
  332. package/lib/services/otp.service.d.ts +15 -20
  333. package/lib/services/profile-v2.service.d.ts +17 -20
  334. package/lib/services/reset-ratings.service.d.ts +8 -8
  335. package/lib/services/resource-download-helper.service.d.ts +29 -29
  336. package/lib/services/root.service.d.ts +26 -0
  337. package/lib/services/timer.service.d.ts +9 -9
  338. package/lib/services/title-tag.service.d.ts +21 -21
  339. package/lib/services/user-profile.service.d.ts +44 -24
  340. package/lib/services/viewer-data.service.d.ts +62 -58
  341. package/lib/services/viewer-util.service.d.ts +76 -76
  342. package/lib/share-toc/share-toc/share-toc.component.d.ts +56 -56
  343. package/lib/share-toc/share-toc.module.d.ts +32 -32
  344. package/package.json +3 -3
  345. package/public-api.d.ts +65 -56
  346. package/sunbird-cb-toc-0.0.10-mauritius.tgz +0 -0
@@ -1,256 +1,258 @@
1
- //#region (imports)
2
- import { Component, Inject } from '@angular/core';
3
- import { MAT_LEGACY_DIALOG_DATA } from '@angular/material/legacy-dialog';
4
- import { Validators } from '@angular/forms';
5
- import * as _ from 'lodash';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/material/legacy-snack-bar";
8
- import * as i2 from "@angular/material/legacy-dialog";
9
- import * as i3 from "@angular/forms";
10
- import * as i4 from "../../services/app-toc.service";
11
- import * as i5 from "@ngx-translate/core";
12
- import * as i6 from "@angular/common";
13
- import * as i7 from "@angular/material/icon";
14
- import * as i8 from "@angular/material/legacy-button";
15
- import * as i9 from "@angular/material/legacy-progress-spinner";
16
- import * as i10 from "../survey-form-question/survey-form-question.component";
17
- import * as i11 from "../survey-form-section/survey-form-section.component";
18
- //#endregion (imports)
19
- const EMAIL_PATTERN = /^[a-zA-Z0-9]+[a-zA-Z0-9._-]*[a-zA-Z0-9]+@[a-zA-Z0-9]+([-a-zA-Z0-9]*[a-zA-Z0-9]+)?(\.[a-zA-Z0-9-]+)*\.[a-zA-Z]{2,4}$/;
20
- const MOBILE_PATTERN = /^[0]?[6789]\d{9}$/;
21
- export class PublicSurveyFormComponent {
22
- //#endregion (properties)
23
- //#region (constructor)
24
- constructor(snackBar, dialogRef, data, fb, appTocSvc, translate) {
25
- this.snackBar = snackBar;
26
- this.dialogRef = dialogRef;
27
- this.data = data;
28
- this.fb = fb;
29
- this.appTocSvc = appTocSvc;
30
- this.translate = translate;
31
- //#region (properties)
32
- this.rating = 0;
33
- this.stars = Array(5).fill(0);
34
- this.otherFieldType = [];
35
- this.selectedOption = false;
36
- this.surveyId = '';
37
- this.parentalFields = [];
38
- this.childFields = [];
39
- this.surveyFormIsValid = true;
40
- this.addLoader = 0;
41
- this.surveyId = data.surveyId;
42
- if (localStorage.getItem('websiteLanguage')) {
43
- this.translate.setDefaultLang('en');
44
- const lang = localStorage.getItem('websiteLanguage');
45
- this.translate.use(lang);
46
- }
47
- }
48
- //#endregion (constructor)
49
- //#region (initialization)
50
- ngOnInit() {
51
- this.getSurveyFormData();
52
- }
53
- getSurveyFormData() {
54
- this.addLoader = this.addLoader + 1;
55
- this.appTocSvc.getFormByIdPublic(this.surveyId).subscribe((result) => {
56
- this.addLoader = this.addLoader - 1;
57
- this.formDetails = {
58
- title: _.get(result, 'result.response.title', ''),
59
- fields: _.get(result, 'result.response.fields', []),
60
- contextType: _.get(result, 'result.response.contextType', 'form'),
61
- };
62
- this.buildForm();
63
- }, (error) => {
64
- if (error) {
65
- this.addLoader = this.addLoader - 1;
66
- }
67
- });
68
- }
69
- buildForm() {
70
- if (this.formDetails) {
71
- this.surveyForm = this.fb.group({
72
- fields: this.fb.array([])
73
- });
74
- const questionsArray = this.questionsArray;
75
- if (this.formDetails.fields) {
76
- this.formDetails.fields.forEach((field) => {
77
- if (field.fieldType !== 'separator' && field.fieldType !== 'heading') {
78
- const validatorsArray = [];
79
- if (field.isRequired) {
80
- validatorsArray.push(Validators.required);
81
- }
82
- switch (field.fieldType) {
83
- case 'phone number':
84
- validatorsArray.push(Validators.pattern(MOBILE_PATTERN));
85
- validatorsArray.push(Validators.minLength(10));
86
- validatorsArray.push(Validators.maxLength(10));
87
- break;
88
- case 'email':
89
- validatorsArray.push(Validators.pattern(EMAIL_PATTERN));
90
- break;
91
- case 'numeric':
92
- break;
93
- }
94
- const questionGroup = this.fb.group({
95
- question: [field.name],
96
- parentId: [field.parentId],
97
- questionIndex: [questionsArray.length],
98
- fieldType: [field.fieldType],
99
- answer: ['', validatorsArray],
100
- isNA: [false],
101
- questionId: [field.id]
102
- });
103
- field['controlIndex'] = questionsArray.length;
104
- field['validatorsArray'] = validatorsArray;
105
- questionsArray.push(questionGroup);
106
- if (validatorsArray.length) {
107
- this.surveyFormIsValid = false;
108
- }
109
- }
110
- if (field.parentId) {
111
- this.childFields.push(field);
112
- }
113
- else {
114
- this.parentalFields.push(field);
115
- }
116
- });
117
- }
118
- }
119
- }
120
- get questionsArray() {
121
- if (this.surveyForm && this.surveyForm.controls.fields) {
122
- return this.surveyForm.controls.fields;
123
- }
124
- return this.fb.array([]);
125
- }
126
- //#endregion (initialization)
127
- //#region (UI Interactions)
128
- getChildQuestionsFormArray(sectionId) {
129
- if (this.surveyForm && this.surveyForm.controls.fields) {
130
- const questionsArray = this.questionsArray;
131
- const childQuestionsArray = questionsArray.controls.filter((question) => {
132
- return question.value && question.value.parentId === sectionId;
133
- });
134
- if (childQuestionsArray.length > 0) {
135
- return this.fb.array(childQuestionsArray);
136
- }
137
- }
138
- return this.fb.array([]);
139
- }
140
- getChildFields(sectionId) {
141
- let sectionChilds = [];
142
- if (this.childFields) {
143
- sectionChilds = this.childFields.filter((field) => field.parentId === sectionId);
144
- }
145
- return sectionChilds;
146
- }
147
- getQuestionControl(index) {
148
- if (this.questionsArray.controls[index]) {
149
- return this.questionsArray.controls[index];
150
- }
151
- return this.fb.group({});
152
- }
153
- getEmailFromsurvey() {
154
- const answerObj = this.dataObject.find((a) => a.question && a.question.toLowerCase() === 'email');
155
- return answerObj ? answerObj.answer : '';
156
- }
157
- submitForm() {
158
- console.log('dataObject', this.dataObject);
159
- this.surveyForm.markAllAsTouched();
160
- this.surveyForm.updateValueAndValidity();
161
- if (this.surveyFormIsValid) {
162
- const formBody = {
163
- formId: this.surveyId,
164
- version: 4,
165
- status: 'SUBMITTED',
166
- responses: this.dataObject,
167
- contextId: _.get(this.data, 'courseId'),
168
- contextType: _.get(this.formDetails, 'contextType', ''),
169
- contextName: _.get(this.data, 'courseName', ''),
170
- emailId: this.getEmailFromsurvey(),
171
- contextOrgId: _.get(this.data, 'contextOrgId'),
172
- };
173
- // Remove existing survey data from local storage if present
174
- const storageKey = `survey_${this.surveyId}_${_.get(this.data, 'courseId')}`;
175
- if (localStorage.getItem(storageKey)) {
176
- localStorage.removeItem(storageKey);
177
- }
178
- // Store fresh dataObject in local storage
179
- localStorage.setItem(storageKey, JSON.stringify(this.dataObject));
180
- this.addLoader = this.addLoader + 1;
181
- this.appTocSvc.submitFormPublic(formBody).subscribe({
182
- next: res => {
183
- this.addLoader = this.addLoader - 1;
184
- if (_.get(res, 'params.status') === 'success') {
185
- this.openSnackbar('Form is submitted successfully');
186
- this.dialogRef.close(true);
187
- }
188
- else {
189
- this.openSnackbar(_.get(res, 'errorMessage', 'Something went wrong please try again'));
190
- }
191
- },
192
- error: (error) => {
193
- this.addLoader = this.addLoader - 1;
194
- if (error) {
195
- this.openSnackbar('Something went wrong please try again');
196
- }
197
- }
198
- });
199
- }
200
- }
201
- //#region (data processing)
202
- get dataObject() {
203
- const dataObject = [];
204
- const fields = _.get(this.surveyForm, 'value.fields', []);
205
- if (fields) {
206
- fields.forEach((field) => {
207
- let value = field.isNA ? 'N/A' : field.answer;
208
- if (!field.isNA && field.fieldType === 'date' && value) {
209
- const formattedYear = value.getFullYear();
210
- const formattedMonth = String(value.getMonth() + 1).padStart(2, '0');
211
- const formattedDay = String(value.getDate()).padStart(2, '0');
212
- value = `${formattedYear}-${formattedMonth}-${formattedDay}`;
213
- }
214
- dataObject.push({
215
- questionId: field.questionId,
216
- question: field.question,
217
- answer: value,
218
- answerType: field.fieldType
219
- });
220
- });
221
- }
222
- return dataObject;
223
- }
224
- closeDialog() {
225
- this.dialogRef.close(false);
226
- }
227
- //#endregion (data processing)
228
- updateQuestionValues(event) {
229
- this.questionsArray.value[event.questionIndex] = event;
230
- this.updateSurveyFormValidity();
231
- }
232
- updateSurveyFormValidity() {
233
- this.surveyFormIsValid = true;
234
- this.questionsArray.controls.forEach((form) => {
235
- if (!form.controls.answer.valid) {
236
- this.surveyFormIsValid = false;
237
- }
238
- });
239
- }
240
- //#endregion (UI Interactions)
241
- openSnackbar(primaryMsg, duration = 5000) {
242
- this.snackBar.open(primaryMsg, 'X', {
243
- duration,
244
- });
245
- }
246
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PublicSurveyFormComponent, deps: [{ token: i1.MatLegacySnackBar }, { token: i2.MatLegacyDialogRef }, { token: MAT_LEGACY_DIALOG_DATA }, { token: i3.FormBuilder }, { token: i4.AppTocService }, { token: i5.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
247
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PublicSurveyFormComponent, selector: "ws-app-public-survey-form", ngImport: i0, template: "<div class=\"preview-container\">\r\n <div class=\"form-header flex\">\r\n <div class=\"flex flex-1 justify-start items-center\">\r\n <div>{{'apptoc.AGKCaseStudySurveyForm' | translate}} </div>\r\n </div>\r\n <button mat-icon-button class=\"close-button\" [mat-dialog-close]=\"false\">\r\n <mat-icon class=\"close-icon\" color=\"warn\">close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"form-content\">\r\n <ng-container *ngIf=\"surveyForm\">\r\n <form [formGroup]=\"surveyForm\">\r\n <ng-container *ngFor=\"let parentField of parentalFields\">\r\n <ng-container [ngSwitch]=\"parentField.fieldType\">\r\n <ng-container *ngSwitchCase=\"'heading'\">\r\n <ws-app-survey-form-section [childFields]=\"getChildFields(parentField.sectionId)\"\r\n [sectionField]=\"parentField\"\r\n [childQuestionsFormArray]=\"getChildQuestionsFormArray(parentField.sectionId)\"\r\n (questionValues)=\"updateQuestionValues($event)\"></ws-app-survey-form-section>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <hr class=\"opacity-50 elment-separator\">\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ws-app-survey-form-question [fieldDetails]=\"parentField\"\r\n [questionForm]=\"getQuestionControl(parentField.controlIndex)\"\r\n (questionValues)=\"updateQuestionValues($event)\"></ws-app-survey-form-question>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <div class=\"flex justify-end m-4\">\r\n <!-- <button mat-button class=\"do-later-btn\" (click)=\"closeDialog()\">{{'apptoc.doItLater' | translate}}</button> -->\r\n <button mat-button class=\"submit-btn\" [disabled]=\"!surveyFormIsValid\" (click)=\"submitForm()\">{{'apptoc.submit'\r\n | translate}}</button>\r\n </div>\r\n </form>\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n<ng-container *ngIf=\"addLoader > 0\">\r\n <div class=\"text-center my-2 loader flex justify-center items-center\">\r\n <mat-spinner class=\"inline-block\"></mat-spinner>\r\n </div>\r\n</ng-container>", styles: [".preview-container{max-height:700px}.preview-container .form-content{background:#f4f8ff}.preview-container .form-header{font-family:Montserrat;font-size:24px;font-weight:600;line-height:29.26px;text-align:center;text-underline-position:from-font;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;padding:15px 24px;border-bottom:1px solid #c3c3c3}.preview-container .q-element{padding:16px;background:#fff;border-radius:8px}.preview-container .form-content{padding:15px 24px}.preview-container .elment-separator{margin:16px 0}.preview-container .feedback-text{color:#1b4ca1;font:400 16px/20px Lato}.do-later-btn{height:40px;color:#1b4ca1!important;background-color:#fff!important;border-radius:20px;border:1px solid #1b4ca1!important;margin-right:10px}.submit-btn{height:40px;color:#fff!important;background-color:#1b4ca1!important;border-radius:20px}.submit-btn:disabled{opacity:.6!important}.loader{position:absolute;top:0;left:0;z-index:1000;height:100vh;width:100vw;background-color:#80808045}.info-icon{color:#d13924;font-size:20px;height:20px;width:26px;margin-top:2px}.close-button{height:30px;width:30px;line-height:24px;background:#00000040!important;color:#fff!important;align-self:end;margin-right:-24px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i6.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatLegacyProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i2.MatLegacyDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: i10.SurveyFormQuestionComponent, selector: "ws-app-survey-form-question", inputs: ["questionForm", "fieldDetails"], outputs: ["questionValues"] }, { kind: "component", type: i11.SurveyFormSectionComponent, selector: "ws-app-survey-form-section", inputs: ["childQuestionsFormArray", "childFields", "sectionField"], outputs: ["questionValues"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] }); }
248
- }
249
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PublicSurveyFormComponent, decorators: [{
250
- type: Component,
251
- args: [{ selector: 'ws-app-public-survey-form', template: "<div class=\"preview-container\">\r\n <div class=\"form-header flex\">\r\n <div class=\"flex flex-1 justify-start items-center\">\r\n <div>{{'apptoc.AGKCaseStudySurveyForm' | translate}} </div>\r\n </div>\r\n <button mat-icon-button class=\"close-button\" [mat-dialog-close]=\"false\">\r\n <mat-icon class=\"close-icon\" color=\"warn\">close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"form-content\">\r\n <ng-container *ngIf=\"surveyForm\">\r\n <form [formGroup]=\"surveyForm\">\r\n <ng-container *ngFor=\"let parentField of parentalFields\">\r\n <ng-container [ngSwitch]=\"parentField.fieldType\">\r\n <ng-container *ngSwitchCase=\"'heading'\">\r\n <ws-app-survey-form-section [childFields]=\"getChildFields(parentField.sectionId)\"\r\n [sectionField]=\"parentField\"\r\n [childQuestionsFormArray]=\"getChildQuestionsFormArray(parentField.sectionId)\"\r\n (questionValues)=\"updateQuestionValues($event)\"></ws-app-survey-form-section>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <hr class=\"opacity-50 elment-separator\">\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ws-app-survey-form-question [fieldDetails]=\"parentField\"\r\n [questionForm]=\"getQuestionControl(parentField.controlIndex)\"\r\n (questionValues)=\"updateQuestionValues($event)\"></ws-app-survey-form-question>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <div class=\"flex justify-end m-4\">\r\n <!-- <button mat-button class=\"do-later-btn\" (click)=\"closeDialog()\">{{'apptoc.doItLater' | translate}}</button> -->\r\n <button mat-button class=\"submit-btn\" [disabled]=\"!surveyFormIsValid\" (click)=\"submitForm()\">{{'apptoc.submit'\r\n | translate}}</button>\r\n </div>\r\n </form>\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n<ng-container *ngIf=\"addLoader > 0\">\r\n <div class=\"text-center my-2 loader flex justify-center items-center\">\r\n <mat-spinner class=\"inline-block\"></mat-spinner>\r\n </div>\r\n</ng-container>", styles: [".preview-container{max-height:700px}.preview-container .form-content{background:#f4f8ff}.preview-container .form-header{font-family:Montserrat;font-size:24px;font-weight:600;line-height:29.26px;text-align:center;text-underline-position:from-font;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;padding:15px 24px;border-bottom:1px solid #c3c3c3}.preview-container .q-element{padding:16px;background:#fff;border-radius:8px}.preview-container .form-content{padding:15px 24px}.preview-container .elment-separator{margin:16px 0}.preview-container .feedback-text{color:#1b4ca1;font:400 16px/20px Lato}.do-later-btn{height:40px;color:#1b4ca1!important;background-color:#fff!important;border-radius:20px;border:1px solid #1b4ca1!important;margin-right:10px}.submit-btn{height:40px;color:#fff!important;background-color:#1b4ca1!important;border-radius:20px}.submit-btn:disabled{opacity:.6!important}.loader{position:absolute;top:0;left:0;z-index:1000;height:100vh;width:100vw;background-color:#80808045}.info-icon{color:#d13924;font-size:20px;height:20px;width:26px;margin-top:2px}.close-button{height:30px;width:30px;line-height:24px;background:#00000040!important;color:#fff!important;align-self:end;margin-right:-24px}\n"] }]
252
- }], ctorParameters: function () { return [{ type: i1.MatLegacySnackBar }, { type: i2.MatLegacyDialogRef }, { type: undefined, decorators: [{
253
- type: Inject,
254
- args: [MAT_LEGACY_DIALOG_DATA]
255
- }] }, { type: i3.FormBuilder }, { type: i4.AppTocService }, { type: i5.TranslateService }]; } });
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLXN1cnZleS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9jb21wb25lbnRzL3B1YmxpYy1zdXJ2ZXktZm9ybS9wdWJsaWMtc3VydmV5LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvcHVibGljLXN1cnZleS1mb3JtL3B1YmxpYy1zdXJ2ZXktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUI7QUFDbkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUE7QUFFekQsT0FBTyxFQUFFLHNCQUFzQixFQUFzQixNQUFNLGlDQUFpQyxDQUFBO0FBQzVGLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDOUUsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7Ozs7Ozs7Ozs7Ozs7QUFJM0Isc0JBQXNCO0FBRXRCLE1BQU0sYUFBYSxHQUFHLHFIQUFxSCxDQUFBO0FBQzNJLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFBO0FBTzFDLE1BQU0sT0FBTyx5QkFBeUI7SUFjcEMseUJBQXlCO0lBRXpCLHVCQUF1QjtJQUN2QixZQUNVLFFBQTJCLEVBQzVCLFNBQXdELEVBQ3hCLElBQVMsRUFDeEMsRUFBZSxFQUNmLFNBQXdCLEVBQ3hCLFNBQTJCO1FBTDNCLGFBQVEsR0FBUixRQUFRLENBQW1CO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQStDO1FBQ3hCLFNBQUksR0FBSixJQUFJLENBQUs7UUFDeEMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQWU7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7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LFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFBO2FBQy9CO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsOEJBQThCO0lBRXRCLFlBQVksQ0FBQyxVQUFrQixFQUFFLFdBQW1CLElBQUk7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNsQyxRQUFRO1NBQ1QsQ0FBQyxDQUFBO0lBQ0osQ0FBQzsrR0ExUFUseUJBQXlCLHFGQW9CMUIsc0JBQXNCO21HQXBCckIseUJBQXlCLGlFQ25CdEMsNnVFQTRDZTs7NEZEekJGLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSwyQkFBMkI7OzBCQXdCbEMsTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gKGltcG9ydHMpXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBNYXRMZWdhY3lTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1zbmFjay1iYXInXHJcbmltcG9ydCB7IE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEsIE1hdExlZ2FjeURpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnXHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgQXBwVG9jU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC10b2Muc2VydmljZSdcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXHJcbi8vI2VuZHJlZ2lvbiAoaW1wb3J0cylcclxuXHJcbmNvbnN0IEVNQUlMX1BBVFRFUk4gPSAvXlthLXpBLVowLTldK1thLXpBLVowLTkuXy1dKlthLXpBLVowLTldK0BbYS16QS1aMC05XSsoWy1hLXpBLVowLTldKlthLXpBLVowLTldKyk/KFxcLlthLXpBLVowLTktXSspKlxcLlthLXpBLVpdezIsNH0kL1xyXG5jb25zdCBNT0JJTEVfUEFUVEVSTiA9IC9eWzBdP1s2Nzg5XVxcZHs5fSQvXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3dzLWFwcC1wdWJsaWMtc3VydmV5LWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wdWJsaWMtc3VydmV5LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3B1YmxpYy1zdXJ2ZXktZm9ybS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQdWJsaWNTdXJ2ZXlGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgLy8jcmVnaW9uIChwcm9wZXJ0aWVzKVxyXG4gIHJhdGluZyA9IDBcclxuICBzdGFycyA9IEFycmF5KDUpLmZpbGwoMClcclxuICBvdGhlckZpZWxkVHlwZTogYW55ID0gW11cclxuICBzZWxlY3RlZE9wdGlvbiA9IGZhbHNlXHJcbiAgZm9ybURldGFpbHM6IGFueVxyXG4gIHN1cnZleUlkID0gJydcclxuICBzdXJ2ZXlGb3JtITogRm9ybUdyb3VwXHJcbiAgcGFyZW50YWxGaWVsZHM6IGFueVtdID0gW11cclxuICBjaGlsZEZpZWxkczogYW55W10gPSBbXVxyXG4gIHN1cnZleUZvcm1Jc1ZhbGlkID0gdHJ1ZVxyXG4gIGFkZExvYWRlciA9IDBcclxuICAvLyNlbmRyZWdpb24gKHByb3BlcnRpZXMpXHJcblxyXG4gIC8vI3JlZ2lvbiAoY29uc3RydWN0b3IpXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRMZWdhY3lTbmFja0JhcixcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdExlZ2FjeURpYWxvZ1JlZjxQdWJsaWNTdXJ2ZXlGb3JtQ29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0xFR0FDWV9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBhcHBUb2NTdmM6IEFwcFRvY1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuXHJcbiAgKSB7XHJcbiAgICB0aGlzLnN1cnZleUlkID0gZGF0YS5zdXJ2ZXlJZFxyXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSkge1xyXG4gICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZygnZW4nKVxyXG4gICAgICBjb25zdCBsYW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpIVxyXG4gICAgICB0aGlzLnRyYW5zbGF0ZS51c2UobGFuZylcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIChjb25zdHJ1Y3RvcilcclxuXHJcblxyXG4gIC8vI3JlZ2lvbiAoaW5pdGlhbGl6YXRpb24pXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldFN1cnZleUZvcm1EYXRhKClcclxuICB9XHJcblxyXG4gIGdldFN1cnZleUZvcm1EYXRhKCkge1xyXG4gICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcclxuICAgIHRoaXMuYXBwVG9jU3ZjLmdldEZvcm1CeUlkUHVibGljKHRoaXMuc3VydmV5SWQpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcclxuICAgICAgdGhpcy5mb3JtRGV0YWlscyA9IHtcclxuICAgICAgICB0aXRsZTogXy5nZXQocmVzdWx0LCAncmVzdWx0LnJlc3BvbnNlLnRpdGxlJywgJycpLFxyXG4gICAgICAgIGZpZWxkczogXy5nZXQocmVzdWx0LCAncmVzdWx0LnJlc3BvbnNlLmZpZWxkcycsIFtdKSxcclxuICAgICAgICBjb250ZXh0VHlwZTogXy5nZXQocmVzdWx0LCAncmVzdWx0LnJlc3BvbnNlLmNvbnRleHRUeXBlJywgJ2Zvcm0nKSxcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmJ1aWxkRm9ybSgpXHJcbiAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBidWlsZEZvcm0oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtRGV0YWlscykge1xyXG4gICAgICB0aGlzLnN1cnZleUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICBmaWVsZHM6IHRoaXMuZmIuYXJyYXkoW10pXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHF1ZXN0aW9uc0FycmF5ID0gdGhpcy5xdWVzdGlvbnNBcnJheVxyXG4gICAgICBpZiAodGhpcy5mb3JtRGV0YWlscy5maWVsZHMpIHtcclxuICAgICAgICB0aGlzLmZvcm1EZXRhaWxzLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmllbGQuZmllbGRUeXBlICE9PSAnc2VwYXJhdG9yJyAmJiBmaWVsZC5maWVsZFR5cGUgIT09ICdoZWFkaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzQXJyYXk6IGFueSA9IFtdXHJcbiAgICAgICAgICAgIGlmIChmaWVsZC5pc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdG9yc0FycmF5LnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChmaWVsZC5maWVsZFR5cGUpIHtcclxuICAgICAgICAgICAgICBjYXNlICdwaG9uZSBudW1iZXInOlxyXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yc0FycmF5LnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKE1PQklMRV9QQVRURVJOKSlcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNBcnJheS5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKDEwKSlcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNBcnJheS5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwKSlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgY2FzZSAnZW1haWwnOlxyXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yc0FycmF5LnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKEVNQUlMX1BBVFRFUk4pKVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBjYXNlICdudW1lcmljJzpcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgICBxdWVzdGlvbjogW2ZpZWxkLm5hbWVdLFxyXG4gICAgICAgICAgICAgIHBhcmVudElkOiBbZmllbGQucGFyZW50SWRdLFxyXG4gICAgICAgICAgICAgIHF1ZXN0aW9uSW5kZXg6IFtxdWVzdGlvbnNBcnJheS5sZW5ndGhdLFxyXG4gICAgICAgICAgICAgIGZpZWxkVHlwZTogW2ZpZWxkLmZpZWxkVHlwZV0sXHJcbiAgICAgICAgICAgICAgYW5zd2VyOiBbJycsIHZhbGlkYXRvcnNBcnJheV0sXHJcbiAgICAgICAgICAgICAgaXNOQTogW2ZhbHNlXSxcclxuICAgICAgICAgICAgICBxdWVzdGlvbklkOiBbZmllbGQuaWRdXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGZpZWxkWydjb250cm9sSW5kZXgnXSA9IHF1ZXN0aW9uc0FycmF5Lmxlbmd0aFxyXG4gICAgICAgICAgICBmaWVsZFsndmFsaWRhdG9yc0FycmF5J10gPSB2YWxpZGF0b3JzQXJyYXlcclxuICAgICAgICAgICAgcXVlc3Rpb25zQXJyYXkucHVzaChxdWVzdGlvbkdyb3VwKVxyXG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yc0FycmF5Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3VydmV5Rm9ybUlzVmFsaWQgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGZpZWxkLnBhcmVudElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRGaWVsZHMucHVzaChmaWVsZClcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50YWxGaWVsZHMucHVzaChmaWVsZClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgcXVlc3Rpb25zQXJyYXkoKTogRm9ybUFycmF5IHtcclxuICAgIGlmICh0aGlzLnN1cnZleUZvcm0gJiYgdGhpcy5zdXJ2ZXlGb3JtLmNvbnRyb2xzLmZpZWxkcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdXJ2ZXlGb3JtLmNvbnRyb2xzLmZpZWxkcyBhcyBGb3JtQXJyYXlcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZiLmFycmF5KFtdKVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gKGluaXRpYWxpemF0aW9uKVxyXG5cclxuICAvLyNyZWdpb24gKFVJIEludGVyYWN0aW9ucylcclxuICBnZXRDaGlsZFF1ZXN0aW9uc0Zvcm1BcnJheShzZWN0aW9uSWQ6IHN0cmluZyk6IEZvcm1BcnJheSB7XHJcbiAgICBpZiAodGhpcy5zdXJ2ZXlGb3JtICYmIHRoaXMuc3VydmV5Rm9ybS5jb250cm9scy5maWVsZHMpIHtcclxuICAgICAgY29uc3QgcXVlc3Rpb25zQXJyYXkgPSB0aGlzLnF1ZXN0aW9uc0FycmF5XHJcbiAgICAgIGNvbnN0IGNoaWxkUXVlc3Rpb25zQXJyYXkgPSBxdWVzdGlvbnNBcnJheS5jb250cm9scy5maWx0ZXIoKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24udmFsdWUgJiYgcXVlc3Rpb24udmFsdWUucGFyZW50SWQgPT09IHNlY3Rpb25JZFxyXG4gICAgICB9KVxyXG5cclxuICAgICAgaWYgKGNoaWxkUXVlc3Rpb25zQXJyYXkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZiLmFycmF5KGNoaWxkUXVlc3Rpb25zQXJyYXkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZiLmFycmF5KFtdKSBhcyBGb3JtQXJyYXlcclxuICB9XHJcblxyXG4gIGdldENoaWxkRmllbGRzKHNlY3Rpb25JZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgc2VjdGlvbkNoaWxkczogYW55ID0gW11cclxuICAgIGlmICh0aGlzLmNoaWxkRmllbGRzKSB7XHJcbiAgICAgIHNlY3Rpb25DaGlsZHMgPSB0aGlzLmNoaWxkRmllbGRzLmZpbHRlcigoZmllbGQ6IGFueSkgPT4gZmllbGQucGFyZW50SWQgPT09IHNlY3Rpb25JZClcclxuICAgIH1cclxuICAgIHJldHVybiBzZWN0aW9uQ2hpbGRzXHJcbiAgfVxyXG5cclxuICBnZXRRdWVzdGlvbkNvbnRyb2woaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMucXVlc3Rpb25zQXJyYXkuY29udHJvbHNbaW5kZXhdKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc0FycmF5LmNvbnRyb2xzW2luZGV4XVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe30pXHJcbiAgfVxyXG5cclxuICBnZXRFbWFpbEZyb21zdXJ2ZXkoKSB7XHJcbiAgICBjb25zdCBhbnN3ZXJPYmogPSB0aGlzLmRhdGFPYmplY3QuZmluZCgoYTogYW55KSA9PiBhLnF1ZXN0aW9uICYmIGEucXVlc3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gJ2VtYWlsJylcclxuICAgIHJldHVybiBhbnN3ZXJPYmogPyBhbnN3ZXJPYmouYW5zd2VyIDogJydcclxuICB9XHJcblxyXG4gIHN1Ym1pdEZvcm0oKSB7XHJcbiAgICBjb25zb2xlLmxvZygnZGF0YU9iamVjdCcsIHRoaXMuZGF0YU9iamVjdClcclxuICAgIHRoaXMuc3VydmV5Rm9ybS5tYXJrQWxsQXNUb3VjaGVkKClcclxuICAgIHRoaXMuc3VydmV5Rm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcclxuICAgIGlmICh0aGlzLnN1cnZleUZvcm1Jc1ZhbGlkKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1Cb2R5OiBhbnkgPSB7XHJcbiAgICAgICAgZm9ybUlkOiB0aGlzLnN1cnZleUlkLFxyXG4gICAgICAgIHZlcnNpb246IDQsXHJcbiAgICAgICAgc3RhdHVzOiAnU1VCTUlUVEVEJyxcclxuICAgICAgICByZXNwb25zZXM6IHRoaXMuZGF0YU9iamVjdCxcclxuICAgICAgICBjb250ZXh0SWQ6IF8uZ2V0KHRoaXMuZGF0YSwgJ2NvdXJzZUlkJyksXHJcbiAgICAgICAgY29udGV4dFR5cGU6IF8uZ2V0KHRoaXMuZm9ybURldGFpbHMsICdjb250ZXh0VHlwZScsICcnKSxcclxuICAgICAgICBjb250ZXh0TmFtZTogXy5nZXQodGhpcy5kYXRhLCAnY291cnNlTmFtZScsICcnKSxcclxuICAgICAgICBlbWFpbElkOiB0aGlzLmdldEVtYWlsRnJvbXN1cnZleSgpLFxyXG4gICAgICAgIGNvbnRleHRPcmdJZDogXy5nZXQodGhpcy5kYXRhLCAnY29udGV4dE9yZ0lkJyksXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBleGlzdGluZyBzdXJ2ZXkgZGF0YSBmcm9tIGxvY2FsIHN0b3JhZ2UgaWYgcHJlc2VudFxyXG4gICAgICBjb25zdCBzdG9yYWdlS2V5ID0gYHN1cnZleV8ke3RoaXMuc3VydmV5SWR9XyR7Xy5nZXQodGhpcy5kYXRhLCAnY291cnNlSWQnKX1gXHJcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShzdG9yYWdlS2V5KSkge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHN0b3JhZ2VLZXkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFN0b3JlIGZyZXNoIGRhdGFPYmplY3QgaW4gbG9jYWwgc3RvcmFnZVxyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFPYmplY3QpKVxyXG5cclxuICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcclxuICAgICAgdGhpcy5hcHBUb2NTdmMuc3VibWl0Rm9ybVB1YmxpYyhmb3JtQm9keSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiByZXMgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcclxuICAgICAgICAgIGlmIChfLmdldChyZXMsICdwYXJhbXMuc3RhdHVzJykgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5TbmFja2JhcignRm9ybSBpcyBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5JylcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblNuYWNrYmFyKF8uZ2V0KHJlcywgJ2Vycm9yTWVzc2FnZScsICdTb21ldGhpbmcgd2VudCB3cm9uZyBwbGVhc2UgdHJ5IGFnYWluJykpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcclxuICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5TbmFja2JhcignU29tZXRoaW5nIHdlbnQgd3JvbmcgcGxlYXNlIHRyeSBhZ2FpbicpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIChkYXRhIHByb2Nlc3NpbmcpXHJcbiAgZ2V0IGRhdGFPYmplY3QoKTogYW55IHtcclxuICAgIGNvbnN0IGRhdGFPYmplY3Q6IGFueSA9IFtdXHJcbiAgICBjb25zdCBmaWVsZHMgPSBfLmdldCh0aGlzLnN1cnZleUZvcm0sICd2YWx1ZS5maWVsZHMnLCBbXSlcclxuICAgIGlmIChmaWVsZHMpIHtcclxuICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgdmFsdWUgPSBmaWVsZC5pc05BID8gJ04vQScgOiBmaWVsZC5hbnN3ZXJcclxuICAgICAgICBpZiAoIWZpZWxkLmlzTkEgJiYgZmllbGQuZmllbGRUeXBlID09PSAnZGF0ZScgJiYgdmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFllYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpXHJcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRNb250aCA9IFN0cmluZyh2YWx1ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF5ID0gU3RyaW5nKHZhbHVlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgdmFsdWUgPSBgJHtmb3JtYXR0ZWRZZWFyfS0ke2Zvcm1hdHRlZE1vbnRofS0ke2Zvcm1hdHRlZERheX1gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdGFPYmplY3QucHVzaCh7XHJcbiAgICAgICAgICBxdWVzdGlvbklkOiBmaWVsZC5xdWVzdGlvbklkLFxyXG4gICAgICAgICAgcXVlc3Rpb246IGZpZWxkLnF1ZXN0aW9uLFxyXG4gICAgICAgICAgYW5zd2VyOiB2YWx1ZSxcclxuICAgICAgICAgIGFuc3dlclR5cGU6IGZpZWxkLmZpZWxkVHlwZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YU9iamVjdFxyXG4gIH1cclxuXHJcbiAgY2xvc2VEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSlcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIChkYXRhIHByb2Nlc3NpbmcpXHJcblxyXG4gIHVwZGF0ZVF1ZXN0aW9uVmFsdWVzKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucXVlc3Rpb25zQXJyYXkudmFsdWVbZXZlbnQucXVlc3Rpb25JbmRleF0gPSBldmVudFxyXG4gICAgdGhpcy51cGRhdGVTdXJ2ZXlGb3JtVmFsaWRpdHkoKVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU3VydmV5Rm9ybVZhbGlkaXR5KCkgeyAvLyBzb21lIHRpbWVzIHJlYWN0aXZlIGZvcm1zIG5vdCBhYmFsZSB0byBkZXRlY3QgdmFsdWUgY2hhbmdlcyBhbmQgdmFsaWRpdHkgaW4gZHluYW1pYyBmb3JtQXJyYXlcclxuICAgIHRoaXMuc3VydmV5Rm9ybUlzVmFsaWQgPSB0cnVlXHJcbiAgICB0aGlzLnF1ZXN0aW9uc0FycmF5LmNvbnRyb2xzLmZvckVhY2goKGZvcm06IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWZvcm0uY29udHJvbHMuYW5zd2VyLnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5zdXJ2ZXlGb3JtSXNWYWxpZCA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiAoVUkgSW50ZXJhY3Rpb25zKVxyXG5cclxuICBwcml2YXRlIG9wZW5TbmFja2JhcihwcmltYXJ5TXNnOiBzdHJpbmcsIGR1cmF0aW9uOiBudW1iZXIgPSA1MDAwKSB7XHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocHJpbWFyeU1zZywgJ1gnLCB7XHJcbiAgICAgIGR1cmF0aW9uLFxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInByZXZpZXctY29udGFpbmVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0taGVhZGVyIGZsZXhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtMSBqdXN0aWZ5LXN0YXJ0IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2Pnt7J2FwcHRvYy5BR0tDYXNlU3R1ZHlTdXJ2ZXlGb3JtJyB8IHRyYW5zbGF0ZX19IDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIFttYXQtZGlhbG9nLWNsb3NlXT1cImZhbHNlXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNsb3NlLWljb25cIiBjb2xvcj1cIndhcm5cIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250ZW50XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VydmV5Rm9ybVwiPlxyXG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInN1cnZleUZvcm1cIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYXJlbnRGaWVsZCBvZiBwYXJlbnRhbEZpZWxkc1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicGFyZW50RmllbGQuZmllbGRUeXBlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidoZWFkaW5nJ1wiPlxyXG4gICAgICAgICAgICAgIDx3cy1hcHAtc3VydmV5LWZvcm0tc2VjdGlvbiBbY2hpbGRGaWVsZHNdPVwiZ2V0Q2hpbGRGaWVsZHMocGFyZW50RmllbGQuc2VjdGlvbklkKVwiXHJcbiAgICAgICAgICAgICAgICBbc2VjdGlvbkZpZWxkXT1cInBhcmVudEZpZWxkXCJcclxuICAgICAgICAgICAgICAgIFtjaGlsZFF1ZXN0aW9uc0Zvcm1BcnJheV09XCJnZXRDaGlsZFF1ZXN0aW9uc0Zvcm1BcnJheShwYXJlbnRGaWVsZC5zZWN0aW9uSWQpXCJcclxuICAgICAgICAgICAgICAgIChxdWVzdGlvblZhbHVlcyk9XCJ1cGRhdGVRdWVzdGlvblZhbHVlcygkZXZlbnQpXCI+PC93cy1hcHAtc3VydmV5LWZvcm0tc2VjdGlvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZXBhcmF0b3InXCI+XHJcbiAgICAgICAgICAgICAgPGhyIGNsYXNzPVwib3BhY2l0eS01MCBlbG1lbnQtc2VwYXJhdG9yXCI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgPHdzLWFwcC1zdXJ2ZXktZm9ybS1xdWVzdGlvbiBbZmllbGREZXRhaWxzXT1cInBhcmVudEZpZWxkXCJcclxuICAgICAgICAgICAgICAgIFtxdWVzdGlvbkZvcm1dPVwiZ2V0UXVlc3Rpb25Db250cm9sKHBhcmVudEZpZWxkLmNvbnRyb2xJbmRleClcIlxyXG4gICAgICAgICAgICAgICAgKHF1ZXN0aW9uVmFsdWVzKT1cInVwZGF0ZVF1ZXN0aW9uVmFsdWVzKCRldmVudClcIj48L3dzLWFwcC1zdXJ2ZXktZm9ybS1xdWVzdGlvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBtLTRcIj5cclxuICAgICAgICAgIDwhLS0gPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwiZG8tbGF0ZXItYnRuXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj57eydhcHB0b2MuZG9JdExhdGVyJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic3VibWl0LWJ0blwiIFtkaXNhYmxlZF09XCIhc3VydmV5Rm9ybUlzVmFsaWRcIiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCI+e3snYXBwdG9jLnN1Ym1pdCdcclxuICAgICAgICAgICAgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiYWRkTG9hZGVyID4gMFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBteS0yIGxvYWRlciBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPG1hdC1zcGlubmVyIGNsYXNzPVwiaW5saW5lLWJsb2NrXCI+PC9tYXQtc3Bpbm5lcj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+Il19
1
+ //#region (imports)
2
+ import { Component, Inject } from '@angular/core';
3
+ import { MAT_LEGACY_DIALOG_DATA } from '@angular/material/legacy-dialog';
4
+ import { Validators } from '@angular/forms';
5
+ import * as _ from 'lodash';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/legacy-snack-bar";
8
+ import * as i2 from "@angular/material/legacy-dialog";
9
+ import * as i3 from "@angular/forms";
10
+ import * as i4 from "../../services/app-toc.service";
11
+ import * as i5 from "@ngx-translate/core";
12
+ import * as i6 from "@angular/common";
13
+ import * as i7 from "@angular/material/icon";
14
+ import * as i8 from "@angular/material/legacy-button";
15
+ import * as i9 from "@angular/material/legacy-progress-spinner";
16
+ import * as i10 from "../survey-form-question/survey-form-question.component";
17
+ import * as i11 from "../survey-form-section/survey-form-section.component";
18
+ //#endregion (imports)
19
+ const EMAIL_PATTERN = /^[a-zA-Z0-9]+[a-zA-Z0-9._-]*[a-zA-Z0-9]+@[a-zA-Z0-9]+([-a-zA-Z0-9]*[a-zA-Z0-9]+)?(\.[a-zA-Z0-9-]+)*\.[a-zA-Z]{2,4}$/;
20
+ const MOBILE_PATTERN = /^[0]?[6789]\d{9}$/;
21
+ export class PublicSurveyFormComponent {
22
+ //#endregion (properties)
23
+ //#region (constructor)
24
+ constructor(snackBar, dialogRef, data, fb, appTocSvc, translate) {
25
+ this.snackBar = snackBar;
26
+ this.dialogRef = dialogRef;
27
+ this.data = data;
28
+ this.fb = fb;
29
+ this.appTocSvc = appTocSvc;
30
+ this.translate = translate;
31
+ //#region (properties)
32
+ this.rating = 0;
33
+ this.stars = Array(5).fill(0);
34
+ this.otherFieldType = [];
35
+ this.selectedOption = false;
36
+ this.surveyId = '';
37
+ this.parentalFields = [];
38
+ this.childFields = [];
39
+ this.surveyFormIsValid = true;
40
+ this.addLoader = 0;
41
+ this.forPreview = false;
42
+ this.surveyId = data.surveyId;
43
+ this.forPreview = data.forPreview;
44
+ if (localStorage.getItem('websiteLanguage')) {
45
+ this.translate.setDefaultLang('en');
46
+ const lang = localStorage.getItem('websiteLanguage');
47
+ this.translate.use(lang);
48
+ }
49
+ }
50
+ //#endregion (constructor)
51
+ //#region (initialization)
52
+ ngOnInit() {
53
+ this.getSurveyFormData();
54
+ }
55
+ getSurveyFormData() {
56
+ this.addLoader = this.addLoader + 1;
57
+ this.appTocSvc.getFormByIdPublic(this.surveyId).subscribe((result) => {
58
+ this.addLoader = this.addLoader - 1;
59
+ this.formDetails = {
60
+ title: _.get(result, 'result.response.title', ''),
61
+ fields: _.get(result, 'result.response.fields', []),
62
+ contextType: _.get(result, 'result.response.contextType', 'form'),
63
+ };
64
+ this.buildForm();
65
+ }, (error) => {
66
+ if (error) {
67
+ this.addLoader = this.addLoader - 1;
68
+ }
69
+ });
70
+ }
71
+ buildForm() {
72
+ if (this.formDetails) {
73
+ this.surveyForm = this.fb.group({
74
+ fields: this.fb.array([])
75
+ });
76
+ const questionsArray = this.questionsArray;
77
+ if (this.formDetails.fields) {
78
+ this.formDetails.fields.forEach((field) => {
79
+ if (field.fieldType !== 'separator' && field.fieldType !== 'heading') {
80
+ const validatorsArray = [];
81
+ if (field.isRequired) {
82
+ validatorsArray.push(Validators.required);
83
+ }
84
+ switch (field.fieldType) {
85
+ case 'phone number':
86
+ validatorsArray.push(Validators.pattern(MOBILE_PATTERN));
87
+ validatorsArray.push(Validators.minLength(10));
88
+ validatorsArray.push(Validators.maxLength(10));
89
+ break;
90
+ case 'email':
91
+ validatorsArray.push(Validators.pattern(EMAIL_PATTERN));
92
+ break;
93
+ case 'numeric':
94
+ break;
95
+ }
96
+ const questionGroup = this.fb.group({
97
+ question: [field.name],
98
+ parentId: [field.parentId],
99
+ questionIndex: [questionsArray.length],
100
+ fieldType: [field.fieldType],
101
+ answer: ['', validatorsArray],
102
+ isNA: [false],
103
+ questionId: [field.id]
104
+ });
105
+ field['controlIndex'] = questionsArray.length;
106
+ field['validatorsArray'] = validatorsArray;
107
+ questionsArray.push(questionGroup);
108
+ if (validatorsArray.length) {
109
+ this.surveyFormIsValid = false;
110
+ }
111
+ }
112
+ if (field.parentId) {
113
+ this.childFields.push(field);
114
+ }
115
+ else {
116
+ this.parentalFields.push(field);
117
+ }
118
+ });
119
+ }
120
+ }
121
+ }
122
+ get questionsArray() {
123
+ if (this.surveyForm && this.surveyForm.controls.fields) {
124
+ return this.surveyForm.controls.fields;
125
+ }
126
+ return this.fb.array([]);
127
+ }
128
+ //#endregion (initialization)
129
+ //#region (UI Interactions)
130
+ getChildQuestionsFormArray(sectionId) {
131
+ if (this.surveyForm && this.surveyForm.controls.fields) {
132
+ const questionsArray = this.questionsArray;
133
+ const childQuestionsArray = questionsArray.controls.filter((question) => {
134
+ return question.value && question.value.parentId === sectionId;
135
+ });
136
+ if (childQuestionsArray.length > 0) {
137
+ return this.fb.array(childQuestionsArray);
138
+ }
139
+ }
140
+ return this.fb.array([]);
141
+ }
142
+ getChildFields(sectionId) {
143
+ let sectionChilds = [];
144
+ if (this.childFields) {
145
+ sectionChilds = this.childFields.filter((field) => field.parentId === sectionId);
146
+ }
147
+ return sectionChilds;
148
+ }
149
+ getQuestionControl(index) {
150
+ if (this.questionsArray.controls[index]) {
151
+ return this.questionsArray.controls[index];
152
+ }
153
+ return this.fb.group({});
154
+ }
155
+ getEmailFromsurvey() {
156
+ const answerObj = this.dataObject.find((a) => a.question && a.question.toLowerCase() === 'email');
157
+ return answerObj ? answerObj.answer : '';
158
+ }
159
+ submitForm() {
160
+ console.log('dataObject', this.dataObject);
161
+ this.surveyForm.markAllAsTouched();
162
+ this.surveyForm.updateValueAndValidity();
163
+ if (this.surveyFormIsValid) {
164
+ const formBody = {
165
+ formId: this.surveyId,
166
+ version: 4,
167
+ status: 'SUBMITTED',
168
+ responses: this.dataObject,
169
+ contextId: _.get(this.data, 'courseId'),
170
+ contextType: _.get(this.formDetails, 'contextType', ''),
171
+ contextName: _.get(this.data, 'courseName', ''),
172
+ emailId: this.getEmailFromsurvey(),
173
+ contextOrgId: _.get(this.data, 'contextOrgId'),
174
+ };
175
+ // Remove existing survey data from local storage if present
176
+ const storageKey = `survey_${this.surveyId}_${_.get(this.data, 'courseId')}`;
177
+ if (localStorage.getItem(storageKey)) {
178
+ localStorage.removeItem(storageKey);
179
+ }
180
+ // Store fresh dataObject in local storage
181
+ localStorage.setItem(storageKey, JSON.stringify(this.dataObject));
182
+ this.addLoader = this.addLoader + 1;
183
+ this.appTocSvc.submitFormPublic(formBody).subscribe({
184
+ next: res => {
185
+ this.addLoader = this.addLoader - 1;
186
+ if (_.get(res, 'params.status') === 'success') {
187
+ this.openSnackbar('Form is submitted successfully');
188
+ this.dialogRef.close(true);
189
+ }
190
+ else {
191
+ this.openSnackbar(_.get(res, 'errorMessage', 'Something went wrong please try again'));
192
+ }
193
+ },
194
+ error: (error) => {
195
+ this.addLoader = this.addLoader - 1;
196
+ if (error) {
197
+ this.openSnackbar('Something went wrong please try again');
198
+ }
199
+ }
200
+ });
201
+ }
202
+ }
203
+ //#region (data processing)
204
+ get dataObject() {
205
+ const dataObject = [];
206
+ const fields = _.get(this.surveyForm, 'value.fields', []);
207
+ if (fields) {
208
+ fields.forEach((field) => {
209
+ let value = field.isNA ? 'N/A' : field.answer;
210
+ if (!field.isNA && field.fieldType === 'date' && value) {
211
+ const formattedYear = value.getFullYear();
212
+ const formattedMonth = String(value.getMonth() + 1).padStart(2, '0');
213
+ const formattedDay = String(value.getDate()).padStart(2, '0');
214
+ value = `${formattedYear}-${formattedMonth}-${formattedDay}`;
215
+ }
216
+ dataObject.push({
217
+ questionId: field.questionId,
218
+ question: field.question,
219
+ answer: value,
220
+ answerType: field.fieldType
221
+ });
222
+ });
223
+ }
224
+ return dataObject;
225
+ }
226
+ closeDialog() {
227
+ this.dialogRef.close(false);
228
+ }
229
+ //#endregion (data processing)
230
+ updateQuestionValues(event) {
231
+ this.questionsArray.value[event.questionIndex] = event;
232
+ this.updateSurveyFormValidity();
233
+ }
234
+ updateSurveyFormValidity() {
235
+ this.surveyFormIsValid = true;
236
+ this.questionsArray.controls.forEach((form) => {
237
+ if (!form.controls.answer.valid) {
238
+ this.surveyFormIsValid = false;
239
+ }
240
+ });
241
+ }
242
+ //#endregion (UI Interactions)
243
+ openSnackbar(primaryMsg, duration = 5000) {
244
+ this.snackBar.open(primaryMsg, 'X', {
245
+ duration,
246
+ });
247
+ }
248
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PublicSurveyFormComponent, deps: [{ token: i1.MatLegacySnackBar }, { token: i2.MatLegacyDialogRef }, { token: MAT_LEGACY_DIALOG_DATA }, { token: i3.FormBuilder }, { token: i4.AppTocService }, { token: i5.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
249
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PublicSurveyFormComponent, selector: "ws-app-public-survey-form", ngImport: i0, template: "<div class=\"preview-container\">\n <div class=\"form-header flex\">\n <div class=\"flex flex-1 justify-start items-center\">\n <div>{{'apptoc.AGKCaseStudySurveyForm' | translate}} </div>\n </div>\n <button mat-icon-button class=\"close-button\" [mat-dialog-close]=\"false\">\n <mat-icon class=\"close-icon\" color=\"warn\">close</mat-icon>\n </button>\n </div>\n <div class=\"form-content\">\n <ng-container *ngIf=\"surveyForm\">\n <form [formGroup]=\"surveyForm\">\n <ng-container *ngFor=\"let parentField of parentalFields\">\n <ng-container [ngSwitch]=\"parentField.fieldType\">\n <ng-container *ngSwitchCase=\"'heading'\">\n <ws-app-survey-form-section [childFields]=\"getChildFields(parentField.sectionId)\"\n [sectionField]=\"parentField\"\n [childQuestionsFormArray]=\"getChildQuestionsFormArray(parentField.sectionId)\"\n (questionValues)=\"updateQuestionValues($event)\"></ws-app-survey-form-section>\n </ng-container>\n <ng-container *ngSwitchCase=\"'separator'\">\n <hr class=\"opacity-50 elment-separator\">\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ws-app-survey-form-question [fieldDetails]=\"parentField\"\n [questionForm]=\"getQuestionControl(parentField.controlIndex)\"\n (questionValues)=\"updateQuestionValues($event)\"></ws-app-survey-form-question>\n </ng-container>\n </ng-container>\n </ng-container>\n <div class=\"flex justify-end m-4\">\n <!-- <button mat-button class=\"do-later-btn\" (click)=\"closeDialog()\">{{'apptoc.doItLater' | translate}}</button> -->\n <button mat-button class=\"submit-btn\" [disabled]=\"!surveyFormIsValid || forPreview\" (click)=\"submitForm()\">{{'apptoc.submit'\n | translate}}</button>\n </div>\n </form>\n </ng-container>\n </div>\n</div>\n\n<ng-container *ngIf=\"addLoader > 0\">\n <div class=\"text-center my-2 loader flex justify-center items-center\">\n <mat-spinner class=\"inline-block\"></mat-spinner>\n </div>\n</ng-container>", styles: [".preview-container{max-height:700px}.preview-container .form-content{background:#f4f8ff}.preview-container .form-header{font-family:Montserrat;font-size:24px;font-weight:600;line-height:29.26px;text-align:center;text-underline-position:from-font;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;padding:15px 24px;border-bottom:1px solid #c3c3c3}.preview-container .q-element{padding:16px;background:#fff;border-radius:8px}.preview-container .form-content{padding:15px 24px}.preview-container .elment-separator{margin:16px 0}.preview-container .feedback-text{color:#1b4ca1;font:400 16px/20px Lato}.do-later-btn{height:40px;color:#1b4ca1!important;background-color:#fff!important;border-radius:20px;border:1px solid #1b4ca1!important;margin-right:10px}.submit-btn{height:40px;color:#fff!important;background-color:#1b4ca1!important;border-radius:20px}.submit-btn:disabled{opacity:.6!important}.loader{position:absolute;top:0;left:0;z-index:1000;height:100vh;width:100vw;background-color:#80808045}.info-icon{color:#d13924;font-size:20px;height:20px;width:26px;margin-top:2px}.close-button{height:30px;width:30px;line-height:24px;background:#00000040!important;color:#fff!important;align-self:end;margin-right:-24px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i6.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatLegacyProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i2.MatLegacyDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: i10.SurveyFormQuestionComponent, selector: "ws-app-survey-form-question", inputs: ["questionForm", "fieldDetails"], outputs: ["questionValues"] }, { kind: "component", type: i11.SurveyFormSectionComponent, selector: "ws-app-survey-form-section", inputs: ["childQuestionsFormArray", "childFields", "sectionField"], outputs: ["questionValues"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] }); }
250
+ }
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PublicSurveyFormComponent, decorators: [{
252
+ type: Component,
253
+ args: [{ selector: 'ws-app-public-survey-form', template: "<div class=\"preview-container\">\n <div class=\"form-header flex\">\n <div class=\"flex flex-1 justify-start items-center\">\n <div>{{'apptoc.AGKCaseStudySurveyForm' | translate}} </div>\n </div>\n <button mat-icon-button class=\"close-button\" [mat-dialog-close]=\"false\">\n <mat-icon class=\"close-icon\" color=\"warn\">close</mat-icon>\n </button>\n </div>\n <div class=\"form-content\">\n <ng-container *ngIf=\"surveyForm\">\n <form [formGroup]=\"surveyForm\">\n <ng-container *ngFor=\"let parentField of parentalFields\">\n <ng-container [ngSwitch]=\"parentField.fieldType\">\n <ng-container *ngSwitchCase=\"'heading'\">\n <ws-app-survey-form-section [childFields]=\"getChildFields(parentField.sectionId)\"\n [sectionField]=\"parentField\"\n [childQuestionsFormArray]=\"getChildQuestionsFormArray(parentField.sectionId)\"\n (questionValues)=\"updateQuestionValues($event)\"></ws-app-survey-form-section>\n </ng-container>\n <ng-container *ngSwitchCase=\"'separator'\">\n <hr class=\"opacity-50 elment-separator\">\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ws-app-survey-form-question [fieldDetails]=\"parentField\"\n [questionForm]=\"getQuestionControl(parentField.controlIndex)\"\n (questionValues)=\"updateQuestionValues($event)\"></ws-app-survey-form-question>\n </ng-container>\n </ng-container>\n </ng-container>\n <div class=\"flex justify-end m-4\">\n <!-- <button mat-button class=\"do-later-btn\" (click)=\"closeDialog()\">{{'apptoc.doItLater' | translate}}</button> -->\n <button mat-button class=\"submit-btn\" [disabled]=\"!surveyFormIsValid || forPreview\" (click)=\"submitForm()\">{{'apptoc.submit'\n | translate}}</button>\n </div>\n </form>\n </ng-container>\n </div>\n</div>\n\n<ng-container *ngIf=\"addLoader > 0\">\n <div class=\"text-center my-2 loader flex justify-center items-center\">\n <mat-spinner class=\"inline-block\"></mat-spinner>\n </div>\n</ng-container>", styles: [".preview-container{max-height:700px}.preview-container .form-content{background:#f4f8ff}.preview-container .form-header{font-family:Montserrat;font-size:24px;font-weight:600;line-height:29.26px;text-align:center;text-underline-position:from-font;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;padding:15px 24px;border-bottom:1px solid #c3c3c3}.preview-container .q-element{padding:16px;background:#fff;border-radius:8px}.preview-container .form-content{padding:15px 24px}.preview-container .elment-separator{margin:16px 0}.preview-container .feedback-text{color:#1b4ca1;font:400 16px/20px Lato}.do-later-btn{height:40px;color:#1b4ca1!important;background-color:#fff!important;border-radius:20px;border:1px solid #1b4ca1!important;margin-right:10px}.submit-btn{height:40px;color:#fff!important;background-color:#1b4ca1!important;border-radius:20px}.submit-btn:disabled{opacity:.6!important}.loader{position:absolute;top:0;left:0;z-index:1000;height:100vh;width:100vw;background-color:#80808045}.info-icon{color:#d13924;font-size:20px;height:20px;width:26px;margin-top:2px}.close-button{height:30px;width:30px;line-height:24px;background:#00000040!important;color:#fff!important;align-self:end;margin-right:-24px}\n"] }]
254
+ }], ctorParameters: function () { return [{ type: i1.MatLegacySnackBar }, { type: i2.MatLegacyDialogRef }, { type: undefined, decorators: [{
255
+ type: Inject,
256
+ args: [MAT_LEGACY_DIALOG_DATA]
257
+ }] }, { type: i3.FormBuilder }, { type: i4.AppTocService }, { type: i5.TranslateService }]; } });
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLXN1cnZleS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9jb21wb25lbnRzL3B1YmxpYy1zdXJ2ZXktZm9ybS9wdWJsaWMtc3VydmV5LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvcHVibGljLXN1cnZleS1mb3JtL3B1YmxpYy1zdXJ2ZXktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUI7QUFDbkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUE7QUFFekQsT0FBTyxFQUFFLHNCQUFzQixFQUFzQixNQUFNLGlDQUFpQyxDQUFBO0FBQzVGLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDOUUsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7Ozs7Ozs7Ozs7Ozs7QUFJM0Isc0JBQXNCO0FBRXRCLE1BQU0sYUFBYSxHQUFHLHFIQUFxSCxDQUFBO0FBQzNJLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFBO0FBTzFDLE1BQU0sT0FBTyx5QkFBeUI7SUFlcEMseUJBQXlCO0lBRXpCLHVCQUF1QjtJQUN2QixZQUNVLFFBQTJCLEVBQzVCLFNBQXdELEVBQ3hCLElBQVMsRUFDeEMsRUFBZSxFQUNmLFNBQXdCLEVBQ3hCLFNBQTJCO1FBTDNCLGFBQVEsR0FBUixRQUFRLENBQW1CO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQStDO1FBQ3hCLFNBQUksR0FBSixJQUFJLENBQUs7UUFDeEMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQWU7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7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RCx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQTtRQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFBO2FBQy9CO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsOEJBQThCO0lBRXRCLFlBQVksQ0FBQyxVQUFrQixFQUFFLFdBQW1CLElBQUk7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNsQyxRQUFRO1NBQ1QsQ0FBQyxDQUFBO0lBQ0osQ0FBQzsrR0E1UFUseUJBQXlCLHFGQXFCMUIsc0JBQXNCO21HQXJCckIseUJBQXlCLGlFQ25CdEMsbXFFQTRDZTs7NEZEekJGLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSwyQkFBMkI7OzBCQXlCbEMsTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gKGltcG9ydHMpXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE1hdExlZ2FjeVNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXNuYWNrLWJhcidcbmltcG9ydCB7IE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEsIE1hdExlZ2FjeURpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgQXBwVG9jU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC10b2Muc2VydmljZSdcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbi8vI2VuZHJlZ2lvbiAoaW1wb3J0cylcblxuY29uc3QgRU1BSUxfUEFUVEVSTiA9IC9eW2EtekEtWjAtOV0rW2EtekEtWjAtOS5fLV0qW2EtekEtWjAtOV0rQFthLXpBLVowLTldKyhbLWEtekEtWjAtOV0qW2EtekEtWjAtOV0rKT8oXFwuW2EtekEtWjAtOS1dKykqXFwuW2EtekEtWl17Miw0fSQvXG5jb25zdCBNT0JJTEVfUEFUVEVSTiA9IC9eWzBdP1s2Nzg5XVxcZHs5fSQvXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dzLWFwcC1wdWJsaWMtc3VydmV5LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vcHVibGljLXN1cnZleS1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHVibGljLXN1cnZleS1mb3JtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUHVibGljU3VydmV5Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLy8jcmVnaW9uIChwcm9wZXJ0aWVzKVxuICByYXRpbmcgPSAwXG4gIHN0YXJzID0gQXJyYXkoNSkuZmlsbCgwKVxuICBvdGhlckZpZWxkVHlwZTogYW55ID0gW11cbiAgc2VsZWN0ZWRPcHRpb24gPSBmYWxzZVxuICBmb3JtRGV0YWlsczogYW55XG4gIHN1cnZleUlkID0gJydcbiAgc3VydmV5Rm9ybSE6IEZvcm1Hcm91cFxuICBwYXJlbnRhbEZpZWxkczogYW55W10gPSBbXVxuICBjaGlsZEZpZWxkczogYW55W10gPSBbXVxuICBzdXJ2ZXlGb3JtSXNWYWxpZCA9IHRydWVcbiAgYWRkTG9hZGVyID0gMFxuICBmb3JQcmV2aWV3ID0gZmFsc2VcbiAgLy8jZW5kcmVnaW9uIChwcm9wZXJ0aWVzKVxuXG4gIC8vI3JlZ2lvbiAoY29uc3RydWN0b3IpXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdExlZ2FjeVNuYWNrQmFyLFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdExlZ2FjeURpYWxvZ1JlZjxQdWJsaWNTdXJ2ZXlGb3JtQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBhcHBUb2NTdmM6IEFwcFRvY1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG5cbiAgKSB7XG4gICAgdGhpcy5zdXJ2ZXlJZCA9IGRhdGEuc3VydmV5SWRcbiAgICB0aGlzLmZvclByZXZpZXcgPSBkYXRhLmZvclByZXZpZXdcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZygnZW4nKVxuICAgICAgY29uc3QgbGFuZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSFcbiAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5nKVxuICAgIH1cbiAgfVxuICAvLyNlbmRyZWdpb24gKGNvbnN0cnVjdG9yKVxuXG5cbiAgLy8jcmVnaW9uIChpbml0aWFsaXphdGlvbilcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5nZXRTdXJ2ZXlGb3JtRGF0YSgpXG4gIH1cblxuICBnZXRTdXJ2ZXlGb3JtRGF0YSgpIHtcbiAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgIHRoaXMuYXBwVG9jU3ZjLmdldEZvcm1CeUlkUHVibGljKHRoaXMuc3VydmV5SWQpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICB0aGlzLmZvcm1EZXRhaWxzID0ge1xuICAgICAgICB0aXRsZTogXy5nZXQocmVzdWx0LCAncmVzdWx0LnJlc3BvbnNlLnRpdGxlJywgJycpLFxuICAgICAgICBmaWVsZHM6IF8uZ2V0KHJlc3VsdCwgJ3Jlc3VsdC5yZXNwb25zZS5maWVsZHMnLCBbXSksXG4gICAgICAgIGNvbnRleHRUeXBlOiBfLmdldChyZXN1bHQsICdyZXN1bHQucmVzcG9uc2UuY29udGV4dFR5cGUnLCAnZm9ybScpLFxuICAgICAgfVxuICAgICAgdGhpcy5idWlsZEZvcm0oKVxuICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBidWlsZEZvcm0oKSB7XG4gICAgaWYgKHRoaXMuZm9ybURldGFpbHMpIHtcbiAgICAgIHRoaXMuc3VydmV5Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBmaWVsZHM6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgICB9KVxuICAgICAgY29uc3QgcXVlc3Rpb25zQXJyYXkgPSB0aGlzLnF1ZXN0aW9uc0FycmF5XG4gICAgICBpZiAodGhpcy5mb3JtRGV0YWlscy5maWVsZHMpIHtcbiAgICAgICAgdGhpcy5mb3JtRGV0YWlscy5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC5maWVsZFR5cGUgIT09ICdzZXBhcmF0b3InICYmIGZpZWxkLmZpZWxkVHlwZSAhPT0gJ2hlYWRpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzQXJyYXk6IGFueSA9IFtdXG4gICAgICAgICAgICBpZiAoZmllbGQuaXNSZXF1aXJlZCkge1xuICAgICAgICAgICAgICB2YWxpZGF0b3JzQXJyYXkucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmZpZWxkVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICdwaG9uZSBudW1iZXInOlxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNBcnJheS5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihNT0JJTEVfUEFUVEVSTikpXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yc0FycmF5LnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoMTApKVxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNBcnJheS5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwKSlcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICdlbWFpbCc6XG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yc0FycmF5LnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKEVNQUlMX1BBVFRFUk4pKVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ251bWVyaWMnOlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgICAgcXVlc3Rpb246IFtmaWVsZC5uYW1lXSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IFtmaWVsZC5wYXJlbnRJZF0sXG4gICAgICAgICAgICAgIHF1ZXN0aW9uSW5kZXg6IFtxdWVzdGlvbnNBcnJheS5sZW5ndGhdLFxuICAgICAgICAgICAgICBmaWVsZFR5cGU6IFtmaWVsZC5maWVsZFR5cGVdLFxuICAgICAgICAgICAgICBhbnN3ZXI6IFsnJywgdmFsaWRhdG9yc0FycmF5XSxcbiAgICAgICAgICAgICAgaXNOQTogW2ZhbHNlXSxcbiAgICAgICAgICAgICAgcXVlc3Rpb25JZDogW2ZpZWxkLmlkXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGZpZWxkWydjb250cm9sSW5kZXgnXSA9IHF1ZXN0aW9uc0FycmF5Lmxlbmd0aFxuICAgICAgICAgICAgZmllbGRbJ3ZhbGlkYXRvcnNBcnJheSddID0gdmFsaWRhdG9yc0FycmF5XG4gICAgICAgICAgICBxdWVzdGlvbnNBcnJheS5wdXNoKHF1ZXN0aW9uR3JvdXApXG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yc0FycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnN1cnZleUZvcm1Jc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQucGFyZW50SWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRGaWVsZHMucHVzaChmaWVsZClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRhbEZpZWxkcy5wdXNoKGZpZWxkKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgcXVlc3Rpb25zQXJyYXkoKTogRm9ybUFycmF5IHtcbiAgICBpZiAodGhpcy5zdXJ2ZXlGb3JtICYmIHRoaXMuc3VydmV5Rm9ybS5jb250cm9scy5maWVsZHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnN1cnZleUZvcm0uY29udHJvbHMuZmllbGRzIGFzIEZvcm1BcnJheVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYi5hcnJheShbXSlcbiAgfVxuICAvLyNlbmRyZWdpb24gKGluaXRpYWxpemF0aW9uKVxuXG4gIC8vI3JlZ2lvbiAoVUkgSW50ZXJhY3Rpb25zKVxuICBnZXRDaGlsZFF1ZXN0aW9uc0Zvcm1BcnJheShzZWN0aW9uSWQ6IHN0cmluZyk6IEZvcm1BcnJheSB7XG4gICAgaWYgKHRoaXMuc3VydmV5Rm9ybSAmJiB0aGlzLnN1cnZleUZvcm0uY29udHJvbHMuZmllbGRzKSB7XG4gICAgICBjb25zdCBxdWVzdGlvbnNBcnJheSA9IHRoaXMucXVlc3Rpb25zQXJyYXlcbiAgICAgIGNvbnN0IGNoaWxkUXVlc3Rpb25zQXJyYXkgPSBxdWVzdGlvbnNBcnJheS5jb250cm9scy5maWx0ZXIoKHF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHF1ZXN0aW9uLnZhbHVlICYmIHF1ZXN0aW9uLnZhbHVlLnBhcmVudElkID09PSBzZWN0aW9uSWRcbiAgICAgIH0pXG5cbiAgICAgIGlmIChjaGlsZFF1ZXN0aW9uc0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmIuYXJyYXkoY2hpbGRRdWVzdGlvbnNBcnJheSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuYXJyYXkoW10pIGFzIEZvcm1BcnJheVxuICB9XG5cbiAgZ2V0Q2hpbGRGaWVsZHMoc2VjdGlvbklkOiBzdHJpbmcpIHtcbiAgICBsZXQgc2VjdGlvbkNoaWxkczogYW55ID0gW11cbiAgICBpZiAodGhpcy5jaGlsZEZpZWxkcykge1xuICAgICAgc2VjdGlvbkNoaWxkcyA9IHRoaXMuY2hpbGRGaWVsZHMuZmlsdGVyKChmaWVsZDogYW55KSA9PiBmaWVsZC5wYXJlbnRJZCA9PT0gc2VjdGlvbklkKVxuICAgIH1cbiAgICByZXR1cm4gc2VjdGlvbkNoaWxkc1xuICB9XG5cbiAgZ2V0UXVlc3Rpb25Db250cm9sKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbnNBcnJheS5jb250cm9sc1tpbmRleF0pIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc0FycmF5LmNvbnRyb2xzW2luZGV4XVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7fSlcbiAgfVxuXG4gIGdldEVtYWlsRnJvbXN1cnZleSgpIHtcbiAgICBjb25zdCBhbnN3ZXJPYmogPSB0aGlzLmRhdGFPYmplY3QuZmluZCgoYTogYW55KSA9PiBhLnF1ZXN0aW9uICYmIGEucXVlc3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gJ2VtYWlsJylcbiAgICByZXR1cm4gYW5zd2VyT2JqID8gYW5zd2VyT2JqLmFuc3dlciA6ICcnXG4gIH1cblxuICBzdWJtaXRGb3JtKCkge1xuICAgIGNvbnNvbGUubG9nKCdkYXRhT2JqZWN0JywgdGhpcy5kYXRhT2JqZWN0KVxuICAgIHRoaXMuc3VydmV5Rm9ybS5tYXJrQWxsQXNUb3VjaGVkKClcbiAgICB0aGlzLnN1cnZleUZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgaWYgKHRoaXMuc3VydmV5Rm9ybUlzVmFsaWQpIHtcbiAgICAgIGNvbnN0IGZvcm1Cb2R5OiBhbnkgPSB7XG4gICAgICAgIGZvcm1JZDogdGhpcy5zdXJ2ZXlJZCxcbiAgICAgICAgdmVyc2lvbjogNCxcbiAgICAgICAgc3RhdHVzOiAnU1VCTUlUVEVEJyxcbiAgICAgICAgcmVzcG9uc2VzOiB0aGlzLmRhdGFPYmplY3QsXG4gICAgICAgIGNvbnRleHRJZDogXy5nZXQodGhpcy5kYXRhLCAnY291cnNlSWQnKSxcbiAgICAgICAgY29udGV4dFR5cGU6IF8uZ2V0KHRoaXMuZm9ybURldGFpbHMsICdjb250ZXh0VHlwZScsICcnKSxcbiAgICAgICAgY29udGV4dE5hbWU6IF8uZ2V0KHRoaXMuZGF0YSwgJ2NvdXJzZU5hbWUnLCAnJyksXG4gICAgICAgIGVtYWlsSWQ6IHRoaXMuZ2V0RW1haWxGcm9tc3VydmV5KCksXG4gICAgICAgIGNvbnRleHRPcmdJZDogXy5nZXQodGhpcy5kYXRhLCAnY29udGV4dE9yZ0lkJyksXG4gICAgICB9XG5cbiAgICAgIC8vIFJlbW92ZSBleGlzdGluZyBzdXJ2ZXkgZGF0YSBmcm9tIGxvY2FsIHN0b3JhZ2UgaWYgcHJlc2VudFxuICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IGBzdXJ2ZXlfJHt0aGlzLnN1cnZleUlkfV8ke18uZ2V0KHRoaXMuZGF0YSwgJ2NvdXJzZUlkJyl9YFxuICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHN0b3JhZ2VLZXkpKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHN0b3JhZ2VLZXkpXG4gICAgICB9XG5cbiAgICAgIC8vIFN0b3JlIGZyZXNoIGRhdGFPYmplY3QgaW4gbG9jYWwgc3RvcmFnZVxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhT2JqZWN0KSlcblxuICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICAgIHRoaXMuYXBwVG9jU3ZjLnN1Ym1pdEZvcm1QdWJsaWMoZm9ybUJvZHkpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICBpZiAoXy5nZXQocmVzLCAncGFyYW1zLnN0YXR1cycpID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICAgIHRoaXMub3BlblNuYWNrYmFyKCdGb3JtIGlzIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKVxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuU25hY2tiYXIoXy5nZXQocmVzLCAnZXJyb3JNZXNzYWdlJywgJ1NvbWV0aGluZyB3ZW50IHdyb25nIHBsZWFzZSB0cnkgYWdhaW4nKSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMub3BlblNuYWNrYmFyKCdTb21ldGhpbmcgd2VudCB3cm9uZyBwbGVhc2UgdHJ5IGFnYWluJylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLy8jcmVnaW9uIChkYXRhIHByb2Nlc3NpbmcpXG4gIGdldCBkYXRhT2JqZWN0KCk6IGFueSB7XG4gICAgY29uc3QgZGF0YU9iamVjdDogYW55ID0gW11cbiAgICBjb25zdCBmaWVsZHMgPSBfLmdldCh0aGlzLnN1cnZleUZvcm0sICd2YWx1ZS5maWVsZHMnLCBbXSlcbiAgICBpZiAoZmllbGRzKSB7XG4gICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBmaWVsZC5pc05BID8gJ04vQScgOiBmaWVsZC5hbnN3ZXJcbiAgICAgICAgaWYgKCFmaWVsZC5pc05BICYmIGZpZWxkLmZpZWxkVHlwZSA9PT0gJ2RhdGUnICYmIHZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkWWVhciA9IHZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRNb250aCA9IFN0cmluZyh2YWx1ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZERheSA9IFN0cmluZyh2YWx1ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICB2YWx1ZSA9IGAke2Zvcm1hdHRlZFllYXJ9LSR7Zm9ybWF0dGVkTW9udGh9LSR7Zm9ybWF0dGVkRGF5fWBcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goe1xuICAgICAgICAgIHF1ZXN0aW9uSWQ6IGZpZWxkLnF1ZXN0aW9uSWQsXG4gICAgICAgICAgcXVlc3Rpb246IGZpZWxkLnF1ZXN0aW9uLFxuICAgICAgICAgIGFuc3dlcjogdmFsdWUsXG4gICAgICAgICAgYW5zd2VyVHlwZTogZmllbGQuZmllbGRUeXBlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gZGF0YU9iamVjdFxuICB9XG5cbiAgY2xvc2VEaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoZmFsc2UpXG4gIH1cbiAgLy8jZW5kcmVnaW9uIChkYXRhIHByb2Nlc3NpbmcpXG5cbiAgdXBkYXRlUXVlc3Rpb25WYWx1ZXMoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb25zQXJyYXkudmFsdWVbZXZlbnQucXVlc3Rpb25JbmRleF0gPSBldmVudFxuICAgIHRoaXMudXBkYXRlU3VydmV5Rm9ybVZhbGlkaXR5KClcbiAgfVxuXG4gIHVwZGF0ZVN1cnZleUZvcm1WYWxpZGl0eSgpIHsgLy8gc29tZSB0aW1lcyByZWFjdGl2ZSBmb3JtcyBub3QgYWJhbGUgdG8gZGV0ZWN0IHZhbHVlIGNoYW5nZXMgYW5kIHZhbGlkaXR5IGluIGR5bmFtaWMgZm9ybUFycmF5XG4gICAgdGhpcy5zdXJ2ZXlGb3JtSXNWYWxpZCA9IHRydWVcbiAgICB0aGlzLnF1ZXN0aW9uc0FycmF5LmNvbnRyb2xzLmZvckVhY2goKGZvcm06IGFueSkgPT4ge1xuICAgICAgaWYgKCFmb3JtLmNvbnRyb2xzLmFuc3dlci52YWxpZCkge1xuICAgICAgICB0aGlzLnN1cnZleUZvcm1Jc1ZhbGlkID0gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIC8vI2VuZHJlZ2lvbiAoVUkgSW50ZXJhY3Rpb25zKVxuXG4gIHByaXZhdGUgb3BlblNuYWNrYmFyKHByaW1hcnlNc2c6IHN0cmluZywgZHVyYXRpb246IG51bWJlciA9IDUwMDApIHtcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocHJpbWFyeU1zZywgJ1gnLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICB9KVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicHJldmlldy1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cImZvcm0taGVhZGVyIGZsZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LTEganVzdGlmeS1zdGFydCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxkaXY+e3snYXBwdG9jLkFHS0Nhc2VTdHVkeVN1cnZleUZvcm0nIHwgdHJhbnNsYXRlfX0gPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJjbG9zZS1idXR0b25cIiBbbWF0LWRpYWxvZy1jbG9zZV09XCJmYWxzZVwiPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY2xvc2UtaWNvblwiIGNvbG9yPVwid2FyblwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRlbnRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VydmV5Rm9ybVwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzdXJ2ZXlGb3JtXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhcmVudEZpZWxkIG9mIHBhcmVudGFsRmllbGRzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicGFyZW50RmllbGQuZmllbGRUeXBlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaGVhZGluZydcIj5cbiAgICAgICAgICAgICAgPHdzLWFwcC1zdXJ2ZXktZm9ybS1zZWN0aW9uIFtjaGlsZEZpZWxkc109XCJnZXRDaGlsZEZpZWxkcyhwYXJlbnRGaWVsZC5zZWN0aW9uSWQpXCJcbiAgICAgICAgICAgICAgICBbc2VjdGlvbkZpZWxkXT1cInBhcmVudEZpZWxkXCJcbiAgICAgICAgICAgICAgICBbY2hpbGRRdWVzdGlvbnNGb3JtQXJyYXldPVwiZ2V0Q2hpbGRRdWVzdGlvbnNGb3JtQXJyYXkocGFyZW50RmllbGQuc2VjdGlvbklkKVwiXG4gICAgICAgICAgICAgICAgKHF1ZXN0aW9uVmFsdWVzKT1cInVwZGF0ZVF1ZXN0aW9uVmFsdWVzKCRldmVudClcIj48L3dzLWFwcC1zdXJ2ZXktZm9ybS1zZWN0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VwYXJhdG9yJ1wiPlxuICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJvcGFjaXR5LTUwIGVsbWVudC1zZXBhcmF0b3JcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICA8d3MtYXBwLXN1cnZleS1mb3JtLXF1ZXN0aW9uIFtmaWVsZERldGFpbHNdPVwicGFyZW50RmllbGRcIlxuICAgICAgICAgICAgICAgIFtxdWVzdGlvbkZvcm1dPVwiZ2V0UXVlc3Rpb25Db250cm9sKHBhcmVudEZpZWxkLmNvbnRyb2xJbmRleClcIlxuICAgICAgICAgICAgICAgIChxdWVzdGlvblZhbHVlcyk9XCJ1cGRhdGVRdWVzdGlvblZhbHVlcygkZXZlbnQpXCI+PC93cy1hcHAtc3VydmV5LWZvcm0tcXVlc3Rpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIG0tNFwiPlxuICAgICAgICAgIDwhLS0gPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwiZG8tbGF0ZXItYnRuXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj57eydhcHB0b2MuZG9JdExhdGVyJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+IC0tPlxuICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cInN1Ym1pdC1idG5cIiBbZGlzYWJsZWRdPVwiIXN1cnZleUZvcm1Jc1ZhbGlkIHx8IGZvclByZXZpZXdcIiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCI+e3snYXBwdG9jLnN1Ym1pdCdcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJhZGRMb2FkZXIgPiAwXCI+XG4gIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBteS0yIGxvYWRlciBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiPlxuICAgIDxtYXQtc3Bpbm5lciBjbGFzcz1cImlubGluZS1ibG9ja1wiPjwvbWF0LXNwaW5uZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+Il19