@piserve-tech/form-submission 1.3.314 → 1.3.316

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 (443) hide show
  1. package/README.md +24 -24
  2. package/ng-package.json +30 -0
  3. package/package.json +33 -46
  4. package/{assets → src/assets}/icons/close-sidebar-mark-icon.svg +3 -3
  5. package/{assets → src/assets}/icons/copy-icon.svg +5 -5
  6. package/{assets → src/assets}/icons/delete-icon.svg +7 -7
  7. package/{assets → src/assets}/icons/delete-no-outline-icon.svg +7 -7
  8. package/src/environment/environment.ts +6 -0
  9. package/src/form-fields/aggregate-function/aggregate-function.component.html +63 -0
  10. package/src/form-fields/aggregate-function/aggregate-function.component.scss +1 -0
  11. package/src/form-fields/aggregate-function/aggregate-function.component.spec.ts +21 -0
  12. package/src/form-fields/aggregate-function/aggregate-function.component.ts +148 -0
  13. package/src/form-fields/check-box-fields/check-box-fields.component.html +81 -0
  14. package/src/form-fields/check-box-fields/check-box-fields.component.scss +28 -0
  15. package/src/form-fields/check-box-fields/check-box-fields.component.spec.ts +21 -0
  16. package/src/form-fields/check-box-fields/check-box-fields.component.ts +538 -0
  17. package/src/form-fields/currency-fields/currency-fields.component.html +85 -0
  18. package/src/form-fields/currency-fields/currency-fields.component.scss +48 -0
  19. package/src/form-fields/currency-fields/currency-fields.component.spec.ts +21 -0
  20. package/src/form-fields/currency-fields/currency-fields.component.ts +589 -0
  21. package/src/form-fields/date-time-fields/date-time-fields.component.html +268 -0
  22. package/src/form-fields/date-time-fields/date-time-fields.component.scss +88 -0
  23. package/src/form-fields/date-time-fields/date-time-fields.component.spec.ts +21 -0
  24. package/src/form-fields/date-time-fields/date-time-fields.component.ts +693 -0
  25. package/src/form-fields/drop-down-fields/drop-down-fields.component.html +77 -0
  26. package/src/form-fields/drop-down-fields/drop-down-fields.component.scss +12 -0
  27. package/src/form-fields/drop-down-fields/drop-down-fields.component.spec.ts +21 -0
  28. package/src/form-fields/drop-down-fields/drop-down-fields.component.ts +698 -0
  29. package/src/form-fields/file-picker-fields/file-picker-fields.component.html +72 -0
  30. package/src/form-fields/file-picker-fields/file-picker-fields.component.scss +33 -0
  31. package/src/form-fields/file-picker-fields/file-picker-fields.component.spec.ts +21 -0
  32. package/src/form-fields/file-picker-fields/file-picker-fields.component.ts +256 -0
  33. package/src/form-fields/form-fields.module.ts +110 -0
  34. package/src/form-fields/hidden-field/hidden-field.component.scss +0 -0
  35. package/src/form-fields/hidden-field/hidden-field.component.spec.ts +21 -0
  36. package/src/form-fields/hidden-field/hidden-field.component.ts +156 -0
  37. package/src/form-fields/iframe-fields/iframe-fields.component.html +31 -0
  38. package/src/form-fields/iframe-fields/iframe-fields.component.scss +0 -0
  39. package/src/form-fields/iframe-fields/iframe-fields.component.spec.ts +21 -0
  40. package/src/form-fields/iframe-fields/iframe-fields.component.ts +225 -0
  41. package/src/form-fields/location-fields/location-fields.component.html +54 -0
  42. package/src/form-fields/location-fields/location-fields.component.scss +22 -0
  43. package/src/form-fields/location-fields/location-fields.component.spec.ts +21 -0
  44. package/src/form-fields/location-fields/location-fields.component.ts +83 -0
  45. package/src/form-fields/mail-fields/mail-fields.component.html +66 -0
  46. package/src/form-fields/mail-fields/mail-fields.component.scss +10 -0
  47. package/src/form-fields/mail-fields/mail-fields.component.spec.ts +21 -0
  48. package/src/form-fields/mail-fields/mail-fields.component.ts +127 -0
  49. package/src/form-fields/mobile-fields/mobile-fields.component.html +97 -0
  50. package/src/form-fields/mobile-fields/mobile-fields.component.scss +52 -0
  51. package/src/form-fields/mobile-fields/mobile-fields.component.spec.ts +21 -0
  52. package/src/form-fields/mobile-fields/mobile-fields.component.ts +310 -0
  53. package/src/form-fields/number-fields/number-fields.component.html +70 -0
  54. package/src/form-fields/number-fields/number-fields.component.scss +17 -0
  55. package/src/form-fields/number-fields/number-fields.component.spec.ts +21 -0
  56. package/src/form-fields/number-fields/number-fields.component.ts +256 -0
  57. package/src/form-fields/password-fields/password-fields.component.html +113 -0
  58. package/src/form-fields/password-fields/password-fields.component.scss +61 -0
  59. package/src/form-fields/password-fields/password-fields.component.spec.ts +21 -0
  60. package/src/form-fields/password-fields/password-fields.component.ts +273 -0
  61. package/src/form-fields/radio-button-fields/radio-button-fields.component.html +82 -0
  62. package/src/form-fields/radio-button-fields/radio-button-fields.component.scss +28 -0
  63. package/src/form-fields/radio-button-fields/radio-button-fields.component.spec.ts +21 -0
  64. package/src/form-fields/radio-button-fields/radio-button-fields.component.ts +391 -0
  65. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.html +67 -0
  66. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.scss +23 -0
  67. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.spec.ts +21 -0
  68. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.ts +145 -0
  69. package/src/form-fields/section-fields/section-fields.component.html +4 -0
  70. package/src/form-fields/section-fields/section-fields.component.scss +37 -0
  71. package/src/form-fields/section-fields/section-fields.component.spec.ts +21 -0
  72. package/src/form-fields/section-fields/section-fields.component.ts +25 -0
  73. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.html +93 -0
  74. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.scss +52 -0
  75. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.spec.ts +21 -0
  76. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.ts +155 -0
  77. package/src/form-fields/signature-fields/signature-fields.component.html +43 -0
  78. package/src/form-fields/signature-fields/signature-fields.component.scss +10 -0
  79. package/src/form-fields/signature-fields/signature-fields.component.spec.ts +21 -0
  80. package/src/form-fields/signature-fields/signature-fields.component.ts +25 -0
  81. package/src/form-fields/slider-fields/slider-fields.component.html +67 -0
  82. package/src/form-fields/slider-fields/slider-fields.component.scss +55 -0
  83. package/src/form-fields/slider-fields/slider-fields.component.spec.ts +21 -0
  84. package/src/form-fields/slider-fields/slider-fields.component.ts +63 -0
  85. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.html +52 -0
  86. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.scss +85 -0
  87. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.spec.ts +21 -0
  88. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.ts +62 -0
  89. package/src/form-fields/text-area-fields/text-area-fields.component.html +68 -0
  90. package/src/form-fields/text-area-fields/text-area-fields.component.scss +19 -0
  91. package/src/form-fields/text-area-fields/text-area-fields.component.spec.ts +21 -0
  92. package/src/form-fields/text-area-fields/text-area-fields.component.ts +166 -0
  93. package/src/form-fields/text-fields/text-fields.component.html +67 -0
  94. package/src/form-fields/text-fields/text-fields.component.scss +26 -0
  95. package/src/form-fields/text-fields/text-fields.component.spec.ts +21 -0
  96. package/src/form-fields/text-fields/text-fields.component.ts +248 -0
  97. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.html +70 -0
  98. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.scss +112 -0
  99. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.spec.ts +21 -0
  100. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.ts +74 -0
  101. package/src/form-fields/url-fields/url-fields.component.html +109 -0
  102. package/src/form-fields/url-fields/url-fields.component.scss +22 -0
  103. package/src/form-fields/url-fields/url-fields.component.spec.ts +21 -0
  104. package/src/form-fields/url-fields/url-fields.component.ts +123 -0
  105. package/src/form-submission/form-submission.module.ts +40 -0
  106. package/src/form-submission/header/header.component.html +6 -0
  107. package/src/form-submission/header/header.component.scss +26 -0
  108. package/src/form-submission/header/header.component.spec.ts +21 -0
  109. package/src/form-submission/header/header.component.ts +12 -0
  110. package/src/form-submission/navigation-tabs/navigation-tabs.component.html +134 -0
  111. package/src/form-submission/navigation-tabs/navigation-tabs.component.scss +200 -0
  112. package/src/form-submission/navigation-tabs/navigation-tabs.component.spec.ts +21 -0
  113. package/src/form-submission/navigation-tabs/navigation-tabs.component.ts +134 -0
  114. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.html +207 -0
  115. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.scss +208 -0
  116. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.spec.ts +21 -0
  117. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.ts +74 -0
  118. package/src/form-submission/save-as-draft/saveDraftModalComponent .ts +60 -0
  119. package/src/form-submission/save-as-draft/saveDraftModalComponent.html +33 -0
  120. package/src/form-submission/save-as-draft/saveDraftModalComponent.scss +195 -0
  121. package/src/form-submission/submission-container/submission-container.component.html +30 -0
  122. package/src/form-submission/submission-container/submission-container.component.scss +67 -0
  123. package/src/form-submission/submission-container/submission-container.component.spec.ts +21 -0
  124. package/src/form-submission/submission-container/submission-container.component.ts +14 -0
  125. package/src/form-submission/submit-form/submit-form.component.html +76 -0
  126. package/src/form-submission/submit-form/submit-form.component.scss +88 -0
  127. package/src/form-submission/submit-form/submit-form.component.spec.ts +21 -0
  128. package/src/form-submission/submit-form/submit-form.component.ts +1953 -0
  129. package/src/lib/form-submission.component.html +15 -0
  130. package/src/lib/form-submission.component.scss +1 -0
  131. package/src/lib/form-submission.component.ts +120 -0
  132. package/src/lib/form-submission.module.ts +31 -0
  133. package/src/lib/form-submission.service.spec.ts +16 -0
  134. package/src/lib/form-submission.service.ts +9 -0
  135. package/src/models/aggregate.model.ts +4 -0
  136. package/{models/answer.model.d.ts → src/models/answer.model.ts} +25 -23
  137. package/src/models/appearance.model.ts +64 -0
  138. package/{models/attachment.model.d.ts → src/models/attachment.model.ts} +6 -6
  139. package/{models/defaultAnswerEntry.model.d.ts → src/models/defaultAnswerEntry.model.ts} +7 -5
  140. package/{models/defaultAnswersModel.model.d.ts → src/models/defaultAnswersModel.model.ts} +5 -4
  141. package/{models/defaultQuestionAnswer.model.d.ts → src/models/defaultQuestionAnswer.model.ts} +6 -6
  142. package/src/models/elementOptionAPI.model.ts +13 -0
  143. package/src/models/elementOptionAPIData.model.ts +5 -0
  144. package/src/models/elementOptionDB.model.ts +9 -0
  145. package/src/models/elementOptionDBCriteria.model.ts +7 -0
  146. package/{models/emitters.model.d.ts → src/models/emitters.model.ts} +8 -8
  147. package/{models/enum/condition.enum.d.ts → src/models/enum/condition.enum.ts} +2 -2
  148. package/src/models/enum/elementType .enum.ts +22 -0
  149. package/src/models/enum/entityType.enum.ts +10 -0
  150. package/{models/formConfiguration.model.d.ts → src/models/formConfiguration.model.ts} +2 -2
  151. package/{models/formElement.model.d.ts → src/models/formElement.model.ts} +22 -22
  152. package/{models/formElementType.model.d.ts → src/models/formElementType.model.ts} +3 -2
  153. package/{models/grid.model.d.ts → src/models/grid.model.ts} +14 -13
  154. package/{models/hiddenField.model.d.ts → src/models/hiddenField.model.ts} +5 -5
  155. package/{models/iFrameProperties.model.d.ts → src/models/iFrameProperties.model.ts} +13 -13
  156. package/src/models/logic.model.ts +11 -0
  157. package/src/models/multifields.model.ts +12 -0
  158. package/{models/option.model.d.ts → src/models/option.model.ts} +5 -5
  159. package/src/models/page.model.ts +7 -0
  160. package/src/models/publicForm.model.ts +19 -0
  161. package/src/models/question.model.ts +27 -0
  162. package/src/models/questionAnswer.model.ts +8 -0
  163. package/src/models/questionGroup.model.ts +12 -0
  164. package/src/models/response.model.ts +9 -0
  165. package/src/models/result.model.ts +5 -0
  166. package/{models/row.model.d.ts → src/models/row.model.ts} +2 -1
  167. package/src/models/scoring.model.ts +10 -0
  168. package/src/models/section.model.ts +6 -0
  169. package/src/models/subForm.model.ts +25 -0
  170. package/src/models/subformConfiguration.model.ts +4 -0
  171. package/src/models/subformPropery.model.ts +8 -0
  172. package/{models/submission.model.d.ts → src/models/submission.model.ts} +16 -14
  173. package/{models/submissionCopyConfig.mopdel.d.ts → src/models/submissionCopyConfig.mopdel.ts} +4 -4
  174. package/{models/terms&condition.model.d.ts → src/models/terms&condition.model.ts} +1 -1
  175. package/src/models/validation.model.ts +48 -0
  176. package/src/models/whenClause.model.ts +7 -0
  177. package/{models/whenClauseCondition.model.d.ts → src/models/whenClauseCondition.model.ts} +6 -6
  178. package/{models/whenClauseElements.model.d.ts → src/models/whenClauseElements.model.ts} +6 -5
  179. package/{public-api.d.ts → src/public-api.ts} +4 -0
  180. package/src/question/card-subform/card-subform.component.html +282 -0
  181. package/src/question/card-subform/card-subform.component.scss +49 -0
  182. package/src/question/card-subform/card-subform.component.spec.ts +21 -0
  183. package/src/question/card-subform/card-subform.component.ts +407 -0
  184. package/src/question/confirm-dialog/confirm-dialog.component.html +32 -0
  185. package/src/question/confirm-dialog/confirm-dialog.component.scss +109 -0
  186. package/src/question/confirm-dialog/confirm-dialog.component.spec.ts +21 -0
  187. package/src/question/confirm-dialog/confirm-dialog.component.ts +24 -0
  188. package/src/question/form-elements/form-elements.component.html +28 -0
  189. package/src/question/form-elements/form-elements.component.scss +0 -0
  190. package/src/question/form-elements/form-elements.component.spec.ts +21 -0
  191. package/src/question/form-elements/form-elements.component.ts +41 -0
  192. package/src/question/inline-multiple-subform/inline-multiple-subform.component.html +321 -0
  193. package/src/question/inline-multiple-subform/inline-multiple-subform.component.scss +78 -0
  194. package/src/question/inline-multiple-subform/inline-multiple-subform.component.spec.ts +21 -0
  195. package/src/question/inline-multiple-subform/inline-multiple-subform.component.ts +425 -0
  196. package/src/question/multifields/multifields.component.html +78 -0
  197. package/src/question/multifields/multifields.component.scss +6 -0
  198. package/src/question/multifields/multifields.component.spec.ts +21 -0
  199. package/src/question/multifields/multifields.component.ts +27 -0
  200. package/src/question/multiple-subform/multiple-subform.component.html +185 -0
  201. package/src/question/multiple-subform/multiple-subform.component.scss +52 -0
  202. package/src/question/multiple-subform/multiple-subform.component.spec.ts +21 -0
  203. package/src/question/multiple-subform/multiple-subform.component.ts +481 -0
  204. package/src/question/question/question.component.html +51 -0
  205. package/src/question/question/question.component.scss +0 -0
  206. package/src/question/question/question.component.spec.ts +21 -0
  207. package/src/question/question/question.component.ts +129 -0
  208. package/src/question/question-group/question-group.component.html +147 -0
  209. package/src/question/question-group/question-group.component.scss +36 -0
  210. package/src/question/question-group/question-group.component.spec.ts +21 -0
  211. package/src/question/question-group/question-group.component.ts +94 -0
  212. package/src/question/question.module.ts +22 -0
  213. package/src/question/recursive-logic/recursive-logic.component.html +33 -0
  214. package/src/question/recursive-logic/recursive-logic.component.scss +0 -0
  215. package/src/question/recursive-logic/recursive-logic.component.spec.ts +21 -0
  216. package/src/question/recursive-logic/recursive-logic.component.ts +29 -0
  217. package/src/question/sub-form/sub-form.component.html +254 -0
  218. package/src/question/sub-form/sub-form.component.scss +83 -0
  219. package/src/question/sub-form/sub-form.component.spec.ts +21 -0
  220. package/src/question/sub-form/sub-form.component.ts +421 -0
  221. package/src/services/aggregate.service.ts +148 -0
  222. package/src/services/countryService.ts +92 -0
  223. package/src/services/data.service.ts +36 -0
  224. package/src/services/element-tracker.service.spec.ts +16 -0
  225. package/src/services/element-tracker.service.ts +24 -0
  226. package/src/services/form-validation.service.ts +151 -0
  227. package/src/services/form.service.spec.ts +16 -0
  228. package/src/services/form.service.ts +407 -0
  229. package/src/services/mapper.service.ts +625 -0
  230. package/src/services/recaptcha.service.spec.ts +16 -0
  231. package/src/services/recaptcha.service.ts +179 -0
  232. package/src/services/score.service.ts +352 -0
  233. package/src/services/subform-copy.service.ts +148 -0
  234. package/src/services/validation.service.spec.ts +16 -0
  235. package/src/services/validation.service.ts +33 -0
  236. package/src/services/whenClause.service.ts +502 -0
  237. package/src/shared/shared.module.ts +58 -0
  238. package/src/styles/shared-style.scss +86 -0
  239. package/src/sub-form/sub-form.module.ts +24 -0
  240. package/src/sub-form/submission-modal/submission-modal.component.html +160 -0
  241. package/src/sub-form/submission-modal/submission-modal.component.scss +54 -0
  242. package/src/sub-form/submission-modal/submission-modal.component.spec.ts +21 -0
  243. package/src/sub-form/submission-modal/submission-modal.component.ts +127 -0
  244. package/tsconfig.lib.json +14 -0
  245. package/tsconfig.lib.prod.json +10 -0
  246. package/tsconfig.spec.json +14 -0
  247. package/environment/environment.d.ts +0 -5
  248. package/esm2022/environment/environment.mjs +0 -6
  249. package/esm2022/form-fields/aggregate-function/aggregate-function.component.mjs +0 -146
  250. package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +0 -473
  251. package/esm2022/form-fields/currency-fields/currency-fields.component.mjs +0 -502
  252. package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +0 -608
  253. package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +0 -585
  254. package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +0 -224
  255. package/esm2022/form-fields/form-fields.module.mjs +0 -174
  256. package/esm2022/form-fields/hidden-field/hidden-field.component.mjs +0 -137
  257. package/esm2022/form-fields/iframe-fields/iframe-fields.component.mjs +0 -198
  258. package/esm2022/form-fields/location-fields/location-fields.component.mjs +0 -85
  259. package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +0 -131
  260. package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +0 -270
  261. package/esm2022/form-fields/number-fields/number-fields.component.mjs +0 -242
  262. package/esm2022/form-fields/password-fields/password-fields.component.mjs +0 -257
  263. package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +0 -346
  264. package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +0 -148
  265. package/esm2022/form-fields/section-fields/section-fields.component.mjs +0 -29
  266. package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +0 -158
  267. package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +0 -32
  268. package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +0 -73
  269. package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +0 -66
  270. package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +0 -159
  271. package/esm2022/form-fields/text-fields/text-fields.component.mjs +0 -245
  272. package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +0 -85
  273. package/esm2022/form-fields/url-fields/url-fields.component.mjs +0 -124
  274. package/esm2022/form-submission/form-submission.module.mjs +0 -64
  275. package/esm2022/form-submission/header/header.component.mjs +0 -20
  276. package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +0 -171
  277. package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +0 -124
  278. package/esm2022/form-submission/save-as-draft/saveDraftModalComponent .mjs +0 -50
  279. package/esm2022/form-submission/submission-container/submission-container.component.mjs +0 -17
  280. package/esm2022/form-submission/submit-form/submit-form.component.mjs +0 -1610
  281. package/esm2022/lib/form-submission.component.mjs +0 -113
  282. package/esm2022/lib/form-submission.module.mjs +0 -56
  283. package/esm2022/lib/form-submission.service.mjs +0 -14
  284. package/esm2022/models/aggregate.model.mjs +0 -2
  285. package/esm2022/models/answer.model.mjs +0 -2
  286. package/esm2022/models/appearance.model.mjs +0 -2
  287. package/esm2022/models/attachment.model.mjs +0 -2
  288. package/esm2022/models/defaultAnswerEntry.model.mjs +0 -2
  289. package/esm2022/models/defaultAnswersModel.model.mjs +0 -2
  290. package/esm2022/models/defaultQuestionAnswer.model.mjs +0 -2
  291. package/esm2022/models/elementOptionAPI.model.mjs +0 -2
  292. package/esm2022/models/elementOptionAPIData.model.mjs +0 -2
  293. package/esm2022/models/elementOptionDB.model.mjs +0 -2
  294. package/esm2022/models/elementOptionDBCriteria.model.mjs +0 -2
  295. package/esm2022/models/emitters.model.mjs +0 -2
  296. package/esm2022/models/enum/condition.enum.mjs +0 -18
  297. package/esm2022/models/enum/elementType .enum.mjs +0 -24
  298. package/esm2022/models/enum/entityType.enum.mjs +0 -12
  299. package/esm2022/models/formConfiguration.model.mjs +0 -2
  300. package/esm2022/models/formElement.model.mjs +0 -2
  301. package/esm2022/models/formElementType.model.mjs +0 -2
  302. package/esm2022/models/grid.model.mjs +0 -2
  303. package/esm2022/models/hiddenField.model.mjs +0 -2
  304. package/esm2022/models/iFrameProperties.model.mjs +0 -2
  305. package/esm2022/models/logic.model.mjs +0 -2
  306. package/esm2022/models/multifields.model.mjs +0 -2
  307. package/esm2022/models/option.model.mjs +0 -2
  308. package/esm2022/models/page.model.mjs +0 -2
  309. package/esm2022/models/publicForm.model.mjs +0 -2
  310. package/esm2022/models/question.model.mjs +0 -2
  311. package/esm2022/models/questionAnswer.model.mjs +0 -2
  312. package/esm2022/models/questionGroup.model.mjs +0 -2
  313. package/esm2022/models/row.model.mjs +0 -2
  314. package/esm2022/models/scoring.model.mjs +0 -2
  315. package/esm2022/models/section.model.mjs +0 -2
  316. package/esm2022/models/subForm.model.mjs +0 -2
  317. package/esm2022/models/subformConfiguration.model.mjs +0 -2
  318. package/esm2022/models/subformPropery.model.mjs +0 -2
  319. package/esm2022/models/submission.model.mjs +0 -2
  320. package/esm2022/models/submissionCopyConfig.mopdel.mjs +0 -2
  321. package/esm2022/models/terms&condition.model.mjs +0 -2
  322. package/esm2022/models/validation.model.mjs +0 -2
  323. package/esm2022/models/whenClause.model.mjs +0 -2
  324. package/esm2022/models/whenClauseCondition.model.mjs +0 -2
  325. package/esm2022/models/whenClauseElements.model.mjs +0 -2
  326. package/esm2022/piserve-tech-form-submission.mjs +0 -5
  327. package/esm2022/public-api.mjs +0 -7
  328. package/esm2022/question/card-subform/card-subform.component.mjs +0 -354
  329. package/esm2022/question/confirm-dialog/confirm-dialog.component.mjs +0 -27
  330. package/esm2022/question/form-elements/form-elements.component.mjs +0 -62
  331. package/esm2022/question/inline-multiple-subform/inline-multiple-subform.component.mjs +0 -384
  332. package/esm2022/question/multifields/multifields.component.mjs +0 -54
  333. package/esm2022/question/multiple-subform/multiple-subform.component.mjs +0 -413
  334. package/esm2022/question/question/question.component.mjs +0 -145
  335. package/esm2022/question/question-group/question-group.component.mjs +0 -102
  336. package/esm2022/question/recursive-logic/recursive-logic.component.mjs +0 -49
  337. package/esm2022/question/sub-form/sub-form.component.mjs +0 -351
  338. package/esm2022/services/aggregate.service.mjs +0 -139
  339. package/esm2022/services/countryService.mjs +0 -89
  340. package/esm2022/services/data.service.mjs +0 -36
  341. package/esm2022/services/element-tracker.service.mjs +0 -27
  342. package/esm2022/services/form-validation.service.mjs +0 -128
  343. package/esm2022/services/form.service.mjs +0 -333
  344. package/esm2022/services/mapper.service.mjs +0 -519
  345. package/esm2022/services/recaptcha.service.mjs +0 -136
  346. package/esm2022/services/score.service.mjs +0 -268
  347. package/esm2022/services/subform-copy.service.mjs +0 -122
  348. package/esm2022/services/validation.service.mjs +0 -35
  349. package/esm2022/services/whenClause.service.mjs +0 -423
  350. package/esm2022/shared/shared.module.mjs +0 -97
  351. package/esm2022/sub-form/submission-modal/submission-modal.component.mjs +0 -133
  352. package/fesm2022/piserve-tech-form-submission.mjs +0 -11658
  353. package/fesm2022/piserve-tech-form-submission.mjs.map +0 -1
  354. package/form-fields/aggregate-function/aggregate-function.component.d.ts +0 -43
  355. package/form-fields/check-box-fields/check-box-fields.component.d.ts +0 -73
  356. package/form-fields/currency-fields/currency-fields.component.d.ts +0 -62
  357. package/form-fields/date-time-fields/date-time-fields.component.d.ts +0 -96
  358. package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +0 -88
  359. package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +0 -72
  360. package/form-fields/form-fields.module.d.ts +0 -40
  361. package/form-fields/hidden-field/hidden-field.component.d.ts +0 -38
  362. package/form-fields/iframe-fields/iframe-fields.component.d.ts +0 -35
  363. package/form-fields/location-fields/location-fields.component.d.ts +0 -29
  364. package/form-fields/mail-fields/mail-fields.component.d.ts +0 -41
  365. package/form-fields/mobile-fields/mobile-fields.component.d.ts +0 -71
  366. package/form-fields/number-fields/number-fields.component.d.ts +0 -53
  367. package/form-fields/password-fields/password-fields.component.d.ts +0 -57
  368. package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +0 -70
  369. package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +0 -46
  370. package/form-fields/section-fields/section-fields.component.d.ts +0 -10
  371. package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +0 -45
  372. package/form-fields/signature-fields/signature-fields.component.d.ts +0 -13
  373. package/form-fields/slider-fields/slider-fields.component.d.ts +0 -32
  374. package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +0 -26
  375. package/form-fields/text-area-fields/text-area-fields.component.d.ts +0 -49
  376. package/form-fields/text-fields/text-fields.component.d.ts +0 -49
  377. package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +0 -29
  378. package/form-fields/url-fields/url-fields.component.d.ts +0 -41
  379. package/form-submission/form-submission.module.d.ts +0 -20
  380. package/form-submission/header/header.component.d.ts +0 -7
  381. package/form-submission/navigation-tabs/navigation-tabs.component.d.ts +0 -57
  382. package/form-submission/next-prev-navigation/next-prev-navigation.component.d.ts +0 -46
  383. package/form-submission/save-as-draft/saveDraftModalComponent .d.ts +0 -17
  384. package/form-submission/submission-container/submission-container.component.d.ts +0 -7
  385. package/form-submission/submit-form/submit-form.component.d.ts +0 -237
  386. package/index.d.ts +0 -5
  387. package/lib/form-submission.component.d.ts +0 -30
  388. package/lib/form-submission.module.d.ts +0 -16
  389. package/lib/form-submission.service.d.ts +0 -6
  390. package/models/aggregate.model.d.ts +0 -4
  391. package/models/appearance.model.d.ts +0 -64
  392. package/models/elementOptionAPI.model.d.ts +0 -12
  393. package/models/elementOptionAPIData.model.d.ts +0 -5
  394. package/models/elementOptionDB.model.d.ts +0 -8
  395. package/models/elementOptionDBCriteria.model.d.ts +0 -7
  396. package/models/enum/elementType .enum.d.ts +0 -22
  397. package/models/enum/entityType.enum.d.ts +0 -10
  398. package/models/logic.model.d.ts +0 -9
  399. package/models/multifields.model.d.ts +0 -11
  400. package/models/page.model.d.ts +0 -6
  401. package/models/publicForm.model.d.ts +0 -18
  402. package/models/question.model.d.ts +0 -26
  403. package/models/questionAnswer.model.d.ts +0 -7
  404. package/models/questionGroup.model.d.ts +0 -11
  405. package/models/scoring.model.d.ts +0 -10
  406. package/models/section.model.d.ts +0 -6
  407. package/models/subForm.model.d.ts +0 -24
  408. package/models/subformConfiguration.model.d.ts +0 -4
  409. package/models/subformPropery.model.d.ts +0 -7
  410. package/models/validation.model.d.ts +0 -48
  411. package/models/whenClause.model.d.ts +0 -6
  412. package/question/card-subform/card-subform.component.d.ts +0 -44
  413. package/question/confirm-dialog/confirm-dialog.component.d.ts +0 -12
  414. package/question/form-elements/form-elements.component.d.ts +0 -20
  415. package/question/inline-multiple-subform/inline-multiple-subform.component.d.ts +0 -47
  416. package/question/multifields/multifields.component.d.ts +0 -11
  417. package/question/multiple-subform/multiple-subform.component.d.ts +0 -39
  418. package/question/question/question.component.d.ts +0 -30
  419. package/question/question-group/question-group.component.d.ts +0 -29
  420. package/question/recursive-logic/recursive-logic.component.d.ts +0 -19
  421. package/question/sub-form/sub-form.component.d.ts +0 -70
  422. package/services/aggregate.service.d.ts +0 -29
  423. package/services/countryService.d.ts +0 -21
  424. package/services/data.service.d.ts +0 -19
  425. package/services/element-tracker.service.d.ts +0 -10
  426. package/services/form-validation.service.d.ts +0 -16
  427. package/services/form.service.d.ts +0 -27
  428. package/services/mapper.service.d.ts +0 -31
  429. package/services/recaptcha.service.d.ts +0 -46
  430. package/services/score.service.d.ts +0 -27
  431. package/services/subform-copy.service.d.ts +0 -10
  432. package/services/validation.service.d.ts +0 -14
  433. package/services/whenClause.service.d.ts +0 -45
  434. package/shared/shared.module.d.ts +0 -25
  435. package/sub-form/submission-modal/submission-modal.component.d.ts +0 -31
  436. /package/{assets → src/assets}/fonts/Garamond.woff2 +0 -0
  437. /package/{assets → src/assets}/fonts/Georgia.woff2 +0 -0
  438. /package/{assets → src/assets}/fonts/Poppins.woff2 +0 -0
  439. /package/{assets → src/assets}/fonts/Tahoma.woff2 +0 -0
  440. /package/{assets → src/assets}/fonts/Tajawal.woff2 +0 -0
  441. /package/{assets → src/assets}/fonts/Verdana.woff2 +0 -0
  442. /package/{assets → src/assets}/icons/left_arrow.svg +0 -0
  443. /package/{assets → src/assets}/icons/right_arrow.svg +0 -0
