@piserve-tech/form-submission 1.3.317 → 1.3.319

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 (442) hide show
  1. package/environment/environment.d.ts +5 -0
  2. package/esm2022/environment/environment.mjs +6 -0
  3. package/esm2022/form-fields/aggregate-function/aggregate-function.component.mjs +146 -0
  4. package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +473 -0
  5. package/esm2022/form-fields/currency-fields/currency-fields.component.mjs +502 -0
  6. package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +608 -0
  7. package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +585 -0
  8. package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +224 -0
  9. package/esm2022/form-fields/form-fields.module.mjs +174 -0
  10. package/esm2022/form-fields/hidden-field/hidden-field.component.mjs +137 -0
  11. package/esm2022/form-fields/iframe-fields/iframe-fields.component.mjs +198 -0
  12. package/esm2022/form-fields/location-fields/location-fields.component.mjs +85 -0
  13. package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +131 -0
  14. package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +270 -0
  15. package/esm2022/form-fields/number-fields/number-fields.component.mjs +242 -0
  16. package/esm2022/form-fields/password-fields/password-fields.component.mjs +257 -0
  17. package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +346 -0
  18. package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +148 -0
  19. package/esm2022/form-fields/section-fields/section-fields.component.mjs +29 -0
  20. package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +158 -0
  21. package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +32 -0
  22. package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +73 -0
  23. package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +66 -0
  24. package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +159 -0
  25. package/esm2022/form-fields/text-fields/text-fields.component.mjs +245 -0
  26. package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +85 -0
  27. package/esm2022/form-fields/url-fields/url-fields.component.mjs +124 -0
  28. package/esm2022/form-submission/form-submission.module.mjs +64 -0
  29. package/esm2022/form-submission/header/header.component.mjs +20 -0
  30. package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +171 -0
  31. package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +124 -0
  32. package/esm2022/form-submission/save-as-draft/saveDraftModalComponent .mjs +50 -0
  33. package/esm2022/form-submission/submission-container/submission-container.component.mjs +17 -0
  34. package/esm2022/form-submission/submit-form/submit-form.component.mjs +1610 -0
  35. package/esm2022/lib/form-submission.component.mjs +113 -0
  36. package/esm2022/lib/form-submission.module.mjs +56 -0
  37. package/esm2022/lib/form-submission.service.mjs +14 -0
  38. package/esm2022/models/aggregate.model.mjs +2 -0
  39. package/esm2022/models/answer.model.mjs +2 -0
  40. package/esm2022/models/appearance.model.mjs +2 -0
  41. package/esm2022/models/attachment.model.mjs +2 -0
  42. package/esm2022/models/defaultAnswerEntry.model.mjs +2 -0
  43. package/esm2022/models/defaultAnswersModel.model.mjs +2 -0
  44. package/esm2022/models/defaultQuestionAnswer.model.mjs +2 -0
  45. package/esm2022/models/elementOptionAPI.model.mjs +2 -0
  46. package/esm2022/models/elementOptionAPIData.model.mjs +2 -0
  47. package/esm2022/models/elementOptionDB.model.mjs +2 -0
  48. package/esm2022/models/elementOptionDBCriteria.model.mjs +2 -0
  49. package/esm2022/models/emitters.model.mjs +2 -0
  50. package/esm2022/models/enum/condition.enum.mjs +18 -0
  51. package/esm2022/models/enum/elementType .enum.mjs +24 -0
  52. package/esm2022/models/enum/entityType.enum.mjs +12 -0
  53. package/esm2022/models/formConfiguration.model.mjs +2 -0
  54. package/esm2022/models/formElement.model.mjs +2 -0
  55. package/esm2022/models/formElementType.model.mjs +2 -0
  56. package/esm2022/models/grid.model.mjs +2 -0
  57. package/esm2022/models/hiddenField.model.mjs +2 -0
  58. package/esm2022/models/iFrameProperties.model.mjs +2 -0
  59. package/esm2022/models/logic.model.mjs +2 -0
  60. package/esm2022/models/multifields.model.mjs +2 -0
  61. package/esm2022/models/option.model.mjs +2 -0
  62. package/esm2022/models/page.model.mjs +2 -0
  63. package/esm2022/models/publicForm.model.mjs +2 -0
  64. package/esm2022/models/question.model.mjs +2 -0
  65. package/esm2022/models/questionAnswer.model.mjs +2 -0
  66. package/esm2022/models/questionGroup.model.mjs +2 -0
  67. package/esm2022/models/row.model.mjs +2 -0
  68. package/esm2022/models/scoring.model.mjs +2 -0
  69. package/esm2022/models/section.model.mjs +2 -0
  70. package/esm2022/models/subForm.model.mjs +2 -0
  71. package/esm2022/models/subformConfiguration.model.mjs +2 -0
  72. package/esm2022/models/subformPropery.model.mjs +2 -0
  73. package/esm2022/models/submission.model.mjs +2 -0
  74. package/esm2022/models/submissionCopyConfig.mopdel.mjs +2 -0
  75. package/esm2022/models/terms&condition.model.mjs +2 -0
  76. package/esm2022/models/validation.model.mjs +2 -0
  77. package/esm2022/models/whenClause.model.mjs +2 -0
  78. package/esm2022/models/whenClauseCondition.model.mjs +2 -0
  79. package/esm2022/models/whenClauseElements.model.mjs +2 -0
  80. package/esm2022/piserve-tech-form-submission.mjs +5 -0
  81. package/esm2022/public-api.mjs +7 -0
  82. package/esm2022/question/card-subform/card-subform.component.mjs +354 -0
  83. package/esm2022/question/confirm-dialog/confirm-dialog.component.mjs +27 -0
  84. package/esm2022/question/form-elements/form-elements.component.mjs +62 -0
  85. package/esm2022/question/inline-multiple-subform/inline-multiple-subform.component.mjs +384 -0
  86. package/esm2022/question/multifields/multifields.component.mjs +54 -0
  87. package/esm2022/question/multiple-subform/multiple-subform.component.mjs +413 -0
  88. package/esm2022/question/question/question.component.mjs +145 -0
  89. package/esm2022/question/question-group/question-group.component.mjs +102 -0
  90. package/esm2022/question/recursive-logic/recursive-logic.component.mjs +49 -0
  91. package/esm2022/question/sub-form/sub-form.component.mjs +355 -0
  92. package/esm2022/services/aggregate.service.mjs +139 -0
  93. package/esm2022/services/countryService.mjs +89 -0
  94. package/esm2022/services/data.service.mjs +36 -0
  95. package/esm2022/services/element-tracker.service.mjs +27 -0
  96. package/esm2022/services/form-validation.service.mjs +128 -0
  97. package/esm2022/services/form.service.mjs +332 -0
  98. package/esm2022/services/mapper.service.mjs +519 -0
  99. package/esm2022/services/recaptcha.service.mjs +136 -0
  100. package/esm2022/services/score.service.mjs +268 -0
  101. package/esm2022/services/subform-copy.service.mjs +122 -0
  102. package/esm2022/services/validation.service.mjs +35 -0
  103. package/esm2022/services/whenClause.service.mjs +423 -0
  104. package/esm2022/shared/shared.module.mjs +97 -0
  105. package/esm2022/sub-form/submission-modal/submission-modal.component.mjs +133 -0
  106. package/fesm2022/piserve-tech-form-submission.mjs +11661 -0
  107. package/fesm2022/piserve-tech-form-submission.mjs.map +1 -0
  108. package/form-fields/aggregate-function/aggregate-function.component.d.ts +43 -0
  109. package/form-fields/check-box-fields/check-box-fields.component.d.ts +73 -0
  110. package/form-fields/currency-fields/currency-fields.component.d.ts +62 -0
  111. package/form-fields/date-time-fields/date-time-fields.component.d.ts +96 -0
  112. package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +88 -0
  113. package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +72 -0
  114. package/form-fields/form-fields.module.d.ts +40 -0
  115. package/form-fields/hidden-field/hidden-field.component.d.ts +38 -0
  116. package/form-fields/iframe-fields/iframe-fields.component.d.ts +35 -0
  117. package/form-fields/location-fields/location-fields.component.d.ts +29 -0
  118. package/form-fields/mail-fields/mail-fields.component.d.ts +41 -0
  119. package/form-fields/mobile-fields/mobile-fields.component.d.ts +71 -0
  120. package/form-fields/number-fields/number-fields.component.d.ts +53 -0
  121. package/form-fields/password-fields/password-fields.component.d.ts +57 -0
  122. package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +70 -0
  123. package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +46 -0
  124. package/form-fields/section-fields/section-fields.component.d.ts +10 -0
  125. package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +45 -0
  126. package/form-fields/signature-fields/signature-fields.component.d.ts +13 -0
  127. package/form-fields/slider-fields/slider-fields.component.d.ts +32 -0
  128. package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +26 -0
  129. package/form-fields/text-area-fields/text-area-fields.component.d.ts +49 -0
  130. package/form-fields/text-fields/text-fields.component.d.ts +49 -0
  131. package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +29 -0
  132. package/form-fields/url-fields/url-fields.component.d.ts +41 -0
  133. package/form-submission/form-submission.module.d.ts +20 -0
  134. package/form-submission/header/header.component.d.ts +7 -0
  135. package/form-submission/navigation-tabs/navigation-tabs.component.d.ts +57 -0
  136. package/form-submission/next-prev-navigation/next-prev-navigation.component.d.ts +46 -0
  137. package/form-submission/save-as-draft/saveDraftModalComponent .d.ts +17 -0
  138. package/form-submission/submission-container/submission-container.component.d.ts +7 -0
  139. package/form-submission/submit-form/submit-form.component.d.ts +237 -0
  140. package/index.d.ts +5 -0
  141. package/lib/form-submission.component.d.ts +30 -0
  142. package/lib/form-submission.module.d.ts +16 -0
  143. package/lib/form-submission.service.d.ts +6 -0
  144. package/models/aggregate.model.d.ts +4 -0
  145. package/{src/models/answer.model.ts → models/answer.model.d.ts} +23 -25
  146. package/models/appearance.model.d.ts +64 -0
  147. package/{src/models/attachment.model.ts → models/attachment.model.d.ts} +6 -6
  148. package/{src/models/defaultAnswerEntry.model.ts → models/defaultAnswerEntry.model.d.ts} +5 -7
  149. package/{src/models/defaultAnswersModel.model.ts → models/defaultAnswersModel.model.d.ts} +4 -5
  150. package/{src/models/defaultQuestionAnswer.model.ts → models/defaultQuestionAnswer.model.d.ts} +6 -6
  151. package/models/elementOptionAPI.model.d.ts +12 -0
  152. package/models/elementOptionAPIData.model.d.ts +5 -0
  153. package/models/elementOptionDB.model.d.ts +8 -0
  154. package/models/elementOptionDBCriteria.model.d.ts +7 -0
  155. package/{src/models/emitters.model.ts → models/emitters.model.d.ts} +8 -8
  156. package/{src/models/enum/condition.enum.ts → models/enum/condition.enum.d.ts} +2 -2
  157. package/models/enum/elementType .enum.d.ts +22 -0
  158. package/models/enum/entityType.enum.d.ts +10 -0
  159. package/{src/models/formConfiguration.model.ts → models/formConfiguration.model.d.ts} +2 -2
  160. package/{src/models/formElement.model.ts → models/formElement.model.d.ts} +22 -22
  161. package/{src/models/formElementType.model.ts → models/formElementType.model.d.ts} +2 -3
  162. package/{src/models/grid.model.ts → models/grid.model.d.ts} +13 -14
  163. package/{src/models/hiddenField.model.ts → models/hiddenField.model.d.ts} +5 -5
  164. package/{src/models/iFrameProperties.model.ts → models/iFrameProperties.model.d.ts} +13 -13
  165. package/models/logic.model.d.ts +9 -0
  166. package/models/multifields.model.d.ts +11 -0
  167. package/{src/models/option.model.ts → models/option.model.d.ts} +5 -5
  168. package/models/page.model.d.ts +6 -0
  169. package/models/publicForm.model.d.ts +18 -0
  170. package/models/question.model.d.ts +26 -0
  171. package/models/questionAnswer.model.d.ts +7 -0
  172. package/models/questionGroup.model.d.ts +11 -0
  173. package/{src/models/row.model.ts → models/row.model.d.ts} +1 -2
  174. package/models/scoring.model.d.ts +10 -0
  175. package/models/section.model.d.ts +6 -0
  176. package/models/subForm.model.d.ts +24 -0
  177. package/models/subformConfiguration.model.d.ts +4 -0
  178. package/models/subformPropery.model.d.ts +7 -0
  179. package/{src/models/submission.model.ts → models/submission.model.d.ts} +14 -16
  180. package/{src/models/submissionCopyConfig.mopdel.ts → models/submissionCopyConfig.mopdel.d.ts} +4 -4
  181. package/{src/models/terms&condition.model.ts → models/terms&condition.model.d.ts} +1 -1
  182. package/models/validation.model.d.ts +48 -0
  183. package/models/whenClause.model.d.ts +6 -0
  184. package/{src/models/whenClauseCondition.model.ts → models/whenClauseCondition.model.d.ts} +6 -6
  185. package/{src/models/whenClauseElements.model.ts → models/whenClauseElements.model.d.ts} +5 -6
  186. package/package.json +46 -33
  187. package/{src/public-api.ts → public-api.d.ts} +0 -4
  188. package/question/card-subform/card-subform.component.d.ts +44 -0
  189. package/question/confirm-dialog/confirm-dialog.component.d.ts +12 -0
  190. package/question/form-elements/form-elements.component.d.ts +20 -0
  191. package/question/inline-multiple-subform/inline-multiple-subform.component.d.ts +47 -0
  192. package/question/multifields/multifields.component.d.ts +11 -0
  193. package/question/multiple-subform/multiple-subform.component.d.ts +39 -0
  194. package/question/question/question.component.d.ts +30 -0
  195. package/question/question-group/question-group.component.d.ts +29 -0
  196. package/question/recursive-logic/recursive-logic.component.d.ts +19 -0
  197. package/question/sub-form/sub-form.component.d.ts +70 -0
  198. package/services/aggregate.service.d.ts +29 -0
  199. package/services/countryService.d.ts +21 -0
  200. package/services/data.service.d.ts +19 -0
  201. package/services/element-tracker.service.d.ts +10 -0
  202. package/services/form-validation.service.d.ts +16 -0
  203. package/services/form.service.d.ts +27 -0
  204. package/services/mapper.service.d.ts +31 -0
  205. package/services/recaptcha.service.d.ts +46 -0
  206. package/services/score.service.d.ts +27 -0
  207. package/services/subform-copy.service.d.ts +10 -0
  208. package/services/validation.service.d.ts +14 -0
  209. package/services/whenClause.service.d.ts +45 -0
  210. package/shared/shared.module.d.ts +25 -0
  211. package/sub-form/submission-modal/submission-modal.component.d.ts +31 -0
  212. package/ng-package.json +0 -30
  213. package/src/environment/environment.ts +0 -6
  214. package/src/form-fields/aggregate-function/aggregate-function.component.html +0 -63
  215. package/src/form-fields/aggregate-function/aggregate-function.component.scss +0 -1
  216. package/src/form-fields/aggregate-function/aggregate-function.component.spec.ts +0 -21
  217. package/src/form-fields/aggregate-function/aggregate-function.component.ts +0 -148
  218. package/src/form-fields/check-box-fields/check-box-fields.component.html +0 -81
  219. package/src/form-fields/check-box-fields/check-box-fields.component.scss +0 -28
  220. package/src/form-fields/check-box-fields/check-box-fields.component.spec.ts +0 -21
  221. package/src/form-fields/check-box-fields/check-box-fields.component.ts +0 -538
  222. package/src/form-fields/currency-fields/currency-fields.component.html +0 -85
  223. package/src/form-fields/currency-fields/currency-fields.component.scss +0 -48
  224. package/src/form-fields/currency-fields/currency-fields.component.spec.ts +0 -21
  225. package/src/form-fields/currency-fields/currency-fields.component.ts +0 -589
  226. package/src/form-fields/date-time-fields/date-time-fields.component.html +0 -268
  227. package/src/form-fields/date-time-fields/date-time-fields.component.scss +0 -88
  228. package/src/form-fields/date-time-fields/date-time-fields.component.spec.ts +0 -21
  229. package/src/form-fields/date-time-fields/date-time-fields.component.ts +0 -693
  230. package/src/form-fields/drop-down-fields/drop-down-fields.component.html +0 -77
  231. package/src/form-fields/drop-down-fields/drop-down-fields.component.scss +0 -12
  232. package/src/form-fields/drop-down-fields/drop-down-fields.component.spec.ts +0 -21
  233. package/src/form-fields/drop-down-fields/drop-down-fields.component.ts +0 -698
  234. package/src/form-fields/file-picker-fields/file-picker-fields.component.html +0 -72
  235. package/src/form-fields/file-picker-fields/file-picker-fields.component.scss +0 -33
  236. package/src/form-fields/file-picker-fields/file-picker-fields.component.spec.ts +0 -21
  237. package/src/form-fields/file-picker-fields/file-picker-fields.component.ts +0 -256
  238. package/src/form-fields/form-fields.module.ts +0 -110
  239. package/src/form-fields/hidden-field/hidden-field.component.scss +0 -0
  240. package/src/form-fields/hidden-field/hidden-field.component.spec.ts +0 -21
  241. package/src/form-fields/hidden-field/hidden-field.component.ts +0 -156
  242. package/src/form-fields/iframe-fields/iframe-fields.component.html +0 -31
  243. package/src/form-fields/iframe-fields/iframe-fields.component.scss +0 -0
  244. package/src/form-fields/iframe-fields/iframe-fields.component.spec.ts +0 -21
  245. package/src/form-fields/iframe-fields/iframe-fields.component.ts +0 -225
  246. package/src/form-fields/location-fields/location-fields.component.html +0 -54
  247. package/src/form-fields/location-fields/location-fields.component.scss +0 -22
  248. package/src/form-fields/location-fields/location-fields.component.spec.ts +0 -21
  249. package/src/form-fields/location-fields/location-fields.component.ts +0 -83
  250. package/src/form-fields/mail-fields/mail-fields.component.html +0 -66
  251. package/src/form-fields/mail-fields/mail-fields.component.scss +0 -10
  252. package/src/form-fields/mail-fields/mail-fields.component.spec.ts +0 -21
  253. package/src/form-fields/mail-fields/mail-fields.component.ts +0 -127
  254. package/src/form-fields/mobile-fields/mobile-fields.component.html +0 -97
  255. package/src/form-fields/mobile-fields/mobile-fields.component.scss +0 -52
  256. package/src/form-fields/mobile-fields/mobile-fields.component.spec.ts +0 -21
  257. package/src/form-fields/mobile-fields/mobile-fields.component.ts +0 -310
  258. package/src/form-fields/number-fields/number-fields.component.html +0 -70
  259. package/src/form-fields/number-fields/number-fields.component.scss +0 -17
  260. package/src/form-fields/number-fields/number-fields.component.spec.ts +0 -21
  261. package/src/form-fields/number-fields/number-fields.component.ts +0 -256
  262. package/src/form-fields/password-fields/password-fields.component.html +0 -113
  263. package/src/form-fields/password-fields/password-fields.component.scss +0 -61
  264. package/src/form-fields/password-fields/password-fields.component.spec.ts +0 -21
  265. package/src/form-fields/password-fields/password-fields.component.ts +0 -273
  266. package/src/form-fields/radio-button-fields/radio-button-fields.component.html +0 -82
  267. package/src/form-fields/radio-button-fields/radio-button-fields.component.scss +0 -28
  268. package/src/form-fields/radio-button-fields/radio-button-fields.component.spec.ts +0 -21
  269. package/src/form-fields/radio-button-fields/radio-button-fields.component.ts +0 -391
  270. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.html +0 -67
  271. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.scss +0 -23
  272. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.spec.ts +0 -21
  273. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.ts +0 -145
  274. package/src/form-fields/section-fields/section-fields.component.html +0 -4
  275. package/src/form-fields/section-fields/section-fields.component.scss +0 -37
  276. package/src/form-fields/section-fields/section-fields.component.spec.ts +0 -21
  277. package/src/form-fields/section-fields/section-fields.component.ts +0 -25
  278. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.html +0 -93
  279. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.scss +0 -52
  280. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.spec.ts +0 -21
  281. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.ts +0 -155
  282. package/src/form-fields/signature-fields/signature-fields.component.html +0 -43
  283. package/src/form-fields/signature-fields/signature-fields.component.scss +0 -10
  284. package/src/form-fields/signature-fields/signature-fields.component.spec.ts +0 -21
  285. package/src/form-fields/signature-fields/signature-fields.component.ts +0 -25
  286. package/src/form-fields/slider-fields/slider-fields.component.html +0 -67
  287. package/src/form-fields/slider-fields/slider-fields.component.scss +0 -55
  288. package/src/form-fields/slider-fields/slider-fields.component.spec.ts +0 -21
  289. package/src/form-fields/slider-fields/slider-fields.component.ts +0 -63
  290. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.html +0 -52
  291. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.scss +0 -85
  292. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.spec.ts +0 -21
  293. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.ts +0 -62
  294. package/src/form-fields/text-area-fields/text-area-fields.component.html +0 -68
  295. package/src/form-fields/text-area-fields/text-area-fields.component.scss +0 -19
  296. package/src/form-fields/text-area-fields/text-area-fields.component.spec.ts +0 -21
  297. package/src/form-fields/text-area-fields/text-area-fields.component.ts +0 -166
  298. package/src/form-fields/text-fields/text-fields.component.html +0 -67
  299. package/src/form-fields/text-fields/text-fields.component.scss +0 -26
  300. package/src/form-fields/text-fields/text-fields.component.spec.ts +0 -21
  301. package/src/form-fields/text-fields/text-fields.component.ts +0 -248
  302. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.html +0 -70
  303. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.scss +0 -112
  304. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.spec.ts +0 -21
  305. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.ts +0 -74
  306. package/src/form-fields/url-fields/url-fields.component.html +0 -109
  307. package/src/form-fields/url-fields/url-fields.component.scss +0 -22
  308. package/src/form-fields/url-fields/url-fields.component.spec.ts +0 -21
  309. package/src/form-fields/url-fields/url-fields.component.ts +0 -123
  310. package/src/form-submission/form-submission.module.ts +0 -40
  311. package/src/form-submission/header/header.component.html +0 -6
  312. package/src/form-submission/header/header.component.scss +0 -26
  313. package/src/form-submission/header/header.component.spec.ts +0 -21
  314. package/src/form-submission/header/header.component.ts +0 -12
  315. package/src/form-submission/navigation-tabs/navigation-tabs.component.html +0 -134
  316. package/src/form-submission/navigation-tabs/navigation-tabs.component.scss +0 -200
  317. package/src/form-submission/navigation-tabs/navigation-tabs.component.spec.ts +0 -21
  318. package/src/form-submission/navigation-tabs/navigation-tabs.component.ts +0 -134
  319. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.html +0 -207
  320. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.scss +0 -208
  321. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.spec.ts +0 -21
  322. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.ts +0 -74
  323. package/src/form-submission/save-as-draft/saveDraftModalComponent .ts +0 -60
  324. package/src/form-submission/save-as-draft/saveDraftModalComponent.html +0 -33
  325. package/src/form-submission/save-as-draft/saveDraftModalComponent.scss +0 -195
  326. package/src/form-submission/submission-container/submission-container.component.html +0 -30
  327. package/src/form-submission/submission-container/submission-container.component.scss +0 -67
  328. package/src/form-submission/submission-container/submission-container.component.spec.ts +0 -21
  329. package/src/form-submission/submission-container/submission-container.component.ts +0 -14
  330. package/src/form-submission/submit-form/submit-form.component.html +0 -76
  331. package/src/form-submission/submit-form/submit-form.component.scss +0 -88
  332. package/src/form-submission/submit-form/submit-form.component.spec.ts +0 -21
  333. package/src/form-submission/submit-form/submit-form.component.ts +0 -1953
  334. package/src/lib/form-submission.component.html +0 -15
  335. package/src/lib/form-submission.component.scss +0 -1
  336. package/src/lib/form-submission.component.ts +0 -120
  337. package/src/lib/form-submission.module.ts +0 -31
  338. package/src/lib/form-submission.service.spec.ts +0 -16
  339. package/src/lib/form-submission.service.ts +0 -9
  340. package/src/models/aggregate.model.ts +0 -4
  341. package/src/models/appearance.model.ts +0 -64
  342. package/src/models/elementOptionAPI.model.ts +0 -13
  343. package/src/models/elementOptionAPIData.model.ts +0 -5
  344. package/src/models/elementOptionDB.model.ts +0 -9
  345. package/src/models/elementOptionDBCriteria.model.ts +0 -7
  346. package/src/models/enum/elementType .enum.ts +0 -22
  347. package/src/models/enum/entityType.enum.ts +0 -10
  348. package/src/models/logic.model.ts +0 -11
  349. package/src/models/multifields.model.ts +0 -12
  350. package/src/models/page.model.ts +0 -7
  351. package/src/models/publicForm.model.ts +0 -19
  352. package/src/models/question.model.ts +0 -27
  353. package/src/models/questionAnswer.model.ts +0 -8
  354. package/src/models/questionGroup.model.ts +0 -12
  355. package/src/models/response.model.ts +0 -9
  356. package/src/models/result.model.ts +0 -5
  357. package/src/models/scoring.model.ts +0 -10
  358. package/src/models/section.model.ts +0 -6
  359. package/src/models/subForm.model.ts +0 -25
  360. package/src/models/subformConfiguration.model.ts +0 -4
  361. package/src/models/subformPropery.model.ts +0 -8
  362. package/src/models/validation.model.ts +0 -48
  363. package/src/models/whenClause.model.ts +0 -7
  364. package/src/question/card-subform/card-subform.component.html +0 -282
  365. package/src/question/card-subform/card-subform.component.scss +0 -49
  366. package/src/question/card-subform/card-subform.component.spec.ts +0 -21
  367. package/src/question/card-subform/card-subform.component.ts +0 -407
  368. package/src/question/confirm-dialog/confirm-dialog.component.html +0 -32
  369. package/src/question/confirm-dialog/confirm-dialog.component.scss +0 -109
  370. package/src/question/confirm-dialog/confirm-dialog.component.spec.ts +0 -21
  371. package/src/question/confirm-dialog/confirm-dialog.component.ts +0 -24
  372. package/src/question/form-elements/form-elements.component.html +0 -28
  373. package/src/question/form-elements/form-elements.component.scss +0 -0
  374. package/src/question/form-elements/form-elements.component.spec.ts +0 -21
  375. package/src/question/form-elements/form-elements.component.ts +0 -41
  376. package/src/question/inline-multiple-subform/inline-multiple-subform.component.html +0 -321
  377. package/src/question/inline-multiple-subform/inline-multiple-subform.component.scss +0 -78
  378. package/src/question/inline-multiple-subform/inline-multiple-subform.component.spec.ts +0 -21
  379. package/src/question/inline-multiple-subform/inline-multiple-subform.component.ts +0 -425
  380. package/src/question/multifields/multifields.component.html +0 -78
  381. package/src/question/multifields/multifields.component.scss +0 -6
  382. package/src/question/multifields/multifields.component.spec.ts +0 -21
  383. package/src/question/multifields/multifields.component.ts +0 -27
  384. package/src/question/multiple-subform/multiple-subform.component.html +0 -185
  385. package/src/question/multiple-subform/multiple-subform.component.scss +0 -52
  386. package/src/question/multiple-subform/multiple-subform.component.spec.ts +0 -21
  387. package/src/question/multiple-subform/multiple-subform.component.ts +0 -481
  388. package/src/question/question/question.component.html +0 -51
  389. package/src/question/question/question.component.scss +0 -0
  390. package/src/question/question/question.component.spec.ts +0 -21
  391. package/src/question/question/question.component.ts +0 -129
  392. package/src/question/question-group/question-group.component.html +0 -147
  393. package/src/question/question-group/question-group.component.scss +0 -36
  394. package/src/question/question-group/question-group.component.spec.ts +0 -21
  395. package/src/question/question-group/question-group.component.ts +0 -94
  396. package/src/question/question.module.ts +0 -22
  397. package/src/question/recursive-logic/recursive-logic.component.html +0 -33
  398. package/src/question/recursive-logic/recursive-logic.component.scss +0 -0
  399. package/src/question/recursive-logic/recursive-logic.component.spec.ts +0 -21
  400. package/src/question/recursive-logic/recursive-logic.component.ts +0 -29
  401. package/src/question/sub-form/sub-form.component.html +0 -254
  402. package/src/question/sub-form/sub-form.component.scss +0 -83
  403. package/src/question/sub-form/sub-form.component.spec.ts +0 -21
  404. package/src/question/sub-form/sub-form.component.ts +0 -421
  405. package/src/services/aggregate.service.ts +0 -148
  406. package/src/services/countryService.ts +0 -92
  407. package/src/services/data.service.ts +0 -36
  408. package/src/services/element-tracker.service.spec.ts +0 -16
  409. package/src/services/element-tracker.service.ts +0 -24
  410. package/src/services/form-validation.service.ts +0 -151
  411. package/src/services/form.service.spec.ts +0 -16
  412. package/src/services/form.service.ts +0 -407
  413. package/src/services/mapper.service.ts +0 -625
  414. package/src/services/recaptcha.service.spec.ts +0 -16
  415. package/src/services/recaptcha.service.ts +0 -179
  416. package/src/services/score.service.ts +0 -352
  417. package/src/services/subform-copy.service.ts +0 -148
  418. package/src/services/validation.service.spec.ts +0 -16
  419. package/src/services/validation.service.ts +0 -33
  420. package/src/services/whenClause.service.ts +0 -502
  421. package/src/shared/shared.module.ts +0 -58
  422. package/src/styles/shared-style.scss +0 -86
  423. package/src/sub-form/sub-form.module.ts +0 -24
  424. package/src/sub-form/submission-modal/submission-modal.component.html +0 -160
  425. package/src/sub-form/submission-modal/submission-modal.component.scss +0 -54
  426. package/src/sub-form/submission-modal/submission-modal.component.spec.ts +0 -21
  427. package/src/sub-form/submission-modal/submission-modal.component.ts +0 -127
  428. package/tsconfig.lib.json +0 -14
  429. package/tsconfig.lib.prod.json +0 -10
  430. package/tsconfig.spec.json +0 -14
  431. /package/{src/assets → assets}/fonts/Garamond.woff2 +0 -0
  432. /package/{src/assets → assets}/fonts/Georgia.woff2 +0 -0
  433. /package/{src/assets → assets}/fonts/Poppins.woff2 +0 -0
  434. /package/{src/assets → assets}/fonts/Tahoma.woff2 +0 -0
  435. /package/{src/assets → assets}/fonts/Tajawal.woff2 +0 -0
  436. /package/{src/assets → assets}/fonts/Verdana.woff2 +0 -0
  437. /package/{src/assets → assets}/icons/close-sidebar-mark-icon.svg +0 -0
  438. /package/{src/assets → assets}/icons/copy-icon.svg +0 -0
  439. /package/{src/assets → assets}/icons/delete-icon.svg +0 -0
  440. /package/{src/assets → assets}/icons/delete-no-outline-icon.svg +0 -0
  441. /package/{src/assets → assets}/icons/left_arrow.svg +0 -0
  442. /package/{src/assets → assets}/icons/right_arrow.svg +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"piserve-tech-form-submission.mjs","sources":["../../../projects/form-submission/src/lib/form-submission.service.ts","../../../projects/form-submission/src/environment/environment.ts","../../../projects/form-submission/src/services/mapper.service.ts","../../../projects/form-submission/src/services/validation.service.ts","../../../projects/form-submission/src/services/form-validation.service.ts","../../../projects/form-submission/src/services/whenClause.service.ts","../../../projects/form-submission/src/form-fields/section-fields/section-fields.component.ts","../../../projects/form-submission/src/form-fields/section-fields/section-fields.component.html","../../../projects/form-submission/src/services/data.service.ts","../../../projects/form-submission/src/services/form.service.ts","../../../projects/form-submission/src/services/element-tracker.service.ts","../../../projects/form-submission/src/services/score.service.ts","../../../projects/form-submission/src/form-fields/check-box-fields/check-box-fields.component.ts","../../../projects/form-submission/src/form-fields/check-box-fields/check-box-fields.component.html","../../../projects/form-submission/src/form-fields/date-time-fields/date-time-fields.component.ts","../../../projects/form-submission/src/form-fields/date-time-fields/date-time-fields.component.html","../../../projects/form-submission/src/form-fields/drop-down-fields/drop-down-fields.component.ts","../../../projects/form-submission/src/form-fields/drop-down-fields/drop-down-fields.component.html","../../../projects/form-submission/src/form-fields/file-picker-fields/file-picker-fields.component.ts","../../../projects/form-submission/src/form-fields/file-picker-fields/file-picker-fields.component.html","../../../projects/form-submission/src/form-fields/location-fields/location-fields.component.ts","../../../projects/form-submission/src/form-fields/location-fields/location-fields.component.html","../../../projects/form-submission/src/form-fields/mail-fields/mail-fields.component.ts","../../../projects/form-submission/src/form-fields/mail-fields/mail-fields.component.html","../../../projects/form-submission/src/services/countryService.ts","../../../projects/form-submission/src/form-fields/mobile-fields/mobile-fields.component.ts","../../../projects/form-submission/src/form-fields/mobile-fields/mobile-fields.component.html","../../../projects/form-submission/src/services/aggregate.service.ts","../../../projects/form-submission/src/form-fields/number-fields/number-fields.component.ts","../../../projects/form-submission/src/form-fields/number-fields/number-fields.component.html","../../../projects/form-submission/src/form-fields/password-fields/password-fields.component.ts","../../../projects/form-submission/src/form-fields/password-fields/password-fields.component.html","../../../projects/form-submission/src/form-fields/radio-button-fields/radio-button-fields.component.ts","../../../projects/form-submission/src/form-fields/radio-button-fields/radio-button-fields.component.html","../../../projects/form-submission/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.ts","../../../projects/form-submission/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.html","../../../projects/form-submission/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.ts","../../../projects/form-submission/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.html","../../../projects/form-submission/src/form-fields/signature-fields/signature-fields.component.ts","../../../projects/form-submission/src/form-fields/signature-fields/signature-fields.component.html","../../../projects/form-submission/src/form-fields/slider-fields/slider-fields.component.ts","../../../projects/form-submission/src/form-fields/slider-fields/slider-fields.component.html","../../../projects/form-submission/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.ts","../../../projects/form-submission/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.html","../../../projects/form-submission/src/form-fields/text-area-fields/text-area-fields.component.ts","../../../projects/form-submission/src/form-fields/text-area-fields/text-area-fields.component.html","../../../projects/form-submission/src/form-fields/text-fields/text-fields.component.ts","../../../projects/form-submission/src/form-fields/text-fields/text-fields.component.html","../../../projects/form-submission/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.ts","../../../projects/form-submission/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.html","../../../projects/form-submission/src/form-fields/url-fields/url-fields.component.ts","../../../projects/form-submission/src/form-fields/url-fields/url-fields.component.html","../../../projects/form-submission/src/form-fields/aggregate-function/aggregate-function.component.ts","../../../projects/form-submission/src/form-fields/aggregate-function/aggregate-function.component.html","../../../projects/form-submission/src/form-fields/currency-fields/currency-fields.component.ts","../../../projects/form-submission/src/form-fields/currency-fields/currency-fields.component.html","../../../projects/form-submission/src/form-fields/hidden-field/hidden-field.component.ts","../../../projects/form-submission/src/form-fields/iframe-fields/iframe-fields.component.ts","../../../projects/form-submission/src/form-fields/iframe-fields/iframe-fields.component.html","../../../projects/form-submission/src/question/question/question.component.ts","../../../projects/form-submission/src/question/question/question.component.html","../../../projects/form-submission/src/question/confirm-dialog/confirm-dialog.component.ts","../../../projects/form-submission/src/question/confirm-dialog/confirm-dialog.component.html","../../../projects/form-submission/src/services/subform-copy.service.ts","../../../projects/form-submission/src/sub-form/submission-modal/submission-modal.component.ts","../../../projects/form-submission/src/sub-form/submission-modal/submission-modal.component.html","../../../projects/form-submission/src/question/multiple-subform/multiple-subform.component.ts","../../../projects/form-submission/src/question/multiple-subform/multiple-subform.component.html","../../../projects/form-submission/src/question/inline-multiple-subform/inline-multiple-subform.component.ts","../../../projects/form-submission/src/question/inline-multiple-subform/inline-multiple-subform.component.html","../../../projects/form-submission/src/question/card-subform/card-subform.component.ts","../../../projects/form-submission/src/question/card-subform/card-subform.component.html","../../../projects/form-submission/src/question/sub-form/sub-form.component.ts","../../../projects/form-submission/src/question/sub-form/sub-form.component.html","../../../projects/form-submission/src/question/question-group/question-group.component.ts","../../../projects/form-submission/src/question/question-group/question-group.component.html","../../../projects/form-submission/src/question/multifields/multifields.component.ts","../../../projects/form-submission/src/question/multifields/multifields.component.html","../../../projects/form-submission/src/question/recursive-logic/recursive-logic.component.ts","../../../projects/form-submission/src/question/recursive-logic/recursive-logic.component.html","../../../projects/form-submission/src/question/form-elements/form-elements.component.ts","../../../projects/form-submission/src/question/form-elements/form-elements.component.html","../../../projects/form-submission/src/form-submission/navigation-tabs/navigation-tabs.component.ts","../../../projects/form-submission/src/form-submission/navigation-tabs/navigation-tabs.component.html","../../../projects/form-submission/src/form-submission/save-as-draft/saveDraftModalComponent .ts","../../../projects/form-submission/src/form-submission/save-as-draft/saveDraftModalComponent.html","../../../projects/form-submission/src/services/recaptcha.service.ts","../../../projects/form-submission/src/form-submission/header/header.component.ts","../../../projects/form-submission/src/form-submission/header/header.component.html","../../../projects/form-submission/src/form-submission/next-prev-navigation/next-prev-navigation.component.ts","../../../projects/form-submission/src/form-submission/next-prev-navigation/next-prev-navigation.component.html","../../../projects/form-submission/src/form-submission/submission-container/submission-container.component.ts","../../../projects/form-submission/src/form-submission/submission-container/submission-container.component.html","../../../projects/form-submission/src/form-submission/submit-form/submit-form.component.ts","../../../projects/form-submission/src/form-submission/submit-form/submit-form.component.html","../../../projects/form-submission/src/lib/form-submission.component.ts","../../../projects/form-submission/src/lib/form-submission.component.html","../../../projects/form-submission/src/form-fields/form-fields.module.ts","../../../projects/form-submission/src/shared/shared.module.ts","../../../projects/form-submission/src/form-submission/form-submission.module.ts","../../../projects/form-submission/src/lib/form-submission.module.ts","../../../projects/form-submission/src/public-api.ts","../../../projects/form-submission/src/piserve-tech-form-submission.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormSubmissionService {\n\n constructor() { }\n}\n","export let environment = {\n production: false,\n googleRecaptchaSiteKey: '',\n htmlDirection: 'ltr'\n };\n ","import { Appearance } from '../models/appearance.model';\r\nimport { ElementOptionAPI } from '../models/elementOptionAPI.model';\r\nimport { elementOptionAPIData } from '../models/elementOptionAPIData.model';\r\nimport { ElementOptionDB } from '../models/elementOptionDB.model';\r\nimport { ElementOptionDBCriteria } from '../models/elementOptionDBCriteria.model';\r\nimport { FormElement } from '../models/formElement.model';\r\nimport { Grid } from '../models/grid.model';\r\nimport { Page } from '../models/page.model';\r\nimport { PublicForm } from '../models/publicForm.model';\r\nimport { Question } from '../models/question.model';\r\nimport { Row } from '../models/row.model';\r\nimport { Validation } from '../models/validation.model';\r\nimport { Option } from '../models/option.model';\r\nimport { Section } from '../models/section.model';\r\nimport { SubForm } from '../models/subForm.model';\r\nimport { FormElementType } from '../models/formElementType.model';\r\nimport { Logic } from '../models/logic.model';\r\nimport { Attachment } from '../models/attachment.model';\r\nimport { Submission } from '../models/submission.model';\r\nimport { Answer } from '../models/answer.model';\r\nimport { termsAndConditionType } from '../models/terms&condition.model';\r\nimport { FormConfiguration } from '../models/formConfiguration.model';\r\nimport { QuestionGroup } from '../models/questionGroup.model';\r\nimport { SubformProperty } from '../models/subformPropery.model';\r\nimport { Multifields } from '../models/multifields.model';\r\nimport { AggregateFunction } from '../models/aggregate.model';\r\nimport { DefaultAnswersModel } from '../models/defaultAnswersModel.model';\r\nimport { DefaultAnswerEntry } from '../models/defaultAnswerEntry.model';\r\nimport { DefaultQuestionAnswer } from '../models/defaultQuestionAnswer.model';\r\nimport { SubformConfiguration } from '../models/subformConfiguration.model';\r\nimport { EmitterDTO } from '../models/emitters.model';\r\nimport { add } from 'ngx-bootstrap/chronos';\r\nimport { Scoring } from '../models/scoring.model';\r\nimport { HiddenField } from '../models/hiddenField.model';\r\nimport { IFrameProperties } from '../models/iFrameProperties.model';\r\nimport { SubmissionCopyConfig } from '../models/submissionCopyConfig.mopdel';\r\n\r\nexport function mapPublicFormToModel(apiPublicForm: any): PublicForm {\r\n return {\r\n name: apiPublicForm.result.name,\r\n formConfiguration: mapFormConfigurationToModel(\r\n apiPublicForm.result.moduleConfiguration\r\n ),\r\n currency:apiPublicForm?.result?.currency,\r\n defautlCurrency:apiPublicForm?.result?.defaultCurrency,\r\n pages: apiPublicForm.result.pages.map((apiPage: any) =>\r\n mapPageToModel(apiPage,apiPublicForm?.result?.currency,apiPublicForm?.result?.defaultCurrency)\r\n ),\r\n questionAnswers:apiPublicForm.result.questionAnswers,\r\n parentId:apiPublicForm.result.parentId,\r\n emitters: apiPublicForm.result.emittersDTOS\r\n ? apiPublicForm.result.emittersDTOS.map((emitter: any) => mapEmitterToModel(emitter))\r\n : [],\r\n score:apiPublicForm.score,\r\n maximumPossibleScore:apiPublicForm.maximumPossibleScore,\r\n };\r\n}\r\n\r\n\r\nexport function mapEmitterToModel(apiEmitter: any): EmitterDTO {\r\n return {\r\n id: apiEmitter.id,\r\n keyName: apiEmitter.keyName,\r\n valueSource: apiEmitter.valueSource,\r\n questionId: apiEmitter.questionId,\r\n inputValue: apiEmitter.inputValue,\r\n isConflict: apiEmitter.isConflict ?? false\r\n };\r\n}\r\n\r\n\r\nfunction mapFormConfigurationToModel(\r\n apiFormConfiguration: any\r\n): FormConfiguration {\r\n return {\r\n saveAutomatically: apiFormConfiguration?.saveAutomatically,\r\n saveInterval: apiFormConfiguration?.saveInterval,\r\n customizeFont: apiFormConfiguration?.customizeFont,\r\n fontFamily: apiFormConfiguration?.fontFamily,\r\n fontSize: apiFormConfiguration?.fontSize,\r\n enableDataExport: apiFormConfiguration?.enableDataExport,\r\n fileFormats: apiFormConfiguration?.fileFormats,\r\n enableQuestionNumbering: apiFormConfiguration?.enableQuestionNumbering,\r\n questionNumbering: apiFormConfiguration?.questionNumbering,\r\n enableGoogleRecaptcha: apiFormConfiguration?.enableGoogleRecaptcha,\r\n googleRecaptchaKey: apiFormConfiguration?.googleRecaptchaKey,\r\n googleRecaptchaSecret: apiFormConfiguration?.googleRecaptchaSecret,\r\n navigation: apiFormConfiguration?.navigation,\r\n markAllQuestionsAsRequired: apiFormConfiguration?.markAllQuestionsAsRequired,\r\n };\r\n}\r\n\r\n\r\n\r\nexport function mapPageToModel(apiPage: any, currency:any, defaultCurrency:any): Page {\r\n return {\r\n title: apiPage.title,\r\n testElementName: apiPage.testElementName,\r\n rows: apiPage?.rows?.map((apiRow: any) => mapRowToModel(apiRow,currency,defaultCurrency)),\r\n };\r\n}\r\n\r\nfunction mapRowToModel(apiRow: any, currency:any,defaultCurrency:any): Row {\r\n return {\r\n grid: apiRow.grid.map((apiGrid: any) => mapGridToModel(apiGrid,currency,defaultCurrency)),\r\n };\r\n}\r\n\r\nfunction mapGridToModel(apiGrid: any, currency:any,defaultCurrency:any): Grid {\r\n let entity: Section | Question | SubForm | QuestionGroup | Multifields | undefined;\r\n\r\n switch (apiGrid.entityType) {\r\n case 'QUESTION':\r\n entity = mapQuestionToModel(apiGrid.element,currency,defaultCurrency);\r\n break;\r\n case 'SECTION':\r\n entity = mapSectionToModel(apiGrid.element);\r\n break;\r\n case 'SUBFORM':\r\n entity = mapSubFormToModel(apiGrid.element,currency,defaultCurrency);\r\n break;\r\n case 'QUESTION_GROUP':\r\n entity = mapQuestionGroupToModel(apiGrid.element,currency,defaultCurrency);\r\n break;\r\n case 'MULTIFIELD':\r\n entity = mapMultifieldsToModel(apiGrid.element,currency,defaultCurrency);\r\n break;\r\n default:\r\n throw new Error(`Unknown entity type: ${apiGrid.entityType}`);\r\n }\r\n\r\n const whenClause = mapWhenClauseModel(apiGrid.whenClauseDTO);\r\n // read actions safely\r\n const actions: string[] = Array.isArray(whenClause?.whenClauseActions)\r\n ? whenClause.whenClauseActions\r\n : [];\r\n\r\n // pick last action if multiple (your UI prevents that but safe handling)\r\n const action = actions.length > 0 ? actions[actions.length - 1] : undefined;\r\n\r\n let shouldShow = true; // default visible\r\n\r\n if (action === 'SHOW') {\r\n shouldShow = false; // default hidden when action = SHOW\r\n }\r\n if (action === 'HIDE') {\r\n shouldShow = true; // default shown when action = HIDE\r\n }\r\n\r\n return {\r\n entityType: apiGrid.entityType,\r\n element: entity,\r\n whenClause: whenClause,\r\n show: shouldShow\r\n };\r\n}\r\n\r\nexport function mapWhenClauseModel(whenClauseDTO: any) {\r\n // 🧩 Guard: Handle undefined/null or malformed data\r\n if (!whenClauseDTO || !Array.isArray(whenClauseDTO.whenClauseCondition)) {\r\n\r\n return {\r\n activate: false,\r\n whenClauseCondition: [],\r\n whenClauseActions: []\r\n };\r\n }\r\n\r\n return {\r\n activate: !!whenClauseDTO.activate,\r\n whenClauseActions: whenClauseDTO.whenClauseActions || [],\r\n whenClauseCondition: whenClauseDTO.whenClauseCondition.map((condition: any) => ({\r\n logic: condition.logic || '',\r\n questionid: condition.questionid || '',\r\n condition: condition.condition || '',\r\n value: condition.value ?? '' // handle null/undefined gracefully\r\n }))\r\n };\r\n}\r\n\r\nexport function mapSectionToModel(apiSection: any): Section {\r\n return {\r\n id: apiSection.id,\r\n title: apiSection.title,\r\n description: apiSection.description,\r\n testElementName: apiSection.testElementName\r\n };\r\n}\r\n\r\nexport function mapQuestionToModel(apiQuestion: any, currency:any, defaultCurrency:any): Question {\r\n return {\r\n count: apiQuestion.count,\r\n id: apiQuestion.id,\r\n questionNumber: apiQuestion.questionNumber,\r\n required: apiQuestion.required,\r\n hint: apiQuestion.hint,\r\n question: apiQuestion.question,\r\n testElementName: apiQuestion.testElementName,\r\n answer: apiQuestion?.answer,\r\n validation: true,\r\n formElement: mapFormElementToModel(apiQuestion.formElement,currency,defaultCurrency),\r\n childLogics: apiQuestion?.childLogics?.map((logic: any) =>\r\n mapLogicToModel(logic, currency,defaultCurrency)\r\n ),\r\n answerId: apiQuestion?.answerId,\r\n attachments: apiQuestion?.attachments?.map((attachment: any) => mapAttachmentToModel(attachment)) || [],\r\n deleteFiles: [],\r\n defaultValue:apiQuestion?.defaultValue,\r\n disableEdit:apiQuestion?.disableEdit,\r\n score:apiQuestion.score,\r\n maximumPossibleScore:apiQuestion.maximumPossibleScore,\r\n amountInWords: apiQuestion?.amountInWords,\r\n answerCurrency:apiQuestion?.currencySymbol\r\n };\r\n}\r\n\r\nfunction mapAttachmentToModel(apiAttachment: any): Attachment {\r\n return {\r\n fileId: apiAttachment.fileId,\r\n fileName: apiAttachment.fileName,\r\n fileUrl: apiAttachment.fileUrl,\r\n fileSize:apiAttachment?.fileSize\r\n };\r\n}\r\n\r\nfunction mapFormElementToModel(apiFormElement: any, currency:any, defaultCurrency:any): FormElement {\r\n return {\r\n elementType: apiFormElement.elementType,\r\n appearance: mapAppearanceToModel(apiFormElement.appearance,currency,defaultCurrency),\r\n validation: mapValidationToModel(apiFormElement.validation),\r\n option: mapOptionToModel(apiFormElement?.option),\r\n aggregateFunction: mapAggregateFunction(apiFormElement?.aggregateFunction),\r\n selectionMatrixLabel: apiFormElement.selectionMatrixLabel,\r\n selectionMatrixColumn: apiFormElement.selectionMatrixColumn,\r\n termsAndConditionType: maptermsAndCondition(apiFormElement),\r\n scoring: mapScoringToModel(apiFormElement.scoring),\r\n hiddenField: mapHiddenFieldToModel(apiFormElement?.hiddenField),\r\n iFrameProperties: mapIframeProperties(apiFormElement?.iFrameProperties)\r\n };\r\n}\r\n\r\nfunction mapIframeProperties(iFrameProperties: any): IFrameProperties {\r\n return {\r\n contentType: iFrameProperties?.contentType,\r\n url: iFrameProperties?.url,\r\n html: iFrameProperties?.html,\r\n style: iFrameProperties?.style,\r\n script: iFrameProperties?.script\r\n }\r\n}\r\n\r\nfunction mapHiddenFieldToModel(hiddenField: any): HiddenField {\r\n return {\r\n value: hiddenField?.value,\r\n valueSource: hiddenField?.valueSource,\r\n key: hiddenField?.key\r\n }\r\n}\r\n\r\nfunction mapAggregateFunction(aggregateFunction: any): AggregateFunction | undefined {\r\n if (!aggregateFunction) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n aggregateOperation: aggregateFunction.aggregateOperation,\r\n formula: aggregateFunction.formula\r\n };\r\n}\r\n\r\nfunction maptermsAndCondition(Element: any): termsAndConditionType {\r\n if(Element.termsAndCondition != undefined){\r\n let data = Element.termsAndCondition\r\n return {\r\n termsAndConditionType: data.termsAndConditionType,\r\n fileUrl: data.fileUrl,\r\n fileName: data.fileName,\r\n };\r\n }\r\n else{\r\n return {\r\n termsAndConditionType: '',\r\n fileUrl: '',\r\n fileName: '',\r\n }\r\n }\r\n\r\n}\r\n\r\nfunction mapLogicToModel(apiLogic: any, currency:any,defaultCurrency:any): Logic {\r\n return {\r\n id: apiLogic.id,\r\n inputValue: apiLogic.inputValue,\r\n condition: apiLogic.condition,\r\n showLogic: false,\r\n rows: apiLogic?.rows?.map((element: any) =>\r\n mapRowToModel(element,currency,defaultCurrency)\r\n ),\r\n };\r\n}\r\n\r\nexport function mapSubFormToModel(apiSubForm: any, currency:any,defaultCurrency:any): SubForm {\r\n return {\r\n id: apiSubForm.id,\r\n count: apiSubForm.count,\r\n title: apiSubForm.title,\r\n description: apiSubForm.description,\r\n testElementName: apiSubForm.testElementName,\r\n rows: apiSubForm.rows.map((element: any) => mapRowToModel(element,currency,defaultCurrency)),\r\n submissions: apiSubForm?.submissions?.map((submission: any) => mapSubmissionToModel(submission)),\r\n property: apiSubForm.property ? mapPropertyToModel(apiSubForm.property) : undefined,\r\n defaultAnswers: apiSubForm.defaultAnswers ? mapDefaultAnswersToModel(apiSubForm.defaultAnswers) : undefined,\r\n deleted: false,\r\n scores:apiSubForm.scores,\r\n maximumPossibleScore:apiSubForm.maximumPossibleScore,\r\n submissionCopyConfig: mapSubmissionCopyConfig(apiSubForm.submissionCopyConfig),\r\n required: apiSubForm.required\r\n };\r\n}\r\n\r\nexport function mapSubmissionCopyConfig(copyConfig:any): SubmissionCopyConfig | undefined {\r\n if(!copyConfig) return undefined;\r\n return {\r\n allowCopyFromOtherSubmissions: copyConfig.allowCopyFromOtherSubmissions,\r\n editableQuestions: copyConfig.editableQuestions,\r\n };\r\n}\r\n\r\nexport function mapDefaultAnswersToModel(apiDefaultAnswers: any): DefaultAnswersModel {\r\n return {\r\n answers: apiDefaultAnswers.answers.map((entry: any) => mapDefaultAnswerEntry(entry))\r\n };\r\n}\r\n\r\nexport function mapDefaultAnswerEntry(apiEntry: any): DefaultAnswerEntry {\r\n return {\r\n isDeleteEnable: apiEntry.isDeleteEnable,\r\n defaultQuestionsAnswers: apiEntry.defaultQuestionsAnswers.map((question: any) => mapDefaultQuestionAnswer(question))\r\n };\r\n}\r\n\r\nexport function mapDefaultQuestionAnswer(apiQuestion: any): DefaultQuestionAnswer {\r\n return {\r\n defaultAnswer: apiQuestion.defaultAnswer,\r\n readOnly: apiQuestion.readOnly,\r\n isDeleteEnable: apiQuestion.isDeleteEnable,\r\n questionId: apiQuestion.questionId\r\n };\r\n}\r\n\r\nfunction mapPropertyToModel(apiProperty: any): SubformProperty {\r\n return {\r\n subFormStructure: apiProperty.subFormStructure,\r\n subFormType: apiProperty.subFormType,\r\n allowDelete: apiProperty.allowDelete,\r\n allowCopy: apiProperty.allowCopy,\r\n addButtonLabel: apiProperty.addButtonLabel\r\n };\r\n}\r\n\r\nexport function mapQuestionGroupToModel(apiQuestionGroup: any,currency:any,defaultCurrency:any): QuestionGroup {\r\n return {\r\n id: apiQuestionGroup.id,\r\n count: apiQuestionGroup.count,\r\n title: apiQuestionGroup.title,\r\n description: apiQuestionGroup.description,\r\n testElementName: apiQuestionGroup.testElementName,\r\n rows: apiQuestionGroup.rows.map((element: any) => mapRowToModel(element,currency,defaultCurrency)),\r\n submissions: apiQuestionGroup?.submissions?.map((submission: any) => mapSubmissionToModel(submission)),\r\n };\r\n}\r\n\r\nexport function mapMultifieldsToModel(apiQuestionGroup: any,currency:any,defaultCurrency:any): Multifields {\r\n return {\r\n id: apiQuestionGroup.id,\r\n question: apiQuestionGroup.question,\r\n questionNumber: apiQuestionGroup.questionNumber,\r\n count: apiQuestionGroup.count,\r\n testElementName: apiQuestionGroup.testElementName,\r\n rows: apiQuestionGroup.rows.map((element: any) => mapRowToModel(element,currency,defaultCurrency)),\r\n submissions: apiQuestionGroup?.submissions?.map((submission: any) => mapSubmissionToModel(submission)),\r\n };\r\n}\r\n\r\nfunction mapSubmissionToModel(apiSubmission: any): Submission {\r\n return {\r\n submissionId: apiSubmission?.submissionId,\r\n answers: apiSubmission?.answers?.map((answer: any) => mapAnswerToModel(answer)),\r\n configuration: mapSubformConfiguration(apiSubmission?.configuration),\r\n scores:apiSubmission.scores,\r\n sourceSubmissionId:apiSubmission.sourceSubmissionId,\r\n isCopied:apiSubmission.isCopied\r\n };\r\n}\r\n\r\nfunction mapAnswerToModel(apiAnswer: any): Answer {\r\n return {\r\n questionId: apiAnswer.questionId,\r\n answer: apiAnswer?.answer,\r\n answerId: apiAnswer?.answerId,\r\n attachments: apiAnswer?.attachments?.map((attachment: any) => mapAttachmentToModel(attachment)),\r\n scores:apiAnswer.scores,\r\n maximumPossibleScore:apiAnswer.maximumPossibleScore,\r\n show:apiAnswer?.show,\r\n amountInWords: apiAnswer?.amountInWords,\r\n answerCurrency:apiAnswer?.currencySymbol\r\n };\r\n}\r\n\r\nfunction mapSubformConfiguration(config: any): SubformConfiguration | undefined {\r\n if (!config) return undefined;\r\n return {\r\n allowDelete: !!config.allowDelete,\r\n isDefault: !!config.isDefault,\r\n };\r\n}\r\n\r\nexport function mapFormElementTypeToModel(\r\n apiFormElementType: any\r\n): FormElementType<any> {\r\n return {\r\n entityType: apiFormElementType?.entityType,\r\n element: apiFormElementType?.element,\r\n };\r\n}\r\n\r\nfunction mapAppearanceToModel(apiAppearance: any, currency:any, defaultCurrency:any): Appearance {\r\n return {\r\n placeholder: apiAppearance?.placeholder,\r\n fontSize: apiAppearance?.fontSize,\r\n textAlign: apiAppearance?.textAlign,\r\n font: apiAppearance?.font,\r\n underline: apiAppearance?.underline,\r\n bold: apiAppearance?.bold,\r\n italics: apiAppearance?.italics,\r\n defaultValue: apiAppearance?.defaultValue,\r\n numberOfRows: apiAppearance?.numberOfRows,\r\n singleSelection: apiAppearance?.singleSelection,\r\n displayCountryCode: apiAppearance?.displayCountryCode,\r\n displayFlag: apiAppearance?.displayFlag,\r\n displayCode: apiAppearance?.displayCode,\r\n showCountryName: apiAppearance?.showCountryName,\r\n beautifyNumbers: apiAppearance?.beautifyNumbers,\r\n upAndDownButton: apiAppearance?.upAndDownButton,\r\n allowNegativeValues: apiAppearance?.allowNegativeValues,\r\n showPreviewButton: apiAppearance?.showPreviewButton,\r\n confirmPassword: apiAppearance?.confirmPassword,\r\n viewButton: apiAppearance?.viewButton,\r\n displayStrong: apiAppearance?.displayStrong,\r\n dateType: apiAppearance?.dateType,\r\n format: apiAppearance?.format,\r\n setCurrentPosition: apiAppearance?.setCurrentPosition,\r\n defaultZoomLevel: apiAppearance?.defaultZoomLevel,\r\n allowFullScreen: apiAppearance?.allowFullScreen,\r\n latitude: apiAppearance?.latitude,\r\n longitude: apiAppearance?.longitude,\r\n showAcceptButton: apiAppearance?.showAcceptButton,\r\n labelOnValue: apiAppearance?.labelOnValue,\r\n labelOffValue: apiAppearance?.labelOffValue,\r\n labelOnColor: apiAppearance?.labelOnColor,\r\n labelOffColor: apiAppearance?.labelOffColor,\r\n minValue: apiAppearance?.minValue,\r\n maxValue: apiAppearance?.maxValue,\r\n stepValue: apiAppearance?.stepValue,\r\n changeSliderColor: apiAppearance?.changeSliderColor,\r\n sliderColor: apiAppearance?.sliderColor,\r\n canvasOption: apiAppearance?.canvasOption,\r\n selectionType: apiAppearance?.selectionType,\r\n dragAndDrop: apiAppearance?.dragAndDrop,\r\n previewUploadedFiles: apiAppearance?.previewUploadedFiles,\r\n multiFileUploads: apiAppearance?.multiFileUploads,\r\n selectionColorRequired: apiAppearance?.selectionColorRequired,\r\n selectionColor: apiAppearance?.selectionColor,\r\n color: apiAppearance?.color,\r\n avatarPicker:apiAppearance?.avatarPicker,\r\n timeFormat:apiAppearance?.timeFormat,\r\n displayOptionsInColumn:apiAppearance?.displayOptionsInColumn,\r\n currencySymbol:apiAppearance?.currencySymbol,\r\n decimalPrecision:apiAppearance?.decimalPrecision,\r\n symbolPosition:apiAppearance?.symbolPosition,\r\n thousandSeparator:apiAppearance?.thousandSeparator,\r\n currency:currency,\r\n limitCurrencies:apiAppearance?.limitCurrencies,\r\n currencyOption:apiAppearance?.currencyOption,\r\n specificCurrencySymbol:apiAppearance?.specificCurrencySymbol,\r\n limitCurrencySymbol:apiAppearance?.limitCurrencySymbol,\r\n width: apiAppearance?.width,\r\n height: apiAppearance?.height,\r\n showAmountInWords: apiAppearance?.showAmountInWords,\r\n defaultCurrency:defaultCurrency\r\n };\r\n}\r\n\r\nfunction mapValidationToModel(apiValidation: any): Validation {\r\n return {\r\n regexValidation: apiValidation?.regexValidation,\r\n regex: apiValidation?.regex,\r\n validationMessage: apiValidation?.validationMessage,\r\n limitedCharacters: apiValidation?.limitedCharacters,\r\n count: apiValidation?.count,\r\n minimumSelection: apiValidation?.minimumSelection,\r\n maximumSelection: apiValidation?.maximumSelection,\r\n countryWiseValidation: apiValidation?.countryWiseValidation,\r\n restrictCountry: apiValidation?.restrictCountry,\r\n allowedCountries: apiValidation?.allowedCountries,\r\n blockedCountries: apiValidation?.blockedCountries,\r\n regularExpression: apiValidation?.regularExpression,\r\n expectedDomains: apiValidation?.expectedDomains,\r\n min: apiValidation?.min,\r\n max: apiValidation?.max,\r\n minLength: apiValidation?.minLength,\r\n maxLength: apiValidation?.maxLength,\r\n requireLowercaseLetters: apiValidation?.requireLowercaseLetters,\r\n requireUppercaseLetters: apiValidation?.requireUppercaseLetters,\r\n requireNumbers: apiValidation?.requireNumbers,\r\n requireSpecialCharacters: apiValidation?.requireSpecialCharacters,\r\n allowedSpecialCharacters: apiValidation?.allowedSpecialCharacters,\r\n minDateOption: apiValidation?.minDateOption,\r\n minDate: apiValidation?.minDate,\r\n maxDateOption: apiValidation?.maxDateOption,\r\n maxDate: apiValidation?.maxDate,\r\n regionBoundary: apiValidation?.regionBoundary,\r\n region: apiValidation?.region,\r\n preventFromProceedingWithoutAgree:\r\n apiValidation?.preventFromProceedingWithoutAgree,\r\n buttonColour: apiValidation?.buttonColour,\r\n maxFileSize: apiValidation?.maxFileSize,\r\n minFileSize: apiValidation?.minFileSize,\r\n minSelection: apiValidation?.minSelection,\r\n maxSelection: apiValidation?.maxSelection,\r\n fileTypes: apiValidation?.fileTypes,\r\n fileSize: apiValidation?.fileSize,\r\n fileSizeUnit: apiValidation?.fileSizeUnit,\r\n totalFileSize: apiValidation?.totalFileSize,\r\n minSelectionRequired: apiValidation?.minSelectionRequired,\r\n minSelectionValue: apiValidation?.minSelectionValue,\r\n validationType: apiValidation?.validationType,\r\n validation: apiValidation?.validation,\r\n minTime: apiValidation?.minTime,\r\n maxTime:apiValidation?.maxTime,\r\n minTimeOption:apiValidation?.minTimeOption,\r\n maxTimeOption: apiValidation?.maxTimeOption,\r\n };\r\n}\r\n\r\nfunction mapElementOptionDBToModel(apiElementOptionDB: any): ElementOptionDB {\r\n return {\r\n tableName: apiElementOptionDB.tableName,\r\n valueField: apiElementOptionDB.valueField,\r\n labelField: apiElementOptionDB.labelField,\r\n labelPattern: apiElementOptionDB.labelPattern,\r\n criteria: apiElementOptionDB?.criteria.map((apiCriteria: any) =>\r\n mapElementOptionDBCriteriaToModel(apiCriteria)\r\n ),\r\n };\r\n}\r\n\r\nfunction mapElementOptionDBCriteriaToModel(\r\n apiElementOptionDBCriteria: any\r\n): ElementOptionDBCriteria {\r\n return {\r\n field: apiElementOptionDBCriteria?.field,\r\n condition: apiElementOptionDBCriteria?.condition,\r\n valueSource: apiElementOptionDBCriteria?.valueSource,\r\n inputValue: apiElementOptionDBCriteria?.inputValue,\r\n logicalOperator: apiElementOptionDBCriteria?.logicalOperator,\r\n };\r\n}\r\n\r\nfunction mapElementOptionAPIToModel(\r\n apiElementOptionAPI: any\r\n): ElementOptionAPI {\r\n return {\r\n external: apiElementOptionAPI?.external,\r\n url: apiElementOptionAPI?.url,\r\n valueField: apiElementOptionAPI?.valueField,\r\n labelField: apiElementOptionAPI?.labelField,\r\n pathToValue: apiElementOptionAPI?.pathToValue,\r\n headers: apiElementOptionAPI?.headers?.map(mapElementOptionAPIDataToModel),\r\n params: apiElementOptionAPI?.params?.map(mapElementOptionAPIDataToModel),\r\n pathVariables: apiElementOptionAPI?.pathVariables?.map(\r\n mapElementOptionAPIDataToModel\r\n ),\r\n labelPattern:apiElementOptionAPI?.labelPattern\r\n };\r\n}\r\n\r\nfunction mapElementOptionAPIDataToModel(\r\n apiElementOptionAPIData: any\r\n): elementOptionAPIData {\r\n return {\r\n keyName: apiElementOptionAPIData?.keyName,\r\n valueSource: apiElementOptionAPIData?.valueSource,\r\n inputValue: apiElementOptionAPIData?.inputValue,\r\n };\r\n}\r\n\r\nfunction mapOptionToModel(apiOption: any): Option {\r\n return {\r\n optionType: apiOption?.optionType,\r\n lookupTable: apiOption?.lookupTable,\r\n customOptions: apiOption?.customOptions?.map((option: { value: any }) => ({\r\n value: option.value,\r\n })),\r\n database: apiOption?.database\r\n ? mapElementOptionDBToModel(apiOption?.database)\r\n : undefined,\r\n api: apiOption?.api ? mapElementOptionAPIToModel(apiOption.api) : undefined,\r\n };\r\n}\r\n\r\nfunction mapScoringToModel(apiScoring: any): Scoring | undefined {\r\n if (!apiScoring) return undefined;\r\n\r\n return {\r\n enableScoring: apiScoring.enableScoring,\r\n defaultScore: apiScoring.defaultScore,\r\n enableScoringType: apiScoring.enableScoringType,\r\n score: apiScoring.score?.map((s: any) => ({\r\n label: s.label || [],\r\n score: s.score,\r\n scoreType: s.scoreType\r\n }))\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ValidationService {\n private invalidQuestions: {[key: string]: {message: string, pageIndex: number}} = {};\n\n setInvalid(questionId: string, message: string, pageIndex: number) {\n this.invalidQuestions[questionId] = {message, pageIndex};\n }\n\n clearInvalid(questionId: string) {\n delete this.invalidQuestions[questionId];\n }\n\n getFirstInvalid(): {id: string, pageIndex: number} | null {\n const keys = Object.keys(this.invalidQuestions);\n return keys.length > 0 ? {\n id: keys[0],\n pageIndex: this.invalidQuestions[keys[0]].pageIndex\n } : null;\n }\n\n getErrorMessage(questionId: string): string | null {\n return this.invalidQuestions[questionId]?.message || null;\n }\n\n clearAll() {\n this.invalidQuestions = {};\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { ValidationService } from './validation.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FormValidationService {\r\n constructor(private validationService: ValidationService) {}\r\n\r\n /**\r\n * Validate all required questions on a page.\r\n * Assumes your `page` object has a `pageIndex: number` property.\r\n */\r\n validateRequiredQuestions(page: any): { isValid: boolean; message: string } {\r\n // clear any previous errors for this page\r\n // this.validationService.clearAll();\r\n\r\n const validateQuestions = (\r\n formElements: any[],\r\n submissionContext: any = null\r\n ): { isValid: boolean; message: string } => {\r\n for (let element of formElements) {\r\n if (element.entityType === 'QUESTION') {\r\n const question = element.element;\r\n const required = question.required;\r\n const questionId = question.id;\r\n const elementType = question.formElement?.elementType;\r\n\r\n // pick up the answer (either in a subform or normal)\r\n let answer: any;\r\n if (submissionContext?.isInMultipleSubform) {\r\n const { submission } = submissionContext;\r\n answer = submission.answers.find(\r\n (a: any) => a.questionId === questionId\r\n )?.answer;\r\n } else {\r\n answer = question.answer;\r\n }\r\n\r\n const isEmpty =\r\n answer === null ||\r\n answer === undefined ||\r\n (typeof answer === 'string' && answer.trim() === '') ||\r\n (typeof answer === 'object' && Object.keys(answer).length === 0);\r\n\r\n if (required && isEmpty) {\r\n const message = submissionContext?.isInMultipleSubform\r\n ? `Required question ${question.questionNumber} is not answered in a subform.`\r\n : `Required question ${question.questionNumber} is not answered.`;\r\n\r\n // register the invalid question\r\n this.validationService.setInvalid(\r\n questionId,\r\n message,\r\n page.pageIndex ?? 0\r\n );\r\n\r\n return { isValid: false, message };\r\n }\r\n\r\n // recurse into child logics\r\n if (question.childLogics) {\r\n for (let logic of question.childLogics) {\r\n if (!logic.showLogic) continue;\r\n for (let row of logic.rows) {\r\n const result = validateQuestions(row.grid, submissionContext);\r\n if (!result.isValid) return result;\r\n }\r\n }\r\n }\r\n } else if (element.entityType === 'SUBFORM') {\r\n const subform = element.element;\r\n\r\n if (subform.property?.subFormStructure === 'multiple') {\r\n const submissions = subform.submissions || [];\r\n\r\n if (submissions.length > 0) {\r\n const hasRequired = subform.rows.some((r: any) =>\r\n r.grid.some(\r\n (f: any) => f.entityType === 'QUESTION' && f.element.required\r\n )\r\n );\r\n\r\n if (hasRequired && submissions.length === 0) {\r\n const message = `Subform \"${\r\n subform.title || 'Untitled'\r\n }\" is missing required submissions.`;\r\n this.validationService.setInvalid(\r\n subform.id,\r\n message,\r\n page.pageIndex ?? 0\r\n );\r\n return { isValid: false, message };\r\n }\r\n\r\n // map questions and validate only if more than one submission\r\n const questionMap = new Map<string, any>();\r\n subform.rows.forEach((r: any) =>\r\n r.grid.forEach((f: any) => {\r\n if (f.entityType === 'QUESTION') {\r\n questionMap.set(f.element.id, f.element);\r\n }\r\n })\r\n );\r\n\r\n for (let submission of submissions) {\r\n for (let row of subform.rows) {\r\n const result = validateQuestions(row.grid, {\r\n isInMultipleSubform: true,\r\n submission,\r\n questionMap,\r\n });\r\n if (!result.isValid) return result;\r\n }\r\n }\r\n }\r\n } else {\r\n // single‐entry subform\r\n for (let row of subform.rows || []) {\r\n const result = validateQuestions(row.grid);\r\n if (!result.isValid) return result;\r\n }\r\n }\r\n } else if (\r\n (element.entityType === 'QUESTION_GROUP' ||\r\n element.entityType === 'MULTIFIELD') &&\r\n element.element.rows\r\n ) {\r\n for (let row of element.element.rows) {\r\n const result = validateQuestions(row.grid, submissionContext);\r\n if (!result.isValid) return result;\r\n }\r\n }\r\n }\r\n\r\n return { isValid: true, message: 'All required questions are answered.' };\r\n };\r\n\r\n // start validation\r\n for (const row of page.rows) {\r\n const result = validateQuestions(row.grid);\r\n if (!result.isValid) {\r\n // we already called setInvalid above\r\n return result;\r\n }\r\n }\r\n\r\n // if we get here, everything passed\r\n return { isValid: true, message: 'All required questions are answered.' };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Submission } from '../models/submission.model';\r\nimport { Subject } from 'rxjs/internal/Subject';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class WhenClauseService {\r\n private activeWhenClauseGrids: any[] = [];\r\n private questionAnswerMap: { [questionId: string]: any } = {};\r\nprivate questionChange$ = new Subject<{ questionId: string }>();\r\n\r\n\r\n\r\n isInitialLoad: boolean = true;\r\n constructor() {}\r\n\r\n markLoadCompleted() {\r\n this.isInitialLoad = false;\r\n }\r\n\r\n onQuestionChange() {\r\n return this.questionChange$.asObservable();\r\n}\r\n\r\n\r\n /**\r\n * Check if a grid has an active when clause\r\n */\r\n isActiveWhenClause(grid: any): boolean {\r\n const when = grid?.whenClause;\r\n return !!(\r\n when &&\r\n when.activate &&\r\n Array.isArray(when.whenClauseCondition) &&\r\n when.whenClauseCondition.length > 0\r\n );\r\n }\r\n\r\n /**\r\n * Add a grid to tracking list if it has an active when clause\r\n */\r\n addGrid(grid: any): void {\r\n if (!grid) return;\r\n\r\n if (this.isActiveWhenClause(grid)) {\r\n const exists = this.activeWhenClauseGrids.some(\r\n (g) => g.element?.id === grid.element?.id\r\n );\r\n\r\n if (!exists) {\r\n this.activeWhenClauseGrids.push(grid);\r\n }\r\n }\r\n }\r\n\r\n setQuestionAnswer(questionId: string, answer: any,initial:boolean = false): void {\r\n if (!questionId) return;\r\n this.questionAnswerMap[questionId] = answer;\r\n this.evaluateAllWhenClauses(initial);\r\n this.questionChange$.next({ questionId });\r\n }\r\n\r\n getAnswer(questionId: string): any {\r\n return this.questionAnswerMap[questionId];\r\n }\r\n\r\n private evaluateAllWhenClauses(initial:boolean): void {\r\n const visibleGrids: any[] = [];\r\n\r\n for (const grid of this.activeWhenClauseGrids) {\r\n const when = grid.whenClause;\r\n const conditions = when.whenClauseCondition;\r\n\r\n if (!conditions || !conditions.length) continue;\r\n\r\n let overallResult = true;\r\n\r\n for (let i = 0; i < conditions.length; i++) {\r\n const clause = conditions[i];\r\n const logic = (clause.logic || (i === 0 ? 'AND' : 'AND')).toUpperCase(); // Default to AND for first\r\n const answer = this.getAnswer(clause.questionid);\r\n const result = this.evaluateCondition(\r\n answer,\r\n clause.condition,\r\n clause.value\r\n );\r\n\r\n // Combine results based on logic (AND / OR)\r\n if (i === 0) {\r\n overallResult = result; // initialize with first condition\r\n } else {\r\n if (logic === 'AND') {\r\n overallResult = overallResult && result;\r\n } else if (logic === 'OR') {\r\n overallResult = overallResult || result;\r\n }\r\n }\r\n }\r\n // safe read actions (could be undefined)\r\n const actions: string[] = Array.isArray(when?.whenClauseActions)\r\n ? when.whenClauseActions.map(String)\r\n : [];\r\n\r\n // choose the decisive action (use last if multiple)\r\n const action = actions.length > 0 ? actions[actions.length - 1] : undefined;\r\n\r\n if (overallResult) {\r\n // Condition(s) satisfied -> perform the action\r\n switch (action) {\r\n case 'SHOW':\r\n grid.show = true;\r\n break;\r\n case 'HIDE':\r\n grid.show = false;\r\n break;\r\n case 'MARK_AS_REQUIRED':\r\n if (grid.element) grid.element.required = true;\r\n break;\r\n case 'MARK_AS_OPTIONAL':\r\n if (grid.element) grid.element.required = false;\r\n break;\r\n default:\r\n // no show/hide action — keep current behavior (you can choose default here)\r\n // For safety, if no explicit action, we'll leave grid.show unchanged.\r\n break;\r\n }\r\n\r\n // if visible, collect\r\n if (grid.show) visibleGrids.push(grid);\r\n } else {\r\n // Condition(s) not satisfied -> revert the action's effect\r\n switch (action) {\r\n case 'SHOW':\r\n // condition no longer true => hide (revert)\r\n grid.show = false;\r\n break;\r\n case 'HIDE':\r\n // condition no longer true => show (revert)\r\n grid.show = true;\r\n break;\r\n case 'MARK_AS_REQUIRED':\r\n if (grid.element) grid.element.required = false;\r\n break;\r\n case 'MARK_AS_OPTIONAL':\r\n if (grid.element) grid.element.required = true;\r\n break;\r\n default:\r\n // nothing to revert\r\n break;\r\n }\r\n // if we hid it because overallResult false and it's not initial, clear answer\r\n if (!overallResult && !initial && !grid.show) {\r\n grid.element.answer = null;\r\n }\r\n }\r\n if (overallResult) visibleGrids.push(grid);\r\n }\r\n }\r\n\r\n evaluateCondition(answer: any, operator: string, value: any): boolean {\r\n\r\n // treat null/undefined/empty-string/empty-array as \"no answer\"\r\n if (answer === null || answer === undefined) return false;\r\n // if (typeof answer === 'string' && answer === '') return false;\r\n if (Array.isArray(answer) && answer.length === 0) return false;\r\n\r\n // helpers to normalize values to arrays of lower-case strings (for string ops)\r\n const toStr = (v: any) =>\r\n v === null || v === undefined ? '' : String(v).toLowerCase();\r\n\r\n const ensureArray = (v: any): string[] => {\r\n if (Array.isArray(v)) return v.map((x) => toStr(x));\r\n // if comma-separated string => split, else single element array\r\n if (typeof v === 'string' && v.indexOf(',') !== -1) {\r\n return v\r\n .split(',')\r\n .map((x) => x.trim())\r\n .map((x) => toStr(x));\r\n }\r\n return [toStr(v)];\r\n };\r\n\r\n const ansArr = ensureArray(answer);\r\n const valArr = ensureArray(value);\r\n\r\n // numeric comparisons: only when both sides are scalars (non-array) and numeric\r\n const isNumericScalar = (x: any) =>\r\n !Array.isArray(x) && x !== null && x !== undefined && !Number.isNaN(Number(x));\r\n\r\n switch (operator) {\r\n case '<':\r\n if (isNumericScalar(answer) && isNumericScalar(value))\r\n return Number(answer) < Number(value);\r\n return false;\r\n case '>':\r\n if (isNumericScalar(answer) && isNumericScalar(value))\r\n return Number(answer) > Number(value);\r\n return false;\r\n case '<=':\r\n if (isNumericScalar(answer) && isNumericScalar(value))\r\n return Number(answer) <= Number(value);\r\n return false;\r\n case '>=':\r\n if (isNumericScalar(answer) && isNumericScalar(value))\r\n return Number(answer) >= Number(value);\r\n return false;\r\n\r\n // equality: true if any answer element equals any value element\r\n case '=':\r\n return ansArr.some((a) => valArr.some((v) => a === v));\r\n\r\n case '!=':\r\n return !ansArr.some((a) => valArr.some((v) => a === v));\r\n\r\n // LIKE / NOT LIKE: check substring match anywhere in any answer element\r\n case 'LIKE':\r\n return ansArr.some((a) => valArr.some((v) => a.includes(v)));\r\n case 'NOT LIKE':\r\n return !ansArr.some((a) => valArr.some((v) => a.includes(v)));\r\n\r\n case 'BEGIN WITH':\r\n return ansArr.some((a) => valArr.some((v) => a.startsWith(v)));\r\n case 'END WITH':\r\n return ansArr.some((a) => valArr.some((v) => a.endsWith(v)));\r\n\r\n // IN / NOT IN: true if any answer element exists in value list\r\n case 'IN':\r\n return ansArr.some((a) => valArr.includes(a));\r\n case 'NOT IN':\r\n return !ansArr.some((a) => valArr.includes(a));\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n addGridsFromSubform(subform: any): void {\r\n if (!subform || !Array.isArray(subform.rows)) return;\r\n\r\n for (const row of subform.rows) {\r\n if (!row.grid || !Array.isArray(row.grid)) continue;\r\n\r\n for (const grid of row.grid) {\r\n // 1️⃣ Add this grid itself if it has an active whenClause\r\n this.addGrid(grid);\r\n\r\n // 2️⃣ Then, recursively process nested childLogics inside its element\r\n if (grid.element?.childLogics?.length) {\r\n this.processChildLogics(grid.element.childLogics);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Recursively process childLogics structure\r\n */\r\n private processChildLogics(childLogics: any[]): void {\r\n if (!Array.isArray(childLogics)) return;\r\n\r\n for (const logic of childLogics) {\r\n // 1️⃣ Each logic may have its own rows (similar to subform rows)\r\n if (Array.isArray(logic.rows)) {\r\n for (const row of logic.rows) {\r\n if (Array.isArray(row.grid)) {\r\n for (const grid of row.grid) {\r\n // Check whenClause for this nested grid\r\n this.addGrid(grid);\r\n\r\n // 2️⃣ Recurse again if this nested question also has its own childLogics\r\n if (grid.element?.childLogics?.length) {\r\n this.processChildLogics(grid.element.childLogics);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 3️⃣ A logic itself might directly contain nested logics\r\n if (Array.isArray(logic.childLogics)) {\r\n this.processChildLogics(logic.childLogics);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Return ALL elements with an active whenClause inside a subform,\r\n * including nested childLogics (recursive)\r\n */\r\n getWhenClauseElements(subform: any): any[] {\r\n const result: any[] = [];\r\n\r\n if (!subform || !Array.isArray(subform.rows)) {\r\n return result;\r\n }\r\n\r\n for (const row of subform.rows) {\r\n if (!Array.isArray(row.grid)) continue;\r\n\r\n for (const grid of row.grid) {\r\n // 1️⃣ Add this grid if it has an active whenClause\r\n if (this.isActiveWhenClause(grid)) {\r\n result.push(grid);\r\n }\r\n\r\n // 2️⃣ Process nested childLogics inside this element\r\n if (Array.isArray(grid.element?.childLogics)) {\r\n result.push(\r\n ...this.getElementsFromChildLogics(grid.element.childLogics)\r\n );\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Recursively gather grids with active whenClause inside childLogics\r\n */\r\n private getElementsFromChildLogics(childLogics: any[]): any[] {\r\n const found: any[] = [];\r\n\r\n if (!Array.isArray(childLogics)) return found;\r\n\r\n for (const logic of childLogics) {\r\n // Each logic can have rows\r\n if (Array.isArray(logic.rows)) {\r\n for (const row of logic.rows) {\r\n if (!Array.isArray(row.grid)) continue;\r\n\r\n for (const grid of row.grid) {\r\n if (this.isActiveWhenClause(grid)) {\r\n found.push(grid);\r\n }\r\n\r\n // Recurse deeper if this grid has nested childLogics\r\n if (Array.isArray(grid.element?.childLogics)) {\r\n found.push(\r\n ...this.getElementsFromChildLogics(grid.element.childLogics)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Logic itself may have nested childLogics\r\n if (Array.isArray(logic.childLogics)) {\r\n found.push(...this.getElementsFromChildLogics(logic.childLogics));\r\n }\r\n }\r\n\r\n return found;\r\n }\r\n\r\n checkElementVisibility(id: string, submission: Submission): boolean {\r\n if (!id || !submission || !Array.isArray(submission.answers)) {\r\n return true; // default visible if invalid input\r\n }\r\n\r\n const matchedAnswer = submission.answers.find(\r\n (ans) => ans.questionId === id\r\n );\r\n\r\n // Return the 'show' flag if found, else default to true\r\n return matchedAnswer ? matchedAnswer.show ?? true : true;\r\n }\r\n\r\n evaluateSubformWhenClauses(\r\n changedAnswer: any,\r\n submission: Submission,\r\n changedQuestionId: string,\r\n elementsWithWhenClause: any\r\n ) {\r\n if (!elementsWithWhenClause.length) return;\r\n\r\n for (const grid of elementsWithWhenClause) {\r\n const elementId = grid.element.id;\r\n const when = grid.whenClause;\r\n const conditions = when.whenClauseCondition;\r\n\r\n if (!conditions?.length) continue;\r\n\r\n let overallResult = true;\r\n\r\n for (let i = 0; i < conditions.length; i++) {\r\n const clause = conditions[i];\r\n\r\n const logic = (clause.logic || (i === 0 ? 'AND' : 'AND')).toUpperCase();\r\n\r\n // Determine which answer to use for this condition\r\n let answerToCheck: any;\r\n\r\n if (clause.questionid === changedQuestionId) {\r\n // Use updated answer for the changed question\r\n answerToCheck = changedAnswer;\r\n } else {\r\n // Fetch existing value from submission for other questions\r\n const existing = submission.answers.find(\r\n (a) => a.questionId === clause.questionid\r\n );\r\n answerToCheck = existing?.answer;\r\n }\r\n\r\n const result = this.evaluateCondition(\r\n answerToCheck,\r\n clause.condition,\r\n clause.value\r\n );\r\n\r\n // Apply AND/OR logic\r\n if (i === 0) {\r\n overallResult = result;\r\n } else {\r\n overallResult =\r\n logic === 'AND' ? overallResult && result : overallResult || result;\r\n }\r\n }\r\n\r\n // Update show flag for the element controlled by this whenClause\r\n const matchedAnswer = submission.answers.find(\r\n (ans) => ans.questionId === elementId\r\n );\r\n\r\n const actions: string[] = Array.isArray(when?.whenClauseActions)\r\n ? when.whenClauseActions.map(String)\r\n : [];\r\n\r\n // choose the decisive action (use last if multiple)\r\n const action = actions.length > 0 ? actions[actions.length - 1] : undefined;\r\n\r\n\r\n if (matchedAnswer) {\r\n if (overallResult) {\r\n // Condition(s) satisfied -> perform the action\r\n switch (action) {\r\n case 'SHOW':\r\n matchedAnswer.show = true;\r\n break;\r\n case 'HIDE':\r\n matchedAnswer.show = false;\r\n break;\r\n case 'MARK_AS_REQUIRED':\r\n matchedAnswer.required = true;\r\n break;\r\n case 'MARK_AS_OPTIONAL':\r\n matchedAnswer.required = false;\r\n break;\r\n default:\r\n // no show/hide action — keep current behavior (you can choose default here)\r\n // For safety, if no explicit action, we'll leave grid.show unchanged.\r\n break;\r\n }\r\n\r\n } else {\r\n // Condition(s) not satisfied -> revert the action's effect\r\n switch (action) {\r\n case 'SHOW':\r\n // condition no longer true => hide (revert)\r\n matchedAnswer.show = false;\r\n break;\r\n case 'HIDE':\r\n // condition no longer true => show (revert)\r\n matchedAnswer.show = true;\r\n break;\r\n case 'MARK_AS_REQUIRED':\r\n matchedAnswer.required = false;\r\n break;\r\n case 'MARK_AS_OPTIONAL':\r\n matchedAnswer.required = true;\r\n break;\r\n default:\r\n // nothing to revert\r\n break;\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n // if (matchedAnswer) {\r\n // matchedAnswer.show = overallResult;\r\n // }\r\n }\r\n }\r\n\r\n resetService(): void {\r\n // Clear tracked grids\r\n this.activeWhenClauseGrids = [];\r\n\r\n // Clear stored question → answer map\r\n this.questionAnswerMap = {};\r\n\r\n // Reset visibility logic to initial state\r\n }\r\n\r\n getActiveWhenClauseGrids(): any[] {\r\n return this.activeWhenClauseGrids;\r\n }\r\n}\r\n","import { Component, Input, OnChanges } from '@angular/core';\n\n@Component({\n selector: 'lib-section-fields',\n templateUrl: './section-fields.component.html',\n styleUrls: ['./section-fields.component.scss']\n})\nexport class SectionFieldsComponent implements OnChanges {\n @Input() section: any = {};\n decodedDescription: string = '';\n\n // Method to decode HTML entities\n decodeHtml(html: string): string {\n const textArea = document.createElement('textarea');\n textArea.innerHTML = html; \n return textArea.value;\n }\n\n // Lifecycle hook to handle updates to the input\n ngOnChanges(): void {\n if (this.section.description) {\n this.decodedDescription = this.decodeHtml(this.section.description);\n }\n }\n}\n","<div class=\"mb-4 px-3\" [attr.name]=\"section.testElementName\">\r\n <p class=\"sectionTitle\">{{ section.title }}</p>\r\n <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DataService {\r\n constructor() {}\r\n\r\n private dataSubject = new BehaviorSubject<string>('');\r\n public apiUrl$: Observable<string> = this.dataSubject.asObservable();\r\n private headerSubject = new BehaviorSubject<any>({});\r\n public header$: Observable<any> = this.headerSubject.asObservable();\r\n\r\n private subformSubject = new BehaviorSubject<any>({});\r\n public subform$: Observable<any> = this.subformSubject.asObservable();\r\n\r\n private parentQuestionsSubject = new BehaviorSubject<any>(null);\r\n public parentQuestions$: Observable<any> = this.parentQuestionsSubject.asObservable();\r\n\r\n setApiUrl(data: string): void {\r\n this.dataSubject.next(data);\r\n }\r\n\r\n setHeader(data: any) {\r\n this.headerSubject.next(data);\r\n }\r\n\r\n setParentQuestions(data: any): void {\r\n this.parentQuestionsSubject.next(data);\r\n }\r\n\r\n setSubformData(data: any) {\r\n this.subformSubject.next(data);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { DataService } from './data.service';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FormService {\r\n private apiUrl: string = '';\r\n header: any = {};\r\n parentQuestions: any;\r\n subformData: any;\r\n\r\n constructor(private http: HttpClient, private dataService: DataService) {\r\n this.dataService.apiUrl$.subscribe((data) => {\r\n this.apiUrl = data;\r\n });\r\n\r\n this.dataService.header$.subscribe((data) => {\r\n this.header = data;\r\n });\r\n\r\n this.dataService.parentQuestions$.subscribe((questions) => {\r\n if (questions) {\r\n this.parentQuestions = questions;\r\n }\r\n });\r\n\r\n this.dataService.subform$.subscribe((data) => {\r\n this.subformData = data;\r\n });\r\n }\r\n\r\n getQuestions(\r\n moduleName: string,\r\n pageNumber: number = 1,\r\n rowSet: number = 0,\r\n progressiveLoading: boolean = true,\r\n country: string = ''\r\n ) {\r\n const headers = new HttpHeaders(this.getSafeHeaders());\r\n const params = new HttpParams()\r\n .set('pageNumber', pageNumber.toString())\r\n .set('rowSet', rowSet.toString())\r\n .set('country', country)\r\n .set('progressiveLoading', progressiveLoading);\r\n\r\n return this.http.get<any>(`${this.apiUrl}/api/public/forms/${moduleName}`, {\r\n headers,\r\n params,\r\n });\r\n }\r\n\r\n fetchDataFromDatabase(database: any, pageNumber:number=0, pageSize:number=10, searchString:string='',enablePagination:boolean=false): Observable<any> {\r\n const headers = new HttpHeaders({ 'Content-Type': 'application/json' });\r\n const params = new HttpParams()\r\n .set('page', pageNumber.toString())\r\n .set('size', pageSize.toString())\r\n .set('enablePagination', enablePagination.toString())\r\n .set('searchKey', searchString);\r\n return this.http.post<any>(`${this.apiUrl}/api/load-from-db`, database, {\r\n headers,params\r\n });\r\n }\r\n\r\n fetchDataFromLookup(tableName: string) {\r\n return this.http.get<any>(`${this.apiUrl}/api/public/lookup/${tableName}`);\r\n }\r\n\r\n fetchDataFromExternalAPI(\r\n apiConfig: any,\r\n selectedValues: any[] = []\r\n ): Observable<any> {\r\n // ✅ Check if pagination exists\r\n const hasPagination =\r\n apiConfig.params?.some((p: any) => p.valueSource === 'PAGE_INDEX') &&\r\n apiConfig.params?.some((p: any) => p.valueSource === 'PAGE_SIZE');\r\n\r\n // ---------------------- HEADERS ----------------------\r\n let headers = new HttpHeaders();\r\n // helper: resolve a value (or values) based on valueSource\r\n\r\n // Apply to headers (assuming `headers` is an HttpHeaders instance)\r\n if (apiConfig.headers) {\r\n apiConfig.headers.forEach((header: any) => {\r\n if (!header.keyName) return;\r\n\r\n const rawValue = resolveValueFromSource(\r\n header.valueSource,\r\n header.inputValue,\r\n selectedValues\r\n );\r\n\r\n if (header.valueSource === 'SELECTED_VALUES') {\r\n // Only add header if we have selected values\r\n if (Array.isArray(rawValue) && rawValue.length > 0) {\r\n if (header.inputValue === 'SINGLE_VALUE') {\r\n headers = headers.set(header.keyName, String(rawValue[0]));\r\n } else if (header.inputValue === 'ARRAY_OF_VALUES') {\r\n // join by comma for headers (common pattern)\r\n headers = headers.set(header.keyName, rawValue.join(','));\r\n } else {\r\n // fallback: join\r\n headers = headers.set(header.keyName, rawValue.join(','));\r\n }\r\n }\r\n // no selected values -> skip header\r\n return;\r\n }\r\n\r\n // For non-selected sources: skip when unresolved\r\n if (rawValue === null || rawValue === undefined) return;\r\n\r\n // If rawValue is array -> join by comma (headers expect single string)\r\n const headerValue = Array.isArray(rawValue)\r\n ? rawValue.join(',')\r\n : String(rawValue);\r\n\r\n if (header.keyName.toLowerCase() === 'authorization') {\r\n // add Bearer only when headerValue is truthy (and not already prefixed)\r\n const token = headerValue.startsWith('Bearer ')\r\n ? headerValue\r\n : `Bearer ${headerValue}`;\r\n headers = headers.set(header.keyName, token);\r\n } else {\r\n headers = headers.set(header.keyName, headerValue);\r\n }\r\n });\r\n }\r\n\r\n // ---------------------- PARAMS ----------------------\r\n let params = new HttpParams();\r\n // helper: resolve a value (or values) based on valueSource\r\n function resolveValueFromSource(\r\n valueSource: string | undefined,\r\n inputValue: any,\r\n selectedValues: any[] = []\r\n ) {\r\n if (!valueSource) return null;\r\n\r\n switch (valueSource) {\r\n case 'LOCAL_STORAGE':\r\n return localStorage.getItem(inputValue); // string or null\r\n\r\n case 'SESSION_STORAGE':\r\n return sessionStorage.getItem(inputValue); // string or null\r\n\r\n case 'CUSTOM_INPUT':\r\n case 'QUESTION':\r\n case 'PAGE_INDEX':\r\n case 'PAGE_SIZE':\r\n case 'SEARCH_STRING':\r\n // inputValue may be a single value or an array/CSV depending on usage\r\n return inputValue;\r\n\r\n case 'SELECTED_VALUES':\r\n // For SELECTED_VALUES, return the selectedValues array (caller decides SINGLE/ARRAY behavior)\r\n return Array.isArray(selectedValues) ? selectedValues : [];\r\n\r\n default:\r\n console.warn(`Unsupported valueSource for params: ${valueSource}`);\r\n return null;\r\n }\r\n }\r\n\r\n // Usage: build params (assuming `params` is an HttpParams instance)\r\n if (apiConfig.params) {\r\n apiConfig.params.forEach((param: any) => {\r\n if (!param.keyName) return;\r\n\r\n // Resolve raw value based on source\r\n const rawValue = resolveValueFromSource(\r\n param.valueSource,\r\n param.inputValue,\r\n selectedValues\r\n );\r\n\r\n // If param expects selected values, handle SINGLE_VALUE vs ARRAY_OF_VALUES\r\n if (param.valueSource === 'SELECTED_VALUES') {\r\n // Only add if there are actual selected values\r\n if (Array.isArray(rawValue) && rawValue.length > 0) {\r\n if (param.inputValue === 'SINGLE_VALUE') {\r\n // set to first selected value\r\n params = params.set(param.keyName, rawValue[0]);\r\n } else if (param.inputValue === 'ARRAY_OF_VALUES') {\r\n // append each selected value as repeated param\r\n rawValue.forEach((val: any) => {\r\n params = params.append(param.keyName, val);\r\n });\r\n } else {\r\n // if inputValue not provided, default to array behavior\r\n rawValue.forEach((val: any) => {\r\n params = params.append(param.keyName, val);\r\n });\r\n }\r\n }\r\n // if no selected values, skip adding this param\r\n return;\r\n }\r\n\r\n // For non-selected valueSources: rawValue could be null/undefined/string/array\r\n if (rawValue === null || rawValue === undefined) {\r\n // skip adding param when value not found\r\n return;\r\n }\r\n\r\n // If inputValue indicates array-of-values (e.g., param.inputValue === 'ARRAY_OF_VALUES'),\r\n // accept either an array or a comma-separated string\r\n if (param.inputValue === 'ARRAY_OF_VALUES') {\r\n if (Array.isArray(rawValue)) {\r\n rawValue.forEach((val: any) => {\r\n params = params.append(param.keyName, val);\r\n });\r\n } else if (typeof rawValue === 'string') {\r\n // support comma separated string\r\n rawValue\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean)\r\n .forEach((val: string) => {\r\n params = params.append(param.keyName, val);\r\n });\r\n } else {\r\n // fallback: convert to string and append\r\n params = params.append(param.keyName, String(rawValue));\r\n }\r\n } else {\r\n // default: set single value\r\n params = params.set(param.keyName, String(rawValue));\r\n }\r\n });\r\n }\r\n\r\n // ---------------------- PATH VARIABLES ----------------------\r\n let url = apiConfig.url;\r\n if (apiConfig.pathVariables) {\r\n apiConfig.pathVariables.forEach((pathVar: any) => {\r\n if (pathVar.keyName) {\r\n let valueToBind: any = null;\r\n\r\n switch (pathVar.valueSource) {\r\n case 'LOCAL_STORAGE':\r\n valueToBind = localStorage.getItem(pathVar.inputValue);\r\n break;\r\n\r\n case 'SESSION_STORAGE':\r\n valueToBind = sessionStorage.getItem(pathVar.inputValue);\r\n break;\r\n\r\n case 'CUSTOM_INPUT':\r\n case 'QUESTION':\r\n valueToBind = pathVar.inputValue;\r\n break;\r\n\r\n default:\r\n console.warn(`Unsupported valueSource: ${pathVar.valueSource}`);\r\n }\r\n\r\n if (valueToBind !== null && valueToBind !== undefined) {\r\n url = url.replace(`{${pathVar.keyName}}`, valueToBind);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // ---------------------- FINAL CALL ----------------------\r\n return this.http.get<any>(url, { headers, params });\r\n }\r\n\r\n submitForm(\r\n moduleName: string,\r\n formData: FormData,\r\n reCAPTCHAToken?: string\r\n ): Observable<any> {\r\n // const headers = new HttpHeaders({\r\n // 'Auth-user': this.header.authUser,\r\n // });\r\n const headers = new HttpHeaders(this.getSafeHeaders());\r\n const url = `${this.apiUrl}/api/public/forms/${moduleName}/submissions`;\r\n if (reCAPTCHAToken) {\r\n formData.append('recaptchaToken', reCAPTCHAToken);\r\n }\r\n return this.http.post(url, formData, {\r\n headers,\r\n observe: 'events',\r\n reportProgress: true,\r\n });\r\n }\r\n\r\n getSubmittedForm(\r\n moduleName: string,\r\n submissionId: string,\r\n pageNumber: number = 1,\r\n rowSet: number = 0,\r\n navigateTo?: string\r\n ): Observable<any> {\r\n let params = new HttpParams()\r\n .set('pageNumber', pageNumber.toString())\r\n .set('rowSet', rowSet.toString());\r\n if (navigateTo) {\r\n params = params.set('navigateId', navigateTo);\r\n }\r\n\r\n if (this.parentQuestions) {\r\n this.parentQuestions.forEach((q: any) => {\r\n params = params.append('parentQuestions', q);\r\n });\r\n }\r\n // const headers = new HttpHeaders({\r\n // 'Accept-Language': this.header.acceptedLanguage,\r\n // });\r\n const headers = new HttpHeaders(this.getSafeHeaders());\r\n return this.http.get<any>(\r\n `${this.apiUrl}/api/forms/${moduleName}/submissions/${submissionId}`,\r\n { headers, params }\r\n );\r\n }\r\n\r\n updateForm(\r\n moduleName: string,\r\n submissionId: string,\r\n formData: FormData,\r\n reCAPTCHAToken?: string\r\n ): Observable<any> {\r\n // const headers = new HttpHeaders({\r\n // 'Auth-user': this.header.authUser,\r\n // });\r\n const headers = new HttpHeaders(this.getSafeHeaders());\r\n const url = `${this.apiUrl}/api/public/forms/${moduleName}/submissions/${submissionId}`;\r\n if (reCAPTCHAToken) {\r\n formData.append('recaptchaToken', reCAPTCHAToken);\r\n }\r\n return this.http.put<any>(url, formData, {\r\n headers,\r\n observe: 'events',\r\n reportProgress: true,\r\n },);\r\n }\r\n\r\n previewFile(url: any): Observable<any> {\r\n // const headers = new HttpHeaders({\r\n // 'Accept-Language': this.header.acceptedLanguage,\r\n // 'Content-Type': this.header.contentType,\r\n // 'auth-user': this.header.authUser,\r\n // 'Authorization': `Bearer ${this.header.authorization}`,\r\n // });\r\n const headers = new HttpHeaders(this.getSafeHeaders());\r\n const options = {\r\n headers: headers,\r\n };\r\n const fileUrl = url;\r\n const encodedFileUrl = encodeURIComponent(fileUrl);\r\n const fullUrl = `?url=${encodedFileUrl}`;\r\n return this.http.get<any>(\r\n this.apiUrl + `/api/cdn/preview${fullUrl}`,\r\n options\r\n );\r\n }\r\n\r\n getSubformSubmissions(subFormData: any) {\r\n if (\r\n !subFormData?.moduleName ||\r\n !subFormData?.duplicateSubmission?.sourceSubmissionIds\r\n ) {\r\n return;\r\n }\r\n\r\n const headers = new HttpHeaders(this.getSafeHeaders());\r\n\r\n // Extract data\r\n const moduleName = subFormData.moduleName;\r\n const submissionIds: string[] =\r\n subFormData.duplicateSubmission.sourceSubmissionIds;\r\n\r\n // Build query string\r\n const queryParams = submissionIds\r\n .map((id) => `submissionIds=${encodeURIComponent(id)}`)\r\n .join('&');\r\n\r\n // Final URL\r\n const url = `${this.apiUrl}/api/public/${moduleName}/subform-submissions?${queryParams}`;\r\n\r\n // Now make API call\r\n return this.http.get(url, {\r\n headers\r\n });\r\n\r\n }\r\n\r\n getSafeHeaders(): { [key: string]: string } {\r\n const safe: { [key: string]: string } = {};\r\n if (this.header && typeof this.header === 'object') {\r\n for (const key of Object.keys(this.header)) {\r\n const val = this.header[key];\r\n if (val !== undefined && val !== null) {\r\n let headerKey = key;\r\n if (key === 'authUser') {\r\n headerKey = 'auth-user';\r\n }\r\n safe[headerKey] = String(val);\r\n }\r\n }\r\n }\r\n return safe;\r\n }\r\n}\r\n","// element-tracker.service.ts\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ElementTrackerService {\n private elementIds = new Set<string>();\n\n registerElement(id: string) {\n this.elementIds.add(id);\n }\n\n unregisterElement(id: string) {\n this.elementIds.delete(id);\n }\n\n getAllElementIds(): string[] {\n return Array.from(this.elementIds);\n }\n\n clear() {\n this.elementIds.clear();\n }\n}","import { Injectable } from '@angular/core';\r\nimport { Answer } from '../models/answer.model';\r\nimport { Submission } from '../models/submission.model';\r\n\r\ninterface SubmissionScore {\r\n scoreType: string;\r\n score: number;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ScoreCalculationService {\r\n constructor() {}\r\n\r\n calculateScoreFromAnswer(\r\n newAnswer: string[] | string,\r\n question: any\r\n ): { scores: { scoreType: string; score: number }[] } | null {\r\n \r\n const scoring = question?.formElement?.scoring;\r\n if (!scoring || !scoring.enableScoring || !newAnswer || (Array.isArray(newAnswer) && newAnswer.length === 0)) {\r\n return null;\r\n }\r\n \r\n const defaultScore = scoring.defaultScore ?? 0;\r\n const scoreRules = scoring.score || [];\r\n \r\n const answers = Array.isArray(newAnswer) ? newAnswer : [newAnswer];\r\n \r\n // If scoringType is NOT enabled, behave like the old logic\r\n if (!scoring.enableScoringType) {\r\n let totalScore = 0;\r\n const scoreByOption: Record<string, number> = {};\r\n \r\n for (const answer of answers) {\r\n const value = answer.split('|')[1]; // Extract actual value\r\n const matchingScore = scoreRules.find((rule: any) => rule.label.includes(value));\r\n \r\n if (matchingScore && typeof matchingScore.score === 'number') {\r\n scoreByOption[answer] = matchingScore.score;\r\n totalScore += matchingScore.score;\r\n } else {\r\n scoreByOption[answer] = defaultScore;\r\n totalScore += defaultScore;\r\n }\r\n }\r\n \r\n return { scores: [{ scoreType: 'NOT_APPLICABLE', score:totalScore }] };\r\n }\r\n \r\n // ✅ Scoring Type ENABLED → separate Good/Bad scoring\r\n const groupedScores: Record<string, number> = {};\r\n \r\n for (const answer of answers) {\r\n const value = answer.split('|')[1];\r\n const matchingScore = scoreRules.find((rule: any) => rule.label.includes(value));\r\n \r\n if (matchingScore && typeof matchingScore.score === 'number') {\r\n const type = matchingScore.scoreType || 'NOT_APPLICABLE';\r\n groupedScores[type] = (groupedScores[type] || 0) + matchingScore.score;\r\n } else {\r\n // if no matching score, add default under NOT_APPLICABLE\r\n groupedScores['NOT_APPLICABLE'] = (groupedScores['NOT_APPLICABLE'] || 0) + defaultScore;\r\n }\r\n }\r\n \r\n // Convert grouped results into required array format\r\n const resultScores = Object.keys(groupedScores).map((type) => ({\r\n scoreType:type,\r\n score: groupedScores[type],\r\n }));\r\n \r\n return { scores: resultScores };\r\n }\r\n\r\n\r\n getMaxPossibleScore(subform: any): { goodMax: number; badMax: number } {\r\n let goodMaxProduct = 1;\r\n let badMaxProduct = 1;\r\n \r\n subform.rows.forEach((row: any) => {\r\n row.grid.forEach((gridItem: any) => {\r\n if (gridItem.entityType === \"QUESTION\") {\r\n const element = gridItem.element;\r\n const formElement = element?.formElement;\r\n \r\n if (\r\n formElement?.elementType === \"DROP_DOWN\" &&\r\n formElement?.scoring?.enableScoring &&\r\n Array.isArray(formElement.scoring.score)\r\n ) {\r\n // ---- GOOD SCORE CALC ----\r\n let maxGoodForQuestion = 0;\r\n const goodScores = formElement.scoring.score.filter(\r\n (s: any) => s.scoreType === \"GOOD_SCORE\"\r\n );\r\n \r\n if (formElement.appearance?.selectionType === \"SINGLE\") {\r\n if (goodScores.length > 0) {\r\n // Pick max abs, but return real value\r\n const maxAbs = goodScores.reduce(\r\n (max: any, s: any) =>\r\n Math.abs(s.score ?? 0) > Math.abs(max.score ?? 0) ? s : max,\r\n { score: 0 }\r\n );\r\n maxGoodForQuestion = maxAbs.score ?? 0;\r\n } else {\r\n maxGoodForQuestion = Math.max(\r\n ...formElement.scoring.score.map((s: any) => s.score ?? 0)\r\n );\r\n }\r\n } else if (formElement.appearance?.selectionType === \"MULTIPLE\") {\r\n const maxSelection = formElement.validation?.maximumSelection;\r\n \r\n if (maxSelection && maxSelection > 0) {\r\n const labelScores: number[] = [];\r\n const src = goodScores.length > 0 ? goodScores : formElement.scoring.score;\r\n \r\n src.forEach((s: any) => {\r\n const scoreValue = s.score ?? 0;\r\n const count = s.label?.length ?? 0;\r\n for (let i = 0; i < count; i++) {\r\n labelScores.push(scoreValue);\r\n }\r\n });\r\n \r\n labelScores.sort((a, b) => Math.abs(b) - Math.abs(a));\r\n maxGoodForQuestion = labelScores\r\n .slice(0, maxSelection)\r\n .reduce((sum, score) => sum + score, 0);\r\n } else {\r\n maxGoodForQuestion = formElement.scoring.score.reduce(\r\n (sum: number, s: any) =>\r\n sum + (s.score ?? 0) * (s.label?.length ?? 0),\r\n 0\r\n );\r\n }\r\n }\r\n \r\n // ---- BAD SCORE CALC ----\r\n let maxBadForQuestion = 0;\r\n const badScores = formElement.scoring.score.filter(\r\n (s: any) => s.scoreType === \"BAD_SCORE\"\r\n );\r\n \r\n if (formElement.appearance?.selectionType === \"SINGLE\") {\r\n if (badScores.length > 0) {\r\n maxBadForQuestion = Math.max(\r\n ...badScores.map((s: any) => s.score ?? 0)\r\n );\r\n } else {\r\n maxBadForQuestion = Math.max(\r\n ...formElement.scoring.score.map((s: any) => s.score ?? 0)\r\n );\r\n }\r\n } else if (formElement.appearance?.selectionType === \"MULTIPLE\") {\r\n const maxSelection = formElement.validation?.maximumSelection;\r\n \r\n if (maxSelection && maxSelection > 0) {\r\n const labelScores: number[] = [];\r\n const src = badScores.length > 0 ? badScores : formElement.scoring.score;\r\n \r\n src.forEach((s: any) => {\r\n const scoreValue = s.score ?? 0;\r\n const count = s.label?.length ?? 0;\r\n for (let i = 0; i < count; i++) {\r\n labelScores.push(scoreValue);\r\n }\r\n });\r\n \r\n labelScores.sort((a, b) => b - a);\r\n maxBadForQuestion = labelScores\r\n .slice(0, maxSelection)\r\n .reduce((sum, score) => sum + score, 0);\r\n } else {\r\n maxBadForQuestion = formElement.scoring.score.reduce(\r\n (sum: number, s: any) =>\r\n sum + (s.score ?? 0) * (s.label?.length ?? 0),\r\n 0\r\n );\r\n }\r\n }\r\n \r\n goodMaxProduct *= maxGoodForQuestion;\r\n badMaxProduct *= maxBadForQuestion;\r\n }\r\n }\r\n });\r\n });\r\n \r\n return { goodMax: goodMaxProduct, badMax: badMaxProduct };\r\n }\r\n \r\n \r\n \r\n\r\n calculateSubmissionScore = (answers: Answer[], enableScoringType = true): SubmissionScore[] => {\r\n let submissionScoreType: string | null = null;\r\n let totalScore = 1;\r\n for (const ans of answers) {\r\n if (!ans.scores) continue;\r\n \r\n for (const s of ans.scores) {\r\n // ✅ Always add scores (ignore type during summation)\r\n totalScore *= s.score ?? 1;\r\n \r\n // ✅ Decide submission-level scoreType\r\n if (enableScoringType) {\r\n if (s.scoreType === \"GOOD_SCORE\") {\r\n submissionScoreType = \"GOOD_SCORE\";\r\n } else if (s.scoreType === \"BAD_SCORE\") {\r\n submissionScoreType = \"BAD_SCORE\";\r\n }\r\n } else if (s.scoreType === \"NOT_APPLICABLE\") {\r\n submissionScoreType = \"NOT_APPLICABLE\";\r\n }\r\n }\r\n }\r\n \r\n // ✅ Default type if none found\r\n if (!submissionScoreType) {\r\n submissionScoreType = enableScoringType ? \"GOOD_SCORE\" : \"NOT_APPLICABLE\";\r\n }\r\n \r\n return [\r\n {\r\n scoreType: submissionScoreType,\r\n score: totalScore,\r\n },\r\n ];\r\n };\r\n\r\n calculateFinalScore(\r\n submissions: Submission[],\r\n maxPossibleGoodScore: number,\r\n maxPossibleBadScore: number\r\n ): SubmissionScore[] {\r\n let totalGood = 0;\r\n let totalBad = 0;\r\n \r\n const hasGood = (s: Submission) => s.scores?.some(x => x.scoreType === 'GOOD_SCORE');\r\n const hasBad = (s: Submission) => s.scores?.some(x => x.scoreType === 'BAD_SCORE');\r\n \r\n const goodCount = submissions.filter(hasGood).length;\r\n const badCount = submissions.filter(hasBad).length;\r\n \r\n for (const sub of submissions) {\r\n if (!sub.scores) continue;\r\n for (const s of sub.scores) {\r\n if (s.scoreType === 'GOOD_SCORE') totalGood += s.score ?? 0;\r\n if (s.scoreType === 'BAD_SCORE') totalBad += s.score ?? 0;\r\n }\r\n }\r\n \r\n const totalSubmissions = submissions.length;\r\n \r\n const maxGood = totalSubmissions * maxPossibleGoodScore;\r\n const maxBad = totalSubmissions * maxPossibleBadScore;\r\n \r\n const result: SubmissionScore[] = [];\r\n \r\n // use !== 0 (not > 0) because maxGood may be negative by design\r\n if (goodCount > 0 && maxGood !== 0) {\r\n result.push({\r\n scoreType: 'GOOD_SCORE',\r\n score: Math.round(100 - (totalGood / maxGood) * 100)\r\n });\r\n }\r\n \r\n if (badCount > 0 && maxBad !== 0) {\r\n result.push({\r\n scoreType: 'BAD_SCORE',\r\n score: Math.round(100 - (totalBad / maxBad) * 100)\r\n });\r\n }\r\n \r\n return result;\r\n }\r\n \r\n \r\n\r\n getMaxPossibleScoreForQuestion(question: any): number {\r\n const formElement = question?.formElement;\r\n \r\n if (\r\n !formElement?.scoring?.enableScoring ||\r\n !Array.isArray(formElement.scoring.score)\r\n ) {\r\n return 0; // No scoring or invalid config \r\n }\r\n \r\n let maxScoreForQuestion = 0;\r\n \r\n if (formElement.appearance?.selectionType === \"SINGLE\") {\r\n // For single selection: take the highest score\r\n maxScoreForQuestion = Math.max(\r\n ...formElement.scoring.score.map((s: any) => s.score ?? 0)\r\n );\r\n } \r\n else if (formElement.appearance?.selectionType === \"MULTIPLE\") {\r\n const maxSelection = formElement.validation?.maximumSelection;\r\n \r\n if (maxSelection && maxSelection > 0) {\r\n // Flatten scores per label\r\n const labelScores: number[] = [];\r\n formElement.scoring.score.forEach((s: any) => {\r\n const scoreValue = s.score ?? 0;\r\n const count = s.label?.length ?? 0;\r\n for (let i = 0; i < count; i++) {\r\n labelScores.push(scoreValue);\r\n }\r\n });\r\n \r\n // Sort descending & take top N\r\n labelScores.sort((a, b) => b - a);\r\n maxScoreForQuestion = labelScores\r\n .slice(0, maxSelection)\r\n .reduce((sum, score) => sum + score, 0);\r\n } else {\r\n // Sum all scores × label count\r\n maxScoreForQuestion = formElement.scoring.score.reduce(\r\n (sum: number, s: any) =>\r\n sum + (s.score ?? 0) * (s.label?.length ?? 0),\r\n 0\r\n );\r\n }\r\n }\r\n return maxScoreForQuestion;\r\n }\r\n\r\n\r\n shouldCalculateScore(subForm: any, submission: any): boolean {\r\n // Get all dropdown-like questions in subform that have scoring enabled\r\n const scoringQuestions = subForm.rows\r\n .flatMap((row: any) => row.grid)\r\n .filter((g: any) => g.entityType === 'QUESTION')\r\n .map((g: any) => g.element)\r\n .filter((q: any) =>\r\n q.formElement &&\r\n ['DROP_DOWN', 'RADIO_BUTTON', 'CHECK_BOX'].includes(q.formElement.elementType) &&\r\n q.formElement.scoring?.enableScoring\r\n );\r\n \r\n // Check if all scoring-enabled dropdown questions are answered in submission\r\n return scoringQuestions.every((q: any) => {\r\n const ans = submission.answers.find((a: any) => a.questionId === q.id);\r\n return ans && ans.answer !== '' && !(Array.isArray(ans.answer) && ans.answer.length === 0);\r\n });\r\n }\r\n \r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormService } from '../../services/form.service';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { ScoreCalculationService } from '../../services/score.service';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\n\r\n@Component({\r\n selector: 'lib-check-box-fields',\r\n templateUrl: './check-box-fields.component.html',\r\n styleUrls: ['./check-box-fields.component.scss'],\r\n})\r\nexport class CheckBoxFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{\r\n answer: any;\r\n maxPossibleScore?: number;\r\n }>();\r\n @Input() rowId: number = 0;\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n selectionType: string = '';\r\n minimumSelection?: number;\r\n maximumSelection?: number;\r\n optionType: string = '';\r\n lookupTable: any = {};\r\n customOptions: any[] = [];\r\n database: any = {};\r\n api: any = {};\r\n apiOptions: any[] = [];\r\n selectedOptions: any[] = [];\r\n validationFailed: boolean = false;\r\n displayOptionsInColumn: boolean = false;\r\n validationMessage: string = '';\r\n private elementId: string = '';\r\n maxPossibleScore?: number;\r\n @Input() disableEdit: boolean = false;\r\n\r\n constructor(\r\n private formService: FormService,\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService,\r\n private scoreCalcService: ScoreCalculationService,\r\n private whenClauseService:WhenClauseService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.selectionType = this.question.formElement.appearance.selectionType;\r\n this.displayOptionsInColumn =\r\n this.question.formElement.appearance.displayOptionsInColumn ?? false;\r\n this.minimumSelection =\r\n this.question.formElement.validation.minimumSelection;\r\n this.maximumSelection =\r\n this.question.formElement.validation.maximumSelection;\r\n this.optionType = this.question.formElement.option.optionType;\r\n switch (this.optionType) {\r\n case 'OPTION':\r\n this.customOptions = this.question.formElement.option.customOptions;\r\n this.customOptions = this.question.formElement.option.customOptions.map(\r\n (option: any) => ({\r\n value: option.value,\r\n label: option.value,\r\n })\r\n );\r\n if (this.question.answer) {\r\n this.initializeCustomOption();\r\n }\r\n break;\r\n case 'LOOKUP':\r\n this.lookupTable = this.question.formElement.option.lookupTable;\r\n this.fetchDataFromLookup();\r\n break;\r\n case 'DATABASE':\r\n this.database = this.question.formElement.option.database;\r\n this.fetchDataFromDatabase();\r\n break;\r\n case 'API':\r\n this.api = this.question.formElement.option.api;\r\n this.fetchDataFromAPI();\r\n break;\r\n default:\r\n console.warn('Unknown option type:', this.optionType);\r\n }\r\n\r\n if (this.selectionType === 'SINGLE') {\r\n this.minimumSelection = 1;\r\n this.maximumSelection = 1;\r\n }\r\n\r\n if (\r\n this.selectionType === 'MULTIPLE' &&\r\n !this.minimumSelection &&\r\n !this.maximumSelection\r\n ) {\r\n this.minimumSelection = undefined;\r\n this.maximumSelection = undefined;\r\n }\r\n if (\r\n this.question.formElement.scoring &&\r\n this.question.formElement.scoring.enableScoring\r\n ) {\r\n this.maxPossibleScore =\r\n this.scoreCalcService.getMaxPossibleScoreForQuestion(this.question);\r\n this.question.maxPossibleScore = this.maxPossibleScore;\r\n }\r\n }\r\n\r\n initializeCustomOption() {\r\n this.selectedOptions = [];\r\n this.customOptions?.forEach((option: any) => {\r\n if (\r\n this.question?.answer?.find((a: any) => {\r\n if (typeof a === 'string' && a.includes('|')) {\r\n const parts = a.split('|');\r\n return parts[1] === option.value.toString();\r\n }\r\n return a.toString() === option.value.toString();\r\n })\r\n ) {\r\n this.selectedOptions.push(option);\r\n }\r\n });\r\n setTimeout(() => {\r\n const answers = Array.isArray(this.question.answer) ? this.question.answer : [];\r\n const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);\r\n this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers,true);\r\n });\r\n if (this.question.childLogics && this.question.answer) {\r\n this.updateChildLogics(this.question);\r\n }\r\n }\r\n\r\n onCheckboxChange(option: any, event: any) {\r\n if (this.selectionType === 'SINGLE') {\r\n if (event.target.checked) {\r\n this.selectedOptions = [option];\r\n this.question.answer = [`${option.label}|${option.value}`];\r\n } else {\r\n this.selectedOptions = [];\r\n this.question.answer = [];\r\n }\r\n this.isMinimumSelectionValid();\r\n } else if (this.selectionType === 'MULTIPLE') {\r\n if (event.target.checked) {\r\n if (!this.selectedOptions.includes(option)) {\r\n this.selectedOptions.push(option);\r\n }\r\n } else {\r\n this.selectedOptions = this.selectedOptions.filter(\r\n (item) => item !== option\r\n );\r\n }\r\n this.question.answer = this.selectedOptions.map(\r\n (item) => `${item.label}|${item.value}`\r\n );\r\n this.isMinimumSelectionValid();\r\n }\r\n\r\n if (\r\n this.maximumSelection !== undefined &&\r\n this.selectedOptions.length > this.maximumSelection\r\n ) {\r\n event.target.checked = false;\r\n this.selectedOptions = this.selectedOptions.filter(\r\n (item) => item !== option\r\n );\r\n this.question.answer = this.selectedOptions.map(\r\n (item) => `${item.label}|${item.value}`\r\n );\r\n this.isMinimumSelectionValid();\r\n }\r\n\r\n if (this.question.childLogics) {\r\n this.updateChildLogics(this.question);\r\n }\r\n const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(\r\n this.question.answer,\r\n this.question\r\n );\r\n this.question.score = scoreResult?.scores;\r\n this.answerChange.emit({\r\n answer: this.question.answer,\r\n maxPossibleScore: this.maxPossibleScore,\r\n });\r\n const answers = Array.isArray(this.question.answer) ? this.question.answer : [];\r\n const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);\r\n this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers);\r\n }\r\n\r\n updateChildLogics(question: any) {\r\n if (question.childLogics && Array.isArray(question.childLogics)) {\r\n question.childLogics.forEach((childLogic: any) => {\r\n if (this.selectionType === 'SINGLE') {\r\n if (this.selectedOptions.length === 0) {\r\n childLogic.showLogic = false;\r\n this.clearAnswersRecursively(childLogic);\r\n } else {\r\n if (\r\n this.evaluateCondition(\r\n this.selectedOptions[0]?.label,\r\n childLogic.condition,\r\n childLogic.inputValue\r\n )\r\n ) {\r\n childLogic.showLogic = true;\r\n } else {\r\n childLogic.showLogic = false;\r\n this.clearAnswersRecursively(childLogic);\r\n }\r\n }\r\n } else if (this.selectionType === 'MULTIPLE') {\r\n if (this.selectedOptions.length === 0) {\r\n childLogic.showLogic = false;\r\n this.clearAnswersRecursively(childLogic);\r\n } else {\r\n const selectedLabels = this.selectedOptions.map(\r\n (item: any) => item.label\r\n );\r\n if (\r\n this.evaluateMultipleCondition(\r\n selectedLabels,\r\n childLogic.condition,\r\n childLogic.inputValue\r\n )\r\n ) {\r\n childLogic.showLogic = true;\r\n } else {\r\n childLogic.showLogic = false;\r\n this.clearAnswersRecursively(childLogic);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n clearAnswersRecursively(logic: any) {\r\n if (!logic || !logic.rows) return;\r\n\r\n logic.rows.forEach((row: any) => {\r\n row.grid.forEach((item: any) => {\r\n const element = item.element;\r\n\r\n if (item.entityType === 'QUESTION' && element) {\r\n // Clear answer if present\r\n if ('answer' in element) {\r\n element.answer = '';\r\n }\r\n\r\n // Recursively clear childLogics if any\r\n if (element.childLogics && element.childLogics.length > 0) {\r\n element.childLogics.forEach((childLogic: any) => {\r\n this.clearAnswersRecursively(childLogic);\r\n });\r\n }\r\n }\r\n\r\n if (item.entityType === 'SUBFORM' && element && element.rows) {\r\n // SUBFORM contains its own rows structure like a form\r\n this.clearAnswersRecursively({ rows: element.rows });\r\n }\r\n });\r\n });\r\n }\r\n\r\n evaluateCondition(answer: any, condition: string, inputValue: any): boolean {\r\n const inputValues = Array.isArray(inputValue)\r\n ? inputValue.map((val) => val.toString())\r\n : [inputValue.toString()];\r\n\r\n switch (condition) {\r\n case '!=':\r\n return !inputValues.includes(answer);\r\n case '=':\r\n return inputValues.includes(answer);\r\n case 'IN':\r\n return inputValues.includes(answer);\r\n case 'NOT IN':\r\n return !inputValues.includes(answer);\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n evaluateMultipleCondition(\r\n answers: any[],\r\n condition: string,\r\n inputValue: any\r\n ): boolean {\r\n const inputValues = Array.isArray(inputValue)\r\n ? inputValue.map((val) => val.toString())\r\n : [inputValue.toString()];\r\n\r\n switch (condition) {\r\n case '!=':\r\n return answers.every((answer) => !inputValues.includes(answer));\r\n case '=':\r\n return answers.some((answer) => inputValues.includes(answer));\r\n case 'IN':\r\n return answers.some((answer) => inputValues.includes(answer));\r\n case 'NOT IN':\r\n return answers.every((answer) => !inputValues.includes(answer));\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n fetchDataFromLookup() {\r\n this.formService.fetchDataFromLookup(this.lookupTable).subscribe(\r\n (response) => {\r\n this.customOptions = response.result.values.map(\r\n (item: { value: string; label: string }) => ({\r\n value: item.value,\r\n label: item.label,\r\n })\r\n );\r\n if (this.question.answer) {\r\n this.initializeCustomOption();\r\n }\r\n },\r\n (error) => {\r\n console.error('HTTP Error:', error);\r\n }\r\n );\r\n }\r\n\r\n fetchDataFromDatabase() {\r\n const transformedDatabase = this.transformDatabaseObject(this.database);\r\n this.formService.fetchDataFromDatabase(transformedDatabase).subscribe(\r\n (response) => {\r\n if (response.success) {\r\n this.customOptions = response.result?.content?.map(\r\n (item: { value: string; label: string }) => ({\r\n value: item.value,\r\n label: item.label,\r\n })\r\n );\r\n if (this.question.answer) {\r\n this.initializeCustomOption();\r\n }\r\n } else {\r\n console.error('Error fetching data from database:', response.message);\r\n }\r\n },\r\n (error) => {\r\n console.error('HTTP Error:', error);\r\n }\r\n );\r\n }\r\n\r\n transformDatabaseObject(database: any) {\r\n return {\r\n tableName: database.tableName,\r\n valueField: database.valueField,\r\n labelField: database.labelField,\r\n labelPattern: database?.labelPattern,\r\n criteria: database.criteria.map((criteria: any) => ({\r\n field: criteria?.field,\r\n valueSource: criteria?.valueSource,\r\n condition: criteria?.condition,\r\n value: criteria?.inputValue,\r\n logicalOperator: criteria?.logicalOperator,\r\n })),\r\n };\r\n }\r\n\r\n fetchDataFromAPI() {\r\n const allowedChars = ['.', ',', '-', '_', '(', ')', ''];\r\n const apiConfig = this.api;\r\n this.formService.fetchDataFromExternalAPI(apiConfig).subscribe(\r\n (response) => {\r\n let data;\r\n if (apiConfig.pathToValue) {\r\n data = this.extractDataByPath(response, apiConfig.pathToValue);\r\n } else {\r\n data = response;\r\n }\r\n\r\n this.customOptions = data.map((item: any) => {\r\n if (\r\n apiConfig.labelPattern &&\r\n Array.isArray(apiConfig.labelPattern) &&\r\n apiConfig.labelPattern.length > 0\r\n ) {\r\n let label = '';\r\n apiConfig.labelPattern.forEach((pattern: string) => {\r\n pattern = pattern.trim();\r\n if (allowedChars.includes(pattern)) {\r\n label += pattern;\r\n } else {\r\n if (item[pattern] !== undefined && item[pattern] !== null) {\r\n label += item[pattern] + ' ';\r\n }\r\n }\r\n });\r\n return {\r\n value: item[apiConfig.valueField.trim()],\r\n label: label,\r\n };\r\n } else {\r\n return {\r\n value: item[apiConfig.valueField.trim()],\r\n label: item[apiConfig.labelField.trim()],\r\n };\r\n }\r\n });\r\n if (this.question.answer) {\r\n this.initializeCustomOption();\r\n }\r\n },\r\n (error) => {\r\n console.error('HTTP Error:', error);\r\n }\r\n );\r\n }\r\n\r\n extractDataByPath(data: any, path: string) {\r\n return path.split('.').reduce((acc, part) => acc && acc[part], data);\r\n }\r\n\r\n isMinimumSelectionValid() {\r\n this.validationFailed = false;\r\n\r\n if (this.selectedOptions.length == 0 && this.required) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationFailed = true;\r\n this.validationMessage = 'This is a required question';\r\n this.question.validationMessage = 'This is a required question';\r\n this.question.validation = false;\r\n } else if (this.minimumSelection !== undefined) {\r\n if (this.selectionType == 'SINGLE') {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n if (\r\n this.selectedOptions.length < this.minimumSelection &&\r\n this.required\r\n ) {\r\n this.validationFailed = true;\r\n this.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;\r\n this.question.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;\r\n this.question.validation = false;\r\n } else {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.question.validation = true;\r\n }\r\n } else {\r\n if (this.selectedOptions.length < this.minimumSelection) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationFailed = true;\r\n this.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;\r\n this.question.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;\r\n this.question.validation = false;\r\n } else {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.question.validation = true;\r\n }\r\n }\r\n } else {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.question.validation = true;\r\n }\r\n }\r\n\r\n getOptions() {\r\n if (this.optionType === 'OPTION') {\r\n return this.customOptions;\r\n } else if (this.optionType === 'LOOKUP') {\r\n return Object.values(this.lookupTable);\r\n } else if (this.optionType === 'API') {\r\n return this.apiOptions.map((option) => option.valueField);\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n isOptionDisabled(option: any): boolean {\r\n return (\r\n this.maximumSelection !== undefined &&\r\n this.selectedOptions.length >= this.maximumSelection &&\r\n !this.selectedOptions.includes(option)\r\n );\r\n }\r\n\r\n handleValidation(\r\n isValid: boolean,\r\n message: string = 'This field is required'\r\n ) {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return this.inLine || this.inCard\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n\r\n this.tracker.registerElement(this.elementId);\r\n setTimeout(() => {\r\n this.whenClauseService.markLoadCompleted();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-3\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div\r\n class=\"checkboxField-container\"\r\n [class.two-column]=\"displayOptionsInColumn\"\r\n >\r\n <div class=\"form-check\" *ngFor=\"let option of customOptions\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n [id]=\"question.id+'-'+rowId+'-'+option.value\"\r\n [name]=\"option.value + 'Checkbox'\"\r\n [value]=\"option.value\"\r\n (change)=\"onCheckboxChange(option, $event)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n [checked]=\"selectedOptions.includes(option)\"\r\n [attr.data-value]=\"selectedOptions.includes(option)\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <label\r\n class=\"formCheckLabel me-4 mb-2\"\r\n [for]=\"question.id+'-'+rowId+'-'+option.value\"\r\n >{{ option.label }}</label\r\n >\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"isInvalid && (!inLine || selectedOptions.length === 0)\"\r\n class=\"error-message\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { DatePipe } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport {\r\n BsDatepickerConfig,\r\n BsDatepickerDirective,\r\n} from 'ngx-bootstrap/datepicker';\r\nimport { NgxMaterialTimepickerComponent } from 'ngx-material-timepicker';\r\nimport { Subscription } from 'rxjs';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { ValidationService } from '../../services/validation.service';\r\n\r\n@Component({\r\n selector: 'lib-date-time-fields',\r\n templateUrl: './date-time-fields.component.html',\r\n styleUrls: ['./date-time-fields.component.scss'],\r\n providers: [DatePipe],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DateTimeFieldsComponent {\r\n bsConfig: Partial<BsDatepickerConfig> = {\r\n containerClass: 'theme-custom',\r\n isAnimated: true,\r\n adaptivePosition: true,\r\n showWeekNumbers: false,\r\n };\r\n \r\n rangeBsConfig: Partial<BsDatepickerConfig> = {};\r\n\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n\r\n required: boolean = false;\r\n hint: string = '';\r\n count: number = 0;\r\n minTime: string = '';\r\n maxTime: string = '';\r\n dateType: string = '';\r\n format: string = '';\r\n Dateformat: string = '';\r\n timeFormat: string = '';\r\n minDateOption: string = '';\r\n minDate: Date | undefined;\r\n maxDateOption: string = '';\r\n maxDate: Date | undefined;\r\n todayDate: Date = new Date();\r\n selectedDate: Date | null = null;\r\n selectedTime: string = '';\r\n selectedDateRange: string = '';\r\n selectedDateAndTime: Date | null = null;\r\n validationFailed!: boolean;\r\n timeValidationFailed!: boolean;\r\n validationMessage: string = '';\r\n maxTimeOption: string = '';\r\n minTimeOption: string = '';\r\n @Input() disableEdit: boolean = false;\r\n private elementId: string='';\r\n private timePickerOpened = false;\r\n private subscriptions: Subscription[] = [];\r\n private timePickersOpened: { [key: string]: boolean } = {};\r\n\r\n @ViewChild('datepickerYMD') datepicker!: BsDatepickerDirective;\r\n @ViewChild('daterangepicker') dateRangePicker!: BsDatepickerDirective;\r\n @ViewChild('dateAndTimePicker') dateAndTimePicker!: BsDatepickerDirective;\r\n @ViewChild('fullTime3') fullTime3!: NgxMaterialTimepickerComponent;\r\n @ViewChild('fullTime4') fullTime4!: NgxMaterialTimepickerComponent;\r\n\r\n\r\n constructor(\r\n private datePipe: DatePipe,\r\n private router: Router,\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n this.setRangeConfig();\r\n }\r\n\r\n private setRangeConfig() {\r\n this.rangeBsConfig = {\r\n containerClass: 'theme-custom',\r\n isAnimated: true,\r\n adaptivePosition: true,\r\n showWeekNumbers: false,\r\n dateInputFormat: this.format,\r\n rangeInputFormat: this.format,\r\n displayOneMonthRange: true, // ← only one month if start/end in same month\r\n };\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.dateType = this.question.formElement.appearance.dateType;\r\n this.minDateOption = this.question.formElement.validation.minDateOption;\r\n this.Dateformat = this.question.formElement.appearance.format.replace(\r\n /DD/g,\r\n 'dd'\r\n ).replace(/YYYY/g, 'yyyy');\r\n\r\n this.minDate = this.getMinDate();\r\n\r\n\r\n this.maxDateOption = this.question.formElement.validation.maxDateOption;\r\n this.maxDate = this.getMaxDate();\r\n this.setDateTimeFormat();\r\n if (this.question?.answer && (this.question?.answer).length > 0)\r\n this.selectedDate = this.question?.answer;\r\n this.selectedTime = this.question.answer;\r\n if (this.question?.answer && (this.question?.answer).length > 0)\r\n this.selectedDateAndTime = new Date(this.question.answer);\r\n this.selectedDateRange = this.question.answer;\r\n this.minTimeOption = this.question.formElement.validation.minTimeOption;\r\n this.maxTimeOption = this.question.formElement.validation.maxTimeOption;\r\n if (this.dateType !== 'DATE_AND_TIME') {\r\n this.minTime = this.getMinTime().toString();\r\n this.maxTime = this.getMaxTime().toString();\r\n }\r\n if (this.dateType === 'DATE_AND_TIME' && this.question?.answer) {\r\n const dateTimeArray = this.question.answer\r\n ? this.question.answer.split(',')\r\n : []; // Fallback to an empty array if `this.question.answer` is undefined\r\n\r\n if (dateTimeArray.length === 2) {\r\n const fetchedDate = dateTimeArray[0].trim();\r\n const fetchedTime = dateTimeArray[1].trim();\r\n this.selectedDate = fetchedDate;\r\n this.selectedTime = fetchedTime;\r\n }\r\n\r\n const formattedDate = this.datePipe.transform(\r\n this.selectedDateAndTime,\r\n this.Dateformat\r\n );\r\n const formatteminDate = this.datePipe.transform(\r\n this.minDate,\r\n this.Dateformat\r\n );\r\n const formattemaxDate = this.datePipe.transform(\r\n this.maxDate,\r\n this.Dateformat\r\n );\r\n\r\n if (formattedDate === formatteminDate) {\r\n this.minTime = this.getMinTime().toString();\r\n if (this.timeFormat === '12') {\r\n this.maxTime = '12:00 pm';\r\n } else {\r\n this.maxTime = '23:59';\r\n }\r\n }\r\n if (formattedDate === formattemaxDate) {\r\n this.maxTime = this.getMaxTime().toString();\r\n if (this.timeFormat === '12') {\r\n this.minTime = '12:00 am';\r\n } else {\r\n this.minTime = '00:00';\r\n }\r\n }\r\n if (\r\n formattedDate !== formatteminDate &&\r\n formattedDate !== formattemaxDate\r\n ) {\r\n if (this.timeFormat === '12') {\r\n this.minTime = '12:00 am';\r\n this.maxTime = '12:00 pm';\r\n } else {\r\n this.minTime = '00:00';\r\n this.maxTime = '23:59';\r\n }\r\n }\r\n }\r\n\r\n if (!this.minTime || this.minTime.length === 0) {\r\n if (this.timeFormat === '12') {\r\n this.minTime = '12:00 am';\r\n } else {\r\n this.minTime = '00:00';\r\n }\r\n }\r\n\r\n if (!this.maxTime || this.maxTime.length === 0) {\r\n if (this.timeFormat === '12') {\r\n this.maxTime = '11:59 pm';\r\n } else {\r\n this.maxTime = '23:59';\r\n }\r\n }\r\n }\r\n\r\n setDateTimeFormat() {\r\n switch (this.dateType) {\r\n case 'DATE_ONLY':\r\n this.format = this.question.formElement.appearance.format;\r\n break;\r\n case 'TIME_ONLY':\r\n this.timeFormat = this.question.formElement.appearance.timeFormat;\r\n break;\r\n case 'DATE_AND_TIME':\r\n this.format = this.question.formElement.appearance.format;\r\n this.timeFormat = this.question.formElement.appearance.timeFormat;\r\n break;\r\n case 'DATE_RANGE':\r\n this.format = this.question.formElement.appearance.format;\r\n break;\r\n case 'MONTH_YEAR':\r\n this.format = this.question.formElement.appearance.format;\r\n break\r\n default:\r\n this.format = 'DD/MM/YYYY';\r\n }\r\n }\r\n\r\n getMinDate(): Date | undefined {\r\n if (this.minDateOption === 'CURRENT_DATE') {\r\n return this.todayDate;\r\n } else if (this.minDateOption === 'CUSTOM') {\r\n return new Date(this.question.formElement.validation.minDate);\r\n }\r\n else if(this.dateType==='MONTH_YEAR')\r\n {\r\n const minDateStr = this.question.formElement.validation.minDate;\r\n const year = new Date(minDateStr).getFullYear(); \r\n return new Date(year, 0, 1);\r\n \r\n }\r\n return undefined; // Return undefined if no valid option\r\n }\r\n\r\n getMaxDate(): Date | undefined {\r\n if (this.maxDateOption === 'CURRENT_DATE') {\r\n return this.todayDate;\r\n } else if (this.maxDateOption === 'CUSTOM') {\r\n return new Date(this.question.formElement.validation.maxDate);\r\n }\r\n else if(this.dateType==='MONTH_YEAR')\r\n {\r\n const minDateStr = this.question.formElement.validation.maxDate;\r\n const year = new Date(minDateStr).getFullYear(); // Extracts the year\r\n return new Date(year, 11, 31); \r\n \r\n }\r\n return undefined;\r\n }\r\n\r\n getMinTime() {\r\n if (this.minTimeOption) {\r\n const format = this.timeFormat === '24' ? 'HH:mm' : 'hh:mm a';\r\n\r\n if (this.minTimeOption === 'CURRENT_TIME') {\r\n const now = new Date();\r\n return this.datePipe.transform(now, format) || '';\r\n } else if (this.minTimeOption === 'CUSTOM') {\r\n const customTime = this.question.formElement.validation.minTime;\r\n const [hours, minutes] = customTime.split(':'); // Split by colon to get hours and minutes\r\n\r\n // Create a Date object with a fixed date and custom time\r\n const customDate = new Date();\r\n customDate.setHours(parseInt(hours, 10), parseInt(minutes, 10), 0, 0); // Set hours and minutes\r\n\r\n return this.datePipe.transform(customDate, format) || '';\r\n }\r\n }\r\n\r\n // Ensure a default return if no condition is met\r\n return '';\r\n }\r\n\r\n getMaxTime() {\r\n if (this.maxTimeOption) {\r\n const format = this.timeFormat === '24' ? 'HH:mm' : 'hh:mm a';\r\n if (this.maxTimeOption === 'CURRENT_TIME') {\r\n const now = new Date();\r\n return this.datePipe.transform(now, format) || '';\r\n } else if (this.maxTimeOption === 'CUSTOM') {\r\n const customTime = this.question.formElement.validation.maxTime;\r\n const [hours, minutes] = customTime.split(':'); // Split by colon to get hours and minutes\r\n\r\n // Create a Date object with a fixed date and custom time\r\n const customDate = new Date();\r\n customDate.setHours(parseInt(hours, 10), parseInt(minutes, 10), 0, 0); // Set hours and minutes\r\n\r\n return this.datePipe.transform(customDate, format) || '';\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n openDatePicker() {\r\n this.datepicker.toggle();\r\n }\r\n\r\n openDateRangePicker() {\r\n this.dateRangePicker.toggle();\r\n }\r\n\r\n openDateAndTimePicker() {\r\n this.dateAndTimePicker.toggle();\r\n }\r\n\r\n closeDatepicker() {\r\n if (this.dateAndTimePicker) {\r\n this.dateAndTimePicker.hide(); // Close the datepicker\r\n }\r\n }\r\n\r\n validateField() {\r\n if (this.dateType === 'DATE_ONLY' || this.dateType === 'MONTH_YEAR') {\r\n if (this.selectedDate) {\r\n this.question.answer = this.formatDate(this.selectedDate.toString());\r\n } else {\r\n this.question.answer = '';\r\n }\r\n\r\n this.validateDateOnly();\r\n } else if (this.dateType === 'TIME_ONLY') {\r\n this.question.answer = String(this.selectedTime);\r\n this.validateTimeOnly();\r\n } else if (this.dateType === 'DATE_AND_TIME') {\r\n if (this.selectedDateAndTime) {\r\n this.question.answer = this.formatDate(\r\n this.selectedDateAndTime.toString()\r\n );\r\n } else {\r\n this.question.answer = '';\r\n }\r\n\r\n this.validateDateAndTime();\r\n } else {\r\n this.question.answer = this.formatDate(this.selectedDateRange);\r\n this.validateDateRange();\r\n }\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n }\r\n\r\n formatDate(date: string | Date, type: string = 'dateTime'): string {\r\n switch (this.dateType) {\r\n case 'DATE_ONLY':\r\n return this.datePipe.transform(this.selectedDate, this.Dateformat) || '';\r\n \r\n case 'MONTH_YEAR': \r\n const extracted = this.extractMonthYear(this.selectedDate?.toString());\r\n \r\n if (!extracted) {\r\n console.error(\"Invalid date format\");\r\n return '';\r\n }\r\n \r\n // Create a Date object with the extracted month and year\r\n this.selectedDate = new Date(extracted.year, extracted.month - 1, 1); // Month is 0-based in JS\r\n \r\n // Return formatted date\r\n return this.datePipe.transform(this.selectedDate, this.Dateformat) || '';\r\n \r\n \r\n // return this.datePipe.transform(this.selectedDate, this.Dateformat) || '';\r\n case 'DATE_AND_TIME':\r\n const formattedDate = this.datePipe.transform(\r\n this.selectedDateAndTime,\r\n this.Dateformat\r\n );\r\n const formatteminDate = this.datePipe.transform(\r\n this.minDate,\r\n this.Dateformat\r\n );\r\n const formattemaxDate = this.datePipe.transform(\r\n this.maxDate,\r\n this.Dateformat\r\n );\r\n\r\n if (formattedDate === formatteminDate) {\r\n this.minTime = this.getMinTime().toString();\r\n this.maxTime = this.timeFormat === '12' ? '11:59 pm' : '23:59';\r\n }\r\n\r\n if (formattedDate === formattemaxDate) {\r\n this.maxTime = this.getMaxTime().toString();\r\n this.minTime = this.timeFormat === '12' ? '12:00 am' : '00:00';\r\n }\r\n\r\n if (\r\n formattedDate !== formatteminDate &&\r\n formattedDate !== formattemaxDate\r\n ) {\r\n this.minTime = this.timeFormat === '12' ? '12:00 am' : '00:00';\r\n this.maxTime = this.timeFormat === '12' ? '11:59 pm' : '23:59';\r\n }\r\n\r\n const formattedTime = this.selectedTime || ''; // Ensure selectedTime is handled properly\r\n if (formattedDate && formattedTime) {\r\n return `${formattedDate}, ${formattedTime}`;\r\n }\r\n return '';\r\n case 'DATE_RANGE':\r\n const dates = date as unknown as Date[];\r\n\r\n // Ensure dates is defined and is an array\r\n if (Array.isArray(dates) && dates.length === 2) {\r\n const start = this.datePipe.transform(dates[0], this.Dateformat);\r\n const end = this.datePipe.transform(dates[1], this.Dateformat);\r\n return `${start} - ${end}`;\r\n }\r\n\r\n return '';\r\n default:\r\n return this.datePipe.transform(date, this.Dateformat) || '';\r\n }\r\n }\r\n\r\nextractMonthYear(dateInput: string | Date | null | undefined): { month: number, year: number } | null {\r\n if (!dateInput) {\r\n return null;\r\n }\r\n\r\n // Handle string case where date is passed as a stringified Date object\r\n if (typeof dateInput === \"string\") {\r\n const parsedDate = new Date(dateInput);\r\n if (!isNaN(parsedDate.getTime())) {\r\n return { month: parsedDate.getMonth() + 1, year: parsedDate.getFullYear() };\r\n }\r\n\r\n // Handle string formats like \"MM/YYYY\" or \"YYYY/MM\"\r\n const parts = dateInput.split(/[-/]/); // Split by '-' or '/'\r\n if (parts.length !== 2) {\r\n return null; // Invalid format\r\n }\r\n\r\n let year = 0, month = 0;\r\n\r\n\r\n if (parts[0].length === 4) {\r\n // Format: YYYY/MM or YYYY-MM\r\n year = parseInt(parts[0], 10);\r\n month = parseInt(parts[1], 10);\r\n } else {\r\n // Format: MM/YYYY or MM-YYYY\r\n month = parseInt(parts[0], 10);\r\n year = parseInt(parts[1], 10);\r\n }\r\n\r\n return { month, year };\r\n }\r\n\r\n // Handle actual Date object case\r\n if (dateInput instanceof Date && !isNaN(dateInput.getTime())) {\r\n return { month: dateInput.getMonth() + 1, year: dateInput.getFullYear() };\r\n }\r\n\r\n return null; // Invalid input\r\n}\r\n\r\n\r\n \r\n validateDateOnly() {\r\n this.validationFailed = false;\r\n this.validationMessage = '';\r\n if (this.required && !this.selectedDate) {\r\n this.validationFailed = true;\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationMessage = 'This is a required question';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'This is a required question';\r\n } else {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.question.validation = true;\r\n }\r\n }\r\n validateTimeOnly() {\r\n this.validationFailed = false;\r\n this.validationMessage = '';\r\n if (this.required && !this.selectedTime) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationFailed = true;\r\n this.validationMessage = 'This is a required question';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'This is a required question';\r\n } else {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.question.validation = true;\r\n }\r\n }\r\n validateDateRange() {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationFailed = false;\r\n this.validationMessage = '';\r\n if (this.required && !this.selectedDateRange) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'This is a required question';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'This is a required question';\r\n } else {\r\n this.question.validation = true;\r\n }\r\n }\r\n validateDateAndTime() {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationFailed = false;\r\n this.timeValidationFailed = false;\r\n this.validationMessage = '';\r\n if (this.required && !this.selectedDateAndTime) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'This is a required question';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'This is a required question';\r\n } else if (this.required && !this.selectedTime) {\r\n this.timeValidationFailed = true;\r\n this.validationMessage = 'This is a required question';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'This is a required question';\r\n } else {\r\n this.question.validation = true;\r\n }\r\n }\r\n\r\n convertToISODate(\r\n dateInput: [number, number, number] | string | null | undefined\r\n ): Date | null {\r\n if (!dateInput) {\r\n return null; // Return null if dateInput is null, undefined, or any falsy value\r\n }\r\n\r\n let year, month, day;\r\n\r\n if (Array.isArray(dateInput)) {\r\n // Extract year, month, and day from array input\r\n [year, month, day] = dateInput;\r\n\r\n // Validate the array format\r\n if (\r\n typeof year !== 'number' ||\r\n typeof month !== 'number' ||\r\n typeof day !== 'number' ||\r\n isNaN(year) ||\r\n isNaN(month) ||\r\n isNaN(day) ||\r\n !Number.isInteger(year) ||\r\n !Number.isInteger(month) ||\r\n !Number.isInteger(day) ||\r\n month < 1 ||\r\n month > 12 ||\r\n day < 1 ||\r\n day > 31\r\n ) {\r\n return null;\r\n }\r\n } else if (typeof dateInput === 'string') {\r\n // Check if the string matches the YYYY-MM-DD format\r\n const dateParts = dateInput.split('-');\r\n if (dateParts.length !== 3) return null;\r\n\r\n [year, month, day] = dateParts.map(Number);\r\n\r\n // Validate the parsed parts\r\n if (\r\n isNaN(year) ||\r\n isNaN(month) ||\r\n isNaN(day) ||\r\n !Number.isInteger(year) ||\r\n !Number.isInteger(month) ||\r\n !Number.isInteger(day) ||\r\n month < 1 ||\r\n month > 12 ||\r\n day < 1 ||\r\n day > 31\r\n ) {\r\n return null;\r\n }\r\n } else {\r\n return null; // Unsupported input type\r\n }\r\n\r\n // Create a Date object (month is 0-based, so subtract 1)\r\n const date = new Date(year, month - 1, day);\r\n\r\n // Verify if the Date object matches the provided year, month, and day\r\n if (\r\n date.getFullYear() !== year ||\r\n date.getMonth() !== month - 1 ||\r\n date.getDate() !== day\r\n ) {\r\n return null;\r\n }\r\n\r\n return date;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.initializeTimePickers();\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n \r\n this.tracker.registerElement(this.elementId);\r\n\r\n if (this.subscriptions.length === 0) {\r\n const routerSub = this.router.events.subscribe((event) => {\r\n if (event instanceof NavigationEnd) {\r\n this.closeTimepickers();\r\n }\r\n });\r\n this.subscriptions.push(routerSub);\r\n }\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n // Ensure time picker subscriptions are attached even after conditional rendering\r\n this.initializeTimePickers();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.closeTimepickers();\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n // Unsubscribe from all subscriptions\r\n this.subscriptions.forEach((sub) => {\r\n if (sub && typeof sub.unsubscribe === 'function') {\r\n sub.unsubscribe();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialize and track time pickers\r\n */\r\n private initializeTimePickers(): void {\r\n // Track fullTime3 if available\r\n if (this.fullTime3 && !this.timePickersOpened['fullTime3']) {\r\n this.trackTimePicker(this.fullTime3, 'fullTime3');\r\n }\r\n\r\n // Track fullTime4 if it exists after conditional rendering\r\n if (this.fullTime4 && !this.timePickersOpened['fullTime4']) {\r\n this.trackTimePicker(this.fullTime4, 'fullTime4');\r\n }\r\n }\r\n\r\n private trackTimePicker(picker: NgxMaterialTimepickerComponent, pickerName: string): void {\r\n if (picker) {\r\n const sub = picker.opened.subscribe(() => {\r\n this.timePickersOpened[pickerName] = true; \r\n });\r\n\r\n this.subscriptions.push(sub);\r\n }\r\n }\r\n\r\n private closeTimepickers(): void {\r\n if (this.fullTime3 && this.timePickersOpened['fullTime3'] && typeof this.fullTime3.close === 'function') {\r\n this.fullTime3.close();\r\n this.timePickersOpened['fullTime3'] = false;\r\n }\r\n\r\n // Check for fullTime4 only if it exists\r\n if (this.fullTime4 && this.timePickersOpened['fullTime4'] && typeof this.fullTime4.close === 'function') {\r\n this.fullTime4.close();\r\n this.timePickersOpened['fullTime4'] = false;\r\n }\r\n }\r\n\r\n handleValidation(isValid: boolean, message: string = 'This field is required') {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return (this.inLine || this.inCard)\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"dateType === 'DATE_ONLY'\">\r\n <!-- Date only picker -->\r\n <div class=\"input-container\">\r\n <input\r\n class=\"form-control height\"\r\n #datepickerYMD=\"bsDatepicker\"\r\n bsDatepicker\r\n [minDate]=\"minDate ? minDate : undefined\"\r\n [maxDate]=\"maxDate ? maxDate : undefined\"\r\n [bsConfig]=\"{ dateInputFormat: format, containerClass: 'theme-custom' }\"\r\n [(ngModel)]=\"selectedDate\"\r\n (blur)=\"validateField()\"\r\n (ngModelChange)=\"validateField()\"\r\n [class.invalid]=\"validationFailed\"\r\n placeholder=\"Select date\"\r\n container=\"body\"\r\n placement=\"top\"\r\n [class.invalid-question]=\"isInvalid && (!inLine || !selectedDate)\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <i\r\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\r\n (click)=\"openDatePicker()\"\r\n ></i>\r\n </div>\r\n <div *ngIf=\"isInvalid && (!inLine || !selectedDate)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mt-2\">\r\n {{ validationMessage }}\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dateType === 'MONTH_YEAR'\">\r\n <div class=\"input-container\">\r\n <input\r\n class=\"form-control height\"\r\n #datepickerYMD=\"bsDatepicker\"\r\n bsDatepicker\r\n [minDate]=\"minDate ? minDate : undefined\"\r\n [maxDate]=\"maxDate ? maxDate : undefined\"\r\n [bsConfig]=\"{\r\n containerClass: 'theme-dark-blue',\r\n isAnimated: true,\r\n adaptivePosition: true,\r\n showWeekNumbers: false,\r\n minMode: 'month',\r\n dateInputFormat: format\r\n }\"\r\n [(ngModel)]=\"selectedDate\"\r\n (blur)=\"validateField()\"\r\n (ngModelChange)=\"validateField()\"\r\n [class.invalid]=\"validationFailed\"\r\n placeholder=\"Select date\"\r\n container=\"body\"\r\n placement=\"top\"\r\n [class.invalid-question]=\"isInvalid && (!inLine || !selectedDate)\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <i\r\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\r\n (click)=\"openDatePicker()\"\r\n ></i>\r\n </div>\r\n <div *ngIf=\"isInvalid && (!inLine || !selectedDate)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mt-2\">\r\n {{ validationMessage }}\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dateType === 'TIME_ONLY'\">\r\n <!-- Time picker -->\r\n\r\n <div class=\"input-container\">\r\n <input\r\n class=\"form-control height appearanceInput mt-3\"\r\n aria-label=\"Select time\"\r\n placeholder=\"Select time\"\r\n readonly\r\n [format]=\"timeFormat === '24' ? 24 : 12\"\r\n [ngxTimepicker]=\"fullTime3\"\r\n [(ngModel)]=\"selectedTime\"\r\n [max]=\"maxTime\"\r\n [min]=\"minTime\"\r\n (ngModelChange)=\"validateField()\"\r\n [class.invalid]=\"validationFailed\"\r\n [class.invalid-question]=\"isInvalid && (!inLine || !selectedTime)\"\r\n container=\"body\"\r\n placement=\"top\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n\r\n <i\r\n id=\"startDateIcon\"\r\n class=\"fa-solid fa-clock text-primary fs-6 clock-icon\"\r\n (click)=\"fullTime3.open()\"\r\n style=\"cursor: pointer\"\r\n ></i>\r\n <ngx-material-timepicker #fullTime3></ngx-material-timepicker>\r\n </div>\r\n <div *ngIf=\"isInvalid && (!inLine || !selectedTime)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mt-2\">\r\n {{ validationMessage }}\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dateType === 'DATE_AND_TIME'\">\r\n <!-- Date and time picker -->\r\n <div class=\"input-container\">\r\n <input\r\n #dateAndTimePicker=\"bsDatepicker\"\r\n type=\"text\"\r\n class=\"form-control height\"\r\n [minDate]=\"minDate ? minDate : undefined\"\r\n [maxDate]=\"maxDate ? maxDate : undefined\"\r\n [bsConfig]=\"{\r\n dateInputFormat: format,\r\n containerClass: 'theme-custom'\r\n }\"\r\n placeholder=\"Select date\"\r\n container=\"body\"\r\n placement=\"top\"\r\n bsDatepicker\r\n [class.invalid]=\"validationFailed\"\r\n [(ngModel)]=\"selectedDateAndTime\"\r\n (blur)=\"validateField()\"\r\n (ngModelChange)=\"validateField()\"\r\n [class.invalid-question]=\"isInvalid\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <i\r\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\r\n (click)=\"openDateAndTimePicker()\"\r\n ></i>\r\n </div>\r\n <div\r\n class=\"input-container\"\r\n *ngIf=\"selectedDateAndTime && selectedDateAndTime != null\"\r\n >\r\n <input\r\n class=\"form-control height appearanceInput mt-3\"\r\n aria-label=\"Select time\"\r\n placeholder=\"Select time\"\r\n readonly\r\n [format]=\"timeFormat === '24' ? 24 : 12\"\r\n [ngxTimepicker]=\"fullTime4\"\r\n [(ngModel)]=\"selectedTime\"\r\n [max]=\"maxTime\"\r\n [min]=\"minTime\"\r\n (ngModelChange)=\"validateField()\"\r\n (focus)=\"closeDatepicker()\"\r\n [class.invalid]=\"timeValidationFailed\"\r\n [class.invalid-question]=\"isInvalid && (!inLine || !selectedTime)\"\r\n container=\"body\"\r\n placement=\"top\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n\r\n <i\r\n id=\"startDateIcon\"\r\n class=\"fa-solid fa-clock text-primary fs-6 clock-icon\"\r\n (click)=\"fullTime4.open()\"\r\n style=\"cursor: pointer\"\r\n ></i>\r\n <ngx-material-timepicker #fullTime4></ngx-material-timepicker>\r\n </div>\r\n <!-- <div *ngIf=\"isInvalid\" class=\"error-message\"> -->\r\n <div *ngIf=\"isInvalid && (!inLine || !selectedTime)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div\r\n *ngIf=\"(validationFailed || timeValidationFailed) && !isInvalid\"\r\n class=\"text-danger mt-2\"\r\n >\r\n {{ validationMessage }}\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dateType === 'DATE_RANGE'\">\r\n <!-- Date range picker -->\r\n <div class=\"input-container\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control height\"\r\n #daterangepicker=\"bsDaterangepicker\"\r\n bsDaterangepicker\r\n placeholder=\"Select date\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n [bsConfig]=\"{\r\n rangeInputFormat: format,\r\n dateInputFormat: format,\r\n containerClass: 'theme-custom',\r\n displayOneMonthRange: true\r\n }\"\r\n [(ngModel)]=\"selectedDateRange\"\r\n (blur)=\"validateField()\"\r\n (ngModelChange)=\"validateField()\"\r\n [class.invalid]=\"validationFailed\"\r\n [class.invalid-question]=\"isInvalid && (!inLine || !selectedDateRange)\"\r\n container=\"body\"\r\n placement=\"top\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <i\r\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\r\n (click)=\"openDateRangePicker()\"\r\n ></i>\r\n </div>\r\n <div *ngIf=\"isInvalid && (!inLine || !selectedDateRange)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mt-2\">\r\n {{ validationMessage }}\r\n </div>\r\n </ng-container>\r\n</div>\r\n","import { Logic } from './../../models/logic.model';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport { FormService } from '../../services/form.service';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { ScoreCalculationService } from '../../services/score.service';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\n\r\ninterface DropDownData {\r\n value: string;\r\n label: string;\r\n image: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-drop-down-fields',\r\n templateUrl: './drop-down-fields.component.html',\r\n styleUrls: ['./drop-down-fields.component.scss'],\r\n})\r\nexport class DropDownFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{\r\n answer: any;\r\n maxPossibleScore?: number;\r\n }>();\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n selectionType: string = '';\r\n minimumSelection: number = 0;\r\n maximumSelection: number = 0;\r\n optionType: string = '';\r\n lookupTable: string = '';\r\n customOptions: DropDownData[] = [];\r\n originalOptions: DropDownData[] = [];\r\n database: any = {};\r\n api: any = {};\r\n originalApi: any = {};\r\n selectedValue: any[] = [];\r\n validationFailed!: boolean;\r\n validationMessage: string = '';\r\n private elementId: string = '';\r\n hasMoreData: boolean = true;\r\n maxPossibleScore?: number;\r\n selectedValues: any[] = [];\r\n dbPageIndex: number = 0;\r\n dbPageSize: number = 10;\r\n dbTotalPages: number = 0;\r\n @Input() disableEdit: boolean = false;\r\n\r\n constructor(\r\n private formService: FormService,\r\n private cdr: ChangeDetectorRef,\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService,\r\n private scoreCalcService: ScoreCalculationService,\r\n private whenClauseService:WhenClauseService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n onValueChange(newValue: any) {\r\n this.selectedValue = newValue;\r\n this.selectItems();\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.selectionType = this.question.formElement.appearance.selectionType;\r\n this.minimumSelection =\r\n this.question.formElement.validation.minimumSelection;\r\n this.maximumSelection =\r\n this.question.formElement.validation.maximumSelection;\r\n this.optionType = this.question.formElement.option.optionType;\r\n\r\n // --- Check if answer is present ---\r\n if (this.question.answer && Array.isArray(this.question.answer)) {\r\n if (this.optionType === 'API') {\r\n this.api = this.question.formElement.option.api;\r\n this.originalApi = JSON.parse(JSON.stringify(this.api));\r\n // ✅ Check if pagination is enabled (pageIndex + pageSize exist in params with valueSource)\r\n const hasPagination =\r\n this.api?.params?.some((p: any) => p.valueSource === 'PAGE_INDEX') &&\r\n this.api?.params?.some((p: any) => p.valueSource === 'PAGE_SIZE');\r\n\r\n if (hasPagination) {\r\n // ✅ Populate selected values from answer\r\n this.selectedValues = this.question.answer.map((ans: string) => {\r\n const parts = ans.split('|');\r\n return parts.length > 1 ? parts[1] : parts[0];\r\n });\r\n }\r\n }\r\n\r\n else if (this.optionType === 'DATABASE') {\r\n this.selectedValues = this.question.answer.map((ans: string) => {\r\n const parts = ans.split('|');\r\n return parts.length > 1 ? parts[1] : parts[0];\r\n })};\r\n }\r\n\r\n\r\n // --- Handle different option types ---\r\n switch (this.optionType) {\r\n case 'OPTION':\r\n this.customOptions = this.question.formElement.option.customOptions.map(\r\n (option: { value: string }) => ({\r\n label: option.value,\r\n value: option.value,\r\n image: '',\r\n })\r\n );\r\n this.originalOptions = [...this.customOptions];\r\n if (this.question.answer) {\r\n this.initializeCustomOption();\r\n }\r\n break;\r\n\r\n case 'LOOKUP':\r\n this.lookupTable = this.question.formElement.option.lookupTable;\r\n this.fetchDataFromLookup();\r\n break;\r\n\r\n case 'DATABASE':\r\n this.database = this.question.formElement.option.database;\r\n this.fetchDataFromDatabase();\r\n break;\r\n\r\n case 'API':\r\n if (!this.api || Object.keys(this.api).length === 0) {\r\n this.api = this.question.formElement.option.api;\r\n this.originalApi = JSON.parse(JSON.stringify(this.api));\r\n }\r\n this.fetchDataFromAPI();\r\n break;\r\n\r\n default:\r\n console.warn('Unknown option type:', this.optionType);\r\n }\r\n\r\n // --- Scoring ---\r\n if (\r\n this.question.formElement.scoring &&\r\n this.question.formElement.scoring.enableScoring\r\n ) {\r\n this.maxPossibleScore =\r\n this.scoreCalcService.getMaxPossibleScoreForQuestion(this.question);\r\n this.question.maxPossibleScore = this.maxPossibleScore;\r\n }\r\n }\r\n\r\n initializeCustomOption() {\r\n\r\n this.customOptions.forEach((option: any) => {\r\n const isMatch = this.question?.answer?.some((a: any) => {\r\n const parts = a.trim().split('|');\r\n if (parts.length === 2) {\r\n const label = parts[0];\r\n const value = parts[1];\r\n return value == option.value && label == option.label;\r\n } else {\r\n return false;\r\n }\r\n });\r\n if (isMatch) {\r\n const alreadyExists = this.selectedValue.some(\r\n (item: any) => item.value === option.value\r\n );\r\n\r\n if (!alreadyExists) {\r\n this.selectedValue = [...this.selectedValue, option];\r\n }\r\n\r\n setTimeout(() => {\r\n const answers = Array.isArray(this.question.answer) ? this.question.answer : [];\r\n const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);\r\n this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers,true);\r\n });\r\n }\r\n if (this.question.childLogics && this.question.answer) {\r\n this.updateChildLogics(this.question);\r\n }\r\n });\r\n\r\n this.cdr.detectChanges();\r\n }\r\n\r\n transformDatabaseObject(database: any,selectedValues:string[]=[]) {\r\n return {\r\n tableName: database.tableName,\r\n valueField: database.valueField,\r\n labelField: database.labelField,\r\n labelPattern: database?.labelPattern,\r\n selectedValues: selectedValues,\r\n criteria: database.criteria.map((criteria: any) => ({\r\n field: criteria.field,\r\n valueSource: criteria?.valueSource,\r\n condition: criteria.condition,\r\n value: criteria.inputValue,\r\n logicalOperator: criteria.logicalOperator,\r\n })),\r\n };\r\n }\r\n\r\n fetchDataFromDatabase(searchString:string='') {\r\n const value= this.question?.answer?.map((a: string) => {\r\n const [label, value] = a.split('|');\r\n return {\r\n label,\r\n value\r\n };\r\n })\r\n const transformedDatabase = this.transformDatabaseObject(this.database,value);\r\n this.formService.fetchDataFromDatabase(transformedDatabase,this.dbPageIndex,this.dbPageSize,searchString,true).subscribe(\r\n (response) => {\r\n if (response.success) {\r\n this.dbTotalPages = response.result.totalPages;\r\n const newOptions =\r\n response.result?.content?.map(\r\n (item: { value: string; label: string }) => ({\r\n value: item.value,\r\n label: item.label,\r\n })\r\n ) || [];\r\n if (this.dbPageIndex === 0) {\r\n this.customOptions = [...newOptions];\r\n }\r\n else {\r\n this.customOptions = [\r\n ...this.customOptions,\r\n ...newOptions,\r\n ];\r\n }\r\n\r\n\r\n this.originalOptions = [...this.customOptions];\r\n\r\n if (this.question.answer) {\r\n this.initializeCustomOption();\r\n }\r\n } else {\r\n console.error('Error fetching data from database:', response.message);\r\n }\r\n this.cdr.detectChanges();\r\n },\r\n (error) => {\r\n console.error('HTTP Error:', error);\r\n this.cdr.detectChanges();\r\n }\r\n );\r\n }\r\n\r\n fetchDataFromLookup() {\r\n this.formService.fetchDataFromLookup(this.lookupTable).subscribe(\r\n (response) => {\r\n this.customOptions = response.result.values.map(\r\n (item: { value: string; label: string }) => ({\r\n value: item.value,\r\n label: item.label,\r\n })\r\n );\r\n this.originalOptions = [...this.customOptions];\r\n if (this.question.answer) {\r\n this.initializeCustomOption();\r\n }\r\n },\r\n (error) => {\r\n console.error('HTTP Error:', error);\r\n }\r\n );\r\n }\r\n\r\n fetchDataFromAPI(append: boolean = false, search: boolean = false) {\r\n const apiConfig = JSON.parse(JSON.stringify(this.api));\r\n if (!this.hasMoreData && append) {\r\n // If no more data from last call and this is an append call, skip API\r\n return;\r\n }\r\n const allowedChars = ['.', ',', '-', '_', '(', ')', ''];\r\n\r\n if (search) {\r\n if (apiConfig.params) {\r\n apiConfig.params = apiConfig.params.filter(\r\n (p: any) => p.valueSource !== 'SELECTED_VALUES'\r\n );\r\n }\r\n if (apiConfig.headers) {\r\n apiConfig.headers = apiConfig.headers.filter(\r\n (h: any) => h.valueSource !== 'SELECTED_VALUES'\r\n );\r\n }\r\n }\r\n\r\n this.formService\r\n .fetchDataFromExternalAPI(apiConfig, this.selectedValues)\r\n .subscribe(\r\n (response) => {\r\n let data;\r\n if (apiConfig.pathToValue) {\r\n data = this.extractDataByPath(response, apiConfig.pathToValue);\r\n } else {\r\n data = response;\r\n }\r\n\r\n const newOptions = data.map((item: any) => {\r\n if (\r\n apiConfig.labelPattern &&\r\n Array.isArray(apiConfig.labelPattern) &&\r\n apiConfig.labelPattern.length > 0\r\n ) {\r\n let label = '';\r\n apiConfig.labelPattern.forEach((pattern: string) => {\r\n pattern = pattern.trim();\r\n if (allowedChars.includes(pattern)) {\r\n label += pattern;\r\n } else {\r\n if (item[pattern] !== undefined && item[pattern] !== null) {\r\n label += item[pattern]+' ';\r\n }\r\n }\r\n });\r\n return {\r\n value: item[apiConfig.valueField.trim()],\r\n label: label,\r\n };\r\n } else {\r\n return {\r\n value: item[apiConfig.valueField.trim()],\r\n label: item[apiConfig.labelField.trim()],\r\n };\r\n }\r\n });\r\n\r\n if (append) {\r\n this.customOptions = [...this.customOptions, ...newOptions];\r\n } else {\r\n this.customOptions = newOptions;\r\n }\r\n this.originalOptions = [...this.customOptions];\r\n\r\n // If no new data returned, mark as last page\r\n if (!newOptions.length) {\r\n this.hasMoreData = false;\r\n }\r\n\r\n if (this.question.answer && !append && !search) {\r\n this.initializeCustomOption();\r\n }\r\n },\r\n (error) => {\r\n console.error('HTTP Error:', error);\r\n }\r\n );\r\n }\r\n\r\n extractDataByPath(data: any, path: string) {\r\n return path.split('.').reduce((acc, part) => acc && acc[part], data);\r\n }\r\n\r\n selectItems(event?: any) {\r\n this.selectedValue = event;\r\n\r\n const valuesArray = this.selectedValue.map(\r\n (item) => `${item.label}|${item.value}`\r\n );\r\n this.question.answer = valuesArray;\r\n const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(\r\n this.question.answer,\r\n this.question\r\n );\r\n this.question.score = scoreResult?.scores;\r\n\r\n this.validationFailed = false;\r\n this.validationMessage = '';\r\n if (this.selectedValue.length == 0 && this.required) {\r\n this.validationFailed = true;\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationMessage = `This is a required question`;\r\n this.question.validation = false;\r\n this.question.validationMessage = `This is a required question`;\r\n } else if (\r\n this.selectedValue.length < this.minimumSelection ||\r\n this.selectedValue.length > this.maximumSelection\r\n ) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationFailed = true;\r\n this.validationMessage = `selected options must be between ${this.minimumSelection} & ${this.maximumSelection}`;\r\n this.question.validation = false;\r\n this.question.validationMessage = `selected options must be between ${this.minimumSelection} & ${this.maximumSelection}`;\r\n } else {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.question.validation = true;\r\n }\r\n if (this.question.childLogics) {\r\n this.updateChildLogics(this.question);\r\n }\r\n this.answerChange.emit({\r\n answer: this.question.answer,\r\n maxPossibleScore: this.maxPossibleScore,\r\n });\r\n const answers = Array.isArray(this.question.answer) ? this.question.answer : [];\r\n const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);\r\n this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers);\r\n }\r\n\r\n updateChildLogics(question: any) {\r\n if (question.childLogics && Array.isArray(question.childLogics)) {\r\n question.childLogics.forEach((childLogic: any) => {\r\n if (this.selectionType == 'SINGLE') {\r\n if (this.selectedValue.length == 0) {\r\n childLogic.show = false;\r\n this.clearAnswersRecursively(childLogic);\r\n } else {\r\n const selectedValue = this.selectedValue[0]?.label;\r\n if (\r\n this.evaluateCondition(\r\n selectedValue,\r\n childLogic.condition,\r\n childLogic.inputValue\r\n )\r\n ) {\r\n childLogic.showLogic = true;\r\n } else {\r\n childLogic.showLogic = false;\r\n this.clearAnswersRecursively(childLogic);\r\n }\r\n }\r\n } else if (this.selectionType === 'MULTIPLE') {\r\n if (this.selectedValue.length == 0) {\r\n childLogic.show = false;\r\n this.clearAnswersRecursively(childLogic);\r\n } else {\r\n const selectedValues = this.selectedValue.map(\r\n (item: any) => item.label\r\n );\r\n if (\r\n this.evaluateMultipleCondition(\r\n selectedValues,\r\n childLogic.condition,\r\n childLogic.inputValue\r\n )\r\n ) {\r\n childLogic.showLogic = true;\r\n } else {\r\n childLogic.showLogic = false;\r\n this.clearAnswersRecursively(childLogic);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n clearAnswersRecursively(logic: any) {\r\n if (!logic || !logic.rows) return;\r\n\r\n logic.rows.forEach((row: any) => {\r\n row.grid.forEach((item: any) => {\r\n const element = item.element;\r\n\r\n if (item.entityType === 'QUESTION' && element) {\r\n // Clear answer if present\r\n if ('answer' in element) {\r\n element.answer = '';\r\n }\r\n\r\n // Recursively clear childLogics if any\r\n if (element.childLogics && element.childLogics.length > 0) {\r\n element.childLogics.forEach((childLogic: any) => {\r\n this.clearAnswersRecursively(childLogic);\r\n });\r\n }\r\n }\r\n\r\n if (item.entityType === 'SUBFORM' && element && element.rows) {\r\n // SUBFORM contains its own rows structure like a form\r\n this.clearAnswersRecursively({ rows: element.rows });\r\n }\r\n });\r\n });\r\n }\r\n\r\n evaluateCondition(answer: any, condition: string, inputValue: any): boolean {\r\n const stringInputValue = Array.isArray(inputValue)\r\n ? inputValue.map((val) => val.toString().toLowerCase())\r\n : inputValue.toLowerCase();\r\n answer = Array.isArray(answer)\r\n ? answer?.map((ans) => ans.toLowerCase())\r\n : answer.toLowerCase();\r\n switch (condition) {\r\n case '!=':\r\n return answer != inputValue;\r\n case '=':\r\n return answer == inputValue;\r\n case 'IN':\r\n return stringInputValue.includes(answer);\r\n case 'NOT IN':\r\n return !stringInputValue.includes(answer);\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n evaluateMultipleCondition(\r\n answers: any,\r\n condition: string,\r\n inputValue: any\r\n ): boolean {\r\n const stringInputValue = Array.isArray(inputValue)\r\n ? inputValue.map((val) => val.toString())\r\n : inputValue.toString();\r\n answers = Array.isArray(answers)\r\n ? answers?.map((answer) => answer.toLowerCase())\r\n : answers.toLowerCase();\r\n switch (condition) {\r\n case '!=':\r\n return answers.every((answer: any) => answer != stringInputValue);\r\n case '=':\r\n return answers.some((answer: any) => answer == stringInputValue);\r\n case 'IN':\r\n return answers.some((answer: any) => stringInputValue.includes(answer));\r\n case 'NOT IN':\r\n return answers.every(\r\n (answer: any) => !stringInputValue.includes(answer)\r\n );\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n handleValidation(\r\n isValid: boolean,\r\n message: string = 'This field is required'\r\n ) {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return this.inLine || this.inCard\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n private hasPagination(apiConfig: any): boolean {\r\n const checkValueSource = (arr: any[]) =>\r\n Array.isArray(arr) &&\r\n arr.some(\r\n (item) =>\r\n item?.valueSource === 'PAGE_INDEX' ||\r\n item?.valueSource === 'PAGE_SIZE'\r\n );\r\n\r\n return (\r\n checkValueSource(apiConfig.headers) ||\r\n checkValueSource(apiConfig.params) ||\r\n checkValueSource(apiConfig.pathVariables)\r\n );\r\n }\r\n\r\n getNextSetOfItems(event: any) {\r\n const element = event.target;\r\n if (\r\n Math.floor(element.scrollHeight - element.scrollTop) <=\r\n element.clientHeight &&\r\n this.hasPagination(this.api) // Only if pagination is configured\r\n ) {\r\n this.loadNextPage();\r\n }\r\n\r\n\r\n\r\n else if( this.optionType === 'DATABASE' && this.dbPageIndex < this.dbTotalPages){\r\n this.dbPageIndex +=1;\r\n this.fetchDataFromDatabase();\r\n }\r\n }\r\n\r\n private loadNextPage() {\r\n if (!this.hasMoreData) return;\r\n // Find the PAGE_INDEX param/header/pathVar and increment it\r\n const updateValueSource = (arr: any[]) => {\r\n if (!Array.isArray(arr)) return;\r\n arr.forEach((item) => {\r\n if (item.valueSource === 'PAGE_INDEX') {\r\n let currentPage = parseInt(item.inputValue || '0', 10);\r\n item.inputValue = (currentPage + 1).toString();\r\n }\r\n });\r\n };\r\n\r\n updateValueSource(this.api.headers);\r\n updateValueSource(this.api.params);\r\n updateValueSource(this.api.pathVariables);\r\n\r\n // Call your fetch function again\r\n this.fetchDataFromAPI(true);\r\n }\r\n\r\n search(searchTerm: string) {\r\n if( this.optionType ==='DATABASE'){\r\n this.dbPageIndex =0;\r\n this.fetchDataFromDatabase(searchTerm.trim());\r\n }\r\n else if (this.optionType !== 'API') {\r\n // 🔹 Local search\r\n if (searchTerm && searchTerm.trim() !== '') {\r\n const lowerSearch = searchTerm.toLowerCase();\r\n this.customOptions = this.originalOptions.filter((option) =>\r\n option.label?.toLowerCase().includes(lowerSearch)\r\n );\r\n } else {\r\n // Reset to full list when search is cleared\r\n this.customOptions = [...this.originalOptions];\r\n }\r\n }\r\n else {\r\n // 🔹 API search\r\n if (searchTerm && searchTerm.trim() !== '') {\r\n // Inject search term into API config (headers or params)\r\n this.injectSearchString(searchTerm.trim());\r\n } else {\r\n // 🔹 Clear the search string from API config when input is empty\r\n this.injectSearchString('');\r\n }\r\n\r\n // Reset pagination\r\n this.hasMoreData = true;\r\n // Fetch fresh results\r\n this.fetchDataFromAPI(false, true);\r\n }\r\n }\r\n\r\n injectSearchString(searchTerm: string) {\r\n // Always work on a fresh copy, don’t mutate this.api directly\r\n this.api = JSON.parse(JSON.stringify(this.originalApi));\r\n\r\n if (this.api?.params) {\r\n this.api.params.forEach((p: any) => {\r\n if (p.valueSource === 'SEARCH_STRING') {\r\n p.inputValue = searchTerm;\r\n }\r\n });\r\n }\r\n\r\n if (this.api?.headers) {\r\n this.api.headers.forEach((h: any) => {\r\n if (h.valueSource === 'SEARCH_STRING') {\r\n h.inputValue = searchTerm;\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n\r\n this.tracker.registerElement(this.elementId);\r\n setTimeout(() => {\r\n this.whenClauseService.markLoadCompleted();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <!-- <lib-dropdown\r\n [items]=\"customOptions\"\r\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\r\n (click)=\"selectItems()\"\r\n [(selectedItems)]=\"selectedValue\"\r\n ></lib-dropdown> -->\r\n\r\n <lib-dropdown\r\n [placeholder]=\"'select'\"\r\n [items]=\"customOptions\"\r\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\r\n [disable]=\"disableEdit\"\r\n (selectedItemsChange)=\"selectItems($event)\"\r\n [(selectedItems)]=\"selectedValue\"\r\n (onDropdownScroll)=\"getNextSetOfItems($event)\"\r\n (onSearch)=\"search($event)\"\r\n ></lib-dropdown>\r\n\r\n <!-- (onDropdownScroll)=\"getNextSetOfItems($event)\"\r\n (onSearch)=\"search($event)\" -->\r\n <div\r\n *ngIf=\"isInvalid && (!inLine || selectedValue.length === 0)\"\r\n class=\"error-message\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mb-2\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { DataService } from '../../services/data.service';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\n\r\nexport interface Attachment {\r\n fileId: string;\r\n fileName: string;\r\n fileUrl: string;\r\n previewUrl?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-file-picker-fields',\r\n templateUrl: './file-picker-fields.component.html',\r\n styleUrls: ['./file-picker-fields.component.scss'],\r\n})\r\nexport class FilePickerFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n @Output() inlineDeleteFiles = new EventEmitter<any>();\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n multiFileUploads: boolean = true;\r\n fileTypes: string[] = [];\r\n fileSize: number = 0;\r\n fileSizeUnit: string = '';\r\n totalFileSize: number = 0;\r\n initialFileSize: number = 0;\r\n initialTotalSize: number = 0;\r\n dragAndDrop: boolean = false;\r\n previewUploadedFiles: boolean = true;\r\n validationFailed: boolean = false;\r\n validationMessage: string = '';\r\n attachments: Attachment[] = [];\r\n timeoutId: any;\r\n\r\n avatarPicker: boolean = false;\r\n files: any;\r\n private elementId: string='';\r\n apiUrl:string = '';\r\n selectedFile!: File;\r\n selectedFiles: any = [];\r\n @Input() disableEdit: boolean = false;\r\n header:any;\r\n \r\n constructor(\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService,\r\n private dataService: DataService,\r\n private whenClauseService:WhenClauseService,\r\n private http: HttpClient\r\n ) {\r\n this.dataService.apiUrl$.subscribe((data) => {\r\n this.apiUrl = data+'/api/cdn/preview?url=';\r\n });\r\n\r\n this.dataService.header$.subscribe((data) => {\r\n this.header = data;\r\n });\r\n }\r\n\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n \r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.multiFileUploads =\r\n this.question.formElement.appearance.multiFileUploads;\r\n this.dragAndDrop = this.question.formElement.appearance.dragAndDrop;\r\n this.previewUploadedFiles =\r\n this.question.formElement.appearance.previewUploadedFiles;\r\n this.fileTypes = this.question.formElement.validation.fileTypes;\r\n this.fileSizeUnit = this.question.formElement.validation.fileSizeUnit;\r\n this.avatarPicker = this.question.formElement.appearance.avatarPicker;\r\n this.initialFileSize = this.question.formElement.validation?.fileSize;\r\n this.fileSize = this.convertToBytes(\r\n this.initialFileSize,\r\n this.fileSizeUnit\r\n );\r\n this.initialTotalSize = this.question.formElement.validation?.totalFileSize;\r\n this.totalFileSize = this.convertToBytes(\r\n this.initialTotalSize,\r\n this.fileSizeUnit\r\n );\r\n \r\n if (this.question.answer) {\r\n this.files = this.question.answer;\r\n }\r\n \r\n \r\n this.attachments = this.question?.attachments;\r\n setTimeout(() => {\r\n this.whenClauseService.setQuestionAnswer(this.question.id,this.attachments.length,true);\r\n });\r\n this.convertUrl();\r\n }\r\n \r\n convertUrl(){\r\n const token = this.header.authToken;\r\n\r\n if (!this.attachments || !token) return;\r\n\r\n this.attachments.forEach((attachment, index) => {\r\n const fileUrl = `${this.apiUrl}${attachment.fileUrl.replace(/\\//g, \"%2F\")}`; \r\n const headers = new HttpHeaders().set('authorization', `Bearer ${token}`);\r\n \r\n this.http.get(fileUrl, { headers, responseType: 'blob' }).subscribe((blob) => {\r\n const blobUrl = URL.createObjectURL(blob);\r\n this.attachments[index].previewUrl = blobUrl;\r\n });\r\n }); \r\n }\r\n \r\n convertToBytes(size: number, unit: string): number {\r\n const units: { [key: string]: number } = {\r\n B: 1,\r\n KB: 1024,\r\n MB: 1024 * 1024,\r\n GB: 1024 * 1024 * 1024,\r\n };\r\n return size * (units[unit.toUpperCase()] || 1);\r\n }\r\n \r\n\r\n handleFileTypeNotAllowed(fileType: string): void {\r\n this.validationFailed = true;\r\n this.validationMessage = 'File type not allowed';\r\n this.clearValidationMessageAfterTimeout();\r\n }\r\n\r\n handleFileSize(event: string): void {\r\n this.validationFailed = true;\r\n if (event === 'File size exceeds the limit') {\r\n this.validationMessage = `${event} ${this.initialFileSize} ${this.fileSizeUnit}`;\r\n } else if (event === 'Total size exceeds the limit') {\r\n this.validationMessage = `${event} ${this.initialTotalSize} ${this.fileSizeUnit}`;\r\n } else {\r\n this.validationMessage = event;\r\n }\r\n this.clearValidationMessageAfterTimeout();\r\n }\r\n\r\n clearValidationMessageAfterTimeout(): void {\r\n if (this.timeoutId) {\r\n clearTimeout(this.timeoutId);\r\n }\r\n\r\n this.timeoutId = setTimeout(() => {\r\n this.validationMessage = '';\r\n this.validationFailed = false;\r\n this.timeoutId = null;\r\n }, 5000);\r\n} \r\n\r\n onFileChange(event: any) {\r\n const file: File = event.target.files[0];\r\n this.selectedFile = file;\r\n this.selectedFiles.push(this.selectedFile);\r\n this.question.answer = this.selectedFiles;\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n }\r\n\r\n handleFinalArray(fileType: any[]): void {\r\n const extractedData = fileType.map((item: any) => ({\r\n name: item._file.name,\r\n size: item._file.size,\r\n type: item._file.type,\r\n }));\r\n\r\n\r\n const jsonString = JSON.stringify(extractedData);\r\n this.question.answer = fileType;\r\n const fileLength = fileType.length;\r\n \r\n setTimeout(() => {\r\n this.whenClauseService.setQuestionAnswer(this.question.id,fileLength);\r\n });\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n this.validationService.clearInvalid(this.buildElementId());\r\n }\r\n deleteFiles(event: any) {\r\n this.question.deleteFiles = event;\r\n this.question.attachments = this.question.attachments.filter(\r\n (item: any) => {\r\n return !event.includes(item.fileId);\r\n }\r\n );\r\n this.question.copiedAttachments = this.question.copiedAttachments.filter(\r\n (item: any) => {\r\n return !event.includes(item);\r\n }\r\n );\r\n setTimeout(() => {\r\n // Check current file count after delay\r\n const attachmentsLength = this.question?.attachments?.length || 0;\r\n const currentFileCount = this.question?.answer?.length || 0;\r\n \r\n // Only call when clause if no new files were added recently\r\n // (assuming handleFinalArray would have updated this.question.answer)\r\n if (attachmentsLength === currentFileCount) {\r\n this.whenClauseService.setQuestionAnswer(this.question.id, attachmentsLength);\r\n }\r\n }, 50);\r\n this.inlineDeleteFiles.emit(this.question.deleteFiles);\r\n }\r\n\r\n handleValidation(isValid: boolean, message: string = 'This field is required') {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return (this.inLine || this.inCard)\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n \r\n this.tracker.registerElement(this.elementId);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div\r\n [ngClass]=\"{'field-disabled':disableEdit}\"\r\n >\r\n <lib-docUpload\r\n [totalSize]=\"totalFileSize\"\r\n [fileAllowed]=\"fileTypes\"\r\n [multiple]=\"multiFileUploads\"\r\n [fileSize]=\"fileSize\"\r\n [files]=\"files\"\r\n [avatarPicker]=\"avatarPicker\"\r\n (fileTypeNotAllowed)=\"handleFileTypeNotAllowed($event)\"\r\n (fileSizeAllowed)=\"handleFileSize($event)\"\r\n (finalArray)=\"handleFinalArray($event)\"\r\n [attachments]=\"attachments\"\r\n (deleteFiles)=\"deleteFiles($event)\"\r\n ></lib-docUpload>\r\n </div>\r\n\r\n <div *ngIf=\"isInvalid && (!inLine || (!question.answer||!attachments))\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { Component, Input, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core';\r\nimport { GoogleMap } from '@angular/google-maps';\r\n\r\n@Component({\r\n selector: 'lib-location-fields',\r\n templateUrl: './location-fields.component.html',\r\n styleUrls: ['./location-fields.component.scss'],\r\n})\r\nexport class LocationFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n\r\n @ViewChild('mapSearchField')\r\n searchField!: ElementRef;\r\n @ViewChild(GoogleMap) map!: GoogleMap;\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n defaultZoomLevel: number = 0;\r\n setCurrentPosition: boolean = false;\r\n allowFullScreen: boolean = false;\r\n latitude: number = 0;\r\n longitude: number = 0;\r\n regionBoundary: boolean = false;\r\n region: string = '';\r\n showGoogleMap!: boolean;\r\n mapConfigurations: any = {};\r\n\r\n ngOnInit() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.defaultZoomLevel =\r\n this.question.formElement.appearance.defaultZoomLevel;\r\n this.setCurrentPosition =\r\n this.question.formElement.appearance.setCurrentPosition;\r\n this.allowFullScreen = this.question.formElement.appearance.allowFullScreen;\r\n this.latitude = this.question.formElement.appearance.latitude;\r\n this.longitude = this.question.formElement.appearance.longitude;\r\n this.regionBoundary = this.question.formElement.validation.regionBoundary;\r\n this.region = this.question.formElement.validation.region;\r\n this.mapConfigurations = {\r\n disableDefaultUI: true,\r\n fullscreenControl: this.allowFullScreen,\r\n zoomControl: true,\r\n };\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const searchBox = new google.maps.places.SearchBox(\r\n this.searchField.nativeElement\r\n );\r\n\r\n this.map.controls[google.maps.ControlPosition.TOP_CENTER].push(\r\n this.searchField.nativeElement\r\n );\r\n\r\n searchBox.addListener('places_changed', () => {\r\n const places = searchBox.getPlaces();\r\n if (places?.length === 0) {\r\n return;\r\n }\r\n\r\n const bounds = new google.maps.LatLngBounds();\r\n places?.forEach((place) => {\r\n if (!place.geometry || !place.geometry.location) {\r\n return;\r\n }\r\n\r\n if (place.geometry.viewport) {\r\n // Only geocodes have viewport.\r\n bounds.union(place.geometry.viewport);\r\n } else {\r\n bounds.extend(place.geometry.location);\r\n }\r\n });\r\n\r\n this.map.fitBounds(bounds);\r\n });\r\n }\r\n}\r\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"input-group\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control location-input\"\r\n placeholder=\"Enter location\"\r\n #locationInput\r\n />\r\n </div>\r\n\r\n <input #mapSearchField class=\"my-map-search-field\" type=\"text\" />\r\n <google-map width=\"100%\" [options]=\"mapConfigurations\"></google-map>\r\n</div>\r\n","import { Component, ElementRef, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\n\r\n@Component({\r\n selector: 'lib-mail-fields',\r\n templateUrl: './mail-fields.component.html',\r\n styleUrls: ['./mail-fields.component.scss'],\r\n})\r\nexport class MailFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n placeholder: string = '';\r\n expectedDomains: string[] = [];\r\n regularExpression: string = '';\r\n email: string = '';\r\n validationFailed: boolean = false;\r\n validationMessage: string = '';\r\n defaultValue: string = '';\r\n @Input() disableEdit: boolean = false;\r\n private elementId: string='';\r\n constructor(\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService\r\n ) {\r\n }\r\n\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.placeholder = this.question.formElement?.appearance?.placeholder || '';\r\n this.expectedDomains =\r\n this.question?.formElement?.validation?.expectedDomains\r\n ?.split(',')\r\n .map((domain: any) => domain.trim());\r\n this.regularExpression =\r\n this.question.formElement.validation.regularExpression;\r\n this.defaultValue = this.question?.defaultValue;\r\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\r\n this.email = this.defaultValue;\r\n if(this.question.answer){\r\n this.email = this.question?.answer \r\n }else if(this.defaultValue && !this.question.answer){\r\n this.question.answer = this.defaultValue;\r\n }\r\n }\r\n\r\n validateEmail() {\r\n this.validationFailed = false;\r\n this.validationMessage = '';\r\n const enteredEmail = this.email?.trim().toLowerCase();\r\n if (this.required && !this.email) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'This is a required question';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'This is a required question';\r\n } else if (this.expectedDomains && this.expectedDomains.some(d => d.trim() !== '')) { \r\n const isValidEmail = this.expectedDomains.some((domain) =>\r\n enteredEmail?.endsWith(domain)\r\n );\r\n this.validationFailed = !isValidEmail;\r\n this.validationMessage = 'Please enter valid email address';\r\n this.question.validation = !this.validationFailed;\r\n this.question.validationMessage = 'Please enter valid email address';\r\n }\r\n else {\r\n this.question.validation = true;\r\n }\r\n }\r\n validateInput(event: any) {\r\n this.validationService.clearInvalid(this.buildElementId())\r\n this.question.answer = event.target.value;\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n this.validateEmail();\r\n }\r\n\r\n handleValidation(isValid: boolean, message: string = 'This field is required') {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return (this.inLine || this.inCard)\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n \r\n this.tracker.registerElement(this.elementId);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <input\r\n type=\"email\"\r\n class=\"form-control mb-2 height\"\r\n [placeholder]=\"placeholder\"\r\n [(ngModel)]=\"email\"\r\n (blur)=\"validateEmail()\"\r\n (input)=\"validateInput($event)\"\r\n [class.invalid]=\"validationFailed\"\r\n [class.invalid-question]=\"isInvalid && (!inLine || !email)\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <!-- <div *ngIf=\"isInvalid\" class=\"error-message\"> -->\r\n <div *ngIf=\"isInvalid && (!inLine || !email)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\n\r\ninterface CountryData {\r\n value: string;\r\n label: string;\r\n image: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CountryService {\r\n private apiUrl: string = '';\r\n header: any = {};\r\n\r\n constructor(private http: HttpClient, private dataService: DataService) {\r\n this.dataService.apiUrl$.subscribe((data) => {\r\n this.apiUrl = data;\r\n });\r\n }\r\n\r\n loadCountryDetails(questionId: string, page: number, size: number, searchKey: string): Observable<any> {\r\n return this.http.get<any>(`${this.apiUrl}/api/public/json/country?page=${page}&size=${size}&searchKey=${encodeURIComponent(searchKey)}`);\r\n }\r\n\r\n processCountryDetails(\r\n data: any[],\r\n displayFlag: boolean,\r\n displayCode: boolean,\r\n showCountryName: boolean\r\n ): CountryData[] {\r\n const countryDetails: CountryData[] = [];\r\n data.forEach((country) => {\r\n const flag = displayFlag && country.flag ? country.flag : '';\r\n const name = showCountryName ? country.name || '' : '';\r\n const isdRoot = country.isd?.root || '';\r\n const isdSuffixes = country.isd?.suffixes || [];\r\n \r\n if (isdRoot && isdSuffixes.length > 0) {\r\n isdSuffixes.forEach((suffix: string) => {\r\n const isdCode = `${isdRoot}${suffix}`;\r\n \r\n // Special case: Only flag should be displayed, but value must have ISD code\r\n if (displayFlag && !displayCode && !showCountryName) {\r\n countryDetails.push({\r\n value: isdCode, // Keep ISD code in value\r\n label: '', // No text in label\r\n image: flag, // Only flag should be displayed\r\n });\r\n } else {\r\n // Handle all other cases\r\n let label = '';\r\n if (showCountryName) label += name;\r\n if (displayCode) label += (label ? ' ' : '') + isdCode;\r\n if (!label) label = isdCode; // Ensure label is not empty\r\n \r\n countryDetails.push({\r\n value: isdCode,\r\n label: label.trim(),\r\n image: flag,\r\n });\r\n }\r\n });\r\n } else {\r\n const fallbackCode = isdRoot || country.code || ''; // Fallback if no suffixes\r\n \r\n if (displayFlag && !displayCode && !showCountryName) {\r\n countryDetails.push({\r\n value: fallbackCode,\r\n label: '',\r\n image: flag,\r\n });\r\n } else {\r\n let label = '';\r\n if (showCountryName) label += name;\r\n if (displayCode) label += (label ? ' ' : '') + fallbackCode;\r\n if (!label) label = fallbackCode;\r\n \r\n countryDetails.push({\r\n value: fallbackCode,\r\n label: label.trim(),\r\n image: flag,\r\n });\r\n }\r\n }\r\n });\r\n return countryDetails;\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { CountryService } from '../../services/countryService';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { ValidationService } from '../../services/validation.service';\r\n\r\ninterface CountryData {\r\n value: string;\r\n label: string;\r\n image: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-mobile-fields',\r\n templateUrl: './mobile-fields.component.html',\r\n styleUrls: ['./mobile-fields.component.scss'],\r\n})\r\nexport class MobileFieldsComponent implements OnInit {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n placeholder: string = '';\r\n displayCountryCode: boolean = true;\r\n displayFlag: boolean = true;\r\n displayCode: boolean = true;\r\n showCountryName: boolean = true;\r\n beautifyNumbers: boolean = true;\r\n countryWiseValidation: boolean = true;\r\n countryDetails: CountryData[] = [];\r\n selectedCountry: CountryData[] = [];\r\n validationFailed: boolean = false;\r\n validationMessage: string = '';\r\n mobileNumber: string = '';\r\n questionId: string = '';\r\n currentPage: number = 0;\r\n size: number = 30;\r\n totalPages: number = 0;\r\n searchKey: string = '';\r\n lastPage:boolean=false;\r\n isFirstPage: boolean = false;\r\n defaultValue: string = '';\r\n @Input() disableEdit: boolean = false;\r\n\r\n private elementId: string='';\r\n\r\n constructor(\r\n private countryService: CountryService,\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.placeholder = this.question.formElement.appearance.placeholder;\r\n this.displayCountryCode =\r\n this.question.formElement.appearance.displayCountryCode;\r\n this.displayFlag = this.question.formElement.appearance.displayFlag;\r\n this.displayCode = this.question.formElement.appearance.displayCode;\r\n this.showCountryName = this.question.formElement.appearance.showCountryName;\r\n this.beautifyNumbers = this.question.formElement.appearance.beautifyNumbers;\r\n this.countryWiseValidation =\r\n this.question.formElement.validation.countryWiseValidation;\r\n this.questionId = this.question.id;\r\n this.defaultValue = this.question?.defaultValue;\r\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\r\n this.loadCountry(this.questionId, this.currentPage, this.size, this.searchKey);\r\n }\r\n\r\n\r\n initializeAnswer(param?: string): void {\r\n let countryCode: string | undefined;\r\n let mobileNumber: string | undefined;\r\n \r\n const value = param === 'answer' && this.question?.answer\r\n ? this.question.answer\r\n : this.question?.defaultValue;\r\n \r\n if (this.displayCountryCode) {\r\n // Expect \"countryCode mobileNumber\"\r\n [countryCode, mobileNumber] = (value || '').split(' ');\r\n } else {\r\n // Only mobile number present\r\n mobileNumber = value || '';\r\n }\r\n \r\n this.mobileNumber = mobileNumber || '';\r\n \r\n if (this.displayCountryCode) {\r\n if (!this.selectedCountry) {\r\n this.selectedCountry = [];\r\n }\r\n \r\n let matchedCountry = this.countryDetails.find(\r\n (country) => country.value === countryCode\r\n );\r\n \r\n if (matchedCountry) {\r\n this.selectedCountry= [matchedCountry];\r\n }\r\n\r\n\r\n else if (countryCode) {\r\n // Not found? Fetch from API directly\r\n this.countryService.loadCountryDetails(this.questionId, 0, 1, countryCode).subscribe((data) => {\r\n const extraCountries = this.countryService.processCountryDetails(\r\n data.result.content,\r\n this.displayFlag,\r\n this.displayCode,\r\n this.showCountryName\r\n );\r\n matchedCountry = extraCountries.find(\r\n (country) => country.value === countryCode\r\n );\r\n if (matchedCountry) {\r\n // Add to dropdown list if missing\r\n if (!this.countryDetails.some((c) => c.value === matchedCountry!.value)) {\r\n this.countryDetails = [matchedCountry, ...this.countryDetails];\r\n }\r\n // Preselect it\r\n this.selectedCountry = [matchedCountry];\r\n }\r\n });\r\n } \r\n }\r\n }\r\n \r\n\r\n onCountryChange() {\r\n this.validationFailed = false;\r\n this.validationMessage = '';\r\n this.updateAnswer();\r\n }\r\n\r\n onInput(event: Event) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n const input = event.target as HTMLInputElement;\r\n \r\n // Regular expression to allow only numbers and multiple hyphens, but ensure only one hyphen between numbers\r\n const regex = /^(\\d+)(-\\d+)*$/;\r\n \r\n if (!regex.test(input.value)) {\r\n // Remove invalid characters\r\n input.value = input.value.replace(/[^\\d-]/g, '');\r\n \r\n // Ensure only one hyphen is present between numbers\r\n input.value = input.value\r\n .split('-')\r\n .filter((segment, index, array) => segment || index === 0 || index === array.length - 1)\r\n .join('-');\r\n }\r\n \r\n // Update the model\r\n this.mobileNumber = input.value;\r\n \r\n this.updateAnswer();\r\n }\r\n onMobileNumberChange() {\r\n }\r\n\r\n updateAnswer() { \r\n if(this.displayCountryCode){\r\n if (this.selectedCountry.length > 0 && this.mobileNumber) {\r\n const countryCode = this.selectedCountry[0].value;\r\n this.question.answer = `${countryCode} ${this.mobileNumber}`;\r\n }\r\n }else {\r\n this.question.answer = this.mobileNumber;\r\n }\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n }\r\n\r\n validateMobile() {\r\n this.validationFailed = false;\r\n this.validationMessage = '';\r\n \r\n if (this.required && (!this.mobileNumber || (this.displayCountryCode && this.selectedCountry.length === 0))) {\r\n this.validationFailed = true;\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationMessage = 'This is a required question';\r\n } else {\r\n this.updateAnswer();\r\n }\r\n }\r\n\r\n loadCountry(id: string, currentPage: number, size: number, searchKey: string, isSearch: boolean = false) {\r\n this.countryService.loadCountryDetails(this.questionId, currentPage, size, searchKey).subscribe((data) => {\r\n if (this.totalPages === 0) {\r\n this.totalPages = data.result.totalPages;\r\n }\r\n this.lastPage=data.result.last;\r\n this.isFirstPage = data.result.first;\r\n let newCountries=this.countryService.processCountryDetails(\r\n data.result.content,\r\n this.displayFlag,\r\n this.displayCode,\r\n this.showCountryName\r\n ) \r\n\r\n if (this.currentPage > 0) {\r\n this.countryDetails = [\r\n ...this.countryDetails,\r\n ...newCountries.filter(item => !this.countryDetails.some((existing: any) => existing.value === item.value))\r\n ];\r\n } else {\r\n this.countryDetails = [\r\n ...newCountries.filter(item => !this.countryDetails.some((existing: any) => existing.value === item.value)),\r\n ...this.countryDetails\r\n ];\r\n }\r\n if(this.defaultValue && !isSearch){\r\n this.initializeAnswer('default')\r\n }\r\n if (this.question.answer && !isSearch) {\r\n this.initializeAnswer('answer');\r\n }\r\n });\r\n\r\n }\r\n\r\n getNextSetOfItems(event: any) {\r\n const element = event.target;\r\n if(!this.lastPage){\r\n if (Math.floor(element.scrollHeight - element.scrollTop) <= element.clientHeight) {\r\n this.loadMoreData();\r\n }\r\n }\r\n if (!this.isFirstPage && element.scrollTop <= 150) {\r\n this.loadPreviousData();\r\n }\r\n }\r\n\r\n loadMoreData() {\r\n setTimeout(() => {\r\n this.currentPage++;\r\n if (this.currentPage >= 0) {\r\n this.loadCountry(this.questionId,this.currentPage, this.size, \"\");\r\n }\r\n }, 0);\r\n }\r\n\r\n loadPreviousData() {\r\n setTimeout(() => {\r\n this.currentPage--;\r\n if (this.currentPage >= 0) {\r\n this.loadCountry(this.questionId,this.currentPage, this.size, \"\");\r\n }\r\n }, 0);\r\n }\r\n\r\n search(searchTerm: any) {\r\n if (searchTerm == '') {\r\n this.loadCountry(this.questionId,this.currentPage, this.size, \"\",true);\r\n }\r\n else {\r\n this.countryDetails = []; \r\n this.loadCountry(this.questionId,this.currentPage, this.size, searchTerm,true);\r\n }\r\n }\r\n\r\n handleValidation(isValid: boolean, message: string = 'This field is required') {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return (this.inLine || this.inCard)\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n \r\n this.tracker.registerElement(this.elementId);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n\r\n}\r\n\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"input-group mb-2\">\r\n <ng-container *ngIf=\"displayCountryCode; else fullWidthInput\">\r\n <div class=\"col-xs-5 col-5 col-md-3 px-0 pe-2 ps-2\"\r\n [ngClass]=\"{'disable':disableEdit}\">\r\n <lib-dropdown\r\n [items]=\"countryDetails\"\r\n [multiple]=\"false\"\r\n [(selectedItems)]=\"selectedCountry\"\r\n (selectedItemsChange)=\"onCountryChange()\"\r\n [disable]=\"disableEdit\"\r\n (onDropdownScroll)=\"getNextSetOfItems($event)\"\r\n (onSearch)=\"search($event)\"\r\n ></lib-dropdown>\r\n </div>\r\n <input\r\n type=\"text\"\r\n class=\"form-control col-xs-7 col-7 col-md-9 height mobileField\"\r\n [placeholder]=\"placeholder\"\r\n aria-label=\"Mobile Number\"\r\n (blur)=\"validateMobile()\"\r\n [(ngModel)]=\"mobileNumber\"\r\n (ngModelChange)=\"onMobileNumberChange()\"\r\n (input)=\"onInput($event)\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n </ng-container>\r\n\r\n <!-- Full-width input when displayCountryCode is false -->\r\n <ng-template #fullWidthInput>\r\n <input\r\n type=\"text\"\r\n class=\"form-control col-12 height mobileField\"\r\n [placeholder]=\"placeholder\"\r\n aria-label=\"Mobile Number\"\r\n [class.invalid]=\"validationFailed\"\r\n [class.invalid-question]=\"isInvalid\"\r\n (blur)=\"validateMobile()\"\r\n [(ngModel)]=\"mobileNumber\"\r\n (ngModelChange)=\"onMobileNumberChange()\"\r\n (input)=\"onInput($event)\"\r\n />\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"isInvalid && (!inLine || !mobileNumber)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AggregationFunctionService {\r\n\r\n // New structure: { [rowId]: Map<fieldId, fieldData> }\r\nprivate aggregateFieldsMap = new Map<string, Map<string, { id: string; operation: string; formula: string; result?: number }>>();\r\nprivate numberFieldsMap = new Map<string, Map<string, { id: string; answer: number }>>();\r\n\r\n private aggregateFieldResultsSubject = new BehaviorSubject<{ id: string; result: number,evaluated:boolean } | null>(null);\r\n aggregateFieldResults$ = this.aggregateFieldResultsSubject.asObservable();\r\n\r\n constructor() {}\r\n\r\n /**\r\n * Store or update an aggregate field in the map\r\n */\r\n setAggregateField(rowId: string, fieldId: string, operation: string, formula: string): void {\r\n if (!this.aggregateFieldsMap.has(rowId)) {\r\n this.aggregateFieldsMap.set(rowId, new Map());\r\n }\r\n this.aggregateFieldsMap.get(rowId)!.set(fieldId, { id: fieldId, operation, formula });\r\n }\r\n\r\n /**\r\n * Store or update a number field in the map\r\n */\r\n setNumberField(rowId: string, fieldId: string, answer: number): void {\r\n if (!this.numberFieldsMap.has(rowId)) {\r\n this.numberFieldsMap.set(rowId, new Map());\r\n }\r\n this.numberFieldsMap.get(rowId)!.set(fieldId, { id: fieldId, answer });\r\n this.checkAndEvaluateFormulas(rowId);\r\n }\r\n\r\n private emitAggregateResult(id: string, result: number,evaluated:boolean): void {\r\n this.aggregateFieldResultsSubject.next({ id, result,evaluated });\r\n }\r\n\r\n\r\n evaluateCustomFormula(rowId: string, formula: string): number | null {\r\n \r\n const rowNumberFields = this.numberFieldsMap.get(rowId);\r\n if (!formula || !rowNumberFields) return null;\r\n \r\n const uuidRegex = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}/g;/[0-9a-fA-F\\-]{36}/g;\r\n const uuidMatches = formula.match(uuidRegex) || [];\r\n \r\n const allHaveAnswers = uuidMatches.every(uuid => {\r\n const field = rowNumberFields.get(uuid);\r\n return field !== undefined && \r\n field.answer !== undefined && \r\n field.answer !== null &&\r\n String(field.answer).trim() !== '';\r\n });\r\n \r\n if (!allHaveAnswers) return null;\r\n \r\n const replacedFormula = formula.replace(uuidRegex, (match) => {\r\n const field = rowNumberFields.get(match);\r\n return field?.answer?.toString() || '0';\r\n });\r\n \r\n try {\r\n return new Function(`return ${replacedFormula};`)();\r\n } catch (error) {\r\n console.error('Error evaluating formula:', error);\r\n return null;\r\n }\r\n }\r\n \r\n evaluatePredefinedOperation(rowId: string, operation: string, formula: string): number | null {\r\n const rowNumberFields = this.numberFieldsMap.get(rowId);\r\n if (!rowNumberFields) return null;\r\n \r\n const uuidList = formula.split(',').map(id => id.trim());\r\n const values: number[] = [];\r\n let hasAnyAnswer = false;\r\n\r\n for (const uuid of uuidList) {\r\n const field = rowNumberFields.get(uuid);\r\n const val = field?.answer;\r\n \r\n // If the field doesn't exist or value is invalid, push 0 as default\r\n if (val !== undefined && val !== null && String(val).trim() !== '') {\r\n hasAnyAnswer = true;\r\n values.push(Number(val));\r\n } else {\r\n values.push(0); // Still push 0 to keep array length, but flag stays false unless at least one answer exists\r\n }\r\n }\r\n if (!hasAnyAnswer) return null;\r\n let result = 0;\r\n switch (operation) {\r\n case 'SUM':\r\n result = values.reduce((acc, val) => acc + val, 0);\r\n break;\r\n case 'SUBTRACTION':\r\n result = values.reduce((acc, val) => acc - val);\r\n break;\r\n case 'MULTIPLICATION':\r\n result = values.reduce((acc, val) => acc * val, 1);\r\n break;\r\n default:\r\n console.warn(`Unsupported operation: ${operation}`);\r\n return null;\r\n }\r\n \r\n return result;\r\n }\r\n\r\n checkAndEvaluateFormulas(rowId: string): void {\r\n const aggregateFields = this.aggregateFieldsMap.get(rowId);\r\n if (!aggregateFields) return;\r\n \r\n aggregateFields.forEach((aggregateField, id) => {\r\n let result: number | null = null;\r\n \r\n if (aggregateField.operation === 'CUSTOM') {\r\n result = this.evaluateCustomFormula(rowId, aggregateField.formula);\r\n } else {\r\n result = this.evaluatePredefinedOperation(rowId, aggregateField.operation, aggregateField.formula);\r\n }\r\n \r\n if (result !== null) {\r\n aggregateField.result = result;\r\n this.aggregateFieldsMap.get(rowId)!.set(id, aggregateField);\r\n this.emitAggregateResult(`${rowId}:${id}`, result,true);\r\n } else {\r\n this.emitAggregateResult(`${rowId}:${id}`, 0,false);\r\n }\r\n });\r\n }\r\n\r\n clearAll(): void {\r\n this.aggregateFieldsMap.clear();\r\n this.numberFieldsMap.clear();\r\n this.aggregateFieldResultsSubject.next(null);\r\n }\r\n \r\n ngOnDestroy(): void {\r\n this.clearAll();\r\n }\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Logic } from '../../models/logic.model';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { AggregationFunctionService } from '../../services/aggregate.service';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\n\r\n@Component({\r\n selector: 'lib-number-fields',\r\n templateUrl: './number-fields.component.html',\r\n styleUrls: ['./number-fields.component.scss'],\r\n})\r\nexport class NumberFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n @Input() rowId: any;\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n upDown!: boolean;\r\n allowNegativeValues!: boolean;\r\n placeholder: string = '';\r\n min!: number;\r\n max!: number;\r\n enteredNumber!: number;\r\n validationFailed: boolean = false;\r\n validationMessage: string = '';\r\n defaultValue!: number;\r\n @Input() disableEdit: boolean = false;\r\n private elementId: string='';\r\n private subscribedToWhenClause = false;\r\n constructor(\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService,\r\n private aggregateService:AggregationFunctionService,\r\n private whenClauseService:WhenClauseService\r\n ) {\r\n }\r\n\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.upDown = this.question.formElement.appearance.upAndDownButton;\r\n this.allowNegativeValues =\r\n this.question.formElement.appearance.allowNegativeValues;\r\n this.placeholder = this.question.formElement?.appearance?.placeholder || '';\r\n this.min = this.question.formElement.validation.min;\r\n this.max = this.question.formElement.validation.max;\r\n this.defaultValue = this.question?.defaultValue;\r\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\r\n this.enteredNumber = this.defaultValue;\r\n if(this.question.answer){\r\n this.enteredNumber = this.question?.answer;\r\n setTimeout(() => {\r\n this.whenClauseService.setQuestionAnswer(this.question.id,this.enteredNumber,true);\r\n });\r\n }else if(this.defaultValue && !this.question.answer){\r\n this.question.answer = this.defaultValue;\r\n setTimeout(() => {\r\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\r\n });\r\n } else{\r\n setTimeout(() => {\r\n this.whenClauseService.setQuestionAnswer(this.question.id,'',true);\r\n });\r\n }\r\n if (this.question.childLogics && this.question.answer) {\r\n this.updateChildLogics(this.question);\r\n }\r\n this.aggregateService.setNumberField(this.rowId,this.question.id,this.question.answer);\r\n }\r\n\r\n preventNumberScroll(event: WheelEvent) {\r\n if (document.activeElement === event.target) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n validateNumber() {\r\n this.validationFailed = false;\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationMessage = '';\r\n if (this.required && !this.enteredNumber && this.question.required) {\r\n this.validationFailed = true;\r\n this.validationMessage = `Please enter a valid number`;\r\n this.question.validation = false;\r\n this.question.validationMessage = `Please enter a valid number`;\r\n if (!this.subscribedToWhenClause) {\r\n this.subscribedToWhenClause = true;\r\n this.whenClauseService.onQuestionChange().subscribe(change => {\r\n this.validateNumber();\r\n });\r\n }\r\n } else if (!this.allowNegativeValues && this.enteredNumber < 0) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'Please enter a positive number';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'Please enter a positive number';\r\n } else if (\r\n (this.min !== undefined && this.enteredNumber < this.min) ||\r\n (this.max !== undefined && this.enteredNumber > this.max)\r\n ) {\r\n this.validationFailed = true;\r\n\r\n // Construct appropriate validation message based on whether min, max, or both are provided\r\n if (this.min !== undefined && this.max !== undefined) {\r\n this.validationMessage = `Please enter a valid number between ${this.min} and ${this.max}`;\r\n this.question.validationMessage = `Please enter a valid number between ${this.min} and ${this.max}`;\r\n } else if (this.min !== undefined) {\r\n this.validationMessage = `Please enter a number greater than or equal to ${this.min}`;\r\n this.question.validationMessage = `Please enter a number greater than or equal to ${this.min}`;\r\n } else if (this.max !== undefined) {\r\n this.validationMessage = `Please enter a number less than or equal to ${this.max}`;\r\n this.question.validationMessage = `Please enter a number less than or equal to ${this.max}`;\r\n }\r\n\r\n this.question.validation = false;\r\n } else {\r\n this.question.validation = true;\r\n }\r\n if (this.question.childLogics) {\r\n this.updateChildLogics(this.question);\r\n }\r\n }\r\n\r\n validateInput(event: any) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.question.answer = event.target.value;\r\n this.aggregateService.setNumberField(this.rowId,this.question.id, event.target.value);\r\n if (this.question.childLogics) {\r\n this.updateChildLogics(this.question);\r\n }\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer);\r\n }\r\n\r\n updateChildLogics(question: any) {\r\n if (question.childLogics && Array.isArray(question.childLogics)) {\r\n question.childLogics.forEach((childLogic: any) => {\r\n if (\r\n this.evaluateCondition(\r\n question.answer,\r\n childLogic.condition,\r\n childLogic.inputValue\r\n )\r\n ) {\r\n childLogic.showLogic = true;\r\n } else {\r\n childLogic.showLogic = false;\r\n this.clearAnswersRecursively(childLogic);\r\n }\r\n });\r\n }\r\n }\r\n\r\n clearAnswersRecursively(logic: any) {\r\n if (!logic || !logic.rows) return;\r\n\r\n logic.rows.forEach((row: any) => {\r\n row.grid.forEach((item: any) => {\r\n const element = item.element;\r\n\r\n if (item.entityType === 'QUESTION' && element) {\r\n // Clear answer if present\r\n if ('answer' in element) {\r\n element.answer = '';\r\n }\r\n\r\n // Recursively clear childLogics if any\r\n if (element.childLogics && element.childLogics.length > 0) {\r\n element.childLogics.forEach((childLogic: any) => {\r\n this.clearAnswersRecursively(childLogic);\r\n });\r\n }\r\n }\r\n\r\n if (item.entityType === 'SUBFORM' && element && element.rows) {\r\n // SUBFORM contains its own rows structure like a form\r\n this.clearAnswersRecursively({ rows: element.rows });\r\n }\r\n });\r\n });\r\n }\r\n\r\n evaluateCondition(answer: any, condition: any, inputValue: any) {\r\n switch (condition) {\r\n case '>':\r\n return answer > Number(inputValue);\r\n case '<':\r\n return answer < Number(inputValue);\r\n case '>=':\r\n return answer >= Number(inputValue);\r\n case '<=':\r\n return answer <= Number(inputValue);\r\n case '=':\r\n return answer == inputValue;\r\n case '!=':\r\n return answer != inputValue;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n\r\n\r\n handleValidation(isValid: boolean, message: string = 'This field is required') {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return (this.inLine || this.inCard)\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n\r\n this.tracker.registerElement(this.elementId);\r\n setTimeout(() => {\r\n this.whenClauseService.markLoadCompleted();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\r\n <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <input\r\n type=\"number\"\r\n class=\"form-control mb-2 height\"\r\n [placeholder]=\"placeholder\"\r\n [class.hide-spin-buttons]=\"!upDown\"\r\n (blur)=\"validateNumber()\"\r\n [(ngModel)]=\"enteredNumber\"\r\n [class.invalid]=\"validationFailed\"\r\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredNumber)\"\r\n (input)=\"validateInput($event)\"\r\n [attr.min]=\"min\"\r\n [attr.max]=\"max\"\r\n (wheel)=\"preventNumberScroll($event)\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <div *ngIf=\"isInvalid && (!inLine || !enteredNumber)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { ValidationService } from '../../services/validation.service';\r\n\r\n@Component({\r\n selector: 'lib-password-fields',\r\n templateUrl: './password-fields.component.html',\r\n styleUrls: ['./password-fields.component.scss'],\r\n})\r\nexport class PasswordFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n confirmPassword!: boolean;\r\n displayStrength!: boolean;\r\n viewButton!: boolean;\r\n maxLength!: number;\r\n minLength!: number;\r\n requireLowercaseLetters!: boolean;\r\n requireUppercaseLetters!: boolean;\r\n requireNumbers!: boolean;\r\n requireSpecialCharacters!: boolean;\r\n allowedSpecialCharacters: string[] = [];\r\n validationMessage: string = '';\r\n cnfrmValidationMessage: string = '';\r\n validationFailed: boolean = false;\r\n validatedCnfrmPassword: boolean = false;\r\n enteredPassword: string = '';\r\n enteredCnfrmPassword: string = '';\r\n passwordStrength: number = 0;\r\n questionId:string='';\r\n private elementId: string='';\r\n @Input() disableEdit: boolean = false;\r\n \r\n constructor(\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService\r\n ) {\r\n }\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n valueAssigned() {\r\n this.questionId=this.question.id;\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.confirmPassword = this.question.formElement.appearance.confirmPassword;\r\n this.displayStrength = this.question.formElement.appearance.displayStrong;\r\n this.viewButton = this.question.formElement.appearance.viewButton;\r\n this.maxLength = this.question.formElement.validation.maxLength;\r\n this.minLength = this.question.formElement.validation.minLength;\r\n this.requireLowercaseLetters =\r\n this.question.formElement.validation.requireLowercaseLetters;\r\n this.requireUppercaseLetters =\r\n this.question.formElement.validation.requireUppercaseLetters;\r\n this.requireNumbers = this.question.formElement.validation.requireNumbers;\r\n this.requireSpecialCharacters =\r\n this.question.formElement.validation.requireSpecialCharacters;\r\n if (this.requireSpecialCharacters) {\r\n this.allowedSpecialCharacters =\r\n this.question.formElement.validation.allowedSpecialCharacters\r\n .split(',')\r\n .map((char: any) => char.trim());\r\n }\r\n this.enteredPassword = this.question?.answer;\r\n }\r\n\r\n togglePasswordVisibility() {\r\n let passwordField = document.getElementById(\r\n 'passwordField'+this.questionId\r\n ) as HTMLInputElement;\r\n let eyeIcon = document.getElementById(\r\n 'passwordEyeIcon'+this.questionId\r\n ) as HTMLInputElement;\r\n\r\n if (passwordField.type === 'password') {\r\n passwordField.type = 'text';\r\n eyeIcon.classList.remove('bi-eye-fill');\r\n eyeIcon.classList.add('bi-eye-slash-fill');\r\n } else {\r\n passwordField.type = 'password';\r\n eyeIcon.classList.remove('bi-eye-slash-fill');\r\n eyeIcon.classList.add('bi-eye-fill');\r\n }\r\n }\r\n toggleCnfrmPasswordVisibility() {\r\n let passwordField = document.getElementById(\r\n 'cnfrmPasswordField'+this.questionId\r\n ) as HTMLInputElement;\r\n let eyeIcon = document.getElementById(\r\n 'CnfrmPasswordEyeIcon'+this.questionId\r\n ) as HTMLInputElement;\r\n\r\n if (passwordField.type === 'password') {\r\n passwordField.type = 'text';\r\n eyeIcon.classList.remove('bi-eye-fill');\r\n eyeIcon.classList.add('bi-eye-slash-fill');\r\n } else {\r\n passwordField.type = 'password';\r\n eyeIcon.classList.remove('bi-eye-slash-fill');\r\n eyeIcon.classList.add('bi-eye-fill');\r\n }\r\n }\r\n\r\n checkPasswordMatch() {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validatedCnfrmPassword = false;\r\n this.cnfrmValidationMessage = '';\r\n if (this.required && this.confirmPassword && !this.enteredCnfrmPassword) {\r\n this.validatedCnfrmPassword = true;\r\n this.cnfrmValidationMessage = `Please enter a valid password`;\r\n this.question.validation = false;\r\n }\r\n else if (this.enteredPassword != this.enteredCnfrmPassword && this.confirmPassword) {\r\n this.validatedCnfrmPassword = true;\r\n this.cnfrmValidationMessage = 'Passwords do not match';\r\n this.question.validation = false;\r\n }\r\n else{\r\n this.question.validation = true;\r\n }\r\n this.validatePassword();\r\n }\r\n\r\n \r\n\r\n validatePassword() {\r\n this.validationFailed = false;\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationMessage = '';\r\n if (this.required && !this.enteredPassword) {\r\n this.validationFailed = true;\r\n this.validationMessage = `Please enter a valid password`;\r\n this.question.validation = false;\r\n this.question.validationMessage = `Please enter a valid password`;\r\n } else if (\r\n this.requireLowercaseLetters ||\r\n this.requireUppercaseLetters ||\r\n this.requireNumbers ||\r\n this.requireSpecialCharacters ||\r\n this.minLength ||\r\n this.maxLength\r\n ) { \r\n const lowercaseRegex = /[a-z]/;\r\n const uppercaseRegex = /[A-Z]/;\r\n const numberRegex = /\\d/;\r\n const specialCharacterRegex = new RegExp(`[${this.allowedSpecialCharacters.join('')}]`);\r\n const otherSpecialCharacterRegex = new RegExp(`[^a-zA-Z0-9${this.allowedSpecialCharacters.join('')}]`);\r\n \r\n let lowerCaseValidate = lowercaseRegex.test(this.enteredPassword);\r\n let upperCaseValidate = uppercaseRegex.test(this.enteredPassword);\r\n let containsNumber = numberRegex.test(this.enteredPassword);\r\n let containsSpecialCharacter = specialCharacterRegex.test(this.enteredPassword);\r\n let containsOtherSpecialCharacter = otherSpecialCharacterRegex.test(this.enteredPassword);\r\n \r\n if (!lowerCaseValidate && this.requireLowercaseLetters) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'Password must contain at least one lowercase letter';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'Password must contain at least one lowercase letter';\r\n } else if (!upperCaseValidate && this.requireUppercaseLetters) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'Password must contain at least one uppercase letter';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'Password must contain at least one uppercase letter';\r\n } else if (!containsNumber && this.requireNumbers) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'Password must contain at least one number';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'Password must contain at least one number';\r\n }else if (this.enteredPassword.length < this.minLength) {\r\n this.validationFailed = true;\r\n this.validationMessage = `Password must contain at least ${this.minLength} characters`;\r\n this.question.validation = false;\r\n this.question.validationMessage = `Password must contain at least ${this.minLength} characters`;\r\n } else if (this.enteredPassword.length > this.maxLength) {\r\n this.validationFailed = true;\r\n this.validationMessage = `Password must be less than ${this.maxLength} characters`;\r\n this.question.validation = false;\r\n this.question.validationMessage = `Password must be less than ${this.maxLength} characters`;\r\n } else if (!containsSpecialCharacter && this.allowedSpecialCharacters.length>0) {\r\n this.validationFailed = true;\r\n this.validationMessage = `Password must contain at least one special character from ${this.allowedSpecialCharacters}`;\r\n this.question.validation = false;\r\n this.question.validationMessage = `Password must contain at least one special character from ${this.allowedSpecialCharacters}`;\r\n } else if(containsOtherSpecialCharacter && this.allowedSpecialCharacters.length>0){\r\n this.validationFailed = true;\r\n this.validationMessage = 'Password contains an invalid special character';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'Password contains an invalid special character';\r\n } else if(this.confirmPassword){\r\n this.checkPasswordMatch();\r\n }\r\n else {\r\n this.question.validation = true;\r\n } \r\n } else { \r\n this.passwordStrength=this.calculateStrength(this.enteredPassword);\r\n }\r\n this.passwordStrength = this.calculateStrength(this.enteredPassword)\r\n}\r\n\r\n validateInput(event:any){\r\n const sanitizedValue = event.target.value.replace(/\\s+/g, '');\r\n this.enteredPassword = sanitizedValue;\r\n this.question.answer=sanitizedValue;\r\n this.validatePassword(); \r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0}); \r\n }\r\n\r\n validateCnfrm(event:any){\r\n const sanitizedValue = event.target.value.replace(/\\s+/g, '');\r\n this.enteredCnfrmPassword = sanitizedValue;\r\n this.checkPasswordMatch();\r\n }\r\n\r\n calculateStrength(password:any) {\r\n const lengthStrength = Math.min(100, (password.length / 12) * 100); // Assume maximum length of 12 for full points\r\n const lowercaseStrength = /[a-z]/.test(password) ? 20 : 0;\r\n const uppercaseStrength = /[A-Z]/.test(password) ? 20 : 0;\r\n const numberStrength = /\\d/.test(password) ? 20 : 0;\r\n const specialCharacterStrength = /[!@#$%^&*(),.?\":{}|<>]/.test(password) ? 20 : 0; // Adjust this regex based on your allowed special characters\r\n \r\n return lengthStrength + lowercaseStrength + uppercaseStrength + numberStrength + specialCharacterStrength;\r\n }\r\n\r\n handleValidation(isValid: boolean, message: string = 'This field is required') {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return (this.inLine || this.inCard)\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n \r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n \r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n \r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n \r\n this.tracker.registerElement(this.elementId);\r\n }\r\n \r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\r\n <label [for]=\"'passwordField' + questionId\">{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"passwordWrapper\">\r\n <input\r\n type=\"password\"\r\n class=\"form-control mb-2 height\"\r\n [id]=\"'passwordField' + questionId\"\r\n (blur)=\"validatePassword()\"\r\n [(ngModel)]=\"enteredPassword\"\r\n [class.invalid]=\"validationFailed\"\r\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredPassword)\"\r\n (input)=\"validateInput($event)\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <button\r\n id=\"togglePasswordBtn\"\r\n class=\"toggle-password-btn\"\r\n (click)=\"togglePasswordVisibility()\"\r\n *ngIf=\"viewButton\"\r\n >\r\n <i class=\"bi bi-eye-fill\" [id]=\"'passwordEyeIcon' + questionId\"></i>\r\n </button>\r\n </div>\r\n <div class=\"password-strength-meter\" *ngIf=\"displayStrength\">\r\n <div class=\"progress\">\r\n <div\r\n class=\"progress-bar\"\r\n role=\"progressbar\"\r\n [style.width]=\"passwordStrength + '%'\"\r\n [class.bg-danger]=\"passwordStrength < 30\"\r\n [class.bg-warning]=\"passwordStrength >= 30 && passwordStrength < 70\"\r\n [class.bg-success]=\"passwordStrength >= 70\"\r\n ></div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isInvalid && (!inLine || !enteredPassword)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mb-2\">\r\n {{ validationMessage }}\r\n </div>\r\n\r\n <div class=\"cnfrmPasswordWrapper\" *ngIf=\"confirmPassword\">\r\n <label for=\"'cnfrmPasswordField'+questionId\">Confirm password</label>\r\n <input\r\n type=\"password\"\r\n class=\"form-control mb-2 height\"\r\n [id]=\"'cnfrmPasswordField' + questionId\"\r\n (blur)=\"checkPasswordMatch()\"\r\n [(ngModel)]=\"enteredCnfrmPassword\"\r\n [class.invalid]=\"validatedCnfrmPassword\"\r\n (input)=\"validateCnfrm($event)\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <button\r\n id=\"toggleCnfrmPasswordBtn\"\r\n class=\"toggle-password-btn\"\r\n (click)=\"toggleCnfrmPasswordVisibility()\"\r\n *ngIf=\"viewButton\"\r\n >\r\n <i class=\"bi bi-eye-fill\" [id]=\"'CnfrmPasswordEyeIcon' + questionId\"></i>\r\n </button>\r\n </div>\r\n <div *ngIf=\"validatedCnfrmPassword\" class=\"text-danger error-message\">\r\n {{ cnfrmValidationMessage }}\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormService } from '../../services/form.service';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { ScoreCalculationService } from '../../services/score.service';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\n\r\n@Component({\r\n selector: 'lib-radio-button-fields',\r\n templateUrl: './radio-button-fields.component.html',\r\n styleUrls: ['./radio-button-fields.component.scss'],\r\n})\r\nexport class RadioButtonFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{\r\n answer: any;\r\n maxPossibleScore?: number;\r\n }>();\r\n @Input() rowId: number = 0;\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n color: string = '';\r\n minimumSelection: number = 0;\r\n maximumSelection: number = 0;\r\n optionType: string = '';\r\n lookupTable: string = '';\r\n customOptions: any[] = [];\r\n database: any = {};\r\n api: any = {};\r\n apiOptions: any[] = [];\r\n selectedOption: any;\r\n validationFailed!: boolean;\r\n validationMessage: string = '';\r\n displayOptionsInColumn: boolean = false;\r\n maxPossibleScore?: number;\r\n @Input() disableEdit: boolean = false;\r\n\r\n private elementId: string = '';\r\n private subscribedToWhenClause = false;\r\n\r\n constructor(\r\n private formService: FormService,\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService,\r\n private scoreCalcService: ScoreCalculationService,\r\n private whenClauseService:WhenClauseService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.color = this.question.formElement.appearance.color;\r\n this.displayOptionsInColumn =\r\n this.question.formElement.appearance.displayOptionsInColumn;\r\n this.optionType = this.question.formElement.option.optionType;\r\n\r\n switch (this.optionType) {\r\n case 'OPTION':\r\n this.customOptions = this.question.formElement.option.customOptions.map(\r\n (option: any) => ({\r\n value: option.value,\r\n label: option.value,\r\n })\r\n );\r\n this.initializeOption();\r\n break;\r\n case 'LOOKUP':\r\n this.lookupTable = this.question.formElement.option.lookupTable;\r\n this.fetchDataFromLookup();\r\n break;\r\n case 'DATABASE':\r\n this.database = this.question.formElement.option.database;\r\n this.fetchDataFromDatabase();\r\n break;\r\n case 'API':\r\n this.api = this.question.formElement.option.api;\r\n this.fetchDataFromAPI();\r\n break;\r\n default:\r\n console.warn('Unknown option type:', this.optionType);\r\n }\r\n\r\n if (this.question.childLogics && this.question.answer) {\r\n this.updateChildLogics(this.question);\r\n }\r\n if (\r\n this.question.formElement.scoring &&\r\n this.question.formElement.scoring.enableScoring\r\n ) {\r\n this.maxPossibleScore =\r\n this.scoreCalcService.getMaxPossibleScoreForQuestion(this.question);\r\n this.question.maxPossibleScore = this.maxPossibleScore;\r\n }\r\n }\r\n\r\n initializeOption() {\r\n if (this.question.answer) {\r\n const dataType = typeof this.customOptions[0]?.value;\r\n let convertedAnswer;\r\n\r\n switch (dataType) {\r\n case 'number':\r\n convertedAnswer = Number(this.question.answer);\r\n break;\r\n case 'boolean':\r\n convertedAnswer = this.question.answer === 'true';\r\n break;\r\n case 'string':\r\n convertedAnswer = String(this.question.answer);\r\n break;\r\n default:\r\n convertedAnswer = this.question.answer;\r\n }\r\n this.selectedOption = convertedAnswer;\r\n setTimeout(() => {\r\n const answers = this.question.answer.split('|')[1]\r\n this.whenClauseService.setQuestionAnswer(this.question.id,answers,true);\r\n });\r\n }\r\n }\r\n\r\n fetchDataFromLookup() {\r\n this.formService.fetchDataFromLookup(this.lookupTable).subscribe(\r\n (response) => {\r\n this.customOptions = response.result.values.map(\r\n (item: { value: string; label: string }) => ({\r\n value: item.value,\r\n label: item.label,\r\n })\r\n );\r\n this.initializeOption();\r\n },\r\n (error) => {\r\n console.error('HTTP Error:', error);\r\n }\r\n );\r\n }\r\n\r\n fetchDataFromDatabase() {\r\n const transformedDatabase = this.transformDatabaseObject(this.database);\r\n this.formService.fetchDataFromDatabase(transformedDatabase).subscribe(\r\n (response) => {\r\n if (response.success) {\r\n this.customOptions = response.result?.content?.map(\r\n (item: { value: string; label: string }) => ({\r\n value: item.value,\r\n label: item.label,\r\n })\r\n );\r\n this.initializeOption();\r\n } else {\r\n console.error('Error fetching data from database:', response.message);\r\n }\r\n },\r\n (error) => {\r\n console.error('HTTP Error:', error);\r\n }\r\n );\r\n }\r\n\r\n transformDatabaseObject(database: any) {\r\n return {\r\n tableName: database.tableName,\r\n valueField: database.valueField,\r\n labelField: database.labelField,\r\n labelPattern: database?.labelPattern,\r\n criteria: database.criteria.map((criteria: any) => ({\r\n field: criteria.field,\r\n valueSource: criteria?.valueSource,\r\n condition: criteria.condition,\r\n value: criteria.inputValue,\r\n logicalOperator: criteria.logicalOperator,\r\n })),\r\n };\r\n }\r\n\r\n fetchDataFromAPI() {\r\n const apiConfig = this.api;\r\n const allowedChars = ['.', ',', '-', '_', '(', ')', ''];\r\n\r\n this.formService.fetchDataFromExternalAPI(apiConfig).subscribe(\r\n (response) => {\r\n let data;\r\n if(apiConfig.pathToValue) {\r\n data = this.extractDataByPath(response, apiConfig.pathToValue);\r\n } else {\r\n data = response;\r\n }\r\n\r\n this.customOptions = data.map((item: any) => {\r\n if (\r\n apiConfig.labelPattern &&\r\n Array.isArray(apiConfig.labelPattern) &&\r\n apiConfig.labelPattern.length > 0\r\n ) {\r\n let label = '';\r\n apiConfig.labelPattern.forEach((pattern: string) => {\r\n pattern = pattern.trim();\r\n if (allowedChars.includes(pattern)) {\r\n label += pattern;\r\n } else {\r\n if (item[pattern] !== undefined && item[pattern] !== null) {\r\n label += item[pattern]+' ';\r\n }\r\n }\r\n });\r\n return {\r\n value: item[apiConfig.valueField.trim()],\r\n label: label,\r\n };\r\n } else {\r\n return {\r\n value: item[apiConfig.valueField.trim()],\r\n label: item[apiConfig.labelField.trim()],\r\n };\r\n }\r\n });\r\n this.initializeOption();\r\n },\r\n (error) => {\r\n console.error('HTTP Error:', error);\r\n }\r\n );\r\n }\r\n\r\n extractDataByPath(data: any, path: string) {\r\n return path.split('.').reduce((acc, part) => acc && acc[part], data);\r\n }\r\n\r\n validateInput() {\r\n this.question.answer = this.selectedOption;\r\n const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(\r\n this.question.answer,\r\n this.question\r\n );\r\n this.question.score = scoreResult?.scores;\r\n this.validationFailed = false;\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationMessage = '';\r\n if (this.required && !this.selectedOption && this.question.required) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'This is a required question';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'This is a required question';\r\n\r\n if (!this.subscribedToWhenClause) {\r\n this.subscribedToWhenClause = true;\r\n this.whenClauseService.onQuestionChange().subscribe(change => {\r\n this.validateInput();\r\n });\r\n }\r\n } else {\r\n this.question.validation = true;\r\n }\r\n if (this.question.childLogics) {\r\n this.updateChildLogics(this.question);\r\n }\r\n this.answerChange.emit({\r\n answer: this.question.answer,\r\n maxPossibleScore: this.maxPossibleScore,\r\n });\r\n const answers = this.question.answer.split('|')[1]\r\n this.whenClauseService.setQuestionAnswer(this.question.id,answers);\r\n }\r\n\r\n updateChildLogics(question: any) {\r\n if (question.childLogics && Array.isArray(question.childLogics)) {\r\n question.childLogics.forEach((childLogic: any) => {\r\n if (\r\n this.evaluateCondition(\r\n this.selectedOption,\r\n childLogic.condition,\r\n childLogic.inputValue\r\n )\r\n ) {\r\n childLogic.showLogic = true;\r\n } else {\r\n childLogic.showLogic = false;\r\n this.clearAnswersRecursively(childLogic);\r\n }\r\n });\r\n }\r\n }\r\n\r\n clearAnswersRecursively(logic: any) {\r\n if (!logic || !logic.rows) return;\r\n\r\n logic.rows.forEach((row: any) => {\r\n row.grid.forEach((item: any) => {\r\n const element = item.element;\r\n\r\n if (item.entityType === 'QUESTION' && element) {\r\n // Clear answer if present\r\n if ('answer' in element) {\r\n element.answer = '';\r\n }\r\n\r\n // Recursively clear childLogics if any\r\n if (element.childLogics && element.childLogics.length > 0) {\r\n element.childLogics.forEach((childLogic: any) => {\r\n this.clearAnswersRecursively(childLogic);\r\n });\r\n }\r\n }\r\n\r\n if (item.entityType === 'SUBFORM' && element && element.rows) {\r\n // SUBFORM contains its own rows structure like a form\r\n this.clearAnswersRecursively({ rows: element.rows });\r\n }\r\n });\r\n });\r\n }\r\n\r\n evaluateCondition(answer: any, condition: string, inputValue: any): boolean {\r\n let answerLabel = answer;\r\n if (typeof answer === 'string' && answer.includes('|')) {\r\n answerLabel = answer.split('|')[0];\r\n }\r\n\r\n const stringInputValue = Array.isArray(inputValue)\r\n ? inputValue.map((val) => val.toString())\r\n : inputValue;\r\n\r\n switch (condition) {\r\n case '!=':\r\n return answerLabel != stringInputValue;\r\n case '=':\r\n return answerLabel == stringInputValue;\r\n case 'IN':\r\n return stringInputValue.includes(answerLabel);\r\n case 'NOT IN':\r\n return !stringInputValue.includes(answerLabel);\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n handleValidation(\r\n isValid: boolean,\r\n message: string = 'This field is required'\r\n ) {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return this.inLine || this.inCard\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n\r\n this.tracker.registerElement(this.elementId);\r\n setTimeout(() => {\r\n this.whenClauseService.markLoadCompleted();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-3\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"checkboxField-container\"\r\n [class.two-column]=\"displayOptionsInColumn\"\r\n >\r\n <div class=\"checkboxField\" *ngFor=\"let option of customOptions\">\r\n <input\r\n class=\"formCheckbox mb-2\"\r\n type=\"radio\"\r\n [name]=\"question.id+'-'+rowId\"\r\n [id]=\"question.id+'-'+rowId+'-'+option.value\"\r\n [value]=\"option.label + '|' + option.value\"\r\n [style.accent-color]=\"color\"\r\n (blur)=\"validateInput()\"\r\n [(ngModel)]=\"selectedOption\"\r\n (ngModelChange)=\"validateInput()\"\r\n [attr.data-state]=\"option.label + '|' + option.value\"\r\n [attr.data-value]=\"selectedOption == option.label + '|' + option.value\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <label class=\"formCheckLabel ms-2 me-2 mb-2\" [for]=\"question.id+'-'+rowId+'-'+option.value\">{{\r\n option.label\r\n }}</label>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"isInvalid && (!inLine || !selectedOption)\"\r\n class=\"error-message\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\n\r\n@Component({\r\n selector: 'lib-rich-text-editor-fields',\r\n templateUrl: './rich-text-editor-fields.component.html',\r\n styleUrls: ['./rich-text-editor-fields.component.scss'],\r\n})\r\nexport class RichTextEditorFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inSubForm: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n numberOfRows!: number;\r\n limitedCharacters: boolean = false;\r\n counts: number = 0;\r\n htmlContent: string = '';\r\n characterCount!: number;\r\n validationFailed: boolean = false;\r\n validationMessage: string = '';\r\n private elementId: string='';\r\n defaultValue: string = '';\r\n @Input() disableEdit: boolean = false;\r\n constructor(\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService\r\n ) { }\r\n editor: any;\r\n\r\n ngOnInit() {\r\n this.valueAssigned(); \r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.numberOfRows = this.question.formElement.appearance.numberOfRows;\r\n this.limitedCharacters =\r\n this.question.formElement.validation.limitedCharacters;\r\n this.counts = this.question.formElement.validation.count;\r\n this.numberOfRows = this.question.formElement.appearance.numberOfRows;\r\n this.limitedCharacters =\r\n this.question.formElement.validation.limitedCharacters;\r\n if (this.limitedCharacters) {\r\n this.characterCount = this.question.formElement.validation.count;\r\n }\r\n this.defaultValue = this.question?.defaultValue;\r\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\r\n this.htmlContent = this.defaultValue;\r\n if(this.question.answer){\r\n this.htmlContent = this.question?.answer;\r\n }else if(this.defaultValue && !this.question.answer){\r\n this.question.answer = this.defaultValue;\r\n }\r\n }\r\n editorCreated(editorInstance: any) {\r\n this.editor = editorInstance;\r\n this.updateEditorContent(this.htmlContent);\r\n this.editor.on('selection-change', (range: any) => {\r\n if (range === null) {\r\n this.validateEditor();\r\n }\r\n });\r\n }\r\n\r\n // When you receive data from API\r\n updateEditorContent(content: string) {\r\n if (this.editor) {\r\n // this.editor.clipboard.dangerouslyPasteHTML(content);\r\n const delta = this.editor.clipboard.convert(content);\r\n this.editor.setContents(delta, 'silent');\r\n }\r\n this.htmlContent = content;\r\n }\r\n validateEditor() {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationFailed = false;\r\n this.validationMessage = '';\r\n if (!this.htmlContent && this.required) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'This is a required question';\r\n this.question.validationMessage = 'This is a required question';\r\n }\r\n }\r\n\r\n\r\n\r\n updateAnswer(content: string) {\r\n this.question.answer = content;\r\n this.validationService.clearInvalid(this.buildElementId());\r\n if (this.htmlContent?.length >= this.characterCount) {\r\n this.htmlContent = this.htmlContent.substring(0, this.characterCount);\r\n }\r\n this.question.answer = this.htmlContent;\r\n this.validateEditor();\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n }\r\n\r\n \r\n handleValidation(isValid: boolean, message: string = 'This field is required') {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return (this.inLine || this.inCard)\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n \r\n this.tracker.registerElement(this.elementId);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <quill-editor\r\n [(ngModel)]=\"htmlContent\"\r\n (ngModelChange)=\"updateAnswer($event)\"\r\n (onEditorCreated)=\"editorCreated($event)\"\r\n (blur)=\"validateEditor()\"\r\n class=\"editor\"\r\n [ngClass]=\"{\r\n 'inSubform': inSubForm && !disableEdit,\r\n 'disable': disableEdit\r\n }\"\r\n placeholder=\"\"\r\n [disabled]=\"disableEdit\"\r\n ></quill-editor>\r\n <div *ngIf=\"isInvalid && (!inLine || !htmlContent)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { ValidationService } from '../../services/validation.service';\r\n\r\n@Component({\r\n selector: 'lib-selection-matrix-fields',\r\n templateUrl: './selection-matrix-fields.component.html',\r\n styleUrls: ['./selection-matrix-fields.component.scss'],\r\n})\r\nexport class SelectionMatrixFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() acceptedLanguage: string = '';\r\n @Input() rowId: number = 0;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n selectionMatrixColumn: any[] = [];\r\n selectionMatrixLabel: any[] = [];\r\n selectedOptions: string[] = [];\r\n validationFailed!: boolean;\r\n validationMessage: string = '';\r\n minSelectionValue!: number;\r\n private elementId: string='';\r\n selectionColor : string = '';\r\n selectionColorRequired: boolean = false;\r\n @Input() disableEdit: boolean = false;\r\n \r\n constructor(\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService\r\n ) { }\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.selectionColorRequired = this.question.formElement.appearance.selectionColorRequired;\r\n if(this.selectionColorRequired){\r\n this.selectionColor = this.question.formElement.appearance.selectionColor; \r\n }\r\n if (\r\n this.question?.formElement?.selectionMatrixLabel ||\r\n this.question?.element?.formElement?.selectionMatrixColumn\r\n ) {\r\n this.selectionMatrixLabel = (\r\n this.question?.formElement?.selectionMatrixLabel || []\r\n )\r\n .flatMap((label: any) => {\r\n const lab = this.isParsableJSON(label) ? JSON.parse(label) : label;\r\n return Array.isArray(lab)\r\n ? lab.map((value) => ({ label: value }))\r\n : { label: lab };\r\n })\r\n .filter((labelObj: any) => labelObj.label !== '');\r\n\r\n this.selectionMatrixColumn = (\r\n this.question?.formElement?.selectionMatrixColumn || []\r\n )\r\n .flatMap((column: any) => {\r\n const col = this.isParsableJSON(column) ? JSON.parse(column) : column;\r\n return Array.isArray(col)\r\n ? col.map((value) => ({ column: value }))\r\n : { column: col };\r\n })\r\n .filter((columnObj: any) => columnObj.column !== '');\r\n }\r\n this.minSelectionValue =\r\n this.question?.formElement?.validation?.minSelectionValue;\r\n if (this.question.answer) {\r\n this.selectedOptions = this.question.answer;\r\n }\r\n }\r\n\r\n private isParsableJSON(value: any): boolean {\r\n if (typeof value !== 'string') return false;\r\n try {\r\n JSON.parse(value);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n onSelectionChange(rowIndex: number, value: string) {\r\n this.selectedOptions[rowIndex] = value;\r\n this.validateInput();\r\n }\r\n\r\n validateInput() {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationFailed = false;\r\n this.validationMessage = '';\r\n this.question.answer = this.selectedOptions;\r\n if (this.required && this.selectedOptions.length == 0) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'This is a required question';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'This is a required question';\r\n } else if (this.selectedOptions.length < this.minSelectionValue) {\r\n this.validationFailed = true;\r\n this.validationMessage = `selected options must be greater than ${this.minSelectionValue}`;\r\n this.question.validation = false;\r\n this.question.validationMessage = `selected options must be greater than ${this.minSelectionValue}`;\r\n } else {\r\n this.question.validation = true;\r\n }\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n }\r\n\r\n \r\n handleValidation(isValid: boolean, message: string = 'This field is required') {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return (this.inLine || this.inCard)\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n \r\n this.tracker.registerElement(this.elementId);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{ 'labelBorder-rtl': acceptedLanguage === 'ara' }\">\r\n <table class=\"selectionMatrix\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th\r\n class=\"text-center table-cell-wrap\"\r\n *ngFor=\"let column of selectionMatrixColumn\"\r\n >\r\n {{ column.column }}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-group-divider\">\r\n <tr *ngFor=\"let label of selectionMatrixLabel; let rowIndex = index\">\r\n <td class=\"table-cell-wrap\">{{ label.label }}</td>\r\n <td\r\n *ngFor=\"let column of selectionMatrixColumn; let colIndex = index\"\r\n class=\"text-center\"\r\n >\r\n <input\r\n type=\"radio\"\r\n [attr.id]=\"'radio-' + rowIndex + '-' + colIndex + '-' + rowId\"\r\n [name]=\"'radio-' + rowIndex + '-' + colIndex + '-' + rowId\"\r\n class=\"selectionRadio\"\r\n [style.accent-color]=\"selectionColor\"\r\n [value]=\"label.label + '_' + column.column\"\r\n [(ngModel)]=\"selectedOptions[rowIndex]\"\r\n (ngModelChange)=\"\r\n onSelectionChange(rowIndex, label.label + '_' + column.column)\r\n \"\r\n [disabled]=\"disableEdit\"\r\n />\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"isInvalid && (!inLine || selectedOptions.length == 0)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mt-2\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-signature-fields',\n templateUrl: './signature-fields.component.html',\n styleUrls: ['./signature-fields.component.scss'],\n})\nexport class SignatureFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n \n count: number = 0;\n required: boolean = false;\n hint: string = '';\n maxFileSize: number = 0;\n minFileSize: number = 0;\n\n ngOnInit() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.maxFileSize = this.question.formElement.validation.maxFileSize;\n this.minFileSize = this.question.formElement.validation.minFileSize;\n }\n}\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, Input, Renderer2, ElementRef, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-slider-fields',\r\n templateUrl: './slider-fields.component.html',\r\n styleUrls: ['./slider-fields.component.scss'],\r\n})\r\nexport class SliderFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n minValue: number = 0;\r\n maxValue: number = 0;\r\n stepValue: number = 0;\r\n changeSliderColor: boolean = false;\r\n sliderColor: string = '';\r\n validationFailed: boolean = false;\r\n validationMessage: string = '';\r\n selectedValue: number = 0;\r\n @Input() disableEdit: boolean = false;\r\n\r\n constructor(private renderer: Renderer2, private el: ElementRef) { }\r\n\r\n ngOnInit() {\r\n\r\n this.valueAssigned();\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.minValue = this.question.formElement.appearance.minValue;\r\n this.maxValue = this.question.formElement.appearance.maxValue;\r\n this.stepValue = this.question.formElement.appearance.stepValue;\r\n this.changeSliderColor =\r\n this.question.formElement.appearance.changeSliderColor;\r\n\r\n if (this.changeSliderColor) {\r\n this.sliderColor = this.question.formElement.appearance.sliderColor;\r\n }\r\n\r\n if (this.question.answer && Object.keys(this.question.answer).length>0) {\r\n this.selectedValue = this.question?.answer;\r\n } else {\r\n this.selectedValue = this.minValue;\r\n }\r\n }\r\n\r\n\r\n validateInput(event: any) {\r\n this.question.answer = String(this.selectedValue);\r\n this.question.validation = true;\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n }\r\n\r\n}\r\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"sliderRow\">\r\n <div class=\"sliderLeft\">\r\n <mat-slider\r\n [min]=\"minValue\"\r\n [max]=\"maxValue\"\r\n [step]=\"stepValue\"\r\n [ngStyle]=\"{\r\n '--mdc-slider-active-track-color': changeSliderColor\r\n ? sliderColor\r\n : ''\r\n }\"\r\n >\r\n <input\r\n matSliderThumb\r\n [(ngModel)]=\"selectedValue\"\r\n (input)=\"validateInput($event)\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n </mat-slider>\r\n </div>\r\n <div class=\"sliderRight\">\r\n <label class=\"selected-count font-weight-bold\">{{ selectedValue }}</label>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\nimport { FormService } from '../../services/form.service';\nimport { DataService } from '../../services/data.service';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n@Component({\n selector: 'lib-terms-and-condition-fields',\n templateUrl: './terms-and-condition-fields.component.html',\n styleUrls: ['./terms-and-condition-fields.component.scss'],\n})\nexport class TermsAndConditionFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n \n count: number = 0;\n required: boolean = false;\n hint: string = '';\n fileDataUrl:any;\n private apiUrl: string = '';\n imgUrl:any\n header: any = {};\n visible:boolean=false;\n constructor(\n private formService: FormService,\n private http: HttpClient, \n private dataService: DataService\n ) {\n this.dataService.apiUrl$.subscribe((data) => {\n this.apiUrl = data;\n });\n }\n ngOnInit() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.fileDataUrl=this.question.formElement.termsAndConditionType.fileUrl\n this.question;\n this.count;\n }\n preview(): Observable<any> {\n const headers = new HttpHeaders({\n 'Content-Type': this.header.contentType,\n 'auth-user': this.header.authUser,\n });\n const body = {\n // Your request body content here\n };\n const options = {\n headers: headers,\n body: body,\n };\n const fileUrl =this.fileDataUrl;\n const encodedFileUrl = encodeURIComponent(fileUrl);\n const fullUrl = `?url=${encodedFileUrl}`;\n this.imgUrl= (this.apiUrl + `/api/cdn/preview${fullUrl}`);\n this.visible= true;\n return this.http.get<any>(this.apiUrl + `/api/cdn/preview${fullUrl}`, options);\n }\n closeModal() {\n this.visible = false;\n }\n}\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\" ></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label (click)=\"preview()\">{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"modal1\" *ngIf=\"visible\">\r\n <div class=\"modal-content1\">\r\n <span class=\"close\" (click)=\"closeModal()\">&times;</span>\r\n <div class=\"imgContiner\">\r\n <img [src]=\"imgUrl\" alt=\"Image\">\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n","import { Component, Input, ElementRef, ViewChild, AfterViewInit, Output, EventEmitter } from '@angular/core';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\n\r\n@Component({\r\n selector: 'lib-text-area-fields',\r\n templateUrl: './text-area-fields.component.html',\r\n styleUrls: ['./text-area-fields.component.scss'],\r\n})\r\nexport class TextAreaFieldsComponent implements AfterViewInit {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @ViewChild('textarea') textarea!: ElementRef<HTMLTextAreaElement>;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n\r\n answer: string = '';\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n numberOfRows!: number;\r\n limitedCharacters!: boolean;\r\n characterCount!: number;\r\n validationFailed: boolean = false;\r\n validationMessage: string = '';\r\n enteredText: string = '';\r\n maxHeight!: number;\r\n lineHeight!: number;\r\n defaultValue: string = '';\r\n @Input() disableEdit: boolean = false;\r\n private subscribedToWhenClause = false;\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n private elementId: string='';\r\n\r\n constructor(\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService,\r\n private whenClauseService:WhenClauseService\r\n ) { }\r\n\r\n ngAfterViewInit() {\r\n if (this.textarea?.nativeElement) {\r\n this.calculateMaxHeight();\r\n }\r\n\r\n this.elementId = `question-${this.question.id}`;\r\n this.tracker.registerElement(this.elementId);\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.numberOfRows = this.question.formElement.appearance.numberOfRows;\r\n this.limitedCharacters = this.question.formElement.validation.limitedCharacters;\r\n this.defaultValue = this.question?.defaultValue;\r\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\r\n this.enteredText = this.defaultValue;\r\n if (this.limitedCharacters) {\r\n this.characterCount = this.question.formElement.validation.count;\r\n }\r\n if(this.question.answer){\r\n this.enteredText = this.question?.answer;\r\n setTimeout(() => {\r\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\r\n });\r\n }else if(this.defaultValue && !this.question.answer){\r\n this.question.answer = this.defaultValue;\r\n } else{\r\n setTimeout(() => {\r\n this.whenClauseService.setQuestionAnswer(this.question.id,'',true);\r\n });\r\n }\r\n }\r\n\r\n calculateMaxHeight() {\r\n const textareaEl = this.textarea.nativeElement;\r\n const computedStyles = window.getComputedStyle(textareaEl);\r\n\r\n // Get accurate line height\r\n this.lineHeight = parseFloat(computedStyles.lineHeight); // Default fallback to 20px\r\n\r\n // Consider padding and borders\r\n const paddingTop = parseFloat(computedStyles.paddingTop) || 0;\r\n const paddingBottom = parseFloat(computedStyles.paddingBottom) || 0;\r\n const borderTop = parseFloat(computedStyles.borderTopWidth) || 0;\r\n const borderBottom = parseFloat(computedStyles.borderBottomWidth) || 0;\r\n\r\n // Correct height calculation\r\n this.maxHeight = (this.lineHeight * this.numberOfRows) + paddingTop + paddingBottom + borderTop + borderBottom;\r\n\r\n textareaEl.style.height = `${this.maxHeight}px`; // Set exact height\r\n }\r\n\r\n validateInput(event: Event) {\r\n const textarea = event.target as HTMLTextAreaElement;\r\n\r\n // Restrict overflow beyond max height\r\n while (textarea.scrollHeight > this.maxHeight) {\r\n textarea.value = textarea.value.slice(0, -1);\r\n }\r\n\r\n this.question.answer = textarea.value;\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n setTimeout(() => {\r\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\r\n });\r\n this.validateTextarea();\r\n }\r\n\r\n validateTextarea() {\r\n this.validationFailed = false;\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationMessage = '';\r\n\r\n if (!this.enteredText && this.required && this.question.required) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'This is a required question';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'This is a required question';\r\n if (!this.subscribedToWhenClause) {\r\n this.subscribedToWhenClause = true;\r\n this.whenClauseService.onQuestionChange().subscribe(change => {\r\n this.validateTextarea();\r\n });\r\n }\r\n } else {\r\n this.question.validation = true;\r\n }\r\n }\r\n\r\n\r\n handleValidation(isValid: boolean, message: string = 'This field is required') {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return (this.inLine || this.inCard)\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <textarea\r\n #textarea\r\n class=\"form-control mb-2\"\r\n [ngClass]=\"{ 'no-scroll': numberOfRows }\"\r\n [rows]=\"numberOfRows\"\r\n wrap=\"hard\"\r\n (input)=\"validateInput($event)\"\r\n (blur)=\"validateTextarea()\"\r\n [(ngModel)]=\"enteredText\"\r\n [class.invalid]=\"validationFailed\"\r\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredText)\"\r\n [maxlength]=\"characterCount\"\r\n [disabled]=\"disableEdit\"\r\n ></textarea>\r\n <div *ngIf=\"isInvalid && (!inLine || !enteredText)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { Logic } from '../../models/logic.model';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\n\r\n@Component({\r\n selector: 'lib-text-fields',\r\n templateUrl: './text-fields.component.html',\r\n styleUrls: ['./text-fields.component.scss'],\r\n})\r\nexport class TextFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n answer: string = '';\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n placeholder: string = '';\r\n defaultValue: string = '';\r\n @Input() disableEdit: boolean = false;\r\n validationType: string = '';\r\n validation: string = '';\r\n regex!: RegExp;\r\n enteredText: string = '';\r\n validationFailed: boolean = false;\r\n validationMessage: string = '';\r\n private elementId: string='';\r\n private subscribedToWhenClause = false;\r\n\r\n\r\n constructor(\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService,\r\n private whenClauseService:WhenClauseService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question?.count;\r\n this.required = this.question?.required;\r\n this.hint = this.question?.hint;\r\n this.placeholder = this.question.formElement?.appearance?.placeholder || '';\r\n this.defaultValue = this.question?.defaultValue;\r\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\r\n this.enteredText = this.defaultValue;\r\n this.validationType = this.question.formElement.validation?.validationType;\r\n if (this.validationType == 'CUSTOM_VALIDATION') {\r\n this.validation = this.question.formElement.validation?.validation;\r\n } else if (this.validationType == 'REGULAR_EXPRESSION') {\r\n this.regex = this.question.formElement.validation?.regex;\r\n }\r\n\r\n if (\r\n this.question.answer !== null &&\r\n this.question.answer !== undefined &&\r\n ((typeof this.question.answer === 'string' &&\r\n this.question.answer.trim() !== '') ||\r\n (Array.isArray(this.question.answer) &&\r\n this.question.answer.length > 0) ||\r\n (typeof this.question.answer === 'object' &&\r\n Object.keys(this.question.answer).length > 0))\r\n ) {\r\n this.enteredText = this.question.answer;\r\n setTimeout(() => {\r\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\r\n });\r\n }else if(this.defaultValue && !this.question.answer){\r\n this.question.answer = this.defaultValue;\r\n setTimeout(() => {\r\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\r\n });\r\n } else{\r\n setTimeout(() => {\r\n this.whenClauseService.setQuestionAnswer(this.question.id,'',true);\r\n });\r\n }\r\n if (this.question.childLogics && this.question.answer) {\r\n this.updateChildLogics(this.question)\r\n }\r\n }\r\n\r\n validatetextField() {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationFailed = false;\r\n this.validationMessage = '';\r\n if (this.required && !this.enteredText && this.question.required) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'This is a required question';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'This is a required question';\r\n if (!this.subscribedToWhenClause) {\r\n this.subscribedToWhenClause = true;\r\n this.whenClauseService.onQuestionChange().subscribe(change => {\r\n this.validatetextField();\r\n });\r\n }\r\n } else {\r\n this.question.validation = true;\r\n }\r\n if (this.question.childLogics) {\r\n this.updateChildLogics(this.question);\r\n }\r\n }\r\n\r\n validateInput(event: any) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n let value = event.target.value;\r\n if (this.validation == 'Numbers only') {\r\n event.target.value = value?.replace(/\\D/g, '');\r\n } else if (this.validation == 'Alphanumeric') {\r\n event.target.value = value?.replace(/[^a-zA-Z0-9]/g, '');\r\n } else if (this.validationType == 'REGULAR_EXPRESSION' && this.regex) {\r\n //event.target.value = value?.replace(this.regex, '');\r\n const regex = new RegExp(this.regex);\r\n\r\n if (regex.test(value)) {\r\n event.target.value = value;\r\n } else {\r\n event.target.value = value.slice(0, -1);\r\n }\r\n }\r\n this.question.answer = event.target.value;\r\n this.answerChange.emit({answer:event.target.value,maxPossibleScore:0});\r\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer);\r\n this.validatetextField();\r\n if(!this.inLine && !this.inCard) {\r\n setTimeout(() => {\r\n const el = document.getElementById(this.question.id);\r\n if (el) {\r\n (el as HTMLElement).focus();\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n updateChildLogics(question: any) {\r\n if (question.childLogics && Array.isArray(question.childLogics)) {\r\n question.childLogics.forEach((childLogic: any) => {\r\n if (this.evaluateCondition(this.enteredText, childLogic.condition, childLogic.inputValue)) {\r\n childLogic.showLogic = true;\r\n }\r\n else {\r\n childLogic.showLogic = false;\r\n this.clearAnswersRecursively(childLogic);\r\n }\r\n });\r\n }\r\n }\r\n\r\n evaluateCondition(answer: any, condition: string, inputValue: any): boolean {\r\n const stringInputValue = inputValue;\r\n\r\n switch (condition) {\r\n case '!=':\r\n return answer != inputValue;\r\n case '=':\r\n return answer == inputValue;\r\n case 'LIKE':\r\n return answer.includes(inputValue);\r\n case 'NOT LIKE':\r\n return !answer.includes(inputValue);\r\n case 'BEGIN WITH':\r\n return answer.startsWith(inputValue);\r\n case 'END WITH':\r\n return answer.endsWith(inputValue);\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n clearAnswersRecursively(logic: any) {\r\n if (!logic || !logic.rows) return;\r\n\r\n logic.rows.forEach((row: any) => {\r\n row.grid.forEach((item: any) => {\r\n const element = item.element;\r\n\r\n if (item.entityType === 'QUESTION' && element) {\r\n // Clear answer if present\r\n if ('answer' in element) {\r\n element.answer = '';\r\n }\r\n\r\n // Recursively clear childLogics if any\r\n if (element.childLogics && element.childLogics.length > 0) {\r\n element.childLogics.forEach((childLogic: any) => {\r\n this.clearAnswersRecursively(childLogic);\r\n });\r\n }\r\n }\r\n\r\n if (item.entityType === 'SUBFORM' && element && element.rows) {\r\n // SUBFORM contains its own rows structure like a form\r\n this.clearAnswersRecursively({ rows: element.rows });\r\n }\r\n });\r\n });\r\n }\r\n\r\n handleValidation(isValid: boolean, message: string = 'This field is required') {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return (this.inLine || this.inCard)\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n\r\n this.tracker.registerElement(this.elementId);\r\n setTimeout(() => {\r\n this.whenClauseService.markLoadCompleted();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <input\r\n type=\"text\"\r\n class=\"form-control mb-2 height\"\r\n [placeholder]=\"placeholder\"\r\n [(ngModel)]=\"enteredText\"\r\n (blur)=\"validatetextField()\"\r\n (input)=\"validateInput($event)\"\r\n [class.invalid]=\"validationFailed\"\r\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredText)\"\r\n [id]=\"question.id\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <div *ngIf=\"isInvalid && (!inLine || !enteredText)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-toggle-switch-fields',\r\n templateUrl: './toggle-switch-fields.component.html',\r\n styleUrls: ['./toggle-switch-fields.component.scss'],\r\n})\r\nexport class ToggleSwitchFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Input() acceptedLanguage: string ='';\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n labelOnValue: string = '';\r\n labelOffValue: string = '';\r\n labelOnColor: string = '';\r\n labelOffColor: string = '';\r\n toggleBackgroundColor: string = '';\r\n selectedValue : string ='';\r\n @Input() disableEdit: boolean = false;\r\n \r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n getDirectionClass(): string {\r\n return this.acceptedLanguage === 'ara' ? 'direction-rtl' : 'direction-ltr';\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.labelOnValue = this.question.formElement.appearance.labelOnValue;\r\n this.labelOffValue = this.question.formElement.appearance.labelOffValue;\r\n this.labelOnColor = this.question.formElement.appearance.labelOnColor;\r\n this.labelOffColor = this.question.formElement.appearance.labelOffColor;\r\n \r\n if (!this.question.answer) {\r\n this.question.answer = this.labelOffValue;\r\n this.question.validation = true;\r\n this.selectedValue=this.labelOffValue;\r\n this.toggleBackgroundColor = this.labelOffColor;\r\n }\r\n if (this.question.answer) {\r\n if(this.question.answer===this.labelOnValue){\r\n this.selectedValue=this.labelOnValue;\r\n this.toggleBackgroundColor = this.labelOnColor;\r\n }\r\n else{\r\n this.selectedValue=this.labelOffValue;\r\n this.toggleBackgroundColor = this.labelOffColor;\r\n }\r\n \r\n this.question.validation = true;\r\n }\r\n }\r\n\r\n toggleSliderColor(event: any): void {\r\n let isChecked = event.target.checked; \r\n this.question.answer = isChecked ?this.labelOnValue:this.labelOffValue;\r\n this.question.validation = true;\r\n this.selectedValue=this.question.answer;\r\n this.toggleBackgroundColor = isChecked\r\n ? this.question.formElement.appearance.labelOnColor\r\n : this.question.formElement.appearance.labelOffColor;\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n }\r\n}\r\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"mt-2\">\r\n <label\r\n class=\"switch\"\r\n [ngClass]=\"{\r\n 'direction-rtl': acceptedLanguage === 'ara',\r\n 'direction-ltr': acceptedLanguage !== 'ara'\r\n }\"\r\n [attr.name]=\"question.testElementName\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n id=\"togBtn\"\r\n (change)=\"toggleSliderColor($event)\"\r\n [checked]=\"selectedValue === labelOnValue\"\r\n [attr.data-state]=\"selectedValue\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <div\r\n class=\"slider round\"\r\n [ngClass]=\"getDirectionClass()\"\r\n [ngStyle]=\"{ 'background-color': toggleBackgroundColor }\"\r\n >\r\n <span class=\"on action-btn-text\">{{ labelOnValue }}</span>\r\n <span class=\"off action-btn-text\">{{ labelOffValue }}</span>\r\n </div>\r\n </label>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { ValidationService } from '../../services/validation.service';\r\n\r\n@Component({\r\n selector: 'lib-url-fields',\r\n templateUrl: './url-fields.component.html',\r\n styleUrls: ['./url-fields.component.scss'],\r\n})\r\nexport class UrlFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n placeholder: string = '';\r\n showPreviewButton!: boolean;\r\n enteredUrl: string = '';\r\n validationFailed: boolean = false;\r\n validationMessage: string = '';\r\n defaultValue: string = '';\r\n @Input() disableEdit: boolean = false;\r\n\r\n private elementId: string='';\r\n \r\n constructor(\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService\r\n ) { }\r\n \r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n handleClick() {\r\n let textFieldValue = (document.getElementById('textField') as HTMLInputElement).value.trim();\r\n\r\n if (!/^https?:\\/\\//i.test(textFieldValue)) {\r\n textFieldValue = 'http://' + textFieldValue;\r\n }\r\n\r\n window.open(textFieldValue, '_blank');\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.placeholder = this.question.formElement.appearance.placeholder;\r\n this.showPreviewButton =\r\n this.question.formElement.appearance.showPreviewButton;\r\n this.defaultValue = this.question?.defaultValue;\r\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\r\n this.enteredUrl = this.defaultValue;\r\n if(this.question.answer){\r\n this.enteredUrl = this.question?.answer; \r\n }else if(this.defaultValue && !this.question.answer){\r\n this.question.answer = this.defaultValue;\r\n }\r\n }\r\n validateUrl() {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationFailed = false;\r\n this.validationMessage = '';\r\n if (this.required && !this.enteredUrl) {\r\n this.validationFailed = true;\r\n this.validationMessage = 'This is a required question';\r\n this.question.validation = false;\r\n this.question.validationMessage = 'This is a required question';\r\n }\r\n else {\r\n this.question.validation = true;\r\n }\r\n }\r\n\r\n validateInput(event: any) {\r\n this.validateUrl();\r\n this.question.answer = event.target.value;\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n }\r\n\r\n handleValidation(isValid: boolean, message: string = 'This field is required') {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return (this.inLine || this.inCard)\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n \r\n this.tracker.registerElement(this.elementId);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"input-group\">\r\n <input\r\n [id]=\"question.id\"\r\n type=\"text\"\r\n class=\"form-control col-11.5 rounded height\"\r\n [placeholder]=\"placeholder\"\r\n [(ngModel)]=\"enteredUrl\"\r\n (blur)=\"validateUrl()\"\r\n (input)=\"validateInput($event)\"\r\n [class.invalid]=\"validationFailed\"\r\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredUrl)\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n <div class=\"ps-2 pe-2\">\r\n <button\r\n *ngIf=\"showPreviewButton\"\r\n type=\"button\"\r\n class=\"btn col-.5 custom-button rounded d-flex justify-content-center align-items-center height\"\r\n (click)=\"handleClick()\"\r\n >\r\n <svg\r\n width=\"30\"\r\n height=\"30\"\r\n viewBox=\"0 0 30 30\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M4.99561 16.2503C4.99561 21.7754 9.47462 26.2544 14.9998 26.2544C20.5249 26.2544 25.0039 21.7754 25.0039 16.2503C25.0039 10.7251 20.5249 6.24609 14.9998 6.24609H6.24613\"\r\n stroke=\"#084FFF\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M9.99766 2.49219L6.24609 6.24375\"\r\n stroke=\"#084FFF\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M9.99766 9.99766L6.24609 6.24609\"\r\n stroke=\"#084FFF\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M17.7924 14.8125L14.3035 18.3015L12.2051 16.2106\"\r\n stroke=\"#084FFF\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isInvalid && (!inLine || !enteredUrl)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { AggregationFunctionService } from '../../services/aggregate.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-aggregate-function',\r\n templateUrl: './aggregate-function.component.html',\r\n styleUrls: ['./aggregate-function.component.scss']\r\n})\r\nexport class AggregateFunctionComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n @Input() rowId: any ;\r\n answer: string = '';\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n placeholder: string = '';\r\n validationFailed: boolean = false;\r\n validationMessage: string = '';\r\n private elementId: string='';\r\n private subscription!: Subscription;\r\n result:number=0;\r\n @Input() disableEdit: boolean = false;\r\n \r\n constructor(\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService,\r\n private aggregateService:AggregationFunctionService,\r\n private cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n this.aggregateService.setAggregateField(this.rowId,this.question.id,this.question.formElement.aggregateFunction.aggregateOperation,this.question.formElement.aggregateFunction.formula);\r\n \r\n this.subscription = this.aggregateService.aggregateFieldResults$.subscribe(update => {\r\n if (update && update.id === `${this.rowId}:${this.question.id}`) { // include rowId\r\n if(update.evaluated){\r\n this.result = update.result;\r\n this.question.answer = String(this.result);\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else{\r\n this.result = 0;\r\n this.question.answer = '';\r\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\r\n }\r\n }\r\n });\r\n }\r\n \r\n\r\n valueAssigned() {\r\n this.count = this.question?.count;\r\n this.required = this.question?.required;\r\n this.hint = this.question?.hint;\r\n this.placeholder = this.question.formElement?.appearance?.placeholder || '';\r\n if (\r\n this.question.answer !== null &&\r\n this.question.answer !== undefined &&\r\n ((typeof this.question.answer === 'string' &&\r\n this.question.answer.trim() !== '') ||\r\n (Array.isArray(this.question.answer) &&\r\n this.question.answer.length > 0) ||\r\n (typeof this.question.answer === 'object' &&\r\n Object.keys(this.question.answer).length > 0))\r\n ) {\r\n this.result = this.question.answer;\r\n }\r\n }\r\n \r\n\r\n clearAnswersRecursively(logic: any) {\r\n if (!logic || !logic.rows) return;\r\n \r\n logic.rows.forEach((row: any) => {\r\n row.grid.forEach((item: any) => {\r\n const element = item.element;\r\n \r\n if (item.entityType === 'QUESTION' && element) {\r\n // Clear answer if present\r\n if ('answer' in element) {\r\n element.answer = '';\r\n }\r\n \r\n // Recursively clear childLogics if any\r\n if (element.childLogics && element.childLogics.length > 0) {\r\n element.childLogics.forEach((childLogic: any) => {\r\n this.clearAnswersRecursively(childLogic);\r\n });\r\n }\r\n }\r\n \r\n if (item.entityType === 'SUBFORM' && element && element.rows) {\r\n // SUBFORM contains its own rows structure like a form\r\n this.clearAnswersRecursively({ rows: element.rows });\r\n }\r\n });\r\n });\r\n }\r\n\r\n handleValidation(isValid: boolean, message: string = 'This field is required') {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return (this.inLine || this.inCard)\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n \r\n this.tracker.registerElement(this.elementId);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <input\r\n type=\"text\"\r\n class=\"form-control mb-2 height\"\r\n [placeholder]=\"placeholder\"\r\n [(ngModel)]=\"result\"\r\n readonly\r\n [class.invalid-question]=\"isInvalid && (!inLine || !result)\"\r\n [id]=\"question.id\"\r\n />\r\n <div *ngIf=\"isInvalid && (!inLine || !result)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { AggregationFunctionService } from '../../services/aggregate.service';\r\ntype CurrencyMeta = {\r\n codes: string[];\r\n symbols?: string[];\r\n mainUnit: string;\r\n subUnit: string;\r\n decimals: number;\r\n};\r\n\r\n@Component({\r\n selector: 'lib-currency-fields',\r\n templateUrl: './currency-fields.component.html',\r\n styleUrls: ['./currency-fields.component.scss'],\r\n})\r\nexport class CurrencyFieldsComponent {\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Input() disableEdit: boolean = false;\r\n @Output() answerChange = new EventEmitter<{\r\n answer: any;\r\n maxPossibleScore?: number;\r\n amountInWords: string;\r\n currency: string;\r\n }>();\r\n @Input() rowId: any;\r\n\r\n count: number = 0;\r\n required: boolean = false;\r\n hint: string = '';\r\n placeholder: string = '';\r\n min!: number;\r\n max!: number;\r\n currencySymbol: string = '';\r\n decimalPrecision!: number;\r\n symbolPosition: string = 'Before the value';\r\n thousandSeparator!: boolean;\r\n showAmountInWords: boolean = false;\r\n enteredAmount!: string;\r\n validationFailed: boolean = false;\r\n validationMessage: string = '';\r\n private elementId: string = '';\r\n amountInWordsText: string = '';\r\n defaultCurrency:string='';\r\n constructor(\r\n private validationService: ValidationService,\r\n private tracker: ElementTrackerService,\r\n private aggregateService: AggregationFunctionService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question.count;\r\n this.required = this.question.required;\r\n this.hint = this.question.hint;\r\n this.defaultCurrency=this.question.formElement?.appearance?.defaultCurrency || '';\r\n this.placeholder = this.question.formElement?.appearance?.placeholder || '';\r\n this.currencySymbol = this.question.formElement?.appearance?.currencySymbol;\r\n this.decimalPrecision =\r\n this.question.formElement?.appearance?.decimalPrecision || 2;\r\n this.symbolPosition =\r\n this.question.formElement?.appearance?.symbolPosition ||\r\n 'Before the value';\r\n this.thousandSeparator =\r\n this.question.formElement?.appearance?.thousandSeparator;\r\n this.min = this.question.formElement.validation.min;\r\n this.max = this.question.formElement.validation.max;\r\n this.showAmountInWords =\r\n this.question.formElement?.appearance?.showAmountInWords;\r\n if (this.question.formElement?.appearance?.currency) {\r\n let userLocaleCureency = this.question.formElement?.appearance?.currency;\r\n if (this.question.formElement.appearance.currencyOption) {\r\n let currencyOption =\r\n this.question.formElement.appearance.currencyOption;\r\n if (currencyOption == 'auto') {\r\n if (\r\n this.question.formElement.appearance.limitCurrencySymbol &&\r\n this.question.formElement.appearance.limitCurrencySymbol.length > 0\r\n ) {\r\n this.currencySymbol =\r\n this.question.formElement.appearance.limitCurrencySymbol.includes(\r\n userLocaleCureency\r\n )\r\n ? userLocaleCureency\r\n : this.question.formElement?.appearance?.currencySymbol;\r\n } else {\r\n this.currencySymbol = userLocaleCureency;\r\n }\r\n } else if (currencyOption == 'specific') {\r\n this.currencySymbol =\r\n this.question.formElement?.appearance?.specificCurrencySymbol;\r\n }\r\n }\r\n }\r\n if (\r\n !this.currencySymbol &&\r\n this.question.formElement?.appearance?.currencySymbol\r\n ) {\r\n this.currencySymbol =\r\n this.question.formElement?.appearance?.currencySymbol;\r\n }\r\n if(this.question.formElement?.appearance?.defaultCurrency){\r\n this.currencySymbol = this.question.formElement?.appearance?.defaultCurrency;\r\n }\r\n if(this.question.answerCurrency){\r\n this.currencySymbol=this.question.answerCurrency;\r\n }\r\n\r\n\r\n if (this.question.answer) {\r\n this.initializeAnswer();\r\n }\r\n if (this.showAmountInWords) {\r\n this.amountInWordsText = this.question.amountInWords;\r\n }\r\n if (this.question.childLogics && this.question.answer) {\r\n this.updateChildLogics(this.question);\r\n }\r\n this.aggregateService.setNumberField(\r\n this.rowId,\r\n this.question.id,\r\n this.question.answer\r\n );\r\n }\r\n\r\n initializeAnswer() {\r\n let value = this.question?.answer;\r\n if (!value) return;\r\n // check if numeric\r\n if (!isNaN(Number(value))) {\r\n if (this.thousandSeparator) {\r\n const parts = value.split('.');\r\n parts[0] = Number(parts[0]).toLocaleString('en-US'); // adds proper thousand separator\r\n value = parts.join('.');\r\n } else {\r\n value = value;\r\n }\r\n }\r\n\r\n this.enteredAmount = value;\r\n }\r\n\r\n preventNumberScroll(event: WheelEvent) {\r\n if (document.activeElement === event.target) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n validateNumber() {\r\n this.validationFailed = false;\r\n this.validationService.clearInvalid(this.buildElementId());\r\n this.validationMessage = '';\r\n let enteredAmount = this.parseCurrencyToNumber(this.enteredAmount);\r\n if (this.required && !enteredAmount) {\r\n this.validationFailed = true;\r\n this.validationMessage = `Please enter a valid amount`;\r\n this.question.validationMessage = `Please enter a valid amount`;\r\n this.question.validation = false;\r\n } else if (\r\n (this.min !== undefined && enteredAmount < this.min) ||\r\n (this.max !== undefined && enteredAmount > this.max)\r\n ) {\r\n this.validationFailed = true;\r\n\r\n // Construct appropriate validation message based on whether min, max, or both are provided\r\n if (this.min !== undefined && this.max !== undefined) {\r\n this.validationMessage = `Please enter a valid amount between ${this.min} and ${this.max}`;\r\n this.question.validationMessage = `Please enter a valid amount between ${this.min} and ${this.max}`;\r\n } else if (this.min !== undefined) {\r\n this.validationMessage = `Please enter a amount greater than or equal to ${this.min}`;\r\n this.question.validationMessage = `Please enter a amount greater than or equal to ${this.min}`;\r\n } else if (this.max !== undefined) {\r\n this.validationMessage = `Please enter a amount less than or equal to ${this.max}`;\r\n this.question.validationMessage = `Please enter a amount less than or equal to ${this.max}`;\r\n }\r\n\r\n this.question.validation = false;\r\n } else {\r\n this.question.validation = true;\r\n }\r\n if (this.question.childLogics) {\r\n this.updateChildLogics(this.question);\r\n }\r\n }\r\n\r\n validateInput(event: any) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n\r\n // remove existing commas & currency symbol\r\n let rawValue: string = (event.target.value || '')\r\n .replace(/,/g, '')\r\n .replace(this.currencySymbol || '', '');\r\n\r\n // remove any characters except digits and dot\r\n rawValue = rawValue.replace(/[^\\d.]/g, '');\r\n\r\n // keep only the first dot (remove any additional dots)\r\n const firstDot = rawValue.indexOf('.');\r\n if (firstDot !== -1) {\r\n // split into before-first-dot and rest, remove additional dots from rest\r\n const before = rawValue.slice(0, firstDot);\r\n const after = rawValue.slice(firstDot + 1).replace(/\\./g, '');\r\n rawValue = `${before}.${after}`;\r\n }\r\n\r\n // determine decimal precision to enforce (default to 2)\r\n const dp =\r\n typeof this.decimalPrecision === 'number' && this.decimalPrecision >= 0\r\n ? this.decimalPrecision\r\n : 2;\r\n\r\n // if there's a decimal part, trim it to allowed length\r\n if (rawValue.includes('.')) {\r\n const [intPart, decimalPart = ''] = rawValue.split('.');\r\n const trimmedDecimal = decimalPart.slice(0, dp);\r\n rawValue = trimmedDecimal\r\n ? `${intPart}.${trimmedDecimal}`\r\n : intPart + '.';\r\n }\r\n\r\n // format with thousand separator for display\r\n let formattedValue = rawValue;\r\n if (this.thousandSeparator && rawValue) {\r\n const parts = rawValue.split('.');\r\n // handle case where user types \".12\" -> parts[0] === ''\r\n const intPartForFormat = parts[0] === '' ? '0' : parts[0];\r\n parts[0] = Number(intPartForFormat).toLocaleString('en-US');\r\n formattedValue = parts.join('.');\r\n // if original had leading '.' (user typed \".12\"), restore it visually as \".12\"\r\n if (rawValue.startsWith('.') && !formattedValue.startsWith('.')) {\r\n formattedValue = formattedValue.replace(/^0/, '');\r\n }\r\n }\r\n\r\n // keep numeric version for backend/calculations\r\n this.question.answer = rawValue;\r\n this.question.currencySymbol = this.currencySymbol;\r\n\r\n // update field display\r\n event.target.value = formattedValue;\r\n\r\n this.aggregateService.setNumberField(\r\n this.rowId,\r\n this.question.id,\r\n rawValue ? parseFloat(rawValue) : 0\r\n );\r\n\r\n if (this.question.childLogics) {\r\n this.updateChildLogics(this.question);\r\n }\r\n if (this.showAmountInWords) {\r\n this.amountInWordsText = this.convertAmountToWords(rawValue);\r\n this.question.amountInWords = this.amountInWordsText;\r\n }\r\n\r\n this.answerChange.emit({\r\n answer: this.question.answer,\r\n maxPossibleScore: 0,\r\n amountInWords: this.question.amountInWords,\r\n currency: this.currencySymbol\r\n });\r\n this.validateNumber();\r\n }\r\n\r\n // 2) typed currency map\r\n private currencyMap: Record<string, CurrencyMeta> = {\r\n USD: {\r\n codes: ['USD'],\r\n symbols: ['$', 'US$'],\r\n mainUnit: 'Dollars',\r\n subUnit: 'Cents',\r\n decimals: 2,\r\n },\r\n INR: {\r\n codes: ['INR'],\r\n symbols: ['₹', 'Rs', '₨'],\r\n mainUnit: 'Rupees',\r\n subUnit: 'Paisa',\r\n decimals: 2,\r\n },\r\n EUR: {\r\n codes: ['EUR'],\r\n symbols: ['€'],\r\n mainUnit: 'Euros',\r\n subUnit: 'Cents',\r\n decimals: 2,\r\n },\r\n AED: {\r\n codes: ['AED'],\r\n symbols: ['AED', 'د.إ'],\r\n mainUnit: 'Dirhams',\r\n subUnit: 'Fils',\r\n decimals: 2,\r\n },\r\n GBP: {\r\n codes: ['GBP'],\r\n symbols: ['£'],\r\n mainUnit: 'Pounds',\r\n subUnit: 'Pence',\r\n decimals: 2,\r\n },\r\n JPY: {\r\n codes: ['JPY'],\r\n symbols: ['¥'],\r\n mainUnit: 'Yen',\r\n subUnit: '',\r\n decimals: 0,\r\n },\r\n // add more entries as needed\r\n };\r\n\r\n // 3) convertAmountToWords using CurrencyMeta typing\r\n convertAmountToWords(value: string): string {\r\n if (!value) return '';\r\n\r\n // prefer currencyCode (ISO) if available; fall back to symbol\r\n const currencyCode = this.question?.currencyCode || null;\r\n const currencySymbol =\r\n this.question?.currencySymbol || this.currencySymbol || null;\r\n\r\n // find currency metadata from map:\r\n let meta: CurrencyMeta | undefined;\r\n\r\n if (currencyCode) {\r\n meta = this.currencyMap[currencyCode];\r\n }\r\n\r\n if (!meta && currencySymbol) {\r\n meta = Object.values(this.currencyMap).find(\r\n (m) => Array.isArray(m.symbols) && m.symbols.includes(currencySymbol)\r\n );\r\n }\r\n\r\n // use fallback if not found — typed as CurrencyMeta\r\n if (!meta) {\r\n const fallbackName = (\r\n currencyCode ||\r\n currencySymbol ||\r\n 'Currency'\r\n ).toString();\r\n meta = {\r\n codes: [currencyCode || fallbackName],\r\n symbols: currencySymbol ? [currencySymbol] : [],\r\n mainUnit: fallbackName,\r\n subUnit: '',\r\n decimals: 2,\r\n };\r\n }\r\n\r\n // normalize numeric parts\r\n const normalized = (value || '').toString().replace(/,/g, '');\r\n const [intPartStr = '0', decimalPartStr = ''] = normalized.split('.');\r\n\r\n const intPartNum = Number(intPartStr) || 0;\r\n\r\n // calculate subunit number robustly:\r\n const dp =\r\n typeof meta.decimals === 'number' && meta.decimals >= 0\r\n ? meta.decimals\r\n : 2;\r\n let subUnitNumber = 0;\r\n\r\n if (dp > 0 && decimalPartStr) {\r\n const scale = Math.pow(10, dp);\r\n const decDigits = decimalPartStr.replace(/\\D/g, '');\r\n // if shorter than dp, multiply; if longer, trim to dp\r\n const trimmed = decDigits.slice(0, dp);\r\n subUnitNumber = Number(trimmed) * Math.pow(10, dp - trimmed.length);\r\n // guard for rounding overflow (e.g., .999 -> 1.00)\r\n if (subUnitNumber >= scale) {\r\n // increment integer part\r\n return this.buildFinalPhrase(intPartNum + 1, 0, meta);\r\n }\r\n }\r\n\r\n return this.buildFinalPhrase(intPartNum, subUnitNumber, meta);\r\n }\r\n\r\n // 4) buildFinalPhrase accepts CurrencyMeta (or same shape) — typed accordingly\r\n private buildFinalPhrase(\r\n intNum: number,\r\n subNum: number,\r\n meta: { mainUnit: string; subUnit: string; decimals: number }\r\n ): string {\r\n const mainWords = this.numberToWords(intNum) || 'Zero';\r\n\r\n if (meta.decimals === 0 || !meta.subUnit) {\r\n return `${mainWords} ${meta.mainUnit} Only`;\r\n }\r\n\r\n if (!subNum) {\r\n return `${mainWords} ${meta.mainUnit} Only`;\r\n }\r\n\r\n const subWords = this.numberToWords(subNum);\r\n return `${mainWords} ${meta.mainUnit} and ${subWords} ${meta.subUnit} Only`;\r\n }\r\n\r\n // -------------------------\r\n // NUMBER → WORDS (Up to Crores)\r\n // -------------------------\r\n numberToWords(num: number): string {\r\n if (num === 0) return 'Zero';\r\n\r\n const a = [\r\n '',\r\n 'One',\r\n 'Two',\r\n 'Three',\r\n 'Four',\r\n 'Five',\r\n 'Six',\r\n 'Seven',\r\n 'Eight',\r\n 'Nine',\r\n 'Ten',\r\n 'Eleven',\r\n 'Twelve',\r\n 'Thirteen',\r\n 'Fourteen',\r\n 'Fifteen',\r\n 'Sixteen',\r\n 'Seventeen',\r\n 'Eighteen',\r\n 'Nineteen',\r\n ];\r\n const b = [\r\n '',\r\n '',\r\n 'Twenty',\r\n 'Thirty',\r\n 'Forty',\r\n 'Fifty',\r\n 'Sixty',\r\n 'Seventy',\r\n 'Eighty',\r\n 'Ninety',\r\n ];\r\n\r\n const toWords = (n: number): string => {\r\n if (n < 20) return a[n];\r\n if (n < 100) return `${b[Math.floor(n / 10)]} ${a[n % 10]}`.trim();\r\n if (n < 1000)\r\n return `${a[Math.floor(n / 100)]} Hundred ${toWords(n % 100)}`.trim();\r\n if (n < 100000)\r\n return `${toWords(Math.floor(n / 1000))} Thousand ${toWords(\r\n n % 1000\r\n )}`.trim();\r\n if (n < 10000000)\r\n return `${toWords(Math.floor(n / 100000))} Lakh ${toWords(\r\n n % 100000\r\n )}`.trim();\r\n return `${toWords(Math.floor(n / 10000000))} Crore ${toWords(\r\n n % 10000000\r\n )}`.trim();\r\n };\r\n\r\n return toWords(num);\r\n }\r\n\r\n updateChildLogics(question: any) {\r\n if (question.childLogics && Array.isArray(question.childLogics)) {\r\n question.childLogics.forEach((childLogic: any) => {\r\n if (\r\n this.evaluateCondition(\r\n question.answer,\r\n childLogic.condition,\r\n childLogic.inputValue\r\n )\r\n ) {\r\n childLogic.showLogic = true;\r\n } else {\r\n childLogic.showLogic = false;\r\n this.clearAnswersRecursively(childLogic);\r\n }\r\n });\r\n }\r\n }\r\n\r\n parseCurrencyToNumber(value: string): number {\r\n if (!value) return 0;\r\n\r\n // Remove currency symbol, commas, spaces\r\n const numericString = value\r\n .replace(new RegExp(`\\\\${this.currencySymbol}`, 'g'), '') // remove symbol\r\n .replace(/,/g, '') // remove thousand separators\r\n .trim();\r\n\r\n // Convert to number\r\n const num = parseFloat(numericString);\r\n return isNaN(num) ? 0 : num;\r\n }\r\n\r\n clearAnswersRecursively(logic: any) {\r\n if (!logic || !logic.rows) return;\r\n\r\n logic.rows.forEach((row: any) => {\r\n row.grid.forEach((item: any) => {\r\n const element = item.element;\r\n\r\n if (item.entityType === 'QUESTION' && element) {\r\n // Clear answer if present\r\n if ('answer' in element) {\r\n element.answer = '';\r\n }\r\n\r\n // Recursively clear childLogics if any\r\n if (element.childLogics && element.childLogics.length > 0) {\r\n element.childLogics.forEach((childLogic: any) => {\r\n this.clearAnswersRecursively(childLogic);\r\n });\r\n }\r\n }\r\n\r\n if (item.entityType === 'SUBFORM' && element && element.rows) {\r\n // SUBFORM contains its own rows structure like a form\r\n this.clearAnswersRecursively({ rows: element.rows });\r\n }\r\n });\r\n });\r\n }\r\n\r\n evaluateCondition(answer: any, condition: any, inputValue: any) {\r\n switch (condition) {\r\n case '>':\r\n return answer > Number(inputValue);\r\n case '<':\r\n return answer < Number(inputValue);\r\n case '>=':\r\n return answer >= Number(inputValue);\r\n case '<=':\r\n return answer <= Number(inputValue);\r\n case '=':\r\n return answer == inputValue;\r\n case '!=':\r\n return answer != inputValue;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n handleValidation(\r\n isValid: boolean,\r\n message: string = 'This field is required'\r\n ) {\r\n if (isValid) {\r\n this.validationService.clearInvalid(this.buildElementId());\r\n } else {\r\n // this.validationService.setInvalid(this.question.id, message);\r\n }\r\n }\r\n\r\n private buildElementId(): string {\r\n return this.inLine || this.inCard\r\n ? `${this.submissionIndex}-${this.question.id}`\r\n : `${this.question.id}`;\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.buildElementId());\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n\r\n this.tracker.registerElement(this.elementId);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n}\r\n","<div\r\n [ngClass]=\"{ 'mb-4': !inLine }\"\r\n class=\"px-3\"\r\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\r\n [attr.name]=\"question.testElementName\"\r\n>\r\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\r\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\r\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\r\n <label>{{ question.question }}</label\r\n >&nbsp;\r\n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"currency-input inside\">\r\n <span *ngIf=\"symbolPosition === 'Before the value'\" class=\"currency-symbol left\">\r\n {{ currencySymbol }}\r\n </span>\r\n\r\n <input\r\n type=\"text\"\r\n class=\"form-control mb-2 height\"\r\n [placeholder]=\"placeholder\"\r\n [class.hide-spin-buttons]=\"true\"\r\n (blur)=\"validateNumber()\"\r\n [(ngModel)]=\"enteredAmount\"\r\n [class.invalid]=\"validationFailed\"\r\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredAmount)\"\r\n (input)=\"validateInput($event)\"\r\n [attr.min]=\"min\"\r\n [attr.max]=\"max\"\r\n (wheel)=\"preventNumberScroll($event)\"\r\n [disabled]=\"disableEdit\"\r\n />\r\n\r\n <span *ngIf=\"symbolPosition === 'After the value'\" class=\"currency-symbol right\">\r\n {{ currencySymbol }}\r\n </span>\r\n\r\n </div>\r\n <div *ngIf=\"showAmountInWords && amountInWordsText\" class=\"amount-in-words\">\r\n {{ amountInWordsText }}\r\n </div>\r\n <div *ngIf=\"isInvalid && (!inLine || !enteredAmount)\" class=\"error-message\">\r\n {{ errorMessage }}\r\n </div>\r\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { DataService } from '../../services/data.service';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\n\r\n@Component({\r\n selector: 'lib-hidden-field',\r\n template: '',\r\n styleUrls: ['./hidden-field.component.scss']\r\n})\r\nexport class HiddenFieldComponent {\r\n\r\n @Input() question: any = {};\r\n @Input() inLine: boolean = false;\r\n @Input() inCard: boolean = false;\r\n @Input() submissionIndex!: number;\r\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\r\n hint: string = '';\r\n hiddenField!: any;\r\n key: string = '';\r\n valueSource: string = '';\r\n value: string = '';\r\n user: string = '';\r\n private elementId: string='';\r\n \r\n constructor(\r\n private tracker: ElementTrackerService,\r\n private dataService:DataService,\r\n private whenClauseService:WhenClauseService\r\n ) {\r\n this.dataService.header$.subscribe((data) => {\r\n this.user = data.authUser;\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n valueAssigned() {\r\n this.hint = this.question?.hint;\r\n this.hiddenField = this.question?.formElement?.hiddenField;\r\n this.key = this.hiddenField?.key;\r\n this.value = this.hiddenField?.value;\r\n this.valueSource = this.hiddenField?.valueSource;\r\n \r\n const sourcesThatShouldNotOverride = [\r\n 'PREDEFINED_VARIABLE',\r\n 'LOCAL_STORAGE',\r\n 'SESSION_STORAGE'\r\n ];\r\n \r\n const hasExistingAnswer =\r\n this.question.answer !== null &&\r\n this.question.answer !== undefined &&\r\n this.question.answer !== '';\r\n \r\n // 🚨 Skip overwrite if answer exists for specific sources\r\n if (\r\n sourcesThatShouldNotOverride.includes(this.valueSource) &&\r\n hasExistingAnswer\r\n ) {\r\n // Do nothing — keep existing answer\r\n } else {\r\n this.question.answer = this.resolveHiddenFieldValue(this.hiddenField);\r\n }\r\n setTimeout(() => {\r\n this.whenClauseService.setQuestionAnswer(\r\n this.question.id,\r\n this.question.answer,\r\n true\r\n );\r\n });\r\n \r\n this.answerChange.emit({\r\n answer: this.question.answer,\r\n maxPossibleScore: 0\r\n });\r\n }\r\n\r\n resolveHiddenFieldValue(hiddenField: {\r\n value: string | null,\r\n valueSource: string | null,\r\n key: string | null\r\n }): any {\r\n if (!hiddenField?.valueSource) return null;\r\n \r\n switch (hiddenField.valueSource) {\r\n case 'CUSTOM_INPUT':\r\n // Directly return the provided value\r\n return hiddenField.value;\r\n \r\n case 'LOCAL_STORAGE':\r\n if (hiddenField.key) {\r\n return localStorage.getItem(hiddenField.key);\r\n }\r\n return null;\r\n \r\n case 'SESSION_STORAGE':\r\n if (hiddenField.key) {\r\n return sessionStorage.getItem(hiddenField.key);\r\n }\r\n return null;\r\n \r\n case 'PREDEFINED_VARIABLE':\r\n return this.resolvePredefinedVariable(hiddenField.value);\r\n \r\n default:\r\n return null;\r\n }\r\n }\r\n \r\n private resolvePredefinedVariable(variable: string | null): any {\r\n if (!variable) return null;\r\n \r\n const now = new Date();\r\n \r\n switch (variable) {\r\n case 'CURRENT_DATE':\r\n return now.toISOString().split('T')[0]; // e.g. \"2025-09-29\"\r\n case 'CURRENT_TIME':\r\n return now.toTimeString().split(' ')[0]; // e.g. \"15:42:18\"\r\n case 'CURRENT_DATE_TIME':\r\n return now.toLocaleString(); // full ISO datetime\r\n case 'EPOCH_TIME':\r\n return now.getTime(); // milliseconds since 1970\r\n case 'YEAR':\r\n return now.getFullYear();\r\n case 'MONTH':\r\n return now.getMonth() + 1; // 1-12\r\n case 'DAY':\r\n return now.getDate(); // 1-31\r\n case 'SUBMITTED_BY':\r\n return this.user ? this.user : 'Unknown';\r\n default:\r\n return null;\r\n }\r\n }\r\n \r\n\r\n ngAfterViewInit() {\r\n if (this.inLine || this.inCard) {\r\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\r\n } else {\r\n this.elementId = `question-${this.question.id}`;\r\n }\r\n this.tracker.registerElement(this.elementId);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.elementId) {\r\n this.tracker.unregisterElement(this.elementId);\r\n }\r\n }\r\n\r\n}\r\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml, SafeResourceUrl } from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'lib-iframe-fields',\r\n templateUrl: './iframe-fields.component.html',\r\n styleUrls: ['./iframe-fields.component.scss']\r\n})\r\nexport class IframeFieldsComponent {\r\n\r\n @Input() question: any = {};\r\n \r\n height!: string;\r\n width!: string;\r\n contentType: string = '';\r\n htmlContent: string = '';\r\n cssContent: string = '';\r\n scriptContent: string = '';\r\n urlContent: string = '';\r\n count!: number;\r\n\r\n safeHtmlContent!: SafeHtml;\r\n safeUrl!: SafeResourceUrl;\r\n\r\n embeddableDomains = [\r\n // Generic sites that usually allow embedding\r\n 'youtube.com',\r\n 'youtu.be',\r\n 'vimeo.com',\r\n 'player.vimeo.com',\r\n 'maps.google.com',\r\n 'www.google.com/maps',\r\n 'openstreetmap.org',\r\n 'codesandbox.io',\r\n 'stackblitz.com',\r\n 'jsfiddle.net',\r\n 'codepen.io',\r\n 'spotify.com',\r\n 'soundcloud.com',\r\n 'figma.com',\r\n 'canva.com',\r\n 'notion.so',\r\n 'facebook.com/plugins',\r\n 'instagram.com/p',\r\n 'twitter.com',\r\n ];\r\n\r\n constructor(private sanitizer: DomSanitizer) {}\r\n\r\n ngOnInit() {\r\n this.valueAssigned();\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.contentType === 'HTML') {\r\n setTimeout(() => this.renderHtml(), 0);\r\n } else if (this.contentType === 'LINK') {\r\n setTimeout(() => this.renderLink(), 0);\r\n }\r\n }\r\n\r\n valueAssigned() {\r\n this.count = this.question?.count;\r\n this.width = this.question.formElement.appearance.width\r\n ? this.question.formElement.appearance.width + 'px'\r\n : '100%';\r\n this.height = this.question.formElement.appearance.height\r\n ? this.question.formElement.appearance.height + 'px'\r\n : '100%';\r\n this.contentType =\r\n this.question.formElement.iFrameProperties.contentType;\r\n this.htmlContent =\r\n this.question.formElement.iFrameProperties.html.content;\r\n this.cssContent =\r\n this.question.formElement.iFrameProperties.style.css;\r\n this.scriptContent =\r\n this.question.formElement.iFrameProperties.script.code;\r\n this.urlContent = this.question.formElement.iFrameProperties.url;\r\n }\r\n @ViewChild('iframeRef') iframeRef!: ElementRef<HTMLIFrameElement>;\r\n /** Render HTML with dynamic CSS */\r\n renderHtml() {\r\n const iframe = this.iframeRef?.nativeElement;\r\n\r\n if (!iframe) return;\r\n\r\n const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document;\r\n\r\n if (iframeDoc) {\r\n // Build the complete HTML content to inject into the iframe\r\n const safeHtml = `\r\n <html>\r\n <head>\r\n <style>${this.cssContent || ''}</style>\r\n </head>\r\n <body>\r\n ${this.htmlContent || ''}\r\n <script>\r\n (function(localStorage) {\r\n try {\r\n ${\r\n this.isSafeScript(this.scriptContent)\r\n ? this.scriptContent\r\n : ''\r\n }\r\n } catch (e) {\r\n document.body.innerHTML += '<p style=\"color:red\">Script Error: ' + e.message + '</p>';\r\n }\r\n })(window.localStorage);\r\n </script>\r\n </body>\r\n </html>\r\n `;\r\n\r\n iframeDoc.open();\r\n iframeDoc.write(safeHtml);\r\n iframeDoc.close();\r\n }\r\n }\r\n\r\n renderLink() {\r\n if (!this.urlContent) {\r\n this.safeUrl = '';\r\n return;\r\n }\r\n\r\n const url = this.urlContent.trim();\r\n\r\n // Check if URL is valid\r\n if (!this.isValidUrl(url)) {\r\n console.warn('Invalid URL format');\r\n this.safeUrl = '';\r\n return;\r\n }\r\n\r\n // Check if embeddable host\r\n if (!this.isEmbeddableUrl(url)) {\r\n console.warn('This website may not allow embedding');\r\n // You can still LET it try\r\n // Or block it completely\r\n // For now: allow but warn\r\n }\r\n\r\n const embedUrl = this.convertToEmbedUrl(url);\r\n this.safeUrl = this.sanitizeUrl(embedUrl);\r\n }\r\n\r\n isValidUrl(url: string): boolean {\r\n try {\r\n new URL(url);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /** Sanitize URLs for iframes */\r\n sanitizeUrl(url: string): SafeResourceUrl {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n\r\n isEmbeddableUrl(url: string): boolean {\r\n try {\r\n const parsed = new URL(url);\r\n\r\n return this.embeddableDomains.some((domain) =>\r\n parsed.hostname.includes(domain)\r\n );\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n convertToEmbedUrl(url: string): string {\r\n try {\r\n const parsed = new URL(url);\r\n\r\n // YouTube\r\n if (\r\n parsed.hostname.includes('youtube.com') &&\r\n parsed.searchParams.get('v')\r\n ) {\r\n return `https://www.youtube.com/embed/${parsed.searchParams.get('v')}`;\r\n }\r\n if (parsed.hostname.includes('youtu.be')) {\r\n return `https://www.youtube.com/embed/${parsed.pathname.substring(1)}`;\r\n }\r\n\r\n // Vimeo\r\n if (parsed.hostname.includes('vimeo.com')) {\r\n const videoId = parsed.pathname.split('/')[1];\r\n return `https://player.vimeo.com/video/${videoId}`;\r\n }\r\n\r\n // Google Maps (no API key needed)\r\n if (\r\n parsed.hostname.includes('google.com') &&\r\n parsed.pathname.startsWith('/maps')\r\n ) {\r\n if (parsed.pathname.includes('/maps/embed')) return url;\r\n\r\n return `https://www.google.com/maps/embed?${parsed.searchParams.toString()}`;\r\n }\r\n\r\n return url;\r\n } catch (e) {\r\n return url;\r\n }\r\n }\r\n\r\n /** Basic script validation to prevent unsafe operations */\r\n isSafeScript(code: string): boolean {\r\n const unsafePatterns = [\r\n /window\\.parent/,\r\n /document\\.cookie/,\r\n /fetch\\(/,\r\n /XMLHttpRequest/,\r\n /eval\\(/,\r\n /new Function/,\r\n /setTimeout|setInterval/,\r\n ];\r\n\r\n return !unsafePatterns.some((pattern) => pattern.test(code));\r\n }\r\n}\r\n","<div class=\"custom-embed mb-4\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\">\r\n\r\n <ng-container [ngSwitch]=\"contentType\">\r\n\r\n <!-- HTML, CSS, and Script rendered together -->\r\n <iframe\r\n *ngSwitchCase=\"'HTML'\"\r\n #iframeRef\r\n sandbox=\"allow-scripts allow-same-origin\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n frameborder=\"0\"\r\n ></iframe>\r\n\r\n <!-- Link Embed -->\r\n <div *ngSwitchCase=\"'LINK'\">\r\n <iframe\r\n *ngIf=\"safeUrl\"\r\n [src]=\"safeUrl\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n frameborder=\"0\"\r\n allowfullscreen>\r\n </iframe>\r\n </div>\r\n \r\n\r\n </ng-container>\r\n</div>\r\n","import { ChangeDetectorRef, Component, EventEmitter, Injector, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-question',\r\n templateUrl: './question.component.html',\r\n styleUrls: ['./question.component.scss']\r\n})\r\nexport class QuestionComponent {\r\n @Input() question: any = {};\r\n @Input() edit: boolean = false;\r\n @Input() acceptedLanguage: string = '';\r\n @Input() currentPageIndex: number = 0;\r\n @Output() emitValidations = new EventEmitter<any>();\r\n @Output() subFormChange = new EventEmitter<any>();\r\n validations: any = [];\r\n componentToLoad: any;\r\n injector!: Injector;\r\n childLogicCache: { [key: string]: { component: Promise<any>, injector: Injector } } = {};\r\n\r\n\r\n constructor(private cdr: ChangeDetectorRef) { }\r\n\r\n ngOnInit(): void {\r\n this.loadComponent()\r\n }\r\n\r\n // private async loadComponent(): Promise<void> {\r\n // this.componentToLoad = await this.loadFormElementsComponent();\r\n // this.injector = this.createInjector();\r\n // }\r\n// safeStringify(obj: any) {\r\n// const seen = new WeakSet();\r\n// return JSON.stringify(obj, (key, value) => {\r\n// if (typeof value === \"object\" && value !== null) {\r\n// if (seen.has(value)) return;\r\n// seen.add(value);\r\n// }\r\n// return value;\r\n// }, 2);\r\n// }\r\n// getComponentForChildLogics(grid: any, state: string, answer: any): { component: Promise<any>, injector: Injector } {\r\n// const key = this.safeStringify({grid, state});\r\n// if (!this.childLogicCache[key]) {\r\n// const component = this.loadFormElementsComponent();\r\n// const injector = this.createInjector(grid, state, answer);\r\n// this.childLogicCache[key] = { component, injector };\r\n// }\r\n// return this.childLogicCache[key];\r\n// }\r\n\r\n// private async loadFormElementsComponent() {\r\n// const { FormElementsComponent } = await import('../form-elements/form-elements.component');\r\n// return FormElementsComponent;\r\n// }\r\n\r\n// private createInjector(grid: any, state: string, answer: any): Injector {\r\n// return Injector.create({\r\n// providers: [\r\n// { provide: 'grid', useValue:grid},\r\n// { provide: 'edit', useValue: this.edit },\r\n// { provide: 'answer', useValue: answer },\r\n// { provide: 'state', useValue:state },\r\n// { provide: 'acceptedLanguage', useValue: this.acceptedLanguage }\r\n// ],\r\n// });\r\n// }\r\n\r\n\r\n\r\n removeCircularReferences(obj: any): any {\r\n const seen = new WeakSet();\r\n\r\n function recurse(value: any): any {\r\n if (value === null || typeof value !== 'object') {\r\n return value;\r\n }\r\n\r\n if (seen.has(value)) {\r\n return '[Circular]';\r\n }\r\n\r\n seen.add(value);\r\n\r\n if (Array.isArray(value)) {\r\n return value.map(item => recurse(item));\r\n }\r\n\r\n const output: any = {};\r\n for (const key of Object.keys(value)) {\r\n output[key] = recurse(value[key]);\r\n }\r\n\r\n seen.delete(value);\r\n return output;\r\n }\r\n\r\n return recurse(obj);\r\n}\r\n\r\nprivate async loadComponent(): Promise<void> {\r\n this.componentToLoad = await this.loadFormElementsComponent();\r\n this.injector = this.createInjector();\r\n}\r\n\r\nprivate async loadFormElementsComponent() {\r\n const { FormElementsComponent } = await import('../form-elements/form-elements.component');\r\n return FormElementsComponent;\r\n}\r\n\r\ncreateInjector(): Injector {\r\n return Injector.create({\r\n providers: [\r\n { provide: 'grid', useValue: this.question?.childLogics },\r\n { provide: 'state', useValue: 'child' },\r\n ],\r\n });\r\n}\r\n\r\n updateSubFormWithSubmissions(event: any) {\r\n this.subFormChange.emit(event);\r\n }\r\n\r\n handleValidation(validation: any) {\r\n this.validations.push(validation);\r\n this.emitValidations.emit(this.validations);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n}\r\n","<div [ngSwitch]=\"question.formElement.elementType\">\r\n\r\n <lib-check-box-fields *ngSwitchCase=\"'CHECK_BOX'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-check-box-fields>\r\n <lib-date-time-fields *ngSwitchCase=\"'DATE_TIME'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-date-time-fields>\r\n <lib-drop-down-fields *ngSwitchCase=\"'DROP_DOWN'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-drop-down-fields>\r\n <lib-file-picker-fields *ngSwitchCase=\"'FILE_PICKER'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-file-picker-fields>\r\n <lib-location-fields *ngSwitchCase=\"'LOCATION'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-location-fields>\r\n <lib-mail-fields *ngSwitchCase=\"'EMAIL'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-mail-fields>\r\n <lib-mobile-fields *ngSwitchCase=\"'MOBILE'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-mobile-fields>\r\n <lib-number-fields *ngSwitchCase=\"'NUMBER'\" [question]=\"question\" (validate)=\"handleValidation($event)\" [rowId]=\"'0'\"></lib-number-fields>\r\n <lib-password-fields *ngSwitchCase=\"'PASSWORD'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-password-fields>\r\n <lib-radio-button-fields *ngSwitchCase=\"'RADIO_BUTTON'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-radio-button-fields>\r\n <lib-rich-text-editor-fields *ngSwitchCase=\"'RICH_TEXT_EDITOR'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-rich-text-editor-fields>\r\n <lib-selection-matrix-fields *ngSwitchCase=\"'SELECTION_MATRIX'\" [question]=\"question\" [acceptedLanguage]=\"acceptedLanguage\" (validate)=\"handleValidation($event)\"></lib-selection-matrix-fields>\r\n <lib-signature-fields *ngSwitchCase=\"'SIGNATURE'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-signature-fields>\r\n <lib-slider-fields *ngSwitchCase=\"'SLIDER'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-slider-fields>\r\n <lib-terms-and-condition-fields *ngSwitchCase=\"'TERMS_AND_CONDITION'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-terms-and-condition-fields>\r\n <lib-text-area-fields *ngSwitchCase=\"'TEXT_AREA'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-text-area-fields>\r\n <lib-text-fields *ngSwitchCase=\"'TEXT_BOX'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-text-fields>\r\n <lib-toggle-switch-fields *ngSwitchCase=\"'TOGGLE_SWITCH'\" [question]=\"question\" [acceptedLanguage]=\"acceptedLanguage\" (validate)=\"handleValidation($event)\"></lib-toggle-switch-fields>\r\n <lib-url-fields *ngSwitchCase=\"'URL'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-url-fields>\r\n <lib-aggregate-function *ngSwitchCase=\"'AGGREGATE_FUNCTION'\" [question]=\"question\" (validate)=\"handleValidation($event)\" [rowId]=\"'0'\"></lib-aggregate-function>\r\n <lib-currency-fields *ngSwitchCase=\"'CURRENCY'\" [question]=\"question\" (validate)=\"handleValidation($event)\" [rowId]=\"'0'\"></lib-currency-fields>\r\n <lib-hidden-field *ngSwitchCase=\"'HIDDEN_FIELD'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-hidden-field>\r\n <lib-iframe-fields *ngSwitchCase=\"'IFRAME_WIDGET'\" [question]=\"question\" ></lib-iframe-fields>\r\n</div>\r\n\r\n<ng-container *ngIf=\"question.childLogics\">\r\n\r\n <!-- <ng-container *ngIf=\"componentToLoad\">\r\n <ng-container *ngComponentOutlet=\"componentToLoad;\r\n inputs: { grid: question.childLogics,\r\n answer: question.answer,\r\n state: 'child' }\"></ng-container>\r\n </ng-container> -->\r\n\r\n <!-- <ng-container *ngIf=\"getComponentForChildLogics(question.childLogics, 'child', question.answer) as cached\">\r\n <ng-container\r\n *ngComponentOutlet=\"cached.component | async; injector: cached.injector\">\r\n </ng-container>\r\n </ng-container> -->\r\n\r\n\r\n <ng-container *ngIf=\"componentToLoad\">\r\n\r\n <ng-container *ngComponentOutlet=\"componentToLoad;\r\n inputs: { grid: question.childLogics,\r\n answer: question?.answer,\r\n state: 'child' }\"></ng-container>\r\n </ng-container>\r\n</ng-container>\r\n","import { Component, Inject, Input } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-confirm-dialog',\r\n templateUrl: './confirm-dialog.component.html',\r\n styleUrls: ['./confirm-dialog.component.scss']\r\n})\r\nexport class ConfirmDialogComponent {\r\n\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any,\r\n public dialogRef: MatDialogRef<ConfirmDialogComponent>){\r\n this.messageHeader=data.messageHeader;\r\n this.message=data.message;\r\n }\r\n\r\n message:string='';\r\n messageHeader:string='';\r\n closeModal() {\r\n this.dialogRef.close();\r\n }\r\n \r\n}","<div class=\"\" id=\"checkdeleteModal\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modalHeader\">\r\n <div class=\"title-div\">\r\n </div>\r\n <div class=\"header-btn\">\r\n <img (click)=\"closeModal()\" src=\"/assets/icons/close-sidebar-mark-icon.svg\" alt=\"Close Sidebar Icon\"> \r\n </div>\r\n </div>\r\n <div class=\"modalBody\">\r\n <div class=\"row text-center\">\r\n <img class=\"delete-icon\" src=\"/assets/icons/delete-no-outline-icon.svg\" alt=\"Delete Icon\"> \r\n <p class=\"delete-confirm\">{{messageHeader}}</p>\r\n <p class=\"delete-dialog\">{{message}}</p>\r\n </div>\r\n </div>\r\n <div class=\"modalFooter\">\r\n <div class=\"footer-btn \">\r\n <button type=\"button\" class=\"delete-btn\"\r\n (click)=\"dialogRef.close(true)\"\r\n >Yes</button>\r\n <button class=\"cancel-btn\"\r\n (click)=\"dialogRef.close(false)\"\r\n type=\"button\">\r\n No\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SubformCopyService {\r\n copySubform(subForm: any, pages: any[]): { updatedPages: any[] } {\r\n const questionRelation: Record<string, string> = {};\r\n const copiedSubform = this.deepCopyWithNewIds(subForm, questionRelation);\r\n\r\n // Attach copy metadata directly inside the copied subform\r\n copiedSubform.copySubformMeta = {\r\n id: copiedSubform.id,\r\n title: '',\r\n description: '',\r\n parentSubform: subForm.id,\r\n questionRelation,\r\n };\r\n\r\n if (!subForm.copiedForms) {\r\n subForm.copiedForms = [];\r\n }\r\n subForm.copiedForms.push(copiedSubform.id);\r\n\r\n const page = this.findPageContainingSubform(subForm.id, pages);\r\n\r\n if (page) {\r\n const rowIndex = page.rows.findIndex((row: any) =>\r\n row.grid.some((grid: any) =>\r\n grid.entityType === 'SUBFORM' && grid.element.id === subForm.id\r\n )\r\n );\r\n copiedSubform.submissions = [];\r\n copiedSubform.score = null;\r\n if (rowIndex !== -1) {\r\n const newSubformGrid = {\r\n entityType: 'SUBFORM',\r\n element: copiedSubform,\r\n show: true\r\n };\r\n\r\n page.rows.splice(rowIndex + 1, 0, {\r\n grid: [newSubformGrid],\r\n });\r\n }\r\n }\r\n\r\n return {\r\n updatedPages: pages\r\n };\r\n }\r\n\r\n private deepCopyWithNewIds(subform: any, questionRelation: Record<string, string>): any {\r\n const idMap: Map<string, string> = new Map();\r\n\r\n const replaceIds = (obj: any): any => {\r\n if (Array.isArray(obj)) {\r\n return obj.map(replaceIds);\r\n } else if (obj !== null && typeof obj === 'object') {\r\n const newObj: any = {};\r\n for (const key of Object.keys(obj)) {\r\n const value = obj[key];\r\n \r\n if (key === 'id' && typeof value === 'string') {\r\n if (!idMap.has(value)) {\r\n idMap.set(value, uuidv4());\r\n }\r\n newObj[key] = idMap.get(value);\r\n } else {\r\n newObj[key] = replaceIds(value);\r\n }\r\n }\r\n \r\n // ✅ Now handle answer reset and questionRelation mapping\r\n if (\r\n obj.entityType === 'QUESTION' &&\r\n obj.element &&\r\n typeof obj.element.id === 'string'\r\n ) {\r\n const originalQuestionId = obj.element.id;\r\n const newQuestionId = newObj.element?.id;\r\n \r\n if (originalQuestionId && newQuestionId) {\r\n questionRelation[newQuestionId] = originalQuestionId;\r\n }\r\n \r\n // ✅ Reset answer here\r\n if (newObj.element) {\r\n newObj.element.answer = '';\r\n newObj.element.files = '';\r\n }\r\n }\r\n \r\n return newObj;\r\n }\r\n \r\n return obj;\r\n };\r\n \r\n\r\n const getCircularReplacer = () => {\r\n const seen = new WeakSet();\r\n return (_key: string, value: any) => {\r\n if (typeof value === \"object\" && value !== null) {\r\n if (seen.has(value)) {\r\n return undefined;\r\n }\r\n seen.add(value);\r\n }\r\n return value;\r\n };\r\n };\r\n\r\n const copied = replaceIds(JSON.parse(JSON.stringify(subform, getCircularReplacer())));\r\n if (\r\n copied.defaultAnswers &&\r\n Array.isArray(copied.defaultAnswers.answers)\r\n ) {\r\n copied.defaultAnswers.answers.forEach((answerBlock: any) => {\r\n if (Array.isArray(answerBlock.defaultQuestionsAnswers)) {\r\n answerBlock.defaultQuestionsAnswers.forEach((dqAnswer: any) => {\r\n const oldQId = dqAnswer.questionId; \r\n if (idMap.has(oldQId)) {\r\n dqAnswer.questionId = idMap.get(oldQId);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n \r\n copied.copied = true;\r\n return copied;\r\n }\r\n\r\n private findPageContainingSubform(subformId: string, pages: any[]): any {\r\n return pages.find((page: any) =>\r\n page.rows.some((row: any) =>\r\n row.grid.some(\r\n (grid: any) =>\r\n grid.entityType === 'SUBFORM' &&\r\n grid.element &&\r\n grid.element.id === subformId\r\n )\r\n )\r\n );\r\n }\r\n}\r\n","import { Component, Inject, Injector } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ValidationService } from '../../services/validation.service';\r\n\r\n@Component({\r\n selector: 'lib-submission-modal',\r\n templateUrl: './submission-modal.component.html',\r\n styleUrls: ['./submission-modal.component.scss'],\r\n})\r\nexport class SubmissionModalComponent {\r\n acceptedLanguage: string = '';\r\n grid: any;\r\n subForm: any;\r\n childLogicCache: { [key: string]: { component: Promise<any>, injector: Injector } } = {};\r\n componentToLoad: any;\r\n injector!: Injector;\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private validationService: ValidationService,\r\n private dialogRef: MatDialogRef<SubmissionModalComponent>\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.subForm = this.data.subForm;\r\n this.acceptedLanguage = this.data.acceptedLanguage;\r\n this.loadComponent();\r\n }\r\n\r\n private async loadComponent(): Promise<void> {\r\n this.componentToLoad = await this.loadFormElementsComponent();\r\n this.injector = this.createInjector();\r\n }\r\n\r\n private async loadFormElementsComponent() {\r\n const { FormElementsComponent } = await import('../../question/form-elements/form-elements.component');\r\n return FormElementsComponent;\r\n }\r\n\r\n createInjector(): Injector {\r\n return Injector.create({\r\n providers: [\r\n { provide: 'grid', useValue: this.grid?.element.childLogics },\r\n { provide: 'state', useValue: 'child' },\r\n ],\r\n });\r\n }\r\n\r\n\r\n\r\n closeModal() {\r\n this.clearModal();\r\n this.dialogRef.close();\r\n }\r\n\r\n saveSubmission() {\r\n let isFormValid = true;\r\n const pageIndex = this.subForm.pageIndex ?? 0;\r\n\r\n this.subForm.rows.forEach((row: any) => {\r\n row.grid.forEach((item: any) => {\r\n if (item.entityType === 'QUESTION') {\r\n const q = item.element;\r\n const hasAnswer =\r\n q.answer !== null &&\r\n q.answer !== undefined &&\r\n ((typeof q.answer === 'string' && q.answer.trim() !== '') ||\r\n (Array.isArray(q.answer) && q.answer.length > 0) ||\r\n (typeof q.answer === 'object' &&\r\n Object.keys(q.answer).length > 0));\r\n if (q.required && !hasAnswer) {\r\n this.validationService.setInvalid(\r\n q.id,\r\n 'This question is required',\r\n pageIndex\r\n );\r\n isFormValid = false;\r\n } else {\r\n this.validationService.clearInvalid(q.id);\r\n }\r\n }\r\n });\r\n });\r\n\r\n // 2) If any required question is missing, abort close and let the child components render errors\r\n if (!isFormValid) {\r\n return;\r\n }\r\n\r\n // 3) All good → close the dialog\r\n this.dialogRef.close(this.subForm);\r\n }\r\n\r\n clearModal() {\r\n if (this.subForm && this.subForm.rows) {\r\n this.subForm.rows.flatMap((item: any) =>\r\n item.grid.forEach((gridItem: any) => this.clearFormElement(gridItem))\r\n );\r\n // this.subForm.formElements.forEach((formElement: any) => {\r\n // this.clearFormElement(formElement);\r\n // });\r\n }\r\n }\r\n\r\n clearFormElement(formElement: any) {\r\n if (formElement.entityType === 'QUESTION') {\r\n formElement.element.answer = '';\r\n\r\n if (formElement.element.formElement) {\r\n if (formElement.element.formElement.elementType === 'FILE_PICKER') {\r\n formElement.element.answer = null;\r\n } else {\r\n formElement.element.answer = '';\r\n }\r\n }\r\n\r\n if (formElement.element.childLogics) {\r\n formElement.element.childLogics?.forEach((childLogic: any) => {\r\n childLogic.showLogic = false;\r\n childLogic?.formElements?.forEach((formElement: any) => {\r\n this.clearFormElement(formElement);\r\n });\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"mb-5\">\r\n <div class=\"modalHeader mb-4\">\r\n <div class=\"title-div\">\r\n <p class=\"title\">{{subForm.title}}</p>\r\n </div>\r\n <div class=\"header-btn\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" (click)=\"closeModal()\">\r\n <path d=\"M8 8L16 16\" stroke=\"#1D252D\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M16 8L8 16\" stroke=\"#1D252D\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"px-3\" *ngFor=\"let row of subForm.rows\">\r\n <ng-container *ngFor=\"let formElement of row.grid\">\r\n <div *ngIf=\"formElement.entityType === 'QUESTION'\">\r\n <lib-check-box-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'CHECK_BOX'\"\r\n [question]=\"formElement.element\"\r\n ></lib-check-box-fields>\r\n <lib-date-time-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'DATE_TIME'\"\r\n [question]=\"formElement.element\"\r\n ></lib-date-time-fields>\r\n <lib-drop-down-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'DROP_DOWN'\"\r\n [question]=\"formElement.element\"\r\n ></lib-drop-down-fields>\r\n <lib-file-picker-fields\r\n *ngIf=\"\r\n formElement.element.formElement.elementType === 'FILE_PICKER'\r\n \"\r\n [question]=\"formElement.element\"\r\n ></lib-file-picker-fields>\r\n <lib-location-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'LOCATION'\"\r\n [question]=\"formElement.element\"\r\n ></lib-location-fields>\r\n\r\n <lib-mail-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'EMAIL'\"\r\n [question]=\"formElement.element\"\r\n >\r\n </lib-mail-fields>\r\n <lib-mobile-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'MOBILE'\"\r\n [question]=\"formElement.element\"\r\n >\r\n </lib-mobile-fields>\r\n <lib-number-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'NUMBER'\"\r\n [question]=\"formElement.element\"\r\n [rowId]=\"'0'\"\r\n >\r\n </lib-number-fields>\r\n <lib-password-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'PASSWORD'\"\r\n [question]=\"formElement.element\"\r\n >\r\n </lib-password-fields>\r\n <lib-radio-button-fields\r\n *ngIf=\"\r\n formElement.element.formElement.elementType === 'RADIO_BUTTON'\r\n \"\r\n [question]=\"formElement.element\"\r\n ></lib-radio-button-fields>\r\n <lib-rich-text-editor-fields\r\n *ngIf=\"\r\n formElement.element.formElement.elementType === 'RICH_TEXT_EDITOR'\r\n \"\r\n [question]=\"formElement.element\"\r\n ></lib-rich-text-editor-fields>\r\n <lib-selection-matrix-fields\r\n *ngIf=\"\r\n formElement.element.formElement.elementType === 'SELECTION_MATRIX'\r\n \"\r\n [question]=\"formElement.element\"\r\n [acceptedLanguage] = \"acceptedLanguage\"\r\n ></lib-selection-matrix-fields>\r\n <lib-signature-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'SIGNATURE'\"\r\n [question]=\"formElement.element\"\r\n ></lib-signature-fields>\r\n <lib-slider-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'SLIDER'\"\r\n [question]=\"formElement.element\"\r\n ></lib-slider-fields>\r\n <lib-terms-and-condition-fields\r\n *ngIf=\"\r\n formElement.element.formElement.elementType ===\r\n 'TERMS_AND_CONDITION'\r\n \"\r\n [question]=\"formElement.element\"\r\n ></lib-terms-and-condition-fields>\r\n <lib-text-area-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'TEXT_AREA'\"\r\n [question]=\"formElement.element\"\r\n ></lib-text-area-fields>\r\n <lib-text-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'TEXT_BOX'\"\r\n [question]=\"formElement.element\"\r\n ></lib-text-fields>\r\n <lib-toggle-switch-fields\r\n *ngIf=\"\r\n formElement.element.formElement.elementType === 'TOGGLE_SWITCH'\r\n \"\r\n [question]=\"formElement.element\"\r\n [acceptedLanguage] = \"acceptedLanguage\"\r\n ></lib-toggle-switch-fields>\r\n <lib-url-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'URL'\"\r\n [question]=\"formElement.element\"\r\n ></lib-url-fields>\r\n <lib-currency-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'CURRENCY'\"\r\n [question]=\"formElement.element\"\r\n ></lib-currency-fields>\r\n <lib-hidden-field\r\n *ngIf=\"formElement.element.formElement.elementType === 'HIDDEN_FIELD'\"\r\n [question]=\"formElement.element\"\r\n ></lib-hidden-field>\r\n <lib-iframe-fields\r\n *ngIf=\"formElement.element.formElement.elementType === 'IFRAME_WIDGET'\"\r\n [question]=\"formElement.element\"\r\n ></lib-iframe-fields>\r\n <lib-aggregate-function\r\n *ngIf=\"formElement.element.formElement.elementType === 'AGGREGATE_FUNCTION'\"\r\n [question]=\"formElement.element\"\r\n [rowId]=\"'0'\"\r\n ></lib-aggregate-function>\r\n <ng-container *ngIf=\"formElement?.element?.childLogics\">\r\n\r\n <ng-container *ngIf=\"componentToLoad\">\r\n\r\n <ng-container *ngComponentOutlet=\"componentToLoad;\r\n inputs: { grid: formElement?.element?.childLogics,\r\n answer: formElement?.element?.answer,\r\n state: 'child' }\"></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"formElement.entityType === 'SECTION'\">\r\n <lib-section-fields\r\n [section]=\"formElement.element\"\r\n ></lib-section-fields>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n <div class=\"okBtn me-4 ms-4\">\r\n <button\r\n class=\"submitBtn ms-md-3 me-md-2 rounded-pill\"\r\n type=\"button\"\r\n (click)=\"saveSubmission()\">\r\n Ok\r\n </button>\r\n </div>\r\n</div>\r\n","import { SubformProperty } from './../../models/subformPropery.model';\r\nimport { add } from 'ngx-bootstrap/chronos';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { SubmissionModalComponent } from '../../sub-form/submission-modal/submission-modal.component';\r\nimport { Attachment } from '../../models/attachment.model';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { ScoreCalculationService } from '../../services/score.service';\r\nimport { Submission } from '../../models/submission.model';\r\nimport { Answer } from '../../models/answer.model';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\n\r\n\r\n@Component({\r\n selector: 'lib-multiple-subform',\r\n templateUrl: './multiple-subform.component.html',\r\n styleUrls: ['./multiple-subform.component.scss'],\r\n})\r\nexport class MultipleSubformComponent {\r\n @Input() subForm: any = {};\r\n @Output() subFormChange = new EventEmitter<any>();\r\n @Input() acceptedLanguage: string = '';\r\n\r\n submissions: Submission[] = [];\r\n deletedSubmissions: string[] = [];\r\n displayedColumns: string[] = [];\r\n addButtonLabel: string = 'Add New Submission';\r\n maxPossibleGoodScore!:number;\r\n maxPossibleBadScore!:number\r\n\r\n constructor(\r\n public dialog: MatDialog, \r\n private sanitizer: DomSanitizer,\r\n private scoreCalcService: ScoreCalculationService,\r\n private whenClauseService:WhenClauseService\r\n ) {}\r\n\r\n ngOnInit() {\r\n const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(this.subForm);\r\n this.maxPossibleGoodScore = goodMax;\r\n this.maxPossibleBadScore = badMax;\r\n if (this.subForm?.submissions) {\r\n this.submissions = this.subForm.submissions;\r\n this.subForm.deletedSubmissions = [];\r\n }\r\n if(this.subForm?.property?.addButtonLabel) {\r\n this.addButtonLabel = this.subForm.property.addButtonLabel;\r\n }\r\n this.initializeDisplayedColumns();\r\n this.whenClauseService.addGridsFromSubform(this.subForm);\r\n }\r\n\r\n initializeDisplayedColumns() {\r\n this.displayedColumns = this.subForm.rows.flatMap((item: any) =>\r\n item.grid\r\n .filter((gridItem: any) => gridItem.element?.formElement?.elementType !== 'HIDDEN_FIELD')\r\n .map((gridItem: any) => gridItem.element.question)\r\n );\r\n \r\n this.displayedColumns.push('actions');\r\n }\r\n\r\n getAnswerByQuestionId(submission: Submission, question: any) {\r\n const questionId = question.element.id;\r\n const answerObj = submission.answers.find(\r\n (answer) => answer.questionId === questionId\r\n );\r\n\r\n if (!answerObj) {\r\n return null;\r\n }\r\n\r\n let content: string = '';\r\n \r\n if (answerObj.answer) {\r\n if (Array.isArray(answerObj.answer)) {\r\n const processedItems = answerObj.answer.map((item: any) => {\r\n if (typeof item === 'string' && item.includes('|')) {\r\n return item.split('|')[0];\r\n }\r\n return item;\r\n });\r\n content = processedItems.join(', ');\r\n } else if (typeof answerObj.answer === 'string') {\r\n content = answerObj.answer.includes('|')\r\n ? answerObj.answer.split('|')[0]\r\n : answerObj.answer;\r\n }\r\n }\r\n let currencySymbol = '';\r\n if(question.element.formElement.elementType === 'CURRENCY'){\r\n currencySymbol = this.fetchCurrencySymbol(question.element);\r\n answerObj['htmlContent'] = this.sanitizer.bypassSecurityTrustHtml(currencySymbol + ' ' +content);\r\n } else{\r\n answerObj['htmlContent'] = this.sanitizer.bypassSecurityTrustHtml(content);\r\n }\r\n return answerObj;\r\n }\r\n\r\n fetchCurrencySymbol(question:any){\r\n let currencySymbol = '';\r\n if (question.formElement?.appearance?.currency) {\r\n let userLocaleCureency = question.formElement?.appearance?.currency;\r\n if (question.formElement.appearance.currencyOption) {\r\n let currencyOption =\r\n question.formElement.appearance.currencyOption;\r\n if (currencyOption == 'auto') {\r\n if (\r\n question.formElement.appearance.limitCurrencySymbol &&\r\n question.formElement.appearance.limitCurrencySymbol.length > 0\r\n ) {\r\n currencySymbol =\r\n question.formElement.appearance.limitCurrencySymbol.includes(\r\n userLocaleCureency\r\n )\r\n ? userLocaleCureency\r\n : question.formElement?.appearance?.currencySymbol;\r\n } else {\r\n currencySymbol = userLocaleCureency;\r\n }\r\n } else if (currencyOption == 'specific') {\r\n currencySymbol =\r\n question.formElement?.appearance?.specificCurrencySymbol;\r\n }\r\n }\r\n }\r\n if (\r\n !currencySymbol &&\r\n question.formElement?.appearance?.currencySymbol\r\n ) {\r\n currencySymbol =\r\n question.formElement?.appearance?.currencySymbol;\r\n }\r\n return currencySymbol;\r\n }\r\n\r\n subFormSubmission(subForm: any) {\r\n const processFormElements = (\r\n rows: any[],\r\n isChild: boolean = false\r\n ): Answer[] => {\r\n const answers: Answer[] = [];\r\n\r\n rows.flatMap((item: any) =>\r\n item.grid.forEach((formElement: any) => {\r\n const answer: Answer = {\r\n questionId: formElement.element.id,\r\n answer: formElement.element?.answer || '',\r\n files:\r\n formElement.element.formElement.elementType == 'FILE_PICKER' &&\r\n formElement.element.answer\r\n ? formElement.element.answer\r\n : undefined,\r\n isChild: isChild,\r\n amountInWords: formElement.element.amountInWords\r\n };\r\n\r\n if (\r\n formElement.element.formElement.elementType == 'FILE_PICKER' &&\r\n formElement.element.answer\r\n ) {\r\n const fileNames = formElement.element.answer.map(\r\n (file: any) => file?._file.name\r\n );\r\n answer.answer = fileNames;\r\n }\r\n answers.push(answer);\r\n if(\r\n formElement.element.formElement &&\r\n (formElement.element.formElement.elementType === 'DROP_DOWN' ||\r\n formElement.element.formElement.elementType === 'RADIO_BUTTON' ||\r\n formElement.element.formElement.elementType === 'CHECKBOX') &&\r\n formElement.element.formElement.scoring &&\r\n formElement.element.formElement.scoring.enableScoring\r\n ){\r\n answers.forEach((ans) => {\r\n if(formElement.element.id === ans.questionId){\r\n const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(ans.answer, formElement.element);\r\n // Save total score and individual scores\r\n // ans.score = scoreResult?.totalScore ?? 1;\r\n ans.scores = scoreResult?.scores;\r\n }\r\n });\r\n }\r\n if (formElement.element.childLogics) {\r\n formElement.element.childLogics.forEach((logic: any) => {\r\n if (logic.showLogic) {\r\n answers.push(...processFormElements(logic.rows, true));\r\n logic.showLogic = false;\r\n }\r\n });\r\n }\r\n })\r\n );\r\n return answers;\r\n };\r\n\r\n const answers = processFormElements(subForm.rows);\r\n\r\n if (answers.length > 0) {\r\n const submission: Submission = {\r\n submissionId: '',\r\n answers: answers,\r\n };\r\n if (this.scoreCalcService.shouldCalculateScore(this.subForm, submission)) {\r\n // Mark that this submission had all scoring questions answered at least once\r\n submission.hasAllScoringAnsweredOnce = true;\r\n }\r\n\r\n if (submission.hasAllScoringAnsweredOnce) {\r\n // Recalculate score always after once satisfied\r\n submission.scores = this.scoreCalcService.calculateSubmissionScore(submission.answers);\r\n }\r\n this.submissions.push(submission);\r\n this.submissions = [...this.submissions];\r\n this.updateSubFormWithSubmissions();\r\n }\r\n // this.subForm.score = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleScore);\r\n }\r\n\r\n editSubFormSubmission(index: number, submission: Submission) {\r\n const subForm = this.bindAnswers(this.subForm, submission);\r\n const dialogConfig = new MatDialogConfig();\r\n dialogConfig.position = { top: '5%' };\r\n dialogConfig.width = '100%';\r\n dialogConfig.data = {\r\n subForm: subForm,\r\n acceptedLanguage: this.acceptedLanguage,\r\n };\r\n dialogConfig.hasBackdrop = true;\r\n dialogConfig.disableClose = true;\r\n dialogConfig.maxHeight = '80vh';\r\n const dialogRef = this.dialog.open(SubmissionModalComponent, dialogConfig);\r\n\r\n dialogRef.afterClosed().subscribe((result: any) => {\r\n if (result) {\r\n this.updateSubmission(result, index);\r\n }\r\n });\r\n }\r\n\r\n bindAnswers(subForm: any, submission: Submission): any {\r\n const bindElementAnswers = (rows: any[], answers: Answer[]) => {\r\n rows.forEach((row: any) => {\r\n row.grid.forEach((grid: any) => {\r\n const answer = answers.find((a) => a.questionId === grid.element.id);\r\n if (answer) {\r\n grid.element.answer =\r\n grid.element.formElement.elementType == 'FILE_PICKER'\r\n ? answer?.files\r\n : answer.answer;\r\n grid.element.amountInWords = answer?.amountInWords;\r\n grid.element.answerId = answer.answerId;\r\n grid.element.attachments = answer.attachments;\r\n }\r\n if (grid.element.childLogics) {\r\n grid.element.childLogics.forEach((logic: any) => {\r\n bindElementAnswers(logic.rows, answers);\r\n });\r\n }\r\n });\r\n });\r\n };\r\n\r\n const updatedSubForm = { ...subForm };\r\n bindElementAnswers(updatedSubForm.rows, submission.answers);\r\n return updatedSubForm;\r\n }\r\n\r\n deleteSubForm(index: number) {\r\n const submission = this.submissions[index];\r\n if (submission.submissionId) {\r\n this.deletedSubmissions.push(submission.submissionId);\r\n }\r\n this.submissions.splice(index, 1);\r\n this.submissions = [...this.submissions];\r\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleGoodScore,this.maxPossibleBadScore);\r\n this.updateSubFormWithSubmissions();\r\n }\r\n\r\n addNewSubmission() {\r\n const subForm = this.cleanCircularReferences(this.subForm);\r\n subForm.rows.forEach((row: any) => {\r\n row.grid.forEach((grid: any) => {\r\n grid.element.answer = grid.element.formElement.elementType === 'FILE_PICKER' ? [] : '';\r\n grid.element.attachments = [];\r\n grid.element.answerId = null;\r\n });\r\n });\r\n\r\n const dialogConfig = new MatDialogConfig();\r\n dialogConfig.position = { top: '5%' };\r\n dialogConfig.width = '100%';\r\n dialogConfig.data = {\r\n subForm: subForm,\r\n acceptedLanguage: this.acceptedLanguage,\r\n };\r\n dialogConfig.hasBackdrop = true;\r\n dialogConfig.disableClose = true;\r\n dialogConfig.maxHeight = '80vh';\r\n dialogConfig.autoFocus = false;\r\n const dialogRef = this.dialog.open(SubmissionModalComponent, dialogConfig);\r\n\r\n dialogRef.afterClosed().subscribe((result: any) => {\r\n if (result) {\r\n const hasData = result.rows.flatMap((item: any) =>\r\n item.grid.some(\r\n (formElement: any) =>\r\n formElement.element.answer &&\r\n formElement.element.answer.length > 0\r\n )\r\n );\r\n\r\n if (hasData) {\r\n this.subFormSubmission(result);\r\n }\r\n }\r\n });\r\n }\r\n\r\n cleanCircularReferences(obj: any, seen = new WeakSet()) {\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n\r\n if (seen.has(obj)) {\r\n return;\r\n }\r\n\r\n seen.add(obj);\r\n\r\n const cleanedObj: any = Array.isArray(obj) ? [] : {};\r\n\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n cleanedObj[key] = this.cleanCircularReferences(obj[key], seen);\r\n }\r\n }\r\n\r\n return cleanedObj;\r\n }\r\n\r\n updateSubmission(result: any, index: number) {\r\n const processFormElements = (rows: any[], answers: Answer[]) => {\r\n rows.forEach((row: any) => {\r\n row.grid.forEach((grid: any) => {\r\n let answer: Answer = {\r\n questionId: grid.element.id,\r\n answerId: grid.element?.answerId || '',\r\n attachments: grid.element.attachments || [],\r\n answer: [],\r\n files: [],\r\n deleteFiles: [],\r\n };\r\n\r\n if (answer.attachments) {\r\n answer.answer = answer.attachments.map(\r\n (attachment: Attachment) => attachment.fileName\r\n );\r\n }\r\n if (grid.element.formElement.elementType === 'FILE_PICKER') {\r\n if (grid.element?.deleteFiles.length > 0) {\r\n answer.answer = []; // Reset answer.answer only once\r\n answer.deleteFiles = answer.deleteFiles || [];\r\n\r\n // Collect deleted file IDs\r\n grid.element.deleteFiles.forEach((deletedId: string) => {\r\n answer.deleteFiles?.push(deletedId);\r\n });\r\n\r\n if (answer.attachments) {\r\n // Filter out deleted attachments\r\n answer.attachments = answer.attachments.filter((attachment: Attachment) => {\r\n if (!grid.element.deleteFiles.includes(attachment.fileId)) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n // Rebuild answer.answer with the remaining attachments\r\n answer.answer = answer.attachments.map((attachment) => attachment.fileName);\r\n }\r\n\r\n }\r\n if (grid.element.answer) {\r\n answer.files = grid.element.answer;\r\n let fileNamesArray = Array.isArray(answer.answer) ? [...answer.answer] : [];\r\n\r\n grid.element.answer.forEach((file: any) => {\r\n const fileName = file._file?.name;\r\n if (!fileNamesArray.includes(fileName)) {\r\n fileNamesArray.push(fileName);\r\n }\r\n });\r\n\r\n answer.answer = fileNamesArray; // Append to existing array instead of overwriting\r\n }\r\n } else {\r\n answer = {\r\n questionId: grid.element.id,\r\n answerId: grid.element?.answerId || '',\r\n attachments: grid.element.attachments,\r\n answer: grid.element.answer,\r\n maximumPossibleScore: grid.element.maxPossibleScore,\r\n amountInWords: grid.element.amountInWords\r\n };\r\n }\r\n grid.element.answer = '';\r\n answers.push(answer);\r\n if(\r\n grid.element.formElement &&\r\n (grid.element.formElement.elementType === 'DROP_DOWN' ||\r\n grid.element.formElement.elementType === 'RADIO_BUTTON' ||\r\n grid.element.formElement.elementType === 'CHECK_BOX') &&\r\n grid.element.formElement.scoring &&\r\n grid.element.formElement.scoring.enableScoring\r\n ){\r\n answers.forEach((ans) => {\r\n if(grid.element.id === ans.questionId){\r\n const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(ans.answer, grid.element);\r\n // Save total score and individual scores\r\n ans.scores = scoreResult?.scores;\r\n }\r\n });\r\n }\r\n\r\n if (grid.element.childLogics) {\r\n grid.element.childLogics.forEach((logic: any) => {\r\n if (logic.showLogic) {\r\n processFormElements(logic.rows, answers);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n };\r\n\r\n this.submissions[index].answers = [];\r\n processFormElements(result.rows, this.submissions[index].answers);\r\n this.submissions[index].scores = this.scoreCalcService.calculateSubmissionScore(this.submissions[index].answers);\r\n this.submissions = [...this.submissions];\r\n const hasAnyScore = this.submissions.some(\r\n sub => sub.scores?.some(s => s.score !== null && s.score !== undefined)\r\n );\r\n \r\n if (hasAnyScore) {\r\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleGoodScore,this.maxPossibleBadScore);\r\n } else {\r\n this.subForm.scores = null; // or 0, depending on how you want to represent \"no score yet\"\r\n }\r\n this.updateSubFormWithSubmissions();\r\n this.clearEmptyRows();\r\n }\r\n\r\n updateSubFormWithSubmissions() {\r\n this.subForm.submissions = this.submissions;\r\n this.subForm.maxPossibleScore = {\r\n 'good': this.maxPossibleGoodScore,\r\n 'bad': this.maxPossibleBadScore\r\n }\r\n this.subForm.deletedSubmissions = this.deletedSubmissions;\r\n this.subFormChange.emit(this.subForm);\r\n }\r\n\r\n clearEmptyRows() {\r\n const nonEmptySubmissions: Submission[] = [];\r\n const emptySubmissionIds: string[] = [];\r\n\r\n this.submissions.forEach((submission) => {\r\n if (submission.answers.some((answer) => answer.answer !== '')) {\r\n nonEmptySubmissions.push(submission);\r\n } else if (submission.submissionId) {\r\n emptySubmissionIds.push(submission.submissionId);\r\n }\r\n });\r\n\r\n this.submissions = nonEmptySubmissions;\r\n this.deletedSubmissions.push(...emptySubmissionIds);\r\n this.updateSubFormWithSubmissions();\r\n }\r\n}\r\n","<div class=\"example-container\" tabindex=\"0\">\r\n <div class=\"table-container\">\r\n <table mat-table [dataSource]=\"submissions\" class=\"mat-elevation-z8\">\r\n <ng-container *ngFor=\"let row of subForm.rows\">\r\n <ng-container\r\n *ngFor=\"let formElement of row.grid\"\r\n [matColumnDef]=\"formElement.element.question\"\r\n >\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"border border-1 column-width\"\r\n >\r\n {{ formElement.element.question }}\r\n </th>\r\n <td\r\n mat-cell\r\n *matCellDef=\"let submission\"\r\n class=\"border border-1\"\r\n [id]=\"'question-'+submission.submissionId\"\r\n [ngClass]=\"{\r\n hidden: getAnswerByQuestionId(submission, formElement)\r\n ?.isChild\r\n }\"\r\n >\r\n <div\r\n [innerHTML]=\"\r\n getAnswerByQuestionId(submission, formElement)\r\n ?.htmlContent\r\n \"\r\n ></div>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container matColumnDef=\"actions\" stickyEnd>\r\n <th mat-header-cell *matHeaderCellDef class=\"border border-1\">\r\n Actions\r\n </th>\r\n <td\r\n mat-cell\r\n *matCellDef=\"let submission; let i = index\"\r\n class=\"text-center border border-1\"\r\n >\r\n <div>\r\n <button\r\n class=\"btn\"\r\n mat-icon-button\r\n [matMenuTriggerFor]=\"menu\"\r\n aria-label=\"Example icon-button with a menu\"\r\n >\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button\r\n mat-menu-item\r\n (click)=\"editSubFormSubmission(i, submission)\"\r\n >\r\n <svg\r\n width=\"29\"\r\n height=\"28\"\r\n viewBox=\"0 0 29 28\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <rect\r\n x=\"0.5\"\r\n y=\"0.5\"\r\n width=\"28\"\r\n height=\"26.4737\"\r\n rx=\"5.5\"\r\n fill=\"white\"\r\n stroke=\"#D8D8D8\"\r\n />\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M12.0009 19.0787H9.1582V16.2361C9.1582 15.9447 9.2739 15.6653 9.47999 15.4593L16.2224 8.71686C16.4284 8.5105 16.708 8.39453 16.9995 8.39453C17.2911 8.39453 17.5707 8.5105 17.7767 8.71686L19.5201 10.4603C19.7264 10.6663 19.8424 10.9458 19.8424 11.2374C19.8424 11.529 19.7264 11.8086 19.5201 12.0145L12.7777 18.757C12.5715 18.9628 12.2922 19.0785 12.0009 19.0787Z\"\r\n stroke=\"#084FFF\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15.1704 10.3984L17.8415 13.0695\"\r\n stroke=\"#084FFF\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n <button mat-menu-item (click)=\"deleteSubForm(i)\">\r\n <svg\r\n width=\"29\"\r\n height=\"28\"\r\n viewBox=\"0 0 29 28\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <rect\r\n x=\"0.5\"\r\n y=\"0.5\"\r\n width=\"27.6402\"\r\n height=\"26.1328\"\r\n rx=\"5.5\"\r\n fill=\"white\"\r\n stroke=\"#D8D8D8\"\r\n />\r\n <path\r\n d=\"M8.60449 9.20637H20.0354\"\r\n stroke=\"#084FFF\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M19.2189 9.20703V17.7863C19.2189 18.6482 18.4881 19.3462 17.5859 19.3462H11.0539C10.1517 19.3462 9.4209 18.6482 9.4209 17.7863V9.20703\"\r\n stroke=\"#084FFF\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M16.7696 6.67122H11.8706\"\r\n stroke=\"#084FFF\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12.6871 12.3242V16.2239\"\r\n stroke=\"#084FFF\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15.9532 12.3242V16.2239\"\r\n stroke=\"#084FFF\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\r\n </table>\r\n </div>\r\n\r\n <div class=\"footer\">\r\n <div class=\"addNewBtn\" (click)=\"addNewSubmission()\">\r\n <svg\r\n width=\"15\"\r\n height=\"14\"\r\n viewBox=\"0 0 15 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M12.5556 13.2778H2.44444C1.64639 13.2778 1 12.6673 1 11.9136V2.3642C1 1.61048 1.64639 1 2.44444 1H12.5556C13.3536 1 14 1.61048 14 2.3642V11.9136C14 12.6673 13.3536 13.2778 12.5556 13.2778Z\"\r\n stroke=\"#D8D8D8\"\r\n stroke-width=\"0.8\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M5.3335 7.50347H9.66683\"\r\n stroke=\"#084FFF\"\r\n stroke-width=\"0.8\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M7.50005 5.33594V9.66927\"\r\n stroke=\"#084FFF\"\r\n stroke-width=\"0.8\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <a class=\"ms-2 text-decoration-none\">{{addButtonLabel}}</a>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Attachment } from '../../models/attachment.model';\r\nimport { SafeHtml } from '@angular/platform-browser';\r\nimport { ScoreCalculationService } from '../../services/score.service';\r\nimport { Answer } from '../../models/answer.model';\r\nimport { Submission } from '../../models/submission.model';\r\nimport { DataService } from '../../services/data.service';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\n\r\n\r\n@Component({\r\n selector: 'lib-inline-multiple-subform',\r\n templateUrl: './inline-multiple-subform.component.html',\r\n styleUrls: ['./inline-multiple-subform.component.scss'],\r\n})\r\nexport class InlineMultipleSubformComponent {\r\n @Input() subForm: any = {};\r\n @Output() subFormChange = new EventEmitter<any>();\r\n @Input() acceptedLanguage: string = '';\r\n maxPossibleScore!:number;\r\n maxPossibleGoodScore!:number;\r\n maxPossibleBadScore!:number\r\n\r\n submissions: Submission[] = [];\r\n deletedSubmissions: string[] = [];\r\n displayedColumns: string[] = [];\r\n addButtonLabel: string = 'Add New';\r\n user: string = '';\r\n elementsWithWhenClause: any;\r\n editableQuestions: string[] = [];\r\n constructor(\r\n private scoreCalcService: ScoreCalculationService,\r\n private dataService:DataService,\r\n public whenClauseService: WhenClauseService\r\n ){\r\n this.dataService.header$.subscribe((data) => {\r\n this.user = data.authUser;\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n // this.maxPossibleScore = this.scoreCalcService.getMaxPossibleScore(this.subForm);\r\n const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(this.subForm);\r\n this.maxPossibleGoodScore = goodMax;\r\n this.maxPossibleBadScore = badMax;\r\n if (this.subForm?.submissions) {\r\n this.submissions = this.subForm.submissions;\r\n this.subForm.deletedSubmissions = [];\r\n }\r\n if (this.subForm?.property?.addButtonLabel) {\r\n this.addButtonLabel = this.subForm.property.addButtonLabel;\r\n }\r\n this.initializeDisplayedColumns();\r\n this.elementsWithWhenClause = this.whenClauseService.getWhenClauseElements(\r\n this.subForm\r\n );\r\n this.updateWhenClause();\r\n if(this.subForm.submissionCopyConfig?.allowCopyFromOtherSubmissions){\r\n this.editableQuestions = this.subForm.submissionCopyConfig.editableQuestions || [];\r\n }\r\n }\r\n\r\n\r\n updateWhenClause(){\r\n if(this.submissions.length>0){\r\n this.submissions.forEach((submission)=>{\r\n submission.answers.forEach((ans)=>{\r\n this.whenClauseService.evaluateSubformWhenClauses(ans.answer, submission, ans.questionId ||'',this.elementsWithWhenClause); });\r\n })\r\n }\r\n }\r\n\r\n initializeDisplayedColumns() {\r\n this.displayedColumns = this.subForm.rows.flatMap((item: any) =>\r\n item.grid\r\n .filter((gridItem: any) => gridItem.element?.formElement?.elementType !== 'HIDDEN_FIELD')\r\n .map((gridItem: any) => gridItem.element.question)\r\n );\r\n this.displayedColumns.push('actions');\r\n }\r\n\r\n populateHiddenFieldAnswers() {\r\n if (!this.submissions?.length) return;\r\n \r\n this.submissions.forEach((submission: any) => {\r\n submission.answers.forEach((ans: any) => {\r\n // Find the question definition by questionId\r\n const question = this.findQuestionById(this.subForm.rows, ans.questionId);\r\n \r\n if (question?.formElement?.elementType === 'HIDDEN_FIELD') {\r\n const hiddenField = question.formElement.hiddenField;\r\n const resolvedAnswer = this.resolveHiddenFieldValue(hiddenField);\r\n \r\n ans.answer = resolvedAnswer;\r\n ans.maximumPossibleScore = 0; // same as your HiddenFieldComponent emit\r\n }\r\n });\r\n });\r\n }\r\n\r\n findQuestionById(rows: any[], questionId: string): any {\r\n for (const row of rows) {\r\n for (const gridItem of row.grid) {\r\n if (gridItem.element?.id === questionId) {\r\n return gridItem.element;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n resolveHiddenFieldValue(hiddenField: {\r\n value: string | null,\r\n valueSource: string | null,\r\n key: string | null\r\n }): any {\r\n if (!hiddenField?.valueSource) return null;\r\n \r\n switch (hiddenField.valueSource) {\r\n case 'CUSTOM_INPUT':\r\n // Directly return the provided value\r\n return hiddenField.value;\r\n \r\n case 'LOCAL_STORAGE':\r\n if (hiddenField.key) {\r\n return localStorage.getItem(hiddenField.key);\r\n }\r\n return null;\r\n \r\n case 'SESSION_STORAGE':\r\n if (hiddenField.key) {\r\n return sessionStorage.getItem(hiddenField.key);\r\n }\r\n return null;\r\n \r\n case 'PREDEFINED_VARIABLE':\r\n return this.resolvePredefinedVariable(hiddenField.value);\r\n \r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n private resolvePredefinedVariable(variable: string | null): any {\r\n if (!variable) return null;\r\n \r\n const now = new Date();\r\n \r\n switch (variable) {\r\n case 'CURRENT_DATE':\r\n return now.toISOString().split('T')[0]; // e.g. \"2025-09-29\"\r\n case 'CURRENT_TIME':\r\n return now.toTimeString().split(' ')[0]; // e.g. \"15:42:18\"\r\n case 'CURRENT_DATE_TIME':\r\n return now.toLocaleString(); // full ISO datetime\r\n case 'EPOCH_TIME':\r\n return now.getTime(); // milliseconds since 1970\r\n case 'YEAR':\r\n return now.getFullYear();\r\n case 'MONTH':\r\n return now.getMonth() + 1; // 1-12\r\n case 'DAY':\r\n return now.getDate(); // 1-31\r\n case 'SUBMITTED_BY':\r\n return this.user ? this.user : 'Unknown';\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n addNewSubmission() {\r\n const emptyAnswers: Answer[] = [];\r\n this.subForm.rows.forEach((row: any) => {\r\n row.grid.forEach((gridItem: any) => {\r\n if (\r\n gridItem.entityType === 'QUESTION' &&\r\n gridItem.element &&\r\n gridItem.element.id\r\n ) {\r\n emptyAnswers.push({\r\n questionId: gridItem.element.id,\r\n answer: '',\r\n maximumPossibleScore:0,\r\n show: gridItem.show,\r\n required: gridItem.element.required\r\n });\r\n }\r\n });\r\n });\r\n const submission: Submission = {\r\n submissionId: '',\r\n answers: emptyAnswers,\r\n };\r\n this.submissions.push(submission);\r\n this.submissions = [...this.submissions];\r\n this.updateSubFormWithSubmissions();\r\n this.populateHiddenFieldAnswers();\r\n }\r\n\r\n isSubmissionEditable(\r\n submission: any,\r\n questionId: string\r\n ): boolean {\r\n if (!this.editableQuestions?.length) {\r\n return false;\r\n }\r\n \r\n // Must be a copied submission\r\n if (!submission?.sourceSubmissionId && submission?.isCopied !== true) {\r\n return false;\r\n }\r\n \r\n // Question must be editable\r\n return this.editableQuestions.includes(questionId);\r\n }\r\n\r\n updateSubFormWithSubmissions() {\r\n this.clearHiddenAnswers();\r\n this.subForm.submissions = this.submissions;\r\n this.subForm.maxPossibleScore = {\r\n 'good': this.maxPossibleGoodScore,\r\n 'bad': this.maxPossibleBadScore\r\n }\r\n this.subForm.deletedSubmissions = this.deletedSubmissions;\r\n this.subFormChange.emit(this.subForm);\r\n }\r\n\r\n getSubmissionQuestion(submission: Submission, formElement: any): any {\r\n const ansObj = submission.answers.find(\r\n (a) => a.questionId === formElement.element.id\r\n );\r\n const questionClone = { ...formElement.element };\r\n questionClone.answer = ansObj ? ansObj.answer : '';\r\n questionClone.attachments = ansObj?.attachments ? ansObj.attachments : [];\r\n questionClone.copiedAttachments = ansObj?.copiedAttachments ? ansObj.copiedAttachments : [];\r\n questionClone.amountInWords = ansObj?.amountInWords ? ansObj.amountInWords : '';\r\n questionClone.required = ansObj?.required !== undefined ? ansObj.required : questionClone.required;\r\n return questionClone;\r\n }\r\n\r\n updateInlineAnswer(submission: Submission, question: any, newAnswerObject: any) {\r\n const newAnswer = newAnswerObject.answer;\r\n const amountInWords = newAnswerObject?.amountInWords;\r\n const currency = newAnswerObject?.currency;\r\n this.whenClauseService.evaluateSubformWhenClauses(newAnswer, submission, question.id,this.elementsWithWhenClause);\r\n const submissionIndex = this.submissions.indexOf(submission);\r\n if (submissionIndex > -1) {\r\n const existingAnswer = this.submissions[submissionIndex].answers.find(\r\n (a) => a.questionId === question.id\r\n );\r\n\r\n if (\r\n question.formElement &&\r\n question.formElement.elementType === 'FILE_PICKER'\r\n ) {\r\n // Map file objects to file names.\r\n let fileNames: string[] = [];\r\n if (newAnswer && Array.isArray(newAnswer)) {\r\n fileNames = newAnswer.map((file: any) => file?._file?.name);\r\n }\r\n\r\n // Get deleted file IDs from the question (if any).\r\n let deletedFiles: string[] = [];\r\n if (question.deleteFiles && question.deleteFiles.length > 0) {\r\n deletedFiles = question.deleteFiles;\r\n }\r\n\r\n if (existingAnswer) {\r\n existingAnswer.files = newAnswer;\r\n existingAnswer.answer = fileNames;\r\n // Initialize deleteFiles if it's not defined.\r\n if (!existingAnswer.deleteFiles) {\r\n existingAnswer.deleteFiles = [];\r\n }\r\n // Append any deleted file IDs not already present.\r\n deletedFiles.forEach((deletedId: string) => {\r\n if (!existingAnswer.deleteFiles!.includes(deletedId)) {\r\n existingAnswer.deleteFiles!.push(deletedId);\r\n }\r\n });\r\n } else {\r\n const newObj: Answer = {\r\n questionId: question.id,\r\n files: newAnswer,\r\n answer: fileNames,\r\n deleteFiles: deletedFiles.length > 0 ? [...deletedFiles] : [],\r\n };\r\n this.submissions[submissionIndex].answers.push(newObj);\r\n }\r\n } else {\r\n // For non-file picker elements, update normally.\r\n if (existingAnswer) {\r\n existingAnswer.answer = newAnswer;\r\n existingAnswer.maximumPossibleScore = newAnswerObject.maxPossibleScore;\r\n existingAnswer.amountInWords = amountInWords;\r\n existingAnswer.currencySymbol = currency; \r\n } else {\r\n this.submissions[submissionIndex].answers.push({\r\n questionId: question.id,\r\n answer: newAnswer,\r\n maximumPossibleScore: newAnswerObject.maxPossibleScore,\r\n amountInWords: amountInWords,\r\n currencySymbol: currency\r\n });\r\n }\r\n if(\r\n question.formElement &&\r\n (question.formElement.elementType === 'DROP_DOWN' ||\r\n question.formElement.elementType === 'RADIO_BUTTON' ||\r\n question.formElement.elementType === 'CHECK_BOX') &&\r\n question.formElement.scoring &&\r\n question.formElement.scoring.enableScoring\r\n ){\r\n submission.answers.forEach((ans) => {\r\n if(question.id === ans.questionId){\r\n const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(ans.answer, question);\r\n // Save total score and individual scores\r\n ans.scores = scoreResult?.scores;\r\n }\r\n });\r\n // Check scoring condition\r\n if (this.scoreCalcService.shouldCalculateScore(this.subForm, submission)) {\r\n // Mark that this submission had all scoring questions answered at least once\r\n submission.hasAllScoringAnsweredOnce = true;\r\n }\r\n\r\n if (submission.hasAllScoringAnsweredOnce) {\r\n // Recalculate score always after once satisfied\r\n submission.scores = this.scoreCalcService.calculateSubmissionScore(submission.answers);\r\n }\r\n }\r\n }\r\n const hasAnyScore = this.submissions.some(\r\n sub => sub.scores?.some(s => s.score !== null && s.score !== undefined)\r\n );\r\n \r\n if (hasAnyScore) {\r\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleGoodScore,this.maxPossibleBadScore);\r\n } else {\r\n this.subForm.scores = null; // or 0, depending on how you want to represent \"no score yet\"\r\n }\r\n this.updateSubFormWithSubmissions();\r\n }\r\n }\r\n\r\n updateDeletedFiles(\r\n submission: Submission,\r\n question: any,\r\n deletedFiles: string[]\r\n ) {\r\n // Find the matching answer object based on the questionId\r\n const answerObj = submission.answers.find(\r\n (ans) => ans.questionId === question.id\r\n );\r\n\r\n if (answerObj) {\r\n // Ensure deleteFiles is always an array\r\n if (!answerObj.deleteFiles) {\r\n answerObj.deleteFiles = [];\r\n }\r\n\r\n // Add deleted file IDs to deleteFiles array while avoiding duplicates\r\n deletedFiles.forEach((fileId) => {\r\n if (!answerObj.deleteFiles!.includes(fileId)) {\r\n answerObj.deleteFiles!.push(fileId);\r\n }\r\n });\r\n\r\n answerObj.copiedAttachments = answerObj.copiedAttachments?.filter(item=>{\r\n return !deletedFiles.includes(item);\r\n });\r\n }\r\n }\r\n\r\n deleteSubmission(index: number) {\r\n const submission = this.submissions[index];\r\n if (submission.submissionId) {\r\n this.deletedSubmissions.push(submission.submissionId);\r\n }\r\n this.submissions.splice(index, 1);\r\n this.submissions = [...this.submissions];\r\n const totalSubmissions = this.submissions.length;\r\n const maxScore = totalSubmissions*this.maxPossibleScore;\r\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleGoodScore,this.maxPossibleBadScore);\r\n this.updateSubFormWithSubmissions();\r\n }\r\n\r\n clearEmptySubmissions() {\r\n const nonEmptySubmissions: Submission[] = [];\r\n const emptySubmissionIds: string[] = [];\r\n\r\n this.submissions.forEach((submission) => {\r\n const hasValue = submission.answers.some(\r\n (answer) =>\r\n answer.answer !== '' &&\r\n answer.answer !== null &&\r\n answer.answer !== undefined\r\n );\r\n if (hasValue) {\r\n nonEmptySubmissions.push(submission);\r\n } else if (submission.submissionId) {\r\n emptySubmissionIds.push(submission.submissionId);\r\n }\r\n });\r\n\r\n this.submissions = nonEmptySubmissions;\r\n this.deletedSubmissions.push(...emptySubmissionIds);\r\n this.updateSubFormWithSubmissions();\r\n }\r\n \r\n clearHiddenAnswers() {\r\n for (const submission of this.submissions) {\r\n if (!submission.answers || !Array.isArray(submission.answers)) continue;\r\n \r\n for (const ans of submission.answers) {\r\n // If show flag is explicitly false → clear the answer value\r\n if (ans.show === false) {\r\n ans.answer = \"\"; // clear the answer\r\n ans.files = []; // clear files (optional)\r\n ans.scores = []; // clear score (optional)\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"example-container\" tabindex=\"0\">\r\n <div class=\"table-container\">\r\n <table mat-table [dataSource]=\"submissions\" class=\"mat-elevation-z8\">\r\n <ng-container *ngFor=\"let row of subForm.rows\">\r\n <ng-container\r\n *ngFor=\"let formElement of row.grid\"\r\n [matColumnDef]=\"formElement.element.question\"\r\n >\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"border border-1 column-width\"\r\n >\r\n {{ formElement.element.question }}\r\n </th>\r\n <td\r\n mat-cell\r\n *matCellDef=\"let submission;let i=index\"\r\n class=\"border-cell column-width\"\r\n [id]=\"'question-'+submission.submissionId\"\r\n >\r\n <div *ngIf=\"formElement.entityType === 'QUESTION' && whenClauseService.checkElementVisibility(formElement.element.id,submission)\">\r\n <div [ngSwitch]=\"formElement.element.formElement.elementType\">\r\n <lib-check-box-fields\r\n *ngSwitchCase=\"'CHECK_BOX'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [rowId]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-check-box-fields>\r\n <lib-date-time-fields\r\n *ngSwitchCase=\"'DATE_TIME'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-date-time-fields>\r\n <lib-drop-down-fields\r\n *ngSwitchCase=\"'DROP_DOWN'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-drop-down-fields>\r\n <lib-file-picker-fields\r\n *ngSwitchCase=\"'FILE_PICKER'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n (inlineDeleteFiles)=\"\r\n updateDeletedFiles(submission, formElement.element, $event)\r\n \"\r\n ></lib-file-picker-fields>\r\n <lib-location-fields\r\n *ngSwitchCase=\"'LOCATION'\"\r\n [inLine]=\"true\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-location-fields>\r\n <lib-mail-fields\r\n *ngSwitchCase=\"'EMAIL'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-mail-fields>\r\n <lib-mobile-fields\r\n *ngSwitchCase=\"'MOBILE'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-mobile-fields>\r\n <lib-number-fields\r\n *ngSwitchCase=\"'NUMBER'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n [rowId]=\"i\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-number-fields>\r\n <lib-password-fields\r\n *ngSwitchCase=\"'PASSWORD'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-password-fields>\r\n <lib-radio-button-fields\r\n *ngSwitchCase=\"'RADIO_BUTTON'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n [rowId]=\"i\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-radio-button-fields>\r\n <lib-rich-text-editor-fields\r\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-rich-text-editor-fields>\r\n <lib-selection-matrix-fields\r\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n [rowId]=\"i\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-selection-matrix-fields>\r\n <lib-signature-fields\r\n *ngSwitchCase=\"'SIGNATURE'\"\r\n [inLine]=\"true\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-signature-fields>\r\n <lib-slider-fields\r\n *ngSwitchCase=\"'SLIDER'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-slider-fields>\r\n <lib-terms-and-condition-fields\r\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\r\n [inLine]=\"true\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-terms-and-condition-fields>\r\n <lib-text-area-fields\r\n *ngSwitchCase=\"'TEXT_AREA'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-text-area-fields>\r\n <lib-text-fields\r\n *ngSwitchCase=\"'TEXT_BOX'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-text-fields>\r\n <lib-toggle-switch-fields\r\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-toggle-switch-fields>\r\n <lib-url-fields\r\n *ngSwitchCase=\"'URL'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-url-fields>\r\n <lib-currency-fields\r\n *ngSwitchCase=\"'CURRENCY'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-currency-fields>\r\n <lib-hidden-field\r\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-hidden-field>\r\n <lib-aggregate-function\r\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\r\n [inLine]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [question]=\"getSubmissionQuestion(submission, formElement)\"\r\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\r\n [rowId]=\"i\"\r\n (answerChange)=\"\r\n updateInlineAnswer(submission, formElement.element, $event)\r\n \"\r\n ></lib-aggregate-function>\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"actions\" stickyEnd>\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"border border-1 action-column\"\r\n >\r\n Actions\r\n </th>\r\n <td\r\n mat-cell\r\n *matCellDef=\"let submission; let i = index\"\r\n class=\"border-cell text-center\"\r\n >\r\n <button class=\"delete-button\" (click)=\"deleteSubmission(i)\">\r\n <i class=\"bi bi-trash\"></i>\r\n </button>\r\n </td>\r\n </ng-container>\r\n\r\n <tr\r\n mat-header-row\r\n *matHeaderRowDef=\"displayedColumns\"\r\n class=\"border-row\"\r\n ></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let submission; columns: displayedColumns\"\r\n class=\"border-row\"\r\n ></tr>\r\n </table>\r\n </div>\r\n\r\n <div class=\"footer\">\r\n <div class=\"addNewBtn\" (click)=\"addNewSubmission()\">\r\n <svg\r\n width=\"15\"\r\n height=\"14\"\r\n viewBox=\"0 0 15 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M12.5556 13.2778H2.44444C1.64639 13.2778 1 12.6673 1 11.9136V2.3642C1 1.61048 1.64639 1 2.44444 1H12.5556C13.3536 1 14 1.61048 14 2.3642V11.9136C14 12.6673 13.3536 13.2778 12.5556 13.2778Z\"\r\n stroke=\"#D8D8D8\"\r\n stroke-width=\"0.8\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M5.3335 7.50347H9.66683\"\r\n stroke=\"#084FFF\"\r\n stroke-width=\"0.8\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M7.50005 5.33594V9.66927\"\r\n stroke=\"#084FFF\"\r\n stroke-width=\"0.8\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <a class=\"ms-2 text-decoration-none\">{{addButtonLabel}}</a>\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Injector,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport { SubForm } from '../../models/subForm.model';\r\nimport { Submission } from '../../models/submission.model';\r\nimport { Answer } from '../../models/answer.model';\r\nimport { ScoreCalculationService } from '../../services/score.service';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\n\r\n@Component({\r\n selector: 'lib-card-subform',\r\n templateUrl: './card-subform.component.html',\r\n styleUrls: ['./card-subform.component.scss'],\r\n})\r\nexport class CardSubformComponent {\r\n @Input() subForm: any = {};\r\n @Input() acceptedLanguage: string = '';\r\n @Input() edit: boolean = false;\r\n grid: any;\r\n componentToLoad: any;\r\n addButtonLabel: string = 'Add New Submission';\r\n injector!: Injector;\r\n submissions: Submission[] = [];\r\n deletedSubmissions: string[] = [];\r\n maxPossibleGoodScore!: number;\r\n maxPossibleBadScore!: number;\r\n @Output() subFormChange = new EventEmitter<any>();\r\n Math = Math;\r\n elementsWithWhenClause: any;\r\n editableQuestions: string[] = [];\r\n constructor(\r\n private scoreCalcService: ScoreCalculationService,\r\n public whenClauseService: WhenClauseService\r\n ) {}\r\n\r\n ngOnInit() {\r\n const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(\r\n this.subForm\r\n );\r\n this.maxPossibleGoodScore = goodMax;\r\n this.maxPossibleBadScore = badMax;\r\n\r\n this.loadComponent();\r\n if (this.subForm?.submissions) {\r\n this.submissions = this.subForm.submissions;\r\n this.subForm.deletedSubmissions = [];\r\n } else {\r\n this.submissions = this.generateSubmissionsFromDefaultAnswers(\r\n this.subForm\r\n );\r\n }\r\n if (this.submissions?.length) {\r\n this.updateSubFormWithSubmissions();\r\n }\r\n if (this.subForm?.property?.addButtonLabel) {\r\n this.addButtonLabel = this.subForm.property.addButtonLabel;\r\n }\r\n this.elementsWithWhenClause = this.whenClauseService.getWhenClauseElements(\r\n this.subForm\r\n );\r\n this.updateWhenClause();\r\n if(this.subForm.submissionCopyConfig?.allowCopyFromOtherSubmissions){\r\n this.editableQuestions = this.subForm.submissionCopyConfig.editableQuestions || [];\r\n }\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.subForm?.submissions) {\r\n this.submissions = this.subForm.submissions;\r\n this.subForm.deletedSubmissions = [];\r\n this.updateSubFormWithSubmissions();\r\n }\r\n }\r\n\r\n updateWhenClause(){\r\n if(this.submissions.length>0){\r\n this.submissions.forEach((submission)=>{\r\n submission.answers.forEach((ans)=>{\r\n this.whenClauseService.evaluateSubformWhenClauses(ans.answer, submission, ans.questionId ||'',this.elementsWithWhenClause); });\r\n })\r\n }\r\n }\r\n\r\n private async loadComponent(): Promise<void> {\r\n this.componentToLoad = await this.loadFormElementsComponent();\r\n this.injector = this.createInjector();\r\n }\r\n\r\n private async loadFormElementsComponent() {\r\n const { FormElementsComponent } = await import(\r\n '../form-elements/form-elements.component'\r\n );\r\n return FormElementsComponent;\r\n }\r\n\r\n createInjector(): Injector {\r\n return Injector.create({\r\n providers: [\r\n { provide: 'grid', useValue: this.grid?.element.childLogics },\r\n { provide: 'state', useValue: 'child' },\r\n ],\r\n });\r\n }\r\n\r\n generateSubmissionsFromDefaultAnswers(subForm: SubForm): Submission[] {\r\n if (\r\n !subForm.defaultAnswers ||\r\n !Array.isArray(subForm.defaultAnswers.answers)\r\n ) {\r\n return [];\r\n }\r\n\r\n return subForm.defaultAnswers.answers.map((answerGroup) => {\r\n const submission: Submission = {\r\n submissionId: '', // Generate a unique ID for each submission\r\n configuration: {\r\n isDefault: true,\r\n allowDelete: answerGroup.isDeleteEnable,\r\n },\r\n answers: answerGroup.defaultQuestionsAnswers.map((qa) => {\r\n const answer: Answer = {\r\n questionId: qa.questionId,\r\n answer: qa.defaultAnswer,\r\n attachments: [], // No attachments from defaultAnswers\r\n };\r\n return answer;\r\n }),\r\n };\r\n\r\n return submission;\r\n });\r\n }\r\n\r\n trackBySubmissionId(index: number, submission: Submission): string | number {\r\n return submission?.submissionId || index;\r\n }\r\n\r\n getSubmissionQuestion(submission: Submission, formElement: any): any {\r\n const ansObj = submission.answers.find(\r\n (a) => a.questionId === formElement.element.id\r\n );\r\n const questionClone = { ...formElement.element };\r\n questionClone.answer = ansObj ? ansObj.answer : '';\r\n questionClone.defaultValue = '';\r\n questionClone.disableEdit = submission.configuration?.isDefault\r\n ? questionClone.disableEdit\r\n : false;\r\n questionClone.attachments = ansObj?.attachments ? ansObj.attachments : [];\r\n questionClone.copiedAttachments = ansObj?.copiedAttachments ? ansObj.copiedAttachments : [];\r\n questionClone.amountInWords = ansObj?.amountInWords ? ansObj.amountInWords : '';\r\n questionClone.required = ansObj?.required !== undefined ? ansObj.required : questionClone.required;\r\n questionClone.answerCurrency = ansObj?.answerCurrency ? ansObj.answerCurrency : '';\r\n return questionClone;\r\n }\r\n\r\n isSubmissionEditable(\r\n submission: any,\r\n questionId: string\r\n ): boolean {\r\n if (!this.editableQuestions?.length) {\r\n return false;\r\n }\r\n\r\n // Must be a copied submission\r\n if (!submission?.sourceSubmissionId && submission?.isCopied !== true) {\r\n return false;\r\n }\r\n\r\n // Question must be editable\r\n return this.editableQuestions.includes(questionId);\r\n }\r\n\r\n addNewSubmission() {\r\n const emptyAnswers: Answer[] = [];\r\n this.subForm.rows.forEach((row: any) => {\r\n row.grid.forEach((gridItem: any) => {\r\n if (\r\n gridItem.entityType === 'QUESTION' &&\r\n gridItem.element &&\r\n gridItem.element.id\r\n ) {\r\n emptyAnswers.push({\r\n questionId: gridItem.element.id,\r\n answer: '',\r\n maximumPossibleScore: 0,\r\n show: gridItem.show,\r\n required: gridItem.element.required\r\n });\r\n }\r\n });\r\n });\r\n const submission: Submission = {\r\n submissionId: uuidv4(),\r\n answers: emptyAnswers,\r\n configuration: {\r\n isDefault: false,\r\n allowDelete: true,\r\n },\r\n };\r\n\r\n emptyAnswers.forEach((ans) => {\r\n this.whenClauseService.evaluateSubformWhenClauses(ans.answer, submission, ans.questionId ||'',this.elementsWithWhenClause);\r\n })\r\n\r\n this.submissions.push(submission);\r\n this.submissions = [...this.submissions];\r\n this.updateSubFormWithSubmissions();\r\n }\r\n\r\n updateSubFormWithSubmissions() {\r\n this.clearHiddenAnswers();\r\n this.subForm.submissions = this.submissions;\r\n this.subForm.maxPossibleScore = {\r\n good: this.maxPossibleGoodScore,\r\n bad: this.maxPossibleBadScore,\r\n };\r\n this.subForm.deletedSubmissions = this.deletedSubmissions;\r\n this.subFormChange.emit(this.subForm);\r\n }\r\n\r\n updateAnswer(submission: Submission, question: any, newAnswerObject: any) {\r\n const newAnswer = newAnswerObject.answer;\r\n const amountInWords = newAnswerObject?.amountInWords;\r\n const currency = newAnswerObject?.currency;\r\n if(question.formElement.elementType === 'FILE_PICKER'){\r\n let fileLength = newAnswer?.length || 0;\r\n this.whenClauseService.evaluateSubformWhenClauses(fileLength, submission, question.id,this.elementsWithWhenClause);\r\n } else{\r\n this.whenClauseService.evaluateSubformWhenClauses(newAnswer, submission, question.id,this.elementsWithWhenClause);\r\n }\r\n const submissionIndex = this.submissions.indexOf(submission);\r\n if (submissionIndex > -1) {\r\n const existingAnswer = this.submissions[submissionIndex].answers.find(\r\n (a) => a.questionId === question.id\r\n );\r\n\r\n if (\r\n question.formElement &&\r\n question.formElement.elementType === 'FILE_PICKER'\r\n ) {\r\n // Map file objects to file names.\r\n let fileNames: string[] = [];\r\n if (newAnswer && Array.isArray(newAnswer)) {\r\n fileNames = newAnswer.map((file: any) => file?._file?.name);\r\n }\r\n\r\n // Get deleted file IDs from the question (if any).\r\n let deletedFiles: string[] = [];\r\n if (question.deleteFiles && question.deleteFiles.length > 0) {\r\n deletedFiles = question.deleteFiles;\r\n }\r\n\r\n if (existingAnswer) {\r\n existingAnswer.files = newAnswer;\r\n existingAnswer.answer = fileNames;\r\n // Initialize deleteFiles if it's not defined.\r\n if (!existingAnswer.deleteFiles) {\r\n existingAnswer.deleteFiles = [];\r\n }\r\n // Append any deleted file IDs not already present.\r\n deletedFiles.forEach((deletedId: string) => {\r\n if (!existingAnswer.deleteFiles!.includes(deletedId)) {\r\n existingAnswer.deleteFiles!.push(deletedId);\r\n }\r\n });\r\n } else {\r\n const newObj: Answer = {\r\n questionId: question.id,\r\n files: newAnswer,\r\n answer: fileNames,\r\n deleteFiles: deletedFiles.length > 0 ? [...deletedFiles] : [],\r\n };\r\n this.submissions[submissionIndex].answers.push(newObj);\r\n }\r\n } else {\r\n if (existingAnswer) {\r\n existingAnswer.answer = newAnswer;\r\n existingAnswer.maximumPossibleScore =\r\n newAnswerObject.maxPossibleScore;\r\n existingAnswer.amountInWords = amountInWords\r\n existingAnswer.currencySymbol = currency\r\n } else {\r\n this.submissions[submissionIndex].answers.push({\r\n questionId: question.id,\r\n answer: newAnswer,\r\n maximumPossibleScore: newAnswerObject.maxPossibleScore,\r\n amountInWords: amountInWords,\r\n currencySymbol: currency\r\n });\r\n }\r\n if (\r\n question.formElement &&\r\n (question.formElement.elementType === 'DROP_DOWN' ||\r\n question.formElement.elementType === 'RADIO_BUTTON' ||\r\n question.formElement.elementType === 'CHECK_BOX') &&\r\n question.formElement.scoring &&\r\n question.formElement.scoring.enableScoring\r\n ) {\r\n submission.answers.forEach((ans) => {\r\n if (question.id === ans.questionId) {\r\n const scoreResult =\r\n this.scoreCalcService.calculateScoreFromAnswer(\r\n ans.answer,\r\n question\r\n );\r\n // Save total score and individual scores\r\n ans.scores = scoreResult?.scores;\r\n }\r\n });\r\n // Check scoring condition\r\n if (\r\n this.scoreCalcService.shouldCalculateScore(this.subForm, submission)\r\n ) {\r\n // Mark that this submission had all scoring questions answered at least once\r\n submission.hasAllScoringAnsweredOnce = true;\r\n }\r\n\r\n if (submission.hasAllScoringAnsweredOnce) {\r\n // Recalculate score always after once satisfied\r\n submission.scores = this.scoreCalcService.calculateSubmissionScore(\r\n submission.answers\r\n );\r\n }\r\n }\r\n }\r\n const hasAnyScore = this.submissions.some((sub) =>\r\n sub.scores?.some((s) => s.score !== null && s.score !== undefined)\r\n );\r\n\r\n if (hasAnyScore) {\r\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(\r\n this.submissions,\r\n this.maxPossibleGoodScore,\r\n this.maxPossibleBadScore\r\n );\r\n } else {\r\n this.subForm.scores = null; // or 0, depending on how you want to represent \"no score yet\"\r\n }\r\n this.updateSubFormWithSubmissions();\r\n }\r\n }\r\n\r\n updateDeletedFiles(\r\n submission: Submission,\r\n question: any,\r\n deletedFiles: string[]\r\n ) {\r\n // Find the matching answer object based on the questionId\r\n const answerObj = submission.answers.find(\r\n (ans) => ans.questionId === question.id\r\n );\r\n\r\n if (answerObj) {\r\n // Ensure deleteFiles is always an array\r\n if (!answerObj.deleteFiles) {\r\n answerObj.deleteFiles = [];\r\n }\r\n\r\n // Add deleted file IDs to deleteFiles array while avoiding duplicates\r\n deletedFiles.forEach((fileId) => {\r\n if (!answerObj.deleteFiles!.includes(fileId)) {\r\n answerObj.deleteFiles!.push(fileId);\r\n }\r\n });\r\n\r\n answerObj.copiedAttachments = answerObj.copiedAttachments?.filter(item=>{\r\n return !deletedFiles.includes(item);\r\n });\r\n }\r\n }\r\n\r\n deleteSubmission(index: number) {\r\n const submission = this.submissions[index];\r\n if (submission.submissionId) {\r\n this.deletedSubmissions.push(submission.submissionId);\r\n }\r\n this.submissions.splice(index, 1);\r\n this.submissions = [...this.submissions];\r\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(\r\n this.submissions,\r\n this.maxPossibleGoodScore,\r\n this.maxPossibleBadScore\r\n );\r\n this.updateSubFormWithSubmissions();\r\n }\r\n\r\n\r\n clearHiddenAnswers() {\r\n for (const submission of this.submissions) {\r\n if (!submission.answers || !Array.isArray(submission.answers)) continue;\r\n\r\n for (const ans of submission.answers) {\r\n // If show flag is explicitly false → clear the answer value\r\n if (ans.show === false) {\r\n ans.answer = \"\"; // clear the answer\r\n ans.files = []; // clear files (optional)\r\n ans.scores = []; // clear score (optional)\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","<ng-container *ngFor=\"let submission of submissions;let i=index ;trackBy: trackBySubmissionId\">\r\n <div class=\"card-subform mb-4\" [id]=\"'question-'+submission.submissionId\">\r\n <div class=\"delete d-flex justify-content-end me-4 mb-2 mt-2 gap-3\"\r\n >\r\n <ng-container *ngIf=\"submission?.scores?.[0] as firstScore\">\r\n <div\r\n class=\"submissionScore\"\r\n [ngClass]=\"{\r\n 'good-score': firstScore.scoreType === 'GOOD_SCORE',\r\n 'bad-score': firstScore.scoreType === 'BAD_SCORE'\r\n }\"\r\n >\r\n <span>{{ Math.abs(firstScore.score) }}</span>\r\n </div>\r\n </ng-container>\r\n <img class=\"delete-icon\" src=\"assets/icons/delete-icon.svg\" alt=\"delete\"\r\n *ngIf=\"submission.configuration?.allowDelete\"\r\n (click)=\"deleteSubmission(i)\">\r\n </div>\r\n <div *ngFor=\"let row of subForm.rows\">\r\n <div class=\"d-flex\">\r\n <div\r\n *ngFor=\"let grid of row.grid\"\r\n [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\r\n >\r\n <div *ngIf=\"grid.entityType === 'QUESTION' && whenClauseService.checkElementVisibility(grid.element.id,submission)\">\r\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\r\n <lib-check-box-fields\r\n *ngSwitchCase=\"'CHECK_BOX'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [rowId]=\"i\"\r\n [submissionIndex]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-check-box-fields>\r\n <lib-date-time-fields\r\n *ngSwitchCase=\"'DATE_TIME'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-date-time-fields>\r\n <lib-drop-down-fields\r\n *ngSwitchCase=\"'DROP_DOWN'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-drop-down-fields>\r\n <lib-file-picker-fields\r\n *ngSwitchCase=\"'FILE_PICKER'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n (inlineDeleteFiles)=\"\r\n updateDeletedFiles(submission, grid.element, $event)\r\n \"\r\n ></lib-file-picker-fields>\r\n <lib-location-fields\r\n *ngSwitchCase=\"'LOCATION'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-location-fields>\r\n <lib-mail-fields\r\n *ngSwitchCase=\"'EMAIL'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-mail-fields>\r\n <lib-mobile-fields\r\n *ngSwitchCase=\"'MOBILE'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-mobile-fields>\r\n <lib-number-fields\r\n *ngSwitchCase=\"'NUMBER'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [rowId]=\"'0'\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-number-fields>\r\n <lib-password-fields\r\n *ngSwitchCase=\"'PASSWORD'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-password-fields>\r\n <lib-radio-button-fields\r\n *ngSwitchCase=\"'RADIO_BUTTON'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [rowId]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-radio-button-fields>\r\n <lib-rich-text-editor-fields\r\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [inSubForm]=\"true\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-rich-text-editor-fields>\r\n <lib-selection-matrix-fields\r\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n [rowId]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-selection-matrix-fields>\r\n <lib-slider-fields\r\n *ngSwitchCase=\"'SLIDER'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-slider-fields>\r\n <lib-terms-and-condition-fields\r\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-terms-and-condition-fields>\r\n <lib-text-area-fields\r\n *ngSwitchCase=\"'TEXT_AREA'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-text-area-fields>\r\n <lib-text-fields\r\n *ngSwitchCase=\"'TEXT_BOX'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-text-fields>\r\n <lib-toggle-switch-fields\r\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-toggle-switch-fields>\r\n <lib-url-fields\r\n *ngSwitchCase=\"'URL'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-url-fields>\r\n <lib-currency-fields\r\n *ngSwitchCase=\"'CURRENCY'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-currency-fields>\r\n <lib-hidden-field\r\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-hidden-field>\r\n <lib-iframe-fields\r\n *ngSwitchCase=\"'IFRAME_WIDGET'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n ></lib-iframe-fields>\r\n <lib-aggregate-function\r\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\r\n [question]=\"getSubmissionQuestion(submission,grid)\"\r\n [inCard]=\"true\"\r\n [submissionIndex]=\"i\"\r\n [rowId]=\"'0'\"\r\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\r\n (answerChange)=\"\r\n updateAnswer(submission, grid.element, $event)\r\n \"\r\n ></lib-aggregate-function>\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"grid.element.childLogics\">\r\n <ng-container\r\n *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as outlet\">\r\n <ng-container *ngComponentOutlet=\"outlet.component | async; injector: outlet.injector\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container> -->\r\n <ng-container *ngIf=\"grid?.element?.childLogics\">\r\n <ng-container *ngIf=\"componentToLoad\">\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n componentToLoad;\r\n inputs: {\r\n grid: grid?.element?.childLogics,\r\n answer: grid?.element?.answer,\r\n state: 'child'\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"grid.entityType === 'SECTION'\">\r\n <lib-section-fields [section]=\"grid.element\"></lib-section-fields>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<div class=\"subform-footer\">\r\n <button class=\"btn btn-primary\" (click)=\"addNewSubmission()\">{{addButtonLabel}}</button>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Injector,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { SubformCopyService } from '../../services/subform-copy.service';\r\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { Submission } from '../../models/submission.model';\r\nimport { Answer } from '../../models/answer.model';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { DataService } from '../../services/data.service';\r\nimport { FormService } from '../../services/form.service';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { ScoreCalculationService } from '../../services/score.service';\r\n\r\n@Component({\r\n selector: 'lib-sub-form',\r\n templateUrl: './sub-form.component.html',\r\n styleUrls: ['./sub-form.component.scss'],\r\n})\r\nexport class SubFormComponent implements OnInit {\r\n @Input() subForm: any = {};\r\n @Input() edit: boolean = false;\r\n @Output() subFormChange = new EventEmitter<any>();\r\n @Input() acceptedLanguage: string = '';\r\n @Input() pages: any[] = [];\r\n decodedDescription: string = '';\r\n grid: any;\r\n state!: string;\r\n childLogicCache: { [key: string]: { component: Promise<any>, injector: Injector } } = {};\r\n componentToLoad: any;\r\n injector!: Injector;\r\n copySubFormdata:any;\r\n subformDescription:string = '';\r\n subformTitle: string= '';\r\n editor: any;\r\n allowCopy: boolean = false;\r\n allowDelete: boolean = false;\r\n private dialogRef?: MatDialogRef<ConfirmDialogComponent>;\r\n subformData:any;\r\n previousSubmissions:any[]=[];\r\n maxPossibleGoodScore!: number;\r\n maxPossibleBadScore!: number;\r\n\r\n constructor(\r\n private subformCopyService:SubformCopyService,\r\n public dialog: MatDialog,\r\n private dataService: DataService,\r\n private formService:FormService,\r\n private whenClauseService:WhenClauseService,\r\n private validationService: ValidationService,\r\n private scoreCalcService: ScoreCalculationService\r\n ){\r\n this.dataService.subform$.subscribe((data)=>{\r\n this.subformData = data;\r\n this.tryLoadPreviousSubmissions();\r\n })\r\n }\r\n\r\n private tryLoadPreviousSubmissions(): void {\r\n if (\r\n this.subformData &&\r\n this.subForm &&\r\n !this.edit &&\r\n this.subForm.submissionCopyConfig?.allowCopyFromOtherSubmissions\r\n ) {\r\n this.loadPreviousSubmissions();\r\n }\r\n }\r\n\r\n\r\n loadPreviousSubmissions() {\r\n if (this.subformData && Object.keys(this.subformData).length > 0 && !this.edit) {\r\n this.formService.getSubformSubmissions(this.subformData)?.subscribe({\r\n next: (response: any) => {\r\n this.previousSubmissions = response;\r\n const targetSubForms: string[] =\r\n this.subformData?.duplicateSubmission?.targetSubForm ?? [];\r\n \r\n if (\r\n Array.isArray(targetSubForms) &&\r\n targetSubForms.includes(this.subForm.title)\r\n ) {\r\n \r\n // ✅ Filter submissions belonging to this subform\r\n const filteredSubmissions = this.previousSubmissions.filter(\r\n (submission: any) =>\r\n submission.title === this.subForm.title\r\n );\r\n \r\n const loadedSubmissions = this.createSubmissionsFromApi(\r\n filteredSubmissions,\r\n this.subForm\r\n );\r\n \r\n const existingSubmissions = this.subForm.submissions ?? [];\r\n \r\n this.subForm = {\r\n ...this.subForm,\r\n submissions: [\r\n ...existingSubmissions,\r\n ...loadedSubmissions\r\n ]\r\n };\r\n \r\n const hasAnyScore = this.subForm.submissions.some((sub: any) =>\r\n sub.scores?.some(\r\n (s: any) => s.score !== null && s.score !== undefined\r\n )\r\n );\r\n \r\n if (hasAnyScore) {\r\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(\r\n this.subForm.submissions,\r\n this.maxPossibleGoodScore,\r\n this.maxPossibleBadScore\r\n );\r\n } else {\r\n this.subForm.scores = null;\r\n }\r\n }\r\n },\r\n error: (error: any) => {}\r\n });\r\n }\r\n }\r\n \r\n\r\n ngOnInit() {\r\n this.allowCopy = this.subForm.property?.allowCopy;\r\n this.allowDelete = this.subForm.property?.allowDelete;\r\n this.copySubFormdata = this.subForm?.copySubformMeta;\r\n this.tryLoadPreviousSubmissions();\r\n if (this.subForm.property.subFormStructure == 'single') {\r\n this.bindAnswersToFormElements();\r\n this.loadComponent();\r\n this.whenClauseService.addGridsFromSubform(this.subForm);\r\n }\r\n\r\n const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(\r\n this.subForm\r\n );\r\n this.maxPossibleGoodScore = goodMax;\r\n this.maxPossibleBadScore = badMax;\r\n }\r\n\r\n editorCreated(editorInstance: any) {\r\n this.editor = editorInstance;\r\n }\r\n\r\n private async loadComponent(): Promise<void> {\r\n this.componentToLoad = await this.loadFormElementsComponent();\r\n this.injector = this.createInjector();\r\n }\r\n\r\n private async loadFormElementsComponent() {\r\n const { FormElementsComponent } = await import('../form-elements/form-elements.component');\r\n return FormElementsComponent;\r\n }\r\n\r\n createInjector(): Injector {\r\n return Injector.create({\r\n providers: [\r\n { provide: 'grid', useValue: this.grid?.element.childLogics },\r\n { provide: 'state', useValue: 'child' },\r\n ],\r\n });\r\n }\r\n\r\n decodeHtml(html: string): string {\r\n const textArea = document.createElement('textarea');\r\n textArea.innerHTML = html;\r\n return textArea.value;\r\n }\r\n\r\n bindAnswersToFormElements() {\r\n const bindAnswers = (formElements: any[], submissions: any[]) => {\r\n formElements?.forEach((grids: any) => {\r\n grids?.grid?.forEach(\r\n (formElement: { entityType: string; element: any }) => {\r\n if (formElement.entityType === 'QUESTION') {\r\n const submission = submissions.find((sub: { answers: any[] }) =>\r\n sub.answers.some(\r\n (ans: { questionId: any }) =>\r\n ans.questionId === formElement.element.id\r\n )\r\n );\r\n\r\n if (submission) {\r\n const answer = submission.answers.find(\r\n (ans: { questionId: any }) =>\r\n ans.questionId === formElement.element.id\r\n );\r\n if (answer) {\r\n formElement.element.answer = answer.answer;\r\n formElement.element.answerId = answer.answerId;\r\n formElement.element.validation = true;\r\n formElement.element.attachments = answer.attachments;\r\n formElement.element.amountInWords = answer.amountInWords;\r\n this.subForm.submissionId = submission.submissionId;\r\n formElement.element.answerCurrency = answer.answerCurrency;\r\n }\r\n }\r\n\r\n if (formElement.element.childLogics) {\r\n formElement.element.childLogics.forEach(\r\n (childLogic: { rows: any[] }) => {\r\n bindAnswers(childLogic.rows, submissions);\r\n }\r\n );\r\n }\r\n }\r\n }\r\n );\r\n });\r\n };\r\n\r\n if (this.subForm && this.subForm.rows && this.subForm.submissions) {\r\n bindAnswers(this.subForm.rows, this.subForm.submissions);\r\n }\r\n }\r\n\r\n updateSubFormWithSubmissions(event: any) {\r\n this.subForm = event;\r\n this.subFormChange.emit(this.subForm);\r\n }\r\n\r\n ngOnChanges(): void {\r\n if (this.subForm.description) {\r\n this.decodedDescription = this.decodeHtml(this.subForm.description);\r\n }\r\n }\r\n\r\n copySubform() {\r\n const { updatedPages } = this.subformCopyService.copySubform(this.subForm, this.pages);\r\n\r\n this.pages = updatedPages;\r\n // Emit updated pages or subFormChange if needed\r\n\r\n // Optionally pass meta to parent if needed\r\n // this.copyMeta.emit(copySubFormMeta);\r\n }\r\n\r\n\r\n updateSubformData(event: any, subformId: string, field: 'title' | 'description') {\r\n if(this.copySubFormdata.id == subformId){\r\n this.copySubFormdata[field] = event;\r\n }\r\n }\r\n\r\n deleteCopySubform(subformId: string) {\r\n const dialogConfig = new MatDialogConfig();\r\n dialogConfig.data = {\r\n messageHeader: \"Are you sure?\",\r\n message: \"Do you want to delete this subform?\"\r\n };\r\n dialogConfig.hasBackdrop = true;\r\n dialogConfig.disableClose = true;\r\n\r\n this.dialogRef = this.dialog.open(ConfirmDialogComponent, dialogConfig);\r\n\r\n this.dialogRef.afterClosed().subscribe((result: any) => {\r\n if (result) {\r\n // 1. Remove the copied subform from the pages\r\n for (const page of this.pages) {\r\n const rowIndex = page.rows.findIndex((row: any) =>\r\n row.grid.some((grid: any) =>\r\n grid.entityType === 'SUBFORM' &&\r\n grid.element?.id === subformId &&\r\n grid.element?.copied\r\n )\r\n );\r\n\r\n if (rowIndex !== -1) {\r\n page.rows.splice(rowIndex, 1);\r\n break;\r\n }\r\n }\r\n\r\n // 2. Remove this subformId from any subform's copiedForms array\r\n for (const page of this.pages) {\r\n for (const row of page.rows) {\r\n for (const grid of row.grid) {\r\n if (grid.entityType === 'SUBFORM' && grid.element?.copiedForms) {\r\n const index = grid.element.copiedForms.indexOf(subformId);\r\n if (index !== -1) {\r\n grid.element.copiedForms.splice(index, 1);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n deleteMainSubform(subformId: string): void {\r\n const dialogConfig = new MatDialogConfig();\r\n dialogConfig.data = {\r\n messageHeader: \"Are you sure?\",\r\n message: \"Do you want to delete this subform?\"\r\n };\r\n dialogConfig.hasBackdrop = true;\r\n dialogConfig.disableClose = true;\r\n\r\n this.dialogRef = this.dialog.open(ConfirmDialogComponent, dialogConfig);\r\n\r\n this.dialogRef.afterClosed().subscribe((result: any) => {\r\n if (result) {\r\n for (const page of this.pages) {\r\n for (const row of page.rows) {\r\n for (const gridItem of row.grid) {\r\n if (\r\n gridItem.entityType === 'SUBFORM' &&\r\n gridItem.element?.id === subformId\r\n ) {\r\n gridItem.element.deleted = true;\r\n return; // stop after the first match\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n createSubmissionsFromApi(apiSubmissions: any[], subform: any): Submission[] {\r\n return apiSubmissions.map(apiSubmission => {\r\n const answers: Answer[] = [];\r\n\r\n subform.rows.forEach((row: any) => {\r\n row.grid.forEach((gridItem: any) => {\r\n if (gridItem.entityType !== 'QUESTION') return;\r\n\r\n const element = gridItem.element;\r\n const questionKey = element.question;\r\n if (!apiSubmission.answers || !apiSubmission.answers[questionKey]) {\r\n return;\r\n }\r\n const apiAnswer = apiSubmission.answers[questionKey];\r\n // ✅ CASE 1: File upload (array with name & url)\r\n if (\r\n Array.isArray(apiAnswer) &&\r\n apiAnswer.length &&\r\n apiAnswer[0].name &&\r\n apiAnswer[0].url\r\n ) {\r\n answers.push({\r\n questionId: element.id,\r\n answer: null,\r\n attachments: apiAnswer.map((file: any) => ({\r\n fileId: file.id,\r\n fileName: file.name,\r\n fileUrl: file.url\r\n })),\r\n copiedAttachments: apiAnswer.map((file: any) => file.id)\r\n });\r\n return;\r\n }\r\n\r\n // ✅ CASE 2: Normal question object\r\n answers.push({\r\n questionId: element.id,\r\n answer: apiAnswer.answer ?? null,\r\n attachments: apiAnswer.file\r\n ? apiAnswer.file.map((file: any) => ({\r\n fileName: file.name,\r\n fileUrl: file.url\r\n }))\r\n : undefined,\r\n scores: apiAnswer.scores,\r\n maximumPossibleScore: apiAnswer.maximumPossibleScore\r\n });\r\n });\r\n });\r\n\r\n return {\r\n submissionId: uuidv4(),\r\n sourceSubmissionId: apiSubmission.submissionId,\r\n answers,\r\n configuration: {\r\n isDefault: false,\r\n allowDelete: true\r\n },\r\n scores: apiSubmission.score\r\n };\r\n });\r\n }\r\n\r\n get isInvalid(): boolean {\r\n return !!this.validationService.getErrorMessage(this.subForm.id);\r\n }\r\n\r\n get errorMessage(): string | null {\r\n return this.validationService.getErrorMessage(this.subForm.id);\r\n }\r\n\r\n clearInvalid(){\r\n this.validationService.clearInvalid(this.subForm.id);\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onAnyClick(event: MouseEvent): void {\r\n this.clearInvalid();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.dialogRef) {\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n\r\n}\r\n","<div\r\n class=\"outer-container mb-4 px-3\"\r\n [id]=\"'question-' + subForm.id\"\r\n [attr.name]=\"subForm.testElementName\"\r\n *ngIf=\"!subForm.deleted\"\r\n>\r\n <div class=\"body py-1 px-1\">\r\n <div class=\"tab-content pt-4 pb-3 px-3\">\r\n <ng-container *ngIf=\"!subForm.copied; else copySubformContainer\">\r\n <div class=\"subform-header\">\r\n <div class=\"data-container\">\r\n <p class=\"sectionTitle\">{{ subForm.title }}</p>\r\n <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\r\n </div>\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n class=\"finalScore\"\r\n *ngFor=\"let s of subForm?.scores\"\r\n [ngClass]=\"{\r\n goodScore: s.scoreType === 'GOOD_SCORE',\r\n badScore: s.scoreType === 'BAD_SCORE'\r\n }\"\r\n >\r\n <span class=\"scoreTitle\">Score</span>\r\n <p class=\"mb-0\">{{ s.score }}</p>\r\n </div>\r\n <div class=\"icon-container\">\r\n <img\r\n src=\"assets/icons/copy-icon.svg\"\r\n alt=\"copy-icon\"\r\n (click)=\"copySubform()\"\r\n *ngIf=\"allowCopy\"\r\n />\r\n <img\r\n src=\"assets/icons/delete-icon.svg\"\r\n class=\"delete-icon ms-3\"\r\n alt=\"delete icon\"\r\n (click)=\"deleteMainSubform(subForm.id)\"\r\n *ngIf=\"allowDelete\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #copySubformContainer>\r\n <div class=\"d-flex justify-content-end gap-4\">\r\n <div\r\n class=\"finalScore\"\r\n *ngFor=\"let s of subForm?.scores\"\r\n [ngClass]=\"{\r\n goodScore: s.scoreType === 'GOOD_SCORE',\r\n badScore: s.scoreType === 'BAD_SCORE'\r\n }\"\r\n >\r\n <span class=\"scoreTitle\">Score</span>\r\n <p class=\"mb-0\">{{ s.score }}</p>\r\n </div>\r\n <div class=\"icon-container\" (click)=\"deleteCopySubform(subForm.id)\">\r\n <img\r\n src=\"assets/icons/delete-icon.svg\"\r\n class=\"delete-icon\"\r\n alt=\"delete icon\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"copy-subform-container mb-3\">\r\n <p>Title</p>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [(ngModel)]=\"subformTitle\"\r\n (ngModelChange)=\"updateSubformData($event, subForm.id, 'title')\"\r\n />\r\n <p class=\"mt-3\">Description</p>\r\n <quill-editor\r\n [(ngModel)]=\"subformDescription\"\r\n (ngModelChange)=\"\r\n updateSubformData($event, subForm.id, 'description')\r\n \"\r\n (onEditorCreated)=\"editorCreated($event)\"\r\n class=\"editor\"\r\n placeholder=\"\"\r\n ></quill-editor>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngIf=\"subForm.property.subFormStructure == 'multiple'\">\r\n <lib-multiple-subform\r\n *ngIf=\"subForm.property.subFormType === 'table'\"\r\n [subForm]=\"subForm\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-multiple-subform>\r\n\r\n <lib-inline-multiple-subform\r\n *ngIf=\"subForm.property.subFormType === 'inline'\"\r\n [subForm]=\"subForm\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-inline-multiple-subform>\r\n <lib-card-subform\r\n *ngIf=\"subForm.property.subFormType === 'card'\"\r\n [subForm]=\"subForm\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n [edit]=\"edit\"\r\n ></lib-card-subform>\r\n </div>\r\n <div *ngIf=\"subForm.property.subFormStructure == 'single'\">\r\n <div *ngFor=\"let row of subForm.rows\">\r\n <div class=\"d-flex\">\r\n <div\r\n *ngFor=\"let grid of row.grid\"\r\n [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\r\n >\r\n <div *ngIf=\"grid.entityType === 'QUESTION' && grid.show\">\r\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\r\n <lib-check-box-fields\r\n *ngSwitchCase=\"'CHECK_BOX'\"\r\n [question]=\"grid.element\"\r\n ></lib-check-box-fields>\r\n <lib-date-time-fields\r\n *ngSwitchCase=\"'DATE_TIME'\"\r\n [question]=\"grid.element\"\r\n ></lib-date-time-fields>\r\n <lib-drop-down-fields\r\n *ngSwitchCase=\"'DROP_DOWN'\"\r\n [question]=\"grid.element\"\r\n ></lib-drop-down-fields>\r\n <lib-file-picker-fields\r\n *ngSwitchCase=\"'FILE_PICKER'\"\r\n [question]=\"grid.element\"\r\n ></lib-file-picker-fields>\r\n <lib-location-fields\r\n *ngSwitchCase=\"'LOCATION'\"\r\n [question]=\"grid.element\"\r\n ></lib-location-fields>\r\n <lib-mail-fields\r\n *ngSwitchCase=\"'EMAIL'\"\r\n [question]=\"grid.element\"\r\n ></lib-mail-fields>\r\n <lib-mobile-fields\r\n *ngSwitchCase=\"'MOBILE'\"\r\n [question]=\"grid.element\"\r\n ></lib-mobile-fields>\r\n <lib-number-fields\r\n *ngSwitchCase=\"'NUMBER'\"\r\n [question]=\"grid.element\"\r\n [rowId]=\"'0'\"\r\n ></lib-number-fields>\r\n <lib-password-fields\r\n *ngSwitchCase=\"'PASSWORD'\"\r\n [question]=\"grid.element\"\r\n ></lib-password-fields>\r\n <lib-radio-button-fields\r\n *ngSwitchCase=\"'RADIO_BUTTON'\"\r\n [question]=\"grid.element\"\r\n ></lib-radio-button-fields>\r\n <lib-rich-text-editor-fields\r\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\r\n [question]=\"grid.element\"\r\n ></lib-rich-text-editor-fields>\r\n <lib-selection-matrix-fields\r\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\r\n [question]=\"grid.element\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-selection-matrix-fields>\r\n <lib-signature-fields\r\n *ngSwitchCase=\"'SIGNATURE'\"\r\n [question]=\"grid.element\"\r\n ></lib-signature-fields>\r\n <lib-slider-fields\r\n *ngSwitchCase=\"'SLIDER'\"\r\n [question]=\"grid.element\"\r\n ></lib-slider-fields>\r\n <lib-terms-and-condition-fields\r\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\r\n [question]=\"grid.element\"\r\n ></lib-terms-and-condition-fields>\r\n <lib-text-area-fields\r\n *ngSwitchCase=\"'TEXT_AREA'\"\r\n [question]=\"grid.element\"\r\n ></lib-text-area-fields>\r\n <lib-text-fields\r\n *ngSwitchCase=\"'TEXT_BOX'\"\r\n [question]=\"grid.element\"\r\n ></lib-text-fields>\r\n <lib-toggle-switch-fields\r\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\r\n [question]=\"grid.element\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-toggle-switch-fields>\r\n <lib-url-fields\r\n *ngSwitchCase=\"'URL'\"\r\n [question]=\"grid.element\"\r\n ></lib-url-fields>\r\n <lib-currency-fields\r\n *ngSwitchCase=\"'CURRENCY'\"\r\n [question]=\"grid.element\"\r\n ></lib-currency-fields>\r\n <lib-aggregate-function\r\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\r\n [question]=\"grid.element\"\r\n [rowId]=\"'0'\"\r\n ></lib-aggregate-function>\r\n <lib-hidden-field\r\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\r\n [question]=\"grid.element\"\r\n ></lib-hidden-field>\r\n <lib-iframe-fields\r\n *ngSwitchCase=\"'IFRAME_WIDGET'\"\r\n [question]=\"grid.element\"\r\n ></lib-iframe-fields>\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"grid.element.childLogics\">\r\n <ng-container\r\n *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as outlet\">\r\n <ng-container *ngComponentOutlet=\"outlet.component | async; injector: outlet.injector\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container> -->\r\n <ng-container *ngIf=\"grid?.element?.childLogics\">\r\n <ng-container *ngIf=\"componentToLoad\">\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n componentToLoad;\r\n inputs: {\r\n grid: grid?.element?.childLogics,\r\n answer: grid?.element?.answer,\r\n state: 'child'\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"grid.entityType === 'SECTION' && grid.show\">\r\n <lib-section-fields\r\n [section]=\"grid.element\"\r\n ></lib-section-fields>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isInvalid\" class=\"error-message mt-4\">\r\n {{ errorMessage }}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Injector, Input, Output } from '@angular/core';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\n\r\n\r\ninterface Attachment {\r\n fileId: string;\r\n fileName: string;\r\n fileUrl: string;\r\n fileSize?: number;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-question-group',\r\n templateUrl: './question-group.component.html',\r\n styleUrls: ['./question-group.component.scss']\r\n})\r\nexport class QuestionGroupComponent {\r\n @Input() questionGroup: any = {};\r\n @Input() edit: boolean = false;\r\n @Input() acceptedLanguage: string ='';\r\n decodedDescription:string='';\r\n grid: any;\r\n childLogicCache: { [key: string]: { component: Promise<any>, injector: Injector } } = {};\r\n componentToLoad: any;\r\n injector!: Injector;\r\n\r\n constructor(private whenClauseService:WhenClauseService){}\r\n\r\n ngOnInit() {\r\n this.loadComponent();\r\n this.whenClauseService.addGridsFromSubform(this.questionGroup);\r\n }\r\n\r\n decodeHtml(html: string): string {\r\n const textArea = document.createElement('textarea');\r\n textArea.innerHTML = html;\r\n return textArea.value;\r\n }\r\n\r\n ngOnChanges(): void {\r\n if (this.questionGroup.description) {\r\n this.decodedDescription = this.decodeHtml(this.questionGroup.description);\r\n }\r\n }\r\n\r\n removeCircularReferences(obj: any): any {\r\n const seen = new WeakSet();\r\n\r\n function recurse(value: any): any {\r\n if (value === null || typeof value !== 'object') {\r\n return value;\r\n }\r\n\r\n if (seen.has(value)) {\r\n return '[Circular]';\r\n }\r\n\r\n seen.add(value);\r\n\r\n if (Array.isArray(value)) {\r\n return value.map(item => recurse(item));\r\n }\r\n\r\n const output: any = {};\r\n for (const key of Object.keys(value)) {\r\n output[key] = recurse(value[key]);\r\n }\r\n\r\n seen.delete(value);\r\n return output;\r\n }\r\n\r\n return recurse(obj);\r\n}\r\n\r\nprivate async loadComponent(): Promise<void> {\r\n this.componentToLoad = await this.loadFormElementsComponent();\r\n this.injector = this.createInjector();\r\n}\r\n\r\nprivate async loadFormElementsComponent() {\r\n const { FormElementsComponent } = await import('../form-elements/form-elements.component');\r\n return FormElementsComponent;\r\n}\r\n\r\ncreateInjector(): Injector {\r\n return Injector.create({\r\n providers: [\r\n { provide: 'grid', useValue: this.grid?.element.childLogics },\r\n { provide: 'state', useValue: 'child' },\r\n ],\r\n });\r\n}\r\n}\r\n","<div\r\n class=\"outer-container mb-4 px-3\"\r\n [attr.name]=\"questionGroup.testElementName\"\r\n [id]=\"'question-' + questionGroup.id\"\r\n>\r\n <div class=\"body container pt-3 pb-3 px-3\">\r\n <div class=\"tab-content pt-4 pb-3 px-3\">\r\n <p class=\"sectionTitle\">{{ questionGroup.title }}</p>\r\n <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\r\n\r\n <div class=\"mt-5\">\r\n <div *ngFor=\"let row of questionGroup.rows\">\r\n <div class=\"d-flex\">\r\n <div\r\n *ngFor=\"let grid of row.grid\"\r\n [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\r\n >\r\n <div *ngIf=\"grid.entityType === 'QUESTION' && grid.show\">\r\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\r\n <lib-check-box-fields\r\n *ngSwitchCase=\"'CHECK_BOX'\"\r\n [question]=\"grid.element\"\r\n ></lib-check-box-fields>\r\n <lib-date-time-fields\r\n *ngSwitchCase=\"'DATE_TIME'\"\r\n [question]=\"grid.element\"\r\n ></lib-date-time-fields>\r\n <lib-drop-down-fields\r\n *ngSwitchCase=\"'DROP_DOWN'\"\r\n [question]=\"grid.element\"\r\n ></lib-drop-down-fields>\r\n <lib-file-picker-fields\r\n *ngSwitchCase=\"'FILE_PICKER'\"\r\n [question]=\"grid.element\"\r\n ></lib-file-picker-fields>\r\n <lib-location-fields\r\n *ngSwitchCase=\"'LOCATION'\"\r\n [question]=\"grid.element\"\r\n ></lib-location-fields>\r\n <lib-mail-fields\r\n *ngSwitchCase=\"'EMAIL'\"\r\n [question]=\"grid.element\"\r\n ></lib-mail-fields>\r\n <lib-mobile-fields\r\n *ngSwitchCase=\"'MOBILE'\"\r\n [question]=\"grid.element\"\r\n ></lib-mobile-fields>\r\n <lib-number-fields\r\n *ngSwitchCase=\"'NUMBER'\"\r\n [question]=\"grid.element\"\r\n [rowId]=\"'0'\"\r\n ></lib-number-fields>\r\n <lib-password-fields\r\n *ngSwitchCase=\"'PASSWORD'\"\r\n [question]=\"grid.element\"\r\n ></lib-password-fields>\r\n <lib-radio-button-fields\r\n *ngSwitchCase=\"'RADIO_BUTTON'\"\r\n [question]=\"grid.element\"\r\n ></lib-radio-button-fields>\r\n <lib-rich-text-editor-fields\r\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\r\n [question]=\"grid.element\"\r\n ></lib-rich-text-editor-fields>\r\n <lib-selection-matrix-fields\r\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\r\n [question]=\"grid.element\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-selection-matrix-fields>\r\n <lib-signature-fields\r\n *ngSwitchCase=\"'SIGNATURE'\"\r\n [question]=\"grid.element\"\r\n ></lib-signature-fields>\r\n <lib-slider-fields\r\n *ngSwitchCase=\"'SLIDER'\"\r\n [question]=\"grid.element\"\r\n ></lib-slider-fields>\r\n <lib-terms-and-condition-fields\r\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\r\n [question]=\"grid.element\"\r\n ></lib-terms-and-condition-fields>\r\n <lib-text-area-fields\r\n *ngSwitchCase=\"'TEXT_AREA'\"\r\n [question]=\"grid.element\"\r\n ></lib-text-area-fields>\r\n <lib-text-fields\r\n *ngSwitchCase=\"'TEXT_BOX'\"\r\n [question]=\"grid.element\"\r\n ></lib-text-fields>\r\n <lib-toggle-switch-fields\r\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\r\n [question]=\"grid.element\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-toggle-switch-fields>\r\n <lib-url-fields\r\n *ngSwitchCase=\"'URL'\"\r\n [question]=\"grid.element\"\r\n ></lib-url-fields>\r\n <lib-currency-fields\r\n *ngSwitchCase=\"'CURRENCY'\"\r\n [question]=\"grid.element\"\r\n ></lib-currency-fields>\r\n <lib-aggregate-function\r\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\r\n [question]=\"grid.element\"\r\n [rowId]=\"'0'\"\r\n ></lib-aggregate-function>\r\n <lib-hidden-field\r\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\r\n [question]=\"grid.element\"\r\n ></lib-hidden-field>\r\n <lib-iframe-fields\r\n *ngSwitchCase=\"'IFRAME_WIDGET'\"\r\n [question]=\"grid.element\"\r\n ></lib-iframe-fields>\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"grid.element.childLogics\">\r\n <ng-container *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as cached\">\r\n <ng-container\r\n *ngComponentOutlet=\"cached.component | async; injector: cached.injector\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container> -->\r\n\r\n <ng-container *ngIf=\"grid?.element?.childLogics\">\r\n <ng-container *ngIf=\"componentToLoad\">\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n componentToLoad;\r\n inputs: {\r\n grid: grid?.element?.childLogics,\r\n answer: grid?.element?.answer,\r\n state: 'child'\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, Injector, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-multifields',\n templateUrl: './multifields.component.html',\n styleUrls: ['./multifields.component.scss']\n})\nexport class MultifieldsComponent {\n @Input() multiFields:any = {};\n @Input() acceptedLanguage: string ='';\n grid: any;\n \n async loadFormElementsComponent(grid: any) {\n this.grid = grid;\n const { FormElementsComponent } = await import('../form-elements/form-elements.component');\n return FormElementsComponent;\n }\n \n createInjector(): Injector {\n return Injector.create({\n providers: [\n { provide: 'grid', useValue: this.grid },\n { provide: 'state', useValue: 'child' },\n ],\n });\n }\n}\n","<div class=\"outer-container mb-4 px-3 multifields\" [attr.name]=\"multiFields.testElementName\"\r\n[id]=\"'question-'+ multiFields.id\">\r\n <div class=\"d-flex align-items-center\">\r\n <div [innerHTML]=\"multiFields.questionNumber\"></div><span class=\"space\"></span>\r\n <label>{{ multiFields.question }}</label>\r\n </div>\r\n\r\n <div class=\"multifields-row\">\r\n <ng-container *ngFor=\"let row of multiFields.rows\">\r\n <div class=\"d-flex\">\r\n <div *ngFor=\"let grid of row.grid\"\r\n [ngStyle]=\"{'width.%': (grid.element.count) * (100 / 12)}\">\r\n <div *ngIf=\"grid.entityType === 'QUESTION'\">\r\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\r\n <lib-check-box-fields *ngSwitchCase=\"'CHECK_BOX'\"\r\n [question]=\"grid.element\"></lib-check-box-fields>\r\n <lib-date-time-fields *ngSwitchCase=\"'DATE_TIME'\"\r\n [question]=\"grid.element\"></lib-date-time-fields>\r\n <lib-drop-down-fields *ngSwitchCase=\"'DROP_DOWN'\"\r\n [question]=\"grid.element\"></lib-drop-down-fields>\r\n <lib-file-picker-fields\r\n *ngSwitchCase=\"'FILE_PICKER'\"\r\n [question]=\"grid.element\"></lib-file-picker-fields>\r\n <lib-location-fields *ngSwitchCase=\"'LOCATION'\"\r\n [question]=\"grid.element\"></lib-location-fields>\r\n <lib-mail-fields *ngSwitchCase=\"'EMAIL'\"\r\n [question]=\"grid.element\"></lib-mail-fields>\r\n <lib-mobile-fields *ngSwitchCase=\"'MOBILE'\"\r\n [question]=\"grid.element\"></lib-mobile-fields>\r\n <lib-number-fields *ngSwitchCase=\"'NUMBER'\"\r\n [question]=\"grid.element\"></lib-number-fields>\r\n <lib-password-fields *ngSwitchCase=\"'PASSWORD'\"\r\n [question]=\"grid.element\"></lib-password-fields>\r\n <lib-radio-button-fields\r\n *ngSwitchCase=\"'RADIO_BUTTON'\"\r\n [question]=\"grid.element\"></lib-radio-button-fields>\r\n <lib-rich-text-editor-fields\r\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\r\n [question]=\"grid.element\"></lib-rich-text-editor-fields>\r\n <lib-selection-matrix-fields\r\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\r\n [question]=\"grid.element\"\r\n [acceptedLanguage]=\"acceptedLanguage\"></lib-selection-matrix-fields>\r\n <lib-signature-fields *ngSwitchCase=\"'SIGNATURE'\"\r\n [question]=\"grid.element\"></lib-signature-fields>\r\n <lib-slider-fields *ngSwitchCase=\"'SLIDER'\"\r\n [question]=\"grid.element\"></lib-slider-fields>\r\n <lib-terms-and-condition-fields\r\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\r\n [question]=\"grid.element\"></lib-terms-and-condition-fields>\r\n <lib-text-area-fields *ngSwitchCase=\"'TEXT_AREA'\"\r\n [question]=\"grid.element\"></lib-text-area-fields>\r\n <lib-text-fields *ngSwitchCase=\"'TEXT_BOX'\"\r\n [question]=\"grid.element\"></lib-text-fields>\r\n <lib-toggle-switch-fields\r\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\r\n [question]=\"grid.element\"\r\n [acceptedLanguage]=\"acceptedLanguage\"></lib-toggle-switch-fields>\r\n <lib-url-fields *ngSwitchCase=\"'URL'\"\r\n [question]=\"grid.element\"></lib-url-fields>\r\n <lib-currency-fields *ngSwitchCase=\"'CURRENCY'\"\r\n [question]=\"grid.element\"></lib-currency-fields>\r\n <lib-hidden-field *ngSwitchCase=\"'HIDDEN_FIELD'\" \r\n [question]=\"grid.element\"></lib-hidden-field>\r\n </div>\r\n\r\n <ng-container *ngIf=\"grid.element.childLogics\">\r\n <ng-container\r\n *ngComponentOutlet=\"loadFormElementsComponent(grid.element.childLogics) | async\"></ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\n\r\n@Component({\r\n selector: 'lib-recursive-logic',\r\n templateUrl: './recursive-logic.component.html',\r\n styleUrls: ['./recursive-logic.component.scss']\r\n})\r\nexport class RecursiveLogicComponent {\r\n @Input() grid: any = {};\r\n @Input() currentPageIndex: number = 0;\r\n @Input() edit : boolean = false;\r\n @Input() acceptedLanguage: string ='';\r\n @Output() subFormChange = new EventEmitter<any>();\r\n @Input() state!: string;\r\n @Input() answer!: string;\r\n @Input() pages: any[] = [];\r\n\r\n constructor(private whenClauseService:WhenClauseService){}\r\n\r\n ngOnInit(){\r\n this.whenClauseService.addGrid(this.grid);\r\n }\r\n\r\n updateSubFormWithSubmissions(event:any){\r\n this.subFormChange.emit(event);\r\n }\r\n\r\n}\r\n","<div *ngIf=\"grid.show\">\r\n <div *ngIf=\"grid.entityType === 'QUESTION'\">\r\n <lib-question\r\n [question]=\"grid?.element\"\r\n [edit]=\"edit\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-question>\r\n </div>\r\n <div *ngIf=\"grid.entityType === 'SECTION'\">\r\n <lib-section-fields [section]=\"grid.element\"></lib-section-fields>\r\n </div>\r\n <ng-container *ngIf=\"grid.entityType === 'SUBFORM'\">\r\n <lib-sub-form\r\n [subForm]=\"grid.element\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n [edit]=\"edit\"\r\n [pages]=\"pages\"\r\n ></lib-sub-form>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"grid.entityType === 'QUESTION_GROUP'\">\r\n <lib-question-group\r\n [questionGroup]=\"grid.element\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-question-group>\r\n </ng-container>\r\n \r\n \r\n <ng-container *ngIf=\"grid.entityType === 'MULTIFIELD'\">\r\n <lib-multifields [multiFields]=\"grid.element\" [acceptedLanguage]=\"acceptedLanguage\"></lib-multifields>\r\n </ng-container>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n Optional,\r\n Output\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-form-elements',\r\n templateUrl: './form-elements.component.html',\r\n styleUrls: ['./form-elements.component.scss'],\r\n})\r\nexport class FormElementsComponent {\r\n @Input() currentPageIndex: number = 0;\r\n @Input() edit : boolean = false;\r\n @Input() acceptedLanguage: string ='';\r\n @Output() subFormChange = new EventEmitter<any>();\r\n @Input() answer!: string;\r\n @Input() grid: any;\r\n @Input() state!: string;\r\n @Input() pages: any[] = [];\r\n\r\n constructor(\r\n @Inject('grid') @Optional() private injectedGrid: any,\r\n @Inject('state') @Optional() private injectedState: string,\r\n @Inject('answer') @Optional() private injectedAnswer: string\r\n ) {}\r\n\r\n\r\n ngOnInit() {\r\n this.grid = this.injectedGrid ?? this.grid;\r\n this.state = this.injectedState ?? this.state;\r\n this.answer = this.injectedAnswer ?? this.answer;\r\n }\r\n\r\n updateSubFormWithSubmissions(event:any){\r\n this.subFormChange.emit(event);\r\n }\r\n}\r\n","<ng-container *ngIf=\"state === 'child'; else parentBlock\">\r\n <div *ngFor=\"let childLogic of grid\">\r\n <div *ngIf=\"childLogic.showLogic && answer\">\r\n <div *ngFor=\"let row of childLogic.rows\">\r\n <div *ngFor=\"let grid of row.grid\">\r\n <lib-recursive-logic\r\n [grid]=\"grid\"\r\n [edit]=\"edit\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n [pages]=\"pages\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n >\r\n </lib-recursive-logic>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n<ng-template #parentBlock>\r\n <lib-recursive-logic\r\n [grid]=\"grid\"\r\n [edit]=\"edit\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n [pages]=\"pages\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n >\r\n </lib-recursive-logic>\r\n</ng-template>\r\n","import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormValidationService } from '../../services/form-validation.service';\r\n\r\n@Component({\r\n selector: 'lib-navigation-tabs',\r\n templateUrl: './navigation-tabs.component.html',\r\n styleUrls: ['./navigation-tabs.component.scss'],\r\n})\r\nexport class NavigationTabsComponent {\r\n @Input() pages: any[] = [];\r\n @Input() currentPageIndex: number = 0;\r\n @Input() skipValidation: boolean = false;\r\n @Output() pageChanged = new EventEmitter<number>();\r\n @Output() submitEmit: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() saveAsDraftEmit: EventEmitter<any> = new EventEmitter<any>();\r\n @Input() edit : boolean = false;\r\n @Input() acceptedLanguage: string ='';\r\n @Input() eligibleForSubmission:{ status: boolean; message: string } = { status: true, message: '' };\r\n @Output() subFormChange = new EventEmitter<any>();\r\n @Input() pageDetails: any[] = [];\r\n @Input() markAllQuestionsAsRequired : boolean = false;\r\n @Input() skipMargin: boolean = false;\r\n @Output() rowSetIndex = new EventEmitter<number>();\r\n @Output() cancel: EventEmitter<string> = new EventEmitter<string>();\r\n @Input() primaryColor: string = '';\r\n @Input() secondaryColor: string = '';\r\n @Input() isActionTriggered: boolean = false;\r\n @Input() submissionInProgress: boolean = false;\r\n @Input() submissionInDraft: boolean = false;\r\n @Input() showCancelButton: boolean = false;\r\n @Input() submissionProgress = 0;\r\n @Input() currentStep = 'Submitting form';\r\n @Input() animatedDots = '';\r\n loadedPages: { [key: number]: boolean } = {};\r\n showTooltip: boolean = false;\r\n showNavArrows: boolean = false;\r\n hideTabs: boolean = false;\r\n\r\n constructor(\r\n private formValidationService: FormValidationService,\r\n private cdr: ChangeDetectorRef\r\n ) {\r\n // Load the first page initially\r\n this.loadedPages[this.currentPageIndex] = true;\r\n }\r\n\r\n\r\n ngOnInit() {\r\n this.checkPageDetails()\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => this.checkOverflow());\r\n this.cdr.detectChanges();\r\n }\r\n\r\n checkPageDetails(){\r\n if(this.pageDetails && this.pageDetails?.length==1 && this.pageDetails[0]?.name==''){\r\n this.hideTabs=true;\r\n }\r\n }\r\n\r\n updateSubFormWithSubmissions(event:any){\r\n this.subFormChange.emit(event);\r\n }\r\n\r\n triggerFunction(event: number) {\r\n this.setCurrentPage(event);\r\n }\r\n\r\n setCurrentPage(index: number) {\r\n if(this.markAllQuestionsAsRequired){\r\n const currentPageData = this.pages[this.currentPageIndex];\r\n let validationResponse=true;\r\n if(!this.skipValidation) {\r\n validationResponse = this.formValidationService.validateRequiredQuestions(currentPageData).isValid;\r\n }\r\n if (validationResponse) {\r\n this.pageChanged.emit(index);\r\n this.currentPageIndex = index;\r\n // Mark this page as loaded to avoid reloading\r\n if (!this.loadedPages[index]) {\r\n this.loadedPages[index] = true;\r\n }\r\n }\r\n }else{\r\n this.pageChanged.emit(index);\r\n this.currentPageIndex = index;\r\n // Mark this page as loaded to avoid reloading\r\n if (!this.loadedPages[index]) {\r\n this.loadedPages[index] = true;\r\n }\r\n }\r\n }\r\n\r\n submitForm() {\r\n this.submitEmit.emit();\r\n }\r\n\r\n saveAsDraft() {\r\n this.saveAsDraftEmit.emit();\r\n }\r\n\r\n trackByIndex(index: number, item: any): number {\r\n return index;\r\n }\r\n\r\n loadMoreData(): void {\r\n this.rowSetIndex.emit(this.currentPageIndex);\r\n }\r\n\r\n toggleTooltip() {\r\n this.showTooltip = !this.eligibleForSubmission.status;\r\n}\r\n\r\nscrollTabs(direction: number) {\r\n const tabContainer = document.querySelector('.navTabs') as HTMLElement;\r\n if (tabContainer) {\r\n tabContainer.scrollBy({ left: direction * 100, behavior: 'smooth' });\r\n setTimeout(() => this.checkOverflow(), 300);\r\n }\r\n}\r\n\r\ncheckOverflow() {\r\n const tabContainer = document.querySelector('.navTabs') as HTMLElement;\r\n if (tabContainer) {\r\n this.showNavArrows = (tabContainer.scrollWidth > tabContainer.clientWidth);\r\n }\r\n}\r\n\r\ncancelled(){\r\n this.cancel.emit();\r\n}\r\n}\r\n","<div class=\"tab-inner-container\" [ngClass]=\"{ 'skip-margin': skipMargin}\">\r\n <div class=\"d-flex gap-2\">\r\n <div class=\"tab-navigation\" *ngIf=\"!hideTabs\">\r\n <ul class=\"nav nav-tabs navTabs\" id=\"myTab\" role=\"tablist\">\r\n <li\r\n class=\"nav-item\"\r\n role=\"presentation\"\r\n *ngFor=\"let page of pageDetails; let i = index; trackBy: trackByIndex\"\r\n [ngClass]=\"{'nav-item-ara': acceptedLanguage === 'ara', 'nav-item-default': acceptedLanguage !== 'ara'}\"\r\n >\r\n <button\r\n class=\"nav-link\"\r\n [title]=\"page.name\"\r\n data-bs-toggle=\"tooltip\"\r\n data-bs-placement=\"top\"\r\n data-bs-custom-class=\"custom-tooltip\"\r\n [class.active]=\"i === currentPageIndex\"\r\n id=\"tab-{{ i }}\"\r\n type=\"button\"\r\n role=\"tab\"\r\n [attr.aria-controls]=\"'content-' + i\"\r\n [attr.aria-selected]=\"i === currentPageIndex\"\r\n (click)=\"setCurrentPage(i)\"\r\n >\r\n {{ page.name }}\r\n </button>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"d-flex align-items-center\" *ngIf=\"showNavArrows\">\r\n <button class=\"nav-arrow\">\r\n <img src=\"assets/icons/left_arrow.svg\" alt=\"left arrow\"\r\n (click)=\"scrollTabs(-1)\">\r\n <img src=\"assets/icons/right_arrow.svg\" alt=\"right arrow\"\r\n (click)=\"scrollTabs(1)\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"tab-content pt-5 pb-3 px-1\" [attr.name]=\"pages[currentPageIndex].testElementName\">\r\n <ng-container *ngIf=\"pages[currentPageIndex]\">\r\n <div\r\n class=\"tab-pane fade show active\"\r\n id=\"content-{{ currentPageIndex }}\"\r\n role=\"tabpanel\"\r\n [attr.aria-labelledby]=\"'tab-' + currentPageIndex\"\r\n >\r\n <div *ngIf=\"loadedPages[currentPageIndex]\">\r\n <div class=\"data-container\"\r\n infiniteScroll\r\n [infiniteScrollDistance]=\"2\"\r\n [infiniteScrollThrottle]=\"200\"\r\n (scrolled)=\"loadMoreData()\">\r\n <div *ngFor=\"let row of pages[currentPageIndex].rows\">\r\n <div class=\"margin d-flex\">\r\n <div *ngFor=\"let grid of row.grid\"\r\n [ngStyle]=\"{'width.%': (grid.element.count) * (100 / 12)}\">\r\n <lib-form-elements\r\n [grid]=\"grid\"\r\n [edit]=\"edit\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n [pages]=\"pages\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n ></lib-form-elements>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"footerButton d-flex justify-content-between align-items-center me-4 ms-4 position-relative\">\r\n <!-- Hover detection container -->\r\n <div [ngStyle]=\"{ display: currentPageIndex === pageDetails.length - 1 ? 'block' : 'none' }\" id=\"captcha-container\"></div>\r\n <div\r\n class=\"button-container position-relative\"\r\n (mouseenter)=\"showTooltip = true\"\r\n (mouseleave)=\"showTooltip = false\"\r\n >\r\n\r\n <div *ngIf=\"currentPageIndex == pageDetails.length - 1\">\r\n <button *ngIf=\"showCancelButton\" class=\"btn submitButton rounded-pill bg-secondary text-white\"\r\n (click)=\"cancelled()\" type=\"button\"\r\n >Cancel</button>\r\n <button\r\n *ngIf=\"!isActionTriggered && skipValidation\"\r\n class=\"btn rounded-pill submitButton text-white\"\r\n [ngStyle]=\"{ 'background-color': secondaryColor ? secondaryColor : '#084fff' }\"\r\n type=\"button\"\r\n (click)=\"saveAsDraft()\"\r\n [disabled]=\"!eligibleForSubmission.status || submissionInDraft\"\r\n >\r\n <ng-container *ngIf=\"submissionInDraft; else showSubmitText\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\r\n Submitting...\r\n </ng-container>\r\n <ng-template #showSubmitText>\r\n Save Draft\r\n </ng-template>\r\n </button>\r\n \r\n\r\n <button\r\n *ngIf=\"!isActionTriggered\"\r\n class=\"btn rounded-pill submitButton text-white\"\r\n [ngStyle]=\"{ 'background-color': primaryColor ? primaryColor: '#084fff' }\"\r\n type=\"button\"\r\n (click)=\"submitForm()\"\r\n [disabled]=\"!eligibleForSubmission.status || submissionInProgress\"\r\n >\r\n <ng-container *ngIf=\"submissionInProgress; else showSubmitText\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\r\n Submitting...\r\n </ng-container>\r\n <ng-template #showSubmitText>\r\n Submit\r\n </ng-template>\r\n </button>\r\n <div *ngIf=\"showTooltip && !eligibleForSubmission.status\" class=\"custom-tooltip\">\r\n {{eligibleForSubmission.message}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"submissionInProgress\" class=\"text-loader\">\r\n {{ currentStep }}{{ animatedDots }}\r\n <span class=\"percentage\">{{ submissionProgress }}%</span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n","import { Component, Inject, Input } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\ninterface DialogData {\r\n primaryColor?: string;\r\n}\r\n@Component({\r\n selector: 'lib-form-submission-conformation',\r\n templateUrl: './saveDraftModalComponent.html',\r\n styleUrls: ['./saveDraftModalComponent.scss']\r\n})\r\n\r\nexport class SaveDraftModalComponent {\r\n primaryColor: string;\r\n\r\n get primaryColorRgb(): string {\r\n let hex = this.primaryColor.trim().replace('#', '');\r\n\r\n const defaultHex = \"0d6efd\";\r\n\r\n if (!hex) hex = defaultHex;\r\n\r\n let s = hex.trim().replace(/^#/, \"\").toLowerCase();\r\n\r\n // Ensure only valid hex chars\r\n if (!/^[0-9a-f]+$/.test(s)) {\r\n s = defaultHex;\r\n }\r\n\r\n // Expand shorthand (3/4 digits → 6/8 digits)\r\n if (s.length === 3 || s.length === 4) {\r\n s = s.split(\"\").map(ch => ch + ch).join(\"\");\r\n }\r\n\r\n // If still invalid length, fallback\r\n if (s.length !== 6 && s.length !== 8) {\r\n s = defaultHex;\r\n }\r\n\r\n const r = parseInt(s.slice(0, 2), 16);\r\n const g = parseInt(s.slice(2, 4), 16);\r\n const b = parseInt(s.slice(4, 6), 16);\r\n\r\n return `${r}, ${g}, ${b}`;\r\n}\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<SaveDraftModalComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: DialogData) {\r\n this.primaryColor = data.primaryColor || '#0d6efd';\r\n }\r\n\r\n saveAsDraft() {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n continueEditing() {\r\n this.dialogRef.close(false);\r\n }\r\n}\r\n","<div class=\"save-draft-modal\"\r\n [style.--primary-color]=\"primaryColor\"\r\n [style.--primary-color-rgb]=\"primaryColorRgb\">\r\n <div class=\"modal-card\">\r\n <div class=\"status-icon\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"bi bi-file-earmark-text-fill\"></i>\r\n </div>\r\n </div>\r\n\r\n <h3>Form Submission Incomplete</h3>\r\n <p class=\"subheader\">We noticed some information needs attention</p>\r\n\r\n <div class=\"message-card\">\r\n <div class=\"message-content\">\r\n <p>Your form contains:</p>\r\n <ul>\r\n <li><i class=\"bi bi-x-circle\"></i> Missing required fields</li>\r\n <li><i class=\"bi bi-exclamation-triangle\"></i> Incorrectly formatted answers</li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"action-buttons\">\r\n <button class=\"btn btn-continue\" (click)=\"continueEditing()\">\r\n <i class=\"bi bi-pencil-square\"></i> Continue Editing\r\n </button>\r\n <button class=\"btn btn-save\" (click)=\"saveAsDraft()\">\r\n <i class=\"bi bi-cloud-arrow-up\"></i> Save as Draft\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { map, Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\n\r\ndeclare global {\r\n interface Window {\r\n onRecaptchaLoadCallback: () => void;\r\n }\r\n\r\n var grecaptcha: {\r\n ready: (callback: () => void) => void;\r\n render: (\r\n container: string | HTMLElement,\r\n parameters: {\r\n sitekey: string;\r\n callback?: (token: string) => void;\r\n 'expired-callback'?: () => void;\r\n 'error-callback'?: () => void;\r\n size?: 'normal' | 'compact' | 'invisible';\r\n theme?: 'light' | 'dark';\r\n }\r\n ) => number;\r\n execute: (widgetId?: number) => void;\r\n getResponse: (widgetId?: number) => string;\r\n reset: (widgetId?: number) => void;\r\n };\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RecaptchaService {\r\n private siteKey = '';\r\n private apiUrl: string = '';\r\n private widgetId: number | null = null;\r\n private initialized = false;\r\n private resolved = false;\r\n\r\n constructor(private toastr: ToastrService,private http: HttpClient, private dataService: DataService) {\r\n this.dataService.apiUrl$.subscribe((data) => {\r\n this.apiUrl = data;\r\n });\r\n\r\n }\r\n\r\n ngOnInit() {\r\nthis.fetchSiteKeyFromApi().subscribe({\r\n next: (key) => (this.siteKey = key),\r\n error: () => this.toastr.error('Failed to load CAPTCHA config')\r\n });\r\n }\r\n\r\n\r\n\r\n fetchSiteKeyFromApi(): Observable<string> {\r\n\r\n return this.http.get<{ message: string }>(`${this.apiUrl}/api/application-settings/recaptcha/siteKey`).pipe(\r\n map((response: { message: string }) => {\r\n const siteKey = response.message;\r\n return siteKey;\r\n })\r\n );\r\n }\r\n\r\n initialize(): Promise<void> {\r\n if(!this.siteKey || this.siteKey === '') {\r\n this.fetchSiteKeyFromApi().subscribe({\r\n next: (key) => (this.siteKey = key),\r\n error: () => this.toastr.error('Failed to load CAPTCHA config')\r\n });\r\n }\r\n\r\n\r\n return new Promise((resolve, reject) => {\r\n if (this.widgetId !== null) {\r\n resolve();\r\n return;\r\n }\r\n if (this.initialized && typeof grecaptcha !== 'undefined' && typeof grecaptcha.render === 'function') {\r\n resolve();\r\n return;\r\n }\r\n\r\n const existingScript = document.querySelector('script[src*=\"recaptcha/api.js\"]');\r\n if (existingScript) {\r\n existingScript.addEventListener('load', () => resolve());\r\n resolve();\r\n return;\r\n }\r\n\r\n const script = document.createElement('script');\r\n script.src = 'https://www.google.com/recaptcha/api.js?onload=onRecaptchaLoadCallback&render=explicit';\r\n script.async = true;\r\n script.defer = true;\r\n\r\n window.onRecaptchaLoadCallback = () => {\r\n this.initialized = true;\r\n resolve();\r\n };\r\n\r\n script.onerror = () => {\r\n reject('Failed to load reCAPTCHA script');\r\n };\r\n\r\n document.head.appendChild(script);\r\n });\r\n }\r\n\r\nrender(containerId: string, callback: (token: string) => void): void {\r\n if (typeof grecaptcha === 'undefined') {\r\n throw new Error('reCAPTCHA is not loaded');\r\n }\r\n\r\n // ✅ Prevent rendering more than once\r\n if (this.widgetId !== null) {\r\n console.warn('reCAPTCHA already rendered, skipping render.');\r\n return;\r\n }\r\n\r\n this.widgetId = grecaptcha.render(containerId, {\r\n sitekey: this.siteKey,\r\n callback: (token: string) => {\r\n this.resolved = true;\r\n callback(token);\r\n },\r\n 'expired-callback': () => {\r\n this.resolved = false;\r\n this.toastr.warning('reCAPTCHA expired, please verify again');\r\n },\r\n 'error-callback': () => {\r\n this.resolved = false;\r\n this.toastr.error('reCAPTCHA error occurred');\r\n },\r\n size: 'normal',\r\n theme: 'light',\r\n });\r\n}\r\n\r\n\r\n reset(): void {\r\n if (typeof grecaptcha !== 'undefined' && this.widgetId !== null) {\r\n grecaptcha.reset(this.widgetId);\r\n this.resolved = false;\r\n }\r\n }\r\n\r\n getResponse(): string {\r\n if (typeof grecaptcha === 'undefined' || this.widgetId === null) {\r\n return '';\r\n }\r\n return grecaptcha.getResponse(this.widgetId);\r\n }\r\n\r\n isRendered(): boolean {\r\n return this.widgetId !== null;\r\n }\r\n\r\n isResolved(): boolean {\r\n return this.resolved && !!this.getResponse();\r\n }\r\n\r\n removeRecaptchaScript(): void {\r\n const script = document.querySelector('script[src*=\"recaptcha/api.js\"]');\r\n if (script) {\r\n script.remove();\r\n }\r\n\r\n const badge = document.querySelector('.grecaptcha-badge');\r\n if (badge) {\r\n badge.remove();\r\n }\r\n\r\n this.widgetId = null;\r\n this.initialized = false;\r\n this.resolved = false;\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss']\r\n})\r\nexport class HeaderComponent {\r\n @Input() name: string = '';\r\n @Input() skipMargin: boolean = false;\r\n\r\n}\r\n","<div class=\"head container\">\r\n <div class=\"registration-header\">\r\n <p>{{ name }}</p>\r\n </div>\r\n <div class=\"line\" *ngIf=\"!skipMargin\"></div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-next-prev-navigation',\r\n templateUrl: './next-prev-navigation.component.html',\r\n styleUrls: ['./next-prev-navigation.component.scss']\r\n})\r\nexport class NextPrevNavigationComponent {\r\n\r\n @Input() skipValidation: boolean = false;\r\n @Input() currentPageIndex: number = 0;\r\n @Input() pages: any[] = [];\r\n @Input() previousPage: any = {};\r\n @Input() nextPage: any = {};\r\n @Input() currentPage: any = {};\r\n @Input() pageDetails: any[] = [];\r\n @Input() skipMargin: boolean = false;\r\n @Output() navigateNext = new EventEmitter<void>();\r\n @Output() navigatePrevious = new EventEmitter<void>();\r\n @Output() submitEmit: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() saveAsDraftEmit: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() cancel: EventEmitter<string> = new EventEmitter<string>();\r\n @Input() edit: boolean = false;\r\n @Input() acceptedLanguage: string ='';\r\n @Output() subFormChange = new EventEmitter<any>();\r\n @Output() rowSetIndex = new EventEmitter<number>();\r\n @Input() primaryColor: string = '';\r\n @Input() secondaryColor: string = '';\r\n @Input() isActionTriggered: boolean = false;\r\n @Input() submissionInProgress: boolean = false;\r\n @Input() submissionInDraft: boolean = false;\r\n @Input() eligibleForSubmission:{ status: boolean; message: string } = { status: true, message: '' };\r\n @Input() showCancelButton: boolean = false;\r\n @Input() submissionProgress = 0;\r\n @Input() currentStep = 'Submitting form';\r\n @Input() animatedDots = '';\r\n showTooltip: boolean = false;\r\n ngOnInit(){\r\n }\r\n\r\n\r\n updateSubFormWithSubmissions(event: any) {\r\n this.subFormChange.emit(event);\r\n }\r\n\r\n onNavigateNext() {\r\n this.navigateNext.emit();\r\n }\r\n\r\n onNavigatePrevious() {\r\n this.navigatePrevious.emit();\r\n }\r\n\r\n submitForm() {\r\n this.submitEmit.emit();\r\n }\r\n\r\n saveAsDraft() {\r\n this.saveAsDraftEmit.emit();\r\n }\r\n\r\n\r\n loadMoreData(): void {\r\n this.rowSetIndex.emit(this.currentPageIndex);\r\n }\r\n\r\n toggleTooltip() {\r\n this.showTooltip = !this.eligibleForSubmission.status;\r\n}\r\n\r\ncancelled(){\r\n this.cancel.emit();\r\n}\r\n}\r\n","<!-- <div class=\"pageTitleDiv\" *ngIf=\"!skipMargin\">\r\n <p class=\"pageTitle\">{{pageDetails[currentPageIndex]?.name}}</p>\r\n</div> -->\r\n<div class=\"button-inner-container rounded\" [ngClass]=\"{ 'skip-margin': skipMargin}\">\r\n <div class=\"tab-content pt-5 pb-3 row\" [attr.name]=\"pages[currentPageIndex].testElementName\">\r\n <div class=\"data-container\"\r\n infiniteScroll\r\n [infiniteScrollDistance]=\"2\"\r\n [infiniteScrollThrottle]=\"200\"\r\n (scrolled)=\"loadMoreData()\">\r\n\r\n <div *ngFor=\"let row of pages[currentPageIndex]?.rows\" class=\"marginSize d-flex\">\r\n <div *ngFor=\"let grid of row.grid\"\r\n [ngStyle]=\"{'width.%': (grid.element.count) * (100 / (12))}\">\r\n <lib-form-elements\r\n [grid]=\"grid\"\r\n [currentPageIndex]=\"currentPageIndex\"\r\n [edit]=\"edit\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n [pages]=\"pages\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n state=\"parent\"\r\n ></lib-form-elements>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngStyle]=\"{ display: currentPageIndex === pageDetails.length - 1 ? 'block' : 'none' }\" id=\"captcha-container\"></div>\r\n\r\n <div class=\"footerButton\">\r\n <div\r\n class=\"prevButtonDiv\"\r\n [ngClass]=\"{ 'prevDirection-rtl': acceptedLanguage === 'ara' }\">\r\n <button\r\n class=\"me-md-2 rounded-pill navButton\"\r\n [ngStyle]=\"{ 'background-color': primaryColor ? primaryColor: '#084fff' }\"\r\n type=\"button\"\r\n (click)=\"onNavigatePrevious()\"\r\n *ngIf=\"0 < currentPageIndex\"\r\n >\r\n <ng-container *ngIf=\"acceptedLanguage === 'ara'; else defaultSvg\">\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M19.4897 12.0117L4.49975 12.0117\"\r\n stroke=\"white\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M13.486 6.02344L19.502 12.0004L13.486 17.9774\"\r\n stroke=\"white\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </ng-container>\r\n <ng-template #defaultSvg>\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M4.51025 11.9883L19.5003 11.9883\"\r\n stroke=\"white\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M10.514 17.9766L4.49805 11.9996L10.514 6.02256\"\r\n stroke=\"white\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </ng-template>\r\n Previous | {{ previousPage.name }}\r\n </button>\r\n </div>\r\n <div\r\n class=\"nextButtonDiv\"\r\n [ngClass]=\"{ 'nextDirection-rtl': acceptedLanguage === 'ara' }\"\r\n >\r\n <button\r\n class=\"md-2 rounded-pill navButton\"\r\n [ngStyle]=\"{ 'background-color': primaryColor ? primaryColor: '#084fff' }\"\r\n type=\"button\"\r\n (click)=\"onNavigateNext()\"\r\n *ngIf=\"currentPageIndex < pageDetails.length - 1\"\r\n >\r\n Next | {{ nextPage.name }}\r\n <ng-container *ngIf=\"acceptedLanguage === 'ara'; else defaultSvg\">\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M4.51025 11.9883L19.5003 11.9883\"\r\n stroke=\"white\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M10.514 17.9766L4.49805 11.9996L10.514 6.02256\"\r\n stroke=\"white\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </ng-container>\r\n <ng-template #defaultSvg>\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M19.4897 12.0117L4.49975 12.0117\"\r\n stroke=\"white\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M13.486 6.02344L19.502 12.0004L13.486 17.9774\"\r\n stroke=\"white\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </ng-template>\r\n </button>\r\n <button *ngIf=\"showCancelButton && currentPageIndex == pageDetails.length - 1\" class=\"btn submitButton rounded-pill bg-secondary text-white\"\r\n (click)=\"cancelled()\" type=\"button\"\r\n >Cancel</button>\r\n <div\r\n *ngIf=\"skipValidation\"\r\n class=\"button-container position-relative\"\r\n (mouseenter)=\"showTooltip = true\"\r\n (mouseleave)=\"showTooltip = false\"\r\n >\r\n <button\r\n class=\"submitBtn ms-md-2 me-md-2 rounded-pill d-flex align-items-center justify-content-center\"\r\n [ngStyle]=\"{ 'background-color': secondaryColor ? secondaryColor : '#084fff' }\"\r\n type=\"button\"\r\n *ngIf=\"currentPageIndex == pageDetails.length - 1 && !isActionTriggered\"\r\n (click)=\"saveAsDraft()\"\r\n [disabled]=\"!eligibleForSubmission.status || submissionInDraft\"\r\n >\r\n <ng-container *ngIf=\"submissionInDraft; else showSubmitText\">\r\n\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\r\n Submitting...\r\n </ng-container>\r\n <ng-template #showSubmitText>\r\n Save Draft\r\n </ng-template>\r\n </button>\r\n <div *ngIf=\"showTooltip && !eligibleForSubmission.status\" class=\"custom-tooltip\">\r\n {{eligibleForSubmission.message}}\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"button-container position-relative\"\r\n (mouseenter)=\"showTooltip = true\"\r\n (mouseleave)=\"showTooltip = false\"\r\n >\r\n <button\r\n class=\"submitBtn ms-md-2 me-md-2 rounded-pill d-flex align-items-center justify-content-center\"\r\n [ngStyle]=\"{ 'background-color': primaryColor ? primaryColor : '#084fff' }\"\r\n type=\"button\"\r\n *ngIf=\"currentPageIndex == pageDetails.length - 1 && !isActionTriggered\"\r\n (click)=\"submitForm()\"\r\n [disabled]=\"!eligibleForSubmission.status || submissionInProgress\"\r\n >\r\n <ng-container *ngIf=\"submissionInProgress; else showSubmitText\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\r\n Submitting...\r\n </ng-container>\r\n <ng-template #showSubmitText>\r\n Submit\r\n </ng-template>\r\n </button>\r\n <div *ngIf=\"showTooltip && !eligibleForSubmission.status\" class=\"custom-tooltip\">\r\n {{eligibleForSubmission.message}}\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div *ngIf=\"submissionInProgress\" class=\"text-loader\">\r\n {{ currentStep }}{{ animatedDots }}\r\n <span class=\"percentage\">{{ submissionProgress }}%</span>\r\n </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-submission-container',\n templateUrl: './submission-container.component.html',\n styleUrls: ['./submission-container.component.scss']\n})\nexport class SubmissionContainerComponent {\n @Input() parentQuestionAnswers:any;\n\n isImageUrl(url: string): boolean {\n return url.match(/\\.(jpeg|jpg|gif|png)$/) != null;\n }\n}\n","<div class=\"subModule\">\n <div class=\"submission-container\">\n <div *ngFor=\"let qa of parentQuestionAnswers\" class=\"submission-item\">\n <div class=\"key\">{{ qa.question }}</div>\n <div class=\"value\">\n <ng-container *ngIf=\"qa.elementType === 'FILE_PICKER'; else text\">\n <div class=\"files\" *ngFor=\"let attachment of qa.attachments\">\n <ng-container *ngIf=\"isImageUrl(attachment.fileName); else fileLink\">\n <img [src]=\"attachment.fileUrl\" alt=\"{{ attachment.fileName }}\" class=\"image\">\n </ng-container>\n <ng-template #fileLink>\n <p>{{ attachment.fileName }}</p>\n <a class=\"fileName\" [href]=\"attachment.fileUrl\" target=\"_blank\">\n <i class=\"bi bi-file-earmark\"></i>\n </a>\n </ng-template>\n </div>\n </ng-container>\n <ng-template #text>\n <ng-container [ngSwitch]=\"qa.elementType\">\n <p *ngSwitchCase=\"'RICH_TEXT_EDITOR'\" [innerHTML]=\"qa.values\"></p>\n <p *ngSwitchCase=\"'DROP_DOWN'\">{{ qa.values.join(', ') }}</p>\n <p *ngSwitchCase=\"'SELECTION_MATRIX'\">{{ qa.values.join(', ') }}</p>\n <p *ngSwitchDefault>{{ qa.values }}</p>\n </ng-container>\n </ng-template>\n </div>\n </div>\n</div>\n </div>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { FormService } from '../../services/form.service';\r\nimport * as mapper from '../../services/mapper.service';\r\nimport { PublicForm } from '../../models/publicForm.model';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Router } from '@angular/router';\r\nimport { DataService } from '../../services/data.service';\r\nimport { RecaptchaService } from '../../services/recaptcha.service';\r\nimport { ValidationService } from '../../services/validation.service';\r\nimport { ElementTrackerService } from '../../services/element-tracker.service';\r\nimport { NavigationTabsComponent } from '../navigation-tabs/navigation-tabs.component';\r\nimport { FormValidationService } from '../../services/form-validation.service';\r\nimport { AggregationFunctionService } from '../../services/aggregate.service';\r\nimport { EmitterDTO } from '../../models/emitters.model';\r\nimport { ScoreCalculationService } from '../../services/score.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { SaveDraftModalComponent } from '../save-as-draft/saveDraftModalComponent ';\r\nimport { WhenClauseService } from '../../services/whenClause.service';\r\nimport { HttpEventType } from '@angular/common/http';\r\n\r\ninterface Answer {\r\n questionId: string;\r\n answer: any;\r\n answerId?: string;\r\n deleteFiles?: string[];\r\n fields?: any;\r\n}\r\n\r\ninterface Submission {\r\n submissionId?: string;\r\n answers: Answer[];\r\n}\r\n\r\ninterface Form {\r\n formId: string;\r\n deleted?: boolean;\r\n deletedSubmissions: any[];\r\n submissions: Submission[];\r\n copiedForms: string[];\r\n scores?:{\r\n scoreType: string;\r\n score: number;\r\n }[];\r\n maximumPossibleScore?:number;\r\n show?:boolean;\r\n}\r\n\r\ninterface CopyForms{\r\n id: string,\r\n title: string,\r\n description: string,\r\n parentSubform: string,\r\n questionRelation: Record<string, string>;\r\n}\r\n\r\ninterface WhenClauseElements{\r\n elementId:string;\r\n entityType:string;\r\n show:boolean;\r\n}\r\n\r\ninterface QuestionAnswersWrapper {\r\n parentId: string;\r\n answers: Answer[];\r\n forms: Form[];\r\n copySubForms:CopyForms[];\r\n scores?:{\r\n scoreType: string;\r\n score: number;\r\n }[];\r\n maximumPossibleScore?:number;\r\n whenClauseElements: WhenClauseElements[]\r\n}\r\n\r\ninterface SubmissionScore {\r\n scoreType: string;\r\n score: number;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-submit-form',\r\n templateUrl: './submit-form.component.html',\r\n styleUrls: ['./submit-form.component.scss'],\r\n})\r\nexport class SubmitFormComponent implements OnInit, OnDestroy {\r\n question: PublicForm | null = null;\r\n @Input() moduleName: string = '';\r\n @Input() edit: boolean = false;\r\n @Input() submissionId: string = '';\r\n @Input() acceptedLanguage: string = '';\r\n @Input() skipMargin: boolean = false;\r\n @Input() skipValidation: boolean = false;\r\n @Input() navigateTo: string = '';\r\n @Input() country: string = '';\r\n @Output() submit: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() apiCalled: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n @Output() currentPageIndexChange: EventEmitter<number> =\r\n new EventEmitter<number>();\r\n @Input() showCancelButton: boolean = false;\r\n @Output() cancel: EventEmitter<string> = new EventEmitter<string>();\r\n @ViewChild(NavigationTabsComponent, { static: false })\r\n child!: NavigationTabsComponent;\r\n @Input() isActionTriggered: boolean = false;\r\n isLoading: boolean = false;\r\n name: string = '';\r\n saveAutomatically: boolean = false;\r\n saveInterval: number = 0;\r\n customizeFont: boolean = false;\r\n fontFamily: string = '';\r\n fontSize: number = 0;\r\n validationSkip: boolean = false;\r\n enableDataExport: boolean = false;\r\n fileFormats: string[] = [];\r\n enableQuestionNumbering: boolean = false;\r\n questionNumbering: string = '';\r\n enableGoogleRecaptcha: boolean = false;\r\n googleRecaptchaKey: string = '';\r\n googleRecaptchaSecret: string = '';\r\n navigation: string = '';\r\n markAllQuestionsAsRequired: boolean = false;\r\n pages: any = [];\r\n currentPageIndex: number = 0;\r\n previousPage: any = {};\r\n currentPage: any = {};\r\n nextPage: any = {};\r\n lastTab: boolean = false;\r\n questionAnswers: QuestionAnswersWrapper = {\r\n parentId: '',\r\n answers: [],\r\n forms: [],\r\n copySubForms: [],\r\n whenClauseElements: []\r\n };\r\n webhook: any;\r\n files: { questionId: string; file: any ; show?:boolean}[] = [];\r\n parentQuestions: any;\r\n submission: any = {};\r\n parentQuestionAnswers: any;\r\n parentSubmissionId: string = '';\r\n submissionInProgress: boolean = false;\r\n submissionInDraft: boolean = false;\r\n recaptchaToken: string = '';\r\n private isRefreshing: boolean = false;\r\n private intervalId: ReturnType<typeof setInterval> | null = null;\r\n pageDetails: any = [];\r\n pageNumber: number = 1;\r\n rowSet: number = 0;\r\n rowSetCount: [number] = [0];\r\n retryCount: number = 0;\r\n maxRetries: number = 5;\r\n\r\n eligibleForSubmission: { status: boolean; message: string } = {\r\n status: true,\r\n message: '',\r\n };\r\n webhookPayloadArray: any[] = [];\r\n inValidQuestions: Map<string, string> = new Map<string, string>();\r\n visitedRows: Map<number, number> = new Map<number, number>();\r\n allElementIds: string[] = [];\r\n private debounceTimer: any;\r\n primaryColor: string = '#084fff';\r\n secondaryColor: string = '';\r\n isLoadingPages: boolean = false;\r\n copySubforms: CopyForms[] = [];\r\n emitters: EmitterDTO[] = [];\r\n maxPossibleScore!: number;\r\n maxPossibleGoodScore!: number;\r\n maxPossibleBadScore!: number;\r\n sumOfFindings!: number;\r\n sumOfGoodFindings!: number;\r\n sumOfBadFindings!: number;\r\n draft: boolean = false;\r\n submissionProgress = 0;\r\n showSubmissionLoader = false;\r\n progressInterval: any;\r\n currentStep = 'Submitting form';\r\n animatedDots = '';\r\n private dotInterval: any;\r\n\r\n constructor(\r\n private formService: FormService,\r\n private toastr: ToastrService,\r\n private router: Router,\r\n private dataService: DataService,\r\n private recaptchaService: RecaptchaService,\r\n private validationService: ValidationService,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n private elementTracker: ElementTrackerService,\r\n private formValidationService: FormValidationService,\r\n private aggregateService: AggregationFunctionService,\r\n private scoreCalcService: ScoreCalculationService,\r\n public dialog: MatDialog,\r\n private whenClauseService:WhenClauseService\r\n ) {\r\n const navigation = this.router.getCurrentNavigation();\r\n this.submission = navigation?.extras.state?.['submission'];\r\n this.parentSubmissionId = this.submission?.id;\r\n this.parentQuestionAnswers = this.submission?.questionAnswers;\r\n this.parentQuestions = navigation?.extras.state?.['parentQuestions'];\r\n this.dataService.setParentQuestions(this.parentQuestions);\r\n }\r\n ngOnDestroy(): void {\r\n this.visitedRows.clear();\r\n this.recaptchaService.removeRecaptchaScript();\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId);\r\n this.intervalId = null;\r\n this.isRefreshing = false;\r\n }\r\n this.aggregateService.clearAll();\r\n this.recaptchaService.removeRecaptchaScript();\r\n this.whenClauseService.resetService();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['acceptedLanguage']) {\r\n this.currentPageIndex = 0;\r\n this.acceptedLanguage = changes['acceptedLanguage'].currentValue;\r\n if (!this.edit) this.getFormData();\r\n }\r\n if(changes['submissionId']){\r\n this.submissionId=changes['submissionId'].currentValue;\r\n if (this.edit && this.submissionId) {\r\n this.getSubmittedFormData();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (this.edit && this.submissionId) {\r\n // this.getSubmittedFormData();\r\n } else {\r\n // this.getFormData();\r\n }\r\n\r\n if (this.enableGoogleRecaptcha) {\r\n this.recaptchaInitialized();\r\n }\r\n }\r\n\r\n async recaptchaInitialized() {\r\n await this.recaptchaService.initialize();\r\n this.recaptchaService.render('captcha-container', (token) => {});\r\n }\r\n\r\n async getToken(): Promise<string> {\r\n return new Promise(async (resolve) => {\r\n try {\r\n await this.recaptchaService.initialize();\r\n\r\n // Check if CAPTCHA was rendered\r\n if (!this.recaptchaService.isRendered()) {\r\n console.warn('reCAPTCHA not rendered yet.');\r\n return resolve('');\r\n }\r\n\r\n // If solved, return the token\r\n if (this.recaptchaService.isResolved()) {\r\n const token = this.recaptchaService.getResponse();\r\n\r\n return resolve(token);\r\n }\r\n\r\n // If expired or unsolved, return empty string\r\n console.warn('reCAPTCHA not resolved or expired.');\r\n return resolve('');\r\n } catch (err) {\r\n console.error('reCAPTCHA initialization failed:', err);\r\n return resolve('');\r\n }\r\n });\r\n }\r\n\r\n loadFont(fontName: string): void {\r\n const fontPath = `assets/fonts/${fontName}.woff2`; // Adjust extension as per your font file\r\n const style = document.createElement('style');\r\n style.innerHTML = `\r\n @font-face {\r\n font-family: '${fontName}';\r\n src: url('${fontPath}') format('woff2');\r\n font-weight: normal;\r\n font-style: normal;\r\n }\r\n body {\r\n font-family: '${fontName}', sans-serif;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n\r\n getFormData() {\r\n this.isLoadingPages = true;\r\n this.formService\r\n .getQuestions(this.moduleName, 1, 0, true,this.country)\r\n .subscribe((response: any) => {\r\n this.isLoadingPages = false;\r\n this.enableGoogleRecaptcha =\r\n response.result.moduleConfiguration?.enableGoogleRecaptcha;\r\n this.question = mapper.mapPublicFormToModel(response);\r\n this.emitters = this.question.emitters || [];\r\n this.assignQuestionProperties(this.question);\r\n this.setUpFontFamily(response);\r\n this.primaryColor = response.result.primaryColor || '#084fff';\r\n this.secondaryColor = response.result.secondaryColor;\r\n if (this.enableGoogleRecaptcha) this.recaptchaInitialized();\r\n if (response?.result?.pageDetails) {\r\n this.pageDetails = response.result.pageDetails;\r\n this.nextPage = this.pageDetails[1];\r\n }\r\n this.webhook = response?.result?.webhooks;\r\n this.webhookPayloadArray = response?.result?.webhooks?.map(\r\n (w: any) => ({\r\n id: w.id,\r\n ...this.extractGroupedWebhookData([w]),\r\n })\r\n );\r\n\r\n this.rowSetCount[0] = response.result.totalNumberRow;\r\n for (let i = 0; i < this.pageDetails.length; i++) {\r\n if (!this.pages[i]) {\r\n this.pages[i] = [];\r\n }\r\n }\r\n this.checkSubmissionEligibility();\r\n });\r\n }\r\n\r\n getSubmittedFormData() {\r\n this.formService\r\n .getSubmittedForm(\r\n this.moduleName,\r\n this.submissionId,\r\n 1,\r\n 0,\r\n this.navigateTo\r\n )\r\n .subscribe((response) => {\r\n this.enableGoogleRecaptcha =\r\n response.result.moduleConfiguration.enableGoogleRecaptcha;\r\n this.question = mapper.mapPublicFormToModel(response);\r\n this.assignQuestionProperties(this.question);\r\n this.primaryColor = response.result.primaryColor || '#084fff';\r\n this.secondaryColor = response.result.secondaryColor;\r\n this.emitters = this.question.emitters || [];\r\n if (response?.result?.pageDetails) {\r\n this.pageDetails = response.result.pageDetails;\r\n this.nextPage = this.pageDetails[1];\r\n }\r\n this.webhookPayloadArray;\r\n this.webhookPayloadArray = response?.result?.webhooks?.map(\r\n (w: any) => ({\r\n id: w.id,\r\n ...this.extractGroupedWebhookData([w]),\r\n })\r\n );\r\n this.rowSetCount[0] = response.result.totalNumberRow;\r\n for (let i = 0; i < this.pageDetails.length; i++) {\r\n if (!this.pages[i]) {\r\n this.pages[i] = [];\r\n }\r\n }\r\n this.setUpFontFamily(response);\r\n if (this.navigateTo) {\r\n setTimeout(() => {\r\n this.navigateToFormElement();\r\n });\r\n }\r\n if (this.enableGoogleRecaptcha) {\r\n this.recaptchaInitialized();\r\n }\r\n this.checkSubmissionEligibility();\r\n });\r\n }\r\n\r\n setUpFontFamily(response: any) {\r\n //set font family and font size\r\n if (response.result?.moduleConfiguration?.customizeFont) {\r\n this.fontFamily = response.result.moduleConfiguration?.fontFamily;\r\n this.fontSize = response.result.moduleConfiguration?.fontSize || 18;\r\n } else {\r\n this.fontFamily = 'Poppins';\r\n this.fontSize = 18;\r\n }\r\n this.loadFont(this.fontFamily);\r\n document.documentElement.style.setProperty(\r\n '--library-font-family',\r\n this.fontFamily\r\n );\r\n document.documentElement.style.setProperty(\r\n '--library-font-size',\r\n this.fontSize + 'px'\r\n );\r\n }\r\n\r\n navigateToFormElement() {\r\n if (!this.pages) return;\r\n\r\n let foundPageIndex: number | null = null;\r\n\r\n // Step 1: find the page index\r\n this.pages.forEach((page: any, pageIndex: number) => {\r\n if (!page?.rows) return;\r\n\r\n page.rows.forEach((row: any) => {\r\n if (!row?.grid) return;\r\n\r\n row.grid.forEach((gridItem: any) => {\r\n const element = gridItem?.element;\r\n if (!element) return;\r\n\r\n // Case 1: Direct question match\r\n if (\r\n gridItem.entityType === 'QUESTION' &&\r\n element.id === this.navigateTo\r\n ) {\r\n foundPageIndex = pageIndex;\r\n }\r\n\r\n // Case 2: Subform match\r\n if (gridItem.entityType === 'SUBFORM') {\r\n if (element.id === this.navigateTo) {\r\n foundPageIndex = pageIndex;\r\n }\r\n if (\r\n element.submissions?.some(\r\n (s: any) => s.submissionId === this.navigateTo\r\n )\r\n ) {\r\n foundPageIndex = pageIndex;\r\n }\r\n }\r\n });\r\n });\r\n });\r\n\r\n if (foundPageIndex !== null) {\r\n // Step 2: Set current page\r\n this.currentPageIndex = foundPageIndex;\r\n this.currentPage = this.pages[this.currentPageIndex];\r\n\r\n if (this.navigation == 'TAB') {\r\n this.child.triggerFunction(this.currentPageIndex);\r\n } else {\r\n\r\n this.previousPage = this.pageDetails[this.currentPageIndex - 1];\r\n this.nextPage = this.pageDetails[this.currentPageIndex + 1];\r\n }\r\n // Step 3: Wait for DOM render and scroll\r\n setTimeout(() => {\r\n const elementId = `question-${this.navigateTo}`;\r\n const el = document.getElementById(elementId);\r\n if (el) {\r\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n this.checkSubmissionEligibility();\r\n }\r\n }, 0);\r\n } else {\r\n console.warn(`navigateTo id ${this.navigateTo} not found in any page`);\r\n }\r\n }\r\n\r\n assignQuestionProperties(question: PublicForm) {\r\n this.name = question.name;\r\n this.pages = question.pages;\r\n if (this.parentQuestions) {\r\n this.parentQuestionAnswers = question?.questionAnswers;\r\n this.parentSubmissionId = question?.parentId;\r\n }\r\n this.currentPage = this.pages[0];\r\n this.nextPage = this.pages[1];\r\n this.saveAutomatically = question.formConfiguration.saveAutomatically;\r\n this.saveInterval = question.formConfiguration.saveInterval;\r\n this.customizeFont = question.formConfiguration.customizeFont;\r\n this.fontFamily = question.formConfiguration.fontFamily;\r\n this.fontSize = question.formConfiguration.fontSize;\r\n this.enableDataExport = question.formConfiguration.enableDataExport;\r\n this.fileFormats = question.formConfiguration.fileFormats;\r\n this.enableQuestionNumbering =\r\n question.formConfiguration.enableQuestionNumbering;\r\n this.questionNumbering = question.formConfiguration.questionNumbering;\r\n this.enableGoogleRecaptcha =\r\n question.formConfiguration.enableGoogleRecaptcha;\r\n this.googleRecaptchaKey = question.formConfiguration.googleRecaptchaKey;\r\n this.googleRecaptchaSecret =\r\n question.formConfiguration.googleRecaptchaSecret;\r\n this.navigation = question.formConfiguration.navigation;\r\n this.markAllQuestionsAsRequired =\r\n question.formConfiguration.markAllQuestionsAsRequired;\r\n this.apiCalled.emit(true);\r\n }\r\n\r\n navigateToNextPage() {\r\n if (!this.isLoading) {\r\n this.isLoading = true;\r\n const nextIndex = this.currentPageIndex + 1;\r\n if (nextIndex < this.pageDetails.length) {\r\n if (this.markAllQuestionsAsRequired) {\r\n const currentPageData = this.pages[this.currentPageIndex];\r\n let validationResponse = true;\r\n if (!this.validationSkip) {\r\n validationResponse =\r\n this.formValidationService.validateRequiredQuestions(\r\n currentPageData\r\n ).isValid;\r\n }\r\n if (validationResponse) {\r\n this.previousPage = this.pageDetails[this.currentPageIndex];\r\n if (this.pages[nextIndex].length != 0) {\r\n this.currentPage = this.pages[nextIndex];\r\n this.currentPageIndex = nextIndex;\r\n } else {\r\n this.setCurrentPage(nextIndex);\r\n }\r\n this.nextPage = this.pageDetails[nextIndex + 1];\r\n }\r\n } else {\r\n this.previousPage = this.pageDetails[this.currentPageIndex];\r\n if (this.pages[nextIndex].length != 0) {\r\n this.currentPage = this.pages[nextIndex];\r\n this.currentPageIndex = nextIndex;\r\n } else {\r\n this.setCurrentPage(nextIndex);\r\n }\r\n this.nextPage = this.pageDetails[nextIndex + 1];\r\n }\r\n }\r\n this.isLoading = false;\r\n this.checkSubmissionEligibility();\r\n }\r\n }\r\n\r\n navigateToPreviousPage() {\r\n if (this.currentPageIndex > 0) {\r\n if (this.markAllQuestionsAsRequired) {\r\n const currentPageData = this.pages[this.currentPageIndex];\r\n let validationResponse = true;\r\n if (!this.validationSkip) {\r\n validationResponse =\r\n this.formValidationService.validateRequiredQuestions(\r\n currentPageData\r\n ).isValid;\r\n }\r\n if (validationResponse) {\r\n this.nextPage = this.pageDetails[this.currentPageIndex];\r\n this.currentPageIndex--;\r\n if (this.pages[this.currentPageIndex].length != 0) {\r\n this.currentPage = this.pages[this.currentPageIndex];\r\n } else {\r\n this.setCurrentPage(this.currentPageIndex);\r\n }\r\n this.previousPage = this.pageDetails[this.currentPageIndex - 1];\r\n }\r\n } else {\r\n this.nextPage = this.pageDetails[this.currentPageIndex];\r\n this.currentPageIndex--;\r\n if (this.pages[this.currentPageIndex].length != 0) {\r\n this.currentPage = this.pages[this.currentPageIndex];\r\n } else {\r\n this.setCurrentPage(this.currentPageIndex);\r\n }\r\n this.previousPage = this.pageDetails[this.currentPageIndex - 1];\r\n }\r\n }\r\n this.checkSubmissionEligibility();\r\n }\r\n\r\n checkSubmissionEligibility(): void {\r\n this.eligibleForSubmission = this.validateAllElementLoaded();\r\n }\r\n\r\n setCurrentPage(index: number) {\r\n if (index < this.pages.length) {\r\n // If page already exists AND has content → no need to fetch again\r\n if (\r\n this.pages[index] &&\r\n this.pages[index].rows &&\r\n this.pages[index].rows.length > 0\r\n ) {\r\n this.checkSubmissionEligibility();\r\n return;\r\n }\r\n }\r\n this.pageNumber = index + 1;\r\n if (this.edit) {\r\n this.formService\r\n .getSubmittedForm(\r\n this.moduleName,\r\n this.submissionId,\r\n this.pageNumber,\r\n this.rowSet\r\n )\r\n .subscribe((response: any) => { \r\n const mappedResponse = mapper.mapPageToModel(response.result.pages[0],response.result?.currency,response.result?.defaultCurrency);\r\n if (mappedResponse) {\r\n this.pages[index] = mappedResponse;\r\n }\r\n this.currentPageIndex = index;\r\n this.currentPage = this.pages[index];\r\n this.rowSetCount[index] = response.result.totalNumberRow;\r\n this.checkSubmissionEligibility();\r\n });\r\n } else {\r\n this.formService\r\n .getQuestions(this.moduleName, this.pageNumber, this.rowSet, true,this.country)\r\n .subscribe((response: any) => {\r\n const mappedResponse = mapper.mapPageToModel(response.result.pages[0],response.result?.currency,response.result?.defaultCurrency);\r\n if (mappedResponse) {\r\n this.pages[index] = mappedResponse;\r\n }\r\n this.currentPageIndex = index;\r\n this.currentPage = this.pages[index];\r\n this.rowSetCount[index] = response.result.totalNumberRow;\r\n this.checkSubmissionEligibility();\r\n });\r\n }\r\n\r\n if (this.markAllQuestionsAsRequired) {\r\n const currentPageData = this.pages[this.currentPageIndex];\r\n let validationResponse = true;\r\n if (!this.validationSkip) {\r\n validationResponse =\r\n this.formValidationService.validateRequiredQuestions(\r\n currentPageData\r\n ).isValid;\r\n }\r\n if (validationResponse) {\r\n this.currentPageIndex = index;\r\n } else {\r\n this.checkSubmissionEligibility();\r\n return;\r\n }\r\n } else {\r\n this.checkSubmissionEligibility();\r\n this.currentPageIndex = index;\r\n }\r\n }\r\n\r\n loadMoreData(index: number): void {\r\n if (!this.isLoading) {\r\n this.isLoading = true;\r\n let rowCountLimit = this.rowSetCount[index];\r\n let i = 0;\r\n this.pages[index].rows.forEach((row: any) => {\r\n row.grid.forEach((gridItem: any) => {\r\n i++;\r\n });\r\n });\r\n let rowCount = i / 20;\r\n rowCount = Math.ceil(rowCount);\r\n\r\n if (this.visitedRows.has(index)) {\r\n if (this.visitedRows.get(index) === rowCount) {\r\n this.isLoading = false;\r\n return;\r\n }\r\n }\r\n\r\n if (rowCount + 1 > rowCountLimit && !this.navigateTo) {\r\n this.checkSubmissionEligibility();\r\n this.isLoading = false;\r\n return;\r\n }\r\n this.visitedRows.set(index, rowCount);\r\n\r\n if (this.edit) {\r\n this.formService\r\n .getSubmittedForm(\r\n this.moduleName,\r\n this.submissionId,\r\n index + 1,\r\n rowCount\r\n )\r\n .subscribe((response: any) => {\r\n const newRows = response?.result?.pages[0]?.rows ?? [];\r\n this.pages[index].rows = [\r\n ...(this.pages[index]?.rows ?? []),\r\n ...newRows,\r\n ];\r\n this.currentPageIndex = index;\r\n this.currentPage = this.pages[index];\r\n this.rowSetCount[index] = response.result.totalNumberRow;\r\n this.checkSubmissionEligibility();\r\n this.isLoading = false;\r\n });\r\n } else {\r\n this.formService\r\n .getQuestions(this.moduleName, index + 1, rowCount)\r\n .subscribe((response: any) => {\r\n const newRows = response?.result?.pages[0]?.rows ?? [];\r\n this.pages[index].rows = [\r\n ...(this.pages[index]?.rows ?? []),\r\n ...newRows,\r\n ];\r\n this.currentPageIndex = index;\r\n this.currentPage = this.pages[index];\r\n this.rowSetCount[index] = response.result.totalNumberRow;\r\n this.checkSubmissionEligibility();\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n this.checkSubmissionEligibility();\r\n }\r\n }\r\n\r\n generateQuestionAnswers() {\r\n this.maxPossibleScore = 1;\r\n this.sumOfFindings = 0;\r\n this.sumOfBadFindings = 0;\r\n this.sumOfGoodFindings = 0;\r\n this.maxPossibleBadScore = 0;\r\n this.maxPossibleGoodScore = 0;\r\n this.copySubforms = [];\r\n\r\n // this.maxPossibleGoodScore = 0;\r\n // this.maxPossibleBadScore = 0;\r\n const extractQuestions = (\r\n formElements: any[],\r\n parentFormId: string | null = null,\r\n isInSubForm: boolean = false,\r\n subFormIndex: number = 0\r\n ): { answers: Answer[]; forms: Form[] } => {\r\n const questions: Answer[] = [];\r\n const forms: Form[] = [];\r\n formElements.forEach((element) => {\r\n if (element.entityType === 'QUESTION' && element.show) {\r\n let baseQuestion: any;\r\n if (element.element.formElement.elementType === 'FILE_PICKER') {\r\n baseQuestion = {\r\n questionId: element.element.id,\r\n answer: '',\r\n };\r\n if (Array.isArray(element.element.answer)) {\r\n const questionId = isInSubForm\r\n ? `${parentFormId}_${subFormIndex}_${element.element.id}`\r\n : element.element.id;\r\n this.files.push({\r\n questionId: questionId,\r\n file: element.element.answer,\r\n show: element.show\r\n });\r\n }\r\n } else {\r\n baseQuestion = {\r\n questionId: element.element.id,\r\n answer: element.element.answer,\r\n score: element.element.score,\r\n maximumPossibleScore: element.element.maxPossibleScore,\r\n currencySymbol: element.element?.currencySymbol,\r\n amountInWords: element.element?.amountInWords,\r\n show: element.show\r\n };\r\n }\r\n if (this.edit) {\r\n questions.push({\r\n ...baseQuestion,\r\n answerId: element.element.answerId || '',\r\n deleteFiles: element.element.deleteFiles || [],\r\n });\r\n } else {\r\n questions.push(baseQuestion);\r\n }\r\n\r\n if (\r\n (element.element.formElement.elementType === 'DROP_DOWN' ||\r\n element.element.formElement.elementType === 'RADIO_BUTTON' ||\r\n element.element.formElement.elementType === 'CHECK_BOX') &&\r\n element.element.formElement.scoring &&\r\n element.element.formElement.scoring.enableScoring &&\r\n !isInSubForm\r\n ) {\r\n this.maxPossibleScore *=\r\n this.scoreCalcService.getMaxPossibleScoreForQuestion(\r\n element.element\r\n );\r\n if (\r\n element.element.score &&\r\n element.element.score != null &&\r\n element.element.score != undefined\r\n ) {\r\n this.sumOfFindings += element.element.score;\r\n }\r\n }\r\n\r\n if (element.element.childLogics) {\r\n for (let logic of element.element.childLogics) {\r\n if (logic.showLogic) {\r\n for (let row of logic.rows) {\r\n const result = extractQuestions(\r\n row.grid,\r\n parentFormId,\r\n isInSubForm,\r\n subFormIndex\r\n );\r\n questions.push(...result.answers);\r\n forms.push(...result.forms);\r\n }\r\n }\r\n }\r\n }\r\n } else if (element.entityType === 'SUBFORM' && element.show) {\r\n const subformId = element.element.id;\r\n const submissionId = element.element.submissionId;\r\n if (element.element.copySubformMeta) {\r\n this.copySubforms.push(element.element.copySubformMeta);\r\n }\r\n if (element.element.property.subFormStructure === 'single') {\r\n let allAnswers: Answer[] = [];\r\n\r\n element.element.rows.forEach((row: any) => {\r\n const extracted = extractQuestions(\r\n row.grid,\r\n subformId,\r\n true,\r\n forms.length\r\n );\r\n extracted.answers.forEach((answer) => {\r\n allAnswers.push({ ...answer });\r\n });\r\n });\r\n let copiedForms;\r\n if (element.element.copiedForms) {\r\n copiedForms = element.element.copiedForms;\r\n }\r\n const subform: Form = {\r\n formId: subformId,\r\n deleted: element.element.deleted,\r\n deletedSubmissions: [],\r\n submissions: [\r\n {\r\n submissionId: submissionId,\r\n answers: allAnswers,\r\n },\r\n ],\r\n copiedForms: copiedForms,\r\n };\r\n\r\n forms.push(subform);\r\n } else if (element.element.property.subFormStructure === 'multiple') {\r\n const subformAnswers: Answer[] = [];\r\n let subformQuestions: any = { answers: [] };\r\n element.element.rows.forEach((row: any) => {\r\n subformQuestions = extractQuestions(\r\n row.grid,\r\n subformId,\r\n true,\r\n forms.length\r\n );\r\n });\r\n const existingSubform = forms.find(\r\n (form) => form.formId === subformId\r\n );\r\n if (\r\n (element.element.property.subFormType == 'inline' ||\r\n element.element.property.subFormType == 'card') &&\r\n element.element.submissions\r\n ) {\r\n element.element.submissions = this.clearEmptySubmissions(\r\n element.element.submissions\r\n );\r\n }\r\n element.element?.submissions?.forEach(\r\n (submission: any, index: number) => {\r\n for (const s of submission.scores ?? []) {\r\n if (s.scoreType === 'GOOD_SCORE') {\r\n this.sumOfGoodFindings += s.score;\r\n }\r\n if (s.scoreType === 'BAD_SCORE') {\r\n this.sumOfBadFindings += s.score;\r\n }\r\n }\r\n delete submission.hasAllScoringAnsweredOnce;\r\n submission.answers.forEach((answer: any) => {\r\n delete answer.htmlContent;\r\n if (Array.isArray(answer.files)) {\r\n const questionId = `${subformId}_${index}_${answer.questionId}`;\r\n this.files.push({\r\n questionId: questionId,\r\n file: answer.files,\r\n });\r\n delete answer.files;\r\n }\r\n delete answer.attachments;\r\n });\r\n }\r\n );\r\n let copiedForms;\r\n if (element.element.copiedForms) {\r\n copiedForms = element.element.copiedForms;\r\n }\r\n\r\n const subform: Form = {\r\n formId: subformId,\r\n deleted: element.element.deleted,\r\n scores: element.element.scores,\r\n deletedSubmissions: element.element.deletedSubmissions,\r\n submissions: element.element.submissions,\r\n copiedForms: copiedForms,\r\n };\r\n forms.push(subform);\r\n this.maxPossibleScore +=\r\n element.element?.maxPossibleScore *\r\n element.element?.submissions?.length;\r\n this.maxPossibleGoodScore +=\r\n element.element?.maxPossibleScore?.good *\r\n element.element?.submissions?.length || 0;\r\n this.maxPossibleBadScore +=\r\n element.element?.maxPossibleScore?.bad *\r\n element.element?.submissions?.length || 0;\r\n }\r\n } else if (element.entityType === 'QUESTION_GROUP' && element.show) {\r\n // Handle Question Group by iterating through rows\r\n element.element.rows.forEach((row: any) => {\r\n row.grid.forEach((gridItem: any) => {\r\n if (gridItem.entityType === 'QUESTION' && gridItem.show) {\r\n let baseQuestion: any;\r\n if (\r\n gridItem.element?.formElement.elementType === 'FILE_PICKER'\r\n ) {\r\n baseQuestion = {\r\n questionId: gridItem.element.id,\r\n answer: '',\r\n };\r\n if (Array.isArray(gridItem.element.answer)) {\r\n const questionId = isInSubForm\r\n ? `${parentFormId}_${subFormIndex}_${gridItem.element.id}`\r\n : gridItem.element.id;\r\n this.files.push({\r\n questionId: questionId,\r\n file: gridItem.element.answer,\r\n });\r\n }\r\n } else {\r\n baseQuestion = {\r\n questionId: gridItem.element.id,\r\n answer: gridItem.element.answer,\r\n amountInWords: gridItem.element.amountInWords\r\n };\r\n }\r\n if (this.edit) {\r\n questions.push({\r\n ...baseQuestion,\r\n answerId: gridItem.element.answerId || '',\r\n deleteFiles: gridItem.element.deleteFiles || [],\r\n });\r\n } else {\r\n questions.push(baseQuestion);\r\n }\r\n\r\n if (gridItem.element.childLogics) {\r\n for (let logic of gridItem.element.childLogics) {\r\n if (logic.showLogic) {\r\n for (let row of logic.rows) {\r\n const result = extractQuestions(\r\n row.grid,\r\n parentFormId,\r\n isInSubForm,\r\n subFormIndex\r\n );\r\n questions.push(...result.answers);\r\n forms.push(...result.forms);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n });\r\n } else if (element.entityType === 'MULTIFIELD' && element.show) {\r\n element.element.rows.forEach((row: any) => {\r\n row.grid.forEach((gridItem: any) => {\r\n if (gridItem.entityType === 'QUESTION' && gridItem.show) {\r\n questions.push({\r\n questionId: gridItem.element.id,\r\n answer: gridItem.element.answer || '',\r\n });\r\n }\r\n });\r\n });\r\n }\r\n });\r\n return { answers: questions, forms: forms };\r\n };\r\n\r\n const processPages = (\r\n pages: any[]\r\n ): { answers: Answer[]; forms: Form[] } => {\r\n const questions: Answer[] = [];\r\n const forms: Form[] = [];\r\n\r\n pages.forEach((page) => {\r\n page.rows.forEach((row: any) => {\r\n const result = extractQuestions(row.grid);\r\n questions.push(...result.answers);\r\n forms.push(...result.forms);\r\n });\r\n });\r\n\r\n return { answers: questions, forms: forms };\r\n };\r\n const result = processPages(this.pages);\r\n const grids = this.whenClauseService.getActiveWhenClauseGrids();\r\n const simplified = grids.map(grid => ({\r\n elementId: grid?.element?.id ?? null,\r\n entityType: grid?.entityType ?? null,\r\n show: grid?.show ?? false\r\n }));\r\n this.questionAnswers = {\r\n parentId: '',\r\n answers: result.answers,\r\n forms: result.forms,\r\n copySubForms: this.copySubforms,\r\n whenClauseElements: simplified\r\n };\r\n }\r\n\r\n clearEmptySubmissions(submissions: any) {\r\n const nonEmptySubmissions: Submission[] = [];\r\n const emptySubmissionIds: string[] = [];\r\n\r\n submissions.forEach((submission: any) => {\r\n const hasValue = submission.answers.some(\r\n (answer: any) =>\r\n answer.answer !== '' &&\r\n answer.answer !== null &&\r\n answer.answer !== undefined\r\n );\r\n if (hasValue) {\r\n nonEmptySubmissions.push(submission);\r\n } else if (submission.submissionId) {\r\n emptySubmissionIds.push(submission.submissionId);\r\n }\r\n });\r\n\r\n submissions = nonEmptySubmissions;\r\n return submissions;\r\n }\r\n\r\n validateAllElementLoaded(): { status: boolean; message: string } {\r\n if (this.pages.length < this.pageDetails.length) {\r\n return {\r\n status: false,\r\n message:\r\n 'Please ensure all pages are fully visible before submitting the form.',\r\n };\r\n }\r\n\r\n const incompletePages: string[] = [];\r\n\r\n this.pages.forEach((p: any, i: number) => {\r\n if (p && Array.isArray(p.rows)) {\r\n let j = 0;\r\n p.rows.forEach((row: any) => {\r\n row.grid.forEach((gridItem: any) => {\r\n j++;\r\n });\r\n });\r\n if (\r\n !p ||\r\n !Array.isArray(p.rows) ||\r\n (Math.ceil(j / 20) != this.rowSetCount[i] && !this.navigateTo)\r\n ) {\r\n incompletePages.push(this.pageDetails[i].name);\r\n }\r\n } else {\r\n incompletePages.push(this.pageDetails[i].name);\r\n }\r\n });\r\n\r\n if (incompletePages.length > 0) {\r\n return {\r\n status: false,\r\n message: `Some sections are still loading. Please scroll through the following pages to ensure all questions are loaded: ${incompletePages.join(\r\n ', '\r\n )}.`,\r\n };\r\n }\r\n\r\n return {\r\n status: true,\r\n message: 'Great! All sections are complete. You can now submit the form.',\r\n };\r\n }\r\n saveasDraftPopup(): void {\r\n if (!this.skipValidation) {\r\n return;\r\n }\r\n const dialogRef = this.dialog.open(SaveDraftModalComponent, {\r\n width: '450px',\r\n panelClass: 'custom-dialog-container',\r\n autoFocus: false,\r\n disableClose: true,\r\n data: {\r\n primaryColor: this.primaryColor,\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result) {\r\n this.validationSkip = true;\r\n this.submitForm();\r\n } else {\r\n this.validationSkip = false;\r\n }\r\n });\r\n }\r\n\r\n saveAsDraft() {\r\n this.validationSkip = true;\r\n this.draft = true;\r\n this.submitForm();\r\n }\r\n\r\n async submitForm() {\r\n this.startSubmissionLoader();\r\n if (this.webhook) {\r\n this.webhookPayloadArray = this.webhook.map((w: any) => ({\r\n id: w.id,\r\n ...this.extractGroupedWebhookData([w]),\r\n }));\r\n }\r\n if (!this.validateAllElementLoaded().status) {\r\n this.toastr.warning('Please wait for all elements to load');\r\n this.submit.emit({\r\n status: 'failed',\r\n });\r\n return;\r\n }\r\n if (this.submissionInProgress || this.submissionInDraft) {\r\n this.submit.emit({\r\n status: 'failed',\r\n });\r\n return;\r\n }\r\n let recaptchaToken: string | undefined;\r\n this.inValidQuestions.clear();\r\n this.validationService.clearAll();\r\n if (this.enableGoogleRecaptcha) {\r\n try {\r\n recaptchaToken = await this.getToken();\r\n\r\n if (!recaptchaToken) {\r\n this.toastr.error(\r\n 'Please complete the CAPTCHA verification before submitting the form.'\r\n );\r\n this.submissionInProgress = false;\r\n this.submissionInDraft = false;\r\n this.resetSubmissionLoader();\r\n this.validationSkip = false;\r\n this.draft = false;\r\n this.submit.emit({\r\n status: 'failed',\r\n });\r\n return;\r\n }\r\n } catch (error: any) {\r\n console.error(\r\n 'Error while getting reCAPTCHA token:',\r\n error.error?.message\r\n );\r\n this.toastr.error('Failed to verify reCAPTCHA.');\r\n this.submissionInProgress = false;\r\n this.submissionInDraft = false;\r\n this.resetSubmissionLoader();\r\n this.validationSkip = false;\r\n this.draft = false;\r\n this.submit.emit({\r\n status: 'failed',\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (this.draft || this.validationSkip) {\r\n this.submissionInDraft = true;\r\n } else {\r\n this.submissionInProgress = true;\r\n }\r\n\r\n let validationResponse = true;\r\n if (!this.validationSkip) {\r\n validationResponse = this.validateForm(this.pages).isValid;\r\n }\r\n\r\n if (!validationResponse) {\r\n this.saveasDraftPopup();\r\n this.submissionInProgress = false;\r\n this.submissionInDraft = false;\r\n this.resetSubmissionLoader();\r\n this.validationSkip = false;\r\n this.draft = false;\r\n this.submit.emit({\r\n status: 'failed',\r\n });\r\n return;\r\n }\r\n const getCircularReplacer = () => {\r\n const seen = new WeakSet();\r\n return (_key: string, value: any) => {\r\n if (typeof value === 'object' && value !== null) {\r\n if (seen.has(value)) {\r\n return undefined;\r\n }\r\n seen.add(value);\r\n }\r\n return value;\r\n };\r\n };\r\n\r\n this.generateQuestionAnswers();\r\n const formFinalScore = this.calculateFormFinalScore();\r\n this.questionAnswers.scores = formFinalScore;\r\n if (validationResponse) {\r\n const formData = new FormData();\r\n formData.append('skipValidation', this.validationSkip ? 'true' : 'false');\r\n this.questionAnswers.parentId = this.parentSubmissionId;\r\n formData.append(\r\n 'json',\r\n JSON.stringify(this.questionAnswers, getCircularReplacer())\r\n );\r\n if (this.webhookPayloadArray) {\r\n formData.append(\r\n 'webhookPayload',\r\n JSON.stringify(this.webhookPayloadArray)\r\n );\r\n } else {\r\n formData.append('webhookPayload', JSON.stringify([]));\r\n }\r\n if (this.files.length > 0) {\r\n const seenQuestionIds = new Set<string>();\r\n\r\n const uniqueFiles = this.files.filter((fileItem) => {\r\n if (seenQuestionIds.has(fileItem.questionId)) {\r\n return false;\r\n }\r\n seenQuestionIds.add(fileItem.questionId);\r\n return true;\r\n });\r\n\r\n uniqueFiles.forEach((fileItem) => {\r\n fileItem.file.forEach((file: any) => {\r\n formData.append(fileItem.questionId, file._file);\r\n });\r\n });\r\n }\r\n const formServiceCall =\r\n this.edit && this.submissionId\r\n ? this.formService.updateForm(\r\n this.moduleName,\r\n this.submissionId,\r\n formData,\r\n recaptchaToken ?? ''\r\n )\r\n : this.formService.submitForm(\r\n this.moduleName,\r\n formData,\r\n recaptchaToken ?? ''\r\n );\r\n\r\n formServiceCall.subscribe({\r\n next: (event) => {\r\n if (event.type === HttpEventType.UploadProgress) {\r\n if (event.total) {\r\n const percentDone = Math.round((event.loaded / event.total) * 100);\r\n this.setProgress(Math.min(95, percentDone));\r\n }\r\n }\r\n \r\n if (event.type === HttpEventType.Response) {\r\n this.completeSubmissionLoader();\r\n \r\n const response = event.body;\r\n \r\n // existing success logic ↓\r\n this.toastr.success(\r\n this.edit\r\n ? 'Form updated successfully'\r\n : 'Form submitted successfully'\r\n );\r\n let emittingValues;\r\n if (this.emitters) {\r\n emittingValues = this.mapEmittersToValues();\r\n }\r\n \r\n if (this.validationSkip || this.draft) {\r\n this.submit.emit({\r\n status: 'draft',\r\n submissionId: response.result,\r\n score: formFinalScore,\r\n ...(emittingValues || {}),\r\n });\r\n } else {\r\n this.submit.emit({\r\n status: 'success',\r\n submissionId: response.result,\r\n score: formFinalScore,\r\n ...(emittingValues || {}),\r\n });\r\n }\r\n this.submissionInProgress = false;\r\n this.submissionInDraft = false;\r\n this.draft = false;\r\n this.validationSkip = false;\r\n }\r\n },\r\n error: (error) => {\r\n this.validationService.clearAll();\r\n this.findQuestionPageIndex(\r\n this.parseErrorsToMap(error.error.message)\r\n );\r\n this.currentPageIndex = this.pages.length - 1;\r\n this.navigateToFirstError();\r\n this.resetSubmissionLoader();\r\n this.submissionInProgress = false;\r\n this.draft = false;\r\n this.validationSkip = false;\r\n this.submissionInDraft = false;\r\n this.saveasDraftPopup();\r\n this.submit.emit({\r\n status: 'failed',\r\n message: error.error.message\r\n });\r\n },\r\n });\r\n } else {\r\n // this.toastr.error(validationResponse.message);\r\n this.submit.emit({\r\n status: 'failed',\r\n });\r\n this.saveasDraftPopup();\r\n this.submissionInProgress = false;\r\n this.submissionInDraft = false;\r\n this.resetSubmissionLoader();\r\n this.validationSkip = false;\r\n this.draft = false;\r\n }\r\n }\r\n\r\nsetProgress(value: number) {\r\n this.submissionProgress = value;\r\n this.updateStepText(value);\r\n}\r\n\r\n\r\nstartSubmissionLoader() {\r\n this.showSubmissionLoader = true;\r\n this.setProgress(0);\r\n\r\n // Simulated progress until backend upload updates it\r\n this.progressInterval = setInterval(() => {\r\n if (this.submissionProgress < 85) {\r\n this.setProgress(this.submissionProgress + 2);\r\n }\r\n }, 300);\r\n}\r\n\r\ncompleteSubmissionLoader() {\r\n clearInterval(this.progressInterval);\r\n\r\n this.setProgress(100);\r\n\r\n setTimeout(() => {\r\n this.showSubmissionLoader = false;\r\n this.setProgress(0);\r\n }, 500);\r\n}\r\n\r\nresetSubmissionLoader() {\r\n clearInterval(this.progressInterval);\r\n\r\n this.showSubmissionLoader = false;\r\n clearInterval(this.dotInterval);\r\n this.animatedDots = '';\r\n this.setProgress(0);\r\n}\r\n\r\n\r\nstartTextLoader() {\r\n let dotCount = 0;\r\n\r\n this.dotInterval = setInterval(() => {\r\n dotCount = (dotCount + 1) % 4;\r\n this.animatedDots = '.'.repeat(dotCount);\r\n }, 500);\r\n}\r\n\r\nupdateStepText(progress: number) {\r\n if (progress < 25) {\r\n this.currentStep = 'Validating form';\r\n } else if (progress < 60) {\r\n this.currentStep = 'Uploading data';\r\n } else if (progress < 90) {\r\n this.currentStep = 'Saving submission';\r\n } else {\r\n this.currentStep = 'Finalizing';\r\n }\r\n}\r\n\r\n calculateFormFinalScore(): SubmissionScore[] {\r\n const goodScore = this.maxPossibleGoodScore\r\n ? 100 - (this.sumOfGoodFindings / this.maxPossibleGoodScore) * 100\r\n : 0;\r\n\r\n const badScore = this.maxPossibleBadScore\r\n ? 100 - (this.sumOfBadFindings / this.maxPossibleBadScore) * 100\r\n : 0;\r\n\r\n return [\r\n { scoreType: 'GOOD_SCORE', score: Math.round(goodScore) },\r\n { scoreType: 'BAD_SCORE', score: Math.round(badScore) },\r\n ];\r\n }\r\n\r\n mapEmittersToValues(): { [key: string]: any } {\r\n const answerMap = new Map(\r\n this.questionAnswers.answers.map((qa) => [qa.questionId, qa.answer])\r\n );\r\n\r\n const result: { [key: string]: any } = {};\r\n\r\n this.emitters.forEach((emitter) => {\r\n if (emitter.valueSource === 'CUSTOM_INPUT') {\r\n result[emitter.keyName] = emitter.inputValue;\r\n } else if (\r\n emitter.valueSource === 'QUESTION' &&\r\n emitter.questionId &&\r\n answerMap.has(emitter.questionId)\r\n ) {\r\n result[emitter.keyName] = answerMap.get(emitter.questionId);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n parseErrorsToMap(errorString: string): Map<string, string> {\r\n const errorMap = new Map<string, string>();\r\n // Convert the incorrect format to a valid object structure\r\n errorString\r\n .replace(/[{}]/g, '') // Remove curly braces\r\n .split(', ') // Split key-value pairs\r\n .forEach((pair) => {\r\n const [key, value] = pair.split('=');\r\n if (key && value) {\r\n errorMap.set(key.trim(), value.trim()); // Store in Map\r\n }\r\n });\r\n\r\n return errorMap;\r\n }\r\n async navigateToFirstError() {\r\n const firstError = this.validationService.getFirstInvalid();\r\n if (!firstError) return;\r\n\r\n const elementId = `question-${firstError.id}`;\r\n\r\n this.retryCount = 0;\r\n\r\n // Change page if needed\r\n if (this.currentPageIndex !== firstError.pageIndex) {\r\n this.currentPageIndex = firstError.pageIndex;\r\n if (this.currentPageIndex + 1 < this.pageDetails.length) {\r\n this.nextPage = this.pageDetails[this.currentPageIndex + 1];\r\n }\r\n if (this.currentPageIndex - 1 >= 0) {\r\n this.previousPage = this.pageDetails[this.currentPageIndex - 1];\r\n }\r\n\r\n this.debounce(() => this.changeDetectorRef.detectChanges(), 100);\r\n if (this.navigation === 'TAB')\r\n this.child.triggerFunction(firstError.pageIndex);\r\n }\r\n\r\n await this.scrollToElementWithRetry(elementId);\r\n }\r\n\r\n private async scrollToElementWithRetry(elementId: string): Promise<void> {\r\n this.retryCount++;\r\n const element = document.getElementById(elementId);\r\n\r\n if (element) {\r\n requestAnimationFrame(() => this.scrollAndFocus(element));\r\n return;\r\n }\r\n\r\n if (this.retryCount < this.maxRetries) {\r\n await new Promise((resolve) => setTimeout(resolve, 100));\r\n return this.scrollToElementWithRetry(elementId);\r\n }\r\n\r\n console.error(\r\n `Element ${elementId} not found after ${this.maxRetries} attempts`\r\n );\r\n requestAnimationFrame(() => this.fallbackScroll());\r\n }\r\n\r\n private scrollAndFocus(element: HTMLElement) {\r\n element.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n inline: 'nearest',\r\n });\r\n\r\n const focusable = element.querySelector(\r\n 'input, select, textarea, button, [tabindex]:not([tabindex=\"-1\"])'\r\n ) as HTMLElement;\r\n focusable?.focus();\r\n }\r\n\r\n private fallbackScroll() {\r\n const pageElement = document.querySelector(\r\n `.page-${this.currentPageIndex}`\r\n );\r\n pageElement?.scrollIntoView({ behavior: 'auto' });\r\n }\r\n\r\n private debounce(func: () => void, delay: number) {\r\n clearTimeout(this.debounceTimer);\r\n this.debounceTimer = setTimeout(func, delay);\r\n }\r\n // extractId(message: string): string | null {\r\n // const match = message.match(/[0-9a-fA-F-]{36}/);\r\n // return match ? match[0] : null;\r\n // }\r\n\r\n // removeId(message: string): string {\r\n // return message.replace(/[0-9a-fA-F-]{36}$/, \"\").trim();\r\n // }\r\n\r\n findQuestionPageIndex(questionErrors: Map<string, string>): void {\r\n for (let pageIndex = 0; pageIndex < this.pages.length; pageIndex++) {\r\n const page = this.pages[pageIndex];\r\n\r\n for (const row of page.rows) {\r\n for (const element of row.grid) {\r\n this.checkAndStoreInvalidQuestions(\r\n element,\r\n questionErrors,\r\n pageIndex\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private checkAndStoreInvalidQuestions(\r\n element: any,\r\n questionErrors: Map<string, string>,\r\n pageIndex: number\r\n ): void {\r\n if (element.element.id && questionErrors.has(element.element.id)) {\r\n this.validationService.setInvalid(\r\n element.element.id,\r\n questionErrors.get(element.element.id)!,\r\n pageIndex\r\n );\r\n }\r\n\r\n // Handle subforms recursively\r\n if (element.entityType === 'SUBFORM' && element.element.rows) {\r\n for (const row of element.element.rows) {\r\n for (const gridItem of row.grid) {\r\n this.checkAndStoreInvalidQuestions(\r\n gridItem,\r\n questionErrors,\r\n pageIndex\r\n );\r\n }\r\n }\r\n }\r\n if (\r\n (element.entityType === 'QUESTION_GROUP' ||\r\n element.entityType === 'MULTIFIELD') &&\r\n element.element.rows\r\n ) {\r\n for (const row of element.element.rows) {\r\n for (const gridItem of row.grid) {\r\n this.checkAndStoreInvalidQuestions(\r\n gridItem,\r\n questionErrors,\r\n pageIndex\r\n );\r\n }\r\n }\r\n }\r\n\r\n // Handle logic-based conditions recursively\r\n if (element.entityType === 'QUESTION' && element.element.childLogics) {\r\n for (const logic of element.element.childLogics) {\r\n if (logic.showLogic) {\r\n for (const row of logic.rows) {\r\n for (const gridItem of row.grid) {\r\n this.checkAndStoreInvalidQuestions(\r\n gridItem,\r\n questionErrors,\r\n pageIndex\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n focusQuestionElement(container: HTMLElement) {\r\n // Find first focusable element within the question\r\n const focusable = container.querySelector(\r\n 'input, select, textarea, [tabindex]'\r\n );\r\n if (focusable) {\r\n (focusable as HTMLElement).focus();\r\n } else {\r\n container.focus();\r\n }\r\n }\r\n validateForm(jsonData: any): {\r\n isValid: boolean;\r\n message: string;\r\n pageIndex: number | 0;\r\n } {\r\n const validateQuestions = (\r\n formElements: any[]\r\n ): { isValid: boolean; message: string; pageIndex: number | 0 } => {\r\n for (let element of formElements) {\r\n if (element.entityType === 'QUESTION') {\r\n const required = element.element.required;\r\n const answer = element.element.answer;\r\n const validation = element.element.validation;\r\n const show = element.show;\r\n if (element.element.formElement.elementType === 'FILE_PICKER') {\r\n const attachment = element.element.attachments;\r\n if (required && show) {\r\n if (\r\n (!answer || answer?.length === 0) &&\r\n (!attachment || attachment?.length == 0)\r\n ) {\r\n this.inValidQuestions.set(\r\n element.element.id,\r\n 'Required file question has no files uploaded.'\r\n );\r\n return {\r\n isValid: false,\r\n message: `Form is invalid - Required file question ${element.element.questionNumber} has no files uploaded.`,\r\n pageIndex: 0,\r\n };\r\n }\r\n }\r\n } else {\r\n if (required && show) {\r\n if (\r\n answer === null ||\r\n answer === undefined ||\r\n (typeof answer === 'string' && answer.trim() === '') ||\r\n (typeof answer === 'object' && Object.keys(answer).length === 0)\r\n ) {\r\n this.inValidQuestions.set(\r\n element.element.id,\r\n 'This is a required question'\r\n );\r\n return {\r\n isValid: false,\r\n message: `Form is invalid - Question ${element.element.questionNumber} is required but no answer provided.`,\r\n pageIndex: 0,\r\n };\r\n } else if (validation === false) {\r\n this.inValidQuestions.set(\r\n element.element.id,\r\n element.element.validationMessage\r\n );\r\n return {\r\n isValid: false,\r\n message: `Form is invalid - Question ${element.element.questionNumber} is required but validation is false.`,\r\n pageIndex: 0,\r\n };\r\n }\r\n } else if (!required && answer && Object.keys(answer).length > 0) {\r\n if (validation === false) {\r\n this.inValidQuestions.set(\r\n element.element.id,\r\n element.element.validationMessage\r\n );\r\n return {\r\n isValid: false,\r\n message: `Form is invalid - Question ${element.element.questionNumber} is not required but answer provided with validation false.`,\r\n pageIndex: 0,\r\n };\r\n }\r\n }\r\n }\r\n if (element.element.childLogics) {\r\n for (let logic of element.element.childLogics) {\r\n if (logic.showLogic) {\r\n const result = validateQuestions(logic.rows);\r\n if (!result.isValid) return result;\r\n }\r\n }\r\n }\r\n } else if (element.entityType === 'SUBFORM' && !element.element.deleted) {\r\n if(element.element.property?.subFormStructure == 'single'){\r\n for(let row of element.element.rows){\r\n const result = validateQuestions(row.grid);\r\n if (!result.isValid) return result;\r\n }\r\n } else {\r\n this.validateSubForm(element);\r\n }\r\n } else if (\r\n (element.entityType === 'QUESTION_GROUP' ||\r\n element.entityType === 'MULTIFIELD') &&\r\n element.element.rows\r\n ) {\r\n for (const row of element.element.rows) {\r\n const result = validateQuestions(row.grid);\r\n if (!result.isValid && element.entityType != 'MULTIFIELD')\r\n return result;\r\n }\r\n }\r\n }\r\n return { isValid: true, message: '', pageIndex: 0 };\r\n };\r\n\r\n for (let pageIndex = 0; pageIndex < jsonData.length; pageIndex++) {\r\n const page = jsonData[pageIndex];\r\n for (let row of page.rows) {\r\n const result = validateQuestions(row.grid);\r\n this.inValidQuestions.forEach((message: string, id: string) => {\r\n this.validationService.setInvalid(id, message, pageIndex);\r\n });\r\n this.inValidQuestions = new Map<string, string>();\r\n // if (!result.isValid) {\r\n // return {\r\n // isValid: false,\r\n // message: `Page ${pageIndex + 1}: ${result.message}`,\r\n // pageIndex: pageIndex,\r\n // };\r\n // }\r\n }\r\n }\r\n this.currentPageIndex = jsonData.length - 1;\r\n if (this.validationService.getFirstInvalid()) {\r\n this.navigateToFirstError();\r\n return {\r\n isValid: false,\r\n message: `Page`,\r\n pageIndex: 0,\r\n };\r\n }\r\n return {\r\n isValid: true,\r\n message: 'Form is valid.',\r\n pageIndex: 0,\r\n };\r\n }\r\n\r\n validateSubForm(element: any) {\r\n if (element.entityType !== 'SUBFORM') {\r\n return;\r\n }\r\n \r\n const submissions = element.element?.submissions || [];\r\n \r\n /* ------------------------------\r\n * 1️⃣ Subform required but no submission\r\n * ------------------------------ */\r\n if (element.element?.required && submissions.length === 0) {\r\n this.inValidQuestions.set(\r\n element.element.id,\r\n 'At least one submission is required'\r\n );\r\n return; // nothing else to validate\r\n }\r\n \r\n submissions.forEach((submission: any, submissionIndex: number) => {\r\n const answers = submission.answers || [];\r\n \r\n /* ------------------------------\r\n * 2️⃣ Submission exists but no answers\r\n * ------------------------------ */\r\n const hasAnyAnswer = answers.some(\r\n (a: any) =>\r\n a.answer !== null &&\r\n a.answer !== undefined &&\r\n a.answer !== '' &&\r\n !(Array.isArray(a.answer) && a.answer.length === 0)\r\n );\r\n \r\n if (element.element?.required && !hasAnyAnswer) {\r\n const key = `${element.element.id}`;\r\n this.inValidQuestions.set(\r\n key,\r\n 'At least one answer is required in the subform'\r\n );\r\n return;\r\n }\r\n \r\n /* ------------------------------\r\n * 3️⃣ Existing question-level validations\r\n * ------------------------------ */\r\n answers.forEach((answerObj: any) => {\r\n const question = this.findQuestionById(\r\n element.element.rows,\r\n answerObj.questionId\r\n );\r\n \r\n const ans = answerObj.answer;\r\n \r\n // Required question check\r\n if ((question?.required || answerObj.required) &&\r\n (ans === '' || ans === null || ans === undefined || ans?.length === 0)) {\r\n const key = `${submissionIndex}-${question.id}`;\r\n this.inValidQuestions.set(key, 'This is a required question');\r\n }\r\n \r\n // Email validation\r\n if (question?.formElement?.elementType === 'EMAIL' && ans) {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n if (!emailRegex.test(ans)) {\r\n const key = `${submissionIndex}-${question.id}`;\r\n this.inValidQuestions.set(\r\n key,\r\n 'Please enter a valid email address'\r\n );\r\n }\r\n }\r\n });\r\n });\r\n }\r\n \r\n\r\n // 🔍 Helper: find question definition inside rows\r\n private findQuestionById(rows: any[], questionId: string): any {\r\n for (const row of rows) {\r\n for (const gridElement of row.grid) {\r\n if (\r\n gridElement.entityType === 'QUESTION' &&\r\n gridElement.element.id === questionId\r\n ) {\r\n return gridElement.element;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n updateSubFormWithSubmissions(event: any) {\r\n this.updateSubForm(this.pages, event);\r\n }\r\n\r\n updateSubForm = (pages: any[], updatedSubForm: any) => {\r\n pages.forEach((page) => {\r\n page.rows.forEach((row: any) => {\r\n row.grid.forEach((element: any) => {\r\n if (\r\n element.entityType === 'SUBFORM' &&\r\n element.element.id === updatedSubForm.id\r\n ) {\r\n // Update the existing subform with the new data\r\n element.element = updatedSubForm;\r\n } else if (\r\n element.entityType === 'SUBFORM' &&\r\n element.element.id !== updatedSubForm.formId\r\n ) {\r\n // Handle multiple subforms logic here if needed\r\n } else if (\r\n element.entityType === 'QUESTION' &&\r\n element.element.childLogics\r\n ) {\r\n // Recursively update child logics\r\n // element.element.childLogics.forEach((logic: any) => {\r\n // if (logic.showLogic) {\r\n // this.updateSubForm(logic.rows, updatedSubForm);\r\n // }\r\n // });\r\n }\r\n });\r\n });\r\n });\r\n };\r\n\r\n extractGroupedWebhookData(webhooks: any[]): {\r\n headers: Record<string, string>;\r\n params: Record<string, string>;\r\n pathVariables: Record<string, string>;\r\n requestBodies: Record<string, string>;\r\n } {\r\n const result: {\r\n headers: Record<string, string>;\r\n params: Record<string, string>;\r\n pathVariables: Record<string, string>;\r\n requestBodies: Record<string, string>;\r\n } = {\r\n headers: {},\r\n params: {},\r\n pathVariables: {},\r\n requestBodies: {},\r\n };\r\n\r\n for (const webhook of webhooks ?? []) {\r\n for (const item of webhook?.headers ?? []) {\r\n const value = this.getValueFromStorage(item.valueSource, item.inputValue);\r\n if (value !== null) {\r\n result.headers[item.keyName] = value;\r\n }\r\n }\r\n\r\n for (const item of webhook?.params ?? []) {\r\n const value = this.getValueFromStorage(item.valueSource, item.inputValue);\r\n if (value !== null) {\r\n result.params[item.keyName] = value;\r\n }\r\n }\r\n\r\n for (const item of webhook?.pathVariables ?? []) {\r\n const value = this.getValueFromStorage(item.valueSource, item.inputValue);\r\n if (value !== null) {\r\n result.pathVariables[item.keyName] = value;\r\n }\r\n }\r\n\r\n for (const item of webhook?.requestBodies ?? []) {\r\n const value = this.getValueFromStorage(item.valueSource, item.inputValue);\r\n if (value !== null) {\r\n result.requestBodies[item.keyName] = value;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getValueFromStorage(\r\n source: 'LOCAL_STORAGE' | 'SESSION_STORAGE',\r\n key: string\r\n ): string | null {\r\n if (source === 'LOCAL_STORAGE') return localStorage.getItem(key);\r\n if (source === 'SESSION_STORAGE') return sessionStorage.getItem(key);\r\n return null;\r\n }\r\n\r\n cancelled(){\r\n this.cancel.emit();\r\n }\r\n}\r\n","<div class=\"outer-container\">\r\n\r\n<ng-container *ngIf=\"isLoadingPages\">\r\n <ngx-skeleton-loader count=\"5\"></ngx-skeleton-loader>\r\n</ng-container>\r\n\r\n <div class=\"head container\" *ngIf=\"!skipMargin\">\r\n <lib-header [name]=\"name\" [skipMargin]=\"skipMargin\"></lib-header>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"body\" [ngClass]=\"{ 'skip-margin': skipMargin,container: !skipMargin}\">\r\n\r\n <lib-submission-container [parentQuestionAnswers]=\"parentQuestionAnswers\"\r\n *ngIf=\"parentQuestionAnswers\"></lib-submission-container>\r\n\r\n <lib-navigation-tabs\r\n *ngIf=\"navigation == 'TAB'\"\r\n [skipMargin]=\"skipMargin\"\r\n [skipValidation]=\"skipValidation\"\r\n [pages]=\"pages\"\r\n [currentPageIndex]=\"currentPageIndex\"\r\n (pageChanged)=\"setCurrentPage($event)\"\r\n (submitEmit)=\"submitForm()\"\r\n [pageDetails]=\"pageDetails\"\r\n [eligibleForSubmission]=\"eligibleForSubmission\"\r\n [edit]=\"edit\"\r\n [acceptedLanguage] = \"acceptedLanguage\"\r\n [isActionTriggered]=\"isActionTriggered\"\r\n [primaryColor]=\"primaryColor\"\r\n [secondaryColor]=\"secondaryColor\"\r\n [markAllQuestionsAsRequired]=\"markAllQuestionsAsRequired\"\r\n [submissionInProgress]=\"submissionInProgress\"\r\n [submissionInDraft]=\"submissionInDraft\"\r\n [showCancelButton]=\"showCancelButton\"\r\n [submissionProgress]=\"submissionProgress\"\r\n [animatedDots]=\"animatedDots\"\r\n [currentStep]=\"currentStep\"\r\n (saveAsDraftEmit)=\"saveAsDraft()\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n (rowSetIndex)=\"loadMoreData($event)\"\r\n (cancel)=\"cancelled()\"\r\n ></lib-navigation-tabs>\r\n <lib-next-prev-navigation\r\n *ngIf=\"navigation == 'NEXT_AND_PREVIOUS_BUTTON'\"\r\n [skipMargin]=\"skipMargin\"\r\n [currentPageIndex]=\"currentPageIndex\"\r\n [pageDetails]=\"pageDetails\"\r\n (rowSetIndex)=\"loadMoreData($event)\"\r\n [pages]=\"pages\"\r\n [previousPage]=\"previousPage\"\r\n [isActionTriggered]=\"isActionTriggered\"\r\n [currentPage]=\"currentPage\"\r\n [primaryColor]=\"primaryColor\"\r\n [secondaryColor]=\"secondaryColor\"\r\n [nextPage]=\"nextPage\"\r\n (navigateNext)=\"navigateToNextPage()\"\r\n (navigatePrevious)=\"navigateToPreviousPage()\"\r\n [acceptedLanguage] = \"acceptedLanguage\"\r\n (submitEmit)=\"submitForm()\"\r\n (saveAsDraftEmit)=\"saveAsDraft()\"\r\n [edit]=\"edit\"\r\n [eligibleForSubmission]=\"eligibleForSubmission\"\r\n [submissionInProgress]=\"submissionInProgress\"\r\n [submissionInDraft]=\"submissionInDraft\"\r\n [showCancelButton]=\"showCancelButton\"\r\n [submissionProgress]=\"submissionProgress\"\r\n [animatedDots]=\"animatedDots\"\r\n [currentStep]=\"currentStep\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n (cancel)=\"cancelled()\"\r\n [skipValidation]=\"skipValidation\"\r\n ></lib-next-prev-navigation>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { DataService } from '../services/data.service';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { environment } from '../environment/environment';\r\nimport { SubmitFormComponent } from '../form-submission/submit-form/submit-form.component';\r\n\r\n@Component({\r\n selector: 'lib-formSubmission',\r\n templateUrl: './form-submission.component.html',\r\n styleUrls: ['./form-submission.component.scss'],\r\n})\r\nexport class FormSubmissionComponent implements OnInit {\r\n @Input() formData: any = {};\r\n @Input() edit: boolean = false;\r\n @Input() skipValidation: boolean = false; // New input to control validation skipping\r\n @Input() submissionId: string = '';\r\n @Output() submitForm: EventEmitter<string> = new EventEmitter<string>();\r\n @Output() apiCalled: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n @Output() cancel: EventEmitter<string> = new EventEmitter<string>();\r\n @Input() triggerFormSave: string | null = null;\r\n @ViewChild(SubmitFormComponent) submitFormComponent!: SubmitFormComponent;\r\n\r\n header: any;\r\n acceptedLanguage!: string;\r\n isActionTriggered: boolean = false;\r\n\r\n constructor(\r\n private dataService: DataService,\r\n @Inject(DOCUMENT) private document: Document\r\n ) {}\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['formData']) {\r\n const newFormData = changes['formData'].currentValue;\r\n\r\n this.dataService.setHeader(newFormData?.headers);\r\n\r\n // 🔹 Add your duplicateSubmission logic here\r\n if (newFormData?.duplicateSubmission) {\r\n this.dataService.setSubformData({\r\n moduleName: newFormData.moduleName,\r\n duplicateSubmission: newFormData.duplicateSubmission,\r\n });\r\n }\r\n }\r\n\r\n if (changes['triggerFormSave'] && changes['triggerFormSave'].currentValue) {\r\n const action = changes['triggerFormSave'].currentValue;\r\n\r\n if (action === 'submit' || action === 'draft') {\r\n this.isActionTriggered = true;\r\n }\r\n if (!this.submitFormComponent) {\r\n return;\r\n }\r\n\r\n switch (action) {\r\n case 'submit':\r\n this.submitFormComponent.submitForm();\r\n break;\r\n\r\n case 'draft':\r\n this.submitFormComponent.saveAsDraft();\r\n break;\r\n\r\n default:\r\n console.warn(action, 'action not defined');\r\n }\r\n }\r\n }\r\n\r\n get showCancelButton(): boolean {\r\n return this.cancel.observed ?? false;\r\n }\r\n\r\n ngOnInit() {\r\n this.dataService.setApiUrl(this.formData.apiurl);\r\n this.dataService.setHeader(this.formData.headers);\r\n\r\n this.dataService.header$.subscribe((data) => {\r\n this.header = data;\r\n this.setHtmlDirection(this.header.acceptedLanguage);\r\n });\r\n }\r\n\r\n setHtmlDirection(language: string) {\r\n const htmlTag = this.document.getElementsByTagName(\r\n 'html'\r\n )[0] as HTMLHtmlElement;\r\n\r\n if (language === 'ara' || language === 'ar') {\r\n environment.htmlDirection = 'rtl';\r\n } else {\r\n environment.htmlDirection = 'ltr';\r\n }\r\n\r\n htmlTag.dir = environment.htmlDirection;\r\n }\r\n\r\n submit(event: any) {\r\n this.submitForm.emit(event);\r\n }\r\n\r\n getFormApiCalled(event: any) {\r\n this.apiCalled.emit(true);\r\n }\r\n\r\n cancelled(){\r\n this.cancel.emit();\r\n }\r\n}\r\n","<lib-submit-form\r\n [moduleName]=\"formData.moduleName\"\r\n [submissionId]=\"submissionId\"\r\n [edit]=\"edit\"\r\n [acceptedLanguage] = \"formData.headers.acceptedLanguage\"\r\n [skipMargin]=\"formData.skipMargin\"\r\n [skipValidation]=\"skipValidation\"\r\n [isActionTriggered]=\"isActionTriggered\"\r\n [navigateTo]=\"formData.navigateTo\"\r\n [country]=\"formData.country\"\r\n [showCancelButton]=\"showCancelButton\"\r\n (submit)=\"submit($event)\"\r\n (apiCalled)=\"getFormApiCalled($event)\"\r\n (cancel)=\"cancelled()\"\r\n></lib-submit-form>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CheckBoxFieldsComponent } from './check-box-fields/check-box-fields.component';\r\nimport { DateTimeFieldsComponent } from './date-time-fields/date-time-fields.component';\r\nimport { DropDownFieldsComponent } from './drop-down-fields/drop-down-fields.component';\r\nimport { FilePickerFieldsComponent } from './file-picker-fields/file-picker-fields.component';\r\nimport { LocationFieldsComponent } from './location-fields/location-fields.component';\r\nimport { RadioButtonFieldsComponent } from './radio-button-fields/radio-button-fields.component';\r\nimport { RichTextEditorFieldsComponent } from './rich-text-editor-fields/rich-text-editor-fields.component';\r\nimport { SelectionMatrixFieldsComponent } from './selection-matrix-fields/selection-matrix-fields.component';\r\nimport { SignatureFieldsComponent } from './signature-fields/signature-fields.component';\r\nimport { SliderFieldsComponent } from './slider-fields/slider-fields.component';\r\nimport { TermsAndConditionFieldsComponent } from './terms-and-condition-fields/terms-and-condition-fields.component';\r\nimport { TextAreaFieldsComponent } from './text-area-fields/text-area-fields.component';\r\nimport { TextFieldsComponent } from './text-fields/text-fields.component';\r\nimport { ToggleSwitchFieldsComponent } from './toggle-switch-fields/toggle-switch-fields.component';\r\nimport { UrlFieldsComponent } from './url-fields/url-fields.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MailFieldsComponent } from './mail-fields/mail-fields.component';\r\nimport { MobileFieldsComponent } from './mobile-fields/mobile-fields.component';\r\nimport { NumberFieldsComponent } from './number-fields/number-fields.component';\r\nimport { PasswordFieldsComponent } from './password-fields/password-fields.component';\r\nimport {MatSliderModule} from \"@angular/material/slider\";\r\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\r\n\r\n\r\nimport { GoogleMapsModule } from '@angular/google-maps';\r\nimport { DropdownModule } from '@piserve-tech/drop-down';\r\nimport { FilePreviewModule } from '@piserve-tech/file-preview';\r\nimport { SectionFieldsComponent } from './section-fields/section-fields.component';\r\nimport { DocUploadModule } from '@piserve-tech/file-upload';\r\nimport { NgxMaterialTimepickerModule } from 'ngx-material-timepicker';\r\nimport { QuillModule } from 'ngx-quill';\r\nimport { AggregateFunctionComponent } from './aggregate-function/aggregate-function.component';\r\nimport { CurrencyFieldsComponent } from './currency-fields/currency-fields.component';\r\nimport { HiddenFieldComponent } from './hidden-field/hidden-field.component';\r\nimport { IframeFieldsComponent } from './iframe-fields/iframe-fields.component';\r\n\r\n\r\n\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n CheckBoxFieldsComponent,\r\n DateTimeFieldsComponent,\r\n DropDownFieldsComponent,\r\n FilePickerFieldsComponent,\r\n LocationFieldsComponent,\r\n RadioButtonFieldsComponent,\r\n RichTextEditorFieldsComponent,\r\n SelectionMatrixFieldsComponent,\r\n SignatureFieldsComponent,\r\n SliderFieldsComponent,\r\n TermsAndConditionFieldsComponent,\r\n TextAreaFieldsComponent,\r\n TextFieldsComponent,\r\n ToggleSwitchFieldsComponent,\r\n UrlFieldsComponent,\r\n MailFieldsComponent,\r\n MobileFieldsComponent,\r\n NumberFieldsComponent,\r\n PasswordFieldsComponent,\r\n SectionFieldsComponent,\r\n AggregateFunctionComponent,\r\n CurrencyFieldsComponent,\r\n HiddenFieldComponent,\r\n IframeFieldsComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatSliderModule,\r\n BsDatepickerModule.forRoot(),\r\n DropdownModule,\r\n DocUploadModule,\r\n GoogleMapsModule,\r\n FilePreviewModule,\r\n NgxMaterialTimepickerModule,\r\n QuillModule\r\n ],\r\n exports: [\r\n CheckBoxFieldsComponent,\r\n DateTimeFieldsComponent,\r\n DropDownFieldsComponent,\r\n FilePickerFieldsComponent,\r\n LocationFieldsComponent,\r\n MailFieldsComponent,\r\n MobileFieldsComponent,\r\n NumberFieldsComponent,\r\n PasswordFieldsComponent,\r\n RadioButtonFieldsComponent,\r\n RichTextEditorFieldsComponent,\r\n SelectionMatrixFieldsComponent,\r\n SignatureFieldsComponent,\r\n SliderFieldsComponent,\r\n TermsAndConditionFieldsComponent,\r\n TextAreaFieldsComponent,\r\n TextFieldsComponent,\r\n ToggleSwitchFieldsComponent,\r\n UrlFieldsComponent,\r\n SectionFieldsComponent,\r\n AggregateFunctionComponent,\r\n CurrencyFieldsComponent,\r\n HiddenFieldComponent,\r\n IframeFieldsComponent\r\n ]\r\n})\r\nexport class FormFieldsModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RecursiveLogicComponent } from '../question/recursive-logic/recursive-logic.component';\r\nimport { QuestionComponent } from '../question/question/question.component';\r\nimport { SubFormComponent } from '../question/sub-form/sub-form.component';\r\nimport { FormElementsComponent } from '../question/form-elements/form-elements.component';\r\n\r\nimport { FormFieldsModule } from '../form-fields/form-fields.module';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MultipleSubformComponent } from '../question/multiple-subform/multiple-subform.component';\r\nimport { SubmissionModalComponent } from '../sub-form/submission-modal/submission-modal.component';\r\nimport { QuestionGroupComponent } from '../question/question-group/question-group.component';\r\nimport { InlineMultipleSubformComponent } from '../question/inline-multiple-subform/inline-multiple-subform.component';\r\nimport { MultifieldsComponent } from '../question/multifields/multifields.component';\r\nimport { CardSubformComponent } from '../question/card-subform/card-subform.component';\r\nimport { QuillModule } from 'ngx-quill';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@NgModule({\r\n declarations: [\r\n RecursiveLogicComponent,\r\n QuestionComponent,\r\n SubFormComponent,\r\n FormElementsComponent,\r\n MultipleSubformComponent, \r\n SubmissionModalComponent, \r\n QuestionGroupComponent,\r\n InlineMultipleSubformComponent,\r\n MultifieldsComponent,\r\n CardSubformComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormFieldsModule,\r\n MatDialogModule,\r\n MatTableModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n QuillModule,\r\n FormsModule,\r\n NgbModule\r\n ],\r\n exports: [\r\n RecursiveLogicComponent,\r\n QuestionComponent,\r\n SubFormComponent,\r\n FormElementsComponent,\r\n QuestionGroupComponent,\r\n InlineMultipleSubformComponent,\r\n MultifieldsComponent,\r\n CardSubformComponent\r\n ]\r\n})\r\nexport class SharedModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SubmitFormComponent } from './submit-form/submit-form.component';\r\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\r\nimport { HeaderComponent } from './header/header.component';\r\nimport { NavigationTabsComponent } from './navigation-tabs/navigation-tabs.component';\r\nimport { NextPrevNavigationComponent } from './next-prev-navigation/next-prev-navigation.component';\r\nimport { ToastrModule } from 'ngx-toastr';\r\nimport { SubmissionContainerComponent } from './submission-container/submission-container.component';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\r\nimport { MatDialogModule } from \"@angular/material/dialog\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { SaveDraftModalComponent } from './save-as-draft/saveDraftModalComponent ';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n SubmitFormComponent,\r\n HeaderComponent,\r\n NavigationTabsComponent,\r\n NextPrevNavigationComponent,\r\n SubmissionContainerComponent,\r\n SaveDraftModalComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n BsDatepickerModule.forRoot(),\r\n ToastrModule,\r\n SharedModule,\r\n InfiniteScrollModule,\r\n NgxSkeletonLoaderModule,\r\n MatDialogModule,\r\n MatIconModule\r\n],\r\n exports: [SubmitFormComponent, NextPrevNavigationComponent]\r\n})\r\nexport class FormSubmitModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { FormSubmissionComponent } from './form-submission.component';\r\n// import { DropdownModule } from '@piserve-tech/drop-down';\r\nimport { FilePreviewModule } from '@piserve-tech/file-preview';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { FormFieldsModule } from '../form-fields/form-fields.module';\r\nimport { FormSubmitModule } from '../form-submission/form-submission.module';\r\nimport { DropdownModule } from '@piserve-tech/drop-down';\r\nimport { ToastrModule } from 'ngx-toastr';\r\nimport { DocUploadModule } from '@piserve-tech/file-upload';\r\nimport { SharedModule } from '../shared/shared.module';\r\n\r\n@NgModule({\r\n declarations: [FormSubmissionComponent],\r\n imports: [\r\n DropdownModule,\r\n FilePreviewModule,\r\n DocUploadModule,\r\n FormsModule,\r\n MatTabsModule,\r\n FormFieldsModule,\r\n FormSubmitModule,\r\n ToastrModule.forRoot({\r\n positionClass: 'toast-bottom-left',\r\n }),\r\n SharedModule\r\n ],\r\n exports: [FormSubmissionComponent],\r\n})\r\nexport class FormSubmissionModule {}\r\n","/*\n * Public API Surface of form-submission\n */\n\nexport * from './lib/form-submission.service';\nexport * from './lib/form-submission.component';\nexport * from './lib/form-submission.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ValidationService","i2.DataService","i1.FormService","i2.ValidationService","i3.ElementTrackerService","i4.ScoreCalculationService","i5.WhenClauseService","i6","i1","i3.ValidationService","i4.ElementTrackerService","i7","i2.ElementTrackerService","i3.DataService","i4.WhenClauseService","i5","i2","i3","i4","i1.CountryService","i3.AggregationFunctionService","i3.WhenClauseService","i1.ElementTrackerService","i2.CheckBoxFieldsComponent","i3.DateTimeFieldsComponent","i4.DropDownFieldsComponent","i5.FilePickerFieldsComponent","i6.LocationFieldsComponent","i7.MailFieldsComponent","i8.MobileFieldsComponent","i9.NumberFieldsComponent","i10.PasswordFieldsComponent","i11.RadioButtonFieldsComponent","i12.RichTextEditorFieldsComponent","i13.SelectionMatrixFieldsComponent","i14.SignatureFieldsComponent","i15.SliderFieldsComponent","i16.TermsAndConditionFieldsComponent","i17.TextAreaFieldsComponent","i18.TextFieldsComponent","i19.ToggleSwitchFieldsComponent","i20.UrlFieldsComponent","i21.AggregateFunctionComponent","i22.CurrencyFieldsComponent","i23.HiddenFieldComponent","i24.IframeFieldsComponent","uuidv4","i4.CheckBoxFieldsComponent","i5.DateTimeFieldsComponent","i6.DropDownFieldsComponent","i7.FilePickerFieldsComponent","i8.LocationFieldsComponent","i9.MailFieldsComponent","i10.MobileFieldsComponent","i11.NumberFieldsComponent","i12.PasswordFieldsComponent","i13.RadioButtonFieldsComponent","i14.RichTextEditorFieldsComponent","i15.SelectionMatrixFieldsComponent","i16.SignatureFieldsComponent","i17.SliderFieldsComponent","i18.TermsAndConditionFieldsComponent","i19.TextAreaFieldsComponent","i20.TextFieldsComponent","i21.ToggleSwitchFieldsComponent","i22.UrlFieldsComponent","i23.SectionFieldsComponent","i24.AggregateFunctionComponent","i25.CurrencyFieldsComponent","i26.HiddenFieldComponent","i27.IframeFieldsComponent","i3.ScoreCalculationService","i1.ScoreCalculationService","i5.CheckBoxFieldsComponent","i6.DateTimeFieldsComponent","i7.DropDownFieldsComponent","i8.FilePickerFieldsComponent","i9.LocationFieldsComponent","i10.MailFieldsComponent","i11.MobileFieldsComponent","i12.NumberFieldsComponent","i13.PasswordFieldsComponent","i14.RadioButtonFieldsComponent","i15.RichTextEditorFieldsComponent","i16.SelectionMatrixFieldsComponent","i17.SignatureFieldsComponent","i18.SliderFieldsComponent","i19.TermsAndConditionFieldsComponent","i20.TextAreaFieldsComponent","i21.TextFieldsComponent","i22.ToggleSwitchFieldsComponent","i23.UrlFieldsComponent","i27","i2.WhenClauseService","i16.SliderFieldsComponent","i17.TermsAndConditionFieldsComponent","i18.TextAreaFieldsComponent","i19.TextFieldsComponent","i20.ToggleSwitchFieldsComponent","i21.UrlFieldsComponent","i22.SectionFieldsComponent","i23.AggregateFunctionComponent","i24.CurrencyFieldsComponent","i25.HiddenFieldComponent","i26.IframeFieldsComponent","i1.SubformCopyService","i4.FormService","i6.ValidationService","i7.ScoreCalculationService","i8","i9.CheckBoxFieldsComponent","i10.DateTimeFieldsComponent","i11.DropDownFieldsComponent","i12.FilePickerFieldsComponent","i13.LocationFieldsComponent","i14.MailFieldsComponent","i15.MobileFieldsComponent","i16.NumberFieldsComponent","i17.PasswordFieldsComponent","i18.RadioButtonFieldsComponent","i19.RichTextEditorFieldsComponent","i20.SelectionMatrixFieldsComponent","i21.SignatureFieldsComponent","i22.SliderFieldsComponent","i23.TermsAndConditionFieldsComponent","i24.TextAreaFieldsComponent","i25.TextFieldsComponent","i26.ToggleSwitchFieldsComponent","i27.UrlFieldsComponent","i28.SectionFieldsComponent","i29.AggregateFunctionComponent","i30.CurrencyFieldsComponent","i31.HiddenFieldComponent","i32.IframeFieldsComponent","i33","i34","i35.MultipleSubformComponent","i36.InlineMultipleSubformComponent","i37.CardSubformComponent","i1.WhenClauseService","i3.CheckBoxFieldsComponent","i4.DateTimeFieldsComponent","i5.DropDownFieldsComponent","i6.FilePickerFieldsComponent","i7.LocationFieldsComponent","i8.MailFieldsComponent","i9.MobileFieldsComponent","i10.NumberFieldsComponent","i11.PasswordFieldsComponent","i12.RadioButtonFieldsComponent","i13.RichTextEditorFieldsComponent","i14.SelectionMatrixFieldsComponent","i15.SignatureFieldsComponent","i22.AggregateFunctionComponent","i23.CurrencyFieldsComponent","i24.HiddenFieldComponent","i25.IframeFieldsComponent","i21.CurrencyFieldsComponent","i22.HiddenFieldComponent","i3.SectionFieldsComponent","i4.QuestionComponent","i5.SubFormComponent","i6.QuestionGroupComponent","i7.MultifieldsComponent","i2.RecursiveLogicComponent","i1.FormValidationService","i3.FormElementsComponent","i2.FormElementsComponent","mapper.mapPublicFormToModel","mapper.mapPageToModel","i4.DataService","i5.RecaptchaService","i7.ElementTrackerService","i8.FormValidationService","i9.AggregationFunctionService","i10.ScoreCalculationService","i11","i12.WhenClauseService","i13","i15.HeaderComponent","i16.NavigationTabsComponent","i17.NextPrevNavigationComponent","i18.SubmissionContainerComponent","i2.SubmitFormComponent"],"mappings":"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"}