@@ -0,0 +1,698 @@
1
+ import { Logic } from './../../models/logic.model';
2
+ import {
3
+ ChangeDetectorRef,
4
+ Component,
5
+ EventEmitter,
6
+ Input,
7
+ Output,
8
+ } from '@angular/core';
9
+ import { FormService } from '../../services/form.service';
10
+ import { ElementTrackerService } from '../../services/element-tracker.service';
11
+ import { ValidationService } from '../../services/validation.service';
12
+ import { ScoreCalculationService } from '../../services/score.service';
13
+ import { WhenClauseService } from '../../services/whenClause.service';
14
+
15
+ interface DropDownData {
16
+ value: string;
17
+ label: string;
18
+ image: string;
19
+ }
20
+
21
+ @Component({
22
+ selector: 'lib-drop-down-fields',
23
+ templateUrl: './drop-down-fields.component.html',
24
+ styleUrls: ['./drop-down-fields.component.scss'],
25
+ })
26
+ export class DropDownFieldsComponent {
27
+ @Input() question: any = {};
28
+ @Input() inLine: boolean = false;
29
+ @Input() inCard: boolean = false;
30
+ @Input() submissionIndex!: number;
31
+ @Output() answerChange = new EventEmitter<{
32
+ answer: any;
33
+ maxPossibleScore?: number;
34
+ }>();
35
+
36
+ count: number = 0;
37
+ required: boolean = false;
38
+ hint: string = '';
39
+ selectionType: string = '';
40
+ minimumSelection: number = 0;
41
+ maximumSelection: number = 0;
42
+ optionType: string = '';
43
+ lookupTable: string = '';
44
+ customOptions: DropDownData[] = [];
45
+ originalOptions: DropDownData[] = [];
46
+ database: any = {};
47
+ api: any = {};
48
+ originalApi: any = {};
49
+ selectedValue: any[] = [];
50
+ validationFailed!: boolean;
51
+ validationMessage: string = '';
52
+ private elementId: string = '';
53
+ hasMoreData: boolean = true;
54
+ maxPossibleScore?: number;
55
+ selectedValues: any[] = [];
56
+ dbPageIndex: number = 0;
57
+ dbPageSize: number = 10;
58
+ dbTotalPages: number = 0;
59
+ @Input() disableEdit: boolean = false;
60
+
61
+ constructor(
62
+ private formService: FormService,
63
+ private cdr: ChangeDetectorRef,
64
+ private validationService: ValidationService,
65
+ private tracker: ElementTrackerService,
66
+ private scoreCalcService: ScoreCalculationService,
67
+ private whenClauseService:WhenClauseService
68
+ ) {}
69
+
70
+ ngOnInit() {
71
+ this.valueAssigned();
72
+ }
73
+
74
+ onValueChange(newValue: any) {
75
+ this.selectedValue = newValue;
76
+ this.selectItems();
77
+ }
78
+
79
+ valueAssigned() {
80
+ this.count = this.question.count;
81
+ this.required = this.question.required;
82
+ this.hint = this.question.hint;
83
+ this.selectionType = this.question.formElement.appearance.selectionType;
84
+ this.minimumSelection =
85
+ this.question.formElement.validation.minimumSelection;
86
+ this.maximumSelection =
87
+ this.question.formElement.validation.maximumSelection;
88
+ this.optionType = this.question.formElement.option.optionType;
89
+
90
+ // --- Check if answer is present ---
91
+ if (this.question.answer && Array.isArray(this.question.answer)) {
92
+ if (this.optionType === 'API') {
93
+ this.api = this.question.formElement.option.api;
94
+ this.originalApi = JSON.parse(JSON.stringify(this.api));
95
+ // ✅ Check if pagination is enabled (pageIndex + pageSize exist in params with valueSource)
96
+ const hasPagination =
97
+ this.api?.params?.some((p: any) => p.valueSource === 'PAGE_INDEX') &&
98
+ this.api?.params?.some((p: any) => p.valueSource === 'PAGE_SIZE');
99
+
100
+ if (hasPagination) {
101
+ // ✅ Populate selected values from answer
102
+ this.selectedValues = this.question.answer.map((ans: string) => {
103
+ const parts = ans.split('|');
104
+ return parts.length > 1 ? parts[1] : parts[0];
105
+ });
106
+ }
107
+ }
108
+
109
+ else if (this.optionType === 'DATABASE') {
110
+ this.selectedValues = this.question.answer.map((ans: string) => {
111
+ const parts = ans.split('|');
112
+ return parts.length > 1 ? parts[1] : parts[0];
113
+ })};
114
+ }
115
+
116
+
117
+ // --- Handle different option types ---
118
+ switch (this.optionType) {
119
+ case 'OPTION':
120
+ this.customOptions = this.question.formElement.option.customOptions.map(
121
+ (option: { value: string }) => ({
122
+ label: option.value,
123
+ value: option.value,
124
+ image: '',
125
+ })
126
+ );
127
+ this.originalOptions = [...this.customOptions];
128
+ if (this.question.answer) {
129
+ this.initializeCustomOption();
130
+ }
131
+ break;
132
+
133
+ case 'LOOKUP':
134
+ this.lookupTable = this.question.formElement.option.lookupTable;
135
+ this.fetchDataFromLookup();
136
+ break;
137
+
138
+ case 'DATABASE':
139
+ this.database = this.question.formElement.option.database;
140
+ this.fetchDataFromDatabase();
141
+ break;
142
+
143
+ case 'API':
144
+ if (!this.api || Object.keys(this.api).length === 0) {
145
+ this.api = this.question.formElement.option.api;
146
+ this.originalApi = JSON.parse(JSON.stringify(this.api));
147
+ }
148
+ this.fetchDataFromAPI();
149
+ break;
150
+
151
+ default:
152
+ console.warn('Unknown option type:', this.optionType);
153
+ }
154
+
155
+ // --- Scoring ---
156
+ if (
157
+ this.question.formElement.scoring &&
158
+ this.question.formElement.scoring.enableScoring
159
+ ) {
160
+ this.maxPossibleScore =
161
+ this.scoreCalcService.getMaxPossibleScoreForQuestion(this.question);
162
+ this.question.maxPossibleScore = this.maxPossibleScore;
163
+ }
164
+ }
165
+
166
+ initializeCustomOption() {
167
+
168
+ this.customOptions.forEach((option: any) => {
169
+ const isMatch = this.question?.answer?.some((a: any) => {
170
+ const parts = a.trim().split('|');
171
+ if (parts.length === 2) {
172
+ const label = parts[0];
173
+ const value = parts[1];
174
+ return value == option.value && label == option.label;
175
+ } else {
176
+ return false;
177
+ }
178
+ });
179
+ if (isMatch) {
180
+ const alreadyExists = this.selectedValue.some(
181
+ (item: any) => item.value === option.value
182
+ );
183
+
184
+ if (!alreadyExists) {
185
+ this.selectedValue = [...this.selectedValue, option];
186
+ }
187
+
188
+ setTimeout(() => {
189
+ const answers = Array.isArray(this.question.answer) ? this.question.answer : [];
190
+ const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);
191
+ this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers,true);
192
+ });
193
+ }
194
+ if (this.question.childLogics && this.question.answer) {
195
+ this.updateChildLogics(this.question);
196
+ }
197
+ });
198
+
199
+ this.cdr.detectChanges();
200
+ }
201
+
202
+ transformDatabaseObject(database: any,selectedValues:string[]=[]) {
203
+ return {
204
+ tableName: database.tableName,
205
+ valueField: database.valueField,
206
+ labelField: database.labelField,
207
+ labelPattern: database?.labelPattern,
208
+ selectedValues: selectedValues,
209
+ criteria: database.criteria.map((criteria: any) => ({
210
+ field: criteria.field,
211
+ valueSource: criteria?.valueSource,
212
+ condition: criteria.condition,
213
+ value: criteria.inputValue,
214
+ logicalOperator: criteria.logicalOperator,
215
+ })),
216
+ };
217
+ }
218
+
219
+ fetchDataFromDatabase(searchString:string='') {
220
+ const value= this.question?.answer?.map((a: string) => {
221
+ const [label, value] = a.split('|');
222
+ return {
223
+ label,
224
+ value
225
+ };
226
+ })
227
+ const transformedDatabase = this.transformDatabaseObject(this.database,value);
228
+ this.formService.fetchDataFromDatabase(transformedDatabase,this.dbPageIndex,this.dbPageSize,searchString,true).subscribe(
229
+ (response) => {
230
+ if (response.success) {
231
+ this.dbTotalPages = response.result.totalPages;
232
+ const newOptions =
233
+ response.result?.content?.map(
234
+ (item: { value: string; label: string }) => ({
235
+ value: item.value,
236
+ label: item.label,
237
+ })
238
+ ) || [];
239
+ if (this.dbPageIndex === 0) {
240
+ this.customOptions = [...newOptions];
241
+ }
242
+ else {
243
+ this.customOptions = [
244
+ ...this.customOptions,
245
+ ...newOptions,
246
+ ];
247
+ }
248
+
249
+
250
+ this.originalOptions = [...this.customOptions];
251
+
252
+ if (this.question.answer) {
253
+ this.initializeCustomOption();
254
+ }
255
+ } else {
256
+ console.error('Error fetching data from database:', response.message);
257
+ }
258
+ this.cdr.detectChanges();
259
+ },
260
+ (error) => {
261
+ console.error('HTTP Error:', error);
262
+ this.cdr.detectChanges();
263
+ }
264
+ );
265
+ }
266
+
267
+ fetchDataFromLookup() {
268
+ this.formService.fetchDataFromLookup(this.lookupTable).subscribe(
269
+ (response) => {
270
+ this.customOptions = response.result.values.map(
271
+ (item: { value: string; label: string }) => ({
272
+ value: item.value,
273
+ label: item.label,
274
+ })
275
+ );
276
+ this.originalOptions = [...this.customOptions];
277
+ if (this.question.answer) {
278
+ this.initializeCustomOption();
279
+ }
280
+ },
281
+ (error) => {
282
+ console.error('HTTP Error:', error);
283
+ }
284
+ );
285
+ }
286
+
287
+ fetchDataFromAPI(append: boolean = false, search: boolean = false) {
288
+ const apiConfig = JSON.parse(JSON.stringify(this.api));
289
+ if (!this.hasMoreData && append) {
290
+ // If no more data from last call and this is an append call, skip API
291
+ return;
292
+ }
293
+ const allowedChars = ['.', ',', '-', '_', '(', ')', ''];
294
+
295
+ if (search) {
296
+ if (apiConfig.params) {
297
+ apiConfig.params = apiConfig.params.filter(
298
+ (p: any) => p.valueSource !== 'SELECTED_VALUES'
299
+ );
300
+ }
301
+ if (apiConfig.headers) {
302
+ apiConfig.headers = apiConfig.headers.filter(
303
+ (h: any) => h.valueSource !== 'SELECTED_VALUES'
304
+ );
305
+ }
306
+ }
307
+
308
+ this.formService
309
+ .fetchDataFromExternalAPI(apiConfig, this.selectedValues)
310
+ .subscribe(
311
+ (response) => {
312
+ let data;
313
+ if (apiConfig.pathToValue) {
314
+ data = this.extractDataByPath(response, apiConfig.pathToValue);
315
+ } else {
316
+ data = response;
317
+ }
318
+
319
+ const newOptions = data.map((item: any) => {
320
+ if (
321
+ apiConfig.labelPattern &&
322
+ Array.isArray(apiConfig.labelPattern) &&
323
+ apiConfig.labelPattern.length > 0
324
+ ) {
325
+ let label = '';
326
+ apiConfig.labelPattern.forEach((pattern: string) => {
327
+ pattern = pattern.trim();
328
+ if (allowedChars.includes(pattern)) {
329
+ label += pattern;
330
+ } else {
331
+ if (item[pattern] !== undefined && item[pattern] !== null) {
332
+ label += item[pattern]+' ';
333
+ }
334
+ }
335
+ });
336
+ return {
337
+ value: item[apiConfig.valueField.trim()],
338
+ label: label,
339
+ };
340
+ } else {
341
+ return {
342
+ value: item[apiConfig.valueField.trim()],
343
+ label: item[apiConfig.labelField.trim()],
344
+ };
345
+ }
346
+ });
347
+
348
+ if (append) {
349
+ this.customOptions = [...this.customOptions, ...newOptions];
350
+ } else {
351
+ this.customOptions = newOptions;
352
+ }
353
+ this.originalOptions = [...this.customOptions];
354
+
355
+ // If no new data returned, mark as last page
356
+ if (!newOptions.length) {
357
+ this.hasMoreData = false;
358
+ }
359
+
360
+ if (this.question.answer && !append && !search) {
361
+ this.initializeCustomOption();
362
+ }
363
+ },
364
+ (error) => {
365
+ console.error('HTTP Error:', error);
366
+ }
367
+ );
368
+ }
369
+
370
+ extractDataByPath(data: any, path: string) {
371
+ return path.split('.').reduce((acc, part) => acc && acc[part], data);
372
+ }
373
+
374
+ selectItems(event?: any) {
375
+ this.selectedValue = event;
376
+
377
+ const valuesArray = this.selectedValue.map(
378
+ (item) => `${item.label}|${item.value}`
379
+ );
380
+ this.question.answer = valuesArray;
381
+ const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(
382
+ this.question.answer,
383
+ this.question
384
+ );
385
+ this.question.score = scoreResult?.scores;
386
+
387
+ this.validationFailed = false;
388
+ this.validationMessage = '';
389
+ if (this.selectedValue.length == 0 && this.required) {
390
+ this.validationFailed = true;
391
+ this.validationService.clearInvalid(this.buildElementId());
392
+ this.validationMessage = `This is a required question`;
393
+ this.question.validation = false;
394
+ this.question.validationMessage = `This is a required question`;
395
+ } else if (
396
+ this.selectedValue.length < this.minimumSelection ||
397
+ this.selectedValue.length > this.maximumSelection
398
+ ) {
399
+ this.validationService.clearInvalid(this.buildElementId());
400
+ this.validationFailed = true;
401
+ this.validationMessage = `selected options must be between ${this.minimumSelection} & ${this.maximumSelection}`;
402
+ this.question.validation = false;
403
+ this.question.validationMessage = `selected options must be between ${this.minimumSelection} & ${this.maximumSelection}`;
404
+ } else {
405
+ this.validationService.clearInvalid(this.buildElementId());
406
+ this.question.validation = true;
407
+ }
408
+ if (this.question.childLogics) {
409
+ this.updateChildLogics(this.question);
410
+ }
411
+ this.answerChange.emit({
412
+ answer: this.question.answer,
413
+ maxPossibleScore: this.maxPossibleScore,
414
+ });
415
+ const answers = Array.isArray(this.question.answer) ? this.question.answer : [];
416
+ const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);
417
+ this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers);
418
+ }
419
+
420
+ updateChildLogics(question: any) {
421
+ if (question.childLogics && Array.isArray(question.childLogics)) {
422
+ question.childLogics.forEach((childLogic: any) => {
423
+ if (this.selectionType == 'SINGLE') {
424
+ if (this.selectedValue.length == 0) {
425
+ childLogic.show = false;
426
+ this.clearAnswersRecursively(childLogic);
427
+ } else {
428
+ const selectedValue = this.selectedValue[0]?.label;
429
+ if (
430
+ this.evaluateCondition(
431
+ selectedValue,
432
+ childLogic.condition,
433
+ childLogic.inputValue
434
+ )
435
+ ) {
436
+ childLogic.showLogic = true;
437
+ } else {
438
+ childLogic.showLogic = false;
439
+ this.clearAnswersRecursively(childLogic);
440
+ }
441
+ }
442
+ } else if (this.selectionType === 'MULTIPLE') {
443
+ if (this.selectedValue.length == 0) {
444
+ childLogic.show = false;
445
+ this.clearAnswersRecursively(childLogic);
446
+ } else {
447
+ const selectedValues = this.selectedValue.map(
448
+ (item: any) => item.label
449
+ );
450
+ if (
451
+ this.evaluateMultipleCondition(
452
+ selectedValues,
453
+ childLogic.condition,
454
+ childLogic.inputValue
455
+ )
456
+ ) {
457
+ childLogic.showLogic = true;
458
+ } else {
459
+ childLogic.showLogic = false;
460
+ this.clearAnswersRecursively(childLogic);
461
+ }
462
+ }
463
+ }
464
+ });
465
+ }
466
+ }
467
+
468
+ clearAnswersRecursively(logic: any) {
469
+ if (!logic || !logic.rows) return;
470
+
471
+ logic.rows.forEach((row: any) => {
472
+ row.grid.forEach((item: any) => {
473
+ const element = item.element;
474
+
475
+ if (item.entityType === 'QUESTION' && element) {
476
+ // Clear answer if present
477
+ if ('answer' in element) {
478
+ element.answer = '';
479
+ }
480
+
481
+ // Recursively clear childLogics if any
482
+ if (element.childLogics && element.childLogics.length > 0) {
483
+ element.childLogics.forEach((childLogic: any) => {
484
+ this.clearAnswersRecursively(childLogic);
485
+ });
486
+ }
487
+ }
488
+
489
+ if (item.entityType === 'SUBFORM' && element && element.rows) {
490
+ // SUBFORM contains its own rows structure like a form
491
+ this.clearAnswersRecursively({ rows: element.rows });
492
+ }
493
+ });
494
+ });
495
+ }
496
+
497
+ evaluateCondition(answer: any, condition: string, inputValue: any): boolean {
498
+ const stringInputValue = Array.isArray(inputValue)
499
+ ? inputValue.map((val) => val.toString().toLowerCase())
500
+ : inputValue.toLowerCase();
501
+ answer = Array.isArray(answer)
502
+ ? answer?.map((ans) => ans.toLowerCase())
503
+ : answer.toLowerCase();
504
+ switch (condition) {
505
+ case '!=':
506
+ return answer != inputValue;
507
+ case '=':
508
+ return answer == inputValue;
509
+ case 'IN':
510
+ return stringInputValue.includes(answer);
511
+ case 'NOT IN':
512
+ return !stringInputValue.includes(answer);
513
+ default:
514
+ return false;
515
+ }
516
+ }
517
+
518
+ evaluateMultipleCondition(
519
+ answers: any,
520
+ condition: string,
521
+ inputValue: any
522
+ ): boolean {
523
+ const stringInputValue = Array.isArray(inputValue)
524
+ ? inputValue.map((val) => val.toString())
525
+ : inputValue.toString();
526
+ answers = Array.isArray(answers)
527
+ ? answers?.map((answer) => answer.toLowerCase())
528
+ : answers.toLowerCase();
529
+ switch (condition) {
530
+ case '!=':
531
+ return answers.every((answer: any) => answer != stringInputValue);
532
+ case '=':
533
+ return answers.some((answer: any) => answer == stringInputValue);
534
+ case 'IN':
535
+ return answers.some((answer: any) => stringInputValue.includes(answer));
536
+ case 'NOT IN':
537
+ return answers.every(
538
+ (answer: any) => !stringInputValue.includes(answer)
539
+ );
540
+ default:
541
+ return false;
542
+ }
543
+ }
544
+
545
+ handleValidation(
546
+ isValid: boolean,
547
+ message: string = 'This field is required'
548
+ ) {
549
+ if (isValid) {
550
+ this.validationService.clearInvalid(this.buildElementId());
551
+ } else {
552
+ // this.validationService.setInvalid(this.question.id, message);
553
+ }
554
+ }
555
+
556
+ private buildElementId(): string {
557
+ return this.inLine || this.inCard
558
+ ? `${this.submissionIndex}-${this.question.id}`
559
+ : `${this.question.id}`;
560
+ }
561
+
562
+ get isInvalid(): boolean {
563
+ return !!this.validationService.getErrorMessage(this.buildElementId());
564
+ }
565
+
566
+ get errorMessage(): string | null {
567
+ return this.validationService.getErrorMessage(this.buildElementId());
568
+ }
569
+
570
+ private hasPagination(apiConfig: any): boolean {
571
+ const checkValueSource = (arr: any[]) =>
572
+ Array.isArray(arr) &&
573
+ arr.some(
574
+ (item) =>
575
+ item?.valueSource === 'PAGE_INDEX' ||
576
+ item?.valueSource === 'PAGE_SIZE'
577
+ );
578
+
579
+ return (
580
+ checkValueSource(apiConfig.headers) ||
581
+ checkValueSource(apiConfig.params) ||
582
+ checkValueSource(apiConfig.pathVariables)
583
+ );
584
+ }
585
+
586
+ getNextSetOfItems(event: any) {
587
+ const element = event.target;
588
+ if (
589
+ Math.floor(element.scrollHeight - element.scrollTop) <=
590
+ element.clientHeight &&
591
+ this.hasPagination(this.api) // Only if pagination is configured
592
+ ) {
593
+ this.loadNextPage();
594
+ }
595
+
596
+
597
+
598
+ else if( this.optionType === 'DATABASE' && this.dbPageIndex < this.dbTotalPages){
599
+ this.dbPageIndex +=1;
600
+ this.fetchDataFromDatabase();
601
+ }
602
+ }
603
+
604
+ private loadNextPage() {
605
+ if (!this.hasMoreData) return;
606
+ // Find the PAGE_INDEX param/header/pathVar and increment it
607
+ const updateValueSource = (arr: any[]) => {
608
+ if (!Array.isArray(arr)) return;
609
+ arr.forEach((item) => {
610
+ if (item.valueSource === 'PAGE_INDEX') {
611
+ let currentPage = parseInt(item.inputValue || '0', 10);
612
+ item.inputValue = (currentPage + 1).toString();
613
+ }
614
+ });
615
+ };
616
+
617
+ updateValueSource(this.api.headers);
618
+ updateValueSource(this.api.params);
619
+ updateValueSource(this.api.pathVariables);
620
+
621
+ // Call your fetch function again
622
+ this.fetchDataFromAPI(true);
623
+ }
624
+
625
+ search(searchTerm: string) {
626
+ if( this.optionType ==='DATABASE'){
627
+ this.dbPageIndex =0;
628
+ this.fetchDataFromDatabase(searchTerm.trim());
629
+ }
630
+ else if (this.optionType !== 'API') {
631
+ // 🔹 Local search
632
+ if (searchTerm && searchTerm.trim() !== '') {
633
+ const lowerSearch = searchTerm.toLowerCase();
634
+ this.customOptions = this.originalOptions.filter((option) =>
635
+ option.label?.toLowerCase().includes(lowerSearch)
636
+ );
637
+ } else {
638
+ // Reset to full list when search is cleared
639
+ this.customOptions = [...this.originalOptions];
640
+ }
641
+ }
642
+ else {
643
+ // 🔹 API search
644
+ if (searchTerm && searchTerm.trim() !== '') {
645
+ // Inject search term into API config (headers or params)
646
+ this.injectSearchString(searchTerm.trim());
647
+ } else {
648
+ // 🔹 Clear the search string from API config when input is empty
649
+ this.injectSearchString('');
650
+ }
651
+
652
+ // Reset pagination
653
+ this.hasMoreData = true;
654
+ // Fetch fresh results
655
+ this.fetchDataFromAPI(false, true);
656
+ }
657
+ }
658
+
659
+ injectSearchString(searchTerm: string) {
660
+ // Always work on a fresh copy, don’t mutate this.api directly
661
+ this.api = JSON.parse(JSON.stringify(this.originalApi));
662
+
663
+ if (this.api?.params) {
664
+ this.api.params.forEach((p: any) => {
665
+ if (p.valueSource === 'SEARCH_STRING') {
666
+ p.inputValue = searchTerm;
667
+ }
668
+ });
669
+ }
670
+
671
+ if (this.api?.headers) {
672
+ this.api.headers.forEach((h: any) => {
673
+ if (h.valueSource === 'SEARCH_STRING') {
674
+ h.inputValue = searchTerm;
675
+ }
676
+ });
677
+ }
678
+ }
679
+
680
+ ngAfterViewInit() {
681
+ if (this.inLine || this.inCard) {
682
+ this.elementId = `question-${this.submissionIndex}-${this.question.id}`;
683
+ } else {
684
+ this.elementId = `question-${this.question.id}`;
685
+ }
686
+
687
+ this.tracker.registerElement(this.elementId);
688
+ setTimeout(() => {
689
+ this.whenClauseService.markLoadCompleted();
690
+ });
691
+ }
692
+
693
+ ngOnDestroy() {
694
+ if (this.elementId) {
695
+ this.tracker.unregisterElement(this.elementId);
696
+ }
697
+ }
698
+ }